diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 00000000..8c8c7f30 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,73 @@ +Contributing to ArmaLife +======================= + +ArmaLife is a GitHub project which aims to update and keep adding new features to the original '[Altis Life RPG](https://github.com/TAWTonic/Altis-Life)' by [Tonic](https://github.com/TAWTonic). + +## Guidelines + +1. **Don't break the build**: We have a simple continuous integration system setup with [Travis](https://travis-ci.org/ArmaLife/Framework). If your pull request does not pass then it will not be merged. Travis will only check your changes after you submit a pull request. +2. **Search before posting**: It is likely that what you have to say has already been said. Use the search function to see if someone else has already made a similar issue or pull request. +3. **Test, test, and test**: Test your changes thoroughly prior to submitting a pull request. If you were unable to test your changes then ask if someone else can test them for you in your pull request message. Take it a step further and test another person's pull request and report your result to them. +4. **Bug fixes over features**: New features may be cool, but ideally bug fixes and optimisations for existing features should be prioritised above implementing new features. + +## Issues +#### Before creating a new issue make sure to... +* **...check that the issue you are reporting does not already exist.** + * If it does exist and it is still open then you may wish to add more information to that issue in a comment. + * If it does exist but it has been closed then comment on **that** issue instead of creating a new one. An [organisation member](https://github.com/orgs/ArmaLife/people) will then decide if the issue needs to be reopened. +* **...check that you are using the latest files from the master branch.** + * If your files are behind then it is possible that the issue you are reporting has already been fixed in a recent commit. +* **...check that you have not modified the files from what is on the repository.** + * If your files are different from what is on the repository then it is possible that a change that you made is what is causing the issue. +* **...check that you can reproduce the issue**. + * If you cannot reproduce the issue then it can be very difficult to fix it. + +#### When creating a new issue make sure to... +* **...give your issue a descriptive but concise title.** + * Straightaway anyone should be able to understand what the issue is about just by reading the title. + * Avoid making the title ambiguous or a sentence that is finished in the body of your issue. +* **...provide as much detail as necessary about the issue.** + * Describe what should have occurred. Provide screenshots or video footage if applicable. + * Describe what actually occurred. Provide screenshots or video footage if applicable. + * If you can reproduce the behaviour then also provide steps on how to do so. + * If errors or other messages were output to the game's [RPT](https://community.bistudio.com/wiki/Crash_Files) and/or extDB2 log files then paste those messages into your issue. If the errors or other messages are so long that they cover the whole screen then upload the log files to GitHub instead of pasting them into the issue. + * Include the version of *Arma 3* that you are using. You can acquire this info by starting the *Arma 3* launcher, clicking OPTIONS, and then clicking the version information displayed below. This will copy the info to your clipboard which you can then paste at the bottom of your issue. +* **...tag your issue with all applicable labels (if you have the permissions to do so).** + * See [applying labels to issues and pull requests](https://help.github.com/articles/applying-labels-to-issues-and-pull-requests/). +* **...associate a milestone to better track its progress (if you have the permissions to do so).** + * See [associating milestones with issues and pull requests](https://help.github.com/articles/associating-milestones-with-issues-and-pull-requests/). +* **...assign yourself to the issue (if you intend to solve it and if you have the permissions to do so).** + * See [assigning issues and pull requests to other GitHub users](https://help.github.com/articles/assigning-issues-and-pull-requests-to-other-github-users/). + +## Pull Requests +* If your pull request fixes an existing issue then be sure to associate your pull request with the issue. This means that if your pull request is merged then the corresponding issue will automatically be closed. See [closing issues via commit messages](https://help.github.com/articles/closing-issues-via-commit-messages/) for what keywords to use. +* If your pull request fixes an issue that has not been reported then be sure to clearly specify the fix in your pull request message. +* If your pull request adds a new feature to the mission then... + * ...decide if the mission would actually benefit from your new feature. You may wish to create an issue to discuss the implementation of your feature with other contributors. + * ...if others think that your feature should be implemented then go ahead and submit a pull request. + * ...if not then instead consider posting a tutorial on the [Altis Life RPG forums](http://www.altisliferpg.com/) on how to implement it. + * ...be sure to thoroughly test your code for any errors and, if applicable, possible exploits. + * ...optimise your code to have as little impact on performance as possible. See [code optimisation](https://community.bistudio.com/wiki/Code_Optimisation) on the Bohemia Interactive Wiki for more information. + * ...if applicable, be sure to update the [BattlEye filters](https://github.com/ArmaLife/Framework/tree/master/BEFilters) and [SpyGlass variables](https://github.com/ArmaLife/Framework/blob/master/life_client/config/Config_SpyGlass.hpp) to be compatible with your changes. If you are unsure on how to do so then ask if someone else would be kind enough to do so for you. + +### Help! The Travis CI build failed! +* If the Travis CI build on your pull request fails then Travis may have detected a syntax error in the code. Click "Show all checks" near the bottom of your pull request and then click "Details" next to the check that failed. Search for "ERROR" to find what is causing the check to fail. +* If the error is... + * ...possible missing white space after if detected then you need to add a space after the `if`. + * Example: `if (condition) then { code } else { code }` + * ...possible missing [round/square/curly] [bracket/brace] detected then check the syntax of your code. An [SQF syntax highlighter](https://www.google.com.au/search?q=SQF+syntax+highlighter&rlz=1C1ASRM_enAU584AU584&oq=SQF+syntax+highlighter&aqs=chrome..69i57.620j0j7&sourceid=chrome&ie=UTF-8) may be useful. + * ...possible missing semi-colon detected then add a `;` where it is needed. + * ...tab detected then you need to indent with four (4) spaces for each one (1) tab. + +## Can I help? +* If you are competent in any of the below then you have what it takes to help us expand and improve upon this framework. + * [SQF](https://community.bistudio.com/wiki/SQF_syntax) - Scripting. + * [SQL](https://en.wikipedia.org/wiki/SQL) - Database structure. + * [C++](https://en.wikipedia.org/wiki/C%2B%2B) - Configs and [dialogs](https://community.bistudio.com/wiki/Dialog_Control). + * [Regular expressions](http://www.regular-expressions.info/) (Regex) - Enhanced [BattlEye filter](https://github.com/ArmaLife/Framework/tree/master/BEFilters) functionality. + * English, Czech, French, Spanish, Italian, Polish, Portuguese, Russian, or German - [Stringtable](https://community.bistudio.com/wiki/Stringtable.xml) localisation. +* If not, but you can setup and run your own server, then you can help us test the build for bugs, exploits, security and performance issues. +* See [issues](https://github.com/ArmaLife/Framework/issues) for a full list of all open tasks and bugs. If you would like to work on a solution to an issue then please leave a comment on that issue so that others know a solution is in progress. + +## Contact +If you need to chat with us in real-time then you can do so on [our Discord server](https://discordapp.com/invite/0z4k0hcAcvMl2SQx) or on Gitter in our [development chatroom](https://gitter.im/ArmaLife/Framework) or [support chatroom](https://gitter.im/ArmaLife/Framework/Support). Please note that the development chatroom is for discussing changes with files on the repository whereas the support chatroom is for issues not related to the current build. diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 00000000..1defe06f --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,21 @@ +### Expected behaviour + + +### Actual behaviour + + +### Steps to reproduce the behaviour +1. + +### RPT and/or extDB2 logs (if applicable) + + + + +---- + +Launcher version: + +Game version: + +Branch: diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..2b954a3c --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,4 @@ +Resolves #. + +#### Changes proposed in this pull request: +- diff --git a/.gitignore b/.gitignore index dce3a05a..afb42c3e 100644 --- a/.gitignore +++ b/.gitignore @@ -11,13 +11,32 @@ # .* *~ -*.so -*.dll *.zip *.rar *.bak + +# +# Windows Files +# +*.dll *.bat *.exe +Thumbs.db + +# +# Linux Files +# +*.so +*.sh +.fuse_hidden* +.Trash-* + +# +# OSX Files +# +.DS_Store +.AppleDouble +.LSOverride # # Bohemia Packed Files @@ -27,6 +46,12 @@ *.ebo *.ifa +# +# IntelliJ IDEA Files +# +.idea/ +*.iml + # # git files that we don't want to ignore even it they are dot-files # diff --git a/.travis.yml b/.travis.yml new file mode 100755 index 00000000..06013b8d --- /dev/null +++ b/.travis.yml @@ -0,0 +1,10 @@ +language: python +python: +- '3.5' +before_script: +# Credits to ACE3 for these validators +- wget https://raw.githubusercontent.com/ArmaLife/travis_files/master/sqf_validator.py +- wget https://raw.githubusercontent.com/ArmaLife/travis_files/master/config_style_checker.py +script: +- python3 sqf_validator.py +- python3 config_style_checker.py diff --git a/@extDB2/extDB/sql_custom_v2/altis-life.ini b/@extDB2/extDB/sql_custom_v2/altis-life.ini deleted file mode 100644 index 1d16c58b..00000000 --- a/@extDB2/extDB/sql_custom_v2/altis-life.ini +++ /dev/null @@ -1,617 +0,0 @@ -[Default] -Version = 10 - -Number of Inputs = 0 - -;;Sanitize Checks are better than Strip Characters, but only accept ASCII Characters -;;Requires abit more work to setup correctly. -Sanitize Input Value Check = false -Sanitize Output Value Check = false - -;;Allows you to disable Prepared Statement Caching. -;;Mainly for people that don't want to waste memory on caching a Statement that is only once. -Prepared Statement Cache = true - -;;Returns InsertID, Instead of returning [1,[]] It returns [1,[,[]]] -Return InsertID = false - -;;Strip Characters -Strip = true -;;Possible Actions Are "Strip" / "Strip+Log" / "Strip+Error" / "None" -Strip Chars Action = STRIP -Strip Chars = /\|;{}<>'` -;;Strip Chars Used for $CUSTOM_x$ Inputs -Strip Custom Chars = /\|;{}<>'` - - - -;;************************************************************** -;;************************************************************** -;; PROCEDURE CALLS -;; - - -;;______________________________________________________________ -[resetLifeVehicles] -;; - -SQL1_1 = CALL resetLifeVehicles; - -Number of Inputs = 0 -Prepared Statement Cache = false - - -;;______________________________________________________________ -[deleteDeadVehicles] -;; - -SQL1_1 = CALL deleteDeadVehicles; - -Number of Inputs = 0 -Prepared Statement Cache = false - - -;;______________________________________________________________ -[deleteOldHouses] -;; - -SQL1_1 = CALL deleteOldHouses; - -Number of Inputs = 0 -Prepared Statement Cache = false - - -;;______________________________________________________________ -[deleteOldGangs] -;; - -SQL1_1 = CALL deleteOldGangs; - -Number of Inputs = 0 -Prepared Statement Cache = false - - - -;;************************************************************** -;;************************************************************** -;; GANGS -;; - - -;;______________________________________________________________ -[gangIDPlayer] -;; - -SQL1_1 = SELECT id FROM gangs WHERE members LIKE ? AND active='1'; - -Number of Inputs = 1 -SQL1_INPUTS = 1 - - -;;______________________________________________________________ -[gangNameSelectID] -;; - -SQL1_1 = SELECT id FROM gangs WHERE name=? AND active=?; - -SQL1_INPUTS = 1, 2 -Number of Inputs = 2 - - -;;______________________________________________________________ -[gangOwnerSelectID] -;; - -SQL1_1 = SELECT id FROM gangs WHERE owner=? AND active=?; - -SQL1_INPUTS = 1, 2 -Number of Inputs = 2 - -;;______________________________________________________________ -[gangInsert] -;; - -SQL1_1 = INSERT INTO gangs (owner, name, members) VALUES(?,?,?); -SQL1_INPUTS = 1, 2, 3 - -Number of Inputs = 3 - - -;;______________________________________________________________ -[gangUpdate] -;; - -SQL1_1 = UPDATE gangs SET active=1, owner=?,members=? WHERE id=?; - -Number of Inputs = 3 -SQL1_INPUTS = 1, 2, 3 - - -;;______________________________________________________________ -[gangRemove] -;; - -SQL1_1 = UPDATE gangs SET active='0' WHERE id=?; -SQL1_INPUTS = 1 - -Number of Inputs = 1 - - -;;______________________________________________________________ -[gangInfo] -;; Get Gang Info -;; - -SQL1_1 = SELECT id, owner, name, maxmembers, bank, members FROM gangs WHERE active='1' AND members LIKE ?; -SQL1_INPUTS = 1 - -Number of Inputs = 1 -OUTPUT = 1, 2-String, 3-String, 4, 5, 6 - - -;;______________________________________________________________ -[gangBankInfoUpdate] -;; Update Gang Bank -;; - -SQL1_1 = UPDATE gangs SET bank=? WHERE id=?; -SQL1_INPUTS = 1, 2 - -Number of Inputs = 2 - - -;;______________________________________________________________ -[gangInfoUpdate] -;; Update Gang Info -;; - -SQL1_1 = UPDATE gangs SET bank=?, maxmembers=?, owner=? WHERE id=?; -SQL1_INPUTS = 1, 2, 3-String, 4 - -Number of Inputs = 4 - - -;;______________________________________________________________ -[gangMaxMembersUpdate] -;; Update Gang Max Members -;; - -SQL1_1 = UPDATE gangs SET maxmembers=? WHERE id=?; -SQL1_INPUTS = 1, 2 - -Number of Inputs = 2 - - -;;______________________________________________________________ -[gangMembersUpdate] -;; Update Gang Members -;; - -SQL1_1 = UPDATE gangs SET members=? WHERE id=?; -SQL1_INPUTS = 1, 2 - -Number of Inputs = 2 - - -;;______________________________________________________________ -[gangOwnerUpdate] -;; Update Gang Owner -;; - -SQL1_1 = UPDATE gangs SET owner=? WHERE id=?; -SQL1_INPUTS = 1, 2 - -Number of Inputs = 2 - - -;;************************************************************** -;;************************************************************** -;; PLAYERS -;; - -;;______________________________________________________________ -[playerInfo] -;; - -SQL1_1 = SELECT playerid, name FROM players WHERE playerid=?; -SQL1_INPUTS = 1 - -Number of Inputs = 1 -OUTPUT = 1-STRING, 2 - -;;______________________________________________________________ -[playerInfoInsert] -;; - -SQL1_1 = INSERT INTO players -;; 1 2 3 4 5 6 7 8 9 10 11 -SQL1_2 = (playerid, name, cash, bankacc, aliases, cop_licenses, med_licenses, civ_licenses, civ_gear, cop_gear, med_gear) -SQL1_3 = VALUES(?,?,?,?,?,?,?,?,?,?,?); - -SQL1_INPUTS = 1, 2-STRING, 3, 4, 5, 6, 7, 8, 9, 10, 11 - -Number of Inputs = 11 - -;;______________________________________________________________ -[playerWestInfo] -;; -;; 1 2 3 4 5 6 7 8 9 10 -SQL1_1 = SELECT playerid, name, cash, bankacc, adminlevel, donatorlvl, cop_licenses, coplevel, cop_gear, blacklist FROM players WHERE playerid=?; -SQL1_INPUTS = 1 - -Number of Inputs = 1 -OUTPUT = 1-String, 2-String, 3, 4, 5-String, 6-String, 7, 8-String, 9, 10 - -;;______________________________________________________________ -[playerCivInfo] -;; -;; 1 2 3 4 5 6 7 8 9 -SQL1_1 = SELECT playerid, name, cash, bankacc, adminlevel, donatorlvl, civ_licenses, arrested, civ_gear FROM players WHERE playerid=?; -SQL1_INPUTS = 1 - -Number of Inputs = 1 -OUTPUT = 1-String, 2-String, 3, 4, 5-String, 6-String, 7, 8-String, 9 - -;;______________________________________________________________ -[playerIndependentInfo] -;; -;; 1 2 3 4 5 6 7 8 9 -SQL1_1 = SELECT playerid, name, cash, bankacc, adminlevel, donatorlvl, med_licenses, mediclevel, med_gear FROM players WHERE playerid=?; -SQL1_INPUTS = 1 - -Number of Inputs = 1 -OUTPUT = 1-String, 2-String, 3, 4, 5-String, 6-String, 7, 8-String, 9 - -;;______________________________________________________________ -[playerWestUpdate] -;; - -SQL1_1 = UPDATE players -;; 1 2 3 4 5 6 -SQL1_2 = SET name=?, cash=?, bankacc=?, cop_gear=?, cop_licenses=? WHERE playerid=? - -SQL1_INPUTS = 1, 2, 3, 4, 5, 6 - -Number of Inputs = 6 - - -;;______________________________________________________________ -[playerCivilianUpdate] -;; - -SQL1_1 = UPDATE players -;; 1 2 3 4 5 6 7 -SQL1_2 = SET name=?, cash=?, bankacc=?, civ_licenses=?, civ_gear=?, arrested=? WHERE playerid=?; - -SQL1_INPUTS = 1, 2, 3, 4, 5, 6, 7 - -Number of Inputs = 7 - - -;;______________________________________________________________ -[playerIndependentUpdate] -;; - -SQL1_1 = UPDATE players -;; 1 2 3 4 5 6 -SQL1_2 = SET name=?, cash=?, bankacc=?, med_licenses=?, med_gear=? WHERE playerid=?; - -SQL1_INPUTS = 1, 2, 3, 4, 5, 6 - -Number of Inputs = 6 - - -;;______________________________________________________________ -[playerUpdateCash] -;; - -SQL1_1 = UPDATE players -SQL1_2 = SET cash=? WHERE playerid=?; - -SQL1_INPUTS = 1, 2 -Number of Inputs = 2 - - -;;______________________________________________________________ -[playerUpdateBank] -;; - -SQL1_1 = UPDATE players -SQL1_2 = SET bankacc=? WHERE playerid=?; - -SQL1_INPUTS = 1, 2 -Number of Inputs = 2 - - -;;______________________________________________________________ -[playerUpdateBank+Cash] -;; - -SQL1_1 = UPDATE players -SQL1_2 = SET cash=?, bankacc=? WHERE playerid=?; - -SQL1_INPUTS = 1, 2, 3 -Number of Inputs = 3 - - -;;______________________________________________________________ -[playerUpdateCopLicense] -;; - -SQL1_1 = UPDATE players -SQL1_2 = SET cop_licenses=? WHERE playerid=?; - -SQL1_INPUTS = 1, 2 -Number of Inputs = 2 - - -;;______________________________________________________________ -[playerUpdateCivLicense] -;; - -SQL1_1 = UPDATE players -SQL1_2 = SET civ_licenses=? WHERE playerid=?; - -SQL1_INPUTS = 1, 2 -Number of Inputs = 2 - - -;;______________________________________________________________ -[playerUpdateMedLicense] -;; - -SQL1_1 = UPDATE players -SQL1_2 = SET med_licenses=? WHERE playerid=?; - -SQL1_INPUTS = 1, 2 -Number of Inputs = 2 - - -;;______________________________________________________________ -[playerUpdateCopGear] -;; - -SQL1_1 = UPDATE players -SQL1_2 = SET cop_gear=? WHERE playerid=?; - -SQL1_INPUTS = 1, 2 -Number of Inputs = 2 - - -;;______________________________________________________________ -[playerUpdateCivGear] -;; - -SQL1_1 = UPDATE players -SQL1_2 = SET civ_gear=? WHERE playerid=?; - -SQL1_INPUTS = 1, 2 -Number of Inputs = 2 - - -;;______________________________________________________________ -[playerUpdateMedGear] -;; - -SQL1_1 = UPDATE players -SQL1_2 = SET med_gear=? WHERE playerid=?; - -SQL1_INPUTS = 1, 2 -Number of Inputs = 2 - - -;;______________________________________________________________ -[playerUpdateAlive] -;; - -SQL1_1 = UPDATE players -SQL1_2 = SET alive=? WHERE playerid=?; - -SQL1_INPUTS = 1, 2 -Number of Inputs = 2 - - -;;______________________________________________________________ -[playerUpdateArrested] -;; - -SQL1_1 = UPDATE players -SQL1_2 = SET arrested=? WHERE playerid=?; - -SQL1_INPUTS = 1, 2 -Number of Inputs = 2 - - -;;************************************************************** -;;************************************************************** -;; VEHICLES -;; - -;;______________________________________________________________ -[vehicleDead] -;; - -SQL1_1 = UPDATE vehicles SET alive=? WHERE pid=? AND plate=?; - -SQL1_INPUTS = 1, 2, 3 -Number of Inputs = 3 - -;;______________________________________________________________ -[vehicleInsert] -;; - -SQL1_1 = INSERT INTO vehicles -;; 1 2 3 4 5 6 7 8 9 -SQL1_2 = (side, classname, type, pid, alive, active, inventory, color, plate) -SQL1_3 = VALUES (?,?,?,?,?,?,?,?,?); - -SQL1_INPUTS = 1, 2, 3, 4, 5, 6, 7, 8, 9 -Number of Inputs = 9 - - -;;______________________________________________________________ -[vehicleInfo] -;; - -;; 1 2 3 4 5 6 7 8 9 -SQL1_1 = SELECT id, side, classname, type, pid, alive, active, plate, color -SQL1_2 = FROM vehicles WHERE id=? AND pid=?; -SQL1_INPUTS = 1, 2 -Number of Inputs = 2 - -OUTPUT = 1, 2-String, 3-String, 4-String, 5-String, 6, 7, 8, 9 - - -;;______________________________________________________________ -[vehiclesInfo] -;; - -;; 1 2 3 4 5 6 7 8 9 -SQL1_1 = SELECT id, side, classname, type, pid, alive, active, plate, color -SQL1_2 = FROM vehicles WHERE pid=? AND alive=1 AND active = 0 AND side=? AND type=?; -SQL1_INPUTS = 1, 2, 3 -Number of Inputs = 3 - -OUTPUT = 1, 2-String, 3-String, 4-String, 5-String, 6, 7, 8, 9 - - -;;______________________________________________________________ -[vehicleUpdateActive] -;; - -SQL1_1 = UPDATE vehicles SET active=? WHERE pid=? AND id=?; - -SQL1_INPUTS = 1, 2, 3 -Number of Inputs = 3 - - -;;______________________________________________________________ -[vehicleUpdateActivePlate] -;; - -SQL1_1 = UPDATE vehicles SET active=? WHERE pid=? AND plate=?; - -SQL1_INPUTS = 1, 2, 3 -Number of Inputs = 3 - - - -;;______________________________________________________________ -[vehicleUpdateAlive] -;; - -SQL1_1 = UPDATE vehicles SET alive=? WHERE pid=? AND id=?; - -SQL1_INPUTS = 1, 2, 3 -Number of Inputs = 3 - - -;;______________________________________________________________ -[vehicleUpdateAlivePlate] -;; - -SQL1_1 = UPDATE vehicles SET alive=? WHERE pid=? AND plate=?; - -SQL1_INPUTS = 1, 2, 3 -Number of Inputs = 3 - -;;************************************************************** -;;************************************************************** -;; Houses -;; - - -;;______________________________________________________________ -[housingCount] -;; - -SQL1_1 = SELECT COUNT(*) FROM houses WHERE owned='1'; - -Number of Inputs = 0 - -;;______________________________________________________________ -[housingInit] -;; - -SQL1_1 = SELECT houses.id, houses.pid, houses.pos, players.name FROM houses INNER JOIN players ON houses.pid=players.playerid WHERE houses.owned='1' LIMIT ?,10; - -SQL1_INPUTS = 1 -Number of Inputs = 1 - -OUTPUT = 1, 2-String, 3-String, 4-String - -;;______________________________________________________________ -[housingFetchPlayerHouse] -;; -SQL1_1 = SELECT pid, pos, inventory, containers FROM houses WHERE pid=? AND owned='1'; - -SQL1_INPUTS = 1 -Number of Inputs = 1 - -OUTPUT = 1-String, 2-String, 3, 4 - -;;______________________________________________________________ -[housingCheckHouse] -;; - -SQL1_1 = SELECT CASE -SQL1_2 = WHEN EXISTS(SELECT id FROM houses WHERE pos=? AND owned='1') -SQL1_3 = THEN 'true' ELSE 'false' -SQL1_4 = END - -SQL1_INPUTS = 1 -Number of Inputs = 1 - -OUTPUT = 1 - -;;______________________________________________________________ -[housingAddHouse] -;; -SQL1_1 = INSERT INTO houses (pid, pos, inventory, containers, owned) -SQL1_2 = VALUES(?,?,?,?,?); -SQL1_INPUTS = 1, 2, 3, 4, 5 -SQL2_1 = SELECT id FROM houses WHERE pos=? AND pid=? AND owned='1'; -SQL2_INPUTS = 2, 1 - -Number of Inputs = 5 -OUTPUT = 1 - -;;______________________________________________________________ -[housingSellHouse] -;; -SQL1_1 = UPDATE houses SET owned='0', pos='[]' WHERE pid=? AND pos=? AND owned='1'; -SQL1_INPUTS = 1, 2, 3 - -Number of Inputs = 3 - -;;______________________________________________________________ -[housingSellHouse2] -;; -SQL1_1 = UPDATE houses SET owned='0', pos='[]' WHERE id=?; -SQL1_INPUTS = 1 - -Number of Inputs = 1 - -;;______________________________________________________________ -[houseUpdateContainer] -;; -SQL1_1 = UPDATE houses SET containers=? WHERE id=?; -SQL1_INPUTS = 1, 2 - -Number of Inputs = 2 - -;;______________________________________________________________ -[housingUpdateInventory] -;; -SQL1_1 = UPDATE houses SET inventory=? WHERE id=?; -SQL1_INPUTS = 1, 2 - -Number of Inputs = 2 - -;;______________________________________________________________ -[housingCleanup] -;; -SQL1_1 = SELECT pid, pos, inventory, containers FROM houses WHERE pid=? AND owned='1'; -SQL1_INPUTS = 1 - -Number of Inputs = 1 diff --git a/life_server/Functions/Client/fn_updateMoney.sqf b/Altis_Life.Altis/@ COPY FILES FROM LIFE_CLIENT HERE @ similarity index 100% rename from life_server/Functions/Client/fn_updateMoney.sqf rename to Altis_Life.Altis/@ COPY FILES FROM LIFE_CLIENT HERE @ diff --git a/Altis_Life.Altis/CfgRemoteExec.hpp b/Altis_Life.Altis/CfgRemoteExec.hpp deleted file mode 100644 index 766452bb..00000000 --- a/Altis_Life.Altis/CfgRemoteExec.hpp +++ /dev/null @@ -1,128 +0,0 @@ -#define F(NAME,TARGET) class NAME { \ - allowedTargets = TARGET; \ -}; - -#define ANYONE 0 -#define CLIENT 1 -#define SERVER 2 - -class CfgRemoteExec { - class Functions { - mode = 1; - jip = 0; - - /* Client only functions */ - F(life_fnc_jail,CLIENT) - F(life_fnc_moveIn,CLIENT) - F(life_fnc_restrain,CLIENT) - F(life_fnc_robPerson,CLIENT) - F(life_fnc_searchClient,CLIENT) - F(TON_fnc_player_query,CLIENT) - F(life_fnc_knockedOut,CLIENT) - F(life_fnc_robReceive,CLIENT) - F(life_fnc_tazeSound,CLIENT) - F(life_fnc_copSiren,CLIENT) - F(life_fnc_medicSiren,CLIENT) - F(life_fnc_giveDiff,CLIENT) - F(life_fnc_gangInvite,CLIENT) - F(TON_fnc_clientGangKick,CLIENT) - F(TON_fnc_clientGangLeader,CLIENT) - F(TON_fnc_clientGangLeft,CLIENT) - F(life_fnc_lightHouse,CLIENT) - F(life_fnc_medicRequest,CLIENT) - F(life_fnc_revived,CLIENT) - F(life_fnc_receiveItem,CLIENT) - F(life_fnc_receiveMoney,CLIENT) - F(TON_fnc_clientGetKey,CLIENT) - F(life_fnc_soundDevice,CLIENT) - F(life_fnc_wireTransfer,CLIENT) - F(life_fnc_pickupMoney,CLIENT) - F(life_fnc_pickupItem,CLIENT) - F(life_fnc_gangCreated,CLIENT) - F(life_fnc_gangDisbanded,CLIENT) - F(life_fnc_jailMe,CLIENT) - F(SOCK_fnc_dataQuery,CLIENT) - F(SOCK_fnc_insertPlayerInfo,CLIENT) - F(SOCK_fnc_requestReceived,CLIENT) - F(life_fnc_adminid,CLIENT) - F(life_fnc_impoundMenu,CLIENT) - F(life_fnc_garageRefund,CLIENT) - F(life_fnc_addVehicle2Chain,CLIENT) - F(life_fnc_vehicleAnimate,CLIENT) - F(life_fnc_spikeStripEffect,CLIENT) - F(life_fnc_bountyReceive,CLIENT) - F(life_fnc_wantedList,CLIENT) - F(life_fnc_removeLicenses,CLIENT) - F(life_fnc_admininfo,CLIENT) - F(TON_fnc_clientMessage,CLIENT) - F(life_fnc_licenseCheck,CLIENT) - F(life_fnc_licensesRead,CLIENT) - F(life_fnc_copSearch,CLIENT) - F(life_fnc_copLights,CLIENT) - F(life_fnc_ticketPrompt,CLIENT) - F(life_fnc_ticketPaid,CLIENT) - F(life_fnc_freezePlayer,CLIENT) - - /* Server only functions */ - F(bis_fnc_execvm,SERVER) - F(life_fnc_wantedBounty,SERVER) - F(TON_fnc_getID,SERVER) - F(life_fnc_jailSys,SERVER) - F(life_fnc_wantedRemove,SERVER) - F(life_fnc_wantedAdd,SERVER) - F(TON_fnc_insertGang,SERVER) - F(TON_fnc_removeGang,SERVER) - F(TON_fnc_updateGang,SERVER) - F(TON_fnc_updateHouseTrunk,SERVER) - F(TON_fnc_sellHouse,SERVER) - F(TON_fnc_managesc,SERVER) - F(TON_fnc_spikeStrip,SERVER) - F(life_fnc_wantedPardon,SERVER) - F(life_fnc_wantedFetch,SERVER) - F(DB_fnc_queryRequest,SERVER) - F(DB_fnc_insertRequest,SERVER) - F(DB_fnc_updatePartial,SERVER) - F(DB_fnc_updateRequest,SERVER) - F(TON_fnc_chopShopSell,SERVER) - F(TON_fnc_setObjVar,SERVER) - F(TON_fnc_keyManagement,SERVER) - F(TON_fnc_vehicleDelete,SERVER) - F(TON_fnc_spawnVehicle,SERVER) - F(TON_fnc_getVehicles,SERVER) - F(TON_fnc_vehicleStore,SERVER) - F(SPY_fnc_observe,SERVER) - F(TON_fnc_pickupAction,SERVER) - F(TON_fnc_cleanupRequest,SERVER) - F(TON_fnc_updateHouseContainers,SERVER) - F(SPY_fnc_cookieJar,SERVER) - F(TON_fnc_vehicleCreate,SERVER) - F(TON_fnc_addHouse,SERVER) - - /* Functions for everyone */ - F(life_fnc_broadcast,ANYONE) - F(life_fnc_animSync,ANYONE) - F(life_fnc_demoChargeTimer,ANYONE) - F(life_fnc_corpse,ANYONE) - F(life_fnc_colorVehicle,ANYONE) - F(life_fnc_lockVehicle,ANYONE) - F(life_fnc_flashbang,ANYONE) - F(life_fnc_jumpFnc,ANYONE) - F(SPY_fnc_notifyAdmins,ANYONE) - F(life_fnc_setFuel,ANYONE) - F(life_fnc_pulloutVeh,ANYONE) - F(life_fnc_pushFunction,ANYONE) - F(life_fnc_simDisable,ANYONE) - - }; - - class Commands { - mode = 1; - jip = 0; - - F(setFuel,ANYONE) - F(addWeapon,ANYONE) - F(addMagazine,ANYONE) - F(addPrimaryWeaponItem,ANYONE) - F(addHandgunItem,ANYONE) - }; -}; diff --git a/Altis_Life.Altis/Config_Clothing.hpp b/Altis_Life.Altis/Config_Clothing.hpp deleted file mode 100644 index 1c71dd2d..00000000 --- a/Altis_Life.Altis/Config_Clothing.hpp +++ /dev/null @@ -1,269 +0,0 @@ -/* -* ARRAY FORMAT: -* 0: STRING (Classname) -* 1: STRING (Display Name, leave as "" for default) -* 2: SCALAR (Price) -* 4: ARRAY (This is for limiting items to certain things) -* 0: Variable to read from -* 1: Variable Value Type (SCALAR / BOOL / EQUAL) -* 2: What to compare to (-1 = Check Disabled) -*/ -class Clothing { - class bruce { - title = "STR_Shops_C_Bruce"; - license = ""; - side = "civ"; - uniforms[] = { - { "NONE", "Remove Uniform", 0, { "", "", -1 } }, - { "U_C_Poloshirt_blue", "Poloshirt Blue", 250, { "", "", -1 } }, - { "U_C_Poloshirt_burgundy", "Poloshirt Burgundy", 275, { "", "", -1 } }, - { "U_C_Poloshirt_redwhite", "Poloshirt Red/White", 150, { "", "", -1 } }, - { "U_C_Poloshirt_salmon", "Poloshirt Salmon", 175, { "", "", -1 } }, - { "U_C_Poloshirt_stripped", "Poloshirt stripped", 125, { "", "", -1 } }, - { "U_C_Poloshirt_tricolour", "Poloshirt Tricolor", 350, { "", "", -1 } }, - { "U_C_Poor_2", "Rag tagged clothes", 250, { "", "", -1 } }, - { "U_IG_Guerilla2_2", "Green stripped shirt & Pants", 650, { "", "", -1 } }, - { "U_IG_Guerilla3_1", "Brown Jacket & Pants", 735, { "", "", -1 } }, - { "U_IG_Guerilla2_3", "The Outback Rangler", 1200, { "", "", -1 } }, - { "U_C_HunterBody_grn", "The Hunters Look", 1500, { "", "", -1 } }, - { "U_C_WorkerCoveralls", "Mechanic Coveralls", 2500, { "", "", -1 } }, - { "U_OrestesBody", "Surfing On Land", 1100, { "", "", -1 } }, - { "U_NikosAgedBody", "Casual Wears", 5000, { "", "", -1 } } - }; - headgear[] = { - { "NONE", "Remove Hat", 0, { "", "", -1 } }, - { "H_Bandanna_camo", "Camo Bandanna", 120, { "", "", -1 } }, - { "H_Bandanna_surfer", "Surfer Bandanna", 130, { "", "", -1 } }, - { "H_Bandanna_gry", "Grey Bandanna", 150, { "", "", -1 } }, - { "H_Bandanna_cbr", "", 165, { "", "", -1 } }, - { "H_Bandanna_surfer", "", 135, { "", "", -1 } }, - { "H_Bandanna_khk", "Khaki Bandanna", 145, { "", "", -1 } }, - { "H_Bandanna_sgg", "Sage Bandanna", 160, { "", "", -1 } }, - { "H_StrawHat", "Straw Fedora", 225, { "", "", -1 } }, - { "H_BandMask_blk", "Hat & Bandanna", 300, { "", "", -1 } }, - { "H_Booniehat_tan", "", 425, { "", "", -1 } }, - { "H_Hat_blue", "", 310, { "", "", -1 } }, - { "H_Hat_brown", "", 276, { "", "", -1 } }, - { "H_Hat_checker", "", 340, { "", "", -1 } }, - { "H_Hat_grey", "", 280, { "", "", -1 } }, - { "H_Hat_tan", "", 265, { "", "", -1 } }, - { "H_Cap_blu", "", 150, { "", "", -1 } }, - { "H_Cap_grn", "", 150, { "", "", -1 } }, - { "H_Cap_grn_BI", "", 150, { "", "", -1 } }, - { "H_Cap_oli", "", 150, { "", "", -1 } }, - { "H_Cap_red", "", 150, { "", "", -1 } }, - { "H_Cap_tan", "", 150, { "", "", -1 } } - }; - goggles[] = { - { "NONE", "Remove Glasses", 0, { "", "", -1 } }, - { "G_Shades_Black", "", 25, { "", "", -1 } }, - { "G_Shades_Blue", "", 20, { "", "", -1 } }, - { "G_Sport_Blackred", "", 20, { "", "", -1 } }, - { "G_Sport_Checkered", "", 20, { "", "", -1 } }, - { "G_Sport_Blackyellow", "", 20, { "", "", -1 } }, - { "G_Sport_BlackWhite", "", 20, { "", "", -1 } }, - { "G_Squares", "", 10, { "", "", -1 } }, - { "G_Aviator", "", 100, { "", "", -1 } }, - { "G_Lady_Mirror", "", 150, { "", "", -1 } }, - { "G_Lady_Dark", "", 150, { "", "", -1 } }, - { "G_Lady_Blue", "", 150, { "", "", -1 } }, - { "G_Lowprofile", "", 30, { "", "", -1 } }, - { "G_Combat", "", 55, { "", "", -1 } } - }; - vests[] = { - { "NONE", "Remove Vest", 0, { "", "", -1 } } - }; - backpacks[] = { - { "NONE", "Remove Backpack", 0, { "", "", -1 } }, - { "B_AssaultPack_cbr", "", 2500, { "", "", -1 } }, - { "B_Kitbag_mcamo", "", 4500, { "", "", -1 } }, - { "B_TacticalPack_oli", "", 3500, { "", "", -1 } }, - { "B_FieldPack_ocamo", "", 3000, { "", "", -1 } }, - { "B_Bergen_sgg", "", 4500, { "", "", -1 } }, - { "B_Kitbag_cbr", "", 4500, { "", "", -1 } }, - { "B_Carryall_oli", "", 5000, { "", "", -1 } }, - { "B_Carryall_khk", "", 5000, { "", "", -1 } } - }; - }; - - class cop { - title = "STR_Shops_C_Police"; - license = ""; - side = "cop"; - uniforms[] = { - { "NONE", "Remove Uniform", 0, { "", "", -1 } }, - { "U_Rangemaster", "Cop Uniform", 25, { "", "", -1 } }, - { "U_B_CombatUniform_mcam_tshirt", "", 350, { "life_coplevel", "SCALAR", 1 } }, - { "U_B_survival_uniform", "", 1250, { "life_coplevel", "SCALAR", 1 } }, - { "U_B_CombatUniform_mcam_worn", "", 550, { "life_coplevel", "SCALAR", 2 } } - }; - headgear[] = { - { "NONE", "Remove Hat", 0, { "", "", -1 } }, - { "H_HelmetB_plain_mcamo", "", 75, { "life_coplevel", "SCALAR", 1 } }, - { "H_Booniehat_mcamo", "", 120, { "life_coplevel", "SCALAR", 1 } }, - { "H_MilCap_mcamo", "", 100, { "life_coplevel", "SCALAR", 2 } } - }; - goggles[] = { - { "NONE", "Remove Glasses", 0, { "", "", -1 } }, - { "G_Shades_Black", "", 25, { "", "", -1 } }, - { "G_Shades_Blue", "", 20, { "", "", -1 } }, - { "G_Sport_Blackred", "", 20, { "", "", -1 } }, - { "G_Sport_Checkered", "", 20, { "", "", -1 } }, - { "G_Sport_Blackyellow", "", 20, { "", "", -1 } }, - { "G_Sport_BlackWhite", "", 20, { "", "", -1 } }, - { "G_Squares", "", 10, { "", "", -1 } }, - { "G_Aviator", "", 100, { "", "", -1 } }, - { "G_Lady_Mirror", "", 150, { "", "", -1 } }, - { "G_Lady_Dark", "", 150, { "", "", -1 } }, - { "G_Lady_Blue", "", 150, { "", "", -1 } }, - { "G_Lowprofile", "", 30, { "", "", -1 } }, - { "G_Combat", "", 55, { "", "", -1 } } - }; - vests[] = { - { "NONE", "Remove Vest", 0, { "", "", -1 } }, - { "V_Rangemaster_belt", "", 800, { "", "", -1 } }, - { "V_PlateCarrier2_rgr", "", 1500, { "life_coplevel", "SCALAR", 1 } } - }; - backpacks[] = { - { "NONE", "Remove Backpack", 0, { "", "", -1 } }, - { "B_Kitbag_cbr", "", 800, { "", "", -1 } }, - { "B_FieldPack_cbr", "", 500, { "", "", -1 } }, - { "B_AssaultPack_cbr", "", 700, { "", "", -1 } }, - { "B_Bergen_sgg", "", 2500, { "", "", -1 } }, - { "B_Carryall_cbr", "", 3500, { "", "", -1 } } - }; - }; - - class dive { - title = "STR_Shops_C_Diving"; - license = "dive"; - side = "civ"; - uniforms[] = { - { "NONE", "Remove Uniform", 0, { "", "", -1 } }, - { "U_B_Wetsuit", "", 2000, { "", "", -1 } } - }; - headgear[] = { - { "NONE", "Remove Hat", 0, { "", "", -1 } } - }; - goggles[] = { - { "NONE", "Remove Glasses", 0, { "", "", -1 } }, - { "G_Diving", "", 500, { "", "", -1 } } - }; - vests[] = { - { "NONE", "Remove Vest", 0, { "", "", -1 } }, - { "V_RebreatherB", "", 5000, { "", "", -1 } } - }; - backpacks[] = { - { "NONE", "Remove Backpack", 0, { "", "", -1 } } - }; - }; - - class reb { - title = "STR_Shops_C_Rebel"; - license = "rebel"; - side = "civ"; - uniforms[] = { - { "NONE", "Remove Uniform", 0, { "", "", -1 } }, - { "U_IG_Guerilla1_1", "", 5000, {"", "", -1} }, - { "U_I_G_Story_Protagonist_F", "", 7500, { "", "", -1 } }, - { "U_I_G_resistanceLeader_F", "", 11500, { "", "", -1 } }, - { "U_O_SpecopsUniform_ocamo", "", 17500, { "", "", -1 } }, - { "U_O_PilotCoveralls", "", 15610, { "", "", -1 } }, - { "U_IG_leader", "Guerilla Leader", 15340, { "", "", -1 } }, - { "U_O_GhillieSuit", "", 50000, { "", "", -1 } } - }; - headgear[] = { - { "NONE", "Remove Hat", 0, { "", "", -1 } }, - { "H_ShemagOpen_tan", "", 850, { "", "", -1 } }, - { "H_Shemag_olive", "", 850, { "", "", -1 } }, - { "H_ShemagOpen_khk", "", 800, { "", "", -1 } }, - { "H_HelmetO_ocamo", "", 2500, { "", "", -1 } }, - { "H_MilCap_oucamo", "", 1200, { "", "", -1 } }, - { "H_Bandanna_camo", "", 650, { "", "", -1 } } - }; - goggles[] = { - { "NONE", "Remove Glasses", 0, { "", "", -1 } }, - { "G_Shades_Black", "", 25, { "", "", -1 } }, - { "G_Shades_Blue", "", 20, { "", "", -1 } }, - { "G_Sport_Blackred", "", 20, { "", "", -1 } }, - { "G_Sport_Checkered", "", 20, { "", "", -1 } }, - { "G_Sport_Blackyellow", "", 20, { "", "", -1 } }, - { "G_Sport_BlackWhite", "", 20, { "", "", -1 } }, - { "G_Squares", "", 10, { "", "", -1 } }, - { "G_Lowprofile", "", 30, { "", "", -1 } }, - { "G_Combat", "", 55, { "", "", -1 } }, - // BI - { "G_Balaclava_blk", "", 150, { "", "", -1 } }, - { "G_Balaclava_combat", "", 150, { "", "", -1 } }, - { "G_Balaclava_lowprofile", "", 150, { "", "", -1 } }, - { "G_Balaclava_oli", "", 150, { "", "", -1 } }, - { "G_Bandanna_aviator", "", 150, { "", "", -1 } }, - { "G_Bandanna_beast", "", 150, { "", "", -1 } }, - { "G_Bandanna_blk", "", 150, { "", "", -1 } }, - { "G_Bandanna_khk", "", 150, { "", "", -1 } }, - { "G_Bandanna_oli", "", 150, { "", "", -1 } }, - { "G_Bandanna_shades", "", 150, { "", "", -1 } }, - { "G_Bandanna_sport", "", 150, { "", "", -1 } }, - { "G_Bandanna_tan", "", 150, { "", "", -1 } } - }; - vests[] = { - { "NONE", "Remove Vest", 0, { "", "", -1 } }, - { "V_TacVest_khk", "", 12500, { "", "", -1 } }, - { "V_BandollierB_cbr", "", 4500, { "", "", -1 } }, - { "V_HarnessO_brn", "", 7500, { "", "", -1 } } - }; - backpacks[] = { - { "NONE", "Remove Backpack", 0, { "", "", -1 } }, - {"B_AssaultPack_cbr", "", 2500, { "", "", -1 }}, - { "B_Kitbag_mcamo", "", 4500, { "", "", -1 } }, - { "B_TacticalPack_oli", "", 3500, { "", "", -1 } }, - { "B_FieldPack_ocamo", "", 3000, { "", "", -1 } }, - { "B_Bergen_sgg", "", 4500, { "", "", -1 } }, - { "B_Kitbag_cbr", "", 4500, { "", "", -1 } }, - { "B_Carryall_oli", "", 5000, { "", "", -1 } }, - { "B_Carryall_khk", "", 5000, { "", "", -1 } } - }; - }; - - class kart { - title = "STR_Shops_C_Kart"; - license = ""; - side = "civ"; - uniforms[] = { - { "NONE", "Remove Uniform", 0, { "", "", -1 } }, - { "U_C_Driver_1_black", "", 1500, { "", "", -1 } }, - { "U_C_Driver_1_blue", "", 1500, { "", "", -1 } }, - { "U_C_Driver_1_red", "", 1500, { "", "", -1 } }, - { "U_C_Driver_1_orange", "", 1500, { "", "", -1 } }, - { "U_C_Driver_1_green", "", 1500, { "", "", -1 } }, - { "U_C_Driver_1_white", "", 1500, { "", "", -1 } }, - { "U_C_Driver_1_yellow", "", 1500, { "", "", -1 } }, - { "U_C_Driver_2", "", 3500, { "", "", -1 } }, - { "U_C_Driver_1", "", 3600, { "", "", -1 } }, - { "U_C_Driver_3", "", 3700, { "", "", -1 } }, - { "U_C_Driver_4", "", 3700, { "", "", -1 } } - }; - headgear[] = { - { "NONE", "Remove Hat", 0, { "", "", -1 } }, - { "H_RacingHelmet_1_black_F", "", 1000, { "", "", -1 } }, - { "H_RacingHelmet_1_red_F", "", 1000, { "", "", -1 } }, - { "H_RacingHelmet_1_white_F", "", 1000, { "", "", -1 } }, - { "H_RacingHelmet_1_blue_F", "", 1000, { "", "", -1 } }, - { "H_RacingHelmet_1_yellow_F", "", 1000, { "", "", -1 } }, - { "H_RacingHelmet_1_green_F", "", 1000, { "", "", -1 } }, - { "H_RacingHelmet_1_F", "", 2500, { "", "", -1 } }, - { "H_RacingHelmet_2_F", "", 2500, { "", "", -1 } }, - { "H_RacingHelmet_3_F", "", 2500, { "", "", -1 } }, - { "H_RacingHelmet_4_F", "", 2500, { "", "", -1 } } - }; - goggles[] = { - { "NONE", "Remove Glasses", 0, { "", "", -1 } } - }; - vests[] = { - { "NONE", "Remove Vest", 0, { "", "", -1 } } - }; - backpacks[] = { - { "NONE", "Remove Backpack", 0, { "", "", -1 } } - }; - }; -}; diff --git a/Altis_Life.Altis/Config_Master.hpp b/Altis_Life.Altis/Config_Master.hpp deleted file mode 100644 index 191b224d..00000000 --- a/Altis_Life.Altis/Config_Master.hpp +++ /dev/null @@ -1,64 +0,0 @@ -#define true 1 -#define false 0 - -/* - Master settings for various features and functionality -*/ -class Life_Settings { - /* Persistent Settings */ - save_civ_weapons = false; //Allow civilians to save weapons on them? - save_virtualItems = true; //Save Virtual items (all sides)? - - /* Revive system settings */ - revive_cops = true; //true to enable cops the ability to revive everyone or false for only medics/ems. - revive_fee = 1500; //Revive fee that players have to pay and medics / EMS are rewarded - - /* House related settings */ - house_limit = 5; //Maximum amount of houses a player can own. - - /* Gang related settings */ - gang_price = 75000; //Price for creating a gang, remember they are persistent so keep it reasonable to avoid millions of gangs. - gang_upgradeBase = 10000; //The base cost for upgrading slots in a gang - gang_upgradeMultiplier = 2.5; //Not sure if in use? - - /* Player-related systems */ - enable_fatigue = true; //Set to false to disable the ARMA 3 false system. - total_maxWeight = 24; //Static variable for the maximum weight allowed without having a backpack - paycheck_period = 5; //Scaled in minutes - - /* Impound Variables */ - impound_car = 350; //Price for impounding cars - impound_boat = 250; //Price for impounding boats - impound_air = 850; //Price for impounding helicopters / planes - - /* Initial Bank Amount */ - bank_cop = 7000; //Amount of cash on bank for new cops - bank_civ = 3000; //Amount of cash on bank for new civillians - bank_med = 6500; //Amount of cash on bank for new medics - - /* Paycheck Amount */ - paycheck_cop = 500; //Payment for cops - paycheck_civ = 350; //Payment for civillians - paycheck_med = 450; //Payment for medics - - /* Federal Reserve settings */ - noatm_timer = 10; //Time in minutes that players won't be able to deposit his money after selling stolen gold - - /* Spyglass settings */ - spyglass_init = false; //Enable or disable spyglass - - /* Skins settings */ - civ_skins = false; //Enable or disable civilian skins. Before enabling, you must add all the SEVEN files to textures folder. (It must be named as: civilian_uniform_1.jpg, civilian_uniform_2.jpg...civilian_uniform_6.jpg, civilian_uniform_7.jpg) - - /* Car-shop Settings */ - vehicleShop_rentalOnly[] = { "B_MRAP_01_hmg_F", "B_G_Offroad_01_armed_F" }; - - /* Job-related stuff */ - delivery_points[] = { "dp_1", "dp_2", "dp_3", "dp_4", "dp_5", "dp_6", "dp_7", "dp_8", "dp_9", "dp_10", "dp_11", "dp_12", "dp_13", "dp_14", "dp_15", "dp_15", "dp_16", "dp_17", "dp_18", "dp_19", "dp_20", "dp_21", "dp_22", "dp_23", "dp_24", "dp_25" }; -}; - -#include "Config_Clothing.hpp" -#include "Config_Licenses.hpp" -#include "Config_Vehicles.hpp" -#include "Config_vItems.hpp" -#include "Config_Weapons.hpp" diff --git a/Altis_Life.Altis/Config_Spyglass.hpp b/Altis_Life.Altis/Config_Spyglass.hpp deleted file mode 100644 index 5bcd5cae..00000000 --- a/Altis_Life.Altis/Config_Spyglass.hpp +++ /dev/null @@ -1,26 +0,0 @@ -class SpyGlass { - civSlotNumber = 75; - copSlotNumber = 19; - medSlotNumber = 4; - - /* - Internal functions, sort by what they are. - Please note any functions you add need the functions named defined and the functions meta name which is the functions name + _meta i.e: - "life_fnc_mycoolfunction","life_fnc_mycoolfunction_meta" - */ - BIS_Functions[] = {"bis_fnc_dbvalueindex","bis_fnc_overviewterrain","bis_fnc_dotproduct","bis_fnc_vrcourselaunchers3","bis_fnc_moduleprojectile","bis_fnc_initmodules_ordnance","bis_fnc_setunitinsignia","bis_fnc_getunitinsignia","bis_fnc_getrespawninventories","bis_fnc_dbsymbolclass","bis_fnc_dbvaluelist","bis_fnc_assignplayerrole","bis_fnc_boundingboxmarker","bis_fnc_magnitude","bis_fnc_unitvector","bis_fnc_skirmishtrigger","bis_fnc_initmodules_audio","bis_fnc_sortalphabetically","bis_fnc_inv","bis_fnc_modulecuratoraddpoints","bis_fnc_setmissionstatusslot","bis_fnc_prepareao","bis_fnc_disableloading","bis_fnc_taskhint","bis_fnc_missilelaunchpositionfix","bis_fnc_help","bis_fnc_inanglesector","bis_fnc_curatorobjectregisteredtable","bis_fnc_initrespawnbackpack","bis_fnc_paramviewdistance","bis_fnc_modulepunishment","bis_fnc_localize","bis_fnc_displaycolorget","bis_fnc_dbimportconfig","bis_fnc_vectordiff","bis_fnc_moduleweather","bis_fnc_moduleobjectivesector","bis_fnc_ambientflyby","bis_fnc_onplayerconnected","bis_fnc_feedbackinit","bis_fnc_unitcapture","bis_fnc_arrayunshift","bis_fnc_spawncrew","bis_fnc_playendmusic","bis_fnc_moduleeffectsfire","bis_fnc_modulecreatediaryrecord","bis_fnc_loadfunctions","bis_fnc_missiontaskslocal","bis_fnc_validateparametersoo","bis_fnc_establishingshot","bis_fnc_texttiles","bis_fnc_getvirtualmagazinecargo","bis_fnc_target","bis_fnc_listcuratorplayers","bis_fnc_setfog","bis_fnc_initmodules_intel","bis_fnc_error","bis_fnc_getcfgdatapool","bis_fnc_isinsidearea","bis_fnc_kbmenu","bis_fnc_setidentity","bis_fnc_displayclouds","bis_fnc_configextremes","bis_fnc_orbatconfigpreview","bis_fnc_helicoptercanfly","bis_fnc_curatorobjectregistered","bis_fnc_ffvupdate","bis_fnc_initmodules_animals","bis_fnc_allsynchronizedobjects","bis_fnc_initplayable","bis_fnc_tasksetdestination","bis_fnc_diagjiralink","bis_fnc_exportfunctionstowiki","bis_fnc_modulefdcpout","bis_fnc_paramweather","bis_fnc_taskattack","bis_fnc_bleedtickets","bis_fnc_overviewauthor","bis_fnc_dbimportxml","bis_fnc_diagmacrosauthor","bis_fnc_respawncounter","bis_fnc_vrcoursecommandingactions1","bis_fnc_showcuratorfeedbackmessage","bis_fnc_moduleslingload","bis_fnc_diagknowntargets","bis_fnc_quotations","bis_fnc_configpath","bis_fnc_taskcompleted","bis_fnc_diagaarrecord","bis_fnc_scenegetobjects","bis_fnc_vrcoursecommandingactions2","bis_fnc_moduleai","bis_fnc_modulemissionname","bis_fnc_modulettcpin","bis_fnc_ftlmanager","bis_fnc_randomindex","bis_fnc_vrcoursecommandingactions3","bis_fnc_curatorrespawn","bis_fnc_curatorautomaticpositions","bis_fnc_moduletracers","bis_fnc_subclasses","bis_fnc_removesupportlink","bis_fnc_splitstring","bis_fnc_unpackstaticweapon","bis_fnc_radialred","bis_fnc_vrfadein","bis_fnc_livefeedmoduleinit","bis_fnc_initmodules_multiplayer","bis_fnc_execvm","bis_fnc_relposobject","bis_fnc_terraingradangle","bis_fnc_shakegauges","bis_fnc_scenegetpositionbyangle","bis_fnc_objectsgrabber","bis_fnc_curatorobjectplaced","bis_fnc_livefeed","bis_fnc_respawnnone","bis_fnc_moduleunits","bis_fnc_animtype","bis_fnc_sandstorm","bis_fnc_nearestposition","bis_fnc_selectcrew","bis_fnc_modulechat","bis_fnc_modulecuratoraddaddons","bis_fnc_moduleobjectiveracefinish","bis_fnc_feedback_fatiguecc","bis_fnc_ordinalnumber","bis_fnc_dbclassid","bis_fnc_registercuratorobject","bis_fnc_vrcoursehelislingload1","bis_fnc_modulecombatgetin","bis_fnc_modulerating","bis_fnc_moduleskiptime","bis_fnc_feedback_fatigueradialblur","bis_fnc_taskdescription","bis_fnc_moduletaskcreate","bis_fnc_moduleammo","bis_fnc_effectkilledairdestructionstage2","bis_fnc_instructorfigure","bis_fnc_livefeedsetsource","bis_fnc_addtopairs","bis_fnc_credits","bis_fnc_buildingpositions","bis_fnc_getrespawnmarkers","bis_fnc_posdegtoutm","bis_fnc_addvirtualbackpackcargo","bis_fnc_moveaction","bis_fnc_modulemptypesectorcontrol","bis_fnc_damagepulsing","bis_fnc_taskcurrent","bis_fnc_diagmissionpositions","bis_fnc_findnestedelement","bis_fnc_vrcoursetargetdesignation1","bis_fnc_monthdays","bis_fnc_helicopterseatmove","bis_fnc_mp","bis_fnc_invslotsempty","bis_fnc_commsmenutogglevisibility","bis_fnc_vrcoursetargetdesignation2","bis_fnc_moduleskill","bis_fnc_diagaarrecord_fsm","bis_fnc_respawnendmission","bis_fnc_selectrespawntemplate","bis_fnc_ambientblacklistadd","bis_fnc_livefeedeffects","bis_fnc_vrcoursetargetdesignation3","bis_fnc_iscuratoreditable","bis_fnc_curatorchallengegetinvehicle","bis_fnc_neutralizeunit","bis_fnc_moduleanimals","bis_fnc_dbisclass","bis_fnc_kbisspeaking","bis_fnc_arraypushstack","bis_fnc_invstring","bis_fnc_effectfiredartillery","bis_fnc_iscampaign","bis_fnc_changesupportradiochannel","bis_fnc_boundingboxcorner","bis_fnc_modulezoneprotection","bis_fnc_initmodules_objectives","bis_fnc_limitsupport","bis_fnc_trimstring","bis_fnc_dbclasslist","bis_fnc_diagknownastarget","bis_fnc_createobjectoo","bis_fnc_kmlimport","bis_fnc_randomint","bis_fnc_diagpreviewvehiclecrew","bis_fnc_crewcount","bis_fnc_dbvalueset","bis_fnc_conditionalselect","bis_fnc_scenesetanimationsforgroup","bis_fnc_setobjecttexture","bis_fnc_modulecuratorsetcostsdefault","bis_fnc_modulecountdown","bis_fnc_respawninstant","bis_fnc_teamcolor","bis_fnc_deletetask","bis_fnc_swapvars","bis_fnc_setcuratorattributes","bis_fnc_keycode","bis_fnc_animviewer","bis_fnc_objecttype","bis_fnc_gcinit","bis_fnc_removevirtualitemcargo","bis_fnc_moduledooropen","bis_fnc_removecommmenuitem","bis_fnc_orbatsetgroupparams","bis_fnc_rankparams","bis_fnc_initrespawn","bis_fnc_randompostrigger","bis_fnc_vrcoursecommandingmovement1","bis_fnc_livefeedmodulesettarget","bis_fnc_modulebootcampstage","bis_fnc_moduleobjectivemove","bis_fnc_typetext","bis_fnc_fatigueeffect","bis_fnc_countdown","bis_fnc_customgps","bis_fnc_getlinedist","bis_fnc_taskpatrol","bis_fnc_vrcoursecommandingmovement2","bis_fnc_moduletasksetdescription","bis_fnc_livefeedmoduleeffects","bis_fnc_moduledamage","bis_fnc_paramdaytime","bis_fnc_guigridtoprofile","bis_fnc_curatorobjectedited","bis_fnc_moduleeffectsshells","bis_fnc_animalsitespawn","bis_fnc_modulesfx","bis_fnc_guieffecttiles","bis_fnc_sideid","bis_fnc_moduletimetrial","bis_fnc_unitplayfiring","bis_fnc_setdate","bis_fnc_kbtell","bis_fnc_exportcfgvehicles","bis_fnc_incapacitatedeffect","bis_fnc_selectrandom","bis_fnc_vectoradd","bis_fnc_spawngroup","bis_fnc_removedestroyedcuratoreditableobjects","bis_fnc_modulevolume","bis_fnc_startloadingscreen_ids","bis_fnc_uniqueclasses","bis_fnc_getcfgdataobject","bis_fnc_scenesetbehaviour","bis_fnc_vectorfromxtoy","bis_fnc_vrcourseplaceables1","bis_fnc_modulearsenal","bis_fnc_modulecuratorsetobjectcost","bis_fnc_modulecuratorsetcoefs","bis_fnc_romannumeral","bis_fnc_diagloop","bis_fnc_diagradio","bis_fnc_overviewmission","bis_fnc_numberdigits","bis_fnc_vrcourseplaceables2","bis_fnc_moduleobjectiveracestart","bis_fnc_initmodules_no_category","bis_fnc_errormsg","bis_fnc_consolidatearray","bis_fnc_taskchildren","bis_fnc_addrespawninventory","bis_fnc_customgpsvideo","bis_fnc_returnvehicleturrets","bis_fnc_vrcourseplaceables3","bis_fnc_moduleposter","bis_fnc_initmodules_groupmodifiers","bis_fnc_initmodules_chemlights","bis_fnc_rsclayer_list","bis_fnc_startloadingscreen","bis_fnc_effectplankton","bis_fnc_paramrespawntickets","bis_fnc_modulecuratorsetcostsvehicleclass","bis_fnc_effectfiredlongsmoke","bis_fnc_setrank","bis_fnc_distance2dsqr","bis_fnc_zzrotate","bis_fnc_sceneintruderdetector","bis_fnc_curatorchallengefireweapon","bis_fnc_isloading","bis_fnc_overviewtimetrial","bis_fnc_earthquake","bis_fnc_texturemarker","bis_fnc_arrayfinddeep","bis_fnc_setcuratorvisionmodes","bis_fnc_locweaponinfo","bis_fnc_disablesaving","bis_fnc_singlemissionconfig","bis_fnc_setnestedelement","bis_fnc_taskdefend","bis_fnc_vrcoursecommandingbehaviour1","bis_fnc_initmodules_training","bis_fnc_movein","bis_fnc_scriptedmove","bis_fnc_maxdiffarray","bis_fnc_arsenal","bis_fnc_vrcoursecommandingbehaviour2","bis_fnc_modulepostprocess","bis_fnc_moduleobjectivegetin","bis_fnc_packstaticweapon","bis_fnc_addstackedeventhandler","bis_fnc_ambientanim","bis_fnc_diagkey","bis_fnc_respawntimepenalty","bis_fnc_modulemodules","bis_fnc_jukebox","bis_fnc_modulettcptrigger","bis_fnc_showmissionstatus","bis_fnc_missiontimeleft","bis_fnc_loadclass","bis_fnc_vrcoursecommandingbehaviour3","bis_fnc_playsound","bis_fnc_diagconfig","bis_fnc_addsupportlink","bis_fnc_diagmissionweapons","bis_fnc_addweapon","bis_fnc_helicoptergethitpoints","bis_fnc_removevirtualmagazinecargo","bis_fnc_animatetaskwaypoint","bis_fnc_modulerespawnvehicle","bis_fnc_moduleremotecontrol","bis_fnc_filterstring","bis_fnc_movetorespawnposition","bis_fnc_progressloadingscreen","bis_fnc_markercreate","bis_fnc_classweapon","bis_fnc_scenemiscstuff","bis_fnc_getvirtualitemcargo","bis_fnc_removevirtualweaponcargo","bis_fnc_moduletimemultiplier","bis_fnc_guieditor","bis_fnc_dbsymbolvalue","bis_fnc_dbclasscheck","bis_fnc_flameseffect","bis_fnc_completedcuratorchallengescount","bis_fnc_moduleendmission","bis_fnc_modulerespawntickets","bis_fnc_moduleexecute","bis_fnc_displayname","bis_fnc_respawnmanager","bis_fnc_returnparents","bis_fnc_isinfrontof","bis_fnc_initcuratorattribute","bis_fnc_getcfgdataarray","bis_fnc_functionsdebug","bis_fnc_playvideo","bis_fnc_addvirtualweaponcargo","bis_fnc_getvirtualbackpackcargo","bis_fnc_isforcedcuratorinterface","bis_fnc_moduleobjectivetarget","bis_fnc_animalbehaviour","bis_fnc_camera","bis_fnc_diagwiki","bis_fnc_blackin","bis_fnc_returnnestedelement","bis_fnc_arithmeticmean","bis_fnc_showcuratorattributes","bis_fnc_initmodules_strategicmap","bis_fnc_dbvaluecheck","bis_fnc_respawnspectator","bis_fnc_camfollow","bis_fnc_orbatremovegroupoverlay","bis_fnc_diagvehicleicons","bis_fnc_nearestnum","bis_fnc_respawnmenuspectator","bis_fnc_modulesound","bis_fnc_wppatrol","bis_fnc_dbvalueremove","bis_fnc_instring","bis_fnc_taskcreate","bis_fnc_guimessage","bis_fnc_vrcourseheliadvanced1","bis_fnc_tridenthandledamage","bis_fnc_feedbackmain","bis_fnc_spawnobjects","bis_fnc_typetext2","bis_fnc_posutmtodeg","bis_fnc_curatorchallengeilluminate","bis_fnc_vrcourseheliadvanced2","bis_fnc_modulecuratoraddcameraarea","bis_fnc_ambientplanes","bis_fnc_strategicmapopen","bis_fnc_hudlimits","bis_fnc_scenesetobjects","bis_fnc_vrcourseheliadvanced3","bis_fnc_arrayshuffle","bis_fnc_boundingboxdimensions","bis_fnc_tracebullets","bis_fnc_exportcuratorcosttable","bis_fnc_vrcourseheliadvanced4","bis_fnc_tridentexecute","bis_fnc_modulerespawnposition","bis_fnc_weaponcomponents","bis_fnc_texturevehicleicon","bis_fnc_variablespaceremove","bis_fnc_curatorpinged","bis_fnc_vrcourseheliadvanced5","bis_fnc_init","bis_fnc_feedback_burningtimer","bis_fnc_loop","bis_fnc_displayresize","bis_fnc_cutdecimals","bis_fnc_miscanim","bis_fnc_vrcourseheliadvanced6","bis_fnc_initmodules_effects","bis_fnc_credits_movie","bis_fnc_moduleeffectsemittercreator","bis_fnc_modulemptypedefense","bis_fnc_markwaypoints","bis_fnc_trackmissiontime","bis_fnc_paramguerfriendly","bis_fnc_diarymaps","bis_fnc_sidename","bis_fnc_noflyzonesexport","bis_fnc_keypointsexportfromkml","bis_fnc_flies","bis_fnc_relpos","bis_fnc_managecuratoraddons","bis_fnc_initmodules_smokeshells","bis_fnc_initmodules_flares","bis_fnc_shownotification","bis_fnc_modulefiringdrill","bis_fnc_displaymission","bis_fnc_initdisplay","bis_fnc_kbsentence","bis_fnc_moduleinit","bis_fnc_initdisplays","bis_fnc_diaganim","bis_fnc_supplydrop","bis_fnc_curatorattributes","bis_fnc_isunitvirtual","bis_fnc_getcfgisclass","bis_fnc_helicopterdamage","bis_fnc_randompos","bis_fnc_secondstostring","bis_fnc_parsenumber","bis_fnc_saymessage","bis_fnc_vrcourseheliweapons1","bis_fnc_removescriptedeventhandler","bis_fnc_tasksetdescription","bis_fnc_enemytargets","bis_fnc_openfieldmanual","bis_fnc_triggertomarker","bis_fnc_paramin","bis_fnc_respawntickets","bis_fnc_modulefdstatsclear","bis_fnc_keypointsexport","bis_fnc_playername","bis_fnc_dynamictext","bis_fnc_arraypush","bis_fnc_version","bis_fnc_removecuratoricon","bis_fnc_vrcourseheliweapons2","bis_fnc_modulefuel","bis_fnc_diagaar","bis_fnc_exportcfgmagazines","bis_fnc_getidc","bis_fnc_initmultiplayer","bis_fnc_nearesthelipad","bis_fnc_vrcourseheliweapons3","bis_fnc_modulesimulationmanager","bis_fnc_feedback_damageblur","bis_fnc_getidd","bis_fnc_settopairs","bis_fnc_wpartillery","bis_fnc_briefinginit","bis_fnc_addclassoo","bis_fnc_orbatanimate","bis_fnc_param","bis_fnc_scriptedwaypointtype","bis_fnc_position","bis_fnc_curatorchallengefindintel","bis_fnc_vrcourseheliweapons4","bis_fnc_modulemode","bis_fnc_modulespawnaioptions","bis_fnc_feedback_damagecc","bis_fnc_tasksetstate","bis_fnc_taskvar","bis_fnc_gc","bis_fnc_configviewer","bis_fnc_classmagazine","bis_fnc_getcfgdatabool","bis_fnc_blackout","bis_fnc_dbisvalue","bis_fnc_titlecard","bis_fnc_friendlysides","bis_fnc_crows","bis_fnc_unitcapturesimple","bis_fnc_addevidence","bis_fnc_objectsmapper","bis_fnc_getcfgdata","bis_fnc_tasksunit","bis_fnc_relscaleddist","bis_fnc_effectfiredhelirocket","bis_fnc_noflyzone","bis_fnc_counter","bis_fnc_radiosetplaylist","bis_fnc_returnconfigentry","bis_fnc_wpland","bis_fnc_missionflow","bis_fnc_refreshcommmenu","bis_fnc_missionhandlers","bis_fnc_getparamvalue","bis_fnc_helicopterseat","bis_fnc_locations","bis_fnc_absspeed","bis_fnc_addcuratorchallenge","bis_fnc_modulecuratorsetattributes","bis_fnc_settask","bis_fnc_displayloading","bis_fnc_ondiarychanged","bis_fnc_ambienthelicopters","bis_fnc_moduletriggers","bis_fnc_genericsentence","bis_fnc_savegame","bis_fnc_greatestnum","bis_fnc_scenecreatescenetrigger","bis_fnc_scenecheckweapons","bis_fnc_estimatedtimeleft","bis_fnc_sortby","bis_fnc_removestackedeventhandler","bis_fnc_postogrid","bis_fnc_tridentsetrelationship","bis_fnc_modulestrategicmaporbat","bis_fnc_modulecuratorseteditingareatype","bis_fnc_initmodules_objectmodifiers","bis_fnc_effectkilledsecondaries","bis_fnc_kbtopicconfig","bis_fnc_modulettcpout","bis_fnc_preload","bis_fnc_roundnum","bis_fnc_vrfadeout","bis_fnc_curatorattachobject","bis_fnc_moduleeffectssmoke","bis_fnc_endloadingscreen","bis_fnc_modulettcpclear","bis_fnc_music","bis_fnc_linearconversion","bis_fnc_magnitudesqr","bis_fnc_vrtimer","bis_fnc_drawcuratorlocations","bis_fnc_indicatebleeding","bis_fnc_effectfiredflares","bis_fnc_dbconfigpath","bis_fnc_rsclayer","bis_fnc_playersidefaction","bis_fnc_removeindex","bis_fnc_selectdiarysubject","bis_fnc_livefeedmodulesetsource","bis_fnc_guigrid","bis_fnc_briefinganimate","bis_fnc_sidecolor","bis_fnc_3dcredits","bis_fnc_setovercast","bis_fnc_modulestrategicmapmission","bis_fnc_effectfired","bis_fnc_nearestroad","bis_fnc_singlemissionkeys","bis_fnc_modulebleedtickets","bis_fnc_radialredout","bis_fnc_colorrgbatotexture","bis_fnc_threat","bis_fnc_commsmenutoggleavailability","bis_fnc_addcuratorareafromtrigger","bis_fnc_curatorvisionmodes","bis_fnc_curatorhint","bis_fnc_moduleeffectsbubbles","bis_fnc_execfsm","bis_fnc_diaghit","bis_fnc_fadeeffect","bis_fnc_exportinventory","bis_fnc_modulesavegame","bis_fnc_initmodules_respawn","bis_fnc_feedback_fatiguepp","bis_fnc_preload_server","bis_fnc_colorrgbatohtml","bis_fnc_ctrlfittotextheight","bis_fnc_codeperformance","bis_fnc_enemysides","bis_fnc_convertunits","bis_fnc_mpexec","bis_fnc_setpitchbank","bis_fnc_drawcuratordeaths","bis_fnc_guieffecttiles_ppchromaberration","bis_fnc_toupperdisplaytexts","bis_fnc_endmission","bis_fnc_sceneareaclearance","bis_fnc_initvirtualunit","bis_fnc_modulespawnai","bis_fnc_phoneticalword","bis_fnc_respawnconfirm","bis_fnc_taskparent","bis_fnc_findinpairs","bis_fnc_basicbackpack","bis_fnc_arraycompare","bis_fnc_sortnum","bis_fnc_addvirtualitemcargo","bis_fnc_endmissionserver","bis_fnc_initmodules_firingdrills","bis_fnc_feedback_damageradialblur","bis_fnc_isinzoom","bis_fnc_dbprint","bis_fnc_addcommmenuitem","bis_fnc_dirindicator","bis_fnc_selectrandomweighted","bis_fnc_respawnrounds","bis_fnc_synchronizedobjects","bis_fnc_kbcanspeak","bis_fnc_groupvehicles","bis_fnc_dbvalueid","bis_fnc_ambientanimcombat","bis_fnc_functionpath","bis_fnc_missionconversations","bis_fnc_orbatsetgroupfade","bis_fnc_curatorwaypointplaced","bis_fnc_curatorsaymessage","bis_fnc_curatorchallengedestroyvehicle","bis_fnc_getservervariable","bis_fnc_modulemine","bis_fnc_createlogrecord","bis_fnc_runlater","bis_fnc_enemydetected","bis_fnc_arraypop","bis_fnc_scenegetparticipants","bis_fnc_scenecreatesoundentities","bis_fnc_modulecreateprojectile","bis_fnc_loadinventory","bis_fnc_wpsuppress","bis_fnc_displaycontrols","bis_fnc_dbvaluereturn","bis_fnc_removerespawnposition","bis_fnc_scenerotate","bis_fnc_modulecuratoraddeditingareaplayers","bis_fnc_onload","bis_fnc_dirto","bis_fnc_mirrorcuratorsettings","bis_fnc_locationdescription","bis_fnc_tridentgetrelationship","bis_fnc_importimagelinks","bis_fnc_showunitinfo","bis_fnc_guinewsfeed","bis_fnc_feedback_testhelper","bis_fnc_cinemaborder","bis_fnc_diagbulletcam","bis_fnc_shutdown","bis_fnc_executestackedeventhandler","bis_fnc_showmarkers","bis_fnc_curatorautomatic","bis_fnc_respawngroup","bis_fnc_credits_movieconfig","bis_fnc_ctrlsetscale","bis_fnc_invslottype","bis_fnc_togglecuratorvisionmode","bis_fnc_modulelightning","bis_fnc_initmodules_environment","bis_fnc_feedback_allowdeathscreen","bis_fnc_vrspawneffect","bis_fnc_exportcfggroups","bis_fnc_initmodules_supports","bis_fnc_modulettcptriggerbehind","bis_fnc_pip","bis_fnc_effectkilled","bis_fnc_markertotrigger","bis_fnc_spawnenemy","bis_fnc_invcodetoarray","bis_fnc_commsmenucreate","bis_fnc_addvirtualmagazinecargo","bis_fnc_addcuratoricon","bis_fnc_didjip","bis_fnc_moduleunlockarea","bis_fnc_modulecas","bis_fnc_cameraold","bis_fnc_colorconfigtorgba","bis_fnc_setrespawndelay","bis_fnc_setobjectrotation","bis_fnc_getcfgsubclasses","bis_fnc_setrespawninventory","bis_fnc_iscurator","bis_fnc_modulegroupid","bis_fnc_dbclassremove","bis_fnc_advhintcredits","bis_fnc_rounddir","bis_fnc_numbertext","bis_fnc_moduletrident","bis_fnc_showrespawnmenu","bis_fnc_halo","bis_fnc_intrigger","bis_fnc_vreffectkilled","bis_fnc_shakecuratorcamera","bis_fnc_managecuratorchallenges","bis_fnc_formatcuratorchallengeobjects","bis_fnc_modulemptypegroundsupport","bis_fnc_initmodules_modes","bis_fnc_feedback_blue","bis_fnc_respawnmenuinventory","bis_fnc_invremove","bis_fnc_showtime","bis_fnc_modulemptypegamemaster","bis_fnc_initmodules_missionflow","bis_fnc_unitaddon","bis_fnc_diaryhints","bis_fnc_setidcstreamfriendly","bis_fnc_initparams","bis_fnc_removerespawninventory","bis_fnc_modulefriendlyfire","bis_fnc_moduleobjectiveracecp","bis_fnc_respawnbase","bis_fnc_getfrompairs","bis_fnc_interpolateweather","bis_fnc_unitcapturefiring","bis_fnc_vrdrawborder","bis_fnc_activateaddons","bis_fnc_modulegenericradio","bis_fnc_modulestrategicmapopen","bis_fnc_missiontasks","bis_fnc_fixdate","bis_fnc_diagkeytest","bis_fnc_updateplayerarray","bis_fnc_diagmacrosnamesound","bis_fnc_halt","bis_fnc_healtheffects","bis_fnc_helicoptertype","bis_fnc_effectfiredrocket","bis_fnc_missionrespawntype","bis_fnc_isleapyear","bis_fnc_setppeffecttemplate","bis_fnc_spotter","bis_fnc_getfactions","bis_fnc_removevirtualbackpackcargo","bis_fnc_modulecuratoraddeditableobjects","bis_fnc_modulecuratoraddicon","bis_fnc_mapsize","bis_fnc_diagpreview","bis_fnc_diagmacrosverify","bis_fnc_modulefdfademarker","bis_fnc_posdegtoworld","bis_fnc_respect","bis_fnc_moduleunlockobject","bis_fnc_modulecuratorsetcamera","bis_fnc_guihint","bis_fnc_diagmacros","bis_fnc_livefeedterminate","bis_fnc_wprelax","bis_fnc_healing","bis_fnc_overviewdifficulty","bis_fnc_getunitbyuid","bis_fnc_logformat","bis_fnc_ambientpostprocess","bis_fnc_fps","bis_fnc_vrcoursehelibasics1","bis_fnc_tridentclient","bis_fnc_modulestrategicmapimage","bis_fnc_diagmacrosmapsize","bis_fnc_removeallscriptedeventhandlers","bis_fnc_addscore","bis_fnc_livefeedsettarget","bis_fnc_markerpath","bis_fnc_rotatevector2d","bis_fnc_vrcourseballistics1","bis_fnc_vrcoursehelibasics2","bis_fnc_modulemptypeseize","bis_fnc_orbataddgroupoverlay","bis_fnc_respawnseagull","bis_fnc_taskstate","bis_fnc_vectormultiply","bis_fnc_vrcourseballistics2","bis_fnc_forcecuratorinterface","bis_fnc_vrcoursehelibasics3","bis_fnc_effectfiredsmokelauncher_boat","bis_fnc_kbcreatedummy","bis_fnc_infotext","bis_fnc_vrcourseballistics3","bis_fnc_dbclassset","bis_fnc_isbuildingenterable","bis_fnc_orbatgetgroupparams","bis_fnc_objectheight","bis_fnc_recompile","bis_fnc_invslots","bis_fnc_colorrgbtohtml","bis_fnc_randomnum","bis_fnc_vrcourseballistics4","bis_fnc_drawao","bis_fnc_initmodules_events","bis_fnc_returnchildren","bis_fnc_sidetype","bis_fnc_unitplay","bis_fnc_arrayinsert","bis_fnc_areequal","bis_fnc_crossproduct","bis_fnc_feedback_fatigueblur","bis_fnc_initmodules","bis_fnc_gridtopos","bis_fnc_addscriptedeventhandler","bis_fnc_returngroupcomposition","bis_fnc_moduleshowhide","bis_fnc_moduleobjective","bis_fnc_deletevehiclecrew","bis_fnc_callscriptedeventhandler","bis_fnc_weaponaddon","bis_fnc_spawn","bis_fnc_execremote","bis_fnc_findextreme","bis_fnc_geometricmean","bis_fnc_transportservice","bis_fnc_modulehealth","bis_fnc_preload_init","bis_fnc_genericsentenceinit","bis_fnc_missionconversationslocal","bis_fnc_taskdestination","bis_fnc_call","bis_fnc_diagfindmissingauthors","bis_fnc_respawnmenuposition","bis_fnc_advhint","bis_fnc_exportcfgpatches","bis_fnc_exportgroupformations","bis_fnc_paramcountdown","bis_fnc_radiosetchannel","bis_fnc_modulecuratoraddeditingarea","bis_fnc_mp_packet","bis_fnc_objectvar","bis_fnc_tasksetcurrent","bis_fnc_findoverwatch","bis_fnc_effectfiredsmokelauncher","bis_fnc_respawnwave","bis_fnc_settasklocal","bis_fnc_ambientblacklist","bis_fnc_curatorchallengespawnlightning","bis_fnc_destroycity","bis_fnc_arrayshift","bis_fnc_invadd","bis_fnc_supplydropservice","bis_fnc_variablespaceadd","bis_fnc_deleteinventory","bis_fnc_modulesector","bis_fnc_modulestrategicmapinit","bis_fnc_modulediary","bis_fnc_initmodules_sites","bis_fnc_kbpriority","bis_fnc_forceend","bis_fnc_vehicleroles","bis_fnc_moduledate","bis_fnc_missionflow_fsm","bis_fnc_taskexists","bis_fnc_loadentry","bis_fnc_credits_moviesupport","bis_fnc_bloodeffect","bis_fnc_aligntabs","bis_fnc_log","bis_fnc_vrdrawgrid","bis_fnc_drawrespawnpositions","bis_fnc_modulezonerestriction","bis_fnc_modulespawnaipoint","bis_fnc_modulecuratorsetcostsside","bis_fnc_modulecovermap","bis_fnc_removefrompairs","bis_fnc_orbattooltip","bis_fnc_strategicmapmousebuttonclick","bis_fnc_modulehandle","bis_fnc_effectkilledairdestruction","bis_fnc_setheight","bis_fnc_removenestedelement","bis_fnc_spawnvehicle","bis_fnc_vrcoursecommandingvehicles1","bis_fnc_feedbackmain_fsm","bis_fnc_feedback_allowpp","bis_fnc_findsafepos","bis_fnc_isposblacklisted","bis_fnc_taskhandler","bis_fnc_getvirtualweaponcargo","bis_fnc_vrcoursecommandingvehicles2","bis_fnc_modulespawnaisectortactic","bis_fnc_moduleobjectivefind","bis_fnc_diagpreviewcycle","bis_fnc_advhintcall","bis_fnc_respawnside","bis_fnc_modulefdcpin","bis_fnc_subselect","bis_fnc_scenesetposformation","bis_fnc_vrcoursecommandingvehicles3","bis_fnc_playmusic","bis_fnc_modulehint","bis_fnc_modulecurator","bis_fnc_setcuratorcamera","bis_fnc_modulefdskeetdestruction","bis_fnc_objectside","bis_fnc_modulerank","bis_fnc_modulemptypegroundsupportbase","bis_fnc_strategicmapanimate","bis_fnc_ambientanimgetparams","bis_fnc_enablesaving","bis_fnc_displaycolorset","bis_fnc_drawcuratorrespawnmarkers","bis_fnc_setservervariable","bis_fnc_initmodules_curator","bis_fnc_ambientboats","bis_fnc_modulefdcpclear","bis_fnc_relativedirto","bis_fnc_listplayers","bis_fnc_modulepositioning","bis_fnc_modulerespawninventory","bis_fnc_kbtelllocal","bis_fnc_titletext","bis_fnc_groupindicator","bis_fnc_dirteffect","bis_fnc_onend","bis_fnc_islocalized","bis_fnc_singlemissionname","bis_fnc_radiosettrack","bis_fnc_baseweapon","bis_fnc_moduletasksetdestination","bis_fnc_getrespawnpositions","bis_fnc_basictask","bis_fnc_moduleradiochannelcreate","bis_fnc_dbclassindex","bis_fnc_modulettstatsclear","bis_fnc_exportcfghints","bis_fnc_diagkeylayout","bis_fnc_orbatopen","bis_fnc_ctrltextheight","bis_fnc_exportmaptobitxt","bis_fnc_isdemo","bis_fnc_distance2d","bis_fnc_timetostring","bis_fnc_finishcuratorchallenge","bis_fnc_moduleeffectsplankton","bis_fnc_modulehq","bis_fnc_feedback_damagepp","bis_fnc_guibackground","bis_fnc_getturrets","bis_fnc_functionmeta","bis_fnc_taskreal","bis_fnc_cargoturretindex","bis_fnc_dbclassreturn","bis_fnc_createmenu","bis_fnc_lowestnum","bis_fnc_saveinventory","bis_fnc_initintelobject","bis_fnc_damagechanged","bis_fnc_effectfiredrifle","bis_fnc_kbskip","bis_fnc_noflyzonescreate","bis_fnc_worldarea","bis_fnc_aan","bis_fnc_boundingcircle","bis_fnc_addrespawnposition","bis_fnc_arefriendly","bis_fnc_exportcfgweapons","bis_fnc_getpitchbank","bis_fnc_vrcourselaunchers1","bis_fnc_drawminefields","bis_fnc_moduletasksetstate","bis_fnc_advhintarg","bis_fnc_itemtype","bis_fnc_initexpo","bis_fnc_markerparams","bis_fnc_unitplaysimple","bis_fnc_vrspawnselector","bis_fnc_vrcourselaunchers2","bis_fnc_dooropen","bis_fnc_lockeddooropen","bis_fnc_revivebleedout","bis_fnc_keyhold","bis_fnc_debugprofile","bis_fnc_loadvehicle","bis_fnc_revivecontrol","bis_fnc_singlewingslidedoorclose","","bis_fnc_singlewingslidedooropen","bis_fnc_vrcourseweaponhandlingb1","bis_fnc_vrcourseweaponhandlingb2","bis_fnc_vrcourseweaponhandlingb3","bis_fnc_reviveincapacitate","bis_fnc_doornohandleclose","bis_fnc_sharedobjectives","bis_fnc_inventoryexists","bis_fnc_savevehicle","bis_fnc_setvehiclemass","bis_fnc_initvehiclekart","bis_fnc_animalrandomization","bis_fnc_modulefdballoonairdestruction","bis_fnc_twowingslidedooropen","bis_fnc_twowingdooronehandleclose","bis_taskmanagement_markers2d","bis_fnc_logformatserver","bis_fnc_modulefdballoonwaterdestruction","bis_fnc_revivesetstatus","bis_fnc_reviveexecutetemplates","bis_fnc_reviveiconmanager","bis_fnc_twowingdooronehandleopen","bis_fnc_vrhitpart","bis_fnc_initvehicle","bis_fnc_hatchopen","bis_fnc_unitheadgear","bis_fnc_vrcourseweaponhandlingc1","bis_fnc_vrcourseweaponhandlingc2","bis_fnc_reviveprogress","bis_fnc_exportvehicle","bis_fnc_objectinventoryanimatedopen","bis_fnc_reviveenabled","bis_fnc_reviveonplayerrespawn","bis_fnc_modulehvtobjective","bis_fnc_lockeddoornohandleopen","bis_fnc_modulehvtobjectives","bis_fnc_twowingslidedoorclose","bis_fnc_reviveiconcontrol","bis_fnc_modulehvtinit","bis_fnc_dynamicgroups","bis_fnc_doorclose","bis_fnc_reviveonplayerkilled","bis_fnc_doornohandleopen","bis_fnc_compatibleitems","bis_fnc_revivekeys","bis_fnc_basevehicle","bis_fnc_paramtimeacceleration","bis_fnc_hatchclose","bis_fnc_garage","bis_fnc_modulehvtobjectivesinstance","bis_fnc_reviveinit","bis_fnc_modulenametags","bis_fnc_versioninfo","bis_fnc_vrcourseweaponhandlinga1","bis_fnc_3dmarkers","bis_fnc_vrcourseweaponhandlinga2","bis_fnc_vrcourseweaponhandlinga3","bis_fnc_objectinventoryanimatedclose","bis_fnc_initvehiclecrew","bis_fnc_missionhandlers_reloads","bis_fnc_selectrespawntemplates_args"}; - BIS_UI_Functions[] = {"bis_fnc_registercuratorobject_meta","bis_fnc_curatorautomatic_meta","bis_fnc_isloading_meta","bis_fnc_animalsitespawn_meta","bis_fnc_dbclassid_meta","bis_fnc_ambientplanes_meta","bis_fnc_invremove_meta","bis_fnc_fixdate_meta","bis_fnc_vrcourseheliweapons3_meta","bis_fnc_cargoturretindex_meta","bis_fnc_execvm_meta","bis_fnc_convertunits_meta","bis_fnc_magnitude_meta","bis_fnc_infotext_meta","bis_fnc_modulesector_meta","bis_fnc_skirmishtrigger_meta","bis_fnc_spawngroup_meta","bis_fnc_isinsidearea_meta","bis_fnc_deletetask_meta","bis_fnc_version_meta","bis_fnc_getrespawnmarkers_meta","bis_fnc_diagwiki_meta","bis_fnc_geometricmean_meta","bis_fnc_radiosetplaylist_meta","bis_fnc_advhintcredits_meta","bis_fnc_vrtimer_meta","bis_fnc_subclasses_meta","bis_fnc_exportinventory_meta","bis_fnc_destroycity_meta","bis_fnc_arrayshuffle_meta","bis_fnc_moduleslingload_meta","bis_fnc_fps_meta","bis_fnc_moduletriggers_meta","bis_fnc_tracebullets_meta","bis_fnc_moduleunlockobject_meta","bis_fnc_respawnmanager_meta","bis_fnc_titletext_meta","bis_fnc_getlinedist_meta","bis_fnc_vreffectkilled_meta","bis_fnc_shutdown_meta","bis_fnc_moduleweather_meta","bis_fnc_modulegenericradio_meta","bis_fnc_respawngroup_meta","bis_fnc_numberdigits_meta","bis_fnc_dbvalueindex_meta","bis_fnc_kmlimport_meta","bis_fnc_weaponaddon_meta","bis_fnc_drawcuratordeaths_meta","bis_fnc_blackout_meta","bis_fnc_interpolateweather_meta","bis_fnc_respect_meta","bis_fnc_displayname_meta","bis_fnc_moduleobjectivegetin_meta","bis_fnc_modulespawnai_meta","bis_fnc_playersidefaction_meta","bis_fnc_wpsuppress_meta","bis_fnc_texturemarker_meta","bis_fnc_customgpsvideo_meta","bis_fnc_taskattack_meta","bis_fnc_singlemissionconfig_meta","bis_fnc_modulesfx_meta","bis_fnc_moduleradiochannelcreate_meta","bis_fnc_vrcourseheliadvanced1_meta","bis_fnc_scriptedmove_meta","bis_fnc_dirteffect_meta","bis_fnc_respawnmenuposition_meta","bis_fnc_effectfiredflares_meta","bis_fnc_modulecuratorsetattributes_meta","bis_fnc_enemytargets_meta","bis_fnc_spawnenemy_meta","bis_fnc_scenesetanimationsforgroup_meta","bis_fnc_addrespawninventory_meta","bis_fnc_modulecuratoraddaddons_meta","bis_fnc_respawnwave_meta","bis_fnc_rankparams_meta","bis_fnc_initdisplays_meta","bis_fnc_noflyzonesexport_meta","bis_fnc_scriptedwaypointtype_meta","bis_fnc_findinpairs_meta","bis_fnc_vrcoursecommandingvehicles1_meta","bis_fnc_addvirtualitemcargo_meta","bis_fnc_removecommmenuitem_meta","bis_fnc_returnconfigentry_meta","bis_fnc_modulespawnaipoint_meta","bis_fnc_boundingboxcorner_meta","bis_fnc_setrespawndelay_meta","bis_fnc_removesupportlink_meta","bis_fnc_basicbackpack_meta","bis_fnc_getservervariable_meta","bis_fnc_diagloop_meta","bis_fnc_iscuratoreditable_meta","bis_fnc_getturrets_meta","bis_fnc_curatorchallengedestroyvehicle_meta","bis_fnc_tasksetdescription_meta","bis_fnc_selectdiarysubject_meta","bis_fnc_modulepostprocess_meta","bis_fnc_helicoptertype_meta","bis_fnc_kbcreatedummy_meta","bis_fnc_getpitchbank_meta","bis_fnc_strategicmapanimate_meta","bis_fnc_orbatremovegroupoverlay_meta","bis_fnc_getvirtualbackpackcargo_meta","bis_fnc_modulerespawnvehicle_meta","bis_fnc_drawrespawnpositions_meta","bis_fnc_unitplay_meta","bis_fnc_monthdays_meta","bis_fnc_dbvalueid_meta","bis_fnc_enemysides_meta","bis_fnc_isinzoom_meta","bis_fnc_ambientanimcombat_meta","bis_fnc_typetext_meta","bis_fnc_refreshcommmenu_meta","bis_fnc_modulefiringdrill_meta","bis_fnc_moduleeffectsshells_meta","bis_fnc_moduleobjectiveracefinish_meta","bis_fnc_getvirtualmagazinecargo_meta","bis_fnc_endmissionserver_meta","bis_fnc_setdate_meta","bis_fnc_errormsg_meta","bis_fnc_helicopterseatmove_meta","bis_fnc_arrayunshift_meta","bis_fnc_diagpreviewvehiclecrew_meta","bis_fnc_dbimportxml_meta","bis_fnc_sortnum_meta","bis_fnc_vrcourseheliweapons4_meta","bis_fnc_boundingcircle_meta","bis_fnc_effectfiredrocket_meta","bis_fnc_music_meta","bis_fnc_addclassoo_meta","bis_fnc_curatorchallengefireweapon_meta","bis_fnc_codeperformance_meta","bis_fnc_commsmenucreate_meta","bis_fnc_numbertext_meta","bis_fnc_tridentgetrelationship_meta","bis_fnc_curatorattachobject_meta","bis_fnc_modulecuratoraddeditableobjects_meta","bis_fnc_damagepulsing_meta","bis_fnc_getvirtualweaponcargo_meta","bis_fnc_addvirtualweaponcargo_meta","bis_fnc_moduleammo_meta","bis_fnc_miscanim_meta","bis_fnc_modulecuratorsetcoefs_meta","bis_fnc_singlemissionkeys_meta","bis_fnc_playmusic_meta","bis_fnc_respawnbase_meta","bis_fnc_taskhint_meta","bis_fnc_invslots_meta","bis_fnc_configpath_meta","bis_fnc_deletevehiclecrew_meta","bis_fnc_modulefdcpclear_meta","bis_fnc_instructorfigure_meta","bis_fnc_spawnvehicle_meta","bis_fnc_dbprint_meta","bis_fnc_validateparametersoo_meta","bis_fnc_modulecuratorseteditingareatype_meta","bis_fnc_prepareao_meta","bis_fnc_filterstring_meta","bis_fnc_hudlimits_meta","bis_fnc_arraypop_meta","bis_fnc_radialred_meta","bis_fnc_loadentry_meta","bis_fnc_vrcourseplaceables1_meta","bis_fnc_vrdrawborder_meta","bis_fnc_islocalized_meta","bis_fnc_modulecuratorsetcostsdefault_meta","bis_fnc_arefriendly_meta","bis_fnc_displaycolorset_meta","bis_fnc_kbsentence_meta","bis_fnc_arsenal_meta","bis_fnc_fadeeffect_meta","bis_fnc_settopairs_meta","bis_fnc_initmultiplayer_meta","bis_fnc_modulegroupid_meta","bis_fnc_modulebootcampstage_meta","bis_fnc_instring_meta","bis_fnc_moduleobjectivetarget_meta","bis_fnc_paramweather_meta","bis_fnc_customgps_meta","bis_fnc_effectkilled_meta","bis_fnc_vrcourseballistics1_meta","bis_fnc_enemydetected_meta","bis_fnc_locationdescription_meta","bis_fnc_vrcourseheliadvanced2_meta","bis_fnc_moduletaskcreate_meta","bis_fnc_moduletasksetdestination_meta","bis_fnc_orbatanimate_meta","bis_fnc_getunitinsignia_meta","bis_fnc_getrespawnpositions_meta","bis_fnc_ftlmanager_meta","bis_fnc_forcecuratorinterface_meta","bis_fnc_countdown_meta","bis_fnc_modulemine_meta","bis_fnc_managecuratorchallenges_meta","bis_fnc_invslottype_meta","bis_fnc_colorrgbatohtml_meta","bis_fnc_objectsgrabber_meta","bis_fnc_arrayinsert_meta","bis_fnc_swapvars_meta","bis_fnc_basictask_meta","bis_fnc_randomint_meta","bis_fnc_objectvar_meta","bis_fnc_modulebleedtickets_meta","bis_fnc_supplydropservice_meta","bis_fnc_modulehint_meta","bis_fnc_mp_meta","bis_fnc_ctrlsetscale_meta","bis_fnc_removefrompairs_meta","bis_fnc_vrcoursecommandingvehicles2_meta","bis_fnc_showtime_meta","bis_fnc_formatcuratorchallengeobjects_meta","bis_fnc_diagknownastarget_meta","bis_fnc_dbisvalue_meta","bis_fnc_moduledate_meta","bis_fnc_modulemissionname_meta","bis_fnc_unitaddon_meta","bis_fnc_halt_meta","bis_fnc_unitvector_meta","bis_fnc_dotproduct_meta","bis_fnc_livefeedmodulesettarget_meta","bis_fnc_groupindicator_meta","bis_fnc_titlecard_meta","bis_fnc_scenegetobjects_meta","bis_fnc_moduletrident_meta","bis_fnc_bleedtickets_meta","bis_fnc_setmissionstatusslot_meta","bis_fnc_modulehandle_meta","bis_fnc_vrspawnselector_meta","bis_fnc_modulevolume_meta","bis_fnc_moduleeffectsfire_meta","bis_fnc_addcuratoricon_meta","bis_fnc_playername_meta","bis_fnc_iscurator_meta","bis_fnc_savegame_meta","bis_fnc_cutdecimals_meta","bis_fnc_diagpreview_meta","bis_fnc_exportcfgmagazines_meta","bis_fnc_returnchildren_meta","bis_fnc_setrespawninventory_meta","bis_fnc_modulerating_meta","bis_fnc_modulemptypeseize_meta","bis_fnc_respawnspectator_meta","bis_fnc_taskchildren_meta","bis_fnc_feedbackinit_meta","bis_fnc_modulecreatediaryrecord_meta","bis_fnc_estimatedtimeleft_meta","bis_fnc_taskcreate_meta","bis_fnc_call_meta","bis_fnc_camera_meta","bis_fnc_boundingboxdimensions_meta","bis_fnc_3dcredits_meta","bis_fnc_timetostring_meta","bis_fnc_exportcuratorcosttable_meta","bis_fnc_configviewer_meta","bis_fnc_vectormultiply_meta","bis_fnc_nearesthelipad_meta","bis_fnc_findoverwatch_meta","bis_fnc_help_meta","bis_fnc_diagjiralink_meta","bis_fnc_missionhandlers_meta","bis_fnc_vrcoursecommandingbehaviour1_meta","bis_fnc_selectrandom_meta","bis_fnc_areequal_meta","bis_fnc_vectoradd_meta","bis_fnc_moduleeffectssmoke_meta","bis_fnc_diagmacrosnamesound_meta","bis_fnc_lowestnum_meta","bis_fnc_moduleanimals_meta","bis_fnc_invslotsempty_meta","bis_fnc_groupvehicles_meta","bis_fnc_kbmenu_meta","bis_fnc_dbsymbolvalue_meta","bis_fnc_modulecuratorsetcamera_meta","bis_fnc_moduleobjective_meta","bis_fnc_tridentsetrelationship_meta","bis_fnc_tridenthandledamage_meta","bis_fnc_setovercast_meta","bis_fnc_incapacitatedeffect_meta","bis_fnc_kbtell_meta","bis_fnc_sideid_meta","bis_fnc_guieffecttiles_meta","bis_fnc_teamcolor_meta","bis_fnc_modulelightning_meta","bis_fnc_wpartillery_meta","bis_fnc_kbtopicconfig_meta","bis_fnc_strategicmapopen_meta","bis_fnc_target_meta","bis_fnc_modulestrategicmapimage_meta","bis_fnc_curatorchallengefindintel_meta","bis_fnc_position_meta","bis_functions_listpreinit","bis_fnc_diagmacros_meta","bis_fnc_objectheight_meta","bis_fnc_jukebox_meta","bis_fnc_paramguerfriendly_meta","bis_fnc_initplayable_meta","bis_fnc_diaghit_meta","bis_fnc_initrespawn_meta","bis_fnc_taskhandler_meta","bis_fnc_rotatevector2d_meta","bis_fnc_vrcourseplaceables2_meta","bis_fnc_dbclasscheck_meta","bis_fnc_curatorsaymessage_meta","bis_fnc_managecuratoraddons_meta","bis_fnc_addstackedeventhandler_meta","bis_fnc_livefeedterminate_meta","bis_fnc_radialredout_meta","bis_fnc_nearestposition_meta","bis_fnc_mirrorcuratorsettings_meta","bis_fnc_sidetype_meta","bis_fnc_modulecuratorsetcostsside_meta","bis_fnc_exportcfgvehicles_meta","bis_fnc_vrcourseballistics2_meta","bis_fnc_markwaypoints_meta","bis_fnc_nearestnum_meta","bis_fnc_romannumeral_meta","bis_fnc_paramin_meta","bis_fnc_vrcourseheliadvanced3_meta","bis_fnc_friendlysides_meta","bis_fnc_setunitinsignia_meta","bis_fnc_diagmacrosauthor_meta","bis_fnc_ambientblacklistadd_meta","bis_fnc_execfsm_meta","bis_fnc_removestackedeventhandler_meta","bis_fnc_modulezonerestriction_meta","bis_fnc_vrcoursetargetdesignation1_meta","bis_fnc_trimstring_meta","bis_fnc_scenecheckweapons_meta","bis_fnc_boundingboxmarker_meta","bis_fnc_drawcuratorrespawnmarkers_meta","bis_fnc_effectfiredsmokelauncher_boat_meta","bis_fnc_vrcoursecommandingvehicles3_meta","bis_fnc_scenegetparticipants_meta","bis_fnc_functionpath_meta","bis_fnc_modulesimulationmanager_meta","bis_fnc_supplydrop_meta","bis_fnc_setfog_meta","bis_fnc_guinewsfeed_meta","bis_fnc_updateplayerarray_meta","bis_fnc_guieditor_meta","bis_fnc_taskparent_meta","bis_fnc_createlogrecord_meta","bis_fnc_guigridtoprofile_meta","bis_fnc_dirto_meta","bis_fnc_spawnobjects_meta","bis_fnc_orbatsetgroupparams_meta","bis_fnc_runlater_meta","bis_fnc_assignplayerrole_meta","bis_fnc_trackmissiontime_meta","bis_fnc_moveaction_meta","bis_fnc_objecttype_meta","bis_fnc_missionrespawntype_meta","bis_fnc_orbattooltip_meta","bis_fnc_scenecreatescenetrigger_meta","bis_fnc_initintelobject_meta","bis_fnc_displayclouds_meta","bis_fnc_credits_movieconfig_meta","bis_fnc_saveinventory_meta","bis_fnc_ctrltextheight_meta","bis_fnc_scenerotate_meta","bis_fnc_orbatopen_meta","bis_fnc_vrcourselaunchers1_meta","bis_fnc_genericsentence_meta","bis_fnc_fatigueeffect_meta","bis_fnc_livefeedmodulesetsource_meta","bis_fnc_vrcoursecommandingbehaviour2_meta","bis_fnc_variablespaceadd_meta","bis_fnc_findsafepos_meta","bis_fnc_getidc_meta","bis_fnc_overviewtimetrial_meta","bis_fnc_sortby_meta","bis_fnc_setidcstreamfriendly_meta","bis_fnc_animalbehaviour_meta","bis_fnc_getparamvalue_meta","bis_fnc_enablesaving_meta","bis_fnc_addcuratorchallenge_meta","bis_fnc_modulemptypegamemaster_meta","bis_fnc_removerespawnposition_meta","bis_functions_list","bis_fnc_vrcoursecommandingmovement1_meta","bis_fnc_spotter_meta","bis_fnc_setcuratorcamera_meta","bis_fnc_blackin_meta","bis_fnc_paramdaytime_meta","bis_fnc_diarymaps_meta","bis_fnc_initparams_meta","bis_fnc_playvideo_meta","bis_fnc_sceneareaclearance_meta","bis_fnc_findnestedelement_meta","bis_fnc_scenesetposformation_meta","bis_fnc_moduleunlockarea_meta","bis_fnc_setcuratorvisionmodes_meta","bis_fnc_secondstostring_meta","bis_fnc_scenesetobjects_meta","bis_fnc_effectkilledairdestruction_meta","bis_fnc_getfactions_meta","bis_fnc_orbatsetgroupfade_meta","bis_fnc_modulefdfademarker_meta","bis_fnc_playendmusic_meta","bis_fnc_modulettcpclear_meta","bis_fnc_livefeedsettarget_meta","bis_fnc_vrcourseplaceables3_meta","bis_fnc_consolidatearray_meta","bis_fnc_startloadingscreen_meta","bis_fnc_diagknowntargets_meta","bis_fnc_addevidence_meta","bis_fnc_tasksunit_meta","bis_fnc_modulettstatsclear_meta","bis_fnc_tridentexecute_meta","bis_fnc_moduledamage_meta","bis_fnc_curatorrespawn_meta","bis_fnc_vectordiff_meta","bis_fnc_moduletimetrial_meta","bis_fnc_feedbackmain_meta","bis_fnc_arraypush_meta","bis_fnc_moduleshowhide_meta","bis_fnc_locweaponinfo_meta","bis_fnc_moduleunits_meta","bis_fnc_curatorwaypointplaced_meta","bis_fnc_vrcourseballistics3_meta","bis_fnc_modulespawnaisectortactic_meta","bis_fnc_moduletasksetdescription_meta","bis_fnc_rounddir_meta","bis_fnc_crewcount_meta","bis_fnc_classweapon_meta","bis_fnc_vrcourseheliadvanced4_meta","bis_fnc_vrcoursehelibasics1_meta","bis_fnc_moduleeffectsemittercreator_meta","bis_fnc_getrespawninventories_meta","bis_fnc_crossproduct_meta","bis_fnc_overviewterrain_meta","bis_fnc_credits_movie_meta","bis_fnc_getunitbyuid_meta","bis_fnc_removecuratoricon_meta","bis_fnc_paramviewdistance_meta","bis_fnc_locations_meta","bis_fnc_modulesound_meta","bis_fnc_loadclass_meta","bis_fnc_unitcapturesimple_meta","bis_fnc_modulettcpin_meta","bis_fnc_vrcoursetargetdesignation2_meta","bis_fnc_animatetaskwaypoint_meta","bis_fnc_vehicleroles_meta","bis_fnc_showcuratorattributes_meta","bis_fnc_missiontaskslocal_meta","bis_fnc_conditionalselect_meta","bis_fnc_callscriptedeventhandler_meta","bis_fnc_dbclassindex_meta","bis_fnc_respawntimepenalty_meta","bis_fnc_getcfgdatabool_meta","bis_fnc_invcodetoarray_meta","bis_fnc_vectorfromxtoy_meta","bis_fnc_diagradio_meta","bis_fnc_preload_meta","bis_fnc_cameraold_meta","bis_fnc_texttiles_meta","bis_fnc_changesupportradiochannel_meta","bis_fnc_executestackedeventhandler_meta","bis_mainmenu_isplayexpanded","bis_fnc_modulerespawntickets_meta","bis_fnc_effectfiredhelirocket_meta","bis_fnc_addscore_meta","bis_fnc_flies_meta","bis_fnc_vrcoursecommandingactions1_meta","bis_fnc_modulecovermap_meta","bis_fnc_scenesetbehaviour_meta","bis_fnc_displaycolorget_meta","bis_fnc_taskstate_meta","bis_fnc_addtopairs_meta","bis_fnc_getvirtualitemcargo_meta","bis_functions_listpostinit","bis_fnc_missionconversations_meta","bis_fnc_unitplayfiring_meta","bis_fnc_radiosetchannel_meta","bis_fnc_dynamictext_meta","bis_fnc_distance2d_meta","bis_fnc_moduleeffectsplankton_meta","bis_fnc_respawnrounds_meta","bis_fnc_moduleposter_meta","bis_fnc_isposblacklisted_meta","bis_fnc_unpackstaticweapon_meta","bis_fnc_onload_meta","bis_fnc_tasksetcurrent_meta","bis_fnc_aligntabs_meta","bis_fnc_moduleeffectsbubbles_meta","bis_fnc_objectside_meta","bis_fnc_diagkeylayout_meta","bis_fnc_modulepositioning_meta","bis_fnc_respawnmenuspectator_meta","bis_fnc_taskdefend_meta","bis_fnc_addcommmenuitem_meta","bis_fnc_vrcourselaunchers2_meta","bis_fnc_drawao_meta","bis_fnc_worldarea_meta","bis_fnc_overviewmission_meta","bis_fnc_vrcoursecommandingbehaviour3_meta","bis_fnc_modulecuratorsetcostsvehicleclass_meta","bis_fnc_loop_meta","bis_fnc_modulesavegame_meta","bis_fnc_cinemaborder_meta","bis_fnc_onplayerconnected_meta","bis_fnc_getidd_meta","bis_fnc_diagmissionweapons_meta","bis_fnc_shakegauges_meta","bis_fnc_moduleobjectivefind_meta","bis_fnc_vrcoursecommandingmovement2_meta","bis_fnc_respawnmenuinventory_meta","bis_fnc_removeindex_meta","bis_fnc_effectfiredsmokelauncher_meta","bis_fnc_helicoptergethitpoints_meta","bis_fnc_moduleexecute_meta","bis_fnc_diagkey_meta","bis_fnc_exportcfgweapons_meta","bis_fnc_arrayfinddeep_meta","bis_fnc_modulestrategicmapinit_meta","bis_fnc_diaryhints_meta","bis_fnc_exportgroupformations_meta","bis_fnc_getcfgdataobject_meta","bis_fnc_texturevehicleicon_meta","bis_fnc_modulecreateprojectile_meta","bis_fnc_initmodules_meta","bis_fnc_modulefdstatsclear_meta","bis_fnc_ondiarychanged_meta","bis_fnc_ffvupdate_meta","bis_fnc_moduleobjectivesector_meta","bis_fnc_inv_meta","bis_fnc_log_meta","bis_mainmenu_isoptionsexpanded","bis_displayinterrupt_isoptionsexpanded","bis_fnc_keypointsexportfromkml_meta","bis_fnc_localize_meta","bis_fnc_endloadingscreen_meta","bis_fnc_vrfadeout_meta","bis_fnc_classmagazine_meta","bis_fnc_halo_meta","bis_fnc_kbtelllocal_meta","bis_fnc_initdisplay_meta","bis_fnc_vrcourseballistics4_meta","bis_fnc_showmarkers_meta","bis_fnc_togglecuratorvisionmode_meta","bis_fnc_randompos_meta","bis_fnc_mpexec_meta","bis_fnc_vrcourseheliadvanced5_meta","bis_fnc_vrcoursehelibasics2_meta","bis_fnc_keycode_meta","bis_fnc_guimessage_meta","bis_fnc_colorrgbtohtml_meta","bis_fnc_isforcedcuratorinterface_meta","bis_fnc_exportcfgpatches_meta","bis_fnc_randomindex_meta","bis_fnc_modulefdcpin_meta","bis_fnc_showcuratorfeedbackmessage_meta","bis_fnc_respawnconfirm_meta","bis_fnc_ctrlfittotextheight_meta","bis_fnc_credits_meta","bis_fnc_radiosettrack_meta","bis_fnc_modulecombatgetin_meta","bis_fnc_arithmeticmean_meta","bis_fnc_counter_meta","bis_fnc_vrcoursetargetdesignation3_meta","bis_fnc_livefeedsetsource_meta","bis_fnc_setservervariable_meta","bis_fnc_subselect_meta","bis_fnc_posdegtoutm_meta","bis_fnc_flameseffect_meta","bis_fnc_setidentity_meta","bis_fnc_removenestedelement_meta","bis_fnc_dbclassremove_meta","bis_fnc_dbimportconfig_meta","bis_fnc_dbvalueset_meta","bis_fnc_noflyzone_meta","bis_fnc_sortalphabetically_meta","bis_fnc_getcfgsubclasses_meta","bis_fnc_unitcapture_meta","bis_fnc_saymessage_meta","bis_fnc_modulepunishment_meta","bis_fnc_selectrandomweighted_meta","bis_fnc_playsound_meta","bis_fnc_didjip_meta","bis_fnc_kbisspeaking_meta","bis_fnc_setobjecttexture_meta","bis_fnc_modulestrategicmapmission_meta","bis_fnc_livefeedmoduleeffects_meta","bis_fnc_dbvalueremove_meta","bis_fnc_effectfiredrifle_meta","bis_fnc_isunitvirtual_meta","bis_fnc_vrcoursecommandingactions2_meta","bis_fnc_scenecreatesoundentities_meta","bis_fnc_moduletasksetstate_meta","bis_fnc_deleteinventory_meta","bis_fnc_diagmacrosverify_meta","bis_fnc_diagbulletcam_meta","bis_fnc_error_meta","bis_fnc_modulecuratoraddeditingareaplayers_meta","bis_fnc_displayloading_meta","bis_fnc_tasksetstate_meta","bis_fnc_setppeffecttemplate_meta","bis_fnc_exportcfghints_meta","bis_fnc_gcinit_meta","bis_fnc_paramrespawntickets_meta","bis_fnc_randomnum_meta","bis_fnc_dbisclass_meta","bis_fnc_initexpo_meta","bis_fnc_modulemptypegroundsupportbase_meta","bis_fnc_invadd_meta","bis_fnc_taskcurrent_meta","bis_fnc_getfrompairs_meta","bis_fnc_vrcourselaunchers3_meta","bis_fnc_diagaar_meta","bis_fnc_livefeed_meta","bis_fnc_modulecuratorsetobjectcost_meta","bis_fnc_effectkilledairdestructionstage2_meta","bis_fnc_importimagelinks_meta","bis_fnc_setheight_meta","bis_fnc_disablesaving_meta","bis_fnc_setnestedelement_meta","bis_fnc_showunitinfo_meta","bis_fnc_limitsupport_meta","bis_fnc_disableloading_meta","bis_fnc_randompostrigger_meta","bis_fnc_moduletimemultiplier_meta","bis_fnc_inanglesector_meta","bis_fnc_initdisplays_prestart","bis_fnc_markerpath_meta","bis_fnc_missilelaunchpositionfix_meta","bis_fnc_briefinginit_meta","bis_fnc_modulefuel_meta","bis_fnc_removevirtualweaponcargo_meta","bis_fnc_relposobject_meta","bis_fnc_curatorautomaticpositions_meta","bis_fnc_orbataddgroupoverlay_meta","bis_fnc_pip_meta","bis_fnc_showmissionstatus_meta","bis_fnc_ambientboats_meta","bis_fnc_addrespawnposition_meta","bis_fnc_modulecuratoraddicon_meta","bis_fnc_moduleendmission_meta","bis_fnc_modulemptypedefense_meta","bis_fnc_modulecurator_meta","bis_fnc_genericsentenceinit_meta","bis_fnc_modulecuratoraddpoints_meta","bis_fnc_itemtype_meta","bis_fnc_threat_meta","bis_fnc_modulespawnaioptions_meta","bis_fnc_dbsymbolclass_meta","bis_fnc_curatorchallengeilluminate_meta","bis_fnc_moduleinit_meta","bis_fnc_setrank_meta","bis_fnc_weaponcomponents_meta","bis_fnc_livefeedmoduleinit_meta","bis_fnc_vrcoursehelislingload1_meta","bis_fnc_dirindicator_meta","bis_fnc_vrcourseheliadvanced6_meta","bis_fnc_vrcoursehelibasics3_meta","bis_fnc_modulecuratoraddeditingarea_meta","bis_fnc_singlemissionname_meta","bis_fnc_openfieldmanual_meta","bis_mainmenu_islearnexpanded","bis_fnc_credits_moviesupport_meta","bis_fnc_curatorobjectregistered_meta","bis_fnc_maxdiffarray_meta","bis_fnc_activateaddons_meta","bis_fnc_guieffecttiles_alpha","bis_fnc_returnnestedelement_meta","bis_fnc_relscaleddist_meta","bis_fnc_listcuratorplayers_meta","bis_fnc_moduleskill_meta","bis_fnc_diagfindmissingauthors_meta","bis_fnc_terraingradangle_meta","bis_fnc_linearconversion_meta","bis_fnc_dbclassset_meta","bis_fnc_ambienthelicopters_meta","bis_fnc_missionflow_meta","bis_fnc_colorrgbatotexture_meta","bis_fnc_configextremes_meta","bis_fnc_commsmenutogglevisibility_meta","bis_fnc_diagvehicleicons_meta","bis_fnc_completedcuratorchallengescount_meta","bis_fnc_settasklocal_meta","bis_fnc_helicoptercanfly_meta","bis_fnc_taskdestination_meta","bis_fnc_sidecolor_meta","bis_fnc_crows_meta","bis_fnc_earthquake_meta","bis_fnc_guibackground_meta","bis_fnc_guihint_meta","bis_fnc_dbclassreturn_meta","bis_fnc_rsclayer_meta","bis_fnc_indicatebleeding_meta","bis_fnc_healtheffects_meta","bis_fnc_execremote_meta","bis_fnc_vrcoursecommandingactions3_meta","bis_fnc_effectfiredartillery_meta","bis_fnc_transportservice_meta","bis_fnc_endmission_meta","bis_fnc_uniqueclasses_meta","bis_fnc_progressloadingscreen_meta","bis_fnc_modulemptypesectorcontrol_meta","bis_fnc_dbvaluereturn_meta","bis_fnc_ambientblacklist_meta","bis_fnc_diagmissionpositions_meta","bis_fnc_advhint_hinthandlers","bis_fnc_vrcourseheliweapons1_meta","bis_fnc_noflyzonescreate_meta","bis_fnc_buildingpositions_meta","bis_fnc_exportcfggroups_meta","bis_shownchat","bis_fnc_displayresize_meta","bis_fnc_orbatconfigpreview_meta","bis_fnc_objectsmapper_meta","bis_fnc_moduletracers_meta","bis_fnc_loadinventory_meta","bis_fnc_diagaarrecord_meta","bis_fnc_initvirtualunit_meta","bis_fnc_curatorattributes_meta","bis_fnc_isinfrontof_meta","bis_fnc_curatorchallengespawnlightning_meta","bis_fnc_modulettcptriggerbehind_meta","bis_fnc_gridtopos_meta","bis_fnc_nearestroad_meta","bis_fnc_guieffecttiles_coef","bis_fnc_kbpriority_meta","bis_fnc_posutmtodeg_meta","bis_fnc_modulerespawninventory_meta","bis_fnc_ambientpostprocess_meta","bis_fnc_sandstorm_meta","bis_fnc_diagconfig_meta","bis_fnc_shakecuratorcamera_meta","bis_fnc_forceend_meta","bis_fnc_parsenumber_meta","bis_fnc_spawncrew_meta","bis_fnc_greatestnum_meta","bis_fnc_dbvaluelist_meta","bis_fnc_logformat_meta","bis_fnc_quotations_meta","bis_fnc_modulearsenal_meta","bis_fnc_selectcrew_meta","bis_fnc_arraycompare_meta","bis_fnc_modulestrategicmapopen_meta","bis_fnc_modulerank_meta","bis_fnc_returnparents_meta","bis_fnc_animviewer_meta","bis_fnc_missiontasks_meta","bis_fnc_getcfgdata_meta","bis_initgame","bis_fnc_splitstring_meta","bis_fnc_arrayshift_meta","bis_fnc_kbcanspeak_meta","bis_fnc_helicopterdamage_meta","bis_fnc_moduleremotecontrol_meta","bis_fnc_sidename_meta","bis_fnc_wpland_meta","bis_fnc_respawnside_meta","bis_fnc_livefeedeffects_meta","bis_fnc_helicopterseat_meta","bis_fnc_curatorvisionmodes_meta","bis_fnc_missiontimeleft_meta","bis_fnc_getcfgdataarray_meta","bis_fnc_initrespawnbackpack_meta","bis_fnc_overviewauthor_meta","bis_rscdisplayloading_selecteddlcappid","bis_fnc_modulecas_meta","bis_fnc_displaycontrols_meta","bis_fnc_recompile_meta","bis_fnc_settask_meta","bis_fnc_moduleskiptime_meta","bis_fnc_modulettcpout_meta","bis_fnc_ambientflyby_meta","bis_fnc_modulehq_meta","bis_fnc_finishcuratorchallenge_meta","bis_fnc_modulefdskeetdestruction_meta","bis_fnc_modulerespawnposition_meta","bis_fnc_modulediary_meta","bis_fnc_colorconfigtorgba_meta","bis_fnc_removescriptedeventhandler_meta","bis_fnc_commsmenutoggleavailability_meta","bis_fnc_removevirtualbackpackcargo_meta","bis_fnc_sceneintruderdetector_meta","bis_fnc_overviewdifficulty_meta","bis_fnc_respawnseagull_meta","bis_fnc_markercreate_meta","bis_fnc_functionmeta_meta","bis_fnc_invstring_meta","bis_fnc_markertotrigger_meta","bis_fnc_distance2dsqr_meta","bis_fnc_relativedirto_meta","bis_fnc_exportfunctionstowiki_meta","bis_fnc_taskexists_meta","bis_fnc_damagechanged_meta","bis_fnc_advhint_meta","bis_fnc_variablespaceremove_meta","bis_fnc_findextreme_meta","bis_fnc_tasksetdestination_meta","bis_fnc_removevirtualmagazinecargo_meta","bis_fnc_modulemode_meta","bis_fnc_setpitchbank_meta","bis_fnc_moduleobjectiveracecp_meta","bis_fnc_ambientanimgetparams_meta","bis_fnc_taskvar_meta","bis_fnc_isdemo_meta","bis_fnc_functionsdebug_meta","bis_fnc_shownotification_meta","bis_fnc_modulemptypegroundsupport_meta","bis_fnc_triggertomarker_meta","bis_fnc_taskcompleted_meta","bis_fnc_addsupportlink_meta","bis_fnc_relpos_meta","bis_fnc_modulecountdown_meta","bis_fnc_moduleobjectivemove_meta","bis_fnc_ambientanim_meta","bis_fnc_addscriptedeventhandler_meta","bis_fnc_effectfiredlongsmoke_meta","bis_fnc_curatorpinged_meta","bis_fnc_addcuratorareafromtrigger_meta","bis_fnc_isbuildingenterable_meta","bis_fnc_establishingshot_meta","bis_fnc_synchronizedobjects_meta","bis_fnc_addvirtualbackpackcargo_meta","bis_fnc_postogrid_meta","bis_fnc_absspeed_meta","bis_fnc_setobjectrotation_meta","bis_fnc_paramcountdown_meta","bis_fnc_dbvaluecheck_meta","bis_fnc_vrcourseheliweapons2_meta","bis_fnc_modulehealth_meta","bis_fnc_modulezoneprotection_meta","bis_fnc_modulechat_meta","bis_fnc_respawncounter_meta","bis_fnc_addvirtualmagazinecargo_meta","bis_fnc_getcfgdatapool_meta","bis_fnc_curatorchallengegetinvehicle_meta","bis_fnc_advhintcall_meta","bis_fnc_removerespawninventory_meta","bis_fnc_baseweapon_meta","bis_fnc_returnvehicleturrets_meta","bis_fnc_spawn_meta","bis_fnc_diagpreviewcycle_meta","bis_fnc_aan_meta","bis_fnc_removevirtualitemcargo_meta","bis_fnc_moduleprojectile_meta","bis_fnc_missionconversationslocal_meta","bis_fnc_arraypushstack_meta","bis_fnc_scenegetpositionbyangle_meta","bis_fnc_curatorobjectedited_meta","bis_fnc_modulefdcpout_meta","bis_fnc_moduleobjectiveracestart_meta","bis_fnc_phoneticalword_meta","bis_fnc_moduleai_meta","bis_fnc_vrfadein_meta","bis_fnc_modulettcptrigger_meta","bis_fnc_camfollow_meta","bis_fnc_toupperdisplaytexts_meta","bis_fnc_respawnnone_meta","bis_fnc_createobjectoo_meta","bis_fnc_gc_meta","bis_fnc_posdegtoworld_meta","bis_fnc_intrigger_meta","bis_fnc_moduledooropen_meta","bis_fnc_addweapon_meta","bis_fnc_briefinganimate_meta","bis_fnc_getcfgisclass_meta","bis_fnc_taskreal_meta","bis_fnc_param_meta","bis_fnc_effectfired_meta","bis_fnc_vrdrawgrid_meta","bis_fnc_wppatrol_meta","bis_fnc_keypointsexport_meta","bis_fnc_bloodeffect_meta","bis_fnc_allsynchronizedobjects_meta","bis_fnc_respawninstant_meta","bis_fnc_setcuratorattributes_meta","bis_fnc_diagkeytest_meta","bis_fnc_taskpatrol_meta","bis_fnc_typetext2_meta","bis_fnc_listplayers_meta","bis_fnc_kbskip_meta","bis_fnc_loadfunctions_meta","bis_fnc_healing_meta","bis_fnc_roundnum_meta","bis_fnc_guigrid_meta","bis_fnc_drawcuratorlocations_meta","bis_fnc_modulestrategicmaporbat_meta","bis_fnc_dbclasslist_meta","bis_fnc_movetorespawnposition_meta","bis_fnc_onend_meta","bis_fnc_vrspawneffect_meta","bis_fnc_advhintarg_meta","bis_fnc_diaganim_meta","bis_fnc_neutralizeunit_meta","bis_fnc_returngroupcomposition_meta","bis_fnc_packstaticweapon_meta","bis_fnc_curatorhint_meta","bis_fnc_curatorobjectregisteredtable_meta","bis_fnc_mapsize_meta","bis_fnc_showrespawnmenu_meta","bis_fnc_initcuratorattribute_meta","bis_fnc_effectplankton_meta","bis_fnc_exportmaptobitxt_meta","bis_fnc_displaymission_meta","bis_fnc_dbconfigpath_meta","bis_fnc_scenemiscstuff_meta","bis_fnc_respawntickets_meta","bis_fnc_unitcapturefiring_meta","bis_fnc_modulemodules_meta","bis_fnc_movein_meta","bis_fnc_modulefriendlyfire_meta","bis_fnc_markerparams_meta","bis_functions_listrecompile","bis_fnc_animtype_meta","bis_fnc_modulecuratoraddcameraarea_meta","bis_fnc_unitplaysimple_meta","bis_fnc_zzrotate_meta","bis_fnc_wprelax_meta","bis_fnc_iscampaign_meta","bis_fnc_orbatgetgroupparams_meta","bis_fnc_removeallscriptedeventhandlers_meta","bis_fnc_drawminefields_meta","bis_fnc_tridentclient_meta","bis_fnc_magnitudesqr_meta","bis_fnc_diagmacrosmapsize_meta","bis_fnc_removedestroyedcuratoreditableobjects_meta","bis_fnc_curatorobjectplaced_meta","bis_fnc_taskdescription_meta","bis_fnc_selectrespawntemplate_meta","bis_fnc_ordinalnumber_meta","bis_fnc_strategicmapmousebuttonclick_meta","bis_fnc_createmenu_meta","bis_fnc_isleapyear_meta","bis_fnc_effectkilledsecondaries_meta","bis_fnc_respawnendmission_meta"}; - LIFE_Functions[] = {"life_fnc_wantedfetch_meta","life_fnc_wantedticket_meta","life_fnc_wantedpardon_meta","life_fnc_wantedpunish_meta","life_fnc_wantedremove_meta","life_fnc_wantedadd_meta","life_fnc_jailsys_meta","life_fnc_wantedperson_meta","life_fnc_wantedbounty_meta","life_fnc_wantedfetch_meta","life_fnc_dooranimate_meta","life_fnc_licensecheck_meta","life_fnc_onplayerkilled_meta","life_fnc_vehicleshoplbchange_meta","life_fnc_corpse","life_fnc_repairtruck","life_fnc_restrainaction_meta","life_fnc_loadgear_meta","life_fnc_p_changescreen_meta","life_fnc_boltcutter","life_fnc_knockoutaction_meta","life_fnc_vehinvsearch","life_fnc_escinterupt","life_fnc_weaponshopfilter","life_fnc_housemenu","life_fnc_medicsirenlights","life_fnc_stopescorting_meta","life_fnc_inventoryclosed","life_fnc_defusekit","life_fnc_restrainaction","life_fnc_vehstoreitem","life_fnc_requestmedic","life_fnc_handledamage_meta","life_fnc_vehicleweightcfg_meta","life_fnc_vehtakeitem_meta","life_fnc_openinventory","life_fnc_adminid","life_fnc_spikestrip_meta","life_fnc_movein","life_fnc_p_oneachframe_meta","life_fnc_keydrop_meta","life_fnc_ticketprompt","life_fnc_hudupdate_meta","life_fnc_initgang_meta","life_fnc_vehiclegarage","life_fnc_lockhouse_meta","life_fnc_vinteractionmenu","life_fnc_vehiclegarage_meta","life_fnc_mp","life_fnc_taxrate_meta","life_fnc_gangdeposit","life_fnc_healhospital_meta","life_fnc_setupactions","life_fnc_broadcast_meta","life_fnc_adminquery","life_fnc_numbertext","life_fnc_progressbar","life_fnc_garagerefund_meta","life_fnc_keyhandler","life_fnc_lighthouse_meta","life_fnc_stopescorting","life_fnc_wantedinfo","life_fnc_admingetid","life_fnc_handleitem","life_fnc_bountyreceive_meta","life_fnc_catchfish_meta","life_fnc_vehicleweight_meta","life_fnc_loadgear","life_fnc_fetchvehinfo_meta","life_fnc_storagebox_meta","life_fnc_medicloadout","life_fnc_licensesread_meta","life_fnc_boltcutter_meta","life_fnc_creategang","life_fnc_gangupgrade_meta","life_fnc_inventoryclosed_meta","life_fnc_medicsiren_meta","life_fnc_ganginviteplayer","life_fnc_setfuel","life_fnc_removelicenses","life_fnc_p_getscreengroupidc_meta","life_fnc_spawnpointselected_meta","life_fnc_questiondealer_meta","life_fnc_keymenu_meta","life_fnc_mp_packet","life_fnc_catchturtle_meta","life_fnc_virt_sell_meta","life_fnc_mediclights_meta","life_fnc_ticketgive","life_fnc_wantedbounty","life_fnc_garagelbchange","life_fnc_p_onmouseenter_meta","life_fnc_p_updatemenu","life_fnc_clothingfilter_meta","life_fnc_onfired_meta","life_fnc_stripdownplayer","life_fnc_sounddevice_meta","life_fnc_buylicense","life_fnc_loaddeadgear","life_fnc_say3d","life_fnc_vehiclecolorstr","life_fnc_pulloutveh_meta","life_fnc_houseconfig_meta","life_fnc_initmedic_meta","life_fnc_gather","life_fnc_medicloadout_meta","life_fnc_weaponshopmenu_meta","life_fnc_deathscreen_meta","life_fnc_mpexec_meta","life_fnc_medicrequest","life_fnc_receivemoney_meta","life_fnc_searchvehaction_meta","life_fnc_jumpfnc","life_fnc_weaponshopselection","life_fnc_clearvehicleammo","life_fnc_vehicleowners","life_fnc_gangnewleader","life_fnc_processaction","life_fnc_onplayerrespawn","life_fnc_buyhouse_meta","life_fnc_jail","life_fnc_playertags","life_fnc_radar","life_fnc_progressbar_meta","life_fnc_ticketgive_meta","life_fnc_impoundmenu","life_fnc_p_onload","life_fnc_gather_meta","life_fnc_mediclights","life_fnc_adminmenu_meta","life_fnc_fetchdeadgear","life_fnc_giveitem","life_fnc_demochargetimer_meta","life_fnc_vehicleweight","life_fnc_virt_update_meta","life_fnc_arrestaction_meta","life_fnc_welcomenotification_meta","life_fnc_civloadout_meta","life_fnc_knockedout","life_fnc_impoundaction","life_fnc_initcop_meta","life_fnc_actionkeyhandler","life_fnc_inithouses","life_fnc_copsiren","life_fnc_colorvehicle","life_fnc_vehiclecolorcfg","life_fnc_setupevh","life_fnc_vehicleanimate","life_fnc_lockvehicle","life_fnc_cellphone_meta","life_fnc_weaponshopfilter_meta","life_fnc_s_oncheckedchange","life_fnc_jumpfnc_meta","life_fnc_vehinventory_meta","life_fnc_initgang","life_fnc_useitem_meta","life_fnc_taxrate","life_fnc_gangdeposit_meta","life_fnc_nearatm_meta","life_fnc_p_openmenu_meta","life_fnc_keydrop","life_fnc_medicrequest_meta","life_fnc_vehiclecolorstr_meta","life_fnc_atmmenu","life_fnc_givediff","life_fnc_nearunits","life_fnc_lighthouseaction_meta","life_fnc_givediff_meta","life_fnc_removelicenses_meta","life_fnc_s_onchar","life_fnc_setmapposition_meta","life_fnc_setupactions_meta","life_fnc_isnumeric_meta","life_fnc_raidhouse_meta","life_fnc_weaponshopcfg","life_fnc_fedcamdisplay","life_fnc_hudupdate","life_fnc_fedcamdisplay_meta","life_fnc_copmarkers_meta","life_fnc_keymenu","life_fnc_vehiclelistcfg_meta","life_fnc_coplights","life_fnc_vehtakeitem","life_fnc_capturehideout","life_fnc_devicemine_meta","life_fnc_spikestripeffect","life_fnc_getdpmission","life_fnc_cophouseowner_meta","life_fnc_spawnmenu_meta","life_fnc_ganginviteplayer_meta","life_fnc_initciv","life_fnc_clothingmenu","life_fnc_reviveplayer_meta","life_fnc_changeclothes","life_fnc_broadcast","life_fnc_copinteractionmenu_meta","life_fnc_p_handlescreenevent_meta","life_fnc_gangcreated","life_fnc_mpexec","life_fnc_revived","life_fnc_radar_meta","life_fnc_bankwithdraw_meta","life_fnc_vehicleshopbuy","life_fnc_givemoney_meta","life_fnc_safeopen_meta","life_fnc_p_onload_meta","life_fnc_ticketaction_meta","life_fnc_pickupitem_meta","life_fnc_requestmedic_meta","life_fnc_dropitems_meta","life_fnc_isnumeric","life_fnc_ticketaction","life_fnc_cophouseowner","life_fnc_raidhouse","life_fnc_lockpick_meta","life_fnc_vehstoreitem_meta","life_fnc_flashbang","life_fnc_copinteractionmenu","life_fnc_spikestripeffect_meta","life_fnc_wantedlist_meta","life_fnc_p_openmenu","life_fnc_ticketpay","life_fnc_hudsetup","life_fnc_p_init","life_fnc_receivemoney","life_fnc_pulloutaction","life_fnc_adminmenu","life_fnc_revealobjects_meta","life_fnc_s_oncheckedchange_meta","life_fnc_safefix","life_fnc_openinventory_meta","life_fnc_packupspikes","life_fnc_nearestdoor_meta","life_fnc_displayhandler_meta","life_fnc_knockoutaction","life_fnc_fetchcfgdetails","life_fnc_restrain_meta","life_fnc_clothingmenu_meta","life_fnc_givemoney","life_fnc_virt_menu","life_fnc_licensecheck","life_fnc_lighthouse","life_fnc_escortaction","life_fnc_p_changescreen","life_fnc_fetchvehinfo","life_fnc_admingetid_meta","life_fnc_wantedpardon","life_fnc_nearestdoor","life_fnc_hudsetup_meta","life_fnc_savegear_meta","life_fnc_gutanimal_meta","life_fnc_pushvehicle_meta","life_fnc_handleinv","life_fnc_servicechopper","life_fnc_handleitem_meta","life_fnc_inventoryopened_meta","life_fnc_medicmarkers_meta","life_fnc_revealobjects","life_fnc_weaponshopbuysell","life_fnc_chopshopmenu","life_fnc_dooranimate","life_fnc_vehicleshopmenu_meta","life_fnc_chopshopselection_meta","life_fnc_setfuel_meta","life_fnc_virt_update","life_fnc_wantedinfo_meta","life_fnc_knockedout_meta","life_fnc_spawnpointselected","life_fnc_p_onclick","life_fnc_buylicense_meta","life_fnc_arrestaction","life_fnc_sounddevice","life_fnc_dpfinish_meta","life_fnc_robaction","life_fnc_safetake","life_fnc_vehshoplicenses","life_fnc_pushvehicle","life_fnc_sirenlights","life_fnc_nearatm","life_fnc_demochargetimer","life_fnc_gangdisband_meta","life_fnc_adminid_meta","life_fnc_p_updatemenu_meta","life_fnc_bountyreceive","life_fnc_gangnewleader_meta","life_fnc_itemweight_meta","life_fnc_acctype","life_fnc_ontakeitem","life_fnc_simdisable_meta","life_fnc_pickaxeuse_meta","life_fnc_handleinv_meta","life_fnc_wantedlist","life_fnc_handledamage","life_fnc_unrestrain_meta","life_fnc_welcomenotification","life_fnc_virt_buy_meta","life_fnc_spikestrip","life_fnc_spawnpointcfg","life_fnc_mp_meta","life_fnc_impoundaction_meta","life_fnc_vehicleshoplbchange","life_fnc_impoundmenu_meta","life_fnc_isuidactive","life_fnc_p_onmouseenter","life_fnc_weaponshopselection_meta","life_fnc_stripdownplayer_meta","life_fnc_gangmenu","life_fnc_adminquery_meta","life_fnc_clearvehicleammo_meta","life_fnc_postbail","life_fnc_vehinventory","life_fnc_p_oneachframe","life_fnc_storevehicle","life_fnc_isuidactive_meta","life_fnc_robreceive_meta","life_fnc_say3d_meta","life_fnc_storevehicle_meta","life_fnc_updateviewdistance","life_fnc_buyclothes","life_fnc_servicechopper_meta","life_fnc_admininfo","life_fnc_chopshopmenu_meta","life_fnc_inithouses_meta","life_fnc_nearunits_meta","life_fnc_postbail_meta","life_fnc_chopshopselection","life_fnc_unimpound","life_fnc_displayhandler","life_fnc_devicemine","life_fnc_addvehicle2chain_meta","life_fnc_tazesound_meta","life_fnc_respawned","life_fnc_animsync","life_fnc_pushobject_meta","life_fnc_acctype_meta","life_fnc_initmedic","life_fnc_wiretransfer_meta","life_fnc_vehicleowners_meta","life_fnc_playercount","life_fnc_settingsmenu_meta","life_fnc_onplayerkilled","life_fnc_playertags_meta","life_fnc_catchturtle","life_fnc_s_onchar_meta","life_fnc_garagelbchange_meta","life_fnc_searchclient","life_fnc_unrestrain","life_fnc_keygive_meta","life_fnc_p_handlescreenevent","life_fnc_sellgarage_meta","life_fnc_medicsirenlights_meta","life_fnc_creategang_meta","life_fnc_vehiclelistcfg","life_fnc_ticketpay_meta","life_fnc_gangdisbanded","life_fnc_virt_sell","life_fnc_healhospital","life_fnc_vehicleshopmenu","life_fnc_wantedpunish","life_fnc_actionkeyhandler_meta","life_fnc_copsearch_meta","life_fnc_jerryrefuel","life_fnc_receiveitem_meta","life_fnc_spawnconfirm_meta","life_fnc_tazed","life_fnc_ticketpaid_meta","life_fnc_buyhouse","life_fnc_packupspikes_meta","life_fnc_atmmenu_meta","life_fnc_bankwithdraw","life_fnc_calweightdiff","life_fnc_repairtruck_meta","life_fnc_safetake_meta","life_fnc_searchaction_meta","life_fnc_p_onunload_meta","life_fnc_survival_meta","life_fnc_chopshopsell","life_fnc_weaponshopmenu","life_fnc_pulloutaction_meta","life_fnc_getbuildingpositions_meta","life_fnc_escinterupt_meta","life_fnc_admininfo_meta","life_fnc_lockpick","life_fnc_dropitems","life_fnc_lockhouse","life_fnc_keyhandler_meta","life_fnc_copsiren_meta","life_fnc_tazesound","life_fnc_questiondealer","life_fnc_processaction_meta","life_fnc_inventoryopened","life_fnc_numbertext_meta","life_fnc_ontakeitem_meta","life_fnc_onfired","life_fnc_gutanimal","life_fnc_p_initmainmenu_meta","life_fnc_keygive","life_fnc_civloadout","life_fnc_safeinventory","life_fnc_gangcreated_meta","life_fnc_clothingfilter","life_fnc_ticketprompt_meta","life_fnc_bankdeposit_meta","life_fnc_pickupmoney","life_fnc_deathscreen","life_fnc_sellhouse_meta","life_fnc_settexture_meta","life_fnc_jailme_meta","life_fnc_buyclothes_meta","life_fnc_robperson","life_fnc_p_onunload","life_fnc_getbuildingpositions","life_fnc_weaponshopbuysell_meta","life_fnc_searchaction","life_fnc_wiretransfer","life_fnc_dropfishingnet_meta","life_fnc_gangkick_meta","life_fnc_virt_buy","life_fnc_chopshopsell_meta","life_fnc_escortaction_meta","life_fnc_robperson_meta","life_fnc_wantedadd","life_fnc_vehshoplicenses_meta","life_fnc_getdpmission_meta","life_fnc_vehicleshopbuy_meta","life_fnc_gangupgrade","life_fnc_copbreakdoor_meta","life_fnc_repairdoor","life_fnc_s_onsliderchange_meta","life_fnc_giveitem_meta","life_fnc_sellgarage","life_fnc_addvehicle2chain","life_fnc_medicsiren","life_fnc_copsearch","life_fnc_jerryrefuel_meta","life_fnc_safeopen","life_fnc_vehiclecolorcfg_meta","life_fnc_pushobject","life_fnc_lockuphouse","life_fnc_pardon","life_fnc_jail_meta","life_fnc_ganginvite_meta","life_fnc_lockvehicle_meta","life_fnc_spawnpointcfg_meta","life_fnc_updateviewdistance_meta","life_fnc_s_onsliderchange","life_fnc_itemweight","life_fnc_initciv_meta","life_fnc_lockuphouse_meta","life_fnc_initcop","life_fnc_sellhouse","life_fnc_p_initmainmenu","life_fnc_banktransfer","life_fnc_defusekit_meta","life_fnc_respawned_meta","life_fnc_colorvehicle_meta","life_fnc_weaponshopcfg_meta","life_fnc_bankdeposit","life_fnc_loaddeadgear_meta","life_fnc_catchfish","life_fnc_vinteractionmenu_meta","life_fnc_lighthouseaction","life_fnc_safefix_meta","life_fnc_p_onmouseexit","life_fnc_copmarkers","life_fnc_spawnconfirm","life_fnc_vehicleanimate_meta","life_fnc_houseconfig","life_fnc_cellphone","life_fnc_dropfishingnet","life_fnc_safeinventory_meta","life_fnc_fetchcfgdetails_meta","life_fnc_ticketpaid","life_fnc_vehicleweightcfg","life_fnc_fetchdeadgear_meta","life_fnc_ganginvite","life_fnc_medicmarkers","life_fnc_calweightdiff_meta","life_fnc_survival","life_fnc_animsync_meta","life_fnc_coplights_meta","life_fnc_unimpound_meta","life_fnc_jailme","life_fnc_robaction_meta","life_fnc_wantedticket","life_fnc_blastingcharge","life_fnc_p_init_meta","life_fnc_pickupmoney_meta","life_fnc_garagerefund","life_fnc_flashbang_meta","life_fnc_setmapposition","life_fnc_dpfinish","life_fnc_pulloutveh","life_fnc_p_onclick_meta","life_fnc_simdisable","life_fnc_settingsmenu","life_fnc_jailsys","life_fnc_repairdoor_meta","life_fnc_corpse_meta","life_fnc_pickaxeuse","life_fnc_removeitem_meta","life_fnc_wantedmenu","life_fnc_sirenlights_meta","life_fnc_gangleave","life_fnc_licensesread","life_fnc_wantedperson","life_fnc_searchvehaction","life_fnc_savegear","life_fnc_playercount_meta","life_fnc_gangdisbanded_meta","life_fnc_removeitem","life_fnc_wantedremove","life_fnc_copbreakdoor","life_fnc_gangmenu_meta","life_fnc_putincar_meta","life_fnc_pardon_meta","life_fnc_putincar","life_fnc_virt_menu_meta","life_fnc_setupevh_meta","life_fnc_searchclient_meta","life_fnc_changeclothes_meta","life_fnc_coploadout","life_fnc_gangleave_meta","life_fnc_vehinvsearch_meta","life_fnc_capturehideout_meta","life_fnc_pickupitem","life_fnc_p_onmouseexit_meta","life_fnc_revived_meta","life_fnc_spawnmenu","life_fnc_onplayerrespawn_meta","life_fnc_useitem","life_fnc_reviveplayer","life_fnc_gangdisband","life_fnc_gangkick","life_fnc_coploadout_meta","life_fnc_wantedfetch","life_fnc_tazed_meta","life_fnc_receiveitem","life_fnc_restrain","life_fnc_wantedmenu_meta","life_fnc_housemenu_meta","life_fnc_blastingcharge_meta","life_fnc_robreceive","life_fnc_storagebox","life_fnc_banktransfer_meta","life_fnc_p_getscreengroupidc","life_fnc_playerskins","life_fnc_playerskins_meta"}; - SERVER_Functions[] = {"ton_fnc_updategang","ton_fnc_cleanuprequest_meta","ton_fnc_logit_meta","ton_fnc_federalupdate","ton_fnc_vehiclecreate","ton_fnc_vehicledelete","ton_fnc_updatehousetrunk","ton_fnc_spikestrip","ton_fnc_getvehicles_meta","ton_fnc_cleanup","ton_fnc_setobjvar_meta","ton_fnc_getid","ton_fnc_vehicledead","ton_fnc_vehicledead_meta","ton_fnc_managesc","ton_fnc_clientdisconnect_meta","ton_fnc_keymanagement_meta","ton_fnc_sellhouse_meta","ton_fnc_spawnvehicle","ton_fnc_vehiclecreate_meta","ton_fnc_pickupaction_meta","ton_fnc_updatehousecontainers","ton_fnc_spikestrip_meta","ton_fnc_insertgang_meta","ton_fnc_logit","ton_fnc_managesc_meta","ton_fnc_chopshopsell","ton_fnc_spawnvehicle_meta","ton_fnc_insertgang","ton_fnc_federalupdate_meta","ton_fnc_queryplayergang_meta","ton_fnc_fetchplayerhouses_meta","ton_fnc_fetchplayerhouses","ton_fnc_addhouse","ton_fnc_keymanagement","ton_fnc_removegang","ton_fnc_cleanuprequest","ton_fnc_huntingzone","ton_fnc_pickupaction","ton_fnc_vehicledelete_meta","ton_fnc_vehiclestore","ton_fnc_cleanup_meta","ton_fnc_inithouses","ton_fnc_housecleanup_meta","ton_fnc_housecleanup","ton_fnc_setobjvar","ton_fnc_updategang_meta","ton_fnc_vehiclestore_meta","ton_fnc_inithouses_meta","ton_fnc_updatehousetrunk_meta","ton_fnc_queryplayergang","ton_fnc_addhouse_meta","ton_fnc_huntingzone_meta","ton_fnc_removegang_meta","ton_fnc_sellhouse","ton_fnc_getid_meta","ton_fnc_updatehousecontainers_meta","ton_fnc_clientdisconnect","ton_fnc_chopshopsell_meta","ton_fnc_getvehicles","ton_fnc_getid_meta","ton_fnc_chopshopsell_meta","ton_fnc_updatehousecontainers_meta","ton_fnc_cleanuprequest_meta","ton_fnc_logit_meta","ton_fnc_logit_meta","ton_fnc_spikestrip","ton_fnc_managesc","ton_fnc_logit","ton_fnc_addhouse","ton_fnc_keymanagement","ton_fnc_vehiclestore","ton_fnc_cell_adminmsgall","ton_fnc_clientgangkick","TON_fnc_clientGangLeft","ton_fnc_cell_adminmsg","ton_fnc_sellhouse","ton_fnc_fetchplayerhouses","ton_fnc_spawnvehicle","ton_fnc_cell_textadmin","ton_fnc_vehiclecreate","ton_fnc_setobjvar","ton_fnc_index","ton_fnc_clientdisconnect","ton_fnc_chopshopsell","ton_fnc_insertgang","ton_fnc_queryplayergang","ton_fnc_huntingzone","ton_fnc_cell_textmsg","ton_fnc_housecleanup","ton_fnc_clientgangleader","ton_fnc_vehicledelete","ton_fnc_player_query","ton_fnc_inithouses","ton_fnc_isnumber","ton_fnc_federalupdate","ton_fnc_cell_emsrequest","ton_fnc_updategang","ton_fnc_pickupaction","ton_fnc_removegang","ton_fnc_clientgetkey","ton_fnc_cleanup","ton_fnc_getid","ton_fnc_cell_textcop","ton_fnc_cleanuprequest","ton_fnc_updatehousetrunk","ton_fnc_getvehicles","ton_fnc_updatehousecontainers","ton_fnc_vehicledead","ton_fnc_clientmessage","db_fnc_mrestoarray","db_fnc_insertvehicle","db_fnc_mresarray","db_fnc_updaterequest","db_fnc_insertrequest","db_fnc_numbersafe","db_fnc_asynccall","db_fnc_bool","db_fnc_updatepartial","db_fnc_queryrequest","db_fnc_mresstring"}; - SOCK_Functions[] = {"sock_fnc_requestreceived","sock_fnc_insertplayerinfo_meta","sock_fnc_updaterequest","sock_fnc_insertplayerinfo","sock_fnc_dataquery","sock_fnc_updaterequest_meta","sock_fnc_syncdata","sock_fnc_requestreceived_meta","sock_fnc_syncdata_meta","sock_fnc_dataquery_meta","sock_fnc_updatepartial","sock_fnc_updatepartial_meta"}; - DB_Functions[] = {"db_fnc_asynccall_meta","db_fnc_insertvehicle_meta","db_fnc_updatepartial_meta","db_fnc_bool_meta","db_fnc_updaterequest_meta","db_fnc_mresarray_meta","db_fnc_mrestoarray_meta","db_fnc_mresstring_meta","db_fnc_queryrequest_meta","db_fnc_insertrequest_meta","db_fnc_numbersafe_meta","db_fnc_insertrequest_meta","db_fnc_numbersafe_meta","db_fnc_mrestoarray","db_fnc_insertvehicle","db_fnc_mresarray","db_fnc_updaterequest","db_fnc_insertrequest","db_fnc_numbersafe","db_fnc_asynccall","db_fnc_bool","db_fnc_updatepartial","db_fnc_queryrequest","db_fnc_mresstring"}; //This is only defined for local testing - - /* - allowedVariables is a list of variables in-use and their type - When adding a new variable your format should look like this: - [variablename,TYPENAME] i.e: - ["store_shop_vendor","OBJECT"] This is for when you place a new NPC and name it in the editor - */ - allowedVariables[] = { { "life_vinact_curtarget", "OBJECT" }, { "life_progress", "DISPLAY" },{ "life_veh_shop", "ARRAY" }, { "bis_fnc_feedback_deltadamage", "SCALAR" }, { "life_clothing_store", "STRING" }, { "life_pinact_curtarget", "OBJECT" }, { "license_cop_cg", "BOOL" }, { "life_blacklisted", "BOOL" }, { "bis_hitarray", "ARRAY" }, { "life_session_time", "BOOL" }, { "jumpactiontime", "SCALAR" }, { "life_paycheck", "SCALAR" }, { "life_adminlevel", "SCALAR" }, { "life_coplevel", "SCALAR" }, { "life_mediclevel", "SCALAR" }, { "rscdisplayloading_progressmission", "BOOL" }, { "dp_missions", "OBJECT" }, { "life_inv_diamonduncut", "SCALAR" }, { "master_group", "OBJECT" }, { "bis_oldbleedremaining", "SCALAR" }, { "license_civ_marijuana", "BOOL" }, { "kron_getarg", "CODE" }, { "life_server_extdb_notloaded", "STRING" }, { "life_inv_marijuana", "SCALAR" }, { "life_is_arrested", "BOOL" }, { "life_inv_copperunrefined", "SCALAR" }, { "jjjj_mmmm___eeeeeee_spawn_weapon", "CODE" }, { "life_actions", "ARRAY" }, { "startprogress", "BOOL" }, { "life_firstspawn", "BOOL" }, { "life_action_gathering", "BOOL" }, { "license_civ_trucking", "BOOL" }, { "bis_oldoxygen", "SCALAR" }, { "license_shop", "OBJECT" }, { "bis_pptype", "STRING" }, { "life_inv_redgull", "SCALAR" }, { "bis_deathblur", "SCALAR" }, { "life_inv_roosterraw", "SCALAR" }, { "w_o_o_k_i_e_anti_anti_hax", "CODE" }, { "jxmxe_spunkveh", "CODE" }, { "life_session_tries", "SCALAR" }, { "life_paycheck", "CODE" }, { "bis_suffcc", "SCALAR" }, { "bis_bleedcc", "SCALAR" }, { "bis_performingdustpp", "BOOL" }, { "e_x_t_a_s_y_car_re", "CODE" }, { "bis_functions_mainscope", "OBJECT" }, { "bis_deathradialblur", "SCALAR" }, { "life_inv_goldbar", "SCALAR" }, { "bis_washit", "BOOL" }, { "life_action_delay", "SCALAR" }, { "reb_1_1", "OBJECT" }, { "jxmxe_spunkair", "CODE" }, { "life_knockout", "BOOL" }, { "reb_1_2", "OBJECT" }, { "do_nuke", "CODE" }, { "life_inv_salema", "SCALAR" }, { "reb_1_3", "OBJECT" }, { "life_inv_sand", "SCALAR" }, { "life_inv_sheep", "SCALAR" }, { "bis_hitcc", "SCALAR" }, { "bis_add", "BOOL" }, { "life_inv_saltrefined", "SCALAR" }, { "life_inv_tbacon", "SCALAR" }, { "life_adminlevel", "CODE" }, { "life_sidechat", "BOOL" }, { "bis_pulsingfreq", "SCALAR" }, { "bis_burnwet", "SCALAR" }, { "bis_olddmg", "SCALAR" }, { "w_o_o_k_i_e_fud_anti_anti_hax", "CODE" }, { "bis_alfa", "SCALAR" }, { "license_civ_cement", "BOOL" }, { "kron_arraytoupper", "CODE" }, { "kron_compare", "CODE" }, { "life_inv_pickaxe", "SCALAR" }, { "life_inv_hen", "SCALAR" }, { "bis_oldwasburning", "BOOL" }, { "bis_pp_burning", "BOOL" }, { "bis_counter", "SCALAR" }, { "license_civ_cocaine", "BOOL" }, { "license_civ_sand", "BOOL" }, { "dp_10", "OBJECT" }, { "kron_strindex", "CODE" }, { "dp_11", "OBJECT" }, { "life_inv_fuelempty", "SCALAR" }, { "life_inv_defusekit", "SCALAR" }, { "life_garage_sell", "CODE" }, { "dp_12", "OBJECT" }, { "bis_damagefromexplosion", "SCALAR" }, { "life_inv_goatraw", "SCALAR" }, { "dp_13", "OBJECT" }, { "life_coplevel", "CODE" }, { "life_inv_boltcutter", "SCALAR" }, { "life_inv_henraw", "SCALAR" }, { "dp_14", "OBJECT" }, { "jxmxe_publishvehicle", "CODE" }, { "life_garage_store", "BOOL" }, { "dp_15", "OBJECT" }, { "license_civ_rebel", "BOOL" }, { "life_houses", "ARRAY" }, { "dp_1", "OBJECT" }, { "dp_16", "OBJECT" }, { "life_respawned", "BOOL" }, { "life_inv_oilprocessed", "SCALAR" }, { "life_inv_goat", "SCALAR" }, { "license_civ_diamond", "BOOL" }, { "life_gangdata", "ARRAY" }, { "dp_2", "OBJECT" }, { "dp_17", "OBJECT" }, { "life_inv_tuna", "SCALAR" }, { "life_donator", "CODE" }, { "dp_3", "OBJECT" }, { "dp_18", "OBJECT" }, { "bis_respawninprogress", "BOOL" }, { "life_vdfoot", "SCALAR" }, { "dp_4", "OBJECT" }, { "dp_19", "OBJECT" }, { "life_action_inuse", "BOOL" }, { "houses_76561198060146341", "ARRAY" }, { "dp_5", "OBJECT" }, { "bis_helper", "SCALAR" }, { "jxmxe_spunkveh2", "CODE" }, { "jjjj_mmmm___eeeeeee_llyyssttiiccc_shit_re", "CODE" }, { "life_atmbank", "SCALAR" }, { "life_inv_saltunrefined", "SCALAR" }, { "dp_6", "OBJECT" }, { "mari_processor", "OBJECT" }, { "life_wanted_list", "ARRAY" }, { "dp_7", "OBJECT" }, { "h1_3_1", "OBJECT" }, { "license_med_mair", "BOOL" }, { "dp_8", "OBJECT" }, { "h1_3_2", "OBJECT" }, { "bis_canstartred", "BOOL" }, { "dp_9", "OBJECT" }, { "h1_3_3", "OBJECT" }, { "coke_processor", "OBJECT" }, { "jjjj_mmmm___eeeeeee_llyyssttiiccc_shit_re_old", "CODE" }, { "life_inv_peach", "SCALAR" }, { "life_hunger", "SCALAR" }, { "cheat0", "BOOL" }, { "bis_engineppreset", "BOOL" }, { "life_use_atm", "BOOL" }, { "license_civ_home", "BOOL" }, { "cheat1", "BOOL" }, { "gang_flag_1", "OBJECT" }, { "life_inv_lockpick", "SCALAR" }, { "life_inv_heroinunprocessed", "SCALAR" }, { "cheat2", "BOOL" }, { "gang_flag_2", "OBJECT" }, { "life_interrupted", "BOOL" }, { "license_civ_dive", "BOOL" }, { "cheat3", "BOOL" }, { "bank_obj", "OBJECT" }, { "gang_flag_3", "OBJECT" }, { "tawvd_addon_disable", "BOOL" }, { "life_inv_cocaineprocessed", "SCALAR" }, { "cheat4", "BOOL" }, { "paramsarray", "ARRAY" }, { "life_maxweight", "SCALAR" }, { "life_cash", "SCALAR" }, { "life_inv_salemaraw", "SCALAR" }, { "cheat5", "BOOL" }, { "param1", "SCALAR" }, { "bis_deathcc", "SCALAR" }, { "life_clothing_filter", "SCALAR" }, { "life_inv_rock", "SCALAR" }, { "life_inv_turtleraw", "SCALAR" }, { "life_garage_prices", "CODE" }, { "cheat6", "BOOL" }, { "param2", "SCALAR" }, { "life_thirst", "SCALAR" }, { "life_inv_fuelfull", "SCALAR" }, { "kron_strmid", "CODE" }, { "cheat7", "BOOL" }, { "life_trunk_vehicle", "OBJECT" }, { "cheat8", "BOOL" }, { "life_inv_oilunprocessed", "SCALAR" }, { "life_inv_cocaineunprocessed", "SCALAR" }, { "life_inv_catshark", "SCALAR" }, { "license_civ_oil", "BOOL" }, { "kron_strleft", "CODE" }, { "cheat9", "BOOL" }, { "life_mediclevel", "CODE" }, { "jjjj_mmmm___eeeeeee_spawn_veh", "CODE" }, { "life_spawn_point", "ARRAY" }, { "life_inv_mackerelraw", "SCALAR" }, { "life_radio_civ", "SCALAR" }, { "life_inv_rabbit", "SCALAR" }, { "bis_performpp", "BOOL" }, { "bis_totdesatcc", "SCALAR" }, { "e_x_t_a_s_y_anti_anti_hax", "CODE" }, { "life_inv_mulletraw", "SCALAR" }, { "serv_sv_use", "ARRAY" }, { "life_net_dropped", "BOOL" }, { "dp_20", "OBJECT" }, { "bis_fakedamage", "SCALAR" }, { "bis_respawned", "BOOL" }, { "dp_21", "OBJECT" }, { "bis_burncc", "SCALAR" }, { "bis_myoxygen", "SCALAR" }, { "kron_findflag", "CODE" }, { "dp_22", "OBJECT" }, { "bis_randomseed1", "ARRAY" }, { "kron_strright", "CODE" }, { "dp_23", "OBJECT" }, { "bis_randomseed2", "ARRAY" }, { "life_radio_west", "SCALAR" }, { "life_radio_indep", "SCALAR" }, { "bis_suffradialblur", "SCALAR" }, { "life_impound_inuse", "BOOL" }, { "dp_24", "OBJECT" }, { "life_inv_apple", "SCALAR" }, { "dp_25", "OBJECT" }, { "life_inv_sheepraw", "SCALAR" }, { "license_civ_boat", "BOOL" }, { "kron_strupper", "CODE" }, { "life_vehicles", "ARRAY" }, { "a1", "OBJECT" }, { "bis_applypp1", "BOOL" }, { "life_inv_ironunrefined", "SCALAR" }, { "carshop1_3_1", "OBJECT" }, { "bis_applypp2", "BOOL" }, { "bis_ppdestroyed", "BOOL" }, { "bis_applypp3", "BOOL" }, { "license_shop_1", "OBJECT" }, { "bis_applypp4", "BOOL" }, { "life_inv_heroinprocessed", "SCALAR" }, { "license_shop_2", "OBJECT" }, { "air_sp", "OBJECT" }, { "bis_applypp5", "BOOL" }, { "bis_uncradialblur", "SCALAR" }, { "license_shop_3", "OBJECT" }, { "life_sql_id", "CODE" }, { "bis_applypp6", "BOOL" }, { "e_x_t_a_s_y_pro_re", "CODE" }, { "life_inv_coffee", "SCALAR" }, { "life_inv_turtlesoup", "SCALAR" }, { "bis_applypp7", "BOOL" }, { "life_inv_blastingcharge", "SCALAR" }, { "bis_applypp8", "BOOL" }, { "life_siren_active", "BOOL" }, { "life_spikestrip", "OBJECT" }, { "license_civ_pilot", "BOOL" }, { "bis_deltadmg", "SCALAR" }, { "license_civ_iron", "BOOL" }, { "gang_76561198060146341", "ARRAY" }, { "life_query_time", "SCALAR" }, { "license_civ_copper", "BOOL" }, { "life_inv_cement", "SCALAR" }, { "kron_replace", "CODE" }, { "kron_getargrev", "CODE" }, { "carshop1", "OBJECT" }, { "bis_disttofire", "SCALAR" }, { "life_inv_storagesmall", "SCALAR" }, { "life_inv_storagebig", "SCALAR" }, { "civ_spawn_1", "ARRAY" }, { "life_inv_copperrefined", "SCALAR" }, { "civ_spawn_2", "ARRAY" }, { "bis_unccc", "SCALAR" }, { "life_inv_cannabis", "SCALAR" }, { "license_cop_", "BOOL" }, { "civ_spawn_3", "ARRAY" }, { "carshop4", "OBJECT" }, { "kron_arraysort", "CODE" }, { "civ_spawn_4", "ARRAY" }, { "reb_1_3_1", "OBJECT" }, { "kron_strinstr", "CODE" }, { "reb_1", "OBJECT" }, { "dealer_1", "OBJECT" }, { "dealer_2", "OBJECT" }, { "life_is_processing", "BOOL" }, { "life_inv_glass", "SCALAR" }, { "dealer_3", "OBJECT" }, { "life_inv_donuts", "SCALAR" }, { "life_bail_paid", "BOOL" }, { "life_inv_ironrefined", "SCALAR" }, { "life_inv_mackerel", "SCALAR" }, { "db_async_active", "BOOL" }, { "life_removewanted", "BOOL" }, { "life_redgull_effect", "SCALAR" }, { "life_id_playertags", "STRING" }, { "life_delivery_in_progress", "BOOL" }, { "life_inv_ornate", "SCALAR" }, { "fed_bank", "OBJECT" }, { "bis_uncblur", "SCALAR" }, { "life_inv_tunaraw", "SCALAR" }, { "license_civ_medmarijuana", "BOOL" }, { "life_inv_mullet", "SCALAR" }, { "life_vdair", "SCALAR" }, { "life_inv_diamondcut", "SCALAR" }, { "bis_suffblur", "SCALAR" }, { "license_civ_salt", "BOOL" }, { "life_carryweight", "SCALAR" }, { "life_server_isready", "BOOL" }, { "hq_lt_1", "OBJECT" }, { "life_inv_catsharkraw", "SCALAR" }, { "heroin_processor", "OBJECT" }, { "life_respawn_timer", "SCALAR" }, { "carshop1_2", "OBJECT" }, { "hq_desk_1", "OBJECT" }, { "kron_strlen", "CODE" }, { "carshop1_3", "OBJECT" }, { "bis_blendcoloralpha", "SCALAR" }, { "life_vdcar", "SCALAR" }, { "db_async_extralock", "BOOL" }, { "life_clothing_purchase", "ARRAY" }, { "license_civ_driver", "BOOL" }, { "life_inv_spikestrip", "SCALAR" }, { "license_civ_heroin", "BOOL" }, { "life_clothing_uniform", "SCALAR" }, { "life_inv_waterbottle", "SCALAR" }, { "bis_oldlifestate", "STRING" }, { "life_inv_ornateraw", "SCALAR" }, { "life_id_revealobjects", "STRING" }, { "h1_3", "OBJECT" }, { "bis_pp_burnparams", "ARRAY" }, { "life_session_completed", "BOOL" }, { "license_civ_gun", "BOOL" }, { "license_cop_cair", "BOOL" }, { "kron_strlower", "CODE" }, { "bis_stackedeventhandlers_oneachframe", "ARRAY" }, { "bis_teamswitched", "BOOL" }, { "life_inv_rabbitraw", "SCALAR" }, { "life_gear", "ARRAY" }, { "life_istazed", "BOOL" }, { "kron_strtoarray", "CODE" }, { "life_shop_npc", "OBJECT" }, { "life_shop_type", "STRING" }, { "life_deathcamera", "OBJECT" }, { "life_corpse", "OBJECT" } }; - allowedVariables_UI[] = {{"rscdisplayinsertmarker","DISPLAY"},{"rscdisplayinventory","DISPLAY"},{"rscdisplayarcadeunit","DISPLAY"},{"rscstatic_display","DISPLAY"},{"rscdisplayarcademap_layout_2_isidson","BOOL"},{"rscdisplaygameoptions_listtags","CONTROL"},{"rscdisplaygameoptions_showdifficultygroup","CODE"},{"rscdisplaygameoptions_currentvalues","ARRAY"},{"rscdisplaygameoptions_valuecolora","CONTROL"},{"rscdisplaygameoptions_valuecolorb","CONTROL"},{"rscdisplaygameoptions_valuecolorg","CONTROL"},{"rscdisplaygameoptions_valuecolorr","CONTROL"},{"rscdisplaygameoptions_buttoncancel","CONTROL"},{"rscdisplaygameoptions_listvariables_lbselchanged","CODE"},{"rscdisplaygameoptions_listpresets_lbselchanged","CODE"},{"rscdisplaygameoptions_display","DISPLAY"},{"rscdisplaygameoptions_buttonok","CONTROL"},{"rscdisplayoptionslayout_data","ARRAY"},{"rscdisplaygameoptions_currentnames","ARRAY"},{"rscdisplayconfigure_selectedtab","STRING"},{"rscdisplaygameoptions_preview","CONTROL"},{"rscdisplaycontrolschemes","DISPLAY"},{"rscdisplaygameoptions_sliderposchanged","CODE"},{"rscdisplaygameoptions_buttonok_activated","BOOL"},{"rscdisplaygameoptions_listtags_lbselchanged","CODE"},{"rscdisplayoptionsaudio","DISPLAY"},{"rscdisplaygameoptions_buttonok_action","CODE"},{"rscdisplaygameoptions_listpresets","CONTROL"},{"rscdisplaygameoptions_listvariables","CONTROL"},{"rscdisplaygameoptions_previewbackground","CONTROL"},{"rscdisplaygameoptions_slidercolora","CONTROL"},{"rscdisplaygameoptions_slidercolorb","CONTROL"},{"rscdisplaygameoptions_slidercolorg","CONTROL"},{"rscdisplaygameoptions_slidercolorr","CONTROL"},{"rscdisplaygameoptions_previewpath","STRING"},{"rscdisplaygameoptions_slidercolorr","CONTROL"},{"rscdisplaygameoptions","DISPLAY"},{"rscdisplayoptionslayout","DISPLAY"},{"rscdisplayconfigureaction","DISPLAY"},{"rscdisplayconfigurecontrollers","DISPLAY"},{"rscdisplaymicsensitivityoptions","DISPLAY"},{"rscdisplayconfigure","DISPLAY"},{"rscdisplayoptionsvideo","DISPLAY"},{"rscdisplayoptionsvideouisize","SCALAR"},{"rscmsgbox","DISPLAY"},{"rscdisplaymission_script","CODE"},{"rscdisplayorbat_script","CODE"},{"rscdisplaychooseeditorlayout_script","CODE"},{"rscrespawncounter_script","CODE"},{"rscdisplayteamswitch_script","CODE"},{"rscdisplayremotemissions","DISPLAY"},{"rscdisplayfilter_script","CODE"},{"rscdisplayloading_progress","CONTROL"},{"rscdisplayjoystickschemes_script","CODE"},{"rscdisplayfieldmanual_script","CODE"},{"rscdebugconsole_watchsave","ARRAY"},{"rscdisplaymultiplayersetupparameter_script","CODE"},{"rscstanceinfo_script","CODE"},{"rscdebugconsole_execute","CODE"},{"rscdisplaytemplateload_script","CODE"},{"rscdisplaymissionend_script","CODE"},{"rscdiary_playerpos","ARRAY"},{"rscdisplaycustomizecontroller_script","CODE"},{"rscdisplayloading_display","DISPLAY"},{"rscdisplaygameoptions_script","CODE"},{"rscdisplaydedicatedserversettings_script","CODE"},{"rscdisplayarcademap_layout_2_script","CODE"},{"rscdisplayfileselectimage_script","CODE"},{"rscdisplaycommunityguide_script","CODE"},{"rscdisplaygarage_script","CODE"},{"rscdisplaypublishmissionselecttags_script","CODE"},{"rscdisplayinterrupt_script","CODE"},{"rscdisplaymultiplayer","DISPLAY"},{"rscdisplaymain_script","CODE"},{"rscdisplayarcademarker_script","CODE"},{"rscdisplayinsertmarker_script","CODE"},{"rscdisplayconfigureaction_script","CODE"},{"rscdisplayremotemissions_script","CODE"},{"rscdisplaymovieinterrupt_script","CODE"},{"rscunitinfo_script","CODE"},{"rscdisplayfileselect_script","CODE"},{"life_hud_nametags","DISPLAY"},{"rscdisplaydebriefing_script","CODE"},{"rscslingloadassistant_script","CODE"},{"rscdisplaycampaignselect_script","CODE"},{"rsctestcontrolstyles_script","CODE"},{"igui_displays","ARRAY"},{"rscdisplayoptions_script","CODE"},{"rscdisplayhostsettings_script","CODE"},{"rscdisplayoptionslayout_script","CODE"},{"rscdisplaycreatejiraissue_script","CODE"},{"rscadvancedhint_script","CODE"},{"bis_functions_listpreinit","CODE"},{"rscdisplayanimviewer_script","CODE"},{"rscdisplayloading","DISPLAY"},{"rscfiringdrilltime_script","CODE"},{"rscdisplayintel_script","CODE"},{"rscdiary_script","CODE"},{"rscdisplayarcadeunit_script","CODE"},{"rscdisplayavterminal_script","CODE"},{"rscdisplayrespawn_script","CODE"},{"loading_classes","ARRAY"},{"rscdebugconsole_watch","CODE"},{"rscdisplaylogin_script","CODE"},{"rscunitinfo","DISPLAY"},{"bis_functions_list","CODE"},{"rscminimap_script","CODE"},{"rscstatic_script","CODE"},{"rscdisplayloading_ran","SCALAR"},{"rscdiary","DISPLAY"},{"rscdisplayoptionsvideo_script","CODE"},{"rscdisplayconfigurecontrollers_script","CODE"},{"rscdisplayselectisland_script","CODE"},{"rscdisplayvehiclemsgbox_script","CODE"},{"rscdisplaybootcampmsgbox_script","CODE"},{"rscdisplayarcadeeffects_script","CODE"},{"rscdisplaynone_script","CODE"},{"bis_mainmenu_isplayexpanded","BOOL"},{"rscprocedurevisualization_script","CODE"},{"bis_functions_listpostinit","CODE"},{"rscdisplaywelcome_script","CODE"},{"igui_classes","ARRAY"},{"rscdisplaympinterrupt_script","CODE"},{"rscdisplaytemplatesave_script","CODE"},{"gui_classes","ARRAY"},{"rscdisplayremotemissionvoted_script","CODE"},{"rscdisplayhostsettings","DISPLAY"},{"rscdisplayarcadegroup_script","CODE"},{"rscdisplaymultiplayersetupparams_script","CODE"},{"rscdisplayoptionsaudio_script","CODE"},{"rscavcamera_script","CODE"},{"rscdisplayscriptinghelp_script","CODE"},{"rscdisplaymultiplayer_script","CODE"},{"rscspectator_script","CODE"},{"rscdisplayarcadesensor_script","CODE"},{"rscfunctionsviewer_script","CODE"},{"bis_mainmenu_isoptionsexpanded","BOOL"},{"bis_displayinterrupt_isoptionsexpanded","BOOL"},{"rscdisplaypassword_script","CODE"},{"rscdisplaymultiplayersetup_script","CODE"},{"rscdisplayipaddress_script","CODE"},{"rscfiringdrillcheckpoint_script","CODE"},{"rscdisplaycommon_script","CODE"},{"rscmsgbox3_script","CODE"},{"rscdisplaymissionfail_script","CODE"},{"rscdisplaymultiplayersetup","DISPLAY"},{"playerhud","DISPLAY"},{"rscdisplaympinterrupt","DISPLAY"},{"loading_displays","ARRAY"},{"rscdisplayloading_worldtype","STRING"},{"rscdisplaydlccontentbrowser_script","CODE"},{"rscdisplaymain","DISPLAY"},{"rscdisplayfunctionsviewer_script","CODE"},{"rscunitinfo_loop","SCRIPT"},{"rscdisplaypublishmission_script","CODE"},{"rscdisplayinventory_script","CODE"},{"rscdisplaylocweaponinfo_script","CODE"},{"rscestablishingshot_script","CODE"},{"bis_mainmenu_islearnexpanded","BOOL"},{"rscdisplayarcademap_layout_6_script","CODE"},{"rscdisplaymodlauncher_script","CODE"},{"rscdisplayarsenal_script","CODE"},{"rscmsgbox_script","CODE"},{"rscdisplayaar_script","CODE"},{"rsctestcontroltypes_script","CODE"},{"rscdisplaycamera_script","CODE"},{"rscdisplayselectsave_script","CODE"},{"bis_shownchat","BOOL"},{"rscdisplaycustomarcade_script","CODE"},{"rsctilesgroup_script","CODE"},{"rscdisplayloading_script","CODE"},{"rscdisplaypurchasenotification_script","CODE"},{"rscstanceinfo","DISPLAY"},{"bis_initgame","BOOL"},{"rscdisplaystrategicmap_script","CODE"},{"bis_rscdisplayloading_selecteddlcappid","SCALAR"},{"rscnoise_script","CODE"},{"rscnotification_script","CODE"},{"rscmissionstatus_script","CODE"},{"rscdisplayconfigviewer_script","CODE"},{"rscdisplaydebugpublic_script","CODE"},{"rscdiary_playerpostime","SCALAR"},{"rscdisplayarcademodules_script","CODE"},{"rsccommmenuitems_script","CODE"},{"gui_displays","ARRAY"},{"rscdisplaysinglemission_script","CODE"},{"rscdisplaynewuser_script","CODE"},{"rscdisplayloading_last","ARRAY"},{"rscdisplayconfigure_script","CODE"},{"rscdisplayarcademap_script","CODE"},{"rscdisplaycontrolschemes_script","CODE"},{"rscdisplayarcadewaypoint_script","CODE"},{"rscdisplaymission","DISPLAY"},{"rscdisplayinterruptrevert_script","CODE"},{"bis_functions_listrecompile","CODE"},{"life_sql_id","CODE"},{"rscdisplaydebriefing","DISPLAY"},{"rscdisplaymicsensitivityoptions_script","CODE"},{"rscdiary_playeralpha","SCALAR"}}; -}; diff --git a/Altis_Life.Altis/Config_Vehicles.hpp b/Altis_Life.Altis/Config_Vehicles.hpp deleted file mode 100644 index 22312be5..00000000 --- a/Altis_Life.Altis/Config_Vehicles.hpp +++ /dev/null @@ -1,795 +0,0 @@ -class CarShops { - /* - * ARRAY FORMAT: - * 0: STRING (Classname) - * 1: SCALAR (Rental Price) - * 2: ARRAY (license required) - * Ex: { "driver", "trucking", "rebel" } - * 3: ARRAY (This is for limiting items to certain things) - * 0: Variable to read from - * 1: Variable Value Type (SCALAR / BOOL /EQUAL) - * 2: What to compare to (-1 = Check Disabled) - */ - class civ_car { - side = "civ"; - vehicles[] = { - { "B_Quadbike_01_F", 2500, { "" }, { "", "", -1 } }, - { "C_Hatchback_01_F", 9500, { "driver" }, { "", "", -1 } }, - { "C_Offroad_01_F", 12500, { "driver" }, { "", "", -1 } }, - { "C_SUV_01_F", 30000, { "driver" }, { "", "", -1 } }, - { "C_Hatchback_01_sport_F", 40000, { "driver" }, { "", "", -1 } }, - { "C_Van_01_transport_F", 45000, { "driver" }, { "", "", -1 } } - }; - }; - - class kart_shop { - side = "civ"; - vehicles[] = { - { "C_Kart_01_Blu_F", 15000 , { "driver" }, { "", "", -1 } }, - { "C_Kart_01_Fuel_F", 15000, { "driver" }, { "", "", -1 } }, - { "C_Kart_01_Red_F", 15000, { "driver" }, { "", "", -1 } }, - { "C_Kart_01_Vrana_F", 15000, { "driver" }, { "", "", -1 } } - }; - }; - - class med_shop { - side = "med"; - vehicles[] = { - { "C_Offroad_01_F", 10000, { "" }, { "", "", -1 } }, - { "I_Truck_02_medical_F", 25000, { "" }, { "", "", -1 } }, - { "O_Truck_03_medical_F", 45000, { "" }, { "", "", -1 } }, - { "B_Truck_01_medical_F", 60000, { "" }, { "", "", -1 } } - }; - }; - - class med_air_hs { - side = "med"; - vehicles[] = { - { "B_Heli_Light_01_F", 50000, { "mAir" }, { "", "", -1 } }, - { "O_Heli_Light_02_unarmed_F", 75000, { "mAir" }, { "", "", -1 } } - }; - }; - - class civ_truck { - side = "civ"; - vehicles[] = { - { "C_Van_01_box_F", 60000, { "trucking" }, { "", "", -1 } }, - { "I_Truck_02_transport_F", 75000, { "trucking" }, { "", "", -1 } }, - { "I_Truck_02_covered_F", 100000, { "trucking" }, { "", "", -1 } }, - { "B_Truck_01_transport_F", 275000, { "trucking" }, { "", "", -1 } }, - { "O_Truck_03_transport_F", 200000, { "trucking" }, { "", "", -1 } }, - { "O_Truck_03_covered_F", 250000, { "trucking" }, { "", "", -1 } }, - { "B_Truck_01_box_F", 350000, { "trucking" }, { "", "", -1 } }, - { "O_Truck_03_device_F", 450000, { "trucking" }, { "", "", -1 } } - }; - }; - - class reb_car { - side = "civ"; - vehicles[] = { - { "B_Quadbike_01_F", 2500, { "" }, { "", "", -1 } }, - { "B_G_Offroad_01_F", 15000, { "" }, { "", "", -1 } }, - { "O_MRAP_02_F", 150000, { "" }, { "", "", -1 } }, - { "B_Heli_Light_01_F", 325000, { "" }, { "", "", -1 } }, - { "B_G_Offroad_01_armed_F", 750000, { "rebel" }, { "", "", -1 } } - }; - }; - - class cop_car { - side = "cop"; - vehicles[] = { - { "C_Offroad_01_F", 5000, { "" }, { "", "", -1 } }, - { "C_SUV_01_F", 20000, { "" }, { "", "", -1 } }, - { "B_MRAP_01_F", 30000, { "" }, { "life_coplevel", "SCALAR", 3 } } - }; - }; - - class civ_air { - side = "civ"; - vehicles[] = { - { "B_Heli_Light_01_F", 253000, { "pilot" }, { "", "", -1 } }, - { "O_Heli_Light_02_unarmed_F", 750000, { "pilot" }, { "", "", -1 } } - }; - }; - - class cop_air { - side = "cop"; - vehicles[] = { - { "B_Heli_Light_01_F", 75000, { "cAir" }, { "", "", -1 } }, - { "B_Heli_Transport_01_F", 200000, { "cAir" }, { "life_coplevel", "SCALAR", 3 } } - }; - }; - - class cop_airhq { - side = "civ"; - vehicles[] = { - { "B_Heli_Light_01_F", 75000, { "cAir" }, { "", "", -1 } }, - { "B_Heli_Transport_01_F", 200000, { "cAir" }, { "life_coplevel", "SCALAR", 3 } }, - { "B_MRAP_01_hmg_F", 750000, { "" }, { "life_coplevel", "SCALAR", 3 } } - }; - }; - - class cop_ship { - side = "cop"; - vehicles[] = { - { "B_Boat_Transport_01_F", 3000, { "cg" }, { "", "", -1 } }, - { "C_Boat_Civil_01_police_F", 20000, { "cg" }, { "", "", -1 } }, - { "B_Boat_Armed_01_minigun_F", 75000, { "cg" }, { "", "", -1 } }, - { "B_SDV_01_F", 100000, { "cg" }, { "", "", -1 } } - }; - }; - - class civ_ship { - side = "civ"; - vehicles[] = { - { "C_Rubberboat", 5000, { "boat" }, { "", "", -1 } }, - { "C_Boat_Civil_01_F", 22000, { "boat" }, { "", "", -1 } }, - { "B_SDV_01_F", 150000, { "boat" }, { "", "", -1 } } - }; - }; -}; - -class LifeCfgVehicles { - /* - * Vehicle Configs (Contains textures and other stuff) - * - * storageFee (Getting vehicles out of garage) format: - * INDEX 0: Civilian Price - * INDEX 1: Cop Price - * INDEX 2: EMS Price - * INDEX 3: OPFOR Price (Not implemented in vanilla but still leaving support - * - * garageSell (Selling vehicles from garage) format: - * INDEX 0: Civilian Price - * INDEX 1: Cop Price - * INDEX 2: EMS Price - * INDEX 3: OPFOR Price (Not implemented in vanilla but still leaving support - * - * Textures config follows { Texture Name, side, {texture(s)path}} - * Texture(s)path follows this format: - * INDEX 0: Texture Layer 0 - * INDEX 1: Texture Layer 1 - * INDEX 2: Texture Layer 2 - * etc etc etc - */ - - class Default { - vItemSpace = -1; - storageFee[] = { 1000, 1000, 1000, 1000 }; - garageSell[] = { 0, 0, 0, 0 }; - insurance = 2500; - chopShop = 1200; - textures[] = {}; - }; - - class I_Truck_02_medical_F { - vItemSpace = 150; - storageFee[] = { 0, 0, 1500, 0 }; - garageSell[] = { 0, 0, 5000, 0 }; - insurance = 2500; - chopShop = 3000; - textures[] = {}; - }; - - class O_Truck_03_medical_F { - vItemSpace = 200; - storageFee[] = { 0, 0, 3000, 0 }; - garageSell[] = { 0, 0, 10000, 0 }; - insurance = 2500; - chopShop = 7500; - textures[] = {}; - }; - - class B_Truck_01_medical_F { - vItemSpace = 250; - storageFee[] = { 0, 0, 6500, 0 }; - garageSell[] = { 0, 0, 25000, 0 }; - insurance = 2500; - chopShop = 12500; - textures[] = {}; - }; - - class C_Rubberboat { - vItemSpace = 45; - storageFee[] = { 400, 300, 0, 0 }; - garageSell[] = { 950, 350, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { }; - }; - - class B_Heli_Transport_01_F { - vItemSpace = 200; - storageFee[] = { 0, 50000, 0, 0 }; - garageSell[] = { 0, 85000, 0, 0 }; - insurance = 16000; - chopShop = 45000; - textures[] = {}; - }; - - class B_MRAP_01_hmg_F { - vItemSpace = 100; - storageFee[] = { 1000, 1000, 1000, 1000 }; - garageSell[] = { 0, 0, 0, 0 }; - insurance = 2500; - chopShop = 1200; - textures[] = {}; - }; - - class O_Boat_Armed_01_hmg_F { - vItemSpace = 175; - storageFee[] = { 1000, 0, 0, 0 }; - garageSell[] = { 21000, 21000, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { }; - }; - - class B_Boat_Armed_01_minigun_F { - vItemSpace = 175; - storageFee[] = { 0, 16500, 0, 0 }; - garageSell[] = { 0, 21000, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { }; - }; - - class I_Boat_Armed_01_minigun_F { - vItemSpace = 175; - storageFee[] = { 1000, 0, 0, 0 }; - garageSell[] = { 21000, 21000, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { }; - }; - - class B_G_Boat_Transport_01_F { - vItemSpace = 45; - storageFee[] = { 1000, 0, 0, 0 }; - garageSell[] = { 0, 850, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { }; - }; - - class B_Boat_Transport_01_F { - vItemSpace = 45; - storageFee[] = { 0, 450, 0, 0 }; - garageSell[] = { 0, 850, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { }; - }; - - class O_Truck_03_transport_F { - vItemSpace = 285; - storageFee[] = { 1000, 0, 0, 0 }; - garageSell[] = { 3500, 0, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { }; - }; - - class O_Truck_03_device_F { - vItemSpace = 350; - storageFee[] = { 95000, 0, 0, 0 }; - garageSell[] = { 185000, 0, 0, 0 }; - insurance = 25000; - chopShop = 125000; - textures[] = { }; - }; - - class Land_CargoBox_V1_F { - vItemSpace = 5000; - storageFee[] = { 1000, 1000, 1000, 1000 }; - garageSell[] = { 0, 0, 0, 0 }; - insurance = 2500; - chopShop = 1200; - textures[] = {}; - }; - - class Box_IND_Grenades_F { - vItemSpace = 350; - storageFee[] = { 1000, 1000, 1000, 1000 }; - garageSell[] = { 0, 0, 0, 0 }; - insurance = 2500; - chopShop = 1200; - textures[] = {}; - }; - - class B_supplyCrate_F { - vItemSpace = 700; - storageFee[] = { 1000, 1000, 1000, 1000 }; - garageSell[] = { 0, 0, 0, 0 }; - insurance = 2500; - chopShop = 1200; - textures[] = {}; - }; - - class B_G_Offroad_01_F { - vItemSpace = 65; - storageFee[] = { 1000, 0, 0, 0 }; - garageSell[] = { 3500, 0, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { }; - }; - - class B_G_Offroad_01_armed_F { - vItemSpace = 65; - storageFee[] = { 1500, 0, 0, 0 }; - garageSell[] = { 4000, 0, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { }; - }; - - class I_G_Van_01_transport_F { - vItemSpace = 100; - storageFee[] = { 1000, 0, 0, 0 }; - garageSell[] = { 3500, 0, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { }; - }; - - class C_Boat_Civil_01_F { - vItemSpace = 85; - storageFee[] = { 4500, 2500, 0, 0 }; - garageSell[] = { 6800, 3500, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { }; - }; - - class C_Boat_Civil_01_police_F { - vItemSpace = 85; - storageFee[] = { 0, 3500, 0, 0 }; - garageSell[] = { 0, 4950, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { }; - }; - - class C_Boat_Civil_01_rescue_F { - vItemSpace = 85; - storageFee[] = { 1000, 0, 0, 0 }; - garageSell[] = { 3500, 0, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { }; - }; - - class B_Truck_01_box_F { - vItemSpace = 450; - storageFee[] = { 35000, 0, 0, 0 }; - garageSell[] = { 150000, 0, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { }; - }; - - class B_Truck_01_transport_F { - vItemSpace = 325; - storageFee[] = { 25650, 0, 0, 0 }; - garageSell[] = { 135000, 0, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { }; - }; - - class O_MRAP_02_F { - vItemSpace = 60; - storageFee[] = { 45000, 0, 0, 0 }; - garageSell[] = { 65000, 0, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { }; - }; - - class I_MRAP_03_F { - vItemSpace = 58; - storageFee[] = { 1000, 0, 0, 0 }; - garageSell[] = { 3500, 0, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { }; - }; - - class C_Offroad_01_F { - vItemSpace = 65; - storageFee[] = { 1000, 500, 650, 1000 }; - garageSell[] = { 6500, 2500, 0, 0 }; - insurance = 2500; - chopShop = 2500; - textures[] = { - { "Red", "civ", { - "\A3\soft_F\Offroad_01\Data\offroad_01_ext_co.paa", - "\A3\soft_F\Offroad_01\Data\offroad_01_ext_co.paa" - } }, - { "Yellow", "civ", { - "\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE01_CO.paa", - "\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE01_CO.paa" - } }, - { "White", "civ", { - "\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE02_CO.paa", - "\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE02_CO.paa" - } }, - { "Blue", "civ", { - "\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE03_CO.paa", - "\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE03_CO.paa" - } }, - { "Dark Red", "civ", { - "\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE04_CO.paa", - "\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE04_CO.paa" - } }, - { "Blue / White", "civ", { - "\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE05_CO.paa", - "\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE05_CO.paa" - } }, - { "Taxi", "civ", { - "#(argb,8,8,3)color(0.6,0.3,0.01,1)" - } }, - { "Fed", "fed", { - "#(ai,64,64,1)Fresnel(0.3,3)" - } }, - { "Police", "cop", { - "#(ai,64,64,1)Fresnel(1.3,7)" - } } - }; - }; - - class C_Kart_01_Blu_F { - vItemSpace = 20; - storageFee[] = { 1500, 0, 0, 0 }; - garageSell[] = { 3500, 0, 0, 0 }; - inusrance = 1650; - chopShop = 3500; - textures[] = {}; - }; - - class C_Kart_01_Fuel_F { - vItemSpace = 20; - storageFee[] = { 1500, 0, 0, 0 }; - garageSell[] = { 3500, 0, 0, 0 }; - inusrance = 1650; - chopShop = 3500; - textures[] = {}; - }; - - class C_Kart_01_Red_F { - vItemSpace = 20; - storageFee[] = { 1500, 0, 0, 0 }; - garageSell[] = { 3500, 0, 0, 0 }; - inusrance = 1650; - chopShop = 3500; - textures[] = {}; - }; - - class C_Kart_01_Vrana_F { - vItemSpace = 20; - storageFee[] = { 1500, 0, 0, 0 }; - garageSell[] = { 3500, 0, 0, 0 }; - inusrance = 1650; - chopShop = 3500; - textures[] = {}; - }; - - class C_Hatchback_01_sport_F { - vItemSpace = 45; - storageFee[] = { 2500, 1000, 0, 0 }; - garageSell[] = { 15000, 7500, 0, 0 }; - insurance = 5500; - chopShop = 4500; - textures[] = { - { "Red", "civ", { - "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_sport01_co.paa" - } }, - { "Dark Blue", "civ", { - "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_sport02_co.paa" - } }, - { "Orange", "civ", { - "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_sport03_co.paa" - } }, - { "Black / White", "civ", { - "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_sport04_co.paa" - } }, - { "Beige", "civ", { - "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_sport05_co.paa" - } }, - { "Green", "civ", { - "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_sport06_co.paa" - } }, - { "Police", "cop", { - "#(ai,64,64,1)Fresnel(1.3,7)" - } } - }; - }; - - class B_Quadbike_01_F { - vItemSpace = 25; - storageFee[] = { 1000, 0, 0, 0 }; - garageSell[] = { 950, 0, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { - { "Brown", "cop", { - "\A3\Soft_F\Quadbike_01\Data\Quadbike_01_co.paa" - } }, - { "Digi Desert", "reb", { - "\A3\Soft_F\Quadbike_01\Data\quadbike_01_opfor_co.paa" - } }, - { "Black", "civ", { - "\A3\Soft_F_beta\Quadbike_01\Data\quadbike_01_civ_black_co.paa" - } }, - { "Blue", "civ", { - "\A3\Soft_F_beta\Quadbike_01\Data\quadbike_01_civ_blue_co.paa" - } }, - { "Red", "civ", { - "\A3\Soft_F_beta\Quadbike_01\Data\quadbike_01_civ_red_co.paa" - } }, - { "White", "civ", { - "\A3\Soft_F_beta\Quadbike_01\Data\quadbike_01_civ_white_co.paa" - } }, - { "Digi Green", "civ", { - "\A3\Soft_F_beta\Quadbike_01\Data\quadbike_01_indp_co.paa" - } }, - { "Hunter Camo", "civ", { - "\a3\soft_f_gamma\Quadbike_01\data\quadbike_01_indp_hunter_co.paa" - } }, - { "Rebel Camo", "reb", { - "\a3\soft_f_gamma\Quadbike_01\data\quadbike_01_indp_hunter_co.paa" - } } - }; - }; - - class I_Truck_02_covered_F { - vItemSpace = 250; - storageFee[] = { 14500, 0, 0, 0 }; - garageSell[] = { 62000, 0, 0, 0 }; - insurance = 6500; - chopShop = 20000; - textures[] = { - { "Orange", "civ", { - "\A3\Soft_F_Beta\Truck_02\data\truck_02_kab_co.paa", - "\a3\soft_f_beta\Truck_02\data\truck_02_kuz_co.paa" - } }, - { "Black", "fed", { - "#(argb,8,8,3)color(0.05,0.05,0.05,1)" - } } - }; - }; - - class I_Truck_02_transport_F { - vItemSpace = 200; - storageFee[] = { 12000, 0, 0, 0 }; - garageSell[] = { 49800, 3500, 0, 0 }; - insurance = 6500; - chopShop = 20000; - textures[] = { - { "Orange", "civ", { - "\A3\Soft_F_Beta\Truck_02\data\truck_02_kab_co.paa", - "\a3\soft_f_beta\Truck_02\data\truck_02_kuz_co.paa" - } }, - { "Black", "fed", { - "#(argb,8,8,3)color(0.05,0.05,0.05,1)" - } } - }; - }; - - class O_Truck_03_covered_F { - vItemSpace = 300; - storageFee[] = { 25000, 0, 0, 0 }; - garageSell[] = { 65000, 0, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = {}; - }; - - class C_Hatchback_01_F { - vItemSpace = 40; - storageFee[] = { 1000, 0, 0, 0 }; - garageSell[] = { 4500, 3500, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { - { "Beige", "civ", { - "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_base01_co.paa" - } }, - { "Green", "civ", { - "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_base02_co.paa" - } }, - { "Blue", "civ", { - "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_base03_co.paa" - } }, - { "Dark Blue", "civ", { - "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_base04_co.paa" - } }, - { "Yellow", "civ", { - "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_base06_co.paa" - } }, - { "White", "civ", { - "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_base07_co.paa" - } }, - { "Grey", "civ", { - "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_base08_co.paa" - } }, - { "Black", "civ", { - "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_base09_co.paa" - } } - }; - }; - - class C_SUV_01_F { - vItemSpace = 50; - storageFee[] = { 1000, 0, 0, 0 }; - garageSell[] = { 15000, 7500, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { - { "Dark Red", "civ", { - "\a3\soft_f_gamma\SUV_01\Data\suv_01_ext_co.paa" - } }, - { "Black", "cop", { - "\a3\soft_f_gamma\SUV_01\Data\suv_01_ext_02_co.paa" - } }, - { "Silver", "civ", { - "\a3\soft_f_gamma\SUV_01\Data\suv_01_ext_03_co.paa" - } }, - { "Orange", "civ", { - "\a3\soft_f_gamma\SUV_01\Data\suv_01_ext_04_co.paa" - } }, - { "Cop", "cop", { - "#(ai,64,64,1)Fresnel(1.3,7)" - } } - }; - }; - - class C_Van_01_transport_F { - vItemSpace = 100; - storageFee[] = { 1000, 0, 0, 0 }; - garageSell[] = { 25000, 0, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { - { "White", "civ", { - "\a3\soft_f_gamma\Van_01\Data\van_01_ext_co.paa" - } }, - { "Red", "civ", { - "\a3\soft_f_gamma\Van_01\Data\van_01_ext_red_co.paa" - } } - }; - }; - - class C_Van_01_box_F { - vItemSpace = 150; - storageFee[] = { 1000, 0, 0, 0 }; - garageSell[] = { 35000, 0, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { - { "White", "civ", { - "\a3\soft_f_gamma\Van_01\Data\van_01_ext_co.paa" - } }, - { "Red", "civ", { - "\a3\soft_f_gamma\Van_01\Data\van_01_ext_red_co.paa" - } } - }; - }; - - class B_MRAP_01_F { - vItemSpace = 65; - storageFee[] = { 0, 7500, 0, 0 }; - garageSell[] = { 0, 10000, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { - { "Regular", "cop", { - "\A3\Soft_F\MRAP_01\Data\mrap_01_base_co.paa" - } }, - { "Black", "fed", { - "#(argb,8,8,3)color(0.05,0.05,0.05,1)" - } } - }; - }; - - class B_Heli_Light_01_F { - vItemSpace = 90; - storageFee[] = { 45000, 19500, 0, 0 }; - garageSell[] = { 57000, 35000, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { - { "Sheriff", "cop", { - "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_sheriff_co.paa" - } }, - { "Black", "fed", { - "\a3\air_f\Heli_Light_01\Data\heli_light_01_ext_ion_co.paa" - } }, - { "Civ Blue", "civ", { - "\a3\air_f\Heli_Light_01\Data\heli_light_01_ext_blue_co.paa" - } }, - { "Civ Red", "civ", { - "\a3\air_f\Heli_Light_01\Data\heli_light_01_ext_co.paa" - } }, - { "Digi Green", "donate", { - "\a3\air_f\Heli_Light_01\Data\heli_light_01_ext_indp_co.paa" - } }, - { "Blueline", "civ", { - "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_blueline_co.paa" - } }, - { "Elliptical", "civ", { - "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_elliptical_co.paa" - } }, - { "Furious", "civ", { - "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_furious_co.paa" - } }, - { "Jeans Blue", "civ", { - "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_jeans_co.paa" - } }, - { "Speedy Redline", "civ", { - "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_speedy_co.paa" - } }, - { "Sunset", "civ", { - "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_sunset_co.paa" - } }, - { "Vrana", "civ", { - "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_vrana_co.paa" - } }, - { "Waves Blue", "civ", { - "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_wave_co.paa" - } }, - { "Rebel Digital", "reb", { - "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_digital_co.paa" - } }, - { "EMS White", "med", { - "#(argb,8,8,3)color(1,1,1,0.8)" - } } - }; - }; - - class O_Heli_Light_02_unarmed_F { - vItemSpace = 210; - storageFee[] = { 55000, 0, 22000, 0 }; - garageSell[] = { 72500, 0, 35000, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { - { "Black", "fed", { - "\a3\air_f\Heli_Light_02\Data\heli_light_02_ext_co.paa" - } }, - { "White / Blue", "civ", { - "\a3\air_f\Heli_Light_02\Data\heli_light_02_ext_civilian_co.paa" - } }, - { "Digi Green", "donate", { - "\a3\air_f\Heli_Light_02\Data\heli_light_02_ext_indp_co.paa" - } }, - { "Desert Digi", "reb", { - "\a3\air_f\Heli_Light_02\Data\heli_light_02_ext_opfor_co.paa" - } }, - { "EMS White", "med", { - "#(argb,8,8,3)color(1,1,1,0.8)" - } } - }; - }; - - class I_Heli_Transport_02_F { - vItemSpace = 375; - storageFee[] = { 75000, 0, 0, 0 }; - garageSell[] = { 125000, 0, 0, 0 }; - insurance = 2500; - chopShop = 5000; - textures[] = { - { "Ion", "civ", { - "\a3\air_f_beta\Heli_Transport_02\Data\Skins\heli_transport_02_1_ion_co.paa", - "\a3\air_f_beta\Heli_Transport_02\Data\Skins\heli_transport_02_2_ion_co.paa", - "\a3\air_f_beta\Heli_Transport_02\Data\Skins\heli_transport_02_3_ion_co.paa" - } }, - { "Dahoman", "civ", { - "\a3\air_f_beta\Heli_Transport_02\Data\Skins\heli_transport_02_1_dahoman_co.paa", - "\a3\air_f_beta\Heli_Transport_02\Data\Skins\heli_transport_02_2_dahoman_co.paa", - "\a3\air_f_beta\Heli_Transport_02\Data\Skins\heli_transport_02_3_dahoman_co.paa" - } } - }; - }; -}; diff --git a/Altis_Life.Altis/Config_Weapons.hpp b/Altis_Life.Altis/Config_Weapons.hpp deleted file mode 100644 index 978e919a..00000000 --- a/Altis_Life.Altis/Config_Weapons.hpp +++ /dev/null @@ -1,173 +0,0 @@ -/* -* Format: -* level: ARRAY (This is for limiting items to certain things) -* 0: Variable to read from -* 1: Variable Value Type (SCALAR / BOOL / EQUAL) -* 2: What to compare to (-1 = Check Disabled) -* 3: Custom exit message (Optional) -* -* items: { Classname, Itemname, BuyPrice, SellPrice } -* -* Itemname only needs to be filled if you want to rename the original object name. -*/ -class WeaponShops { - //Armory Shops - class gun { - name = "Billy Joe's Firearms"; - side = "civ"; - license = "gun"; - level[] = { "", "", -1, "" }; - items[] = { - { "hgun_Rook40_F", "", 6500, 500 }, - { "hgun_Pistol_heavy_02_F", "", 9850, -1 }, - { "hgun_ACPC2_F", "", 11500, -1 }, - { "hgun_PDW2000_F", "", 20000, -1 }, - { "optic_ACO_grn_smg", "", 2500, 250 }, - { "V_Rangemaster_belt", "", 4900, -1 }, - { "16Rnd_9x21_Mag", "", 25, -1 }, - { "9Rnd_45ACP_Mag", "", 45, -1 }, - { "6Rnd_45ACP_Cylinder", "", 50, -1 }, - { "30Rnd_9x21_Mag", "", 75, -1 } - }; - }; - - class rebel { - name = "Mohammed's Jihadi Shop"; - side = "civ"; - license = "rebel"; - level[] = { "", "", -1, "" }; - items[] = { - { "arifle_TRG20_F", "", 25000, 2500 }, - { "arifle_Katiba_F", "", 30000, 5000 }, - { "srifle_DMR_01_F", "", 50000, -1 }, - { "arifle_SDAR_F", "", 20000, 7500 }, - { "optic_ACO_grn", "", 3500, 350 }, - { "optic_Holosight", "", 3600, 275 }, - { "acc_flashlight", "", 1000, 100 }, - { "optic_Hamr", "", 7500, -1 }, - { "30Rnd_9x21_Mag", "", 200, -1 }, - { "20Rnd_556x45_UW_mag", "", 125, -1 }, - { "30Rnd_556x45_Stanag", "", 300, -1 }, - { "10Rnd_762x51_Mag", "", 500, -1 }, - { "30Rnd_65x39_caseless_green", "", 275, -1 } - }; - }; - - class gang { - name = "Hideout Armament"; - side = "civ"; - license = ""; - level[] = { "", "", -1, "" }; - items[] = { - { "hgun_Rook40_F", "", 1500, 500 }, - { "hgun_Pistol_heavy_02_F", "", 2500, -1 }, - { "hgun_ACPC2_F", "", 4500, -1 }, - { "hgun_PDW2000_F", "", 9500, -1 }, - { "optic_ACO_grn_smg", "", 950, 250 }, - { "V_Rangemaster_belt", "", 1900, -1 }, - { "16Rnd_9x21_Mag", "", 25, -1 }, - { "9Rnd_45ACP_Mag", "", 45, -1 }, - { "6Rnd_45ACP_Cylinder", "", 50, -1 }, - { "30Rnd_9x21_Mag", "", 75, -1 } - }; - }; - - //Basic Shops - class genstore { - name = "Altis General Store"; - side = "civ"; - license = ""; - level[] = { "", "", -1, "" }; - items[] = { - { "Binocular", "", 150, -1 }, - { "ItemGPS", "", 100, 45 }, - { "ItemMap", "", 50, 35 }, - { "ItemCompass", "", 50, 25 }, - { "ItemWatch", "", 50, -1 }, - { "ToolKit", "", 250, 75 }, - { "FirstAidKit", "", 150, 65 }, - { "NVGoggles", "", 2000, 980 }, - { "Chemlight_red", "", 300, -1 }, - { "Chemlight_yellow", "", 300, 50 }, - { "Chemlight_green", "", 300, 50 }, - { "Chemlight_blue", "", 300, 50 } - }; - }; - - //Cop Shops - class cop_basic { - name = "Altis Cop Shop"; - side = "cop"; - license = ""; - level[] = { "", "", -1, "" }; - items[] = { - { "arifle_sdar_F", "Taser Rifle", 20000, 7500 }, - { "hgun_P07_snds_F", "Stun Pistol", 2000, 650 }, - { "hgun_P07_F", "", 7500, 1500 }, - { "HandGrenade_Stone", "Flashbang", 1700, -1 }, - { "Binocular", "", 150, -1 }, - { "ItemGPS", "", 100, 45 }, - { "ToolKit", "", 250, 75 }, - { "muzzle_snds_L", "", 650, -1 }, - { "FirstAidKit", "", 150, 65 }, - { "Medikit", "", 1000, 450 }, - { "NVGoggles", "", 2000, 980 }, - { "16Rnd_9x21_Mag", "", 50, -1 }, - { "20Rnd_556x45_UW_mag", "Taser Rifle Magazine", 125, -1 } - }; - }; - - class cop_patrol { - name = "Altis Patrol Officer Shop"; - side = "cop"; - license = ""; - level[] = { "life_coplevel", "SCALAR", 2, "You must be a Patrol Officer Rank!" }; - items[] = { - { "arifle_MX_F", "", 35000, 7500 }, - { "SMG_02_ACO_F", "", 30000, -1 }, - { "HandGrenade_Stone", "Flashbang", 1700, -1 }, - { "MineDetector", "", 1000, 500 }, - { "acc_flashlight", "", 750, 100 }, - { "optic_Holosight", "", 1200, 275 }, - { "optic_Arco", "", 2500, -1 }, - { "muzzle_snds_H", "", 2750, -1 }, - { "30Rnd_65x39_caseless_mag", "", 130, -1 }, - { "30Rnd_9x21_Mag", "", 250, -1 } - }; - }; - - class cop_sergeant { - name = "Altis Sergeant Officer Shop"; - side = "cop"; - license = ""; - level[] = { "life_coplevel", "SCALAR", 3, "You must be a Sergeant Rank!" }; - items[] = { - { "SMG_02_ACO_F", "", 15000, -1 }, - { "hgun_ACPC2_F", "", 17500, -1 }, - { "HandGrenade_Stone", "Flashbang", 1700, -1 }, - { "arifle_MXC_F", "", 30000, 5000 }, - { "optic_Arco", "", 2500, -1 }, - { "muzzle_snds_H", "", 2750, -1 }, - { "30Rnd_65x39_caseless_mag", "", 100, -1 }, - { "30Rnd_9x21_Mag", "", 60, -1 }, - { "9Rnd_45ACP_Mag", "", 200, -1 } - }; - }; - - //Medic Shops - class med_basic { - name = "store"; - side = "med"; - license = ""; - level[] = { "", "", -1, "" }; - items[] = { - { "ItemGPS", "", 100, 45 }, - { "Binocular", "", 150, -1 }, - { "ToolKit", "", 250, 75 }, - { "FirstAidKit", "", 150, 65 }, - { "Medikit", "", 500, 450 }, - { "NVGoggles", "", 1200, 980 }, - { "B_FieldPack_ocamo", "", 3000, -1 } - }; - }; -}; diff --git a/Altis_Life.Altis/Functions.h b/Altis_Life.Altis/Functions.h deleted file mode 100644 index b650ce2b..00000000 --- a/Altis_Life.Altis/Functions.h +++ /dev/null @@ -1,355 +0,0 @@ -class Socket_Reciever -{ - tag = "SOCK"; - class SQL_Socket - { - file = "core\session"; - class requestReceived {}; - class dataQuery {}; - class insertPlayerInfo {}; - class updateRequest {}; - class syncData {}; - class updatePartial {}; - }; -}; - -class Life_Client_Core -{ - tag = "life"; - - class Master_Directory - { - file = "core"; - class setupActions {}; - class setupEVH {}; - class initCiv {}; - class initCop {}; - class initMedic {}; - class welcomeNotification {}; - class survival {}; - }; - - class Admin - { - file = "core\admin"; - class admininfo {}; - class adminid {}; - class admingetID {}; - class adminMenu {}; - class adminQuery {}; - class adminSpectate {}; - class adminTeleport {}; - class adminTpHere {}; - class adminDebugCon {}; - class adminCompensate {}; - class adminGodMode {}; - class adminFreeze {}; - class adminMarkers {}; - }; - - class Medical_System - { - file = "core\medical"; - class onPlayerKilled {}; - class onPlayerRespawn {}; - class respawned {}; - class revivePlayer {}; - class revived {}; - class medicMarkers {}; - class requestMedic {}; - class medicRequest {}; - class deathScreen {}; - class medicLoadout {}; - class medicSirenLights {}; - class medicLights {}; - class medicSiren {}; - }; - - class Actions - { - file = "core\actions"; - class buyLicense {}; - class healHospital {}; - class pushVehicle {}; - class repairTruck {}; - class serviceChopper {}; - class catchFish {}; - class catchTurtle {}; - class dpFinish {}; - class dropFishingNet {}; - class getDPMission {}; - class postBail {}; - class processAction {}; - class arrestAction {}; - class escortAction {}; - class impoundAction {}; - class pulloutAction {}; - class putInCar {}; - class stopEscorting {}; - class restrainAction {}; - class searchAction {}; - class searchVehAction {}; - class unrestrain {}; - class pickupItem {}; - class pickupMoney {}; - class ticketAction {}; - class packupSpikes {}; - class storeVehicle {}; - class robAction {}; - class captureHideout {}; - class gather {}; - class gutAnimal {}; - }; - - class Housing - { - file = "core\housing"; - class buyHouse {}; - class getBuildingPositions {}; - class houseMenu {}; - class lightHouse {}; - class lightHouseAction {}; - class sellHouse {}; - class initHouses {}; - class copBreakDoor {}; - class raidHouse {}; - class lockupHouse {}; - class copHouseOwner {}; - class lockHouse {}; - class garageRefund {}; - }; - - class Config - { - file = "core\config"; - class itemWeight {}; - class taxRate {}; - class vehicleAnimate {}; - class vehicleWeightCfg {}; - class houseConfig {}; - }; - - class Player_Menu - { - file = "core\pmenu"; - class wantedList {}; - class wantedInfo {}; - class wantedMenu {}; - class pardon {}; - class giveItem {}; - class giveMoney {}; - class p_openMenu {}; - class p_updateMenu {}; - class removeItem {}; - class useItem {}; - class cellphone {}; - class keyMenu {}; - class keyGive {}; - class keyDrop {}; - class s_onSliderChange {}; - class updateViewDistance {}; - class settingsMenu {}; - class s_onChar {}; - class s_onCheckedChange {}; - }; - - class Functions - { - file = "core\functions"; - class calWeightDiff {}; - class fetchCfgDetails {}; - class handleInv {}; - class hudSetup {}; - class hudUpdate {}; - class tazeSound {}; - class animSync {}; - class simDisable {}; - class keyHandler {}; - class dropItems {}; - class handleDamage {}; - class numberText {}; - class handleItem {}; - class accType {}; - class receiveItem {}; - class giveDiff {}; - class receiveMoney {}; - class playerTags {}; - class clearVehicleAmmo {}; - class pullOutVeh {}; - class nearUnits {}; - class actionKeyHandler {}; - class playerCount {}; - class fetchDeadGear {}; - class loadDeadGear {}; - class isnumeric {}; - class escInterupt {}; - class onTakeItem {}; - class fetchVehInfo {}; - class pushObject {}; - class onFired {}; - class revealObjects {}; - class nearestDoor {}; - class inventoryClosed {}; - class inventoryOpened {}; - class isUIDActive {}; - class saveGear {}; - class loadGear {}; - class stripDownPlayer {}; - class nearATM {}; - class playerSkins {}; - }; - - class Network - { - file = "core\functions\network"; - class broadcast {}; - class MP {}; - class MPexec {}; - class corpse {}; - class jumpFnc {}; - class soundDevice {}; - class setFuel {}; - class say3D {}; - }; - - class Civilian - { - file = "core\civilian"; - class jailMe {}; - class jail {}; - class tazed {}; - class knockedOut {}; - class knockoutAction {}; - class robReceive {}; - class robPerson {}; - class removeLicenses {}; - class demoChargeTimer {}; - class civLoadout {}; - class freezePlayer {}; - }; - - class Vehicle - { - file = "core\vehicle"; - class colorVehicle {}; - class openInventory {}; - class lockVehicle {}; - class vehicleOwners {}; - class vehStoreItem {}; - class vehTakeItem {}; - class vehInventory {}; - class vInteractionMenu {}; - class vehicleWeight {}; - class deviceMine {}; - class addVehicle2Chain {}; - }; - - class Cop - { - file = "core\cop"; - class copMarkers {}; - class copLights {}; - class vehInvSearch {}; - class copSearch {}; - class bountyReceive {}; - class searchClient {}; - class restrain {}; - class ticketGive {}; - class ticketPay {}; - class ticketPrompt {}; - class copSiren {}; - class spikeStripEffect {}; - class radar {}; - class questionDealer {}; - class copInteractionMenu {}; - class sirenLights {}; - class licenseCheck {}; - class licensesRead {}; - class repairDoor {}; - class doorAnimate {}; - class fedCamDisplay {}; - class copLoadout {}; - class ticketPaid {}; - }; - - class Gangs - { - file = "core\gangs"; - class initGang {}; - class createGang {}; - class gangCreated {}; - class gangMenu {}; - class gangKick {}; - class gangLeave {}; - class gangNewLeader {}; - class gangUpgrade {}; - class gangInvitePlayer {}; - class gangInvite {}; - class gangDisband {}; - class gangDisbanded {}; - }; - - class Shops - { - file = "core\shops"; - class atmMenu {}; - class buyClothes {}; - class changeClothes {}; - class clothingMenu {}; - class clothingFilter {}; - class vehicleShopMenu {}; - class vehicleShopLBChange {}; - class vehicleShopBuy {}; - class weaponShopFilter {}; - class weaponShopMenu {}; - class weaponShopSelection {}; - class weaponShopBuySell {}; - class virt_buy {}; - class virt_menu {}; - class virt_update {}; - class virt_sell {}; - class chopShopMenu {}; - class chopShopSelection {}; - class chopShopSell {}; - }; - - class Items - { - file = "core\items"; - class pickaxeUse {}; - class lockpick {}; - class spikeStrip {}; - class jerryRefuel {}; - class flashbang {}; - class boltcutter {}; - class blastingCharge {}; - class defuseKit {}; - class storageBox {}; - }; - - class Dialog_Controls - { - file = "dialog\function"; - class setMapPosition {}; - class displayHandler {}; - class spawnConfirm {}; - class spawnMenu {}; - class spawnPointCfg {}; - class spawnPointSelected {}; - class progressBar {}; - class impoundMenu {}; - class unimpound {}; - class sellGarage {}; - class bankDeposit {}; - class bankWithdraw {}; - class bankTransfer {}; - class garageLBChange {}; - class safeInventory {}; - class safeOpen {}; - class safeTake {}; - class safeFix {}; - class vehicleGarage {}; - class gangDeposit {}; - class wireTransfer {}; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/KRON_Strings.sqf b/Altis_Life.Altis/KRON_Strings.sqf deleted file mode 100644 index 03a63114..00000000 --- a/Altis_Life.Altis/KRON_Strings.sqf +++ /dev/null @@ -1,354 +0,0 @@ -// ========================================================================================================= -// -// String Functions Library -// Version: 2.2.1 -// Author: Kronzky -// -// ========================================================================================================= -// -// Usage: -// -// � KRON_StrToArray - Converts a string into an array of characters: -// _array=[_str] call KRON_StrToArray -// -// � KRON_StrLen - Returns the length of the string -// _len=[_str] call KRON_StrLen -// -// � KRON_StrLeft - Returns l characters from the left side of the string -// _left=[_str,l] call KRON_StrLeft -// -// � KRON_StrRight - Returns l characters from the right side of the string -// _right=[_str,l] call KRON_StrRight -// -// � KRON_StrMid - Returns l characters from the string, starting at position p (zero-based) -// If l is not defined, the rest of the string is returned -// _mid=[_str,p,(l)] call KRON_StrMid -// -// � KRON_StrInStr - Tests whether string b is present in string a -// _found=[a,b] call KRON_StrInStr -// -// � KRON_StrIndex - Returns the position of string b in string a -// _index=[a,b] call KRON_StrIndex -// -// � KRON_StrUpper - Converts a string to uppercase characters -// _upper=[_str] call KRON_StrUpper -// -// � KRON_StrLower - Converts a string to lowercase characters -// _lower=[_str] call KRON_StrLower -// -// � KRON_Replace - Replaces every occurrence of string _old in string _str with string _new -// _index=[_str,_old,_new] call KRON_Replace -// -// � KRON_FindFlag - Checks a mixed array (_this) for the presence of a string (_str) -// _flg=[_this,_str] call KRON_FindFlag -// -// � KRON_getArg - Searches a mixed array (_this) for a matching string beginning with (_t), and returns the part after a separator (s) -// A default value can be defined as (_d). -// _arg=[_this,_t,(_d)] call KRON_getArg -// -// � KRON_getArgRev - Works like getArg, but search for the part *after* the colon, and return the part in front of it -// A default value can be defined as (_d). -// _arg=[_this,_t,(_d)] call KRON_getArgRev -// -// � KRON_Compare - Compares two elements and returns -1 if first is smaller, 1 if second is smaller, and 0 if equal -// If optional parameter "case" is given, capitalization is considered (upper before lowercase) -// _cmp=[_str1,_str2,("case")] call KRON_Compare -// -// � KRON_ArraySort - Sorts an array of strings in acsending order (Numbers before letters, uppercase before lowercase) -// If array is multi-dimensional, optional parameter (_idx) specifies which column is used for sorting -// If optional parameter "desc" is given, order is reversed -// If optional parameter "case" is given, capitalization is considered (upper before lowercase) -// _srt=[_arr,(_idx),("desc"),("case")] call KRON_ArraySort -// -// ========================================================================================================= - -KRON_StrToArray = { - private["_in","_i","_arr","_out"]; - _in=_this select 0; - _arr = toArray(_in); - _out=[]; - for "_i" from 0 to (count _arr)-1 do { - _out=_out+[toString([_arr select _i])]; - }; - _out -}; - -KRON_StrLeft = { - private["_in","_len","_arr","_out"]; - _in=_this select 0; - _len=(_this select 1)-1; - _arr=[_in] call KRON_StrToArray; - _out=""; - if (_len>=(count _arr)) then { - _out=_in; - } else { - for "_i" from 0 to _len do { - _out=_out + (_arr select _i); - }; - }; - _out -}; - -KRON_StrLen = { - private["_in","_arr","_len"]; - _in=_this select 0; - _arr=[_in] call KRON_StrToArray; - _len=count (_arr); - _len -}; - -KRON_StrRight = { - private["_in","_len","_arr","_i","_out"]; - _in=_this select 0; - _len=_this select 1; - _arr=[_in] call KRON_StrToArray; - _out=""; - if (_len>(count _arr)) then {_len=count _arr}; - for "_i" from ((count _arr)-_len) to ((count _arr)-1) do { - _out=_out + (_arr select _i); - }; - _out -}; - -KRON_StrMid = { - private["_in","_pos","_len","_arr","_i","_out"]; - _in=_this select 0; - _pos=abs(_this select 1); - _arr=[_in] call KRON_StrToArray; - _len=count(_arr); - if ((count _this)>2) then {_len=(_this select 2)}; - _out=""; - if ((_pos+_len)>=(count _arr)) then {_len=(count _arr)-_pos}; - if (_len>0) then { - for "_i" from _pos to (_pos+_len-1) do { - _out=_out + (_arr select _i); - }; - }; - _out -}; - -KRON_StrIndex = { - private["_hay","_ndl","_lh","_ln","_arr","_tmp","_i","_j","_out"]; - _hay=_this select 0; - _ndl=_this select 1; - _out=-1; - _i=0; - if (_hay == _ndl) exitWith {0}; - _lh=[_hay] call KRON_StrLen; - _ln=[_ndl] call KRON_StrLen; - if (_lh < _ln) exitWith {-1}; - _arr=[_hay] call KRON_StrToArray; - for "_i" from 0 to (_lh-_ln) do { - _tmp=""; - for "_j" from _i to (_i+_ln-1) do { - _tmp=_tmp + (_arr select _j); - }; - if (_tmp==_ndl) exitWith {_out=_i}; - }; - _out -}; - -KRON_StrInStr = { - private["_out"]; - _in=_this select 0; - _out=if (([_this select 0,_this select 1] call KRON_StrIndex)==-1) then {false} else {true}; - _out -}; - -KRON_Replace = { - private["_str","_old","_new","_out","_tmp","_jm","_la","_lo","_ln","_i"]; - _str=_this select 0; - _arr=toArray(_str); - _la=count _arr; - _old=_this select 1; - _new=_this select 2; - _na=[_new] call KRON_StrToArray; - _lo=[_old] call KRON_StrLen; - _ln=[_new] call KRON_StrLen; - _out=""; - for "_i" from 0 to (count _arr)-1 do { - _tmp=""; - if (_i <= _la-_lo) then { - for "_j" from _i to (_i+_lo-1) do { - _tmp=_tmp + toString([_arr select _j]); - }; - }; - if (_tmp==_old) then { - _out=_out+_new; - _i=_i+_lo-1; - } else { - _out=_out+toString([_arr select _i]); - }; - }; - _out -}; - -KRON_StrUpper = { - private["_in","_out"]; - _in=_this select 0; - _out=toUpper(_in); - _out -}; - -KRON_StrLower = { - private["_in","_out"]; - _in=_this select 0; - _out=toLower(_in); - _out -}; - -KRON_ArrayToUpper = { - private["_in","_i","_e","_out"]; - _in=_this select 0; - _out=[]; - if ((count _in)>0) then { - for "_i" from 0 to (count _in)-1 do { - _e=_in select _i; - if (typeName _e=="STRING") then { - _e=toUpper(_e); - }; - _out set [_i,_e]; - }; - }; - _out -}; - -KRON_Compare = { - private["_k","_n","_s","_i","_c","_t","_s1","_s2","_l1","_l2","_l"]; - _k=[_this,"CASE"] call KRON_findFlag; - _n=0; - _s=0; - for "_i" from 0 to 1 do { - _t=_this select _i; - switch (typeName _t) do { - case "SCALAR": {_n=1}; - case "BOOL": {_this set [_i,str(_t)]}; - case "SIDE": {_this set [_i,str(_t)]}; - case "STRING": {if !(_k) then {_this=[_this] call KRON_ArrayToUpper}}; - default {_n=-1}; - }; - }; - _s1 = _this select 0; - _s2 = _this select 1; - if (_n!=0) exitWith { - if (_n==1) then { - if (_s1<_s2) then {_s=-1} else {if (_s1>_s2) then {_s=1}}; - }; - _s - }; - _s1 = toArray(_s1); - _s2 = toArray(_s2); - _l1 = count _s1; - _l2 = count _s2; - _l=if (_l1<_l2) then {_l1} else {_l2}; - for "_i" from 0 to _l-1 do { - if ((_s1 select _i)<(_s2 select _i)) then { - _s=-1; - _i=_l; - } else { - if ((_s1 select _i)>(_s2 select _i)) then { - _s=1; - _i=_l; - }; - }; - }; - if (_s==0) then { - if (_l1<_l2) then { - _s=-1; - } else { - if (_l1>_l2) then {_s=1}; - }; - }; - _s -}; - -KRON_ArraySort = { - private["_a","_d","_k","_s","_i","_vo","_v1","_v2","_j","_c","_x"]; - _a = +(_this select 0); - _d = if ([_this,"DESC"] call KRON_findFlag) then {-1} else {1}; - _k = if ([_this,"CASE"] call KRON_findFlag) then {"CASE"} else {"nocase"}; - _s = -1; - if (typeName (_a select 0)=="ARRAY") then { - _s=0; - if (((count _this)>1) && (typeName (_this select 1)=="SCALAR")) then { - _s=_this select 1; - }; - }; - for "_i" from 0 to (count _a)-1 do { - _vo = _a select _i; - _v1 = _vo; - if (_s>-1) then {_v1=_v1 select _s}; - _j = 0; - for [{_j=_i-1},{_j>=0},{_j=_j-1}] do { - _v2 = _a select _j; - if (_s>-1) then {_v2=_v2 select _s}; - _c=[_v2,_v1,_k] call KRON_Compare; - if (_c!=_d) exitWith {}; - _a set [_j+1,_a select _j]; - }; - _a set [_j+1,_vo]; - }; - _a -}; - -KRON_findFlag = { - private["_in","_flg","_arr","_out"]; - _in=_this select 0; - _flg=toUpper(_this select 1); - _arr=[_in] call KRON_ArrayToUpper; - _out=_flg in _arr; - _out -}; - -KRON_getArg = { - private["_in","_flg","_fl","_def","_arr","_i","_j","_as","_aa","_org","_p","_out"]; - _in=_this select 0; - _flg=toUpper(_this select 1); - _fl=[_flg] call KRON_StrLen; - _out=""; - if ((count _this)>2) then {_out=_this select 2}; - _arr=[_in] call KRON_ArrayToUpper; - if ((count _arr)>0) then { - for "_i" from 0 to (count _in)-1 do { - _as = _arr select _i; - if (typeName _as=="STRING") then { - _aa = [_as] call KRON_StrToArray; - _p = _aa find ":"; - if (_p==_fl) then { - if (([_as,_fl] call KRON_StrLeft)==_flg) then { - _org = _in select _i; - _out=[_org,_p+1] call KRON_StrMid; - }; - }; - }; - }; - }; - _out -}; - - -KRON_getArgRev = { - private["_in","_flg","_fl","_def","_arr","_i","_j","_as","_aa","_org","_p","_out"]; - _in=_this select 0; - _flg=toUpper(_this select 1); - _fl=[_flg] call KRON_StrLen; - _out=""; - if ((count _this)>2) then {_out=_this select 2}; - _arr=[_in] call KRON_ArrayToUpper; - if ((count _arr)>0) then { - for "_i" from 0 to (count _in)-1 do { - _as = _arr select _i; - if (typeName _as=="STRING") then { - _aa = [_as] call KRON_StrToArray; - _p = _aa find ":"; - if (_p+1==(count _aa)-_fl) then { - if (([_as,_p+1] call KRON_StrMid)==_flg) then { - _org = _in select _i; - _out=[_org,_p] call KRON_StrLeft; - }; - }; - }; - }; - }; - _out -}; \ No newline at end of file diff --git a/Altis_Life.Altis/SpyGlass/endoftheline.sqf b/Altis_Life.Altis/SpyGlass/endoftheline.sqf deleted file mode 100644 index 5647a93a..00000000 --- a/Altis_Life.Altis/SpyGlass/endoftheline.sqf +++ /dev/null @@ -1 +0,0 @@ -#include "Hi, it appears that your client crashed. Do not worry we will get back with you in six years." \ No newline at end of file diff --git a/Altis_Life.Altis/SpyGlass/fn_cmdMenuCheck.sqf b/Altis_Life.Altis/SpyGlass/fn_cmdMenuCheck.sqf deleted file mode 100644 index 7141f1d3..00000000 --- a/Altis_Life.Altis/SpyGlass/fn_cmdMenuCheck.sqf +++ /dev/null @@ -1,29 +0,0 @@ -/* - File: fn_cmdMenucheck.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Checks to see which commandingMenu is currently active, - if a non white-listed menu is active it will close it and report it - to the server and active admins. -*/ -private["_validMenus","_lastMenu"]; -_validMenus = [ - "RscMainMenu","RscMoveHigh","#WATCH","#WATCH0","RscWatchDir","RscWatchMoveDir","#GETIN","#RscStatus","RscCallSupport","#ACTION", - "RscCombatMode","RscFormations","RscTeam","RscSelectTeam","RscReply","#User:BIS_Menu_GroupCommunication","#CUSTOM_RADIO", - "RscRadio","RscGroupRootMenu","RscMenuReply","RscMenuStatus","","#User:BIS_fnc_addCommMenuItem_menu","RscMenuMove","RscMenuFormations" -]; - -_lastMenu = ""; -while {true} do -{ - waitUntil {commandingMenu != _lastMenu}; - _lastMenu = commandingMenu; - - if(!(commandingMenu in _validMenus)) then { - [[profileName,getPlayerUID player,_lastMenu],"SPY_fnc_observe",false,false] call life_fnc_MP; - [[[0,1],format["%1 was observed by SPY-GLASS, he/she was trying to access commanding menu:\n\n %2\n\n and that commanding-menu is not known to the system. PLEASE NOTE he/she may not be cheating but the SPY-GLASS found it relavent to report in",profileName, - _lastMenu]],"life_fnc_broadcast",true,false] call life_fnc_MP; - showCommandingMenu ""; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/SpyGlass/fn_cookieJar.sqf b/Altis_Life.Altis/SpyGlass/fn_cookieJar.sqf deleted file mode 100644 index 63484173..00000000 --- a/Altis_Life.Altis/SpyGlass/fn_cookieJar.sqf +++ /dev/null @@ -1,16 +0,0 @@ -/* - File: fn_cookieJar.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Reports to the RPT of a confirmed cheater for external programs - to parse,log or ban automatically. -*/ -private["_pName","_pUID","_pReason"]; -_pName = [_this,0,"",[""]] call BIS_fnc_param; -_pUID = [_this,1,"",[""]] call BIS_fnc_param; -_pReason = [_this,2,"",[""]] call BIS_fnc_param; - -if(_pName == "" OR _pUID == "" OR _pReason == "") exitWith {}; //Bad params passed.. - -diag_log format["SPYGLASS-FLAG:%1:%2:%3",_pName,_pUID,_pReason]; //Outputs to RPT for external programs to parse,log,react to. \ No newline at end of file diff --git a/Altis_Life.Altis/SpyGlass/fn_initSpy.sqf b/Altis_Life.Altis/SpyGlass/fn_initSpy.sqf deleted file mode 100644 index 5e90aa71..00000000 --- a/Altis_Life.Altis/SpyGlass/fn_initSpy.sqf +++ /dev/null @@ -1,235 +0,0 @@ -#include "..\script_macros.hpp" -/* - File: fn_initSpy.sqf - - Description: - Does some things that I made over-complicated / un-needed but blah. - Will eventually include server-side checks but it's blah at this point. - - Will also become a standalone system which is why it's setup like this. -*/ -private["_binConfigPatches","_cfgPatches","_endM"]; -if(isServer && !hasInterface) exitWith {}; //Server doesn't need to know. -if(!(EQUAL(LIFE_SETTINGS(getNumber,"spyglass_init"),1))) exitWith {}; - -CONST(W_O_O_K_I_E_ANTI_ANTI_HAX,"false"); -CONST(W_O_O_K_I_E_FUD_ANTI_ANTI_HAX,"false"); -CONST(E_X_T_A_S_Y_ANTI_ANTI_HAX,"false"); -CONST(E_X_T_A_S_Y_Pro_RE,"false"); -CONST(E_X_T_A_S_Y_Car_RE,"false"); -CONST(DO_NUKE,"false"); -CONST(JxMxE_spunkveh,"false"); -CONST(JxMxE_spunkveh2,"false"); -CONST(JxMxE_spunkair,"false"); -CONST(JJJJ_MMMM___EEEEEEE_LLYYSSTTIICCC_SHIT_RE,"false"); -CONST(JJJJ_MMMM___EEEEEEE_LLYYSSTTIICCC_SHIT_RE_OLD,"false"); -CONST(JJJJ_MMMM___EEEEEEE_SPAWN_VEH,"false"); -CONST(JJJJ_MMMM___EEEEEEE_SPAWN_WEAPON,"false"); - -/* - Compile our list of allowed addon patches, by default this DOES NOT ALLOW ANY ADDONS. - - If you want to white-list addons such as JSRS or Blastcore you need to start a test instance (Host locally and not the mission) and first fill the SPY_cfg_patchList array, once you executed it (Filled it) - Run the following code and it will copy the list of addons / patches not in the list to your clipboard (Ctrl + V) and then add it to the array. - - _cfgPatches = []; - _binConfigPatches = configFile >> "CfgPatches"; - for "_i" from 0 to count (_binConfigPatches)-1 do { - _patchEntry = _binConfigPatches select _i; - if(isClass _patchEntry) then { - if(!((configName _patchEntry) in SPY_cfg_patchList)) then { - _cfgPatches set[count _cfgPatches,(configName _patchEntry)]; - }; - }; - }; - - copyToClipboard str(_cfgPatches); - - i.e - ["cba_xeh","Extended_EventHandlers","CBA_Extended_EventHandlers","JSRS_Environment","WarFXPE","cba_common","cba_events","cba_hashes","cba_network","cba_strings","cba_ui","cba_vectors","JSRS2_120mm_Cannon","JSRS2_127","JSRS2_155mm_AMOS", - "JSRS2_230mm_Titan","JSRS2_30mm_Cannon","JSRS2_35mm_Autocannon","JSRS2_4Five45","JSRS2_ACPC","JSRS2_Autocannon","JSRS2_Bullethits","JSRS2_DAGR","JSRS2_DAR","JSRS2_EBR","JSRS2_Explosions","JSRS2_Explosives","JSRS2_Filters","JSRS2_FS2000", - "JSRS2_Gatling","JSRS2_GMG20","JSRS2_GMG40","JSRS2_Khaybar","JSRS2_LMGRCWS","JSRS2_M134","JSRS2_M200","JSRS2_M320R","JSRS2_M6","JSRS2_Minigun","JSRS2_MX","JSRS2_NLAW","JSRS2_P07","JSRS2_PDW","JSRS2_Rahim","JSRS2_Rook40","JSRS2_RPG32", - "JSRS2_Scorpian","JSRS2_SDAR","JSRS2_Skalpel_ATGM","JSRS2_Skyfire","JSRS2_Sonic_Cracks","JSRS2_Titan","JSRS2_TRG20","JSRS2_Vector","JSRS2_Veh_Titan","JSRS2_Zafir","JSRS2_Zubr45","Blastcore_VEP","cba_ai","cba_arrays","cba_diagnostic","cba_help", - "cba_ui_helper","cba_versioning","JSRS2_Movement","JSRS2_Silencers","cba_main","cba_main_a3","JSRS2_2S9_Sorcher","JSRS2_AFV4_Gorgon","JSRS2_AH99_Blackfoot","JSRS2_AH9_Pawnee","JSRS2_AMV7_Marshal","JSRS2_BTRK_Kamysh","JSRS2_CH49_Mohawk","JSRS2_Distance", - "JSRS2_FighterPlane3","JSRS2_FV720_Mora","JSRS2_Hunter","JSRS2_Ifrit","JSRS2_IFV6a_Cheetah","JSRS2_IFV6c_Panther","JSRS2_M2A1_Slammer","JSRS2_M4_Scorcher","JSRS2_M5_Sandstorm","JSRS2_MBT52_Kuma","JSRS2_Mi48_Kajman","JSRS2_MSE3_Marid","JSRS2_Offroad", - "JSRS2_Po30_Orca","JSRS2_Strider","JSRS2_SUV","JSRS2_T100_Varsuk","JSRS2_Truck1","JSRS2_Truck2","JSRS2_UAV_1","JSRS2_UH80_GhostHawk","JSRS2_Van","JSRS2_WY55_Hellcat","JSRS2_ZSU39_Tigris","cba_xeh_a3"] -*/ -_patchList = -["life_server","CAData","A3_BaseConfig_F","A3_Dubbing_Radio_F","A3_Functions_F","A3_Functions_F_EPA","A3_Functions_F_EPC","A3_Data_F","A3_Data_F_ParticleEffects","A3_Editor_F","A3_Functions_F_Curator", -"A3_Language_F","A3_Language_F_Beta","A3_Language_F_Curator","A3_Language_F_EPA","A3_Language_F_EPB","A3_Language_F_EPC","A3_Language_F_Gamma","A3_LanguageMissions_F","A3_LanguageMissions_F_Beta", -"A3_LanguageMissions_F_Gamma","A3_Misc_F","A3_Misc_F_Helpers","A3_Modules_F","A3_Modules_F_DynO","A3_Modules_F_Effects","A3_Modules_F_Events","A3_Modules_F_GroupModifiers","A3_Modules_F_HC", -"A3_Modules_F_Intel","A3_Modules_F_LiveFeed","A3_Modules_F_Marta","A3_Modules_F_Misc","A3_Modules_F_Multiplayer","A3_Modules_F_ObjectModifiers","A3_Modules_F_Sites","A3_Modules_F_Skirmish", -"A3_Modules_F_StrategicMap","A3_Modules_F_Supports","A3_Modules_F_UAV","A3_Modules_F_Beta","A3_Modules_F_Beta_FiringDrills","A3_Modules_F_EPB","A3_Modules_F_EPB_Misc","A3_Music_F","A3_Music_F_EPA", -"A3_Music_F_EPB","A3_Music_F_EPC","A3_Roads_F","A3_Rocks_F","A3_Sounds_F","A3_Sounds_F_EPB","A3_Sounds_F_EPC","A3_Structures_F","A3_Structures_F_Bridges","A3_Structures_F_Civ","A3_Structures_F_Civ_Accessories", -"A3_Structures_F_Civ_Ancient","A3_Structures_F_Civ_BellTowers","A3_Structures_F_Civ_Calvaries","A3_Structures_F_Civ_Camping","A3_Structures_F_Civ_Chapels","A3_Structures_F_Civ_Constructions","A3_Structures_F_Civ_Dead", -"A3_Structures_F_Civ_Garbage","A3_Structures_F_Civ_InfoBoards","A3_Structures_F_Civ_Lamps","A3_Structures_F_Civ_Market","A3_Structures_F_Civ_Offices","A3_Structures_F_Civ_Pavements","A3_Structures_F_Civ_PlayGround", -"A3_Structures_F_Civ_SportsGrounds","A3_Structures_F_Civ_Statues","A3_Structures_F_Dominants","A3_Structures_F_Dominants_Amphitheater","A3_Structures_F_Dominants_Castle","A3_Structures_F_Dominants_Church", -"A3_Structures_F_Dominants_Hospital","A3_Structures_F_Dominants_Lighthouse","A3_Structures_F_Dominants_WIP","A3_Structures_F_Furniture","A3_Structures_F_Households","A3_Structures_F_Households_Addons", -"A3_Structures_F_Households_House_Big01","A3_Structures_F_Households_House_Big02","A3_Structures_F_Households_House_Shop01","A3_Structures_F_Households_House_Shop02","A3_Structures_F_Households_House_Small01", -"A3_Structures_F_Households_House_Small02","A3_Structures_F_Households_House_Small03","A3_Structures_F_Households_Slum","A3_Structures_F_Households_Stone_Big","A3_Structures_F_Households_Stone_Shed", -"A3_Structures_F_Households_Stone_Small","A3_Structures_F_Households_WIP","A3_Structures_F_Ind","A3_Structures_F_Ind_AirPort","A3_Structures_F_Ind_Cargo","A3_Structures_F_Ind_CarService", -"A3_Structures_F_Ind_ConcreteMixingPlant","A3_Structures_F_Ind_Crane","A3_Structures_F_Ind_DieselPowerPlant","A3_Structures_F_Ind_Factory","A3_Structures_F_Ind_FuelStation","A3_Structures_F_Ind_FuelStation_Small", -"A3_Structures_F_Ind_Pipes","A3_Structures_F_Ind_PowerLines","A3_Structures_F_Ind_ReservoirTank","A3_Structures_F_Ind_Shed","A3_Structures_F_Ind_SolarPowerPlant","A3_Structures_F_Ind_Tank", -"A3_Structures_F_Ind_Transmitter_Tower","A3_Structures_F_Ind_WavePowerPlant","A3_Structures_F_Ind_Windmill","A3_Structures_F_Ind_WindPowerPlant","A3_Structures_F_Items","A3_Structures_F_Items_Documents", -"A3_Structures_F_Items_Electronics","A3_Structures_F_Items_Cans","A3_Structures_F_Items_Gadgets","A3_Structures_F_Items_Luggage","A3_Structures_F_Items_Stationery","A3_Structures_F_Items_Tools", -"A3_Structures_F_Items_Valuables","A3_Structures_F_Items_Vessels","A3_Structures_F_Mil","A3_Structures_F_Mil_BagBunker","A3_Structures_F_Mil_BagFence","A3_Structures_F_Mil_Barracks","A3_Structures_F_Mil_Bunker", -"A3_Structures_F_Mil_Cargo","A3_Structures_F_Mil_Flags","A3_Structures_F_Mil_Fortification","A3_Structures_F_Mil_Helipads","A3_Structures_F_Mil_Offices","A3_Structures_F_Mil_Radar","A3_Structures_F_Mil_Shelters", -"A3_Structures_F_Mil_TentHangar","A3_Structures_F_Naval","A3_Structures_F_Naval_Buoys","A3_Structures_F_Naval_Piers","A3_Structures_F_Naval_RowBoats","A3_Structures_F_Research","A3_Structures_F_System", -"A3_Structures_F_Training","A3_Structures_F_Training_InvisibleTarget","A3_Structures_F_Walls","A3_Structures_F_EPA_Civ_Camping","A3_Structures_F_EPA_Civ_Constructions","A3_Structures_F_EPA_Items_Electronics", -"A3_Structures_F_EPA_Items_Food","A3_Structures_F_EPA_Items_Medical","A3_Structures_F_EPA_Items_Tools","A3_Structures_F_EPA_Items_Vessels","A3_Structures_F_EPA_Walls","A3_Structures_F_EPB_Civ_Accessories", -"A3_Structures_F_EPB_Civ_Camping","A3_Structures_F_EPB_Civ_Dead","A3_Structures_F_EPB_Civ_Garbage","A3_Structures_F_EPB_Civ_Graffiti","A3_Structures_F_EPB_Civ_PlayGround","A3_Structures_F_EPB_Furniture", -"A3_Structures_F_EPB_Items_Documents","A3_Structures_F_EPB_Items_Luggage","A3_Structures_F_EPB_Items_Military","A3_Structures_F_EPB_Items_Vessels","A3_Structures_F_EPB_Naval_Fishing","A3_Structures_F_EPC_Civ_Accessories", -"A3_Structures_F_EPC_Civ_Camping","A3_Structures_F_EPC_Civ_Garbage","A3_Structures_F_EPC_Civ_InfoBoards","A3_Structures_F_EPC_Civ_Kiosks","A3_Structures_F_EPC_Civ_PlayGround", -"A3_Structures_F_EPC_Civ_Tourism","A3_Structures_F_EPC_Dominants_GhostHotel","A3_Structures_F_EPC_Dominants_Stadium","A3_Structures_F_EPC_Furniture","A3_Structures_F_EPC_Items_Documents", -"A3_Structures_F_EPC_Items_Electronics","A3_Structures_F_EPC_Walls","A3_UIFonts_F","A3_Animals_F","A3_Animals_F_AnimConfig","A3_Animals_F_Fishes","A3_Animals_F_Kestrel","A3_Animals_F_Rabbit", -"A3_Animals_F_Seagull","A3_Animals_F_Snakes","A3_Animals_F_Turtle","A3_Animals_F_Chicken","A3_Animals_F_Dog","A3_Animals_F_Goat","A3_Animals_F_Sheep","A3_Anims_F","A3_Anims_F_Config_Sdr", -"A3_Anims_F_EPA","A3_Anims_F_EPC","A3_Map_Data","A3_Map_Stratis","A3_Map_Stratis_Scenes","A3_Plants_F_Bush","A3_Signs_F","A3_Signs_F_AD","A3_UI_F","A3_UI_F_Curator","A3_Weapons_F", -"A3_Weapons_F_NATO","A3_Weapons_F_CSAT","A3_Weapons_F_AAF","A3_weapons_F_FIA","A3_Weapons_F_ItemHolders","A3_Weapons_F_Headgear","A3_Weapons_F_Uniforms","A3_Weapons_F_Vests","A3_Weapons_F_Ammoboxes", -"A3_Weapons_F_DummyWeapons","A3_Weapons_F_Explosives","A3_Weapons_F_Items","A3_Weapons_F_Launchers_NLAW","A3_Weapons_F_Launchers_LAW","A3_Weapons_F_EBR","A3_Weapons_F_LongRangeRifles_GM6", -"A3_Weapons_F_LongRangeRifles_M320","A3_Weapons_F_Machineguns_M200","A3_Weapons_F_Pistols_P07","A3_Weapons_F_Pistols_Rook40","A3_Weapons_F_Rifles_Khaybar","A3_Weapons_F_Rifles_MX","A3_Weapons_F_Rifles_SDAR", -"A3_Weapons_F_Rifles_TRG20","A3_Weapons_F_beta","A3_Weapons_F_Beta_Ammoboxes","A3_Weapons_F_Launchers_Titan","A3_Weapons_F_beta_EBR","A3_Weapons_F_Machineguns_Zafir","A3_Weapons_F_Pistols_ACPC2","A3_Weapons_F_beta_Rifles_Khaybar", -"A3_Weapons_F_Rifles_Mk20","A3_Weapons_F_beta_Rifles_MX","A3_Weapons_F_beta_Rifles_TRG20","A3_Weapons_F_Rifles_Vector","a3_weapons_f_rifles_SMG_02","A3_Weapons_F_EPA_LongRangeRifles_DMR_01","A3_Weapons_F_EPA_EBR", -"A3_Weapons_F_EPA_LongRangeRifles_GM6","A3_Weapons_F_Pistols_Pistol_heavy_01","A3_Weapons_F_Pistols_Pistol_heavy_02","A3_Weapons_F_EPA_Rifles_MX","A3_Weapons_F_EPB_LongRangeRifles_GM3","A3_Weapons_F_EPB_LongRangeRifles_M320", -"A3_Weapons_F_EPB_Rifles_MX_Black","A3_Weapons_F_gamma","A3_Weapons_F_Gamma_Ammoboxes","A3_Weapons_F_Pistols_PDW2000","A3_Characters_F","A3_Characters_F_BLUFOR","A3_Characters_F_Civil","A3_Characters_F_Heads", -"A3_Characters_F_OPFOR","A3_Characters_F_Proxies","A3_Characters_F_Beta","A3_Characters_F_INDEP","A3_Characters_F_EPB_Heads","A3_Characters_F_Gamma","A3_Data_F_Curator","A3_Data_F_Curator_Eagle","A3_Data_F_Curator_Intel", -"A3_Data_F_Curator_Misc","A3_Data_F_Curator_Respawn","A3_UAV_F_Characters_F_Gamma","A3_UAV_F_Weapons_F_Gamma_Ammoboxes","A3_Weapons_F_gamma_Items","A3_Map_Altis","A3_Map_Altis_Scenes","A3_Missions_F","A3_Missions_F_Beta", -"A3_Missions_F_Gamma","A3_Modules_F_Curator","A3_Modules_F_Curator_Animals","A3_Modules_F_Curator_CAS","A3_Modules_F_Curator_Curator","A3_Modules_F_Curator_Effects","A3_Modules_F_Curator_Environment","A3_Modules_F_Curator_Flares", -"A3_Modules_F_Curator_Intel","A3_Modules_F_Curator_Lightning","A3_Modules_F_Curator_Mines","A3_Modules_F_Curator_Misc","A3_Modules_F_Curator_Multiplayer","A3_Modules_F_Curator_Objectives","A3_Modules_F_Curator_Ordnance", -"A3_Modules_F_Curator_Respawn","A3_Modules_F_Curator_Smokeshells","A3_Static_F","A3_Static_F_Mortar_01","A3_Static_F_Beta_Mortar_01","A3_Static_F_Gamma","A3_Static_F_Gamma_AA","A3_Static_F_Gamma_AT","A3_Static_F_Gamma_Mortar_01", -"A3_Weapons_F_Acc","A3_Weapons_F_Beta_Acc","A3_Weapons_F_EPA","A3_Weapons_F_EPA_Acc","A3_Weapons_F_EPA_Ammoboxes","A3_Weapons_F_EPB","A3_Weapons_F_EPB_Acc","A3_Weapons_F_EPB_Ammoboxes","A3_Weapons_F_EPC","A3_Weapons_F_gamma_Acc", -"A3_Air_F","A3_Air_F_Heli_Light_01","A3_Air_F_Heli_Light_02","A3_Air_F_Beta","A3_Air_F_Beta_Heli_Attack_01","A3_Air_F_Beta_Heli_Attack_02","A3_Air_F_Beta_Heli_Transport_01","A3_Air_F_Beta_Heli_Transport_02","A3_Air_F_Beta_Parachute_01", -"A3_Air_F_Beta_Parachute_02","A3_Air_F_EPB_Heli_Light_03","A3_Air_F_EPC_Plane_CAS_01","A3_Air_F_EPC_Plane_CAS_02","A3_Air_F_Gamma_Plane_Fighter_03","A3_Armor_F","A3_armor_f_beta","A3_Armor_F_Panther","A3_armor_f_beta_APC_Tracked_02", -"A3_Armor_F_EPB_APC_tracked_03","A3_Armor_F_EPB_MBT_03","A3_Armor_F_Slammer","A3_Armor_F_T100K","A3_Boat_F","A3_Boat_F_Boat_Armed_01","A3_Boat_F_Boat_Transport_01","A3_Boat_F_Beta_Boat_Armed_01","A3_Boat_F_Beta_Boat_Transport_01", -"A3_Boat_F_SDV_01","A3_Boat_F_EPC_Submarine_01_F","A3_Boat_F_Civilian_Boat","A3_Boat_F_Trawler","A3_Boat_F_Gamma_Boat_Transport_01","A3_Characters_F_Common","A3_Characters_F_EPA","A3_Characters_F_EPB","A3_Characters_F_EPC", -"A3_Data_F_Curator_Characters","A3_Data_F_Curator_Virtual","A3_Air_F_Gamma_UAV_01","A3_Air_F_Gamma_UAV_02","A3_Missions_F_EPA","A3_Missions_F_EPB","A3_Missions_F_EPC","A3_Modules_F_Curator_Chemlights","A3_Soft_F","A3_Soft_F_MRAP_01", -"A3_Soft_F_MRAP_02","A3_Soft_F_Offroad_01","A3_Soft_F_Quadbike","A3_Soft_F_MRAP_03","A3_Soft_F_Beta_Quadbike","A3_Soft_F_HEMTT","A3_Soft_F_TruckHeavy","A3_Soft_F_EPC_Truck_03","A3_Soft_F_Car","A3_Soft_F_Gamma_Offroad", -"A3_Soft_F_Gamma_Quadbike","A3_Soft_F_SUV","A3_Soft_F_Gamma_HEMTT","A3_Soft_F_Gamma_TruckHeavy","A3_Soft_F_Truck","A3_Structures_F_Wrecks","A3_Structures_F_EPA_Mil_Scrapyard","A3_Air_F_EPC_Plane_Fighter_03", -"A3_Armor_F_AMV","A3_Armor_F_Marid","A3_Armor_F_EPC_MBT_01","A3_Armor_F_APC_Wheeled_03","A3_CargoPoses_F","A3_Soft_F_Crusher_UGV","A3_Missions_F_Curator","A3_Data_F_Kart_ParticleEffects","A3_Language_F_Kart", -"A3_LanguageMissions_F_Kart","A3_Structures_F_Kart_Civ_SportsGrounds","A3_Structures_F_Kart_Mil_Flags","A3_Anims_F_Kart","A3_Structures_F_Kart_Signs_Companies","A3_UI_F_Kart", -"A3_Weapons_F_Kart_Pistols_Pistol_Signal_F","A3_Data_F_Kart","A3_Missions_F_Kart","A3_Modules_F_Kart","A3_Modules_F_Kart_TimeTrials","A3_Weapons_F_Kart","A3_Characters_F_Kart","A3_Soft_F_Kart_Kart_01", -"A3_Structures_F_Civ_Graffiti","A3_Structures_F_Civ_Kiosks","A3_Structures_F_Civ_Tourism","A3_Structures_F_Items_Medical","A3_Structures_F_Items_Military","A3_Structures_F_Naval_Fishing","A3_Structures_F_Signs_Companies","A3_Structures_F_Mil_Scrapyard", -"A3_Soft_F_Bootcamp_Truck","A3_Soft_F_Bootcamp_Quadbike","A3_Soft_F_Bootcamp_Offroad_01","A3_Weapons_F_Bootcamp","A3_Modules_F_Bootcamp_Misc","A3_Modules_F_Bootcamp","A3_Characters_F_Bootcamp_Common","A3_Weapons_F_Bootcamp_Ammoboxes","A3_UI_F_Bootcamp", -"A3_Characters_F_Bootcamp","A3_Weapons_F_Bootcamp_LongRangeRifles_M320","A3_Weapons_F_Bootcamp_LongRangeRifles_GM6","A3_Structures_F_Bootcamp_Items_Food","A3_Structures_F_Bootcamp_Items_Electronics","A3_Structures_F_Bootcamp_Civ_SportsGrounds", -"A3_Structures_F_Bootcamp_Civ_Camping","A3_Language_F_Bootcamp","A3_Functions_F_Bootcamp","A3_Structures_F_Bootcamp_VR_Helpers","A3_Structures_F_Bootcamp_VR_CoverObjects","A3_Structures_F_Bootcamp_VR_Blocks","A3_Structures_F_Bootcamp_Training", -"A3_Structures_F_Bootcamp_System","A3_Structures_F_Bootcamp_Items_Sport","A3_Structures_F_Bootcamp_Ind_Cargo","A3_Sounds_F_Bootcamp","A3_Data_F_Bootcamp","A3_Map_VR_Scenes","A3_Missions_F_Bootcamp","A3_Music_F_Bootcamp","Map_VR","A3Data", -"A3_Data_F_Hook","A3_Air_F_RTD","A3_Functions_F_Heli","A3_Language_F_Heli","A3_Modules_F_Heli","A3_Modules_F_Heli_SpawnAi", -"A3_Music_F_Heli","A3_Structures_F_Heli_Civ_Accessories","A3_Structures_F_Heli_Civ_Constructions","A3_Structures_F_Heli_Civ_Garbage", -"A3_Structures_F_Heli_Civ_Market","A3_Structures_F_Heli_Furniture","A3_Structures_F_Heli_Ind_AirPort","A3_Structures_F_Heli_Ind_Cargo", -"A3_Structures_F_Heli_Ind_Machines","A3_Structures_F_Heli_Items_Airport","A3_Structures_F_Heli_Items_Luggage","A3_Structures_F_Heli_Items_Sport", -"A3_Structures_F_Heli_Items_Tools","A3_Structures_F_Heli_VR_Helpers","A3_Structures_F_Heli_Items_Electronics","A3_Structures_F_Heli_Items_Food", -"A3_Anims_F_Heli","A3_Supplies_F_Heli","A3_Supplies_F_Heli_Bladders","A3_Supplies_F_Heli_CargoNets","A3_Supplies_F_Heli_Fuel","A3_Supplies_F_Heli_Slingload", -"A3_Air_F_RTD","A3_Boat_F_Heli_Boat_Armed_01","A3_Boat_F_Heli_SDV_01","A3_Data_F_Heli","A3_Missions_F_Heli","A3_Soft_F_Heli_Car", -"A3_Soft_F_Heli_MRAP_01","A3_Air_F_Heli_Heli_Transport_04","A3_Soft_F_Heli_MRAP_02","A3_Soft_F_Heli_MRAP_03","A3_Soft_F_Heli_Quadbike","A3_Soft_F_Heli_SUV", -"A3_Soft_F_Heli_Truck","A3_UI_F_Heli","A3_Air_F_Heli","A3_Air_F_Heli_Heli_Attack_01","A3_Air_F_Heli_Heli_Attack_02","A3_Air_F_Heli_Heli_Light_01","A3_Air_F_Heli_Heli_Light_02","A3_Air_F_Heli_Heli_Light_03", -"A3_Air_F_Heli_Heli_Transport_01","A3_Air_F_Heli_Heli_Transport_02","A3_Air_F_Heli_Heli_Transport_03","A3_Air_F_Heli_Heli_Transport_04", -"A3_CargoPoses_F_Heli","A3_Soft_F_Heli_Crusher_UGV","A3_LanguageMissions_F_MP_Mark","A3_Language_F_MP_Mark","A3_LanguageMissions_F_MP_Mark","A3_Data_F_Mark", -"A3_Functions_F_Mark","A3_Functions_F_MP_Mark","A3_Language_F_Mark","A3_Modules_F_Mark","A3_Modules_F_Mark_FiringDrills", -"A3_Modules_F_MP_Mark","A3_Modules_F_Mark_Objectives","A3_Music_F_Mark","A3_Structures_F_Mark_Items_Military", -"A3_Structures_F_Mark_Items_Sport","A3_Structures_F_Mark_Mil_Flags","A3_Structures_F_Mark_Training", -"A3_Structures_F_Mark_VR_Helpers","A3_Structures_F_Mark_VR_Shapes","A3_Structures_F_Mark_VR_Targets", -"A3_Anims_F_Mark_Deployment","A3_UI_F_Mark","A3_UI_F_MP_Mark","A3_Weapons_F_Mark_LongRangeRifles_DMR_01", -"A3_Weapons_F_Mark_EBR","A3_Weapons_F_Mark_LongRangeRifles_GM6","A3_Weapons_F_Mark_LongRangeRifles_GM6_camo", -"A3_Weapons_F_Mark_LongRangeRifles_M320","A3_Weapons_F_Mark_LongRangeRifles_M320_camo","A3_Weapons_F_Mark_Machineguns_M200", -"A3_Weapons_F_Mark_Machineguns_Zafir","A3_Weapons_F_Mark_Rifles_Khaybar","A3_Weapons_F_Mark_Rifles_Mk20","A3_Weapons_F_Mark_Rifles_MX", -"A3_Weapons_F_Mark_Rifles_SDAR","A3_Weapons_F_Mark_Rifles_TRG20","A3_Characters_F_Mark","A3_Static_F_Mark_Designator_01", -"A3_Static_F_Mark_Designator_02","A3_Supplies_F_Mark","A3_Weapons_F_Mark_Acc","A3_Missions_F_Mark","A3_Missions_F_MP_Mark", -"A3_Weapons_F_Mark","A3_Weapons_F_Mark_LongRangeRifles_DMR_02","A3_Weapons_F_Mark_LongRangeRifles_DMR_03","A3_Weapons_F_Mark_LongRangeRifles_DMR_04", -"A3_Weapons_F_Mark_LongRangeRifles_DMR_05","A3_Weapons_F_Mark_LongRangeRifles_DMR_06","A3_Weapons_F_Mark_Machineguns_MMG_01", -"A3_Weapons_F_Mark_Machineguns_MMG_02","3DEN" -]; - -uiNamespace setVariable["RscDisplayRemoteMissions",displayNull]; //For Spy-Glass.. -uiNamespace setVariable["RscDisplayMultiplayer",displayNull]; - -_binConfigPatches = configFile >> "CfgPatches"; -for "_i" from 0 to count (_binConfigPatches)-1 do { - _patchEntry = _binConfigPatches select _i; - if(isClass _patchEntry) then { - if(!((configName _patchEntry) in _patchList)) exitWith { - [[profileName,steamid,(configName _patchEntry)],"SPY_fnc_cookieJar",false,false] spawn life_fnc_MP; - [[profileName,format["Unknown Addon Patch: %1",(configName _patchEntry)]],"SPY_fnc_notifyAdmins",true,false] spawn life_fnc_MP; - sleep 0.5; - failMission "SpyGlass"; - }; - }; -}; - -//Check for copy-pasters of Dev-Con styled execution. -//Because I am nice, add these to the following below to allow CBA; "CBA_CREDITS_CONT_C","CBA_CREDITS_M_P -private["_children","_allowedChildren"]; -_children = [configFile >> "RscDisplayMPInterrupt" >> "controls",0] call BIS_fnc_returnChildren; -_allowedChildren = [ -"Title","MissionTitle","PlayersName","ButtonCancel","ButtonSAVE","ButtonSkip","ButtonRespawn","ButtonOptions", -"ButtonVideo","ButtonAudio","ButtonControls","ButtonGame","ButtonTutorialHints","ButtonAbort","DebugConsole", -"Version","TraffLight","Feedback","MessageBox" -]; - -{ - if(!((configName _x) in _allowedChildren)) exitWith { - [[profileName,steamid,"Modified_MPInterrupt"],"SPY_fnc_cookieJar",false,false] spawn life_fnc_MP; - [[profileName,"Devcon like executor detected"],"SPY_fnc_notifyAdmins",true,false] spawn life_fnc_MP; - sleep 0.5; - failMission "SpyGlass"; - }; -} forEach _children; - -/* - Display Validator - Loops through and makes sure none of the displays were modified.. - - TODO: Run check every x minutes and validate all displays. -*/ -{ - _onLoad = getText(configFile >> (_x select 0) >> "onLoad"); - _onUnload = getText(configFile >> (_x select 0) >> "onUnload"); - if(_onLoad != (_x select 1) OR _onUnload != (_x select 2)) exitWith { - [[profileName,steamid,format["Modified_Method_%1",_x select 0]],"SPY_fnc_cookieJar",false,false] call life_fnc_MP; - [[profileName,format["Modified Display Method %1 (Memory Edit)",_x select 0]],"SPY_fnc_notifyAdmins",true,false] call life_fnc_MP; - sleep 0.5; - vehicle player setVelocity[1e10,1e14,1e18]; //It's a surprise. - sleep 3; - preProcessFile "SpyGlass\endoftheline.sqf"; - sleep 2.5; - failMission "SpyGlass"; - }; -} -forEach [ - ["RscDisplayMainMap","[""onLoad"",_this,""RscDiary"",'MpMarkDisplays'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDiary"",'MpMarkDisplays'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayGetReady","[""onLoad"",_this,""RscDiary"",'MpMarkDisplays'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDiary"",'MpMarkDisplays'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayInventory","[""onLoad"",_this,""RscDisplayInventory"",'IGUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayInventory"",'IGUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayLoadMission","[""onLoad"",_this,""RscDisplayLoading"",'Loading'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayLoading"",'Loading'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayInterrupt","[""onLoad"",_this,""RscDisplayInterrupt"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayInterrupt"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayOptionsVideo","[""onLoad"",_this,""RscDisplayOptionsVideo"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayOptionsVideo"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayOptions","[""onLoad"",_this,""RscDisplayOptions"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayOptions"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayAVTerminal","[""onLoad"",_this,""RscDisplayAVTerminal"",'IGUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayAVTerminal"",'IGUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayConfigureAction","[""onLoad"",_this,""RscDisplayConfigureAction"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayConfigureAction"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayConfigureControllers","[""onLoad"",_this,""RscDisplayConfigureControllers"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayConfigureControllers"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayControlSchemes","[""onLoad"",_this,""RscDisplayControlSchemes"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayControlSchemes"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayCustomizeController","[""onLoad"",_this,""RscDisplayCustomizeController"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayCustomizeController"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayDebriefing","[""onLoad"",_this,""RscDisplayDebriefing"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayDebriefing"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayDiary","[""onLoad"",_this,""RscDiary"",'MpMarkDisplays'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDiary"",'MpMarkDisplays'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayGameOptions","[""onLoad"",_this,""RscDisplayGameOptions"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayGameOptions"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayJoystickSchemes","[""onLoad"",_this,""RscDisplayJoystickSchemes"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayJoystickSchemes"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayLoading","[""onLoad"",_this,""RscDisplayLoading"",'Loading'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayLoading"",'Loading'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayMicSensitivityOptions","[""onLoad"",_this,""RscDisplayMicSensitivityOptions"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayMicSensitivityOptions"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayOptionsAudio","[""onLoad"",_this,""RscDisplayOptionsAudio"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayOptionsAudio"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayOptionsLayout","[""onLoad"",_this,""RscDisplayOptionsLayout"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayOptionsLayout"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayStart","[2] call compile preprocessfilelinenumbers gettext (configfile >> 'CfgFunctions' >> 'init'); ['onLoad',_this,'RscDisplayLoading','Loading'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayLoading"",'Loading'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayInsertMarker","[""onLoad"",_this,""RscDisplayInsertMarker"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayInsertMarker"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"] -]; - -/* Forgot to include this but this is also also a popular method for "unreleased" stuff */ -if(getText(configFile >> "CfgFunctions" >> "init") != "A3\functions_f\initFunctions.sqf") then { - [[profileName,steamid,"Modified_Functions_Init"],"SPY_fnc_cookieJar",false,false] call life_fnc_MP; - [[profileName,"Modified_Functions_Init"],"SPY_fnc_notifyAdmins",true,false] call life_fnc_MP; - sleep 0.5; - vehicle player setVelocity[1e10,1e14,1e18]; //It's a surprise. - sleep 3; - preProcessFile "SpyGlass\endoftheline.sqf"; - sleep 2.5; - failMission "SpyGlass"; -}; - -[] execVM "SpyGlass\fn_cmdMenuCheck.sqf"; -[] execVM "SpyGlass\fn_variableCheck.sqf"; -[] execVM "SpyGlass\fn_menuCheck.sqf"; diff --git a/Altis_Life.Altis/SpyGlass/fn_menuCheck.sqf b/Altis_Life.Altis/SpyGlass/fn_menuCheck.sqf deleted file mode 100644 index 7e5f149f..00000000 --- a/Altis_Life.Altis/SpyGlass/fn_menuCheck.sqf +++ /dev/null @@ -1,185 +0,0 @@ -#define GVAR_UINS uiNamespace getVariable -#define steamid getPlayerUID player -#define FETCH_CONST(var) (call var) -#define SPYGLASS_END \ - vehicle player setVelocity[1e10,1e14,1e18]; \ - sleep 3; \ - preProcessFile "SpyGlass\endoftheline.sqf"; \ - sleep 2.5; \ - failMission "SpyGlass"; - -/* - Author: Bryan "Tonic" Boardwine - - Description: - Checks for known cheat menus and closes them then reports them to the server. -*/ -private["_displays","_detection","_display","_timeStamp"]; -disableSerialization; - -_displays = [ - [3030,"BIS_configviewer_display"],["RscDisplayMultiplayer","RscDisplayMultiplayer"],[162,"RscDisplayFieldManual"],["RscDisplayRemoteMissions","RscDisplayRemoteMissions"],[316000,"RscDisplayDebugPublic"],[125,"RscDisplayEditDiaryRecord"], - [69,"UnknownDisplay"],[19,"UnknownDisplay"],[71,"UnknownDisplay"],[45,"UnknownDisplay"],[132,"UnknownDisplay"],[32,"UnknownDisplay"],[165,"RscDisplayPublishMission"],[2727,"RscDisplayLocWeaponInfo"], - ["RscDisplayMovieInterrupt","RscDisplayMovieInterrupt"],[157,"UnknownDisplay"],[30,"UnknownDisplay"],["RscDisplayArsenal","RscDisplayArsenal"],[166,"RscDisplayPublishMissionSelectTags"],[167,"RscDisplayFileSelect"] -]; - -_detection = false; -_timeStamp = time; -while {true} do { - { - _targetDisplay = _x select 0; - _targetName = _x select 1; - if(!(_targetDisplay == 316000)) then { - switch(typeName _targetDisplay) do { - case (typeName ""): {if(!isNull (GVAR_UINS [_targetDisplay,displayNull])) exitWith {_detection = true;};}; - default {if(!isNull (findDisplay _targetDisplay)) exitWith {_detection = true;};}; - }; - } else { - if(FETCH_CONST(life_adminlevel) < 5) then { - switch(typeName _targetDisplay) do { - case (typeName ""): {if(!isNull (GVAR_UINS [_targetDisplay,displayNull])) exitWith {_detection = true;};}; - default {if(!isNull (findDisplay _targetDisplay)) exitWith {_detection = true;};}; - }; - }; - }; - - if(_detection) exitWith { - [[profileName,steamid,format["MenuBasedHack_%1",_targetName]],"SPY_fnc_cookieJar",false,false] call life_fnc_MP; - [[profileName,format["Menu Hack: %1",_targetName]],"SPY_fnc_notifyAdmins",true,false] call life_fnc_MP; - sleep 0.5; - SPYGLASS_END - }; - } foreach _displays; - - if(_detection) exitWith {}; - - /* A very old menu that can cause false-positives so we close it */ - if(!isNull (findDisplay 129)) then { - closeDialog 0; - }; - - /* Check to see if RscDisplayInventory has more controls then it should */ - _display = findDisplay 602; - if(!isNull _display && {count (allControls _display) > 85}) then { - _count = count allControls _display; - [[profileName,steamid,format["MenuBasedHack_RscDisplayInventory_Controls_%1",_count]],"SPY_fnc_cookieJar",false,false,true] call life_fnc_MP; - [[profileName,format["Menu Hack: RscDisplayInventory number of controls do not match (Count %1)",_count]],"SPY_fnc_notifyAdmins",true,false,true] call life_fnc_MP; - closeDialog 0; - SPYGLASS_END - }; - - if(!isNull (findDisplay 148)) then { - sleep 0.5; - if((lbSize 104)-1 > 3) exitWith { - [[profileName,steamid,"MenuBasedHack_RscDisplayConfigureControllers"],"SPY_fnc_cookieJar",false,false] call life_fnc_MP; - [[profileName,"Menu Hack: RscDisplayConfigureControllers (JME 313)"],"SPY_fnc_notifyAdmins",true,false] call life_fnc_MP; - closeDialog 0; - SPYGLASS_END - }; - }; - - _display = findDisplay 54; - if(!isNull _display) then { - { - if (_x && !isNull _display) exitWith { - [[profileName,steamid,"MenuBasedHack_RscDisplayInsertMarker"],"SPY_fnc_cookieJar",false,false] call life_fnc_MP; - [[profileName,"Menu Hack: RscDisplayInsertMarker"],"SPY_fnc_notifyAdmins",true,false] call life_fnc_MP; - closeDialog 0; - SPYGLASS_END - }; - } forEach [ - (toLower ctrlText (_display displayCtrl 1001) != toLower localize "STR_A3_RscDisplayInsertMarker_Title"), - {if (buttonAction (_display displayCtrl _x) != "") exitWith {true}; false} forEach [1,2] - ]; - }; - - _display = findDisplay 131; - if(!isNull _display) then { - //These shouldn't be here... - (_display displayCtrl 102) ctrlRemoveAllEventHandlers "LBDblClick"; - (_display displayCtrl 102) ctrlRemoveAllEventHandlers "LBSelChanged"; - - { - if (_x && !isNull _display) exitWith { - [[profileName,steamid,"MenuBasedHack_RscDisplayConfigureAction"],"SPY_fnc_cookieJar",false,false] call life_fnc_MP; - [[profileName,"Menu Hack: RscDisplayConfigureAction"],"SPY_fnc_notifyAdmins",true,false] call life_fnc_MP; - closeDialog 0; - SPYGLASS_END - }; - } forEach [ - (toLower ctrlText (_display displayCtrl 1000) != toLower localize "STR_A3_RscDisplayConfigureAction_Title"), - {if (buttonAction (_display displayCtrl _x) != "") exitWith {true}; false} forEach [1,104,105,106,107,108,109] - ]; - }; - - _display = findDisplay 163; - if(!isNull _display) then { - (_display displayCtrl 101) ctrlRemoveAllEventHandlers "LBDblClick"; - (_display displayCtrl 101) ctrlRemoveAllEventHandlers "LBSelChanged"; - - { - if (_x && !isNull _display) exitWith { - [[profileName,steamid,"MenuBasedHack_RscDisplayControlSchemes"],"SPY_fnc_cookieJar",false,false] call life_fnc_MP; - [[profileName,"Menu Hack: RscDisplayControlSchemes"],"SPY_fnc_notifyAdmins",true,false] call life_fnc_MP; - closeDialog 0; - SPYGLASS_END - }; - } forEach [ - (toLower ctrlText (_display displayCtrl 1000) != toLower localize "STR_DISP_OPTIONS_SCHEME"), - {if (buttonAction (_display displayCtrl _x) != "") exitWith {true}; false} forEach [1,2] - ]; - }; - - /* We'll just move the no-recoil check into this thread. */ - if((unitRecoilCoefficient player) < 1) then { - [[profileName,steamid,"No_recoil_hack"],"SPY_fnc_cookieJar",false,false] spawn life_fnc_MP; - [[profileName,"No recoil hack"],"SPY_fnc_notifyAdmins",true,false] spawn life_fnc_MP; - sleep 0.5; - failMission "SpyGlass"; - }; - - /* - Display Validator - Loops through and makes sure none of the displays were modified.. - - Checks every 5 minutes. - */ - if((time - _timeStamp) > 300) then { - _timeStamp = time; - { - _onLoad = getText(configFile >> (_x select 0) >> "onLoad"); - _onUnload = getText(configFile >> (_x select 0) >> "onUnload"); - if(_onLoad != (_x select 1) OR _onUnload != (_x select 2)) exitWith { - [[profileName,steamid,format["Modified_Method_%1",_x select 0]],"SPY_fnc_cookieJar",false,false] call life_fnc_MP; - [[profileName,format["Modified Display Method %1 (Memory Edit)",_x select 0]],"SPY_fnc_notifyAdmins",true,false] call life_fnc_MP; - sleep 0.5; - SPYGLASS_END - }; - } - foreach [ - ["RscDisplayMainMap","[""onLoad"",_this,""RscDiary"",'MpMarkDisplays'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDiary"",'MpMarkDisplays'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayGetReady","[""onLoad"",_this,""RscDiary"",'MpMarkDisplays'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDiary"",'MpMarkDisplays'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayInventory","[""onLoad"",_this,""RscDisplayInventory"",'IGUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayInventory"",'IGUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayLoadMission","[""onLoad"",_this,""RscDisplayLoading"",'Loading'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayLoading"",'Loading'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayInterrupt","[""onLoad"",_this,""RscDisplayInterrupt"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayInterrupt"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayOptionsVideo","[""onLoad"",_this,""RscDisplayOptionsVideo"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayOptionsVideo"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayOptions","[""onLoad"",_this,""RscDisplayOptions"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayOptions"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayAVTerminal","[""onLoad"",_this,""RscDisplayAVTerminal"",'IGUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayAVTerminal"",'IGUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayConfigureAction","[""onLoad"",_this,""RscDisplayConfigureAction"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayConfigureAction"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayConfigureControllers","[""onLoad"",_this,""RscDisplayConfigureControllers"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayConfigureControllers"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayControlSchemes","[""onLoad"",_this,""RscDisplayControlSchemes"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayControlSchemes"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayCustomizeController","[""onLoad"",_this,""RscDisplayCustomizeController"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayCustomizeController"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayDebriefing","[""onLoad"",_this,""RscDisplayDebriefing"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayDebriefing"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayDiary","[""onLoad"",_this,""RscDiary"",'MpMarkDisplays'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDiary"",'MpMarkDisplays'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayGameOptions","[""onLoad"",_this,""RscDisplayGameOptions"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayGameOptions"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayJoystickSchemes","[""onLoad"",_this,""RscDisplayJoystickSchemes"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayJoystickSchemes"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayLoading","[""onLoad"",_this,""RscDisplayLoading"",'Loading'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayLoading"",'Loading'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayMicSensitivityOptions","[""onLoad"",_this,""RscDisplayMicSensitivityOptions"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayMicSensitivityOptions"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayOptionsAudio","[""onLoad"",_this,""RscDisplayOptionsAudio"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayOptionsAudio"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayOptionsLayout","[""onLoad"",_this,""RscDisplayOptionsLayout"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayOptionsLayout"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayStart","[2] call compile preprocessfilelinenumbers gettext (configfile >> 'CfgFunctions' >> 'init'); ['onLoad',_this,'RscDisplayLoading','Loading'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayLoading"",'Loading'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"], - ["RscDisplayInsertMarker","[""onLoad"",_this,""RscDisplayInsertMarker"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayInsertMarker"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')"] - ]; - }; - uiSleep 1; -}; diff --git a/Altis_Life.Altis/SpyGlass/fn_notifyAdmins.sqf b/Altis_Life.Altis/SpyGlass/fn_notifyAdmins.sqf deleted file mode 100644 index 27d7335d..00000000 --- a/Altis_Life.Altis/SpyGlass/fn_notifyAdmins.sqf +++ /dev/null @@ -1,15 +0,0 @@ -#include "..\script_macros.hpp" -/* - File: fn_notifyAdmins.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Checks if player is admin and notifies them that of the - flagged person. -*/ -private["_pName","_pReason"]; -_pName = _this select 0; -_pReason = _this select 1; -if(isServer && !hasInterface) exitWith {}; //NO SERVER DO NOT EXECUTE IT! -if(FETCH_CONST(life_adminlevel) < 1) exitWith {}; -hint parseText format["SPY-GLASS
Cheater Flagged


Name: %1
Detection: %2",_pName,_pReason]; \ No newline at end of file diff --git a/Altis_Life.Altis/SpyGlass/fn_observe.sqf b/Altis_Life.Altis/SpyGlass/fn_observe.sqf deleted file mode 100644 index 231c8f28..00000000 --- a/Altis_Life.Altis/SpyGlass/fn_observe.sqf +++ /dev/null @@ -1,16 +0,0 @@ -/* - File: fn_observe.sqf - Author: Bryan "Tonic" Boardwine - - Description: - This is the observation part of SPY-GLASS, it reports to the RPT log - of unusual activity by the player. -*/ -private["_pName","_pUID","_pReason"]; -_pName = [_this,0,"",[""]] call BIS_fnc_param; -_pUID = [_this,1,"",[""]] call BIS_fnc_param; -_pReason = [_this,2,"",[""]] call BIS_fnc_param; - -if(_pName == "" OR _pUID == "" OR _pReason == "") exitWith {}; //Bad params passed.. - -diag_log format["||SPY-GLASS Observes|| Name: %1 | UID: %2 | Reason: %3",_pName,_pUID,_pReason]; //Outputs to RPT for external programs to parse,log,react to. \ No newline at end of file diff --git a/Altis_Life.Altis/SpyGlass/fn_payLoad.sqf b/Altis_Life.Altis/SpyGlass/fn_payLoad.sqf deleted file mode 100644 index daf1822f..00000000 --- a/Altis_Life.Altis/SpyGlass/fn_payLoad.sqf +++ /dev/null @@ -1,101 +0,0 @@ -/* - File: fn_payLoad.sqf - Author: Bryan "Tonic" Boardwine - - Description: - This is the payload that is sent to the client and forces them - to initialize key functions. -*/ -private["_binConfigPatches","_cfgPatches"]; -#define __CONST__(var1,var2) var1 = compileFinal (if(typeName var2 == "STRING") then {var2} else {str(var2)}) -#define __GETC__(var) (call var) - -//First null out some very harmful known functions. -__CONST__(W_O_O_K_I_E_ANTI_ANTI_HAX,"No"); -__CONST__(W_O_O_K_I_E_FUD_ANTI_ANTI_HAX,"No"); -__CONST__(E_X_T_A_S_Y_ANTI_ANTI_HAX,"CopyPasta"); -__CONST__(E_X_T_A_S_Y_Pro_RE,"Iswhat"); -__CONST__(E_X_T_A_S_Y_Car_RE,"Youdo"); -__CONST__(DO_NUKE,"LOL"); -__CONST__(JxMxE_spunkveh,"Blah"); -__CONST__(JxMxE_spunkveh2,"Blah"); -__CONST__(JxMxE_spunkair,"Blah"); -__CONST__(JJJJ_MMMM___EEEEEEE_LLYYSSTTIICCC_SHIT_RE,"No"); -__CONST__(JJJJ_MMMM___EEEEEEE_LLYYSSTTIICCC_SHIT_RE_OLD,"No"); -__CONST__(JJJJ_MMMM___EEEEEEE_SPAWN_VEH,"No"); -__CONST__(JJJJ_MMMM___EEEEEEE_SPAWN_WEAPON,"No"); - -//Make sure all functions were offloaded to the client.. -waitUntil {!isNil "SPY_fnc_menuCheck" && !isNil "SPY_fnc_variablecheck" && !isNil "SPY_fnc_cmdMenuCheck"}; - -//Browse through the CfgPatches and check if any patches not white-listed by the server admin exist. Default configuration allows no extra addons. - -if(__GETC__(SPY_cfg_runPatchCheck)) then { - _binConfigPatches = configFile >> "CfgPatches"; - for "_i" from 0 to count (_binConfigPatches)-1 do { - _patchEntry = _binConfigPatches select _i; - if(isClass _patchEntry) then { - if(!((configName _patchEntry) in (call SPY_cfg_patchList))) exitWith { - [[profileName,getPlayerUID player,(configName _patchEntry)],"SPY_fnc_cookieJar",false,false] spawn life_fnc_MP; - [[profileName,format["Unknown Addon Patch: %1",(configName _patchEntry)]],"SPY_fnc_notifyAdmins",true,false] spawn life_fnc_MP; - sleep 0.5; - ["SpyGlass",false,false] call BIS_fnc_endMission; - }; - }; - }; -}; - -//Check for copy-pasters of Dev-Con styled execution. -private["_children","_allowedChildren"]; -_children = [configFile >> "RscDisplayMPInterrupt" >> "controls",0] call BIS_fnc_returnChildren; -_allowedChildren = [ -"Title","MissionTitle","DifficultyTitle","PlayersName","ButtonCancel","ButtonSAVE","ButtonSkip","ButtonRespawn","ButtonOptions", -"ButtonVideo","ButtonAudio","ButtonControls","ButtonGame","ButtonTutorialHints","ButtonAbort","DebugConsole","Feedback","MessageBox" -]; - -{ - if(!((configName _x) in _allowedChildren)) exitWith { - [[profileName,getPlayerUID player,"Modified_MPInterrupt"],"SPY_fnc_cookieJar",false,false] spawn life_fnc_MP; - [[profileName,"Devcon like executor detected"],"SPY_fnc_notifyAdmins",true,false] spawn life_fnc_MP; - sleep 0.5; - ["SpyGlass",false,false] call BIS_fnc_endMission; - }; -} foreach _children; - -//Validate that RscDisplayInventory is not modified common cheat-engine sqf executor method. -private["_onLoad","_onUnload"]; -_onLoad = getText(configFile >> "RscDisplayInventory" >> "onLoad"); -_onUnload = getText(configFile >> "RscDisplayInventory" >> "onUnload"); - -if(_onLoad != "[""onLoad"",_this,""RscDisplayInventory"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""") exitWith { - [[profileName,getPlayerUID player,"Modified_RscDisplayInventory_onLoad"],"SPY_fnc_cookieJar",false,false] spawn life_fnc_MP; - [[profileName,"Modified RscDisplayInventory_onLoad (CheatEngine injection)"],"SPY_fnc_notifyAdmins",true,false] spawn life_fnc_MP; - sleep 0.5; - ["SpyGlass",false,false] call BIS_fnc_endMission; -}; -if(_onUnload != "[""onUnload"",_this,""RscDisplayInventory"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""") exitWith { - [[profileName,getPlayerUID player,"Modified_RscDisplayInventory_onUnload"],"SPY_fnc_cookieJar",false,false] spawn life_fnc_MP; - [[profileName,"Modified RscDisplayInventory_onUnload (CheatEngine injection)"],"SPY_fnc_notifyAdmins",true,false] spawn life_fnc_MP; - sleep 0.5; - ["SpyGlass",false,false] call BIS_fnc_endMission; -}; - - -//Launch our workers -[] call SPY_fnc_menuCheck; -[] spawn SPY_fnc_cmdMenuCheck; -[] spawn SPY_fnc_variableCheck; - -//Create a no-recoil hack check. -[] spawn { - waitUntil {(!isNil "life_fnc_moveIn")}; - while {true} do { - if((unitRecoilCoefficient player) < 1) then { - [[profileName,getPlayerUID player,"No_recoil_hack"],"SPY_fnc_cookieJar",false,false] spawn life_fnc_MP; - [[profileName,"No recoil hack"],"SPY_fnc_notifyAdmins",true,false] spawn life_fnc_MP; - sleep 0.5; - ["SpyGlass",false,false] call BIS_fnc_endMission; - }; - sleep 1.5; - }; -}; diff --git a/Altis_Life.Altis/SpyGlass/fn_variableCheck.sqf b/Altis_Life.Altis/SpyGlass/fn_variableCheck.sqf deleted file mode 100644 index bd079490..00000000 --- a/Altis_Life.Altis/SpyGlass/fn_variableCheck.sqf +++ /dev/null @@ -1,103 +0,0 @@ -#include "..\script_macros.hpp" -#define SPY_SETTINGS(TYPE,SETTING) TYPE(missionConfigFile >> "SpyGlass" >> SETTING) -/* - File: fn_variableCheck.sqf - - Description: - Checks against harmful variables, disable this if client-performance is - to bad in the fn_initSpy.sqf, the menuCheck should be good enough! -*/ -private["_BIS_Functions","_LIFE_Functions","_SERVER_Functions","_SOCK_Functions","_DB_Functions","_allowedVariables","_checkFunction","_BIS_UI_Functions","_allowedVariables_UI","_profileCount"]; -_BIS_Functions = SPY_SETTINGS(getArray,"BIS_Functions"); -_BIS_UI_Functions = SPY_SETTINGS(getArray,"BIS_UI_Functions"); -_LIFE_Functions = SPY_SETTINGS(getArray,"LIFE_Functions"); -_SERVER_Functions = SPY_SETTINGS(getArray,"SERVER_Functions"); -_SOCK_Functions = SPY_SETTINGS(getArray,"SOCK_Functions"); -_DB_Functions = SPY_SETTINGS(getArray,"DB_Functions"); -_allowedVariables = SPY_SETTINGS(getArray,"allowedVariables"); -_allowedVariables_UI = SPY_SETTINGS(getArray,"allowedVariables_UI"); -_profileCount = count allVariables profileNameSpace; - -/* Build Player Slots because we name them and they are counted as variables */ -for "_i" from 1 to 125 do { - if(_i < SPY_SETTINGS(getNumber,"civSlotNumber")) then {_allowedVariables pushBack [format["civ_%1",_i],"OBJECT"]}; - if(_i < SPY_SETTINGS(getNumber,"copSlotNumber")) then {_allowedVariables pushBack [format["cop_%1",_i],"OBJECT"]}; - if(_i < SPY_SETTINGS(getNumber,"medSlotNumber")) then {_allowedVariables pushBack [format["medic_%2",_i],"OBJECT"]}; -}; - -/* First lets clear out the memory of potentially bad variables */ -{ - if(!(_x in _BIS_Functions)) then { - if(!(_x in _LIFE_Functions)) then { - if(!(_x in _SERVER_Functions)) then { - if(!(_x in _SOCK_Functions)) then { - if(!(_x in _DB_Functions)) then { - if(!(_x in _BIS_UI_Functions)) then { - _varType = typeName (GVAR_UINS _x); - _find = _allowedVariables find [_x,_varType]; - if(EQUAL(_find,-1)) then { - SVAR_UINS [_x,nil]; - }; - }; - }; - }; - }; - }; - }; -} foreach (allVariables uiNamespace); - -/* Some people may be like WTF ALL DEM Checks... It was either this or lazy eval which could have a performance impact on the client. */ -_checkFunction = { - { - if(!(_x in _BIS_Functions)) then { - if(!(_x in _LIFE_Functions)) then { - if(!(_x in _SERVER_Functions)) then { - if(!(_x in _SOCK_Functions)) then { - if(!(_x in _DB_Functions)) then { - _varType = typeName (GVAR_MNS _x); - _find = _allowedVariables find [_x,_varType]; - if(EQUAL(_find,-1)) then { - diag_log format["Variable: %1 is not allowed TYPE: %2 NS: MN",_x,_varType]; - //failMission "SpyGlass"; - }; - }; - }; - }; - }; - }; - } foreach allVariables missionNamespace; -}; - -_uiCheckFunction = { - { - if(!(_x in _BIS_Functions)) then { - if(!(_x in _LIFE_Functions)) then { - if(!(_x in _SERVER_Functions)) then { - if(!(_x in _SOCK_Functions)) then { - if(!(_x in _DB_Functions)) then { - if(!(_x in _BIS_UI_Functions)) then { - _varType = typeName (GVAR_UINS _x); - _find = _allowedVariables_UI find [_x,_varType]; - if(EQUAL(_find,-1)) then { - diag_log format["Variable: %1 is not allowed TYPE: %2 NS: UI",_x,_varType]; - //failMission "SpyGlass"; - }; - }; - }; - }; - }; - }; - }; - } foreach allVariables uiNamespace; -}; - -while {true} do { - systemChat "Calling check"; - objNull call _checkFunction; - uiSleep 10; - objNull call _uiCheckFunction; - if(!(EQUAL((count allVariables profileNameSpace),_profileCount)) OR ((count allVariables parsingNamespace) > 0)) then { - failMission "SpyGlass"; - }; - uiSleep (5 * 60); //Wait 5 minutes -}; \ No newline at end of file diff --git a/Altis_Life.Altis/briefing.sqf b/Altis_Life.Altis/briefing.sqf deleted file mode 100644 index 7a5bbb6b..00000000 --- a/Altis_Life.Altis/briefing.sqf +++ /dev/null @@ -1,563 +0,0 @@ -waitUntil {!isNull player && player == player}; -if(player diarySubjectExists "rules")exitwith{}; - -player createDiarySubject ["changelog","Change Log"]; -player createDiarySubject ["serverrules","General Rules"]; -player createDiarySubject ["policerules","Police Procedures/Rules"]; -player createDiarySubject ["safezones","Safe Zones (No Killing)"]; -//player createDiarySubject ["civrules","Civilian Rules"]; -player createDiarySubject ["illegalitems","Illegal Activity"]; -//player createDiarySubject ["gangrules","Gang Rules"]; -//player createDiarySubject ["terrorrules","Terrorism Rules"]; -player createDiarySubject ["controls","Controls"]; - -/* Example - player createDiaryRecord ["", //Container - [ - "", //Subsection - " - TEXT HERE

- " - ] - ]; -*/ - player createDiaryRecord["changelog", - [ - "Official Change Log", - " - The official change log can be found on the BIS forums (search Altis Life RPG) - " - ] - ]; - - player createDiaryRecord["changelog", - [ - "Custom Change Log", - " - This section is meant for people doing their own edits to the mission, DO NOT REMOVE THE ABOVE. - " - ] - ]; - - player createDiaryRecord ["serverrules", - [ - "Exploits", - " - These are considered exploits, and you will not be kicked, but banned.

- - 1. Getting out of jail via any method other than paying bail or escaping via helicopter.
- 2. Killing yourself to get out of roleplay. Getting out of being tazed, restrained, arrested, jail, etc. If the log shows you got arrested, then you died, you will be banned. Do not pay bail and kill yourself for an easy ride home. Walk you lazy turd.
- 3. Duping items and/or money. If someone sends you an unobtainable amount of money right at the start of the game, report to an admin IMMEDIATELY and transfer said money to an admin. Do this ASAP or an admin could ban you if they see that much on you without question.
- 4. Using clearly hacked items. If a hacker comes in and spawns unobtainable items, you could be banned for using said items. Report the items to the admins immediately and stay away from them.
- 5. Abusing bugs or game mechanics for gain. Is there a replicating gun somewhere? Report it and leave it alone. If an admin catches you abusing the glitch, ban.

- " - ] - ]; - - player createDiaryRecord["safezones", - [ - "Safe Zones", - " - If bombing (bombing can be intentionally exploding a vehicle), robbing, or killing occurs around these or in these areas it is punishable by ban.

- - Any vehicle spawn (shop or garage)
- Any weapon shop
- All Police HQs
- Rebel Outposts
- Donator Shops

- " - ] - ]; - - - player createDiaryRecord ["serverrules", - [ - "Bannable Offenses", - " - Consider this your one and only warning.

- - 1. Hacking
- 2. Cheating
- 3. Exploiting (See 'Exploits')
- 4. Being kicked 3 or more times.

- " - ] - ]; - - player createDiaryRecord ["serverrules", - [ - "Cop Interaction", - " - Items on this list may result in your removal from the server and/or ban, based on the admins discretion.

- - 1. Civilians can be arrested for looking in cops' backpacks/vehicles. Constantly doing this will result in your removal from the server.
- 2. Civilians can be arrested for following cops in game in order to give away their position.
- 3. Civilians or Rebels who take up arms to kill cops in town or elsewhere for no RP reason will be considered RDMing. See RDMing section.
- 4. Following and or harassing cops for long periods of time will be considered griefing and/or spamming, and will result in your removal from the server.
- 5. Actively blocking cops from doing their duties can lead to your arrest. Constantly doing this will result in your removal from the server.

- " - ] - ]; - - player createDiaryRecord ["serverrules", - [ - "Boats", - " - Items on this list may result in your removal from the server and/or ban, based on the admins discretion.

- - 1. Repeatedly pushing boats without permission.
- 2. Pushing a boat with the intention of hurting or killing someone. This is not RP, it is just a flaw in the mechanics.
- 3. Purposefully running over swimmers/divers.

- " - ] - ]; - - player createDiaryRecord ["serverrules", - [ - "Aviation", - " - Items on this list may result in your removal from the server and/or ban, based on the admins discretion.

- - 1. Purposefully ramming a helicopter into anything. Other helicopters, vehicles, buildings.
- 2. Flying below 150m over the city constantly. Once is illegal, more than that you risk crashing into the city, thus against server rules.
- 3. Stealing helicopters without proper warning and significant time for the driver to lock the vehicle. If they land and run away without locking, fine, if they just get out and you get in before they get a chance to lock it, no no.

- " - ] - ]; - - player createDiaryRecord ["serverrules", - [ - "Vehicles", - " - Items on this list may result in your removal from the server and/or ban, based on the admins discretion.

- - 1. Purposefully running people over (VRDM). There are accidents, and then there is going out of your way to run someone over.
- 2. Purposefully throwing yourself in front of vehicles in order to die/get hurt.
- 3. Ramming into other vehicles in order to cause an explosion.
- 4. Constantly trying to enter vehicles that do not belong to you in order to grief the vehicle owner, and not trying to RP.
- 5. Stealing a vehicle just to crash it or otherwise destroy it.
- 6. Purchasing multiple vehicles for the purpose of doing any of the above.
- 7. The only reason for shooting at a vehicle would be to disable it and/or fire warning shots in a role-play scenario.You are not to deliberately destroy enemies vehicles.

- " - ] - ]; - - player createDiaryRecord ["serverrules", - [ - "Communication Rules", - " - Items on this list may result in your removal from the server and/or ban, based on the admins discretion.

- - 1. Side Chat may not be used to play music or otherwise micspam.
- 2. Spamming any chat channel will result in your removal.
- 4. Teamspeak channels are split up into areas for a reason. Cops must be in the cop channels at all times.
- 5. Civilians cannot be in any cop channels on teamspeak in order to gather information on their location or movements. Civs caught doing this will be removed the channel. Repeat offenders can be kicked or banned from both the game and teamspeak.

- " - ] - ]; - - player createDiaryRecord ["serverrules", - [ - "Random Deathmatching (RDM)", - " - Items on this list may result in your removal from the server and/or ban, based on the admins discretion.

- - 1. Killing anyone without a roleplay cause.
- 2. Declaring a rebellion is not a cause to kill anyone, even cops.
- 3. Cops and civilians/rebels can only commence in a shootout if there are reasons relating to a crime.
- 4. If you are killed in the crossfire of a fight, it is not RDM.
- 5. Killing someone in an attempt to protect yourself or others is not RDMing.
- 6. Shooting a player without giving reasonable time to follow demands is considered RDM.

- - These are all judged by admins on a case by case basis.

- " - ] - ]; - player createDiaryRecord ["serverrules", - [ - "New Life Rule", - " - The New Life Rule applies to police and civilians.

- - Items on this list may result in your removal from the server and/or ban, based on the admins discretion.

- - 1. If you are killed you must wait 15 minutes before returning to the scene of your death.
- 2. If you die during roleplay your past crimes are forgotten, but you also cannot seek revenge.
- 3. If you are RDM'd, it is not a new life.
- 4. If you manually respawn, it is not a new life.
- 5. If you purposefully kill yourself to avoid roleplay, it is not a new life.

- " - ] - ]; - - player createDiaryRecord ["serverrules", - [ - "Don't Be A Dick!", - " - If an admin has to tell you that you are being a dick, you are doing dickish things.
- Causing others grief, disrupting roleplay, the list goes on.
- Just don't be a dick okay?
- This rule may be invoked at an admin's discretion.

- " - ] - ]; - -// Police Section - player createDiaryRecord ["policerules", - [ - "Crisis Negotiation", - " - Crisis Negotiation must be handled by a Sergeant. If one is not available, the person with the next highest rank must handle the situation.

- " - ] - ]; - player createDiaryRecord ["policerules", - [ - "The Federal Reserve", - " - 1. The Federal Reserve is illegal for civilians to enter, unless they have been given authorization. If civilians enter without authorization they are to be escorted off-site or arrested if they persist. - 2. Helicopters flying over the Federal Reserve may be asked to leave and disabled if they refuse.
- 2. If the Federal Reserve is getting robbed, it is encouraged that all available officers move in to stop it.
- 3. Nearby officers should immediately head to the Federal Reserve to assist. Petty crimes can be dropped during a robbery.
- 4. Lethal force on bank robbers may be used if no other alternative is available. Every option to taze and arrest the person should be made first.
- 5. Police may not fire blindly into the building.
- 6. The police should evacuate the civilians from the building during a robbery.
- 7. Any civilian who actively makes an attempt to block the police from entering the building may be treated as an accomplice.
- 8. Supervisory officers may hire individuals or contract a group of people to work as security guards for the bank. See 'Contracting' section for more information.

- " - ] - ]; - player createDiaryRecord ["policerules", - [ - "Aviation", - " - 1. No helicopter can land within city limits without authorization from the highest ranking officer online. (Exceptions being what is listed below.)
- Kavala: The hospital helipad (037129) or docks (031128).
- Athira: The sports field (138185) or behind the DMV (140188).
- Pyrgos: The fields North/East of DMV (170127)
- Sofia: Opposite the car shop (258214) or the fields Southeast of the garage (257212)
- Small towns: An appropriate location may be chosen. This is to be judged by officers on a case by case basis.

- - 2. Helicopters may not land on roads.
- 3. Police may temporarily forbid landing at but it cannot remain closed for a long period of time.
- 4. Helicopters cannot fly below 150m over the city without authorization.
- 5. Helicopters cannot hover over the city. Cops may only hover over the city if there is an active police operation going on.

- - " - ] - ]; - - player createDiaryRecord ["policerules", - [ - "Illegal Areas", - " - 1. Gang areas are not considered illegal. Thus a cop may enter without a raid, but may not restrain or stop anyone inside without probable cause/illegal activity. (Talking to the gang NPC is NOT probable cause/illegal activity.)
- 2. Do not enter an illegal area unless it is part of a raid. see Raiding/Camping.
- 3. If you chase someone into an illegal area, call for backup.
- 4. Under no circumstances is an officer allowed to camp any illegal area.

- " - ] - ]; - - player createDiaryRecord ["policerules", - [ - "Patrolling", - " - 1. Police may patrol the island's roads and towns searching for abandoned vehicles and criminal activity.
- 2. Patrols can be done on foot inside of a town, or in a vehicle when outside.
- 3. Patrols do not include illegal areas. See Raiding/Camping.

- " - ] - ]; - - player createDiaryRecord ["policerules", - [ - "Checkpoints", - " - Cops are encouraged to setup checkpoints in strategic areas to help combat illegal activity and promote safety on the road.

- - 1. A checkpoint must consist of 3 or more officers, utilizing 2 or more vehicles. An ATV does not count as one of the required vehicles, but may still be used.
- 2. A checkpoint can not be setup within 300m of an illegal area. Basically, you cannot set one up on top of an illegal area.
- 3. Checkpoints may only be setup on roads, but it does not have to be on a crossroad.
- 4. Checkpoints do not have to be marked on the map.

- - - Proper Checkpoint Procedure:
- 1. Have the driver stop the vehicle at a safe distance and turn off the engine.
- 2. Ask the driver and any passengers if they have any weapons.
- 3. Ask the driver and any passengers to exit the vehicle. If they have weapons, do not immediately restrain them when they get out, tell them to lower their weapons and given them a reasonable amount of time to do so.
- 4. Ask them where they are headed to and from.
- 5. Ask if they will submit to a search.
- 6. If they allow a search, you may restrain them and search them.
- 7. If they do not submit to a search, you must let them go, unless there is probable cause.
- 8. After the search is done, you may allow them to re-enter their vehicle and drive away.
- 9. In case anything illegal is found, the person may be ticketed or arrested depending on the crime.

- " - ] - ]; - - player createDiaryRecord ["policerules", - [ - "Vehicles", - " - 1. Vehicles in the parking lot, or are reasonably parked elsewhere should be left alone.
- 2. Vehicles that look abandoned, broken, with no driver, can be impounded.
- 3. Boats should be parked reasonably on shore.
- 4. Any vehicle that hasn't moved in a significant amount of time may be impounded.
- 5. Impounding is an essential job for a cop, it helps keep the server clean and less laggy.
- 6. If in doubt, always search the vehicle and message the owner(s) before impounding.
- 7. Police speedboats or Hunter HMGs may be used to assist in apprehending criminals. The weapon should be used to disable vehicles, not to blow them up.

- " - ] - ]; - - player createDiaryRecord ["policerules", - [ - "Speeding", - " - The following speeds are to be enforced by the Altis Police Force for the absolute safety of the citizens of Kavala and all travelling beyond the city.

- - Inside major cities:
- Small roads: 50km/h
- Main roads: 65km/h
- Outside major cities:
- Small roads: 80km/h
- Main roads: 110km/h

- " - ] - ]; - - player createDiaryRecord ["policerules", - [ - "City Protocol", - " - 1. Officers may patrol major cities - Kavala, Athira, Pyrgos and Sofia.
- 2. Officers may stop by the car shop to make sure there are no cars that need to be impounded.
- 3. Officers may not stand around or loiter in the centre of town.
- 4. Officers may enter the town in a large number should a rebellious act occur. After the area is clear, they need to leave the town again.
- 5. Martial law may not be declared at any time.
- 6. The Police HQ buildings are illegal for civilians to enter without authorization, however it is NOT illegal for civilians to be nearby unless they are causing a nuisance.

- " - ] - ]; - - player createDiaryRecord ["policerules", - [ - "Arresting and Ticketing", - " - Arresting should be done to criminals who are considered a danger to themselves or others.

- - 1. You may not arrest someone if you have given them a ticket and they paid it.
- 2. You must tell the suspect why they are being arrested before you arrest them.
- 3. If a civilian is wanted, you may arrest them. Do not kill them, unless the situation falls under the 'Use of Lethal Force' section.

- - - Ticketing a civilian is considered a warning for the civilian. If they break a law, but do not pose a threat to anyone, you may ticket a civilian.

- - 1. Tickets must be a reasonable price.
- 2. Ticket prices should be based off of the crimes committed.
- 3. Refusal to pay a legit ticket is grounds for arrest.
- 4. Giving a civilian and illegitimate ticket, such as $100k for speeding, etc., is not allowed and will result in your removal from the police department.

- - A complete list of all crimes and the appropriate punishments should be given to officers during training. If in doubt, or if you have not been trained, ask a higher ranking officer what to do.

- - The list is available at crime.sealteamsloth.com

- " - ] - ]; - - player createDiaryRecord ["policerules", - [ - "Weapons", - " - A cop is NEVER allowed to supply civilians with weapons. This will get you banned from the server and removed from being a cop.

- - Legal Weapons for Civilians to carry with a permit:
- 1. P07
- 2. Rook
- 3. ACP-C2
- 4. Zubr
- 5. 4-five
- 6. PDW2000

- - Any other weapon (Including Silenced P07 [Considered a Police Weapon]) is illegal.

- - 1. Civilians are not allowed to have a weapon out within the town limits.
- 2. Civilians may have a gun out when they are not in the town. However they should submit to a license search if confronted by an officer and should have the gun lowered (Press Ctrl Twice).

- " - ] - ]; - - player createDiaryRecord ["policerules", - [ - "Use of Non-Lethal Force", - " - At this time the Taser (Silenced P07) is the only form of Non-Lethal Force.

- - 1. Taser should be used to incapacitate non complying civilians in order to restrain them.
- 2. Do not discharge your Taser unless you intend to incapacitate a civilian, randomly discharging your weapon will result in your suspension.
- 3. Only use your Taser in compliance with the laws and the rules, do NOT enforce your will on others.

- " - ] - ]; - - player createDiaryRecord ["policerules", - [ - "Raiding/Camping", - " - Raiding is defined as a squad of police officers invading an area of high criminal activity in order to stop the criminals in illegal acts.

- - 1. In order to raid an area, the cops must have at least 4 officers involved, one of which must be a Sergeant or above.
- 2. All civilians in a raid area may be restrained and searched. If nothing illegal is found, you must let them go.
- 3. If illegals are found during a search, you may proceed to arrest or fine as usual.
- 5. Lethal force is only authorized as described under 'Use of Lethal Force'.
- 6. After the area is secure, the officers must leave the area.
- 7. An area cannot be raided again for 20 minutes after a previous raid.
- 8. If the raid is a failure (All officers die), the 20 minute timer still applies to those officers.
- 9. Backup may be called in, but it may not consist of fallen officers (see 'New Life Rule').

- - Camping is defined as the prolong stay of an officer in an area.

- - 1. Checkpoints are not considered camping. See Checkpoint section for a definition of proper checkpoint procedures.
- 2. See Bank Robbery and Agia Marina Protocol sections for more info on camping in the main town.
- 3. Camping of illegal areas is staying longer than needed after a raid, or if officers do not conduct a raid but continue to watch and take action against civilians entering the area.

- " - ] - ]; - - player createDiaryRecord ["policerules", - [ - "Chain of Command", - " - The highest ranking officer on duty is in charge of the police force outside of admins currently online. The high ranking officer is expected to follow the rules and guidelines of his/her rank, and must report to the admin in case any action need be taken.

- - Police Chain of Command:
- 1. Chief
- 2. Deputy Chief
- 3. Superintendent
- 4. Captain
- 5. Lieutenant
- 6. Sergeant
- 7. Senior Patrol Officer
- 8. Patrol Officer
- 9. Cadet

- - Cops in game who are not enrolled/accepted into the SPD are the lowest tier and have no say in police operations.

- " - ] - ]; - - player createDiaryRecord ["policerules", - [ - "Use of Lethal Force", - " - 1. Use of Lethal force is only permitted for the protection of your life, another officers life, or a civilians life, if and only if non-lethal force would not be effective.
- 2. Discharging of a weapon when not under threat or not during training exercises is not allowed. Officers caught in violation of this rule will be removed from the server and suspended from the SPD.
- 3. Failure to follow proper weapons discipline and procedure will get you removed from the server and suspended from the SPD.

- " - ] - ]; - - player createDiaryRecord ["policerules", - [ - "Teamspeak Rule", - " - 1. All cops must be on Teamspeak 3 in a designated cop channel. Failure to be on Teamspeak during an admin check will result in your immediate dismissal from the server.
- 2. Please join Teamspeak BEFORE you spawn in as a cop, heck, join Teamspeak before you even join the server.

- " - ] - ]; - - - -// Illegal Items Section - player createDiaryRecord ["illegalitems", - [ - "Rebel Rules", - " - A rebel is one who rises in armed resistance against a government. In this case it would be the police. However, due to the small amount of police compared to the possible amount of rebels, do not attack the police without a reason, please be civil and use common sense, and don't take the word rebel literally, but instead how it will make this server fun for all.

- 1. A rebel must first form a gang, and then declare intentions.
- 2. Resistance does not excuse RDMing (See RDMing in General Rules)
- 3. Resistance roleplay should be conducted in more ways than constantly robbing the bank or shooting police officers.
- 4. Resistance must be coordinated.
- 5. A PROPER reason must be behind each and every attack.

- " - ] - ]; - player createDiaryRecord ["illegalitems", - [ - "Gang Rules", - " - 1. Being in a gang is not illegal. Only when illegal crimes are committed.
- 2. Being in a gang area is not illegal. Only when partaking in illegal activities.
- 3. Gangs may hold and control gang areas. Other gangs may attack a controlling gang to compete for control of a gang area.
- 4. To declare war on another gang, the leader must announce it in global and all gang members of both gangs must be notified. For a more long term gang war, a declaration should be made on the forums.
- 5. Gangs may not kill unarmed civilians, unless said civilian is part of a rival gang and in your gangs controlled area.
- 6. Gangs may not kill civilians, unless they are under threat. Killing unarmed civilians because they do not comply is considered RDM, but you can injure/damage.

- " - ] - ]; - player createDiaryRecord ["illegalitems", - [ - "Illegal Vehicles", - " - A civilian in control of the following prohibited vehicles is subject to the consequences defined in the unauthorized control of a prohibited vehicle law.

- - 1. Ifrit
- 2. Speedboat
- 3. Hunter
- 4. Police Offroad
- " - ] - ]; - player createDiaryRecord ["illegalitems", - [ - "Illegal Weapons", - " - A civilian in possession of the following is subject to the consequences as defined in the illegal possession of a firearm law.

- - 1. MX Series
- 2. Katiba Series
- 3. TRG Series
- 4. Mk.20 Series
- 5. Mk.18 ABR
- 6. SDAR Rifle
- 7. Sting SMG
- 8. Silenced P07 (Taser)
- 9. Any explosives

- " - ] - ]; - player createDiaryRecord ["illegalitems", - [ - "Illegal Items", - " - The following items are illegal to posses:

- 1. Turtle
- 2. Cocaine
- 3. Heroin
- 4. Cannabis
- 5. Marijuana

- " - ] - ]; - - -// Controls Section - - player createDiaryRecord ["controls", - [ - "", - " - Y: Open Player Menu
- U: Lock and unlock cars
- F: Cop Siren (if cop)
- T: Vehicle Trunk
- Left Shift + R: Restrain (Cop Only)
- Left Shift + G: Knock out / stun (Civ Only, used for robbing them)
- Left Windows: Main Interaction key which is used for picking up items/money, gathering, interacting with cars (repair,etc) and for cops to interact with civilians. Can be rebound to a single key like H by pressing ESC->Configure->Controls->Custom->Use Action 10
- Left Shift + L: Activates cop siren lights (as a cop).
- Left Shift + H: Holster's your pistol
- " - ] - ]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_arrestAction.sqf b/Altis_Life.Altis/core/actions/fn_arrestAction.sqf deleted file mode 100644 index cd2888af..00000000 --- a/Altis_Life.Altis/core/actions/fn_arrestAction.sqf +++ /dev/null @@ -1,23 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_arrestAction.sqf - - Description: - Arrests the targeted person. -*/ -private["_unit","_id"]; -_unit = param [0,ObjNull,[ObjNull]]; -if(isNull _unit) exitWith {}; //Not valid -if(isNil "_unit") exitwith {}; //Not Valid -if(!(_unit isKindOf "Man")) exitWith {}; //Not a unit -if(!isPlayer _unit) exitWith {}; //Not a human -if(!(_unit GVAR "restrained")) exitWith {}; //He's not restrained. -if(!((side _unit) in [civilian,independent])) exitWith {}; //Not a civ -if(isNull _unit) exitWith {}; //Not valid - -[_unit,player,false] remoteExecCall ["life_fnc_wantedBounty",RSERV]; - -if(isNull _unit) exitWith {}; //Not valid -detach _unit; -[_unit,false] remoteExecCall ["life_fnc_jail",_unit]; -[0,"STR_NOTF_Arrested_1",true, [_unit GVAR ["realname",name _unit], profileName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_buyLicense.sqf b/Altis_Life.Altis/core/actions/fn_buyLicense.sqf deleted file mode 100644 index 4a4c6d67..00000000 --- a/Altis_Life.Altis/core/actions/fn_buyLicense.sqf +++ /dev/null @@ -1,23 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_buyLicense.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Called when purchasing a license. May need to be revised. -*/ -private["_type","_varName","_displayName","_sideFlag","_price"]; -_type = SEL(_this,3); - -if(!isClass (missionConfigFile >> "Licenses" >> _type)) exitWith {}; //Bad entry? -_varName = M_CONFIG(getText,"Licenses",_type,"variable"); -_displayName = M_CONFIG(getText,"Licenses",_type,"displayName"); -_price = M_CONFIG(getNumber,"Licenses",_type,"price"); -_sideFlag = M_CONFIG(getText,"Licenses",_type,"side"); -_varName = LICENSE_VARNAME(_varName,_sideFlag); - -if(CASH < _price) exitWith {hint format[localize "STR_NOTF_NE_1",[_price] call life_fnc_numberText,localize _displayName];}; -SUB(CASH,_price); - -titleText[format[localize "STR_NOTF_B_1", localize _displayName,[_price] call life_fnc_numberText],"PLAIN"]; -SVAR_MNS [_varName,true]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_captureHideout.sqf b/Altis_Life.Altis/core/actions/fn_captureHideout.sqf deleted file mode 100644 index 16162756..00000000 --- a/Altis_Life.Altis/core/actions/fn_captureHideout.sqf +++ /dev/null @@ -1,87 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Blah blah. -*/ -private["_group","_hideout","_action","_cpRate","_cP","_progressBar","_title","_titleText","_ui","_flagTexture"]; -_hideout = (nearestObjects[getPosATL player,["Land_u_Barracks_V2_F","Land_i_Barracks_V2_F"],25]) select 0; -_group = _hideout GVAR ["gangOwner",grpNull]; - -if(isNil {grpPlayer GVAR "gang_name"}) exitWith {titleText[localize "STR_GNOTF_CreateGang","PLAIN"];}; -if(_group == grpPlayer) exitWith {titleText[localize "STR_GNOTF_Controlled","PLAIN"]}; -if((_hideout GVAR ["inCapture",FALSE])) exitWith {hint localize "STR_GNOTF_Captured";}; -if(!isNull _group) then { - _gangName = _group GVAR ["gang_name",""]; - _action = [ - format[localize "STR_GNOTF_AlreadyControlled",_gangName], - localize "STR_GNOTF_CurrentCapture", - localize "STR_Global_Yes", - localize "STR_Global_No" - ] call BIS_fnc_guiMessage; - - _cpRate = 0.0045; -} else { - _cpRate = 0.0075; -}; - -if(!isNil "_action" && {!_action}) exitWith {titleText[localize "STR_GNOTF_CaptureCancel","PLAIN"];}; -life_action_inUse = true; - -//Setup the progress bar -disableSerialization; -_title = localize "STR_GNOTF_Capturing"; -5 cutRsc ["life_progress","PLAIN"]; -_ui = GVAR_UINS "life_progress"; -_progressBar = _ui displayCtrl 38201; -_titleText = _ui displayCtrl 38202; -_titleText ctrlSetText format["%2 (1%1)...","%",_title]; -_progressBar progressSetPosition 0.01; -_cP = 0.01; - -while {true} do { - if(animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { - [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; - player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; - player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; - }; - sleep 0.26; - if(isNull _ui) then { - 5 cutRsc ["life_progress","PLAIN"]; - _ui = GVAR_UINS "life_progress"; - _progressBar = _ui displayCtrl 38201; - _titleText = _ui displayCtrl 38202; - }; - _cP = _cP + _cpRate; - _progressBar progressSetPosition _cP; - _titleText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_title]; - _hideout SVAR ["inCapture",true,true]; - if(_cP >= 1 OR !alive player) exitWith {_hideout SVAR ["inCapture",false,true];}; - if(life_istazed) exitWith {_hideout SVAR ["inCapture",false,true];}; //Tazed - if(life_interrupted) exitWith {_hideout SVAR ["inCapture",false,true];}; -}; - -//Kill the UI display and check for various states -5 cutText ["","PLAIN"]; -player playActionNow "stop"; -if(!alive player OR life_istazed) exitWith {life_action_inUse = false;_hideout SVAR ["inCapture",false,true];}; -if((player getVariable["restrained",false])) exitWith {life_action_inUse = false;_hideout SVAR ["inCapture",false,true];}; -if(life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_GNOTF_CaptureCancel","PLAIN"]; life_action_inUse = false;_hideout SVAR ["inCapture",false,true];}; -life_action_inUse = false; - -titleText["Hideout has been captured.","PLAIN"]; -_flagTexture = [ - "\A3\Data_F\Flags\Flag_red_CO.paa", - "\A3\Data_F\Flags\Flag_green_CO.paa", - "\A3\Data_F\Flags\Flag_blue_CO.paa", - "\A3\Data_F\Flags\Flag_white_CO.paa", - "\A3\Data_F\Flags\flag_fd_red_CO.paa", - "\A3\Data_F\Flags\flag_fd_green_CO.paa", - "\A3\Data_F\Flags\flag_fd_blue_CO.paa", - "\A3\Data_F\Flags\flag_fd_orange_CO.paa" - ] call BIS_fnc_selectRandom; -_this select 0 setFlagTexture _flagTexture; -[[0,1],"STR_GNOTF_CaptureSuccess",true,[name player,(group player) getVariable "gang_name"]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; -_hideout SVAR ["inCapture",false,true]; -_hideout SVAR ["gangOwner",grpPlayer,true]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_catchFish.sqf b/Altis_Life.Altis/core/actions/fn_catchFish.sqf deleted file mode 100644 index 3ee78d28..00000000 --- a/Altis_Life.Altis/core/actions/fn_catchFish.sqf +++ /dev/null @@ -1,28 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_catchFish.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Catches a fish that is near by. -*/ -private["_fish","_type"]; -_fish = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -if(!(_fish isKindOf "Fish_Base_F")) exitWith {}; //Not a fishy! -if(player distance _fish > 3.5) exitWith {}; -switch(true) do { - case ((typeOf _fish) == "Salema_F"): {_type = "salema"}; - case ((typeOf _fish) == "Ornate_random_F") : {_type = "ornate"}; - case ((typeOf _fish) == "Mackerel_F") : {_type = "mackerel"}; - case ((typeOf _fish) == "Tuna_F") : {_type = "tuna"}; - case ((typeOf _fish) == "Mullet_F") : {_type = "mullet"}; - case ((typeOf _fish) == "CatShark_F") : {_type = "catshark"}; - default {_type = ""}; -}; - -if(EQUAL(_type,"")) exitWith {}; //Couldn't get a type - -if(([true,_type,1] call life_fnc_handleInv)) then { - deleteVehicle _fish; - titleText[format[(localize "STR_NOTF_Fishing"),_type],"PLAIN"]; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_catchTurtle.sqf b/Altis_Life.Altis/core/actions/fn_catchTurtle.sqf deleted file mode 100644 index 9d859802..00000000 --- a/Altis_Life.Altis/core/actions/fn_catchTurtle.sqf +++ /dev/null @@ -1,16 +0,0 @@ -/* - File: fn_catchTurtle.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Catches a dead turtle? -*/ -private "_obj"; -_obj = cursorTarget; -if(isNull _obj) exitWith {}; //Not valid -if(alive _obj) exitWith {}; //It's alive, don't take it charlie! - -if(([true,"turtle",1] call life_fnc_handleInv)) then { - deleteVehicle _obj; - titleText[localize "STR_NOTF_CaughtTurtle","PLAIN"]; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_dpFinish.sqf b/Altis_Life.Altis/core/actions/fn_dpFinish.sqf deleted file mode 100644 index b9a84782..00000000 --- a/Altis_Life.Altis/core/actions/fn_dpFinish.sqf +++ /dev/null @@ -1,20 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_dpFinish.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Finishes the DP Mission and calculates the money earned based - on distance between A->B -*/ -private["_dp","_dis","_price"]; -_dp = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -life_delivery_in_progress = false; -life_dp_point = nil; -_dis = round((getPos life_dp_start) distance (getPos _dp)); -_price = round(1.7 * _dis); - -["DeliverySucceeded",[format[(localize "STR_NOTF_Earned_1"),[_price] call life_fnc_numberText]]] call bis_fnc_showNotification; -life_cur_task setTaskState "Succeeded"; -player removeSimpleTask life_cur_task; -ADD(CASH,_price); \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_dropFishingNet.sqf b/Altis_Life.Altis/core/actions/fn_dropFishingNet.sqf deleted file mode 100644 index 2466016c..00000000 --- a/Altis_Life.Altis/core/actions/fn_dropFishingNet.sqf +++ /dev/null @@ -1,41 +0,0 @@ -/* - File: fn_dropFishingNet.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Drops a virtual fishing net from the boat. -*/ -private["_fish","_type","_typeName"]; -if(!(vehicle player isKindOf "Ship")) exitWith {}; -_fish = (nearestObjects[getPos vehicle player,["Fish_Base_F"],20]); -life_net_dropped = true; -titleText[localize "STR_NOTF_NetDrop","PLAIN"]; -sleep 5; -if(count _fish == 0) exitWith {titleText[localize "STR_NOTF_NetDropFail","PLAIN"]; life_net_dropped = false;}; -{ - if(_x isKindOf "Fish_Base_F") then - { - switch(true) do - { - case ((typeOf _x) == "Salema_F"): {_typeName = localize "STR_ANIM_Salema"; _type = "salema";}; - case ((typeOf _x) == "Ornate_random_F") : {_typeName = localize "STR_ANIM_Ornate"; _type = "ornate";}; - case ((typeOf _x) == "Mackerel_F") : {_typeName = localize "STR_ANIM_Mackerel"; _type = "mackerel";}; - case ((typeOf _x) == "Tuna_F") : {_typeName = localize "STR_ANIM_Tuna"; _type = "tuna";}; - case ((typeOf _x) == "Mullet_F") : {_typeName = localize "STR_ANIM_Mullet"; _type = "mullet";}; - case ((typeOf _x) == "CatShark_F") : {_typeName = localize "STR_ANIM_Catshark"; _type = "catshark";}; - default {_type = "";}; - }; - - sleep 3; - - if(([true,_type,1] call life_fnc_handleInv)) then - { - deleteVehicle _x; - titleText[format[(localize "STR_NOTF_Fishing"),_typeName],"PLAIN"]; - }; - }; -} foreach (_fish); - -sleep 1.5; -titleText[localize "STR_NOTF_NetUp","PLAIN"]; -life_net_dropped = false; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_escortAction.sqf b/Altis_Life.Altis/core/actions/fn_escortAction.sqf deleted file mode 100644 index 0c0eec2b..00000000 --- a/Altis_Life.Altis/core/actions/fn_escortAction.sqf +++ /dev/null @@ -1,15 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_escortAction.sqf -*/ -private "_unit"; -_unit = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; - -if(isNil "_unit" OR isNull _unit OR !isPlayer _unit) exitWith {}; -if(!(side _unit in [civilian,independent])) exitWith {}; -if((player distance _unit > 3)) exitWith {}; - -_unit attachTo [player,[0.1,1.1,0]]; -_unit SVAR ["transporting",false,true]; -_unit SVAR ["Escorting",true,true]; -player reveal _unit; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_gather.sqf b/Altis_Life.Altis/core/actions/fn_gather.sqf deleted file mode 100644 index 50a9fdfa..00000000 --- a/Altis_Life.Altis/core/actions/fn_gather.sqf +++ /dev/null @@ -1,50 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_gather.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Main functionality for gathering. -*/ -if(isNil "life_action_gathering") then {life_action_gathering = false;}; -private["_gather","_itemWeight","_diff","_itemName","_resourceZones","_zone"]; -_resourceZones = ["apple_1","apple_2","apple_3","apple_4","peaches_1","peaches_2","peaches_3","peaches_4","heroin_1","cocaine_1","weed_1"]; -_zone = ""; - -if(life_action_gathering) exitWith {}; //Action is in use, exit to prevent spamming. -life_action_gathering = true; -//Find out what zone we're near -{ - if(player distance (getMarkerPos _x) < 30) exitWith {_zone = _x;}; -} foreach _resourceZones; - -if(EQUAL(_zone,"")) exitWith {life_action_inUse = false;}; - -//Get the resource that will be gathered from the zone name... -switch(true) do { - case (_zone in ["apple_1","apple_2","apple_3","apple_4"]): {_gather = ["apple",3];}; - case (_zone in ["peaches_1","peaches_2","peaches_3","peaches_4"]): {_gather = ["peach",3];}; - case (_zone in ["heroin_1"]): {_gather = ["heroin_unprocessed",1];}; - case (_zone in ["cocaine_1"]): {_gather = ["cocaine_unprocessed",1];}; - case (_zone in ["weed_1"]): {_gather = ["cannabis",1];}; - default {""}; -}; -//gather check?? -if(vehicle player != player) exitWith {}; - -_diff = [SEL(_gather,0),SEL(_gather,1),life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff; -if(EQUAL(_diff,0)) exitWith {hint localize "STR_NOTF_InvFull"}; -life_action_inUse = true; - -for "_i" from 0 to 2 do { - player playMove "AinvPercMstpSnonWnonDnon_Putdown_AmovPercMstpSnonWnonDnon"; - waitUntil{animationState player != "AinvPercMstpSnonWnonDnon_Putdown_AmovPercMstpSnonWnonDnon";}; - sleep 2.5; -}; - -if(([true,SEL(_gather,0),_diff] call life_fnc_handleInv)) then { - _itemName = M_CONFIG(getText,"VirtualItems",SEL(_gather,0),"displayName"); - titleText[format[localize "STR_NOTF_Gather_Success",(localize _itemName),_diff],"PLAIN"]; -}; - -life_action_inUse = false; diff --git a/Altis_Life.Altis/core/actions/fn_getDPMission.sqf b/Altis_Life.Altis/core/actions/fn_getDPMission.sqf deleted file mode 100644 index a81cae27..00000000 --- a/Altis_Life.Altis/core/actions/fn_getDPMission.sqf +++ /dev/null @@ -1,43 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_getDPMission.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Selects a random DP point for a delivery mission. - Needs to be revised. -*/ -private["_dp","_target"]; -_target = param [0,ObjNull,[ObjNull]]; -if(str(_target) in LIFE_SETTINGS(getArray,"delivery_points")) then { - private "_point"; - _point = LIFE_SETTINGS(getArray,"delivery_points"); - _point deleteAt (_point find (str(_target))); - _dp = _point call BIS_fnc_selectRandom; -} else { - _dp = LIFE_SETTINGS(getArray,"delivery_points") call BIS_fnc_selectRandom; -}; - -life_dp_start = _target; - -life_delivery_in_progress = true; -life_dp_point = call compile format["%1",_dp]; - -_dp = [_dp,"_"," "] call KRON_Replace; -life_cur_task = player createSimpleTask [format["Delivery_%1",life_dp_point]]; -life_cur_task setSimpleTaskDescription [format[localize "STR_NOTF_DPStart",toUpper _dp],"Delivery Job",""]; -life_cur_task setTaskState "Assigned"; -player setCurrentTask life_cur_task; - -["DeliveryAssigned",[format[localize "STR_NOTF_DPTask",toUpper _dp]]] call bis_fnc_showNotification; - -[] spawn { - waitUntil {!life_delivery_in_progress OR !alive player}; - if(!alive player) then { - life_cur_task setTaskState "Failed"; - player removeSimpleTask life_cur_task; - ["DeliveryFailed",[localize "STR_NOTF_DPFailed"]] call BIS_fnc_showNotification; - life_delivery_in_progress = false; - life_dp_point = nil; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_gutAnimal.sqf b/Altis_Life.Altis/core/actions/fn_gutAnimal.sqf deleted file mode 100644 index a778ca32..00000000 --- a/Altis_Life.Altis/core/actions/fn_gutAnimal.sqf +++ /dev/null @@ -1,68 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Guts the animal? -*/ -private["_animalCorpse","_upp","_ui","_progress","_pgText","_cP","_displayName","_item"]; -_animalCorpse = param [0,ObjNull,[ObjNull]]; -if(isNull _animalCorpse) exitWith {}; //Object passed is null? - -life_interrupted = false; -if(!((typeOf _animalCorpse) in ["Hen_random_F","Cock_random_F","Goat_random_F","Sheep_random_F","Rabbit_F"])) exitWith {}; -if(player distance _animalCorpse > 3.5) exitWith {}; -life_action_inUse = true; - -switch(typeOf _animalCorpse) do { - case "Hen_random_F": {_displayName = "Chicken"; _item = "hen_raw";}; - case "Cock_random_F": {_displayName = "Rooster"; _item = "rooster_raw";}; - case "Goat_random_F": {_displayName = "Goat"; _item = "goat_raw";}; - case "Sheep_random_F": {_displayName = "Sheep"; _item = "sheep_raw";}; - case "Rabbit_F": {_displayName = "Rabbit"; _item = "rabbit_raw";}; - default {_displayName = ""; _item = "";}; -}; - -if(EQUAL(_displayName,"")) exitWith {life_action_inUse = false;}; - -_upp = format["Gutting %1",_displayName]; -//Setup our progress bar. -disableSerialization; -5 cutRsc ["life_progress","PLAIN"]; -_ui = GVAR_UINS "life_progress"; -_progress = _ui displayCtrl 38201; -_pgText = _ui displayCtrl 38202; -_pgText ctrlSetText format["%2 (1%1)...","%",_upp]; -_progress progressSetPosition 0.01; -_cP = 0.01; - -while{true} do { - if(animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { - [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; - player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; - player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; - }; - uiSleep 0.15; - _cP = _cP + 0.01; - _progress progressSetPosition _cP; - _pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp]; - if(_cP >= 1) exitWith {}; - if(!alive player) exitWith {}; - if(isNull _animalCorpse) exitWith {}; - if(player != vehicle player) exitWith {}; - if(life_interrupted) exitWith {}; -}; - -life_action_inUse = false; -5 cutText ["","PLAIN"]; -player playActionNow "stop"; -if(isNull _animalCorpse) exitWith {life_action_inUse = false;}; -if(life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; -if(player != vehicle player) exitWith {titleText[localize "STR_NOTF_ActionInVehicle","PLAIN"];}; - -if(([true,_item,1] call life_fnc_handleInv)) then { - deleteVehicle _animalCorpse; - titleText [format["You have collected some raw %1 meat",_displayName],"PLAIN"]; -} else { - titleText ["Your inventory is full","PLAIN"]; -}; diff --git a/Altis_Life.Altis/core/actions/fn_healHospital.sqf b/Altis_Life.Altis/core/actions/fn_healHospital.sqf deleted file mode 100644 index 894b0f33..00000000 --- a/Altis_Life.Altis/core/actions/fn_healHospital.sqf +++ /dev/null @@ -1,17 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_healHospital.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Doesn't matter, will be revised later. -*/ -if(CASH < 100) exitWith {hint format[localize "STR_NOTF_HS_NoCash",100];}; -titleText[localize "STR_NOTF_HS_Healing","PLAIN"]; - -uiSleep 8; - -if(player distance (_this select 0) > 5) exitWith {titleText[localize "STR_NOTF_HS_ToFar","PLAIN"]}; -titleText[localize "STR_NOTF_HS_Healed","PLAIN"]; -player setDamage 0; -SUB(CASH,100); \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_impoundAction.sqf b/Altis_Life.Altis/core/actions/fn_impoundAction.sqf deleted file mode 100644 index b776dd81..00000000 --- a/Altis_Life.Altis/core/actions/fn_impoundAction.sqf +++ /dev/null @@ -1,66 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_impoundAction.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Impounds the vehicle -*/ -private["_vehicle","_type","_time","_price","_vehicleData","_upp","_ui","_progress","_pgText","_cP","_filters"]; -_vehicle = param [0,ObjNull,[ObjNull]]; -_filters = ["Car","Air","Ship"]; -if(!((KINDOF_ARRAY(_vehicle,_filters)))) exitWith {}; -if(player distance cursorTarget > 10) exitWith {}; - -_vehicleData = _vehicle GVAR ["vehicle_info_owners",[]]; -if(EQUAL((count _vehicleData),0)) exitWith {deleteVehicle _vehicle}; //Bad vehicle. -_vehicleName = FETCH_CONFIG2(getText,CONFIG_VEHICLES,(typeOf _vehicle),"displayName"); -[0,"STR_NOTF_BeingImpounded",true,[SEL(SEL(_vehicleData,0),1),_vehicleName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; -life_action_inUse = true; - -_upp = localize "STR_NOTF_Impounding"; -//Setup our progress bar. -disableSerialization; -5 cutRsc ["life_progress","PLAIN"]; -_ui = GVAR_UINS "life_progress"; -_progress = _ui displayCtrl 38201; -_pgText = _ui displayCtrl 38202; -_pgText ctrlSetText format["%2 (1%1)...","%",_upp]; -_progress progressSetPosition 0.01; -_cP = 0.01; - -while{true} do { - sleep 0.09; - _cP = _cP + 0.01; - _progress progressSetPosition _cP; - _pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp]; - if(_cP >= 1) exitWith {}; - if(player distance _vehicle > 10) exitWith {}; - if(!alive player) exitWith {}; -}; - -5 cutText ["","PLAIN"]; - -if(player distance _vehicle > 10) exitWith {hint localize "STR_NOTF_ImpoundingCancelled"; life_action_inUse = false;}; -if(!alive player) exitWith {life_action_inUse = false;}; - -if(EQUAL(count crew _vehicle,0)) then { - if(!(KINDOF_ARRAY(_vehicle,_filters))) exitWith {life_action_inUse = false;}; - _type = FETCH_CONFIG2(getText,CONFIG_VEHICLES,(typeOf _vehicle),"displayName"); - switch (true) do { - case (_vehicle isKindOf "Car"): {_price = LIFE_SETTINGS(getNumber,"impound_car");}; - case (_vehicle isKindOf "Ship"): {_price = LIFE_SETTINGS(getNumber,"impound_boat");}; - case (_vehicle isKindOf "Air"): {_price = LIFE_SETTINGS(getNumber,"impound_air");}; - }; - - life_impound_inuse = true; - [_vehicle,true,player] remoteExecCall ["TON_fnc_vehicleStore",RSERV]; - waitUntil {!life_impound_inuse}; - hint format[localize "STR_NOTF_Impounded",_type,_price]; - [0,"STR_NOTF_HasImpounded",true,[profileName,SEL(SEL(_vehicleData,0),1),_vehicleName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; - ADD(BANK,_price); -} else { - hint localize "STR_NOTF_ImpoundingCancelled"; -}; - -life_action_inUse = false; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_packupSpikes.sqf b/Altis_Life.Altis/core/actions/fn_packupSpikes.sqf deleted file mode 100644 index fad2cd8b..00000000 --- a/Altis_Life.Altis/core/actions/fn_packupSpikes.sqf +++ /dev/null @@ -1,18 +0,0 @@ -/* - File: fn_packupSpikes.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Packs up a deployed spike strip. -*/ -private["_spikes"]; -_spikes = nearestObjects[getPos player,["Land_Razorwire_F"],8] select 0; -if(isNil "_spikes") exitWith {}; - -if(([true,"spikeStrip",1] call life_fnc_handleInv)) then -{ - titleText[localize "STR_NOTF_SpikeStrip","PLAIN"]; - player removeAction life_action_spikeStripPickup; - life_action_spikeStripPickup = nil; - deleteVehicle _spikes; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_pickupItem.sqf b/Altis_Life.Altis/core/actions/fn_pickupItem.sqf deleted file mode 100644 index d63614df..00000000 --- a/Altis_Life.Altis/core/actions/fn_pickupItem.sqf +++ /dev/null @@ -1,49 +0,0 @@ -#include "..\..\script_macros.hpp" -#define INUSE(ENTITY) ENTITY SVAR ["inUse",false,true] -/* - File: fn_pickupItem.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Master handling for picking up an item. -*/ -private ["_itemInfo","_itemName","_illegal","_diff"]; -if((time - life_action_delay) < 2) exitWith {hint localize "STR_NOTF_ActionDelay"; INUSE(_this);}; -if(isNull _this OR {player distance _this > 3}) exitWith {INUSE(_this);}; - -_itemInfo = _this GVAR ["item",[]]; if(EQUAL(count _itemInfo,0)) exitWith {deleteVehicle _this;}; -_itemName = ITEM_NAME(SEL(_itemInfo,0)); -_illegal = ITEM_ILLEGAL(SEL(_itemInfo,0)); - -if(playerSide == west && (EQUAL(_illegal,1))) exitWith { - titleText[format[localize "STR_NOTF_PickedEvidence",_itemName,[round(ITEM_SELLPRICE(SEL(_itemInfo,0)) / 2)] call life_fnc_numberText],"PLAIN"]; - ADD(BANK,round(ITEM_SELLPRICE(SEL(_itemInfo,0)) / 2)); - deleteVehicle _this; - life_action_delay = time; -}; - -life_action_delay = time; -_diff = [SEL(_itemInfo,0),SEL(_itemInfo,1),life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff; -if(_diff <= 0) exitWith {hint localize "STR_NOTF_InvFull"; INUSE(_this);}; - -if(!(EQUAL(_diff,SEL(_itemInfo,1)))) then { - if(([true,SEL(_itemInfo,0),_diff] call life_fnc_handleInv)) then { - player playMove "AinvPknlMstpSlayWrflDnon"; - - _this SVAR ["item",[SEL(_itemInfo,0),(SEL(_itemInfo,1)) - _diff],true]; - titleText[format[localize "STR_NOTF_Picked",_diff,localize _itemName],"PLAIN"]; - INUSE(_this); - } else { - INUSE(_this); - }; -} else { - if(([true,SEL(_itemInfo,0),SEL(_itemInfo,1)] call life_fnc_handleInv)) then { - deleteVehicle _this; - //waitUntil{isNull _this}; - player playMove "AinvPknlMstpSlayWrflDnon"; - - titleText[format[localize "STR_NOTF_Picked",_diff,localize _itemName],"PLAIN"]; - } else { - INUSE(_this); - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_pickupMoney.sqf b/Altis_Life.Altis/core/actions/fn_pickupMoney.sqf deleted file mode 100644 index 8d70280d..00000000 --- a/Altis_Life.Altis/core/actions/fn_pickupMoney.sqf +++ /dev/null @@ -1,27 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_pickupMoney.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Picks up money -*/ -private "_value"; -if((time - life_action_delay) < 1.5) exitWith {hint localize "STR_NOTF_ActionDelay"; _this SVAR ["inUse",false,true];}; -if(isNull _this OR {player distance _this > 3}) exitWith {_this SVAR ["inUse",false,true];}; - -_value = SEL((_this GVAR "item"),1); -if(!isNil "_value") exitWith { - deleteVehicle _this; - - switch (true) do { - case (_value > 20000000) : {_value = 100000;}; //VAL>20mil->100k - case (_value > 5000000) : {_value = 250000;}; //VAL>5mil->250k - default {}; - }; - - player playMove "AinvPknlMstpSlayWrflDnon"; - titleText[format[localize "STR_NOTF_PickedMoney",[_value] call life_fnc_numberText],"PLAIN"]; - ADD(CASH,_value); - life_action_delay = time; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_postBail.sqf b/Altis_Life.Altis/core/actions/fn_postBail.sqf deleted file mode 100644 index 30173e05..00000000 --- a/Altis_Life.Altis/core/actions/fn_postBail.sqf +++ /dev/null @@ -1,19 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_postBail.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Called when the player attempts to post bail. - Needs to be revised. -*/ -private["_unit"]; -_unit = param [1,objNull,[objNull]]; -if(life_bail_paid) exitWith {}; -if(isNil {life_bail_amount}) then {life_bail_amount = 3500;}; -if(!isNil "life_canpay_bail") exitWith {hint localize "STR_NOTF_Bail_Post"}; -if(BANK < life_bail_amount) exitWith {hint format[localize "STR_NOTF_Bail_NotEnough",life_bail_amount];}; - -SUB(BANK,life_bail_amount); -life_bail_paid = true; -[0,"STR_NOTF_Bail_Bailed",true,[profileName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_processAction.sqf b/Altis_Life.Altis/core/actions/fn_processAction.sqf deleted file mode 100644 index 78b9d052..00000000 --- a/Altis_Life.Altis/core/actions/fn_processAction.sqf +++ /dev/null @@ -1,100 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_processAction.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Master handling for processing an item. -*/ -private["_vendor","_type","_itemInfo","_oldItem","_newItem","_cost","_upp","_hasLicense","_itemName","_oldVal","_ui","_progress","_pgText","_cP"]; -_vendor = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -_type = [_this,3,"",[""]] call BIS_fnc_param; -//Error check -if(isNull _vendor OR EQUAL(_type,"") OR (player distance _vendor > 10)) exitWith {}; - -//unprocessed item,processed item, cost if no license,Text to display (I.e Processing (percent) ..." -_itemInfo = switch (_type) do { - case "oil": {["oil_unprocessed","oil_processed",1200,(localize "STR_Process_Oil")];}; - case "diamond": {["diamond_uncut","diamond_cut",1350,(localize "STR_Process_Diamond")];}; - case "heroin": {["heroin_unprocessed","heroin_processed",1750,(localize "STR_Process_Heroin")];}; - case "copper": {["copper_unrefined","copper_refined",750,(localize "STR_Process_Copper")];}; - case "iron": {["iron_unrefined","iron_refined",1120,(localize "STR_Process_Iron")];}; - case "sand": {["sand","glass",650,(localize "STR_Process_Sand")];}; - case "salt": {["salt_unrefined","salt_refined",450,(localize "STR_Process_Salt")];}; - case "cocaine": {["cocaine_unprocessed","cocaine_processed",1500,(localize "STR_Process_Cocaine")];}; - case "marijuana": {["cannabis","marijuana",500,(localize "STR_Process_Marijuana")];}; - case "cement": {["rock","cement",350,(localize "STR_Process_Cement")];}; - default {[];}; -}; - -//Error checking -if(EQUAL(count _itemInfo,0)) exitWith {}; - -//Setup vars. -_oldItem = SEL(_itemInfo,0); -_newItem = SEL(_itemInfo,1); -_cost = SEL(_itemInfo,2); -_upp = SEL(_itemInfo,3); - -if(_vendor in [mari_processor,coke_processor,heroin_processor]) then { - _hasLicense = true; -} else { - _hasLicense = LICENSE_VALUE(_type,"civ"); -}; - -_itemName = M_CONFIG(getText,"VirtualItems",_newItem,"displayName"); -_oldVal = ITEM_VALUE(_oldItem); - -_cost = _cost * _oldVal; -//Some more checks -if(EQUAL(_oldVal,0)) exitWith {}; - -//Setup our progress bar. -disableSerialization; -5 cutRsc ["life_progress","PLAIN"]; -_ui = GVAR_UINS "life_progress"; -_progress = _ui displayCtrl 38201; -_pgText = _ui displayCtrl 38202; -_pgText ctrlSetText format["%2 (1%1)...","%",_upp]; -_progress progressSetPosition 0.01; -_cP = 0.01; - -life_is_processing = true; - -if(_hasLicense) then { - while{true} do { - sleep 0.3; - _cP = _cP + 0.01; - _progress progressSetPosition _cP; - _pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp]; - if(_cP >= 1) exitWith {}; - if(player distance _vendor > 10) exitWith {}; - }; - - if(player distance _vendor > 10) exitWith {hint localize "STR_Process_Stay"; 5 cutText ["","PLAIN"]; life_is_processing = false;}; - if(!([false,_oldItem,_oldVal] call life_fnc_handleInv)) exitWith {5 cutText ["","PLAIN"]; life_is_processing = false;}; - if(!([true,_newItem,_oldVal] call life_fnc_handleInv)) exitWith {5 cutText ["","PLAIN"]; [true,_oldItem,_oldVal] call life_fnc_handleInv; life_is_processing = false;}; - 5 cutText ["","PLAIN"]; - titleText[format[localize "STR_Process_Processed",_oldVal,localize _itemName],"PLAIN"]; - life_is_processing = false; -} else { - if(CASH < _cost) exitWith {hint format[localize "STR_Process_License",[_cost] call life_fnc_numberText]; 5 cutText ["","PLAIN"]; life_is_processing = false;}; - - while{true} do { - sleep 0.9; - _cP = _cP + 0.01; - _progress progressSetPosition _cP; - _pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp]; - if(_cP >= 1) exitWith {}; - if(player distance _vendor > 10) exitWith {}; - }; - - if(player distance _vendor > 10) exitWith {hint localize "STR_Process_Stay"; 5 cutText ["","PLAIN"]; life_is_processing = false;}; - if(CASH < _cost) exitWith {hint format[localize "STR_Process_License",[_cost] call life_fnc_numberText]; 5 cutText ["","PLAIN"]; life_is_processing = false;}; - if(!([false,_oldItem,_oldVal] call life_fnc_handleInv)) exitWith {5 cutText ["","PLAIN"]; life_is_processing = false;}; - if(!([true,_newItem,_oldVal] call life_fnc_handleInv)) exitWith {5 cutText ["","PLAIN"]; [true,_oldItem,_oldVal] call life_fnc_handleInv; life_is_processing = false;}; - 5 cutText ["","PLAIN"]; - titleText[format[localize "STR_Process_Processed2",_oldVal,localize _itemName,[_cost] call life_fnc_numberText],"PLAIN"]; - SUB(CASH,_cost); - life_is_processing = false; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_pulloutAction.sqf b/Altis_Life.Altis/core/actions/fn_pulloutAction.sqf deleted file mode 100644 index ba5d0739..00000000 --- a/Altis_Life.Altis/core/actions/fn_pulloutAction.sqf +++ /dev/null @@ -1,17 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_pulloutAction.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Pulls civilians out of a car if it's stopped. -*/ -private["_crew"]; -_crew = crew cursorTarget; - -{ - if(side _x != west) then { - _x setVariable ["transporting",false,true]; _x SVAR ["Escorting",false,true]; - [_x] remoteExecCall ["life_fnc_pulloutVeh",_x]; - }; -} forEach _crew; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_pumpRepair.sqf b/Altis_Life.Altis/core/actions/fn_pumpRepair.sqf deleted file mode 100644 index cb76a7c8..00000000 --- a/Altis_Life.Altis/core/actions/fn_pumpRepair.sqf +++ /dev/null @@ -1,24 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_pumpRepair.sqf - - Description: - Quick simple action that is only temp. -*/ -private["_method"]; -if(CASH < 500) then -{ - if(BANK < 500) exitWith {_method = 0;}; - _method = 2; -} - else -{ - _method = 1; -}; - -switch (_method) do -{ - case 0: {hint "You do not have $500 in cash or in your bank accoumt."}; - case 1: {vehicle player setDamage 0; SUB(CASH,500); hint "You have repaired your vehicle for $500";}; - case 2: {vehicle player setDamage 0; SUB(BANK,500); hint "You have repaired your vehicle for $500";}; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_pushVehicle.sqf b/Altis_Life.Altis/core/actions/fn_pushVehicle.sqf deleted file mode 100644 index 9954e1bd..00000000 --- a/Altis_Life.Altis/core/actions/fn_pushVehicle.sqf +++ /dev/null @@ -1,18 +0,0 @@ -/* - Does it matter? Needs to be replaced. - Built for Feint's Push functionality -*/ -private["_target","_caller","_posCaller","_dir"]; -_target = cursorTarget; -_caller = player; -_posCaller = getPos _caller; -_dir = getDir _caller; - -if(isNull _target) exitWith {}; -if(_caller distance _target > 5) exitWith {}; - -if(local _target) then { - [_caller,_target,_posCaller,_dir] spawn life_fnc_pushFunction; -} else { - [_caller,_target,_posCaller,_dir] remoteExec ["life_fnc_pushFunction",_target]; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_putInCar.sqf b/Altis_Life.Altis/core/actions/fn_putInCar.sqf deleted file mode 100644 index 0c534c12..00000000 --- a/Altis_Life.Altis/core/actions/fn_putInCar.sqf +++ /dev/null @@ -1,19 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_putInCar.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Finds the nearest vehicle and loads the target into the vehicle. -*/ -private["_unit"]; -_unit = param [0,ObjNull,[ObjNull]]; -if(isNull _unit OR !isPlayer _unit) exitWith {}; - -_nearestVehicle = nearestObjects[getPosATL player,["Car","Ship","Submarine","Air"],10] select 0; -if(isNil "_nearestVehicle") exitWith {hint localize "STR_NOTF_VehicleNear"}; - -detach _unit; -[_nearestVehicle] remoteExecCall ["life_fnc_moveIn",_unit]; -_unit SVAR["Escorting",FALSE,TRUE]; -_unit SVAR["transporting",TRUE,TRUE]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_repairTruck.sqf b/Altis_Life.Altis/core/actions/fn_repairTruck.sqf deleted file mode 100644 index 63f7b726..00000000 --- a/Altis_Life.Altis/core/actions/fn_repairTruck.sqf +++ /dev/null @@ -1,55 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_repairTruck.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Main functionality for toolkits, to be revised in later version. -*/ -private["_veh","_upp","_ui","_progress","_pgText","_cP","_displayName","_test"]; -_veh = cursorTarget; -life_interrupted = false; -if(isNull _veh) exitwith {}; -if((_veh isKindOf "Car") OR (_veh isKindOf "Ship") OR (_veh isKindOf "Air")) then { - if("ToolKit" in (items player)) then { - life_action_inUse = true; - _displayName = FETCH_CONFIG2(getText,CONFIG_VEHICLES,(typeOf _veh),"displayName"); - _upp = format[localize "STR_NOTF_Repairing",_displayName]; - - //Setup our progress bar. - disableSerialization; - 5 cutRsc ["life_progress","PLAIN"]; - _ui = GVAR_UINS "life_progress"; - _progress = _ui displayCtrl 38201; - _pgText = _ui displayCtrl 38202; - _pgText ctrlSetText format["%2 (1%1)...","%",_upp]; - _progress progressSetPosition 0.01; - _cP = 0.01; - - while{true} do { - if(animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { - [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; - player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; - player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; - }; - - sleep 0.27; - _cP = _cP + 0.01; - _progress progressSetPosition _cP; - _pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp]; - if(_cP >= 1) exitWith {}; - if(!alive player) exitWith {}; - if(player != vehicle player) exitWith {}; - if(life_interrupted) exitWith {}; - }; - - life_action_inUse = false; - 5 cutText ["","PLAIN"]; - player playActionNow "stop"; - if(life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; - if(player != vehicle player) exitWith {titleText[localize "STR_NOTF_ActionInVehicle","PLAIN"];}; - player removeItem "ToolKit"; - _veh setDamage 0; - titleText[localize "STR_NOTF_RepairedVehicle","PLAIN"]; - }; -}; diff --git a/Altis_Life.Altis/core/actions/fn_restrainAction.sqf b/Altis_Life.Altis/core/actions/fn_restrainAction.sqf deleted file mode 100644 index 9b4aafd2..00000000 --- a/Altis_Life.Altis/core/actions/fn_restrainAction.sqf +++ /dev/null @@ -1,21 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_restrainAction.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Retrains the target. -*/ -private["_unit"]; -_unit = cursorTarget; -if(isNull _unit) exitWith {}; //Not valid -if((player distance _unit > 3)) exitWith {}; -if((_unit GVAR "restrained")) exitWith {}; -if(side _unit == west) exitWith {}; -if(player == _unit) exitWith {}; -if(!isPlayer _unit) exitWith {}; -//Broadcast! - -_unit SVAR["restrained",true,true]; -[player] remoteExec ["life_fnc_restrain",_unit]; -[0,"STR_NOTF_Restrained",true,[_unit GVAR["realname", name _unit], profileName]] remoteExecCall ["life_fnc_broadcast",west]; diff --git a/Altis_Life.Altis/core/actions/fn_robAction.sqf b/Altis_Life.Altis/core/actions/fn_robAction.sqf deleted file mode 100644 index 5afcbdbd..00000000 --- a/Altis_Life.Altis/core/actions/fn_robAction.sqf +++ /dev/null @@ -1,18 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_robAction.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Starts the robbing process? -*/ -private["_target"]; -_target = cursorTarget; - -//Error checks -if(isNull _target) exitWith {}; -if(!isPlayer _target) exitWith {}; - -if(_target GVAR ["robbed",false]) exitWith {}; -[player] remoteExecCall ["life_fnc_robPerson",_target]; -_target SVAR ["robbed",TRUE,TRUE]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_searchAction.sqf b/Altis_Life.Altis/core/actions/fn_searchAction.sqf deleted file mode 100644 index 013b8261..00000000 --- a/Altis_Life.Altis/core/actions/fn_searchAction.sqf +++ /dev/null @@ -1,16 +0,0 @@ -/* - File: fn_searchAction.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Starts the searching process. -*/ -params [ - ["_unit",objNull,[objNull]] -]; -if(isNull _unit) exitWith {}; -hint localize "STR_NOTF_Searching"; -sleep 2; -if(player distance _unit > 5 || !alive player || !alive _unit) exitWith {hint localize "STR_NOTF_CannotSearchPerson"}; -[player] remoteExec ["life_fnc_searchClient",_unit]; -life_action_inUse = true; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_searchVehAction.sqf b/Altis_Life.Altis/core/actions/fn_searchVehAction.sqf deleted file mode 100644 index 83ce9667..00000000 --- a/Altis_Life.Altis/core/actions/fn_searchVehAction.sqf +++ /dev/null @@ -1,26 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_searchVehAction.sqf -*/ -private["_vehicle","_data"]; -_vehicle = cursorTarget; -if((_vehicle isKindOf "Car") || !(_vehicle isKindOf "Air") || !(_vehicle isKindOf "Ship")) then { - _owners = _vehicle GVAR "vehicle_info_owners"; - if(isNil {_owners}) exitWith {hint localize "STR_NOTF_VehCheat"; deleteVehicle _vehicle;}; - - life_action_inUse = true; - hint localize "STR_NOTF_Searching"; - - sleep 3; - life_action_inUse = false; - - if(player distance _vehicle > 10 || !alive player || !alive _vehicle) exitWith {hint localize "STR_NOTF_SearchVehFail";}; - //_inventory = [(_vehicle getVariable "vehicle_info_inv")] call fnc_veh_inv; - //if(isNil {_inventory}) then {_inventory = "Nothing in storage."}; - _owners = [_owners] call life_fnc_vehicleOwners; - - if(_owners == "any
") then { - _owners = "No owners, impound it
"; - }; - hint parseText format[localize "STR_NOTF_SearchVeh",_owners]; -}; diff --git a/Altis_Life.Altis/core/actions/fn_serviceChopper.sqf b/Altis_Life.Altis/core/actions/fn_serviceChopper.sqf deleted file mode 100644 index 92bf8de7..00000000 --- a/Altis_Life.Altis/core/actions/fn_serviceChopper.sqf +++ /dev/null @@ -1,48 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_serviceChopper.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Main functionality for the chopper service paid, to be replaced in later version. -*/ -disableSerialization; -private["_search","_ui","_progress","_cP","_pgText","_title"]; -if(life_action_inUse) exitWith {hint localize "STR_NOTF_Action"}; - -_search = nearestObjects[getPos air_sp, ["Air"],5]; - -if(EQUAL(count _search,0)) exitWith {hint localize "STR_Service_Chopper_NoAir"}; -if(CASH < 1000) exitWith {hint localize "STR_Serive_Chopper_NotEnough"}; - -SUB(CASH,1000); -life_action_inUse = true; -_title = localize "STR_Service_Chopper_Servicing"; -5 cutRsc ["life_progress","PLAIN"]; -_ui = GVAR_UINS "life_progress"; -_progress = _ui displayCtrl 38201; -_pgText = _ui displayCtrl 38202; -_pgText ctrlSetText format["%2 (1%1)...","%",_title]; -_progress progressSetPosition 0.01; -_cP = 0.01; - -while {true} do { - sleep 0.2; - _cP = _cP + 0.01; - _progress progressSetPosition _cP; - _pgText ctrlSetText format["%2 (%1%2)...",round(_cP * 100),"%",_title]; - if(_cP >= 1) exitWith {}; -}; - -if(!alive SEL(_search,0) || SEL(_search,0) distance air_sp > 10) exitWith {life_action_inUse = false; hint localize "STR_Service_Chopper_Missing"}; -if(!local SEL(_search,0)) then { - [SEL(_search,0),1] remoteExecCall ["life_fnc_setFuel",SEL(_search,0)]; -} else { - SEL(_search,0) setFuel 1; -}; - -SEL(_search,0) setDamage 0; - -5 cutText ["","PLAIN"]; -titleText [localize "STR_Service_Chopper_Done","PLAIN"]; -life_action_inUse = false; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_stopEscorting.sqf b/Altis_Life.Altis/core/actions/fn_stopEscorting.sqf deleted file mode 100644 index 423b8844..00000000 --- a/Altis_Life.Altis/core/actions/fn_stopEscorting.sqf +++ /dev/null @@ -1,14 +0,0 @@ -/* - File: fn_stopEscorting.sqf - - Description: - ASFSDFHAGFASF -*/ -private["_unit"]; -_unit = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -if(isNull _unit) exitWith {}; //Not valid -if(!(_unit getVariable "Escorting")) exitWith {}; //He's not being Escorted. -if(side _unit != civilian) exitWith {}; //Not a civ -if(isNull _unit) exitWith {}; //Not valid -detach _unit; -_unit setVariable["Escorting",false,true]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_storeVehicle.sqf b/Altis_Life.Altis/core/actions/fn_storeVehicle.sqf deleted file mode 100644 index b990ae87..00000000 --- a/Altis_Life.Altis/core/actions/fn_storeVehicle.sqf +++ /dev/null @@ -1,33 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_storeVehicle.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Stores the vehicle in the garage. -*/ -private["_nearVehicles","_vehicle"]; -if(vehicle player != player) then { - _vehicle = vehicle player; -} else { - _nearVehicles = nearestObjects[getPos SEL(_this ,0),["Car","Air","Ship"],30]; //Fetch vehicles within 30m. - if(count _nearVehicles > 0) then { - { - if(!isNil "_vehicle") exitWith {}; //Kill the loop. - _vehData = _x GVAR ["vehicle_info_owners",[]]; - if(count _vehData > 0) then { - _vehOwner = SEL(SEL(_vehData,0),0); - if((getPlayerUID player) == _vehOwner) exitWith { - _vehicle = _x; - }; - }; - } foreach _nearVehicles; - }; -}; - -if(isNil "_vehicle") exitWith {hint localize "STR_Garage_NoNPC"}; -if(isNull _vehicle) exitWith {}; - -[_vehicle,false,(_this select 1)] remoteExecCall ["TON_fnc_vehicleStore",2]; -hint localize "STR_Garage_Store_Server"; -life_garage_store = true; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_ticketAction.sqf b/Altis_Life.Altis/core/actions/fn_ticketAction.sqf deleted file mode 100644 index 84e16575..00000000 --- a/Altis_Life.Altis/core/actions/fn_ticketAction.sqf +++ /dev/null @@ -1,15 +0,0 @@ -/* - File: fn_ticketAction.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Starts the ticketing process. -*/ -params [ - ["_unit",objNull,[objNull]] -]; -disableSerialization; -if(!(createDialog "life_ticket_give")) exitWith {hint localize "STR_Cop_TicketFail"}; -if(isNull _unit OR !isPlayer _unit) exitwith {}; -ctrlSetText[2651,format[localize "STR_Cop_Ticket",_unit getVariable["realname",name _unit]]]; -life_ticket_unit = _unit; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_unrestrain.sqf b/Altis_Life.Altis/core/actions/fn_unrestrain.sqf deleted file mode 100644 index e03597af..00000000 --- a/Altis_Life.Altis/core/actions/fn_unrestrain.sqf +++ /dev/null @@ -1,14 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_unrestrain.sqf -*/ -private["_unit"]; -_unit = param [0,ObjNull,[ObjNull]]; -if(isNull _unit OR !(_unit GVAR ["restrained",FALSE])) exitWith {}; //Error check? - -_unit SVAR ["restrained",FALSE,TRUE]; -_unit SVAR ["Escorting",FALSE,TRUE]; -_unit SVAR ["transporting",FALSE,TRUE]; -detach _unit; - -[0,"STR_NOTF_Unrestrain",true,[_unit GVAR ["realname",name _unit], profileName]] remoteExecCall ["life_fnc_broadcast",west]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/admin/fn_adminCompensate.sqf b/Altis_Life.Altis/core/admin/fn_adminCompensate.sqf deleted file mode 100644 index ce85a4ae..00000000 --- a/Altis_Life.Altis/core/admin/fn_adminCompensate.sqf +++ /dev/null @@ -1,30 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_adminCompensate.sqf - Author: ColinM9991 - - Description: - Figure it out. -*/ -private["_value","_action"]; -if(FETCH_CONST(life_adminlevel) < 2) exitWith {closeDialog 0; hint localize "STR_ANOTF_ErrorLevel";}; -_value = parseNumber(ctrlText 9922); -if(_value < 0) exitWith {}; -if(_value > 999999) exitWith {hint localize "STR_ANOTF_Fail"}; -//if(!([str(_value)] call life_fnc_isnumeric)) exitWith {hint localize "STR_AIM_notnumeric"}; - -_action = [ - format [localize "STR_ANOTF_CompWarn",[_value] call life_fnc_numberText], - localize "STR_Admin_Compensate", - localize "STR_Global_Yes", - localize "STR_Global_No" -] call BIS_fnc_guiMessage; - -if(_action) then { - life_cash = life_cash + _value; - hint format [localize "STR_ANOTF_Success",[_value] call life_fnc_numberText]; - closeDialog 0; -} else { - hint localize "STR_NOTF_ActionCancel"; - closeDialog 0; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/admin/fn_adminDebugCon.sqf b/Altis_Life.Altis/core/admin/fn_adminDebugCon.sqf deleted file mode 100644 index e29bff61..00000000 --- a/Altis_Life.Altis/core/admin/fn_adminDebugCon.sqf +++ /dev/null @@ -1,12 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_adminDebugCon.sqf - Author: ColinM9991 - - Description: - Opens the Debug Console. -*/ -if(FETCH_CONST(life_adminlevel) < 5) exitWith {closeDialog 0; hint "You have no business using this";}; - -createDialog "RscDisplayDebugPublic"; -[0,format["Admin %1 has opened the Debug Console.",profileName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; diff --git a/Altis_Life.Altis/core/admin/fn_adminFreeze.sqf b/Altis_Life.Altis/core/admin/fn_adminFreeze.sqf deleted file mode 100644 index 6619ef49..00000000 --- a/Altis_Life.Altis/core/admin/fn_adminFreeze.sqf +++ /dev/null @@ -1,17 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_adminFreeze.sqf - Author: ColinM9991 - - Description: Freezes selected player -*/ -if(FETCH_CONST(life_adminlevel) < 4) exitWith {closeDialog 0; hint localize "STR_ANOTF_ErrorLevel";}; - -private["_unit"]; -_unit = lbData[2902,lbCurSel (2902)]; -_unit = call compile format["%1", _unit]; -if(isNil "_unit") exitWith {}; -if(isNull _unit) exitWith {}; -if(_unit == player) exitWith {hint localize "STR_ANOTF_Error";}; - -[player] remoteExec ["life_fnc_freezePlayer",_unit]; diff --git a/Altis_Life.Altis/core/admin/fn_adminGodMode.sqf b/Altis_Life.Altis/core/admin/fn_adminGodMode.sqf deleted file mode 100644 index 9b4a938b..00000000 --- a/Altis_Life.Altis/core/admin/fn_adminGodMode.sqf +++ /dev/null @@ -1,26 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_adminGodMode.sqf - Author: Tobias 'Xetoxyc' Sittenauer - - Description: Enables God mode for Admin -*/ - -if(FETCH_CONST(life_adminlevel) < 4) exitWith {closeDialog 0; hint localize "STR_ANOTF_ErrorLevel";}; - -[] spawn { - while {dialog} do { - closeDialog 0; - sleep 0.01; - }; -}; - -if(life_god) then { - life_god = false; - titleText ["God mode disabled","PLAIN"]; titleFadeOut 2; - player allowDamage true; -} else { - life_god = true; - titleText ["God mode enabled","PLAIN"]; titleFadeOut 2; - player allowDamage false; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/admin/fn_adminMarkers.sqf b/Altis_Life.Altis/core/admin/fn_adminMarkers.sqf deleted file mode 100644 index 0c69aced..00000000 --- a/Altis_Life.Altis/core/admin/fn_adminMarkers.sqf +++ /dev/null @@ -1,41 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_adminMarkers.sqf - Sourced from Lystics Player Markers Loop -*/ -if(FETCH_CONST(life_adminlevel) < 4) exitWith {closeDialog 0; hint localize "STR_ANOTF_ErrorLevel";}; -life_markers = !life_markers; -if(life_markers) then { - PlayerMarkers = []; - FinishedLoop = false; - hint localize "STR_ANOTF_MEnabled"; - while{life_markers} do { - { - if !(_x in allUnits) then { - deleteMarkerLocal str _x; - }; - } forEach PlayerMarkers; - PlayerMarkers = []; - { - if(alive _x && isplayer _x) then { - deleteMarkerLocal str _x; - _pSee = createMarkerLocal [str _x,getPos _x]; - _pSee setMarkerTypeLocal "mil_triangle"; - _pSee setMarkerPosLocal getPos _x; - _pSee setMarkerSizeLocal [1,1]; - _pSee setMarkerTextLocal format['%1',_x getVariable["realname",name _x]]; - _pSee setMarkerColorLocal ("ColorRed"); - PlayerMarkers = PlayerMarkers + [_x]; - }; - } forEach allUnits; - sleep 0.2; -}; -FinishedLoop = true; -} else { - if(isNil "FinishedLoop") exitWith {}; - hint localize "STR_ANOTF_MDisabled"; - waitUntil{FinishedLoop}; - { - deleteMarkerLocal str _x; - } forEach PlayerMarkers; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/admin/fn_adminMenu.sqf b/Altis_Life.Altis/core/admin/fn_adminMenu.sqf deleted file mode 100644 index 3512f910..00000000 --- a/Altis_Life.Altis/core/admin/fn_adminMenu.sqf +++ /dev/null @@ -1,34 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_adminMenu.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Opens the admin menu, sorry nothing special in here. Take a look for yourself. -*/ -private["_display","_list","_side"]; -if(FETCH_CONST(life_adminlevel) < 1) exitWith {closeDialog 0;}; - -disableSerialization; - -waitUntil {!isNull (findDisplay 2900)}; -_list = CONTROL(2900,2902); -if(FETCH_CONST(life_adminlevel) < 1) exitWith {closeDialog 0;}; - -switch(FETCH_CONST(life_adminlevel)) do -{ - case 1: {ctrlShow [2904,false];ctrlShow [2905,false];ctrlShow [2906,false];ctrlShow [2907,false];ctrlShow [2908,false];ctrlShow [2909,false];ctrlShow [2910,false];ctrlShow [2911,false];}; - case 2: {ctrlShow [2905,false];ctrlShow [2906,false];ctrlShow [2907,false];ctrlShow [2908,false];ctrlShow [2909,false];ctrlShow [2910,false];ctrlShow [2911,false];}; - case 3: {ctrlShow [2907,false];ctrlShow [2908,false];ctrlShow [2909,false];ctrlShow [2910,false];ctrlShow [2911,false];}; - case 4: {ctrlShow [2911,false];}; -}; - -//Purge List -lbClear _list; - -{ - _side = switch(side _x) do {case west: {"Cop"}; case civilian: {"Civ"}; case independent: {"Medic"}; default {"Unknown"};}; - _list lbAdd format["%1 - %2", _x GVAR ["realname",name _x],_side]; - _list lbSetdata [(lbSize _list)-1,str(_x)]; -} foreach playableUnits; -if(FETCH_CONST(life_adminlevel) < 1) exitWith {closeDialog 0;}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/admin/fn_adminQuery.sqf b/Altis_Life.Altis/core/admin/fn_adminQuery.sqf deleted file mode 100644 index b5304e44..00000000 --- a/Altis_Life.Altis/core/admin/fn_adminQuery.sqf +++ /dev/null @@ -1,19 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_adminQuery.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Starts the query on a player. -*/ -private["_text","_info","_prim","_sec","_vest","_uni","_bp","_attach","_tmp"]; -disableSerialization; -if(!isNil {admin_query_ip}) exitWith {hint localize "STR_ANOTF_Query_2"}; -_text = CONTROL(2900,2903); -_info = lbData[2902,lbCurSel (2902)]; -_info = call compile format["%1", _info]; - -if(isNil "_info") exitWith {_text ctrlSetText localize "STR_ANOTF_QueryFail";}; -if(isNull _info) exitWith {_text ctrlSetText localize "STR_ANOTF_QueryFail";}; -[player] remoteExec ["TON_fnc_player_query",_info]; -_text ctrlSetText localize "STR_ANOTF_Query"; \ No newline at end of file diff --git a/Altis_Life.Altis/core/admin/fn_adminSpectate.sqf b/Altis_Life.Altis/core/admin/fn_adminSpectate.sqf deleted file mode 100644 index bf47c981..00000000 --- a/Altis_Life.Altis/core/admin/fn_adminSpectate.sqf +++ /dev/null @@ -1,27 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_adminSpectate.sqf - Author: ColinM9991 - - Description: - Spectate the chosen player. -*/ -if(FETCH_CONST(life_adminlevel) < 3) exitWith {closeDialog 0;}; - -private["_unit"]; -_unit = lbData[2902,lbCurSel (2902)]; -_unit = call compile format["%1", _unit]; -if(isNil "_unit") exitwith {}; -if(isNull _unit) exitWith {}; -if(_unit == player) exitWith {hint localize "STR_ANOTF_Error";}; - -[] spawn { - while {dialog} do { - closeDialog 0; - sleep 0.01; - }; -}; - -_unit switchCamera "INTERNAL"; -hint format["You are now spectating %1 \n\n Press F10 to stop Spectating.",_unit getVariable["realname",name _unit]]; -AM_Exit = (findDisplay 46) displayAddEventHandler ["KeyDown","if((_this select 1) == 68) then {(findDisplay 46) displayRemoveEventHandler ['KeyDown',AM_Exit];player switchCamera 'INTERNAL';hint 'You have stopped spectating';};false"]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/admin/fn_adminTeleport.sqf b/Altis_Life.Altis/core/admin/fn_adminTeleport.sqf deleted file mode 100644 index 86edf575..00000000 --- a/Altis_Life.Altis/core/admin/fn_adminTeleport.sqf +++ /dev/null @@ -1,26 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_adminTeleport.sqf - Author: ColinM9991 - Credits: To original script author(s) - Description: - Teleport to chosen position. -*/ -if(FETCH_CONST(life_adminlevel) < 3) exitWith {closeDialog 0;}; - -[] spawn { - while {dialog} do { - closeDialog 0; - sleep 0.01; - }; -}; - -tele={ - _pos = [_this select 0, _this select 1, _this select 2]; - (vehicle player) setpos [_pos select 0, _pos select 1, 0]; - onMapSingleClick ""; - openMap [false, false]; - hint "You have teleported to your selected position"; -}; -openMap [true, false]; -onMapSingleClick "[_pos select 0, _pos select 1, _pos select 2] call tele"; \ No newline at end of file diff --git a/Altis_Life.Altis/core/admin/fn_adminTpHere.sqf b/Altis_Life.Altis/core/admin/fn_adminTpHere.sqf deleted file mode 100644 index d10ac2e5..00000000 --- a/Altis_Life.Altis/core/admin/fn_adminTpHere.sqf +++ /dev/null @@ -1,19 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_adminTpHere.sqf - Author: ColinM9991 - - Description: - Teleport selected player to you. -*/ -if(FETCH_CONST(life_adminlevel) < 4) exitWith {closeDialog 0;}; - -private["_target"]; -_target = lbData[2902,lbCurSel (2902)]; -_target = call compile format["%1", _target]; -if(isNil "_target") exitwith {}; -if(isNull _target) exitWith {}; -if(_unit == player) exitWith {hint localize "STR_ANOTF_Error";}; - -_target setPos (getPos player); -hint format["You have teleported %1 to your location",_target getVariable["realname",name _target]]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/admin/fn_admingetID.sqf b/Altis_Life.Altis/core/admin/fn_admingetID.sqf deleted file mode 100644 index ab069c85..00000000 --- a/Altis_Life.Altis/core/admin/fn_admingetID.sqf +++ /dev/null @@ -1,13 +0,0 @@ -/* - Author: Bryan "Tonic" Boardwine - - Description: - Fetches an id? -*/ -private "_unit"; -_unit = lbData[2902,lbCurSel (2902)]; -_unit = call compile format["%1", _unit]; -if(isNil "_unit") exitwith {}; -if(isNull _unit) exitWith {}; - -[_unit,player] remoteExecCall ["TON_fnc_getID",2]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/admin/fn_adminid.sqf b/Altis_Life.Altis/core/admin/fn_adminid.sqf deleted file mode 100644 index 209ecbba..00000000 --- a/Altis_Life.Altis/core/admin/fn_adminid.sqf +++ /dev/null @@ -1,14 +0,0 @@ -/* - File: fn_adminid.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Output information received to admin menu. -*/ -private["_display","_ret","_text"]; -disableSerialization; -_ret = _this select 0; -_display = findDisplay 2900; -_text = _display displayCtrl 2903; - -_text ctrlSetStructuredText parseText format["ID: %1",_ret]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/admin/fn_admininfo.sqf b/Altis_Life.Altis/core/admin/fn_admininfo.sqf deleted file mode 100644 index b026368e..00000000 --- a/Altis_Life.Altis/core/admin/fn_admininfo.sqf +++ /dev/null @@ -1,31 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_admininfo.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Output information received to admin menu. -*/ -private["_ret","_unit","_prim","_sec","_vest","_uni","_bp","_attach"]; -_ret = _this; -disableSerialization; - -_unit = SEL(_ret,3); -_prim = if(!(EQUAL(primaryWeapon _unit,""))) then { FETCH_CONFIG2(getText,CONFIG_WEAPONS,primaryWeapon _unit,"displayName")} else {"None"}; -_sec = if(!(EQUAL(handgunWeapon _unit,""))) then { FETCH_CONFIG2(getText,CONFIG_WEAPONS,handgunWeapon _unit,"displayName")} else {"None"}; -_vest = if(!(EQUAL(vest _unit,""))) then { FETCH_CONFIG2(getText,CONFIG_WEAPONS,vest _unit,"displayName")} else {"None"}; -_uni = if(!(EQUAL(uniform _unit,""))) then { FETCH_CONFIG2(getText,CONFIG_WEAPONS,uniform _unit,"displayName")} else {"None"}; -_bp = if(!(EQUAL(backpack _unit,""))) then {FETCH_CONFIG2(getText,CONFIG_VEHICLES,backpack _unit,"displayName")} else {"None"}; - -_attach = []; -if(!(EQUAL(primaryWeapon _unit,""))) then { - { - if(!(EQUAL(_x,""))) then { - _attach pushBack (FETCH_CONFIG2(getText,CONFIG_WEAPONS,_x,"displayName")); - }; - } foreach (primaryWeaponItems _unit); -}; - -if(EQUAL(count _attach,0)) then {_attach = "None"}; -CONTROL(2900,2903) ctrlSetStructuredText parseText format["Name: %1
Bank: %2
Money: %3
Uniform: %4
Vest: %5
Backpack: %6
Primary: %7
Handgun: %8
Primary Attachments
%9", -_unit GVAR ["realname",name _unit],[SEL(_ret,0)] call life_fnc_numberText,[SEL(_ret,1)] call life_fnc_numberText, _uni,_vest,_bp,_prim,_sec,_attach]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/civilian/fn_civLoadout.sqf b/Altis_Life.Altis/core/civilian/fn_civLoadout.sqf deleted file mode 100644 index 81ff882b..00000000 --- a/Altis_Life.Altis/core/civilian/fn_civLoadout.sqf +++ /dev/null @@ -1,24 +0,0 @@ -/* - File: fn_civLoadout.sqf - Author: Tobias 'Xetoxyc' Sittenauer - - Description: - Loads the civs out with the default gear, with randomized clothing. -*/ -private["_handle"]; -_handle = [] spawn life_fnc_stripDownPlayer; -waitUntil {scriptDone _handle}; - -_clothings = ["U_C_Poloshirt_blue","U_C_Poloshirt_burgundy","U_C_Poloshirt_stripped","U_C_Poloshirt_tricolour","U_C_Poloshirt_salmon","U_C_Poloshirt_redwhite","U_C_Commoner1_1"]; -player addUniform (_clothings select (floor(random (count _clothings)))); - -/* ITEMS */ -player addItem "ItemMap"; -player assignItem "ItemMap"; -player addItem "ItemCompass"; -player assignItem "ItemCompass"; -player addItem "ItemWatch"; -player assignItem "ItemWatch"; - -[] call life_fnc_playerSkins; -[] call life_fnc_saveGear; \ No newline at end of file diff --git a/Altis_Life.Altis/core/civilian/fn_demoChargeTimer.sqf b/Altis_Life.Altis/core/civilian/fn_demoChargeTimer.sqf deleted file mode 100644 index aba93e5c..00000000 --- a/Altis_Life.Altis/core/civilian/fn_demoChargeTimer.sqf +++ /dev/null @@ -1,26 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Starts the "Demo" timer for the police. -*/ -private["_uiDisp","_time","_timer"]; -disableSerialization; -6 cutRsc ["life_timer","PLAIN"]; -_uiDisp = GVAR_UINS "life_timer"; -_timer = _uiDisp displayCtrl 38301; -_time = time + (5 * 60); - -while {true} do { - if(isNull _uiDisp) then { - 6 cutRsc ["life_timer","PLAIN"]; - _uiDisp = GVAR_UINS "life_timer"; - _timer = _uiDisp displayCtrl 38301; - }; - if(round(_time - time) < 1) exitWith {}; - if(!(fed_bank GVAR ["chargeplaced",false])) exitWith {}; - _timer ctrlSetText format["%1",[(_time - time),"MM:SS.MS"] call BIS_fnc_secondsToString]; - sleep 0.08; -}; -6 cutText["","PLAIN"]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/civilian/fn_freezePlayer.sqf b/Altis_Life.Altis/core/civilian/fn_freezePlayer.sqf deleted file mode 100644 index 9a5b27f2..00000000 --- a/Altis_Life.Altis/core/civilian/fn_freezePlayer.sqf +++ /dev/null @@ -1,21 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_freezePlayer.sqf - Author: ColinM9991 - - Description: Freezes selected player -*/ -private["_admin"]; -_admin = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; - -if(life_frozen) then { - hint localize "STR_NOTF_Unfrozen"; - [1,format[localize "STR_ANOTF_Unfrozen",profileName]] remoteExecCall ["life_fnc_broadcast",_admin]; - disableUserInput false; - life_frozen = false; -} else { - hint localize "STR_NOTF_Frozen"; - [1,format[localize "STR_ANOTF_Frozen",profileName]] remoteExecCall ["life_fnc_broadcast",_admin]; - disableUserInput true; - life_frozen = true; -}; diff --git a/Altis_Life.Altis/core/civilian/fn_jail.sqf b/Altis_Life.Altis/core/civilian/fn_jail.sqf deleted file mode 100644 index a0a80ed7..00000000 --- a/Altis_Life.Altis/core/civilian/fn_jail.sqf +++ /dev/null @@ -1,51 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_jail.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Starts the initial process of jailing. -*/ -params [ - ["_unit",objNull,[objNull]], - ["_bad",false,[false]] -]; - -if(isNull _unit) exitWith {}; //Dafuq? -if(_unit != player) exitWith {}; //Dafuq? -if(life_is_arrested) exitWith {}; //Dafuq i'm already arrested - -player SVAR ["restrained",false,true]; -player SVAR ["Escorting",false,true]; -player SVAR ["transporting",false,true]; - -titleText[localize "STR_Jail_Warn","PLAIN"]; -hint localize "STR_Jail_LicenseNOTF"; -player setPos (getMarkerPos "jail_marker"); - -if(_bad) then { - waitUntil {alive player}; - sleep 1; -}; - -//Check to make sure they goto check -if(player distance (getMarkerPos "jail_marker") > 40) then { - player setPos (getMarkerPos "jail_marker"); -}; - -[1] call life_fnc_removeLicenses; - -{ - _amount = ITEM_VALUE(_x); - if(_amount > 0) then { - [false,_x,_amount] call life_fnc_handleInv; - }; -} forEach ["heroin_unprocessed","heroin_processed","cannabis","marijuana","cocaine_unprocessed","cocaine_processed","turtle_raw"]; - -life_is_arrested = true; - -removeAllWeapons player; -{player removeMagazine _x} forEach (magazines player); - -[player,_bad] remoteExecCall ["life_fnc_jailSys",RSERV]; -[5] call SOCK_fnc_updatePartial; \ No newline at end of file diff --git a/Altis_Life.Altis/core/civilian/fn_jailMe.sqf b/Altis_Life.Altis/core/civilian/fn_jailMe.sqf deleted file mode 100644 index 48bc5f3a..00000000 --- a/Altis_Life.Altis/core/civilian/fn_jailMe.sqf +++ /dev/null @@ -1,78 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author Bryan "Tonic" Boardwine - - Description: - Once word is received by the server the rest of the jail execution is completed. -*/ -private["_time","_bail","_esc","_countDown"]; - -params [ - ["_ret",[],[[]]], - ["_bad",false,[false]] -]; - - -if(_bad) then { _time = time + 1100; } else { _time = time + (15 * 60); }; - -if(count _ret > 0) then { life_bail_amount = SEL(_ret,3); } else { life_bail_amount = 1500; _time = time + (10 * 60); }; -_esc = false; -_bail = false; - -[_bad] spawn { - life_canpay_bail = false; - if(_this select 0) then { - sleep (10 * 60); - } else { - sleep (5 * 60); - }; - life_canpay_bail = nil; -}; - -while {true} do { - if((round(_time - time)) > 0) then { - _countDown = [(_time - time),"MM:SS.MS"] call BIS_fnc_secondsToString; - hintSilent parseText format[(localize "STR_Jail_Time")+ "
%1

" +(localize "STR_Jail_Pay")+ " %3
" +(localize "STR_Jail_Price")+ " $%2",_countDown,[life_bail_amount] call life_fnc_numberText,if(isNil "life_canpay_bail") then {"Yes"} else {"No"}]; - }; - - if(player distance (getMarkerPos "jail_marker") > 60) exitWith { - _esc = true; - }; - - if(life_bail_paid) exitWith { - _bail = true; - }; - - if((round(_time - time)) < 1) exitWith {hint ""}; - if(!alive player && ((round(_time - time)) > 0)) exitWith {}; - sleep 0.1; -}; - - -switch (true) do { - case (_bail): { - life_is_arrested = false; - life_bail_paid = false; - hint localize "STR_Jail_Paid"; - serv_wanted_remove = [player]; - player setPos (getMarkerPos "jail_release"); - [getPlayerUID player] remoteExecCall ["life_fnc_wantedRemove",RSERV]; - [5] call SOCK_fnc_updatePartial; - }; - - case (_esc): { - life_is_arrested = false; - hint localize "STR_Jail_EscapeSelf"; - [0,"STR_Jail_EscapeNOTF",true,[profileName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; - [getPlayerUID player,profileName,"901"] remoteExecCall ["life_fnc_wantedAdd",RSERV]; - [5] call SOCK_fnc_updatePartial; - }; - - case (alive player && !_esc && !_bail): { - life_is_arrested = false; - hint localize "STR_Jail_Released"; - [getPlayerUID player] remoteExecCall ["life_fnc_wantedRemove",RSERV]; - player setPos (getMarkerPos "jail_release"); - [5] call SOCK_fnc_updatePartial; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/civilian/fn_knockedOut.sqf b/Altis_Life.Altis/core/civilian/fn_knockedOut.sqf deleted file mode 100644 index 25f1ee89..00000000 --- a/Altis_Life.Altis/core/civilian/fn_knockedOut.sqf +++ /dev/null @@ -1,30 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_knockedOut.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Starts and monitors the knocked out state. -*/ -private "_obj"; -params [ - ["_target",objNull,[objNull]], - ["_who","",[""]] -]; - -if(isNull _target) exitWith {}; -if(_target != player) exitWith {}; -if(EQUAL(_who,"")) exitWith {}; - -titleText[format[localize "STR_Civ_KnockedOut",_who],"PLAIN"]; -player playMoveNow "Incapacitated"; - -_obj = "Land_ClutterCutter_small_F" createVehicle ASLTOATL(visiblePositionASL player); -_obj setPosATL ASLTOATL(visiblePositionASL player); - -player attachTo [_obj,[0,0,0]]; -sleep 15; -player playMoveNow "amovppnemstpsraswrfldnon"; -detach player; -deleteVehicle _obj; -player SVAR ["robbed",FALSE,TRUE]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/civilian/fn_knockoutAction.sqf b/Altis_Life.Altis/core/civilian/fn_knockoutAction.sqf deleted file mode 100644 index cbf2c666..00000000 --- a/Altis_Life.Altis/core/civilian/fn_knockoutAction.sqf +++ /dev/null @@ -1,22 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_knockoutAction.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Knocks out the target. -*/ -private "_target"; -_target = param [0,ObjNull,[ObjNull]]; - -//Error checks -if(isNull _target) exitWith {}; -if(!isPlayer _target) exitWith {}; -if(player distance _target > 4) exitWith {}; -life_knockout = true; -[player,"AwopPercMstpSgthWrflDnon_End2"] remoteExecCall ["life_fnc_animSync",0]; -sleep 0.08; -[_target,profileName] remoteExec ["life_fnc_knockedOut",_target]; - -sleep 3; -life_knockout = false; \ No newline at end of file diff --git a/Altis_Life.Altis/core/civilian/fn_removeLicenses.sqf b/Altis_Life.Altis/core/civilian/fn_removeLicenses.sqf deleted file mode 100644 index e2496778..00000000 --- a/Altis_Life.Altis/core/civilian/fn_removeLicenses.sqf +++ /dev/null @@ -1,47 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_removeLicenses.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Used for stripping certain licenses off of civilians as punishment. -*/ -private "_state"; -_state = param [0,1,[0]]; - -switch (_state) do { - //Death while being wanted - case 0: { - SVAR_MNS [LICENSE_VARNAME("rebel","civ"),false]; - SVAR_MNS [LICENSE_VARNAME("driver","civ"),false]; - SVAR_MNS [LICENSE_VARNAME("heroin","civ"),false]; - SVAR_MNS [LICENSE_VARNAME("marijuana","civ"),false]; - SVAR_MNS [LICENSE_VARNAME("coke","civ"),false]; - }; - - //Jail licenses - case 1: { - SVAR_MNS [LICENSE_VARNAME("gun","civ"),false]; - SVAR_MNS [LICENSE_VARNAME("driver","civ"),false]; - SVAR_MNS [LICENSE_VARNAME("rebel","civ"),false]; - }; - - //Remove motor vehicle licenses - case 2: { - if(GVAR_MNS LICENSE_VARNAME("driver","civ") OR GVAR_MNS LICENSE_VARNAME("air","civ") OR GVAR_MNS LICENSE_VARNAME("truck","civ") OR GVAR_MNS LICENSE_VARNAME("boat","civ")) then { - SVAR_MNS [LICENSE_VARNAME("air","civ"),false]; - SVAR_MNS [LICENSE_VARNAME("driver","civ"),false]; - SVAR_MNS [LICENSE_VARNAME("truck","civ"),false]; - SVAR_MNS [LICENSE_VARNAME("boat","civ"),false]; - hint localize "STR_Civ_LicenseRemove_1"; - }; - }; - - //Killing someone while owning a gun license - case 3: { - if(GVAR_MNS LICENSE_VARNAME("gun","civ")) then { - SVAR_MNS [LICENSE_VARNAME("gun","civ"),false]; - hint localize "STR_Civ_LicenseRemove_2"; - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/civilian/fn_robPerson.sqf b/Altis_Life.Altis/core/civilian/fn_robPerson.sqf deleted file mode 100644 index 4c050251..00000000 --- a/Altis_Life.Altis/core/civilian/fn_robPerson.sqf +++ /dev/null @@ -1,23 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_robPerson.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Getting tired of adding descriptions... -*/ -params [ - ["_robber",objNull,[objNull]] -]; -if(isNull _robber) exitWith {}; //No one to return it to? - -if(CASH > 0) then { - [CASH,player,_robber] remoteExecCall ["life_fnc_robReceive",_robber]; - [getPlayerUID _robber,_robber GVAR ["realname",name _robber],"211"] remoteExecCall ["life_fnc_wantedAdd",RSERV]; - [1,"STR_NOTF_Robbed",true,[_robber GVAR ["realname",name _robber],profileName,[CASH] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; - CASH = 0; -} else { - [2,"STR_NOTF_RobFail",true,[profileName]] remoteExecCall ["life_fnc_broadcast",_robber]; -}; - -[0] call SOCK_fnc_updatePartial; diff --git a/Altis_Life.Altis/core/civilian/fn_robReceive.sqf b/Altis_Life.Altis/core/civilian/fn_robReceive.sqf deleted file mode 100644 index b44a29b4..00000000 --- a/Altis_Life.Altis/core/civilian/fn_robReceive.sqf +++ /dev/null @@ -1,16 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_robReceive.sqf - Author: Bryan "Tonic" Boardwine -*/ -params [ - ["_cash",0,[0]], - ["_victim",objNull,[objNull]], - ["_robber",objNull,[objNull]] -]; - -if(_robber == _victim) exitWith {}; -if(EQUAL(_cash,0)) exitWith {titleText[localize "STR_Civ_RobFail","PLAIN"]}; - -ADD(CASH,_cash); -titleText[format[localize "STR_Civ_Robbed",[_cash] call life_fnc_numberText],"PLAIN"]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/civilian/fn_tazed.sqf b/Altis_Life.Altis/core/civilian/fn_tazed.sqf deleted file mode 100644 index 29c720b6..00000000 --- a/Altis_Life.Altis/core/civilian/fn_tazed.sqf +++ /dev/null @@ -1,58 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_tazed.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Starts the tazed animation and broadcasts out what it needs to. -*/ -private["_curWep","_curMags","_attach"]; -params [ - ["_unit",objNull,[objNull]], - ["_shooter",objNull,[objNull]] -]; - -if(isNull _unit OR isNull _shooter) exitWith {player allowDamage true; life_istazed = false;}; - -if(_shooter isKindOf "Man" && alive player) then { - if(!life_istazed) then { - life_istazed = true; - _curWep = currentWeapon player; - _curMags = magazines player; - _attach = if(!(EQUAL(RIFLE,""))) then {RIFLE_ITEMS} else {[]}; - - {player removeMagazine _x} foreach _curMags; - player removeWeapon _curWep; - player addWeapon _curWep; - if(!(EQUAL(count _attach,0)) && !(EQUAL(RIFLE,""))) then { - { - _unit addPrimaryWeaponItem _x; - } foreach _attach; - }; - - if(!(EQUAL(count _curMags,0))) then { - {player addMagazine _x;} foreach _curMags; - }; - - [_unit] remoteExecCall ["life_fnc_tazeSound",RCLIENT]; - _obj = "Land_ClutterCutter_small_F" createVehicle ASLTOATL(visiblePositionASL player); - _obj setPosATL ASLTOATL(visiblePositionASL player); - [player,"AinjPfalMstpSnonWnonDf_carried_fallwc"] remoteExecCall ["life_fnc_animSync",RCLIENT]; - [0,"STR_NOTF_Tazed",true,[profileName, _shooter GVAR ["realname",name _shooter]]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; - _unit attachTo [_obj,[0,0,0]]; - disableUserInput true; - sleep 15; - - [player,"amovppnemstpsraswrfldnon"] remoteExecCall ["life_fnc_animSync",RCLIENT]; - - if(!(player GVAR ["Escorting",false])) then { - detach player; - }; - life_istazed = false; - player allowDamage true; - disableUserInput false; - }; -} else { - _unit allowDamage true; - life_iztazed = false; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/clientValidator.sqf b/Altis_Life.Altis/core/clientValidator.sqf deleted file mode 100644 index d7d689e2..00000000 --- a/Altis_Life.Altis/core/clientValidator.sqf +++ /dev/null @@ -1,22 +0,0 @@ -#include "..\script_macros.hpp" -/* - Description: - Loops through a list of variables and checks whether - or not they are defined, if they are defined then trigger - spyglass and kick the client to the lobby. -*/ -private["_vars"]; -_vars = [ - "life_revive_fee","life_gangPrice","life_gangUpgradeBase","life_enableFatigue","life_paycheck_period","life_vShop_rentalOnly","sell_array","buy_array", - "life_weapon_shop_array","life_garage_prices","life_garage_sell","life_houseLimit","life_gangUpgradeMultipler","life_impound_car","life_impound_boat", - "life_impound_air" -]; - -{ - if(!isNil {(GVAR_MNS _x)}) exitWith { - [profileName,getPlayerUID player,format["VariableSetBeforeInitialized_%1",_x]] remoteExecCall ["SPY_fnc_cookieJar",RSERV]; - [profileName,format["Variable set before client initialized: %1",_x]] remoteExecCall ["SPY_fnc_notifyAdmins",RCLIENT]; - sleep 0.5; - failMission "SpyGlass"; - }; -} foreach _vars; \ No newline at end of file diff --git a/Altis_Life.Altis/core/config/fn_houseConfig.sqf b/Altis_Life.Altis/core/config/fn_houseConfig.sqf deleted file mode 100644 index a498ccce..00000000 --- a/Altis_Life.Altis/core/config/fn_houseConfig.sqf +++ /dev/null @@ -1,24 +0,0 @@ -/* - Author: Bryan "Tonic" Boardwine - - Description: - Master config file for buyable houses? -*/ -private["_house"]; -_house = [_this,0,"",[""]] call BIS_fnc_param; -if(_house == "") exitWith {[]}; - -/* - Return Format: - [price,# of containers allowed] -*/ -switch (true) do { - case (_house in ["Land_i_House_Big_02_V1_F","Land_i_House_Big_02_V2_F","Land_i_House_Big_02_V3_F"]): {[1550000,3]}; - case (_house in ["Land_i_House_Big_01_V1_F","Land_i_House_Big_01_V2_F","Land_i_House_Big_01_V3_F"]): {[2200000,4]}; - case (_house in ["Land_i_Garage_V1_F","Land_i_Garage_V2_F"]): {[500000,0]}; - case (_house in ["Land_i_House_Small_01_V1_F","Land_i_House_Small_01_V2_F","Land_i_House_Small_01_V3_F"]): {[1050000,2]}; - case (_house in ["Land_i_House_Small_02_V1_F","Land_i_House_Small_02_V2_F","Land_i_House_Small_02_V3_F"]): {[1000500,2]}; - case (_house in ["Land_i_House_Small_03_V1_F"]): {[1250000,3]}; - case (_house in ["Land_i_Stone_HouseSmall_V2_F","Land_i_Stone_HouseSmall_V1_F","Land_i_Stone_HouseSmall_V3_F"]): {[750000,1]}; - default {[]}; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/config/fn_itemWeight.sqf b/Altis_Life.Altis/core/config/fn_itemWeight.sqf deleted file mode 100644 index db79decf..00000000 --- a/Altis_Life.Altis/core/config/fn_itemWeight.sqf +++ /dev/null @@ -1,13 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_itemWeight.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Gets the items weight and returns it. -*/ -private["_item"]; -_item = [_this,0,"",[""]] call BIS_fnc_param; -if(EQUAL(_item,"")) exitWith {}; - -M_CONFIG(getNumber,"VirtualItems",_item,"weight"); \ No newline at end of file diff --git a/Altis_Life.Altis/core/config/fn_shopMenus.sqf b/Altis_Life.Altis/core/config/fn_shopMenus.sqf deleted file mode 100644 index 3fb21dab..00000000 --- a/Altis_Life.Altis/core/config/fn_shopMenus.sqf +++ /dev/null @@ -1,89 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_shopMenus.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Master config for a thing that will be gone eventually.. -*/ -private["_shop"]; -_shop = [_this,0,"",[""]] call BIS_fnc_param; -if(_shop == "") exitWith {closeDialog 0;}; - -if(!dialog) then { - if(!(createDialog "shop_menu")) exitWith {}; -}; -disableSerialization; -ctrlSetText[601,format["Cash: $%1",[CASH] call life_fnc_numberText]]; - -switch (_shop) do -{ - case "reb": - { - ctrlSetText[2505,"Altis Rebel Shop"]; - ctrlShow[2503,false]; - ctrlShow[2513,false]; - ctrlShow[2514,false]; - }; - - case "cop": - { - ctrlSetText[2505,"Altis Cop Shop"]; - ctrlShow[2503,false]; - }; - - case "gun": - { - ctrlSetText[2505,"Altis Gun Store"]; - ctrlShow[2503,false]; - ctrlShow[2513,false]; - ctrlShow[2514,false]; - }; - - case "gang": - { - ctrlSetText[2505,"Gang Shop"]; - ctrlShow[2503,false]; - ctrlShow[2513,false]; - ctrlShow[2514,false]; - }; - - case "dive": - { - ctrlSetText[2505,"Altis Diving Shop"]; - ctrlShow[2503,false]; - ctrlShow[2510,false]; - ctrlShow[2511,false]; - ctrlShow[2513,false]; - }; - - case "donator": - { - ctrlSetText[2505,"Donator Shop"]; - }; - - case "sergeant": - { - ctrlSetText[2505,"Sergeants Shop"]; - ctrlShow[2503,false]; - }; - - case "gen": - { - ctrlSetText[2505,"Altis General Store"]; - ctrlShow[2503,false]; - }; - - case "officer": - { - ctrlSetText[2505,"Patrol Officer Shop"]; - ctrlShow[2503,false]; - }; - - case "admin": - { - ctrlSetText[2505,"Admin Shop"]; - }; -}; - -["guns"] call life_fnc_shops_changeMenu; diff --git a/Altis_Life.Altis/core/config/fn_taxRate.sqf b/Altis_Life.Altis/core/config/fn_taxRate.sqf deleted file mode 100644 index 7645f28c..00000000 --- a/Altis_Life.Altis/core/config/fn_taxRate.sqf +++ /dev/null @@ -1,11 +0,0 @@ -/* - File: fn_taxRate.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Will be revised. -*/ -private["_value","_ret"]; -_value = _this select 0; -_ret = round(_value / 15); -_ret; \ No newline at end of file diff --git a/Altis_Life.Altis/core/config/fn_vehicleAnimate.sqf b/Altis_Life.Altis/core/config/fn_vehicleAnimate.sqf deleted file mode 100644 index 2f7a0f36..00000000 --- a/Altis_Life.Altis/core/config/fn_vehicleAnimate.sqf +++ /dev/null @@ -1,70 +0,0 @@ -/* - File: fn_vehicleAnimate.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Pass what you want to be animated. -*/ -private["_vehicle","_animate","_state"]; -_vehicle = [_this,0,Objnull,[Objnull]] call BIS_fnc_param; -if(isnull _vehicle) exitwith {}; //FUCK -_animate = [_this,1,"",["",[]]] call BIS_fnc_param; -_preset = [_this,2,false,[false]] call BIS_fnc_param; - -if(!_preset) then -{ - if(count _animate > 1) then - { - { - _vehicle animate[_x select 0,_x select 1]; - } foreach _animate; - } - else - { - _vehicle animate[_animate select 0,_animate select 1]; - }; -} - else -{ - switch (_animate) do - { - case "civ_littlebird": - { - waitUntil {!isNil {_vehicle getVariable "Life_VEH_color"}}; - _vehicle animate ["addDoors",1]; - _vehicle animate ["addBenches",0]; - _vehicle animate ["addTread",0]; - _vehicle animate ["AddCivilian_hide",1]; - _vehicle lockCargo [2,true]; - _vehicle lockCargo [3,true]; - _vehicle lockCargo [4,true]; - _vehicle lockCargo [5,true]; - }; - - case "service_truck": - { - //waitUntil{!isNil {_vehicle getVariable "color"}}; - _vehicle animate ["HideServices", 0]; - _vehicle animate ["HideDoor3", 1]; - }; - - case "med_offroad": - { - if(typeOf _vehicle == "C_Offroad_01_F") then { - waitUntil {!isNil {_vehicle getVariable "Life_VEH_color"}}; - }; - _vehicle animate ["HidePolice", 0]; - _vehicle setVariable["lights",false,true]; - }; - - case "cop_offroad": - { - if(typeOf _vehicle == "C_Offroad_01_F") then { - waitUntil {!isNil {_vehicle getVariable "Life_VEH_color"}}; - }; - _vehicle animate ["HidePolice", 0]; - _vehicle animate ["HideBumper1", 0]; - _vehicle setVariable["lights",false,true]; - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/config/fn_vehicleWeightCfg.sqf b/Altis_Life.Altis/core/config/fn_vehicleWeightCfg.sqf deleted file mode 100644 index b79aa1f9..00000000 --- a/Altis_Life.Altis/core/config/fn_vehicleWeightCfg.sqf +++ /dev/null @@ -1,19 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_vehicleWeightCfg.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Master configuration for vehicle weight. -*/ -private["_className","_classNameLife","_weight"]; -_className = [_this,0,"",[""]] call BIS_fnc_param; -_classNameLife = _className; -if(!isClass (missionConfigFile >> CONFIG_LIFE_VEHICLES >> _classNameLife)) then { - _classNameLife = "Default"; //Use Default class if it doesn't exist - diag_log format["%1: LifeCfgVehicles class doesn't exist",_className]; -}; -_weight = M_CONFIG(getNumber,CONFIG_LIFE_VEHICLES,_classNameLife,"vItemSpace"); - -if(isNil "_weight") then {_weight = -1;}; -_weight; \ No newline at end of file diff --git a/Altis_Life.Altis/core/configuration.sqf b/Altis_Life.Altis/core/configuration.sqf deleted file mode 100644 index 3804fb0e..00000000 --- a/Altis_Life.Altis/core/configuration.sqf +++ /dev/null @@ -1,80 +0,0 @@ -#include "..\script_macros.hpp" -/* - Master Life Configuration File - This file is to setup variables for the client, there are still other configuration files in the system - -***************************** -****** Backend Variables ***** -***************************** -*/ -life_query_time = time; -life_action_delay = time; -life_trunk_vehicle = Objnull; -life_session_completed = false; -life_garage_store = false; -life_session_tries = 0; -life_net_dropped = false; -life_siren_active = false; -life_clothing_filter = 0; -life_clothing_uniform = -1; -life_redgull_effect = time; -life_is_processing = false; -life_bail_paid = false; -life_impound_inuse = false; -life_action_inUse = false; -life_spikestrip = ObjNull; -life_respawn_timer = 0.1; //Scaled in minutes -life_knockout = false; -life_interrupted = false; -life_respawned = false; -life_removeWanted = false; -life_action_gathering = false; -life_vdFoot = viewDistance; -life_vdCar = viewDistance; -life_vdAir = viewDistance; -tawvd_addon_disable = true; -life_god = false; -life_frozen = false; -life_markers = false; - -//Uniform price (0),Hat Price (1),Glasses Price (2),Vest Price (3),Backpack Price (4) -life_clothing_purchase = [-1,-1,-1,-1,-1]; -/* -***************************** -****** Weight Variables ***** -***************************** -*/ -life_maxWeight = LIFE_SETTINGS(getNumber,"total_maxWeight"); -life_carryWeight = 0; //Represents the players current inventory weight (MUST START AT 0). - -/* -***************************** -****** Life Variables ******* -***************************** -*/ -life_net_dropped = false; -life_use_atm = true; -life_is_arrested = false; -life_delivery_in_progress = false; -life_thirst = 100; -life_hunger = 100; -CASH = 0; - -life_istazed = false; -life_vehicles = []; - -/* - Master Array of items? -*/ -//Setup variable inv vars. -{ - SVAR_MNS [ITEM_VARNAME(configName _x),0]; -} foreach ("true" configClasses (missionConfigFile >> "VirtualItems")); - -/* Setup the BLAH! */ -{ - _varName = getText(_x >> "variable"); - _sideFlag = getText(_x >> "side"); - - SVAR_MNS [LICENSE_VARNAME(_varName,_sideFlag),false]; -} foreach ("true" configClasses (missionConfigFile >> "Licenses")); diff --git a/Altis_Life.Altis/core/cop/fn_bountyReceive.sqf b/Altis_Life.Altis/core/cop/fn_bountyReceive.sqf deleted file mode 100644 index a95f1298..00000000 --- a/Altis_Life.Altis/core/cop/fn_bountyReceive.sqf +++ /dev/null @@ -1,19 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_bountyReceive.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Notifies the player he has received a bounty and gives him the cash. -*/ -private["_val","_total"]; -_val = [_this,0,"",["",0]] call BIS_fnc_param; -_total = [_this,1,"",["",0]] call BIS_fnc_param; - -if(_val == _total) then { - titleText[format[localize "STR_Cop_BountyRecieve",[_val] call life_fnc_numberText],"PLAIN"]; -} else { - titleText[format[localize "STR_Cop_BountyKill",[_val] call life_fnc_numberText,[_total] call life_fnc_numberText],"PLAIN"]; -}; - -ADD(BANK,_val); \ No newline at end of file diff --git a/Altis_Life.Altis/core/cop/fn_copInteractionMenu.sqf b/Altis_Life.Altis/core/cop/fn_copInteractionMenu.sqf deleted file mode 100644 index 8a1ac20b..00000000 --- a/Altis_Life.Altis/core/cop/fn_copInteractionMenu.sqf +++ /dev/null @@ -1,75 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_copInteractionMenu.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Replaces the mass addactions for various cop actions towards another player. -*/ -#define Btn1 37450 -#define Btn2 37451 -#define Btn3 37452 -#define Btn4 37453 -#define Btn5 37454 -#define Btn6 37455 -#define Btn7 37456 -#define Btn8 37457 -#define Title 37401 - -private["_display","_curTarget","_Btn1","_Btn2","_Btn3","_Btn4","_Btn5","_Btn6","_Btn7"]; - -disableSerialization; -_curTarget = param [0,ObjNull,[ObjNull]]; -if(isNull _curTarget) exitWith {closeDialog 0;}; //Bad target - -if(!dialog) then { - createDialog "pInteraction_Menu"; -}; - -if(!isPlayer _curTarget && side _curTarget == civilian) exitWith {closeDialog 0;}; //Bad side check? -_display = findDisplay 37400; -_Btn1 = _display displayCtrl Btn1; -_Btn2 = _display displayCtrl Btn2; -_Btn3 = _display displayCtrl Btn3; -_Btn4 = _display displayCtrl Btn4; -_Btn5 = _display displayCtrl Btn5; -_Btn6 = _display displayCtrl Btn6; -_Btn7 = _display displayCtrl Btn7; -life_pInact_curTarget = _curTarget; - -//Set Unrestrain Button -_Btn1 ctrlSetText localize "STR_pInAct_Unrestrain"; -_Btn1 buttonSetAction "[life_pInact_curTarget] call life_fnc_unrestrain; closeDialog 0;"; - -//Set Check Licenses Button -_Btn2 ctrlSetText localize "STR_pInAct_checkLicenses"; -_Btn2 buttonSetAction "[player] remoteExecCall [""life_fnc_licenseCheck"",life_pInact_curTarget];"; - -//Set Search Button -_Btn3 ctrlSetText localize "STR_pInAct_SearchPlayer"; -_Btn3 buttonSetAction "[life_pInact_curTarget] spawn life_fnc_searchAction; closeDialog 0;"; - -//Set Escort Button -if((_curTarget getVariable["Escorting",false])) then { - _Btn4 ctrlSetText localize "STR_pInAct_StopEscort"; - _Btn4 buttonSetAction "[life_pInact_curTarget] call life_fnc_stopEscorting; [life_pInact_curTarget] call life_fnc_copInteractionMenu;"; -} else { - _Btn4 ctrlSetText localize "STR_pInAct_Escort"; - _Btn4 buttonSetAction "[life_pInact_curTarget] call life_fnc_escortAction; closeDialog 0;"; -}; - -//Set Ticket Button -_Btn5 ctrlSetText localize "STR_pInAct_TicketBtn"; -_Btn5 buttonSetAction "[life_pInact_curTarget] call life_fnc_ticketAction;"; - -_Btn6 ctrlSetText localize "STR_pInAct_Arrest"; -_Btn6 buttonSetAction "[life_pInact_curTarget] call life_fnc_arrestAction;"; - -_Btn7 ctrlSetText localize "STR_pInAct_PutInCar"; -_Btn7 buttonSetAction "[life_pInact_curTarget] call life_fnc_putInCar;"; - -//Check that you are near a place to jail them. -if(!((player distance (getMarkerPos "police_hq_1") < 30) OR (player distance (getMarkerPos "police_hq_2") < 30) OR (player distance (getMarkerPos "cop_spawn_3") < 30) OR (player distance (getMarkerPos "cop_spawn_5") < 30))) then { - _Btn6 ctrlEnable false; -}; - \ No newline at end of file diff --git a/Altis_Life.Altis/core/cop/fn_copLights.sqf b/Altis_Life.Altis/core/cop/fn_copLights.sqf deleted file mode 100644 index 1ed910da..00000000 --- a/Altis_Life.Altis/core/cop/fn_copLights.sqf +++ /dev/null @@ -1,101 +0,0 @@ -/* - File: fn_copLights.sqf - Author: mindstorm, modified by Adanteh - Link: http://forums.bistudio.com/showthread.php?157474-Offroad-Police-sirens-lights-and-underglow - - Description: - Adds the light effect to cop vehicles, specifically the offroad. -*/ -Private ["_vehicle","_lightRed","_lightBlue","_lightleft","_lightright","_leftRed"]; -_vehicle = _this select 0; - -if(isNil "_vehicle" OR isNull _vehicle OR !(_vehicle getVariable "lights")) exitWith {}; -_lightRed = [20, 0.1, 0.1]; -_lightBlue = [0.1, 0.1, 20]; - -_lightleft = "#lightpoint" createVehicle getpos _vehicle; -sleep 0.2; -_lightleft setLightColor _lightRed; -_lightleft setLightBrightness 0.2; -_lightleft setLightAmbient [0.1,0.1,1]; - -switch (typeOf _vehicle) do -{ - case "C_Offroad_01_F": - { - _lightleft lightAttachObject [_vehicle, [-0.37, 0.0, 0.56]]; - }; - - case "B_MRAP_01_F": - { - _lightleft lightAttachObject [_vehicle, [-0.37, -1.9, 0.7]]; - }; - - case "C_SUV_01_F": - { - _lightleft lightAttachObject [_vehicle, [-0.37,-1.2,0.42]]; - }; -}; - -_lightleft setLightAttenuation [0.181, 0, 1000, 130]; -_lightleft setLightIntensity 10; -_lightleft setLightFlareSize 0.38; -_lightleft setLightFlareMaxDistance 150; -_lightleft setLightUseFlare true; - -_lightright = "#lightpoint" createVehicle getpos _vehicle; -sleep 0.2; -_lightright setLightColor _lightBlue; -_lightright setLightBrightness 0.2; -_lightright setLightAmbient [0.1,0.1,1]; - -switch (typeOf _vehicle) do -{ - case "C_Offroad_01_F": - { - _lightright lightAttachObject [_vehicle, [0.37, 0.0, 0.56]]; - }; - - case "B_MRAP_01_F": - { - _lightright lightAttachObject [_vehicle, [0.37, -1.9, 0.7]]; - }; - - case "C_SUV_01_F": - { - _lightright lightAttachObject [_vehicle, [0.37,-1.2,0.42]]; - }; -}; - -_lightright setLightAttenuation [0.181, 0, 1000, 130]; -_lightright setLightIntensity 10; -_lightright setLightFlareSize 0.38; -_lightright setLightFlareMaxDistance 150; -_lightright setLightUseFlare true; - -//ARE YOU ALL HAPPY?!?!?!?!?!?!?!?!?%#?@WGD?TGD?BN?ZDHBFD?GA -_lightleft setLightDayLight true; -_lightright setLightDayLight true; - -_leftRed = true; -while{ (alive _vehicle)} do -{ - if(!(_vehicle getVariable "lights")) exitWith {}; - if(_leftRed) then - { - _leftRed = false; - _lightright setLightBrightness 0.0; - sleep 0.05; - _lightleft setLightBrightness 6; - } - else - { - _leftRed = true; - _lightleft setLightBrightness 0.0; - sleep 0.05; - _lightright setLightBrightness 6; - }; - sleep (_this select 1); -}; -deleteVehicle _lightleft; -deleteVehicle _lightright; \ No newline at end of file diff --git a/Altis_Life.Altis/core/cop/fn_copMarkers.sqf b/Altis_Life.Altis/core/cop/fn_copMarkers.sqf deleted file mode 100644 index f1f94311..00000000 --- a/Altis_Life.Altis/core/cop/fn_copMarkers.sqf +++ /dev/null @@ -1,44 +0,0 @@ -/* - File: fn_copMarkers.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Marks cops on the map for other cops. Only initializes when the actual map is open. -*/ -private["_markers","_cops"]; -_markers = []; -_cops = []; - -sleep 0.5; -if(visibleMap) then { - {if(side _x == west) then {_cops pushBack _x;}} foreach playableUnits; //Fetch list of cops / blufor - - //Create markers - { - _marker = createMarkerLocal [format["%1_marker",_x],visiblePosition _x]; - _marker setMarkerColorLocal "ColorBlue"; - _marker setMarkerTypeLocal "Mil_dot"; - _marker setMarkerTextLocal format["%1", _x getVariable["realname",name _x]]; - - _markers pushBack [_marker,_x]; - } foreach _cops; - - while {visibleMap} do { - { - private["_marker","_unit"]; - _marker = _x select 0; - _unit = _x select 1; - if(!isNil "_unit") then { - if(!isNull _unit) then { - _marker setMarkerPosLocal (visiblePosition _unit); - }; - }; - } foreach _markers; - if(!visibleMap) exitWith {}; - sleep 0.02; - }; - - {deleteMarkerLocal (_x select 0);} foreach _markers; - _markers = []; - _cops = []; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/cop/fn_copSearch.sqf b/Altis_Life.Altis/core/cop/fn_copSearch.sqf deleted file mode 100644 index 371dd715..00000000 --- a/Altis_Life.Altis/core/cop/fn_copSearch.sqf +++ /dev/null @@ -1,48 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_copSearch.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Returns information on the search. -*/ -life_action_inUse = false; -private["_license","_guns","_gun"]; -params [ - ["_civ",objNull,[objNull]], - ["_invs",[],[[]]], - ["_robber",false,[false]] -]; - -if(isNull _civ) exitWith {}; - -_illegal = 0; -_inv = ""; -if(count _invs > 0) then { - { - _displayName = M_CONFIG(getText,"VirtualItems",SEL(_x,0),"displayName"); - _inv = _inv + format["%1 %2
",SEL(_x,1),(localize _displayName)]; - _price = M_CONFIG(getNumber,"VirtualItems",SEL(_x,0),"sellPrice"); - - if(!(EQUAL(_price,-1))) then { - ADD(_illegal,(SEL(_x,1) * _price)); - }; - } foreach _invs; - if(_illegal > 6000) then { - [getPlayerUID _civ,_civ GVAR ["realname",name _civ],"482"] remoteExecCall ["life_fnc_wantedAdd",RSERV]; - }; - - [getPlayerUID _civ,_civ GVAR ["realname",name _civ],"481"] remoteExecCall ["life_fnc_wantedAdd",RSERV]; - [0,"STR_Cop_Contraband",true,[(_civ GVAR ["realname",name _civ]),[_illegal] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",west]; -} else { - _inv = localize "STR_Cop_NoIllegal"; -}; - -if(!alive _civ || player distance _civ > 5) exitWith {hint format[localize "STR_Cop_CouldntSearch",_civ GVAR ["realname",name _civ]]}; -//hint format["%1",_this]; -hint parseText format["%1

" +(localize "STR_Cop_IllegalItems")+ "

%2



%3" -,(_civ GVAR ["realname",name _civ]),_inv,if(_robber) then {"Robbed the bank"} else {""}]; - -if(_robber) then { - [0,"STR_Cop_Robber",true,[(_civ GVAR ["realname",name _civ])]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; -}; diff --git a/Altis_Life.Altis/core/cop/fn_copSiren.sqf b/Altis_Life.Altis/core/cop/fn_copSiren.sqf deleted file mode 100644 index dbea30af..00000000 --- a/Altis_Life.Altis/core/cop/fn_copSiren.sqf +++ /dev/null @@ -1,23 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_copSiren.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Starts the cop siren sound for other players -*/ -private["_vehicle"]; -_vehicle = param [0,ObjNull,[ObjNull]]; - -if(isNull _vehicle) exitWith {}; -if(isNil {_vehicle GVAR "siren"}) exitWith {}; - -while {true} do { - if(!(_vehicle GVAR "siren")) exitWith {}; - if(EQUAL(count crew _vehicle,0)) then {_vehicle SVAR ["siren",false,true]}; - if(!alive _vehicle) exitWith {}; - if(isNull _vehicle) exitWith {}; - _vehicle say3D "SirenLong"; - sleep 4.7; - if(!(_vehicle GVAR "siren")) exitWith {}; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/cop/fn_doorAnimate.sqf b/Altis_Life.Altis/core/cop/fn_doorAnimate.sqf deleted file mode 100644 index 01290e40..00000000 --- a/Altis_Life.Altis/core/cop/fn_doorAnimate.sqf +++ /dev/null @@ -1,28 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Animates a door? -*/ -private["_b","_doors","_door"]; -_b = SEL(_this,0); -_doors = 1; -_doors = FETCH_CONFIG2(getNumber,CONFIG_VEHICLES,typeOf _b,"NumberOfDoors"); - -_door = 0; -//Find the nearest door -for "_i" from 1 to _doors do { - _selPos = _b selectionPosition format["Door_%1_trigger",_i]; - _worldSpace = _b modelToWorld _selPos; - if(player distance _worldSpace < 5) exitWith {_door = _i;}; -}; -if(_door == 0) exitWith {hint localize "STR_Cop_NotaDoor"}; //Not near a door to be broken into. - -if(_b animationPhase format["door_%1_rot",_door] == 0) then { - _b animate[format["door_%1_rot",_door],1]; -} else { - _b animate[format["door_%1_rot",_door],0]; -}; - -closeDialog 0; \ No newline at end of file diff --git a/Altis_Life.Altis/core/cop/fn_fedCamDisplay.sqf b/Altis_Life.Altis/core/cop/fn_fedCamDisplay.sqf deleted file mode 100644 index e5bd4ee0..00000000 --- a/Altis_Life.Altis/core/cop/fn_fedCamDisplay.sqf +++ /dev/null @@ -1,52 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Turns on and displays a security cam like feed via PiP to the laptop display. -*/ -_laptop = SEL(_this,0); -_mode = SEL(_this,3); - -if(!isPiPEnabled) exitWith {hint localize "STR_Cop_EnablePiP";}; -if(isNil "life_fed_scam") then { - life_fed_scam = "camera" camCreate [0,0,0]; - life_fed_scam camSetFov 0.5; - life_fed_scam camCommit 0; - "rendertarget0" setPiPEffect [0]; - life_fed_scam cameraEffect ["INTERNAL", "BACK", "rendertarget0"]; - _laptop setObjectTexture [0,"#(argb,256,256,1)r2t(rendertarget0,1.0)"]; -}; - -switch (_mode) do { - case "side": { - life_fed_scam camSetPos [16029.1,16938.9,3.08817]; - life_fed_scam camSetTarget [16034.9,16930.6,0.00146008]; - life_fed_scam camCommit 0; - }; - - case "vault": { - life_fed_scam camSetPos [16031.1,16936.6,10.287]; - life_fed_scam camSetTarget [16017.1,16957.3,0.597221]; - life_fed_scam camCommit 0; - }; - - case "front": { - life_fed_scam camSetPos [16084.3,16997.8,23.6492] ; - life_fed_scam camSetTarget [16037.8,16966.7,0.00145817]; - life_fed_scam camCommit 0; - }; - - case "back": { - life_fed_scam camSetPos [16002,16904.9,5.71753]; - life_fed_scam camSetTarget [15998.7,16939.7,0.00146866]; - life_fed_scam camCommit 0; - }; - - case "off" :{ - life_fed_scam cameraEffect ["terminate", "back"]; - camDestroy life_fed_scam; - _laptop setObjectTexture [0,""]; - life_fed_scam = nil; - }; -}; diff --git a/Altis_Life.Altis/core/cop/fn_licenseCheck.sqf b/Altis_Life.Altis/core/cop/fn_licenseCheck.sqf deleted file mode 100644 index 94b43342..00000000 --- a/Altis_Life.Altis/core/cop/fn_licenseCheck.sqf +++ /dev/null @@ -1,25 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_licenseCheck.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Returns the licenses to the cop. -*/ -private["_cop","_licenses","_licensesConfigs"]; -_cop = param [0,ObjNull,[ObjNull]]; -if(isNull _cop) exitWith {}; //Bad entry - -_licenses = ""; - -//Config entries for licenses that are civilian -_licensesConfigs = "getText(_x >> 'side') isEqualTo 'civ'" configClasses (missionConfigFile >> "Licenses"); - -{ - if(LICENSE_VALUE(configName _x,"civ")) then { - ADD(_licenses,localize getText(_x >> "displayName") + "
"); - }; -} foreach _licensesConfigs; - -if(EQUAL(_licenses,"")) then {_licenses = (localize "STR_Cop_NoLicensesFound");}; -[profileName,_licenses] remoteExecCall ["life_fnc_licensesRead",_cop]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/cop/fn_licensesRead.sqf b/Altis_Life.Altis/core/cop/fn_licensesRead.sqf deleted file mode 100644 index ed14633d..00000000 --- a/Altis_Life.Altis/core/cop/fn_licensesRead.sqf +++ /dev/null @@ -1,13 +0,0 @@ -/* - File: fn_licensesRead.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Outprints the licenses. -*/ -params [ - ["_civ","",[""]], - ["_licenses",(localize "STR_Cop_NoLicenses"),[""]] -]; - -hint parseText format["%1
" +(localize "STR_Cop_Licenses")+ "
%2",_civ,_licenses]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/cop/fn_questionDealer.sqf b/Altis_Life.Altis/core/cop/fn_questionDealer.sqf deleted file mode 100644 index 97004d3c..00000000 --- a/Altis_Life.Altis/core/cop/fn_questionDealer.sqf +++ /dev/null @@ -1,25 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_questionDealer.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Questions the drug dealer and sets the sellers wanted. -*/ -private["_sellers","_names"]; -_sellers = (SEL(_this,0)) GVAR ["sellers",[]]; -if(EQUAL(count _sellers,0)) exitWith {hint localize "STR_Cop_DealerQuestion"}; //No data. -life_action_inUse = true; - -_names = ""; -{ - if(SEL(_x,2) > 150000) then { - _val = round((SEL(_x,2)) / 16); - }; - [SEL(_x,0),SEL(_x,1),"483",_val] remoteExecCall ["life_fnc_wantedAdd",RSERV]; - ADD(_names,format["%1
",SEL(_x,1)]); -} foreach _sellers; - -hint parseText format[(localize "STR_Cop_DealerMSG")+ "

%1",_names]; -SEL(_this,0) SVAR ["sellers",[],true]; -life_action_inUse = false; \ No newline at end of file diff --git a/Altis_Life.Altis/core/cop/fn_radar.sqf b/Altis_Life.Altis/core/cop/fn_radar.sqf deleted file mode 100644 index a5c7c71c..00000000 --- a/Altis_Life.Altis/core/cop/fn_radar.sqf +++ /dev/null @@ -1,27 +0,0 @@ -/* - File: fn_radar.sqf - Author: Silly Aussie kid named Jaydon - - Description: - Looks like weird but radar? -*/ -if(playerSide != west) exitWith {}; -private ["_speed","_vehicle"]; -_vehicle = cursorTarget; -_speed = round speed _vehicle; - -if((_vehicle isKindOf "Car") && (currentWeapon player) == "hgun_P07_snds_F") then -{ - switch (true) do - { - case ((_speed > 33 && _speed <= 80)) : - { - hint parseText format ["" +(localize "STR_Cop_Radar")+ "
" +(localize "STR_Cop_VehSpeed"),round _speed]; - }; - - case ((_speed > 80)) : - { - hint parseText format ["" +(localize "STR_Cop_Radar")+ "
" +(localize "STR_Cop_VehSpeed"),round _speed]; - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/cop/fn_repairDoor.sqf b/Altis_Life.Altis/core/cop/fn_repairDoor.sqf deleted file mode 100644 index 32df08e6..00000000 --- a/Altis_Life.Altis/core/cop/fn_repairDoor.sqf +++ /dev/null @@ -1,72 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Re-locks the door mainly for the federal reserve structures. -*/ -private["_building","_doors","_door","_cP","_cpRate","_ui","_title","_titleText"]; -_building = param [0,ObjNull,[ObjNull]]; -if(isNull _building) exitWith {}; -if(!(_building isKindOf "House_F")) exitWith {hint "You are not looking at a house door."}; - -_doors = 1; -_doors = FETCH_CONFIG2(getNumber,CONFIG_VEHICLES,typeOf _building,"NumberOfDoors"); - -_door = 0; -//Find the nearest door -for "_i" from 1 to _doors do { - _selPos = _building selectionPosition format["Door_%1_trigger",_i]; - _worldSpace = _building modelToWorld _selPos; - if(player distance _worldSpace < 5) exitWith {_door = _i;}; -}; - -if(EQUAL(_door,0)) exitWith {hint localize "STR_Cop_NotaDoor"}; //Not near a door to be broken into. -_doorN = _building GVAR [format["bis_disabled_Door_%1",_door],0]; -if(EQUAL(_doorN,1)) exitWith {hint localize "STR_House_FedDoor_Locked"}; -life_action_inUse = true; - -closeDialog 0; -//Setup the progress bar -disableSerialization; -_title = localize "STR_Cop_RepairingDoor"; -5 cutRsc ["life_progress","PLAIN"]; -_ui = GVAR_UINS "life_progress"; -_progressBar = _ui displayCtrl 38201; -_titleText = _ui displayCtrl 38202; -_titleText ctrlSetText format["%2 (1%1)...","%",_title]; -_progressBar progressSetPosition 0.01; -_cP = 0.01; - -switch (typeOf _building) do { - case "Land_Dome_Big_F": {_cpRate = 0.008;}; - case "Land_Research_house_V1_F": {_cpRate = 0.005;}; - default {_cpRate = 0.08;} -}; - -while {true} do { - if(animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { - [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; - player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; - player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; - }; - sleep 0.26; - if(isNull _ui) then { - 5 cutRsc ["life_progress","PLAIN"]; - _ui = GVAR_UINS "life_progress"; - }; - _cP = _cP + _cpRate; - _progressBar progressSetPosition _cP; - _titleText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_title]; - if(_cP >= 1 OR !alive player) exitWith {}; - if(life_interrupted) exitWith {}; -}; - -//Kill the UI display and check for various states -5 cutText ["","PLAIN"]; -player playActionNow "stop"; -if(!alive player) exitWith {life_action_inUse = false;}; -if(life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; -life_action_inUse = false; -_building animate [format["door_%1_rot",_door],0]; -_building SVAR [format["bis_disabled_Door_%1",_door],1,true]; //Unlock the door. \ No newline at end of file diff --git a/Altis_Life.Altis/core/cop/fn_restrain.sqf b/Altis_Life.Altis/core/cop/fn_restrain.sqf deleted file mode 100644 index 2bda0849..00000000 --- a/Altis_Life.Altis/core/cop/fn_restrain.sqf +++ /dev/null @@ -1,67 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_restrain.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Retrains the client. -*/ -private["_cop","_player"]; -_cop = [_this,0,Objnull,[Objnull]] call BIS_fnc_param; -_player = player; -if(isNull _cop) exitWith {}; - -//Monitor excessive restrainment -[] spawn { - private "_time"; - while {true} do { - _time = time; - waitUntil {(time - _time) > (5 * 60)}; - - if(!(player GVAR ["restrained",FALSE])) exitWith {}; - if(!([west,getPos player,30] call life_fnc_nearUnits) && (player GVAR ["restrained",FALSE]) && vehicle player == player) exitWith { - player SVAR ["restrained",FALSE,TRUE]; - player SVAR ["Escorting",FALSE,TRUE]; - player SVAR ["transporting",false,true]; - detach player; - titleText[localize "STR_Cop_ExcessiveRestrain","PLAIN"]; - }; - }; -}; - -titleText[format[localize "STR_Cop_Retrained",_cop GVAR ["realname",name _cop]],"PLAIN"]; - -while {player GVAR "restrained"} do { - if(vehicle player == player) then { - player playMove "AmovPercMstpSnonWnonDnon_Ease"; - }; - - _state = vehicle player; - waitUntil {animationState player != "AmovPercMstpSnonWnonDnon_Ease" || !(player GVAR "restrained") || vehicle player != _state}; - - if(!alive player) exitWith { - player SVAR ["restrained",false,true]; - player SVAR ["Escorting",false,true]; - player SVAR ["transporting",false,true]; - detach _player; - }; - - if(!alive _cop) exitWith { - player SVAR ["Escorting",false,true]; - detach player; - }; - - if(vehicle player != player) then { - //disableUserInput true; - if(driver (vehicle player) == player) then {player action["eject",vehicle player];}; - }; -}; - -//disableUserInput false; - -if(alive player) then { - player switchMove "AmovPercMstpSlowWrflDnon_SaluteIn"; - player SVAR ["Escorting",false,true]; - player SVAR ["transporting",false,true]; - detach player; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/cop/fn_searchClient.sqf b/Altis_Life.Altis/core/cop/fn_searchClient.sqf deleted file mode 100644 index f9a4dcc1..00000000 --- a/Altis_Life.Altis/core/cop/fn_searchClient.sqf +++ /dev/null @@ -1,33 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_searchClient.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Searches the player and he returns information back to the player. -*/ -private["_inv","_val","_var","_robber"]; -params [ - ["_cop",objNull,[objNull]] -]; -if(isNull _cop) exitWith {}; - -_inv = []; -_robber = false; - -//Illegal items -{ - _var = configName(_x); - _val = ITEM_VALUE(_var); - if(_val > 0) then { - _inv pushBack [_var,_val]; - [false,_var,_val] call life_fnc_handleInv; - }; -} foreach ("getNumber(_x >> 'illegal') isEqualTo 1" configClasses (missionConfigFile >> "VirtualItems")); - -if(!life_use_atm) then { - CASH = 0; - _robber = true; -}; - -[player,_inv,_robber] remoteExec ["life_fnc_copSearch",_cop]; diff --git a/Altis_Life.Altis/core/cop/fn_sirenLights.sqf b/Altis_Life.Altis/core/cop/fn_sirenLights.sqf deleted file mode 100644 index 95c6edf2..00000000 --- a/Altis_Life.Altis/core/cop/fn_sirenLights.sqf +++ /dev/null @@ -1,22 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_sirenLights.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Lets play a game! Can you guess what it does? I have faith in you, if you can't - then you have failed me and therefor I lose all faith in humanity.. No pressure. -*/ -private["_vehicle"]; -_vehicle = param [0,ObjNull,[ObjNull]]; -if(isNull _vehicle) exitWith {}; //Bad entry! -if(!(typeOf _vehicle in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F"])) exitWith {}; //Last chance check to prevent something from defying humanity and creating a monster. - -_trueorfalse = _vehicle GVAR ["lights",FALSE]; - -if(_trueorfalse) then { - _vehicle SVAR ["lights",FALSE,TRUE]; -} else { - _vehicle SVAR ["lights",TRUE,TRUE]; - [_vehicle,0.22] remoteExec ["life_fnc_copLights",RCLIENT]; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/cop/fn_spikeStripEffect.sqf b/Altis_Life.Altis/core/cop/fn_spikeStripEffect.sqf deleted file mode 100644 index 2b69f22d..00000000 --- a/Altis_Life.Altis/core/cop/fn_spikeStripEffect.sqf +++ /dev/null @@ -1,15 +0,0 @@ -/* - File: fn_spikeStripEffect.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Doesn't work without the server-side effect but shifted part of it clientside - so code can easily be changed. Ultimately it just pops the tires. -*/ -private["_vehicle"]; -_vehicle = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -if(isNull _vehicle) exitWith {}; //Bad vehicle type - -_vehicle setHitPointDamage["HitLFWheel",1]; -_vehicle setHitPointDamage["HitLF2Wheel",1]; -_vehicle setHitPointDamage["HitRFWheel",1]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/cop/fn_ticketGive.sqf b/Altis_Life.Altis/core/cop/fn_ticketGive.sqf deleted file mode 100644 index 7a18552e..00000000 --- a/Altis_Life.Altis/core/cop/fn_ticketGive.sqf +++ /dev/null @@ -1,20 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_ticketGive.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Gives a ticket to the targeted player. -*/ -private["_val"]; -if(isNil {life_ticket_unit}) exitWith {hint localize "STR_Cop_TicketNil"}; -if(isNull life_ticket_unit) exitWith {hint localize "STR_Cop_TicketExist"}; - -_val = ctrlText 2652; - -if(!([_val] call TON_fnc_isnumber)) exitWith {hint localize "STR_Cop_TicketNum"}; -if((parseNumber _val) > 200000) exitWith {hint localize "STR_Cop_TicketOver100"}; - -[0,"STR_Cop_TicketGive",true,[profileName,[(parseNumber _val)] call life_fnc_numberText,life_ticket_unit GVAR ["realname",name life_ticket_unit]]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; -[player,(parseNumber _val)] remoteExec ["life_fnc_ticketPrompt",life_ticket_unit]; -closeDialog 0; \ No newline at end of file diff --git a/Altis_Life.Altis/core/cop/fn_ticketPaid.sqf b/Altis_Life.Altis/core/cop/fn_ticketPaid.sqf deleted file mode 100644 index 89de6850..00000000 --- a/Altis_Life.Altis/core/cop/fn_ticketPaid.sqf +++ /dev/null @@ -1,16 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Verifies that the ticket was paid. -*/ -params [ - ["_value",5,[0]], - ["_unit",objNull,[objNull]], - ["_cop",objNull,[objNull]] -]; -if(isNull _unit OR {_unit != life_ticket_unit}) exitWith {}; //NO -if(isNull _cop OR {_cop != player}) exitWith {}; //Double NO - -ADD(BANK,_value); \ No newline at end of file diff --git a/Altis_Life.Altis/core/cop/fn_ticketPay.sqf b/Altis_Life.Altis/core/cop/fn_ticketPay.sqf deleted file mode 100644 index 61b10c85..00000000 --- a/Altis_Life.Altis/core/cop/fn_ticketPay.sqf +++ /dev/null @@ -1,35 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_ticketPay.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Pays the ticket. -*/ -if(isNil "life_ticket_val" OR isNil "life_ticket_cop") exitWith {}; -if(CASH < life_ticket_val) exitWith { - if(BANK < life_ticket_val) exitWith { - hint localize "STR_Cop_Ticket_NotEnough"; - [1,"STR_Cop_Ticket_NotEnoughNOTF",true,[profileName]] remoteExecCall ["life_fnc_broadcast",life_ticket_cop]; - closeDialog 0; - }; - - hint format[localize "STR_Cop_Ticket_Paid",[life_ticket_val] call life_fnc_numberText]; - SUB(BANK,life_ticket_val); - life_ticket_paid = true; - - [0,"STR_Cop_Ticket_PaidNOTF",true,[profileName,[life_ticket_val] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",west]; - [1,"STR_Cop_Ticket_PaidNOTF_2",true,[profileName]] remoteExecCall ["life_fnc_broadcast",life_ticket_cop]; - [life_ticket_val,player,life_ticket_cop] remoteExecCall ["life_fnc_ticketPaid",life_ticket_cop]; - [getPlayerUID player] remoteExecCall ["life_fnc_wantedRemove",RSERV]; - closeDialog 0; -}; - -SUB(CASH,life_ticket_val); -life_ticket_paid = true; - -[getPlayerUID player] remoteExecCall ["life_fnc_wantedRemove",RSERV]; -[0,"STR_Cop_Ticket_PaidNOTF",true,[profileName,[life_ticket_val] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",west]; -closeDialog 0; -[1,"STR_Cop_Ticket_PaidNOTF_2",true,[profileName]] remoteExecCall ["life_fnc_broadcast",life_ticket_cop]; -[life_ticket_val,player,life_ticket_cop] remoteExecCall ["life_fnc_ticketPaid",life_ticket_cop]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/cop/fn_ticketPrompt.sqf b/Altis_Life.Altis/core/cop/fn_ticketPrompt.sqf deleted file mode 100644 index 08c9c35c..00000000 --- a/Altis_Life.Altis/core/cop/fn_ticketPrompt.sqf +++ /dev/null @@ -1,31 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_ticketPrompt - Author: Bryan "Tonic" Boardwine - - Description: - Prompts the player that he is being ticketed. -*/ -private["_cop","_val"]; -if(!isNull (findDisplay 2600)) exitWith {}; //Already at the ticket menu, block for abuse? -_cop = SEL(_this,0); -if(isNull _cop) exitWith {}; -_val = SEL(_this,1); - -createDialog "life_ticket_pay"; -disableSerialization; -waitUntil {!isNull (findDisplay 2600)}; - -life_ticket_paid = false; -life_ticket_val = _val; -life_ticket_cop = _cop; -CONTROL(2600,2601) ctrlSetStructuredText parseText format["" +(localize "STR_Cop_Ticket_GUI_Given"),_cop GVAR ["realname",name _cop],_val]; - -[] spawn { - disableSerialization; - waitUntil {life_ticket_paid OR (isNull (findDisplay 2600))}; - if(isNull (findDisplay 2600) && !life_ticket_paid) then { - [0,"STR_Cop_Ticket_Refuse",true,[profileName]] remoteExecCall ["life_fnc_broadcast",west]; - [1,"STR_Cop_Ticket_Refuse",true,[profileName]] remoteExecCall ["life_fnc_broadcast",life_ticket_cop]; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/cop/fn_vehInvSearch.sqf b/Altis_Life.Altis/core/cop/fn_vehInvSearch.sqf deleted file mode 100644 index 0002ce0b..00000000 --- a/Altis_Life.Altis/core/cop/fn_vehInvSearch.sqf +++ /dev/null @@ -1,35 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_vehInvSearch.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Searches the vehicle for illegal items. -*/ -private["_vehicle","_vehicleInfo","_value","_list"]; -_vehicle = cursorTarget; -_list = ["Air","Ship","LandVehicle"]; -if(isNull _vehicle OR {!(KINDOF_ARRAY(_vehicle,_list))}) exitWith {}; - -_vehicleInfo = _vehicle GVAR ["Trunk",[]]; -if(EQUAL(count _vehicleInfo,0)) exitWith {hint localize "STR_Cop_VehEmpty"}; - -_value = 0; -{ - _var = SEL(_x,0); - _val = SEL(_x,1); - - if(EQUAL(ITEM_ILLEGAL(_var),1)) then { - if(!(EQUAL(ITEM_SELLPRICE(_var),-1))) then { - ADD(_value,(round(_val * ITEM_SELLPRICE(_var) / 2))); - }; - }; -} foreach (SEL(_vehicleInfo,0)); - -if(_value > 0) then { - [0,"STR_NOTF_VehContraband",true,[[_value] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; - ADD(BANK,_value); - _vehicle SVAR ["Trunk",[],true]; -} else { - hint localize "STR_Cop_NoIllegalVeh"; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/fn_initCiv.sqf b/Altis_Life.Altis/core/fn_initCiv.sqf deleted file mode 100644 index 868ddc57..00000000 --- a/Altis_Life.Altis/core/fn_initCiv.sqf +++ /dev/null @@ -1,24 +0,0 @@ -/* - File: fn_initCiv.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Initializes the civilian. -*/ -private["_spawnPos"]; -civ_spawn_1 = nearestObjects[getMarkerPos "civ_spawn_1", ["Land_i_Shop_01_V1_F","Land_i_Shop_01_V2_F","Land_i_Shop_01_V3_F","Land_i_Shop_02_V1_F","Land_i_Shop_02_V2_F","Land_i_Shop_02_V3_F"],250]; -civ_spawn_2 = nearestObjects[getMarkerPos "civ_spawn_2", ["Land_i_Shop_01_V1_F","Land_i_Shop_01_V2_F","Land_i_Shop_01_V3_F","Land_i_Shop_02_V1_F","Land_i_Shop_02_V2_F","Land_i_Shop_02_V3_F"],250]; -civ_spawn_3 = nearestObjects[getMarkerPos "civ_spawn_3", ["Land_i_Shop_01_V1_F","Land_i_Shop_01_V2_F","Land_i_Shop_01_V3_F","Land_i_Shop_02_V1_F","Land_i_Shop_02_V2_F","Land_i_Shop_02_V3_F"],250]; -civ_spawn_4 = nearestObjects[getMarkerPos "civ_spawn_4", ["Land_i_Shop_01_V1_F","Land_i_Shop_01_V2_F","Land_i_Shop_01_V3_F","Land_i_Shop_02_V1_F","Land_i_Shop_02_V2_F","Land_i_Shop_02_V3_F"],250]; -waitUntil {!(isNull (findDisplay 46))}; - -if(life_is_arrested) then { - life_is_arrested = false; - [player,true] spawn life_fnc_jail; -} else { - [] call life_fnc_spawnMenu; - waitUntil{!isNull (findDisplay 38500)}; //Wait for the spawn selection to be open. - waitUntil{isNull (findDisplay 38500)}; //Wait for the spawn selection to be done. -}; -player addRating 9999999; -[] call life_fnc_playerSkins; \ No newline at end of file diff --git a/Altis_Life.Altis/core/fn_initCop.sqf b/Altis_Life.Altis/core/fn_initCop.sqf deleted file mode 100644 index d3e3e949..00000000 --- a/Altis_Life.Altis/core/fn_initCop.sqf +++ /dev/null @@ -1,31 +0,0 @@ -#include "..\script_macros.hpp" -/* - File: fn_initCop.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Cop Initialization file. -*/ -private "_end"; -player addRating 9999999; -waitUntil {!(isNull (findDisplay 46))}; -_end = false; - -if(life_blacklisted) exitWith { - ["Blacklisted",false,true] call BIS_fnc_endMission; - sleep 30; -}; - -if(!(str(player) in ["cop_1","cop_2","cop_3","cop_4"])) then { - if((FETCH_CONST(life_coplevel) == 0) && (FETCH_CONST(life_adminlevel) == 0)) then { - ["NotWhitelisted",false,true] call BIS_fnc_endMission; - sleep 35; - }; -}; - - -player setVariable["rank",(FETCH_CONST(life_coplevel)),true]; -[] call life_fnc_spawnMenu; -waitUntil{!isNull (findDisplay 38500)}; //Wait for the spawn selection to be open. -waitUntil{isNull (findDisplay 38500)}; //Wait for the spawn selection to be done. -[] call life_fnc_playerSkins; \ No newline at end of file diff --git a/Altis_Life.Altis/core/fn_initMedic.sqf b/Altis_Life.Altis/core/fn_initMedic.sqf deleted file mode 100644 index 49fa2a4c..00000000 --- a/Altis_Life.Altis/core/fn_initMedic.sqf +++ /dev/null @@ -1,21 +0,0 @@ -#include "..\script_macros.hpp" -/* - File: fn_initMedic.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Initializes the medic.. -*/ -private["_end"]; -player addRating 99999999; -waitUntil {!(isNull (findDisplay 46))}; - -if((FETCH_CONST(life_medicLevel)) < 1 && (FETCH_CONST(life_adminlevel) == 0)) exitWith { - ["Notwhitelisted",FALSE,TRUE] call BIS_fnc_endMission; - sleep 35; -}; - -[] call life_fnc_spawnMenu; -waitUntil{!isNull (findDisplay 38500)}; //Wait for the spawn selection to be open. -waitUntil{isNull (findDisplay 38500)}; //Wait for the spawn selection to be done. -[] call life_fnc_playerSkins; \ No newline at end of file diff --git a/Altis_Life.Altis/core/fn_setupActions.sqf b/Altis_Life.Altis/core/fn_setupActions.sqf deleted file mode 100644 index 0b293b7f..00000000 --- a/Altis_Life.Altis/core/fn_setupActions.sqf +++ /dev/null @@ -1,16 +0,0 @@ -/* - File: fn_setupActions.sqf - - Description: - Master addAction file handler for all client-based actions. -*/ -switch (playerSide) do { - case civilian: { - //Drop fishing net - life_actions = [player addAction[localize "STR_pAct_DropFishingNet",life_fnc_dropFishingNet,"",0,false,false,"",' - (surfaceisWater (getPos vehicle player)) && (vehicle player isKindOf "Ship") && life_carryWeight < life_maxWeight && speed (vehicle player) < 2 && speed (vehicle player) > -1 && !life_net_dropped ']]; - //Rob person - life_actions = life_actions + [player addAction[localize "STR_pAct_RobPerson",life_fnc_robAction,"",0,false,false,"",' - !isNull cursorTarget && player distance cursorTarget < 3.5 && isPlayer cursorTarget && animationState cursorTarget == "Incapacitated" && !(cursorTarget getVariable["robbed",FALSE]) ']]; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/fn_survival.sqf b/Altis_Life.Altis/core/fn_survival.sqf deleted file mode 100644 index 69d48ed9..00000000 --- a/Altis_Life.Altis/core/fn_survival.sqf +++ /dev/null @@ -1,110 +0,0 @@ -#include "..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - All survival? things merged into one thread. -*/ -private["_fnc_food","_fnc_water","_foodTime","_waterTime","_bp","_walkDis","_lastPos","_curPos"]; -_fnc_food = { - if(life_hunger < 2) then {player setDamage 1; hint localize "STR_NOTF_EatMSG_Death";} - else - { - SUB(life_hunger,10); - [] call life_fnc_hudUpdate; - if(life_hunger < 2) then {player setDamage 1; hint localize "STR_NOTF_EatMSG_Death";}; - switch(life_hunger) do { - case 30: {hint localize "STR_NOTF_EatMSG_1";}; - case 20: {hint localize "STR_NOTF_EatMSG_2";}; - case 10: { - hint localize "STR_NOTF_EatMSG_3"; - if(EQUAL(LIFE_SETTINGS(getNumber,"enable_fatigue"),1)) then {player setFatigue 1;}; - }; - }; - }; -}; - -_fnc_water = { - if(life_thirst < 2) then {player setDamage 1; hint localize "STR_NOTF_DrinkMSG_Death";} - else - { - SUB(life_thirst,10); - [] call life_fnc_hudUpdate; - if(life_thirst < 2) then {player setDamage 1; hint localize "STR_NOTF_DrinkMSG_Death";}; - switch(life_thirst) do { - case 30: {hint localize "STR_NOTF_DrinkMSG_1";}; - case 20: { - hint localize "STR_NOTF_DrinkMSG_2"; - if(EQUAL(LIFE_SETTINGS(getNumber,"enable_fatigue"),1)) then {player setFatigue 1;}; - }; - case 10: { - hint localize "STR_NOTF_DrinkMSG_3"; - if(EQUAL(LIFE_SETTINGS(getNumber,"enable_fatigue"),1)) then {player setFatigue 1;}; - }; - }; - }; -}; - -//Setup the time-based variables. -_foodTime = time; -_waterTime = time; -_walkDis = 0; -_bp = ""; -_lastPos = visiblePosition player; -_lastPos = (SEL(_lastPos,0)) + (SEL(_lastPos,1)); -_lastState = vehicle player; - -while {true} do { - /* Thirst / Hunger adjustment that is time based */ - if((time - _waterTime) > 600) then {[] call _fnc_water; _waterTime = time;}; - if((time - _foodTime) > 850) then {[] call _fnc_food; _foodTime = time;}; - - /* Adjustment of carrying capacity based on backpack changes */ - if(EQUAL(backpack player,"")) then { - life_maxWeight = LIFE_SETTINGS(getNumber,"total_maxWeight"); - _bp = backpack player; - } else { - if(!(EQUAL(backpack player,"")) && {!(EQUAL(backpack player,_bp))}) then { - _bp = backpack player; - life_maxWeight = LIFE_SETTINGS(getNumber,"total_maxWeight") + round(FETCH_CONFIG2(getNumber,CONFIG_VEHICLES,_bp,"maximumload") / 4); - }; - }; - - /* Check if the player's state changed? */ - if(vehicle player != _lastState OR {!alive player}) then { - [] call life_fnc_updateViewDistance; - _lastState = vehicle player; - }; - - /* Check if the weight has changed and the player is carrying to much */ - if(life_carryWeight > life_maxWeight && {!isForcedWalk player}) then { - player forceWalk true; - if(EQUAL(LIFE_SETTINGS(getNumber,"enable_fatigue"),1)) then {player setFatigue 1;}; - hint localize "STR_NOTF_MaxWeight"; - } else { - if(isForcedWalk player) then { - player forceWalk false; - }; - }; - - /* Travelling distance to decrease thirst/hunger which is captured every second so the distance is actually greater then 650 */ - if(!alive player) then {_walkDis = 0;} else { - _curPos = visiblePosition player; - _curPos = (SEL(_curPos,0)) + (SEL(_curPos,1)); - if(!(EQUAL(_curPos,_lastPos)) && {(vehicle player == player)}) then { - ADD(_walkDis,1); - if(EQUAL(_walkDis,650)) then { - _walkDis = 0; - SUB(life_thirst,5); - SUB(life_hunger,5); - [] call life_fnc_hudUpdate; - }; - }; - _lastPos = visiblePosition player; - _lastPos = (SEL(_lastPos,0)) + (SEL(_lastPos,1)); - }; - uiSleep 1; -}; - - - diff --git a/Altis_Life.Altis/core/fn_welcomeNotification.sqf b/Altis_Life.Altis/core/fn_welcomeNotification.sqf deleted file mode 100644 index 3c55d45a..00000000 --- a/Altis_Life.Altis/core/fn_welcomeNotification.sqf +++ /dev/null @@ -1,20 +0,0 @@ -/* - File: fn_welcomeNotification.sqf - - Description: - Called upon first spawn selection and welcomes our player. -*/ -format["Welcome %1, Please read the following as it is important!",profileName] hintC -[ - "Welcome to the server! A few things have changed with Altis Life RPG that you need to be aware of!", - "An interaction key has been introduced which replaces the large majority of scroll wheel actions, this was for performance issues. By default this key is [Left Windows], you can change this key by pressing ESC and going to Configure->Controls->Custom - and bind 'Use Action 10' to a single key like H. This key is used for the following actions", - "Picking up items and money.", - "Fishing and gathering", - "Interacting with players (as a cop)", - "Interacting with vehicles (repairing and cop actions)", - "", - "If you are having issues with interacting / picking up items just wait. A quick way to know when you can interact with that item if the server allows it is by pressing your tilde key (~) and using the circle to highlight the object, when it says for example 'Pile of Money' then - that means you can pick it up!." -]; - \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_accType.sqf b/Altis_Life.Altis/core/functions/fn_accType.sqf deleted file mode 100644 index 5ab5b357..00000000 --- a/Altis_Life.Altis/core/functions/fn_accType.sqf +++ /dev/null @@ -1,64 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_accType.sqf - Author: Bryan "Tonic" Boardwine - - *Functionality from Virtual Ammobox System* - - Description: - Checks what type of an attachment is passed and what it is compatible with. - Should now be compatible with the new compatibleItems class structure... This was not a fun task but thankfully - Robalo gave me some code that showed me the way. If it isn't 100% compatible then IDFK. The foreach in a foreach drove me nuts and - not the best way to do things, I really don't know what I was thinking but doing PHP code for two weeks and playing GTA V tends to make you - forget things.... Wow what a ramble... blah blah blah. - - Returns: - 0: Unknown Error - 1: Primary - 2: Secondary - 3: Handgun -*/ -private["_item","_type","_tmp","_ret","_weaponArray"]; -_item = [_this,0,"",[""]] call BIS_fnc_param; -_type = [_this,1,0,[0]] call BIS_fnc_param; -if(EQUAL(_item,"") || EQUAL(_type,0)) exitWith {0}; -_ret = 0; - -_weaponArray = [RIFLE, LAUNCHER, PISTOL]; -{ - if(!(EQUAL(_ret,0))) exitWith {}; //Make sure we exit the loop since there was already a match. - if(!(EQUAL(_x,""))) then - { - _weapon = _x; - _cfgInfo = [_weapon,CONFIG_WEAPONS] call life_fnc_fetchCfgDetails; - - _legacyItems = (SEL(_cfgInfo,10) + SEL(_cfgInfo,11) + SEL(_cfgInfo,12)); - _newItems = SEL(_cfgInfo,14); - - //Check Legacy Items first - if(count _legacyItems > 0) then { - for "_i" from 0 to (count _legacyItems)-1 do { - _legacyItems set[_i,toLower(SEL(_legacyItems,_i))]; - }; - - if((toLower _item) in _legacyItems) exitWith {_ret = switch(_weapon) do {case (RIFLE): {1};case (LAUNCHER) : {2};case (PISTOL): {3};default {0};};}; - }; - - //Check new compatibleItems class structure - if(count _newItems > 0) then { - //This gets weird with foreach in foreach :\ - { - if(!(EQUAL(_ret,0))) exitWith {}; - _cfg = FETCH_CONFIG4(getNumber,CONFIG_WEAPONS,_weapon,"WeaponSlotsInfo",_x,"compatibleItems",_item); - - if(isNil "_cfg") then {_cfg = 0;}; - if(EQUAL(_cfg,1)) exitWith { - _ret = switch(_weapon) do {case (RIFLE): {1};case (LAUNCHER) : {2};case (PISTOL): {3};default {0};}; - }; - } foreach _newItems; - if(!(EQUAL(_ret,0))) exitWith {}; //Make sure we exit the loop - }; - }; -} foreach _weaponArray; - -_ret; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_actionKeyHandler.sqf b/Altis_Life.Altis/core/functions/fn_actionKeyHandler.sqf deleted file mode 100644 index 86b68359..00000000 --- a/Altis_Life.Altis/core/functions/fn_actionKeyHandler.sqf +++ /dev/null @@ -1,111 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_actionKeyHandler.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Master action key handler, handles requests for picking up various items and - interacting with other players (Cops = Cop Menu for unrestrain,escort,stop escort, arrest (if near cop hq), etc). -*/ -private["_curTarget","_isWater"]; -_curTarget = cursorTarget; -if(life_action_inUse) exitWith {}; //Action is in use, exit to prevent spamming. -if(life_interrupted) exitWith {life_interrupted = false;}; -_isWater = surfaceIsWater (visiblePositionASL player); - -//Check if the player is near an ATM. -if((call life_fnc_nearATM) && {!dialog}) exitWith { - [] call life_fnc_atmMenu; -}; - -if(isNull _curTarget) exitWith { - if(_isWater) then { - private "_fish"; - _fish = (nearestObjects[visiblePosition player,["Fish_Base_F"],3]) select 0; - if(!isNil "_fish") then { - [_fish] call life_fnc_catchFish; - }; - } else { - if(playerSide == civilian && !life_action_gathering) then { - _handle = [] spawn life_fnc_gather; - waitUntil {scriptDone _handle}; - life_action_gathering = false; - }; - }; -}; - - -if(!alive _curTarget && _curTarget isKindOf "Animal" && !(EQUAL((typeOf _curTarget),"Turtle_F"))) exitWith { - [_curTarget] call life_fnc_gutAnimal; -}; - -if(_curTarget isKindOf "House_F" && {player distance _curTarget < 12} OR ((nearestObject [[16019.5,16952.9,0],"Land_Dome_Big_F"]) == _curTarget OR (nearestObject [[16019.5,16952.9,0],"Land_Research_house_V1_F"]) == _curTarget)) exitWith { - [_curTarget] call life_fnc_houseMenu; -}; - -if(dialog) exitWith {}; //Don't bother when a dialog is open. -if(vehicle player != player) exitWith {}; //He's in a vehicle, cancel! -life_action_inUse = true; - -//Temp fail safe. -[] spawn { - sleep 60; - life_action_inUse = false; -}; - -//Check if it's a dead body. -if(_curTarget isKindOf "Man" && {!alive _curTarget} && {playerSide in [west,independent]}) exitWith { - //Hotfix code by ins0 - if(((playerSide == blufor && {(EQUAL(LIFE_SETTINGS(getNumber,"revive_cops"),1))}) || playerSide == independent) && {"Medikit" in (items player)}) then { - [_curTarget] call life_fnc_revivePlayer; - }; -}; - - -//If target is a player then check if we can use the cop menu. -if(isPlayer _curTarget && _curTarget isKindOf "Man") then { - if((_curTarget GVAR ["restrained",false]) && !dialog && playerSide == west) then { - [_curTarget] call life_fnc_copInteractionMenu; - }; -} else { - //OK, it wasn't a player so what is it? - private["_isVehicle","_miscItems","_money","_list"]; - - _list = ["landVehicle","Ship","Air"]; - _isVehicle = if(KINDOF_ARRAY(_curTarget,_list)) then {true} else {false}; - _miscItems = ["Land_BottlePlastic_V1_F","Land_TacticalBacon_F","Land_Can_V3_F","Land_CanisterFuel_F","Land_Suitcase_F"]; - _animalTypes = ["Salema_F","Ornate_random_F","Mackerel_F","Tuna_F","Mullet_F","CatShark_F","Turtle_F"]; - _money = "Land_Money_F"; - - //It's a vehicle! open the vehicle interaction key! - if(_isVehicle) then { - if(!dialog) then { - if(player distance _curTarget < SEL(SEL(boundingBox _curTarget,1),0)+2) then { - [_curTarget] call life_fnc_vInteractionMenu; - }; - }; - } else { - //Is it a animal type? - if((typeOf _curTarget) in _animalTypes) then { - if(EQUAL((typeOf _curTarget),"Turtle_F") && !alive _curTarget) then { - private "_handle"; - _handle = [_curTarget] spawn life_fnc_catchTurtle; - waitUntil {scriptDone _handle}; - } else { - private "_handle"; - _handle = [_curTarget] spawn life_fnc_catchFish; - waitUntil {scriptDone _handle}; - }; - } else { - //OK, it wasn't a vehicle so let's see what else it could be? - if((typeOf _curTarget) in _miscItems) then { - [_curTarget,player,false] remoteExecCall ["TON_fnc_pickupAction",RSERV]; - } else { - //It wasn't a misc item so is it money? - if(EQUAL((typeOf _curTarget),_money) && {!(_curTarget GVAR ["inUse",false])}) then { - [_curTarget,player,true] remoteExecCall ["TON_fnc_pickupAction",RSERV]; - }; - }; - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_animSync.sqf b/Altis_Life.Altis/core/functions/fn_animSync.sqf deleted file mode 100644 index 54296b54..00000000 --- a/Altis_Life.Altis/core/functions/fn_animSync.sqf +++ /dev/null @@ -1,9 +0,0 @@ -/* - File: fn_animSync.sqf -*/ -private["_unit","_anim"]; -_unit = [_this,0,ObjNull,[Objnull]] call BIS_fnc_param; -_anim = [_this,1,"",[""]] call BIS_fnc_param; -_cancelOwner = [_this,2,false,[true]] call BIS_fnc_param; -if(isNull _unit OR {(local _unit && _cancelOwner)}) exitWith {}; -_unit switchMove _anim; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_calWeightDiff.sqf b/Altis_Life.Altis/core/functions/fn_calWeightDiff.sqf deleted file mode 100644 index 47867932..00000000 --- a/Altis_Life.Altis/core/functions/fn_calWeightDiff.sqf +++ /dev/null @@ -1,29 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_calWeightDiff.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Calculates weight differences in the _cWeight (current Weight) against the _mWeight (Max Weight) - Multiple purpose system for this life mission. -*/ -private["_item","_value","_cWeight","_mWeight","_sum","_weight"]; -_item = [_this,0,"",[""]] call BIS_fnc_param; -_value = [_this,1,-1,[0]] call BIS_fnc_param; -_cWeight = [_this,2,-1,[0]] call BIS_fnc_param; -_mWeight = [_this,3,-1,[0]] call BIS_fnc_param; - -if(EQUAL(_item,"") OR EQUAL(_value,-1) OR EQUAL(_cWeight,-1) OR EQUAL(_mWeight,-1)) exitWith {}; -_weight = ([_item] call life_fnc_itemWeight) * _value; -_sum = _value; - -if((_cweight + _weight) > _mWeight) then { - while {true} do { - SUB(_sum,1); - if(_sum < 1) exitWith {}; - _weight = ([_item] call life_fnc_itemweight) * _sum; - if((_cWeight + _weight) <= _mWeight) exitWith {}; - }; -}; - -_sum; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_clearVehicleAmmo.sqf b/Altis_Life.Altis/core/functions/fn_clearVehicleAmmo.sqf deleted file mode 100644 index fa15d3f6..00000000 --- a/Altis_Life.Altis/core/functions/fn_clearVehicleAmmo.sqf +++ /dev/null @@ -1,37 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_clearVehicleAmmo.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Clears the vehicle of ammo types that we don't want. -*/ -private["_vehicle","_veh"]; -_vehicle = [_this,0,Objnull,[Objnull]] call BIS_fnc_param; -if(isNull _vehicle) exitWith {}; //DAFUQ -_veh = typeOf _vehicle; - -if(EQUAL(_veh,"B_Boat_Armed_01_minigun_F")) then { - _vehicle removeMagazinesTurret ["200Rnd_40mm_G_belt",[0]]; -}; - -if(EQUAL(_veh,"B_APC_Wheeled_01_cannon_F")) then { - _vehicle removeMagazinesTurret ["60Rnd_40mm_GPR_Tracer_Red_shells",[0]]; - _vehicle removeMagazinesTurret ["40Rnd_40mm_APFSDS_Tracer_Red_shells",[0]]; -}; - -if(EQUAL(_veh,"O_Heli_Attack_02_black_F")) then { - _vehicle removeMagazinesTurret ["250Rnd_30mm_APDS_shells",[0]]; - _vehicle removeMagazinesTurret ["8Rnd_LG_scalpel",[0]]; - _vehicle removeMagazinesTurret ["38Rnd_80mm_rockets",[0]]; -}; - -if(EQUAL(_veh,"B_Heli_Transport_01_F")) then -{ - _vehicle removeMagazinesTurret ["2000Rnd_65x39_Belt_Tracer_Red",[1]]; - _vehicle removeMagazinesTurret ["2000Rnd_65x39_Belt_Tracer_Red",[2]]; -}; - -clearWeaponCargoGlobal _vehicle; -clearMagazineCargoGlobal _vehicle; -clearItemCargoGlobal _vehicle; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_dropItems.sqf b/Altis_Life.Altis/core/functions/fn_dropItems.sqf deleted file mode 100644 index f6ef5f78..00000000 --- a/Altis_Life.Altis/core/functions/fn_dropItems.sqf +++ /dev/null @@ -1,115 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_dropItems.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Called on death, player drops any 'virtual' items they may be carrying. -*/ -private["_obj","_unit","_item","_value"]; -_unit = SEL(_this,0); - -{ - if(typeName _x == typeName "") then {_item = _x;} else {_item = configName _x}; - _value = ITEM_VALUE(_item); - _itemName = ITEM_VARNAME(_item); - - switch(_item) do { - case "waterBottle": { - if(_value > 0) then { - _pos = _unit modelToWorld[0,3,0]; - _pos = [SEL(_pos,0), SEL(_pos,1), 0]; - _obj = "Land_BottlePlastic_V1_F" createVehicle _pos; - //_obj SVAR ["water",_value,true]; - [_obj] remoteExecCall ["life_fnc_simDisable",RANY]; - _obj setPos _pos; - _obj SVAR ["item",[_item,_value],true]; - SVAR_MNS [_itemName,0]; - }; - }; - - case "tbacon": { - if(_value > 0) then { - _pos = _unit modelToWorld[0,3,0]; - _pos = [SEL(_pos,0), SEL(_pos,1), 0]; - _obj = "Land_TacticalBacon_F" createVehicle _pos; - [_obj] remoteExecCall ["life_fnc_simDisable",RANY]; - _obj setPos _pos; - _obj SVAR ["item",[_item,_value],true]; - SVAR_MNS [_itemName,0]; - }; - }; - - case "redgull": { - if(_value > 0) then { - _pos = _unit modelToWorld[0,3,0]; - _pos = [SEL(_pos,0), SEL(_pos,1), 0]; - _obj = "Land_Can_V3_F" createVehicle _pos; - [_obj] remoteExecCall ["life_fnc_simDisable",RANY]; - _obj setPos _pos; - _obj SVAR ["item",[_item,_value],true]; - SVAR_MNS [_itemName,0]; - }; - }; - - case "fuelEmpty": { - if(_value > 0) then { - _pos = _unit modelToWorld[0,3,0]; - _pos = [SEL(_pos,0), SEL(_pos,1), 0]; - _obj = "Land_CanisterFuel_F" createVehicle _pos; - [_obj] remoteExecCall ["life_fnc_simDisable",RANY]; - _obj setPos _pos; - _obj SVAR ["item",[_item,_value],true]; - SVAR_MNS [_itemName,0]; - }; - }; - - case "fuelFull": { - if(_value > 0) then { - _pos = _unit modelToWorld[0,3,0]; - _pos = [SEL(_pos,0), SEL(_pos,1), 0]; - _obj = "Land_CanisterFuel_F" createVehicle _pos; - [_obj] remoteExecCall ["life_fnc_simDisable",RANY]; - _obj setPos _pos; - _obj SVAR ["item",[_item,_value],true]; - SVAR_MNS [_itemName,0]; - }; - }; - - case "coffee": { - if (_value > 0) then { - _pos = _unit modelToWorld[0,3,0]; - _pos = [SEL(_pos,0), SEL(_pos,1), 0]; - _obj = "Land_Can_V3_F" createVehicle _pos; - [_obj] remoteExecCall ["life_fnc_simDisable",RANY]; - _obj setPos _pos; - _obj SVAR ["item",[_item,_value],true]; - SVAR_MNS [_itemName,0]; - }; - }; - - case "life_cash": { - if(CASH > 0) then { - _pos = _unit modelToWorld[0,3,0]; - _pos = [SEL(_pos,0), SEL(_pos,1), 0]; - _obj = "Land_Money_F" createVehicle _pos; - _obj SVAR ["item",["money",GVAR_MNS [_item,0]],true]; - _obj setPos _pos; - [_obj] remoteExecCall ["life_fnc_simDisable",RANY]; - SVAR_MNS ["life_cash",0]; - }; - }; - - default { - if(_value > 0) then { - _pos = _unit modelToWorld[0,3,0]; - _pos = [SEL(_pos,0), SEL(_pos,1), 0]; - _obj = "Land_Suitcase_F" createVehicle _pos; - [_obj] remoteExecCall ["life_fnc_simDisable",RANY]; - _obj setPos _pos; - _obj SVAR ["item",[_item,_value],true]; - SVAR_MNS [_itemName,0]; - }; - }; - }; -} foreach (("true" configClasses (missionConfigFile >> "VirtualItems")) + ["life_cash"]); \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_escInterupt.sqf b/Altis_Life.Altis/core/functions/fn_escInterupt.sqf deleted file mode 100644 index 5922c95d..00000000 --- a/Altis_Life.Altis/core/functions/fn_escInterupt.sqf +++ /dev/null @@ -1,67 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_escInterupt.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Monitors when the ESC menu is pulled up and blocks off - certain controls when conditions meet. -*/ -private["_abortButton","_respawnButton","_fieldManual","_escSync","_canUseControls"]; -disableSerialization; - -_escSync = { - private["_abortButton","_thread","_syncManager"]; - disableSerialization; - - _syncManager = { - disableSerialization; - private["_abortButton","_timeStamp"]; - _abortButton = CONTROL(49,104); - _timeStamp = time + 10; - - waitUntil { - _abortButton ctrlSetText format[localize "STR_NOTF_AbortESC",[(_timeStamp - time),"SS.MS"] call BIS_fnc_secondsToString]; - _abortButton ctrlCommit 0; - round(_timeStamp - time) <= 0 || isNull (findDisplay 49) - }; - - _abortButton ctrlSetText localize "STR_DISP_INT_ABORT"; - _abortButton ctrlCommit 0; - }; - - _abortButton = CONTROL(49,104); - [] call SOCK_fnc_updateRequest; //call our silent sync. - - if(_this) then { - _thread = [] spawn _syncManager; - waitUntil{scriptDone _thread OR isNull (findDisplay 49)}; - _abortButton ctrlEnable true; - }; -}; - -_canUseControls = { - if(playerSide == west) exitWith {true}; - if((player GVAR ["restrained",FALSE]) OR (player GVAR ["Escorting",FALSE]) OR (player GVAR ["transporting",FALSE]) OR (life_is_arrested) OR (life_istazed)) then {false} else {true}; -}; - -while {true} do -{ - waitUntil{!isNull (findDisplay 49)}; - _abortButton = CONTROL(49,104); - _abortButton buttonSetAction "[player] remoteExec [""TON_fnc_cleanupRequest"",2];"; - _respawnButton = CONTROL(49,1010); - _fieldManual = CONTROL(49,122); - - //Block off our buttons first. - _abortButton ctrlEnable false; - _respawnButton ctrlEnable false; - _fieldManual ctrlEnable false; //Never re-enable, blocks an old script executor. - - _usebleCtrl = call _canUseControls; - _usebleCtrl spawn _escSync; - if(_usebleCtrl) then { - _respawnButton ctrlEnable true; //Enable the button. - }; - waitUntil{isNull (findDisplay 49)}; -}; diff --git a/Altis_Life.Altis/core/functions/fn_fetchCfgDetails.sqf b/Altis_Life.Altis/core/functions/fn_fetchCfgDetails.sqf deleted file mode 100644 index 5ed52a5b..00000000 --- a/Altis_Life.Altis/core/functions/fn_fetchCfgDetails.sqf +++ /dev/null @@ -1,121 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - @version: 1.7 - @file_name: fn_fetchCfgDetails.sqf - @file_author: TAW_Tonic - @file_edit: 8/2/2013 - @file_description: Fetch information about the entities config - - USAGE: - [Classname,Cfg* (Optional)] call VAS_fnc_fetchCfgDetails; - - Return: - 0: classname - 1: displayname - 2: picture - 3: scope - 4: type - 5: itemInfo Type (if any, -1 means none) - 6: Cfg Location i.e CfgWeapons - 7: Magazines - 8: Muzzles - 9: Short Description - 10: acc_Pointers - 11: acc_Optics - 12: acc_Muzzles - 13: Base (Superclass) - 14: New compatibleItems Structure -*/ -private["_className","_section","_type","_accPointer","_accMuzzle","_accOptic","_classes","_itemInfo","_magazines","_scope","_config","_displayName"]; -_className = [_this,0,"",[""]] call BIS_fnc_param; -_section = [_this,1,"",[""]] call BIS_fnc_param; -if((EQUAL(_className,""))) exitWith {[]}; - -_type = -1; -_accPointer = []; -_accOptic = []; -_accMuzzle = []; -_classes = []; -_scope = 0; -_itemInfo = -1; -_muzzles = []; -_magazines = []; -_return = []; - -if(EQUAL(_section,"")) then { - _section = switch(true) do { - case (isClass(configFile >> CONFIG_MAGAZINES >> _className)): {CONFIG_MAGAZINES}; - case (isClass(configFile >> CONFIG_WEAPONS >> _className)): {CONFIG_WEAPONS}; - case (isClass(configFile >> CONFIG_VEHICLES >> _className)): {CONFIG_VEHICLES}; - case (isClass(configFile >> CONFIG_GLASSES >> _className)): {CONFIG_GLASSES}; - }; -}; - -if(!(EQUAL(typeName _section,typeName "STRING")) OR {!isClass(configFile >> _section >> _className)} OR {EQUAL(_section,"")}) exitWith {[]}; -_config = configFile >> _section >> _className; -_displayName = getText(_config >> "displayName"); -_picture = getText(_config >> "picture"); -_desc = getText(_config >> "descriptionshort"); -_base = inheritsFrom _config; - -switch (_section) do -{ - case CONFIG_VEHICLES: { - _type = getText(_config >> "vehicleClass"); - _scope = getNumber(_config >> "scope"); - }; - - case CONFIG_WEAPONS: { - _scope = getNumber(_config >> "scope"); - _type = getNumber(_config >> "type"); - _desc = getText(_config >> "descriptionshort"); - - //Compatible attachments - if(isClass (_config >> "WeaponSlotsInfo")) then - { - _accPointer = getArray(_config >> "WeaponSlotsInfo" >> "PointerSlot" >> "compatibleItems"); - _accOptic = getArray(_config >> "WeaponSlotsInfo" >> "CowsSlot" >> "compatibleItems"); - _accMuzzle = getArray(_config >> "WeaponSlotsInfo" >> "MuzzleSlot" >> "compatibleItems"); - - { private "_thiscfgitem"; - for "_i" from 0 to (count(_x) - 1) do { - _thiscfgitem = _x select _i; - if (isClass _thiscfgitem) then { - if !((configName _thiscfgitem) in _classes) then { - _classes pushBack configName _thiscfgitem; - }; - }; - }; - } forEach ([_config>>"WeaponSlotsInfo"] call bis_fnc_returnParents); - }; - - if(isClass (_config >> "ItemInfo")) then { - _itemInfo = getNumber(_config >> "ItemInfo" >> "Type"); - }; - - _muzzles = getArray(_config >> "muzzles"); - _magazines = getArray(_config >> "magazines"); - if(!isNil {_muzzles}) then { - private["_tmp"]; - { - if(_x != "this") then { - _tmp = getArray(_base >> _x >> "magazines"); { - _magazines pushBack _x; - } foreach (_tmp); - }; - } foreach _muzzles; - }; - }; - - case CONFIG_MAGAZINES: { - _scope = getNumber(_config >> "scope"); - }; -}; - -if(!isNil "_classes") then { - _classes = _classes - ["MuzzleSlot"]; - _classes = _classes - ["CowsSlot"]; - _classes = _classes - ["PointerSlot"]; -}; -_return = [_className,_displayName,_picture,_scope,_type,_itemInfo,_section,_magazines,_muzzles,_desc,_accPointer,_accOptic,_accMuzzle,_base,_classes]; -_return; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_fetchDeadGear.sqf b/Altis_Life.Altis/core/functions/fn_fetchDeadGear.sqf deleted file mode 100644 index 450e84d0..00000000 --- a/Altis_Life.Altis/core/functions/fn_fetchDeadGear.sqf +++ /dev/null @@ -1,57 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_fetchDeadGear.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Fetches gear off of a body. -*/ -private["_primary,_launcher","_handgun","_magazines","_uniform","_vest","_backpack","_items","_primitems","_secitems","_handgunitems","_uitems","_vitems","_bitems","_headgear","_goggles","_unit"]; -_unit = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -if(isNull _unit) exitWith {}; -_primitems = []; -_secitems = []; -_handgunitems = []; -_primary = primaryWeapon _unit; -_launcher = secondaryWeapon _unit; -_handgun = handGunWeapon _unit; -_magazines = []; -_uniform = uniform _unit; -_vest = vest _unit; -_backpack = backpack _unit; -_items = assignedItems _unit; -if(!(EQUAL(primaryWeapon _unit,""))) then {_primitems = primaryWeaponItems _unit;}; -if(!(EQUAL(handgunWeapon _unit,""))) then {_handgunItems = handgunItems _unit;}; -_headgear = headgear _unit; -_goggles = goggles _unit; -_uitems = []; -_vitems = []; -_bitems = []; -if(_uniform != "") then {{_uitems pushBack _x;} foreach (uniformItems _unit);}; -if(_vest != "") then {{_vitems pushBack _x;} foreach (vestItems _unit);}; -if(_backpack != "") then {{_bitems pushBack _x;} foreach (backPackItems _unit);}; - -if(!(EQUAL(primaryWeapon _unit,""))) then { - _unit selectWeapon (primaryWeapon _unit); - if(!(EQUAL(currentMagazine _unit,""))) then { - _magazines pushBack currentMagazine _unit; - }; -}; - -if(!(EQUAL(secondaryWeapon _unit,""))) then { - _unit selectWeapon (secondaryWeapon _unit); - if(!(EQUAL(currentMagazine _unit,""))) then { - _magazines pushBack currentMagazine _unit; - }; -}; - -if(!(EQUAL(handgunWeapon _unit,""))) then { - _unit selectWeapon (handgunWeapon _unit); - if(!(EQUAL(currentMagazine _unit,""))) then { - _magazines pushBack currentMagazine _unit; - }; -}; -_unit selectWeapon (primaryWeapon _unit); - -if(isNil "_handgunItems") then {_handgunItems = ["","",""];}; -[_primary,_launcher,_handgun,_magazines,_uniform,_vest,_backpack,_items,_primitems,_secitems,_handgunitems,_uitems,_vitems,_bitems,_headgear,_goggles]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_fetchVehInfo.sqf b/Altis_Life.Altis/core/functions/fn_fetchVehInfo.sqf deleted file mode 100644 index 7b9b9adf..00000000 --- a/Altis_Life.Altis/core/functions/fn_fetchVehInfo.sqf +++ /dev/null @@ -1,57 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_fetchVehInfo.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Used in returning information about a vehicle from Config >> CONFIG_VEHICLES - - Return: - 0: classname - 1: scope - 2: picture - 3: displayname - 4: vehicleclass - 5: side - 6: faction - 7: Base / Superclass - 8: Max Speed - 9: Armor Rating - 10: Passenger Seats - 11: Max Horse power - 12: Fuel Capacity -*/ -private["_class","_scope","_picture","_displayName","_vehicleClass","_side","_faction","_superClass","_speed","_armor","_seats","_hp","_fuel"]; -_class = [_this,0,"",[""]] call BIS_fnc_param; -if(EQUAL(_class,"")) exitWith {[]}; //Bad class passed. -if(!isClass (configFile >> CONFIG_VEHICLES >> _class)) exitWith {[]}; //Class doesn't exist in CfgVehicles - -//Predefine some stuff. -_scope = -1; -_picture = ""; -_displayName = ""; -_vehicleClass = ""; -_side = -1; -_faction = ""; -_speed = 0; -_armor = 0; -_seats = 0; -_hp = 0; -_fuel = 0; - -//Fetch -_scope = FETCH_CONFIG2(getNumber,CONFIG_VEHICLES,_class,"scope"); -_picture = FETCH_CONFIG2(getText,CONFIG_VEHICLES,_class,"picture"); -_displayName = FETCH_CONFIG2(getText,CONFIG_VEHICLES,_class,"displayName"); -_vehicleClass = FETCH_CONFIG2(getText,CONFIG_VEHICLES,_class,"vehicleClass"); -_side = FETCH_CONFIG2(getNumber,CONFIG_VEHICLES,_class,"side"); -_faction = FETCH_CONFIG2(getText,CONFIG_VEHICLES,_class,"faction"); -_superClass = BASE_CONFIG(CONFIG_VEHICLES,_class); -_speed = FETCH_CONFIG2(getNumber,CONFIG_VEHICLES,_class,"maxSpeed"); -_armor = FETCH_CONFIG2(getNumber,CONFIG_VEHICLES,_class,"armor"); -_seats = FETCH_CONFIG2(getNumber,CONFIG_VEHICLES,_class,"transportSoldier"); -_hp = FETCH_CONFIG2(getNumber,CONFIG_VEHICLES,_class,"enginePower"); -_fuel = FETCH_CONFIG2(getNumber,CONFIG_VEHICLES,_class,"fuelCapacity"); - -//Return -[_class,_scope,_picture,_displayName,_vehicleClass,_side,_faction,_superClass,_speed,_armor,_seats,_hp,_fuel]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_giveDiff.sqf b/Altis_Life.Altis/core/functions/fn_giveDiff.sqf deleted file mode 100644 index 4217abeb..00000000 --- a/Altis_Life.Altis/core/functions/fn_giveDiff.sqf +++ /dev/null @@ -1,26 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_giveDiff.sqf - Author: Bryan "Tonic" Boardwine - - Description: - ??A?SD?ADS?A -*/ -private["_unit","_item","_val","_from","_bool"]; -_unit = SEL(_this,0); -if(_unit != player) exitWith {}; -_item = SEL(_this,1); -_val = SEL(_this,2); -_from = SEL(_this,3); -_bool = if(count _this > 4) then {true} else {false}; -_type = M_CONFIG(getText,"VirtualItems",_item,"displayName"); - -if(_bool) then { - if(([true,_item,(parseNumber _val)] call life_fnc_handleInv)) then { - hint format[localize "STR_MISC_TooMuch",_from getVariable["realname",name _from],_val,(localize _type)]; - }; -} else { - if(([true,_item,(parseNumber _val)] call life_fnc_handleInv)) then { - hint format[localize "STR_MISC_TooMuch_2",_from getVariable["realname",name _from],_val,(localize _type)]; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_handleDamage.sqf b/Altis_Life.Altis/core/functions/fn_handleDamage.sqf deleted file mode 100644 index 00a6d765..00000000 --- a/Altis_Life.Altis/core/functions/fn_handleDamage.sqf +++ /dev/null @@ -1,49 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_handleDamage.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Handles damage, specifically for handling the 'tazer' pistol and nothing else. -*/ -private["_unit","_damage","_source","_projectile","_part","_curWep"]; -_unit = SEL(_this,0); -_part = SEL(_this,1); -_damage = SEL(_this,2); -_source = SEL(_this,3); -_projectile = SEL(_this,4); - -//Handle the tazer first (Top-Priority). -if(!isNull _source) then { - if(_source != _unit) then { - _curWep = currentWeapon _source; - if(_projectile in ["B_9x21_Ball","B_556x45_dual"] && _curWep in ["hgun_P07_snds_F","arifle_SDAR_F"]) then { - if(side _source == west && playerSide != west) then { - private["_distance","_isVehicle","_isQuad"]; - _distance = if(_projectile == "B_556x45_dual") then {100} else {35}; - _isVehicle = if(vehicle player != player) then {true} else {false}; - _isQuad = if(_isVehicle) then {if(typeOf (vehicle player) == "B_Quadbike_01_F") then {true} else {false}} else {false}; - - _damage = false; - if(_unit distance _source < _distance) then { - if(!life_istazed && !(_unit GVAR ["restrained",false])) then { - if(_isVehicle && _isQuad) then { - player action ["Eject",vehicle player]; - [_unit,_source] spawn life_fnc_tazed; - } else { - [_unit,_source] spawn life_fnc_tazed; - }; - }; - }; - }; - - //Temp fix for super tasers on cops. - if(playerSide == west && side _source == west) then { - _damage = false; - }; - }; - }; -}; - -[] call life_fnc_hudUpdate; -_damage; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_handleInv.sqf b/Altis_Life.Altis/core/functions/fn_handleInv.sqf deleted file mode 100644 index a89bb794..00000000 --- a/Altis_Life.Altis/core/functions/fn_handleInv.sqf +++ /dev/null @@ -1,49 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_handleInv.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Do I really need one? -*/ -private["_math","_item","_num","_return","_var","_weight","_value","_diff"]; -_math = [_this,0,false,[false]] call BIS_fnc_param; //true = add; false = SUB; -_item = [_this,1,"",[""]] call BIS_fnc_param; //The item we are using to add or remove. -_num = [_this,2,0,[0]] call BIS_fnc_param; //Number of items to add or remove. -if(EQUAL(_item,"") OR EQUAL(_num,0)) exitWith {false}; - -_var = ITEM_VARNAME(_item); - -if(_math) then { - _diff = [_item,_num,life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff; - _num = _diff; - if(_num <= 0) exitWith {false}; -}; -_weight = ([_item] call life_fnc_itemWeight) * _num; -_value = ITEM_VALUE(_item); - -if(_math) then { - //Lets add! - if((life_carryWeight + _weight) <= life_maxWeight) then { - SVAR_MNS [_var,(_value + _num)]; - - if((GVAR_MNS _var) > _value) then { - life_carryWeight = life_carryWeight + _weight; - _return = true; - } else { - _return = false; - }; - } else {_return = false;}; -} else { - //Lets SUB! - if((_value - _num) < 0) then { _return = false;} else { - SVAR_MNS[_var,(_value - _num)]; - - if((GVAR_MNS _var) < _value) then { - life_carryWeight = life_carryWeight - _weight; - _return = true; - } else {_return = false;}; - }; -}; - -_return; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_handleItem.sqf b/Altis_Life.Altis/core/functions/fn_handleItem.sqf deleted file mode 100644 index dee0b96a..00000000 --- a/Altis_Life.Altis/core/functions/fn_handleItem.sqf +++ /dev/null @@ -1,495 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description - Main gear handling functionality. -*/ -private["_item","_details","_bool","_ispack","_items","_isgun","_ongun","_override","_toUniform","_toVest","_preview"]; -_item = [_this,0,"",[""]] call BIS_fnc_param; -_bool = [_this,1,false,[false]] call BIS_fnc_param; -_ispack = [_this,2,false,[false]] call BIS_fnc_param; -_ongun = [_this,3,false,[false]] call BIS_fnc_param; -_override = [_this,4,false,[false]] call BIS_fnc_param; -_toUniform = [_this,5,false,[false]] call BIS_fnc_param; //Manual override to send items specifically to a uniform. -_toVest = [_this,6,false,[false]] call BIS_fnc_param; //Manual override to send items specifically to a vest -_preview = [_this,7,false,[true]] call BIS_fnc_param; - -//Some checks -if(EQUAL(_item,"")) exitWith {}; -_isgun = false; - -_details = [_item] call life_fnc_fetchCfgDetails; -if(EQUAL(count _details,0)) exitWith {}; - -if(_bool) then { - switch((_details select 6)) do { - case CONFIG_GLASSES: { - if(_toUniform) exitWith {player addItemToUniform _item;}; - if(_toVest) exitWith {player addItemToVest _item;}; - - if(_ispack) then { - player addItemToBackpack _item; - } else { - if(_override) then { - player addItem _item; - } else { - if(!(EQUAL(goggles player,""))) then { - removeGoggles player; - }; - player addGoggles _item; - }; - }; - }; - - case CONFIG_VEHICLES: { - if(!(EQUAL(backpack player,""))) then { - _items = (backpackItems player); - removeBackpack player; - }; - - player addBackpack _item; - clearAllItemsFromBackpack player; - - if(!isNil {_items}) then { - {[_x,true,true,false,true] call life_fnc_handleItem; } foreach _items; - }; - }; - - case CONFIG_MAGAZINES: { - if(_toUniform) exitWith {player addItemToUniform _item;}; - if(_toVest) exitWith {player addItemToVest _item;}; - if(_ispack) exitWith {player addItemToBackpack _item;}; - - player addMagazine _item; - }; - - case CONFIG_WEAPONS: { - //New addition - if(_toUniform) exitWith {player addItemToUniform _item;}; - if(_toVest) exitWith {player addItemToVest _item;}; - if(_ispack) exitWith {player addItemToBackpack _item;}; - - if((SEL(_details,4)) in [1,2,4,5,4096]) then { - if(EQUAL(SEL(_details,4),4096)) then { - if(EQUAL(SEL(_details,5),-1)) then { - _isgun = true; - }; - } else { - _isgun = true; - }; - }; - - if(_isgun) then { - if(!_ispack && _override) exitWith {}; //It was in the vest/uniform, try to close to prevent it overriding stuff... (Actual weapon and not an item) - if(EQUAL(_item,"MineDetector")) then { - player addItem _item; - } else { - player addWeapon _item; - }; - } else { - switch(SEL(_details,5)) do { - case 0: { - if(_ispack) then { - player addItemToBackpack _item; - } else { - if(_override) then { - player addItem _item; - } else { - if(_item in (assignedItems player)) then { - player addItem _item; - } else { - player addItem _item; - player assignItem _item; - }; - }; - }; - }; - - case 605: { - if(_ispack) then{ - player addItemToBackpack _item; - } else { - if(_override) then { - player addItem _item; - } else { - if(EQUAL(headGear player,_item)) then{ - player addItem _item; - } else { - if(!(EQUAL(headGear player,""))) then {removeHeadGear player;}; - player addHeadGear _item; - }; - }; - }; - }; - - case 801: { - if(_ispack) then { - player addItemToBackpack _item; - } else { - if(_override) then { - player addItem _item; - } else { - if(player isKindOf "Civilian") then { - if(EQUAL(uniform player,_item) && {!_preview}) then { - player addItem _item; - } else { - if(!(EQUAL(uniform player,""))) then { - _items = uniformItems player; - removeUniform player; - }; - - player addUniform _item; - if(!isNil "_items") then { - {player addItemToUniform _x} foreach _items; - }; - }; - } else { - if(!(EQUAL(uniform player,""))) then { - _items = uniformItems player; - removeUniform player; - }; - - if(!(player isUniformAllowed _item)) then { - player forceAddUniform _item; - } else { - player addUniform _item; - }; - if(!isNil "_items") then { - {player addItemToUniform _x} foreach _items; - }; - }; - }; - }; - }; - - case 701: { - if(_ispack) then { - player addItemToBackpack _item; - } else { - if(_override) then{ - player addItem _item; - } else { - if(EQUAL(vest player,_item)) then { - player addItem _item; - } else { - if(!(EQUAL(vest player,""))) then { - _items = vestItems player; - removeVest player; - }; - - player addVest _item; - - if(!isNil {_items}) then { - {[_x,true,false,false,true] spawn life_fnc_handleItem;} foreach _items; - }; - }; - }; - }; - }; - - case 201: { - if(_ispack) then { - player addItemToBackpack _item; - } else { - private "_type"; - _type = [_item,201] call life_fnc_accType; - if(_ongun) then { - switch (_type) do { - case 1: { player addPrimaryWeaponItem _item; }; - case 2: { player addSecondaryWeaponItem _item; }; - case 3: { player addHandgunItem _item; }; - }; - } else { - if(_override) then { - player addItem _item; - } else { - private["_wepItems","_action","_slotTaken"]; - _wepItems = switch(_type) do {case 1:{RIFLE_ITEMS}; case 2:{secondaryWeaponItems player}; case 3:{PISTOL_ITEMS}; default {["","",""]};}; - _slotTaken = false; - - if(!(EQUAL(SEL(_wepItems,2),""))) then {_slotTaken = true;}; - - if(_slotTaken) then { - _action = [localize "STR_MISC_AttachmentMSG",localize "STR_MISC_Attachment",localize "STR_MISC_Weapon",localize "STR_MISC_Inventory"] call BIS_fnc_guiMessage; - if(_action) then { - switch(_type) do { - case 1: {player addPrimaryWeaponItem _item;}; - case 2: {player addSecondaryWeaponItem _item;}; - case 3: {player addHandgunItem _item;}; - default {player addItem _item;}; - }; - } else { - player addItem _item; //Add it to any available container - }; - } else { - switch(_type) do { - case 1: {player addPrimaryWeaponItem _item;}; - case 2: {player addSecondaryWeaponItem _item;}; - case 3: {player addHandgunItem _item;}; - default {player addItem _item;}; - }; - }; - }; - }; - }; - }; - - case 301: { - if(_ispack) then { - player addItemToBackpack _item; - } else { - private "_type"; - _type = [_item,301] call life_fnc_accType; - - if(_ongun) then { - switch (_type) do { - case 1: { player addPrimaryWeaponItem _item; }; - case 2: { player addSecondaryWeaponItem _item; }; - case 3: { player addHandgunItem _item; }; - }; - } else { - if(_override) then { - player addItem _item; - } else { - private["_wepItems","_action","_slotTaken"]; - _wepItems = switch(_type) do {case 1:{RIFLE_ITEMS}; case 2:{secondaryWeaponItems player}; case 3:{PISTOL_ITEMS}; default {["","",""]};}; - _slotTaken = false; - - if(!(EQUAL(SEL(_wepItems,1),""))) then {_slotTaken = true;}; - - if(_slotTaken) then { - _action = [localize "STR_MISC_AttachmentMSG",localize "STR_MISC_Attachment",localize "STR_MISC_Weapon",localize "STR_MISC_Inventory"] call BIS_fnc_guiMessage; - if(_action) then { - switch(_type) do { - case 1: {player addPrimaryWeaponItem _item;}; - case 2: {player addSecondaryWeaponItem _item;}; - case 3: {player addHandgunItem _item;}; - default {player addItem _item;}; - }; - } else { - player addItem _item; //Add it to any available container - }; - } else { - switch(_type) do { - case 1: {player addPrimaryWeaponItem _item;}; - case 2: {player addSecondaryWeaponItem _item;}; - case 3: {player addHandgunItem _item;}; - default {player addItem _item;}; - }; - }; - }; - }; - }; - }; - - case 101:{ - if(_ispack) then { - player addItemToBackpack _item; - } else { - private "_type"; - _type = [_item,101] call life_fnc_accType; - - if(_ongun) then { - switch (_type) do { - case 1: { player addPrimaryWeaponItem _item; }; - case 2: { player addSecondaryWeaponItem _item; }; - case 3: { player addHandgunItem _item; }; - }; - } else { - if(_override) then { - player addItem _item; - } else { - private["_wepItems","_action","_slotTaken"]; - _wepItems = switch(_type) do {case 1:{RIFLE_ITEMS}; case 2:{secondaryWeaponItems player}; case 3:{PISTOL_ITEMS}; default {["","",""]};}; - _slotTaken = false; - - if(!(EQUAL(SEL(_wepItems,0),""))) then {_slotTaken = true;}; - - if(_slotTaken) then { - _action = [localize "STR_MISC_AttachmentMSG",localize "STR_MISC_Attachment",localize "STR_MISC_Weapon",localize "STR_MISC_Inventory"] call BIS_fnc_guiMessage; - if(_action) then { - switch(_type) do { - case 1: {player addPrimaryWeaponItem _item;}; - case 2: {player addSecondaryWeaponItem _item;}; - case 3: {player addHandgunItem _item;}; - default {player addItem _item;}; - }; - } else { - player addItem _item; //Add it to any available container - }; - } else { - switch(_type) do { - case 1: {player addPrimaryWeaponItem _item;}; - case 2: {player addSecondaryWeaponItem _item;}; - case 3: {player addHandgunItem _item;}; - default {player addItem _item;}; - }; - }; - }; - }; - }; - }; - - case 621: { - if(_ispack) then { - player addItemToBackpack _item; - } else { - if(_override) then { - player addItem _item; - } else { - player addItem _item; - player assignItem _item; - }; - }; - }; - - case 616: { - if(_ispack) then { - player addItemToBackpack _item; - } else { - if(_override) then { - player addItem _item; - } else { - player addItem _item; - player assignItem _item; - }; - }; - }; - - default { - if(_ispack) then { - player addItemToBackpack _item; - } else { - player addItem _item; - }; - }; - }; - }; - }; - }; -} else { - switch(SEL(_details,6)) do { - case CONFIG_VEHICLES: { - removeBackpack player; - }; - - case CONFIG_MAGAZINES: { - player removeMagazine _item; - }; - - case CONFIG_GLASSES: { - if(EQUAL(_item,goggles player)) then { - removeGoggles player; - } else { - player removeItem _item; - }; - }; - - case CONFIG_WEAPONS: { - if(SEL(_details,4) in [1,2,4,5,4096]) then { - if(EQUAL(SEL(_details,4),4096)) then { - if(EQUAL(SEL(_details,5),1)) then { - _isgun = true; - }; - } else { - _isgun = true; - }; - }; - - if(_isgun) then { - switch(true) do { - case (EQUAL(RIFLE,_item)) : {_ispack = false;}; - case (EQUAL(LAUNCHER,_item)) : {_ispack = false;}; - case (EQUAL(PISTOL,_item)) : {_ispack = false;}; - case (_item in assignedItems player) : {_ispack = false;}; - default {_ispack = true;}; - }; - - if(_item == "MineDetector") then { - player removeItem _item; - } else { - - //Lovely code provided by [OCB]Dash - private "_tmpfunction"; - _tmpfunction = { - private["_tWeapons","_tWeaponCount"]; - switch(true) do { - case (_this in (uniformItems player)): { - _tWeapons = (getWeaponCargo (uniformContainer player)) select 0; - _tWeaponCount = (getWeaponCargo (uniformContainer player)) select 1; - - clearWeaponCargo (uniformContainer player); - { - _numVestWeps = _tWeaponCount select _forEachIndex; - if(_x == _this) then - { - _numVestWeps = _numVestWeps - 1; - }; - (uniformContainer player) addWeaponCargo [ _x,_numVestWeps]; - }forEach _tWeapons; - }; - - case (_this in (vestItems player)): { - _tWeapons = (getWeaponCargo (vestContainer player)) select 0; - _tWeaponCount = (getWeaponCargo (vestContainer player)) select 1; - - clearWeaponCargo (vestContainer player); - { - _numVestWeps = _tWeaponCount select _forEachIndex; - if(_x == _this) then - { - _numVestWeps = _numVestWeps - 1; - }; - (vestContainer player) addWeaponCargo [ _x,_numVestWeps]; - }forEach _tWeapons; - }; - - case (_this in (backpackItems player)): { - _tWeapons = (getWeaponCargo (backpackContainer player)) select 0; - _tWeaponCount = (getWeaponCargo (backpackContainer player)) select 1; - - clearWeaponCargo (backpackContainer player); - { - _numVestWeps = _tWeaponCount select _forEachIndex; - if(_x == _this) then - { - _numVestWeps = _numVestWeps - 1; - }; - (backpackContainer player) addWeaponCargo [ _x,_numVestWeps]; - }forEach _tWeapons; - }; - }; - }; - - if(_ispack) then { - _item call _tmpfunction; - } else { - switch(true) do { - case (_item in (uniformItems player)): {_item call _tmpfunction;}; - case (_item in (vestItems player)) : {_item call _tmpfunction;}; - case (_item in (backpackItems player)) : {_item call _tmpfunction;}; - default {player removeWeapon _item;}; - }; - }; - }; - } else { - switch(SEL(_details,5)) do { - case 0: {player unassignItem _item; player removeItem _item;}; - case 605: {if(EQUAL(headGear player,_item)) then {removeHeadgear player} else {player removeItem _item};}; - case 801: {if(EQUAL(uniform player,_item)) then {removeUniform player} else {player removeItem _item};}; - case 701: {if(EQUAL(vest player,_item)) then {removeVest player} else {player removeItem _item};}; - case 621: {player unassignItem _item; player removeItem _item;}; - case 616: {player unassignItem _item; player removeItem _item;}; - default { - switch (true) do { - case (_item in RIFLE_ITEMS) : {player removePrimaryWeaponItem _item;}; - case (_item in PISTOL_ITEMS) : {player removeHandgunItem _item;}; - default {player removeItem _item;}; - }; - }; - }; - }; - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_hudSetup.sqf b/Altis_Life.Altis/core/functions/fn_hudSetup.sqf deleted file mode 100644 index d3374cfe..00000000 --- a/Altis_Life.Altis/core/functions/fn_hudSetup.sqf +++ /dev/null @@ -1,27 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_hudSetup.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Setups the hud for the player? -*/ -private["_alpha","_version","_p","_pg"]; -disableSerialization; -_alpha = CONTROL(46,1001); -_version = CONTROL(46,1000); - -2 cutRsc ["playerHUD","PLAIN"]; -_version ctrlSetText format["BETA: 0.%1.%2",(productVersion select 2),(productVersion select 3)]; -[] call life_fnc_hudUpdate; - -[] spawn -{ - private["_dam"]; - while {true} do - { - _dam = damage player; - waitUntil {(damage player) != _dam}; - [] call life_fnc_hudUpdate; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_hudUpdate.sqf b/Altis_Life.Altis/core/functions/fn_hudUpdate.sqf deleted file mode 100644 index 4a788022..00000000 --- a/Altis_Life.Altis/core/functions/fn_hudUpdate.sqf +++ /dev/null @@ -1,27 +0,0 @@ -#include "..\..\script_macros.hpp" -#define IDC_LIFE_BAR_FOOD 2200 -#define IDC_LIFE_BAR_WATER 2201 -#define IDC_LIFE_BAR_HEALTH 2202 -#define IDC_LIFE_FOOD_TEXT 1000 -#define IDC_LIFE_WATER_TEXT 1001 -#define IDC_LIFE_HEALTH_TEXT 1002 - -#define LIFEdisplay (GVAR_UINS ["playerHUD",displayNull]) -#define LIFEctrl(ctrl) ((GVAR_UINS ["playerHUD",displayNull]) displayCtrl ctrl) -/* - File: fn_hudUpdate.sqf - Author: Dillon "Itsyuka" Modine-Thuen - - Description: - Updates the HUD when it needs to. -*/ -disableSerialization; - -if(isNull LIFEdisplay) then {[] call life_fnc_hudSetup;}; -LIFEctrl(IDC_LIFE_BAR_FOOD) progressSetPosition (1 / (100 / life_hunger)); -LIFEctrl(IDC_LIFE_BAR_WATER) progressSetPosition (1 / (100 / life_thirst)); -LIFEctrl(IDC_LIFE_BAR_HEALTH) progressSetPosition (1 - (damage player)); - -LIFEctrl(IDC_LIFE_FOOD_TEXT) ctrlsetText format["%1", life_hunger]; -LIFEctrl(IDC_LIFE_WATER_TEXT) ctrlsetText format["%1", life_thirst]; -LIFEctrl(IDC_LIFE_HEALTH_TEXT) ctrlsetText format["%1", round((1 - (damage player)) * 100)]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_inString.sqf b/Altis_Life.Altis/core/functions/fn_inString.sqf deleted file mode 100644 index 4fa3ea6f..00000000 --- a/Altis_Life.Altis/core/functions/fn_inString.sqf +++ /dev/null @@ -1,28 +0,0 @@ -/* - Author: Killzone_Kid - - Description: - Find a string within a string (case insensitive) - - Parameter(s): - _this select 0: string to be found - _this select 1: string to search in - - Returns: - BooLean (true when string is found) -*/ -private ["_needle","_haystack","_needleLen","_hay","_found"]; -_needle = [_this, 0, "", [""]] call BIS_fnc_param; -_haystack = toArray ([_this, 1, "", [""]] call BIS_fnc_param); -_needleLen = count toArray _needle; -_hay = +_haystack; -_hay resize _needleLen; -_found = false; - -for "_i" from _needleLen to count _haystack do { - if (toString _hay == _needle) exitWith {_found = true}; - _hay set [_needleLen, _haystack select _i]; - _hay set [0, "x"]; - _hay = _hay - ["x"] -}; -_found \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_inventoryClosed.sqf b/Altis_Life.Altis/core/functions/fn_inventoryClosed.sqf deleted file mode 100644 index bde07199..00000000 --- a/Altis_Life.Altis/core/functions/fn_inventoryClosed.sqf +++ /dev/null @@ -1,25 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Used for syncing house container data but when the inventory menu - is closed a sync request is sent off to the server. -*/ -private "_container"; -_container = param [1,ObjNull,[ObjNull]]; -if(isNull _container) exitWith {}; //MEH - -if((typeOf _container) in ["Box_IND_Grenades_F","B_supplyCrate_F"]) exitWith { - _house = lineIntersectsWith [visiblePositionASL player, ATLtoASL screenToWorld[0.5,0.5]]; - - switch(true) do { - case (EQUAL(count _house,0)): {_exit = true;}; - case (EQUAL(count _house,1)): {_house = _house select 0;}; - default { - {if(_x isKindOf "House_F") exitWith {_house = _x;};} foreach _house; - }; - }; - if(!isNil "_exit" OR !(_house isKindOf "House_F")) exitWith {systemChat localize "STR_House_ContainerError"}; - [_house] remoteExecCall ["TON_fnc_updateHouseContainers",RSERV]; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_inventoryOpened.sqf b/Altis_Life.Altis/core/functions/fn_inventoryOpened.sqf deleted file mode 100644 index b2723257..00000000 --- a/Altis_Life.Altis/core/functions/fn_inventoryOpened.sqf +++ /dev/null @@ -1,40 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - For the mean time it blocks the player from opening another persons backpack -*/ -private["_container","_unit"]; -if(EQUAL(count _this,1)) exitWith {false}; -_unit = SEL(_this,0); -_container = SEL(_this,1); - -_isPack = FETCH_CONFIG2(getNumber,CONFIG_VEHICLES,typeOf _container,"isBackpack"); -if(EQUAL(_isPack,1)) exitWith { - hint localize "STR_MISC_Backpack"; - true; -}; - -if((typeOf _container) in ["Box_IND_Grenades_F","B_supplyCrate_F"]) exitWith { - _house = nearestBuilding (getPosATL player); - if(!(_house in life_vehicles) && {(_house GVAR ["locked",false])}) exitWith { - hint localize "STR_House_ContainerDeny"; - true; - }; -}; - -private "_list"; -_list = ["LandVehicle","Ship","Air"]; -if(KINDOF_ARRAY(_container,_list)) exitWith { - if(!(_container in life_vehicles) && {EQUAL((locked _container),2)}) exitWith { - hint localize "STR_MISC_VehInventory"; - true; - }; -}; - -//Allow alive players who've been knocked out to be looted, just not the dead ones -if(_container isKindOf "Man" && !alive _container) exitWith { - hint localize "STR_NOTF_NoLootingPerson"; - true; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_isUIDActive.sqf b/Altis_Life.Altis/core/functions/fn_isUIDActive.sqf deleted file mode 100644 index cf3262c0..00000000 --- a/Altis_Life.Altis/core/functions/fn_isUIDActive.sqf +++ /dev/null @@ -1,20 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_isUIDActive.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Sees if the UID passed to it is in the server. - - Returns: - True if there was a match, false if not in server. -*/ -private["_uid","_ret"]; -_uid = [_this,0,"",[""]] call BIS_fnc_param; -if(EQUAL(_uid,"")) exitWith {false}; //Bad UID -_ret = false; -{ - if(isPlayer _x && {EQUAL(getPlayerUID _x,_uid)}) exitWith {_ret = true;}; -} foreach playableUnits; - -_ret; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_isnumeric.sqf b/Altis_Life.Altis/core/functions/fn_isnumeric.sqf deleted file mode 100644 index a115294c..00000000 --- a/Altis_Life.Altis/core/functions/fn_isnumeric.sqf +++ /dev/null @@ -1,22 +0,0 @@ -/* - File: fn_isnumeric.sqf - Author: I can't remember if I did it or Kronzsky - - Description: - Checks a string to make sure it is in numeric format. -*/ -private["_valid","_value","_compare"]; -_value = _this select 0; -_valid = ["0","1","2","3","4","5","6","7","8","9"]; -_array = [_value] call KRON_StrToArray; -_return = true; - -{ - if(_x in _valid) then - {} - else - { - _return = false; - }; -} foreach _array; -_return; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_keyHandler.sqf b/Altis_Life.Altis/core/functions/fn_keyHandler.sqf deleted file mode 100644 index 7e885a71..00000000 --- a/Altis_Life.Altis/core/functions/fn_keyHandler.sqf +++ /dev/null @@ -1,245 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_keyHandler.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Main key handler for event 'keyDown' -*/ -private ["_handled","_shift","_alt","_code","_ctrl","_alt","_ctrlKey","_veh","_locked","_interactionKey","_mapKey","_interruptionKeys"]; -_ctrl = SEL(_this,0); -_code = SEL(_this,1); -_shift = SEL(_this,2); -_ctrlKey = SEL(_this,3); -_alt = SEL(_this,4); -_speed = speed cursorTarget; -_handled = false; - -_interactionKey = if((EQUAL(count (actionKeys "User10"),0))) then {219} else {(actionKeys "User10") select 0}; -_mapKey = SEL(actionKeys "ShowMap",0); -//hint str _code; -_interruptionKeys = [17,30,31,32]; //A,S,W,D - -//Vault handling... -if((_code in (actionKeys "GetOver") || _code in (actionKeys "salute")) && {(player GVAR ["restrained",false])}) exitWith { - true; -}; - -if(life_action_inUse) exitWith { - if(!life_interrupted && _code in _interruptionKeys) then {life_interrupted = true;}; - _handled; -}; - -//Hotfix for Interaction key not being able to be bound on some operation systems. -if(!(EQUAL(count (actionKeys "User10"),0)) && {(inputAction "User10" > 0)}) exitWith { - //Interaction key (default is Left Windows, can be mapped via Controls -> Custom -> User Action 10) - if(!life_action_inUse) then { - [] spawn { - private "_handle"; - _handle = [] spawn life_fnc_actionKeyHandler; - waitUntil {scriptDone _handle}; - life_action_inUse = false; - }; - }; - true; -}; - -switch (_code) do { - //Space key for Jumping - case 57: { - if(isNil "jumpActionTime") then {jumpActionTime = 0;}; - if(_shift && {!(EQUAL(animationState player,"AovrPercMrunSrasWrflDf"))} && {isTouchingGround player} && {EQUAL(stance player,"STAND")} && {speed player > 2} && {!life_is_arrested} && {SEL((velocity player),2) < 2.5} && {time - jumpActionTime > 1.5}) then { - jumpActionTime = time; //Update the time. - [player,true] spawn life_fnc_jumpFnc; //Local execution - [player,false] remoteExec ["life_fnc_jumpFnc",RANY]; //Global execution - _handled = true; - }; - }; - - //Map Key - case _mapKey: { - switch (playerSide) do { - case west: {if(!visibleMap) then {[] spawn life_fnc_copMarkers;}}; - case independent: {if(!visibleMap) then {[] spawn life_fnc_medicMarkers;}}; - }; - }; - - //Holster / recall weapon. - case 35: { - if(_shift && !_ctrlKey && !(EQUAL(currentWeapon player,""))) then { - life_curWep_h = currentWeapon player; - player action ["SwitchWeapon", player, player, 100]; - player switchCamera cameraView; - }; - - if(!_shift && _ctrlKey && !isNil "life_curWep_h" && {!(EQUAL(life_curWep_h,""))}) then { - if(life_curWep_h in [RIFLE,LAUNCHER,PISTOL]) then { - player selectWeapon life_curWep_h; - }; - }; - }; - - //Interaction key (default is Left Windows, can be mapped via Controls -> Custom -> User Action 10) - case _interactionKey: { - if(!life_action_inUse) then { - [] spawn { - private "_handle"; - _handle = [] spawn life_fnc_actionKeyHandler; - waitUntil {scriptDone _handle}; - life_action_inUse = false; - }; - }; - }; - - //Restraining (Shift + R) - case 19: { - if(_shift) then {_handled = true;}; - if(_shift && playerSide == west && {!isNull cursorTarget} && {cursorTarget isKindOf "Man"} && {(isPlayer cursorTarget)} && {(side cursorTarget in [civilian,independent])} && {alive cursorTarget} && {cursorTarget distance player < 3.5} && {!(cursorTarget GVAR "Escorting")} && {!(cursorTarget GVAR "restrained")} && {speed cursorTarget < 1}) then { - [] call life_fnc_restrainAction; - }; - }; - - //Knock out, this is experimental and yeah... - case 34: { - if(_shift) then {_handled = true;}; - if(_shift && playerSide == civilian && !isNull cursorTarget && cursorTarget isKindOf "Man" && isPlayer cursorTarget && alive cursorTarget && cursorTarget distance player < 4 && speed cursorTarget < 1) then { - if((animationState cursorTarget) != "Incapacitated" && (currentWeapon player == primaryWeapon player OR currentWeapon player == handgunWeapon player) && currentWeapon player != "" && !life_knockout && !(player getVariable["restrained",false]) && !life_istazed) then { - [cursorTarget] spawn life_fnc_knockoutAction; - }; - }; - }; - - //T Key (Trunk) - case 20: { - if(!_alt && !_ctrlKey && !dialog && {!life_action_inUse}) then { - if(vehicle player != player && alive vehicle player) then { - if((vehicle player) in life_vehicles) then { - [vehicle player] call life_fnc_openInventory; - }; - } else { - private "_list"; - _list = ["landVehicle","Air","Ship","House_F"]; - if(KINDOF_ARRAY(cursorTarget,_list) && {player distance cursorTarget < 7} && {vehicle player == player} && {alive cursorTarget} && {!life_action_inUse}) then { - if(cursorTarget in life_vehicles OR {!(cursorTarget GVAR ["locked",true])}) then { - [cursorTarget] call life_fnc_openInventory; - }; - }; - }; - }; - }; - //L Key? - case 38: { - //If cop run checks for turning lights on. - if(_shift && playerSide in [west,independent]) then { - if(vehicle player != player && (typeOf vehicle player) in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F"]) then { - if(!isNil {vehicle player GVAR "lights"}) then { - if(playerSide == west) then { - [vehicle player] call life_fnc_sirenLights; - } else { - [vehicle player] call life_fnc_medicSirenLights; - }; - _handled = true; - }; - }; - }; - - if(!_alt && !_ctrlKey) then { [] call life_fnc_radar; }; - }; - - //Y Player Menu - case 21: { - if(!_alt && !_ctrlKey && !dialog && {!life_action_inUse}) then { - [] call life_fnc_p_openMenu; - }; - }; - - //F Key - case 33: { - if(playerSide in [west,independent] && {vehicle player != player} && {!life_siren_active} && {((driver vehicle player) == player)}) then { - [] spawn { - life_siren_active = true; - sleep 4.7; - life_siren_active = false; - }; - - _veh = vehicle player; - if(isNil {_veh GVAR "siren"}) then {_veh SVAR ["siren",false,true];}; - if((_veh GVAR "siren")) then { - titleText [localize "STR_MISC_SirensOFF","PLAIN"]; - _veh SVAR ["siren",false,true]; - } else { - titleText [localize "STR_MISC_SirensON","PLAIN"]; - _veh SVAR ["siren",true,true]; - if(playerSide == west) then { - [_veh] remoteExec ["life_fnc_copSiren",RCLIENT]; - } else { - //I do not have a custom sound for this and I really don't want to go digging for one, when you have a sound uncomment this and change medicSiren.sqf in the medical folder. - //[_veh] remoteExec ["life_fnc_medicSiren",RCLIENT]; - }; - }; - }; - }; - - //O Key - case 24: { - if(_shift) then { - if (soundVolume != 1) then { - 1 fadeSound 1; - systemChat localize "STR_MISC_soundnormal"; - } else { - 1 fadeSound 0.1; - systemChat localize "STR_MISC_soundfade"; - }; - }; - }; - - //U Key - case 22: { - if(!_alt && !_ctrlKey) then { - if(vehicle player == player) then { - _veh = cursorTarget; - } else { - _veh = vehicle player; - }; - - if(_veh isKindOf "House_F" && {playerSide == civilian}) then { - if(_veh in life_vehicles && player distance _veh < 8) then { - _door = [_veh] call life_fnc_nearestDoor; - if(EQUAL(_door,0)) exitWith {hint localize "STR_House_Door_NotNear"}; - _locked = _veh GVAR [format["bis_disabled_Door_%1",_door],0]; - - if(EQUAL(_locked,0)) then { - _veh SVAR [format["bis_disabled_Door_%1",_door],1,true]; - _veh animate [format["door_%1_rot",_door],0]; - systemChat localize "STR_House_Door_Lock"; - } else { - _veh SVAR [format["bis_disabled_Door_%1",_door],0,true]; - _veh animate [format["door_%1_rot",_door],1]; - systemChat localize "STR_House_Door_Unlock"; - }; - }; - } else { - _locked = locked _veh; - if(_veh in life_vehicles && player distance _veh < 8) then { - if(EQUAL(_locked,2)) then { - if(local _veh) then { - _veh lock 0; - } else { - [_veh,0] remoteExecCall ["life_fnc_lockVehicle",_veh]; - }; - systemChat localize "STR_MISC_VehUnlock"; - } else { - if(local _veh) then { - _veh lock 2; - } else { - [_veh,2] remoteExecCall ["life_fnc_lockVehicle",_veh]; - }; - systemChat localize "STR_MISC_VehLock"; - }; - }; - }; - }; - }; -}; - -_handled; diff --git a/Altis_Life.Altis/core/functions/fn_loadDeadGear.sqf b/Altis_Life.Altis/core/functions/fn_loadDeadGear.sqf deleted file mode 100644 index 0d25f1f1..00000000 --- a/Altis_Life.Altis/core/functions/fn_loadDeadGear.sqf +++ /dev/null @@ -1,64 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_loadDeadGear.sqf - Author: Bryan "Tonic" Boardwine - - Description: - BLAH -*/ -private["_allowedItems","_loadout","_primary","_launcher","_handgun","_magazines","_uniform","_vest","_backpack","_items","_primitems","_secitems","_handgunitems","_uitems","_vitems","_bitems","_handle"]; -_loadout = [_this,0,[],[[]]] call BIS_fnc_param; - -_primary = SEL(_loadout,0); -_launcher = SEL(_loadout,1); -_handgun = SEL(_loadout,2); -_magazines = SEL(_loadout,3); -_uniform = SEL(_loadout,4); -_vest = SEL(_loadout,5); -_backpack = SEL(_loadout,6); -_items = SEL(_loadout,7); -_primitems = SEL(_loadout,8); -_secitems = SEL(_loadout,9); -_handgunitems = SEL(_loadout,10); -_uitems = SEL(_loadout,11); -_vitems = SEL(_loadout,12); -_bitems = SEL(_loadout,13); -_headgear = SEL(_loadout,14); -_goggles = SEL(_loadout,15); - -//Strip the unit down -RemoveAllWeapons player; -{player removeMagazine _x;} foreach (magazines player); -removeUniform player; -removeVest player; -removeBackpack player; -removeGoggles player; -removeHeadGear player; -{ - player unassignItem _x; - player removeItem _x; -} foreach (assignedItems player); - -//Add the gear -if(!(EQUAL(_uniform,""))) then {_handle = [_uniform,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};}; -if(!(EQUAL(_vest,""))) then {_handle = [_vest,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};}; -if(!(EQUAL(_backpack,""))) then {_handle = [_backpack,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};}; -{ - _handle = [_x,true,false,false,false] spawn life_fnc_handleItem; - waitUntil {scriptDone _handle}; -} foreach _magazines; - -if(!(EQUAL(_primary,""))) then {[_primary,true,false,false,false] spawn life_fnc_handleItem;}; -if(!(EQUAL(_launcher,""))) then {[_launcher,true,false,false,false] spawn life_fnc_handleItem;}; -if(!(EQUAL(_handgun,""))) then {[_handgun,true,false,false,false] spawn life_fnc_handleItem;}; - -{_handle = [_x,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};} foreach _items; -{[_x,true,false,false,true] call life_fnc_handleItem;} foreach (_uitems); -{[_x,true,false,false,true] call life_fnc_handleItem;} foreach (_vitems); -{[_x,true,true,false,false] call life_fnc_handleItem;} foreach (_bitems); -{[_x,true,false,true,false] call life_fnc_handleItem;} foreach (_primitems); -{[_x,true,false,true,false] call life_fnc_handleItem;} foreach (_secitems); -{[_x,true,false,true,false] call life_fnc_handleItem;} foreach (_handgunitems); - -if(!(EQUAL(_headgear,""))) then {player addHeadGear _headgear}; -if(!(EQUAL(_goggles,""))) then {player addGoggles _goggles}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_loadGear.sqf b/Altis_Life.Altis/core/functions/fn_loadGear.sqf deleted file mode 100644 index a593c212..00000000 --- a/Altis_Life.Altis/core/functions/fn_loadGear.sqf +++ /dev/null @@ -1,93 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_loadGear.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Loads saved civilian gear, this is limited for a reason and that's balance. -*/ -private["_itemArray","_handle"]; -_itemArray = life_gear; -waitUntil {!(isNull (findDisplay 46))}; - -_handle = [] spawn life_fnc_stripDownPlayer; -waitUntil {scriptDone _handle}; - -if(EQUAL(count _itemArray,0)) exitWith { - switch(playerSide) do { - case west: { - [] call life_fnc_copLoadout; - }; - - case civilian: { - [] call life_fnc_civLoadout; - }; - - case independent: { - [] call life_fnc_medicLoadout; - }; - }; -}; - -_itemArray params [ - "_uniform", - "_vest", - "_backpack", - "_goggles", - "_headgear", - ["_items",[]], - "_prim", - "_seco", - ["_uItems",[]], - ["_uMags",[]], - ["_bItems",[]], - ["_bMags",[]], - ["_vItems",[]], - ["_vMags",[]], - ["_pItems",[]], - ["_hItems",[]], - ["_yItems",[]] -]; - -if(!(EQUAL(_goggles,""))) then {_handle = [_goggles,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};}; -if(!(EQUAL(_headgear,""))) then {_handle = [_headgear,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};}; -if(!(EQUAL(_uniform,""))) then {_handle = [_uniform,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};}; -if(!(EQUAL(_vest,""))) then {_handle = [_vest,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};}; -if(!(EQUAL(_backpack,""))) then {_handle = [_backpack,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};}; - -/* Hotfix for losing virtual items on login */ -if(!isNil {SEL(_this,0)}) then { - ADD(life_maxWeight,(round(FETCH_CONFIG2(getNumber,CONFIG_VEHICLES,(backpack player),"maximumload") / 4))); -}; - -{_handle = [_x,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};} foreach _items; - -{player addItemToUniform _x;} foreach (_uItems); -{(uniformContainer player) addItemCargoGlobal [_x,1];} foreach (_uMags); -{player addItemToVest _x;} foreach (_vItems); -{(vestContainer player) addItemCargoGlobal [_x,1];} foreach (_vMags); -{player addItemToBackpack _x;} foreach (_bItems); -{(backpackContainer player) addItemCargoGlobal [_x,1];} foreach (_bMags); -life_maxWeight = 100; - -{ - [true,SEL(_x,0),SEL(_x,1)] call life_fnc_handleInv; -} foreach (_yItems); - -life_maxWeight = 24; -//Primary & Secondary (Handgun) should be added last as magazines do not automatically load into the gun. -if(!(EQUAL(_prim,""))) then {_handle = [_prim,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};}; -if(!(EQUAL(_seco,""))) then {_handle = [_seco,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};}; - -{ - if (!(EQUAL(_x,""))) then { - player addPrimaryWeaponItem _x; - }; -} foreach (_pItems); -{ - if (!(EQUAL(_x,""))) then { - player addHandgunItem _x; - }; -} foreach (_hItems); - -[] call life_fnc_playerSkins; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_mouseHandler.sqf b/Altis_Life.Altis/core/functions/fn_mouseHandler.sqf deleted file mode 100644 index e35979c7..00000000 --- a/Altis_Life.Altis/core/functions/fn_mouseHandler.sqf +++ /dev/null @@ -1,9 +0,0 @@ -/* - File: fn_mouseHandler.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Handles the Z position changes in a mouse. This is specifically for - scrolling while restrained. -*/ -hint str _this; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_nearATM.sqf b/Altis_Life.Altis/core/functions/fn_nearATM.sqf deleted file mode 100644 index 4d3fb997..00000000 --- a/Altis_Life.Altis/core/functions/fn_nearATM.sqf +++ /dev/null @@ -1,18 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Checks if the player is near an ATM object on the map. - - RETURNS: - 0: BOOL (True for yes, false for no) -*/ -private ["_objs","_return"]; -_objs = nearestObjects [player, [], 3]; -_return = false; -{ - if(["atm_",str(_x)] call BIS_fnc_inString) exitWith {_return = true;}; -} foreach _objs; - -_return; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_nearUnits.sqf b/Altis_Life.Altis/core/functions/fn_nearUnits.sqf deleted file mode 100644 index 2311355b..00000000 --- a/Altis_Life.Altis/core/functions/fn_nearUnits.sqf +++ /dev/null @@ -1,22 +0,0 @@ -/* - File: fn_nearUnits.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Checks for units near (human units) - - Returns: - TRUE - Units are near - FALSE - No units near -*/ -private["_faction","_position","_radius","_ret"]; -_faction = [_this,0,sideUnknown,[sideUnknown]] call BIS_fnc_param; -_position = [_this,1,(getPos player),[[]]] call BIS_fnc_param; -_radius = [_this,2,30,[0]] call BIS_fnc_param; -_ret = false; - -//Error check -if(_faction == sideUnknown) exitWith {_ret}; - -_ret = {_x != player && side _x == _faction && alive _x && _position distance _x < _radius} count playableUnits > 0; -_ret; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_nearestDoor.sqf b/Altis_Life.Altis/core/functions/fn_nearestDoor.sqf deleted file mode 100644 index b112c77d..00000000 --- a/Altis_Life.Altis/core/functions/fn_nearestDoor.sqf +++ /dev/null @@ -1,21 +0,0 @@ -/* - Author: Bryan "Tonic" Boardwine - - Description: - Fetches the nearest door of the building the player is looking - at. -*/ -private["_house","_door","_numOfDoors"]; -_house = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -if(isNull _house) exitWith {0}; -if(!(_house isKindOf "House_F")) exitWith {0}; - -_door = 0; -_doors = getNumber(configFile >> "CfgVehicles" >> (typeOf _house) >> "numberOfDoors"); -for "_i" from 1 to _doors do { - _selectionPos = _house selectionPosition format["Door_%1_trigger",_i]; - _worldSpace = _house modelToWorld _selectionPos; - if(player distance _worldSpace < 2.4) exitWith {_door = _i}; -}; - -_door; diff --git a/Altis_Life.Altis/core/functions/fn_numberText.sqf b/Altis_Life.Altis/core/functions/fn_numberText.sqf deleted file mode 100644 index b8f52d57..00000000 --- a/Altis_Life.Altis/core/functions/fn_numberText.sqf +++ /dev/null @@ -1,27 +0,0 @@ -/* - Author: Karel Moricky - - Description: - Convert a number into string (avoiding scientific notation) - - Parameter(s): - _this: NUMBER - - Returns: - STRING -*/ -private ["_number","_mod","_digots","_digitsCount","_modBase","_numberText"]; - -_number = [_this,0,0,[0]] call bis_fnc_param; -_mod = [_this,1,3,[0]] call bis_fnc_param; - -_digits = _number call bis_fnc_numberDigits; -_digitsCount = count _digits - 1; - -_modBase = _digitsCount % _mod; -_numberText = ""; -{ - _numberText = _numberText + str _x; - if ((_foreachindex - _modBase) % (_mod) == 0 && _foreachindex != _digitsCount) then {_numberText = _numberText + ",";}; -} foreach _digits; -_numberText \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_onFired.sqf b/Altis_Life.Altis/core/functions/fn_onFired.sqf deleted file mode 100644 index 51dd9147..00000000 --- a/Altis_Life.Altis/core/functions/fn_onFired.sqf +++ /dev/null @@ -1,21 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Handles various different ammo types being fired. -*/ -private["_ammoType","_projectile"]; -_ammoType = SEL(_this,4); -_projectile = SEL(_this,6); - -if(EQUAL(_ammoType,"GrenadeHand_stone")) then { - _projectile spawn { - private "_position"; - while {!isNull _this} do { - _position = ASLtoATL (visiblePositionASL _this); - sleep 0.1; - }; - [_position] remoteExec ["life_fnc_flashbang",RCLIENT]; - }; -}; diff --git a/Altis_Life.Altis/core/functions/fn_onPutItem.sqf b/Altis_Life.Altis/core/functions/fn_onPutItem.sqf deleted file mode 100644 index a15c517b..00000000 --- a/Altis_Life.Altis/core/functions/fn_onPutItem.sqf +++ /dev/null @@ -1,12 +0,0 @@ -/* - Author: Bryan "Tonic" Boardwine - - Description: - Syncs changes to containers in houses? -*/ -private["_unit","_item","_house","_container"]; -_unit = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -_container = [_this,1,ObjNull,[ObjNull]] call BIS_fnc_param; -_item = [_this,2,"",[""]] call BIS_fnc_param; - -if(isNull _unit OR _item == "") exitWith {}; //Bad thingies? \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_onTakeItem.sqf b/Altis_Life.Altis/core/functions/fn_onTakeItem.sqf deleted file mode 100644 index e021f674..00000000 --- a/Altis_Life.Altis/core/functions/fn_onTakeItem.sqf +++ /dev/null @@ -1,37 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_onTakeItem.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Blocks the unit from taking something they should not have. -*/ -private["_unit","_item"]; -_unit = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -_container = [_this,1,ObjNull,[ObjNull]] call BIS_fnc_param; -_item = [_this,2,"",[""]] call BIS_fnc_param; - -if(isNull _unit OR _item == "") exitWith {}; //Bad thingies? - -switch(playerSide) do -{ - case west: { - if(_item in ["U_Rangemaster"]) then { - [] call life_fnc_playerSkins; - }; - }; - case civilian: { - //Currently stoping the civilians from taking the Rangemaster clothing from medics or cops. - if(_item in ["U_Rangemaster"]) then { - [_item,false,false,false,false] call life_fnc_handleItem; - }; - if(_item in ["U_C_Poloshirt_blue","U_C_Poloshirt_burgundy","U_C_Poloshirt_stripped","U_C_Poloshirt_tricolour","U_C_Poloshirt_salmon","U_C_Poloshirt_redwhite","U_C_Commoner1_1"]) then { - [] call life_fnc_playerSkins; - }; - }; - case independent: { - if(_item in ["U_Rangemaster"]) then { - [] call life_fnc_playerSkins; - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_playerCount.sqf b/Altis_Life.Altis/core/functions/fn_playerCount.sqf deleted file mode 100644 index ba8fe75b..00000000 --- a/Altis_Life.Altis/core/functions/fn_playerCount.sqf +++ /dev/null @@ -1,11 +0,0 @@ -/* - File: fn_playerCount.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Retrieves the amount of players on per side specified. -*/ -private["_faction"]; -_faction = [_this,0,civilian,[independent]] call BIS_fnc_param; - -{side _x == _faction} count playableUnits; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_playerSkins.sqf b/Altis_Life.Altis/core/functions/fn_playerSkins.sqf deleted file mode 100644 index 885d0e56..00000000 --- a/Altis_Life.Altis/core/functions/fn_playerSkins.sqf +++ /dev/null @@ -1,45 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_playerSkins.sqf - Author: Daniel Stuart - - Description: - Sets skins for players by their side and uniform. -*/ -switch(playerSide) do { - case civilian: { - if(EQUAL(LIFE_SETTINGS(getNumber,"civ_skins"),1)) then { - if(uniform player == "U_C_Poloshirt_blue") then { - player setObjectTextureGlobal [0, "textures\civilian_uniform_1.jpg"]; - }; - if(uniform player == "U_C_Poloshirt_burgundy") then { - player setObjectTextureGlobal [0, "textures\civilian_uniform_2.jpg"]; - }; - if(uniform player == "U_C_Poloshirt_stripped") then { - player setObjectTextureGlobal [0, "textures\civilian_uniform_3.jpg"]; - }; - if(uniform player == "U_C_Poloshirt_tricolour") then { - player setObjectTextureGlobal [0, "textures\civilian_uniform_4.jpg"]; - }; - if(uniform player == "U_C_Poloshirt_salmon") then { - player setObjectTextureGlobal [0, "textures\civilian_uniform_5.jpg"]; - }; - if(uniform player == "U_C_Poloshirt_redwhite") then { - player setObjectTextureGlobal [0, "textures\civilian_uniform_6.jpg"]; - }; - if(uniform player == "U_C_Commoner1_1") then { - player setObjectTextureGlobal [0, "textures\civilian_uniform_7.jpg"]; - }; - }; - }; - case west: { - if(uniform player == "U_Rangemaster") then { - player setObjectTextureGlobal [0, "textures\cop_uniform.jpg"]; - }; - }; - case independent: { - if(uniform player == "U_Rangemaster") then { - player setObjectTextureGlobal [0, "textures\medic_uniform.jpg"]; - }; - }; -}; diff --git a/Altis_Life.Altis/core/functions/fn_playerTags.sqf b/Altis_Life.Altis/core/functions/fn_playerTags.sqf deleted file mode 100644 index c0db4448..00000000 --- a/Altis_Life.Altis/core/functions/fn_playerTags.sqf +++ /dev/null @@ -1,73 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_playerTags.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Adds the tags above other players heads when close and have visible range. -*/ -private["_ui","_units"]; -#define iconID 78000 -#define scale 0.8 - -if(visibleMap OR {!alive player} OR {dialog}) exitWith { - 500 cutText["","PLAIN"]; -}; - -_ui = GVAR_UINS ["Life_HUD_nameTags",displayNull]; -if(isNull _ui) then { - 500 cutRsc["Life_HUD_nameTags","PLAIN"]; - _ui = GVAR_UINS ["Life_HUD_nameTags",displayNull]; -}; - -_units = nearestObjects[(visiblePosition player),["Man","Land_Pallet_MilBoxes_F","Land_Sink_F"],50]; - -SUB(_units,[player]); - -{ - private "_text"; - _idc = _ui displayCtrl (iconID + _forEachIndex); - if(!(lineIntersects [eyePos player, eyePos _x, player, _x]) && {!isNil {_x GVAR "realname"}}) then { - _pos = switch(typeOf _x) do { - case "Land_Pallet_MilBoxes_F": {[visiblePosition _x select 0, visiblePosition _x select 1, (getPosATL _x select 2) + 1.5]}; - case "Land_Sink_F": {[visiblePosition _x select 0, visiblePosition _x select 1, (getPosATL _x select 2) + 2]}; - default {[visiblePosition _x select 0, visiblePosition _x select 1, ((_x modelToWorld (_x selectionPosition "head")) select 2)+.5]}; - }; - _sPos = worldToScreen _pos; - _distance = _pos distance player; - if(count _sPos > 1 && {_distance < 15}) then { - _text = switch (true) do { - case (_x in (units grpPlayer) && playerSide == civilian): {format["%1",(_x GVAR ["realname",name _x])];}; - case (!isNil {(_x GVAR "rank")}): {format[" %2",switch ((_x GVAR "rank")) do { - case 2: {"\a3\ui_f\data\gui\cfg\Ranks\corporal_gs.paa"}; - case 3: {"\a3\ui_f\data\gui\cfg\Ranks\sergeant_gs.paa"}; - case 4: {"\a3\ui_f\data\gui\cfg\Ranks\lieutenant_gs.paa"}; - case 5: {"\a3\ui_f\data\gui\cfg\Ranks\captain_gs.paa"}; - case 6: {"\a3\ui_f\data\gui\cfg\Ranks\major_gs.paa"}; - case 7: {"\a3\ui_f\data\gui\cfg\Ranks\colonel_gs.paa"}; - case 8: {"\a3\ui_f\data\gui\cfg\Ranks\general_gs.paa"}; - default {"\a3\ui_f\data\gui\cfg\Ranks\private_gs.paa"}; - },_x GVAR ["realname",name _x]]}; - case ((!isNil {_x GVAR "name"} && playerSide == independent)): {format[" %1",_x GVAR ["name","Unknown Player"]]}; - default { - if(!isNil {(group _x) GVAR "gang_name"}) then { - format["%1
%2",_x GVAR ["realname",name _x],(group _x) GVAR ["gang_name",""]]; - } else { - _x GVAR ["realname",name _x]; - }; - }; - }; - - _idc ctrlSetStructuredText parseText _text; - _idc ctrlSetPosition [_sPos select 0, _sPos select 1, 0.4, 0.65]; - _idc ctrlSetScale scale; - _idc ctrlSetFade 0; - _idc ctrlCommit 0; - _idc ctrlShow true; - } else { - _idc ctrlShow false; - }; - } else { - _idc ctrlShow false; - }; -} foreach _units; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_pullOutVeh.sqf b/Altis_Life.Altis/core/functions/fn_pullOutVeh.sqf deleted file mode 100644 index d7416ecf..00000000 --- a/Altis_Life.Altis/core/functions/fn_pullOutVeh.sqf +++ /dev/null @@ -1,15 +0,0 @@ -/* - File: fn_pullOutVeh.sqf - Author: Bryan "Tonic" Boardwine -*/ -if(playerSide == west OR (vehicle player == player)) exitWith {}; -if(player getVariable "restrained") then -{ - detach player; - player setVariable["Escorting",false,true]; - player setVariable["transporting",false,true]; -}; - -player action ["Eject", vehicle player]; -titleText[localize "STR_NOTF_PulledOut","PLAIN"]; -titleFadeOut 4; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_pushObject.sqf b/Altis_Life.Altis/core/functions/fn_pushObject.sqf deleted file mode 100644 index 194c81b4..00000000 --- a/Altis_Life.Altis/core/functions/fn_pushObject.sqf +++ /dev/null @@ -1,119 +0,0 @@ -// PUSH SCRIPT BY FEINT -// VERSION 1.0 -// © 2013 ALL RIGHTS RESERVED -// TO MODIFY OR COPY FROM THIS FILE - CONTACT JON HILLENBRAND THROUGH HIS WEBSITE - WWW.JONHILLENBRAND.COM - -private ["_caller","_thingToPush","_dir","_speed","_vel","_thingToPushType","_nameOfThingToPush","_textString","_targetDistance","_dist","_relativePosModel","_minSetBoxLimits","_maxSetBoxLimits","_minX","_minY","_minZ","_maxX","_maxY","_maxZ","_xRPM","_yRPM","_zRPM","_thingToPushLimits","_posCaller","_headPos","_headDir"]; -_caller = player; -_thingToPush = cursorTarget; -_posCaller = visiblePosition _caller; -_dir = getDir _caller; -if(!local _thingToPush) exitWith {}; - -// _distanceFromTarget = _caller distance _thingToPush; -_thingToPushType = typeOf _thingToPush; -_nameOfThingToPush = (getText (configFile >> "cfgVehicles" >> (_thingToPushType) >> "displayname")); -// _weightOfThing = (getText (configFile >> "cfgVehicles" >> (_thingToPushType) >> "weight")); - -if (!(isNull _thingToPush) and ((_thingToPush isKindOf "AllVehicles") or (_thingToPush isKindOf "Thing") or (_thingToPush isKindOf "Object") )) -then -{ - - _targetDistance = _caller distance _thingToPush; - - // ***************************** RELATIVE MODEL POSITION CODE**************************************** - - _thingToPushLimits = boundingBox _thingToPush; - - _dist = 2; - - _posCaller = [(_posCaller select 0) + _dist*sin _dir, (_posCaller select 1) + _dist*cos _dir, _posCaller select 2]; - - _relativePosModel = _thingToPush worldToModel _posCaller; - - - // hint format ["Position of _mineHead = %1\nSpawn distance from _mineHead = %2\nPlayer direction = %3\nModel offset = %4\nNearest Ship = %5\nShip Distance = %6\nBounding Box = %7",_pos,_dist,_dir,_relativePosModel,_nearestVehicle,_vehicleDistance,_boxLimits]; - - // boundingBox returns the following [[minX, minY, minZ], [maxX, maxY, maxZ]] - - // boundingBoxReal returns the following [[minX, minZ, minY], [maxX, maxZ, maxY]] - - _minSetBoxLimits = _thingToPushLimits select 0; - _maxSetBoxLimits = _thingToPushLimits select 1; - _minX = _minSetBoxLimits select 0; - _minY = _minSetBoxLimits select 1; - _minZ = _minSetBoxLimits select 2; - _maxX = _maxSetBoxLimits select 0; - _maxY = _maxSetBoxLimits select 1; - _maxZ = _maxSetBoxLimits select 2; - - - // RELATIVE OFFSET POSITION OF _mineHead FROM NEAREST VEHICLE IN MODEL SPACE - _xRPM = _relativePosModel select 0; - _yRPM = _relativePosModel select 1; - _zRPM = _relativePosModel select 2; - - - // hint format ["minX: %1 \nminY: %2 \nminZ: %3 \nmaxX: %4 \nmaxY: %5\nmaxZ: %6 \n_mineHead: %7 , %8 , %9 \n_mineHead: %10",_minX,_minY,_minZ,_maxX,_maxY,_maxZ,_xRPM,_yRPM,_zRPM,_relativePosModel]; - - if (((_xRPM > _minX) and (_xRPM < _maxX) and (_yRPM > _minY) and (_yRPM < _maxY) and (_zRPM > _minZ) and (_zRPM < _maxZ)) or (_targetDistance <= 3.5)) then - - { - - //_textString = format ["Pushing %1",_nameOfThingToPush]; - //6000 cutText [_textString,"PLAIN DOWN",0]; - - - _headPos=screenToWorld [0.5,0.5]; - - _headDir=[ - (_headPos select 0)-(getPos _caller select 0), - (_headPos select 1)-(getPos _caller select 1), - (_headPos select 2)-(getPos _caller select 2) - ]; - - _dir = (_headDir select 0) atan2 (_headDir select 1); - - //_headAngle = (_headDir select 2) atan2 (_headDir select 2); - //if(_headAngle < 0) then {_headAngle = _headAngle + 360}; - - // _thingToPush setDir _dir; - - _speed = 6; - - _vel = velocity _thingToPush; - - - _thingToPush setVelocity - [ - (_vel select 0)+((sin _dir)*_speed), - (_vel select 1)+((cos _dir)*_speed), - 1 - ]; - - // IF OBJECT IS A KIND OF BOAT, THEN SLOW IT DOWN OR IT WILL FLOAT AWAY FOREVER - - if (_thingToPush isKindOf "Ship") then - { - //hint "vehicle is kind of ship...slowing down"; - sleep 1; - _thingToPush setVelocity [0,0,0]; - }; - - } else - { - // _textString = format ["Approach closer to %1, distance is %2",_nameOfThingToPush,_targetDistance]; - // hint format ["weight: %1",_weightOfThing]; - // 6000 cutText [_textString,"PLAIN DOWN",0]; - }; - - - // *****************************RELATIVE MODEL POSITION CODE END************************************ - -} -else -{ - // _textString = format ["Can not push that %1",_nameOfThingToPush]; - // hint format ["weight: %1",_weightOfThing]; - // 6000 cutText [_textString,"PLAIN DOWN",0]; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_receiveItem.sqf b/Altis_Life.Altis/core/functions/fn_receiveItem.sqf deleted file mode 100644 index 38bfe4d7..00000000 --- a/Altis_Life.Altis/core/functions/fn_receiveItem.sqf +++ /dev/null @@ -1,33 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_receiveItem.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Receive an item from a player. -*/ -private["_unit","_val","_item","_from","_diff"]; -_unit = SEL(_this,0); -if(_unit != player) exitWith {}; -_val = SEL(_this,1); -_item = SEL(_this,2); -_from = SEL(_this,3); - -_diff = [_item,(parseNumber _val),life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff; - -if(!(EQUAL(_diff,(parseNumber _val)))) then { - if(([true,_item,_diff] call life_fnc_handleInv)) then { - hint format[localize "STR_MISC_TooMuch_3",_from GVAR ["realname",name _from],_val,_diff,((parseNumber _val) - _diff)]; - [_from,_item,str((parseNumber _val) - _diff),_unit] remoteExecCall ["life_fnc_giveDiff",_from]; - } else { - [_from,_item,_val,_unit,false] remoteExecCall ["life_fnc_giveDiff",_from]; - }; -} else { - if(([true,_item,(parseNumber _val)] call life_fnc_handleInv)) then { - private "_type"; - _type = M_CONFIG(getText,"VirtualItems",_item,"displayName"); - hint format[localize "STR_NOTF_GivenItem",_from GVAR ["realname",name _from],_val,(localize _type)]; - } else { - [_from,_item,_val,_unit,false] remoteExecCall ["life_fnc_giveDiff",_from]; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_receiveMoney.sqf b/Altis_Life.Altis/core/functions/fn_receiveMoney.sqf deleted file mode 100644 index 8e1c7404..00000000 --- a/Altis_Life.Altis/core/functions/fn_receiveMoney.sqf +++ /dev/null @@ -1,22 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_receiveMoney.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Receives money -*/ - -params [ - ["_unit",objNull,[objNull]], - ["_val","",[""]], - ["_from",objNull,[objNull]] -]; - -if(isNull _unit OR isNull _from OR EQUAL(_val,"")) exitWith {}; -if(player != _unit) exitWith {}; -if(!([_val] call TON_fnc_isnumber)) exitWith {}; -if(_unit == _from) exitWith {}; //Bad boy, trying to exploit his way to riches. - -hint format[localize "STR_NOTF_GivenMoney",_from GVAR ["realname",name _from],[(parseNumber (_val))] call life_fnc_numberText]; -ADD(CASH,parseNumber(_val)); \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_revealObjects.sqf b/Altis_Life.Altis/core/functions/fn_revealObjects.sqf deleted file mode 100644 index 90f75f54..00000000 --- a/Altis_Life.Altis/core/functions/fn_revealObjects.sqf +++ /dev/null @@ -1,15 +0,0 @@ -/* - Author: Bryan "Tonic" Boardwine - - Description: - Reveals nearest objects within 15 automatically to help with picking - up various static objects on the ground such as money, water, etc. - - Can be taxing on low-end systems or AMD CPU users. -*/ -private "_objects"; -_objects = nearestObjects[visiblePositionASL player, ["Land_CargoBox_V1_F","Land_BottlePlastic_V1_F","Land_TacticalBacon_F","Land_Can_V3_F","Land_CanisterFuel_F","Land_Money_F","Land_Suitcase_F","Man"], 15]; -{ - player reveal _x; - (group player) reveal _x; -} foreach _objects; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_saveGear.sqf b/Altis_Life.Altis/core/functions/fn_saveGear.sqf deleted file mode 100644 index cae00d53..00000000 --- a/Altis_Life.Altis/core/functions/fn_saveGear.sqf +++ /dev/null @@ -1,159 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_saveGear.sqf - Author: Bryan "Tonic" Boardwine - Full Gear/Y-Menu Save by Vampire - Edited: Itsyuka - - Description: - Saves the players gear for syncing to the database for persistence.. -*/ -private["_return","_uItems","_bItems","_vItems","_pItems","_hItems","_yItems","_uMags","_vMags","_bMags","_pMag","_hMag","_uni","_ves","_bag","_handled"]; -_return = []; - -_return pushBack uniform player; -_return pushBack vest player; -_return pushBack backpack player; -_return pushBack goggles player; -_return pushBack headgear player; -_return pushBack assignedITems player; -if(playerSide == west || playerSide == civilian && {EQUAL(LIFE_SETTINGS(getNumber,"save_civ_weapons"),1)}) then { - _return pushBack RIFLE; - _return pushBack PISTOL; -} else { - _return pushBack []; - _return pushBack []; -}; - -_uItems = []; -_uMags = []; -_bItems = []; -_bMags = []; -_vItems = []; -_vMags = []; -_pItems = []; -_hItems = []; -_yItems = []; -_uni = []; -_ves = []; -_bag = []; - -if(!(EQUAL(uniform player,""))) then { - { - if (_x in (magazines player)) then { - ADD(_uMags,[_x]); - } else { - ADD(_uItems,[_x]); - }; - } forEach (uniformItems player); -}; - -if(!(EQUAL(backpack player,""))) then { - { - if (_x in (magazines player)) then { - ADD(_bMags,[_x]); - } else { - ADD(_bItems,[_x]); - }; - } forEach (backpackItems player); -}; - -if(!(EQUAL(vest player,""))) then { - { - if (_x in (magazines player)) then { - ADD(_vMags,[_x]); - } else { - ADD(_vItems,[_x]); - }; - } forEach (vestItems player); -}; - -if(count (primaryWeaponMagazine player) > 0 && alive player) then { - _pMag = SEL((primaryWeaponMagazine player),0); - - if(!(EQUAL(_pMag,""))) then { - _uni = player canAddItemToUniform _pMag; - _ves = player canAddItemToVest _pMag; - _bag = player canAddItemToBackpack _pMag; - _handled = false; - - if(_ves) then { - ADD(_vMags,[_pMag]); - _handled = true; - }; - - if(_uni && !_handled) then { - ADD(_uMags,[_pMag]); - _handled = true; - }; - - if(_bag && !_handled) then { - ADD(_bMags,[_pMag]); - _handled = true; - }; - }; -}; - -if(count (handgunMagazine player) > 0 && alive player) then { - _hMag = ((handgunMagazine player) select 0); - - if(!(EQUAL(_hMag,""))) then { - _uni = player canAddItemToUniform _hMag; - _ves = player canAddItemToVest _hMag; - _bag = player canAddItemToBackpack _hMag; - _handled = false; - - if(_ves) then { - ADD(_vMags,[_hMag]); - _handled = true; - }; - - if(_uni && !_handled) then { - ADD(_uMags,[_hMag]); - _handled = true; - }; - - if(_bag && !_handled) then { - ADD(_uMags,[_hMag]); - _handled = true; - }; - }; -}; - -if(count (RIFLE_ITEMS) > 0) then { - { - ADD(_pItems,[_x]); - } forEach (primaryWeaponItems player); -}; - -if(count (PISTOL_ITEMS) > 0) then { - { - ADD(_hItems,[_x]); - } forEach (handGunItems player); -}; - -{ - _val = ITEM_VALUE(_x); - if (_val > 0) then { - _yItems pushBack [_x,_val]; - }; -} forEach [ - "pickaxe","fuelEmpty","fuelFull", "spikeStrip", "lockpick", "defuseKit","storageSmall","storageBig","redgull","coffee","waterBottle","apple","peach","tbacon","donuts", - "rabbit","salema","ornate","mackerel","tuna","mullet","catshark","turtleSoup","hen","rooster","sheep","goat" -]; - -_return pushBack _uItems; -_return pushBack _uMags; -_return pushBack _bItems; -_return pushBack _bMags; -_return pushBack _vItems; -_return pushBack _vMags; -_return pushBack _pItems; -_return pushBack _hItems; -if(EQUAL(LIFE_SETTINGS(getNumber,"save_virtualItems"),1)) then { - _return pushBack _yItems; -} else { - _return pushBack []; -}; - -life_gear = _return; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_simDisable.sqf b/Altis_Life.Altis/core/functions/fn_simDisable.sqf deleted file mode 100644 index 9ff90047..00000000 --- a/Altis_Life.Altis/core/functions/fn_simDisable.sqf +++ /dev/null @@ -1,9 +0,0 @@ -/* - File: fn_simDisable.sqf -*/ -private["_obj","_bool"]; -_obj = [_this,0,Objnull,[Objnull]] call BIS_fnc_param; -_bool = [_this,1,false,[false]] call BIS_fnc_param; -if(isNull _obj) exitWith {}; - -_obj enableSimulation _bool; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_stripDownPlayer.sqf b/Altis_Life.Altis/core/functions/fn_stripDownPlayer.sqf deleted file mode 100644 index d152c09a..00000000 --- a/Altis_Life.Altis/core/functions/fn_stripDownPlayer.sqf +++ /dev/null @@ -1,22 +0,0 @@ -/* - File: fn_stripDownPlayer.sqf - Author: Tobias 'Xetoxyc' Sittenauer - - Description: Strip the player down -*/ -RemoveAllWeapons player; -{player removeMagazine _x;} foreach (magazines player); -removeUniform player; -removeVest player; -removeBackpack player; -removeGoggles player; -removeHeadGear player; - -{ - player unassignItem _x; - player removeItem _x; -} foreach (assignedItems player); - -if(hmd player != "") then { - player unlinkItem (hmd player); -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_tazeSound.sqf b/Altis_Life.Altis/core/functions/fn_tazeSound.sqf deleted file mode 100644 index de88e423..00000000 --- a/Altis_Life.Altis/core/functions/fn_tazeSound.sqf +++ /dev/null @@ -1,7 +0,0 @@ -/* - File: fn_tazeSound.sqf -*/ -private["_source"]; -_source = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -if(isNull _source) exitWith {}; -_source say3D "Tazersound"; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/network/fn_MP.sqf b/Altis_Life.Altis/core/functions/network/fn_MP.sqf deleted file mode 100644 index 610ae990..00000000 --- a/Altis_Life.Altis/core/functions/network/fn_MP.sqf +++ /dev/null @@ -1,46 +0,0 @@ -/* - Author: Karel Moricky - - Description: - Send function for remote execution (and executes locally if conditions are met) - - Parameter(s): - 0: ANY - function params - 1: STRING - function name - 2 (Optional): - BOOL - true to execute on every client, false to execute it on server only - OBJECT - the function will be executed only where unit is local [default: everyone] - GROUP - the function will be executed only on client who is member of the group - SIDE - the function will be executed on all players of the given side - NUMBER - the function will be executed only on client with the given ID - ARRAY - array of previous data types - 3 (Optional): BOOL - true for persistent call (will be called now and for every JIP client) [default: false] - - Returns: - ARRAY - sent packet -*/ - -with missionnamespace do { - private ["_params","_functionName","_target","_isPersistent","_isCall","_ownerID"]; - - _params = [_this,0,[]] call bis_fnc_param; - _functionName = [_this,1,"",[""]] call bis_fnc_param; - _target = [_this,2,true,[objnull,true,0,[],sideUnknown,grpnull,""]] call bis_fnc_param; - _isPersistent = false; //Persistent capabilities removed due to I fucking hate that option. - _isCall = [_this,4,false,[false]] call bis_fnc_param; - - //--- Send to server - if(isServer && isDedicated) then { - life_fnc_MP_packet = [0,_params,_functionName,_target,_isPersistent,_isCall,"__SERVER__","__SERVER__"]; - } else { - life_fnc_MP_packet = [0,_params,_functionName,_target,_isPersistent,_isCall,profileName,getPlayerUID player]; - }; - publicvariableserver "life_fnc_MP_packet"; - - //--- Local execution - if !(ismultiplayer) then { - ["life_fnc_MP_packet",life_fnc_MP_packet] call life_fnc_MPexec; - }; - - life_fnc_MP_packet -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/network/fn_MPexec.sqf b/Altis_Life.Altis/core/functions/network/fn_MPexec.sqf deleted file mode 100644 index 8554abdb..00000000 --- a/Altis_Life.Altis/core/functions/network/fn_MPexec.sqf +++ /dev/null @@ -1,162 +0,0 @@ -/* - Author: Karel Moricky - Modified by Tonic for function white-listing. - - Description: - Execute received remote execution - - Parameter(s): - _this select 0: STRING - Packet variable name (always "life_fnc_MP_packet") - _this select 1: ARRAY - Packet value (sent by life_fnc_MP function; see it's description for more details) - - Returns: - BOOL - true if function was executed successfully -*/ -private ["_validFunctions","_params","_functionName","_target","_isPersistent","_isCall","_varName","_varValue","_function","_callerName","_callerUID","_exitScope"]; -_exitScope = false; -_varName = _this select 0; -_varValue = _this select 1; - -_mode = [_varValue,0,[0]] call bis_fnc_param; -_params = [_varValue,1,[]] call bis_fnc_param; -_functionName = [_varValue,2,"",[""]] call bis_fnc_param; -_target = [_varValue,3,true,[ObjNull,true,0,[],sideUnknown,GrpNull,""]] call bis_fnc_param; -_isPersistent = [_varValue,4,false,[false]] call bis_fnc_param; -_isCall = [_varValue,5,false,[false]] call bis_fnc_param; -_callerName = [_varValue,6,"",[""]] call bis_fnc_param; -_callerUID = [_varValue,7,"",[""]] call bis_fnc_param; - -if(!(["life_fnc_",_functionName] call BIS_fnc_inString) && {!(["SPY_fnc_",_functionName] call BIS_fnc_inString)} && {!(["DB_fnc_",_functionName] call BIS_fnc_inString)} && {!(["TON_fnc_",_functionName] call BIS_fnc_inString)} && -{!(toLower(_functionName) in ["bis_fnc_execvm","bis_fnc_effectkilledairdestruction","bis_fnc_effectkilledairdestructionstage2","life_fnc_stripDownPlayer"])} && {!(["SOCK_fnc_",_functionName] call BIS_fnc_inString)}) exitWith {false}; -if(toLower(_functionName) in ["db_fnc_asynccall","db_fnc_mresstring","db_fnc_mresarray","db_fnc_mrestoarray"]) exitWith {false}; - -if(_functionName == "bis_fnc_execvm") then { - _param2 = _params select 1; - if(isNil "_param2") exitWith {_exitScope = true;}; - if(_param2 != "initPlayerServer.sqf") exitWith {_exitScope = true;}; -}; - -if(_callerName == "" OR _callerUID == "") exitWith {}; //NO. - -if(_callerUID != "__SERVER__" && _callerName != "__SERVER__" && toLower(_functionName) in ["spy_fnc_cookiejar","spy_fnc_notifyadmins"]) then { - //Check if the sender & reported UID match, if they don't exit. - if(toLower(_functionName) == "spy_fnc_cookiejar") exitWith { - private["_reportUID"]; - _reportUID = _params select 1; - if(_reportUID != _callerUID) exitWith { - if(isServer && _mode == 0) then { - [_callerName,_callerUID,"false_reports_to_spyglass"] call SPY_fnc_cookieJar; - [[_callerName,"False reporting to SpyGlass (cheater)"],"SPY_fnc_notifyAdmins",true,false] call life_fnc_MP; - }; - _exitScope = true; - }; - }; - //So it's not the cookiejar, let's check the admin notification and make sure the report matches. - private["_reportName"]; - _reportName = _params select 0; - if(_callerName != _reportName) exitWith { - if(isServer && _mode == 0) then { - [_callerName,_callerUID,"false_reports_to_spyglass"] call SPY_fnc_cookieJar; - [[_callerName,"False reporting to SpyGlass (cheater)"],"SPY_fnc_notifyAdmins",true,false] call life_fnc_MP; - }; - _exitScope = true; - }; -}; - -if(toLower(_functionName) == "bis_fnc_endmission") exitWith {false}; //Don't allow BIS_fnc_endMission to be passed. - -if(_exitScope) exitWith {false}; //Blah. -if (ismultiplayer && _mode == 0) then { - if (isserver) then { - if (typename _target == typename []) then { - - //--- Multi execution - { - [_varName,[_mode,_params,_functionName,_x,_isPersistent,_isCall,_callerName,_callerUID]] call life_fnc_MPexec; - } foreach _target; - } else { - - //--- Single execution - private ["_ownerID","_serverID"]; - _serverID = owner (missionnamespace getvariable ["bis_functions_mainscope",objnull]); //--- Server ID is not always 0 - - //--- Server process - switch (typename _target) do { - case (typename objnull): { - _ownerID = owner _target; - }; - case (typename true): { - _ownerID = [_serverID,-1] select _target; - }; - case (typename 0): { - _ownerID = _target; - }; - case (typename grpnull); - case (typename sideUnknown): { - _ownerID = -1; - }; - case (typeName ""): { - _ownerID = -1; - }; - }; - life_fnc_MP_packet = [1,_params,_functionName,_target,_isPersistent,_isCall,"__SERVER__","__SERVER__"]; - - //--- Send to clients - if (_ownerID < 0) then { - //--- Everyone - publicvariable "life_fnc_MP_packet"; - } else { - if (_ownerID != _serverID) then { - //--- Client - _ownerID publicvariableclient "life_fnc_MP_packet"; - }; - }; - - //--- Server execution (for all or server only) - if (_ownerID < 0 || _ownerID == _serverID) then { - ["life_fnc_MP_packet",life_fnc_MP_packet] call life_fnc_MPexec; - }; - - //--- Persistent call (for all or clients) - if (_isPersistent) then { - if (typename _target != typename 0) then { - private ["_logic","_queue"]; - _logic = missionnamespace getvariable ["bis_functions_mainscope",objnull]; - _queue = _logic getvariable ["BIS_fnc_MP_queue",[]]; - _queue set [ - count _queue, - +life_fnc_MP_packet - ]; - _logic setvariable ["BIS_fnc_MP_queue",_queue,true]; - } else { - ["Persistent execution is not allowed when target is %1. Use %2 or %3 instead.",typename 0,typename objnull,typename false] call bis_fnc_error; - }; - }; - }; - }; - -} else { - //--- Client - private ["_canExecute"]; - _canExecute = switch (typename _target) do { - case (typename grpnull): {player in units _target}; - case (typename sideUnknown): {playerside == _target;}; - case (typeName ""): {if(!isNull player) then {getPlayerUID player == _target;} else {false}}; - default {true}; - }; - - if (_canExecute) then { - _function = missionnamespace getvariable _functionName; - if (!isnil "_function") then { - if (_isCall) then { - _params call _function; - } else { - _params spawn _function; - }; - true - } else { - ["Function '%1' does not exist",_functionName] call bis_fnc_error; - false - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/network/fn_broadcast.sqf b/Altis_Life.Altis/core/functions/network/fn_broadcast.sqf deleted file mode 100644 index 39da1da8..00000000 --- a/Altis_Life.Altis/core/functions/network/fn_broadcast.sqf +++ /dev/null @@ -1,64 +0,0 @@ -/* - File: fn_broadcast.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Broadcast system used in the life mission for multi-notification purposes. -*/ -private["_type","_message"]; -_type = [_this,0,0,[[],0]] call BIS_fnc_param; -_message = [_this,1,"",[""]] call BIS_fnc_param; -_localize = [_this,2,false,[false]] call BIS_fnc_param; -if(_message == "") exitwith {}; - -if(_localize) exitWith { - _arr = _this select 3; - _msg = switch(count _arr) do { - case 0: {localize _message;}; - case 1: {format[localize _message,_arr select 0];}; - case 2: {format[localize _message,_arr select 0, _arr select 1];}; - case 3: {format[localize _message,_arr select 0, _arr select 1, _arr select 2];}; - case 4: {format[localize _message,_arr select 0, _arr select 1, _arr select 2, _arr select 3];}; - }; - - if(typeName _type == typeName []) then { - for "_i" from 0 to (count _type)-1 do - { - switch((_type select _i)) do - { - case 0: {systemChat _msg;}; - case 1: {hint _msg;}; - case 2: {titleText[_msg,"PLAIN"];}; - }; - }; - } else { - switch (_type) do - { - case 0: {systemChat _msg;}; - case 1: {hint _msg;}; - case 2: {titleText[_msg,"PLAIN"];}; - }; - }; -}; - -if(typeName _type == typeName []) then -{ - for "_i" from 0 to (count _type)-1 do - { - switch((_type select _i)) do - { - case 0: {systemChat _message}; - case 1: {hint format["%1", _message]}; - case 2: {titleText[format["%1",_message],"PLAIN"];}; - }; - }; -} - else -{ - switch (_type) do - { - case 0: {systemChat _message}; - case 1: {hint format["%1", _message]}; - case 2: {titleText[format["%1",_message],"PLAIN"];}; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/network/fn_corpse.sqf b/Altis_Life.Altis/core/functions/network/fn_corpse.sqf deleted file mode 100644 index cf693b01..00000000 --- a/Altis_Life.Altis/core/functions/network/fn_corpse.sqf +++ /dev/null @@ -1,13 +0,0 @@ -/* - File: fn_corpse.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Hides dead bodies. -*/ -private["_corpse"]; -_corpse = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -if(isNull _corpse) exitWith {}; -if(alive _corpse) exitWith {}; //Stop script kiddies. - -_corpse hideObject true; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/network/fn_jumpFnc.sqf b/Altis_Life.Altis/core/functions/network/fn_jumpFnc.sqf deleted file mode 100644 index c6d4dbfa..00000000 --- a/Altis_Life.Altis/core/functions/network/fn_jumpFnc.sqf +++ /dev/null @@ -1,30 +0,0 @@ -/* - File: fn_jumpFnc.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Makes the target jump. -*/ -private["_unit","_vel","_dir","_v1","_v2","_anim"]; -_unit = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -_run = [_this,1,true,[false]] call BIS_fnc_param; -if(isNull _unit) exitWith {}; //Bad data -if(local _unit && !_run) exitWith {}; //Ahh - -if(animationState _unit == "AovrPercMrunSrasWrflDf") exitWith {}; -_velocity = velocity _unit; - -if(local _unit) then { - _v1 = 3.82; - _v2 = .4; - _dir = direction player; - _vel = velocity _unit; - _unit setVelocity[(_vel select 0)+(sin _dir*_v2),(_vel select 1)+(cos _dir*_v2),(_vel select 2)+_v1]; -}; - -_anim = animationState _unit; -_unit switchMove "AovrPercMrunSrasWrflDf"; -if(local _unit) then { - waitUntil{animationState _unit != "AovrPercMrunSrasWrflDf"}; - _unit switchMove _anim; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/network/fn_say3D.sqf b/Altis_Life.Altis/core/functions/network/fn_say3D.sqf deleted file mode 100644 index 61d91694..00000000 --- a/Altis_Life.Altis/core/functions/network/fn_say3D.sqf +++ /dev/null @@ -1,6 +0,0 @@ -private["_object","_sound"]; -_object = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -_sound = [_this,1,"",[""]] call BIS_fnc_param; - -if(isNull _object OR _sound == "") exitWith {}; -_object say3D _sound; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/network/fn_setFuel.sqf b/Altis_Life.Altis/core/functions/network/fn_setFuel.sqf deleted file mode 100644 index e0ec8e8a..00000000 --- a/Altis_Life.Altis/core/functions/network/fn_setFuel.sqf +++ /dev/null @@ -1 +0,0 @@ -(_this select 0) setFuel (_this select 1); \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/network/fn_soundDevice.sqf b/Altis_Life.Altis/core/functions/network/fn_soundDevice.sqf deleted file mode 100644 index 01fae2c3..00000000 --- a/Altis_Life.Altis/core/functions/network/fn_soundDevice.sqf +++ /dev/null @@ -1,13 +0,0 @@ -/* - Description: - Plays a device sound for mining (Mainly Tempest device). -*/ -if(isNull _this) exitWith {}; -if(player distance _this > 2500) exitWith {}; //Don't run it... They're to far out.. - -while {true} do { - if(isNull _this OR !alive _this) exitWith {}; - if(isNil {_this getVariable "mining"}) exitWith {}; - _this say3D "Device_disassembled_loop"; - sleep 28.6; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/gangs/fn_createGang.sqf b/Altis_Life.Altis/core/gangs/fn_createGang.sqf deleted file mode 100644 index b5806d9a..00000000 --- a/Altis_Life.Altis/core/gangs/fn_createGang.sqf +++ /dev/null @@ -1,24 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Pulls up the menu and creates the gang? -*/ -private["_gangName","_length","_badChar","_chrByte","_allowed"]; -disableSerialization; - -_gangName = ctrlText (CONTROL(2520,2522)); -_length = count (toArray(_gangName)); -_chrByte = toArray (_gangName); -_allowed = toArray("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_ "); -if(_length > 32) exitWith {hint localize "STR_GNOTF_Over32"}; -_badChar = false; -{if(!(_x in _allowed)) exitWith {_badChar = true;};} foreach _chrByte; -if(_badChar) exitWith {hint localize "STR_GNOTF_IncorrectChar";}; -if(BANK < (LIFE_SETTINGS(getNumber,"gang_price"))) exitWith {hint format[localize "STR_GNOTF_NotEnoughMoney",[((LIFE_SETTINGS(getNumber,"gang_price")) - BANK)] call life_fnc_numberText];}; - -[player,getPlayerUID player,_gangName] remoteExec ["TON_fnc_insertGang",RSERV]; -hint localize "STR_NOTF_SendingData"; -closeDialog 0; -life_action_gangInUse = true; \ No newline at end of file diff --git a/Altis_Life.Altis/core/gangs/fn_gangCreated.sqf b/Altis_Life.Altis/core/gangs/fn_gangCreated.sqf deleted file mode 100644 index 6b6309e8..00000000 --- a/Altis_Life.Altis/core/gangs/fn_gangCreated.sqf +++ /dev/null @@ -1,18 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Tells the player that the gang is created and throws him into it. -*/ -private "_group"; -life_action_gangInUse = nil; - -if(BANK < (LIFE_SETTINGS(getNumber,"gang_price"))) exitWith { - hint format[localize "STR_GNOTF_NotEnoughMoney",[((LIFE_SETTINGS(getNumber,"gang_price"))-BANK)] call life_fnc_numberText]; - {grpPlayer SVAR [_x,nil,true];} foreach ["gang_id","gang_owner","gang_name","gang_members","gang_maxmembers","gang_bank"]; -}; - -SUB(BANK,(LIFE_SETTINGS(getNumber,"gang_price"))); - -hint format[localize "STR_GNOTF_CreateSuccess",(group player) getVariable "gang_name",[(LIFE_SETTINGS(getNumber,"gang_price"))] call life_fnc_numberText]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/gangs/fn_gangDisband.sqf b/Altis_Life.Altis/core/gangs/fn_gangDisband.sqf deleted file mode 100644 index 3d64d62f..00000000 --- a/Altis_Life.Altis/core/gangs/fn_gangDisband.sqf +++ /dev/null @@ -1,22 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Prompts the user about disbanding the gang and if the user accepts the gang will be - disbanded and removed from the database. -*/ -private "_action"; -_action = [ - localize "STR_GNOTF_DisbandWarn", - localize "STR_Gang_Disband_Gang", - localize "STR_Global_Yes", - localize "STR_Global_No" -] call BIS_fnc_guiMessage; - -if(_action) then { - hint localize "STR_GNOTF_DisbandGangPro"; - [grpPlayer] remoteExec ["TON_fnc_removeGang",RSERV]; -} else { - hint localize "STR_GNOTF_DisbandGangCanc"; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/gangs/fn_gangDisbanded.sqf b/Altis_Life.Altis/core/gangs/fn_gangDisbanded.sqf deleted file mode 100644 index cdbbf3fb..00000000 --- a/Altis_Life.Altis/core/gangs/fn_gangDisbanded.sqf +++ /dev/null @@ -1,17 +0,0 @@ -/* - Author: Bryan "Tonic" Boardwine - - Description: - Notifies members that the gang has been disbanded. -*/ -private "_group"; -_group = param [0,grpNull,[grpNull]]; -if(isNull _group) exitWith {}; //Fail horn please. -if(!isNull (findDisplay 2620)) then {closedialog 2620}; - -hint localize "STR_GNOTF_DisbandWarn_2"; -[player] joinSilent (createGroup civilian); - -if(count units _group == 0) then { - deleteGroup _group; -}; diff --git a/Altis_Life.Altis/core/gangs/fn_gangInvite.sqf b/Altis_Life.Altis/core/gangs/fn_gangInvite.sqf deleted file mode 100644 index 7416634f..00000000 --- a/Altis_Life.Altis/core/gangs/fn_gangInvite.sqf +++ /dev/null @@ -1,33 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Prompts the player about an invite. -*/ -private ["_action","_grpMembers"]; -params [ - ["_name","",[""]], - ["_group",grpNull,[grpNull]] -]; - -if(EQUAL(_name,"") OR isNull _group) exitWith {}; //Fail horn anyone? -if(!isNil {(group player) GVAR "gang_name"}) exitWith {hint "You are already in a gang"}; - -_gangName = _group GVAR "gang_name"; -_action = [ - format[localize "STR_GNOTF_InviteMSG",_name,_gangName], - localize "STR_Gang_Invitation", - localize "STR_Global_Yes", - localize "STR_Global_No" -] call BIS_fnc_guiMessage; - -if(_action) then { - [player] join _group; - [4,_group] remoteExecCall ["TON_fnc_updateGang",RSERV]; -} else { - _grpMembers = grpPlayer GVAR "gang_members"; - SUB(_grpMembers,[steamid]); - grpPlayer SVAR ["gang_members",_grpMembers,true]; - [4,_grpMembers] remoteExecCall ["TON_fnc_updateGang",RSERV]; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/gangs/fn_gangInvitePlayer.sqf b/Altis_Life.Altis/core/gangs/fn_gangInvitePlayer.sqf deleted file mode 100644 index ef126662..00000000 --- a/Altis_Life.Altis/core/gangs/fn_gangInvitePlayer.sqf +++ /dev/null @@ -1,35 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Starts the invite process? -*/ -private "_unit"; -disableSerialization; - -if(EQUAL((lbCurSel 2632),-1)) exitWith {hint localize "STR_GNOTF_SelectPerson"}; -_unit = call compile format["%1",CONTROL_DATA(2632)]; - -if(isNull _unit) exitWith {}; //Bad unit? -if(_unit == player) exitWith {hint localize "STR_GNOTF_InviteSelf"}; -if(!isNil {(group _unit) GVAR "gang_name"}) exitWith {hint "This player is already in a gang"}; //Added - -if(count(grpPlayer GVAR ["gang_members",8]) == (grpPlayer GVAR ["gang_maxMembers",8])) exitWith {hint localize "STR_GNOTF_MaxSlot"}; - -_action = [ - format[localize "STR_GNOTF_InvitePlayerMSG",_unit GVAR ["realname",name _unit]], - localize "STR_Gang_Invitation", - localize "STR_Global_Yes", - localize "STR_Global_No" -] call BIS_fnc_guiMessage; - -if(_action) then { - [profileName,grpPlayer] remoteExec ["life_fnc_gangInvite",_unit]; - _members = grpPlayer GVAR "gang_members"; - _members pushBack getPlayerUID _unit; - grpPlayer SVAR ["gang_members",_members,true]; - hint format[localize "STR_GNOTF_InviteSent",_unit GVAR ["realname",name _unit]]; -} else { - hint localize "STR_GNOTF_InviteCancel"; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/gangs/fn_gangKick.sqf b/Altis_Life.Altis/core/gangs/fn_gangKick.sqf deleted file mode 100644 index f90e32cd..00000000 --- a/Altis_Life.Altis/core/gangs/fn_gangKick.sqf +++ /dev/null @@ -1,27 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - 32 hours... -*/ -private["_unit","_unitID","_members"]; -disableSerialization; - -if(EQUAL((lbCurSel 2621),-1)) exitWith {hint localize "STR_GNOTF_SelectKick"}; -_unit = call compile format["%1",CONTROL_DATA(2621)]; - -if(isNull _unit) exitWith {}; //Bad unit? -if(_unit == player) exitWith {hint localize "STR_GNOTF_KickSelf"}; - -_unitID = getPlayerUID _unit; -_members = grpPlayer GVAR "gang_members"; -if(isNil "_members") exitWith {}; -if(!(EQUAL(typeName _members,"ARRAY"))) exitWith {}; - -SUB(_members,[_unitID]); -grpPlayer SVAR ["gang_members",_members,true]; - -[_unit,grpPlayer] remoteExec ["TON_fnc_clientGangKick",_unit]; //Boot that bitch! -[4,grpPlayer] remoteExec ["TON_fnc_updateGang",RSERV]; //Update the database. -[] call life_fnc_gangMenu; \ No newline at end of file diff --git a/Altis_Life.Altis/core/gangs/fn_gangLeave.sqf b/Altis_Life.Altis/core/gangs/fn_gangLeave.sqf deleted file mode 100644 index 239cdd4c..00000000 --- a/Altis_Life.Altis/core/gangs/fn_gangLeave.sqf +++ /dev/null @@ -1,19 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - 32 hours later... -*/ -private["_grp","_grpMembers"]; -if(EQUAL(steamid,(grpPlayer GVAR "gang_owner"))) exitWith {hint localize "STR_GNOTF_LeaderLeave"}; - -_grp = grpPlayer; -_grpMembers = grpPlayer GVAR "gang_members"; -SUB(_grpMembers,[steamid]); -_grp SVAR ["gang_members",_grpMembers,true]; -[player] joinSilent (createGroup civilian); - -[_unit,grpPlayer] remoteExec ["TON_fnc_clientGangLeft",_unit]; -[4,_grp] remoteExec ["TON_fnc_updateGang",RSERV]; -closeDialog 0; \ No newline at end of file diff --git a/Altis_Life.Altis/core/gangs/fn_gangMenu.sqf b/Altis_Life.Altis/core/gangs/fn_gangMenu.sqf deleted file mode 100644 index 7a15920a..00000000 --- a/Altis_Life.Altis/core/gangs/fn_gangMenu.sqf +++ /dev/null @@ -1,61 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - 31 hours of no sleep screw your description. -*/ -private["_ownerID","_gangBank","_gangMax","_gangName","_members","_allUnits","_ctrl"]; -disableSerialization; -if(isNull (findDisplay 2620)) then { - if(!(createDialog "Life_My_Gang_Diag")) exitWith {}; //NOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOO00000000000000oooooo -}; - -_ownerID = grpPlayer GVAR ["gang_owner",""]; -if(EQUAL(_ownerID,"")) exitWith {closeDialog 0;}; //Bad juju - -_gangName = grpPlayer getVariable "gang_name"; -_gangBank = GANG_FUNDS; -_gangMax = grpPlayer getVariable "gang_maxMembers"; - -if(_ownerID != steamid) then { - (CONTROL(2620,2622)) ctrlEnable false; //Upgrade - (CONTROL(2620,2624)) ctrlEnable false; // Kick - (CONTROL(2620,2625)) ctrlEnable false; //Set New Leader - (CONTROL(2620,2630)) ctrlEnable false; //Invite Player - (CONTROL(2620,2631)) ctrlEnable false; //Disband Gang -}; - -(CONTROL(2620,2629)) ctrlSetText _gangName; -(CONTROL(2620,601)) ctrlSetText format[(localize "STR_GNOTF_Funds")+ " $%1",[_gangBank] call life_fnc_numberText]; - -//Loop through the players. -_members = CONTROL(2620,2621); -lbClear _members; -{ - if((getPlayerUID _x) == _ownerID) then { - _members lbAdd format["%1 " +(localize "STR_GNOTF_GangLeader"),(_x GVAR ["realname",name _x])]; - _members lbSetData [(lbSize _members)-1,str(_x)]; - } else { - _members lbAdd format["%1",(_x GVAR ["realname",name _x])]; - _members lbSetData [(lbSize _members)-1,str(_x)]; - }; -} foreach (units grpPlayer); - -_grpMembers = units grpPlayer; -_allUnits = playableUnits; - -//Clear out the list.. -{ - if(_x in _grpMembers OR side _x != civilian && isNil {(group _x) getVariable "gang_id"}) then { - _allUnits set[_forEachIndex,-1]; - }; -} foreach _allUnits; -SUB(_allUnits,[-1]); - -_ctrl = CONTROL(2620,2632); -lbClear _ctrl; //Purge the list -{ - _ctrl lbAdd format["%1",_x GVAR ["realname",name _x]]; - _ctrl lbSetData [(lbSize _ctrl)-1,str(_x)]; -} foreach _allUnits; \ No newline at end of file diff --git a/Altis_Life.Altis/core/gangs/fn_gangNewLeader.sqf b/Altis_Life.Altis/core/gangs/fn_gangNewLeader.sqf deleted file mode 100644 index 49196a1e..00000000 --- a/Altis_Life.Altis/core/gangs/fn_gangNewLeader.sqf +++ /dev/null @@ -1,34 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Something about being a quitter. -*/ -private["_unit","_unitID","_members","_action","_index"]; -disableSerialization; - -if(EQUAL((lbCurSel 2621),-1)) exitWith {hint localize "STR_GNOTF_TransferSelect"}; -_unit = call compile format["%1",CONTROL_DATA(2621)]; - -if(isNull _unit) exitWith {}; //Bad unit? -if(_unit == player) exitWith {hint localize "STR_GNOTF_TransferSelf"}; - -_action = [ - format[localize "STR_GNOTF_TransferMSG",_unit GVAR ["realname",name _unit]], - localize "STR_Gang_Transfer", - localize "STR_Global_Yes", - localize "STR_Global_No" -] call BIS_fnc_guiMessage; - -if(_action) then { - _unitID = getPlayerUID _unit; - if(EQUAL(_unitID,"")) exitWith {hint "Bad UID?"}; //Unlikely? - grpPlayer SVAR ["gang_owner",_unitID,true]; - grpPlayer selectLeader _unit; - [_unit,grpPlayer] remoteExec ["TON_fnc_clientGangLeader",_unit]; //Boot that bitch! - [3,grpPlayer] remoteExec ["TON_fnc_updateGang",RSERV]; //Update the database. -} else { - hint localize "STR_GNOTF_TransferCancel"; -}; -[] call life_fnc_gangMenu; \ No newline at end of file diff --git a/Altis_Life.Altis/core/gangs/fn_gangUpgrade.sqf b/Altis_Life.Altis/core/gangs/fn_gangUpgrade.sqf deleted file mode 100644 index a4fe192f..00000000 --- a/Altis_Life.Altis/core/gangs/fn_gangUpgrade.sqf +++ /dev/null @@ -1,34 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Determinds the upgrade price and blah -*/ -private["_maxMembers","_slotUpgrade","_upgradePrice"]; -_maxMembers = grpPlayer GVAR ["gang_maxMembers",8]; -_slotUpgrade = _maxMembers + 4; -_upgradePrice = round(_slotUpgrade * ((LIFE_SETTINGS(getNumber,"gang_upgradeBase"))) / ((LIFE_SETTINGS(getNumber,"gang_upgradeMultiplier")))); - -_action = [ - format[(localize "STR_GNOTF_MaxMemberMSG")+ "

" +(localize "STR_GNOTF_CurrentMax")+ "
" +(localize "STR_GNOTF_UpgradeMax")+ "
" +(localize "STR_GNOTF_Price")+ " $%3",_maxMembers,_slotUpgrade,[_upgradePrice] call life_fnc_numberText], - localize "STR_Gang_UpgradeMax", - localize "STR_Global_Buy", - localize "STR_Global_Cancel" -] call BIS_fnc_guiMessage; - -if(_action) then { - if(BANK < _upgradePrice) exitWith { - hint parseText format[ - (localize "STR_GNOTF_NotEoughMoney_2")+ "

" +(localize "STR_GNOTF_Current")+ " $%1
" +(localize "STR_GNOTF_Lacking")+ " $%2", - [BANK] call life_fnc_numberText, - [_upgradePrice - BANK] call life_fnc_numberText - ]; - }; - SUB(BANK,_upgradePrice); - grpPlayer SVAR ["gang_maxMembers",_slotUpgrade,true]; - hint parseText format[localize "STR_GNOTF_UpgradeSuccess",_maxMembers,_slotUpgrade,[_upgradePrice] call life_fnc_numberText]; - [2,grpPlayer] remoteExec ["TON_fnc_updateGang",RSERV]; -} else { - hint localize "STR_GNOTF_UpgradeCancel"; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/gangs/fn_initGang.sqf b/Altis_Life.Altis/core/gangs/fn_initGang.sqf deleted file mode 100644 index 023f8df1..00000000 --- a/Altis_Life.Altis/core/gangs/fn_initGang.sqf +++ /dev/null @@ -1,42 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Main initialization for gangs? -*/ -private["_exitLoop","_group","_wait"]; -if(playerSide != civilian) exitWith {}; //What in the hell? -[player] join (createGroup civilian); -if(EQUAL(count life_gangData,0)) exitWith {}; //Dafuq? - -_wait = round(random(8)); -sleep _wait; - -//Loop through to make sure there is not a group already created with the gang. -_exitLoop = false; -{ - _groupName = _x GVAR "gang_name"; - if(!isNil "_groupName") then { - _groupOwner = _x GVAR ["gang_owner",""]; - _groupID = _x GVAR "gang_id"; - if(EQUAL(_groupOwner,"") OR isNil "_groupID") exitWith {}; //Seriously? - if(EQUAL(SEL(life_gangData,0),_groupID) && {EQUAL(SEL(life_gangData,1),_groupOwner)}) exitWith {_group = _x; _exitLoop = true;}; - }; -} foreach allGroups; - -if(!isNil "_group") then { - [player] join _group; - if(EQUAL(SEL(life_gangData,1),steamid)) then { - _group selectLeader player; - [player,_group] remoteExecCall ["TON_fnc_clientGangLeader",(units _group)]; - }; -} else { - _group = grpPlayer; - _group SVAR ["gang_id",SEL(life_gangData,0),true]; - _group SVAR ["gang_owner",SEL(life_gangData,1),true]; - _group SVAR ["gang_name",SEL(life_gangData,2),true]; - _group SVAR ["gang_maxMembers",SEL(life_gangData,3),true]; - _group SVAR ["gang_bank",SEL(life_gangData,4),true]; - _group SVAR ["gang_members",SEL(life_gangData,5),true]; -}; diff --git a/Altis_Life.Altis/core/housing/fn_buyHouse.sqf b/Altis_Life.Altis/core/housing/fn_buyHouse.sqf deleted file mode 100644 index d83f5504..00000000 --- a/Altis_Life.Altis/core/housing/fn_buyHouse.sqf +++ /dev/null @@ -1,50 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Buys the house? -*/ -private["_house","_uid","_action","_houseCfg"]; -_house = param [0,ObjNull,[ObjNull]]; -_uid = steamid; - -if(isNull _house) exitWith {}; -if(!(_house isKindOf "House_F")) exitWith {}; -if((_house GVAR ["house_owned",false])) exitWith {hint "This house is already owned even though you shouldn't be seeing this hint..."}; -if(!isNil {(_house GVAR "house_sold")}) exitWith {hint localize "STR_House_Sell_Process"}; -if(!license_civ_home) exitWith {hint localize "STR_House_License"}; -if(count life_houses >= (LIFE_SETTINGS(getNumber,"house_limit"))) exitWith {hint format[localize "STR_House_Max_House",LIFE_SETTINGS(getNumber,"house_limit")]}; -closeDialog 0; - -_houseCfg = [(typeOf _house)] call life_fnc_houseConfig; -if(EQUAL(count _houseCfg,0)) exitWith {}; - -_action = [ - format[localize "STR_House_BuyMSG", - [(_houseCfg select 0)] call life_fnc_numberText, - (_houseCfg select 1)],localize "STR_House_Purchase",localize "STR_Global_Buy",localize "STR_Global_Cancel" -] call BIS_fnc_guiMessage; - -if(_action) then { - if(BANK < (_houseCfg select 0)) exitWith {hint format [localize "STR_House_NotEnough"]}; - [_uid,_house] remoteExec ["TON_fnc_addHouse",RSERV]; - _house SVAR ["house_owner",[_uid,profileName],true]; - _house SVAR ["locked",true,true]; - _house SVAR ["Trunk",[[],0],true]; - _house SVAR ["containers",[],true]; - _house SVAR ["uid",floor(random 99999),true]; - SUB(BANK,(SEL(_houseCfg,0))); - - life_vehicles pushBack _house; - life_houses pushBack [str(getPosATL _house),[]]; - _marker = createMarkerLocal [format["house_%1",(_house GVAR "uid")],getPosATL _house]; - _houseName = FETCH_CONFIG2(getText,CONFIG_VEHICLES,(typeOf _house), "displayName"); - _marker setMarkerTextLocal _houseName; - _marker setMarkerColorLocal "ColorBlue"; - _marker setMarkerTypeLocal "loc_Lighthouse"; - _numOfDoors = FETCH_CONFIG2(getNumber,CONFIG_VEHICLES,(typeOf _house),"numberOfDoors"); - for "_i" from 1 to _numOfDoors do { - _house SVAR [format["bis_disabled_Door_%1",_i],1,true]; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/housing/fn_copBreakDoor.sqf b/Altis_Life.Altis/core/housing/fn_copBreakDoor.sqf deleted file mode 100644 index 9dba0f74..00000000 --- a/Altis_Life.Altis/core/housing/fn_copBreakDoor.sqf +++ /dev/null @@ -1,64 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Allows cops to 'kick' in the door? -*/ -private["_house","_door","_title","_titleText","_progressBar","_cpRate","_cP","_uid"]; -_house = param [0,ObjNull,[ObjNull]]; - -if(isNull _house OR !(_house isKindOf "House_F")) exitWith {}; -if(isNil {(_house GVAR "house_owner")}) exitWith {hint localize "STR_House_Raid_NoOwner"}; - -_uid = (_house GVAR "house_owner") select 0; -if(!([_uid] call life_fnc_isUIDActive)) exitWith {hint localize "STR_House_Raid_OwnerOff"}; - -_door = [_house] call life_fnc_nearestDoor; -if(EQUAL(_door,0)) exitWith {hint localize "STR_Cop_NotaDoor"}; -if((_house GVAR [format["bis_disabled_Door_%1",_door],0]) == 0) exitWith {hint localize "STR_House_Raid_DoorUnlocked"}; - -life_action_inUse = true; - -//Setup the progress bar -disableSerialization; -_title = localize "STR_House_Raid_Progress"; -5 cutRsc ["life_progress","PLAIN"]; -_ui = GVAR_UINS "life_progress"; -_progressBar = _ui displayCtrl 38201; -_titleText = _ui displayCtrl 38202; -_titleText ctrlSetText format["%2 (1%1)...","%",_title]; -_progressBar progressSetPosition 0.01; -_cP = 0.01; -_cpRate = 0.0092; - -[2,"STR_House_Raid_NOTF",true,[(_house GVAR "house_owner") select 1]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; - -while {true} do { - if(animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { - [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; - player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; - player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; - }; - sleep 0.26; - if(isNull _ui) then { - 5 cutRsc ["life_progress","PLAIN"]; - _ui = GVAR_UINS "life_progress"; - }; - _cP = _cP + _cpRate; - _progressBar progressSetPosition _cP; - _titleText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_title]; - if(_cP >= 1 OR !alive player) exitWith {}; - if(life_interrupted) exitWith {}; -}; - -//Kill the UI display and check for various states -5 cutText ["","PLAIN"]; -player playActionNow "stop"; - -if(!alive player) exitWith {life_action_inUse = false;}; -if(life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; - -life_action_inUse = false; -_house animate [format["door_%1_rot",_door],1]; -_house SVAR [format["bis_disabled_Door_%1",_door],0,true]; //Unlock the door. \ No newline at end of file diff --git a/Altis_Life.Altis/core/housing/fn_copHouseOwner.sqf b/Altis_Life.Altis/core/housing/fn_copHouseOwner.sqf deleted file mode 100644 index 8e5329b2..00000000 --- a/Altis_Life.Altis/core/housing/fn_copHouseOwner.sqf +++ /dev/null @@ -1,8 +0,0 @@ -/* - Displays the house owner -*/ -private["_house"]; -_house = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -if(isNull _house OR !(_house isKindOf "House_F")) exitWith {}; -if(isNil {(_house getVariable "house_owner")}) exitWith {hint localize "STR_House_Raid_NoOwner"}; -hint parseText format["" +(localize "STR_House_Raid_Owner")+ "
%1",(_house getVariable "house_owner") select 1]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/housing/fn_garageRefund.sqf b/Altis_Life.Altis/core/housing/fn_garageRefund.sqf deleted file mode 100644 index afd74c39..00000000 --- a/Altis_Life.Altis/core/housing/fn_garageRefund.sqf +++ /dev/null @@ -1,11 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - I don't know? -*/ -_price = SEL(_this,0); -_unit = SEL(_this,1); -if(_unit != player) exitWith {}; -ADD(BANK,_price); \ No newline at end of file diff --git a/Altis_Life.Altis/core/housing/fn_getBuildingPositions.sqf b/Altis_Life.Altis/core/housing/fn_getBuildingPositions.sqf deleted file mode 100644 index 34c2ef12..00000000 --- a/Altis_Life.Altis/core/housing/fn_getBuildingPositions.sqf +++ /dev/null @@ -1,37 +0,0 @@ -/* - Author: Bryan "Tonic" Boardwine - - Description: - Retrieves all 3D-world positions in a building and also restricts - certain positions due to window positioning. -*/ -private["_building","_arr","_restricted","_exitLoop","_i"]; -_building = _this select 0; -_arr = []; - -_restricted = switch(typeOf _building) do { -case "Land_i_House_Big_02_V1_F": {[0,1,2,3,4]}; -case "Land_i_House_Big_02_V2_F": {[0,1,2,3,4]}; -case "Land_i_House_Big_02_V3_F": {[0,1,2,3,4]}; -case "Land_i_House_Big_01_V1_F": {[2,3]}; -case "Land_i_House_Big_01_V2_F": {[2,3]}; -case "Land_i_House_Big_01_V3_F": {[2,3]}; -case "Land_i_Stone_HouseSmall_V1_F": {[0,1,3,4]}; -case "Land_i_Stone_HouseSmall_V2_F": {[0,1,3,4]}; -case "Land_i_Stone_HouseSmall_V3_F": {[0,1,3,4]}; -default {[]}; -}; - -_i = 0; -_exitLoop = false; //Loops are not fun. -while {true} do { - if(!(_i in _restricted)) then { - _pos = _building buildingPos _i; - if(_pos isEqualTo [0,0,0]) exitWith {_exitLoop = true;}; - _arr pushBack _pos; - }; - if(_exitLoop) exitWith {}; - _i = _i + 1; -}; - -_arr; diff --git a/Altis_Life.Altis/core/housing/fn_houseMenu.sqf b/Altis_Life.Altis/core/housing/fn_houseMenu.sqf deleted file mode 100644 index 5a5520fd..00000000 --- a/Altis_Life.Altis/core/housing/fn_houseMenu.sqf +++ /dev/null @@ -1,128 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Building interaction menu -*/ -#define Btn1 37450 -#define Btn2 37451 -#define Btn3 37452 -#define Btn4 37453 -#define Btn5 37454 -#define Btn6 37455 -#define Btn7 37456 -#define Btn8 37457 -#define Title 37401 - -private["_display","_curTarget","_Btn1","_Btn2","_Btn3","_Btn4","_Btn5","_Btn6","_Btn7"]; -disableSerialization; -_curTarget = param [0,ObjNull,[ObjNull]]; -if(isNull _curTarget) exitWith {}; //Bad target -_houseCfg = [(typeOf _curTarget)] call life_fnc_houseConfig; -if(EQUAL(count _houseCfg,0) && playerSide == civilian) exitWith {}; - -if(!dialog) then { - createDialog "pInteraction_Menu"; -}; - -_Btn1 = CONTROL(37400,Btn1); -_Btn2 = CONTROL(37400,Btn2); -_Btn3 = CONTROL(37400,Btn3); -_Btn4 = CONTROL(37400,Btn4); -_Btn5 = CONTROL(37400,Btn5); -_Btn6 = CONTROL(37400,Btn6); -_Btn7 = CONTROL(37400,Btn7); -{_x ctrlShow false;} foreach [_Btn1,_Btn2,_Btn3,_Btn4,_Btn5,_Btn6,_Btn7]; - -life_pInact_curTarget = _curTarget; -if(_curTarget isKindOf "House_F" && playerSide == west) exitWith { - if((nearestObject [[16019.5,16952.9,0],"Land_Dome_Big_F"]) == _curTarget OR (nearestObject [[16019.5,16952.9,0],"Land_Research_house_V1_F"]) == _curTarget) then { - - _Btn1 ctrlSetText localize "STR_pInAct_Repair"; - _Btn1 buttonSetAction "[life_pInact_curTarget] spawn life_fnc_repairDoor; closeDialog 0;"; - _Btn1 ctrlShow true; - - _Btn2 ctrlSetText localize "STR_pInAct_CloseOpen"; - _Btn2 buttonSetAction "[life_pInact_curTarget] call life_fnc_doorAnimate; closeDialog 0;"; - _Btn2 ctrlShow true; - - } else { - if(!isNil {_curTarget GVAR "house_owner"}) then { - _Btn1 ctrlSetText localize "STR_House_Raid_Owner"; - _Btn1 buttonSetAction "[life_pInact_curTarget] call life_fnc_copHouseOwner;"; - _Btn1 ctrlShow true; - - _Btn2 ctrlSetText localize "STR_pInAct_BreakDown"; - _Btn2 buttonSetAction "[life_pInact_curTarget] spawn life_fnc_copBreakDoor; closeDialog 0;"; - _Btn2 ctrlShow true; - - _Btn3 ctrlSetText localize "STR_pInAct_SearchHouse"; - _Btn3 buttonSetAction "[life_pInact_curTarget] spawn life_fnc_raidHouse; closeDialog 0;"; - _Btn3 ctrlShow true; - - if(player distance _curTarget > 3.6) then { - _Btn3 ctrlEnable false; - }; - - _Btn4 ctrlSetText localize "STR_pInAct_LockHouse"; - _Btn4 buttonSetAction "[life_pInact_curTarget] spawn life_fnc_lockupHouse; closeDialog 0;"; - _Btn4 ctrlShow true; - } else { - closeDialog 0; - }; - }; -}; - -if(!(_curTarget in life_vehicles) OR isNil {_curTarget GVAR "house_owner"}) then { - if(_curTarget in life_vehicles) then {SUB(life_vehicles,[_curTarget]);}; - _Btn1 ctrlSetText localize "STR_pInAct_BuyHouse"; - _Btn1 buttonSetAction "[life_pInact_curTarget] spawn life_fnc_buyHouse;"; - _Btn1 ctrlShow true; - - if(!isNil {_curTarget GVAR "house_owner"}) then { - _Btn1 ctrlEnable false; - }; -} else { - if((typeOf _curTarget) in ["Land_i_Garage_V1_F","Land_i_Garage_V2_F"]) then { - _Btn1 ctrlSetText localize "STR_pInAct_SellGarage"; - _Btn1 buttonSetAction "[life_pInact_curTarget] spawn life_fnc_sellHouse; closeDialog 0;"; - _Btn1 ctrlShow true; - - if(SEL(_curTarget GVAR "house_owner",0) != steamid) then { - _Btn1 ctrlEnable false; - }; - - _Btn2 ctrlSetText localize "STR_pInAct_AccessGarage"; - _Btn2 buttonSetAction "[life_pInact_curTarget,""Car""] spawn life_fnc_vehicleGarage; closeDialog 0;"; - _Btn2 ctrlShow true; - - _Btn3 ctrlSetText localize "STR_pInAct_StoreVeh"; - _Btn3 buttonSetAction "[life_pInact_curTarget,player] spawn life_fnc_storeVehicle; closeDialog 0;"; - _Btn3 ctrlShow true; - } else { - _Btn1 ctrlSetText localize "STR_pInAct_SellHouse"; - _Btn1 buttonSetAction "[life_pInact_curTarget] spawn life_fnc_sellHouse; closeDialog 0;"; - _Btn1 ctrlShow true; - - if(((_curTarget GVAR "house_owner") select 0) != (getPlayerUID player)) then { - _Btn1 ctrlEnable false; - }; - - if(_curTarget GVAR ["locked",false]) then { - _Btn2 ctrlSetText localize "STR_pInAct_UnlockStorage"; - } else { - _Btn2 ctrlSetText localize "STR_pInAct_LockStorage"; - }; - _Btn2 buttonSetAction "[life_pInact_curTarget] call life_fnc_lockHouse; closeDialog 0;"; - _Btn2 ctrlShow true; - - if(isNull (_curTarget GVAR ["lightSource",ObjNull])) then { - _Btn3 ctrlSetText localize "STR_pInAct_LightsOn"; - } else { - _Btn3 ctrlSetText localize "STR_pInAct_LightsOff"; - }; - _Btn3 buttonSetAction "[life_pInact_curTarget] call life_fnc_lightHouseAction; closeDialog 0;"; - _Btn3 ctrlShow true; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/housing/fn_initHouses.sqf b/Altis_Life.Altis/core/housing/fn_initHouses.sqf deleted file mode 100644 index 2fbf90a4..00000000 --- a/Altis_Life.Altis/core/housing/fn_initHouses.sqf +++ /dev/null @@ -1,20 +0,0 @@ -/* - Author: Bryan "Tonic" Boardwine - - Description: - Initializes the players houses, mainly throwing down markers. -*/ -if(count life_houses == 0) exitWith {}; //Nothing to do. - -{ - _position = call compile format["%1",_x select 0]; - _house = nearestBuilding _position; - _house setVariable["uid",round(random 99999),true]; - _houseName = getText(configFile >> "CfgVehicles" >> (typeOf _house) >> "displayName"); - - _marker = createMarkerLocal [format["house_%1",(_house getVariable "uid")],_position]; - _marker setMarkerTextLocal _houseName; - _marker setMarkerColorLocal "ColorBlue"; - _marker setMarkerTypeLocal "loc_Lighthouse"; - -} foreach life_houses; \ No newline at end of file diff --git a/Altis_Life.Altis/core/housing/fn_lightHouse.sqf b/Altis_Life.Altis/core/housing/fn_lightHouse.sqf deleted file mode 100644 index 44e4297a..00000000 --- a/Altis_Life.Altis/core/housing/fn_lightHouse.sqf +++ /dev/null @@ -1,43 +0,0 @@ -/* - Author: Bryan "Tonic" Boardwine - - Description: - Tells clients to either turn the lights on for that house - or off. -*/ -private["_lightSource","_exit"]; -params [ - ["_house",objNull,[objNull]], - ["_mode",false,[false]] -]; - - -if(isNull _house) exitWith {}; -if(!(_house isKindOf "House_F")) exitWith {}; - -_exit = false; -if(_mode) then { - _lightSource = "#lightpoint" createVehicleLocal [0,0,0]; - - switch(true) do { - case ((typeOf _house) in ["Land_i_House_Big_01_V1_F","Land_i_House_Big_01_V2_F","Land_i_House_Big_01_V3_F"]): {_lightSource lightAttachObject [_house,[0,-2,3.8]];}; - case ((typeOf _house) in ["Land_i_House_Big_02_V1_F","Land_i_House_Big_02_V2_F","Land_i_House_Big_02_V3_F"]): {_lightSource lightAttachObject [_house,[2,0,3.5]];}; - case ((typeOf _house) in ["Land_i_House_Small_01_V1_F","Land_i_House_Small_01_V2_F","Land_i_House_Small_01_V3_F"]): {_lightSource lightAttachObject [_house,[-1.5,0,2]]}; - case ((typeOf _house) in ["Land_i_House_Small_02_V1_F","Land_i_House_Small_02_V2_F","Land_i_House_Small_02_V3_F"]): {_lightSource lightAttachObject [_house,[2,0,2.4]]}; - case ((typeOf _house) in ["Land_i_House_Small_03_V1_F","Land_i_House_Small_03_V3_F","Land_i_House_Small_03_V3_F"]): {_lightSource lightAttachObject [_house,[-3.3,1,2.5]];}; - default {_exit = true;}; - }; - if(_exit) exitWith {deleteVehicle _lightSource;}; - - _lightSource setLightColor [250,150,50]; - _lightSource setLightAmbient [1,1,0.2]; - _lightSource setLightAttenuation [1,0,0,0]; - _lightSource setLightIntensity 10; - _lightSource setLightUseFlare true; - _lightSource setLightFlareSize 0.2; - _lightSource setLightFlareMaxDistance 50; - _house setVariable["lightSource",_lightSource]; -} else { - if(isNull (_house getVariable["lightSource",ObjNull])) exitWith {}; - deleteVehicle (_house getVariable["lightSource",ObjNull]); -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/housing/fn_lightHouseAction.sqf b/Altis_Life.Altis/core/housing/fn_lightHouseAction.sqf deleted file mode 100644 index 7e89db3a..00000000 --- a/Altis_Life.Altis/core/housing/fn_lightHouseAction.sqf +++ /dev/null @@ -1,17 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Lights up the house. -*/ -private "_house"; -_house = param [0,ObjNull,[ObjNull]]; -if(isNull _house) exitWith {}; -if(!(_house isKindOf "House_F")) exitWith {}; - -if(isNull (_house GVAR ["lightSource",ObjNull])) then { - [_house,true] remoteExecCall ["life_fnc_lightHouse",RCLIENT]; -} else { - [_house,false] remoteExecCall ["life_fnc_lightHouse",RCLIENT]; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/housing/fn_lockHouse.sqf b/Altis_Life.Altis/core/housing/fn_lockHouse.sqf deleted file mode 100644 index 0ad08e23..00000000 --- a/Altis_Life.Altis/core/housing/fn_lockHouse.sqf +++ /dev/null @@ -1,19 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Unlocks / locks the house. -*/ -private["_house"]; -_house = param [0,ObjNull,[ObjNull]]; -if(isNull _house OR !(_house isKindOf "House_F")) exitWith {}; - -_state = _house GVAR ["locked",true]; -if(_state) then { - _house SVAR ["locked",false,true]; - titleText[localize "STR_House_StorageUnlock","PLAIN"]; -} else { - _house SVAR ["locked",true,true]; - titleText[localize "STR_House_StorageLock","PLAIN"]; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/housing/fn_lockupHouse.sqf b/Altis_Life.Altis/core/housing/fn_lockupHouse.sqf deleted file mode 100644 index e6288a4f..00000000 --- a/Altis_Life.Altis/core/housing/fn_lockupHouse.sqf +++ /dev/null @@ -1,25 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Locks up the entire house and closes all doors. -*/ -private["_house"]; -_house = param [0,ObjNull,[ObjNull]]; -if(isNull _house OR !(_house isKindOf "House_F")) exitWith {}; - -_numberOfDoors = FETCH_CONFIG2(getNumber,CONFIG_VEHICLES,(typeOf _house), "numberOfDoors"); - -if(EQUAL(_numberOfDoors,-1) OR EQUAL(_numberOfDoors,0)) exitWith {}; //MEH - -titleText [localize "STR_House_LockingUp","PLAIN"]; -sleep 3; - -for "_i" from 1 to _numberOfDoors do { - _house animate[format["door_%1_rot",_i],0]; - _house SVAR [format["bis_disabled_Door_%1",_i],1,true]; -}; - -_house SVAR ["locked",true,true]; -titleText[localize "STR_House_LockedUp","PLAIN"]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/housing/fn_raidHouse.sqf b/Altis_Life.Altis/core/housing/fn_raidHouse.sqf deleted file mode 100644 index 5fa18e68..00000000 --- a/Altis_Life.Altis/core/housing/fn_raidHouse.sqf +++ /dev/null @@ -1,79 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Raids the players house? -*/ -private["_house","_uid","_cpRate","_cP","_title","_titleText","_ui","_houseInv","_houseInvData","_houseInvVal"]; -_house = param [0,ObjNull,[ObjNull]]; - -if(isNull _house OR !(_house isKindOf "House_F")) exitWith {}; -if(isNil {(_house GVAR "house_owner")}) exitWith {hint localize "STR_House_Raid_NoOwner"}; - -_uid = SEL((_house GVAR "house_owner"),0); - -if(!([_uid] call life_fnc_isUIDActive)) exitWith {hint localize "STR_House_Raid_OwnerOff"}; - -_houseInv = _house GVAR ["Trunk",[[],0]]; -if(_houseInv isEqualTo [[],0]) exitWith {hint localize "STR_House_Raid_Nothing"}; -life_action_inUse = true; - -//Setup the progress bar -disableSerialization; -_title = localize "STR_House_Raid_Searching"; -5 cutRsc ["life_progress","PLAIN"]; -_ui = GVAR_UINS "life_progress"; -_progressBar = _ui displayCtrl 38201; -_titleText = _ui displayCtrl 38202; -_titleText ctrlSetText format["%2 (1%1)...","%",_title]; -_progressBar progressSetPosition 0.01; -_cP = 0.01; -_cpRate = 0.0075; - -while {true} do -{ - sleep 0.26; - if(isNull _ui) then { - 5 cutRsc ["life_progress","PLAIN"]; - _ui = GVAR_UINS "life_progress"; - }; - _cP = _cP + _cpRate; - _progressBar progressSetPosition _cP; - _titleText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_title]; - if(_cP >= 1 OR !alive player) exitWith {}; - if(player distance _house > 13) exitWith {}; -}; - -//Kill the UI display and check for various states -5 cutText ["","PLAIN"]; -if(player distance _house > 13) exitWith {life_action_inUse = false; titleText[localize "STR_House_Raid_TooFar","PLAIN"]}; -if(!alive player) exitWith {life_action_inUse = false;}; -life_action_inUse = false; - -_houseInvData = SEL(_houseInv,0); -_houseInvVal = SEL(_houseInv,1); -_value = 0; -{ - _var = SEL(_x,0); - _val = SEL(_x,1); - - if(EQUAL(ITEM_ILLEGAL(_var),1)) then { - if(!(EQUAL(ITEM_SELLPRICE(_var),-1))) then { - _houseInvData set[_forEachIndex,-1]; - SUB(_houseInvData,[-1]); - SUB(_houseInvVal,(([_var] call life_fnc_itemWeight) * _val)); - ADD(_value,(_val * ITEM_SELLPRICE(_var))); - }; - }; -} foreach (SEL(_houseInv,0)); - -if(_value > 0) then { - [0,"STR_House_Raid_Successful",true,[[_value] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; - ADD(BANK,round(_value / 2)); - - _house SVAR ["Trunk",[_houseInvData,_houseInvVal],true]; - [_house] remoteExecCall ["TON_fnc_updateHouseTrunk",RSERV]; -} else { - hint localize "STR_House_Raid_NoIllegal"; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/housing/fn_sellHouse.sqf b/Altis_Life.Altis/core/housing/fn_sellHouse.sqf deleted file mode 100644 index b07e06d0..00000000 --- a/Altis_Life.Altis/core/housing/fn_sellHouse.sqf +++ /dev/null @@ -1,52 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Sells the house? -*/ -private["_house","_uid","_action","_houseCfg"]; -_house = param [0,ObjNull,[ObjNull]]; -_uid = steamid; - -if(isNull _house) exitWith {}; -if(!(_house isKindOf "House_F")) exitWith {}; -if(isNil {_house getVariable "house_owner"}) exitWith {hint "There is no owner for this house."}; -closeDialog 0; - -_houseCfg = [(typeOf _house)] call life_fnc_houseConfig; -if(EQUAL(count _houseCfg,0)) exitWith {}; - -_action = [ - format[localize "STR_House_SellHouseMSG", - (round(SEL(_houseCfg,0)/2)) call life_fnc_numberText, - SEL(_houseCfg,1)],localize "STR_pInAct_SellHouse",localize "STR_Global_Sell",localize "STR_Global_Cancel" -] call BIS_fnc_guiMessage; - -if(_action) then { - _house SVAR ["house_sold",true,true]; - [_house] remoteExecCall ["TON_fnc_sellHouse",RSERV]; - _house SVAR ["locked",false,true]; - _house SVAR ["Trunk",nil,true]; - _house SVAR ["containers",nil,true]; - deleteMarkerLocal format["house_%1",_house GVAR "uid"]; - _house SVAR ["uid",nil,true]; - - BANK = BANK + (round((_houseCfg select 0)/2)); - _index = life_vehicles find _house; - - if(_index != -1) then { - life_vehicles set[_index,-1]; - life_vehicles = life_vehicles - [-1]; - }; - - _index = [str(getPosATL _house),life_houses] call TON_fnc_index; - if(_index != -1) then { - life_houses set[_index,-1]; - life_houses = life_houses - [-1]; - }; - _numOfDoors = FETCH_CONFIG2(getNumber,CONFIG_VEHICLES,(typeOf _house), "numberOfDoors"); - for "_i" from 1 to _numOfDoors do { - _house SVAR [format["bis_disabled_Door_%1",_i],0,true]; - }; -}; diff --git a/Altis_Life.Altis/core/init.sqf b/Altis_Life.Altis/core/init.sqf deleted file mode 100644 index bf6f6906..00000000 --- a/Altis_Life.Altis/core/init.sqf +++ /dev/null @@ -1,125 +0,0 @@ -#include "..\script_macros.hpp" -/* - Master client initialization file -*/ -life_firstSpawn = true; -life_session_completed = false; -private["_handle","_timeStamp"]; -0 cutText["Setting up client, please wait...","BLACK FADED"]; -0 cutFadeOut 9999999; -_timeStamp = diag_tickTime; -diag_log "------------------------------------------------------------------------------------------------------"; -diag_log "--------------------------------- Starting Altis Life Client Init ----------------------------------"; -diag_log "------------------------------------------------------------------------------------------------------"; -waitUntil {!isNull player && player == player}; //Wait till the player is ready -[] call compile PreprocessFileLineNumbers "core\clientValidator.sqf"; - -//Setup initial client core functions -diag_log "::Life Client:: Initialization Variables"; -[] call compile PreprocessFileLineNumbers "core\configuration.sqf"; - -//Set bank amount for new players -switch (playerSide) do { - case west: { - BANK = LIFE_SETTINGS(getNumber,"bank_cop"); - life_paycheck = LIFE_SETTINGS(getNumber,"paycheck_cop"); - }; - case civilian: { - BANK = LIFE_SETTINGS(getNumber,"bank_civ"); - life_paycheck = LIFE_SETTINGS(getNumber,"paycheck_civ"); - }; - case independent: { - BANK = LIFE_SETTINGS(getNumber,"bank_med"); - life_paycheck = LIFE_SETTINGS(getNumber,"paycheck_med"); - }; -}; - -diag_log "::Life Client:: Variables initialized"; -diag_log "::Life Client:: Setting up Eventhandlers"; -[] call life_fnc_setupEVH; - -diag_log "::Life Client:: Eventhandlers completed"; -diag_log "::Life Client:: Setting up user actions"; -[] call life_fnc_setupActions; - -diag_log "::Life Client:: User actions completed"; -diag_log "::Life Client:: Waiting for server functions to transfer.."; -waitUntil {(!isNil {TON_fnc_clientGangLeader})}; - -diag_log "::Life Client:: Received server functions."; -0 cutText ["Waiting for the server to be ready...","BLACK FADED"]; -0 cutFadeOut 99999999; - -diag_log "::Life Client:: Waiting for the server to be ready.."; -waitUntil{!isNil "life_server_isReady"}; -waitUntil{(life_server_isReady OR !isNil "life_server_extDB_notLoaded")}; - -if(!isNil "life_server_extDB_notLoaded" && {life_server_extDB_notLoaded != ""}) exitWith { - diag_log life_server_extDB_notLoaded; - 999999 cutText [life_server_extDB_notLoaded,"BLACK FADED"]; - 999999 cutFadeOut 99999999; -}; - -[] call SOCK_fnc_dataQuery; -waitUntil {life_session_completed}; -0 cutText["Finishing client setup procedure","BLACK FADED"]; -0 cutFadeOut 9999999; - -//diag_log "::Life Client:: Group Base Execution"; -[] spawn life_fnc_escInterupt; - -switch (playerSide) do { - case west: { - _handle = [] spawn life_fnc_initCop; - waitUntil {scriptDone _handle}; - }; - case civilian: { - //Initialize Civilian Settings - _handle = [] spawn life_fnc_initCiv; - waitUntil {scriptDone _handle}; - }; - case independent: { - //Initialize Medics and blah - _handle = [] spawn life_fnc_initMedic; - waitUntil {scriptDone _handle}; - }; -}; - -player SVAR ["restrained",false,true]; -player SVAR ["Escorting",false,true]; -player SVAR ["transporting",false,true]; - -diag_log "Past Settings Init"; -[] execFSM "core\fsm\client.fsm"; - -diag_log "Executing client.fsm"; -waitUntil {!(isNull (findDisplay 46))}; - -diag_log "Display 46 Found"; -(findDisplay 46) displayAddEventHandler ["KeyDown", "_this call life_fnc_keyHandler"]; -player addRating 99999999; -diag_log "------------------------------------------------------------------------------------------------------"; -diag_log format[" End of Altis Life Client Init :: Total Execution Time %1 seconds ",(diag_tickTime) - _timeStamp]; -diag_log "------------------------------------------------------------------------------------------------------"; - -life_sidechat = true; -[player,life_sidechat,playerSide] remoteExecCall ["TON_fnc_managesc",RSERV]; -0 cutText ["","BLACK IN"]; -[] call life_fnc_hudSetup; - -/* Set up frame-by-frame handlers */ -LIFE_ID_PlayerTags = ["LIFE_PlayerTags","onEachFrame","life_fnc_playerTags"] call BIS_fnc_addStackedEventHandler; -LIFE_ID_RevealObjects = ["LIFE_RevealObjects","onEachFrame","life_fnc_revealObjects"] call BIS_fnc_addStackedEventHandler; - -player SVAR ["steam64ID",steamid]; -player SVAR ["realname",profileName,true]; - -life_fnc_moveIn = compileFinal -" - player moveInCargo (_this select 0); -"; - -[] spawn life_fnc_survival; - -CONSTVAR(life_paycheck); //Make the paycheck static. -if(EQUAL(LIFE_SETTINGS(getNumber,"enable_fatigue"),0)) then {player enableFatigue false;}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/init_survival.sqf b/Altis_Life.Altis/core/init_survival.sqf deleted file mode 100644 index a8bcf28e..00000000 --- a/Altis_Life.Altis/core/init_survival.sqf +++ /dev/null @@ -1,107 +0,0 @@ -[] spawn { - private["_fnc_food","_fnc_water"]; - _fnc_food = - { - if(life_hunger < 2) then {player setDamage 1; hint localize "STR_NOTF_EatMSG_Death";} - else - { - life_hunger = life_hunger - 10; - [] call life_fnc_hudUpdate; - if(life_hunger < 2) then {player setDamage 1; hint localize "STR_NOTF_EatMSG_Death";}; - switch(life_hunger) do { - case 30: {hint localize "STR_NOTF_EatMSG_1";}; - case 20: {hint localize "STR_NOTF_EatMSG_2";}; - case 10: {hint localize "STR_NOTF_EatMSG_3";player setFatigue 1;}; - }; - }; - }; - - _fnc_water = - { - if(life_thirst < 2) then {player setDamage 1; hint localize "STR_NOTF_DrinkMSG_Death";} - else - { - life_thirst = life_thirst - 10; - [] call life_fnc_hudUpdate; - if(life_thirst < 2) then {player setDamage 1; hint localize "STR_NOTF_DrinkMSG_Death";}; - switch(life_thirst) do - { - case 30: {hint localize "STR_NOTF_DrinkMSG_1";}; - case 20: {hint localize "STR_NOTF_DrinkMSG_2"; player setFatigue 1;}; - case 10: {hint localize "STR_NOTF_DrinkMSG_3"; player setFatigue 1;}; - }; - }; - }; - - while{true} do - { - sleep 600; - [] call _fnc_water; - sleep 250; - [] call _fnc_food; - }; -}; - -[] spawn -{ - private["_bp","_load","_cfg"]; - while{true} do - { - waitUntil {backpack player != ""}; - _bp = backpack player; - _cfg = getNumber(configFile >> "CfgVehicles" >> (backpack player) >> "maximumload"); - _load = round(_cfg / 8); - life_maxWeight = life_maxWeightT + _load; - waitUntil {backpack player != _bp}; - if(backpack player == "") then - { - life_maxWeight = life_maxWeightT; - }; - }; -}; - -[] spawn -{ - while {true} do - { - sleep 1.5; - if(life_carryWeight > life_maxWeight && !isForcedWalk player) then { - player forceWalk true; - player setFatigue 1; - hint localize "STR_NOTF_MaxWeight"; - } else { - if(isForcedWalk player) then { - player forceWalk false; - }; - }; - }; -}; - -[] spawn -{ - private["_walkDis","_myLastPos","_MaxWalk","_runHunger","_runDehydrate"]; - _walkDis = 0; - _myLastPos = (getPos player select 0) + (getPos player select 1); - _MaxWalk = 1200; - while{true} do - { - sleep 0.5; - if(!alive player) then {_walkDis = 0;} - else - { - _CurPos = (getPos player select 0) + (getPos player select 1); - if((_CurPos != _myLastPos) && (vehicle player == player)) then - { - _walkDis = _walkDis + 1; - if(_walkDis == _MaxWalk) then - { - _walkDis = 0; - life_thirst = life_thirst - 5; - life_hunger = life_hunger - 5; - [] call life_fnc_hudUpdate; - }; - }; - _myLastPos = (getPos player select 0) + (getPos player select 1); - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/items/fn_blastingCharge.sqf b/Altis_Life.Altis/core/items/fn_blastingCharge.sqf deleted file mode 100644 index 3bc368a5..00000000 --- a/Altis_Life.Altis/core/items/fn_blastingCharge.sqf +++ /dev/null @@ -1,31 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Blasting charge is used for the federal reserve vault and nothing more.. Yet. -*/ -private["_vault","_handle"]; -_vault = param [0,ObjNull,[ObjNull]]; - -if(isNull _vault) exitWith {}; //Bad object -if(typeOf _vault != "Land_CargoBox_V1_F") exitWith {hint localize "STR_ISTR_Blast_VaultOnly"}; -if(_vault GVAR ["chargeplaced",false]) exitWith {hint localize "STR_ISTR_Blast_AlreadyPlaced"}; -if(_vault GVAR ["safe_open",false]) exitWith {hint localize "STR_ISTR_Blast_AlreadyOpen"}; -if(!([false,"blastingcharge",1] call life_fnc_handleInv)) exitWith {}; //Error? - -_vault SVAR ["chargeplaced",true,true]; -[0,"STR_ISTR_Blast_Placed"] remoteExecCall ["life_fnc_broadcast",west]; -hint localize "STR_ISTR_Blast_KeepOff"; -_handle = [] spawn life_fnc_demoChargeTimer; -[] remoteExec ["life_fnc_demoChargeTimer",west]; - -waitUntil {scriptDone _handle}; -sleep 0.9; -if(!(fed_bank getVariable["chargeplaced",false])) exitWith {hint localize "STR_ISTR_Blast_Disarmed"}; - -_bomb = "Bo_GBU12_LGB_MI10" createVehicle [getPosATL fed_bank select 0, getPosATL fed_bank select 1, (getPosATL fed_bank select 2)+0.5]; -fed_bank SVAR ["chargeplaced",false,true]; -fed_bank SVAR ["safe_open",true,true]; - -hint localize "STR_ISTR_Blast_Opened"; \ No newline at end of file diff --git a/Altis_Life.Altis/core/items/fn_boltcutter.sqf b/Altis_Life.Altis/core/items/fn_boltcutter.sqf deleted file mode 100644 index 774c831c..00000000 --- a/Altis_Life.Altis/core/items/fn_boltcutter.sqf +++ /dev/null @@ -1,91 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Breaks the lock on a single door (Closet door to the player). -*/ -private["_building","_door","_doors","_cpRate","_title","_progressBar","_titleText","_cp","_ui"]; -_building = param [0,ObjNull,[ObjNull]]; - -if(isNull _building) exitWith {}; -if(!(_building isKindOf "House_F")) exitWith {hint "You are not looking at a house door."}; -if(isNil "life_boltcutter_uses") then {life_boltcutter_uses = 0;}; - -if((nearestObject [[16019.5,16952.9,0],"Land_Dome_Big_F"]) == _building OR (nearestObject [[16019.5,16952.9,0],"Land_Research_house_V1_F"]) == _building) then { - [[1,2],"STR_ISTR_Bolt_AlertFed",true,[]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; -} else { - [0,"STR_ISTR_Bolt_AlertHouse",true,[profileName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; -}; - -_doors = FETCH_CONFIG2(getNumber,CONFIG_VEHICLES,(typeOf _building), "numberOfDoors"); - -_door = 0; -//Find the nearest door -for "_i" from 1 to _doors do { - _selPos = _building selectionPosition format["Door_%1_trigger",_i]; - _worldSpace = _building modelToWorld _selPos; - if(player distance _worldSpace < 5) exitWith {_door = _i;}; -}; -if(_door == 0) exitWith {hint localize "STR_Cop_NotaDoor"}; //Not near a door to be broken into. -if((_building GVAR [format["bis_disabled_Door_%1",_door],0]) == 0) exitWith {hint localize "STR_House_Raid_DoorUnlocked"}; -life_action_inUse = true; - -//Setup the progress bar -disableSerialization; -_title = localize "STR_ISTR_Bolt_Process"; -5 cutRsc ["life_progress","PLAIN"]; -_ui = GVAR_UINS "life_progress"; -_progressBar = _ui displayCtrl 38201; -_titleText = _ui displayCtrl 38202; -_titleText ctrlSetText format["%2 (1%1)...","%",_title]; -_progressBar progressSetPosition 0.01; -_cP = 0.01; - -switch (typeOf _building) do { - case "Land_Dome_Big_F": {_cpRate = 0.003;}; - case "Land_Research_house_V1_F": {_cpRate = 0.0015;}; - default {_cpRate = 0.08;} -}; - -while {true} do -{ - if(animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { - [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; - player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; - player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; - }; - sleep 0.26; - if(isNull _ui) then { - 5 cutRsc ["life_progress","PLAIN"]; - _ui = GVAR_UINS "life_progress"; - _progressBar = _ui displayCtrl 38201; - _titleText = _ui displayCtrl 38202; - }; - _cP = _cP + _cpRate; - _progressBar progressSetPosition _cP; - _titleText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_title]; - if(_cP >= 1 OR !alive player) exitWith {}; - if(life_istazed) exitWith {}; //Tazed - if(life_interrupted) exitWith {}; -}; - -//Kill the UI display and check for various states -5 cutText ["","PLAIN"]; -player playActionNow "stop"; -if(!alive player OR life_istazed) exitWith {life_action_inUse = false;}; -if((player GVAR ["restrained",false])) exitWith {life_action_inUse = false;}; -if(life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; -life_boltcutter_uses = life_boltcutter_uses + 1; -life_action_inUse = false; - -if(life_boltcutter_uses >= 5) then { - [false,"boltcutter",1] call life_fnc_handleInv; - life_boltcutter_uses = 0; -}; - -_building SVAR [format["bis_disabled_Door_%1",_door],0,true]; //Unlock the door. -if((_building GVAR ["locked",false])) then { - _building SVAR ["locked",false,true]; -}; -[getPlayerUID player,profileName,"459"] remoteExecCall ["life_fnc_wantedAdd",RSERV]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/items/fn_defuseKit.sqf b/Altis_Life.Altis/core/items/fn_defuseKit.sqf deleted file mode 100644 index 64055ab5..00000000 --- a/Altis_Life.Altis/core/items/fn_defuseKit.sqf +++ /dev/null @@ -1,57 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Defuses blasting charges for the cops? -*/ -private["_vault","_ui","_title","_progressBar","_cP","_titleText"]; -_vault = param [0,ObjNull,[ObjNull]]; - -if(isNull _vault) exitWith {}; -if(typeOf _vault != "Land_CargoBox_V1_F") exitWith {}; -if(!(_vault GVAR ["chargeplaced",false])) exitWith {hint localize "STR_ISTR_Defuse_Nothing"}; - -life_action_inUse = true; -//Setup the progress bar -disableSerialization; - -_title = localize "STR_ISTR_Defuse_Process"; -5 cutRsc ["life_progress","PLAIN"]; -_ui = GVAR_UINS "life_progress"; -_progressBar = _ui displayCtrl 38201; -_titleText = _ui displayCtrl 38202; -_titleText ctrlSetText format["%2 (1%1)...","%",_title]; -_progressBar progressSetPosition 0.01; -_cP = 0.01; - -while {true} do -{ - if(animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { - [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; - player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; - player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; - }; - sleep 0.26; - if(isNull _ui) then { - 5 cutRsc ["life_progress","PLAIN"]; - _ui = GVAR_UINS "life_progress"; - _progressBar = _ui displayCtrl 38201; - _titleText = _ui displayCtrl 38202; - }; - _cP = _cP + .0035; - _progressBar progressSetPosition _cP; - _titleText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_title]; - if(_cP >= 1 OR !alive player) exitWith {}; - if(life_interrupted) exitWith {}; -}; - -//Kill the UI display and check for various states -5 cutText ["","PLAIN"]; -player playActionNow "stop"; -if(!alive player) exitWith {life_action_inUse = false;}; -if(life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; - -life_action_inUse = false; -_vault setVariable["chargeplaced",false,true]; -[0,"STR_ISTR_Defuse_Success"] remoteExecCall ["life_fnc_broadcast",west]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/items/fn_flashbang.sqf b/Altis_Life.Altis/core/items/fn_flashbang.sqf deleted file mode 100644 index 2bda0509..00000000 --- a/Altis_Life.Altis/core/items/fn_flashbang.sqf +++ /dev/null @@ -1,61 +0,0 @@ -/* - Description: - Handles flash-banging yeahhhh.. -*/ -private["_pos","_eyeDir","_pPos","_impactPos","_norm","_angle","_blurEffect","_ppEffect"]; -_pos = [_this,0,[],[[]]] call BIS_fnc_param; -if(count _pos == 0) exitWith {}; //Badddd -if(player distance _pos > 25) exitWith {}; //Bad again. - -_pos set[2,(_pos select 2)+0.2]; -if(lineIntersects [eyePos player, ATLtoASL _pos,player]) exitWith {}; - -_eyeDir = eyeDirection player; -_pPos = getPosATL player; -_impactPos = [(_pos select 0)-(_pPos select 0),(_pos select 1)-(_pPos select 1),(_pos select 2)-(_pPos select 2)]; -_norm = sqrt((_impactPos select 0)^2+(_impactPos select 1)^2+(_impactPos select 2)^2); -_angle = aCos ((_eyeDir select 0)*((_impactPos select 0) / _norm)+((_impactPos select 1) / _norm)*(_eyeDir select 1)+((_impactPos select 2) / _norm)*(_eyeDir select 2)); - -playSound "flashbang"; -_blurEffect = ppEffectCreate ["DynamicBlur",500]; -_blurEffect ppEffectForceInNVG true; -_blurEffect ppEffectEnable true; - -if(_angle < 90) then { - //Create white-screen - _ppEffect = ppEffectCreate ["ColorCorrections",2500]; - _ppEffect ppEffectAdjust [1, 1, -0.01, [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]; - _ppEffect ppEffectCommit 0.1; - _ppEffect ppEffectEnable true; - _ppEffect ppEffectForceInNVG true; - _blurEffect ppEffectAdjust [3]; - _blurEffect ppEffectCommit 0.2; - 23 fadeSound 0.1; - sleep 13; - - _ppEffect ppEffectAdjust [1, 1, -0.02, [4.5, 3.5, 1.6, -0.02],[1.8, 1.6, 1.6, 1],[-1.5,0,-0.2,1]]; - _ppEffect ppEffectCommit 10; - sleep 5; - 15 fadeSound 1; - sleep 5; - _ppEffect ppEffectEnable false; - ppEffectDestroy _ppEffect; - - _blurEffect ppEffectAdjust [0]; - _blurEffect ppEffectCommit 3; - sleep 3; - _blurEffect ppEffectEnable false; - ppEffectDestroy _blurEffect; -} else { - _blurEffect ppEffectAdjust [2.1]; - _blurEffect ppEffectCommit 0.1; - 15 fadeSound 0.25; - sleep 15; - _blurEffect ppEffectAdjust [0]; - _blurEffect ppEffectCommit 10; - sleep 5; - 15 fadeSound 1; - sleep 5; - _blurEffect ppEffectEnable false; - ppEffectDestroy _blurEffect; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/items/fn_jerryRefuel.sqf b/Altis_Life.Altis/core/items/fn_jerryRefuel.sqf deleted file mode 100644 index bda97a62..00000000 --- a/Altis_Life.Altis/core/items/fn_jerryRefuel.sqf +++ /dev/null @@ -1,87 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_jerryRefuel.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Refuels the vehicle if the player has a fuel can. -*/ -private["_vehicle","_displayName","_upp","_ui","_progress","_pgText","_cP","_previousState"]; -_vehicle = cursorTarget; -life_interrupted = false; - -if(isNull _vehicle) exitWith {hint localize "STR_ISTR_Jerry_NotLooking"}; -if(!(_vehicle isKindOF "LandVehicle") && !(_vehicle isKindOf "Air") && !(_vehicle isKindOf "Ship")) exitWith {}; -if(player distance _vehicle > 7.5) exitWith {hint localize "STR_ISTR_Jerry_NotNear"}; - -if(!([false,"fuelFull",1] call life_fnc_handleInv)) exitWith {}; -life_action_inUse = true; - -_displayName = FETCH_CONFIG2(getText,CONFIG_VEHICLES,(typeOf _vehicle),"displayName"); - -_upp = format[localize "STR_ISTR_Jerry_Process",_displayName]; - -//Setup our progress bar. -disableSerialization; -5 cutRsc ["life_progress","PLAIN"]; -_ui = GVAR_UINS "life_progress"; -_progress = _ui displayCtrl 38201; -_pgText = _ui displayCtrl 38202; -_pgText ctrlSetText format["%2 (1%1)...","%",_upp]; -_progress progressSetPosition 0.01; -_cP = 0.01; - -while{true} do { - if(animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { - [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; - player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; - player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; - }; - sleep 0.2; - if(isNull _ui) then { - 5 cutRsc ["life_progress","PLAIN"]; - _ui = GVAR_UINS "life_progress"; - _progressBar = _ui displayCtrl 38201; - _titleText = _ui displayCtrl 38202; - }; - _cP = _cP + 0.01; - _progress progressSetPosition _cP; - _pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp]; - if(_cP >= 1) exitWith {}; - if(!alive player) exitWith {}; - if(life_interrupted) exitWith {}; -}; -life_action_inUse = false; -5 cutText ["","PLAIN"]; -player playActionNow "stop"; -if(!alive player) exitWith {}; -if(life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"];}; - - -switch (true) do { - case (_vehicle isKindOF "LandVehicle"): { - if(!local _vehicle) then { - [_vehicle,(Fuel _vehicle) + 0.5] remoteExecCall ["life_fnc_setFuel",_vehicle]; - } else { - _vehicle setFuel ((Fuel _vehicle) + 0.5); - }; - }; - - case (_vehicle isKindOf "Air"): { - if(!local _vehicle) then { - [_vehicle,(Fuel _vehicle) + 0.2] remoteExecCall ["life_fnc_setFuel",_vehicle]; - } else { - _vehicle setFuel ((Fuel _vehicle) + 0.2); - }; - }; - - case (_vehicle isKindOf "Ship"): { - if(!local _vehicle) then { - [_vehicle,(Fuel _vehicle) + 0.35] remoteExecCall ["life_fnc_setFuel",_vehicle]; - } else { - _vehicle setFuel ((Fuel _vehicle) + 0.35); - }; - }; -}; -titleText[format[localize "STR_ISTR_Jerry_Success",_displayName],"PLAIN"]; -[true,"fuelEmpty",1] call life_fnc_handleInv; \ No newline at end of file diff --git a/Altis_Life.Altis/core/items/fn_lockpick.sqf b/Altis_Life.Altis/core/items/fn_lockpick.sqf deleted file mode 100644 index e7170469..00000000 --- a/Altis_Life.Altis/core/items/fn_lockpick.sqf +++ /dev/null @@ -1,92 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_lockpick.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Main functionality for lock-picking. -*/ -private["_curTarget","_distance","_isVehicle","_title","_progressBar","_cP","_titleText","_dice","_badDistance"]; -_curTarget = cursorTarget; -life_interrupted = false; - -if(life_action_inUse) exitWith {}; -if(isNull _curTarget) exitWith {}; //Bad type -_distance = ((boundingBox _curTarget select 1) select 0) + 2; -if(player distance _curTarget > _distance) exitWith {}; //Too far - -_isVehicle = if((_curTarget isKindOf "LandVehicle") OR (_curTarget isKindOf "Ship") OR (_curTarget isKindOf "Air")) then {true} else {false}; -if(_isVehicle && _curTarget in life_vehicles) exitWith {hint localize "STR_ISTR_Lock_AlreadyHave"}; - -//More error checks -if(!_isVehicle && !isPlayer _curTarget) exitWith {}; -if(!_isVehicle && !(_curTarget GVAR ["restrained",false])) exitWith {}; - -_title = format[localize "STR_ISTR_Lock_Process",if(!_isVehicle) then {"Handcuffs"} else {getText(configFile >> "CfgVehicles" >> (typeOf _curTarget) >> "displayName")}]; -life_action_inUse = true; //Lock out other actions - -//Setup the progress bar -disableSerialization; -5 cutRsc ["life_progress","PLAIN"]; -_ui = GVAR_UINS "life_progress"; -_progressBar = _ui displayCtrl 38201; -_titleText = _ui displayCtrl 38202; -_titleText ctrlSetText format["%2 (1%1)...","%",_title]; -_progressBar progressSetPosition 0.01; -_cP = 0.01; - -while {true} do -{ - if(animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { - [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; - player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; - player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; - }; - - sleep 0.26; - - if(isNull _ui) then { - 5 cutRsc ["life_progress","PLAIN"]; - _ui = GVAR_UINS "life_progress"; - _progressBar = _ui displayCtrl 38201; - _titleText = _ui displayCtrl 38202; - }; - _cP = _cP + 0.01; - _progressBar progressSetPosition _cP; - _titleText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_title]; - - if(_cP >= 1 OR !alive player) exitWith {}; - if(life_istazed) exitWith {}; //Tazed - if(life_interrupted) exitWith {}; - if((player GVAR ["restrained",false])) exitWith {}; - if(player distance _curTarget > _distance) exitWith {_badDistance = true;}; -}; - -//Kill the UI display and check for various states -5 cutText ["","PLAIN"]; -player playActionNow "stop"; - -if(!alive player OR life_istazed) exitWith {life_action_inUse = false;}; -if((player GVAR ["restrained",false])) exitWith {life_action_inUse = false;}; -if(!isNil "_badDistance") exitWith {titleText[localize "STR_ISTR_Lock_TooFar","PLAIN"]; life_action_inUse = false;}; -if(life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; -if(!([false,"lockpick",1] call life_fnc_handleInv)) exitWith {life_action_inUse = false;}; - -life_action_inUse = false; - -if(!_isVehicle) then { - _curTarget SVAR ["restrained",false,true]; - _curTarget SVAR ["Escorting",false,true]; - _curTarget SVAR ["transporting",false,true]; -} else { - _dice = random(100); - if(_dice < 30) then { - titleText[localize "STR_ISTR_Lock_Success","PLAIN"]; - life_vehicles pushBack _curTarget; - [getPlayerUID player,profileName,"487"] remoteExecCall ["life_fnc_wantedAdd",RSERV]; - } else { - [getPlayerUID player,profileName,"215"] remoteExecCall ["life_fnc_wantedAdd",RSERV]; - [0,"STR_ISTR_Lock_FailedNOTF",true,[profileName]] remoteExecCall ["life_fnc_broadcast",west]; - titleText[localize "STR_ISTR_Lock_Failed","PLAIN"]; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/items/fn_pickaxeUse.sqf b/Altis_Life.Altis/core/items/fn_pickaxeUse.sqf deleted file mode 100644 index 81072054..00000000 --- a/Altis_Life.Altis/core/items/fn_pickaxeUse.sqf +++ /dev/null @@ -1,44 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_pickaxeUse.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Main functionality for pickaxe in mining. -*/ -closeDialog 0; -private["_mine","_itemWeight","_diff","_itemName"]; -_mine = ""; - -switch (true) do { - case (player distance (getMarkerPos "lead_1") < 30): {_mine = ["copper_unrefined",2];}; - case (player distance (getMarkerPos "iron_1") < 30): {_mine = ["iron_unrefined",2];}; - case (player distance (getMarkerPos "salt_1") < 120) : {_mine = ["salt_unrefined",4];}; - case (player distance (getMarkerPos "sand_1") < 75) : {_mine = ["sand",5];}; - case (player distance (getMarkerPos "diamond_1") < 50): {_mine = ["diamond_uncut",1];}; - case (player distance (getMarkerPos "oil_1") < 40) : {_mine = ["oil_unprocessed",1];}; - case (player distance (getMarkerPos "oil_2") < 40) : {_mine = ["oil_unprocessed",1];}; - case (player distance (getMarkerPos "rock_1") < 50): {_mine = ["rock",2];}; - default {""}; -}; -//Mine check -if(EQUAL(_mine,"")) exitWith {hint localize "STR_ISTR_Pick_NotNear"}; -if(vehicle player != player) exitWith {hint localize "STR_ISTR_Pick_MineVeh";}; - -_diff = [SEL(_mine,0),SEL(_mine,1),life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff; - -if(EQUAL(_diff,0)) exitWith {hint localize "STR_NOTF_InvFull"}; - -life_action_inUse = true; -for "_i" from 0 to 2 do { - player playMove "AinvPercMstpSnonWnonDnon_Putdown_AmovPercMstpSnonWnonDnon"; - waitUntil{animationState player != "AinvPercMstpSnonWnonDnon_Putdown_AmovPercMstpSnonWnonDnon";}; - sleep 2.5; -}; - -if(([true,SEL(_mine,0),_diff] call life_fnc_handleInv)) then { - _itemName = M_CONFIG(getText,"VirtualItems",SEL(_mine,0),"displayName"); - titleText[format[localize "STR_ISTR_Pick_Success",(localize _itemName),_diff],"PLAIN"]; -}; - -life_action_inUse = false; \ No newline at end of file diff --git a/Altis_Life.Altis/core/items/fn_spikeStrip.sqf b/Altis_Life.Altis/core/items/fn_spikeStrip.sqf deleted file mode 100644 index e15f68a3..00000000 --- a/Altis_Life.Altis/core/items/fn_spikeStrip.sqf +++ /dev/null @@ -1,27 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_spikeStrip.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Creates a spike strip and preps it. -*/ -private["_position","_spikeStrip"]; -_spikeStrip = "Land_Razorwire_F" createVehicle [0,0,0]; -_spikeStrip attachTo[player,[0,5.5,0]]; -_spikeStrip setDir 90; -_spikeStrip setVariable["item","spikeDeployed",true]; - -life_action_spikeStripDeploy = player addAction[localize "STR_ISTR_Spike_Place",{if(!isNull life_spikestrip) then {detach life_spikeStrip; life_spikeStrip = ObjNull;}; player removeAction life_action_spikeStripDeploy; life_action_spikeStripDeploy = nil;},"",999,false,false,"",'!isNull life_spikestrip']; -life_spikestrip = _spikeStrip; -waitUntil {isNull life_spikeStrip}; - -if(!isNil "life_action_spikeStripDeploy") then {player removeAction life_action_spikeStripDeploy;}; -if(isNull _spikeStrip) exitWith {life_spikestrip = ObjNull;}; - -_spikeStrip setPos [(getPos _spikeStrip select 0),(getPos _spikeStrip select 1),0]; -_spikeStrip setDamage 1; - -life_action_spikeStripPickup = player addAction[localize "STR_ISTR_Spike_Pack",life_fnc_packupSpikes,"",0,false,false,"", -' _spikes = nearestObjects[getPos player,["Land_Razorwire_F"],8] select 0; !isNil "_spikes" && !isNil {(_spikes getVariable "item")}']; -[_spikeStrip] remoteExec ["TON_fnc_spikeStrip",RSERV]; //Send it to the server for monitoring. \ No newline at end of file diff --git a/Altis_Life.Altis/core/items/fn_storageBox.sqf b/Altis_Life.Altis/core/items/fn_storageBox.sqf deleted file mode 100644 index 96c1ba84..00000000 --- a/Altis_Life.Altis/core/items/fn_storageBox.sqf +++ /dev/null @@ -1,53 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Tries to place a storage box in the nearest house. -*/ -private["_boxType","_house","_positions","_containers","_pos","_houseCfg","_className"]; -_boxType = SEL(_this,0); - -_house = nearestBuilding (getPosATL player); -if(!(_house in life_vehicles)) exitWith {hint localize "STR_ISTR_Box_NotinHouse"}; - -_containers = _house GVAR ["containers",[]]; -_houseCfg = [(typeOf _house)] call life_fnc_houseConfig; -if(count _houseCfg == 0) exitWith {}; //What the fuck happened? -if(count _containers >= (_houseCfg select 1)) exitWith {hint localize "STR_ISTR_Box_HouseFull"}; - -_slots = _house GVAR ["slots",[]]; -_positions = [_house] call life_fnc_getBuildingPositions; -_pos = [0,0,0]; -{ - _slots = _house GVAR ["slots",[]]; - if(!(_forEachIndex in _slots)) exitWith { - _slots pushBack _forEachIndex; - _house setVariable["slots",_slots,true]; - _pos = _x; - }; -} foreach _positions; - -if(_pos isEqualTo [0,0,0]) exitWith {hint localize "STR_ISTR_Box_HouseFull_2"}; -if(!([false,_boxType,1] call life_fnc_handleInv)) exitWith {}; - -switch (_boxType) do { - case "storagesmall": { _className = "Box_IND_Grenades_F"; }; - case "storagebig": { _className = "B_supplyCrate_F"; }; - default { _className = ""; }; -}; -if(_className == "") exitWith {}; - -_container = _className createVehicle [0,0,0]; -_container setPosATL _pos; -_container enableSimulation false; - -_containers pushBack _container; -_house setVariable["containers",_containers,true]; -[_house] remoteExecCall ["TON_fnc_updateHouseContainers",RSERV]; - -//Empty out the crate -clearWeaponCargoGlobal _container; -clearMagazineCargoGlobal _container; -clearItemCargoGlobal _container; -clearBackpackCargoGlobal _container; diff --git a/Altis_Life.Altis/core/jip.sqf b/Altis_Life.Altis/core/jip.sqf deleted file mode 100644 index 1f45ae03..00000000 --- a/Altis_Life.Altis/core/jip.sqf +++ /dev/null @@ -1,22 +0,0 @@ -#include "..\script_macros.hpp" -/* - File: jip.sqf - Author: Bryan "Tonic" Boardwine - - Description: - JIP functionality for JIP required things like vehicles. -*/ - -{ - _index = _x GVAR "life_VEH_color"; - if(!isNil "_index") then { - [_x,_index] spawn life_fnc_colorVehicle; - }; -} foreach (allMissionObjects "Car"); - -{ - _index = _x GVAR "life_VEH_color"; - if(!isNil "_index") then { - [_x,_index] spawn life_fnc_colorVehicle; - }; -} foreach (allMissionObjects "Air"); \ No newline at end of file diff --git a/Altis_Life.Altis/core/medical/fn_deathScreen.sqf b/Altis_Life.Altis/core/medical/fn_deathScreen.sqf deleted file mode 100644 index 3ef55fd6..00000000 --- a/Altis_Life.Altis/core/medical/fn_deathScreen.sqf +++ /dev/null @@ -1,21 +0,0 @@ -/* - File: fn_deathScreen.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Handles stuff being displayed on the death screen while - it is currently active. -*/ -private["_medicsOnline","_medicsNear"]; -disableSerialization; - -_medicsOnline = ((findDisplay 7300) displayCtrl 7304); -_medicsNear = ((findDisplay 7300) displayCtrl 7305); - -waitUntil { - _nearby = if(([independent,getPosATL player,120] call life_fnc_nearUnits)) then {"Yes"} else {"No"}; - _medicsOnline ctrlSetText format[localize "STR_Medic_Online",[independent] call life_fnc_playerCount]; - _medicsNear ctrlSetText format[localize "STR_Medic_Near",_nearby]; - sleep 1; - (isNull (findDisplay 7300)) -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/medical/fn_medicLights.sqf b/Altis_Life.Altis/core/medical/fn_medicLights.sqf deleted file mode 100644 index 5130e5c2..00000000 --- a/Altis_Life.Altis/core/medical/fn_medicLights.sqf +++ /dev/null @@ -1,81 +0,0 @@ -/* - File: fn_copLights.sqf - Author: mindstorm, modified by Adanteh - Link: http://forums.bistudio.com/showthread.php?157474-Offroad-Police-sirens-lights-and-underglow - - Description: - Adds the light effect to cop vehicles, specifically the offroad. -*/ -Private ["_vehicle","_lightRed","_lightBlue","_lightleft","_lightright","_leftRed"]; -_vehicle = _this select 0; - -if(isNil "_vehicle" OR isNull _vehicle OR !(_vehicle getVariable "lights")) exitWith {}; -_lightRed = [0.1, 0.1, 20]; -_lightBlue = [0.1, 0.1, 20]; - -_lightleft = "#lightpoint" createVehicle getpos _vehicle; -sleep 0.2; -_lightleft setLightColor _lightRed; -_lightleft setLightBrightness 0.2; -_lightleft setLightAmbient [0.1,0.1,1]; - -switch (typeOf _vehicle) do -{ - case "C_Offroad_01_F": - { - _lightleft lightAttachObject [_vehicle, [-0.37, 0.0, 0.56]]; - }; -}; - -_lightleft setLightAttenuation [0.181, 0, 1000, 130]; -_lightleft setLightIntensity 10; -_lightleft setLightFlareSize 0.38; -_lightleft setLightFlareMaxDistance 150; -_lightleft setLightUseFlare true; - -_lightright = "#lightpoint" createVehicle getpos _vehicle; -sleep 0.2; -_lightright setLightColor _lightBlue; -_lightright setLightBrightness 0.2; -_lightright setLightAmbient [0.1,0.1,1]; - -switch (typeOf _vehicle) do -{ - case "C_Offroad_01_F": - { - _lightright lightAttachObject [_vehicle, [0.37, 0.0, 0.56]]; - }; -}; - -_lightright setLightAttenuation [0.181, 0, 1000, 130]; -_lightright setLightIntensity 10; -_lightright setLightFlareSize 0.38; -_lightright setLightFlareMaxDistance 150; -_lightright setLightUseFlare true; - -//ARE YOU ALL HAPPY?!?!?!?!?!?!?!?!?%#?@WGD?TGD?BN?ZDHBFD?GA -_lightleft setLightDayLight true; -_lightright setLightDayLight true; - -_leftRed = true; -while{ (alive _vehicle)} do -{ - if(!(_vehicle getVariable "lights")) exitWith {}; - if(_leftRed) then - { - _leftRed = false; - _lightright setLightBrightness 0.0; - sleep 0.05; - _lightleft setLightBrightness 6; - } - else - { - _leftRed = true; - _lightleft setLightBrightness 0.0; - sleep 0.05; - _lightright setLightBrightness 6; - }; - sleep (_this select 1); -}; -deleteVehicle _lightleft; -deleteVehicle _lightright; \ No newline at end of file diff --git a/Altis_Life.Altis/core/medical/fn_medicMarkers.sqf b/Altis_Life.Altis/core/medical/fn_medicMarkers.sqf deleted file mode 100644 index 67db767f..00000000 --- a/Altis_Life.Altis/core/medical/fn_medicMarkers.sqf +++ /dev/null @@ -1,33 +0,0 @@ -/* - File: fn_medicMarkers.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Marks downed players on the map when it's open. -*/ -private["_markers","_units"]; -_markers = []; -_units = []; - -sleep 0.25; -if(visibleMap) then { - { - _name = _x getVariable "name"; - _down = _x getVariable ["Revive",false]; - if(!isNil "_name" && !_down) then { - _units pushBack _x; - }; - } foreach allDeadMen; - - //Loop through and create markers. - { - _marker = createMarkerLocal [format["%1_dead_marker",_x],visiblePosition _x]; - _marker setMarkerColorLocal "ColorRed"; - _marker setMarkerTypeLocal "loc_Hospital"; - _marker setMarkerTextLocal format["%1",(_x getVariable["name","Unknown Player"])]; - _markers pushBack _marker; - } foreach _units; - - waitUntil {!visibleMap}; - {deleteMarkerLocal _x;} foreach _markers; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/medical/fn_medicRequest.sqf b/Altis_Life.Altis/core/medical/fn_medicRequest.sqf deleted file mode 100644 index d505ec4e..00000000 --- a/Altis_Life.Altis/core/medical/fn_medicRequest.sqf +++ /dev/null @@ -1,16 +0,0 @@ -/* - File: fn_medicRequest.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Notifies the medics that someone has requested emergency and prompts them - if they want to take the request or not. -*/ -params [ - ["_caller",objNull,[objNull]], - ["_callerName","Unknown Player",[""]] -]; - -if(isNull _caller) exitWith {}; //Bad data - -["MedicalRequestEmerg",[format[localize "STR_Medic_Request",_callerName]]] call BIS_fnc_showNotification; diff --git a/Altis_Life.Altis/core/medical/fn_medicSiren.sqf b/Altis_Life.Altis/core/medical/fn_medicSiren.sqf deleted file mode 100644 index f3973d67..00000000 --- a/Altis_Life.Altis/core/medical/fn_medicSiren.sqf +++ /dev/null @@ -1,26 +0,0 @@ -/* - Author: Bryan "Tonic" Boardwine - - Description: - Start playing the siren for medics. - - *NOTE I DO NOT HAVE A SOUND FOR THIS BUT I"M LEAVING THE CODE HERE FOR OTHER PEOPLE TO ADD IT*. -*/ - - -private["_vehicle"]; -_vehicle = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; - -if(isNull _vehicle) exitWith {}; -if(isNil {_vehicle getVariable "siren"}) exitWith {}; - -while {true} do -{ - if(!(_vehicle getVariable "siren")) exitWith {}; - if(count (crew (_vehicle)) == 0) then {_vehicle setVariable["siren",false,true]}; - if(!alive _vehicle) exitWith {}; - if(isNull _vehicle) exitWith {}; - _vehicle say3D "SirenLong"; - sleep 4.7; - if(!(_vehicle getVariable "siren")) exitWith {}; -}; diff --git a/Altis_Life.Altis/core/medical/fn_medicSirenLights.sqf b/Altis_Life.Altis/core/medical/fn_medicSirenLights.sqf deleted file mode 100644 index ad46c78e..00000000 --- a/Altis_Life.Altis/core/medical/fn_medicSirenLights.sqf +++ /dev/null @@ -1,22 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_sirenLights.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Lets play a game! Can you guess what it does? I have faith in you, if you can't - then you have failed me and therefor I lose all faith in humanity.. No pressure. -*/ -private ["_vehicle","_trueorfalse"]; -_vehicle = param [0,ObjNull,[ObjNull]]; -if(isNull _vehicle) exitWith {}; //Bad entry! -if(!(typeOf _vehicle in ["C_Offroad_01_F"])) exitWith {}; //Last chance check to prevent something from defying humanity and creating a monster. - -_trueorfalse = _vehicle GVAR ["lights",FALSE]; - -if(_trueorfalse) then { - _vehicle SVAR ["lights",FALSE,TRUE]; -} else { - _vehicle SVAR ["lights",TRUE,TRUE]; - [_vehicle,0.22] remoteExec ["life_fnc_medicLights",RCLIENT]; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/medical/fn_onPlayerKilled.sqf b/Altis_Life.Altis/core/medical/fn_onPlayerKilled.sqf deleted file mode 100644 index 11cd75a8..00000000 --- a/Altis_Life.Altis/core/medical/fn_onPlayerKilled.sqf +++ /dev/null @@ -1,105 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_onPlayerKilled.sqf - Author: Bryan "Tonic" Boardwine - - Description: - When the player dies collect various information about that player - and pull up the death dialog / camera functionality. -*/ -params [ - ["_unit",objNull,[objNull]], - ["_killer",objNull,[objNull]] -]; - -disableSerialization; - -//Set some vars -_unit SVAR ["Revive",FALSE,TRUE]; //Set the corpse to a revivable state. -_unit SVAR ["name",profileName,TRUE]; //Set my name so they can say my name. -_unit SVAR ["restrained",FALSE,TRUE]; -_unit SVAR ["Escorting",FALSE,TRUE]; -_unit SVAR ["transporting",FALSE,TRUE]; //Why the fuck do I have this? Is it used? -_unit SVAR ["steam64id",(getPlayerUID player),true]; //Set the UID. - -//Setup our camera view -life_deathCamera = "CAMERA" camCreate (getPosATL _unit); -showCinemaBorder TRUE; -life_deathCamera cameraEffect ["Internal","Back"]; -createDialog "DeathScreen"; -life_deathCamera camSetTarget _unit; -life_deathCamera camSetRelPos [0,3.5,4.5]; -life_deathCamera camSetFOV .5; -life_deathCamera camSetFocus [50,0]; -life_deathCamera camCommit 0; - -(findDisplay 7300) displaySetEventHandler ["KeyDown","if((_this select 1) == 1) then {true}"]; //Block the ESC menu - -//Create a thread for something? -_unit spawn { - private["_maxTime","_RespawnBtn","_Timer"]; - disableSerialization; - _RespawnBtn = ((findDisplay 7300) displayCtrl 7302); - _Timer = ((findDisplay 7300) displayCtrl 7301); - - _maxTime = time + (life_respawn_timer * 60); - _RespawnBtn ctrlEnable false; - waitUntil {_Timer ctrlSetText format[localize "STR_Medic_Respawn",[(_maxTime - time),"MM:SS.MS"] call BIS_fnc_secondsToString]; - round(_maxTime - time) <= 0 OR isNull _this}; - _RespawnBtn ctrlEnable true; - _Timer ctrlSetText localize "STR_Medic_Respawn_2"; -}; - -[] spawn life_fnc_deathScreen; - -//Create a thread to follow with some what precision view of the corpse. -[_unit] spawn { - private["_unit"]; - _unit = _this select 0; - waitUntil {if(speed _unit == 0) exitWith {true}; life_deathCamera camSetTarget _unit; life_deathCamera camSetRelPos [0,3.5,4.5]; life_deathCamera camCommit 0;}; -}; - -//Make the killer wanted -if(!isNull _killer && {_killer != _unit} && {side _killer != west} && {alive _killer}) then { - if(vehicle _killer isKindOf "LandVehicle") then { - [getPlayerUID _killer,_killer GVAR ["realname",name _killer],"187V"] remoteExecCall ["life_fnc_wantedAdd",RSERV]; - //Get rid of this if you don't want automatic vehicle license removal. - if(!local _killer) then { - [2] remoteExecCall ["life_fnc_removeLicenses",_killer]; - }; - } else { - [getPlayerUID _killer,_killer GVAR ["realname",name _killer],"187"] remoteExecCall ["life_fnc_wantedAdd",RSERV]; - - if(!local _killer) then { - [3] remoteExecCall ["life_fnc_removeLicenses",_killer]; - }; - }; -}; - -//Killed by cop stuff... -if(side _killer == west && playerSide != west) then { - life_copRecieve = _killer; - //Did I rob the federal reserve? - if(!life_use_atm && {CASH > 0}) then { - [format[localize "STR_Cop_RobberDead",[CASH] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; - CASH = 0; - }; -}; - -if(!isNull _killer && {_killer != _unit}) then { - life_removeWanted = true; -}; - -_handle = [_unit] spawn life_fnc_dropItems; -waitUntil {scriptDone _handle}; - -life_hunger = 100; -life_thirst = 100; -life_carryWeight = 0; -CASH = 0; - -[] call life_fnc_hudUpdate; //Get our HUD updated. -[player,life_sidechat,playerSide] remoteExecCall ["TON_fnc_managesc",RSERV]; - -[0] call SOCK_fnc_updatePartial; -[3] call SOCK_fnc_updatePartial; \ No newline at end of file diff --git a/Altis_Life.Altis/core/medical/fn_onPlayerRespawn.sqf b/Altis_Life.Altis/core/medical/fn_onPlayerRespawn.sqf deleted file mode 100644 index 13f7f619..00000000 --- a/Altis_Life.Altis/core/medical/fn_onPlayerRespawn.sqf +++ /dev/null @@ -1,30 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_onPlayerRespawn.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Does something but I won't know till I write it... -*/ -private["_unit","_corpse","_containers"]; -_unit = SEL(_this,0); -_corpse = SEL(_this,1); -life_corpse = _corpse; - -//Comment this code out if you want them to keep the weapon on the ground. -_containers = nearestObjects[getPosATL _corpse,["WeaponHolderSimulated"],5]; //Fetch list of containers (Simulated = weapons) -{deleteVehicle _x;} foreach _containers; //Delete the containers. - -//Set some vars on our new body. -_unit SVAR ["restrained",FALSE,TRUE]; -_unit SVAR ["Escorting",FALSE,TRUE]; -_unit SVAR ["transporting",FALSE,TRUE]; //Again why the fuck am I setting this? Can anyone tell me? -_unit SVAR ["steam64id",steamid,true]; //Reset the UID. -_unit SVAR ["realname",profileName,true]; //Reset the players name. - -_unit addRating 1e12; //Set our rating to a high value, this is for a ARMA engine thing. -player playMoveNow "amovppnemstpsraswrfldnon"; - -[] call life_fnc_setupActions; -[_unit,life_sidechat,playerSide] remoteExecCall ["TON_fnc_managesc",RSERV]; -if(EQUAL(LIFE_SETTINGS(getNumber,"enable_fatigue"),0)) then {player enableFatigue false;}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/medical/fn_requestMedic.sqf b/Altis_Life.Altis/core/medical/fn_requestMedic.sqf deleted file mode 100644 index 6f16f94c..00000000 --- a/Altis_Life.Altis/core/medical/fn_requestMedic.sqf +++ /dev/null @@ -1,25 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_requestMedic.sqf - Author: Bryan "Tonic" Boardwine - - Description: - N/A -*/ -private "_medicsOnline"; -_medicsOnline = {_x != player && {side _x == independent} && {alive _x}} count playableUnits > 0; //Check if medics (indep) are in the room. - -if(_medicsOnline) then { - //There is medics let's send them the request. - [life_corpse,profileName] remoteExecCall ["life_fnc_medicRequest",independent]; -} else { - //No medics were online, send it to the police. - [life_corpse,profileName] remoteExecCall ["life_fnc_copMedicRequest",west]; -}; - -//Create a thread to monitor duration since last request (prevent spammage). -[] spawn { - ((findDisplay 7300) displayCtrl 7303) ctrlEnable false; - sleep (2 * 60); - ((findDisplay 7300) displayCtrl 7303) ctrlEnable true; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/medical/fn_respawned.sqf b/Altis_Life.Altis/core/medical/fn_respawned.sqf deleted file mode 100644 index 2182b5c2..00000000 --- a/Altis_Life.Altis/core/medical/fn_respawned.sqf +++ /dev/null @@ -1,76 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_respawned.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Sets the player up if he/she used the respawn option. -*/ -private["_handle"]; -//Reset our weight and other stuff - -life_use_atm = true; -life_hunger = 100; -life_thirst = 100; -life_carryWeight = 0; -CASH = 0; //Make sure we don't get our cash back. -life_respawned = false; -player playMove "amovpercmstpsnonwnondnon"; - -life_corpse SVAR ["Revive",nil,TRUE]; -life_corpse SVAR ["name",nil,TRUE]; -life_corpse SVAR ["Reviving",nil,TRUE]; -player SVAR ["Revive",nil,TRUE]; -player SVAR ["name",nil,TRUE]; -player SVAR ["Reviving",nil,TRUE]; - -//Load gear for a 'new life' -switch(playerSide) do -{ - case west: { - _handle = [] spawn life_fnc_copLoadout; - }; - case civilian: { - _handle = [] spawn life_fnc_civLoadout; - }; - case independent: { - _handle = [] spawn life_fnc_medicLoadout; - }; - waitUntil {scriptDone _handle}; -}; - -//Cleanup of weapon containers near the body & hide it. -if(!isNull life_corpse) then { - private "_containers"; - life_corpse SVAR ["Revive",TRUE,TRUE]; - _containers = nearestObjects[life_corpse,["WeaponHolderSimulated"],5]; - {deleteVehicle _x;} foreach _containers; //Delete the containers. - hideBody life_corpse; -}; - -//Destroy our camera... -life_deathCamera cameraEffect ["TERMINATE","BACK"]; -camDestroy life_deathCamera; - -//Bad boy -if(life_is_arrested) exitWith { - hint localize "STR_Jail_Suicide"; - life_is_arrested = false; - [player,TRUE] spawn life_fnc_jail; - [] call SOCK_fnc_updateRequest; -}; - -//Johnny law got me but didn't let the EMS revive me, reward them half the bounty. -if(!isNil "life_copRecieve") then { - [player,life_copRecieve,true] remoteExecCall ["life_fnc_wantedBounty",RSERV]; - life_copRecieve = nil; -}; - -//So I guess a fellow gang member, cop or myself killed myself so get me off that Altis Most Wanted -if(life_removeWanted) then { - [getPlayerUID player] remoteExecCall ["life_fnc_wantedRemove",RSERV]; -}; - -[] call life_fnc_playerSkins; -[] call SOCK_fnc_updateRequest; -[] call life_fnc_hudUpdate; //Request update of hud. diff --git a/Altis_Life.Altis/core/medical/fn_revivePlayer.sqf b/Altis_Life.Altis/core/medical/fn_revivePlayer.sqf deleted file mode 100644 index 7b7b76d6..00000000 --- a/Altis_Life.Altis/core/medical/fn_revivePlayer.sqf +++ /dev/null @@ -1,75 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_revivePlayer.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Starts the revive process on the player. -*/ -private["_target","_revivable","_targetName","_ui","_progressBar","_titleText","_cP","_title"]; -_target = param [0,ObjNull,[ObjNull]]; -if(isNull _target) exitWith {}; //DAFUQ?@!%$!R?EFFD?TGSF?HBS?DHBFNFD?YHDGN?D?FJH - -_revivable = _target GVAR ["Revive",FALSE]; -if(_revivable) exitWith {}; -if(_target GVAR ["Reviving",ObjNull] == player) exitWith {hint localize "STR_Medic_AlreadyReviving";}; -if(player distance _target > 5) exitWith {}; //Not close enough. - -//Fetch their name so we can shout it. -_targetName = _target GVAR ["name","Unknown"]; -_title = format[localize "STR_Medic_Progress",_targetName]; -life_action_inUse = true; //Lockout the controls. - -_target SVAR ["Reviving",player,TRUE]; -//Setup our progress bar -disableSerialization; -5 cutRsc ["life_progress","PLAIN"]; -_ui = GVAR_UINS ["life_progress",displayNull]; -_progressBar = _ui displayCtrl 38201; -_titleText = _ui displayCtrl 38202; -_titleText ctrlSetText format["%2 (1%1)...","%",_title]; -_progressBar progressSetPosition 0.01; -_cP = 0.01; - -//Lets reuse the same thing! -while {true} do { - if(animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { - [player,"AinvPknlMstpSnonWnonDnon_medic_1"] remoteExecCall ["life_fnc_animSync",RCLIENT]; - player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; - }; - - sleep .15; - _cP = _cP + .01; - _progressBar progressSetPosition _cP; - _titleText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_title]; - if(_cP >= 1 OR !alive player) exitWith {}; - if(life_istazed) exitWith {}; //Tazed - if(life_interrupted) exitWith {}; - if((player GVAR ["restrained",false])) exitWith {}; - if(player distance _target > 4) exitWith {_badDistance = true;}; - if(_target GVAR ["Revive",FALSE]) exitWith {}; - if(_target GVAR ["Reviving",ObjNull] != player) exitWith {}; -}; - -//Kill the UI display and check for various states -5 cutText ["","PLAIN"]; -player playActionNow "stop"; - -if(_target GVAR ["Reviving",ObjNull] != player) exitWith {hint localize "STR_Medic_AlreadyReviving"}; -_target SVAR ["Reviving",NIL,TRUE]; - -if(!alive player OR life_istazed) exitWith {life_action_inUse = false;}; -if(_target GVAR ["Revive",FALSE]) exitWith {hint localize "STR_Medic_RevivedRespawned"}; -if((player GVAR ["restrained",false])) exitWith {life_action_inUse = false;}; -if(!isNil "_badDistance") exitWith {titleText[localize "STR_Medic_TooFar","PLAIN"]; life_action_inUse = false;}; -if(life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; - -ADD(BANK,(LIFE_SETTINGS(getNumber,"revive_fee"))); - -life_action_inUse = false; -_target SVAR ["Revive",TRUE,TRUE]; -[profileName] remoteExecCall ["life_fnc_revived",_target]; -titleText[format[localize "STR_Medic_RevivePayReceive",_targetName,[(call life_revive_fee)] call life_fnc_numberText],"PLAIN"]; - -sleep .6; -player reveal _target; \ No newline at end of file diff --git a/Altis_Life.Altis/core/medical/fn_revived.sqf b/Altis_Life.Altis/core/medical/fn_revived.sqf deleted file mode 100644 index 3888c2cb..00000000 --- a/Altis_Life.Altis/core/medical/fn_revived.sqf +++ /dev/null @@ -1,44 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_revived.sqf - Author: Bryan "Tonic" Boardwine - - Description: - THANK YOU JESUS I WAS SAVED! -*/ -private["_medic","_dir"]; -_medic = param [0,"Unknown Medic",[""]]; - -_oldGear = [life_corpse] call life_fnc_fetchDeadGear; -[_oldGear] spawn life_fnc_loadDeadGear; -life_corpse SVAR ["realname",nil,true]; //Should correct the double name sinking into the ground. -[life_corpse] remoteExecCall ["life_fnc_corpse",RANY]; - -_dir = getDir life_corpse; -hint format[localize "STR_Medic_RevivePay",_medic,[LIFE_SETTINGS(getNumber,"revive_fee")] call life_fnc_numberText]; - -closeDialog 0; -life_deathCamera cameraEffect ["TERMINATE","BACK"]; -camDestroy life_deathCamera; - -//Take fee for services. -if(BANK > (call life_revive_fee)) then { - SUB(BANK,(LIFE_SETTINGS(getNumber,"revive_fee"))); -} else { - BANK = 0; -}; - -[] call life_fnc_playerSkins; - -//Bring me back to life. -player setDir _dir; -player setPosASL (visiblePositionASL life_corpse); -life_corpse SVAR ["Revive",nil,TRUE]; -life_corpse SVAR ["name",nil,TRUE]; -[life_corpse] remoteExecCall ["life_fnc_corpse",RANY]; -hideBody life_corpse; - -player SVAR ["Revive",nil,TRUE]; -player SVAR ["name",nil,TRUE]; -player SVAR ["Reviving",nil,TRUE]; -[] call life_fnc_hudUpdate; //Request update of hud. \ No newline at end of file diff --git a/Altis_Life.Altis/core/pmenu/fn_cellphone.sqf b/Altis_Life.Altis/core/pmenu/fn_cellphone.sqf deleted file mode 100644 index a60320a7..00000000 --- a/Altis_Life.Altis/core/pmenu/fn_cellphone.sqf +++ /dev/null @@ -1,35 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_cellphone.sqf - Author: Alan - - Description: - Opens the cellphone menu? -*/ -private["_display","_units","_type"]; - -disableSerialization; -waitUntil {!isNull findDisplay 3000}; -_display = findDisplay 3000; -_units = _display displayCtrl 3004; - -ctrlSetText [3003, ""]; -lbClear _units; - -if((FETCH_CONST(life_adminlevel) < 1)) then { - ctrlShow[3020,false]; - ctrlShow[3021,false]; -}; -{ - if(alive _x && _x != player) then { - switch (side _x) do { - case west: {_type = "Cop"}; - case civilian: {_type = "Civ"}; - case independent: {_type = "Med"}; - }; - _units lbAdd format["%1 (%2)",_x GVAR ["realname",name _x],_type]; - _units lbSetData [(lbSize _units)-1,str(_x)]; - }; -} foreach playableUnits; - -lbSetCurSel [3004,0]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/pmenu/fn_giveItem.sqf b/Altis_Life.Altis/core/pmenu/fn_giveItem.sqf deleted file mode 100644 index 7fbf02a7..00000000 --- a/Altis_Life.Altis/core/pmenu/fn_giveItem.sqf +++ /dev/null @@ -1,37 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_giveItem.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Gives the selected item & amount to the selected player and - removes the item & amount of it from the players virtual - inventory. -*/ -private["_unit","_val"]; -_val = ctrlText 2010; -ctrlShow[2002,false]; -if((lbCurSel 2023) == -1) exitWith {hint "No one was selected!"; -ctrlShow[2002,true];}; -_unit = lbData [2023,lbCurSel 2023]; -_unit = call compile format["%1",_unit]; - -if((lbCurSel 2005) == -1) exitWith {hint "You didn't select an item you wanted to give.";ctrlShow[2002,true];}; - -_item = lbData [2005,(lbCurSel 2005)]; -if(isNil "_unit") exitWith {ctrlShow[2002,true];}; -if(_unit == player) exitWith {ctrlShow[2002,true];}; -if(isNull _unit) exitWith {ctrlShow[2002,true];}; - -//A series of checks *ugh* -if(!([_val] call TON_fnc_isnumber)) exitWith {hint "You didn't enter an actual number format.";ctrlShow[2002,true];}; -if(parseNumber(_val) <= 0) exitWith {hint "You need to enter an actual amount you want to give.";ctrlShow[2002,true];}; -if(isNil "_unit") exitWith {ctrlShow[2001,true]; hint "The selected player is not within range";}; -if(!([false,_item,(parseNumber _val)] call life_fnc_handleInv)) exitWith {hint "Couldn't give that much of that item, maybe you don't have that amount?";ctrlShow[2002,true];}; - -[_unit,_val,_item,player] remoteExecCall ["life_fnc_receiveItem",_unit]; -_type = M_CONFIG(getText,"VirtualItems",_item,"displayName"); -hint format["You gave %1 %2 %3",_unit getVariable["realname",name _unit],_val,(localize _type)]; -[] call life_fnc_p_updateMenu; - -ctrlShow[2002,true]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/pmenu/fn_giveMoney.sqf b/Altis_Life.Altis/core/pmenu/fn_giveMoney.sqf deleted file mode 100644 index a6afaa77..00000000 --- a/Altis_Life.Altis/core/pmenu/fn_giveMoney.sqf +++ /dev/null @@ -1,34 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_giveMoney.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Gives the selected amount of money to the selected player. -*/ -private["_unit","_amount"]; -_amount = ctrlText 2018; -ctrlShow[2001,false]; -if((lbCurSel 2022) == -1) exitWith {hint "No one was selected!";ctrlShow[2001,true];}; -_unit = lbData [2022,lbCurSel 2022]; -_unit = call compile format["%1",_unit]; -if(isNil "_unit") exitWith {ctrlShow[2001,true];}; -if(_unit == player) exitWith {ctrlShow[2001,true];}; -if(isNull _unit) exitWith {ctrlShow[2001,true];}; - -//A series of checks *ugh* -if(!life_use_atm) exitWith {hint "You recently robbed the bank! You can't give money away just yet.";ctrlShow[2001,true];}; -if(!([_amount] call TON_fnc_isnumber)) exitWith {hint "You didn't enter an actual number format.";ctrlShow[2001,true];}; -if(parseNumber(_amount) <= 0) exitWith {hint "You need to enter an actual amount you want to give.";ctrlShow[2001,true];}; -if(parseNumber(_amount) > CASH) exitWith {hint "You don't have that much to give!";ctrlShow[2001,true];}; -if(isNull _unit) exitWith {ctrlShow[2001,true];}; -if(isNil "_unit") exitWith {ctrlShow[2001,true]; hint "The selected player is not within range";}; - -hint format["You gave $%1 to %2",[(parseNumber(_amount))] call life_fnc_numberText,_unit getVariable["realname",name _unit]]; -CASH = CASH - (parseNumber(_amount)); - -[0] call SOCK_fnc_updatePartial; -[_unit,_amount,player] remoteExecCall ["life_fnc_receiveMoney",_unit]; -[] call life_fnc_p_updateMenu; - -ctrlShow[2001,true]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/pmenu/fn_keyDrop.sqf b/Altis_Life.Altis/core/pmenu/fn_keyDrop.sqf deleted file mode 100644 index 566ffc29..00000000 --- a/Altis_Life.Altis/core/pmenu/fn_keyDrop.sqf +++ /dev/null @@ -1,26 +0,0 @@ -/* - File: fn_keyDrop.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Drops the key. -*/ -private["_dialog","_list","_sel","_vehicle","_impounded","_owners","_index","_index2","_i"]; -disableSerialization; - -_dialog = findDisplay 2700; -_list = _dialog displayCtrl 2701; -_sel = lbCurSel _list; -if(_sel == -1) exitWith {hint "No Data Selected";}; -_index = (parseNumber(_list lbData _sel)); -_vehicle = life_vehicles select _index; -if(_vehicle isKindOf "House_F") exitWith {hint "You can't remove the keys to your house!"}; -_owners = _vehicle getVariable "vehicle_info_owners"; - -_index2 = [(getPlayerUID player),_owners] call TON_fnc_index; -life_vehicles = life_vehicles - [_vehicle]; -_owners set[_index,-1]; -_owners = _owners - [-1]; -_vehicle setVariable["vehicle_info_owners",_owners,true]; - -[] spawn life_fnc_keyMenu; \ No newline at end of file diff --git a/Altis_Life.Altis/core/pmenu/fn_keyGive.sqf b/Altis_Life.Altis/core/pmenu/fn_keyGive.sqf deleted file mode 100644 index 8bdb4464..00000000 --- a/Altis_Life.Altis/core/pmenu/fn_keyGive.sqf +++ /dev/null @@ -1,35 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_keyGive.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Gives a copy of the key for the selected vehicle to the selected player. - Player must be within range. -*/ -private["_dialog","_list","_plist","_sel","_vehicle","_owners","_index","_unit","_uid"]; -disableSerialization; - -_dialog = findDisplay 2700; -_list = _dialog displayCtrl 2701; -_plist = _dialog displayCtrl 2702; - -_sel = lbCurSel _list; -_vehicle = _list lbData _sel; -_vehicle = life_vehicles select parseNumber(_vehicle); - -_sel = lbCurSel _plist; -_unit = _plist lbData _sel; -_unit = call compile format["%1", _unit]; -if(isNull _unit OR isNil "_unit") exitWith {}; - -_uid = getPlayerUID _unit; -_owners = _vehicle GVAR "vehicle_info_owners"; -_index = [_uid,_owners] call TON_fnc_index; -if(EQUAL(_index,-1)) then { - _owners pushBack [_uid,_unit GVAR ["realname",name _unit]]; - _vehicle SVAR ["vehicle_info_owners",_owners,true]; -}; - -hint format["You have given %1 keys to your %2",_unit GVAR ["realname",name _unit],typeOf _vehicle]; -[_vehicle,_unit,profileName] remoteExecCAll ["TON_fnc_clientGetKey",_unit]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/pmenu/fn_keyMenu.sqf b/Altis_Life.Altis/core/pmenu/fn_keyMenu.sqf deleted file mode 100644 index deead4ac..00000000 --- a/Altis_Life.Altis/core/pmenu/fn_keyMenu.sqf +++ /dev/null @@ -1,53 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_keyMenu.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Initializes the key menu - Will be revised. -*/ -private["_display","_vehicles","_plist","_near_units","_pic","_name","_text","_color","_index"]; -disableSerialization; - -waitUntil {!isNull (findDisplay 2700)}; -_display = findDisplay 2700; -_vehicles = _display displayCtrl 2701; -lbClear _vehicles; -_plist = _display displayCtrl 2702; -lbClear _plist; -_near_units = []; - -{ if(player distance _x < 20) then {_near_units pushBack _x};} foreach playableUnits; - -for "_i" from 0 to (count life_vehicles)-1 do { - _veh = life_vehicles select _i; - if(!isNull _veh && alive _veh) then { - _color = SEL(SEL(M_CONFIG(getArray,"CfgVehicles",(typeOf _veh),"textures"),(_veh GVAR "Life_VEH_color")),0); - if(isNil "_color") then {_color = ""}; - _text = format["(%1)",_color]; - if(_text == "()") then { - _text = ""; - }; - - _name = getText(configFile >> "CfgVehicles" >> (typeOf _veh) >> "displayName"); - _pic = getText(configFile >> "CfgVehicles" >> (typeOf _veh) >> "picture"); - _vehicles lbAdd format["%1 %3 - [Distance: %2m]",_name,round(player distance _veh),_text]; - if(_pic != "pictureStaticObject") then { - _vehicles lbSetPicture [(lbSize _vehicles)-1,_pic]; - }; - _vehicles lbSetData [(lbSize _vehicles)-1,str(_i)]; - }; -}; - -{ - if(!isNull _x && alive _x && player distance _x < 20 && _x != player) then { - _plist lbAdd format["%1 - %2",_x getVariable["realname",name _x], side _x]; - _plist lbSetData [(lbSize _plist)-1,str(_x)]; - }; -} foreach _near_units; - -if(((lbSize _vehicles)-1) == -1) then { - _vehicles lbAdd "You don't own any vehicles"; - _vehicles lbSetData [(lbSize _vehicles)-1,str(ObjNull)]; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/pmenu/fn_p_openMenu.sqf b/Altis_Life.Altis/core/pmenu/fn_p_openMenu.sqf deleted file mode 100644 index 4f983c7d..00000000 --- a/Altis_Life.Altis/core/pmenu/fn_p_openMenu.sqf +++ /dev/null @@ -1,33 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_p_openMenu.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Opens the players virtual inventory menu -*/ -if(!alive player || dialog) exitWith {}; //Prevent them from opening this for exploits while dead. -createDialog "playerSettings"; -disableSerialization; - -switch(playerSide) do { - case west: { - ctrlShow[2011,false]; - }; - - case civilian: { - ctrlShow[2012,false]; - }; -}; - -if(FETCH_CONST(life_adminlevel) < 1) then { - ctrlShow[2020,false]; - ctrlShow[2021,false]; -}; - -[] call life_fnc_p_updateMenu; - -if(FETCH_CONST(life_adminlevel) < 1) then { - ctrlShow[2020,false]; - ctrlShow[2021,false]; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/pmenu/fn_p_updateMenu.sqf b/Altis_Life.Altis/core/pmenu/fn_p_updateMenu.sqf deleted file mode 100644 index acb08aa2..00000000 --- a/Altis_Life.Altis/core/pmenu/fn_p_updateMenu.sqf +++ /dev/null @@ -1,71 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_p_updateMenu.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Updates the player menu (Virtual Interaction Menu) -*/ -private["_inv","_lic","_licenses","_near","_near_units","_mstatus","_shrt","_side","_struct"]; -disableSerialization; - -if(FETCH_CONST(life_adminlevel) < 1) then { - ctrlShow[2020,false]; - ctrlShow[2021,false]; -}; - -_side = switch(playerSide) do {case west:{"cop"}; case civilian:{"civ"}; case independent:{"med"};}; - -_inv = CONTROL(2001,2005); -_lic = CONTROL(2001,2014); -_near = CONTROL(2001,2022); -_near_i = CONTROL(2001,2023); -_mstatus = CONTROL(2001,2015); -_struct = ""; -lbClear _inv; -lbClear _near; -lbClear _near_i; - -//Near players -_near_units = []; -{ if(player distance _x < 10) then {_near_units pushBack _x};} foreach playableUnits; -{ - if(!isNull _x && alive _x && player distance _x < 10 && _x != player) then { - _near lbAdd format["%1 - %2",_x GVAR ["realname",name _x], side _x]; - _near lbSetData [(lbSize _near)-1,str(_x)]; - _near_i lbAdd format["%1 - %2",_x GVAR ["realname",name _x], side _x]; - _near_i lbSetData [(lbSize _near)-1,str(_x)]; - }; -} foreach _near_units; - -_mstatus ctrlSetStructuredText parseText format[" $%1
$%2",[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; -ctrlSetText[2009,format["Weight: %1 / %2", life_carryWeight, life_maxWeight]]; - -{ - if(ITEM_VALUE(configName _x) > 0) then { - _inv lbAdd format["%2 [x%1]",ITEM_VALUE(configName _x),localize (getText(_x >> "displayName"))]; - _inv lbSetData [(lbSize _inv)-1,configName _x]; - _icon = M_CONFIG(getText,"VirtualItems",configName _x,"icon"); - if(!(EQUAL(_icon,""))) then { - _inv lbSetPicture [(lbSize _inv)-1,_icon]; - }; - }; -} foreach ("true" configClasses (missionConfigFile >> "VirtualItems")); - -{ - _displayName = getText(_x >> "displayName"); - - if(LICENSE_VALUE(configName _x,_side)) then { - _struct = _struct + format["%1
",localize _displayName]; - }; -} foreach (format["getText(_x >> 'side') isEqualTo '%1'",_side] configClasses (missionConfigFile >> "Licenses")); - -if(EQUAL(_struct,"")) then { - _struct = "No Licenses"; -}; - -_lic ctrlSetStructuredText parseText format[" - -%1 - -",_struct]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/pmenu/fn_pardon.sqf b/Altis_Life.Altis/core/pmenu/fn_pardon.sqf deleted file mode 100644 index b2880ac3..00000000 --- a/Altis_Life.Altis/core/pmenu/fn_pardon.sqf +++ /dev/null @@ -1,21 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_pardon.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Pardons the selected player. -*/ -private["_display","_list","_uid"]; -disableSerialization; - -_display = findDisplay 2400; -_list = _display displayCtrl 2402; -_data = lbData[2401,(lbCurSel 2401)]; -_data = call compile format["%1", _data]; -if(isNil "_data") exitWith {}; -if(typeName _data != "ARRAY") exitWith {}; -if(count _data == 0) exitWith {}; - -_uid = _data select 1; -[_uid] remoteExecCall ["life_fnc_wantedPardon",RSERV]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/pmenu/fn_removeItem.sqf b/Altis_Life.Altis/core/pmenu/fn_removeItem.sqf deleted file mode 100644 index 73bd49d7..00000000 --- a/Altis_Life.Altis/core/pmenu/fn_removeItem.sqf +++ /dev/null @@ -1,24 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_removeItem.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Removes the selected item & amount to remove from the players - virtual inventory. -*/ -private["_data","_value","_obj"]; -disableSerialization; -_data = lbData[2005,(lbCurSel 2005)]; -_value = ctrlText 2010; - -if(EQUAL(_data,"")) exitWith {hint "You didn't select anything to remove.";}; -if(!([_value] call TON_fnc_isnumber)) exitWith {hint "You didn't enter an actual number format."}; -if(parseNumber(_value) <= 0) exitWith {hint "You need to enter an actual amount you want to remove."}; -if(EQUAL(ITEM_ILLEGAL(_data),1) && ([west,visiblePosition player,100] call life_fnc_nearUnits)) exitWith {titleText["This is an illegal item and cops are near by, you cannot dispose of the evidence","PLAIN"]}; -if(player != vehicle player) exitWith {titleText["You cannot remove an item when you are in a vehicle.","PLAIN"]}; -if(!([false,_data,(parseNumber _value)] call life_fnc_handleInv)) exitWith {hint "Couldn't remove that much of that item, maybe you don't have that amount?"}; - -hint format["You have successfully removed %1 %2 from your inventory.",(parseNumber _value),(localize ITEM_NAME(_data))]; - -[] call life_fnc_p_updateMenu; \ No newline at end of file diff --git a/Altis_Life.Altis/core/pmenu/fn_s_onChar.sqf b/Altis_Life.Altis/core/pmenu/fn_s_onChar.sqf deleted file mode 100644 index 1a53fb5c..00000000 --- a/Altis_Life.Altis/core/pmenu/fn_s_onChar.sqf +++ /dev/null @@ -1,36 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - When a character is entered it is validated and changes the - correct slider it is associated with. I probably over-complicated - this more then I had to but onChar behaves weird. - - PARAMS: - 0: CONTROL - 1: SCALAR (INT) - 2: STRING (Case option) -*/ -private["_control","_code","_slider","_value","_varName","_onKeyUp"]; -_control = SEL(_this,0); -_code = SEL(_this,1); -_slider = SEL(_this,2); -_onKeyUp = SEL(_this,3); - -disableSerialization; -if(isNull _control) exitWith {}; - -if(_onKeyUp) then { - _value = parseNumber(ctrlText _control); - _varName = switch(_slider) do { - case "ground": {"life_vdFoot";}; - case "vehicle": {"life_vdCar"}; - case "air": {"life_vdAir"}; - default {"life_vdFoot"}; - }; - - SVAR_MNS [_varName,_value]; - [] call life_fnc_settingsMenu; - [] call life_fnc_updateViewDistance; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/pmenu/fn_s_onCheckedChange.sqf b/Altis_Life.Altis/core/pmenu/fn_s_onCheckedChange.sqf deleted file mode 100644 index 075ecb93..00000000 --- a/Altis_Life.Altis/core/pmenu/fn_s_onCheckedChange.sqf +++ /dev/null @@ -1,37 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Switching it up and making it prettier.. -*/ -private["_option","_state"]; -_option = SEL(_this,0); -_state = SEL(_this,1); - -switch(_option) do { - case "tags": { - if(EQUAL(_state,1)) then { - life_tagson = true; - LIFE_ID_PlayerTags = ["LIFE_PlayerTags","onEachFrame","life_fnc_playerTags"] call BIS_fnc_addStackedEventHandler; - } else { - life_tagson = !true; - [LIFE_ID_PlayerTags,"onEachFrame"] call BIS_fnc_removeStackedEventHandler; - }; - }; - - case "objects": { - if(EQUAL(_state,1)) then { - life_revealObjects = true; - LIFE_ID_RevealObjects = ["LIFE_RevealObjects","onEachFrame","life_fnc_revealObjects"] call BIS_fnc_addStackedEventHandler; - } else { - life_revealObjects = !true; - [LIFE_ID_RevealObjects,"onEachFrame"] call BIS_fnc_removeStackedEventHandler; - }; - }; - - case "sidechat": { - if(EQUAL(_state,1)) then {life_sidechat = true;} else {life_sidechat = !true;}; - [player,life_sidechat,playerSide] remoteExecCall ["TON_fnc_managesc",RSERV]; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/pmenu/fn_s_onSliderChange.sqf b/Altis_Life.Altis/core/pmenu/fn_s_onSliderChange.sqf deleted file mode 100644 index afb661d1..00000000 --- a/Altis_Life.Altis/core/pmenu/fn_s_onSliderChange.sqf +++ /dev/null @@ -1,32 +0,0 @@ -/* - File: fn_s_onSliderChange.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Called when the slider is changed for any field and updates the view distance for it. -*/ -private["_mode","_value"]; -_mode = [_this,0,-1,[0]] call BIS_fnc_param; -_value = [_this,1,-1,[0]] call BIS_fnc_param; -if(_mode == -1 OR _value == -1) exitWith {}; -disableSerialization; - -switch (_mode) do { - case 0: { - life_vdFoot = round(_value); - ctrlSetText[2902,format["%1",round(_value)]]; - [] call life_fnc_updateViewDistance; - }; - - case 1: { - life_vdCar = round(_value); - ctrlSetText[2912,format["%1",round(_value)]]; - [] call life_fnc_updateViewDistance; - }; - - case 2: { - life_vdAir = round(_value); - ctrlSetText[2922,format["%1",round(_value)]]; - [] call life_fnc_updateViewDistance; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/pmenu/fn_settingsMenu.sqf b/Altis_Life.Altis/core/pmenu/fn_settingsMenu.sqf deleted file mode 100644 index 0ab2681d..00000000 --- a/Altis_Life.Altis/core/pmenu/fn_settingsMenu.sqf +++ /dev/null @@ -1,34 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_settingsMenu - Author: Bryan "Tonic" Boardwine - - Description: - Setup the settings menu. -*/ -if(isNull (findDisplay 2900)) then { - if(!createDialog "SettingsMenu") exitWith {hint "Something went wrong, the menu won't open?"}; -}; - -disableSerialization; - -ctrlSetText[2902, format["%1", life_vdFoot]]; -ctrlSetText[2912, format["%1", life_vdCar]]; -ctrlSetText[2922, format["%1", life_vdAir]]; - -/* Set up the sliders */ -{ - slidersetRange [SEL(_x,0),100,12000]; - CONTROL(2900,SEL(_x,0)) sliderSetSpeed [100,100,100]; - sliderSetPosition [SEL(_x,0),SEL(_x,1)]; -} foreach [[2901,life_vdFoot],[2911,life_vdCar],[2921,life_vdAir]]; - -if(isNil "life_tagson") then { - life_sidechat = true; - life_tagson = true; - life_revealObjects = true; -}; - -CONTROL(2900,2971) cbSetChecked life_sidechat; -CONTROL(2900,2970) cbSetChecked life_tagson; -CONTROL(2900,2972) cbSetChecked life_revealObjects; diff --git a/Altis_Life.Altis/core/pmenu/fn_updateViewDistance.sqf b/Altis_Life.Altis/core/pmenu/fn_updateViewDistance.sqf deleted file mode 100644 index a89215a8..00000000 --- a/Altis_Life.Altis/core/pmenu/fn_updateViewDistance.sqf +++ /dev/null @@ -1,13 +0,0 @@ -/* - File: fn_updateViewDistance.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Updates the view distance dependant on whether the player is on foot, a car or an aircraft. -*/ -switch (true) do -{ - case ((vehicle player) isKindOf "Man"): {setViewDistance life_vdFoot}; - case ((vehicle player) isKindOf "LandVehicle"): {setViewDistance life_vdCar}; - case ((vehicle player) isKindOf "Air"): {setViewDistance life_vdAir}; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/pmenu/fn_useItem.sqf b/Altis_Life.Altis/core/pmenu/fn_useItem.sqf deleted file mode 100644 index 5354712e..00000000 --- a/Altis_Life.Altis/core/pmenu/fn_useItem.sqf +++ /dev/null @@ -1,90 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_useItem.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Main function for item effects and functionality through the player menu. -*/ -private "_item"; -disableSerialization; -if(EQUAL(lbCurSel 2005,-1)) exitWith {hint localize "STR_ISTR_SelectItemFirst";}; -_item = CONTROL_DATA(2005); - -switch (true) do { - case (_item in ["waterBottle","coffee","redgull"]): { - if(([false,_item,1] call life_fnc_handleInv)) then { - life_thirst = 100; - if(EQUAL(LIFE_SETTINGS(getNumber,"enable_fatigue"),1)) then {player setFatigue 0;}; - if(EQUAL(_item,"redgull") && {EQUAL(LIFE_SETTINGS(getNumber,"enable_fatigue"),1)}) then { - [] spawn { - life_redgull_effect = time; - titleText[localize "STR_ISTR_RedGullEffect","PLAIN"]; - player enableFatigue false; - waitUntil {!alive player OR ((time - life_redgull_effect) > (3 * 60))}; - player enableFatigue true; - }; - }; - }; - }; - - case (EQUAL(_item,"boltcutter")): { - [cursorTarget] spawn life_fnc_boltcutter; - closeDialog 0; - }; - - case (EQUAL(_item,"blastingcharge")): { - player reveal fed_bank; - (group player) reveal fed_bank; - [cursorTarget] spawn life_fnc_blastingCharge; - }; - - case (EQUAL(_item,"defusekit")): { - [cursorTarget] spawn life_fnc_defuseKit; - }; - - case (_item in ["storagesmall","storagebig"]): { - [_item] call life_fnc_storageBox; - }; - - case (EQUAL(_item,"spikeStrip")): { - if(!isNull life_spikestrip) exitWith {hint localize "STR_ISTR_SpikesDeployment"}; - if(([false,_item,1] call life_fnc_handleInv)) then { - [] spawn life_fnc_spikeStrip; - }; - }; - - case (EQUAL(_item,"fuelFull")): { - if(vehicle player != player) exitWith {hint localize "STR_ISTR_RefuelInVehicle"}; - [] spawn life_fnc_jerryRefuel; - }; - - case (EQUAL(_item,"lockpick")): { - [] spawn life_fnc_lockpick; - }; - - case (_item in ["apple","rabbit","salema","ornate","mackerel","tuna","mullet","catshark","turtlesoup","hen","rooster","sheep","goat","donuts","tbacon","peach"]): { - if(!(EQUAL(M_CONFIG(getNumber,"VirtualItems",_item,"edible"),-1))) then { - if([false,_item,1] call life_fnc_handleInv) then { - _val = M_CONFIG(getNumber,"VirtualItems",_item,"edible"); - _sum = life_hunger + _val; - switch (true) do { - case (_val < 0 && _sum < 1): {life_hunger = 5;}; //This adds the ability to set the entry edible to a negative value and decrease the hunger without death - case (_sum > 100): {life_hunger = 100;}; - default {life_hunger = _sum;}; - }; - }; - }; - }; - - case (EQUAL(_item,"pickaxe")): { - [] spawn life_fnc_pickAxeUse; - }; - - default { - hint localize "STR_ISTR_NotUsable"; - }; -}; - -[] call life_fnc_p_updateMenu; -[] call life_fnc_hudUpdate; \ No newline at end of file diff --git a/Altis_Life.Altis/core/pmenu/fn_wantedInfo.sqf b/Altis_Life.Altis/core/pmenu/fn_wantedInfo.sqf deleted file mode 100644 index 4e2de3d5..00000000 --- a/Altis_Life.Altis/core/pmenu/fn_wantedInfo.sqf +++ /dev/null @@ -1,33 +0,0 @@ -/* - File: fn_wantedInfo.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Pulls back information about the wanted criminal. -*/ -private["_display","_list","_crimes","_bounty","_mylist"]; -disableSerialization; - -_display = findDisplay 2400; -_list = _display displayCtrl 2402; -_data = lbData[2401,(lbCurSel 2401)]; -_mylist = []; -_data = call compile format["%1", _data]; -if(isNil "_data") exitWith {_list lbAdd "Failed to fetch crimes";}; -if(typeName _data != "ARRAY") exitWith {_list lbAdd "Failed to fetch crimes";}; -if(count _data == 0) exitWith {_list lbAdd "Failed to fetch crimes";}; -lbClear _list; - -_crimes = _data select 2; -_bounty = _data select 3; - -{ - _crime = _x; - if(!(_crime in _mylist)) then - { - _mylist pushBack _crime; - _list lbAdd format["%1 count(s) of %2",{_x == _crime} count _crimes,_crime]; - }; -} foreach _crimes; - -ctrlSetText[2403,format["Current Bounty Price: $%1",[_bounty] call life_fnc_numberText]]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/pmenu/fn_wantedList.sqf b/Altis_Life.Altis/core/pmenu/fn_wantedList.sqf deleted file mode 100644 index d6c61a24..00000000 --- a/Altis_Life.Altis/core/pmenu/fn_wantedList.sqf +++ /dev/null @@ -1,35 +0,0 @@ -/* - Copyright © 2013 Bryan "Tonic" Boardwine, All rights reserved - See http://armafiles.info/life/list.txt for servers that are permitted to use this code. - File: fn_wantedList.sqf - Author: Bryan "Tonic" Boardwine" - - Description: - Displays wanted list information sent from the server. -*/ -private["_display","_list","_units","_entry"]; -params [ - ["_info",[]] -]; - disableSerialization; -_display = findDisplay 2400; -_list = _display displayctrl 2401; -_units = []; -{ - _units pushBack (_x getVariable["realname",name _x]); -} foreach playableUnits; - -{ - _entry = _x; - if((_entry select 0) in _units) then - { - _list lbAdd format["%1", _entry select 0]; - _list lbSetData [(lbSize _list)-1,str(_entry)]; - }; -} foreach _info; - -ctrlSetText[2404,"Connection Established"]; - -if(((lbSize _list)-1) == -1) then { - _list lbAdd "No criminals"; -}; diff --git a/Altis_Life.Altis/core/pmenu/fn_wantedMenu.sqf b/Altis_Life.Altis/core/pmenu/fn_wantedMenu.sqf deleted file mode 100644 index b3e0ea60..00000000 --- a/Altis_Life.Altis/core/pmenu/fn_wantedMenu.sqf +++ /dev/null @@ -1,25 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_wantedMenu.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Opens the Wanted menu and connects to the APD. -*/ -private["_display","_list","_name","_crimes","_bounty","_units"]; -disableSerialization; - -createDialog "life_wanted_menu"; - -_display = findDisplay 2400; -_list = _display displayCtrl 2401; -lbClear _list; -_units = []; - -ctrlSetText[2404,"Establishing connection..."]; - -if(FETCH_CONST(life_coplevel) < 3 && FETCH_CONST(life_adminlevel) == 0) then { - ctrlShow[2405,false]; -}; - -[player] remoteExec ["life_fnc_wantedFetch",RSERV]; diff --git a/Altis_Life.Altis/core/session/fn_dataQuery.sqf b/Altis_Life.Altis/core/session/fn_dataQuery.sqf deleted file mode 100644 index d086f857..00000000 --- a/Altis_Life.Altis/core/session/fn_dataQuery.sqf +++ /dev/null @@ -1,18 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_dataQuery.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Starts the 'authentication' process and sends a request out to - the server to check for player information. -*/ -private["_uid","_side","_sender"]; -if(life_session_completed) exitWith {}; //Why did this get executed when the client already initialized? Fucking arma... -_sender = player; -_uid = getPlayerUID _sender; -_side = playerSide; -cutText[format[localize "STR_Session_Query",_uid],"BLACK FADED"]; -0 cutFadeOut 999999999; - -[_uid,_side,_sender] remoteExec ["DB_fnc_queryRequest",RSERV]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/session/fn_insertPlayerInfo.sqf b/Altis_Life.Altis/core/session/fn_insertPlayerInfo.sqf deleted file mode 100644 index b69bdc5c..00000000 --- a/Altis_Life.Altis/core/session/fn_insertPlayerInfo.sqf +++ /dev/null @@ -1,13 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_insertPlayerInfo.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Read the file name... Explains it. -*/ -if(life_session_completed) exitWith {}; //Why did this get executed when the client already initialized? Fucking arma... -cutText[localize "STR_Session_QueryFail","BLACK FADED"]; -0 cutFadeOut 9999999; - -[getPlayerUID player,profileName,CASH,BANK,player] remoteExecCall ["DB_fnc_insertRequest",RSERV]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/session/fn_requestReceived.sqf b/Altis_Life.Altis/core/session/fn_requestReceived.sqf deleted file mode 100644 index 06546c60..00000000 --- a/Altis_Life.Altis/core/session/fn_requestReceived.sqf +++ /dev/null @@ -1,82 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_requestReceived.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Called by the server saying that we have a response so let's - sort through the information, validate it and if all valid - set the client up. -*/ -life_session_tries = life_session_tries + 1; -if(life_session_completed) exitWith {}; //Why did this get executed when the client already initialized? Fucking arma... -if(life_session_tries > 3) exitWith {cutText[localize "STR_Session_Error","BLACK FADED"]; 0 cutFadeOut 999999999;}; - -0 cutText [localize "STR_Session_Received","BLACK FADED"]; -0 cutFadeOut 9999999; - -//Error handling and junk.. -if(isNil "_this") exitWith {[] call SOCK_fnc_insertPlayerInfo;}; -if(EQUAL(typeName _this,"STRING")) exitWith {[] call SOCK_fnc_insertPlayerInfo;}; -if(EQUAL(count _this,0)) exitWith {[] call SOCK_fnc_insertPlayerInfo;}; -if(EQUAL(SEL(_this,0),"Error")) exitWith {[] call SOCK_fnc_insertPlayerInfo;}; -if(!(EQUAL(steamid,SEL(_this,0)))) exitWith {[] call SOCK_fnc_dataQuery;}; - -//Lets make sure some vars are not set before hand.. If they are get rid of them, hopefully the engine purges past variables but meh who cares. -if(!isServer && (!isNil "life_adminlevel" OR !isNil "life_coplevel" OR !isNil "life_donator")) exitWith { - [profileName,getPlayerUID player,"VariablesAlreadySet"] remoteExecCall ["SPY_fnc_cookieJar",RSERV]; - [profileName,format["Variables set before client initialization...\nlife_adminlevel: %1\nlife_coplevel: %2\nlife_donator: %3",life_adminlevel,life_coplevel,life_donator]] remoteExecCall ["SPY_fnc_notifyAdmins",RCLIENT]; - sleep 0.9; - failMission "SpyGlass"; -}; - -//Parse basic player information. -CASH = parseNumber (SEL(_this,2)); -BANK = parseNumber (SEL(_this,3)); -CONST(life_adminlevel,parseNumber (SEL(_this,4))); -CONST(life_donator,0); - -//Loop through licenses -if(count (SEL(_this,6)) > 0) then { - {SVAR_MNS [SEL(_x,0),SEL(_x,1)];} foreach (SEL(_this,6)); -}; - -life_gear = SEL(_this,8); -[true] call life_fnc_loadGear; - -//Parse side specific information. -switch(playerSide) do { - case west: { - CONST(life_coplevel, parseNumber(SEL(_this,7))); - CONST(life_medicLevel,0); - life_blacklisted = SEL(_this,9); - }; - - case civilian: { - life_is_arrested = SEL(_this,7); - CONST(life_coplevel, 0); - CONST(life_medicLevel, 0); - life_houses = SEL(_this,9); - { - _house = nearestBuilding (call compile format["%1", SEL(_x,0)]); - life_vehicles pushBack _house; - } foreach life_houses; - - life_gangData = SEL(_this,10); - if(!(EQUAL(count life_gangData,0))) then { - [] spawn life_fnc_initGang; - }; - [] spawn life_fnc_initHouses; - }; - - case independent: { - CONST(life_medicLevel, parseNumber(SEL(_this,7))); - CONST(life_coplevel,0); - }; -}; - -if(count (SEL(_this,12)) > 0) then { - {life_vehicles pushBack _x;} foreach (SEL(_this,12)); -}; - -life_session_completed = true; \ No newline at end of file diff --git a/Altis_Life.Altis/core/session/fn_syncData.sqf b/Altis_Life.Altis/core/session/fn_syncData.sqf deleted file mode 100644 index 6b3882fa..00000000 --- a/Altis_Life.Altis/core/session/fn_syncData.sqf +++ /dev/null @@ -1,20 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_syncData.sqf - Author: Bryan "Tonic" Boardwine" - - Description: - Used for player manual sync to the server. -*/ -_fnc_scriptName = "Player Synchronization"; -if(isNil "life_session_time") then {life_session_time = false;}; -if(life_session_time) exitWith {hint localize "STR_Session_SyncdAlready";}; - -[] call SOCK_fnc_updateRequest; -hint localize "STR_Session_SyncData"; -[] spawn { - life_session_time = true; - sleep (5 * 60); - life_session_time = false; -}; - \ No newline at end of file diff --git a/Altis_Life.Altis/core/session/fn_updatePartial.sqf b/Altis_Life.Altis/core/session/fn_updatePartial.sqf deleted file mode 100644 index e0b9a2be..00000000 --- a/Altis_Life.Altis/core/session/fn_updatePartial.sqf +++ /dev/null @@ -1,53 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Sends specific information to the server to update on the player, - meant to keep the network traffic down with large sums of data flowing - through remoteExec -*/ -private["_mode","_packet","_array","_flag"]; -_mode = param [0,0,[0]]; -_packet = [steamid,playerSide,nil,_mode]; -_array = []; -_flag = switch(playerSide) do {case west: {"cop"}; case civilian: {"civ"}; case independent: {"med"};}; - -switch(_mode) do { - case 0: { - _packet set[2,CASH]; - }; - - case 1: { - _packet set[2,BANK]; - }; - - case 2: { - { - _varName = LICENSE_VARNAME(configName _x,_flag); - _array pushBack [_varName,LICENSE_VALUE(configName _x,_flag)]; - } foreach (format["getText(_x >> 'side') isEqualTo '%1'",_flag] configClasses (missionConfigFile >> "Licenses")); - - _packet set[2,_array]; - }; - - case 3: { - [] call life_fnc_saveGear; - _packet set[2,life_gear]; - }; - - case 4: { - //Not yet implemented - }; - - case 5: { - _packet set[2,life_is_arrested]; - }; - - case 6: { - _packet set[2,CASH]; - _packet set[4,BANK]; - }; -}; - -_packet remoteExecCall ["DB_fnc_updatePartial",RSERV]; diff --git a/Altis_Life.Altis/core/session/fn_updateRequest.sqf b/Altis_Life.Altis/core/session/fn_updateRequest.sqf deleted file mode 100644 index c439fe92..00000000 --- a/Altis_Life.Altis/core/session/fn_updateRequest.sqf +++ /dev/null @@ -1,26 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_updateRequest.sqf - Author: Tonic -*/ -private["_packet","_array","_flag"]; -_packet = [getPlayerUID player,(profileName),playerSide,CASH,BANK]; -_array = []; -_flag = switch(playerSide) do {case west: {"cop"}; case civilian: {"civ"}; case independent: {"med"};}; - -{ - _varName = LICENSE_VARNAME(configName _x,_flag); - _array pushBack [_varName,LICENSE_VALUE(configName _x,_flag)]; -} foreach (format["getText(_x >> 'side') isEqualTo '%1'",_flag] configClasses (missionConfigFile >> "Licenses")); - -_packet pushBack _array; - -[] call life_fnc_saveGear; -_packet pushBack life_gear; -switch (playerSide) do { - case civilian: { - _packet pushBack life_is_arrested; - }; -}; - -_packet remoteExecCall ["DB_fnc_updateRequest",RSERV]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/shops/fn_atmMenu.sqf b/Altis_Life.Altis/core/shops/fn_atmMenu.sqf deleted file mode 100644 index fcff295a..00000000 --- a/Altis_Life.Altis/core/shops/fn_atmMenu.sqf +++ /dev/null @@ -1,42 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_atmMenu.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Opens and manages the bank menu. -*/ -private["_units","_type"]; - -if(!life_use_atm) exitWith { - hint localize "STR_Shop_ATMRobbed"; -}; - -if(!dialog) then { - if(!(createDialog "Life_atm_management")) exitWith {}; -}; - -disableSerialization; -_units = CONTROL(2700,2703); - -lbClear _units; -CONTROL(2700,2701) ctrlSetStructuredText parseText format[" $%1
$%2",[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; - -{ - _name = _x GVAR ["realname",name _x]; - if(alive _x && (!(EQUAL(_name,profileName)))) then { - switch (side _x) do { - case west: {_type = "Cop"}; - case civilian: {_type = "Civ"}; - case independent: {_type = "EMS"}; - }; - _units lbAdd format["%1 (%2)",_x GVAR ["realname",name _x],_type]; - _units lbSetData [(lbSize _units)-1,str(_x)]; - }; -} foreach playableUnits; - -lbSetCurSel [2703,0]; - -if(isNil {(grpPlayer GVAR "gang_bank")}) then { - (CONTROL(2700,2705)) ctrlEnable false; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/shops/fn_buyClothes.sqf b/Altis_Life.Altis/core/shops/fn_buyClothes.sqf deleted file mode 100644 index 0b6023b2..00000000 --- a/Altis_Life.Altis/core/shops/fn_buyClothes.sqf +++ /dev/null @@ -1,24 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_buyClothes.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Buys the current set of clothes and closes out of the shop interface. -*/ -private["_price"]; -if(EQUAL((lbCurSel 3101),-1)) exitWith {titleText[localize "STR_Shop_NoClothes","PLAIN"];}; - -_price = 0; -{ - if(!(EQUAL(_x,-1))) then { - _price = _price + _x; - }; -} foreach life_clothing_purchase; - -if(_price > CASH) exitWith {titleText[localize "STR_Shop_NotEnoughClothes","PLAIN"];}; -CASH = CASH - _price; - -life_clothesPurchased = true; -[] call life_fnc_playerSkins; -closeDialog 0; \ No newline at end of file diff --git a/Altis_Life.Altis/core/shops/fn_changeClothes.sqf b/Altis_Life.Altis/core/shops/fn_changeClothes.sqf deleted file mode 100644 index 252aa2bc..00000000 --- a/Altis_Life.Altis/core/shops/fn_changeClothes.sqf +++ /dev/null @@ -1,49 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_changeClothes.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Used in the clothing store to show a 'preview' of the piece of clothing. -*/ -disableSerialization; -private["_control","_selection","_data","_price","_total","_totalPrice"]; -_control = (_this select 0) select 0; -_selection = (_this select 0) select 1; -_price = (findDisplay 3100) displayCtrl 3102; -_total = (findDisplay 3100) displayCtrl 3106; -if(_selection == -1) exitWith {hint localize "STR_Shop_NoSelection";}; -if(isNull _control) exitWith {hint localize "STR_Shop_NoDisplay"}; -if(life_cMenu_lock) exitWith {}; -life_cMenu_lock = true; - -life_clothing_purchase set[life_clothing_filter,(_control lbValue _selection)]; -_data = _control lbData _selection; - -if(EQUAL(_data,"NONE")) then { - _item = switch(life_clothing_filter) do { - case 0: {uniform player}; - case 1: {headGear player}; - case 2: {goggles player}; - case 3: {vest player}; - case 4: {backpack player}; - }; - - [_item,false] call life_fnc_handleItem; -} else { - [_data,true,nil,nil,nil,nil,nil,true] call life_fnc_handleItem; -}; - -life_cMenu_lock = false; -_price ctrlSetStructuredText parseText format [(localize "STR_GNOTF_Price")+ " $%1",[(_control lbValue _selection)] call life_fnc_numberText]; - -_totalPrice = 0; -{ - if(_x != -1) then { - _totalPrice = _totalPrice + _x; - }; -} foreach life_clothing_purchase; - -_total ctrlSetStructuredText parseText format [(localize "STR_Shop_Total")+ " $%1",[_totalPrice] call life_fnc_numberText]; - -[] call life_fnc_playerSkins; diff --git a/Altis_Life.Altis/core/shops/fn_chopShopMenu.sqf b/Altis_Life.Altis/core/shops/fn_chopShopMenu.sqf deleted file mode 100644 index 757e863a..00000000 --- a/Altis_Life.Altis/core/shops/fn_chopShopMenu.sqf +++ /dev/null @@ -1,39 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_chopShopMenu.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Opens & initializes the chop shop menu. -*/ -if(life_action_inUse) exitWith {hint localize "STR_NOTF_ActionInProc"}; -disableSerialization; -private["_nearVehicles","_control"]; -_nearVehicles = nearestObjects [getMarkerPos (_this select 3),["Car","Truck"],25]; - -life_chopShop = SEL(_this,3); -//Error check -if(EQUAL(count _nearVehicles,0)) exitWith {titleText[localize "STR_Shop_NoVehNear","PLAIN"];}; -if(!(createDialog "Chop_Shop")) exitWith {hint localize "STR_Shop_ChopShopError"}; - -_control = CONTROL(39400,39402); -{ - if(alive _x) then { - _className = typeOf _x; - _classNameLife = _className; - _displayName = getText(configFile >> "CfgVehicles" >> _className >> "displayName"); - _picture = getText(configFile >> "CfgVehicles" >> _className >> "picture"); - - if(!isClass (missionConfigFile >> CONFIG_LIFE_VEHICLES >> _classNameLife)) then { - _classNameLife = "Default"; //Use Default class if it doesn't exist - diag_log format["%1: LifeCfgVehicles class doesn't exist",_className]; - }; - _price = M_CONFIG(getNumber,CONFIG_LIFE_VEHICLES,_classNameLife,"chopShop"); - if(!isNil "_price" && EQUAL(count crew _x,0)) then { - _control lbAdd _displayName; - _control lbSetData [(lbSize _control)-1,str(_forEachIndex)]; - _control lbSetPicture [(lbSize _control)-1,_picture]; - _control lbSetValue [(lbSize _control)-1,_price]; - }; - }; -} foreach _nearVehicles; \ No newline at end of file diff --git a/Altis_Life.Altis/core/shops/fn_chopShopSelection.sqf b/Altis_Life.Altis/core/shops/fn_chopShopSelection.sqf deleted file mode 100644 index cf2a3118..00000000 --- a/Altis_Life.Altis/core/shops/fn_chopShopSelection.sqf +++ /dev/null @@ -1,19 +0,0 @@ -/* - File: fn_chopShopSelection.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Displays the pricing for the currently selected vehicle. -*/ -disableSerialization; -private["_control","_selection","_price","_priceTag"]; -_control = [_this,0,controlNull,[controlNull]] call BIS_fnc_param; -_selection = [_this,1,-1,[0]] call BIS_fnc_param; - -//Error checks -if(isNull _control OR _selection == -1) exitWith {}; - -_price = _control lbValue _selection; - -_priceTag = ((findDisplay 39400) displayCtrl 39401); -_priceTag ctrlSetStructuredText parseText format ["" +(localize "STR_GNOTF_Price")+ "$%1",[(_price)] call life_fnc_numberText]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/shops/fn_chopShopSell.sqf b/Altis_Life.Altis/core/shops/fn_chopShopSell.sqf deleted file mode 100644 index 3e8befa9..00000000 --- a/Altis_Life.Altis/core/shops/fn_chopShopSell.sqf +++ /dev/null @@ -1,23 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_chopShopSell.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Sells the selected vehicle off. -*/ -disableSerialization; -private["_control","_price","_vehicle","_nearVehicles","_price2"]; -_control = CONTROL(39400,39402); -_price = _control lbValue (lbCurSel _control); -_vehicle = _control lbData (lbCurSel _control); -_vehicle = call compile format["%1", _vehicle]; -_nearVehicles = nearestObjects [getMarkerPos life_chopShop,["Car","Truck"],25]; -_vehicle = SEL(_nearVehicles,_vehicle); -if(isNull _vehicle) exitWith {}; - -hint localize "STR_Shop_ChopShopSelling"; -life_action_inUse = true; -_price2 = CASH + _price; -[player,_vehicle,_price,_price2] remoteExecCall ["TON_fnc_chopShopSell",RSERV]; -closeDialog 0; \ No newline at end of file diff --git a/Altis_Life.Altis/core/shops/fn_clothingFilter.sqf b/Altis_Life.Altis/core/shops/fn_clothingFilter.sqf deleted file mode 100644 index 32f8f3d8..00000000 --- a/Altis_Life.Altis/core/shops/fn_clothingFilter.sqf +++ /dev/null @@ -1,107 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_clothingFilter.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Functionality for filtering clothing types in the menu. -*/ -disableSerialization; -private["_control","_selection","_list","_filter","_pic","_details"]; -_control = SEL(_this,0); -_selection = SEL(_this,1); -life_clothing_filter = _selection; - -switch (_selection) do { - case 4: { - life_shop_cam camSetTarget (player modelToWorld [0,-.15,1.3]); - life_shop_cam camSetPos (player modelToWorld [1,-4,2]); - life_shop_cam camCommit 1; - }; - - case 0: { - life_shop_cam camSetTarget (player modelToWorld [0,0,1]); - life_shop_cam camSetPos (player modelToWorld [1,4,2]); - life_shop_cam camCommit 1; - }; - - case 3: { - life_shop_cam camSetTarget (player modelToWorld [0,0,1.4]); - life_shop_cam camSetPos (player modelToWorld [-.1,2,1.4]); - life_shop_cam camCommit 1; - }; - - default { - life_shop_cam camSetTarget (player modelToWorld [0,0,1.6]); - life_shop_cam camSetPos (player modelToWorld [-.5,1,1.6]); - life_shop_cam camCommit 1; - }; -}; - -if(isNull (findDisplay 3100)) exitWith {}; - -_list = CONTROL(3100,3101); -lbClear _filter; -lbClear _list; - -_array = switch(_selection) do { - case 0: {M_CONFIG(getArray,"Clothing",life_clothing_store,"uniforms");}; - case 1: {M_CONFIG(getArray,"Clothing",life_clothing_store,"headgear");}; - case 2: {M_CONFIG(getArray,"Clothing",life_clothing_store,"goggles");}; - case 3: {M_CONFIG(getArray,"Clothing",life_clothing_store,"vests");}; - case 4: {M_CONFIG(getArray,"Clothing",life_clothing_store,"backpacks");}; -}; - -{ - _className = SEL(_x,0); - _displayName = SEL(_x,1); - _price = SEL(_x,2); - _levelAssert = SEL(_x,3); - _levelName = SEL(_levelAssert,0); - _levelType = SEL(_levelAssert,1); - _levelValue = SEL(_levelAssert,2); - - if(!(EQUAL(_className,"NONE"))) then { - _details = [_className] call life_fnc_fetchCfgDetails; - _pic = SEL(_details,2); - }; - - if(!(EQUAL(_levelValue,-1))) then { - _level = GVAR_MNS _levelName; - if(typeName _level == typeName {}) then {_level = FETCH_CONST(_level);}; - - _bool = switch(_levelType) do { - case "SCALAR": {_level >= _levelValue}; - case "BOOL": {_level}; - case "EQUAL": {EQUAL(_level,_levelValue)}; - default {false}; - }; - - if(_bool && {!isNil "_details"}) then { - if(EQUAL(_displayName,"")) then { - _list lbAdd (SEL(_details,1)); - } else { - _list lbAdd _displayName; - }; - - _list lbSetData [(lbSize _list)-1,_className]; - _list lbSetValue [(lbSize _list)-1,_price]; - _list lbSetPicture [(lbSize _list)-1,_pic]; - }; - } else { - if(isNil "_details") then { - _list lbAdd _displayName; - _list lbSetData [(lbSize _list)-1,_className]; - } else { - if(EQUAL(_displayName,"")) then { - _list lbAdd (SEL(_details,1)); - } else { - _list lbAdd _displayName; - }; - - _list lbSetData [(lbSize _list)-1,_className]; - _list lbSetValue [(lbSize _list)-1,_price]; - _list lbSetPicture [(lbSize _list)-1,_pic]; - }; - }; -} foreach _array; diff --git a/Altis_Life.Altis/core/shops/fn_clothingMenu.sqf b/Altis_Life.Altis/core/shops/fn_clothingMenu.sqf deleted file mode 100644 index 0f3a152c..00000000 --- a/Altis_Life.Altis/core/shops/fn_clothingMenu.sqf +++ /dev/null @@ -1,220 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_clothingMenu.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Opens and initializes the clothing store menu. - Started clean, finished messy. -*/ -private["_list","_clothes","_pic","_filter","_pos","_oldPos","_oldDir","_oldBev","_flag","_shopTitle","_license","_shopSide","_exit","_testLogic","_ut1","_ut2","_ut3","_ut4","_ut5","_light"]; -_exit = false; -if(player != vehicle player) exitWith {titleText[localize "STR_NOTF_ActionInVehicle","PLAIN"];}; - -/* License check & config validation */ -if(!isClass(missionConfigFile >> "Clothing" >> (SEL(_this,3)))) exitWith {}; //Bad config entry. -_shopTitle = M_CONFIG(getText,"Clothing",(SEL(_this,3)),"title"); -_shopSide = M_CONFIG(getText,"Clothing",(SEL(_this,3)),"side"); -_license = M_CONFIG(getText,"Clothing",(SEL(_this,3)),"license"); - -if(!(EQUAL(_license,""))) then { - _flag = M_CONFIG(getText,"Licenses",_license,"side"); - if(!(LICENSE_VALUE(_license,_flag))) exitWith {hint localize "STR_Shop_Veh_NoLicense"; _exit = true;}; -}; -if(_exit) exitWith {}; - -_flag = switch(playerSide) do {case west: {"cop"}; case independent: {"med"}; default {"civ"};}; -if(!(EQUAL(_flag,_shopSide))) exitWith {}; - -ctrlSetText [3103,localize _shopTitle]; -/* Open up the menu */ -createDialog "Life_Clothing"; -disableSerialization; - -(findDisplay 3100) displaySetEventHandler ["KeyDown","if((_this select 1) == 1) then {closeDialog 0; [] call life_fnc_playerSkins;}"]; //Fix Custom Skin after ESC - -//Cop / Civ Pre Check -if((SEL(_this,3) in ["bruce","dive","reb","kart"] && playerSide != civilian)) exitWith {hint localize "STR_Shop_NotaCiv"; closeDialog 0;}; -if((SEL(_this,3) == "reb" && !license_civ_rebel)) exitWith {hint localize "STR_Shop_NotaReb"; closeDialog 0;}; -if((SEL(_this,3) in ["cop"] && playerSide != west)) exitWith {hint localize "STR_Shop_NotaCop"; closeDialog 0;}; -if((SEL(_this,3) in ["dive"] && !license_civ_dive)) exitWith { hint localize "STR_Shop_NotaDive"; closeDialog 0;}; - -_pos = [1000,1000,10000]; -_oldDir = getDir player; -_oldPos = visiblePositionASL player; -_oldBev = behaviour player; - -_testLogic = "Logic" createVehicleLocal _pos; -_testLogic setPosATL _pos; - -_ut1 = "UserTexture10m_F" createVehicleLocal (_testLogic modelToWorld [0,5,10]); -_ut1 attachTo [_testLogic,[0,5,5]]; -_ut1 setDir 0; -_ut4 = "UserTexture10m_F" createVehicleLocal (_testLogic modelToWorld [0,-5,10]); -_ut4 attachTo [_testLogic,[0,-5,5]]; -_ut4 setDir 180; -_ut2 = "UserTexture10m_F" createVehicleLocal (_testLogic modelToWorld [5,0,10]); -_ut2 attachTo [_testLogic,[5,0,5]]; -_ut2 setDir (getDir _testLogic) + 90; -_ut3 = "UserTexture10m_F" createVehicleLocal (_testLogic modelToWorld [-5,0,10]); -_ut3 attachTo [_testLogic,[-5,0,5]]; -_ut3 setDir (getDir _testLogic) - 90; -_ut5 = "UserTexture10m_F" createVehicleLocal (_testLogic modelToWorld [0,0,10]); -_ut5 attachTo [_testLogic,[0,0,0]]; -_ut5 setObjectTexture [0,"a3\map_data\gdt_concrete_co.paa"]; -detach _ut5; -_ut5 setVectorDirAndUp [[0,0,-.33],[0,.33,0]]; - -_light = "#lightpoint" createVehicleLocal _pos; -_light setlightbrightness 0.5; -_light setlightcolor [1,1,1]; -_light setlightambient [1,1,1]; -_light lightAttachObject [_testLogic, [0,0,0]]; - -{if(_x != player) then {_x hideObject true;};} foreach playableUnits; - -{ - _x setObjectTexture [0,"#(argb,8,8,3)color(0,0,0,1)"]; -} foreach [_ut1,_ut2,_ut3,_ut4]; - -player setBehaviour "SAFE"; -player attachTo [_testLogic,[0,0,0]]; -player switchMove ""; - -life_clothing_store = SEL(_this,3); - -/* Store license check */ -if(isClass(missionConfigFile >> "Licenses" >> life_clothing_store)) then { - _flag = M_CONFIG(getText,"Licenses",life_clothing_store,"side"); - _displayName = M_CONFIG(getText,"Licenses",life_clothing_store,"displayName"); - if(!(LICENSE_VALUE(life_clothing_store,_flag))) exitWith { - hint format[localize "STR_Shop_YouNeed",localize _displayName]; - closeDialog 0; - }; -}; - -//initialize camera view -life_shop_cam = "CAMERA" camCreate getPos player; -showCinemaBorder false; -life_shop_cam cameraEffect ["Internal", "Back"]; -life_shop_cam camSetTarget (player modelToWorld [0,0,1]); -life_shop_cam camSetPos (player modelToWorld [1,4,2]); -life_shop_cam camSetFOV .33; -life_shop_cam camSetFocus [50, 0]; -life_shop_cam camCommit 0; -life_cMenu_lock = false; - -if(isNull (findDisplay 3100)) exitWith {}; -_list = (findDisplay 3100) displayCtrl 3101; -_filter = (findDisplay 3100) displayCtrl 3105; -lbClear _filter; -lbClear _list; - -_filter lbAdd localize "STR_Shop_UI_Clothing"; -_filter lbAdd localize "STR_Shop_UI_Hats"; -_filter lbAdd localize "STR_Shop_UI_Glasses"; -_filter lbAdd localize "STR_Shop_UI_Vests"; -_filter lbAdd localize "STR_Shop_UI_Backpack"; - -_filter lbSetCurSel 0; - -life_oldClothes = uniform player; -life_olduniformItems = uniformItems player; -life_oldBackpack = backpack player; -life_oldVest = vest player; -life_oldVestItems = vestItems player; -life_oldBackpackItems = backpackItems player; -life_oldGlasses = goggles player; -life_oldHat = headgear player; - -[] call life_fnc_playerSkins; - -waitUntil {isNull (findDisplay 3100)}; -{if(_x != player) then {_x hideObject false;};} foreach playableUnits; -detach player; -player setBehaviour _oldBev; -player setPosASL _oldPos; -player setDir _oldDir; -{deleteVehicle _x;} foreach [_testLogic,_ut1,_ut2,_ut3,_ut4,_ut5,_light]; -life_shop_cam cameraEffect ["TERMINATE","BACK"]; -camDestroy life_shop_cam; -life_clothing_filter = 0; -if(isNil "life_clothesPurchased") exitWith { - life_clothing_purchase = [-1,-1,-1,-1,-1]; - if(life_oldClothes != "") then {player addUniform life_oldClothes;} else {removeUniform player}; - if(life_oldHat != "") then {player addHeadgear life_oldHat} else {removeHeadgear player;}; - if(life_oldGlasses != "") then {player addGoggles life_oldGlasses;} else {removeGoggles player}; - if(backpack player != "") then { - if(life_oldBackpack == "") then { - removeBackpack player; - } else { - removeBackpack player; - player addBackpack life_oldBackpack; - clearAllItemsFromBackpack player; - if(count life_oldBackpackItems > 0) then { - { - [_x,true,true] call life_fnc_handleItem; - } foreach life_oldBackpackItems; - }; - }; - }; - - if(count life_oldUniformItems > 0) then { - {[_x,true,false,false,true] call life_fnc_handleItem;} foreach life_oldUniformItems; - }; - - if(vest player != "") then { - if(life_oldVest == "") then { - removeVest player; - } else { - player addVest life_oldVest; - if(count life_oldVestItems > 0) then { - {[_x,true,false,false,true] call life_fnc_handleItem;} foreach life_oldVestItems; - }; - }; - }; - [] call life_fnc_playerSkins; -}; -life_clothesPurchased = nil; - -//Check uniform purchase. -if((life_clothing_purchase select 0) == -1) then { - if(life_oldClothes != uniform player) then {player addUniform life_oldClothes;}; -}; -//Check hat -if((life_clothing_purchase select 1) == -1) then { - if(life_oldHat != headgear player) then {if(life_oldHat == "") then {removeHeadGear player;} else {player addHeadGear life_oldHat;};}; -}; -//Check glasses -if((life_clothing_purchase select 2) == -1) then { - if(life_oldGlasses != goggles player) then { - if(life_oldGlasses == "") then { - removeGoggles player; - } else { - player addGoggles life_oldGlasses; - }; - }; -}; -//Check Vest -if((life_clothing_purchase select 3) == -1) then { - if(life_oldVest != vest player) then { - if(life_oldVest == "") then {removeVest player;} else { - player addVest life_oldVest; - {[_x,true,false,false,true] call life_fnc_handleItem;} foreach life_oldVestItems; - }; - }; -}; - -//Check Backpack -if((life_clothing_purchase select 4) == -1) then { - if(life_oldBackpack != backpack player) then { - if(life_oldBackpack == "") then {removeBackpack player;} else { - removeBackpack player; - player addBackpack life_oldBackpack; - {[_x,true,true] call life_fnc_handleItem;} foreach life_oldBackpackItems; - }; - }; -}; - -life_clothing_purchase = [-1,-1,-1,-1,-1]; -[] call life_fnc_saveGear; diff --git a/Altis_Life.Altis/core/shops/fn_impoundMenu.sqf b/Altis_Life.Altis/core/shops/fn_impoundMenu.sqf deleted file mode 100644 index 03ce68a5..00000000 --- a/Altis_Life.Altis/core/shops/fn_impoundMenu.sqf +++ /dev/null @@ -1,54 +0,0 @@ -/* - File: fn_impoundMenu.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Lists impounded vehicles. - DUE TO BE REWROTE IN NEW SYSTEM -*/ -private["_display","_cars","_name","_pic","_color","_text","_price"]; - -if(!dialog) then -{ - if(!(createDialog "Life_impound_menu")) exitWith {}; - life_impound_yard = _this select 3; -}; -disableSerialization; - -_display = findDisplay 2800; -if(isNull _display) exitWith {}; -_cars = _display displayCtrl 2801; -lbClear _cars; - -for "_i" from 0 to (count life_vehicles)-1 do -{ - _veh = life_vehicles select _i; - if(_veh distance impound_obj < 50) then - { - _price = [_veh] call life_fnc_impoundPrice; - switch (true) do - { - case (_veh isKindOf "Car") : {_price = _price + 100;}; - case (_veh isKindOf "Air") : {_price = _price + 650;}; - case (_veh isKindOf "Ship") : {_price = _price + 50;}; - }; - - if(_price > life_cash) then - { - _price = _price + 200; - }; - _color = [(typeOf _veh),(_veh getVariable "Life_VEH_color")] call life_fnc_vehicleColorStr; - _text = format["(%1)",_color]; - if(_text == "()") then - { - _text = ""; - }; - - _name = getText(configFile >> "CfgVehicles" >> (typeOf _veh) >> "displayName"); - _pic = getText(configFile >> "CfgVehicles" >> (typeOf _veh) >> "picture"); - _cars lbAdd format["%1 %2 - Cost: $%3",_name,_text,[_price] call life_fnc_numberText]; - _cars lbSetPicture [(lbSize _cars)-1,_pic]; - _cars lbSetData [(lbSize _cars)-1,str(_i)]; - _cars lbSetValue [(lbSize _cars)-1,_price]; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/shops/fn_vehicleShopBuy.sqf b/Altis_Life.Altis/core/shops/fn_vehicleShopBuy.sqf deleted file mode 100644 index 82d388a7..00000000 --- a/Altis_Life.Altis/core/shops/fn_vehicleShopBuy.sqf +++ /dev/null @@ -1,116 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_vehicleShopBuy.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Does something with vehicle purchasing. -*/ -private["_mode","_spawnPoints","_className","_basePrice","_colorIndex","_spawnPoint","_vehicle","_shopSide","_licenses","_licensesName","_exit"]; -_mode = SEL(_this,0); -_exit = false; -if((lbCurSel 2302) == -1) exitWith {hint localize "STR_Shop_Veh_DidntPick"}; -_className = lbData[2302,(lbCurSel 2302)]; -_vIndex = lbValue[2302,(lbCurSel 2302)]; - -_vehicleList = M_CONFIG(getArray,"CarShops",SEL(life_veh_shop,0),"vehicles"); -_shopSide = M_CONFIG(getText,"CarShops",SEL(life_veh_shop,0),"side"); -_basePrice = SEL(SEL(_vehicleList,_vIndex),1); -_licenses = SEL(SEL(_vehicleList,_vIndex),2); - - if(_mode) then {_basePrice = round(_basePrice * 1.5)}; -_colorIndex = lbValue[2304,(lbCurSel 2304)]; - -//Series of checks (YAY!) -_licensesName = ""; -{ - if(!(EQUAL(_x,"")) && {!(LICENSE_VALUE(_x,_shopSide))}) then { - ADD(_licensesName,localize M_CONFIG(getText,"Licenses",_x,"displayName") + "
"); - _exit = true; - }; -} foreach _licenses; -if(_exit) exitWith {hint parseText format[(localize "STR_Shop_Veh_NoLicense")+ "

%1",_licensesName];}; - -if(_basePrice < 0) exitWith {}; //Bad price entry -if(CASH < _basePrice) exitWith {hint format[localize "STR_Shop_Veh_NotEnough",[_basePrice - CASH] call life_fnc_numberText];}; - -_spawnPoints = SEL(life_veh_shop,1); -_spawnPoint = ""; - -if((SEL(life_veh_shop,0) == "med_air_hs")) then { - if(count(nearestObjects[(getMarkerPos _spawnPoints),["Air"],35]) == 0) exitWith {_spawnPoint = _spawnPoints}; -} else { - //Check if there is multiple spawn points and find a suitable spawnpoint. - if(EQUAL(typeName _spawnPoints,typeName [])) then { - //Find an available spawn point. - {if(count(nearestObjects[(getMarkerPos _x),["Car","Ship","Air"],5]) == 0) exitWith {_spawnPoint = _x};} foreach _spawnPoints; - } else { - if(count(nearestObjects[(getMarkerPos _spawnPoints),["Car","Ship","Air"],5]) == 0) exitWith {_spawnPoint = _spawnPoints}; - }; -}; - - -if(EQUAL(_spawnPoint,"")) exitWith {hint localize "STR_Shop_Veh_Block";}; -SUB(CASH,_basePrice); -hint format[localize "STR_Shop_Veh_Bought",getText(configFile >> "CfgVehicles" >> _className >> "displayName"),[_basePrice] call life_fnc_numberText]; - -//Spawn the vehicle and prep it. -if((life_veh_shop select 0) == "med_air_hs") then { - _vehicle = createVehicle [_className,[0,0,999],[], 0, "NONE"]; - waitUntil {!isNil "_vehicle"}; //Wait? - _vehicle allowDamage false; - _hs = nearestObjects[getMarkerPos _spawnPoint,["Land_Hospital_side2_F"],50] select 0; - _vehicle setPosATL (_hs modelToWorld [-0.4,-4,12.65]); - _vehicle lock 2; - [_vehicle,_colorIndex] remoteExec ["life_fnc_colorVehicle",RCLIENT]; - [_vehicle] call life_fnc_clearVehicleAmmo; - [_vehicle,"trunk_in_use",false,true] remoteExecCall ["TON_fnc_setObjVar",RSERV]; - [_vehicle,"vehicle_info_owners",[[getPlayerUID player,profileName]],true] remoteExecCall ["TON_fnc_setObjVar",RSERV]; - _vehicle disableTIEquipment true; //No Thermals.. They're cheap but addictive. -} else { - _vehicle = createVehicle [_className, (getMarkerPos _spawnPoint), [], 0, "NONE"]; - waitUntil {!isNil "_vehicle"}; //Wait? - _vehicle allowDamage false; //Temp disable damage handling.. - _vehicle lock 2; - _vehicle setVectorUp (surfaceNormal (getMarkerPos _spawnPoint)); - _vehicle setDir (markerDir _spawnPoint); - _vehicle setPos (getMarkerPos _spawnPoint); - [_vehicle,_colorIndex] remoteExec ["life_fnc_colorVehicle",RCLIENT]; - [_vehicle] call life_fnc_clearVehicleAmmo; - [_vehicle,"trunk_in_use",false,true] remoteExecCall ["TON_fnc_setObjVar",RSERV]; - [_vehicle,"vehicle_info_owners",[[getPlayerUID player,profileName]],true] remoteExecCall ["TON_fnc_setObjVar",RSERV]; - _vehicle disableTIEquipment true; //No Thermals.. They're cheap but addictive. -}; - -//Side Specific actions. -switch(playerSide) do { - case west: { - [_vehicle,"cop_offroad",true] spawn life_fnc_vehicleAnimate; - }; - - case civilian: { - if(EQUAL(SEL(life_veh_shop,2),"civ") && {_className == "B_Heli_Light_01_F"}) then { - [_vehicle,"civ_littlebird",true] spawn life_fnc_vehicleAnimate; - }; - }; - - case independent: { - [_vehicle,"med_offroad",true] spawn life_fnc_vehicleAnimate; - }; -}; - -_vehicle allowDamage true; - -//life_vehicles set[count life_vehicles,_vehicle]; //Add err to the chain. -life_vehicles pushBack _vehicle; -[getPlayerUID player,playerSide,_vehicle,1] remoteExecCall ["TON_fnc_keyManagement",RSERV]; - -if(_mode) then { - if(!(_className in ["B_G_Offroad_01_armed_F","B_MRAP_01_hmg_F"])) then { - [(getPlayerUID player),playerSide,_vehicle,_colorIndex] remoteExecCall ["TON_fnc_vehicleCreate",RSERV]; - }; -}; - -[0] call SOCK_fnc_updatePartial; -closeDialog 0; //Exit the menu. -true; diff --git a/Altis_Life.Altis/core/shops/fn_vehicleShopLBChange.sqf b/Altis_Life.Altis/core/shops/fn_vehicleShopLBChange.sqf deleted file mode 100644 index 485a8962..00000000 --- a/Altis_Life.Altis/core/shops/fn_vehicleShopLBChange.sqf +++ /dev/null @@ -1,78 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_vehicleShopLBChange.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Called when a new selection is made in the list box and - displays various bits of information about the vehicle. -*/ -disableSerialization; -private["_control","_index","_className","_classNameLife","_basePrice","_vehicleInfo","_colorArray","_ctrl"]; -_control = _this select 0; -_index = _this select 1; - -//Fetch some information. -_className = _control lbData _index; -_classNameLife = _className; -_vIndex = _control lbValue _index; - -_vehicleList = M_CONFIG(getArray,"CarShops",SEL(life_veh_shop,0),"vehicles"); -_basePrice = SEL(SEL(_vehicleList,_vIndex),1); - -_vehicleInfo = [_className] call life_fnc_fetchVehInfo; -_trunkSpace = [_className] call life_fnc_vehicleWeightCfg; - -ctrlShow [2330,true]; -(CONTROL(2300,2303)) ctrlSetStructuredText parseText format[ -(localize "STR_Shop_Veh_UI_Rental")+ " $%1
" + -(localize "STR_Shop_Veh_UI_Ownership")+ " $%2
" + -(localize "STR_Shop_Veh_UI_MaxSpeed")+ " %3 km/h
" + -(localize "STR_Shop_Veh_UI_HPower")+ " %4
" + -(localize "STR_Shop_Veh_UI_PSeats")+ " %5
" + -(localize "STR_Shop_Veh_UI_Trunk")+ " %6
" + -(localize "STR_Shop_Veh_UI_Fuel")+ " %7
" + -(localize "STR_Shop_Veh_UI_Armor")+ " %8", -[_basePrice] call life_fnc_numberText, -[round(_basePrice * 1.5)] call life_fnc_numberText, -_vehicleInfo select 8, -_vehicleInfo select 11, -_vehicleInfo select 10, -if(_trunkSpace == -1) then {"None"} else {_trunkSpace}, -_vehicleInfo select 12, -_vehicleInfo select 9 -]; - -_ctrl = CONTROL(2300,2304); -lbClear _ctrl; - -if(!isClass (missionConfigFile >> CONFIG_LIFE_VEHICLES >> _classNameLife)) then { - _classNameLife = "Default"; //Use Default class if it doesn't exist - diag_log format["%1: LifeCfgVehicles class doesn't exist",_className]; -}; -_colorArray = M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"textures"); - -{ - _flag = SEL(_x,1); - _textureName = SEL(_x,0); - if(EQUAL(SEL(life_veh_shop,2),_flag)) then { - _ctrl lbAdd _textureName; - _ctrl lbSetValue [(lbSize _ctrl)-1,_forEachIndex]; - }; -} foreach _colorArray; - -if(_className in (LIFE_SETTINGS(getArray,"vehicleShop_rentalOnly"))) then { - ctrlEnable [2309,false]; -} else { - if(!(life_veh_shop select 3)) then { - ctrlEnable [2309,true]; - }; -}; - -lbSetCurSel[2304,0]; -if((lbSize _ctrl)-1 != -1) then { - ctrlShow[2304,true]; -} else { - ctrlShow[2304,false]; -}; -true; \ No newline at end of file diff --git a/Altis_Life.Altis/core/shops/fn_vehicleShopMenu.sqf b/Altis_Life.Altis/core/shops/fn_vehicleShopMenu.sqf deleted file mode 100644 index e0089077..00000000 --- a/Altis_Life.Altis/core/shops/fn_vehicleShopMenu.sqf +++ /dev/null @@ -1,72 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_vehicleShopMenu.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Blah -*/ -private["_shop","_sideCheck","_spawnPoints","_shopFlag","_shopTitle","_disableBuy"]; -(SEL(_this,3)) params [ - ["_shop","",[""]], - ["_sideCheck",sideUnknown,[civilian]], - ["_spawnPoints","",["",[]]], - ["_shopFlag","",[""]], - ["_shopTitle","",[""]], - ["_disableBuy",false,[true]] -]; - -disableSerialization; -//Long boring series of checks -if(dialog) exitWith {}; -if(_shop == "") exitWith {}; -if(_sideCheck != sideUnknown && {playerSide != _sideCheck}) exitWith {hint localize "STR_Shop_Veh_NotAllowed"}; -if(!createDialog "Life_Vehicle_Shop_v2") exitWith {}; - -life_veh_shop = [_shop,_spawnpoints,_shopFlag,_disableBuy]; //Store it so so other parts of the system can access it. - -ctrlSetText [2301,_shopTitle]; - -if(_disableBuy) then { - //Disable the buy button. - ctrlEnable [2309,false]; -}; - -//Fetch the shop config. -_vehicleList = M_CONFIG(getArray,"CarShops",_shop,"vehicles"); - -_control = CONTROL(2300,2302); -lbClear _control; //Flush the list. -ctrlShow [2330,false]; -ctrlShow [2304,false]; - -//Loop through -{ - _className = SEL(_x,0); - _basePrice = SEL(_x,1); - _levelAssert = SEL(_x,3); - _levelName = SEL(_levelAssert,0); - _levelType = SEL(_levelAssert,1); - _levelValue = SEL(_levelAssert,2); - _showall = true; - - if(!(EQUAL(_levelValue,-1))) then { - _level = GVAR_MNS _levelName; - if(typeName _level == typeName {}) then {_level = FETCH_CONST(_level);}; - - _showall = switch(_levelType) do { - case "SCALAR": {_level >= _levelValue}; - case "BOOL": {_level}; - case "EQUAL": {EQUAL(_level,_levelValue)}; - default {false}; - }; - }; - - if(_showall) then { - _vehicleInfo = [_className] call life_fnc_fetchVehInfo; - _control lbAdd (_vehicleInfo select 3); - _control lbSetPicture [(lbSize _control)-1,(_vehicleInfo select 2)]; - _control lbSetData [(lbSize _control)-1,_className]; - _control lbSetValue [(lbSize _control)-1,_ForEachIndex]; - }; -} foreach _vehicleList; diff --git a/Altis_Life.Altis/core/shops/fn_virt_buy.sqf b/Altis_Life.Altis/core/shops/fn_virt_buy.sqf deleted file mode 100644 index 211ef540..00000000 --- a/Altis_Life.Altis/core/shops/fn_virt_buy.sqf +++ /dev/null @@ -1,58 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_virt_buy.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Buy a virtual item from the store. -*/ -private["_type","_price","_amount","_diff","_name","_hideout"]; -if((lbCurSel 2401) == -1) exitWith {hint localize "STR_Shop_Virt_Nothing"}; -_type = lbData[2401,(lbCurSel 2401)]; -_price = lbValue[2401,(lbCurSel 2401)]; -_amount = ctrlText 2404; -if(!([_amount] call TON_fnc_isnumber)) exitWith {hint localize "STR_Shop_Virt_NoNum";}; -_diff = [_type,parseNumber(_amount),life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff; -_amount = parseNumber(_amount); -if(_diff <= 0) exitWith {hint localize "STR_NOTF_NoSpace"}; -_amount = _diff; -_hideout = (nearestObjects[getPosATL player,["Land_u_Barracks_V2_F","Land_i_Barracks_V2_F"],25]) select 0; -if((_price * _amount) > CASH && {!isNil "_hideout" && {!isNil {grpPlayer getVariable "gang_bank"}} && {(grpPlayer getVariable "gang_bank") <= _price * _amount}}) exitWith {hint localize "STR_NOTF_NotEnoughMoney"}; -if((time - life_action_delay) < 0.2) exitWith {hint localize "STR_NOTF_ActionDelay";}; -life_action_delay = time; - -_name = M_CONFIG(getText,"VirtualItems",_type,"displayName"); - -if(([true,_type,_amount] call life_fnc_handleInv)) then -{ - if(!isNil "_hideout" && {!isNil {grpPlayer getVariable "gang_bank"}} && {(grpPlayer getVariable "gang_bank") >= _price}) then { - _action = [ - format[(localize "STR_Shop_Virt_Gang_FundsMSG")+ "

" +(localize "STR_Shop_Virt_Gang_Funds")+ " $%1
" +(localize "STR_Shop_Virt_YourFunds")+ " $%2", - [(grpPlayer getVariable "gang_bank")] call life_fnc_numberText, - [CASH] call life_fnc_numberText - ], - localize "STR_Shop_Virt_YourorGang", - localize "STR_Shop_Virt_UI_GangFunds", - localize "STR_Shop_Virt_UI_YourCash" - ] call BIS_fnc_guiMessage; - if(_action) then { - hint format[localize "STR_Shop_Virt_BoughtGang",_amount,(localize _name),[(_price * _amount)] call life_fnc_numberText]; - _funds = grpPlayer getVariable "gang_bank"; - _funds = _funds - (_price * _amount); - grpPlayer setVariable["gang_bank",_funds,true]; - [1,grpPlayer] remoteExecCall ["TON_fnc_updateGang",RSERV]; - } else { - if((_price * _amount) > CASH) exitWith {[false,_type,_amount] call life_fnc_handleInv; hint localize "STR_NOTF_NotEnoughMoney";}; - hint format[localize "STR_Shop_Virt_BoughtItem",_amount,(localize _name),[(_price * _amount)] call life_fnc_numberText]; - SUB(CASH,_price * _amount); - }; - } else { - if((_price * _amount) > CASH) exitWith {hint localize "STR_NOTF_NotEnoughMoney"; [false,_type,_amount] call life_fnc_handleInv;}; - hint format[localize "STR_Shop_Virt_BoughtItem",_amount,(localize _name),[(_price * _amount)] call life_fnc_numberText]; - SUB(CASH,(_price * _amount)); - }; - [] call life_fnc_virt_update; -}; - -[0] call SOCK_fnc_updatePartial; -[3] call SOCK_fnc_updatePartial; diff --git a/Altis_Life.Altis/core/shops/fn_virt_menu.sqf b/Altis_Life.Altis/core/shops/fn_virt_menu.sqf deleted file mode 100644 index 08bd0bf4..00000000 --- a/Altis_Life.Altis/core/shops/fn_virt_menu.sqf +++ /dev/null @@ -1,52 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_virt_menu.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Initialize the virtual shop menu. -*/ -private["_exit","_shopSide","_license","_levelAssert","_levelName","_levelType","_levelValue","_levelMsg","_flag"]; -if(isNil {SEL(_this,3)}) exitWith {}; -_exit = false; -_shopSide = M_CONFIG(getText,"VirtualShops",(SEL(_this,3)),"side"); -_license = M_CONFIG(getText,"VirtualShops",(SEL(_this,3)),"license"); -_levelAssert = M_CONFIG(getArray,"VirtualShops",(SEL(_this,3)),"level"); -_levelName = SEL(_levelAssert,0); -_levelType = SEL(_levelAssert,1); -_levelValue = SEL(_levelAssert,2); -_levelMsg = SEL(_levelAssert,3); -life_shop_type = SEL(_this,3); -life_shop_npc = SEL(_this,0); - -if(!(EQUAL(_license,""))) then { - _flag = M_CONFIG(getText,"Licenses",_license,"side"); - if(!(LICENSE_VALUE(_license,_flag))) exitWith {hint localize "STR_Shop_Veh_NoLicense"; _exit = true;}; -}; -if(_exit) exitWith {}; - -_flag = switch(playerSide) do {case west: {"cop"}; case independent: {"med"}; default {"civ"};}; -if(!(EQUAL(_flag,_shopSide))) exitWith {}; - -if(!(EQUAL(_levelValue,-1))) then { - _level = GVAR_MNS _levelName; - if(typeName _level == typeName {}) then {_level = FETCH_CONST(_level);}; - - _flag = switch(_levelType) do { - case "SCALAR": {_level >= _levelValue}; - case "BOOL": {_level}; - case "EQUAL": {EQUAL(_level,_levelValue)}; - default {false}; - }; - if(!(_flag)) then { - _exit = true; - if(EQUAL(_levelMsg,"")) then { - _levelMsg = (localize "STR_Shop_Veh_NotAllowed"); - }; - }; -}; -if(_exit) exitWith {hint _levelMsg;}; - -createDialog "shops_menu"; - -[] call life_fnc_virt_update; diff --git a/Altis_Life.Altis/core/shops/fn_virt_sell.sqf b/Altis_Life.Altis/core/shops/fn_virt_sell.sqf deleted file mode 100644 index b9f4dca1..00000000 --- a/Altis_Life.Altis/core/shops/fn_virt_sell.sqf +++ /dev/null @@ -1,54 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_virt_sell.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Sell a virtual item to the store / shop -*/ -private["_type","_index","_price","_amount","_name"]; -if(EQUAL(lbCurSel 2402,-1)) exitWith {}; -_type = lbData[2402,(lbCurSel 2402)]; -_price = M_CONFIG(getNumber,"VirtualItems",_type,"sellPrice"); -if(EQUAL(_price,-1)) exitWith {}; - -_amount = ctrlText 2405; -if(!([_amount] call TON_fnc_isnumber)) exitWith {hint localize "STR_Shop_Virt_NoNum";}; -_amount = parseNumber (_amount); -if(_amount > (ITEM_VALUE(_type))) exitWith {hint localize "STR_Shop_Virt_NotEnough"}; -if((time - life_action_delay) < 0.2) exitWith {hint localize "STR_NOTF_ActionDelay";}; -life_action_delay = time; - -_price = (_price * _amount); -_name = M_CONFIG(getText,"VirtualItems",_type,"displayName"); -if(([false,_type,_amount] call life_fnc_handleInv)) then { - hint format[localize "STR_Shop_Virt_SellItem",_amount,(localize _name),[_price] call life_fnc_numberText]; - ADD(CASH,_price); - [] call life_fnc_virt_update; -}; - -if(EQUAL(life_shop_type,"drugdealer")) then { - private["_array","_ind","_val"]; - _array = life_shop_npc getVariable["sellers",[]]; - _ind = [getPlayerUID player,_array] call TON_fnc_index; - if(!(EQUAL(_ind,-1))) then { - _val = SEL(SEL(_array,_ind),2); - ADD(_val,_price); - _array set[_ind,[getPlayerUID player,profileName,_val]]; - life_shop_npc setVariable["sellers",_array,true]; - } else { - _array pushBack [getPlayerUID player,profileName,_price]; - life_shop_npc setVariable["sellers",_array,true]; - }; -}; - -if(EQUAL(life_shop_type,"gold") && (LIFE_SETTINGS(getNumber,"noatm_timer")) > 0) then { - [] spawn { - life_use_atm = false; - sleep ((LIFE_SETTINGS(getNumber,"noatm_timer")) * 60); - life_use_atm = true; - }; -}; - -[0] call SOCK_fnc_updatePartial; -[3] call SOCK_fnc_updatePartial; diff --git a/Altis_Life.Altis/core/shops/fn_virt_update.sqf b/Altis_Life.Altis/core/shops/fn_virt_update.sqf deleted file mode 100644 index aa8d30bd..00000000 --- a/Altis_Life.Altis/core/shops/fn_virt_update.sqf +++ /dev/null @@ -1,50 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_virt_update.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Update and fill the virtual shop menu. -*/ -private["_item_list","_gear_list","_shopItems","_name","_price"]; -disableSerialization; - -//Setup control vars. -_item_list = CONTROL(2400,2401); -_gear_list = CONTROL(2400,2402); - -//Purge list -lbClear _item_list; -lbClear _gear_list; - -if(!isClass(missionConfigFile >> "VirtualShops" >> life_shop_type)) exitWith {closeDialog 0; hint "Config does not exist?";}; //Make sure the entry exists.. -ctrlSetText[2403,localize (M_CONFIG(getText,"VirtualShops",life_shop_type,"name"))]; -_shopItems = M_CONFIG(getArray,"VirtualShops",life_shop_type,"items"); - -{ - _displayName = M_CONFIG(getText,"VirtualItems",_x,"displayName"); - _price = M_CONFIG(getNumber,"VirtualItems",_x,"buyPrice"); - if(!(EQUAL(_price,-1))) then { - _item_list lbAdd format["%1 ($%2)",(localize _displayName),[_price] call life_fnc_numberText]; - _item_list lbSetData [(lbSize _item_list)-1,_x]; - _item_list lbSetValue [(lbSize _item_list)-1,_price]; - _icon = M_CONFIG(getText,"VirtualItems",_x,"icon"); - if(!(EQUAL(_icon,""))) then { - _item_list lbSetPicture [(lbSize _item_list)-1,_icon]; - }; - }; -} foreach _shopItems; - -{ - _name = M_CONFIG(getText,"VirtualItems",_x,"displayName"); - _val = ITEM_VALUE(_x); - - if(_val > 0) then { - _gear_list lbAdd format["%2 [x%1]",_val,(localize _name)]; - _gear_list lbSetData [(lbSize _gear_list)-1,_x]; - _icon = M_CONFIG(getText,"VirtualItems",_x,"icon"); - if(!(EQUAL(_icon,""))) then { - _gear_list lbSetPicture [(lbSize _gear_list)-1,_icon]; - }; - }; -} foreach _shopItems; \ No newline at end of file diff --git a/Altis_Life.Altis/core/shops/fn_weaponShopBuySell.sqf b/Altis_Life.Altis/core/shops/fn_weaponShopBuySell.sqf deleted file mode 100644 index 06964bb5..00000000 --- a/Altis_Life.Altis/core/shops/fn_weaponShopBuySell.sqf +++ /dev/null @@ -1,64 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_weaponShopBuySell.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Master handling of the weapon shop for buying / selling an item. -*/ -disableSerialization; -private["_price","_item","_itemInfo","_bad"]; -if((lbCurSel 38403) == -1) exitWith {hint localize "STR_Shop_Weapon_NoSelect"}; -_price = lbValue[38403,(lbCurSel 38403)]; if(isNil "_price") then {_price = 0;}; -_item = lbData[38403,(lbCurSel 38403)]; -_itemInfo = [_item] call life_fnc_fetchCfgDetails; - -_bad = ""; - -if((_itemInfo select 6) != "CfgVehicles") then { - if((_itemInfo select 4) in [4096,131072]) then { - if(!(player canAdd _item) && (uiNamespace getVariable["Weapon_Shop_Filter",0]) != 1) exitWith {_bad = (localize "STR_NOTF_NoRoom")}; - }; -}; - -if(_bad != "") exitWith {hint _bad}; - -if((uiNamespace getVariable["Weapon_Shop_Filter",0]) == 1) then { - ADD(CASH,_price); - [_item,false] call life_fnc_handleItem; - hint parseText format[localize "STR_Shop_Weapon_Sold",_itemInfo select 1,[_price] call life_fnc_numberText]; - [nil,(uiNamespace getVariable["Weapon_Shop_Filter",0])] call life_fnc_weaponShopFilter; //Update the menu. -} else { - private["_hideout"]; - _hideout = (nearestObjects[getPosATL player,["Land_u_Barracks_V2_F","Land_i_Barracks_V2_F"],25]) select 0; - if(!isNil "_hideout" && {!isNil {grpPlayer getVariable "gang_bank"}} && {(grpPlayer getVariable "gang_bank") >= _price}) then { - _action = [ - format[(localize "STR_Shop_Virt_Gang_FundsMSG")+ "

" +(localize "STR_Shop_Virt_Gang_Funds")+ " $%1
" +(localize "STR_Shop_Virt_YourFunds")+ " $%2", - [(grpPlayer getVariable "gang_bank")] call life_fnc_numberText, - [CASH] call life_fnc_numberText - ], - localize "STR_Shop_Virt_YourorGang", - localize "STR_Shop_Virt_UI_GangFunds", - localize "STR_Shop_Virt_UI_YourCash" - ] call BIS_fnc_guiMessage; - if(_action) then { - hint parseText format[localize "STR_Shop_Weapon_BoughtGang",_itemInfo select 1,[_price] call life_fnc_numberText]; - _funds = grpPlayer getVariable "gang_bank"; - _funds = _funds - _price; - grpPlayer setVariable["gang_bank",_funds,true]; - [_item,true] spawn life_fnc_handleItem; - [1,grpPlayer] remoteExecCall ["TON_fnc_updateGang",RSERV]; - } else { - if(_price > CASH) exitWith {hint localize "STR_NOTF_NotEnoughMoney"}; - hint parseText format[localize "STR_Shop_Weapon_BoughtItem",_itemInfo select 1,[_price] call life_fnc_numberText]; - SUB(CASH,_price); - [_item,true] spawn life_fnc_handleItem; - }; - } else { - if(_price > CASH) exitWith {hint localize "STR_NOTF_NotEnoughMoney"}; - hint parseText format[localize "STR_Shop_Weapon_BoughtItem",_itemInfo select 1,[_price] call life_fnc_numberText]; - CASH = CASH - _price; - [_item,true] spawn life_fnc_handleItem; - }; -}; -[] call life_fnc_saveGear; \ No newline at end of file diff --git a/Altis_Life.Altis/core/shops/fn_weaponShopFilter.sqf b/Altis_Life.Altis/core/shops/fn_weaponShopFilter.sqf deleted file mode 100644 index f742d310..00000000 --- a/Altis_Life.Altis/core/shops/fn_weaponShopFilter.sqf +++ /dev/null @@ -1,77 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_weaponShopFilter.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Applies the filter selected and changes the list. -*/ -private["_itemList","_index","_config","_priceTag","_itemArray"]; -_index = [_this,1,-1,[0]] call BIS_fnc_param; -_shop = uiNamespace getVariable ["Weapon_Shop",""]; -if(_index == -1 OR _shop == "") exitWith {systemChat "Bad Data Filter"; closeDialog 0;}; //Bad data passing. - -uiNamespace setVariable["Weapon_Shop_Filter",_index]; -//Setup List Control & Purge it. - -_priceTag = ((findDisplay 38400) displayCtrl 38404); -_priceTag ctrlSetStructuredText parseText ""; -_itemList = ((findDisplay 38400) displayCtrl 38403); -lbClear _itemList; - -switch (_index) do { - case 0: { - _config = M_CONFIG(getArray,"WeaponShops",_shop,"items"); { - _itemInfo = [SEL(_x,0)] call life_fnc_fetchCfgDetails; - _itemList lbAdd format["%1",if(!(EQUAL(SEL(_x,1),""))) then {SEL(_x,1)} else {_itemInfo select 1}]; - _itemList lbSetData[(lbSize _itemList)-1,_itemInfo select 0]; - _itemList lbSetPicture[(lbSize _itemList)-1,_itemInfo select 2]; - _itemList lbSetValue[(lbSize _itemList)-1,SEL(_x,2)]; - } foreach (_config); - - ((findDisplay 38400) displayCtrl 38405) ctrlSetText localize "STR_Global_Buy"; - }; - - case 1: { - private["_listedItems"]; - _config = []; - _listedItems = []; - //Go through weapons - if(primaryWeapon player != "") then {_config pushBack primaryWeapon player;}; - if(secondaryWeapon player != "") then {_config pushBack secondaryWeapon player;}; - if(handgunWeapon player != "") then {_config pushBack handgunWeapon player;}; - - //Go through items - _config = _config + primaryWeaponItems player; - _config = _config + (assignedItems player); - _config = _config + (uniformItems player); - _config = _config + (vestItems player); - _config = _config + (backPackItems player); - - ((findDisplay 38400) displayCtrl 38405) ctrlSetText localize "STR_Global_Sell"; - - _itemArray = M_CONFIG(getArray,"WeaponShops",_shop,"items"); - { - if(!(_x in _listedItems) && _x != "") then { - _iS = [_x,_itemArray] call TON_fnc_index; - if(_iS != -1) then { - if(!(EQUAL(SEL(SEL(_itemArray,_iS),3),-1))) then { - _itemInfo = [_x] call life_fnc_fetchCfgDetails; - _listedItems pushBack _x; - - _itemCount = {_x == (_itemInfo select 0)} count _config; - if(_itemCount > 1) then { - _itemList lbAdd format["[%2] %1",_itemInfo select 1,_itemCount]; - } else { - _itemList lbAdd format["%1",_itemInfo select 1]; - }; - _itemList lbSetData[(lbSize _itemList)-1,_itemInfo select 0]; - _itemList lbSetPicture[(lbSize _itemList)-1,_itemInfo select 2]; - }; - }; - }; - } foreach _config; - }; -}; - -if(isNil {_this select 0}) then {_itemList lbSetCurSel 0;}; diff --git a/Altis_Life.Altis/core/shops/fn_weaponShopMenu.sqf b/Altis_Life.Altis/core/shops/fn_weaponShopMenu.sqf deleted file mode 100644 index db6ea11b..00000000 --- a/Altis_Life.Altis/core/shops/fn_weaponShopMenu.sqf +++ /dev/null @@ -1,64 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_weaponShopMenu.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Something -*/ -private["_shopSide","_shopSide","_license","_itemInfo","_itemList","_license","_flag","_exit","_level","_levelAssert","_levelName","_levelType","_levelValue","_levelMsg"]; -_exit = false; -_shopTitle = M_CONFIG(getText,"WeaponShops",(SEL(_this,3)),"name"); -_shopSide = M_CONFIG(getText,"WeaponShops",(SEL(_this,3)),"side"); -_license = M_CONFIG(getText,"WeaponShops",(SEL(_this,3)),"license"); -_levelAssert = M_CONFIG(getArray,"WeaponShops",(SEL(_this,3)),"level"); -_levelName = SEL(_levelAssert,0); -_levelType = SEL(_levelAssert,1); -_levelValue = SEL(_levelAssert,2); -_levelMsg = SEL(_levelAssert,3); - - -if(!(EQUAL(_license,""))) then { - _flag = M_CONFIG(getText,"Licenses",_license,"side"); - if(!(LICENSE_VALUE(_license,_flag))) exitWith {hint localize "STR_Shop_Veh_NoLicense"; _exit = true;}; -}; -if(_exit) exitWith {}; - -_flag = switch(playerSide) do {case west: {"cop"}; case independent: {"med"}; default {"civ"};}; -if(!(EQUAL(_flag,_shopSide))) exitWith {}; - -if(!(EQUAL(_levelValue,-1))) then { - _level = GVAR_MNS _levelName; - if(typeName _level == typeName {}) then {_level = FETCH_CONST(_level);}; - - _flag = switch(_levelType) do { - case "SCALAR": {_level >= _levelValue}; - case "BOOL": {_level}; - case "EQUAL": {EQUAL(_level,_levelValue)}; - default {false}; - }; - if(!(_flag)) then { - _exit = true; - if(EQUAL(_levelMsg,"")) then { - _levelMsg = (localize "STR_Shop_Veh_NotAllowed"); - }; - }; -}; -if(_exit) exitWith {hint _levelMsg;}; - -uiNamespace setVariable ["Weapon_Shop",SEL(_this,3)]; - -if(!(createDialog "life_weapon_shop")) exitWith {}; -if(!isClass(missionConfigFile >> "WeaponShops" >> (SEL(_this,3)))) exitWith {}; //Bad config entry. - -disableSerialization; - -ctrlSetText[38401,_shopTitle]; - -_filters = ((findDisplay 38400) displayCtrl 38402); -lbClear _filters; - -_filters lbAdd localize "STR_Shop_Weapon_ShopInv"; -_filters lbAdd localize "STR_Shop_Weapon_YourInv"; - -_filters lbSetCurSel 0; diff --git a/Altis_Life.Altis/core/shops/fn_weaponShopSelection.sqf b/Altis_Life.Altis/core/shops/fn_weaponShopSelection.sqf deleted file mode 100644 index 71f20f6c..00000000 --- a/Altis_Life.Altis/core/shops/fn_weaponShopSelection.sqf +++ /dev/null @@ -1,31 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_weaponShopSelection.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Checks the weapon & adds the price tag. -*/ -private["_control","_index","_shop","_priceTag","_price","_item","_itemArray"]; -_control = [_this,0,controlNull,[controlNull]] call BIS_fnc_param; -_index = [_this,1,-1,[0]] call BIS_fnc_param; -_shop = uiNamespace getVariable ["Weapon_Shop",""]; -if(isNull _control OR _index == -1) exitWith {closeDialog 0;}; //Bad data - -_priceTag = CONTROL(38400,38404); - -if((GVAR_UINS ["Weapon_Shop_Filter",0]) == 1) then { - _item = CONTROL_DATAI(_control,_index); - _itemArray = M_CONFIG(getArray,"WeaponShops",_shop,"items"); - _item = [_item,_itemArray] call TON_fnc_index; - _price = SEL(SEL(_itemArray,_item),3); - _priceTag ctrlSetStructuredText parseText format ["Price: $%1",[(_price)] call life_fnc_numberText]; - _control lbSetValue[_index,_price]; -} else { - _price = _control lbValue _index; - if(_price > CASH) then { - _priceTag ctrlSetStructuredText parseText format ["Price: $%1
You lack: $%2
",[(_price)] call life_fnc_numberText,[(_price - CASH)] call life_fnc_numberText]; - } else { - _priceTag ctrlSetStructuredText parseText format ["Price: $%1",[(_price)] call life_fnc_numberText]; - }; -}; diff --git a/Altis_Life.Altis/core/vehicle/fn_addVehicle2Chain.sqf b/Altis_Life.Altis/core/vehicle/fn_addVehicle2Chain.sqf deleted file mode 100644 index 342db6e9..00000000 --- a/Altis_Life.Altis/core/vehicle/fn_addVehicle2Chain.sqf +++ /dev/null @@ -1,11 +0,0 @@ -/* - Author: Bryan "Tonic" Boardwine - - Description: - A short function for telling the player to add a vehicle to his keychain. -*/ -private "_vehicle"; -_vehicle = param [0,ObjNull,[ObjNull]]; -if(!(_vehicle in life_vehicles)) then { - life_vehicles pushBack _vehicle; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/vehicle/fn_colorVehicle.sqf b/Altis_Life.Altis/core/vehicle/fn_colorVehicle.sqf deleted file mode 100644 index 27326bdf..00000000 --- a/Altis_Life.Altis/core/vehicle/fn_colorVehicle.sqf +++ /dev/null @@ -1,45 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Reskins the vehicle -*/ -private ["_textures","_className","_classNameLife"]; -params [ - ["_vehicle",objNull,[objNull]], - ["_index",-1,[0]] -]; - -_className = typeOf _vehicle; -_classNameLife = _className; - -if(isNull _vehicle OR !alive _vehicle OR EQUAL(_index,-1)) exitWith {}; -//Does the vehicle already have random styles? Halt till it's set. - -if(local _vehicle) then { - switch _className do { - case "C_Offroad_01_F": {[_vehicle,"color",3,true] remoteExecCall ["TON_fnc_setObjVar",RSERV];}; - case "C_Hatchback_01_F": {[_vehicle,"color",1,true] remoteExecCall ["TON_fnc_setObjVar",RSERV];}; - case "C_Hatchback_01_sport_F": {[_vehicle,"color",1,true] remoteExecCall ["TON_fnc_setObjVar",RSERV];}; - case "C_SUV_01_F": {[_vehicle,"color",1,true] remoteExecCall ["TON_fnc_setObjVar",RSERV];}; - case "C_Van_01_box_F": {[_vehicle,"color",1,true] remoteExecCall ["TON_fnc_setObjVar",RSERV];}; - case "C_Van_01_transport_F": {[_vehicle,"color",1,true] remoteExecCall ["TON_fnc_setObjVar",RSERV];}; - }; -}; - -if(!isClass (missionConfigFile >> CONFIG_LIFE_VEHICLES >> _classNameLife)) then { - _classNameLife = "Default"; //Use Default class if it doesn't exist - diag_log format["%1: LifeCfgVehicles class doesn't exist",_className]; -}; - -_textures = SEL(SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"textures"),_index),2); -if(isNil "_textures" OR {EQUAL(count _textures,0)}) exitWith {}; - -//Local to us? Set it's color. -if(local _vehicle) then { - _vehicle SVAR ["Life_VEH_color",_index,true]; -}; - -waitUntil{!isNil {_vehicle GVAR "Life_VEH_color"}}; -{_vehicle setObjectTexture [_forEachIndex,_x];} foreach _textures; diff --git a/Altis_Life.Altis/core/vehicle/fn_deviceMine.sqf b/Altis_Life.Altis/core/vehicle/fn_deviceMine.sqf deleted file mode 100644 index ee5f322e..00000000 --- a/Altis_Life.Altis/core/vehicle/fn_deviceMine.sqf +++ /dev/null @@ -1,99 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Starts automated mining of resource from the tempest device. -*/ -private["_vehicle","_resourceZones","_zone","_weight","_item","_vInv","_itemIndex"]; -_vehicle = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -if(isNull _vehicle) exitWith {}; //Null was passed? -if(!isNil {_vehicle getVariable "mining"}) exitWith {hint localize "STR_NOTF_DeviceIsMining";}; //Mining is already in process.. -closeDialog 0; //Close the interaction menu. -life_action_inUse = true; //Lock out the interaction menu for a bit.. -_weight = [_vehicle] call life_fnc_vehicleWeight; -if((_weight select 1) >= (_weight select 0)) exitWith {hint localize "STR_NOTF_DeviceFull"; life_action_inUse = false;}; -_resourceZones = ["apple_1","apple_2","apple_3","apple_4","peaches_1","peaches_2","peaches_3","peaches_4","heroin_1","cocaine_1","weed_1","lead_1","iron_1","salt_1","sand_1","diamond_1","oil_1","oil_2","rock_1"]; -_zone = ""; - -//Find out what zone we're near -{ - if(player distance (getMarkerPos _x) < 150) exitWith {_zone = _x;}; -} foreach _resourceZones; - -if(_zone == "") exitWith { - hint localize "STR_NOTF_notNearResource"; - life_action_inUse = false; -}; - -//Get the resource that will be gathered from the zone name... -_item = switch(true) do { - case (_zone in ["apple_1","apple_2","apple_3","apple_4"]): {"apple"}; - case (_zone in ["peaches_1","peaches_2","peaches_3","peaches_4"]): {"peach"}; - case (_zone in ["heroin_1"]): {"heroin_unprocessed"}; - case (_zone in ["cocaine_1"]): {"cocaine_unprocessed"}; - case (_zone in ["weed_1"]): {"cannabis"}; - case (_zone in ["lead_1"]): {"copper_unrefined"}; - case (_zone in ["iron_1"]): {"iron_unrefined"}; - case (_zone in ["salt_1"]): {"salt_unrefined"}; - case (_zone in ["sand_1"]): {"sand"}; - case (_zone in ["diamond_1"]): {"diamond_uncut"}; - case (_zone in ["oil_1","oil_2"]): {"oil_unprocessed"}; - case (_zone in ["rock_1"]): {"rock"}; - default {""}; -}; - -if(_item == "") exitWith {hint "Bad Resource?"; life_action_inUse = false;}; -_vehicle setVariable ["mining",true,true]; //Lock the device -_vehicle remoteExec ["life_fnc_soundDevice",RCLIENT]; //Broadcast the 'mining' sound of the device for nearby units. - -life_action_inUse = false; //Unlock it since it's going to do it's own thing... - -while {true} do { - if(!alive _vehicle OR isNull _vehicle) exitWith {}; - if(isEngineOn _vehicle) exitWith {titleText[localize "STR_NOTF_MiningStopped","PLAIN"];}; - titleText[localize "STR_NOTF_DeviceMining","PLAIN"]; - _time = time + 27; - - //Wait for 27 seconds with a 'delta-time' wait. - waitUntil { - if(isEngineOn _vehicle) exitWith {titleText[localize "STR_NOTF_MiningStopped","PLAIN"]; true}; - if(round(_time - time) < 1) exitWith {true}; - sleep 0.2; - false - }; - if(isEngineOn _vehicle) exitWith {titleText[localize "STR_NOTF_MiningStopped","PLAIN"];}; - _vInv = _vehicle getVariable ["Trunk",[[],0]]; - _items = _vInv select 0; - _space = _vInv select 1; - _itemIndex = [_item,_items] call TON_fnc_index; - _weight = [_vehicle] call life_fnc_vehicleWeight; - _sum = [_item,15,_weight select 1,_weight select 0] call life_fnc_calWeightDiff; //Get a sum base of the remaining weight.. - if(_sum < 1) exitWith {titleText[localize "STR_NOTF_DeviceFull","PLAIN"];}; - _itemWeight = ([_item] call life_fnc_itemWeight) * _sum; - if(_itemIndex == -1) then { - _items pushBack [_item,_sum]; - } else { - _val = _items select _itemIndex select 1; - _items set[_itemIndex,[_item,_val + _sum]]; - }; - - if(fuel _vehicle == 0) exitWith {titleText[localize "STR_NOTF_OutOfFuel","PLAIN"];}; - - //Locality checks... - if(local _vehicle) then { - _vehicle setFuel (fuel _vehicle)-0.045; - } else { - [_vehicle,(fuel _vehicle)-0.04] remoteExecCall ["life_fnc_setFuel",_vehicle]; - }; - - if(fuel _vehicle == 0) exitWith {titleText[localize "STR_NOTF_OutOfFuel","PLAIN"];}; - titleText[format[localize "STR_NOTF_DeviceMined",_sum],"PLAIN"]; - _vehicle SVAR ["Trunk",[_items,_space + _itemWeight],true]; - _weight = [_vehicle] call life_fnc_vehicleWeight; - _sum = [_item,15,_weight select 1,_weight select 0] call life_fnc_calWeightDiff; //Get a sum base of the remaining weight.. - if(_sum < 1) exitWith {titleText[localize "STR_NOTF_DeviceFull","PLAIN"];}; - sleep 2; -}; - -_vehicle SVAR ["mining",nil,true]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/vehicle/fn_lockVehicle.sqf b/Altis_Life.Altis/core/vehicle/fn_lockVehicle.sqf deleted file mode 100644 index 3051d18e..00000000 --- a/Altis_Life.Altis/core/vehicle/fn_lockVehicle.sqf +++ /dev/null @@ -1,15 +0,0 @@ -/* - File: fn_lockVehicle.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Locks the vehicle (used through the network when the person calling it isn't local). -*/ -params [ - ["_vehicle",objNull,[objNull]], - ["_state",2,[0,false]] -]; - -if(isNull _vehicle) exitWith {}; - -_vehicle lock _state; \ No newline at end of file diff --git a/Altis_Life.Altis/core/vehicle/fn_openInventory.sqf b/Altis_Life.Altis/core/vehicle/fn_openInventory.sqf deleted file mode 100644 index bb9825a6..00000000 --- a/Altis_Life.Altis/core/vehicle/fn_openInventory.sqf +++ /dev/null @@ -1,50 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_openInventory.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Starts the initialization of vehicle virtual inventory menu. -*/ -private["_vehicle","_veh_data","_unitsnear"]; -if(dialog) exitWith {}; -_vehicle = [_this,0,Objnull,[Objnull]] call BIS_fnc_param; -if(isNull _vehicle OR !(_vehicle isKindOf "Car" OR _vehicle isKindOf "Air" OR _vehicle isKindOf "Ship" OR _vehicle isKindOf "House_F")) exitWith {}; //Either a null or invalid vehicle type. -if(player != vehicle player) exitWith {titleText[localize "STR_NOTF_ActionInVehicle","PLAIN"];}; -_unitsnear = (nearestObjects[_vehicle, ["Man"], 12]) arrayIntersect playableUnits; -if(count _unitsnear > 1) exitWith {hint localize "STR_NOTF_PlayerNear"}; - -if((_vehicle getVariable ["trunk_in_use",false])) exitWith {hint localize "STR_MISC_VehInvUse"}; -_vehicle setVariable["trunk_in_use",true,true]; -if(!createDialog "TrunkMenu") exitWith {hint localize "STR_MISC_DialogError";}; //Couldn't create the menu? -disableSerialization; - -if(_vehicle isKindOf "House_F") then { - ctrlSetText[3501,format[(localize "STR_MISC_HouseStorage")+ " - %1",getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName")]]; -} else { - ctrlSetText[3501,format[(localize "STR_MISC_VehStorage")+ " - %1",getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName")]]; -}; - -if(_vehicle isKindOf "House_F") then { - private["_mWeight"]; - _mWeight = 0; - {_mWeight = _mWeight + ([(typeOf _x)] call life_fnc_vehicleWeightCfg);} foreach (_vehicle getVariable["containers",[]]); - _veh_data = [_mWeight,(_vehicle getVariable["Trunk",[[],0]]) select 1]; -} else { - _veh_data = [_vehicle] call life_fnc_vehicleWeight; -}; - -if(_vehicle isKindOf "House_F" && {count (_vehicle getVariable ["containers",[]]) == 0}) exitWith {hint localize "STR_MISC_NoStorageWarn"; closeDialog 0; _vehicle setVariable["trunk_in_use",false,true];}; -if(_veh_data select 0 == -1 && {!(_vehicle isKindOf "House_F")}) exitWith {closeDialog 0; _vehicle setVariable["trunk_in_use",false,true]; hint localize "STR_MISC_NoStorageVeh";}; - -ctrlSetText[3504,format[(localize "STR_MISC_Weight")+ " %1/%2",_veh_data select 1,_veh_data select 0]]; -[_vehicle] call life_fnc_vehInventory; -life_trunk_vehicle = _vehicle; - -_vehicle spawn { - waitUntil {isNull (findDisplay 3500)}; - _this setVariable["trunk_in_use",false,true]; - if(_this isKindOf "House_F") then { - [_this] remoteExecCall ["TON_fnc_updateHouseTrunk",2]; - }; -}; diff --git a/Altis_Life.Altis/core/vehicle/fn_vInteractionMenu.sqf b/Altis_Life.Altis/core/vehicle/fn_vInteractionMenu.sqf deleted file mode 100644 index ee5b1a5a..00000000 --- a/Altis_Life.Altis/core/vehicle/fn_vInteractionMenu.sqf +++ /dev/null @@ -1,105 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_vInteractionMenu.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Replaces the mass addactions for various vehicle actions -*/ -#define Btn1 37450 -#define Btn2 37451 -#define Btn3 37452 -#define Btn4 37453 -#define Btn5 37454 -#define Btn6 37455 -#define Title 37401 -private["_display","_curTarget","_Btn1","_Btn2","_Btn3","_Btn4","_Btn5","_Btn6"]; -if(!dialog) then { - createDialog "vInteraction_Menu"; -}; -disableSerialization; - -_curTarget = param [0,ObjNull,[ObjNull]]; -if(isNull _curTarget) exitWith {closeDialog 0;}; //Bad target -_isVehicle = if((_curTarget isKindOf "landVehicle") OR (_curTarget isKindOf "Ship") OR (_curTarget isKindOf "Air")) then {true} else {false}; -if(!_isVehicle) exitWith {closeDialog 0;}; - -_display = findDisplay 37400; -_Btn1 = _display displayCtrl Btn1; -_Btn2 = _display displayCtrl Btn2; -_Btn3 = _display displayCtrl Btn3; -_Btn4 = _display displayCtrl Btn4; -_Btn5 = _display displayCtrl Btn5; -_Btn6 = _display displayCtrl Btn6; -life_vInact_curTarget = _curTarget; - -//Set Repair Action -_Btn1 ctrlSetText localize "STR_vInAct_Repair"; -_Btn1 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_repairTruck;"; - -if("ToolKit" in (items player) && (damage _curTarget < 1)) then {_Btn1 ctrlEnable true;} else {_Btn1 ctrlEnable false;}; - -if(playerSide == west) then { - _Btn2 ctrlSetText localize "STR_vInAct_Registration"; - _Btn2 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_searchVehAction;"; - - _Btn3 ctrlSetText localize "STR_vInAct_SearchVehicle"; - _Btn3 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_vehInvSearch;"; - - _Btn4 ctrlSetText localize "STR_vInAct_PullOut"; - _Btn4 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_pulloutAction;"; - if(count crew _curTarget == 0) then {_Btn4 ctrlEnable false;}; - - _Btn5 ctrlSetText localize "STR_vInAct_Impound"; - _Btn5 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_impoundAction;"; - - if(_curTarget isKindOf "Ship") then { - _Btn6 ctrlSetText localize "STR_vInAct_PushBoat"; - _Btn6 buttonSetAction "[] spawn life_fnc_pushObject; closeDialog 0;"; - if(_curTarget isKindOf "Ship" && {local _curTarget} && {count crew _curTarget == 0}) then { _Btn6 ctrlEnable true;} else {_Btn6 ctrlEnable false}; - } else { - if(typeOf (_curTarget) in ["C_Kart_01_Blu_F","C_Kart_01_Red_F","C_Kart_01_Fuel_F","C_Kart_01_Vrana_F"]) then { - _Btn6 ctrlSetText localize "STR_vInAct_GetInKart"; - _Btn6 buttonSetAction "player moveInDriver life_vInact_curTarget; closeDialog 0;"; - if(count crew _curTarget == 0 && {canMove _curTarget} && {locked _curTarget == 0}) then {_Btn6 ctrlEnable true;} else {_Btn6 ctrlEnable false}; - } else { - _Btn6 ctrlSetText localize "STR_vInAct_Unflip"; - _Btn6 buttonSetAction "life_vInact_curTarget setPos [getPos life_vInact_curTarget select 0, getPos life_vInact_curTarget select 1, (getPos life_vInact_curTarget select 2)+0.5]; closeDialog 0;"; - if(count crew _curTarget == 0 && {canMove _curTarget}) then { _Btn6 ctrlEnable false;} else {_Btn6 ctrlEnable true;}; - }; - }; - -} else { - - if(_curTarget isKindOf "Ship") then { - _Btn2 ctrlSetText localize "STR_vInAct_PushBoat"; - _Btn2 buttonSetAction "[] spawn life_fnc_pushObject; closeDialog 0;"; - if(_curTarget isKindOf "Ship" && {local _curTarget} && {count crew _curTarget == 0}) then { _Btn2 ctrlEnable true;} else {_Btn2 ctrlEnable false}; - } else { - if(typeOf (_curTarget) in ["C_Kart_01_Blu_F","C_Kart_01_Red_F","C_Kart_01_Fuel_F","C_Kart_01_Vrana_F"]) then { - _Btn2 ctrlSetText localize "STR_vInAct_GetInKart"; - _Btn2 buttonSetAction "player moveInDriver life_vInact_curTarget; closeDialog 0;"; - if(count crew _curTarget == 0 && {canMove _curTarget} && {locked _curTarget == 0}) then {_Btn2 ctrlEnable true;} else {_Btn2 ctrlEnable false}; - } else { - _Btn2 ctrlSetText localize "STR_vInAct_Unflip"; - _Btn2 buttonSetAction "life_vInact_curTarget setPos [getPos life_vInact_curTarget select 0, getPos life_vInact_curTarget select 1, (getPos life_vInact_curTarget select 2)+0.5]; closeDialog 0;"; - if(count crew _curTarget == 0 && {canMove _curTarget}) then { _Btn2 ctrlEnable false;} else {_Btn2 ctrlEnable true;}; - }; - }; - - if(typeOf _curTarget == "O_Truck_03_device_F") then { - _Btn3 ctrlSetText localize "STR_vInAct_DeviceMine"; - _Btn3 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_deviceMine"; - if(!isNil {(_curTarget getVariable "mining")} OR !local _curTarget && {_curTarget in life_vehicles}) then { - _Btn3 ctrlEnable false; - } else { - _Btn3 ctrlEnable true; - }; - } else { - _Btn3 ctrlShow false; - }; - - _Btn4 ctrlShow false; - _Btn5 ctrlShow false; - _Btn6 ctrlShow false; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/vehicle/fn_vehInventory.sqf b/Altis_Life.Altis/core/vehicle/fn_vehInventory.sqf deleted file mode 100644 index a24560e0..00000000 --- a/Altis_Life.Altis/core/vehicle/fn_vehInventory.sqf +++ /dev/null @@ -1,60 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_vehInventory.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Used a refresher for the vehicle inventory / trunk menu items. -*/ -private["_veh","_tInv","_pInv","_veh_data"]; -_veh = param [0,ObjNull,[ObjNull]]; -if(isNull _veh OR !alive _veh) exitWith {closeDialog 0;}; //If null / dead exit menu -disableSerialization; - -_tInv = CONTROL(3500,3502); -_pInv = CONTROL(3500,3503); -lbClear _tInv; -lbClear _pInv; - -if(_veh isKindOf "House_F") then { - private "_mWeight"; - _mWeight = 0; - {_mWeight = _mWeight + ([(typeOf _x)] call life_fnc_vehicleWeightCfg);} foreach (_veh getVariable["containers",[]]); - _veh_data = [_mWeight,(_veh getVariable["Trunk",[[],0]]) select 1]; -} else { - _veh_data = [_veh] call life_fnc_vehicleWeight; -}; - -if(EQUAL(SEL(_veh_data,0),-1)) exitWith {closeDialog 0}; - -ctrlSetText[3504,format["Weight: %1/%2",_veh_data select 1,_veh_data select 0]]; -_data = _veh getVariable ["Trunk",[]]; -if(EQUAL(count _data,0)) then {_veh setVariable["Trunk",[[],0],true]; _data = [];} else {_data = _data select 0;}; -//Player Inventory Items -{ - _val = ITEM_VALUE(configName _x); - - if(_val > 0) then { - _pInv lbAdd format["[%1] - %2",_val,localize (getText(_x >> "displayName"))]; - _pInv lbSetData [(lbSize _pInv)-1,configName _x]; - _icon = (getText(_x >> "icon")); - if(!(EQUAL(_icon,""))) then { - _pInv lbSetPicture [(lbSize _pInv)-1,_icon]; - }; - }; -} foreach ("true" configClasses (missionConfigFile >> "VirtualItems")); - -//Trunk Inventory Items -{ - _name = M_CONFIG(getText,"VirtualItems",SEL(_x,0),"displayName"); - _val = SEL(_x,1); - - if(_val > 0) then { - _tInv lbAdd format["[%1] - %2",_val,localize _name]; - _tInv lbSetData [(lbSize _tInv)-1,SEL(_x,0)]; - _icon = M_CONFIG(getText,"VirtualItems",SEL(_x,0),"icon"); - if(!(EQUAL(_icon,""))) then { - _tInv lbSetPicture [(lbSize _tInv)-1,_icon]; - }; - }; -} foreach _data; diff --git a/Altis_Life.Altis/core/vehicle/fn_vehStoreItem.sqf b/Altis_Life.Altis/core/vehicle/fn_vehStoreItem.sqf deleted file mode 100644 index 00500a0c..00000000 --- a/Altis_Life.Altis/core/vehicle/fn_vehStoreItem.sqf +++ /dev/null @@ -1,69 +0,0 @@ -#include "..\..\script_macros.hpp" -#define ctrlSelData(ctrl) (lbData[##ctrl,(lbCurSel ##ctrl)]) -/* - File: fn_vehStoreItem.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Used in the vehicle trunk menu, stores the selected item and puts it in the vehicles virtual inventory - if the vehicle has room for the item. -*/ -private["_ctrl","_num","_totalWeight","_itemWeight","_veh_data","_inv","_index","_val"]; -disableSerialization; - -_ctrl = ctrlSelData(3503); -_num = ctrlText 3506; -if(!([_num] call TON_fnc_isnumber)) exitWith {hint "Invalid Number format";}; -_num = parseNumber(_num); -if(_num < 1) exitWith {hint "You can't enter anything below 1!";}; - -if(life_trunk_vehicle isKindOf "House_F") then { - _mWeight = 0; - {_mWeight = _mWeight + ([(typeOf _x)] call life_fnc_vehicleWeightCfg);} foreach (life_trunk_vehicle getVariable["containers",[]]); - _totalWeight = [_mWeight,(life_trunk_vehicle getVariable["Trunk",[[],0]]) select 1]; -} else { - _totalWeight = [life_trunk_vehicle] call life_fnc_vehicleWeight; -}; -_itemWeight = ([_ctrl] call life_fnc_itemWeight) * _num; -_veh_data = life_trunk_vehicle getVariable ["Trunk",[[],0]]; -_inv = _veh_data select 0; - -if(_ctrl == "goldbar" && {!(life_trunk_vehicle isKindOf "LandVehicle" OR life_trunk_vehicle isKindOf "House_F")}) exitWith {hint "You cannot store that in anything but a land vehicle!"}; - -if(_ctrl == "money") then -{ - _index = [_ctrl,_inv] call TON_fnc_index; - if(CASH < _num) exitWith {hint "You don't have that much cash on you to store in the vehicle!"}; - if(_index == -1) then - { - _inv pushBack [_ctrl,_num]; - } - else - { - _val = _inv select _index select 1; - _inv set[_index,[_ctrl,_val + _num]]; - }; - - CASH = CASH - _num; - life_trunk_vehicle setVariable["Trunk",[_inv,(_veh_data select 1) + _itemWeight],true]; - [life_trunk_vehicle] call life_fnc_vehInventory; -} - else -{ - if(((_totalWeight select 1) + _itemWeight) > (_totalWeight select 0)) exitWith {hint "The vehicle is either full or cannot hold that much."}; - - if(!([false,_ctrl,_num] call life_fnc_handleInv)) exitWith {hint "Couldn't remove the items from your inventory to put in the vehicle.";}; - _index = [_ctrl,_inv] call TON_fnc_index; - if(_index == -1) then - { - _inv pushBack [_ctrl,_num]; - } - else - { - _val = _inv select _index select 1; - _inv set[_index,[_ctrl,_val + _num]]; - }; - - life_trunk_vehicle setVariable["Trunk",[_inv,(_veh_data select 1) + _itemWeight],true]; - [life_trunk_vehicle] call life_fnc_vehInventory; -}; diff --git a/Altis_Life.Altis/core/vehicle/fn_vehTakeItem.sqf b/Altis_Life.Altis/core/vehicle/fn_vehTakeItem.sqf deleted file mode 100644 index 4f504168..00000000 --- a/Altis_Life.Altis/core/vehicle/fn_vehTakeItem.sqf +++ /dev/null @@ -1,56 +0,0 @@ -#include "..\..\script_macros.hpp" -#define ctrlSelData(ctrl) (lbData[##ctrl,(lbCurSel ##ctrl)]) -/* - File: fn_vehTakeItem.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Used in the vehicle trunk menu, takes the selected item and puts it in the players virtual inventory - if the player has room. -*/ -private["_ctrl","_num","_index","_data","_old","_value","_weight","_diff"]; -disableSerialization; -if(isNull life_trunk_vehicle OR !alive life_trunk_vehicle) exitWith {hint localize "STR_MISC_VehDoesntExist"}; -if(!alive player) exitwith {closeDialog 0;}; - -if((lbCurSel 3502) == -1) exitWith {hint localize "STR_Global_NoSelection";}; -_ctrl = ctrlSelData(3502); -_num = ctrlText 3505; -if(!([_num] call TON_fnc_isnumber)) exitWith {hint localize "STR_MISC_WrongNumFormat";}; -_num = parseNumber(_num); -if(_num < 1) exitWith {hint localize "STR_MISC_Under1";}; - -_index = [_ctrl,((life_trunk_vehicle getVariable "Trunk") select 0)] call TON_fnc_index; -_data = (life_trunk_vehicle getVariable "Trunk") select 0; -_old = life_trunk_vehicle getVariable "Trunk"; -if(_index == -1) exitWith {}; -_value = _data select _index select 1; -if(_num > _value) exitWith {hint localize "STR_MISC_NotEnough"}; -_num = [_ctrl,_num,life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff; -if(_num == 0) exitWith {hint localize "STR_NOTF_InvFull"}; -_weight = ([_ctrl] call life_fnc_itemWeight) * _num; -if(_ctrl == "money") then { - if(_num == _value) then { - _data set[_index,-1]; - _data = _data - [-1]; - } else { - _data set[_index,[_ctrl,(_value - _num)]]; - }; - - CASH = CASH + _num; - life_trunk_vehicle setVariable["Trunk",[_data,(_old select 1) - _weight],true]; - [life_trunk_vehicle] call life_fnc_vehInventory; -} else { - if([true,_ctrl,_num] call life_fnc_handleInv) then { - if(_num == _value) then { - _data set[_index,-1]; - _data = _data - [-1]; - } else { - _data set[_index,[_ctrl,(_value - _num)]]; - }; - life_trunk_vehicle setVariable["Trunk",[_data,(_old select 1) - _weight],true]; - [life_trunk_vehicle] call life_fnc_vehInventory; - } else { - hint localize "STR_NOTF_InvFull"; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/vehicle/fn_vehicleOwners.sqf b/Altis_Life.Altis/core/vehicle/fn_vehicleOwners.sqf deleted file mode 100644 index 616c3ea2..00000000 --- a/Altis_Life.Altis/core/vehicle/fn_vehicleOwners.sqf +++ /dev/null @@ -1,13 +0,0 @@ -/* - Pulled from old system, will be revised for new system. -*/ -private["_data","_return","_format"]; -_data = _this select 0; -_return = ""; - -{ - _format = format["%1
",_x select 1]; - _return = _return + _format; -} foreach _data; - -_return; \ No newline at end of file diff --git a/Altis_Life.Altis/core/vehicle/fn_vehicleWeight.sqf b/Altis_Life.Altis/core/vehicle/fn_vehicleWeight.sqf deleted file mode 100644 index 6bbc7222..00000000 --- a/Altis_Life.Altis/core/vehicle/fn_vehicleWeight.sqf +++ /dev/null @@ -1,17 +0,0 @@ -/* - File: fn_calVehWeight.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Starting to lose track on shit I wrote a year ago.. -*/ -private["_vehicle","_weight","_used"]; -_vehicle = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -if(isNull _vehicle) exitWith {}; - -_weight = -1; -_used = (_vehicle getVariable "Trunk") select 1; -_weight = [(typeOf _vehicle)] call life_fnc_vehicleWeightCfg; - -if(isNil "_used") then {_used = 0}; -[_weight,_used]; \ No newline at end of file diff --git a/Altis_Life.Altis/description.ext b/Altis_Life.Altis/description.ext deleted file mode 100644 index ece6db0b..00000000 --- a/Altis_Life.Altis/description.ext +++ /dev/null @@ -1,175 +0,0 @@ -author = "Tonic"; -onLoadName = "Altis Life RPG v4.3.1"; -onLoadMission = "An RPG game mode developed by Tonic"; -joinUnassigned = 1; -respawn = BASE; -respawndelay = 5; -disabledAI = true; -disableChannels[]={0,1,2}; -enableDebugConsole = 1; -respawnDialog = 0; - -class Header -{ - gameType = RPG; - minPlayers = 1; - maxPlayers = 75; -}; - -wreckLimit = 3; -wreckRemovalMinTime = 60; -wreckRemovalMaxTime = 320; -corpseLimit = 150; -corpseRemovalMinTime = 999; -corpseRemovalMaxTime = 9999; - -//SpyGlass configuration -SPY_Enable = true; - -#include "Config_Spyglass.hpp" -#include "CfgRemoteExec.hpp" -#include "dialog\MasterHandler.h" -#include "Config_Master.hpp" - -class RscTitles { - #include "dialog\ui.hpp" - #include "dialog\progress.hpp" - #include "dialog\hud_nameTags.h" -}; - -class CfgFunctions { - #include "Functions.h" -}; - -class CfgSounds -{ - sounds[] = {}; - class SirenLong - { - name = "SirenLong"; - sound[] = {"\sounds\Siren_Long.ogg", 1.0, 1}; - titles[] = {}; - }; - - class tazersound - { - name = "Tazersound"; - sound[] = {"\sounds\tazer.ogg", 0.25, 1}; - titles[] = {}; - }; - - class flashbang - { - name = "flashbang"; - sound[] = {"\sounds\flashbang.ogg", 1.0, 1}; - titles[] = {}; - }; -}; - -class CfgDebriefing -{ - class NotWhitelisted - { - title = "Mission Failed"; - subtitle = "You are not white-listed to use this slot"; - description = "You are not allowed to use this slot because you do not have the appropriate permissions, try another slot."; - pictureBackground = ""; - picture = ""; - pictureColor[] = {0,0.3,0.6,1}; - }; - - class Blacklisted - { - title = "Mission Failed"; - subtitle = "You are blacklisted from cops"; - description = "You are not allowed to be a cop due to previous actions and the admins have removed you from being a cop."; - pictureBackground = ""; - picture = ""; - pictureColor[] = {0,0.3,0.6,1}; - }; - - class SpyGlass - { - title = "The SpyGlass sees you"; - subTitle = "You were detected by the SpyGlass"; - description = "You were detected for cheating and have been reported to the server. Enjoy your day."; - pictureBackground = ""; - picture = ""; - pictureColor[] = {0,0.3,0.6,1}; - }; -}; - -class CfgNotifications -{ - class MedicalRequestEmerg - { - title = "EMS Requested"; - iconPicture = "\A3\ui_f\data\map\mapcontrol\taskIcon_ca.paa"; - description = "%1"; - duration = 5; - priority = 7; - }; - - class DeliveryAssigned - { - title = "Delivery Job Accepted"; - iconPicture = "\A3\ui_f\data\map\mapcontrol\taskIcon_ca.paa"; - description = "%1"; - duration = 10; - priority = 7; - }; - - class DeliveryFailed - { - title = "Delivery Job Failed"; - iconPicture = "\A3\ui_f\data\map\mapcontrol\taskiconfailed_ca.paa"; - description = "%1"; - duration = 7; - priority = 7; - }; - - class DeliverySucceeded - { - title = "Delivery Job Completed"; - iconPicture = "\A3\ui_f\data\map\mapcontrol\taskIcondone_ca.paa"; - description = "%1"; - duration = 6; - priority = 6; - }; - - class TextMessage - { - title = "Received A Text Message"; - iconPicture = "icons\messagenew.paa"; - description = "%1"; - duration = 10; - priority = 6; - }; - - class PoliceDispatch - { - title = "911 Dispatch Center"; - iconPicture = "icons\messagepolice.paa"; - description = "%1"; - duration = 10; - priority = 6; - }; - - class AdminDispatch - { - title = "Admin Dispatch Center"; - iconPicture = "icons\messageadmin.paa"; - description = "%1"; - duration = 10; - priority = 6; - }; - - class AdminMessage - { - title = "Admin Message"; - iconPicture = "icons\messageadmin.paa"; - description = "%1"; - duration = 10; - priority = 5; - }; -}; diff --git a/Altis_Life.Altis/dialog/MasterHandler.h b/Altis_Life.Altis/dialog/MasterHandler.h deleted file mode 100644 index e0fba98c..00000000 --- a/Altis_Life.Altis/dialog/MasterHandler.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - Master UI Resource File -*/ -#include "common.hpp" -#include "shop_items.hpp" -#include "player_inv.hpp" -#include "gang.hpp" -#include "key_chain.hpp" -#include "impound.hpp" -#include "bank.hpp" -#include "veh_shop.hpp" -#include "shops.hpp" -#include "ui.hpp" -#include "admin_menu.hpp" -#include "cell_phone.hpp" -#include "wanted_list.hpp" -#include "ticket.hpp" -#include "clothing.hpp" -#include "trunk.hpp" -#include "spawnSelection.hpp" -#include "chop_shop.h" -#include "pInteraction.h" -#include "deathScreen.h" -#include "vehicleShop.h" -#include "settings.h" -#include "federalReserve.h" -#include "compensate.hpp" \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/admin_menu.hpp b/Altis_Life.Altis/dialog/admin_menu.hpp deleted file mode 100644 index f9e1204c..00000000 --- a/Altis_Life.Altis/dialog/admin_menu.hpp +++ /dev/null @@ -1,163 +0,0 @@ -class life_admin_menu { - idd = 2900; - name= "life_admin_menu"; - movingEnable = false; - enableSimulation = true; - onLoad = "[] spawn life_fnc_adminMenu;"; - - class controlsBackground { - class Life_RscTitleBackground:Life_RscText { - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - idc = -1; - x = 0.1; - y = 0.2; - w = 0.8; - h = (1 / 25); - }; - - class MainBackground:Life_RscText { - colorBackground[] = {0, 0, 0, 0.7}; - idc = -1; - x = 0.1; - y = 0.2 + (11 / 250); - w = 0.8; - h = 0.6 - (2 / 250); - }; - }; - - class controls { - - - class Title : Life_RscTitle { - colorBackground[] = {0, 0, 0, 0}; - idc = 2901; - text = "$STR_Admin_Title"; - x = 0.1; - y = 0.2; - w = 0.6; - h = (1 / 25); - }; - - class PlayerList_Admin : Life_RscListBox - { - idc = 2902; - text = ""; - sizeEx = 0.035; - //colorBackground[] = {0,0,0,0}; - onLBSelChanged = "[_this] spawn life_fnc_adminQuery"; - - x = 0.12; y = 0.26; - w = 0.30; h = 0.4; - }; - - class PlayerBInfo : Life_RscStructuredText - { - idc = 2903; - text = ""; - x = 0.42; - y = 0.25; - w = 0.35; - h = 0.6; - }; - - class CloseButtonKey : Life_RscButtonMenu { - idc = -1; - text = "$STR_Global_Close"; - onButtonClick = "closeDialog 0;"; - x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.88 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class AdminID : Life_RscButtonMenu { - idc = -1; - text = "$STR_Admin_GetID"; - onButtonClick = "[] call life_fnc_admingetID;"; - x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.88 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class Compensate : Life_RscButtonMenu { - idc = 2904; - text = "$STR_Admin_Compensate"; - onButtonClick = "createDialog ""Life_Admin_Compensate"";"; - x = 0.26 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.88 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class Spectate : Life_RscButtonMenu { - idc = 2905; - text = "$STR_Admin_Spectate"; - onButtonClick = "[] call life_fnc_adminSpectate;"; - x = 0.42 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.88 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class Teleport : Life_RscButtonMenu { - idc = 2906; - text = "$STR_Admin_Teleport"; - onButtonClick = "[] call life_fnc_adminTeleport; hint 'Select where you would like to teleport';"; - x = 0.58 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.88 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class TeleportHere : Life_RscButtonMenu { - idc = 2907; - text = "$STR_Admin_TpHere"; - onButtonClick = "[] call life_fnc_adminTpHere;"; - x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.885; - w = (6.25 / 40); - h = (1 / 25); - }; - - class God : Life_RscButtonMenu { - idc = 2908; - text = "$STR_Admin_God"; - onButtonClick = "[] call life_fnc_adminGodMode;"; - x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.885; - w = (6.25 / 40); - h = (1 / 25); - }; - - class Freeze : Life_RscButtonMenu { - idc = 2909; - text = "$STR_Admin_Freeze"; - onButtonClick = "[] call life_fnc_adminFreeze;"; - x = 0.26 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.885; - w = (6.25 / 40); - h = (1 / 25); - }; - - class Markers : Life_RscButtonMenu { - idc = 2910; - text = "$STR_Admin_Markers"; - onButtonClick = "[] spawn life_fnc_adminMarkers;"; - x = 0.42 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.885; - w = (6.25 / 40); - h = (1 / 25); - }; - - class Debug : Life_RscButtonMenu { - idc = 2911; - text = "$STR_Admin_Debug"; - onButtonClick = "[] call life_fnc_adminDebugCon;"; - x = 0.58 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.885; - w = (6.25 / 40); - h = (1 / 25); - }; - }; -}; diff --git a/Altis_Life.Altis/dialog/bank.hpp b/Altis_Life.Altis/dialog/bank.hpp deleted file mode 100644 index b0c225cc..00000000 --- a/Altis_Life.Altis/dialog/bank.hpp +++ /dev/null @@ -1,128 +0,0 @@ -class Life_atm_management { - idd = 2700; - name= "life_atm_menu"; - movingEnable = false; - enableSimulation = true; - - class controlsBackground { - class Life_RscTitleBackground:Life_RscText { - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - idc = -1; - x = 0.35; - y = 0.2; - w = 0.3; - h = (1 / 25); - }; - - class MainBackground:Life_RscText { - colorBackground[] = {0, 0, 0, 0.7}; - idc = -1; - x = 0.35; - y = 0.2 + (11 / 250); - w = 0.3; - h = 0.6 - (22 / 250); - }; - }; - - class controls { - - class CashTitle : Life_RscStructuredText - { - idc = 2701; - text = ""; - - x = 0.39; - y = 0.26; - w = 0.3; - h = .14; - }; - - class Title : Life_RscTitle { - colorBackground[] = {0, 0, 0, 0}; - idc = -1; - text = "$STR_ATM_Title"; - x = 0.35; - y = 0.2; - w = 0.6; - h = (1 / 25); - }; - - class WithdrawButton : life_RscButtonMenu - { - idc = -1; - text = "$STR_ATM_Withdraw"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call life_fnc_bankWithdraw"; - - x = 0.432; - y = 0.46; - w = (6 / 40); - h = (1 / 25); - }; - - class DepositButton : life_RscButtonMenu - { - idc = -1; - text = "$STR_ATM_Deposit"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call life_fnc_bankDeposit"; - - x = 0.432; - y = 0.512; - w = (6 / 40); - h = (1 / 25); - }; - - class moneyEdit : Life_RscEdit { - - idc = 2702; - - text = "1"; - sizeEx = 0.030; - x = 0.4; y = 0.41; - w = 0.2; h = 0.03; - - }; - - class PlayerList : Life_RscCombo - { - idc = 2703; - - x = 0.4; y = 0.58; - w = 0.2; h = 0.03; - }; - - class TransferButton : life_RscButtonMenu - { - idc = -1; - text = "$STR_ATM_Transfer"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call life_fnc_bankTransfer"; - - x = 0.432; - y = 0.63; - w = (5.30 / 40); - h = (1 / 25); - }; - - class GangDeposit : TransferButton - { - idc = 2705; - text = "$STR_pInAct_DepositToGang"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call life_fnc_gangDeposit"; - y = .7; x = 0.365; - w = 0.275; - }; - - class CloseButtonKey : Life_RscButtonMenu { - idc = -1; - text = "$STR_Global_Close"; - onButtonClick = "closeDialog 0;"; - x = 0.35; - y = 0.8 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/cell_phone.hpp b/Altis_Life.Altis/dialog/cell_phone.hpp deleted file mode 100644 index 14ce495a..00000000 --- a/Altis_Life.Altis/dialog/cell_phone.hpp +++ /dev/null @@ -1,158 +0,0 @@ -class Life_cell_phone { - idd = 3000; - name= "life_cell_phone"; - movingEnable = false; - enableSimulation = true; - onLoad = "[] spawn life_fnc_cellphone"; - - class controlsBackground { - class Life_RscTitleBackground:Life_RscText { - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - idc = -1; - x = 0.1; - y = 0.2; - w = 0.64; - h = (1 / 25); - }; - - class MainBackground:Life_RscText { - colorBackground[] = {0, 0, 0, 0.7}; - idc = -1; - x = 0.1; - y = 0.2 + (11 / 250); - w = 0.64; - h = 0.3 - (5 / 250); - }; - }; - - class controls { - - - class Title : Life_RscTitle { - colorBackground[] = {0, 0, 0, 0}; - idc = 3001; - text = "$STR_CELL_Title"; - x = 0.1; - y = 0.2; - w = 0.6; - h = (1 / 25); - }; - - class TextToSend : Life_RscTitle { - colorBackground[] = {0, 0, 0, 0}; - idc = 3002; - text = "$STR_CELL_TextToSend"; - x = 0.1; - y = 0.25; - w = 0.6; - h = (1 / 25); - }; - - class textEdit : Life_RscEdit { - - idc = 3003; - - text = ""; - sizeEx = 0.030; - x = 0.11; y = 0.3; - w = 0.62; h = 0.03; - - }; - - class TextMsgButton : life_RscButtonMenu - { - idc = 3015; - text = "$STR_CELL_TextMSGBtn"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call TON_fnc_cell_textmsg"; - - x = 0.11; - y = 0.35; - w = 0.2; - h = (1 / 25); - }; - - class PlayerList : Life_RscCombo - { - idc = 3004; - - x = 0.11; y = 0.4; - w = 0.2; h = (1 / 25); - }; - - class TextCopButton : life_RscButtonMenu - { - idc = 3016; - text = "$STR_CELL_TextPolice"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call TON_fnc_cell_textcop"; - - x = 0.32; - y = 0.35; - w = 0.2; - h = (1 / 25); - }; - - class TextAdminButton : life_RscButtonMenu - { - idc = 3017; - text = "$STR_CELL_TextAdmins"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call TON_fnc_cell_textadmin"; - - x = 0.53; - y = 0.35; - w = 0.2; - h = (1 / 25); - }; - - class AdminMsgButton : life_RscButtonMenu - { - idc = 3020; - text = "$STR_CELL_AdminMsg"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call TON_fnc_cell_adminmsg"; - - x = 0.32; - y = 0.4; - w = 0.2; - h = (1 / 25); - }; - - class AdminMsgAllButton : life_RscButtonMenu - { - idc = 3021; - text = "$STR_CELL_AdminMSGAll"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call TON_fnc_cell_adminmsgall"; - - x = 0.53; - y = 0.4; - w = 0.2; - h = (1 / 25); - }; - - class EMSRequest : life_RscButtonMenu - { - idc = 3022; - text = "$STR_CELL_EMSRequest"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call TON_fnc_cell_emsrequest"; - - x = 0.11; - y = 0.45; - w = 0.2; - h = (1 / 25); - }; - - class CloseButtonKey : Life_RscButtonMenu { - idc = -1; - text = "$STR_Global_Close"; - onButtonClick = "closeDialog 0;"; - x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.51 + (1 / 50); - w = (6.25 / 40); - h = (1 / 25); - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/chop_shop.h b/Altis_Life.Altis/dialog/chop_shop.h deleted file mode 100644 index 3158ec10..00000000 --- a/Altis_Life.Altis/dialog/chop_shop.h +++ /dev/null @@ -1,77 +0,0 @@ -class Chop_Shop -{ - idd = 39400; - movingEnabled = false; - enableSimulation = true; - - class controlsBackground - { - class RscTitleBackground : Life_RscText - { - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - idc = -1; - x = 0.1; y = 0.2; - w = 0.32; h = (1 / 25); - }; - - class MainBackGround : Life_RscText - { - colorBackground[] = {0,0,0,0.7}; - idc = -1; - x = 0.1; y = 0.2 + (11 / 250); - w = 0.32; h = 0.6 - (22 / 250); - }; - - class Title : Life_RscTitle - { - colorBackground[] = {0,0,0,0}; - idc = -1; - text = "$STR_ChopShop_Title"; - x = 0.1; y = 0.2; - w = 0.32; h = (1 / 25); - }; - - class priceInfo : Life_RscStructuredText - { - idc = 39401; - text = ""; - sizeEx = 0.035; - x = 0.11; y = 0.68; - w = 0.2; h = 0.2; - }; - }; - - class controls - { - class vehicleList : Life_RscListBox - { - idc = 39402; - onLBSelChanged = "_this call life_fnc_chopShopSelection"; - sizeEx = 0.04; - x = 0.11; y = 0.25; - w = 0.3; h = 0.38; - }; - - class BtnSell : Life_RscButtonMenu - { - idc = -1; - text = "$STR_Global_Sell"; - onButtonclick = "[] call life_fnc_chopShopSell;"; - x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.8 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class BtnClose : Life_RscButtonMenu - { - idc = -1; - text = "$STR_Global_Close"; - onButtonClick = "closeDialog 0"; - x = 0.1; - y = 0.8 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/clothing.hpp b/Altis_Life.Altis/dialog/clothing.hpp deleted file mode 100644 index d8b7dea6..00000000 --- a/Altis_Life.Altis/dialog/clothing.hpp +++ /dev/null @@ -1,111 +0,0 @@ -class Life_Clothing { - idd = 3100; - name= "Life_Clothing"; - movingEnable = true; - enableSimulation = true; - //onLoad = "[] execVM 'core\client\keychain\init.sqf'"; - - class controlsBackground { - class Life_RscTitleBackground:Life_RscText { - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - idc = -1; - x = 0.0821059 * safezoneW + safezoneX; - y = 0.212176 * safezoneH + safezoneY; - w = 0.318; - h = (1 / 25); - }; - - class MainBackground:Life_RscText { - colorBackground[] = {0, 0, 0, 0.7}; - idc = -1; - x = 0.0822359 * safezoneW + safezoneX; - y = 0.236099 * safezoneH + safezoneY; - w = 0.318; - h = 0.5 - (22 / 250); - }; - }; - - class controls - { - class Title : Life_RscTitle - { - colorBackground[] = {0, 0, 0, 0}; - idc = 3103; - text = ""; - x = 0.0821059 * safezoneW + safezoneX; - y = 0.212176 * safezoneH + safezoneY; - w = 0.6; - h = (1 / 25); - }; - - class ClothingList : Life_RscListBox - { - idc = 3101; - text = ""; - sizeEx = 0.035; - onLBSelChanged = "[_this] call life_fnc_changeClothes;"; - - x = 0.0842977 * safezoneW + safezoneX; - y = 0.240498 * safezoneH + safezoneY; - w = 0.3; - h = 0.35; - }; - - class PriceTag : Life_RscStructuredText - { - idc = 3102; - text = ""; - sizeEx = 0.035; - - x = 0.0853304 * safezoneW + safezoneX; - y = 0.439419 * safezoneH + safezoneY; - w = 0.2; - h = (1 / 25); - }; - - class TotalPrice : Life_RscStructuredText - { - idc = 3106; - text = ""; - sizeEx = 0.035; - - x = 0.148258 * safezoneW + safezoneX; - y = 0.439419 * safezoneH + safezoneY; - w = 0.2; - h = (1 / 25); - }; - - class FilterList : Life_RscCombo - { - idc = 3105; - colorBackground[] = {0,0,0,0.7}; - onLBSelChanged = "_this call life_fnc_clothingFilter"; - x = 0.0822359 * safezoneW + safezoneX; - y = 0.468 * safezoneH + safezoneY; - w = 0.318; - h = 0.035; - }; - - class CloseButtonKey : Life_RscButtonMenu - { - idc = -1; - text = "$STR_Global_Close"; - onButtonClick = "closeDialog 0; [] call life_fnc_playerSkins;"; - x = 0.147 * safezoneW + safezoneX; - y = 0.489992 * safezoneH + safezoneY; - w = (6.25 / 40); - h = (1 / 25); - }; - - class BuyButtonKey : Life_RscButtonMenu - { - idc = -1; - text = "$STR_Global_Buy"; - onButtonClick = "[] call life_fnc_buyClothes;"; - x = 0.0822359 * safezoneW + safezoneX; - y = 0.489992 * safezoneH + safezoneY; - w = (6.25 / 40); - h = (1 / 25); - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/common.hpp b/Altis_Life.Altis/dialog/common.hpp deleted file mode 100644 index dc8de0af..00000000 --- a/Altis_Life.Altis/dialog/common.hpp +++ /dev/null @@ -1,1156 +0,0 @@ -#define ST_LEFT 0x00 -#define ST_MULTI 0x10 -#define GUI_GRID_CENTER_WAbs ((safezoneW / safezoneH) min 1.2) -#define GUI_GRID_CENTER_HAbs (GUI_GRID_CENTER_WAbs / 1.2) -#define GUI_GRID_CENTER_W (GUI_GRID_CENTER_WAbs / 40) -#define GUI_GRID_CENTER_H (GUI_GRID_CENTER_HAbs / 25) -#define GUI_GRID_CENTER_X (safezoneX + (safezoneW - GUI_GRID_CENTER_WAbs)/2) -#define GUI_GRID_CENTER_Y (safezoneY + (safezoneH - GUI_GRID_CENTER_HAbs)/2) - -class Life_Checkbox -{ - access = 0; // Control access (0 - ReadAndWrite, 1 - ReadAndCreate, 2 - ReadOnly, 3 - ReadOnlyVerified) - idc = -1; // Control identification (without it, the control won't be displayed) - type = 77; // Type - style = ST_LEFT + ST_MULTI; // Style - default = 0; // Control selected by default (only one within a display can be used) - blinkingPeriod = 0; // Time in which control will fade out and back in. Use 0 to disable the effect. - - x = 0; - y = 0; - w = 1 * GUI_GRID_CENTER_W; // Width - h = 1 * GUI_GRID_CENTER_H; // Height - - //Colors - color[] = { 1, 1, 1, 0.7 }; // Texture color - colorFocused[] = { 1, 1, 1, 1 }; // Focused texture color - colorHover[] = { 1, 1, 1, 1 }; // Mouse over texture color - colorPressed[] = { 1, 1, 1, 1 }; // Mouse pressed texture color - colorDisabled[] = { 1, 1, 1, 0.2 }; // Disabled texture color - - //Background colors - colorBackground[] = { 0, 0, 0, 0 }; // Fill color - colorBackgroundFocused[] = { 0, 0, 0, 0 }; // Focused fill color - colorBackgroundHover[] = { 0, 0, 0, 0 }; // Mouse hover fill color - colorBackgroundPressed[] = { 0, 0, 0, 0 }; // Mouse pressed fill color - colorBackgroundDisabled[] = { 0, 0, 0, 0 }; // Disabled fill color - - //Textures - textureChecked = "\A3\Ui_f\data\GUI\RscCommon\RscCheckBox\CheckBox_checked_ca.paa"; //Texture of checked CheckBox. - textureUnchecked = "\A3\Ui_f\data\GUI\RscCommon\RscCheckBox\CheckBox_unchecked_ca.paa"; //Texture of unchecked CheckBox. - textureFocusedChecked = "\A3\Ui_f\data\GUI\RscCommon\RscCheckBox\CheckBox_checked_ca.paa"; //Texture of checked focused CheckBox (Could be used for showing different texture when focused). - textureFocusedUnchecked = "\A3\Ui_f\data\GUI\RscCommon\RscCheckBox\CheckBox_unchecked_ca.paa"; //Texture of unchecked focused CheckBox. - textureHoverChecked = "\A3\Ui_f\data\GUI\RscCommon\RscCheckBox\CheckBox_checked_ca.paa"; - textureHoverUnchecked = "\A3\Ui_f\data\GUI\RscCommon\RscCheckBox\CheckBox_unchecked_ca.paa"; - texturePressedChecked = "\A3\Ui_f\data\GUI\RscCommon\RscCheckBox\CheckBox_checked_ca.paa"; - texturePressedUnchecked = "\A3\Ui_f\data\GUI\RscCommon\RscCheckBox\CheckBox_unchecked_ca.paa"; - textureDisabledChecked = "\A3\Ui_f\data\GUI\RscCommon\RscCheckBox\CheckBox_checked_ca.paa"; - textureDisabledUnchecked = "\A3\Ui_f\data\GUI\RscCommon\RscCheckBox\CheckBox_unchecked_ca.paa"; - - tooltip = ""; // Tooltip text - tooltipColorShade[] = { 0, 0, 0, 1 }; // Tooltip background color - tooltipColorText[] = { 1, 1, 1, 1 }; // Tooltip text color - tooltipColorBox[] = { 1, 1, 1, 1 }; // Tooltip frame color - - //Sounds - soundClick[] = { "\A3\ui_f\data\sound\RscButton\soundClick", 0.09, 1 }; // Sound played after control is activated in format {file, volume, pitch} - soundEnter[] = { "\A3\ui_f\data\sound\RscButton\soundEnter", 0.09, 1 }; // Sound played when mouse cursor enters the control - soundPush[] = { "\A3\ui_f\data\sound\RscButton\soundPush", 0.09, 1 }; // Sound played when the control is pushed down - soundEscape[] = { "\A3\ui_f\data\sound\RscButton\soundEscape", 0.09, 1 }; // Sound played when the control is released after pushing down - -}; - -class Life_RscScrollBar -{ - color[] = {1,1,1,0.6}; - colorActive[] = {1,1,1,1}; - colorDisabled[] = {1,1,1,0.3}; - thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa"; - arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa"; - arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa"; - border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa"; - shadow = 0; - scrollSpeed = 0.06; - width = 0; - height = 0; - autoScrollEnabled = 1; - autoScrollSpeed = -1; - autoScrollDelay = 5; - autoScrollRewind = 0; -}; - -class Life_RscControlsGroup { - type = 15; - idc = -1; - x = 0; - y = 0; - w = 1; - h = 1; - shadow = 0; - style = 16; - - class VScrollBar : Life_RscScrollBar - { - width = 0.021; - autoScrollEnabled = 1; - }; - - class HScrollBar : Life_RscScrollBar - { - height = 0.028; - }; - - class Controls {}; -}; - -class Life_RscControlsGroupNoScrollbars : Life_RscControlsGroup { - class VScrollbar : VScrollbar { - width = 0; - }; - - class HScrollbar : HScrollbar { - height = 0; - }; -}; - -class Life_RscHud -{ - idc = -1; - type = 0; - style = 0x00; - colorBackground[] = { 1 , 1 , 1 , 0 }; - colorText[] = { 1 , 1 , 1 , 1 }; - font = "PuristaSemibold"; - sizeEx = 0.025; - h = 0.25; - text = ""; -}; - -class Life_RscListNBox -{ - style = 16; - type = 102; - shadow = 0; - font = "PuristaMedium"; - sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - color[] = {0.95,0.95,0.95,1}; - colorText[] = {1,1,1,1.0}; - colorDisabled[] = {1,1,1,0.25}; - colorScrollbar[] = {0.95,0.95,0.95,1}; - colorSelect[] = {0,0,0,1}; - colorSelect2[] = {0,0,0,1}; - colorSelectBackground[] = {0.8,0.8,0.8,1}; - colorSelectBackground2[] = {1,1,1,0.5}; - colorPicture[] = {1,1,1,1}; - colorPictureSelected[] = {1,1,1,1}; - colorPictureDisabled[] = {1,1,1,1}; - soundSelect[] = {"",0.1,1}; - soundExpand[] = {"",0.1,1}; - soundCollapse[] = {"",0.1,1}; - period = 1.2; - maxHistoryDelay = 0.5; - autoScrollSpeed = -1; - autoScrollDelay = 5; - autoScrollRewind = 0; - class ListScrollBar: Life_RscScrollBar{}; - class ScrollBar: Life_RscScrollBar{}; -}; - - -class Life_RscText { - x = 0; - y = 0; - h = 0.037; - w = 0.3; - type = 0; - style = 0; - shadow = 1; - colorShadow[] = {0, 0, 0, 0.5}; - font = "PuristaMedium"; - SizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - text = ""; - colorText[] = {1, 1, 1, 1.0}; - colorBackground[] = {0, 0, 0, 0}; - linespacing = 1; - tooltipColorText[] = {1,1,1,1}; - tooltipColorBox[] = {1,1,1,1}; - tooltipColorShade[] = {0,0,0,0.65}; -}; - -class Life_RscLine : Life_RscText { - idc = -1; - style = 176; - x = 0.17; - y = 0.48; - w = 0.66; - h = 0; - text = ""; - colorBackground[] = {0, 0, 0, 0}; - colorText[] = {1, 1, 1, 1.0}; -}; - -class Life_RscTree { - style = 2; - font = "PuristaMedium"; - sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)"; - expandedTexture = "A3\ui_f\data\gui\Rsccommon\Rsctree\expandedTexture_ca.paa"; - hiddenTexture = "A3\ui_f\data\gui\Rsccommon\Rsctree\hiddenTexture_ca.paa"; - rowHeight = 0.0439091; - color[] = {1, 1, 1, 1}; - colorSelect[] = {0.7, 0.7, 0.7, 1}; - colorBackground[] = {0, 0, 0, 0}; - colorSelectBackground[] = {0, 0, 0, 0.5}; - colorBorder[] = {0, 0, 0, 0}; - borderSize = 0; -}; - -class Life_RscTitle : Life_RscText { - style = 0; - sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - colorText[] = {0.95, 0.95, 0.95, 1}; -}; - -class life_RscPicture { - shadow = 0; - type = 0; - style = 48; - sizeEx = 0.023; - font = "PuristaMedium"; - colorBackground[] = {}; - colorText[] = {}; - x = 0; - y = 0; - w = 0.2; - h = 0.15; - tooltipColorText[] = {1,1,1,1}; - tooltipColorBox[] = {1,1,1,1}; - tooltipColorShade[] = {0,0,0,0.65}; -}; - -class Life_RscTextMulti : Life_RscText -{ - linespacing = 1; - style = 0 + 16 + 0x200; -}; - -class Life_RscPictureKeepAspect : Life_RscPicture -{ - style = 0x30 + 0x800; -}; - -class Life_RscStructuredText { - type = 13; - style = 0; - x = 0; - y = 0; - h = 0.035; - w = 0.1; - text = ""; - size = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - colorText[] = {1, 1, 1, 1.0}; - shadow = 1; - - class Attributes { - font = "PuristaMedium"; - color = "#ffffff"; - align = "left"; - shadow = 1; - }; -}; - -class Life_RscActiveText { -idc = -1; - type = 11; - style = 0; - x = 0; - y = 0; - h = 0.037; - w = 0.3; - sizeEx = 0.040; - font = "PuristaLight"; - color[] = {1, 1, 1, 1}; - colorActive[] = {1, 0.2, 0.2, 1}; - soundEnter[] = {"\A3\ui_f\data\sound\onover", 0.09, 1}; - soundPush[] = {"\A3\ui_f\data\sound\new1", 0.0, 0}; - soundClick[] = {"\A3\ui_f\data\sound\onclick", 0.07, 1}; - soundEscape[] = {"\A3\ui_f\data\sound\onescape", 0.09, 1}; - action = ""; - text = ""; - tooltipColorText[] = {1,1,1,1}; - tooltipColorBox[] = {1,1,1,1}; - tooltipColorShade[] = {0,0,0,0.65}; -}; - -class Life_RscButton -{ - style = 2; - x = 0; - y = 0; - w = 0.095589; - h = 0.039216; - shadow = 2; - font = "PuristaMedium"; - sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - colorText[] = {1,1,1,1.0}; - colorDisabled[] = {0.4,0.4,0.4,1}; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",0.7}; - colorBackgroundActive[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1}; - colorBackgroundDisabled[] = {0.95,0.95,0.95,1}; - offsetX = 0.003; - offsetY = 0.003; - offsetPressedX = 0.002; - offsetPressedY = 0.002; - colorFocused[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1}; - colorShadow[] = {0,0,0,1}; - colorBorder[] = {0,0,0,1}; - borderSize = 0.0; - soundEnter[] = {"\A3\ui_f\data\sound\RscButton\soundEnter",0.09,1}; - soundPush[] = {"\A3\ui_f\data\sound\RscButton\soundPush",0.09,1}; - soundClick[] = {"\A3\ui_f\data\sound\RscButton\soundClick",0.09,1}; - soundEscape[] = {"\A3\ui_f\data\sound\RscButton\soundEscape",0.09,1}; -}; - -class Life_RscButtonTextOnly : Life_RscButton { - SizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)"; - colorBackground[] = {1, 1, 1, 0}; - colorBackgroundActive[] = {1, 1, 1, 0}; - colorBackgroundDisabled[] = {1, 1, 1, 0}; - colorFocused[] = {1, 1, 1, 0}; - colorShadow[] = {1, 1, 1, 0}; - borderSize = 0.0; -}; - -class Life_RscShortcutButton { - idc = -1; - style = 0; - default = 0; - shadow = 1; - w = 0.183825; - h = "( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)"; - color[] = {1,1,1,1.0}; - colorFocused[] = {1,1,1,1.0}; - color2[] = {0.95,0.95,0.95,1}; - colorDisabled[] = {1,1,1,0.25}; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1}; - colorBackgroundFocused[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1}; - colorBackground2[] = {1,1,1,1}; - animTextureDefault = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\normal_ca.paa"; - animTextureNormal = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\normal_ca.paa"; - animTextureDisabled = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\normal_ca.paa"; - animTextureOver = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\over_ca.paa"; - animTextureFocused = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\focus_ca.paa"; - animTexturePressed = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\down_ca.paa"; - periodFocus = 1.2; - periodOver = 0.8; - class HitZone - { - left = 0.0; - top = 0.0; - right = 0.0; - bottom = 0.0; - }; - class ShortcutPos - { - left = 0; - top = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - ( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; - w = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)"; - h = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - }; - class TextPos - { - left = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)"; - top = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - ( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; - right = 0.005; - bottom = 0.0; - }; - period = 0.4; - font = "PuristaMedium"; - size = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - text = ""; - soundEnter[] = {"\A3\ui_f\data\sound\RscButton\soundEnter",0.09,1}; - soundPush[] = {"\A3\ui_f\data\sound\RscButton\soundPush",0.09,1}; - soundClick[] = {"\A3\ui_f\data\sound\RscButton\soundClick",0.09,1}; - soundEscape[] = {"\A3\ui_f\data\sound\RscButton\soundEscape",0.09,1}; - action = ""; - class Attributes - { - font = "PuristaMedium"; - color = "#E5E5E5"; - align = "left"; - shadow = "true"; - }; - class AttributesImage - { - font = "PuristaMedium"; - color = "#E5E5E5"; - align = "left"; - }; -}; - -class Life_RscButtonMenu : Life_RscShortcutButton { - idc = -1; - type = 16; - style = "0x02 + 0xC0"; - default = 0; - shadow = 0; - x = 0; - y = 0; - w = 0.095589; - h = 0.039216; - animTextureNormal = "#(argb,8,8,3)color(1,1,1,1)"; - animTextureDisabled = "#(argb,8,8,3)color(1,1,1,1)"; - animTextureOver = "#(argb,8,8,3)color(1,1,1,1)"; - animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)"; - animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)"; - animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)"; - colorBackground[] = {0,0,0,0.8}; - colorBackgroundFocused[] = {1,1,1,1}; - colorBackground2[] = {0.75,0.75,0.75,1}; - color[] = {1,1,1,1}; - colorFocused[] = {0,0,0,1}; - color2[] = {0,0,0,1}; - colorText[] = {1,1,1,1}; - colorDisabled[] = {1,1,1,0.25}; - period = 1.2; - periodFocus = 1.2; - periodOver = 1.2; - size = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - tooltipColorText[] = {1,1,1,1}; - tooltipColorBox[] = {1,1,1,1}; - tooltipColorShade[] = {0,0,0,0.65}; - class TextPos - { - left = "0.25 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; - top = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) - ( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; - right = 0.005; - bottom = 0.0; - }; - class Attributes - { - font = "PuristaLight"; - color = "#E5E5E5"; - align = "left"; - shadow = "false"; - }; - class ShortcutPos - { - left = "(6.25 * ( ((safezoneW / safezoneH) min 1.2) / 40)) - 0.0225 - 0.005"; - top = 0.005; - w = 0.0225; - h = 0.03; - }; - soundEnter[] = {"\A3\ui_f\data\sound\RscButtonMenu\soundEnter",0.09,1}; - soundPush[] = {"\A3\ui_f\data\sound\RscButtonMenu\soundPush",0.09,1}; - soundClick[] = {"\A3\ui_f\data\sound\RscButtonMenu\soundClick",0.09,1}; - soundEscape[] = {"\A3\ui_f\data\sound\RscButtonMenu\soundEscape",0.09,1}; - textureNoShortcut = ""; -}; - -class Life_RscShortcutButtonMain : Life_RscShortcutButton { - idc = -1; - style = 0; - default = 0; - w = 0.313726; - h = 0.104575; - color[] = {1, 1, 1, 1.0}; - colorDisabled[] = {1, 1, 1, 0.25}; - - class HitZone { - left = 0.0; - top = 0.0; - right = 0.0; - bottom = 0.0; - }; - - class ShortcutPos { - left = 0.0145; - top = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - ( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)) / 2"; - w = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2) * (3/4)"; - h = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)"; - }; - - class TextPos { - left = "( ((safezoneW / safezoneH) min 1.2) / 32) * 1.5"; - top = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)*2 - ( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)) / 2"; - right = 0.005; - bottom = 0.0; - }; - animTextureNormal = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\normal_ca.paa"; - animTextureDisabled = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\disabled_ca.paa"; - animTextureOver = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\over_ca.paa"; - animTextureFocused = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\focus_ca.paa"; - animTexturePressed = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\down_ca.paa"; - animTextureDefault = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\normal_ca.paa"; - period = 0.5; - font = "PuristaMedium"; - size = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)"; - sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)"; - text = ""; - soundEnter[] = {"\A3\ui_f\data\sound\onover", 0.09, 1}; - soundPush[] = {"\A3\ui_f\data\sound\new1", 0.0, 0}; - soundClick[] = {"\A3\ui_f\data\sound\onclick", 0.07, 1}; - soundEscape[] = {"\A3\ui_f\data\sound\onescape", 0.09, 1}; - action = ""; - - class Attributes { - font = "PuristaMedium"; - color = "#E5E5E5"; - align = "left"; - shadow = "false"; - }; - - class AttributesImage { - font = "PuristaMedium"; - color = "#E5E5E5"; - align = "false"; - }; -}; - -class Life_RscCheckbox { - idc = -1; - type = 7; - style = 0; - x = "LINE_X(XVAL)"; - y = LINE_Y; - w = "LINE_W(WVAL)"; - h = 0.029412; - colorText[] = {1, 0, 0, 1}; - color[] = {0, 0, 0, 0}; - colorBackground[] = {0, 0, 1, 1}; - colorTextSelect[] = {0, 0.8, 0, 1}; - colorSelectedBg[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 1}; - colorSelect[] = {0, 0, 0, 1}; - colorTextDisable[] = {0.4, 0.4, 0.4, 1}; - colorDisable[] = {0.4, 0.4, 0.4, 1}; - font = "PuristaMedium"; - sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)"; - rows = 1; - 5ns = 1; - strings[] = {UNCHECKED}; - checked_strings[] = {CHECKED}; -}; - -class Life_RscProgress -{ - type = 8; - style = 0; - x = 0.344; - y = 0.619; - w = 0.313726; - h = 0.0261438; - texture = ""; - shadow = 2; - colorFrame[] = {0, 0, 0, 1}; - colorBackground[] = {0,0,0,0.7}; - colorBar[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; -}; - -class Life_RscListBox -{ - style = 16; - idc = -1; - type = 5; - w = 0.275; - h = 0.04; - font = "PuristaMedium"; - colorSelect[] = {1, 1, 1, 1}; - colorText[] = {1, 1, 1, 1}; - colorBackground[] = {0.28,0.28,0.28,0.28}; - colorSelect2[] = {1, 1, 1, 1}; - colorSelectBackground[] = {0.95, 0.95, 0.95, 0.5}; - colorSelectBackground2[] = {1, 1, 1, 0.5}; - colorScrollbar[] = {0.2, 0.2, 0.2, 1}; - colorPicture[] = {1,1,1,1}; - colorPictureSelected[] = {1,1,1,1}; - colorPictureDisabled[] = {1,1,1,1}; - arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa"; - arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa"; - wholeHeight = 0.45; - rowHeight = 0.04; - color[] = {0.7, 0.7, 0.7, 1}; - colorActive[] = {0,0,0,1}; - colorDisabled[] = {0,0,0,0.3}; - sizeEx = 0.023; - soundSelect[] = {"",0.1,1}; - soundExpand[] = {"",0.1,1}; - soundCollapse[] = {"",0.1,1}; - maxHistoryDelay = 1; - autoScrollSpeed = -1; - autoScrollDelay = 5; - autoScrollRewind = 0; - tooltipColorText[] = {1,1,1,1}; - tooltipColorBox[] = {1,1,1,1}; - tooltipColorShade[] = {0,0,0,0.65}; - class ListScrollBar: Life_RscScrollBar - { - color[] = {1,1,1,1}; - autoScrollEnabled = 1; - }; -}; - -class Life_RscEdit { - type = 2; - style = 0x00 + 0x40; - font = "PuristaMedium"; - shadow = 2; - sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - colorBackground[] = {0, 0, 0, 1}; - soundSelect[] = {"",0.1,1}; - soundExpand[] = {"",0.1,1}; - colorText[] = {0.95, 0.95, 0.95, 1}; - colorDisabled[] = {1, 1, 1, 0.25}; - autocomplete = false; - colorSelection[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 1}; - canModify = 1; -}; - -class Life_RscSlider { - h = 0.025; - color[] = {1, 1, 1, 0.8}; - colorActive[] = {1, 1, 1, 1}; -}; - -class life_RscXSliderH -{ - style = 1024; - type = 43; - shadow = 2; - x = 0; - y = 0; - h = 0.029412; - w = 0.400000; - color[] = { - 1, 1, 1, 0.7 - }; - colorActive[] = { - 1, 1, 1, 1 - }; - colorDisabled[] = { - 1, 1, 1, 0.500000 - }; - arrowEmpty = "\A3\ui_f\data\gui\cfg\slider\arrowEmpty_ca.paa"; - arrowFull = "\A3\ui_f\data\gui\cfg\slider\arrowFull_ca.paa"; - border = "\A3\ui_f\data\gui\cfg\slider\border_ca.paa"; - thumb = "\A3\ui_f\data\gui\cfg\slider\thumb_ca.paa"; -}; - -class Life_RscFrame { - type = 0; - idc = -1; - style = 64; - shadow = 2; - colorBackground[] = {0, 0, 0, 0}; - colorText[] = {1, 1, 1, 1}; - font = "PuristaMedium"; - sizeEx = 0.02; - text = ""; -}; - -class Life_RscBackground : Life_RscText { - type = 0; - IDC = -1; - style = 512; - shadow = 0; - x = 0.0; - y = 0.0; - w = 1.0; - h = 1.0; - text = ""; - ColorBackground[] = {0.48, 0.5, 0.35, 1}; - ColorText[] = {0.1, 0.1, 0.1, 1}; - font = "PuristaMedium"; - SizeEx = 1; -}; - -class Life_RscHTML { - colorText[] = {1, 1, 1, 1.0}; - colorBold[] = {1, 1, 1, 1.0}; - colorLink[] = {1, 1, 1, 0.75}; - colorLinkActive[] = {1, 1, 1, 1.0}; - sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - prevPage = "\A3\ui_f\data\gui\Rsccommon\Rschtml\arrow_left_ca.paa"; - nextPage = "\A3\ui_f\data\gui\Rsccommon\Rschtml\arrow_right_ca.paa"; - shadow = 2; - - class H1 { - font = "PuristaMedium"; - fontBold = "PuristaSemibold"; - sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)"; - align = "left"; - }; - - class H2 { - font = "PuristaMedium"; - fontBold = "PuristaSemibold"; - sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - align = "right"; - }; - - class H3 { - font = "PuristaMedium"; - fontBold = "PuristaSemibold"; - sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - align = "left"; - }; - - class H4 { - font = "PuristaMedium"; - fontBold = "PuristaSemibold"; - sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - align = "left"; - }; - - class H5 { - font = "PuristaMedium"; - fontBold = "PuristaSemibold"; - sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - align = "left"; - }; - - class H6 { - font = "PuristaMedium"; - fontBold = "PuristaSemibold"; - sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - align = "left"; - }; - - class P { - font = "PuristaMedium"; - fontBold = "PuristaSemibold"; - sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - align = "left"; - }; -}; - -class Life_RscHitZones { - x = 0; - y = 0; - w = 0.1; - h = 0.1; - xCount = 1; - yCount = 1; - xSpace = 0; - ySpace = 0; -}; - -class Life_RscMapControl -{ - access = 0; - type = 101; - idc = 51; - style = 48; - colorBackground[] = {0.969,0.957,0.949,1}; - colorOutside[] = {0,0,0,1}; - colorText[] = {0,0,0,1}; - font = "TahomaB"; - sizeEx = 0.04; - colorSea[] = {0.467,0.631,0.851,0.5}; - colorForest[] = {0.624,0.78,0.388,0.5}; - colorRocks[] = {0,0,0,0.3}; - colorCountlines[] = {0.572,0.354,0.188,0.25}; - colorMainCountlines[] = {0.572,0.354,0.188,0.5}; - colorCountlinesWater[] = {0.491,0.577,0.702,0.3}; - colorMainCountlinesWater[] = {0.491,0.577,0.702,0.6}; - colorForestBorder[] = {0,0,0,0}; - colorRocksBorder[] = {0,0,0,0}; - colorPowerLines[] = {0.1,0.1,0.1,1}; - colorRailWay[] = {0.8,0.2,0,1}; - colorNames[] = {0.1,0.1,0.1,0.9}; - colorInactive[] = {1,1,1,0.5}; - colorLevels[] = {0.286,0.177,0.094,0.5}; - colorTracks[] = {0.84,0.76,0.65,0.15}; - colorRoads[] = {0.7,0.7,0.7,1}; - colorMainRoads[] = {0.9,0.5,0.3,1}; - colorTracksFill[] = {0.84,0.76,0.65,1}; - colorRoadsFill[] = {1,1,1,1}; - colorMainRoadsFill[] = {1,0.6,0.4,1}; - colorGrid[] = {0.1,0.1,0.1,0.6}; - colorGridMap[] = {0.1,0.1,0.1,0.6}; - stickX[] = {0.2,{"Gamma",1,1.5}}; - stickY[] = {0.2,{"Gamma",1,1.5}}; - class Legend - { - colorBackground[] = {1,1,1,0.5}; - color[] = {0,0,0,1}; - x = "SafeZoneX + ( ((safezoneW / safezoneH) min 1.2) / 40)"; - y = "SafeZoneY + safezoneH - 4.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; - h = "3.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - font = "PuristaMedium"; - sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)"; - }; - class ActiveMarker - { - color[] = {0.3,0.1,0.9,1}; - size = 50; - }; - class Command - { - color[] = {1,1,1,1}; - icon = "\A3\ui_f\data\map\mapcontrol\waypoint_ca.paa"; - size = 18; - importance = 1; - coefMin = 1; - coefMax = 1; - }; - class Task - { - colorCreated[] = {1,1,1,1}; - colorCanceled[] = {0.7,0.7,0.7,1}; - colorDone[] = {0.7,1,0.3,1}; - colorFailed[] = {1,0.3,0.2,1}; - color[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"}; - icon = "\A3\ui_f\data\map\mapcontrol\taskIcon_CA.paa"; - iconCreated = "\A3\ui_f\data\map\mapcontrol\taskIconCreated_CA.paa"; - iconCanceled = "\A3\ui_f\data\map\mapcontrol\taskIconCanceled_CA.paa"; - iconDone = "\A3\ui_f\data\map\mapcontrol\taskIconDone_CA.paa"; - iconFailed = "\A3\ui_f\data\map\mapcontrol\taskIconFailed_CA.paa"; - size = 27; - importance = 1; - coefMin = 1; - coefMax = 1; - }; - class CustomMark - { - color[] = {0,0,0,1}; - icon = "\A3\ui_f\data\map\mapcontrol\custommark_ca.paa"; - size = 24; - importance = 1; - coefMin = 1; - coefMax = 1; - }; - class Tree - { - color[] = {0.45,0.64,0.33,0.4}; - icon = "\A3\ui_f\data\map\mapcontrol\bush_ca.paa"; - size = 12; - importance = "0.9 * 16 * 0.05"; - coefMin = 0.25; - coefMax = 4; - }; - class SmallTree - { - color[] = {0.45,0.64,0.33,0.4}; - icon = "\A3\ui_f\data\map\mapcontrol\bush_ca.paa"; - size = 12; - importance = "0.6 * 12 * 0.05"; - coefMin = 0.25; - coefMax = 4; - }; - class Bush - { - color[] = {0.45,0.64,0.33,0.4}; - icon = "\A3\ui_f\data\map\mapcontrol\bush_ca.paa"; - size = "14/2"; - importance = "0.2 * 14 * 0.05 * 0.05"; - coefMin = 0.25; - coefMax = 4; - }; - class Church - { - color[] = {1,1,1,1}; - icon = "\A3\ui_f\data\map\mapcontrol\church_CA.paa"; - size = 24; - importance = 1; - coefMin = 0.85; - coefMax = 1; - }; - class Chapel - { - color[] = {0,0,0,1}; - icon = "\A3\ui_f\data\map\mapcontrol\Chapel_CA.paa"; - size = 24; - importance = 1; - coefMin = 0.85; - coefMax = 1; - }; - class Cross - { - color[] = {0,0,0,1}; - icon = "\A3\ui_f\data\map\mapcontrol\Cross_CA.paa"; - size = 24; - importance = 1; - coefMin = 0.85; - coefMax = 1; - }; - class Rock - { - color[] = {0.1,0.1,0.1,0.8}; - icon = "\A3\ui_f\data\map\mapcontrol\rock_ca.paa"; - size = 12; - importance = "0.5 * 12 * 0.05"; - coefMin = 0.25; - coefMax = 4; - }; - class Bunker - { - color[] = {0,0,0,1}; - icon = "\A3\ui_f\data\map\mapcontrol\bunker_ca.paa"; - size = 14; - importance = "1.5 * 14 * 0.05"; - coefMin = 0.25; - coefMax = 4; - }; - class Fortress - { - color[] = {0,0,0,1}; - icon = "\A3\ui_f\data\map\mapcontrol\bunker_ca.paa"; - size = 16; - importance = "2 * 16 * 0.05"; - coefMin = 0.25; - coefMax = 4; - }; - class Fountain - { - color[] = {0,0,0,1}; - icon = "\A3\ui_f\data\map\mapcontrol\fountain_ca.paa"; - size = 11; - importance = "1 * 12 * 0.05"; - coefMin = 0.25; - coefMax = 4; - }; - class ViewTower - { - color[] = {0,0,0,1}; - icon = "\A3\ui_f\data\map\mapcontrol\viewtower_ca.paa"; - size = 16; - importance = "2.5 * 16 * 0.05"; - coefMin = 0.5; - coefMax = 4; - }; - class Lighthouse - { - color[] = {1,1,1,1}; - icon = "\A3\ui_f\data\map\mapcontrol\lighthouse_CA.paa"; - size = 24; - importance = 1; - coefMin = 0.85; - coefMax = 1; - }; - class Quay - { - color[] = {1,1,1,1}; - icon = "\A3\ui_f\data\map\mapcontrol\quay_CA.paa"; - size = 24; - importance = 1; - coefMin = 0.85; - coefMax = 1; - }; - class Fuelstation - { - color[] = {1,1,1,1}; - icon = "\A3\ui_f\data\map\mapcontrol\fuelstation_CA.paa"; - size = 24; - importance = 1; - coefMin = 0.85; - coefMax = 1; - }; - class Hospital - { - color[] = {1,1,1,1}; - icon = "\A3\ui_f\data\map\mapcontrol\hospital_CA.paa"; - size = 24; - importance = 1; - coefMin = 0.85; - coefMax = 1; - }; - class BusStop - { - color[] = {1,1,1,1}; - icon = "\A3\ui_f\data\map\mapcontrol\busstop_CA.paa"; - size = 24; - importance = 1; - coefMin = 0.85; - coefMax = 1; - }; - class Transmitter - { - color[] = {1,1,1,1}; - icon = "\A3\ui_f\data\map\mapcontrol\transmitter_CA.paa"; - size = 24; - importance = 1; - coefMin = 0.85; - coefMax = 1; - }; - class Stack - { - color[] = {0,0,0,1}; - icon = "\A3\ui_f\data\map\mapcontrol\stack_ca.paa"; - size = 20; - importance = "2 * 16 * 0.05"; - coefMin = 0.9; - coefMax = 4; - }; - class Ruin - { - color[] = {0,0,0,1}; - icon = "\A3\ui_f\data\map\mapcontrol\ruin_ca.paa"; - size = 16; - importance = "1.2 * 16 * 0.05"; - coefMin = 1; - coefMax = 4; - }; - class Tourism - { - color[] = {0,0,0,1}; - icon = "\A3\ui_f\data\map\mapcontrol\tourism_ca.paa"; - size = 16; - importance = "1 * 16 * 0.05"; - coefMin = 0.7; - coefMax = 4; - }; - class Watertower - { - color[] = {1,1,1,1}; - icon = "\A3\ui_f\data\map\mapcontrol\watertower_CA.paa"; - size = 24; - importance = 1; - coefMin = 0.85; - coefMax = 1; - }; - class Waypoint - { - color[] = {0,0,0,1}; - size = 24; - importance = 1; - coefMin = 1; - coefMax = 1; - icon = "\A3\ui_f\data\map\mapcontrol\waypoint_ca.paa"; - }; - class WaypointCompleted - { - color[] = {0,0,0,1}; - size = 24; - importance = 1; - coefMin = 1; - coefMax = 1; - icon = "\A3\ui_f\data\map\mapcontrol\waypointCompleted_ca.paa"; - }; - moveOnEdges = 0;//1; - x = "SafeZoneXAbs"; - y = "SafeZoneY + 1.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - w = "SafeZoneWAbs"; - h = "SafeZoneH - 1.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - shadow = 0; - ptsPerSquareSea = 5; - ptsPerSquareTxt = 3; - ptsPerSquareCLn = 10; - ptsPerSquareExp = 10; - ptsPerSquareCost = 10; - ptsPerSquareFor = 9; - ptsPerSquareForEdge = 9; - ptsPerSquareRoad = 6; - ptsPerSquareObj = 9; - showCountourInterval = 0; - scaleMin = 0.001; - scaleMax = 1; - scaleDefault = 0.16; - maxSatelliteAlpha = 0.85; - alphaFadeStartScale = 0.35; - alphaFadeEndScale = 0.4; - fontLabel = "PuristaMedium"; - sizeExLabel = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)"; - fontGrid = "TahomaB"; - sizeExGrid = 0.02; - fontUnits = "TahomaB"; - sizeExUnits = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)"; - fontNames = "PuristaMedium"; - sizeExNames = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8) * 2"; - fontInfo = "PuristaMedium"; - sizeExInfo = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)"; - fontLevel = "TahomaB"; - sizeExLevel = 0.02; - text = "#(argb,8,8,3)color(1,1,1,1)"; - //text = "\a3\ui_f\data\map_background2_co.paa"; - class power - { - icon = "\A3\ui_f\data\map\mapcontrol\power_CA.paa"; - size = 24; - importance = 1; - coefMin = 0.85; - coefMax = 1; - color[] = {1,1,1,1}; - }; - class powersolar - { - icon = "\A3\ui_f\data\map\mapcontrol\powersolar_CA.paa"; - size = 24; - importance = 1; - coefMin = 0.85; - coefMax = 1; - color[] = {1,1,1,1}; - }; - class powerwave - { - icon = "\A3\ui_f\data\map\mapcontrol\powerwave_CA.paa"; - size = 24; - importance = 1; - coefMin = 0.85; - coefMax = 1; - color[] = {1,1,1,1}; - }; - class powerwind - { - icon = "\A3\ui_f\data\map\mapcontrol\powerwind_CA.paa"; - size = 24; - importance = 1; - coefMin = 0.85; - coefMax = 1; - color[] = {1,1,1,1}; - }; - class shipwreck - { - icon = "\A3\ui_f\data\map\mapcontrol\shipwreck_CA.paa"; - size = 24; - importance = 1; - coefMin = 0.85; - coefMax = 1; - color[] = {1,1,1,1}; - }; -}; - -class Life_RscCombo { - style = 16; - type = 4; - x = 0; - y = 0; - w = 0.12; - h = 0.035; - shadow = 0; - colorSelect[] = {0, 0, 0, 1}; - soundExpand[] = {"",0.1,1}; - colorText[] = {0.95, 0.95, 0.95, 1}; - soundCollapse[] = {"",0.1,1}; - maxHistoryDelay = 1; - colorBackground[] = {0.4,0.4,0.4,0.4}; - colorSelectBackground[] = {1, 1, 1, 0.7}; - colow_Rscrollbar[] = {1, 0, 0, 1}; - soundSelect[] = { - "", 0.000000, 1 - }; - arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa"; - arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa"; - wholeHeight = 0.45; - color[] = {1, 1, 1, 1}; - colorActive[] = {1, 0, 0, 1}; - colorDisabled[] = {1, 1, 1, 0.25}; - font = "PuristaMedium"; - sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - - class ComboScrollBar : Life_RscScrollBar {}; -}; - -class Life_RscToolbox { - colorText[] = {0.95, 0.95, 0.95, 1}; - color[] = {0.95, 0.95, 0.95, 1}; - colorTextSelect[] = {0.95, 0.95, 0.95, 1}; - colorSelect[] = {0.95, 0.95, 0.95, 1}; - colorTextDisable[] = {0.4, 0.4, 0.4, 1}; - colorDisable[] = {0.4, 0.4, 0.4, 1}; - colorSelectedBg[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - font = "PuristaMedium"; - sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)"; -}; - diff --git a/Altis_Life.Altis/dialog/compensate.hpp b/Altis_Life.Altis/dialog/compensate.hpp deleted file mode 100644 index 81142599..00000000 --- a/Altis_Life.Altis/dialog/compensate.hpp +++ /dev/null @@ -1,81 +0,0 @@ -class Life_Admin_Compensate { - idd = 9920; - name= "life_admin_compensate_give"; - movingEnable = false; - enableSimulation = true; - onLoad = "[] spawn {waitUntil {!isNull (findDisplay 9920)}; ((findDisplay 9920) displayCtrl 9921) ctrlSetText localize ""STR_Admin_Amount""};"; - - class controlsBackground { - class Life_RscTitleBackground:Life_RscText { - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - idc = -1; - x = 0.1; - y = 0.2; - w = 0.5; - h = (1 / 25); - }; - - class MainBackground:Life_RscText { - colorBackground[] = {0, 0, 0, 0.7}; - idc = -1; - x = 0.1; - y = 0.2 + (11 / 250); - w = 0.5; - h = 0.3 - (22 / 250); - }; - }; - - class controls { - - class InfoMsg : Life_RscStructuredText - { - idc = 9921; - sizeEx = 0.020; - text = ""; - x = 0.1; - y = 0.25; - w = 0.5; h = 0.11; - }; - - class Title : Life_RscTitle { - colorBackground[] = {0, 0, 0, 0}; - idc = -1; - text = "$STR_Admin_Compensate"; - x = 0.1; - y = 0.2; - w = 0.5; - h = (1 / 25); - }; - - class AdminCloseComp : Life_RscButtonMenu { - idc = -1; - text = "$STR_Global_Close"; - onButtonClick = "closeDialog 0;"; - x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.5 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class AdminCompensVer : Life_RscButtonMenu { - idc = -1; - text = "$STR_Admin_Compensate"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] spawn life_fnc_adminCompensate;"; - x = 0.27; - y = 0.40; - w = (6.25 / 40); - h = (1 / 25); - }; - - class AdminCompensTex : Life_RscEdit - { - idc = 9922; - text = ""; - x = 0.04 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.35; - w = (13 / 40); - h = (1 / 25); - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/deathScreen.h b/Altis_Life.Altis/dialog/deathScreen.h deleted file mode 100644 index dd972e1d..00000000 --- a/Altis_Life.Altis/dialog/deathScreen.h +++ /dev/null @@ -1,79 +0,0 @@ -class DeathScreen -{ - idd = 7300; - name = "Life_Death_Screen"; - movingEnabled = false; - enableSimulation = true; - - class controlsBackground - { - }; - - class Controls - { - class MedicsOnline : Life_RscText - { - idc = 7304; - colorBackground[] = {0,0,0,0}; - text = "Medics Online: 1"; - x = 0.000874975 * safezoneW + safezoneX; - y = 0.0556 * safezoneH + safezoneY; - w = 0.8; - h = (1 / 25); - }; - - class MedicsNearby : Life_RscText - { - idc = 7305; - colorBackground[] = {0,0,0,0}; - text = "Medics Nearby: No"; - x = 0.00190622 * safezoneW + safezoneX; - y = 0.0776 * safezoneH + safezoneY; - w = 0.8; - h = (1 / 25); - }; - - class RespawnBtn : Life_RscButtonMenu - { - idc = 7302; - x = 0.9 * safezoneW + safezoneX; - y = 0.00500001 * safezoneH + safezoneY; - w = (9 / 40); - h = (1 / 25); - text = "Respawn"; - onButtonClick = "closeDialog 0; life_respawned = true; [] call life_fnc_spawnMenu;"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.7}; - class Attributes - { - align = "center"; - }; - }; - - class MedicBtn : Life_RscButtonMenu - { - idc = 7303; - x = 0.9 * safezoneW + safezoneX; - y = 0.0292 * safezoneH + safezoneY; - w = (9 / 40); - h = (1 / 25); - onButtonClick = "[] call life_fnc_requestMedic;"; - text = "Request Medic"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.7}; - class Attributes - { - align = "center"; - }; - }; - - class respawnTime : Life_RscText - { - idc = 7301; - colorBackground[] = {0,0,0,0}; - text = ""; - x = 0.422656 * safezoneW + safezoneX; - y = 0.918 * safezoneH + safezoneY; - w = 0.8; - h = (1 / 25); - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/federalReserve.h b/Altis_Life.Altis/dialog/federalReserve.h deleted file mode 100644 index 66874002..00000000 --- a/Altis_Life.Altis/dialog/federalReserve.h +++ /dev/null @@ -1,103 +0,0 @@ -class Federal_Safe -{ - idd = 3500; - name = "Federal_Safe"; - movingEnable = false; - enableSimulation = true; - - class controlsBackground - { - class RscTitleBackground : Life_RscText - { - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - idc = -1; - x = 0.1; - y = 0.2; - w = 0.33; - h = (1 / 25); - }; - - class RscBackground : Life_RscText - { - colorBackground[] = {0, 0, 0, 0.7}; - idc = -1; - x = 0.1; - y = 0.2 + (11 / 250); - w = 0.33; - h = 0.7 - (22 / 250); - }; - - class RscTitleText : Life_RscTitle - { - colorBackground[] = {0, 0, 0, 0}; - idc = 3501; - text = ""; - x = 0.1; - y = 0.2; - w = 0.33; - h = (1 / 25); - }; - - class VehicleWeight : RscTitleText - { - idc = 3504; - style = 1; - text = ""; - }; - - class RscTrunkText : Life_RscText - { - idc = -1; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - text = "$STR_Trunk_TInventory"; - sizeEx = 0.04; - - x = 0.11; y = 0.25; - w = 0.3; h = 0.04; - }; - }; - - class Controls - { - class TrunkGear : Life_RscListBox - { - idc = 3502; - text = ""; - sizeEx = 0.030; - - x = 0.11; y = 0.29; - w = 0.3; h = 0.42; - }; - - class TrunkEdit : Life_RscEdit - { - idc = 3505; - text = "1"; - sizeEx = 0.030; - x = 0.11; y = 0.72; - w = 0.3; h = 0.03; - }; - - class TakeItem : Life_RscButtonMenu - { - idc = -1; - text = "$STR_Trunk_Take"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call life_fnc_safeTake;"; - x = 0.19; y = 0.78; - w = (6.25 / 40); - h = (1 / 25); - }; - - class ButtonClose : Life_RscButtonMenu { - idc = -1; - //shortcuts[] = {0x00050000 + 2}; - text = "$STR_Global_Close"; - onButtonClick = "closeDialog 0;"; - x = 0.1; - y = 0.9 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/function/fn_bankDeposit.sqf b/Altis_Life.Altis/dialog/function/fn_bankDeposit.sqf deleted file mode 100644 index 2739687f..00000000 --- a/Altis_Life.Altis/dialog/function/fn_bankDeposit.sqf +++ /dev/null @@ -1,23 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_bankDeposit.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Figure it out. -*/ -private "_value"; -_value = parseNumber(ctrlText 2702); - -//Series of stupid checks -if(_value > 999999) exitWith {hint localize "STR_ATM_GreaterThan";}; -if(_value < 0) exitWith {}; -if(!([str(_value)] call life_fnc_isnumeric)) exitWith {hint localize "STR_ATM_notnumeric"}; -if(_value > CASH) exitWith {hint localize "STR_ATM_NotEnoughCash"}; - -CASH = CASH - _value; -BANK = BANK + _value; - -hint format[localize "STR_ATM_DepositMSG",[_value] call life_fnc_numberText]; -[] call life_fnc_atmMenu; -[6] call SOCK_fnc_updatePartial; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/function/fn_bankTransfer.sqf b/Altis_Life.Altis/dialog/function/fn_bankTransfer.sqf deleted file mode 100644 index cfb3749f..00000000 --- a/Altis_Life.Altis/dialog/function/fn_bankTransfer.sqf +++ /dev/null @@ -1,27 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_bankTransfer.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Figure it out again. -*/ -private["_val","_unit","_tax"]; -_val = parseNumber(ctrlText 2702); -_unit = call compile format["%1",(lbData[2703,(lbCurSel 2703)])]; -if(isNull _unit) exitWith {}; -if((lbCurSel 2703) == -1) exitWith {hint localize "STR_ATM_NoneSelected"}; -if(isNil "_unit") exitWith {hint localize "STR_ATM_DoesntExist"}; -if(_val > 999999) exitWith {hint localize "STR_ATM_TransferMax";}; -if(_val < 0) exitwith {}; -if(!([str(_val)] call life_fnc_isnumeric)) exitWith {hint localize "STR_ATM_notnumeric"}; -if(_val > BANK) exitWith {hint localize "STR_ATM_NotEnough"}; -_tax = [_val] call life_fnc_taxRate; -if((_val + _tax) > BANK) exitWith {hint format[localize "STR_ATM_SentMoneyFail",_val,_tax]}; - -BANK = BANK - (_val + _tax); - -[_val,profileName] remoteExecCall ["life_fnc_wireTransfer",_unit]; -[] call life_fnc_atmMenu; -hint format[localize "STR_ATM_SentMoneySuccess",[_val] call life_fnc_numberText,_unit getVariable["realname",name _unit],[_tax] call life_fnc_numberText]; -[1] call SOCK_fnc_updatePartial; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/function/fn_bankWithdraw.sqf b/Altis_Life.Altis/dialog/function/fn_bankWithdraw.sqf deleted file mode 100644 index e5004f92..00000000 --- a/Altis_Life.Altis/dialog/function/fn_bankWithdraw.sqf +++ /dev/null @@ -1,20 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Bryan "Tonic" Boardwine - - Description: - Withdraws money from the players account -*/ -private["_val"]; -_val = parseNumber(ctrlText 2702); -if(_val > 999999) exitWith {hint localize "STR_ATM_WithdrawMax";}; -if(_val < 0) exitwith {}; -if(!([str(_val)] call life_fnc_isnumeric)) exitWith {hint localize "STR_ATM_notnumeric"}; -if(_val > BANK) exitWith {hint localize "STR_ATM_NotEnoughFunds"}; -if(_val < 100 && BANK > 20000000) exitWith {hint localize "STR_ATM_WithdrawMin"}; //Temp fix for something. - -ADD(CASH,_val); -SUB(BANK,_val); -hint format [localize "STR_ATM_WithdrawSuccess",[_val] call life_fnc_numberText]; -[] call life_fnc_atmMenu; -[6] call SOCK_fnc_updatePartial; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/function/fn_displayHandler.sqf b/Altis_Life.Altis/dialog/function/fn_displayHandler.sqf deleted file mode 100644 index 3a0610ea..00000000 --- a/Altis_Life.Altis/dialog/function/fn_displayHandler.sqf +++ /dev/null @@ -1,19 +0,0 @@ -/* - File: fn_displayHandler.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Master display handler -*/ -private["_control","_code","_shift","_ctrlKey","_alt","_handled"]; -_handled = false; -_control = _this select 0; -_code = _this select 1; -_shift = _this select 2; -_ctrlKey = _this select 3; -_alt = _this select 4; - -//Esc Key Handler -if(_code == 1) then {_handled = true;}; - -_handled; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/function/fn_gangDeposit.sqf b/Altis_Life.Altis/dialog/function/fn_gangDeposit.sqf deleted file mode 100644 index 99ad7bd9..00000000 --- a/Altis_Life.Altis/dialog/function/fn_gangDeposit.sqf +++ /dev/null @@ -1,25 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Deposits money into the players gang bank. -*/ -private["_value"]; -_value = parseNumber(ctrlText 2702); - -//Series of stupid checks -if(_value > 999999) exitWith {hint localize "STR_ATM_GreaterThan";}; -if(_value < 0) exitWith {}; -if(!([str(_value)] call life_fnc_isnumeric)) exitWith {hint localize "STR_ATM_notnumeric"}; -if(_value > BANK) exitWith {hint localize "STR_NOTF_NotEnoughFunds"}; - -SUB(BANK,_value); -_gFund = GANG_FUNDS; -ADD(_gFund,_value); -grpPlayer SVAR ["gang_bank",_gFund,true]; - -hint format[localize "STR_ATM_DepositGang",[_value] call life_fnc_numberText]; -[] call life_fnc_atmMenu; -[6] call SOCK_fnc_updatePartial; //Silent Sync -[1,grpPlayer] remoteExecCall ["TON_fnc_updateGang",RSERV]; diff --git a/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf b/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf deleted file mode 100644 index 3ef03c56..00000000 --- a/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf +++ /dev/null @@ -1,69 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_garageLBChange.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Can't be bothered to answer it.. Already deleted it by accident.. -*/ -disableSerialization; -private["_control","_index","_className","_classNameLife","_dataArr","_vehicleColor","_vehicleInfo","_trunkSpace","_sellPrice","_retrievePrice"]; -_control = SEL(_this,0); -_index = SEL(_this,1); - -//Fetch some information. -_dataArr = CONTROL_DATAI(_control,_index); -_dataArr = call compile format["%1",_dataArr]; -_className = SEL(_dataArr,0); -_classNameLife = _className; - -if(!isClass (missionConfigFile >> CONFIG_LIFE_VEHICLES >> _classNameLife)) then { - _classNameLife = "Default"; //Use Default class if it doesn't exist - diag_log format["%1: LifeCfgVehicles class doesn't exist",_className]; -}; - -_vehicleColor = SEL(SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"textures"),SEL(_dataArr,1)),0); -if(isNil "_vehicleColor") then {_vehicleColor = "Default";}; - -_vehicleInfo = [_className] call life_fnc_fetchVehInfo; -_trunkSpace = [_className] call life_fnc_vehicleWeightCfg; - -_retrievePrice = switch(playerSide) do { - case civilian: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"storageFee"),0)}; - case west: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"storageFee"),1)}; - case independent: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"storageFee"),2)}; - case east: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"storageFee"),3)}; -}; - -_sellPrice = switch(playerSide) do { - case civilian: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"garageSell"),0)}; - case west: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"garageSell"),1)}; - case independent: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"garageSell"),2)}; - case east: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"garageSell"),3)}; -}; - -if(!(EQUAL(typeName _sellPrice,typeName 0)) OR _sellPrice < 1) then {_sellPrice = 1000}; -if(!(EQUAL(typeName _retrievePrice,typeName 0)) OR _retrievePrice < 1) then {_retrievePrice = 1000}; - -(CONTROL(2800,2803)) ctrlSetStructuredText parseText format[ - (localize "STR_Shop_Veh_UI_RetrievalP")+ " $%1
- " +(localize "STR_Shop_Veh_UI_SellP")+ " $%2
- " +(localize "STR_Shop_Veh_UI_Color")+ " %8
- " +(localize "STR_Shop_Veh_UI_MaxSpeed")+ " %3 km/h
- " +(localize "STR_Shop_Veh_UI_HPower")+ " %4
- " +(localize "STR_Shop_Veh_UI_PSeats")+ " %5
- " +(localize "STR_Shop_Veh_UI_Trunk")+ " %6
- " +(localize "STR_Shop_Veh_UI_Fuel")+ " %7 - ", -[_retrievePrice] call life_fnc_numberText, -[_sellPrice] call life_fnc_numberText, -SEL(_vehicleInfo,8), -SEL(_vehicleInfo,11), -SEL(_vehicleInfo,10), -if(_trunkSpace == -1) then {"None"} else {_trunkSpace}, -SEL(_vehicleInfo,12), -_vehicleColor -]; - -ctrlShow [2803,true]; -ctrlShow [2830,true]; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/function/fn_impoundMenu.sqf b/Altis_Life.Altis/dialog/function/fn_impoundMenu.sqf deleted file mode 100644 index 201f60b4..00000000 --- a/Altis_Life.Altis/dialog/function/fn_impoundMenu.sqf +++ /dev/null @@ -1,36 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_impoundMenu.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Not actually a impound menu, may act as confusion to some but that is what I wanted. - The purpose of this menu is it is now called a 'Garage' where vehicles are stored (persistent ones). -*/ -private["_vehicles","_control"]; -disableSerialization; -_vehicles = param [0,[],[[]]]; - -ctrlShow[2803,false]; -ctrlShow[2830,false]; -waitUntil {!isNull (findDisplay 2800)}; - -if(EQUAL(count _vehicles,0)) exitWith { - ctrlSetText[2811,localize "STR_Garage_NoVehicles"]; -}; - -_control = CONTROL(2800,2802); -lbClear _control; - -{ - _vehicleInfo = [SEL(_x,2)] call life_fnc_fetchVehInfo; - _control lbAdd (SEL(_vehicleInfo,3)); - _tmp = [SEL(_x,2),SEL(_x,8)]; - _tmp = str(_tmp); - _control lbSetData [(lbSize _control)-1,_tmp]; - _control lbSetPicture [(lbSize _control)-1,SEL(_vehicleInfo,2)]; - _control lbSetValue [(lbSize _control)-1,SEL(_x,0)]; -} foreach _vehicles; - -ctrlShow[2810,false]; -ctrlShow[2811,false]; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/function/fn_progressBar.sqf b/Altis_Life.Altis/dialog/function/fn_progressBar.sqf deleted file mode 100644 index ccf4830b..00000000 --- a/Altis_Life.Altis/dialog/function/fn_progressBar.sqf +++ /dev/null @@ -1,14 +0,0 @@ -/* - File: fn_progressBar.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Initializes the progress bar. -*/ -disableSerialization; -private["_ui","_progress"]; -5 cutRsc ["life_progress","PLAIN"]; -_ui = uiNameSpace getVariable "life_progress"; -_progress = _ui displayCtrl 38201; - -_progress progressSetPosition 0.5; diff --git a/Altis_Life.Altis/dialog/function/fn_safeFix.sqf b/Altis_Life.Altis/dialog/function/fn_safeFix.sqf deleted file mode 100644 index 87c8ff2f..00000000 --- a/Altis_Life.Altis/dialog/function/fn_safeFix.sqf +++ /dev/null @@ -1,57 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_safeFix.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Piece of functionality for the cops to close the safe (lock it) -*/ -private "_vault"; -_vault = SEL(_this,0); -if(!(_vault GVAR ["safe_open",false])) exitWith {hint localize "STR_Cop_VaultLocked"}; - -life_action_inUse = true; - -//Setup the progress bar -disableSerialization; -_title = localize "STR_Cop_RepairVault"; -5 cutRsc ["life_progress","PLAIN"]; -_ui = GVAR_UINS "life_progress"; -_progressBar = _ui displayCtrl 38201; -_titleText = _ui displayCtrl 38202; -_titleText ctrlSetText format["%2 (1%1)...","%",_title]; -_progressBar progressSetPosition 0.01; -_cP = 0.01; - -while {true} do { - if(animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { - [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; - player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; - player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; - }; - - sleep 0.26; - - if(isNull _ui) then { - 5 cutRsc ["life_progress","PLAIN"]; - _ui = GVAR_UINS "life_progress"; - _progressBar = _ui displayCtrl 38201; - _titleText = _ui displayCtrl 38202; - }; - _cP = _cP + .012; - _progressBar progressSetPosition _cP; - _titleText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_title]; - if(_cP >= 1 OR !alive player) exitWith {}; - if(life_interrupted) exitWith {}; -}; - -//Kill the UI display and check for various states -5 cutText ["","PLAIN"]; -player playActionNow "stop"; -if(!alive player) exitWith {life_action_inUse = false;}; -if(life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; - -life_action_inUse = false; - -_vault SVAR ["safe_open",false,true]; -hint localize "STR_Cop_VaultRepaired"; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/function/fn_safeInventory.sqf b/Altis_Life.Altis/dialog/function/fn_safeInventory.sqf deleted file mode 100644 index a2fd87d1..00000000 --- a/Altis_Life.Altis/dialog/function/fn_safeInventory.sqf +++ /dev/null @@ -1,23 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_safeInventory.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Fills up the safes inventory. -*/ -private["_safe","_tInv","_pInv","_safeInfo","_str","_shrt"]; -_safe = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -if(isNull _safe) exitWith {closeDialog 0;}; -disableSerialization; - -_tInv = (findDisplay 3500) displayCtrl 3502; -lbClear _tInv; - -_safeInfo = _safe getVariable["safe",-1]; -if(_safeInfo < 1) exitWith {closeDialog 0; hint localize "STR_Civ_VaultEmpty";}; - -_str = M_CONFIG(getText,"VirtualItems","goldbar","displayName"); -_shrt = M_CONFIG(getText,"VirtualItems","goldbar","variable"); -_tInv lbAdd format["[%1] - %2",_safeInfo,(localize _str)]; -_tInv lbSetData [(lbSize _tInv)-1,_shrt]; diff --git a/Altis_Life.Altis/dialog/function/fn_safeOpen.sqf b/Altis_Life.Altis/dialog/function/fn_safeOpen.sqf deleted file mode 100644 index 5323aa84..00000000 --- a/Altis_Life.Altis/dialog/function/fn_safeOpen.sqf +++ /dev/null @@ -1,25 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_safeOpen.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Opens the safe inventory menu. -*/ -if(dialog) exitWith {}; //A dialog is already open. -life_safeObj = param [0,ObjNull,[ObjNull]]; -if(isNull life_safeObj) exitWith {}; -if(playerSide != civilian) exitWith {}; -if((life_safeObj GVAR ["safe",-1]) < 1) exitWith {hint localize "STR_Civ_VaultEmpty";}; -if((life_safeObj GVAR ["inUse",false])) exitWith {hint localize "STR_Civ_VaultInUse"}; -if({side _x == west} count playableUnits < 5) exitWith {hint localize "STR_Civ_NotEnoughCops"}; -if(!createDialog "Federal_Safe") exitWith {localize "STR_MISC_DialogError"}; - -disableSerialization; -ctrlSetText[3501,(localize "STR_Civ_SafeInv")]; -[life_safeObj] call life_fnc_safeInventory; -life_safeObj SVAR ["inUse",true,true]; -[life_safeObj] spawn { - waitUntil {isNull (findDisplay 3500)}; - SEL(_this,0) SVAR ["inUse",false,true]; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/function/fn_safeStore.sqf b/Altis_Life.Altis/dialog/function/fn_safeStore.sqf deleted file mode 100644 index 3dfed2b0..00000000 --- a/Altis_Life.Altis/dialog/function/fn_safeStore.sqf +++ /dev/null @@ -1,26 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_safeStore.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Gateway copy of fn_vehStoreItem but designed for the safe. -*/ -private["_ctrl","_num"]; -disableSerialization; -_ctrl = CONTROL_DATA(3503); -_num = ctrlText 3506; - -//Error checks -if(!([_num] call TON_fnc_isnumber)) exitWith {hint localize "STR_MISC_WrongNumFormat";}; -_num = parseNumber(_num); -if(_num < 1) exitWith {hint localize "STR_Cop_VaultUnder1";}; -if(!(EQUAL(_ctrl,"goldbar"))) exitWith {hint localize "STR_Cop_OnlyGold"}; -if(_num > life_inv_goldbar) exitWith {hint format[localize "STR_Cop_NotEnoughGold",_num];}; - -//Store it. -if(!([false,_ctrl,_num] call life_fnc_handleInv)) exitWith {hint localize "STR_Cop_CantRemove";}; -_safeInfo = life_safeObj GVAR["safe",0]; -life_safeObj GVAR ["safe",_safeInfo + _num,true]; - -[life_safeObj] call life_fnc_safeInventory; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/function/fn_safeTake.sqf b/Altis_Life.Altis/dialog/function/fn_safeTake.sqf deleted file mode 100644 index f7d648b9..00000000 --- a/Altis_Life.Altis/dialog/function/fn_safeTake.sqf +++ /dev/null @@ -1,32 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_safeTake.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Gateway to fn_vehTakeItem.sqf but for safe(s). -*/ -private["_ctrl","_num","_safeInfo"]; -disableSerialization; - -if((lbCurSel 3502) == -1) exitWith {hint localize "STR_Civ_SelectItem";}; -_ctrl = CONTROL_DATA(3502); -_num = ctrlText 3505; -_safeInfo = life_safeObj GVAR ["safe",0]; - -//Error checks -if(!([_num] call TON_fnc_isnumber)) exitWith {hint localize "STR_MISC_WrongNumFormat";}; -_num = parseNumber(_num); -if(_num < 1) exitWith {hint localize "STR_Cop_VaultUnder1";}; -if(!(EQUAL(_ctrl,"goldBar"))) exitWith {hint localize "STR_Cop_OnlyGold"}; -if(_num > _safeInfo) exitWith {hint format[localize "STR_Civ_IsntEnoughGold",_num];}; - -//Secondary checks -_num = [_ctrl,_num,life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff; -if(EQUAL(_num,0)) exitWith {hint localize "STR_NOTF_InvFull"}; - - -//Take it -if(!([true,_ctrl,_num] call life_fnc_handleInv)) exitWith {hint localize "STR_NOTF_CouldntAdd";}; -life_safeObj SVAR ["safe",_safeInfo - _num,TRUE]; -[life_safeObj] call life_fnc_safeInventory; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf b/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf deleted file mode 100644 index 272aeea7..00000000 --- a/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf +++ /dev/null @@ -1,38 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_sellGarage.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Sells a vehicle from the garage. -*/ -private["_vehicle","_vehicleLife","_vid","_pid","_unit","_sellPrice"]; -disableSerialization; -if(EQUAL(lbCurSel 2802,-1)) exitWith {hint localize "STR_Global_NoSelection"}; -_vehicle = lbData[2802,(lbCurSel 2802)]; -_vehicle = (call compile format["%1",_vehicle]) select 0; -_vehicleLife = _vehicle; -_vid = lbValue[2802,(lbCurSel 2802)]; -_pid = steamid; -_unit = player; - -if(isNil "_vehicle") exitWith {hint localize "STR_Garage_Selection_Error"}; -if((time - life_action_delay) < 1.5) exitWith {hint localize "STR_NOTF_ActionDelay";}; -if(!isClass (missionConfigFile >> CONFIG_LIFE_VEHICLES >> _vehicleLife)) then { - _vehicleLife = "Default"; //Use Default class if it doesn't exist - diag_log format["%1: LifeCfgVehicles class doesn't exist",_vehicle]; -}; - -_sellPrice = switch(playerSide) do { - case civilian: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_vehicleLife,"garageSell"),0)}; - case west: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_vehicleLife,"garageSell"),1)}; - case independent: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_vehicleLife,"garageSell"),2)}; - case east: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_vehicleLife,"garageSell"),3)}; -}; - -if(!(EQUAL(typeName _sellPrice,typeName 0)) OR _sellPrice < 1) then {_sellPrice = 1000}; -[_vid,_pid,_sellPrice,player,life_garage_type] remoteExecCall ["TON_fnc_vehicleDelete",RSERV]; -hint format[localize "STR_Garage_SoldCar",[_sellPrice] call life_fnc_numberText]; -ADD(BANK,_sellPrice); -life_action_delay = time; -closeDialog 0; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/function/fn_setMapPosition.sqf b/Altis_Life.Altis/dialog/function/fn_setMapPosition.sqf deleted file mode 100644 index 7333e621..00000000 --- a/Altis_Life.Altis/dialog/function/fn_setMapPosition.sqf +++ /dev/null @@ -1,18 +0,0 @@ -/* - File: fn_setMapPosition.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Sets the given control / maps focus position -*/ -disableSerialization; -private["_control","_time","_zoom","_position"]; -_control = [_this,0,controlNull,[controlNull]] call BIS_fnc_param; -_time = [_this,1,1,[0]] call BIS_fnc_param; -_zoom = [_this,2,0.1,[0]] call BIS_fnc_param; -_position = [_this,3,[],[[]]] call BIS_fnc_param; - -if(isNull _control OR count _position == 0) exitWith {}; - -_control ctrlMapAnimAdd[_time,_zoom,_position]; -ctrlMapAnimCommit _control; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/function/fn_spawnConfirm.sqf b/Altis_Life.Altis/dialog/function/fn_spawnConfirm.sqf deleted file mode 100644 index 6ca97633..00000000 --- a/Altis_Life.Altis/dialog/function/fn_spawnConfirm.sqf +++ /dev/null @@ -1,61 +0,0 @@ -/* - File: fn_spawnConfirm.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Spawns the player where he selected. -*/ -private["_spCfg","_sp","_spawnPos"]; -closeDialog 0; -cutText ["","BLACK IN"]; -if(count life_spawn_point == 0) then { - private["_sp","_spCfg"]; - _spCfg = [playerSide] call life_fnc_spawnPointCfg; - _sp = _spCfg select 0; - - if(playerSide == civilian) then { - if(isNil {(call compile format["%1", _sp select 0])}) then { - player setPos (getMarkerPos (_sp select 0)); - } else { - _spawnPos = (call compile format["%1", _sp select 0]) call BIS_fnc_selectRandom; - _spawnPos = _spawnPos buildingPos 0; - player setPos _spawnPos; - }; - } else { - player setPos (getMarkerPos (_sp select 0)); - }; - titleText[format["%2 %1",_sp select 1,localize "STR_Spawn_Spawned"],"BLACK IN"]; -} else { - if(playerSide == civilian) then { - if(isNil {(call compile format["%1",life_spawn_point select 0])}) then { - if((["house",life_spawn_point select 0] call BIS_fnc_inString)) then { - private["_bPos","_house","_pos"]; - _house = nearestObjects [getMarkerPos (life_spawn_point select 0),["House_F"],10] select 0; - _bPos = [_house] call life_fnc_getBuildingPositions; - - if(count _bPos == 0) exitWith { - player setPos (getMarkerPos (life_spawn_point select 0)); - }; - - {_bPos = _bPos - [(_house buildingPos _x)];} foreach (_house getVariable ["slots",[]]); - _pos = _bPos call BIS_fnc_selectRandom; - player setPosATL _pos; - } else { - player setPos (getMarkerPos (life_spawn_point select 0)); - }; - } else { - _spawnPos = (call compile format["%1", life_spawn_point select 0]) call BIS_fnc_selectRandom; - _spawnPos = _spawnPos buildingPos 0; - player setPos _spawnPos; - }; - } else { - player setPos (getMarkerPos (life_spawn_point select 0)); - }; - titleText[format["%2 %1",life_spawn_point select 1,localize "STR_Spawn_Spawned"],"BLACK IN"]; -}; - -if(life_firstSpawn) then { - life_firstSpawn = false; - [] call life_fnc_welcomeNotification; -}; -[] call life_fnc_hudSetup; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/function/fn_spawnMenu.sqf b/Altis_Life.Altis/dialog/function/fn_spawnMenu.sqf deleted file mode 100644 index 8ac747a6..00000000 --- a/Altis_Life.Altis/dialog/function/fn_spawnMenu.sqf +++ /dev/null @@ -1,37 +0,0 @@ -/* - File: fn_spawnMenu.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Initializes the spawn point selection menu. -*/ -private["_spCfg","_sp","_ctrl"]; -disableSerialization; - -if(life_is_arrested) exitWith { - [] call life_fnc_respawned; -}; - -if(life_respawned) then { - [] call life_fnc_respawned; -}; -cutText["","BLACK FADED"]; -0 cutFadeOut 9999999; -if(!(createDialog "life_spawn_selection")) exitWith {[] call life_fnc_spawnMenu;}; -(findDisplay 38500) displaySetEventHandler ["keyDown","_this call life_fnc_displayHandler"]; - -_spCfg = [playerSide] call life_fnc_spawnPointCfg; - -_ctrl = ((findDisplay 38500) displayCtrl 38510); -{ - _ctrl lnbAddRow[(_spCfg select _ForEachIndex) select 1,(_spCfg select _ForEachIndex) select 0,""]; - _ctrl lnbSetPicture[[_ForEachIndex,0],(_spCfg select _ForEachIndex) select 2]; - _ctrl lnbSetData[[_ForEachIndex,0],(_spCfg select _ForEachIndex) select 0]; -} foreach _spCfg; - -_sp = _spCfg select 0; //First option is set by default - -[((findDisplay 38500) displayCtrl 38502),1,0.1,getMarkerPos (_sp select 0)] call life_fnc_setMapPosition; -life_spawn_point = _sp; - -ctrlSetText[38501,format["%2: %1",_sp select 1,localize "STR_Spawn_CSP"]]; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/function/fn_spawnPointCfg.sqf b/Altis_Life.Altis/dialog/function/fn_spawnPointCfg.sqf deleted file mode 100644 index 6c872c21..00000000 --- a/Altis_Life.Altis/dialog/function/fn_spawnPointCfg.sqf +++ /dev/null @@ -1,57 +0,0 @@ -/* - File: fn_spawnPointCfg.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Master configuration for available spawn points depending on the units side. - - Return: - [Spawn Marker,Spawn Name,Image Path] -*/ -private["_side","_return"]; -_side = [_this,0,civilian,[civilian]] call BIS_fnc_param; - -//Spawn Marker, Spawn Name, PathToImage -switch (_side) do -{ - case west: - { - _return = [ - ["cop_spawn_1","Kavala HQ","\a3\ui_f\data\map\MapControl\watertower_ca.paa"], - ["cop_spawn_2","Pyrgos HQ","\a3\ui_f\data\map\MapControl\fuelstation_ca.paa"], - ["cop_spawn_3","Athira HQ","\a3\ui_f\data\map\GroupIcons\badge_rotate_0_gs.paa"], - ["cop_spawn_4","Air HQ","\a3\ui_f\data\map\Markers\NATO\b_air.paa"], - ["cop_spawn_5","HW Patrol","\a3\ui_f\data\map\GroupIcons\badge_rotate_0_gs.paa"] - ]; - }; - - case civilian: - { - _return = [ - ["civ_spawn_1","Kavala","\a3\ui_f\data\map\MapControl\watertower_ca.paa"], - ["civ_spawn_2","Pyrgos","\a3\ui_f\data\map\MapControl\watertower_ca.paa"], - ["civ_spawn_3","Athira","\a3\ui_f\data\map\MapControl\watertower_ca.paa"], - ["civ_spawn_4","Sofia","\a3\ui_f\data\map\MapControl\watertower_ca.paa"] - ]; - - if(count life_houses > 0) then { - { - _pos = call compile format["%1",_x select 0]; - _house = nearestBuilding _pos; - _houseName = getText(configFile >> "CfgVehicles" >> (typeOf _house) >> "displayName"); - - _return pushBack [format["house_%1",_house getVariable "uid"],_houseName,"\a3\ui_f\data\map\MapControl\lighthouse_ca.paa"]; - } foreach life_houses; - }; - }; - - case independent: { - _return = [ - ["medic_spawn_1","Kavala Hospital","\a3\ui_f\data\map\MapControl\hospital_ca.paa"], - ["medic_spawn_2","Athira Regional","\a3\ui_f\data\map\MapControl\hospital_ca.paa"], - ["medic_spawn_3","Pygros Hospital","\a3\ui_f\data\map\MapControl\hospital_ca.paa"] - ]; - }; -}; - -_return; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/function/fn_spawnPointSelected.sqf b/Altis_Life.Altis/dialog/function/fn_spawnPointSelected.sqf deleted file mode 100644 index f6f97fc3..00000000 --- a/Altis_Life.Altis/dialog/function/fn_spawnPointSelected.sqf +++ /dev/null @@ -1,18 +0,0 @@ -/* - File: fn_spawnPointSelected.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Sorts out the spawn point selected and does a map zoom. -*/ -disableSerialization; -private["_control","_selection","_spCfg","_sp"]; -_control = [_this,0,controlNull,[controlNull]] call BIS_fnc_param; -_selection = [_this,1,0,[0]] call BIS_fnc_param; - -_spCfg = [playerSide] call life_fnc_spawnPointCfg; -_sp = _spCfg select _selection; -[((findDisplay 38500) displayCtrl 38502),1,0.1,getMarkerPos (_sp select 0)] call life_fnc_setMapPosition; -life_spawn_point = _sp; - -ctrlSetText[38501,format["%2: %1",_sp select 1,localize "STR_Spawn_CSP"]]; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/function/fn_unimpound.sqf b/Altis_Life.Altis/dialog/function/fn_unimpound.sqf deleted file mode 100644 index 6351c20a..00000000 --- a/Altis_Life.Altis/dialog/function/fn_unimpound.sqf +++ /dev/null @@ -1,47 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_unimpound.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Yeah... Gets the vehicle from the garage. -*/ -private["_vehicle","_vehicleLife","_vid","_pid","_unit","_price"]; -disableSerialization; -if(EQUAL(lbCurSel 2802,-1)) exitWith {hint localize "STR_Global_NoSelection"}; -_vehicle = lbData[2802,(lbCurSel 2802)]; -_vehicle = (call compile format["%1",_vehicle]) select 0; -_vehicleLife = _vehicle; -_vid = lbValue[2802,(lbCurSel 2802)]; -_pid = steamid; -_unit = player; - -if(isNil "_vehicle") exitWith {hint localize "STR_Garage_Selection_Error"}; -if(!isClass (missionConfigFile >> CONFIG_LIFE_VEHICLES >> _vehicleLife)) then { - _vehicleLife = "Default"; //Use Default class if it doesn't exist - diag_log format["%1: LifeCfgVehicles class doesn't exist",_vehicle]; -}; - -_price = switch(playerSide) do { - case civilian: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_vehicleLife,"storageFee"),0)}; - case west: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_vehicleLife,"storageFee"),1)}; - case independent: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_vehicleLife,"storageFee"),2)}; - case east: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_vehicleLife,"storageFee"),3)}; -}; - -if(!(EQUAL(typeName _price,typeName 0)) OR _price < 1) then {_price = 1000}; -if(BANK < _price) exitWith {hint format[(localize "STR_Garage_CashError"),[_price] call life_fnc_numberText];}; - -if(EQUAL(typeName life_garage_sp,typeName [])) then { - [_vid,_pid,SEL(life_garage_sp,0),_unit,_price,SEL(life_garage_sp,1)] remoteExec ["TON_fnc_spawnVehicle",RSERV]; -} else { - if(life_garage_sp in ["medic_spawn_1","medic_spawn_2","medic_spawn_3"]) then { - [_vid,_pid,life_garage_sp,_unit,_price] remoteExec ["TON_fnc_spawnVehicle",RSERV]; - } else { - [_vid,_pid,(getMarkerPos life_garage_sp),_unit,_price,markerDir life_garage_sp] remoteExec ["TON_fnc_spawnVehicle",RSERV]; - }; -}; - -hint localize "STR_Garage_SpawningVeh"; -SUB(BANK,_price); -closeDialog 0; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/function/fn_vehicleGarage.sqf b/Altis_Life.Altis/dialog/function/fn_vehicleGarage.sqf deleted file mode 100644 index 7fb51fcd..00000000 --- a/Altis_Life.Altis/dialog/function/fn_vehicleGarage.sqf +++ /dev/null @@ -1,17 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Vehicle Garage, why did I spawn this in an action its self? -*/ -private["_spawnPos","_dir","_type"]; -_type = [_this,1,"",[""]] call BIS_fnc_param; -_spawnPos = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; - -life_garage_sp = [(_spawnPos modelToWorld [-11.5,0,0]),(getDir _spawnPos)-90]; -life_garage_type = _type; -[getPlayerUID player,playerSide,_type,player] remoteExec ["TON_fnc_getVehicles",RSERV]; -createDialog "Life_impound_menu"; -disableSerialization; -ctrlSetText[2802,(localize "STR_ANOTF_QueryGarage")]; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/function/fn_wireTransfer.sqf b/Altis_Life.Altis/dialog/function/fn_wireTransfer.sqf deleted file mode 100644 index dacd2f00..00000000 --- a/Altis_Life.Altis/dialog/function/fn_wireTransfer.sqf +++ /dev/null @@ -1,15 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - Author: Bryan "Tonic" Boardwine - - Description: - Initiates the wire-transfer -*/ -params [ - ["_value",0,[0]], - ["_from","",[""]] -]; - -if(EQUAL(_value,0) OR EQUAL(_from,"") OR EQUAL(_from,profileName)) exitWith {}; //No -ADD(BANK,_value); -hint format["%1 has wire transferred $%2 to you",_from,[_value] call life_fnc_numberText]; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/gang.hpp b/Altis_Life.Altis/dialog/gang.hpp deleted file mode 100644 index 218c812b..00000000 --- a/Altis_Life.Altis/dialog/gang.hpp +++ /dev/null @@ -1,222 +0,0 @@ -class Life_My_Gang_Diag { - idd = 2620; - name= "life_my_gang_menu"; - movingEnable = false; - enableSimulation = true; - onLoad = ""; - - class controlsBackground { - class Life_RscTitleBackground:Life_RscText { - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - idc = -1; - x = 0.1; - y = 0.2; - w = 0.6; - h = (1 / 25); - }; - - class MainBackground:Life_RscText { - colorBackground[] = {0, 0, 0, 0.7}; - idc = -1; - x = 0.1; - y = 0.2 + (11 / 250); - w = 0.6; - h = 0.6 - (22 / 250); - }; - }; - - class controls { - - - class Title : Life_RscTitle { - colorBackground[] = {0, 0, 0, 0}; - idc = 2629; - text = ""; - x = 0.1; - y = 0.2; - w = 0.6; - h = (1 / 25); - }; - - class GangMemberList : Life_RscListBox - { - idc = 2621; - text = ""; - sizeEx = 0.035; - - x = 0.11; y = 0.26; - w = 0.350; h = 0.370; - }; - - class CloseLoadMenu : Life_RscButtonMenu { - idc = -1; - text = "$STR_Global_Close"; - onButtonClick = "closeDialog 0;[] call life_fnc_p_updateMenu"; - x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.8 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class GangLeave : Life_RscButtonMenu { - idc = -1; - text = "$STR_Gang_Leave"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call life_fnc_gangLeave"; - x = 0.47; - y = 0.26; - w = (9 / 40); - h = (1 / 25); - }; - - class GangLock : Life_RscButtonMenu - { - idc = 2622; - text = "$STR_Gang_UpgradeSlots"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] spawn life_fnc_gangUpgrade"; - x = 0.47; - y = 0.31; - w = (9 / 40); - h = (1 / 25); - }; - - class GangKick : Life_RscButtonMenu - { - idc = 2624; - text = "$STR_Gang_Kick"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call life_fnc_gangKick"; - x = 0.47; - y = 0.36; - w = (9 / 40); - h = (1 / 25); - }; - - class GangLeader : Life_RscButtonMenu - { - idc = 2625; - text = "$STR_Gang_SetLeader"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] spawn life_fnc_gangNewLeader"; - x = 0.47; - y = 0.41; - w = (9 / 40); - h = (1 / 25); - }; - - class InviteMember : GangLeader - { - idc = 2630; - text = "$STR_Gang_Invite_Player"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] spawn life_fnc_gangInvitePlayer"; - y = .51; - }; - - class DisbandGang : InviteMember - { - idc = 2631; - text = "$STR_Gang_Disband_Gang"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] spawn life_fnc_gangDisband"; - y = .46; - }; - - class ColorList : Life_RscCombo - { - idc = 2632; - x = 0.47; y = 0.56; - w = (9 / 40); h = 0.03; - }; - - class GangBank : Title { - idc = 601; - style = 1; - text = ""; - }; - }; -}; - -class Life_Create_Gang_Diag { - idd = 2520; - name= "life_my_gang_menu_create"; - movingEnable = false; - enableSimulation = true; - onLoad = "[] spawn {waitUntil {!isNull (findDisplay 2520)}; ((findDisplay 2520) displayCtrl 2523) ctrlSetText format[localize ""STR_Gang_PriceTxt"",[(getNumber(missionConfigFile >> 'Life_Settings' >> 'gang_price'))] call life_fnc_numberText]};"; - - class controlsBackground { - class Life_RscTitleBackground:Life_RscText { - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - idc = -1; - x = 0.1; - y = 0.2; - w = 0.5; - h = (1 / 25); - }; - - class MainBackground:Life_RscText { - colorBackground[] = {0, 0, 0, 0.7}; - idc = -1; - x = 0.1; - y = 0.2 + (11 / 250); - w = 0.5; - h = 0.3 - (22 / 250); - }; - }; - - class controls { - - class InfoMsg : Life_RscStructuredText - { - idc = 2523; - sizeEx = 0.020; - text = ""; - x = 0.1; - y = 0.25; - w = 0.5; h = .11; - }; - - class Title : Life_RscTitle { - colorBackground[] = {0, 0, 0, 0}; - idc = -1; - text = "$STR_Gang_Title"; - x = 0.1; - y = 0.2; - w = 0.5; - h = (1 / 25); - }; - - class CloseLoadMenu : Life_RscButtonMenu { - idc = -1; - text = "$STR_Global_Close"; - onButtonClick = "closeDialog 0;[] call life_fnc_p_updateMenu;"; - x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.5 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class GangCreateField : Life_RscButtonMenu { - idc = -1; - text = "$STR_Gang_Create"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call life_fnc_createGang"; - x = 0.27; - y = 0.40; - w = (6.25 / 40); - h = (1 / 25); - }; - - class CreateGangText : Life_RscEdit - { - idc = 2522; - text = "$STR_Gang_YGN"; - - x = 0.04 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.35; - w = (13 / 40); - h = (1 / 25); - }; - }; -}; diff --git a/Altis_Life.Altis/dialog/hud_nameTags.h b/Altis_Life.Altis/dialog/hud_nameTags.h deleted file mode 100644 index 4759737f..00000000 --- a/Altis_Life.Altis/dialog/hud_nameTags.h +++ /dev/null @@ -1,138 +0,0 @@ -#define BaseIconID 78000 - -class Life_HUD_nameTags { - idd = -1; - duration = 1e+011; - name = "Life_HUD_nameTags"; - onLoad = "uiNamespace setVariable['Life_HUD_nameTags',_this select 0]"; - objects[] = {}; - - class controls - { - class BaseIcon - { - idc = -1; - type = 13; - style = 0; - colorText[] = {1,1,1,1}; - colorBackground[] = {0,0,0,0}; - font = "PuristaMedium"; - text = ""; - size = 0.04; - shadow = 1.5; - w = 0; h = 0; - x = 0.1; y = 0.1; - }; - - class p1 : BaseIcon {idc = BaseIconID;}; - class p2 : BaseIcon {idc = BaseIconID + 1;}; - class p3 : BaseIcon {idc = BaseIconID + 2;}; - class p4 : BaseIcon {idc = BaseIconID + 3;}; - class p5 : BaseIcon {idc = BaseIconID + 4;}; - class p6 : BaseIcon {idc = BaseIconID + 5;}; - class p7 : BaseIcon {idc = BaseIconID + 6;}; - class p8 : BaseIcon {idc = BaseIconID + 7;}; - class p9 : BaseIcon {idc = BaseIconID + 8;}; - class p10 : BaseIcon {idc = BaseIconID + 9;}; - class p11 : BaseIcon {idc = BaseIconID + 10;}; - class p12 : BaseIcon {idc = BaseIconID + 11;}; - class p13 : BaseIcon {idc = BaseIconID + 12;}; - class p14 : BaseIcon {idc = BaseIconID + 13;}; - class p15 : BaseIcon {idc = BaseIconID + 14;}; - class p16 : BaseIcon {idc = BaseIconID + 15;}; - class p17 : BaseIcon {idc = BaseIconID + 16;}; - class p18 : BaseIcon {idc = BaseIconID + 17;}; - class p19 : BaseIcon {idc = BaseIconID + 18;}; - class p20 : BaseIcon {idc = BaseIconID + 19;}; - class p21 : BaseIcon {idc = BaseIconID + 20;}; - class p22 : BaseIcon {idc = BaseIconID + 21;}; - class p23 : BaseIcon {idc = BaseIconID + 22;}; - class p24 : BaseIcon {idc = BaseIconID + 23;}; - class p25 : BaseIcon {idc = BaseIconID + 24;}; - class p26 : BaseIcon {idc = BaseIconID + 25;}; - class p27 : BaseIcon {idc = BaseIconID + 26;}; - class p28 : BaseIcon {idc = BaseIconID + 27;}; - class p29 : BaseIcon {idc = BaseIconID + 28;}; - class p30 : BaseIcon {idc = BaseIconID + 29;}; - class p31 : BaseIcon {idc = BaseIconID + 30;}; - class p32 : BaseIcon {idc = BaseIconID + 31;}; - class p33 : BaseIcon {idc = BaseIconID + 32;}; - class p34 : BaseIcon {idc = BaseIconID + 33;}; - class p35 : BaseIcon {idc = BaseIconID + 34;}; - class p36 : BaseIcon {idc = BaseIconID + 35;}; - class p37 : BaseIcon {idc = BaseIconID + 36;}; - class p38 : BaseIcon {idc = BaseIconID + 37;}; - class p39 : BaseIcon {idc = BaseIconID + 38;}; - class p40 : BaseIcon {idc = BaseIconID + 39;}; - class p41 : BaseIcon {idc = BaseIconID + 40;}; - class p42 : BaseIcon {idc = BaseIconID + 41;}; - class p43 : BaseIcon {idc = BaseIconID + 42;}; - class p44 : BaseIcon {idc = BaseIconID + 43;}; - class p45 : BaseIcon {idc = BaseIconID + 44;}; - class p46 : BaseIcon {idc = BaseIconID + 45;}; - class p47 : BaseIcon {idc = BaseIconID + 46;}; - class p48 : BaseIcon {idc = BaseIconID + 47;}; - class p49 : BaseIcon {idc = BaseIconID + 48;}; - class p50 : BaseIcon {idc = BaseIconID + 49;}; - class p51 : BaseIcon {idc = BaseIconID + 50;}; - class p52 : BaseIcon {idc = BaseIconID + 51;}; - class p53 : BaseIcon {idc = BaseIconID + 52;}; - class p54 : BaseIcon {idc = BaseIconID + 53;}; - class p55 : BaseIcon {idc = BaseIconID + 54;}; - class p56 : BaseIcon {idc = BaseIconID + 55;}; - class p57 : BaseIcon {idc = BaseIconID + 56;}; - class p58 : BaseIcon {idc = BaseIconID + 57;}; - class p59 : BaseIcon {idc = BaseIconID + 58;}; - class p60 : BaseIcon {idc = BaseIconID + 59;}; - class p61 : BaseIcon {idc = BaseIconID + 60;}; - class p62 : BaseIcon {idc = BaseIconID + 61;}; - class p63 : BaseIcon {idc = BaseIconID + 62;}; - class p64 : BaseIcon {idc = BaseIconID + 63;}; - class p65 : BaseIcon {idc = BaseIconID + 64;}; - class p66 : BaseIcon {idc = BaseIconID + 65;}; - class p67 : BaseIcon {idc = BaseIconID + 66;}; - class p68 : BaseIcon {idc = BaseIconID + 67;}; - class p69 : BaseIcon {idc = BaseIconID + 68;}; - class p70 : BaseIcon {idc = BaseIconID + 69;}; - class p71 : BaseIcon {idc = BaseIconID + 70;}; - class p72 : BaseIcon {idc = BaseIconID + 71;}; - class p73 : BaseIcon {idc = BaseIconID + 72;}; - class p74 : BaseIcon {idc = BaseIconID + 73;}; - class p75 : BaseIcon {idc = BaseIconID + 74;}; - class p76 : BaseIcon {idc = BaseIconID + 75;}; - class p77 : BaseIcon {idc = BaseIconID + 76;}; - class p78 : BaseIcon {idc = BaseIconID + 77;}; - class p79 : BaseIcon {idc = BaseIconID + 78;}; - class p80 : BaseIcon {idc = BaseIconID + 79;}; - class p81 : BaseIcon {idc = BaseIconID + 80;}; - class p82 : BaseIcon {idc = BaseIconID + 81;}; - class p83 : BaseIcon {idc = BaseIconID + 82;}; - class p84 : BaseIcon {idc = BaseIconID + 83;}; - class p85 : BaseIcon {idc = BaseIconID + 84;}; - class p86 : BaseIcon {idc = BaseIconID + 85;}; - class p87 : BaseIcon {idc = BaseIconID + 86;}; - class p88 : BaseIcon {idc = BaseIconID + 87;}; - class p89 : BaseIcon {idc = BaseIconID + 88;}; - class p90 : BaseIcon {idc = BaseIconID + 89;}; - class p91 : BaseIcon {idc = BaseIconID + 90;}; - class p92 : BaseIcon {idc = BaseIconID + 91;}; - class p93 : BaseIcon {idc = BaseIconID + 92;}; - class p94 : BaseIcon {idc = BaseIconID + 93;}; - class p95 : BaseIcon {idc = BaseIconID + 94;}; - class p96 : BaseIcon {idc = BaseIconID + 95;}; - class p97 : BaseIcon {idc = BaseIconID + 96;}; - class p98 : BaseIcon {idc = BaseIconID + 97;}; - class p99 : BaseIcon {idc = BaseIconID + 98;}; - class p100 : BaseIcon {idc = BaseIconID + 99;}; - class p101 : BaseIcon {idc = BaseIconID + 100;}; - class p102 : BaseIcon {idc = BaseIconID + 101;}; - class p103 : BaseIcon {idc = BaseIconID + 102;}; - class p104 : BaseIcon {idc = BaseIconID + 103;}; - class p105 : BaseIcon {idc = BaseIconID + 104;}; - class p106 : BaseIcon {idc = BaseIconID + 105;}; - class p107 : BaseIcon {idc = BaseIconID + 106;}; - class p108 : BaseIcon {idc = BaseIconID + 107;}; - class p109 : BaseIcon {idc = BaseIconID + 108;}; - class p110 : BaseIcon {idc = BaseIconID + 109;}; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/impound.hpp b/Altis_Life.Altis/dialog/impound.hpp deleted file mode 100644 index d5b49e69..00000000 --- a/Altis_Life.Altis/dialog/impound.hpp +++ /dev/null @@ -1,140 +0,0 @@ -class Life_impound_menu -{ - idd = 2800; - name="life_vehicle_shop"; - movingEnabled = 0; - enableSimulation = 1; - onLoad = "ctrlShow [2330,false];"; - - class controlsBackground - { - class Life_RscTitleBackground : Life_RscText - { - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - idc = -1; - x = 0.1; - y = 0.2; - w = 0.8; - h = (1 / 25); - }; - - class MainBackground : Life_RscText - { - colorBackground[] = {0,0,0,0.7}; - idc = -1; - x = 0.1; - y = 0.2 + (11 / 250); - w = 0.8; - h = 0.7 - (22 / 250); - }; - - class Title : Life_RscTitle - { - idc = 2801; - text = "$STR_GUI_Garage"; - x = 0.1; - y = 0.2; - w = 0.8; - h = (1 / 25); - }; - - class VehicleTitleBox : Life_RscText - { - idc = -1; - text = "$STR_GUI_YourVeh"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - x = 0.11; y = 0.26; - w = 0.3; - h = (1 / 25); - }; - - class VehicleInfoHeader : Life_RscText - { - idc = 2830; - text = "$STR_GUI_VehInfo"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - x = 0.42; y = 0.26; - w = 0.46; - h = (1 / 25); - }; - - class CloseBtn : Life_RscButtonMenu - { - idc = -1; - text = "$STR_Global_Close"; - onButtonClick = "closeDialog 0;"; - x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.9 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class RentCar : Life_RscButtonMenu - { - idc = -1; - text = "$STR_Global_Retrieve"; - onButtonClick = "[] call life_fnc_unimpound;"; - x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.9 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class BuyCar : life_RscButtonMenu - { - idc = -1; - text = "$STR_Global_Sell"; - onButtonClick = "[] call life_fnc_sellGarage; closeDialog 0;"; - x = 0.26 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.9 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - }; - - class controls - { - class VehicleList : Life_RscListBox - { - idc = 2802; - text = ""; - sizeEx = 0.04; - colorBackground[] = {0.1,0.1,0.1,0.9}; - onLBSelChanged = "_this call life_fnc_garageLBChange;"; - - //Position & height - x = 0.11; y = 0.302; - w = 0.303; h = 0.49; - }; - - class vehicleInfomationList : Life_RscStructuredText - { - idc = 2803; - text = ""; - sizeEx = 0.035; - - x = 0.41; y = 0.3; - w = 0.5; h = 0.5; - }; - - class MainBackgroundHider : Life_RscText - { - colorBackground[] = {0,0,0,1}; - idc = 2810; - x = 0.1; - y = 0.2 + (11 / 250); - w = 0.8; - h = 0.7 - (22 / 250); - }; - - class MainHideText : Life_RscText - { - idc = 2811; - text = "$STR_ANOTF_QueryGarage"; - sizeEx = 0.06; - x = 0.24; y = 0.5; - w = 0.6; - h = (1 / 15); - }; - }; -}; diff --git a/Altis_Life.Altis/dialog/key_chain.hpp b/Altis_Life.Altis/dialog/key_chain.hpp deleted file mode 100644 index 927c3066..00000000 --- a/Altis_Life.Altis/dialog/key_chain.hpp +++ /dev/null @@ -1,91 +0,0 @@ -class Life_key_management { - idd = 2700; - name= "life_key_chain"; - movingEnable = false; - enableSimulation = true; - onLoad = "[] spawn life_fnc_keyMenu;"; - - class controlsBackground { - class Life_RscTitleBackground:Life_RscText { - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - idc = -1; - x = 0.1; - y = 0.2; - w = 0.6; - h = (1 / 25); - }; - - class MainBackground:Life_RscText { - colorBackground[] = {0, 0, 0, 0.7}; - idc = -1; - x = 0.1; - y = 0.2 + (11 / 250); - w = 0.6; - h = 0.6 - (22 / 250); - }; - }; - - class controls { - - - class Title : Life_RscTitle { - colorBackground[] = {0, 0, 0, 0}; - idc = -1; - text = "$STR_Keys_Title"; - x = 0.1; - y = 0.2; - w = 0.6; - h = (1 / 25); - }; - - class KeyChainList : Life_RscListBox - { - idc = 2701; - text = ""; - sizeEx = 0.035; - - x = 0.12; y = 0.26; - w = 0.56; h = 0.370; - }; - - class CloseButtonKey : Life_RscButtonMenu { - idc = -1; - text = "$STR_Global_Close"; - onButtonClick = "closeDialog 0;"; - x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.8 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class NearPlayers : Life_RscCombo { - - idc = 2702; - - x = 0.26; y = 0.645; - w = 0.275; h = 0.03; - - }; - - class DropKey : life_RscButtonMenu { - idc = -1; - text = "$STR_Keys_DropKey"; - onButtonClick = "[] call life_fnc_keyDrop"; - x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.8 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class GiveKey : Life_RscButtonMenu { - idc = 2703; - text = "$STR_Keys_GiveKey"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call life_fnc_keyGive"; - x = 0.32; - y = 0.69; - w = (6.25 / 40); - h = (1 / 25); - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/pInteraction.h b/Altis_Life.Altis/dialog/pInteraction.h deleted file mode 100644 index b9f6d301..00000000 --- a/Altis_Life.Altis/dialog/pInteraction.h +++ /dev/null @@ -1,271 +0,0 @@ -#define BGX 0.35 -#define BGY 0.2 -#define BGW 0.3 - -class pInteraction_Menu -{ - idd = 37400; - movingEnabled = false; - enableSimulation = true; - - class controlsBackground - { - class RscTitleBackground:life_RscText - { - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - idc = -1; - x = BGX; - y = BGY; - w = BGW; - h = (1 / 25); - }; - - class MainBackground : life_RscText - { - idc = -1; - colorBackground[] = {0,0,0,0.7}; - x = BGX; - y = BGY + (11 / 250); - w = BGW; - h = 0.6 - (22 / 250); - }; - - class Title : life_RscTitle - { - colorBackground[] = {0,0,0,0}; - idc = 37401; - text = "$STR_pInAct_Title"; - x = BGX; - y = BGY; - w = BGW; - h = (1 / 25); - }; - }; - - class controls - { - class ButtonClose : life_RscButtonMenu - { - idc = -1; - //shortcuts[] = {0x00050000 + 2}; - text = "$STR_Global_Close"; - onButtonClick = "closeDialog 0;"; - x = BGX; - y = 0.8 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class ButtonOne : life_RscButtonMenu - { - idc = 37450; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - text = ""; - sizeEx = 0.025; - x = BGX + 0.03; - y = BGY + 0.07; - w = 0.24; - h = 0.038; - }; - - class ButtonTwo : life_RscButtonMenu - { - idc = 37451; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - text = ""; - sizeEx = 0.025; - x = BGX + 0.03; - y = BGY + 0.12; - w = 0.24; - h = 0.038; - }; - - class ButtonThree : life_RscButtonMenu - { - idc = 37452; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - text = ""; - sizeEx = 0.025; - x = BGX + 0.03; - y = BGY + 0.17; - w = 0.24; - h = 0.038; - }; - - class ButtonFour : life_RscButtonMenu - { - idc = 37453; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - text = ""; - sizeEx = 0.025; - x = BGX + 0.03; - y = BGY + 0.22; - w = 0.24; - h = 0.038; - }; - - class ButtonFive : life_RscButtonMenu - { - idc = 37454; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - text = ""; - sizeEx = 0.025; - x = BGX + 0.03; - y = BGY + 0.27; - w = 0.24; - h = 0.038; - }; - - class ButtonSix : life_RscButtonMenu - { - idc = 37455; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - text = ""; - sizeEx = 0.025; - x = BGX + 0.03; - y = BGY + 0.32; - w = 0.24; - h = 0.038; - }; - - class ButtonSeven : life_RscButtonMenu - { - idc = 37456; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - text = ""; - sizeEx = 0.025; - x = BGX + 0.03; - y = BGY + 0.37; - w = 0.24; - h = 0.038; - }; - }; -}; - -class vInteraction_Menu -{ - idd = 37400; - movingEnabled = false; - enableSimulation = true; - - class controlsBackground - { - class RscTitleBackground:life_RscText - { - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - idc = -1; - x = BGX; - y = BGY; - w = BGW; - h = (1 / 25); - }; - - class MainBackground : life_RscText - { - idc = -1; - colorBackground[] = {0,0,0,0.7}; - x = BGX; - y = BGY + (11 / 250); - w = BGW; - h = 0.45 - (22 / 250); - }; - - class Title : life_RscTitle - { - colorBackground[] = {0,0,0,0}; - idc = 37401; - text = "$STR_vInAct_Title"; - x = BGX; - y = BGY; - w = BGW; - h = (1 / 25); - }; - }; - - class controls - { - class ButtonClose : life_RscButtonMenu - { - idc = -1; - //shortcuts[] = {0x00050000 + 2}; - text = "$STR_Global_Close"; - onButtonClick = "closeDialog 0;"; - x = BGX; - y = 0.65 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class ButtonOne : life_RscButtonMenu - { - idc = 37450; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - text = ""; - sizeEx = 0.025; - x = BGX + 0.03; - y = BGY + 0.07; - w = 0.24; - h = 0.038; - }; - - class ButtonTwo : life_RscButtonMenu - { - idc = 37451; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - text = ""; - sizeEx = 0.025; - x = BGX + 0.03; - y = BGY + 0.12; - w = 0.24; - h = 0.038; - }; - - class ButtonThree : life_RscButtonMenu - { - idc = 37452; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - text = ""; - sizeEx = 0.025; - x = BGX + 0.03; - y = BGY + 0.17; - w = 0.24; - h = 0.038; - }; - - class ButtonFour : life_RscButtonMenu - { - idc = 37453; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - text = ""; - sizeEx = 0.025; - x = BGX + 0.03; - y = BGY + 0.22; - w = 0.24; - h = 0.038; - }; - - class ButtonFive : life_RscButtonMenu - { - idc = 37454; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - text = ""; - sizeEx = 0.025; - x = BGX + 0.03; - y = BGY + 0.27; - w = 0.24; - h = 0.038; - }; - - class ButtonSix : life_RscButtonMenu - { - idc = 37455; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - text = ""; - sizeEx = 0.025; - x = BGX + 0.03; - y = BGY + 0.32; - w = 0.24; - h = 0.038; - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/player_inv.hpp b/Altis_Life.Altis/dialog/player_inv.hpp deleted file mode 100644 index 08d7e007..00000000 --- a/Altis_Life.Altis/dialog/player_inv.hpp +++ /dev/null @@ -1,313 +0,0 @@ -#include "player_sys.sqf" - -class playerSettings { - - idd = playersys_DIALOG; - movingEnable = true; - enableSimulation = true; - - class controlsBackground { - - class life_RscTitleBackground:life_RscText { - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - idc = -1; - x = 0.1; - y = 0.2; - w = 0.8; - h = (1 / 25); - }; - - class MainBackground:life_RscText { - colorBackground[] = {0, 0, 0, 0.7}; - idc = -1; - x = 0.1; - y = 0.2 + (11 / 250); - w = 0.8; - h = 0.6 - (22 / 250); - }; - - class Title : life_RscTitle { - colorBackground[] = {0, 0, 0, 0}; - idc = -1; - text = "$STR_PM_Title"; - x = 0.1; - y = 0.2; - w = 0.8; - h = (1 / 25); - }; - - class moneyStatusInfo : Life_RscStructuredText - { - idc = 2015; - sizeEx = 0.020; - text = ""; - x = 0.105; - y = 0.30; - w = 0.3; h = 0.6; - }; - - class PlayersName : Title { - idc = carry_weight; - style = 1; - text = ""; - }; - }; - - class controls { - - class itemHeader : Life_RscText - { - idc = -1; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - text = "$STR_PM_cItems"; - sizeEx = 0.04; - - x = 0.62; y = 0.26; - w = 0.275; h = 0.04; - }; - - class licenseHeader : Life_RscText - { - idc = -1; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - text = "$STR_PM_Licenses"; - sizeEx = 0.04; - - x = 0.336; y = 0.26; - w = 0.275; h = 0.04; - }; - - class moneySHeader : Life_RscText - { - idc = -1; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - text = "$STR_PM_MoneyStats"; - sizeEx = 0.04; - - x = 0.11; y = 0.26; - w = 0.219; h = 0.04; - }; - - class itemList : life_RscListBox - { - idc = item_list; - sizeEx = 0.030; - - x = 0.62; y = 0.30; - w = 0.275; h = 0.3; - }; - - class moneyEdit : Life_RscEdit - { - idc = 2018; - - text = "1"; - sizeEx = 0.030; - x = 0.12; y = 0.42; - w = 0.18; h = 0.03; - }; - - class NearPlayers : Life_RscCombo - { - idc = 2022; - - x = 0.12; y = 0.46; - w = 0.18; h = 0.03; - }; - - class moneyDrop : Life_RscButtonMenu - { - idc = 2001; - text = "$STR_Global_Give"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call life_fnc_giveMoney"; - sizeEx = 0.025; - x = 0.135; y = 0.50; - w = 0.13; h = 0.036; - }; - - class itemEdit : Life_RscEdit { - - idc = item_edit; - - text = "1"; - sizeEx = 0.030; - x = 0.62; y = 0.61; - w = 0.275; h = 0.03; - - }; - class iNearPlayers : Life_RscCombo - { - idc = 2023; - - x = 0.62; y = 0.65; - w = 0.275; h = 0.03; - }; - /* - Disabled till it can be redone - class moneyInput: life_RscCombo { - - idc = money_value; - - x = 0.02; y = 0.402; - w = .1; h = .030; - }; - */ - - class DropButton : life_RscButtonMenu { - - idc = 2002; - text = "$STR_Global_Give"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call life_fnc_giveItem;"; - - x = 0.765; - y = 0.70; - w = (5.25 / 40); - h = (1 / 25); - - }; - - class UseButton : life_RscButtonMenu { - - text = "$STR_Global_Use"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call life_fnc_useItem;"; - - x = 0.62; - y = 0.70; - w = (5.25 / 40); - h = (1 / 25); - - }; - - class RemoveButton : life_RscButtonMenu { - - text = "$STR_Global_Remove"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call life_fnc_removeItem;"; - - x = 0.475; - y = 0.70; - w = (5.25 / 40); - h = (1 / 25); - - }; - /* - Disabled till it can be redone - class DropcButton : life_RscButtonMenu { - - text = "Drop Money"; - onButtonClick = "[] execVM 'player_system\money_fnc.sqf'"; - - x = 0.13; y = 0.4; - w = 0.135; h = 0.05; - - }; - */ - - class ButtonClose : life_RscButtonMenu { - idc = -1; - //shortcuts[] = {0x00050000 + 2}; - text = "$STR_Global_Close"; - onButtonClick = "closeDialog 0;"; - x = 0.1; - y = 0.8 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class ButtonSettings : life_RscButtonMenu { - idc = -1; - text = "$STR_Global_Settings"; - onButtonClick = "[] call life_fnc_settingsMenu;"; - x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.8 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class ButtonMyGang : Life_RscButtonMenu { - idc = 2011; - text = "$STR_PM_MyGang"; - onButtonClick = "if(isNil ""life_action_gangInUse"") then {if(isNil {(group player) getVariable ""gang_owner""}) then {createDialog ""Life_Create_Gang_Diag"";} else {[] spawn life_fnc_gangMenu;};};"; - x = 0.1 + (6.25 / 19.8) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.8 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class Licenses_Menu : Life_RscControlsGroup - { - idc = -1; - w = 0.28; - h = 0.38; - x = 0.34; - y = 0.30; - - class Controls - { - class Life_Licenses : Life_RscStructuredText - { - idc = 2014; - sizeEx = 0.020; - text = ""; - x = 0; - y = 0; - w = 0.27; h = 0.65; - }; - }; - }; - - class ButtonGangList : Life_RscButtonMenu { - idc = 2012; - text = "$STR_PM_WantedList"; - onButtonClick = "[] call life_fnc_wantedMenu"; - x = 0.1 + (6.25 / 19.8) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.8 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class ButtonKeys : Life_RscButtonMenu { - idc = 2013; - text = "$STR_PM_KeyChain"; - onButtonClick = "createDialog ""Life_key_management"";"; - x = 0.26 + (6.25 / 19.8) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.8 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class ButtonCell : Life_RscButtonMenu { - idc = 2014; - text = "$STR_PM_CellPhone"; - onButtonClick = "createDialog ""Life_cell_phone"";"; - x = 0.42 + (6.25 / 19.8) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.8 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class ButtonAdminMenu : Life_RscButtonMenu { - idc = 2021; - text = "$STR_PM_AdminMenu"; - onButtonClick = "createDialog ""life_admin_menu"";"; - x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.805; - w = (6.25 / 40); - h = (1 / 25); - }; - - class ButtonSyncData : life_RscButtonMenu { - idc = -1; - //shortcuts[] = {0x00050000 + 2}; - text = "$STR_PM_SyncData"; - onButtonClick = "[] call SOCK_fnc_syncData;"; - x = 0.1; - y = 0.805; - w = (6.25 / 40); - h = (1 / 25); - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/progress.hpp b/Altis_Life.Altis/dialog/progress.hpp deleted file mode 100644 index dc731a08..00000000 --- a/Altis_Life.Altis/dialog/progress.hpp +++ /dev/null @@ -1,75 +0,0 @@ -class life_progress -{ - name = "life_progress"; - idd = 38200; - fadein=0; - duration = 99999999999; - fadeout=0; - movingEnable = 0; - onLoad="uiNamespace setVariable ['life_progress',_this select 0]"; - objects[]={}; - - class controlsBackground - { - class background : Life_RscText - { - idc = -1; - colorBackground[] = {0,0,0,0.7}; - x = 0.38140 * safezoneW + safezoneX; - y = 0.06 * safezoneH + safezoneY; - w = 0.65; h = 0.05; - }; - class ProgressBar : Life_RscProgress - { - idc = 38201; - x = 0.38140 * safezoneW + safezoneX; - y = 0.06 * safezoneH + safezoneY; - w = 0.65; h = 0.05; - }; - - class ProgressText : Life_RscText - { - idc = 38202; - text = "Servicing Chopper (50%)..."; - x = 0.386 * safezoneW + safezoneX; - y = 0.0635 * safezoneH + safezoneY; - w = 0.65; h = (1 / 25); - }; - }; -}; - -class life_timer -{ - name = "life_timer"; - idd = 38300; - fadeIn = 1; - duration = 99999999999; - fadeout = 1; - movingEnable = 0; - onLoad = "uiNamespace setVariable['life_timer',_this select 0]"; - objects[] = {}; - - class controlsBackground - { - class TimerIcon : life_RscPicture - { - idc = -1; - text = "\a3\ui_f\data\IGUI\RscTitles\MPProgress\timer_ca.paa"; - x = 0.00499997 * safezoneW + safezoneX; - y = 0.291 * safezoneH + safezoneY; - w = 0.04; - h = 0.045; - }; - - class TimerText : life_RscText - { - colorBackground[] = {0,0,0,0}; - idc = 38301; - text = ""; - x = 0.0204688 * safezoneW + safezoneX; - y = 0.2778 * safezoneH + safezoneY; - w = 0.09125 * safezoneW; - h = 0.055 * safezoneH; - }; - }; -}; diff --git a/Altis_Life.Altis/dialog/settings.h b/Altis_Life.Altis/dialog/settings.h deleted file mode 100644 index 38427616..00000000 --- a/Altis_Life.Altis/dialog/settings.h +++ /dev/null @@ -1,212 +0,0 @@ -class SettingsMenu -{ - idd = 2900; - name = "SettingsMenu"; - movingEnabled = 1; - enableSimulation = 1; - - class controlsBackground - { - class RscTitleBackground : life_RscText - { - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - idc = -1; - x = 0.3; - y = 0.2; - w = 0.5; - h = (1 / 25); - }; - - class RscMainBackground : life_RscText - { - colorBackground[] = {0,0,0,0.7}; - idc = -1; - x = 0.3; - y = 0.2 + (11 / 250); - w = 0.5; - h = 0.43 - (22 / 250); - }; - - class PlayerTagsHeader : Life_RscText - { - idc = -1; - text = "$STR_SM_PlayerTags"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - - x = 0.30; - y = 0.43; - w = 0.35; - h = (1 / 25); - }; - - class SideChatHeader : PlayerTagsHeader - { - idc = -1; - text = "$STR_SM_SC"; - shadow = 0; - - y = 0.48; - }; - - class RevealNearestHeader : PlayerTagsHeader - { - idc = -1; - text = "Reveal Nearest Objects"; - - y = 0.53; - }; - - class Title : life_RscTitle - { - idc = -1; - colorBackground[] = {0,0,0,0}; - text = "$STR_SM_Title"; - x = 0.3; - y = 0.2; - w = 0.5; - h = (1 / 25); - }; - }; - - class controls - { - class VDonFoot : life_RscText - { - idc = -1; - text = "$STR_SM_onFoot"; - - x = 0.32; y = 0.258; - w = 0.275; h = 0.04; - }; - - class VDinCar : life_RscText - { - idc = -1; - text = "$STR_SM_inCar"; - - x = 0.32; y = 0.305; - w = 0.275; h = 0.04; - }; - - class VDinAir : life_RscText - { - idc = -1; - text = "$STR_SM_inAir"; - - x = 0.32; y = 0.355; - w = 0.275; h = 0.04; - }; - - class VD_onfoot_slider : life_RscXSliderH - { - idc = 2901; - text = ""; - onSliderPosChanged = "[0,_this select 1] call life_fnc_s_onSliderChange;"; - tooltip = "$STR_SM_ToolTip1"; - x = 0.42; - y = 0.30 - (1 / 25); - - w = "9 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; - h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - }; - - class VD_onfoot_value : Life_RscEdit - { - idc = 2902; - text = ""; - onChar = "[_this select 0, _this select 1,'ground',false] call life_fnc_s_onChar;"; - onKeyUp = "[_this select 0, _this select 1,'ground',true] call life_fnc_s_onChar;"; - - x = .70; y = .258; - w = .08; h = .04; - }; - - class VD_car_slider : life_RscXSliderH - { - idc = 2911; - text = ""; - onSliderPosChanged = "[1,_this select 1] call life_fnc_s_onSliderChange;"; - tooltip = "$STR_SM_ToolTip2"; - x = 0.42; - y = 0.35 - (1 / 25); - - w = "9 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; - h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - }; - - class VD_car_value : Life_RscEdit - { - idc = 2912; - text = ""; - onChar = "[_this select 0, _this select 1,'vehicle',false] call life_fnc_s_onChar;"; - onKeyUp = "[_this select 0, _this select 1,'vehicle',true] call life_fnc_s_onChar;"; - - x = .70; y = .31; - w = .08; h = .04; - }; - - class VD_air_slider : life_RscXSliderH - { - idc = 2921; - text = ""; - onSliderPosChanged = "[2,_this select 1] call life_fnc_s_onSliderChange;"; - tooltip = "$STR_SM_ToolTip3"; - x = 0.42; - y = 0.40 - (1 / 25); - - w = "9 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; - h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - }; - - class VD_air_value : Life_RscEdit - { - idc = 2922; - text = ""; - onChar = "[_this select 0, _this select 1,'air',false] call life_fnc_s_onChar;"; - onKeyUp = "[_this select 0, _this select 1,'air',true] call life_fnc_s_onChar;"; - - x = 0.70; y = 0.36; - w = .08; h = .04; - }; - - class PlayerTagsONOFF : Life_Checkbox - { - //text = "ON"; - tooltip = "$STR_GUI_PlayTags"; - idc = 2970; - sizeEx = 0.04; - onCheckedChanged = "['tags',_this select 1] call life_fnc_s_onCheckedChange;"; - x = 0.65; - y = 0.43; - - }; - - class SideChatONOFF : PlayerTagsONOFF - { - idc = 2971; - tooltip = ""; - onCheckedChanged = "['sidechat',_this select 1] call life_fnc_s_onCheckedChange;"; - - y = 0.48; - }; - - class RevealONOFF : PlayerTagsONOFF - { - tooltip = "$STR_GUI_PlayerReveal"; - onCheckedChanged = "['objects',_this select 1] call life_fnc_s_onCheckedChange;"; - idc = 2972; - y = 0.53; - }; - - class ButtonClose : life_RscButtonMenu { - idc = -1; - //shortcuts[] = {0x00050000 + 2}; - text = "$STR_Global_Close"; - onButtonClick = "closeDialog 0;"; - x = 0.48; - y = 0.63 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - }; -}; diff --git a/Altis_Life.Altis/dialog/shop_items.hpp b/Altis_Life.Altis/dialog/shop_items.hpp deleted file mode 100644 index 4e399c1e..00000000 --- a/Altis_Life.Altis/dialog/shop_items.hpp +++ /dev/null @@ -1,145 +0,0 @@ -class shops_menu { - idd = 2400; - name= "shops_menu"; - movingEnable = false; - enableSimulation = true; - //onLoad = "['guns'] execVM 'gear\switch.sqf'"; - - class controlsBackground { - class Life_RscTitleBackground:Life_RscText { - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - idc = -1; - x = 0.1; - y = 0.2; - w = 0.8; - h = (1 / 25); - }; - - class MainBackground:Life_RscText { - colorBackground[] = {0, 0, 0, 0.7}; - idc = -1; - x = 0.1; - y = 0.2 + (11 / 250); - w = 0.8; - h = 0.6 - (22 / 250); - }; - - class vasText : Life_RscText - { - idc = -1; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - text = "$STR_VS_SI"; - sizeEx = 0.04; - x = 0.12; y = 0.27; - w = 0.275; h = 0.04; - }; - - class vasgText : Life_RscText - { - idc = -1; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - text = "$STR_VS_PI"; - sizeEx = 0.04; - - x = 0.60; y = 0.27; - w = 0.275; h = 0.04; - }; - }; - - class controls { - - class itemList : Life_RscListBox - { - idc = 2401; - text = ""; - sizeEx = 0.030; - //onLBSelChanged = "[] call fnc_selection"; - - x = 0.12; y = 0.31; - w = 0.275; h = 0.340; - }; - - class pItemlist : Life_RscListBox - { - idc = 2402; - text = ""; - sizeEx = 0.030; - //onLBSelChanged = "[2502] execVM 'gear\selection.sqf'"; - - x = 0.60; y = 0.31; - w = 0.275; h = 0.340; - }; - - class Title : Life_RscTitle { - colorBackground[] = {0, 0, 0, 0}; - idc = 2403; - text = ""; - x = 0.1; - y = 0.2; - w = 0.8; - h = (1 / 25); - }; - - class PlayersName : Title { - idc = 601; - style = 1; - text = ""; - }; - - class buyEdit : Life_RscEdit - { - idc = 2404; - - text = "1"; - sizeEx = 0.030; - x = 0.12; y = 0.66; - w = 0.27; h = 0.03; - }; - - class ButtonAddG : Life_RscButtonMenu - { - idc = -1; - text = "$STR_VS_BuyItem"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] spawn life_fnc_virt_buy;"; - - x = 0.16; - y = 0.70; - w = (6.25 / 40); - h = (1 / 25); - }; - - class sellEdit : Life_RscEdit - { - idc = 2405; - - text = "1"; - sizeEx = 0.030; - x = 0.60; y = 0.66; - w = 0.27; h = 0.03; - }; - class ButtonRemoveG : Life_RscButtonMenu - { - idc = -1; - text = "$STR_VS_SellItem"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call life_fnc_virt_sell"; - - x = 0.67; - y = 0.70; - w = (6.25 / 40); - h = (1 / 25); - }; - - class ButtonClose : Life_RscButtonMenu { - idc = -1; - //shortcuts[] = {0x00050000 + 2}; - text = "$STR_Global_Close"; - onButtonClick = "closeDialog 0;"; - x = 0.1; - y = 0.8 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/shops.hpp b/Altis_Life.Altis/dialog/shops.hpp deleted file mode 100644 index 61bcca6b..00000000 --- a/Altis_Life.Altis/dialog/shops.hpp +++ /dev/null @@ -1,85 +0,0 @@ -class life_weapon_shop -{ - idd = 38400; - movingEnabled = false; - enableSimulation = true; - - class controlsBackground - { - class RscTitleBackground : Life_RscText - { - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - idc = -1; - x = 0.1; y = 0.2; - w = 0.32; h = (1 / 25); - }; - - class Mainbackground : Life_RscText - { - colorBackground[] = {0,0,0,0.7}; - idc = -1; - x = 0.1; y = 0.2 + (11 / 250); - w = 0.32; h = 0.6 - (22 / 250); - }; - - class Title : Life_RscTitle - { - colorBackground[] = {0,0,0,0}; - idc = 38401; - text = ""; - x = 0.1; y = 0.2; - w = 0.32; h = (1 / 25); - }; - - class itemInfo : Life_RscStructuredText - { - idc = 38404; - text = ""; - sizeEx = 0.035; - x = 0.11; y = 0.68; - w = 0.2; h = 0.2; - }; - - class FilterList : Life_RscCombo - { - idc = 38402; - onLBSelChanged = "_this call life_fnc_weaponShopFilter"; - x = 0.11; y = 0.64; - w = 0.3; h = 0.035; - }; - }; - - class controls - { - class itemList : Life_RscListBox - { - idc = 38403; - onLBSelChanged = "_this call life_fnc_weaponShopSelection"; - sizeEx = 0.035; - x = 0.11; y = 0.25; - w = 0.3; h = 0.38; - }; - - class ButtonBuySell : Life_RscButtonMenu - { - idc = 38405; - text = "$STR_Global_Buy"; - onButtonClick = "[] spawn life_fnc_weaponShopBuySell; true"; - x = 0.1; - y = 0.8 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class ButtonClose : life_RscButtonMenu - { - idc = -1; - text = "$STR_Global_Close"; - onButtonClick = "closeDialog 0;"; - x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.8 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - }; -}; diff --git a/Altis_Life.Altis/dialog/spawnSelection.hpp b/Altis_Life.Altis/dialog/spawnSelection.hpp deleted file mode 100644 index e7c2a750..00000000 --- a/Altis_Life.Altis/dialog/spawnSelection.hpp +++ /dev/null @@ -1,82 +0,0 @@ -class life_spawn_selection -{ - idd = 38500; - movingEnabled = false; - enableSimulation = true; - - class controlsBackground - { - class life_RscTitleBackground : Life_RscText - { - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - idc = -1; - x = 0.1; y = 0.2; - w = 0.8; h = (1 / 25); - }; - - class MainBackground : Life_RscText - { - colorBackground[] = {0,0,0,0.7}; - idc = -1; - x = 0.1; y = 0.2 + (11 / 250); - w = 0.8; h = 0.6 - (22 / 250); - }; - - class Title : Life_RscTitle - { - colorBackground[] = {0,0,0,0}; - idc = -1; - text = "$STR_Spawn_Title"; - x = 0.1; y = 0.2; - w = 0.8; h = (1 / 25); - }; - - class SpawnPointTitle : Title - { - idc = 38501; - style = 1; - text = ""; - }; - - class MapView : Life_RscMapControl - { - idc = 38502; - x = 0.328; y = 0.26; - w = 0.56; - h = 0.56 - (22 / 250); - maxSatelliteAlpha = 0.75;//0.75; - alphaFadeStartScale = 1.15;//0.15; - alphaFadeEndScale = 1.29;//0.29; - }; - }; - - class controls - { - class SpawnPointList: Life_RscListNBox - { - idc = 38510; - text = ""; - sizeEx = 0.041; - coloumns[] = {0,0,0.9}; - drawSideArrows = false; - idcLeft = -1; - idcRight = -1; - rowHeight = 0.050; - x = 0.105; y = 0.26; - w = (8.8 / 40); - h = (10 / 25); - onLBSelChanged = "_this call life_fnc_spawnPointSelected;"; - }; - - class spawnButton : Life_RscButtonMenu - { - idc = -1; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - text = "$STR_Spawn_Spawn"; - onButtonClick = "[] call life_fnc_spawnConfirm"; - x = 0.11; y = 0.69; - w = (8 / 40); - h = (1 / 25); - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/ticket.hpp b/Altis_Life.Altis/dialog/ticket.hpp deleted file mode 100644 index 8fbea7b7..00000000 --- a/Altis_Life.Altis/dialog/ticket.hpp +++ /dev/null @@ -1,124 +0,0 @@ -class Life_ticket_give -{ - idd = 2650; - name = "life_ticket_give"; - movingEnabled = false; - enableSimulation = true; - - class controlsBackground { - class Life_RscTitleBackground:Life_RscText { - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - idc = -1; - x = 0.3; - y = 0.2; - w = 0.47; - h = (1 / 25); - }; - - class MainBackground:Life_RscText { - colorBackground[] = {0, 0, 0, 0.7}; - idc = -1; - x = 0.3; - y = 0.2 + (11 / 250); - w = 0.47; - h = 0.3 - (22 / 250); - }; - }; - - class controls - { - class Title : Life_RscTitle { - colorBackground[] = {0, 0, 0, 0}; - idc = 2651; - text = ""; - x = 0.3; - y = 0.2; - w = 0.6; - h = (1 / 25); - }; - - class moneyEdit : Life_RscEdit - { - idc = 2652; - - text = "100"; - sizeEx = 0.030; - x = 0.40; y = 0.30; - w = 0.25; h = 0.03; - }; - - class payTicket: Life_RscButtonMenu { - idc = -1; - text = "$STR_Ticket_GiveTicket"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call life_fnc_ticketGive"; - x = 0.45; - y = 0.35; - w = (6.25 / 40); - h = (1 / 25); - }; - }; -}; - -class Life_ticket_pay -{ - idd = 2600; - name = "life_ticket_pay"; - movingEnabled = false; - enableSimulation = true; - - class controlsBackground { - class Life_RscTitleBackground:Life_RscText { - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - idc = -1; - x = 0.3; - y = 0.2; - w = 0.47; - h = (1 / 25); - }; - - class MainBackground:Life_RscText { - colorBackground[] = {0, 0, 0, 0.7}; - idc = -1; - x = 0.3; - y = 0.2 + (11 / 250); - w = 0.47; - h = 0.3 - (22 / 250); - }; - }; - - class controls - { - class InfoMsg : Life_RscStructuredText - { - idc = 2601; - sizeEx = 0.020; - text = ""; - x = 0.287; - y = 0.2 + (11 / 250); - w = 0.5; h = 0.12; - }; - - class payTicket: Life_RscButtonMenu { - idc = -1; - text = "$STR_Ticket_PayTicket"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call life_fnc_ticketPay;"; - x = 0.2 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.42 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class refuseTicket : Life_RscButtonMenu { - idc = -1; - text = "$STR_Ticket_RefuseTicket"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "closeDialog 0;"; - x = 0.4 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.42 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/trunk.hpp b/Altis_Life.Altis/dialog/trunk.hpp deleted file mode 100644 index e0a3b9d7..00000000 --- a/Altis_Life.Altis/dialog/trunk.hpp +++ /dev/null @@ -1,144 +0,0 @@ -class TrunkMenu -{ - idd = 3500; - name = "TrunkMenu"; - movingEnable = false; - enableSimulation = true; - - class controlsBackground - { - class RscTitleBackground : Life_RscText - { - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - idc = -1; - x = 0.1; - y = 0.2; - w = 0.7; - h = (1 / 25); - }; - - class RscBackground : Life_RscText - { - colorBackground[] = {0, 0, 0, 0.7}; - idc = -1; - x = 0.1; - y = 0.2 + (11 / 250); - w = 0.7; - h = 0.7 - (22 / 250); - }; - - class RscTitleText : Life_RscTitle - { - colorBackground[] = {0, 0, 0, 0}; - idc = 3501; - text = ""; - x = 0.1; - y = 0.2; - w = 0.7; - h = (1 / 25); - }; - - class VehicleWeight : RscTitleText - { - idc = 3504; - style = 1; - text = ""; - }; - - class RscTrunkText : Life_RscText - { - idc = -1; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - text = "$STR_Trunk_TInventory"; - sizeEx = 0.04; - - x = 0.11; y = 0.25; - w = 0.3; h = 0.04; - }; - - class RscPlayerText : Life_RscText - { - idc = -1; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - text = "$STR_Trunk_PInventory"; - sizeEx = 0.04; - - x = 0.49; y = 0.25; - w = 0.3; h = 0.04; - }; - }; - - class Controls - { - class TrunkGear : Life_RscListBox - { - idc = 3502; - text = ""; - sizeEx = 0.030; - - x = 0.11; y = 0.29; - w = 0.3; h = 0.42; - }; - - class PlayerGear : Life_RscListBox - { - idc = 3503; - text = ""; - sizeEx = 0.030; - - x = 0.49; y = 0.29; - w = 0.3; h = 0.42; - }; - - class TrunkEdit : Life_RscEdit - { - idc = 3505; - text = "1"; - sizeEx = 0.030; - x = 0.11; y = 0.72; - w = 0.3; h = 0.03; - }; - - class PlayerEdit : Life_RscEdit - { - idc = 3506; - text = "1"; - sizeEx = 0.030; - x = 0.49; y = 0.72; - w = 0.3; h = 0.03; - }; - - class TakeItem : Life_RscButtonMenu - { - idc = -1; - text = "$STR_Trunk_Take"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call life_fnc_vehTakeItem;"; - x = 0.19; y = 0.78; - w = (6.25 / 40); - h = (1 / 25); - }; - - class StoreItem : Life_RscButtonMenu - { - idc = -1; - text = "$STR_Trunk_Store"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call life_fnc_vehStoreItem;"; - x = 0.57; y = 0.78; - w = (6.25 / 40); - h = (1 / 25); - }; - - class ButtonClose : Life_RscButtonMenu { - idc = -1; - //shortcuts[] = {0x00050000 + 2}; - text = "$STR_Global_Close"; - onButtonClick = "closeDialog 0;"; - x = 0.1; - y = 0.9 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/ui.hpp b/Altis_Life.Altis/dialog/ui.hpp deleted file mode 100644 index b853355b..00000000 --- a/Altis_Life.Altis/dialog/ui.hpp +++ /dev/null @@ -1,129 +0,0 @@ -#define INFINITE 1e+1000 -#define IDC_LIFE_BAR_FOOD 2200 -#define IDC_LIFE_BAR_WATER 2201 -#define IDC_LIFE_BAR_HEALTH 2202 -#define IDC_LIFE_PICTURE_FOOD 1200 -#define IDC_LIFE_PICTURE_WATER 1201 -#define IDC_LIFE_PICTURE_HEALTH 1202 -#define IDC_LIFE_FOOD_TEXT 1000 -#define IDC_LIFE_WATER_TEXT 1001 -#define IDC_LIFE_HEALTH_TEXT 1002 -/* - Name: Dillon "Itsyuka" Modine-Thuen - File: ui.hpp -*/ - -class playerHUD { - idd = -1; - duration = INFINITE; - movingEnable = 0; - fadein = 0; - fadeout = 0; - name = "playerHUD"; - onLoad = "uiNamespace setVariable ['playerHUD',_this select 0]"; - objects[] = {}; - controls[] = { - LIFE_UI_BACK, - LIFE_BAR_FOOD, - LIFE_BAR_WATER, - LIFE_BAR_HEALTH, - LIFE_PICTURE_FOOD, - LIFE_PICTURE_WATER, - LIFE_PICTURE_HEALTH, - LIFE_FOOD_TEXT, - LIFE_WATER_TEXT, - LIFE_HEALTH_TEXT - }; - - /* Background */ - class LIFE_UI_BACK: Life_RscBackground - { - colorBackground[] = {0,0,0,0.5}; - x = 0.917656 * safezoneW + safezoneX; - y = 0.819 * safezoneH + safezoneY; - w = 0.0825 * safezoneW; - h = 0.11 * safezoneH; - }; - - /* Progress Bars */ - class LIFE_BAR_FOOD: Life_RscProgress - { - idc = IDC_LIFE_BAR_FOOD; - x = 0.938281 * safezoneW + safezoneX; - y = 0.83 * safezoneH + safezoneY; - w = 0.061875 * safezoneW; - h = 0.022 * safezoneH; - }; - class LIFE_BAR_WATER: Life_RscProgress - { - idc = IDC_LIFE_BAR_WATER; - x = 0.938281 * safezoneW + safezoneX; - y = 0.863 * safezoneH + safezoneY; - w = 0.061875 * safezoneW; - h = 0.022 * safezoneH; - }; - class LIFE_BAR_HEALTH: Life_RscProgress - { - idc = 2202; - x = 0.938281 * safezoneW + safezoneX; - y = 0.896 * safezoneH + safezoneY; - w = 0.061875 * safezoneW; - h = 0.022 * safezoneH; - }; - - /* Text */ - - class LIFE_FOOD_TEXT: Life_RscText - { - idc = IDC_LIFE_FOOD_TEXT; - text = ""; - x = 0.958906 * safezoneW + safezoneX; - y = 0.8344 * safezoneH + safezoneY; - w = 0.020625 * safezoneW; - h = 0.011 * safezoneH; - }; - class LIFE_WATER_TEXT: Life_RscText - { - idc = IDC_LIFE_WATER_TEXT; - text = ""; - x = 0.958905 * safezoneW + safezoneX; - y = 0.8674 * safezoneH + safezoneY; - w = 0.020625 * safezoneW; - h = 0.011 * safezoneH; - }; - class LIFE_HEALTH_TEXT: Life_RscText - { - idc = IDC_LIFE_HEALTH_TEXT; - text = ""; - x = 0.958906 * safezoneW + safezoneX; - y = 0.9004 * safezoneH + safezoneY; - w = 0.020625 * safezoneW; - h = 0.011 * safezoneH; - }; - - /* Icons */ - class LIFE_PICTURE_FOOD: life_RscPicture - { - idc = IDC_LIFE_PICTURE_FOOD; - text = "icons\food.paa"; - x = 0.922813 * safezoneW + safezoneX; - y = 0.83 * safezoneH + safezoneY; - w = 0.03; h = 0.04; - }; - class LIFE_PICTURE_WATER: life_RscPicture - { - idc = IDC_LIFE_PICTURE_WATER; - text = "icons\water.paa"; - x = 0.922813 * safezoneW + safezoneX; - y = 0.863 * safezoneH + safezoneY; - w = 0.03; h = 0.04; - }; - class LIFE_PICTURE_HEALTH: life_RscPicture - { - idc = IDC_LIFE_PICTURE_HEALTH; - text = "icons\health.paa"; - x = 0.922813 * safezoneW + safezoneX; - y = 0.896 * safezoneH + safezoneY; - w = 0.03; h = 0.04; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/veh_shop.hpp b/Altis_Life.Altis/dialog/veh_shop.hpp deleted file mode 100644 index 9e5ee80b..00000000 --- a/Altis_Life.Altis/dialog/veh_shop.hpp +++ /dev/null @@ -1,91 +0,0 @@ -class Life_vehicle_shop { - idd = 2300; - name= "life_impound_menu"; - movingEnable = false; - enableSimulation = true; - //onLoad = "[] execVM 'core\client\keychain\init.sqf'"; - - class controlsBackground { - class Life_RscTitleBackground:Life_RscText { - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - idc = -1; - x = 0.1; - y = 0.2; - w = 0.8; - h = (1 / 25); - }; - - class MainBackground:Life_RscText { - colorBackground[] = {0, 0, 0, 0.7}; - idc = -1; - x = 0.1; - y = 0.2 + (11 / 250); - w = 0.8; - h = 0.6 - (22 / 250); - }; - }; - - class controls { - - - class Title : Life_RscTitle { - colorBackground[] = {0, 0, 0, 0}; - idc = 2301; - text = ""; - x = 0.1; - y = 0.2; - w = 0.8; - h = (1 / 25); - }; - - class VehicleList : Life_RscListBox - { - idc = 2302; - text = ""; - sizeEx = 0.035; - colorBackground[] = {0,0,0,0}; - onLBSelChanged = "[_this] call life_fnc_vehicleColorList"; - - x = 0.12; y = 0.26; - w = 0.76; h = 0.4; - }; - - class ColorList : Life_RscCombo - { - idc = 2303; - x = 0.42; y = 0.68; - w = 0.275; h = 0.03; - }; - - class CloseButtonKey : Life_RscButtonMenu { - idc = -1; - text = "$STR_Global_Close"; - onButtonClick = "closeDialog 0;"; - x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.8 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class GetCar : life_RscButtonMenu { - idc = -1; - text = "$STR_Global_Buy"; - onButtonClick = "[] spawn life_fnc_vehicleShopBuy"; - x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.8 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class GetCarGarage : life_RscButtonMenu { - idc = -1; - text = "$STR_Global_BuyPerm"; - onButtonClick = "[] spawn life_fnc_vehicleShopBuySave"; - x = 0.26 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.8 - (1 / 25); - w = (10 / 40); - h = (1 / 25); - }; - - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/vehicleShop.h b/Altis_Life.Altis/dialog/vehicleShop.h deleted file mode 100644 index ce876ccb..00000000 --- a/Altis_Life.Altis/dialog/vehicleShop.h +++ /dev/null @@ -1,127 +0,0 @@ -class Life_Vehicle_Shop_v2 -{ - idd = 2300; - name="life_vehicle_shop"; - movingEnabled = 0; - enableSimulation = 1; - onLoad = "ctrlShow [2330,false];"; - - class controlsBackground - { - class Life_RscTitleBackground : Life_RscText - { - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - idc = -1; - x = 0.1; - y = 0.2; - w = 0.8; - h = (1 / 25); - }; - - class MainBackground : Life_RscText - { - colorBackground[] = {0,0,0,0.7}; - idc = -1; - x = 0.1; - y = 0.2 + (11 / 250); - w = 0.8; - h = 0.7 - (22 / 250); - }; - - class Title : Life_RscTitle - { - idc = 2301; - text = ""; - x = 0.1; - y = 0.2; - w = 0.8; - h = (1 / 25); - }; - - class VehicleTitleBox : Life_RscText - { - idc = -1; - text = "$STR_GUI_ShopStock"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - x = 0.11; y = 0.26; - w = 0.3; - h = (1 / 25); - }; - - class VehicleInfoHeader : Life_RscText - { - idc = 2330; - text = "$STR_GUI_VehInfo"; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - x = 0.42; y = 0.26; - w = 0.46; - h = (1 / 25); - }; - - class CloseBtn : Life_RscButtonMenu - { - idc = -1; - text = "$STR_Global_Close"; - onButtonClick = "closeDialog 0;"; - x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.9 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class RentCar : Life_RscButtonMenu - { - idc = -1; - text = "$STR_Global_RentVeh"; - onButtonClick = "[false] spawn life_fnc_vehicleShopBuy;"; - x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.9 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class BuyCar : life_RscButtonMenu - { - idc = 2309; - text = "$STR_Global_Buy"; - onButtonClick = "[true] spawn life_fnc_vehicleShopBuy;"; - x = 0.26 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.9 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - }; - - class controls - { - class VehicleList : Life_RscListBox - { - idc = 2302; - text = ""; - sizeEx = 0.04; - colorBackground[] = {0.1,0.1,0.1,0.9}; - onLBSelChanged = "_this call life_fnc_vehicleShopLBChange"; - - //Position & height - x = 0.11; y = 0.302; - w = 0.303; h = 0.49; - }; - - class ColorList : Life_RscCombo - { - idc = 2304; - x = 0.11; y = 0.8; - w = 0.303; h = 0.03; - }; - - class vehicleInfomationList : Life_RscStructuredText - { - idc = 2303; - text = ""; - sizeEx = 0.035; - - x = 0.41; y = 0.3; - w = 0.5; h = 0.5; - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/wanted_list.hpp b/Altis_Life.Altis/dialog/wanted_list.hpp deleted file mode 100644 index b10ccb93..00000000 --- a/Altis_Life.Altis/dialog/wanted_list.hpp +++ /dev/null @@ -1,100 +0,0 @@ -class life_wanted_menu { - idd = 2400; - name= "life_wanted_menu"; - movingEnable = false; - enableSimulation = true; - - class controlsBackground { - class Life_RscTitleBackground:Life_RscText { - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; - idc = -1; - x = 0.1; - y = 0.2; - w = 0.6; - h = (1 / 25); - }; - - class MainBackground:Life_RscText { - colorBackground[] = {0, 0, 0, 0.7}; - idc = -1; - x = 0.1; - y = 0.2 + (11 / 250); - w = 0.6; - h = 0.6 - (22 / 250); - }; - }; - - class controls { - - - class Title : Life_RscTitle { - colorBackground[] = {0, 0, 0, 0}; - idc = -1; - text = "$STR_Wanted_Title"; - x = 0.1; - y = 0.2; - w = 0.6; - h = (1 / 25); - }; - - class WantedConnection : Title { - idc = 2404; - style = 1; - text = ""; - }; - - class WantedList : Life_RscListBox - { - idc = 2401; - text = ""; - sizeEx = 0.035; - onLBSelChanged = "[] call life_fnc_wantedInfo"; - - x = 0.12; y = 0.26; - w = 0.2; h = 0.4; - }; - - class WantedDetails : Life_RscListBox - { - idc = 2402; - text = ""; - sizeEx = 0.035; - colorBackground[] = {0, 0, 0, 0}; - - x = 0.34; - y = 0.35; - w = 0.36; - h = 0.32; - }; - - class BountyPrice : Life_RscText - { - idc = 2403; - text = ""; - x = 0.34; - y = 0.03; - w = 0.6; - h = 0.6; - }; - - class CloseButtonKey : Life_RscButtonMenu { - idc = -1; - text = "$STR_Global_Close"; - onButtonClick = "closeDialog 0;"; - x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.8 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - - class PardonButtonKey : Life_RscButtonMenu { - idc = 2405; - text = "$STR_Wanted_Pardon"; - onButtonClick = "[] call life_fnc_pardon; closeDialog 0;"; - x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); - y = 0.8 - (1 / 25); - w = (6.25 / 40); - h = (1 / 25); - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/icons/food.paa b/Altis_Life.Altis/icons/food.paa deleted file mode 100644 index f494b676..00000000 Binary files a/Altis_Life.Altis/icons/food.paa and /dev/null differ diff --git a/Altis_Life.Altis/icons/health.paa b/Altis_Life.Altis/icons/health.paa deleted file mode 100644 index 23cbf5e4..00000000 Binary files a/Altis_Life.Altis/icons/health.paa and /dev/null differ diff --git a/Altis_Life.Altis/icons/ico_apple.paa b/Altis_Life.Altis/icons/ico_apple.paa deleted file mode 100644 index 8b7a5a00..00000000 Binary files a/Altis_Life.Altis/icons/ico_apple.paa and /dev/null differ diff --git a/Altis_Life.Altis/icons/ico_catshark.paa b/Altis_Life.Altis/icons/ico_catshark.paa deleted file mode 100644 index 0a9479c8..00000000 Binary files a/Altis_Life.Altis/icons/ico_catshark.paa and /dev/null differ diff --git a/Altis_Life.Altis/icons/ico_cookedMeat.paa b/Altis_Life.Altis/icons/ico_cookedMeat.paa deleted file mode 100644 index b56b0b72..00000000 Binary files a/Altis_Life.Altis/icons/ico_cookedMeat.paa and /dev/null differ diff --git a/Altis_Life.Altis/icons/ico_fuel.paa b/Altis_Life.Altis/icons/ico_fuel.paa deleted file mode 100644 index 5ddc5c21..00000000 Binary files a/Altis_Life.Altis/icons/ico_fuel.paa and /dev/null differ diff --git a/Altis_Life.Altis/icons/ico_fuelempty.paa b/Altis_Life.Altis/icons/ico_fuelempty.paa deleted file mode 100644 index 153306c8..00000000 Binary files a/Altis_Life.Altis/icons/ico_fuelempty.paa and /dev/null differ diff --git a/Altis_Life.Altis/icons/ico_marijuana.paa b/Altis_Life.Altis/icons/ico_marijuana.paa deleted file mode 100644 index be80f0cd..00000000 Binary files a/Altis_Life.Altis/icons/ico_marijuana.paa and /dev/null differ diff --git a/Altis_Life.Altis/icons/ico_matches.paa b/Altis_Life.Altis/icons/ico_matches.paa deleted file mode 100644 index c09bf032..00000000 Binary files a/Altis_Life.Altis/icons/ico_matches.paa and /dev/null differ diff --git a/Altis_Life.Altis/icons/ico_meat.paa b/Altis_Life.Altis/icons/ico_meat.paa deleted file mode 100644 index bb2125f1..00000000 Binary files a/Altis_Life.Altis/icons/ico_meat.paa and /dev/null differ diff --git a/Altis_Life.Altis/icons/ico_redgull.paa b/Altis_Life.Altis/icons/ico_redgull.paa deleted file mode 100644 index 2c5a4467..00000000 Binary files a/Altis_Life.Altis/icons/ico_redgull.paa and /dev/null differ diff --git a/Altis_Life.Altis/icons/ico_storageBig.paa b/Altis_Life.Altis/icons/ico_storageBig.paa deleted file mode 100644 index 019a8cc4..00000000 Binary files a/Altis_Life.Altis/icons/ico_storageBig.paa and /dev/null differ diff --git a/Altis_Life.Altis/icons/ico_storageSmall.paa b/Altis_Life.Altis/icons/ico_storageSmall.paa deleted file mode 100644 index 46bca4f2..00000000 Binary files a/Altis_Life.Altis/icons/ico_storageSmall.paa and /dev/null differ diff --git a/Altis_Life.Altis/icons/ico_tbacon.paa b/Altis_Life.Altis/icons/ico_tbacon.paa deleted file mode 100644 index a5654588..00000000 Binary files a/Altis_Life.Altis/icons/ico_tbacon.paa and /dev/null differ diff --git a/Altis_Life.Altis/icons/ico_waterBottle.paa b/Altis_Life.Altis/icons/ico_waterBottle.paa deleted file mode 100644 index 4a3a811e..00000000 Binary files a/Altis_Life.Altis/icons/ico_waterBottle.paa and /dev/null differ diff --git a/Altis_Life.Altis/icons/money.paa b/Altis_Life.Altis/icons/money.paa deleted file mode 100644 index f492c766..00000000 Binary files a/Altis_Life.Altis/icons/money.paa and /dev/null differ diff --git a/Altis_Life.Altis/icons/water.paa b/Altis_Life.Altis/icons/water.paa deleted file mode 100644 index 147a99b6..00000000 Binary files a/Altis_Life.Altis/icons/water.paa and /dev/null differ diff --git a/Altis_Life.Altis/init.sqf b/Altis_Life.Altis/init.sqf deleted file mode 100644 index c7230852..00000000 --- a/Altis_Life.Altis/init.sqf +++ /dev/null @@ -1,7 +0,0 @@ -StartProgress = false; -enableSaving[false,false]; - -[] execVM "briefing.sqf"; //Load Briefing -[] execVM "KRON_Strings.sqf"; - -StartProgress = true; \ No newline at end of file diff --git a/Altis_Life.Altis/initPlayerLocal.sqf b/Altis_Life.Altis/initPlayerLocal.sqf deleted file mode 100644 index e04d73cc..00000000 --- a/Altis_Life.Altis/initPlayerLocal.sqf +++ /dev/null @@ -1,17 +0,0 @@ -/* - File: initPlayerLocal.sqf - - Description: - Starts the initialization of the player. -*/ -"BIS_fnc_MP_packet" addPublicVariableEventHandler {_this call life_fnc_MPexec}; -if(!hasInterface) exitWith {}; //This is a headless client, he doesn't need to do anything but keep being headless.. -#define CONST(var1,var2) var1 = compileFinal (if(typeName var2 == "STRING") then {var2} else {str(var2)}) -CONST(BIS_fnc_endMission,BIS_fnc_endMission); -[] execVM "SpyGlass\fn_initSpy.sqf"; -[] execVM "core\init.sqf"; - -//Execute JIP code. -if((_this select 1)) then { - [] execVM "core\jip.sqf"; -}; diff --git a/Altis_Life.Altis/initServer.sqf b/Altis_Life.Altis/initServer.sqf deleted file mode 100644 index 0a04062d..00000000 --- a/Altis_Life.Altis/initServer.sqf +++ /dev/null @@ -1,8 +0,0 @@ -/* - File: initServer.sqf - - Description: - Starts the initialization of the server. -*/ -if(!(_this select 0)) exitWith {}; //Not server -[] call compile PreprocessFileLineNumbers "\life_server\init.sqf"; \ No newline at end of file diff --git a/Altis_Life.Altis/mission.sqm b/Altis_Life.Altis/mission.sqm index 50f12af9..2625980d 100644 --- a/Altis_Life.Altis/mission.sqm +++ b/Altis_Life.Altis/mission.sqm @@ -1,10736 +1,39420 @@ -version=12; -class Mission +version=52; +class EditorData { - addOns[]= + moveGridStep=1; + angleGridStep=0.2617994; + scaleGridStep=1; + autoGroupingDist=10; + toggles=1; + class ItemIDProvider { - "A3_Characters_F_BLUFOR", - "A3_Characters_F_Civil", - "a3_map_altis", - "A3_Structures_F_Items_Valuables", - "A3_Structures_F_Civ_Garbage", - "a3_characters_f_gamma", - "A3_Boat_F_Trawler", - "A3_Structures_F_Civ_Dead", - "A3_Signs_F", - "A3_Structures_F_Walls", - "A3_Structures_F_Mil_Fortification", - "A3_Soft_F_Truck", - "A3_Structures_F_Civ_Market", - "A3_Structures_F_Furniture", - "A3_Structures_F_Items_Vessels", - "A3_Structures_F_Items_Tools", - "A3_Structures_F_Civ_Constructions", - "A3_Structures_F_Items_Electronics", - "A3_Structures_F_Civ_InfoBoards", - "A3_Structures_F_Items_Documents", - "A3_Structures_F_Items_Luggage", - "A3_Structures_F_Training", - "A3_Structures_F_Ind_Tank", - "A3_Structures_F_Mil_Helipads", - "A3_Structures_F_Mil_Cargo", - "A3_Structures_F_Civ_Lamps", - "A3_Characters_F_OPFOR", - "A3_Structures_F_Mil_BagBunker", - "A3_Structures_F_Ind_ConcreteMixingPlant", - "A3_Structures_F_Naval_Buoys", - "A3_Weapons_F_Explosives", - "A3_Weapons_F_Ammoboxes", - "A3_Structures_F_Ind_Cargo", - "A3_Structures_F_Research", - "A3_Characters_F_INDEP", - "A3_Structures_F_EPC_Civ_Accessories", - "A3_Structures_F_Ind_Shed", - "A3_Structures_F_Wrecks", - "A3_Structures_F_EPA_Mil_Scrapyard", - "A3_Structures_F_Ind_FuelStation", - "A3_Air_F_Heli_Light_02", - "a3_characters_f", - "A3_Structures_F_EPA_Civ_Camping", - "A3_Structures_F_Civ_Accessories", - "A3_Weapons_F_Vests", - "a3_weapons_f", - "A3_Weapons_F_CSAT", - "A3_Structures_F_EPB_Items_Military", - "A3_Structures_F_EPA_Items_Vessels", - "A3_Structures_F_EPA_Items_Tools", - "A3_Structures_F_Mil_Flags" + nextID=1176; }; - addOnsAuto[]= + class MarkerIDProvider { - "A3_Characters_F_BLUFOR", - "a3_characters_f", - "A3_Characters_F_Civil", - "A3_Characters_F_OPFOR", - "A3_Characters_F_Gamma", - "A3_Structures_F_Civ_Garbage", - "A3_Structures_F_Civ_Constructions", - "A3_Signs_F", - "A3_Structures_F_Ind_ConcreteMixingPlant", - "A3_Structures_F_Furniture", - "A3_Structures_F_Mil_Helipads", - "A3_Structures_F_Civ_Market", - "A3_Structures_F_Items_Vessels", - "A3_Structures_F_Items_Tools", - "A3_Structures_F_Items_Electronics", - "A3_Structures_F_Civ_InfoBoards", - "A3_Structures_F_Items_Documents", - "A3_Structures_F_Items_Valuables", - "A3_Structures_F_Items_Luggage", - "A3_Structures_F_Walls", - "A3_Structures_F_Mil_Fortification", - "A3_Structures_F_Mil_Cargo", - "A3_Structures_F_Civ_Lamps", - "A3_Structures_F_Training", - "A3_Structures_F_Mil_BagBunker", - "A3_Structures_F_Ind_Cargo", - "A3_Structures_F_EPC_Civ_Accessories", - "A3_Structures_F_Ind_Shed", - "A3_Structures_F_Wrecks", - "A3_Structures_F_EPA_Mil_Scrapyard", - "A3_Structures_F_Ind_FuelStation", - "A3_Weapons_F_Ammoboxes", - "A3_Structures_F_EPA_Civ_Camping", - "A3_Structures_F_Civ_Accessories", - "A3_Weapons_F_Vests", - "a3_weapons_f", - "A3_Weapons_F_CSAT", - "A3_Structures_F_EPB_Items_Military", - "A3_Structures_F_EPA_Items_Vessels", - "A3_Structures_F_EPA_Items_Tools", - "A3_Structures_F_Mil_Flags", - "a3_map_altis" + nextID=222; }; - randomSeed=2004553; - class Intel + class Camera { - briefingName="Altis Life RPG"; - overviewText="Altis Life RPG 4.3.1"; - startWeather=0.099999994; - startWind=0.29999998; - startWindDir=20; - startWaves=0.12; - startGust=0.099999994; - forecastWeather=0.099999994; - forecastWind=0.29999998; - forecastWaves=0.12; - forecastGust=0.099999994; - forecastWindDir=360; - wavesForced=1; - windForced=1; - year=2035; - month=7; - day=6; - hour=8; - minute=0; - startFogDecay=0.0049333; - forecastFogDecay=0.0049333; + pos[]={8446.5459,108.45621,25211.445}; + dir[]={0,-0.70710683,0.70710683}; + up[]={0,0.70710677,0.70710677}; + aside[]={0.99999994,0,-0}; }; - class Groups +}; +binarizationWanted=0; +addons[]= +{ + "A3_Ui_F", + "A3_Missions_F_Beta", + "A3_Structures_F_Civ_Garbage", + "A3_Structures_F_Civ_Constructions", + "A3_Signs_F", + "A3_Structures_F_Ind_ConcreteMixingPlant", + "A3_Structures_F_Furniture", + "A3_Structures_F_Mil_Helipads", + "A3_Structures_F_Civ_Market", + "A3_Structures_F_Items_Vessels", + "A3_Structures_F_Items_Tools", + "A3_Structures_F_Items_Electronics", + "A3_Structures_F_Civ_InfoBoards", + "A3_Structures_F_Items_Documents", + "A3_Structures_F_Items_Valuables", + "A3_Structures_F_Items_Luggage", + "A3_Structures_F_Walls", + "A3_Structures_F_Mil_Fortification", + "A3_Structures_F_Mil_Cargo", + "A3_Structures_F_Civ_Lamps", + "A3_Structures_F_Training", + "A3_Structures_F_Mil_BagBunker", + "A3_Structures_F_Ind_Cargo", + "A3_Structures_F_EPC_Civ_Accessories", + "A3_Structures_F_Ind_Shed", + "A3_Structures_F_Wrecks", + "A3_Structures_F_EPA_Mil_Scrapyard", + "A3_Structures_F_Ind_FuelStation", + "A3_Weapons_F_Ammoboxes", + "A3_Structures_F_EPA_Civ_Camping", + "A3_Structures_F_Civ_Accessories", + "A3_Weapons_F", + "A3_Structures_F_EPB_Items_Military", + "A3_Structures_F_EPA_Items_Vessels", + "A3_Structures_F_EPA_Items_Tools", + "A3_Structures_F_Mil_Flags", + "A3_Characters_F" +}; +class AddonsMetaData +{ + class List { - items=83; + items=12; class Item0 { - side="WEST"; - class Vehicles - { - items=19; - class Item0 - { - position[]={8574.7422,96.200081,25165.313}; - azimut=-794.64697; - id=0; - side="WEST"; - vehicle="B_medic_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="cop_16"; - init="removeBackpack this; removeAllWeapons this;"; - description="WhiteListed - Cop 16"; - }; - class Item1 - { - position[]={8580.3154,95.022591,25164.871}; - azimut=-794.64697; - id=1; - side="WEST"; - vehicle="B_medic_F"; - player="PLAY CDG"; - skill=0.60000002; - text="cop_17"; - init="removeBackpack this; removeAllWeapons this;"; - description="WhiteListed - Cop 17"; - }; - class Item2 - { - position[]={8580.6445,95.015053,25170.504}; - azimut=-794.64697; - id=2; - side="WEST"; - vehicle="B_medic_F"; - player="PLAY CDG"; - skill=0.60000002; - text="cop_18"; - init="removeBackpack this; removeAllWeapons this;"; - description="WhiteListed - Bomb Squad 1"; - }; - class Item3 - { - position[]={8577.0205,95.800713,25168.514}; - azimut=-794.64697; - id=3; - side="WEST"; - vehicle="B_medic_F"; - player="PLAY CDG"; - skill=0.60000002; - text="cop_13"; - init="removeBackpack this; removeAllWeapons this;"; - description="WhiteListed - Cop 13"; - }; - class Item4 - { - position[]={8569.7197,97.215805,25167.314}; - azimut=-794.64697; - id=4; - side="WEST"; - vehicle="B_medic_F"; - player="PLAY CDG"; - skill=0.60000002; - text="cop_6"; - init="removeBackpack this; removeAllWeapons this;"; - description="WhiteListed - Cop 6"; - }; - class Item5 - { - position[]={8571.7861,96.9188,25168.219}; - azimut=-794.64697; - id=5; - side="WEST"; - vehicle="B_medic_F"; - player="PLAY CDG"; - skill=0.60000002; - text="cop_11"; - init="removeBackpack this; removeAllWeapons this;"; - description="WhiteListed - Cop 11"; - }; - class Item6 - { - position[]={8572.917,96.732651,25171.113}; - azimut=-794.64697; - id=6; - side="WEST"; - vehicle="B_medic_F"; - player="PLAY CDG"; - skill=0.60000002; - text="cop_7"; - init="removeBackpack this; removeAllWeapons this;"; - description="WhiteListed - Cop 7"; - }; - class Item7 - { - position[]={8575.541,96.108635,25170.709}; - azimut=-794.64697; - id=7; - side="WEST"; - vehicle="B_medic_F"; - player="PLAY CDG"; - skill=0.60000002; - text="cop_12"; - init="removeBackpack this; removeAllWeapons this;"; - description="WhiteListed - Cop 12"; - }; - class Item8 - { - position[]={8578.251,95.441055,25172.359}; - azimut=-794.64697; - id=8; - side="WEST"; - vehicle="B_medic_F"; - player="PLAY CDG"; - skill=0.60000002; - text="cop_14"; - init="removeBackpack this; removeAllWeapons this;"; - description="WhiteListed - Cop 14"; - }; - class Item9 - { - position[]={8585.7949,94.417938,25172.268}; - azimut=-1143.1801; - offsetY=3; - id=9; - side="WEST"; - vehicle="B_medic_F"; - player="PLAY CDG"; - skill=0.60000002; - text="cop_19"; - init="removeBackpack this; removeAllWeapons this;"; - description="WhiteListed - Bomb Squad 2"; - }; - class Item10 - { - position[]={8583.6982,95.396889,25176.781}; - azimut=-794.64697; - id=10; - side="WEST"; - vehicle="B_medic_F"; - player="PLAY CDG"; - skill=0.60000002; - text="cop_15"; - init="removeBackpack this; removeAllWeapons this;"; - description="WhiteListed - Cop 15"; - }; - class Item11 - { - position[]={8577.0811,95.935608,25175.602}; - azimut=-794.64697; - id=11; - side="WEST"; - vehicle="B_medic_F"; - player="PLAY CDG"; - skill=0.60000002; - text="cop_9"; - init="removeBackpack this; removeAllWeapons this;"; - description="WhiteListed - Cop 9"; - }; - class Item12 - { - position[]={8574.8691,96.045128,25173.803}; - azimut=-794.64697; - id=12; - side="WEST"; - vehicle="B_medic_F"; - player="PLAY CDG"; - skill=0.60000002; - text="cop_8"; - init="removeBackpack this; removeAllWeapons this;"; - description="WhiteListed - Cop 8"; - }; - class Item13 - { - position[]={8570.8408,97.189484,25172.373}; - azimut=-794.64697; - id=13; - side="WEST"; - vehicle="B_medic_F"; - player="PLAY CDG"; - skill=0.60000002; - text="cop_4"; - init="removeBackpack this; removeAllWeapons this;"; - description="Public Slot - Cop 4"; - }; - class Item14 - { - position[]={8568.1729,97.752571,25174.455}; - azimut=-441.37399; - id=14; - side="WEST"; - vehicle="B_medic_F"; - player="PLAY CDG"; - skill=0.60000002; - text="cop_2"; - init="removeBackpack this; removeAllWeapons this;"; - description="Public Slot - Cop 2"; - }; - class Item15 - { - position[]={8571.2402,96.832321,25175.717}; - azimut=-794.64697; - id=15; - side="WEST"; - vehicle="B_medic_F"; - player="PLAY CDG"; - skill=0.60000002; - text="cop_3"; - init="removeBackpack this; removeAllWeapons this;"; - description="Public Slot - Cop 3"; - }; - class Item16 - { - position[]={8573.71,96.23037,25176.873}; - azimut=-794.64697; - id=16; - side="WEST"; - vehicle="B_medic_F"; - player="PLAY CDG"; - skill=0.60000002; - text="cop_5"; - init="removeBackpack this; removeAllWeapons this;"; - description="WhiteListed - Cop 5"; - }; - class Item17 - { - position[]={8576.6016,96.182182,25177.244}; - azimut=-794.64697; - id=17; - side="WEST"; - vehicle="B_medic_F"; - player="PLAY CDG"; - skill=0.60000002; - text="cop_10"; - init="removeBackpack this; removeAllWeapons this;"; - description="WhiteListed - Cop 10"; - }; - class Item18 - { - position[]={8573.1602,96.90229,25159.342}; - azimut=-2234.1799; - offsetY=2; - id=18; - side="WEST"; - vehicle="B_medic_F"; - player="PLAY CDG"; - skill=0.60000002; - text="cop_1"; - init="removeBackpack this; removeAllWeapons this;"; - description="Public Slot - Cop 1"; - }; - }; + className="A3_Ui_F"; + name="Arma 3 - User Interface"; + author="Bohemia Interactive"; + url="http://www.arma3.com"; }; class Item1 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8446.5459,83.456207,25236.445}; - azimut=16.975599; - special="NONE"; - id=19; - side="CIV"; - vehicle="C_man_1"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_1"; - description="Civ 1"; - }; - }; + className="A3_Missions_F_Beta"; + name="Arma 3 Beta - Playable content"; + author="Bohemia Interactive"; + url="http://www.arma3.com"; }; class Item2 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8448.6963,83.994118,25235.57}; - azimut=29.242399; - special="NONE"; - id=20; - side="CIV"; - vehicle="C_man_polo_6_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_2"; - description="Civ 2"; - }; - }; + className="A3_Structures_F"; + name="Arma 3 Alpha - Buildings and structures"; + author="Bohemia Interactive"; + url="http://www.arma3.com"; }; class Item3 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8450.8818,84.539978,25234.117}; - azimut=16.975401; - special="NONE"; - id=21; - side="CIV"; - vehicle="C_man_1"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_3"; - description="Civ 3"; - }; - }; + className="A3_Signs_F"; + name="Arma 3 - Signs"; + author="Bohemia Interactive"; + url="http://www.arma3.com"; }; class Item4 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8452.584,84.952843,25232.809}; - azimut=29.242399; - special="NONE"; - id=22; - side="CIV"; - vehicle="C_man_polo_6_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_4"; - description="Civ 4"; - }; - }; + className="A3_Structures_F_Ind"; + name="Arma 3 Alpha - Industry complexes"; + author="Bohemia Interactive"; + url="http://www.arma3.com"; }; class Item5 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8455.1162,85.224182,25231.191}; - azimut=16.975401; - special="NONE"; - id=23; - side="CIV"; - vehicle="C_man_1"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_5"; - description="Civ 5"; - }; - }; + className="A3_Structures_F_Mil"; + name="Arma 3 - Military Buildings and Structures"; + author="Bohemia Interactive"; + url="http://www.arma3.com"; }; class Item6 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8444.8975,83.40213,25234.609}; - azimut=16.975599; - special="NONE"; - id=24; - side="CIV"; - vehicle="C_man_1"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_6"; - description="Civ 6"; - }; - }; + className="A3_Structures_F_EPC"; + name="Arma 3 Win Episode - Buildings and structures"; + author="Bohemia Interactive"; + url="http://www.arma3.com"; }; class Item7 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8447.9111,83.973419,25233.125}; - azimut=29.242399; - special="NONE"; - id=25; - side="CIV"; - vehicle="C_man_polo_6_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_7"; - description="Civ 7"; - }; - }; + className="A3_Structures_F_Wrecks"; + name="Arma 3 Alpha - Vehicle wrecks"; + author="Bohemia Interactive"; + url="http://www.arma3.com"; }; class Item8 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8450.0967,84.429321,25231.672}; - azimut=16.975401; - special="NONE"; - id=26; - side="CIV"; - vehicle="C_man_1"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_8"; - description="Civ 8"; - }; - }; + className="A3_Structures_F_EPA"; + name="Arma 3 Survive Episode - Buildings and Structures"; + author="Bohemia Interactive"; + url="http://www.arma3.com"; }; class Item9 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8452.1455,84.869774,25230.203}; - azimut=29.242399; - special="NONE"; - id=27; - side="CIV"; - vehicle="C_man_polo_6_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_9"; - description="Civ 9"; - }; - }; + className="A3_Weapons_F"; + name="Arma 3 Alpha - Weapons and Accessories"; + author="Bohemia Interactive"; + url="http://www.arma3.com"; }; class Item10 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8454.3311,84.86055,25228.746}; - azimut=16.975401; - special="NONE"; - id=28; - side="CIV"; - vehicle="C_man_1"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_10"; - description="Civ 10"; - }; - }; + className="A3_Structures_F_EPB"; + name="Arma 3 Adapt Episode - Buildings and structures"; + author="Bohemia Interactive"; + url="http://www.arma3.com"; }; class Item11 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8444.1318,83.447197,25233.102}; - azimut=16.975599; - special="NONE"; - id=29; - side="CIV"; - vehicle="C_man_1"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_11"; - description="Civ 11"; - }; - }; + className="A3_Characters_F"; + name="Arma 3 Alpha - Characters and Clothing"; + author="Bohemia Interactive"; + url="http://www.arma3.com"; }; - class Item12 + }; +}; +randomSeed=2639488; +class ScenarioData +{ + author="Tonic"; + overViewPicture="textures\armalife.jpg"; + overViewPictureLocked="textures\armalife.jpg"; + loadScreen="textures\armalife.jpg"; + saving=0; + respawnDialog=0; + disabledAI=1; + respawn=3; + respawnDelay=5; + class Header + { + gameType="RPG"; + minPlayers=1; + maxPlayers=126; + }; + wreckLimit=3; + wreckRemovalMinTime=60; + wreckRemovalMaxTime=320; + corpseLimit=150; + corpseRemovalMinTime=999; + corpseRemovalMaxTime=9999; +}; +class CustomAttributes +{ + class Category0 + { + name="Multiplayer"; + class Attribute0 { - side="CIV"; - class Vehicles + property="RespawnTemplates"; + expression="true"; + class Value { - items=1; - class Item0 + class data { - position[]={8447.1455,84.058296,25231.617}; - azimut=29.242399; - special="NONE"; - id=30; - side="CIV"; - vehicle="C_man_polo_6_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_12"; - description="Civ 12"; + class type + { + type[]= + { + "ARRAY" + }; + }; }; }; }; - class Item13 + class Attribute1 { - side="CIV"; - class Vehicles + property="RespawnButton"; + expression="true"; + class Value { - items=1; - class Item0 + class data { - position[]={8449.3311,84.51442,25230.164}; - azimut=16.975401; - special="NONE"; - id=31; - side="CIV"; - vehicle="C_man_1"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_13"; - description="Civ 13"; + class type + { + type[]= + { + "SCALAR" + }; + }; + value=1; }; }; }; - class Item14 + nAttributes=2; + }; + class Category1 + { + name="Scenario"; + class Attribute0 { - side="CIV"; - class Vehicles + property="EnableDebugConsole"; + expression="true"; + class Value { - items=1; - class Item0 + class data { - position[]={8451.3799,84.68338,25228.691}; - azimut=29.242399; - special="NONE"; - id=32; - side="CIV"; - vehicle="C_man_polo_6_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_14"; - description="Civ 14"; + class type + { + type[]= + { + "SCALAR" + }; + }; + value=1; }; }; }; - class Item15 + nAttributes=1; + }; +}; +class Mission +{ + class Intel + { + briefingName="Altis Life RPG v4.4r3"; + overviewText="@STR_MISC_overviewText"; + startWeather=0.099999994; + startWind=0.29999998; + startWindDir=20; + startWaves=0.12; + startGust=0.099999994; + forecastWeather=0.099999994; + forecastWind=0.29999998; + forecastWaves=0.12; + forecastGust=0.099999994; + forecastWindDir=360; + wavesForced=1; + windForced=1; + year=2035; + month=7; + day=6; + hour=8; + minute=0; + startFogDecay=0.0049333; + forecastFogDecay=0.0049333; + }; + class Entities + { + items=870; + class Item0 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8453.5654,84.672279,25227.238}; - azimut=16.975401; - special="NONE"; - id=33; - side="CIV"; - vehicle="C_man_1"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_15"; - description="Civ 15"; - }; - }; + dataType="Marker"; + position[]={8453.6484,84.711037,25216.969}; + name="respawn_civilian"; + type="Empty"; + id=0; }; - class Item16 + class Item1 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8442.8584,83.392487,25231.723}; - azimut=16.975599; - special="NONE"; - id=34; - side="CIV"; - vehicle="C_man_1"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_16"; - description="Civ 16"; - }; - }; + dataType="Marker"; + position[]={8573.2227,97.719269,25154.586}; + name="respawn_west"; + type="Empty"; + id=1; }; - class Item17 + class Item2 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8445.8701,84.06279,25230.234}; - azimut=29.242399; - special="NONE"; - id=35; - side="CIV"; - vehicle="C_man_polo_6_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_17"; - description="Civ 17"; - }; - }; + dataType="Marker"; + position[]={3400.7595,1.8830158,12899.346}; + name="fish_market_1"; + text="@STR_MAR_Fish_Market"; + type="mil_box"; + colorName="ColorGreen"; + id=3; }; - class Item18 + class Item3 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8448.0557,84.265648,25228.781}; - azimut=16.975401; - special="NONE"; - id=36; - side="CIV"; - vehicle="C_man_1"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_18"; - description="Civ 18"; - }; - }; + dataType="Marker"; + position[]={3765.8088,18.85,12990.187}; + name="hospital_marker"; + text="@STR_MAR_Hospital"; + type="loc_Hospital"; + colorName="ColorRed"; + id=4; }; - class Item19 + class Item4 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8450.1045,84.400635,25227.313}; - azimut=29.242399; - special="NONE"; - id=37; - side="CIV"; - vehicle="C_man_polo_6_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_19"; - description="Civ 19"; - }; - }; + dataType="Marker"; + position[]={3564.207,9.0851917,13083.732}; + name="civ_spawn_1"; + type="Empty"; + id=5; }; - class Item20 + class Item5 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8452.29,84.554047,25225.855}; - azimut=16.975401; - special="NONE"; - id=38; - side="CIV"; - vehicle="C_man_1"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_20"; - description="Civ 20"; - }; - }; + dataType="Marker"; + position[]={16822.93,22.089239,12720.003}; + name="civ_spawn_2"; + type="Empty"; + id=6; + }; + class Item6 + { + dataType="Marker"; + position[]={14016.111,26.688026,18698.537}; + name="civ_spawn_3"; + type="Empty"; + id=7; + }; + class Item7 + { + dataType="Marker"; + position[]={3292.1787,2.2604189,12961.598}; + name="cop_spawn_1"; + type="Empty"; + angle=180.00848; + id=8; + }; + class Item8 + { + dataType="Marker"; + position[]={16569.354,11,12735.809}; + name="cop_spawn_2"; + type="Empty"; + id=9; + }; + class Item9 + { + dataType="Marker"; + position[]={13820.758,19.826002,18969.209}; + name="cop_spawn_3"; + text="@STR_MAR_Police_Station"; + type="mil_box"; + colorName="Color4_FD_F"; + id=10; + }; + class Item10 + { + dataType="Marker"; + position[]={14161.147,19.243717,16295.893}; + name="cop_spawn_4"; + text="@STR_MAR_Police_Air_HQ"; + type="mil_box"; + colorName="Color4_FD_F"; + id=11; + }; + class Item11 + { + dataType="Marker"; + position[]={19856.078,62.778057,17895.051}; + name="iron_mine"; + text="@STR_MAR_Iron_Mine"; + type="mil_triangle"; + colorName="ColorBrown"; + id=12; + }; + class Item12 + { + dataType="Marker"; + position[]={23823.781,3.1900001,18601.668}; + name="salt_mine"; + text="@STR_MAR_Salt_Mine"; + type="mil_triangle"; + colorName="ColorBrown"; + id=13; + }; + class Item13 + { + dataType="Marker"; + position[]={27362.463,6.3058786,24465.992}; + name="salt_processing"; + text="@STR_MAR_Salt_Processing"; + type="mil_box"; + colorName="ColorBrown"; + id=14; + }; + class Item14 + { + dataType="Marker"; + position[]={22150.52,3.150569,14475.64}; + name="Correctional_Facility"; + text="@STR_MAR_Altis_Corrections"; + type="mil_dot"; + colorName="Color4_FD_F"; + id=15; + }; + class Item15 + { + dataType="Marker"; + position[]={3269.3455,2.1793349,12967.998}; + name="police_hq_1"; + text="@STR_MAR_Police_HQ"; + type="mil_box"; + colorName="Color4_FD_F"; + id=16; + }; + class Item16 + { + dataType="Marker"; + position[]={16589.234,11,12763.845}; + name="police_hq_2"; + text="@STR_MAR_Police_Station"; + type="mil_box"; + colorName="Color4_FD_F"; + id=17; + }; + class Item17 + { + dataType="Marker"; + position[]={14276.118,4.1247582,13044.42}; + name="CG"; + text="@STR_MAR_Coast_Guard"; + type="Empty"; + colorName="Color4_FD_F"; + id=18; + }; + class Item18 + { + dataType="Marker"; + position[]={9188.2607,14.383561,21670.799}; + name="Rebelop"; + text="@STR_MAR_Rebel_Outpost"; + type="mil_triangle"; + colorName="Color1_FD_F"; + id=19; + }; + class Item19 + { + dataType="Marker"; + position[]={14676.569,17.91,16773.182}; + name="airshop"; + text="@STR_MAR_Air_Shop"; + type="mil_dot"; + colorName="Color1_FD_F"; + id=20; + }; + class Item20 + { + dataType="Marker"; + position[]={3763.6846,34.367668,12372.792}; + name="civ_truck_shop1"; + text="@STR_MAR_Truck_Shop"; + type="c_car"; + colorName="ColorBlue"; + id=21; }; class Item21 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8441.9443,83.423882,25230.426}; - azimut=16.975599; - special="NONE"; - id=39; - side="CIV"; - vehicle="C_man_1"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_21"; - description="Civ 21"; - }; - }; + dataType="Marker"; + position[]={6263.5244,43,16265.374}; + name="OilP"; + text="@STR_MAR_Oil_Processing"; + type="mil_box"; + colorName="ColorBrown"; + id=22; }; class Item22 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8444.9561,84.089775,25228.941}; - azimut=29.242399; - special="NONE"; - id=40; - side="CIV"; - vehicle="C_man_polo_6_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_22"; - description="Civ 22"; - }; - }; + dataType="Marker"; + position[]={10232.705,95.303696,14854.982}; + name="iron_processing"; + text="@STR_MAR_Iron_processing"; + type="mil_box"; + colorName="ColorBrown"; + id=23; }; class Item23 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8447.1416,84.109688,25227.484}; - azimut=16.975401; - special="NONE"; - id=41; - side="CIV"; - vehicle="C_man_1"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_23"; - description="Civ 23"; - }; - }; + dataType="Marker"; + position[]={8090.8218,77.531647,22620.234}; + name="sand_mine"; + text="@STR_MAR_Sand_Mine"; + type="mil_triangle"; + colorName="ColorBrown"; + id=24; }; class Item24 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8449.1904,84.171333,25226.016}; - azimut=29.242399; - special="NONE"; - id=42; - side="CIV"; - vehicle="C_man_polo_6_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_24"; - description="Civ 24"; - }; - }; + dataType="Marker"; + position[]={8959.7256,69.222336,15507.252}; + name="chop_shop_1"; + text="@STR_MAR_Chop_Shop"; + type="o_armor"; + colorName="Color1_FD_F"; + id=25; }; class Item25 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8451.376,84.325058,25224.563}; - azimut=16.975401; - special="NONE"; - id=43; - side="CIV"; - vehicle="C_man_1"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_25"; - description="Civ 25"; - }; - }; + dataType="Marker"; + position[]={8440.3506,49.484863,12756.805}; + name="cocaine processing"; + text="@STR_MAR_Cocaine_Processing"; + type="mil_dot"; + colorName="Color1_FD_F"; + id=26; }; class Item26 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8441.1357,83.408073,25229.488}; - azimut=16.975599; - special="NONE"; - id=44; - side="CIV"; - vehicle="C_man_1"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_26"; - description="Civ 26"; - }; - }; + dataType="Marker"; + position[]={167.63799,0.021615377,14709.002}; + name="truck_1"; + text="@STR_MAR_Truck_Shop"; + type="c_car"; + colorName="ColorBlack"; + id=27; + atlOffset=185.99162; }; class Item27 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8444.1494,84.062325,25228.004}; - azimut=29.242399; - special="NONE"; - id=45; - side="CIV"; - vehicle="C_man_polo_6_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_27"; - description="Civ 27"; - }; - }; + dataType="Marker"; + position[]={4412.5562,37.095924,12605.266}; + name="copper_mine"; + text="@STR_MAR_Copper_Mine"; + type="mil_triangle"; + colorName="ColorBrown"; + id=28; }; class Item28 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8446.335,84.268951,25226.551}; - azimut=16.975401; - special="NONE"; - id=46; - side="CIV"; - vehicle="C_man_1"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_28"; - description="Civ 28"; - }; - }; + dataType="Marker"; + position[]={167.56963,0.078673914,14509.83}; + name="atm"; + text="@STR_MAR_ATM"; + type="loc_Tourism"; + colorName="ColorGreen"; + id=29; + atlOffset=186.04868; }; class Item29 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8448.3838,84.289871,25225.078}; - azimut=29.242399; - special="NONE"; - id=47; - side="CIV"; - vehicle="C_man_polo_6_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_29"; - description="Civ 29"; - }; - }; + dataType="Marker"; + position[]={163.73174,0.012321081,14411.306}; + name="lbank"; + text="@STR_MAR_Local_Bank"; + type="loc_Tourism"; + colorName="ColorBLUFOR"; + id=30; + atlOffset=185.98232; }; class Item30 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8450.5693,84.299187,25223.625}; - azimut=16.975401; - special="NONE"; - id=48; - side="CIV"; - vehicle="C_man_1"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_30"; - description="Civ 30"; - }; - }; + dataType="Marker"; + position[]={169.09892,-0.026115492,14814.396}; + name="Carshop"; + text="@STR_MAR_Car_Shop"; + type="c_car"; + colorName="ColorWhite"; + id=31; + atlOffset=185.94388; }; class Item31 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8440.2686,83.405701,25228.234}; - azimut=16.975599; - special="NONE"; - id=49; - side="CIV"; - vehicle="C_man_1"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_31"; - description="Civ 31"; - }; - }; + dataType="Marker"; + position[]={169.36064,0.027309759,14608.475}; + name="Hospital_1"; + text="@STR_MAR_Hospital_Clinic"; + type="loc_Hospital"; + colorName="ColorRed"; + id=32; + atlOffset=185.99731; }; class Item32 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8443.2803,84.060196,25226.746}; - azimut=29.242399; - special="NONE"; - id=50; - side="CIV"; - vehicle="C_man_polo_6_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_32"; - description="Civ 32"; - }; - }; + dataType="Marker"; + position[]={3669.2529,10.441362,13108.502}; + name="car1"; + type="c_car"; + colorName="ColorWhite"; + id=33; }; class Item33 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8445.4658,84.468468,25225.293}; - azimut=16.975401; - special="NONE"; - id=51; - side="CIV"; - vehicle="C_man_1"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_33"; - description="Civ 33"; - }; - }; + dataType="Marker"; + position[]={18478.988,25.055317,14297.403}; + name="diamond_mine"; + text="@STR_MAR_Diamond_Mine"; + type="mil_triangle"; + colorName="ColorBrown"; + id=34; }; class Item34 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8447.5146,84.488922,25223.824}; - azimut=29.242399; - special="NONE"; - id=52; - side="CIV"; - vehicle="C_man_polo_6_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_34"; - description="Civ 34"; - }; - }; + dataType="Marker"; + position[]={16990.332,16.389584,12866.398}; + name="car1_2"; + type="c_car"; + colorName="ColorWhite"; + angle=0.011481636; + id=35; }; class Item35 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8449.7002,84.495537,25222.367}; - azimut=16.975401; - special="NONE"; - id=53; - side="CIV"; - vehicle="C_man_1"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_35"; - description="Civ 35"; - }; - }; + dataType="Marker"; + position[]={3479.1758,2.6362305,13231.096}; + name="Gen"; + text="@STR_MAR_General_Store"; + type="c_unknown"; + colorName="ColorGreen"; + id=36; }; class Item36 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8439.1416,83.603737,25226.301}; - azimut=16.975599; - special="NONE"; - id=54; - side="CIV"; - vehicle="C_man_1"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_36"; - description="Civ 36"; - }; - }; + dataType="Marker"; + position[]={162.51799,-0.069760568,14300.679}; + name="Gen_1"; + text="@STR_MAR_Civilian_Shops"; + type="c_unknown"; + colorName="ColorGreen"; + id=37; + atlOffset=185.90024; }; class Item37 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8442.1553,84.13427,25224.813}; - azimut=29.242399; - special="NONE"; - id=55; - side="CIV"; - vehicle="C_man_polo_6_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_37"; - description="Civ 37"; - }; - }; + dataType="Marker"; + position[]={161.06902,0.056310706,14202.72}; + name="boat_1"; + text="@STR_MAR_Boat_Shop"; + type="c_ship"; + colorName="ColorWhite"; + id=38; + atlOffset=186.02631; }; class Item38 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8444.3408,84.607536,25223.359}; - azimut=16.975401; - special="NONE"; - id=56; - side="CIV"; - vehicle="C_man_1"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_38"; - description="Civ 38"; - }; - }; + dataType="Marker"; + position[]={3647.8298,10.226415,13122.039}; + name="civ_car_1"; + type="Empty"; + angle=222.94591; + id=39; }; class Item39 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8446.3896,84.766327,25221.891}; - azimut=29.242399; - special="NONE"; - id=57; - side="CIV"; - vehicle="C_man_polo_6_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_39"; - description="Civ 39"; - }; - }; + dataType="Marker"; + position[]={3653.8333,10.282446,13121.501}; + name="civ_car_1_1"; + type="Empty"; + angle=208.40822; + id=40; }; class Item40 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8448.5752,84.741058,25220.434}; - azimut=16.975401; - special="NONE"; - id=58; - side="CIV"; - vehicle="C_man_1"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_40"; - description="Civ 40"; - }; - }; + dataType="Marker"; + position[]={3364.3098,4.8093276,13064.118}; + name="Gen_3"; + text="@STR_MAR_Bruce_Outfits"; + type="c_unknown"; + colorName="ColorGreen"; + id=41; }; class Item41 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8437.5088,83.882584,25224.156}; - azimut=29.242399; - special="NONE"; - id=59; - side="CIV"; - vehicle="C_man_polo_4_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_41"; - description="Civ 41"; - }; - }; + dataType="Marker"; + position[]={16993.305,16.343332,12859.62}; + name="civ_car_2"; + type="Empty"; + angle=148.42909; + id=42; }; class Item42 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8440.1025,84.353691,25222.801}; - azimut=29.242399; - special="NONE"; - id=60; - side="CIV"; - vehicle="C_man_1_2_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_42"; - description="Civ 42"; - }; - }; + dataType="Marker"; + position[]={14037.903,25.621716,18750.951}; + name="civ_car_3"; + type="Empty"; + angle=126.40627; + id=43; }; class Item43 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8442.9678,84.915878,25221.289}; - azimut=29.242399; - special="NONE"; - id=61; - side="CIV"; - vehicle="C_man_polo_1_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_43"; - description="Civ 43"; - }; - }; + dataType="Marker"; + position[]={4187.0205,36.297176,13106.365}; + name="apple_1"; + text="@STR_MAR_Apple_Field"; + type="loc_Tree"; + colorName="Color3_FD_F"; + id=44; }; class Item44 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8445.0967,85.346931,25220.012}; - azimut=29.242399; - special="NONE"; - id=62; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_44"; - description="Civ 44"; - }; - }; + dataType="Marker"; + position[]={25982.121,15.485652,20889.566}; + name="apple_2"; + text="@STR_MAR_Apple_Field"; + type="loc_Tree"; + colorName="Color3_FD_F"; + id=45; }; class Item45 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8447.5361,85.171638,25218.543}; - azimut=29.242399; - special="NONE"; - id=63; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_45"; - description="Civ 45"; - }; - }; + dataType="Marker"; + position[]={4345.1636,33.150127,13982.917}; + name="peaches_2"; + text="@STR_MAR_Peaches_Field"; + type="loc_Tree"; + colorName="Color3_FD_F"; + id=46; }; class Item46 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8436.2666,83.965683,25222.398}; - azimut=29.242399; - special="NONE"; - id=64; - side="CIV"; - vehicle="C_man_polo_4_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_46"; - description="Civ 46"; - }; - }; + dataType="Marker"; + position[]={10800.928,32.462917,13238.061}; + name="peaches_1"; + text="@STR_MAR_Peaches_Field"; + type="loc_Tree"; + colorName="Color3_FD_F"; + id=47; }; class Item47 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8438.8604,84.647255,25221.043}; - azimut=29.242399; - special="NONE"; - id=65; - side="CIV"; - vehicle="C_man_1_2_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_47"; - description="Civ 47"; - }; - }; + dataType="Marker"; + position[]={3486.2664,7.7271852,12951.688}; + name="Gen_3_1"; + text="@STR_MAR_Market"; + type="c_unknown"; + colorName="ColorGreen"; + id=48; + atlOffset=-7.4386597e-005; }; class Item48 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8441.7256,85.207352,25219.535}; - azimut=29.242399; - special="NONE"; - id=66; - side="CIV"; - vehicle="C_man_polo_1_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_48"; - description="Civ 48"; - }; - }; + dataType="Marker"; + position[]={10022.424,14.231085,12550.737}; + name="apple_3"; + text="@STR_MAR_Apple_Field"; + type="loc_Tree"; + colorName="Color3_FD_F"; + id=49; }; class Item49 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8443.8545,85.666763,25218.258}; - azimut=29.242399; - special="NONE"; - id=67; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_49"; - description="Civ 49"; - }; - }; + dataType="Marker"; + position[]={13618,16.567661,18105.947}; + name="apple_4"; + text="@STR_MAR_Apple_Field"; + type="loc_Tree"; + colorName="Color3_FD_F"; + id=50; }; class Item50 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8446.2939,85.822144,25216.785}; - azimut=29.242399; - special="NONE"; - id=68; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_50"; - description="Civ 50"; - }; - }; + dataType="Marker"; + position[]={13120.37,39.285686,19673.133}; + name="peaches_3"; + text="@STR_MAR_Peaches_Field"; + type="loc_Tree"; + colorName="Color3_FD_F"; + id=51; }; class Item51 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8435.0771,84.194382,25220.941}; - azimut=29.242399; - special="NONE"; - id=69; - side="CIV"; - vehicle="C_man_polo_4_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_51"; - description="Civ 51"; - }; - }; + dataType="Marker"; + position[]={14418.972,18.719999,16244.317}; + name="air_serv_1"; + text="@STR_MAR_Air_Service"; + type="respawn_air"; + colorName="Color1_FD_F"; + id=52; }; class Item52 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8437.6709,85.16993,25219.586}; - azimut=29.242399; - special="NONE"; - id=70; - side="CIV"; - vehicle="C_man_1_2_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_52"; - description="Civ 52"; - }; - }; + dataType="Marker"; + position[]={3269.3455,2.1793349,12967.998}; + name="Police HQ_1"; + text="@STR_MAR_Police_HQ"; + type="mil_box"; + colorName="Color4_FD_F"; + id=53; }; class Item53 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8440.5361,85.591423,25218.074}; - azimut=29.242399; - special="NONE"; - id=71; - side="CIV"; - vehicle="C_man_polo_1_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_53"; - description="Civ 53"; - }; - }; + dataType="Marker"; + position[]={4543.0967,263.86359,15403.19}; + name="7News_1"; + text="@STR_MAR_Channel_News"; + type="loc_Transmitter"; + colorName="ColorWhite"; + id=54; }; class Item54 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8442.667,85.956665,25216.797}; - azimut=29.242399; - special="NONE"; - id=72; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_54"; - description="Civ 54"; - }; - }; + dataType="Marker"; + position[]={3669.2141,10.440954,13108.464}; + name="car1_1"; + text="@STR_MAR_Car_Shop"; + type="c_car"; + colorName="ColorWhite"; + id=55; }; class Item55 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8445.1064,86.394028,25215.328}; - azimut=29.242399; - special="NONE"; - id=73; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_55"; - description="Civ 55"; - }; - }; + dataType="Marker"; + position[]={14032.284,25.46665,18758.639}; + name="car1_2_1_1"; + text="@STR_MAR_Car_Shop"; + type="c_car"; + colorName="ColorWhite"; + angle=359.19177; + id=56; }; class Item56 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8444.0127,86.990387,25213.949}; - azimut=29.242399; - special="NONE"; - id=74; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_56"; - description="Civ 56"; - }; - }; + dataType="Marker"; + position[]={3041.5544,2.0197022,12612.536}; + name="boat_2"; + text="@STR_MAR_Boat_Shop"; + type="c_ship"; + colorName="ColorWhite"; + id=57; }; class Item57 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8441.3779,86.485931,25215.328}; - azimut=29.242399; - special="NONE"; - id=75; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_57"; - description="Civ 57"; - }; - }; + dataType="Marker"; + position[]={3638.6743,10.186527,13077.098}; + name="license_shop"; + text="@STR_MAR_DMV"; + type="c_unknown"; + colorName="ColorBlue"; + angle=358.09689; + id=58; }; class Item58 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8439.4346,86.042274,25216.824}; - azimut=29.242399; - special="NONE"; - id=76; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_58"; - description="Civ 58"; - }; - }; + dataType="Marker"; + position[]={3914.5459,16.270481,13591.836}; + name="dp_missions"; + text="@STR_MAR_Delivery_Missions"; + type="mil_box"; + colorName="ColorYellow"; + id=59; }; class Item59 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8436.8018,85.541145,25218.039}; - azimut=29.242399; - special="NONE"; - id=77; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_59"; - description="Civ 59"; - }; - }; + dataType="Marker"; + position[]={3427.2068,2.5439744,12735.082}; + name="dive_shop"; + text="@STR_MAR_Diving_Shop"; + type="mil_box"; + colorName="ColorOrange"; + angle=215.54425; + id=60; }; class Item60 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8433.6416,84.283775,25219.742}; - azimut=29.242399; - special="NONE"; - id=78; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_60"; - description="Civ 60"; - }; - }; + dataType="Marker"; + position[]={3492.7932,19.49818,14145.842}; + name="Dealer_1"; + text="@STR_MAR_Drug_Dealer"; + type="mil_dot"; + colorName="ColorOrange"; + id=61; }; class Item61 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8442.9873,87.647408,25212.555}; - azimut=29.242399; - special="NONE"; - id=79; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_61"; - description="Civ 61"; - }; - }; + dataType="Marker"; + position[]={3649.4426,7.00559,13384.339}; + name="jail_release"; + type="Empty"; + angle=190.78464; + id=62; }; class Item62 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8440.3135,87.06926,25214.016}; - azimut=29.242399; - special="NONE"; - id=80; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_62"; - description="Civ 62"; - }; - }; + dataType="Marker"; + position[]={8637.5557,180.94052,18280.637}; + name="dp_1_1"; + text="DP 3"; + type="mil_box"; + colorName="ColorYellow"; + id=63; }; class Item63 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8438.3682,86.552155,25215.395}; - azimut=29.242399; - special="NONE"; - id=81; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_63"; - description="Civ 63"; - }; - }; + dataType="Marker"; + position[]={14193.35,29.500216,18714.625}; + name="dp_1_2"; + text="DP 7"; + type="mil_box"; + colorName="ColorYellow"; + id=64; }; class Item64 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8435.8291,85.838974,25216.527}; - azimut=29.242399; - special="NONE"; - id=82; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_64"; - description="Civ 64"; - }; - }; + dataType="Marker"; + position[]={4657.2241,293.14618,21402.947}; + name="dp_1_3"; + text="DP 4"; + type="mil_box"; + colorName="ColorYellow"; + id=65; }; class Item65 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8432.5869,84.567177,25218.336}; - azimut=29.242399; - special="NONE"; - id=83; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_65"; - description="Civ 65"; - }; - }; + dataType="Marker"; + position[]={25638.574,19.618872,21308.701}; + name="dp_1_4"; + text="DP 16"; + type="mil_box"; + colorName="ColorYellow"; + id=66; }; class Item66 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8464.2949,85.230385,25217.92}; - azimut=1078.3573; - special="NONE"; - id=84; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAYER COMMANDER"; - leader=1; - skill=0.60000002; - text="civ_70"; - description="Civ 70"; - }; - }; + dataType="Marker"; + position[]={26975.738,20.035761,23262.752}; + name="dp_1_5"; + text="DP 17"; + type="mil_box"; + colorName="ColorYellow"; + angle=219.81371; + id=67; }; class Item67 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8462.3389,84.79155,25218.719}; - azimut=29.242399; - special="NONE"; - id=85; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_69"; - description="Civ 69"; - }; - }; + dataType="Marker"; + position[]={18065.555,22.422867,15194.638}; + name="dp_1_6"; + text="DP 19"; + type="mil_box"; + colorName="ColorYellow"; + id=68; }; class Item68 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8460.3936,84.318871,25220.094}; - azimut=29.242399; - special="NONE"; - id=86; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_68"; - description="Civ 68"; - }; - }; + dataType="Marker"; + position[]={16805.742,23.940353,12662.737}; + name="dp_1_7"; + text="DP 18"; + type="mil_box"; + colorName="ColorYellow"; + angle=165.89699; + id=69; }; class Item69 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8457.8545,84.226723,25221.23}; - azimut=29.242399; - special="NONE"; - id=87; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_67"; - description="Civ 67"; - }; - }; + dataType="Marker"; + position[]={18813.75,31.821898,16642.586}; + name="dp_1_8"; + text="DP 13"; + type="mil_box"; + colorName="ColorYellow"; + angle=43.241493; + id=70; }; class Item70 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8454.6123,84.280464,25223.039}; - azimut=29.242399; - special="NONE"; - id=88; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_66"; - description="Civ 66"; - }; - }; + dataType="Marker"; + position[]={12310.653,24.094952,15700.001}; + name="dp_1_9"; + text="DP 12"; + type="mil_box"; + colorName="ColorYellow"; + id=71; }; class Item71 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8463.7822,85.275978,25215.566}; - azimut=29.242399; - special="NONE"; - id=89; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_75"; - description="Civ 75"; - }; - }; + dataType="Marker"; + position[]={20946.139,43.178474,16965.078}; + name="dp_1_10"; + text="DP 14"; + type="mil_box"; + colorName="ColorYellow"; + id=72; }; class Item72 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8461.1064,84.652992,25217.023}; - azimut=29.242399; - special="NONE"; - id=90; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_74"; - description="Civ 74"; - }; - }; + dataType="Marker"; + position[]={21382.348,21.960739,16411.709}; + name="dp_1_11"; + text="DP 15"; + type="mil_box"; + colorName="ColorYellow"; + angle=298.25641; + id=73; }; class Item73 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8459.1611,84.369049,25218.402}; - azimut=29.242399; - special="NONE"; - id=91; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_73"; - description="Civ 73"; - }; - }; + dataType="Marker"; + position[]={19408.297,40.008781,13218.935}; + name="dp_1_12"; + text="DP 21"; + type="mil_box"; + colorName="ColorYellow"; + id=74; }; class Item74 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8456.6221,84.365723,25219.535}; - azimut=29.242399; - special="NONE"; - id=92; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_72"; - description="Civ 72"; - }; - }; + dataType="Marker"; + position[]={19969.447,59.631565,11420.619}; + name="dp_1_13"; + text="DP 22"; + type="mil_box"; + colorName="ColorYellow"; + angle=297.85162; + id=75; }; class Item75 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8453.3818,84.3451,25221.348}; - azimut=29.242399; - special="NONE"; - id=93; - side="CIV"; - vehicle="C_man_1_3_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="civ_71"; - description="Civ 71"; - }; - }; + dataType="Marker"; + position[]={21654.904,16.099901,7537.6016}; + name="dp_1_14"; + text="DP 24"; + type="mil_box"; + colorName="ColorYellow"; + angle=144.67552; + id=76; }; class Item76 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={3486.4265,7.7268643,12951.497}; - azimut=-174.52; - offsetY=0.5; - special="NONE"; - id=94; - side="CIV"; - vehicle="C_man_1"; - leader=1; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Market"",life_fnc_virt_menu,""market""];"; - }; - }; + dataType="Marker"; + position[]={20488.617,32.754906,8805.3506}; + name="dp_1_15"; + text="DP 23"; + type="mil_box"; + colorName="ColorYellow"; + angle=315.43076; + id=77; }; class Item77 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={14034.074,25.37278,18759.867}; - azimut=-230.213; - special="NONE"; - id=95; - side="CIV"; - vehicle="C_man_p_beggar_F_afro"; - leader=1; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Car Shop"",life_fnc_vehicleShopMenu,[""civ_car"",civilian,""civ_car_3"",""civ"",""Bruce's New & Used Auto's""]];"; - }; - }; + dataType="Marker"; + position[]={10393.356,123.94481,19064.67}; + name="dp_1_16"; + text="DP 5"; + type="mil_box"; + colorName="ColorYellow"; + id=78; }; class Item78 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={14195.179,29.538862,18714.264}; - azimut=-137.39101; - special="NONE"; - id=96; - side="CIV"; - vehicle="C_man_polo_3_F"; - leader=1; - skill=0.60000002; - text="dp_7"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - }; + dataType="Marker"; + position[]={12576.474,15.308428,14367.098}; + name="dp_1_17"; + text="DP 10"; + type="mil_box"; + colorName="ColorYellow"; + id=79; }; class Item79 { - side="CIV"; - class Vehicles - { - items=110; - class Item0 - { - position[]={8354.2715,85.512779,24953.012}; - azimut=-201.90874; - special="NONE"; - id=97; - side="CIV"; - vehicle="C_man_1"; - leader=1; - rank="COLONEL"; - skill=0.60000002; - text="master_group"; - init="this enableSimulation false; this allowDamage false; this hideObject true;"; - description="Master Group for NPC's"; - }; - class Item1 - { - position[]={9195.1211,14.397862,21677.949}; - azimut=-178.40401; - special="NONE"; - id=98; - side="EAST"; - vehicle="O_Soldier_F"; - skill=0.60000002; - text="reb_1"; - init="removeallWeapons this; this enableSimulation false; this allowDamage false; this addAction[""Rebel Market"",life_fnc_virt_menu,""rebel""]; this addAction[""Rebel Clothing Shop"",life_fnc_clothingMenu,""reb"",0,false,false,"""",' license_civ_rebel && playerSide == civilian']; this addAction[""Rebel Weapon Shop"",life_fnc_weaponShopMenu,""rebel"",0,false,false,"""",' license_civ_rebel && playerSide == civilian']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""rebel"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""rebel"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""rebel"",0,false,false,"""",' !license_civ_rebel && playerSide == civilian ']; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; - }; - class Item2 - { - position[]={14565.777,45.353317,20771.82}; - azimut=-245.22974; - special="NONE"; - id=99; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_6"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item3 - { - position[]={14027.133,26.969978,18703.957}; - azimut=-25.8384; - special="NONE"; - id=100; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - text="license_shop_1"; - init="this allowDamage false; this enableSimulation false; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""driver"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""driver"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""driver"",0,false,false,"""",' !license_civ_driver && playerSide == civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""boat"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""boat"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""boat"",0,false,false,"""",' !license_civ_boat && playerSide == civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""pilot"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""pilot"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""pilot"",0,false,false,"""",' !license_civ_pilot && playerSide == civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""trucking"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""trucking"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""trucking"",0,false,false,"""",' !license_civ_trucking && playerSide == civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""home"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""home"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""home"",0,false,false,"""",' !license_civ_home && playerSide == civilian ']; this setVariable[""realname"",""License Shop""];"; - }; - class Item4 - { - position[]={10394.297,123.83735,19065.555}; - azimut=-245.22974; - special="NONE"; - id=101; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_5"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item5 - { - position[]={8639.8613,180.92201,18281.281}; - azimut=-394.40573; - special="NONE"; - id=102; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_3"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item6 - { - position[]={14042.346,24.351183,18787.68}; - azimut=-174.51674; - offsetY=0.5; - special="NONE"; - id=103; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Market"",life_fnc_virt_menu,""market""];"; - }; - class Item7 - { - position[]={4659.7007,293.05289,21403.813}; - azimut=-139.58174; - special="NONE"; - id=104; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_4"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item8 - { - position[]={6263.9048,43,16263.942}; - azimut=-201.909; - special="NONE"; - id=105; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Process Oil"",life_fnc_processAction,""oil"",0,false,false,"""",' life_inv_oilUnprocessed > 0 && !life_is_processing']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""oil"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""oil"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""oil"",0,false,false,"""",' !license_civ_oil && playerSide == civilian '];"; - }; - class Item9 - { - position[]={4934.9546,77.797394,16147.1}; - azimut=-174.68474; - special="NONE"; - id=106; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_2"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item10 - { - position[]={12311.719,24.129244,15699.792}; - azimut=-245.22971; - offsetY=0.40000001; - special="NONE"; - id=107; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_12"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item11 - { - position[]={9192.7813,121.31921,15832.157}; - azimut=-202.26274; - special="NONE"; - id=108; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_11"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item12 - { - position[]={10234.658,95.312424,14852.259}; - azimut=-47.4314; - special="NONE"; - id=109; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Process Iron"",life_fnc_processAction,""iron"",0,false,false,"""",' life_inv_ironUnrefined > 0 && !life_is_processing']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""iron"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""iron"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""iron"",0,false,false,"""",' !license_civ_iron && playerSide == civilian '];"; - }; - class Item13 - { - position[]={3491.488,19.496876,14146.168}; - azimut=-172.9617; - special="NONE"; - id=110; - side="CIV"; - vehicle="C_man_polo_6_F"; - skill=0.60000002; - text="Dealer_1"; - init="removeAllWeapons this; this allowDamage false; this enableSimulation false; this addAction[""Drug Dealer"",life_fnc_virt_menu,""drugdealer"",0,false,false,"""",' vehicle player == player && player distance _target < 5 && playerSide == civilian ']; this addAction[""Question Dealer"",life_fnc_questionDealer,"""",0,false,false,"""",' vehicle player == player && player distance _target < 5 && playerSide == west && !life_action_inUse '];"; - }; - class Item14 - { - position[]={3914.7332,16.283094,13592.893}; - azimut=-47.702995; - special="NONE"; - id=111; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_missions"; - init="this allowDamage false; this enableSimulation false; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item15 - { - position[]={4140.8638,52.117916,11767.113}; - azimut=-245.22974; - special="NONE"; - id=112; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_1"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item16 - { - position[]={5096.4019,50.381977,11267.129}; - azimut=-123.21185; - special="NONE"; - id=113; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_8"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item17 - { - position[]={3759.2966,34.353596,12373.375}; - azimut=-214.9127; - special="NONE"; - id=114; - side="CIV"; - vehicle="C_man_p_shorts_1_F_afro"; - skill=0.60000002; - text="carshop1_2"; - init="this enableSimulation false; this allowDamage false; this addAction[""Truck Shop"",life_fnc_vehicleShopMenu,[""civ_truck"",civilian,""civ_truck_1"",""civ"",""Bruce's New & Used Trucks""]];"; - }; - class Item18 - { - position[]={10385.096,27.72389,13200.513}; - azimut=-59.367298; - offsetY=0.1; - special="NONE"; - id=115; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Process Marijuana"",life_fnc_processAction,""marijuana"",0,false,false,"""",' life_inv_cannabis > 0 && !life_is_processing']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""marijuana"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""marijuana"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""marijuana"",0,false,false,"""",' !license_civ_marijuana && playerSide == civilian '];"; - }; - class Item19 - { - position[]={12578.539,15.347872,14367.527}; - azimut=-203.32474; - special="NONE"; - id=116; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_10"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item20 - { - position[]={14678.168,17.91,16770.887}; - azimut=-188.1707; - special="NONE"; - id=117; - side="CIV"; - vehicle="C_man_w_worker_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Helicopter Shop"",life_fnc_vehicleShopMenu,[""civ_air"",civilian,[""civ_air_1"",""civ_air_1_2""],""civ"",""Carl's Airial Auto's""]];"; - }; - class Item21 - { - position[]={14420.35,18.719999,16240.26}; - azimut=33.83609; - special="NONE"; - id=118; - side="CIV"; - vehicle="C_man_w_worker_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Service Helicopter"",life_fnc_serviceChopper];"; - }; - class Item22 - { - position[]={14327.697,18.496597,17426.902}; - azimut=-187.52769; - offsetY=0.69999999; - special="NONE"; - id=119; - side="CIV"; - vehicle="C_man_polo_6_F"; - skill=0.60000002; - text="Dealer_2"; - init="removeAllWeapons this; this allowDamage false; this enableSimulation false; this addAction[""Drug Dealer"",life_fnc_virt_menu,""drugdealer"",0,false,false,"""",' vehicle player == player && player distance _target < 5 && playerSide == civilian ']; this addAction[""Question Dealer"",life_fnc_questionDealer,"""",0,false,false,"""",' vehicle player == player && player distance _target < 5 && playerSide == west && !life_action_inUse '];"; - }; - class Item23 - { - position[]={18815.227,31.750864,16641.48}; - azimut=-201.98874; - special="NONE"; - id=120; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_13"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item24 - { - position[]={18067.703,22.518396,15194.771}; - azimut=-245.22974; - special="NONE"; - id=121; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_19"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item25 - { - position[]={19410.316,40.129436,13218.984}; - azimut=-245.22974; - special="NONE"; - id=122; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_21"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item26 - { - position[]={21383.93,22.008587,16413.449}; - azimut=-306.97372; - special="NONE"; - id=123; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_15"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item27 - { - position[]={20948.367,42.998203,16965.035}; - azimut=-245.22974; - special="NONE"; - id=124; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_14"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item28 - { - position[]={25573.992,19.70113,21312.02}; - azimut=-306.07974; - offsetY=0.40000001; - special="NONE"; - id=125; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Market"",life_fnc_virt_menu,""market""];"; - }; - class Item29 - { - position[]={26849.723,24.090055,24593.18}; - azimut=-188.1707; - special="NONE"; - id=126; - side="CIV"; - vehicle="C_man_w_worker_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Helicopter Shop"",life_fnc_vehicleShopMenu,[""civ_air"",civilian,[""civ_air_2"",""civ_air_2_1""],""civ"",""Carl's Airial Auto's""]];"; - }; - class Item30 - { - position[]={28308.348,14.85841,25768.813}; - azimut=-484.48874; - special="NONE"; - id=127; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_20"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item31 - { - position[]={19970.723,59.632294,11422.441}; - azimut=-307.37775; - special="NONE"; - id=128; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_22"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item32 - { - position[]={20785.332,36.072971,6769.375}; - azimut=-270.55573; - special="NONE"; - id=129; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_25"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item33 - { - position[]={9085.9199,20.71562,12039.39}; - azimut=-174.51674; - offsetY=0.60000002; - special="NONE"; - id=130; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Market"",life_fnc_virt_menu,""market""];"; - }; - class Item34 - { - position[]={9026.6758,23.635973,11975.297}; - azimut=-159.12073; - offsetY=0.5; - special="NONE"; - id=131; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_9"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item35 - { - position[]={8956.5781,27.331907,12000.164}; - azimut=-246.86673; - offsetY=0.60000002; - special="NONE"; - id=132; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Clothing Store"",life_fnc_clothingMenu,""bruce""];"; - }; - class Item36 - { - position[]={16992.637,16.346601,12867.813}; - azimut=-213.84171; - special="NONE"; - id=133; - side="CIV"; - vehicle="C_man_p_beggar_F_afro"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Car Shop"",life_fnc_vehicleShopMenu,[""civ_car"",civilian,""civ_car_2"",""civ"",""Bruce's New & Used Auto's""]];"; - }; - class Item37 - { - position[]={21653.066,16.098463,7537.1172}; - azimut=-100.55483; - special="NONE"; - id=134; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_24"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item38 - { - position[]={20490.113,32.764435,8806.7168}; - azimut=-289.79874; - special="NONE"; - id=135; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_23"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item39 - { - position[]={3406.0632,1.9596063,12894.656}; - azimut=-60.934059; - offsetY=0.1; - special="NONE"; - id=136; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Fish Market"",life_fnc_virt_menu,""fishmarket""];"; - }; - class Item40 - { - position[]={3772.1619,18.85,12987.023}; - azimut=-85.909164; - special="NONE"; - id=137; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Medical Assistance"",life_fnc_healHospital];"; - }; - class Item41 - { - position[]={3045.5417,2.026145,12612.363}; - azimut=-118.53979; - special="NONE"; - id=138; - side="CIV"; - vehicle="C_man_shorts_3_F_euro"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Boat Shop"",life_fnc_vehicleShopMenu,[""civ_ship"",civilian,""civ_ship_1"",""civ"",""Billy's Boat Rentals & Ownership""]]; this addAction[""Vehicle Garage"", { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""TON_fnc_getVehicles"",2]; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""civ_ship_1""; life_garage_type = ""Ship""; },"""",0,false,false,"""",'playerSide == civilian']; this addAction[""Store vehicle in Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store'];"; - }; - class Item42 - { - position[]={3363.8621,4.7657833,13063.184}; - azimut=-287.85175; - special="NONE"; - id=139; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Clothing Store"",life_fnc_clothingMenu,""bruce""];"; - }; - class Item43 - { - position[]={3638.7576,10.190128,13076.247}; - azimut=-356.62799; - special="NONE"; - id=140; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - text="license_shop"; - init="this allowDamage false; this enableSimulation false; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""driver"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""driver"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""driver"",0,false,false,"""",' !license_civ_driver && playerSide == civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""boat"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""boat"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""boat"",0,false,false,"""",' !license_civ_boat && playerSide == civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""pilot"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""pilot"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""pilot"",0,false,false,"""",' !license_civ_pilot && playerSide == civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""trucking"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""trucking"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""trucking"",0,false,false,"""",' !license_civ_trucking && playerSide == civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""home"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""home"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""home"",0,false,false,"""",' !license_civ_home && playerSide == civilian ']; this setVariable[""realname"",""License Shop""];"; - }; - class Item44 - { - position[]={3669.6492,10.449143,13109.564}; - azimut=-81.846298; - special="NONE"; - id=141; - side="CIV"; - vehicle="C_man_p_beggar_F_afro"; - skill=0.60000002; - text="carshop1"; - init="this enableSimulation false; this allowDamage false; this addAction[""Car Shop"",life_fnc_vehicleShopMenu,[""civ_car"",civilian,[""civ_car_1"",""civ_car_1_1""],""civ"",""Bruce's New & Used Auto's""]]; this setVariable[""realname"", ""Car Shop""];"; - }; - class Item45 - { - position[]={3480.5535,2.6743515,13229.398}; - azimut=-37.968994; - offsetY=0.5; - special="NONE"; - id=142; - side="CIV"; - vehicle="C_man_p_fugitive_F_asia"; - skill=0.60000002; - text="carshop1_3"; - init="this enableSimulation false; this allowDamage false; this addAction[""General Store"",life_fnc_weaponShopMenu,""genstore""];"; - }; - class Item46 - { - position[]={3427.5671,2.5648546,12733.93}; - azimut=-102.054; - special="NONE"; - id=143; - side="WEST"; - vehicle="B_diver_F"; - skill=0.60000002; - init="this allowDamage false; removeallWeapons this; this enableSimulation false; this addAction[""Diving Shop"",life_fnc_clothingMenu,""dive""]; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""dive"" >> ""displayName"")),[(getNumber(missionConfigFile >> ""Licenses"" >> ""dive"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""dive"",0,false,false,"""",' !license_civ_dive && playerSide == civilian '];"; - }; - class Item47 - { - position[]={3171.156,1.8939636,12885.018}; - azimut=-290.59473; - special="NONE"; - id=144; - side="WEST"; - vehicle="B_RangeMaster_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Boat Shop"",life_fnc_vehicleShopMenu,[""cop_ship"",west,""cop_ship_1"",""cop"",""APD - Kavala District - Boat Store""]]; this addAction[""Store vehicle in Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store'];"; - }; - class Item48 - { - position[]={3199.7566,2.2495062,12924.143}; - azimut=-188.1707; - special="NONE"; - id=145; - side="WEST"; - vehicle="B_RangeMaster_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Helicopter Shop"",life_fnc_vehicleShopMenu,[""cop_air"",west,""cop_air_1"",""cop"",""APD - Kavala District""]]; this addAction[""Vehicle Garage"", { [getPlayerUID player,playerSide,""Air"",player] remoteExecCall [""TON_fnc_getVehicles"",2]; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""cop_air_1""; life_garage_type = ""Air""; },"""",0,false,false,"""",'playerSide == west']; this addAction[""Store vehicle in Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store'];"; - }; - class Item49 - { - position[]={3240.3093,2.137604,12953.059}; - azimut=86.662399; - special="NONE"; - id=146; - side="WEST"; - vehicle="B_RangeMaster_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Vehicle Shop"",life_fnc_vehicleShopMenu,[""cop_car"",west,""cop_car_1"",""cop"",""APD - Kavala District""]]; this addAction[""Vehicle Garage"", { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""TON_fnc_getVehicles"",2]; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""cop_car_1""; life_garage_type = ""Car""; },"""",0,false,false,"""",'playerSide == west']; this addAction[""Store vehicle in Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store']; this setVariable[""realname"",""Cop Vehicle Store""];"; - }; - class Item50 - { - position[]={3274.0876,2.1989954,12975.66}; - azimut=182.05701; - offsetY=0.2; - special="NONE"; - id=147; - side="WEST"; - vehicle="B_RangeMaster_F"; - skill=0.60000002; - text="h1_3"; - init="this enableSimulation false; this addAction[""Cop Item Shop"",life_fnc_virt_menu,""cop""]; this allowDamage false; this addAction[""Cop Clothing Shop"",life_fnc_clothingMenu,""cop""]; this addAction[""Cop Weapon Shop"",life_fnc_weaponShopMenu,""cop_basic""]; this addAction[""Patrol Officer Weapon Shop"",life_fnc_weaponShopMenu,""cop_patrol""]; this addAction[""Sergeant Weapon Shop"",life_fnc_weaponShopMenu,""cop_sergeant""]; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""cAir"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""cAir"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""cAir"",0,false,false,"""",' !license_cop_cAir && playerSide == west ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""cg"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""cg"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""cg"",0,false,false,"""",' !license_cop_cg && playerSide == west '];"; - }; - class Item51 - { - position[]={25666.059,19.318722,21296.559}; - azimut=-417.83801; - special="NONE"; - id=148; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Clothing Store"",life_fnc_clothingMenu,""bruce""];"; - }; - class Item52 - { - position[]={25831.789,20.878731,21446.148}; - azimut=-81.846283; - special="NONE"; - id=149; - side="CIV"; - vehicle="C_man_p_beggar_F_afro"; - skill=0.60000002; - text="carshop4"; - init="this enableSimulation false; this allowDamage false; this addAction[""Car Shop"",life_fnc_vehicleShopMenu,[""civ_car"",civilian,""civ_car_4"",""civ"",""Bruce's New & Used Auto's""]];"; - }; - class Item53 - { - position[]={25641.063,19.611578,21308.398}; - azimut=-245.22974; - special="NONE"; - id=150; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_16"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item54 - { - position[]={14161.371,19.161364,16299.344}; - azimut=-188.1707; - special="NONE"; - id=151; - side="WEST"; - vehicle="B_RangeMaster_F"; - skill=0.60000002; - init="removeallWeapons this; this enableSimulation false; this addAction[""Cop Item Shop"",life_fnc_virt_menu,""cop""]; this allowDamage false; this enableSimulation false; this allowDamage false; this addAction[""Helicopter Shop"",life_fnc_vehicleShopMenu,[""cop_airhq"",west,""cop_air_2"",""cop"",""APD - Air HQ""]]; this addAction[""Vehicle Garage"", { [getPlayerUID player,playerSide,""Air"",player] remoteExecCall [""TON_fnc_getVehicles"",2]; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""cop_air_2""; life_garage_type = ""Air""; },"""",0,false,false,"""",'playerSide == west']; this addAction[""Store vehicle in Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store'];"; - }; - class Item55 - { - position[]={13791.23,20.283577,18932.313}; - azimut=-78.83429; - special="NONE"; - id=152; - side="WEST"; - vehicle="B_RangeMaster_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Vehicle Shop"",life_fnc_vehicleShopMenu,[""cop_car"",west,""cop_car_2"",""cop"",""APD - Athira District""]]; this addAction[""Vehicle Garage"", { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""TON_fnc_getVehicles"",2]; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""cop_car_2""; life_garage_type = ""Car""; },"""",0,false,false,"""",'playerSide == west']; this addAction[""Store vehicle in Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store']; "; - }; - class Item56 - { - position[]={16591.348,11,12719.027}; - azimut=37.43454; - special="NONE"; - id=153; - side="WEST"; - vehicle="B_RangeMaster_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Vehicle Shop"",life_fnc_vehicleShopMenu,[""cop_car"",west,""cop_car_3"",""cop"",""APD - Pygros District""]]; this addAction[""Vehicle Garage"", { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""TON_fnc_getVehicles"",2]; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""cop_car_3""; life_garage_type = ""Car""; },"""",0,false,false,"""",'playerSide == west']; this addAction[""Store vehicle in Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store']; "; - }; - class Item57 - { - position[]={26975.305,20.052069,23264.168}; - azimut=-385.41574; - special="NONE"; - id=154; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_17"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item58 - { - position[]={20884.551,2.7325172,14623.766}; - azimut=-157.79671; - special="NONE"; - id=155; - side="CIV"; - vehicle="C_man_polo_6_F"; - skill=0.60000002; - text="Dealer_3"; - init="removeAllWeapons this; this allowDamage false; this enableSimulation false; this addAction[""Drug Dealer"",life_fnc_virt_menu,""drugdealer"",0,false,false,"""",' vehicle player == player && player distance _target < 5 && playerSide == civilian ']; this addAction[""Question Dealer"",life_fnc_questionDealer,"""",0,false,false,"""",' vehicle player == player && player distance _target < 5 && playerSide == west && !life_action_inUse '];"; - }; - class Item59 - { - position[]={25802.139,20.749359,21408.693}; - azimut=-225.541; - offsetY=0.40000001; - special="NONE"; - id=156; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - text="license_shop_2"; - init="this allowDamage false; this enableSimulation false; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""driver"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""driver"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""driver"",0,false,false,"""",' !license_civ_driver && playerSide == civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""boat"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""boat"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""boat"",0,false,false,"""",' !license_civ_boat && playerSide == civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""pilot"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""pilot"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""pilot"",0,false,false,"""",' !license_civ_pilot && playerSide == civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""trucking"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""trucking"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""trucking"",0,false,false,"""",' !license_civ_trucking && playerSide == civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""home"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""home"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""home"",0,false,false,"""",' !license_civ_home && playerSide == civilian ']; this setVariable[""realname"",""License Shop""];"; - }; - class Item60 - { - position[]={25780.08,20.214588,21352.398}; - azimut=-40.756268; - offsetY=0.5; - special="NONE"; - id=157; - side="CIV"; - vehicle="C_man_p_fugitive_F_asia"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""General Store"",life_fnc_weaponShopMenu,""genstore""];"; - }; - class Item61 - { - position[]={16994.877,15.860207,12660.684}; - azimut=-333.66699; - offsetY=0.1; - special="NONE"; - id=158; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - text="license_shop_3"; - init="this allowDamage false; this enableSimulation false; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""driver"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""driver"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""driver"",0,false,false,"""",' !license_civ_driver && playerSide == civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""boat"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""boat"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""boat"",0,false,false,"""",' !license_civ_boat && playerSide == civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""pilot"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""pilot"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""pilot"",0,false,false,"""",' !license_civ_pilot && playerSide == civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""trucking"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""trucking"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""trucking"",0,false,false,"""",' !license_civ_trucking && playerSide == civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""home"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""home"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""home"",0,false,false,"""",' !license_civ_home && playerSide == civilian ']; this setVariable[""realname"",""License Shop""];"; - }; - class Item62 - { - position[]={16805.391,23.936972,12663.83}; - azimut=-79.333046; - special="NONE"; - id=159; - side="CIV"; - vehicle="C_man_polo_3_F"; - skill=0.60000002; - text="dp_18"; - init="this allowDamage false; this enableSimulation false; this addAction[""Deliver Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[""Get Delivery Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; - }; - class Item63 - { - position[]={16813.699,23.954201,12624.2}; - azimut=-356.10599; - offsetY=1.26305; - special="NONE"; - id=160; - side="CIV"; - vehicle="C_man_p_fugitive_F_asia"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""General Store"",life_fnc_weaponShopMenu,""genstore""];"; - }; - class Item64 - { - position[]={12583.018,34.082306,16395.953}; - azimut=77.718811; - special="NONE"; - id=161; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Oil Trader"",life_fnc_virt_menu,""oil""];"; - }; - class Item65 - { - position[]={14344.414,37.078114,18951.988}; - azimut=-201.909; - special="NONE"; - id=162; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Process Diamond"",life_fnc_processAction,""diamond"",0,false,false,"""",' life_inv_diamondUncut > 0 && !life_is_processing']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""diamond"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""diamond"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""diamond"",0,false,false,"""",' !license_civ_diamond && playerSide == civilian '];"; - }; - class Item66 - { - position[]={4929.1216,16.186337,14578.342}; - azimut=254.84227; - offsetY=0.5; - special="NONE"; - id=163; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Glass Trader"",life_fnc_virt_menu,""glass""];"; - }; - class Item67 - { - position[]={5328.0278,22.176325,14478.166}; - azimut=-3.6651614; - special="NONE"; - id=164; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Iron / Copper Trader"",life_fnc_virt_menu,""iron""];"; - }; - class Item68 - { - position[]={9530.334,127.03391,15077.91}; - azimut=-140.979; - special="NONE"; - id=165; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Process Copper"",life_fnc_processAction,""copper"",0,false,false,"""",' life_inv_copperUnrefined > 0 && !life_is_processing']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""copper"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""copper"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""copper"",0,false,false,"""",' !license_civ_copper && playerSide == civilian '];"; - }; - class Item69 - { - position[]={17869.512,2.4159205,18200.68}; - azimut=218.15526; - offsetY=0.5; - special="NONE"; - id=166; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Diamond Trader"",life_fnc_virt_menu,""diamond""];"; - }; - class Item70 - { - position[]={20695.477,4.5523853,19467.426}; - azimut=134.17027; - special="NONE"; - id=167; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Salt Trader"",life_fnc_virt_menu,""salt""];"; - }; - class Item71 - { - position[]={5380.313,77.310104,17923.285}; - azimut=-282.215; - special="NONE"; - id=168; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Process Sand"",life_fnc_processAction,""sand"",0,false,false,"""",' life_inv_sand > 0 && !life_is_processing']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""sand"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""sand"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""sand"",0,false,false,"""",' !license_civ_sand && playerSide == civilian '];"; - }; - class Item72 - { - position[]={16566.492,11,12746.075}; - azimut=197.216; - special="NONE"; - id=169; - side="WEST"; - vehicle="B_RangeMaster_F"; - skill=0.60000002; - text="h1_3_1"; - init="this enableSimulation false; this addAction[""Cop Item Shop"",life_fnc_virt_menu,""cop""]; this allowDamage false; this addAction[""Cop Clothing Shop"",life_fnc_clothingMenu,""cop""]; this addAction[""Cop Weapon Shop"",life_fnc_weaponShopMenu,""cop_basic""]; this addAction[""Patrol Officer Weapon Shop"",life_fnc_weaponShopMenu,""cop_patrol""]; this addAction[""Sergeant Weapon Shop"",life_fnc_weaponShopMenu,""cop_sergeant""]; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""cAir"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""cAir"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""cAir"",0,false,false,"""",' !license_cop_cAir && playerSide == west ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""cg"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""cg"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""cg"",0,false,false,"""",' !license_cop_cg && playerSide == west '];"; - }; - class Item73 - { - position[]={13823.305,20.478062,18985.695}; - azimut=182.05701; - special="NONE"; - id=170; - side="WEST"; - vehicle="B_RangeMaster_F"; - skill=0.60000002; - text="h1_3_2"; - init="this enableSimulation false; this addAction[""Cop Item Shop"",life_fnc_virt_menu,""cop""]; this allowDamage false; this addAction[""Cop Clothing Shop"",life_fnc_clothingMenu,""cop""]; this addAction[""Cop Weapon Shop"",life_fnc_weaponShopMenu,""cop_basic""]; this addAction[""Patrol Officer Weapon Shop"",life_fnc_weaponShopMenu,""cop_patrol""]; this addAction[""Sergeant Weapon Shop"",life_fnc_weaponShopMenu,""cop_sergeant""]; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""cAir"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""cAir"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""cAir"",0,false,false,"""",' !license_cop_cAir && playerSide == west ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""cg"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""cg"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""cg"",0,false,false,"""",' !license_cop_cg && playerSide == west '];"; - }; - class Item74 - { - position[]={27363.262,6.3343554,24467}; - azimut=-482.444; - special="NONE"; - id=171; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Process Salt"",life_fnc_processAction,""salt"",0,false,false,"""",' life_inv_saltUnrefined > 0 && !life_is_processing']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""salt"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""salt"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""salt"",0,false,false,"""",' !license_civ_salt && playerSide == civilian '];"; - }; - class Item75 - { - position[]={14075.289,23.405972,18559.758}; - azimut=-329.14673; - offsetY=0.30000001; - special="NONE"; - id=172; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Clothing Store"",life_fnc_clothingMenu,""bruce""];"; - }; - class Item76 - { - position[]={9327.2734,14.64248,11911.456}; - azimut=16.1336; - special="NONE"; - id=173; - side="WEST"; - vehicle="B_RangeMaster_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Gun Store"",life_fnc_weaponShopMenu,""gun"",0,false,false,"""",' license_civ_gun && playerSide == civilian']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""gun"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""gun"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""gun"",0,false,false,"""",' !license_civ_gun && playerSide == civilian '];"; - }; - class Item77 - { - position[]={12300.223,123.98399,8888.5703}; - azimut=-60.0494; - special="NONE"; - id=174; - side="EAST"; - vehicle="O_Soldier_F"; - skill=0.60000002; - text="reb_1_1"; - init="removeallWeapons this; this enableSimulation false; this allowDamage false; this addAction[""Rebel Market"",life_fnc_virt_menu,""rebel""]; this addAction[""Rebel Clothing Shop"",life_fnc_clothingMenu,""reb"",0,false,false,"""",' license_civ_rebel && playerSide == civilian']; this addAction[""Rebel Weapon Shop"",life_fnc_weaponShopMenu,""rebel"",0,false,false,"""",' license_civ_rebel && playerSide == civilian']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""rebel"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""rebel"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""rebel"",0,false,false,"""",' !license_civ_rebel && playerSide == civilian ']; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; - }; - class Item78 - { - position[]={20079.059,100.96792,6743.9932}; - azimut=-547.82501; - special="NONE"; - id=175; - side="EAST"; - vehicle="O_Soldier_F"; - skill=0.60000002; - text="reb_1_2"; - init="removeallWeapons this; this enableSimulation false; this allowDamage false; this addAction[""Rebel Market"",life_fnc_virt_menu,""rebel""]; this addAction[""Rebel Clothing Shop"",life_fnc_clothingMenu,""reb"",0,false,false,"""",' license_civ_rebel && playerSide == civilian']; this addAction[""Rebel Weapon Shop"",life_fnc_weaponShopMenu,""rebel"",0,false,false,"""",' license_civ_rebel && playerSide == civilian']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""rebel"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""rebel"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""rebel"",0,false,false,"""",' !license_civ_rebel && playerSide == civilian ']; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; - }; - class Item79 - { - position[]={13947.68,22.936253,18663.887}; - azimut=48.979736; - offsetY=0.5; - special="NONE"; - id=176; - side="CIV"; - vehicle="C_man_p_fugitive_F_asia"; - skill=0.60000002; - text="carshop1_3_1"; - init="this enableSimulation false; this allowDamage false; this addAction[""General Store"",life_fnc_weaponShopMenu,""genstore""];"; - }; - class Item80 - { - position[]={23645.043,51.117146,21801.219}; - azimut=-482.448; - special="NONE"; - id=177; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Process Heroin"",life_fnc_processAction,""heroin"",0,false,false,"""",' life_inv_heroinUnprocessed > 0 && !life_is_processing']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""heroin"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""heroin"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""heroin"",0,false,false,"""",' !license_civ_heroin && playerSide == civilian '];"; - }; - class Item81 - { - position[]={25723.953,18.245251,21277.664}; - azimut=220.3873; - special="NONE"; - id=178; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Vehicle Garage"", { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""TON_fnc_getVehicles"",2]; life_garage_type = ""Car""; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""car_g_2""; }]; this addAction[""Store vehicle in Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store'];"; - }; - class Item82 - { - position[]={14473.48,19.16485,17753.891}; - azimut=-207.7077; - special="NONE"; - id=179; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Vehicle Garage"", { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""TON_fnc_getVehicles"",2]; life_garage_type = ""Car""; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""car_g_3""; }]; this addAction[""Store vehicle in Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store'];"; - }; - class Item83 - { - position[]={3739.4626,12.757431,13267.383}; - azimut=51.994339; - special="NONE"; - id=180; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Vehicle Garage"", { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""TON_fnc_getVehicles"",2]; life_garage_type = ""Car""; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""car_g_1""; }]; this addAction[""Store vehicle in Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store'];"; - }; - class Item84 - { - position[]={14259.365,19.363842,16302.626}; - azimut=160.00729; - special="NONE"; - id=181; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Vehicle Garage"", { [getPlayerUID player,playerSide,""Air"",player] remoteExecCall [""TON_fnc_getVehicles"",2]; life_garage_type = ""Air""; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""air_g_1""; }]; this addAction[""Store vehicle in Garage"", { private[""_nearVehicle""]; _nearVehicle = nearestObjects[(getPos (_this select 0)),[""Car"",""Ship"",""Air""],35] select 0; if(isNil ""_nearVehicle"") exitWith {hint ""There isn't a vehicle near this NPC."";}; [_nearVehicle,false,(_this select 1)] remoteExecCall [""TON_fnc_vehicleStore"",2]; hint ""The server is trying to store the vehicle please wait....""; life_garage_store = true; },"""",0,false,false,"""",'!life_garage_store'];"; - }; - class Item85 - { - position[]={23539.895,13.28646,19956.793}; - azimut=182.05701; - special="NONE"; - id=182; - side="WEST"; - vehicle="B_RangeMaster_F"; - skill=0.60000002; - text="h1_3_3"; - init="this enableSimulation false; this addAction[""Cop Item Shop"",life_fnc_virt_menu,""cop""]; this allowDamage false; this addAction[""Cop Clothing Shop"",life_fnc_clothingMenu,""cop""]; this addAction[""Cop Weapon Shop"",life_fnc_weaponShopMenu,""cop_basic""]; this addAction[""Patrol Officer Weapon Shop"",life_fnc_weaponShopMenu,""cop_patrol""]; this addAction[""Sergeant Weapon Shop"",life_fnc_weaponShopMenu,""cop_sergeant""]; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""cAir"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""cAir"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""cAir"",0,false,false,"""",' !license_cop_cAir && playerSide == west ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""cg"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""cg"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""cg"",0,false,false,"""",' !license_cop_cg && playerSide == west '];"; - }; - class Item86 - { - position[]={23521.73,12.894951,19941.98}; - azimut=-220.07271; - special="NONE"; - id=183; - side="WEST"; - vehicle="B_RangeMaster_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Vehicle Shop"",life_fnc_vehicleShopMenu,[""cop_car"",west,""cop_car_5"",""cop"",""APD - Highway Patrol""]]; this addAction[""Vehicle Garage"", { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""TON_fnc_getVehicles"",2]; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""cop_car_5""; life_garage_type = ""Car""; },"""",0,false,false,"""",'playerSide == west']; this addAction[""Store vehicle in Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store']; "; - }; - class Item87 - { - position[]={8440.2461,49.496468,12761.034}; - azimut=-482.448; - special="NONE"; - id=184; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Process Cocaine"",life_fnc_processAction,""cocaine"",0,false,false,"""",' life_inv_cocaineUnprocessed > 0 && !life_is_processing']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""cocaine"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""cocaine"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""cocaine"",0,false,false,"""",' !license_civ_cocaine && playerSide == civilian '];"; - }; - class Item88 - { - position[]={17541.879,2.8032763,18940.824}; - azimut=-34.819759; - special="NONE"; - id=185; - side="CIV"; - vehicle="C_man_shorts_3_F_euro"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Boat Shop"",life_fnc_vehicleShopMenu,[""civ_ship"",civilian,""civ_ship_3"",""civ"",""Billy's Boat Rentals & Ownership""]]; this addAction[""Vehicle Garage"", { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""TON_fnc_getVehicles"",2]; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""civ_ship_3""; life_garage_type = ""Ship""; },"""",0,false,false,"""",'playerSide == civilian']; this addAction[""Store vehicle in Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store'];"; - }; - class Item89 - { - position[]={16578.414,14.271221,15989.166}; - azimut=133.9953; - offsetY=0.5; - special="NONE"; - id=186; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Cement Trader"",life_fnc_virt_menu,""cement""];"; - }; - class Item90 - { - position[]={19314.379,21.272188,16543.703}; - azimut=-362.117; - special="NONE"; - id=187; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Process Rock"",life_fnc_processAction,""cement"",0,false,false,"""",' life_inv_rock > 0 && !life_is_processing']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""cement"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""cement"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""cement"",0,false,false,"""",' !license_civ_cement && playerSide == civilian '];"; - }; - class Item91 - { - position[]={11850.023,4.163743,13610.555}; - azimut=-39.4328; - special="NONE"; - id=188; - side="WEST"; - vehicle="B_diver_F"; - skill=0.60000002; - init="this allowDamage false; removeallWeapons this; this enableSimulation false; this addAction[""Diving Shop"",life_fnc_clothingMenu,""dive""]; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""dive"" >> ""displayName"")),[(getNumber(missionConfigFile >> ""Licenses"" >> ""dive"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""dive"",0,false,false,"""",' !license_civ_dive && playerSide == civilian '];"; - }; - class Item92 - { - position[]={16340.838,24.970934,17266.445}; - azimut=16.1336; - offsetY=0.30000001; - special="NONE"; - id=189; - side="WEST"; - vehicle="B_RangeMaster_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Gun Store"",life_fnc_weaponShopMenu,""gun"",0,false,false,"""",' license_civ_gun && playerSide == civilian']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""gun"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""gun"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""gun"",0,false,false,"""",' !license_civ_gun && playerSide == civilian '];"; - }; - class Item93 - { - position[]={10246.57,5.3196239,11272.06}; - azimut=-119.757; - special="NONE"; - id=190; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Wong's Food Cart"",life_fnc_virt_menu,""wongs""];"; - }; - class Item94 - { - position[]={18159.668,26.511209,12838.313}; - azimut=-401.82773; - offsetY=0.1; - special="NONE"; - id=191; - side="CIV"; - vehicle="C_man_p_shorts_1_F_afro"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Truck Shop"",life_fnc_vehicleShopMenu,[""civ_truck"",civilian,[""civ_truck_2"",""civ_truck_2_1""],""civ"",""Bruce's New & Used Trucks""]];"; - }; - class Item95 - { - position[]={8954.4121,69.250305,15502.912}; - azimut=53.410141; - special="NONE"; - id=192; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Chop Shop"",life_fnc_chopShopMenu,""chop_shop_1""];"; - }; - class Item96 - { - position[]={19028.809,23.676563,14554.466}; - azimut=193.47729; - special="NONE"; - id=193; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Chop Shop"",life_fnc_chopShopMenu,""chop_shop_4""];"; - }; - class Item97 - { - position[]={24655.934,17.861176,23161.094}; - azimut=152.80029; - special="NONE"; - id=194; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Chop Shop"",life_fnc_chopShopMenu,""chop_shop_2""];"; - }; - class Item98 - { - position[]={5242.1167,78.91523,11515.902}; - azimut=168.89729; - special="NONE"; - id=195; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Chop Shop"",life_fnc_chopShopMenu,""chop_shop_3""];"; - }; - class Item99 - { - position[]={3736.6462,18.863861,12979.604}; - azimut=-0.00075132097; - special="NONE"; - id=196; - side="WEST"; - vehicle="B_RangeMaster_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""mAir"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""mAir"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""mAir"",0,false,false,"""",' !license_med_mAir && playerSide == independent ']; this addAction[""EMS Item Shop"",life_fnc_weaponShopMenu,""med_basic""]; this addAction[""Vehicle Shop"",life_fnc_vehicleShopMenu,[""med_shop"",independent,""med_car_1"",""med"",""Kavala Hosptial""]]; this addAction[""Helicopter Shop"",life_fnc_vehicleShopMenu,[""med_air_hs"",independent,""medic_spawn_1"",""med"",""Kavala Hosptial""]]; this addAction[""Vehicle Garage"", { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""TON_fnc_getVehicles"",2]; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""med_car_1""; life_garage_type = ""Car""; },"""",0,false,false,"""",'playerSide == independent ']; this addAction[""Helicopter Garage"", { [getPlayerUID player,playerSide,""Air"",player] remoteExecCall [""TON_fnc_getVehicles"",2]; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""medic_spawn_1""; life_garage_type = ""Air""; },"""",0,false,false,"""",'playerSide == independent ']; this addAction[""Store vehicle in Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store']; this setObjectTexture [0,""textures\medic_uniform.jpg""];"; - }; - class Item100 - { - position[]={17486.934,12.867997,13271.752}; - azimut=-39.2113; - special="NONE"; - id=197; - side="WEST"; - vehicle="B_RangeMaster_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""mAir"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""mAir"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""mAir"",0,false,false,"""",' !license_med_mAir && playerSide == independent ']; this addAction[""EMS Item Shop"",life_fnc_weaponShopMenu,""med_basic""]; this addAction[""Vehicle Shop"",life_fnc_vehicleShopMenu,[""med_shop"",independent,""med_car_2"",""med"",""Kavala Hosptial""]]; this addAction[""Helicopter Shop"",life_fnc_vehicleShopMenu,[""med_air_hs"",independent,""medic_spawn_3"",""med"",""Kavala Hosptial""]]; this addAction[""Car Garage"", { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""TON_fnc_getVehicles"",2]; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""med_car_2""; life_garage_type = ""Car""; },"""",0,false,false,"""",'playerSide == independent']; this addAction[""Helicopter Garage"", { [getPlayerUID player,playerSide,""Air"",player] remoteExecCall [""TON_fnc_getVehicles"",2]; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""medic_spawn_3""; life_garage_type = ""Air""; },"""",0,false,false,"""",'playerSide == independent ']; this addAction[""Store vehicle in Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store']; this setObjectTexture [0,""textures\medic_uniform.jpg""];"; - }; - class Item101 - { - position[]={15591.025,18.544863,17191.418}; - azimut=-39.2113; - special="NONE"; - id=198; - side="WEST"; - vehicle="B_RangeMaster_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""mAir"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""mAir"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""mAir"",0,false,false,"""",' !license_med_mAir && playerSide == independent ']; this addAction[""EMS Item Shop"",life_fnc_weaponShopMenu,""med_basic""]; this addAction[""Vehicle Shop"",life_fnc_vehicleShopMenu,[""med_shop"",independent,""med_car_3"",""med"",""Kavala Hosptial""]]; this addAction[""Helicopter Shop"",life_fnc_vehicleShopMenu,[""med_air_hs"",independent,""medic_spawn_2"",""med"",""Kavala Hosptial""]]; this addAction[""Car Garage"", { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""TON_fnc_getVehicles"",2]; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""med_car_3""; life_garage_type = ""Car""; },"""",0,false,false,"""",'playerSide == independent']; this addAction[""Helicopter Garage"", { [getPlayerUID player,playerSide,""Air"",player] remoteExecCall [""TON_fnc_getVehicles"",2]; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""medic_spawn_2""; life_garage_type = ""Air""; },"""",0,false,false,"""",'playerSide == independent ']; this addAction[""Store vehicle in Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store']; this setObjectTexture [0,""textures\medic_uniform.jpg""];"; - }; - class Item102 - { - position[]={9169.8594,14.405441,21655.918}; - azimut=110.00421; - special="NONE"; - id=199; - side="EAST"; - vehicle="O_Soldier_F"; - skill=0.60000002; - text="reb_1_3"; - init="removeallWeapons this; this enableSimulation false; this allowDamage false; this addAction[""Vehicle Shop"",life_fnc_vehicleShopMenu,[""reb_car"",civilian,[""reb_v_1"",""reb_v_1_1""],""reb"",""Rebel Motorpool - Western Side""],0,false,false,"""",'license_civ_rebel'];"; - }; - class Item103 - { - position[]={12293.014,123.5893,8930.6191}; - azimut=198.86729; - special="NONE"; - id=200; - side="EAST"; - vehicle="O_Soldier_F"; - skill=0.60000002; - text="reb_1_3_1"; - init="removeallWeapons this; this enableSimulation false; this allowDamage false; this addAction[""Vehicle Shop"",life_fnc_vehicleShopMenu,[""reb_car"",civilian,""reb_v_2"",""reb"",""Rebel Motorpool - Western Side""],0,false,false,"""",'license_civ_rebel'];"; - }; - class Item104 - { - position[]={22160.629,3.0809033,14480.969}; - azimut=-89.569389; - id=201; - side="WEST"; - vehicle="B_RangeMaster_F"; - skill=0.60000002; - init="removeAllWeapons this; this enableSimulation false; this allowDamage false; this addAction[""Pay Bail"",life_fnc_postBail,"""",0,false,false,"""",' isNil ""life_canpay_bail"" && life_is_arrested '];"; - }; - class Item105 - { - position[]={14167.42,16.735279,16520.02}; - azimut=-44.906559; - special="NONE"; - id=202; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Go-kart Shop"",life_fnc_vehicleShopMenu,[""kart_shop"",civilian,""kart_shop_1"",""civ"",""Bobby's Kart Shack""]]; this addAction[""Clothing Store"",life_fnc_clothingMenu,""kart""];"; - }; - class Item106 - { - position[]={13795.639,60.234467,6395.7607}; - azimut=201.827; - special="NONE"; - id=203; - side="CIV"; - vehicle="C_man_p_fugitive_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Gold Buyer"",life_fnc_virt_menu,""gold""];"; - }; - class Item107 - { - position[]={12682.571,1.9675891,14215.602}; - azimut=-34.819; - special="NONE"; - id=204; - side="CIV"; - vehicle="C_man_shorts_3_F_euro"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Boat Shop"",life_fnc_vehicleShopMenu,[""civ_ship"",civilian,""civ_ship_2"",""civ"",""Billy's Boat Rentals & Ownership""]]; this addAction[""Vehicle Garage"", { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""TON_fnc_getVehicles"",2]; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""civ_ship_2""; life_garage_type = ""Ship""; },"""",0,false,false,"""",'playerSide == civilian']; this addAction[""Store vehicle in Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store'];"; - }; - class Item108 - { - position[]={16555.859,1.8132056,15550.087}; - azimut=-68.5467; - special="NONE"; - id=205; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Wong's Food Cart"",life_fnc_virt_menu,""wongs""];"; - }; - class Item109 - { - position[]={3308.0859,12.680939,14142.578}; - azimut=-57.2556; - special="NONE"; - id=206; - side="CIV"; - vehicle="C_man_1"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Wong's Food Cart"",life_fnc_virt_menu,""wongs""];"; - }; - }; + dataType="Marker"; + position[]={9190.6123,121.27175,15831.551}; + name="dp_1_19"; + text="DP 11"; + type="mil_box"; + colorName="ColorYellow"; + id=80; + }; + class Item80 + { + dataType="Marker"; + position[]={9025.9814,23.697897,11975.625}; + name="dp_1_20"; + text="DP 9"; + type="mil_box"; + colorName="ColorYellow"; + angle=86.109375; + id=81; + }; + class Item81 + { + dataType="Marker"; + position[]={5097.6162,50.34985,11267.257}; + name="dp_1_18"; + text="DP 8"; + type="mil_box"; + colorName="ColorYellow"; + angle=122.0182; + id=82; + }; + class Item82 + { + dataType="Marker"; + position[]={14563.34,45.28418,20771.504}; + name="dp_1_21"; + text="DP 6"; + type="mil_box"; + colorName="ColorYellow"; + id=83; + }; + class Item83 + { + dataType="Marker"; + position[]={4138.9399,52.056519,11766.21}; + name="dp_1_18_1"; + text="DP 1"; + type="mil_box"; + colorName="ColorYellow"; + id=84; + }; + class Item84 + { + dataType="Marker"; + position[]={4932.7715,77.810303,16146.252}; + name="dp_1_18_2"; + text="DP 2"; + type="mil_box"; + colorName="ColorYellow"; + id=85; + }; + class Item85 + { + dataType="Marker"; + position[]={20783.684,36.263039,6768.6069}; + name="dp_1_14_1"; + text="DP 25"; + type="mil_box"; + colorName="ColorYellow"; + angle=334.67407; + id=86; + }; + class Item86 + { + dataType="Marker"; + position[]={20884.641,2.7453954,14624.866}; + name="Dealer_1_3"; + text="@STR_MAR_Drug_Dealer"; + type="mil_dot"; + colorName="ColorOrange"; + id=87; + }; + class Item87 + { + dataType="Marker"; + position[]={14327.465,18.488745,17427.523}; + name="Dealer_1_4"; + text="@STR_MAR_Drug_Dealer"; + type="mil_dot"; + colorName="ColorOrange"; + angle=302.06683; + id=88; + }; + class Item88 + { + dataType="Marker"; + position[]={25831.131,20.912157,21446.154}; + name="car1_1_1"; + text="@STR_MAR_Car_Shop"; + type="c_car"; + colorName="ColorWhite"; + id=90; + }; + class Item89 + { + dataType="Marker"; + position[]={14344.174,37.080429,18952.045}; + name="diamond_processing"; + text="@STR_MAR_Diamond_Processing"; + type="mil_triangle"; + colorName="ColorBrown"; + id=91; + }; + class Item90 + { + dataType="Marker"; + position[]={9186.0107,27.468599,13990.347}; + name="oil_field_2"; + text="@STR_MAR_Oil_Field"; + type="mil_triangle"; + colorName="ColorBrown"; + id=92; + }; + class Item91 + { + dataType="Marker"; + position[]={9757.7891,231.07008,19445.281}; + name="oil_field_1"; + text="@STR_MAR_Oil_Field"; + type="mil_triangle"; + colorName="ColorBrown"; + id=93; + }; + class Item92 + { + dataType="Marker"; + position[]={11556.398,77.697838,7048.0737}; + name="weed_1"; + text="@STR_MAR_Weed_Field"; + type="mil_dot"; + colorName="Color1_FD_F"; + id=94; + }; + class Item93 + { + dataType="Marker"; + position[]={10390.828,27.723936,13200.983}; + name="Weed_p_1"; + text="@STR_MAR_Weed_Processing"; + type="mil_dot"; + colorName="Color1_FD_F"; + id=95; + }; + class Item94 + { + dataType="Marker"; + position[]={25694.566,20.358076,21346.656}; + name="civ_spawn_4"; + type="Empty"; + id=96; + }; + class Item95 + { + dataType="Marker"; + position[]={25821.314,21.358133,21446.559}; + name="civ_car_4"; + type="Empty"; + angle=269.7457; + id=97; + }; + class Item96 + { + dataType="Marker"; + position[]={22146.869,3.1667604,14481.148}; + name="jail_marker"; + type="Empty"; + id=98; + }; + class Item97 + { + dataType="Marker"; + position[]={3244.9341,2.1102631,12960.808}; + name="cop_car_1"; + type="Empty"; + angle=178.63142; + id=99; + }; + class Item98 + { + dataType="Marker"; + position[]={13780.473,20.25041,18931.313}; + name="cop_car_2"; + type="Empty"; + angle=48.511875; + id=100; + }; + class Item99 + { + dataType="Marker"; + position[]={16597.652,11,12724.459}; + name="cop_car_3"; + type="Empty"; + angle=47.457191; + id=101; + }; + class Item100 + { + dataType="Marker"; + position[]={14166.416,19.370966,16293.32}; + name="cop_air_2"; + type="Empty"; + angle=131.20648; + id=102; + }; + class Item101 + { + dataType="Marker"; + position[]={3194.3025,2,12897.396}; + name="cop_air_1"; + type="Empty"; + angle=185.48511; + id=103; + }; + class Item102 + { + dataType="Marker"; + position[]={14026.765,26.91745,18705.039}; + name="license_shop_1"; + text="@STR_MAR_DMV"; + type="c_unknown"; + colorName="ColorBlue"; + angle=358.09689; + id=104; + }; + class Item103 + { + dataType="Marker"; + position[]={14696.649,17.91,16745.135}; + name="civ_air_1"; + type="Empty"; + angle=308.02133; + id=105; + }; + class Item104 + { + dataType="Marker"; + position[]={14685.702,17.91,16733.902}; + name="civ_air_1_2"; + type="Empty"; + angle=319.56326; + id=106; + }; + class Item105 + { + dataType="Marker"; + position[]={26847.824,24.010233,24593.961}; + name="airshop_1"; + text="@STR_MAR_Air_Shop"; + type="mil_dot"; + colorName="Color1_FD_F"; + id=107; + }; + class Item106 + { + dataType="Marker"; + position[]={26868.67,24.432938,24567.48}; + name="civ_air_2"; + type="Empty"; + angle=308.02112; + id=108; + }; + class Item107 + { + dataType="Marker"; + position[]={26855.113,24.246786,24554.789}; + name="civ_air_2_2"; + type="Empty"; + angle=319.56326; + id=109; + }; + class Item108 + { + dataType="Marker"; + position[]={3764.394,34.275726,12364.51}; + name="civ_truck_1"; + type="Empty"; + angle=131.83951; + id=110; + }; + class Item109 + { + dataType="Marker"; + position[]={28307.711,14.887112,25769.699}; + name="dp_1_15_1"; + text="DP 20"; + type="mil_box"; + colorName="ColorYellow"; + angle=270.68671; + id=111; + }; + class Item110 + { + dataType="Marker"; + position[]={3155.5701,-0.020821352,12871.082}; + name="cop_ship_1"; + type="Empty"; + angle=254.10994; + id=112; + atlOffset=8.5142632; + }; + class Item111 + { + dataType="Marker"; + position[]={3002.437,0.019021351,12651.198}; + name="civ_ship_1"; + text="@STR_MAR_Boat_Spawn"; + type="loc_Quay"; + colorName="ColorOrange"; + id=113; + atlOffset=11.029409; + }; + class Item112 + { + dataType="Marker"; + position[]={9085.4102,20.793713,12038.007}; + name="Gen_3_1_1"; + text="@STR_MAR_Market"; + type="c_unknown"; + colorName="ColorGreen"; + id=114; }; - class Item80 + class Item113 { - side="CIV"; - class Vehicles - { - items=1; - class Item0 - { - position[]={17017.244,15.93158,12628.329}; - azimut=-46.6264; - offsetY=0.69999999; - special="NONE"; - id=207; - side="CIV"; - vehicle="C_man_1"; - leader=1; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Market"",life_fnc_virt_menu,""market""];"; - }; - }; + dataType="Marker"; + position[]={8956.4238,27.330736,11999.08}; + name="Gen_3_3"; + text="@STR_MAR_Bruce_Outfits"; + type="c_unknown"; + colorName="ColorGreen"; + id=115; }; - class Item81 + class Item114 { - side="GUER"; - class Vehicles - { - items=1; - class Item0 - { - position[]={8437.2002,105.64852,25149.426}; - azimut=182.302; - id=208; - side="GUER"; - vehicle="I_Story_Colonel_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="hc_1"; - description="Headless Client"; - }; - }; + dataType="Marker"; + position[]={25665.254,19.308283,21296.332}; + name="Gen_3_4"; + text="@STR_MAR_Bruce_Outfits"; + type="c_unknown"; + colorName="ColorGreen"; + id=116; }; - class Item82 + class Item115 { - side="GUER"; - class Vehicles - { - items=4; - class Item0 - { - position[]={8424.9258,99.930687,25177.225}; - azimut=185.11099; - special="NONE"; - id=209; - side="GUER"; - vehicle="B_medic_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="medic_1"; - description="EMS Medic"; - }; - class Item1 - { - position[]={8425.2324,99.418427,25179.02}; - azimut=185.11099; - special="NONE"; - id=210; - side="GUER"; - vehicle="B_medic_F"; - player="PLAY CDG"; - skill=0.60000002; - text="medic_3"; - description="EMS Medic"; - }; - class Item2 - { - position[]={8427.6777,99.306786,25178.748}; - azimut=185.11099; - special="NONE"; - id=211; - side="GUER"; - vehicle="B_medic_F"; - player="PLAY CDG"; - skill=0.60000002; - text="medic_4"; - description="EMS Medic"; - }; - class Item3 - { - position[]={8428.2236,99.711594,25177.109}; - azimut=185.11099; - special="NONE"; - id=212; - side="GUER"; - vehicle="B_medic_F"; - player="PLAY CDG"; - skill=0.60000002; - text="medic_2"; - description="EMS Medic"; - }; - }; + dataType="Marker"; + position[]={25573.17,19.70323,21312.16}; + name="Gen_3_1_1_1"; + text="@STR_MAR_Market"; + type="c_unknown"; + colorName="ColorGreen"; + id=117; }; - }; - class Vehicles - { - items=525; - class Item0 + class Item116 { - position[]={8065.1616,35.674362,24985.314}; - id=213; - side="EMPTY"; - vehicle="Land_Garbage_line_F"; - skill=0.60000002; - text="bank_obj"; + dataType="Marker"; + position[]={14041.689,24.368345,18787.1}; + name="Gen_3_1_1_2"; + text="@STR_MAR_Market"; + type="c_unknown"; + colorName="ColorGreen"; + id=118; }; - class Item1 + class Item117 { - position[]={8456.1416,49.214363,12762.685}; - azimut=95.442757; - offsetY=3.5; - id=214; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={14074.721,23.343645,18559.061}; + name="Gen_3_4_1"; + text="@STR_MAR_Bruce_Outfits"; + type="c_unknown"; + colorName="ColorGreen"; + id=119; }; - class Item2 + class Item118 { - position[]={8456.3047,49.200241,12764.086}; - azimut=95.442757; - offsetY=3.5; - id=215; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={9530.3555,127.03247,15077.41}; + name="copper_mine_1"; + text="@STR_MAR_Copper_Processing"; + type="mil_box"; + colorName="ColorBrown"; + id=120; }; - class Item3 + class Item119 { - position[]={8424.4277,49.670139,12769.305}; - azimut=-173.17824; - id=216; - side="EMPTY"; - vehicle="FlagSmall_F"; - skill=0.60000002; + dataType="Marker"; + position[]={25801.424,20.775288,21409.266}; + name="license_shop_2"; + text="@STR_MAR_DMV"; + type="c_unknown"; + colorName="ColorBlue"; + angle=358.09689; + id=121; + }; + class Item120 + { + dataType="Marker"; + position[]={16813.541,22.862633,12625.873}; + name="Gen_2"; + text="@STR_MAR_General_Store"; + type="c_unknown"; + colorName="ColorGreen"; + id=122; + }; + class Item121 + { + dataType="Marker"; + position[]={25779.512,20.229164,21352.607}; + name="Gen_2_1"; + text="@STR_MAR_General_Store"; + type="c_unknown"; + colorName="ColorGreen"; + angle=359.3287; + id=123; + }; + class Item122 + { + dataType="Marker"; + position[]={16995.186,15.885057,12661.559}; + name="license_shop_2_1"; + text="@STR_MAR_DMV"; + type="c_unknown"; + colorName="ColorBlue"; + angle=30.32011; + id=124; + }; + class Item123 + { + dataType="Marker"; + position[]={5188.1885,217.79607,20872.66}; + name="cocaine_1"; + text="@STR_MAR_Cocaine_Field"; + type="mil_dot"; + colorName="Color1_FD_F"; + id=125; + }; + class Item124 + { + dataType="Marker"; + position[]={5187.9771,217.27846,20871.367}; + name="coke_area"; + markerType="ELLIPSE"; + type="Empty"; + colorName="ColorWhite"; + a=30; + b=30; + id=126; + }; + class Item125 + { + dataType="Marker"; + position[]={12582.778,34.149235,16394.836}; + name="oil_trader"; + text="@STR_MAR_Oil_Trader"; + type="b_unknown"; + colorName="ColorOrange"; + id=127; + }; + class Item126 + { + dataType="Marker"; + position[]={20695.104,4.5465231,19467.057}; + name="salt_trader"; + text="@STR_MAR_Salt_Trader"; + type="b_unknown"; + colorName="ColorOrange"; + id=128; + }; + class Item127 + { + dataType="Marker"; + position[]={17869.166,2.40886,18199.828}; + name="diamond_trader"; + text="@STR_MAR_Diamond_Trader"; + type="b_unknown"; + colorName="ColorOrange"; + id=129; + }; + class Item128 + { + dataType="Marker"; + position[]={4928.9746,16.186176,14576.784}; + name="glass_trader"; + text="@STR_MAR_Glass_Trader"; + type="b_unknown"; + colorName="ColorOrange"; + id=130; + }; + class Item129 + { + dataType="Marker"; + position[]={5327.8848,22.266685,14476.616}; + name="iron_copper_trader"; + text="@STR_MAR_Iron_Copper_Trader"; + type="b_unknown"; + colorName="ColorOrange"; + id=131; + }; + class Item130 + { + dataType="Marker"; + position[]={5379.1855,77.380905,17922.482}; + name="sand_processing"; + text="@STR_MAR_Sand_Processing"; + type="mil_triangle"; + colorName="ColorBrown"; + id=132; + }; + class Item131 + { + dataType="Marker"; + position[]={18157.965,26.492321,12840.584}; + name="civ_truck_shop1_1"; + text="@STR_MAR_Truck_Shop"; + type="c_car"; + colorName="ColorBlue"; + id=133; + }; + class Item132 + { + dataType="Marker"; + position[]={18145.107,26.476664,12855.548}; + name="civ_truck_2"; + type="Empty"; + angle=359.836; + id=134; + }; + class Item133 + { + dataType="Marker"; + position[]={18149.994,26.508713,12855.938}; + name="civ_truck_2_1"; + type="Empty"; + angle=359.836; + id=135; + atlOffset=1.9073486e-006; + }; + class Item134 + { + dataType="Marker"; + position[]={12290.406,123.8956,8899.7314}; + name="Rebelop_1"; + text="@STR_MAR_Rebel_Outpost"; + type="mil_triangle"; + colorName="Color1_FD_F"; + id=136; + }; + class Item135 + { + dataType="Marker"; + position[]={20081.033,100.96766,6737.1904}; + name="Rebelop_2"; + text="@STR_MAR_Rebel_Outpost"; + type="mil_triangle"; + colorName="Color1_FD_F"; + id=137; + }; + class Item136 + { + dataType="Marker"; + position[]={9326.4922,14.638341,11912.618}; + name="gun_store_1"; + text="@STR_MAR_Gun_Store"; + type="loc_Bunker"; + colorName="ColorRed"; + angle=7.2259865; + id=138; + }; + class Item137 + { + dataType="Marker"; + position[]={16340.104,24.965635,17266.721}; + name="gun_store_1_1"; + text="@STR_MAR_Gun_Store"; + type="loc_Bunker"; + colorName="ColorRed"; + angle=62.195694; + id=139; + }; + class Item138 + { + dataType="Marker"; + position[]={19878.975,29.913465,17006.666}; + name="heroin_1"; + text="@STR_MAR_Heroin_Field"; + type="hd_dot"; + colorName="ColorRed"; + id=140; + }; + class Item139 + { + dataType="Marker"; + position[]={19878.738,29.92317,17007.137}; + name="heroin_area"; + markerType="ELLIPSE"; + type="Empty"; + colorName="ColorWhite"; + a=30; + b=30; + id=141; + }; + class Item140 + { + dataType="Marker"; + position[]={23644.953,51.044296,21802.297}; + name="heroin_p"; + text="@STR_MAR_Heroin_Processing"; + type="mil_dot"; + colorName="ColorRed"; + id=142; + }; + class Item141 + { + dataType="Marker"; + position[]={3744.7651,12.664954,13272.564}; + name="car_g_1"; + type="Empty"; + angle=51.99506; + id=143; + }; + class Item142 + { + dataType="Marker"; + position[]={3739.0391,12.721933,13268.451}; + name="civ_gar_1"; + text="@STR_MAR_Garage"; + type="o_service"; + id=144; }; - class Item4 + class Item143 { - position[]={8455.4209,49.162537,12748.438}; - azimut=-173.17824; - id=217; - side="EMPTY"; - vehicle="FlagSmall_F"; - skill=0.60000002; + dataType="Marker"; + position[]={14266.07,19.374266,16294.293}; + name="air_g_1"; + type="Empty"; + angle=153.94185; + id=145; }; - class Item5 + class Item144 { - position[]={8087.8345,77.665977,22619.818}; - id=218; - side="EMPTY"; - vehicle="Land_cmp_Hopper_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false"; + dataType="Marker"; + position[]={14259,19.362194,16303.427}; + name="civ_gar_1_1"; + text="@STR_MAR_Garage"; + type="o_service"; + angle=108.01331; + id=146; }; - class Item6 + class Item145 { - position[]={3759.8044,34.343609,12371.341}; - azimut=-402.23712; - id=219; - side="EMPTY"; - vehicle="Land_CashDesk_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Marker"; + position[]={25716.904,18.13162,21271.055}; + name="car_g_2"; + type="Empty"; + angle=220.38788; + id=147; }; - class Item7 + class Item146 { - position[]={14419.248,18.719999,16244.851}; - azimut=-139.702; - id=220; - side="EMPTY"; - vehicle="Land_HelipadSquare_F"; - skill=0.60000002; - text="air_sp"; + dataType="Marker"; + position[]={25723.572,18.269375,21278.281}; + name="civ_gar_1_2"; + text="@STR_MAR_Garage"; + type="o_service"; + angle=168.39319; + id=148; }; - class Item8 + class Item147 { - position[]={3669.1687,10.446139,13112.071}; - azimut=-90.312202; - id=221; - side="EMPTY"; - vehicle="Land_MarketShelter_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Marker"; + position[]={14476.976,19.342848,17749.266}; + name="car_g_3"; + type="Empty"; + angle=151.55492; + id=149; }; - class Item9 + class Item148 { - position[]={3668.4995,10.439222,13108.416}; - azimut=-269.17001; - id=222; - side="EMPTY"; - vehicle="Land_CashDesk_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Marker"; + position[]={14473.113,19.164511,17754.678}; + name="civ_gar_1_3"; + text="@STR_MAR_Garage"; + type="o_service"; + angle=136.74834; + id=150; }; - class Item10 + class Item149 { - position[]={3670.554,10.461308,13117.182}; - azimut=-34.797798; - id=223; - side="EMPTY"; - vehicle="Land_StallWater_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Marker"; + position[]={12682.691,1.9715809,14214.604}; + name="boat_2_1"; + text="@STR_MAR_Boat_Shop"; + type="c_ship"; + colorName="ColorWhite"; + id=151; + atlOffset=-3.695488e-006; }; - class Item11 + class Item150 { - position[]={3670.2051,10.450021,13113.306}; - azimut=10.867159; - id=224; - side="EMPTY"; - vehicle="Land_Sacks_heap_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Marker"; + position[]={12697.163,-0.013685904,14197.867}; + name="civ_ship_2"; + text="@STR_MAR_Boat_Spawn"; + type="loc_Quay"; + colorName="ColorOrange"; + id=152; + atlOffset=4.3412032; }; - class Item12 + class Item151 { - position[]={3667.7229,10.433475,13115.786}; - id=225; - side="EMPTY"; - vehicle="Land_Basket_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Marker"; + position[]={17539.715,3.019192,18943.441}; + name="boat_2_1_1"; + text="@STR_MAR_Boat_Shop"; + type="c_ship"; + colorName="ColorWhite"; + id=153; }; - class Item13 + class Item152 { - position[]={8449.4082,49.481163,12758.183}; - azimut=-70.583; - id=226; - side="EMPTY"; - vehicle="Land_Sacks_heap_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Marker"; + position[]={17565.404,0,18927.883}; + name="civ_ship_3"; + text="@STR_MAR_Boat_Spawn"; + type="loc_Quay"; + colorName="ColorOrange"; + id=154; + atlOffset=3.4707911; }; - class Item14 + class Item153 { - position[]={8447.1074,49.537189,12766.634}; - offsetY=0.2; - id=227; - side="EMPTY"; - vehicle="Land_MetalBarrel_empty_F"; - skill=0.60000002; - init=" this allowDamage false;"; + dataType="Marker"; + position[]={17017.518,15.925221,12628.14}; + name="Gen_3_1_1_3"; + text="@STR_MAR_Market"; + type="c_unknown"; + colorName="ColorGreen"; + angle=127.8897; + id=155; }; - class Item15 + class Item154 { - position[]={8448.5039,49.535328,12766.401}; - offsetY=0.2; - id=228; - side="EMPTY"; - vehicle="Land_MetalBarrel_empty_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Marker"; + position[]={13946.49,22.888865,18664.123}; + name="Gen_4"; + text="@STR_MAR_General_Store"; + type="c_unknown"; + colorName="ColorGreen"; + id=156; }; - class Item16 + class Item155 { - position[]={8445.377,49.437954,12757.802}; - azimut=-70.582985; - id=229; - side="EMPTY"; - vehicle="Land_Sacks_heap_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Marker"; + position[]={12288.481,123.74883,8919.6299}; + name="reb_v_2"; + type="Empty"; + angle=285.16611; + id=157; }; - class Item17 + class Item156 { - position[]={8441.8105,49.473495,12759.46}; - azimut=-70.582985; - id=230; - side="EMPTY"; - vehicle="Land_Sacks_heap_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Marker"; + position[]={16018.33,13.650147,16953.154}; + name="fed_reserve"; + text="@STR_MAR_Federal_Reserve"; + type="mil_box"; + colorName="Color4_FD_F"; + id=158; }; - class Item18 + class Item157 { - position[]={8436.377,49.523743,12759.464}; - azimut=-70.582985; - id=231; - side="EMPTY"; - vehicle="Land_Sacks_heap_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Marker"; + position[]={23538.549,13.160051,19945.574}; + name="cop_spawn_5"; + text="@STR_MAR_Highway_Patrol"; + type="mil_box"; + colorName="Color4_FD_F"; + id=159; }; - class Item19 + class Item158 { - position[]={8445.1826,49.47974,12760.774}; - id=232; - side="EMPTY"; - vehicle="Land_Pallets_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={23526.816,12.94872,19936.809}; + name="cop_car_5"; + type="Empty"; + angle=91.179588; + id=160; }; - class Item20 + class Item159 { - position[]={8444.7324,49.539288,12766.865}; - offsetY=1.2; - id=233; - side="EMPTY"; - vehicle="Land_Gloves_F"; - skill=0.60000002; + dataType="Marker"; + position[]={17073.295,24.327265,11361.496}; + name="rock_quarry"; + text="@STR_MAR_Rock_Quarry"; + type="mil_triangle"; + colorName="ColorBrown"; + id=161; }; - class Item21 + class Item160 { - position[]={8434.375,49.551888,12767.407}; - id=234; - side="EMPTY"; - vehicle="Land_Portable_generator_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={19314.266,21.279949,16545.195}; + name="rock_processing"; + text="@STR_MAR_Rock_Processing"; + type="mil_box"; + colorName="ColorBrown"; + id=162; }; - class Item22 + class Item161 { - position[]={8444.7285,49.53928,12766.703}; - azimut=-174.673; - offsetY=0.2; - id=235; - side="EMPTY"; - vehicle="Land_TableDesk_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={16578.012,14.273811,15989.947}; + name="oil_trader_3_1"; + text="@STR_MAR_Cement_Trader"; + type="b_unknown"; + colorName="ColorOrange"; + id=163; }; - class Item23 + class Item162 { - position[]={8454.5107,49.355679,12764.416}; - azimut=-10.5486; - offsetY=0.2; - id=236; - side="EMPTY"; - vehicle="Land_ShelvesMetal_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={11849.67,4.2975636,13611.597}; + name="dive_shop_1"; + text="@STR_MAR_Diving_Shop"; + type="mil_box"; + colorName="ColorOrange"; + angle=215.54425; + id=164; }; - class Item24 + class Item163 { - position[]={8439.9697,49.491333,12757.864}; - azimut=-79.002899; - offsetY=0.2; - id=237; - side="EMPTY"; - vehicle="Land_Rack_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={15213.041,-0.011334214,12527.978}; + name="turtle_1"; + markerType="ELLIPSE"; + type="Empty"; + colorName="ColorRed"; + a=350; + b=350; + id=165; + atlOffset=91.319412; }; - class Item25 + class Item164 { - position[]={8437.8672,49.533855,12767.304}; - azimut=-30.002899; - offsetY=0.2; - id=238; - side="EMPTY"; - vehicle="Land_MapBoard_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={15239.204,-0.10417931,12503.155}; + name="turtle_1_name"; + text="@STR_MAR_Turtle_Poaching"; + type="mil_dot"; + id=166; + atlOffset=88.324646; }; - class Item26 + class Item165 { - position[]={8444.4453,49.538525,12766.801}; - azimut=232.00301; - offsetY=1.1; - id=239; - side="EMPTY"; - vehicle="Land_Notepad_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={6444.689,-0.064472109,9385.3115}; + name="turtle_2"; + markerType="ELLIPSE"; + type="Empty"; + colorName="ColorRed"; + a=350; + b=350; + id=167; + atlOffset=134.56673; }; - class Item27 + class Item166 { - position[]={8448.793,49.524857,12762.478}; - azimut=163.62828; - id=240; - side="EMPTY"; - vehicle="Land_Sacks_heap_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Marker"; + position[]={6470.8521,0.066574216,9360.4893}; + name="turtle_1_name_1"; + text="@STR_MAR_Turtle_Poaching"; + type="mil_dot"; + id=168; + atlOffset=130.79889; }; - class Item28 + class Item167 { - position[]={8451.9688,49.503006,12758.073}; - azimut=163.62828; - id=241; - side="EMPTY"; - vehicle="Land_Sacks_heap_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Marker"; + position[]={3293.7217,-0.11467069,16612.359}; + name="turtle_3"; + markerType="ELLIPSE"; + type="Empty"; + colorName="ColorRed"; + a=350; + b=350; + id=169; + atlOffset=101.40745; }; - class Item29 + class Item168 { - position[]={8439.1084,49.50692,12759.832}; - azimut=-29.043818; - id=242; - side="EMPTY"; - vehicle="Land_Sacks_heap_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Marker"; + position[]={3319.884,-0.087620348,16587.537}; + name="turtle_1_name_2"; + text="@STR_MAR_Turtle_Poaching"; + type="mil_dot"; + id=170; + atlOffset=97.809975; }; - class Item30 + class Item169 { - position[]={8435.0439,49.532558,12763.436}; - azimut=-29.043818; - id=243; - side="EMPTY"; - vehicle="Land_Sacks_heap_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Marker"; + position[]={10246.375,5.3159304,11272.208}; + name="turle_dealer"; + text="@STR_MAR_Turtle_Dealer"; + type="mil_dot"; + colorName="ColorRed"; + id=171; }; - class Item31 + class Item170 { - position[]={8448.4863,49.502541,12760.227}; - azimut=-92.069183; - id=244; - side="EMPTY"; - vehicle="Land_Sacks_heap_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Marker"; + position[]={24660.627,17.608727,23158.951}; + name="chop_shop_2"; + text="@STR_MAR_Chop_Shop"; + type="o_armor"; + colorName="Color1_FD_F"; + id=172; }; - class Item32 + class Item171 { - position[]={8443.4277,49.450829,12758.236}; - azimut=-92.069183; - id=245; - side="EMPTY"; - vehicle="Land_Sacks_heap_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Marker"; + position[]={5242.2974,78.634445,11514.398}; + name="chop_shop_3"; + text="@STR_MAR_Chop_Shop"; + type="o_armor"; + colorName="Color1_FD_F"; + id=173; }; - class Item33 + class Item172 { - position[]={8451.3311,49.531555,12765.852}; - azimut=101.85477; - offsetY=0.2; - id=246; - side="EMPTY"; - vehicle="Land_ShelvesMetal_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={19029.779,23.749619,14549.058}; + name="chop_shop_4"; + text="@STR_MAR_Chop_Shop"; + type="o_armor"; + colorName="Color1_FD_F"; + id=174; }; - class Item34 + class Item173 { - position[]={8441.3232,49.534409,12767.096}; - azimut=88.490463; - offsetY=0.2; - id=247; - side="EMPTY"; - vehicle="Land_ShelvesMetal_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={9179.4131,14.457561,21646.748}; + name="reb_v_1"; + type="Empty"; + angle=152.46983; + id=175; }; - class Item35 + class Item174 { - position[]={8445.2988,49.5396,12766.712}; - azimut=232.00301; - offsetY=1.2; - id=248; - side="EMPTY"; - vehicle="Land_MobilePhone_smart_F"; - skill=0.60000002; + dataType="Marker"; + position[]={3654.9668,10.500361,13082.299}; + name="atm_marker"; + type="loc_Tourism"; + colorName="ColorGreen"; + id=176; }; - class Item36 + class Item175 { - position[]={8452.8252,49.501862,12765.084}; - azimut=232.00301; - offsetY=2; - id=249; - side="EMPTY"; - vehicle="Land_Money_F"; - skill=0.60000002; + dataType="Marker"; + position[]={3505.3977,5.0026331,13153.528}; + name="atm_marker_1"; + type="loc_Tourism"; + colorName="ColorGreen"; + angle=318.17343; + id=177; }; - class Item37 + class Item176 { - position[]={8453.6006,49.434761,12765.159}; - azimut=232.00301; - offsetY=2; - id=250; - side="EMPTY"; - vehicle="Land_Money_F"; - skill=0.60000002; + dataType="Marker"; + position[]={3730.8054,18.870001,12973.504}; + name="medic_spawn_1"; + type="Empty"; + id=178; }; - class Item38 + class Item177 { - position[]={8453.4844,49.446133,12766.132}; - azimut=232.00301; - offsetY=2; - id=251; - side="EMPTY"; - vehicle="Land_Money_F"; - skill=0.60000002; + dataType="Marker"; + position[]={15596.775,18.531496,17184.191}; + name="medic_spawn_2"; + type="Empty"; + angle=320.65738; + id=179; }; - class Item39 + class Item178 { - position[]={8444.9121,49.539768,12766.406}; - azimut=264.194; - offsetY=0.2; - id=252; - side="EMPTY"; - vehicle="Land_Suitcase_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={9024.7109,30.520811,12121.548}; + name="atm_marker_3"; + type="loc_Tourism"; + colorName="ColorGreen"; + angle=13.824049; + id=180; }; - class Item40 + class Item179 { - position[]={8446.1533,49.538464,12766.483}; - azimut=264.194; - offsetY=0.2; - id=253; - side="EMPTY"; - vehicle="Land_Suitcase_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={14031.674,25.92466,18743.428}; + name="atm_marker_2"; + type="loc_Tourism"; + colorName="ColorGreen"; + angle=36.949192; + id=181; }; - class Item41 + class Item180 { - position[]={8449.6045,49.533859,12765.631}; - azimut=195.90932; - offsetY=0.2; - id=254; - side="EMPTY"; - vehicle="Land_Suitcase_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={14625.156,17.91,16790.781}; + name="atm_marker_4"; + type="loc_Tourism"; + colorName="ColorGreen"; + angle=135.98599; + id=182; }; - class Item42 + class Item181 { - position[]={8449.916,49.533443,12766.327}; - azimut=264.194; - offsetY=0.2; - id=255; - side="EMPTY"; - vehicle="Land_Suitcase_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={16885.555,20.481829,12646.81}; + name="atm_marker_5"; + type="loc_Tourism"; + colorName="ColorGreen"; + angle=287.28958; + id=183; }; - class Item43 + class Item182 { - position[]={8439.0176,49.534081,12767.22}; - azimut=324.88629; - offsetY=0.2; - id=256; - side="EMPTY"; - vehicle="Land_Suitcase_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={25694.893,20.761673,21387.438}; + name="atm_marker_4_1"; + type="loc_Tourism"; + colorName="ColorGreen"; + angle=230.98901; + id=184; }; - class Item44 + class Item183 { - position[]={8439.9482,49.533665,12767.375}; - azimut=264.194; - offsetY=0.2; - id=257; - side="EMPTY"; - vehicle="Land_Suitcase_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={27032.053,20.738028,23230.627}; + name="atm_marker_2_1"; + type="loc_Tourism"; + colorName="ColorGreen"; + angle=315.66129; + id=185; }; - class Item45 + class Item184 { - position[]={8434.6943,49.52832,12762.022}; - azimut=6.6468201; - offsetY=1; - id=258; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={20475.064,34.895618,8853.1426}; + name="atm_marker_2_2"; + type="loc_Tourism"; + colorName="ColorGreen"; + angle=128.67664; + id=186; }; - class Item46 + class Item185 { - position[]={8435.4688,49.516296,12758.729}; - azimut=95.681801; - offsetY=1; - id=259; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={5102.6821,48.943104,11237.706}; + name="atm_marker_2_3"; + type="loc_Tourism"; + colorName="ColorGreen"; + angle=324.66498; + id=187; }; - class Item47 + class Item186 { - position[]={8435.625,49.524097,12759.973}; - azimut=95.681801; - offsetY=1; - id=260; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={9221.4473,121.15643,15824.147}; + name="atm_marker_2_4"; + type="loc_Tourism"; + colorName="ColorGreen"; + angle=335.50687; + id=188; }; - class Item48 + class Item187 { - position[]={8433.2197,49.526775,12762.181}; - azimut=6.6468201; - offsetY=1; - id=261; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={8648.0039,182.61882,18256.303}; + name="atm_marker_2_5"; + type="loc_Tourism"; + colorName="ColorGreen"; + angle=243.96104; + id=189; }; - class Item49 + class Item188 { - position[]={8456.1416,49.214363,12762.685}; - azimut=95.442757; - offsetY=3.5; - id=262; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={20782.402,37.286591,16680.141}; + name="atm_marker_2_6"; + type="loc_Tourism"; + colorName="ColorGreen"; + angle=127.20448; + id=190; }; - class Item50 + class Item189 { - position[]={8456.3047,49.200241,12764.086}; - azimut=95.442757; - offsetY=3.5; - id=263; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={12613.043,16.704132,14381.132}; + name="atm_marker_2_7"; + type="loc_Tourism"; + colorName="ColorGreen"; + angle=153.85992; + id=191; }; - class Item51 + class Item190 { - position[]={8432.9043,49.491199,12757.729}; - azimut=185.22533; - offsetY=3.5; - id=264; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={16289.748,25.249407,17295.527}; + name="atm_marker_2_8"; + type="loc_Tourism"; + colorName="ColorGreen"; + angle=124.04665; + id=192; }; - class Item52 + class Item191 { - position[]={8431.0088,49.492458,12759.466}; - azimut=95.681801; - offsetY=1; - id=265; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={6185.6621,26.661465,15077.207}; + name="atm_marker_2_9"; + type="loc_Tourism"; + colorName="ColorGreen"; + angle=131.43578; + id=193; }; - class Item53 + class Item192 { - position[]={8431.165,49.504688,12760.864}; - azimut=95.681801; - offsetY=1; - id=266; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init=" this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={8422.4014,107.16431,25112.775}; + name="respawn_east"; + type="Empty"; + id=194; + atlOffset=-4.3843002; }; - class Item54 + class Item193 { - position[]={8424.4277,49.670139,12769.305}; - azimut=-173.17824; - id=267; - side="EMPTY"; - vehicle="FlagSmall_F"; - skill=0.60000002; + dataType="Marker"; + position[]={9184.4463,14.484292,21649.455}; + name="reb_v_1_1"; + type="Empty"; + angle=142.37648; + id=195; }; - class Item55 + class Item194 { - position[]={8455.4209,49.162537,12748.438}; - azimut=-173.17824; - id=268; - side="EMPTY"; - vehicle="FlagSmall_F"; - skill=0.60000002; + dataType="Marker"; + position[]={3738.3508,18.830826,12991.575}; + name="med_car_1"; + type="Empty"; + angle=264.5141; + id=196; }; - class Item56 + class Item195 { - position[]={23825.127,3.1900001,18603.191}; - id=269; - side="EMPTY"; - vehicle="Land_cmp_Hopper_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={15600.498,18.554039,17211.836}; + name="hospital_2"; + text="@STR_MAR_Hospital"; + type="loc_Hospital"; + colorName="ColorRed"; + angle=307.36597; + id=197; }; - class Item57 + class Item196 { - position[]={16993.221,16.32688,12866.711}; - azimut=-401.16592; - id=270; - side="EMPTY"; - vehicle="Land_CashDesk_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Marker"; + position[]={17495.891,12.760118,13290.289}; + name="hospital_3"; + text="@STR_MAR_Hospital"; + type="loc_Hospital"; + colorName="ColorRed"; + angle=314.0834; + id=198; }; - class Item58 + class Item197 { - position[]={14034.949,25.365133,18759.547}; - azimut=-417.53345; - id=271; - side="EMPTY"; - vehicle="Land_CashDesk_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Marker"; + position[]={17493.104,12.868838,13265.117}; + name="medic_spawn_3"; + type="Empty"; + angle=12.349454; + id=199; }; - class Item59 + class Item198 { - position[]={3759.8044,34.343609,12371.341}; - azimut=-402.23712; - id=272; - side="EMPTY"; - vehicle="Land_CashDesk_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Marker"; + position[]={17471.252,12.817257,13280.558}; + name="med_car_2"; + type="Empty"; + angle=221.13106; + id=200; }; - class Item60 + class Item199 { - position[]={3478.6318,2.6272526,13231.461}; - azimut=-225.293; - offsetY=0.5; - id=273; - side="EMPTY"; - vehicle="Land_CashDesk_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Marker"; + position[]={15573.91,18.490637,17202.232}; + name="med_car_3"; + type="Empty"; + angle=229.37419; + id=201; }; - class Item61 + class Item200 { - position[]={3044.3811,2.0166333,12612.92}; - azimut=-305.86401; - id=274; - side="EMPTY"; - vehicle="Land_CashDesk_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Marker"; + position[]={14166.97,16.696758,16522.855}; + name="kart_shop_text_1"; + text="@STR_MAR_GoKart_Shop"; + type="loc_Power"; + colorName="ColorBlue"; + id=202; }; - class Item62 + class Item201 { - position[]={16813.6,23.8543,12625}; - azimut=-182.94501; - offsetY=1.08842; - id=275; - side="EMPTY"; - vehicle="Land_CashDesk_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Marker"; + position[]={14161.376,16.312208,16532.488}; + name="kart_shop_1"; + type="Empty"; + angle=298.31378; + id=203; }; - class Item63 + class Item202 { - position[]={3638.7703,10.188107,13077.082}; - azimut=-180.077; - offsetY=0.30000001; - id=276; - side="EMPTY"; - vehicle="Land_CashDesk_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Marker"; + position[]={3734.157,18.867834,12978.31}; + name="atm_marker_1_1"; + type="loc_Tourism"; + colorName="ColorGreen"; + angle=182.78691; + id=204; }; - class Item64 + class Item203 { - position[]={22123.895,3.78,14501.231}; - azimut=88.598434; - id=277; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Marker"; + position[]={15590.591,18.56068,17184.236}; + name="atm_marker_1_2"; + type="loc_Tourism"; + colorName="ColorGreen"; + angle=138.34398; + id=205; }; - class Item65 + class Item204 { - position[]={22123.916,3.78,14500.113}; - azimut=88.598434; - id=278; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Marker"; + position[]={17486.479,12.888057,13266.659}; + name="atm_marker_1_3"; + type="loc_Tourism"; + colorName="ColorGreen"; + angle=134.47447; + id=206; }; - class Item66 + class Item205 { - position[]={22123.947,3.78,14498.8}; - azimut=88.598434; - id=279; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Marker"; + position[]={13795.459,60.220287,6396.0879}; + name="gold_bar_dealer"; + text="@STR_MAR_Gold_Bars_Buyer"; + type="loc_ViewTower"; + colorName="ColorYellow"; + id=207; }; - class Item67 + class Item206 { - position[]={22123.979,3.7813036,14497.541}; - azimut=88.598434; - id=280; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Marker"; + position[]={14150.938,19.092634,16301.9}; + name="atm_marker_4_2"; + type="loc_Tourism"; + colorName="ColorGreen"; + angle=131.50684; + id=208; + atlOffset=-5.7220459e-006; }; - class Item68 + class Item207 { - position[]={22123.984,3.7765515,14496.299}; - azimut=88.598434; - id=281; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Marker"; + position[]={13815.971,20.243898,18985.834}; + name="atm_marker_2_10"; + type="loc_Tourism"; + colorName="ColorGreen"; + angle=139.89175; + id=209; }; - class Item69 + class Item208 { - position[]={22124.029,3.7717505,14495.113}; - azimut=88.598434; - id=282; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Marker"; + position[]={11693.286,37.651257,15914.844}; + name="gang_area_1"; + text="@STR_MAR_Gang_Hideout1"; + type="hd_warning"; + colorName="ColorRed"; + id=210; }; - class Item70 + class Item209 { - position[]={22124.074,3.7669983,14493.94}; - azimut=88.598434; - id=283; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Marker"; + position[]={4885.7808,17.059162,14418.125}; + name="gang_area_2"; + text="@STR_MAR_Gang_Hideout2"; + type="hd_warning"; + colorName="ColorRed"; + angle=1.9070154; + id=211; }; - class Item71 + class Item210 { - position[]={22124.086,3.7619667,14492.687}; - azimut=88.598434; - id=284; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Marker"; + position[]={18383.779,27.092974,15248.242}; + name="gang_area_3"; + text="@STR_MAR_Gang_Hideout3"; + type="hd_warning"; + colorName="ColorRed"; + angle=2.7999957; + id=212; }; - class Item72 + class Item211 { - position[]={22124.117,3.7566664,14491.372}; - azimut=88.598434; - id=285; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Marker"; + position[]={3307.8906,12.716581,14142.727}; + name="turle_dealer_1"; + text="@STR_MAR_Turtle_Dealer"; + type="mil_dot"; + colorName="ColorRed"; + angle=77.713181; + id=213; }; - class Item73 + class Item212 { - position[]={22124.141,3.75458,14490.142}; - azimut=88.598434; - id=286; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Marker"; + position[]={16556.398,1.8017138,15550.469}; + name="turle_dealer_2"; + text="@STR_MAR_Turtle_Dealer"; + type="mil_dot"; + colorName="ColorRed"; + id=214; }; - class Item74 + class Item213 { - position[]={22124.182,3.7439818,14488.888}; - azimut=88.598434; - id=287; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Marker"; + position[]={7757.6431,108.63041,19958.082}; + name="hunting_zone"; + markerType="ELLIPSE"; + type="Empty"; + colorName="ColorWhite"; + a=1000; + b=1000; + id=215; }; - class Item75 + class Item214 { - position[]={22124.182,3.7327111,14487.681}; - azimut=88.598434; - id=288; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Marker"; + position[]={7604.667,128.90898,19991.012}; + name="hunting_marker"; + text="@STR_MAR_Hunting_Grounds"; + type="mil_join"; + colorName="ColorRed"; + id=216; }; - class Item76 + class Item215 { - position[]={22124.211,3.7213271,14486.478}; - azimut=88.598434; - id=289; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Marker"; + position[]={11556.489,77.772423,7048.6733}; + name="weed_area"; + markerType="ELLIPSE"; + type="Empty"; + colorName="ColorWhite"; + a=30; + b=30; + id=217; }; - class Item77 + class Item216 { - position[]={22124.213,3.7105591,14485.324}; - azimut=88.598434; - id=290; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Marker"; + position[]={6173.5654,43,16272.292}; + name="fuel_storage_1"; + text="@STR_MAR_FuelTank_Storage"; + type="loc_Fuelstation"; + colorName="ColorWhite"; + id=218; }; - class Item78 + class Item217 { - position[]={22124.271,3.6993432,14484.156}; - azimut=88.598434; - id=291; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Marker"; + position[]={25398.041,9.7377434,20319.992}; + name="fuel_storage_2"; + text="@STR_MAR_FuelTank_Storage"; + type="loc_Fuelstation"; + colorName="ColorWhite"; + id=219; }; - class Item79 + class Item218 { - position[]={22124.291,3.6886842,14482.888}; - azimut=88.598434; - id=292; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8065.751,36.069408,24984.934}; + angles[]={0.326543,0,0.32534608}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + name="bank_obj"; + }; + id=220; + type="Land_Garbage_line_F"; + atlOffset=0.01733017; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item80 + class Item219 { - position[]={22124.307,3.7047706,14481.584}; - azimut=88.598434; - id=293; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8456.1416,53.449738,12762.685}; + angles[]={0,1.6657903,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=221; + type="Land_Pallet_vertical_F"; + atlOffset=2.9707031; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item81 + class Item220 { - position[]={22124.334,3.7291236,14480.354}; - azimut=88.598434; - id=294; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8456.3047,53.435616,12764.086}; + angles[]={0,1.6657903,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=222; + type="Land_Pallet_vertical_F"; + atlOffset=2.9565811; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item82 + class Item221 { - position[]={22124.373,3.7539601,14479.094}; - azimut=88.598434; - id=295; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8424.459,50.140579,12769.404}; + angles[]={0.022664838,3.2606552,6.2405448}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=223; + type="FlagSmall_F"; + atlOffset=0.0005645752; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item83 + class Item222 { - position[]={22124.42,3.7773194,14477.903}; - azimut=88.598434; - id=296; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8455.4883,49.626331,12748.55}; + angles[]={0.049293593,3.2606552,6.1624427}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=224; + type="FlagSmall_F"; + atlOffset=0.0039634705; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item84 + class Item223 { - position[]={22124.408,3.8022499,14476.663}; - azimut=88.598434; - id=297; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8088.0669,81.691162,22619.336}; + angles[]={6.1650715,0,6.2259154}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false"; + }; + id=225; + type="Land_cmp_Hopper_F"; + atlOffset=0.034988403; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item85 + class Item224 { - position[]={22124.354,3.8240819,14475.599}; - azimut=88.598434; - id=298; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={3759.8044,34.343609,12371.341}; + angles[]={6.2818484,5.5460091,6.2738566}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=226; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item86 + class Item225 { - position[]={22124.418,3.8423047,14474.426}; - azimut=88.598434; - id=299; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={14419.248,18.719999,16244.851}; + angles[]={0,3.8449256,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + name="air_sp"; + }; + id=227; + type="Land_HelipadSquare_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item87 + class Item226 { - position[]={22124.484,3.8550391,14473.166}; - azimut=88.598434; - id=300; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={3668.6392,11.975675,13112.05}; + angles[]={0.0013372133,4.7069402,0.0053265258}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=228; + type="Land_MarketShelter_F"; + atlOffset=2.7656555e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item88 + class Item227 { - position[]={22124.441,3.8695118,14471.852}; - azimut=88.598434; - id=301; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={3668.4995,10.439222,13108.416}; + angles[]={6.2818484,1.5852823,0.0013372133}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=229; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item89 + class Item228 { - position[]={22124.48,3.8823826,14470.606}; - azimut=88.598434; - id=302; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={3670.5588,10.872904,13117.187}; + angles[]={6.2791886,5.6758494,0.010664274}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=230; + type="Land_StallWater_F"; + atlOffset=2.6702881e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item90 + class Item229 { - position[]={22124.523,3.8955665,14469.328}; - azimut=88.598434; - id=303; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={3670.2029,10.840802,13113.307}; + angles[]={0.0013372133,0.1896677,0.0053265258}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=231; + type="Land_Sacks_heap_F"; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item91 + class Item230 { - position[]={22124.549,3.9077735,14468.158}; - azimut=88.598434; - id=304; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={3667.7209,10.777971,13115.786}; + angles[]={0.0013372133,0,0.0053265258}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=232; + type="Land_Basket_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item92 + class Item231 { - position[]={22124.541,3.9167533,14466.92}; - azimut=88.598434; - id=305; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8449.4043,49.871891,12758.177}; + angles[]={6.2685208,5.05128,0.0093286335}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=233; + type="Land_Sacks_heap_F"; + atlOffset=5.3405762e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item93 + class Item232 { - position[]={22124.572,3.9228275,14465.734}; - azimut=88.598434; - id=306; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8447.1084,50.159866,12766.634}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false;"; + }; + id=234; + type="Land_MetalBarrel_empty_F"; + atlOffset=0.20000076; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item94 + class Item233 { - position[]={22124.617,3.9287162,14464.562}; - azimut=88.598434; - id=307; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8448.5049,50.158005,12766.401}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=235; + type="Land_MetalBarrel_empty_F"; + atlOffset=0.20000458; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item95 + class Item234 { - position[]={22124.668,3.9350493,14463.3}; - azimut=88.598434; - id=308; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8445.373,49.828682,12757.796}; + angles[]={6.2685208,5.05128,0.0093286335}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=236; + type="Land_Sacks_heap_F"; + atlOffset=5.7220459e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item96 + class Item235 { - position[]={22124.658,3.9420218,14462.006}; - azimut=88.598434; - id=309; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8441.8154,49.864254,12759.459}; + angles[]={6.2805333,5.05128,6.2711854}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=237; + type="Land_Sacks_heap_F"; + atlOffset=2.6702881e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item97 + class Item236 { - position[]={22124.693,3.9483693,14460.764}; - azimut=88.598434; - id=310; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8436.377,49.914532,12759.464}; + angles[]={0,5.05128,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=238; + type="Land_Sacks_heap_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item98 + class Item237 { - position[]={22124.713,3.9554532,14459.524}; - azimut=88.598434; - id=311; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8445.459,49.815323,12761.772}; + angles[]={6.2685208,0,0.0093286335}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=239; + type="Land_Pallets_F"; + atlOffset=4.196167e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item99 + class Item238 { - position[]={22124.762,3.9630313,14458.33}; - azimut=88.598434; - id=312; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8444.7324,50.739208,12766.865}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + }; + id=240; + type="Land_Gloves_F"; + atlOffset=0.17726898; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item100 + class Item239 { - position[]={22124.754,3.9714456,14457.077}; - azimut=88.598434; - id=313; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8434.375,49.91106,12767.405}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=241; + type="Land_Portable_generator_F"; + atlOffset=3.8146973e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item101 + class Item240 { - position[]={22126.971,3.9567006,14455.444}; - azimut=-3.1339893; - id=314; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8444.7275,50.146339,12766.703}; + angles[]={0,3.2345665,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=242; + type="Land_TableDesk_F"; + atlOffset=0.20000458; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item102 + class Item241 { - position[]={22128.201,3.9415686,14455.499}; - azimut=-3.1339893; - id=315; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8454.5117,49.558506,12764.417}; + angles[]={0,6.0990777,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=243; + type="Land_ShelvesMetal_F"; + atlOffset=0.20000076; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item103 + class Item242 { - position[]={22129.348,3.927484,14455.549}; - azimut=-3.1339893; - id=316; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8439.9795,50.507168,12757.862}; + angles[]={0,4.9043245,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=244; + type="Land_Rack_F"; + atlOffset=0.20006943; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item104 + class Item243 { - position[]={22130.549,3.9172878,14455.616}; - azimut=-3.1339893; - id=317; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8437.8672,50.702736,12767.307}; + angles[]={0,5.7595363,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=245; + type="Land_MapBoard_F"; + atlOffset=0.20000839; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item105 + class Item244 { - position[]={22131.77,3.9072754,14455.707}; - azimut=-3.1339893; - id=318; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8444.4453,50.64959,12766.801}; + angles[]={6.2769041,4.0492163,0.0071762549}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=246; + type="Land_Notepad_F"; + atlOffset=0.078056335; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item106 + class Item245 { - position[]={22133.092,3.8934083,14455.755}; - azimut=-3.1339893; - id=319; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8448.793,49.915646,12762.478}; + angles[]={0,2.8558521,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=247; + type="Land_Sacks_heap_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item107 + class Item246 { - position[]={22134.307,3.8771143,14455.795}; - azimut=-3.1339893; - id=320; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8451.9688,49.893795,12758.073}; + angles[]={0,2.8558521,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=248; + type="Land_Sacks_heap_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item108 + class Item247 { - position[]={22135.592,3.8597217,14455.891}; - azimut=-3.1339893; - id=321; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8439.1084,49.897709,12759.832}; + angles[]={0,5.7762752,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=249; + type="Land_Sacks_heap_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item109 + class Item248 { - position[]={22136.779,3.8413942,14455.938}; - azimut=-3.1339893; - id=322; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8435.0439,49.923347,12763.436}; + angles[]={0,5.7762752,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=250; + type="Land_Sacks_heap_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item110 + class Item249 { - position[]={22138.021,3.8107936,14455.999}; - azimut=-3.1339893; - id=323; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8448.4863,49.89333,12760.227}; + angles[]={0,4.6762753,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=251; + type="Land_Sacks_heap_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item111 + class Item250 { - position[]={22139.117,3.7841234,14456.028}; - azimut=-3.1339893; - id=324; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8443.4326,49.841587,12758.235}; + angles[]={6.2805333,4.6762753,6.2711854}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=252; + type="Land_Sacks_heap_F"; + atlOffset=2.2888184e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item112 + class Item251 { - position[]={22140.313,3.7556541,14456.105}; - azimut=-3.1339893; - id=325; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8451.332,49.734459,12765.853}; + angles[]={0,1.777701,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=253; + type="Land_ShelvesMetal_F"; + atlOffset=0.20000076; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item113 + class Item252 { - position[]={22141.576,3.7290554,14456.205}; - azimut=-3.1339893; - id=326; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8441.3242,49.737309,12767.097}; + angles[]={0,1.5444499,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=254; + type="Land_ShelvesMetal_F"; + atlOffset=0.20000076; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item114 + class Item253 { - position[]={22142.871,3.7027125,14456.236}; - azimut=-3.1339893; - id=327; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8445.2988,50.744061,12766.712}; + angles[]={0,4.0492163,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + }; + id=255; + type="Land_MobilePhone_smart_F"; + atlOffset=0.17758179; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item115 + class Item254 { - position[]={22144.137,3.6738501,14456.319}; - azimut=-3.1339893; - id=328; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8452.8252,51.537354,12765.084}; + angles[]={0,4.0492163,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + }; + id=256; + type="Land_Money_F"; + atlOffset=1.7582016; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item116 + class Item255 { - position[]={22145.361,3.6414845,14456.392}; - azimut=-3.1339893; - id=329; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8453.6006,51.470253,12765.159}; + angles[]={0,4.0492163,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + }; + id=257; + type="Land_Money_F"; + atlOffset=1.6911011; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item117 + class Item256 { - position[]={22146.098,3.6224437,14456.412}; - azimut=-3.1339893; - id=330; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8453.4844,51.481625,12766.132}; + angles[]={0,4.0492163,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + }; + id=258; + type="Land_Money_F"; + atlOffset=1.7024727; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item118 + class Item257 { - position[]={22125.369,3.9767017,14455.328}; - azimut=357.19901; - id=331; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8444.9111,49.985119,12766.406}; + angles[]={0,4.6110549,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=259; + type="Land_Suitcase_F"; + atlOffset=0.20000076; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item119 + class Item258 { - position[]={22126.039,3.9682629,14455.388}; - azimut=357.19901; - id=332; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8446.1533,49.983818,12766.483}; + angles[]={0,4.6110549,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=260; + type="Land_Suitcase_F"; + atlOffset=0.20000076; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item120 + class Item259 { - position[]={22124.803,3.973681,14456.683}; - azimut=86.22821; - id=333; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8449.6045,49.979214,12765.631}; + angles[]={0,3.4192626,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=261; + type="Land_Suitcase_F"; + atlOffset=0.20000076; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item121 + class Item260 { - position[]={22124.838,3.9781265,14455.974}; - azimut=86.22821; - id=334; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8449.916,49.978798,12766.327}; + angles[]={0,4.6110549,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=262; + type="Land_Suitcase_F"; + atlOffset=0.20000076; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item122 + class Item261 { - position[]={22137.762,3.6775026,14503.723}; - azimut=178.10764; - id=335; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8439.0176,49.979431,12767.221}; + angles[]={0,5.6703353,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=263; + type="Land_Suitcase_F"; + atlOffset=0.20000076; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item123 + class Item262 { - position[]={22136.424,3.6940491,14503.673}; - azimut=178.10764; - id=336; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8439.9482,49.979015,12767.376}; + angles[]={0,4.6110549,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=264; + type="Land_Suitcase_F"; + atlOffset=0.19999695; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item124 + class Item263 { - position[]={22135.186,3.7090697,14503.613}; - azimut=178.10764; - id=337; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8434.6943,51.263695,12762.022}; + angles[]={0,0.11600889,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=265; + type="Land_Pallet_vertical_F"; + atlOffset=0.78466034; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item125 + class Item264 { - position[]={22133.926,3.7250085,14503.579}; - azimut=178.10764; - id=338; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8435.4688,51.251671,12758.729}; + angles[]={0,1.6699624,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=266; + type="Land_Pallet_vertical_F"; + atlOffset=0.77263641; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item126 + class Item265 { - position[]={22131.561,3.7719433,14503.488}; - azimut=178.10764; - id=339; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8435.625,51.259472,12759.973}; + angles[]={0,1.6699624,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=267; + type="Land_Pallet_vertical_F"; + atlOffset=0.78043747; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item127 + class Item266 { - position[]={22130.33,3.7718115,14503.464}; - azimut=178.10764; - id=340; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8433.2197,51.26215,12762.181}; + angles[]={0,0.11600889,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=268; + type="Land_Pallet_vertical_F"; + atlOffset=0.78311539; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item128 + class Item267 { - position[]={22129,3.7717333,14503.449}; - azimut=178.10764; - id=341; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8456.1416,53.449738,12762.685}; + angles[]={0,1.6657903,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=269; + type="Land_Pallet_vertical_F"; + atlOffset=2.9707031; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item129 + class Item268 { - position[]={22127.764,3.7714307,14503.393}; - azimut=178.10764; - id=342; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8456.3047,53.435616,12764.086}; + angles[]={0,1.6657903,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=270; + type="Land_Pallet_vertical_F"; + atlOffset=2.9565811; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item130 + class Item269 { - position[]={22126.514,3.7719238,14503.363}; - azimut=178.10764; - id=343; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8432.9043,53.726574,12757.729}; + angles[]={0,3.2327917,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=271; + type="Land_Pallet_vertical_F"; + atlOffset=3.2475395; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item131 + class Item270 { - position[]={22132.746,3.764065,14503.557}; - azimut=177.53963; - id=344; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8431.0039,51.227791,12759.46}; + angles[]={6.2751846,1.6699624,0.0066682254}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=272; + type="Land_Pallet_vertical_F"; + atlOffset=1; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item132 + class Item271 { - position[]={22144.664,3.4038756,14503.945}; - azimut=179.53592; - id=345; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8431.1602,51.240021,12760.858}; + angles[]={6.2751846,1.6699624,0.0066682254}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this enableSimulation false;"; + }; + id=273; + type="Land_Pallet_vertical_F"; + atlOffset=1; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item133 + class Item272 { - position[]={22143.969,3.4411256,14503.906}; - azimut=179.53592; - id=346; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8424.459,50.140579,12769.404}; + angles[]={0.022664838,3.2606552,6.2405448}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=274; + type="FlagSmall_F"; + atlOffset=0.0005645752; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item134 + class Item273 { - position[]={22123.846,3.78,14502.764}; - azimut=448.47495; - id=347; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={8455.4883,49.626331,12748.55}; + angles[]={0.049293593,3.2606552,6.1624427}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=275; + type="FlagSmall_F"; + atlOffset=0.0039634705; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item135 + class Item274 { - position[]={22123.859,3.78,14502.073}; - azimut=448.47495; - id=348; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={23825.127,7.25068,18603.186}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=276; + type="Land_cmp_Hopper_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item136 + class Item275 { - position[]={22125.213,3.7788575,14503.288}; - azimut=177.50429; - id=349; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={16993.221,16.32688,12866.711}; + angles[]={6.2751846,5.5647049,6.2645216}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=277; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item137 + class Item276 { - position[]={22124.502,3.78,14503.268}; - azimut=177.50429; - id=350; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={14034.949,25.742661,18759.547}; + angles[]={0,5.2790375,6.2826972}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=278; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item138 + class Item277 { - position[]={22142.758,3.5071802,14503.9}; - azimut=178.09821; - id=351; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={3759.8044,34.343609,12371.341}; + angles[]={6.2818484,5.5460091,6.2738566}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=279; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item139 + class Item278 { - position[]={22141.51,3.5746961,14503.863}; - azimut=178.09821; - id=352; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={3478.6318,3.1972442,13231.461}; + angles[]={0,2.3510809,6.2819896}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=280; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item140 + class Item279 { - position[]={22140.23,3.6387916,14503.822}; - azimut=177.27965; - id=353; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={3044.3811,2.3424251,12612.92}; + angles[]={0,0.9448514,6.2826972}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=281; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item141 + class Item280 { - position[]={22138.984,3.6628175,14503.787}; - azimut=177.27965; - id=354; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={16813.6,23.952868,12625}; + angles[]={0,3.0901928,6.2826972}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=282; + type="Land_CashDesk_F"; + atlOffset=1.1842289; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item142 + class Item281 { - position[]={22143.76,3.6746218,14456.79}; - azimut=-183.54131; - id=355; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={3638.7703,10.52358,13077.082}; + angles[]={0,3.140249,6.2820935}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=283; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item143 + class Item282 { - position[]={22137.58,3.8161108,14456.395}; - azimut=-183.71248; - id=356; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.172,5.5444078,14501.171}; + angles[]={0,1.5463344,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=284; + type="Land_CncWall1_F"; + atlOffset=2.3841858e-007; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item144 + class Item283 { - position[]={22130.738,3.914773,14455.994}; - azimut=-183.35521; - id=357; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.193,5.5444078,14500.053}; + angles[]={0,1.5463344,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=285; + type="Land_CncWall1_F"; + atlOffset=2.3841858e-007; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item145 + class Item284 { - position[]={22130.027,3.9206934,14455.905}; - azimut=-183.65802; - id=358; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.225,5.5444078,14498.739}; + angles[]={0,1.5463344,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=286; + type="Land_CncWall1_F"; + atlOffset=2.3841858e-007; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item146 + class Item285 { - position[]={22140.248,3.6306055,14503.534}; - azimut=357.64285; - id=359; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.258,5.5454192,14497.483}; + angles[]={0.0013372133,1.5463344,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=287; + type="Land_CncWall1_F"; + atlOffset=8.5115433e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item147 + class Item286 { - position[]={22134.029,3.7202246,14503.358}; - azimut=358.48074; - id=360; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.264,5.5403323,14496.231}; + angles[]={6.2791886,1.5463344,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=288; + type="Land_CncWall1_F"; + atlOffset=1.5497208e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item148 + class Item287 { - position[]={22127,3.7693262,14502.969}; - azimut=356.40897; - id=361; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.309,5.535531,14495.046}; + angles[]={6.2791886,1.5463344,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=289; + type="Land_CncWall1_F"; + atlOffset=1.7642975e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item149 + class Item288 { - position[]={22124.203,3.7807372,14497.743}; - azimut=268.64151; - id=362; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.354,5.5307789,14493.873}; + angles[]={6.2791886,1.5463344,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=290; + type="Land_CncWall1_F"; + atlOffset=1.7642975e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item150 + class Item289 { - position[]={22124.432,3.7563524,14491.398}; - azimut=267.90311; - id=363; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.365,5.5257473,14492.619}; + angles[]={6.2791886,1.5463344,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=291; + type="Land_CncWall1_F"; + atlOffset=1.4066696e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item151 + class Item290 { - position[]={22124.605,3.6982238,14484.227}; - azimut=269.08386; - id=364; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.396,5.5204473,14491.305}; + angles[]={6.2791886,1.5463344,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=292; + type="Land_CncWall1_F"; + atlOffset=1.4305115e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item152 + class Item291 { - position[]={22124.703,3.7922473,14477.025}; - azimut=-90.915413; - id=365; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.426,5.5174899,14490.081}; + angles[]={0,1.5463344,6.2778587}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=293; + type="Land_CncWall1_F"; + atlOffset=2.5749207e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item153 + class Item292 { - position[]={22124.84,3.8853223,14469.972}; - azimut=268.74271; - id=366; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.467,5.5062513,14488.811}; + angles[]={6.2738566,1.5463344,6.2778587}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=294; + type="Land_CncWall1_F"; + atlOffset=9.3221664e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item154 + class Item293 { - position[]={22124.955,3.9310942,14463.61}; - azimut=268.60245; - id=367; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.467,5.4949803,14487.604}; + angles[]={6.2738566,1.5463344,6.2778587}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=295; + type="Land_CncWall1_F"; + atlOffset=9.2983246e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item155 + class Item294 { - position[]={22124.949,3.9586904,14458.755}; - azimut=-92.34063; - id=368; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.496,5.4835963,14486.4}; + angles[]={6.2738566,1.5463344,6.2778587}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=296; + type="Land_CncWall1_F"; + atlOffset=9.3221664e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item156 + class Item295 { - position[]={22152.828,3.54495,14448.204}; - azimut=-183.27357; - id=369; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.498,5.4728284,14485.247}; + angles[]={6.2738566,1.5463344,6.2778587}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=297; + type="Land_CncWall1_F"; + atlOffset=0.00010156631; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item157 + class Item296 { - position[]={22146.131,3.6079149,14447.916}; - azimut=-183.27357; - id=370; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.557,5.4616127,14484.079}; + angles[]={6.2738566,1.5463344,6.2778587}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=298; + type="Land_CncWall1_F"; + atlOffset=9.3221664e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item158 + class Item297 { - position[]={22126.006,4.0594997,14446.422}; - azimut=-184.22668; - id=371; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.584,5.450089,14482.817}; + angles[]={6.2778587,1.5463344,6.2738566}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=299; + type="Land_CncWall1_F"; + atlOffset=0.00010752678; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item159 + class Item298 { - position[]={22122.98,4.0967579,14446.309}; - azimut=-184.22668; - id=372; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.6,5.4673772,14481.559}; + angles[]={0.019996032,1.5463344,6.2738504}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=300; + type="Land_CncWall1_F"; + atlOffset=0.00043916702; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item160 + class Item299 { - position[]={22118.496,4.1100168,14449.35}; - azimut=-94.991455; - id=373; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.627,5.4917302,14480.328}; + angles[]={0.019996032,1.5463344,6.2738504}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=301; + type="Land_CncWall1_F"; + atlOffset=0.0004389286; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item161 + class Item300 { - position[]={22118.045,4.0403247,14456.127}; - azimut=-94.991455; - id=374; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.666,5.5165668,14479.068}; + angles[]={0.019996032,1.5463344,6.2738504}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=302; + type="Land_CncWall1_F"; + atlOffset=0.00043916702; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item162 + class Item301 { - position[]={22117.367,4.0020213,14461.891}; - azimut=-92.924416; - id=375; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.713,5.5399261,14477.878}; + angles[]={0.019996032,1.5463344,6.2738504}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=303; + type="Land_CncWall1_F"; + atlOffset=0.00042080879; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item163 + class Item302 { - position[]={22117.15,3.9634521,14468.666}; - azimut=-92.924416; - id=376; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.701,5.5648565,14476.638}; + angles[]={0.019996032,1.5463344,6.2738504}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=304; + type="Land_CncWall1_F"; + atlOffset=0.00043916702; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item164 + class Item303 { - position[]={22116.914,3.9057691,14475.477}; - azimut=-92.924416; - id=377; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.648,5.5863295,14475.576}; + angles[]={0.021328852,1.5463344,6.272521}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=305; + type="Land_CncWall1_F"; + atlOffset=0.00019335747; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item165 + class Item304 { - position[]={22116.631,3.7742383,14481.797}; - azimut=-91.196915; - id=378; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.713,5.604208,14474.384}; + angles[]={0.010664274,1.5463344,6.272521}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=306; + type="Land_CncWall1_F"; + atlOffset=0.00019097328; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item166 + class Item305 { - position[]={22116.607,3.7860131,14488.583}; - azimut=-91.196915; - id=379; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.779,5.6169424,14473.124}; + angles[]={0.010664274,1.5463344,6.272521}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=307; + type="Land_CncWall1_F"; + atlOffset=0.0001912117; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item167 + class Item306 { - position[]={22116.576,3.7924609,14495.383}; - azimut=-91.196915; - id=380; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.736,5.6314154,14471.81}; + angles[]={0.010664274,1.5463344,6.272521}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=308; + type="Land_CncWall1_F"; + atlOffset=0.0001912117; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item168 + class Item307 { - position[]={22116.17,3.7869689,14502.432}; - azimut=-91.863655; - id=381; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.775,5.6442862,14470.564}; + angles[]={0.010664274,1.5463344,6.272521}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=309; + type="Land_CncWall1_F"; + atlOffset=0.00019097328; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item169 + class Item308 { - position[]={22116.021,3.7888734,14510.177}; - azimut=-91.863655; - id=382; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.818,5.6574697,14469.286}; + angles[]={0.010664274,1.5463344,6.272521}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=310; + type="Land_CncWall1_F"; + atlOffset=0.00019097328; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item170 + class Item309 { - position[]={22118.303,3.79,14515.275}; - azimut=-2.6827953; - id=383; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.844,5.6696768,14468.116}; + angles[]={0.010664274,1.5463344,6.272521}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=311; + type="Land_CncWall1_F"; + atlOffset=0.00019097328; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item171 + class Item310 { - position[]={22124.959,3.7861216,14515.448}; - azimut=-2.6827953; - id=384; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.832,5.6791897,14466.869}; + angles[]={0.0053265258,1.5463344,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=312; + type="Land_CncWall1_F"; + atlOffset=8.9406967e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item172 + class Item311 { - position[]={22143.504,3.616123,14516.517}; - azimut=-363.15347; - id=385; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.863,5.6852636,14465.684}; + angles[]={0.0053265258,1.5463344,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=313; + type="Land_CncWall1_F"; + atlOffset=8.893013e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item173 + class Item312 { - position[]={22147.953,3.5510352,14516.544}; - azimut=-363.15347; - id=386; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.908,5.6911526,14464.511}; + angles[]={0.0053265258,1.5463344,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=314; + type="Land_CncWall1_F"; + atlOffset=7.4625015e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item174 + class Item313 { - position[]={22153.242,3.3727343,14513.053}; - azimut=-272.69806; - id=387; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.959,5.6974854,14463.249}; + angles[]={0.0053265258,1.5463344,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=315; + type="Land_CncWall1_F"; + atlOffset=8.9168549e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item175 + class Item314 { - position[]={22134.738,3.7514415,14510.455}; - azimut=-1.0628375; - id=388; - side="EMPTY"; - vehicle="Land_Cargo_Patrol_V1_F"; - skill=0.60000002; + dataType="Object"; + class PositionInfo + { + position[]={22124.949,5.7044582,14461.955}; + angles[]={0.0053265258,1.5463344,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=316; + type="Land_CncWall1_F"; + atlOffset=8.4400177e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item176 + class Item315 { - position[]={22123.406,3.78,14503.95}; - azimut=-124.2826; - id=389; - side="EMPTY"; - vehicle="Land_LampHalogen_F"; - skill=0.60000002; - init=" this allowDamage false; this allowDamage false; this setVectorUp [0,0,1];"; + dataType="Object"; + class PositionInfo + { + position[]={22124.984,5.7108054,14460.713}; + angles[]={0.0053265258,1.5463344,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=317; + type="Land_CncWall1_F"; + atlOffset=8.392334e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item177 + class Item316 { - position[]={22145.646,3.3608618,14504.478}; - azimut=-397.1615; - id=390; - side="EMPTY"; - vehicle="Land_LampHalogen_F"; - skill=0.60000002; - init=" this allowDamage false; this allowDamage false; this setVectorUp [0,0,1];"; + dataType="Object"; + class PositionInfo + { + position[]={22125.004,5.7179565,14459.476}; + angles[]={0.0066682254,1.5463344,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=318; + type="Land_CncWall1_F"; + atlOffset=0.00012350082; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item178 + class Item317 { - position[]={22147.045,3.6064601,14455.983}; - azimut=-296.63409; - id=391; - side="EMPTY"; - vehicle="Land_LampHalogen_F"; - skill=0.60000002; - init=" this allowDamage false; this allowDamage false; this setVectorUp [0,0,1];"; + dataType="Object"; + class PositionInfo + { + position[]={22125.053,5.7255344,14458.281}; + angles[]={0.0066682254,1.5463344,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=319; + type="Land_CncWall1_F"; + atlOffset=0.00030779839; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item179 + class Item318 { - position[]={22124.564,3.9871266,14454.951}; - azimut=-227.09998; - id=392; - side="EMPTY"; - vehicle="Land_LampHalogen_F"; - skill=0.60000002; - init=" this allowDamage false; this allowDamage false; this setVectorUp [0,0,1];"; + dataType="Object"; + class PositionInfo + { + position[]={22125.045,5.7339487,14457.028}; + angles[]={0.0066682254,1.5463344,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=320; + type="Land_CncWall1_F"; + atlOffset=0.00028443336; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item180 + class Item319 { - position[]={22140.889,3.6990845,14513.999}; - azimut=-272.69806; - id=393; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22127.043,5.7184625,14455.734}; + angles[]={0.0066682254,6.228487,6.2711902}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=321; + type="Land_CncWall1_F"; + atlOffset=0.00014591217; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item181 + class Item320 { - position[]={22129.115,3.7827771,14513.8}; - azimut=-272.69806; - id=394; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22128.273,5.7033305,14455.789}; + angles[]={0.0066682254,6.228487,6.2711902}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=322; + type="Land_CncWall1_F"; + atlOffset=0.00013995171; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item182 + class Item321 { - position[]={22131.109,3.781853,14508.533}; - azimut=-2.6827953; - id=395; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22129.42,5.6892457,14455.839}; + angles[]={0.0066682254,6.228487,6.2711902}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=323; + type="Land_CncWall1_F"; + atlOffset=-0.00089454651; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item183 + class Item322 { - position[]={22135.477,3.7403028,14508.775}; - azimut=-2.6827953; - id=396; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22130.615,5.6804781,14455.899}; + angles[]={0.0026520467,6.228487,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=324; + type="Land_CncWall1_F"; + atlOffset=6.4373016e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item184 + class Item323 { - position[]={22145.633,3.6182725,14447.939}; - azimut=-181.9622; - id=397; - side="EMPTY"; - vehicle="Land_Cargo_Patrol_V1_F"; - skill=0.60000002; + dataType="Object"; + class PositionInfo + { + position[]={22131.836,5.6704659,14455.99}; + angles[]={0.0026520467,6.228487,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=325; + type="Land_CncWall1_F"; + atlOffset=6.4611435e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item185 + class Item324 { - position[]={22139.459,3.87833,14447.405}; - azimut=-183.58215; - id=398; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22133.168,5.6562209,14456.038}; + angles[]={0.0026520467,6.228487,6.2698536}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=326; + type="Land_CncWall1_F"; + atlOffset=0.0001604557; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item186 + class Item325 { - position[]={22133.84,3.9532814,14446.934}; - azimut=-183.58215; - id=399; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22134.383,5.6399269,14456.078}; + angles[]={0.0026520467,6.228487,6.2698536}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=327; + type="Land_CncWall1_F"; + atlOffset=0.0001847744; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item187 + class Item326 { - position[]={22137.049,3.7214305,14465.632}; - azimut=-179.83893; - id=400; - side="EMPTY"; - vehicle="Land_Obstacle_RunAround_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22135.668,5.6225343,14456.174}; + angles[]={0.0026520467,6.228487,6.2698536}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=328; + type="Land_CncWall1_F"; + atlOffset=0.00018715858; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item188 + class Item327 { - position[]={22134.813,3.5731885,14476.702}; - azimut=-0.93823385; - id=401; - side="EMPTY"; - vehicle="Land_Obstacle_Crawl_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22136.873,5.6001806,14456.24}; + angles[]={0.013327583,6.228487,6.259192}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=329; + type="Land_CncWall1_F"; + atlOffset=0.00063633919; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item189 + class Item328 { - position[]={22134.879,3.562782,14488.138}; - azimut=51.810192; - id=402; - side="EMPTY"; - vehicle="Land_Obstacle_Bridge_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22138.115,5.5695801,14456.301}; + angles[]={0.013327583,6.228487,6.259192}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=330; + type="Land_CncWall1_F"; + atlOffset=0.00063633919; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item190 + class Item329 { - position[]={22167.379,3.3025391,14458.078}; - azimut=268.08618; - id=403; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22139.211,5.5429096,14456.33}; + angles[]={0.013327583,6.228487,6.259192}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=331; + type="Land_CncWall1_F"; + atlOffset=0.00067973137; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item191 + class Item330 { - position[]={22167.316,3.2947655,14458.745}; - azimut=268.08618; - id=404; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22140.4,5.5148025,14456.407}; + angles[]={0.013332055,6.228487,6.2631893}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=332; + type="Land_CncWall1_F"; + atlOffset=0.00052666664; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item192 + class Item331 { - position[]={22167.271,3.2809668,14459.993}; - azimut=268.08618; - id=405; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22141.664,5.488204,14456.507}; + angles[]={0.013332055,6.228487,6.2631893}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=333; + type="Land_CncWall1_F"; + atlOffset=0.00051498413; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item193 + class Item332 { - position[]={22167.234,3.2577038,14461.314}; - azimut=268.08618; - id=406; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22142.959,5.4618607,14456.538}; + angles[]={0.013332055,6.228487,6.2631893}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=334; + type="Land_CncWall1_F"; + atlOffset=0.00051450729; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item194 + class Item333 { - position[]={22167.197,3.2357154,14462.561}; - azimut=268.08618; - id=407; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22144.234,5.4308743,14456.63}; + angles[]={0.018663859,6.228487,6.2578578}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=335; + type="Land_CncWall1_F"; + atlOffset=0.00086832047; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item195 + class Item334 { - position[]={22167.18,3.2113061,14463.806}; - azimut=268.08618; - id=408; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22145.459,5.398509,14456.702}; + angles[]={0.018663859,6.228487,6.2578578}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=336; + type="Land_CncWall1_F"; + atlOffset=0.00088596344; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item196 + class Item335 { - position[]={22167.133,3.1876123,14464.973}; - azimut=268.08618; - id=409; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22146.195,5.379468,14456.723}; + angles[]={0.018663859,6.228487,6.2578578}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=337; + type="Land_CncWall1_F"; + atlOffset=0.00086832047; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item197 + class Item336 { - position[]={22167.145,3.1625049,14466.232}; - azimut=268.08618; - id=410; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22125.443,5.7384462,14455.618}; + angles[]={0.0066682254,6.2342987,6.2711902}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=338; + type="Land_CncWall1_F"; + atlOffset=0.00017261505; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item198 + class Item337 { - position[]={22167.076,3.1384888,14467.406}; - azimut=268.08618; - id=411; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22126.113,5.7300072,14455.678}; + angles[]={0.0066682254,6.2342987,6.2711902}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=339; + type="Land_CncWall1_F"; + atlOffset=0.00017213821; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item199 + class Item338 { - position[]={22167.018,3.1303515,14468.587}; - azimut=268.08618; - id=412; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22125.096,5.7360897,14456.646}; + angles[]={0.0066682254,1.5049661,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=340; + type="Land_CncWall1_F"; + atlOffset=0.00049543381; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item200 + class Item339 { - position[]={22166.961,3.1232228,14469.839}; - azimut=268.08618; - id=413; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22125.131,5.7405348,14455.937}; + angles[]={0.0066682254,1.5049661,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=341; + type="Land_CncWall1_F"; + atlOffset=0.00062179565; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item201 + class Item340 { - position[]={22166.957,3.1121752,14471.146}; - azimut=268.08618; - id=414; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22137.727,5.434948,14503.401}; + angles[]={6.2578602,3.1085646,6.2698536}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=342; + type="Land_CncWall1_F"; + atlOffset=0.00071501732; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item202 + class Item341 { - position[]={22166.898,3.0971777,14472.39}; - azimut=268.08618; - id=415; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22136.389,5.4514942,14503.352}; + angles[]={6.2578602,3.1085646,6.2698536}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=343; + type="Land_CncWall1_F"; + atlOffset=0.00068998337; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item203 + class Item342 { - position[]={22166.867,3.08214,14473.64}; - azimut=268.08618; - id=416; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22135.15,5.4665151,14503.292}; + angles[]={6.2578602,3.1085646,6.2698536}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=344; + type="Land_CncWall1_F"; + atlOffset=0.00071454048; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item204 + class Item343 { - position[]={22166.836,3.0678053,14474.831}; - azimut=268.08618; - id=417; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22133.891,5.4824538,14503.258}; + angles[]={6.2578602,3.1085646,6.2698536}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=345; + type="Land_CncWall1_F"; + atlOffset=-0.0062799454; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item205 + class Item344 { - position[]={22166.816,3.0686181,14476.072}; - azimut=268.08618; - id=418; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22131.502,5.5348506,14503.202}; + angles[]={6.2778587,3.1085646,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=346; + type="Land_CncWall1_F"; + atlOffset=2.7894974e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item206 + class Item345 { - position[]={22166.789,3.0716014,14477.205}; - azimut=268.08618; - id=419; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22130.271,5.5347185,14503.178}; + angles[]={6.2778587,3.1085646,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=347; + type="Land_CncWall1_F"; + atlOffset=2.7656555e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item207 + class Item346 { - position[]={22166.729,3.0743604,14478.39}; - azimut=268.08618; - id=420; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22128.941,5.5346403,14503.163}; + angles[]={6.2778587,3.1085646,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=348; + type="Land_CncWall1_F"; + atlOffset=2.7656555e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item208 + class Item347 { - position[]={22166.676,3.0744312,14479.641}; - azimut=268.08618; - id=421; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22127.705,5.534338,14503.106}; + angles[]={6.2778587,3.1085646,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=349; + type="Land_CncWall1_F"; + atlOffset=2.3126602e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item209 + class Item348 { - position[]={22166.664,3.0744457,14480.951}; - azimut=268.08618; - id=422; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22126.465,5.5366158,14503.086}; + angles[]={0,3.1085646,6.2778587}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=350; + type="Land_CncWall1_F"; + atlOffset=3.0517578e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item210 + class Item349 { - position[]={22166.625,3.0744994,14482.195}; - azimut=268.08618; - id=423; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22132.75,5.5278339,14503.27}; + angles[]={6.2778587,3.0986509,6.249866}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=351; + type="Land_CncWall1_F"; + atlOffset=0.0010118484; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item211 + class Item350 { - position[]={22166.563,3.077435,14484.639}; - azimut=268.08618; - id=424; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22144.695,5.1633391,14503.635}; + angles[]={6.2631893,3.1334929,6.2285728}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=352; + type="Land_CncWall1_F"; + atlOffset=0.002964735; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item212 + class Item351 { - position[]={22166.531,3.0791247,14485.875}; - azimut=268.08618; - id=425; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22144,5.2005892,14503.596}; + angles[]={6.2631893,3.1334929,6.2285728}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=353; + type="Land_CncWall1_F"; + atlOffset=0.0029649734; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item213 + class Item352 { - position[]={22166.486,3.0803161,14486.725}; - azimut=268.40182; - id=426; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.123,5.5444078,14502.704}; + angles[]={0,1.544179,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=354; + type="Land_CncWall1_F"; + atlOffset=2.3841858e-007; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item214 + class Item353 { - position[]={22166.42,3.0819824,14487.906}; - azimut=268.40182; - id=427; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.137,5.5444078,14502.014}; + angles[]={0,1.544179,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=355; + type="Land_CncWall1_F"; + atlOffset=2.3841858e-007; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item215 + class Item354 { - position[]={22166.387,3.0836937,14489.157}; - azimut=268.40182; - id=428; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22125.168,5.5435338,14503.011}; + angles[]={0,3.0980341,6.2778587}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=356; + type="Land_CncWall1_F"; + atlOffset=2.4557114e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item216 + class Item355 { - position[]={22166.367,3.0860839,14490.465}; - azimut=268.40182; - id=429; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.447,5.5444078,14502.99}; + angles[]={0,3.0980341,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=357; + type="Land_CncWall1_F"; + atlOffset=2.3841858e-007; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item217 + class Item356 { - position[]={22166.332,3.0894067,14491.693}; - azimut=268.40182; - id=430; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22142.797,5.2662344,14503.588}; + angles[]={6.2631893,3.1084001,6.2285728}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=358; + type="Land_CncWall1_F"; + atlOffset=0.0030109882; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item218 + class Item357 { - position[]={22166.293,3.0928321,14492.958}; - azimut=268.40182; - id=431; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22141.549,5.3337507,14503.551}; + angles[]={6.2631893,3.1084001,6.2285728}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=359; + type="Land_CncWall1_F"; + atlOffset=0.0029931068; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item219 + class Item358 { - position[]={22166.275,3.0954478,14494.137}; - azimut=268.40182; - id=432; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22140.264,5.3961201,14503.5}; + angles[]={6.2578578,3.0941136,6.233892}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=360; + type="Land_CncWall1_F"; + atlOffset=0.0028014183; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item220 + class Item359 { - position[]={22166.232,3.0972092,14495.373}; - azimut=268.40182; - id=433; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22138.953,5.4201889,14503.465}; + angles[]={6.2578602,3.0941136,6.2698536}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=361; + type="Land_CncWall1_F"; + atlOffset=0.00071287155; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item221 + class Item360 { - position[]={22166.166,3.1024158,14497.734}; - azimut=268.40182; - id=434; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22142.049,4.4738498,14456.766}; + angles[]={0.018663859,3.0797853,6.2578578}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=362; + type="Land_Razorwire_F"; + atlOffset=0.0066833496; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item222 + class Item361 { - position[]={22166.125,3.1143286,14498.999}; - azimut=268.40182; - id=435; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22135.869,4.6129794,14456.36}; + angles[]={0.013327583,3.076798,6.259192}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=363; + type="Land_Razorwire_F"; + atlOffset=0.0031542778; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item223 + class Item362 { - position[]={22166.129,3.1265552,14500.31}; - azimut=268.40182; - id=436; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22129.014,4.683743,14455.962}; + angles[]={0.0026520467,3.0830333,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=364; + type="Land_Razorwire_F"; + atlOffset=-5.4359436e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item224 + class Item363 { - position[]={22166.074,3.1375597,14501.541}; - azimut=268.40182; - id=437; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22128.305,4.6896858,14455.864}; + angles[]={0.0026520467,3.0777483,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=365; + type="Land_Razorwire_F"; + atlOffset=-0.003289938; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item225 + class Item364 { - position[]={22166.045,3.1428113,14502.796}; - azimut=268.40182; - id=438; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22142.014,4.299387,14503.521}; + angles[]={6.2578578,6.2420454,6.233892}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=366; + type="Land_Razorwire_F"; + atlOffset=0.0039806366; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item226 + class Item365 { - position[]={22166.555,3.0757945,14483.401}; - azimut=267.8017; - id=439; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22135.783,4.4171162,14503.333}; + angles[]={6.2778587,6.256669,6.249866}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=367; + type="Land_Razorwire_F"; + atlOffset=-0.031939983; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item227 + class Item366 { - position[]={22147.615,3.5796363,14456.662}; - azimut=-2.8845694; - id=440; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22128.734,4.5151696,14503.01}; + angles[]={0,6.22051,6.2778587}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=368; + type="Land_Razorwire_F"; + atlOffset=-0.0092868805; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item228 + class Item367 { - position[]={22148.865,3.5504417,14456.71}; - azimut=-2.8845694; - id=441; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.23,4.5334544,14499.474}; + angles[]={0.0013372133,4.6886787,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=369; + type="Land_Razorwire_F"; + atlOffset=-0.0016124249; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item229 + class Item368 { - position[]={22149.996,3.5239551,14456.755}; - azimut=-2.8845694; - id=442; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.438,4.518322,14493.126}; + angles[]={6.2791886,4.6757913,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=370; + type="Land_Razorwire_F"; + atlOffset=-4.7683716e-007; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item230 + class Item369 { - position[]={22151.182,3.4907105,14456.837}; - azimut=-2.8845694; - id=443; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.648,4.469171,14485.949}; + angles[]={6.2738566,4.6963992,6.2778587}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=371; + type="Land_Razorwire_F"; + atlOffset=4.1723251e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item231 + class Item370 { - position[]={22152.438,3.4486694,14456.903}; - azimut=-2.8845694; - id=444; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.75,4.5121751,14478.77}; + angles[]={0.019996032,4.6964121,6.2738504}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=372; + type="Land_Razorwire_F"; + atlOffset=0.00018692017; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item232 + class Item371 { - position[]={22153.732,3.405885,14456.951}; - azimut=-2.8845694; - id=445; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.877,4.621542,14471.71}; + angles[]={0.010664274,4.6904449,6.272521}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=373; + type="Land_Razorwire_F"; + atlOffset=7.8439713e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item233 + class Item372 { - position[]={22154.971,3.3648584,14457}; - azimut=-2.8845694; - id=446; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.986,4.6767101,14465.345}; + angles[]={0.0053265258,4.6879969,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=374; + type="Land_Razorwire_F"; + atlOffset=5.1259995e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item234 + class Item373 { - position[]={22156.221,3.3378358,14457.062}; - azimut=-2.8845694; - id=447; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.951,4.7022057,14460.49}; + angles[]={0.0066682254,4.6715374,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=375; + type="Land_Razorwire_F"; + atlOffset=-0.00062513351; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item235 + class Item374 { - position[]={22157.406,3.3122594,14457.127}; - azimut=-2.8845694; - id=448; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22151.115,4.3390632,14448.174}; + angles[]={0.0013372133,3.0844581,6.2605233}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=376; + type="Land_Razorwire_F"; + atlOffset=0.013443232; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item236 + class Item375 { - position[]={22158.646,3.2973633,14457.157}; - azimut=-2.8845694; - id=449; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22144.416,4.39676,14447.871}; + angles[]={6.2658529,3.0844581,6.2631865}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=377; + type="Land_Razorwire_F"; + atlOffset=-0.005961895; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item237 + class Item376 { - position[]={22159.77,3.289115,14457.21}; - azimut=-2.8845694; - id=450; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.287,4.8382177,14446.371}; + angles[]={0.011995304,3.0678234,6.2698536}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=378; + type="Land_Razorwire_F"; + atlOffset=0.0020108223; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item238 + class Item377 { - position[]={22160.936,3.2801037,14457.294}; - azimut=-2.8845694; - id=451; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22121.26,4.8732448,14446.259}; + angles[]={0.013332055,3.0678234,6.2711902}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=379; + type="Land_Razorwire_F"; + atlOffset=0.00010681152; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item239 + class Item378 { - position[]={22162.209,3.2705469,14457.366}; - azimut=-2.8845694; - id=452; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22118.422,4.8429227,14451.088}; + angles[]={0.013332055,4.6252718,6.2711902}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=380; + type="Land_Razorwire_F"; + atlOffset=0.00010681152; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item240 + class Item379 { - position[]={22163.51,3.274806,14457.403}; - azimut=-2.8845694; - id=453; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22117.969,4.7800832,14457.862}; + angles[]={0.0093286335,4.6252718,6.272521}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=381; + type="Land_Razorwire_F"; + atlOffset=9.2029572e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item241 + class Item380 { - position[]={22164.75,3.2820497,14457.474}; - azimut=-2.8845694; - id=454; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22117.357,4.7481008,14463.625}; + angles[]={0.0053265258,4.6613483,6.2671871}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=382; + type="Land_Razorwire_F"; + atlOffset=0.0001142025; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item242 + class Item381 { - position[]={22166.002,3.293838,14457.518}; - azimut=-2.8845694; - id=455; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22117.135,4.7047963,14470.402}; + angles[]={0.0080009829,4.6613483,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=383; + type="Land_Razorwire_F"; + atlOffset=3.9577484e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item243 + class Item382 { - position[]={22166.717,3.3011034,14457.552}; - azimut=-2.8845694; - id=456; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22116.898,4.628561,14477.221}; + angles[]={0.018663859,4.6613483,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=384; + type="Land_Razorwire_F"; + atlOffset=0.0044705868; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item244 + class Item383 { - position[]={22165.727,3.1432726,14502.273}; - azimut=-272.44894; - id=457; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22116.67,4.4918647,14483.542}; + angles[]={0.021328852,4.6914992,6.272521}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=385; + type="Land_Razorwire_F"; + atlOffset=-0.022081614; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item245 + class Item384 { - position[]={22166.24,3.0987973,14496.579}; - azimut=267.8338; - id=458; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22116.643,4.5501523,14490.309}; + angles[]={6.2778587,4.6914992,6.2791886}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=386; + type="Land_Razorwire_F"; + atlOffset=0.0020704269; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item246 + class Item385 { - position[]={22146.021,3.6216066,14456.562}; - azimut=357.44836; - id=459; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22116.609,4.5474424,14497.112}; + angles[]={0,4.6914992,6.2805333}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=387; + type="Land_Razorwire_F"; + atlOffset=2.6226044e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item247 + class Item386 { - position[]={22146.689,3.603821,14456.607}; - azimut=357.44836; - id=460; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22116.184,4.5396895,14504.163}; + angles[]={0.0013372133,4.679862,6.2805333}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=388; + type="Land_Razorwire_F"; + atlOffset=2.1457672e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item248 + class Item387 { - position[]={22158.631,3.1842248,14504.899}; - azimut=178.35699; - id=461; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22116.033,4.5462375,14511.906}; + angles[]={6.2818484,4.679862,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=389; + type="Land_Razorwire_F"; + atlOffset=8.5830688e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item249 + class Item388 { - position[]={22157.262,3.1855297,14504.844}; - azimut=178.35699; - id=462; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22120.033,4.5450668,14515.289}; + angles[]={0,6.236362,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=390; + type="Land_Razorwire_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item250 + class Item389 { - position[]={22156.02,3.1867347,14504.795}; - azimut=178.35699; - id=463; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22126.689,4.5388556,14515.463}; + angles[]={0.0013372133,6.236362,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=391; + type="Land_Razorwire_F"; + atlOffset=-6.4373016e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item251 + class Item390 { - position[]={22154.775,3.1900587,14504.781}; - azimut=178.35699; - id=464; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22145.244,4.3483152,14516.537}; + angles[]={6.272521,6.228147,6.2698536}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=392; + type="Land_Razorwire_F"; + atlOffset=0.0001282692; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item252 + class Item391 { - position[]={22152.42,3.2141407,14504.685}; - azimut=178.35699; - id=465; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22149.703,4.2599759,14516.564}; + angles[]={6.272521,6.228147,6.256525}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=393; + type="Land_Razorwire_F"; + atlOffset=0.0003387928; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item253 + class Item392 { - position[]={22151.174,3.2271779,14504.659}; - azimut=178.35699; - id=466; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22153.277,4.1086655,14511.314}; + angles[]={6.272521,1.5237064,6.256525}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=394; + type="Land_Razorwire_F"; + atlOffset=0.0082349777; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item254 + class Item393 { - position[]={22149.865,3.2410154,14504.647}; - azimut=178.35699; - id=467; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22134.75,8.6646729,14511.669}; + angles[]={6.2765174,6.2646356,6.2765174}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=395; + type="Land_Cargo_Patrol_V1_F"; + atlOffset=0.00021100044; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item255 + class Item394 { - position[]={22148.639,3.2537403,14504.614}; - azimut=178.35699; - id=468; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22123.391,9.7621794,14503.939}; + angles[]={0,4.1140451,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this allowDamage false; this setVectorUp [0,0,1];"; + }; + id=396; + type="Land_LampHalogen_F"; + atlOffset=2.3841858e-007; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item256 + class Item395 { - position[]={22147.367,3.2688208,14504.58}; - azimut=178.35699; - id=469; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22145.961,9.333847,14504.373}; + angles[]={6.2631893,5.6345954,6.2285728}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this allowDamage false; this setVectorUp [0,0,1];"; + }; + id=397; + type="Land_LampHalogen_F"; + atlOffset=0.01011014; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item257 + class Item396 { - position[]={22153.592,3.202383,14504.754}; - azimut=177.78897; - id=470; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22147.213,9.5850964,14456.104}; + angles[]={0.018663859,1.1059437,6.2578578}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this allowDamage false; this setVectorUp [0,0,1];"; + }; + id=398; + type="Land_LampHalogen_F"; + atlOffset=0.0029635429; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item258 + class Item397 { - position[]={22165.518,3.1568005,14505.079}; - azimut=179.78531; - id=471; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22124.627,9.9689569,14454.979}; + angles[]={0.0066682254,2.3195431,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this allowDamage false; this setVectorUp [0,0,1];"; + }; + id=399; + type="Land_LampHalogen_F"; + atlOffset=0.00033211708; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item259 + class Item398 { - position[]={22164.863,3.161869,14505.064}; - azimut=179.78531; - id=472; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22140.924,4.4603705,14512.272}; + angles[]={0.0039967569,1.5237064,6.2551923}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=400; + type="Land_Razorwire_F"; + atlOffset=0.0087630749; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item260 + class Item399 { - position[]={22166.031,3.1465685,14503.706}; - azimut=-91.185493; - id=473; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22129.131,4.5401373,14512.07}; + angles[]={0.0013372133,1.5237064,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=401; + type="Land_Razorwire_F"; + atlOffset=0.00058078766; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item261 + class Item400 { - position[]={22166.004,3.1497326,14504.441}; - azimut=-91.185493; - id=474; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22132.84,4.5346842,14508.547}; + angles[]={0,6.236362,6.2818937}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=402; + type="Land_Razorwire_F"; + atlOffset=0.0041582584; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item262 + class Item401 { - position[]={22146.057,3.3391175,14504.512}; - azimut=177.7536; - id=475; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22137.217,4.4722457,14508.789}; + angles[]={0,6.236362,6.2698579}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=403; + type="Land_Razorwire_F"; + atlOffset=-0.0066261292; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item263 + class Item402 { - position[]={22145.336,3.3781261,14504.495}; - azimut=177.7536; - id=476; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22145.771,8.4991598,14446.608}; + angles[]={6.2658529,3.1073458,6.2631865}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=404; + type="Land_Cargo_Patrol_V1_F"; + atlOffset=-0.0017094612; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item264 + class Item403 { - position[]={22163.621,3.1715479,14505.043}; - azimut=178.34756; - id=477; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22137.74,4.6568222,14447.374}; + angles[]={0.011995304,3.0790725,6.2698536}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=405; + type="Land_Razorwire_F"; + atlOffset=0.0001270771; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item265 + class Item404 { - position[]={22162.371,3.1807265,14505.031}; - azimut=178.34756; - id=478; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22132.119,4.7294321,14446.901}; + angles[]={0.010664274,3.0790725,6.2711902}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=406; + type="Land_Razorwire_F"; + atlOffset=0.00010991096; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item266 + class Item405 { - position[]={22161.1,3.1816688,14504.979}; - azimut=177.52898; - id=479; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22137.059,4.0680671,14465.69}; + angles[]={0.013336525,3.1444042,6.253859}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=407; + type="Land_Obstacle_RunAround_F"; + atlOffset=0.00015282631; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item267 + class Item406 { - position[]={22159.83,3.1829958,14504.938}; - azimut=177.52898; - id=480; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22134.85,3.8944361,14476.858}; + angles[]={0.014664836,6.2668104,6.2392135}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=408; + type="Land_Obstacle_Crawl_F"; + atlOffset=0.00034809113; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item268 + class Item407 { - position[]={22165.979,3.0988133,14496.067}; - azimut=-272.44894; - id=481; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22134.902,4.1873016,14488.102}; + angles[]={6.2818484,0.90425843,6.2392135}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=409; + type="Land_Obstacle_Bridge_F"; + atlOffset=0.00065970421; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item269 + class Item408 { - position[]={22166.01,3.0844481,14489.346}; - azimut=-272.44894; - id=482; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22167.084,5.0631738,14458.155}; + angles[]={0.010664274,4.6789865,0.010664274}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=410; + type="Land_CncWall1_F"; + atlOffset=0.00019192696; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item270 + class Item409 { - position[]={22166.221,3.0750365,14482.271}; - azimut=-272.44894; - id=483; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22167.021,5.0553999,14458.822}; + angles[]={0.010664274,4.6789865,0.010664274}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=411; + type="Land_CncWall1_F"; + atlOffset=0.00019145012; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item271 + class Item410 { - position[]={22166.443,3.0658886,14475.235}; - azimut=-272.44894; - id=484; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.977,5.0416012,14460.07}; + angles[]={0.010664274,4.6789865,0.010664274}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=412; + type="Land_CncWall1_F"; + atlOffset=0.0006775856; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item272 + class Item411 { - position[]={22166.746,3.1309912,14468.061}; - azimut=-272.44894; - id=485; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.939,5.0177875,14461.403}; + angles[]={0.017332481,4.6789865,0.010664274}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=413; + type="Land_CncWall1_F"; + atlOffset=0.00035977364; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item273 + class Item412 { - position[]={22166.975,3.2185645,14463.361}; - azimut=-272.44894; - id=486; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.902,4.9957991,14462.649}; + angles[]={0.017332481,4.6789865,0.010664274}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=414; + type="Land_CncWall1_F"; + atlOffset=0.00036001205; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item274 + class Item413 { - position[]={22164.418,3.2731531,14457.93}; - azimut=-183.29196; - id=487; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.889,4.9719291,14463.898}; + angles[]={0.019996032,4.6789865,0.0080009829}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=415; + type="Land_CncWall1_F"; + atlOffset=0.00039386749; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item275 + class Item414 { - position[]={22158.238,3.2939622,14457.575}; - azimut=-183.46313; - id=488; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.842,4.9482355,14465.065}; + angles[]={0.019996032,4.6789865,0.0080009829}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=416; + type="Land_CncWall1_F"; + atlOffset=0.00041246414; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item276 + class Item415 { - position[]={22151.416,3.4736998,14457.177}; - azimut=-183.10587; - id=489; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.854,4.9231281,14466.325}; + angles[]={0.019996032,4.6789865,0.0080009829}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=417; + type="Land_CncWall1_F"; + atlOffset=0.00041246414; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item277 + class Item416 { - position[]={22150.66,3.4996424,14457.114}; - azimut=-183.40868; - id=490; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.785,4.8991117,14467.499}; + angles[]={0.019996032,4.6789865,0.0080009829}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=418; + type="Land_CncWall1_F"; + atlOffset=0.00041222572; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item278 + class Item417 { - position[]={22161.117,3.1787329,14504.666}; - azimut=357.89221; - id=491; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.727,4.8921528,14468.654}; + angles[]={0.0053265258,4.6789865,0.0080009829}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=419; + type="Land_CncWall1_F"; + atlOffset=8.4161758e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item279 + class Item418 { - position[]={22154.867,3.186631,14504.552}; - azimut=358.7301; - id=492; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.67,4.8850241,14469.906}; + angles[]={0.0053265258,4.6789865,0.0080009829}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=420; + type="Land_CncWall1_F"; + atlOffset=8.4161758e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item280 + class Item419 { - position[]={22147.922,3.2555749,14504.307}; - azimut=356.65833; - id=493; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.678,4.8753881,14471.226}; + angles[]={0.012000273,4.6789865,0.0013372133}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=421; + type="Land_CncWall1_F"; + atlOffset=0.00012350082; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item281 + class Item420 { - position[]={22174.371,3.1363928,14511.01}; - azimut=-272.44894; - id=494; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.619,4.8603907,14472.469}; + angles[]={0.012000273,4.6789865,0.0013372133}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=422; + type="Land_CncWall1_F"; + atlOffset=0.00012373924; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item282 + class Item421 { - position[]={22174.547,3.0896776,14504.229}; - azimut=-272.44894; - id=495; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.588,4.8453526,14473.719}; + angles[]={0.012000273,4.6789865,0.0013372133}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=423; + type="Land_CncWall1_F"; + atlOffset=0.00012350082; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item283 + class Item422 { - position[]={22174.713,3.0773206,14497.416}; - azimut=-272.44855; - id=496; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.557,4.831018,14474.91}; + angles[]={0.012000273,4.6789865,0.0013372133}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=424; + type="Land_CncWall1_F"; + atlOffset=0.00013446808; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item284 + class Item423 { - position[]={22174.898,3.0677929,14490.644}; - azimut=-272.44894; - id=497; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.537,4.8328013,14476.126}; + angles[]={6.2805333,4.6789865,0.0013372133}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=425; + type="Land_CncWall1_F"; + atlOffset=5.2452087e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item285 + class Item424 { - position[]={22174.867,3.0648718,14483.521}; - azimut=-272.44894; - id=498; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.51,4.8357849,14477.259}; + angles[]={6.2805333,4.6789865,0.0013372133}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=426; + type="Land_CncWall1_F"; + atlOffset=5.2452087e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item286 + class Item425 { - position[]={22175.049,3.1171339,14476.749}; - azimut=-272.44894; - id=499; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.453,4.8391247,14478.447}; + angles[]={0,4.6789865,6.2818937}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=427; + type="Land_CncWall1_F"; + atlOffset=0.00024938583; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item287 + class Item426 { - position[]={22175.318,3.2406495,14469.957}; - azimut=-272.44894; - id=500; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.4,4.8391953,14479.698}; + angles[]={0,4.6789865,6.2818937}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=428; + type="Land_CncWall1_F"; + atlOffset=-9.7751617e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item288 + class Item427 { - position[]={22175.488,3.3118191,14463.16}; - azimut=-272.44894; - id=501; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.389,4.8392096,14481.009}; + angles[]={0,4.6789865,6.2818937}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=429; + type="Land_CncWall1_F"; + atlOffset=-1.2397766e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item289 + class Item428 { - position[]={22175.74,3.3786707,14456.23}; - azimut=-272.44894; - id=502; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.35,4.8392634,14482.253}; + angles[]={0,4.6789865,6.2818937}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=430; + type="Land_CncWall1_F"; + atlOffset=-9.7751617e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item290 + class Item429 { - position[]={22175.918,3.3883815,14454.217}; - azimut=-272.44894; - id=503; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.287,4.8422875,14484.694}; + angles[]={6.2818484,4.6789865,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=431; + type="Land_CncWall1_F"; + atlOffset=4.0531158e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item291 + class Item430 { - position[]={22173.447,3.4076393,14449.332}; - azimut=-183.02423; - id=504; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.256,4.843977,14485.931}; + angles[]={6.2818484,4.6789865,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=432; + type="Land_CncWall1_F"; + atlOffset=3.8146973e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item292 + class Item431 { - position[]={22166.734,3.3865404,14449.067}; - azimut=-183.02423; - id=505; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.213,4.84517,14486.782}; + angles[]={6.2818484,4.6844954,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=433; + type="Land_CncWall1_F"; + atlOffset=3.3378601e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item293 + class Item432 { - position[]={22146.623,3.5934143,14447.647}; - azimut=-183.97733; - id=506; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.146,4.8468366,14487.964}; + angles[]={6.2818484,4.6844954,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=434; + type="Land_CncWall1_F"; + atlOffset=5.9604645e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item294 + class Item433 { - position[]={22145.898,3.5860646,14516.692}; - azimut=-2.4333749; - id=507; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.113,4.8485479,14489.215}; + angles[]={6.2818484,4.6844954,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=435; + type="Land_CncWall1_F"; + atlOffset=5.9604645e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item295 + class Item434 { - position[]={22164.396,3.2986767,14517.665}; - azimut=-362.90411; - id=508; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.094,4.8510118,14490.52}; + angles[]={6.2805333,4.6844954,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=436; + type="Land_CncWall1_F"; + atlOffset=1.001358e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item296 + class Item435 { - position[]={22168.867,3.263495,14517.666}; - azimut=-362.90411; - id=509; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.059,4.8543344,14491.748}; + angles[]={6.2805333,4.6844954,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=437; + type="Land_CncWall1_F"; + atlOffset=1.001358e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item297 + class Item436 { - position[]={22174.166,3.1586742,14514.97}; - azimut=-272.44894; - id=510; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.02,4.85776,14493.013}; + angles[]={6.2805333,4.6844954,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=438; + type="Land_CncWall1_F"; + atlOffset=1.2636185e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item298 + class Item437 { - position[]={22155.613,3.3043261,14511.643}; - azimut=-0.81340927; - id=511; - side="EMPTY"; - vehicle="Land_Cargo_Patrol_V1_F"; - skill=0.60000002; + dataType="Object"; + class PositionInfo + { + position[]={22166.004,4.860661,14494.194}; + angles[]={6.2818484,4.6844954,6.2805333}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=439; + type="Land_CncWall1_F"; + atlOffset=5.9604645e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item299 + class Item438 { - position[]={22144.238,3.4494398,14505.174}; - azimut=-124.03324; - id=512; - side="EMPTY"; - vehicle="Land_LampHalogen_F"; - skill=0.60000002; - init=" this allowDamage false; this allowDamage false; this setVectorUp [0,0,1];"; + dataType="Object"; + class PositionInfo + { + position[]={22165.961,4.8624225,14495.431}; + angles[]={6.2818484,4.6844954,6.2805333}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=440; + type="Land_CncWall1_F"; + atlOffset=5.9604645e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item300 + class Item439 { - position[]={22166.518,3.1552296,14505.614}; - azimut=-396.91214; - id=513; - side="EMPTY"; - vehicle="Land_LampHalogen_F"; - skill=0.60000002; - init=" this allowDamage false; this allowDamage false; this setVectorUp [0,0,1];"; + dataType="Object"; + class PositionInfo + { + position[]={22165.895,4.8680296,14497.777}; + angles[]={6.2738566,4.6844954,6.2805333}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=441; + type="Land_CncWall1_F"; + atlOffset=7.724762e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item301 + class Item440 { - position[]={22167.693,3.3162501,14457.108}; - azimut=-296.38489; - id=514; - side="EMPTY"; - vehicle="Land_LampHalogen_F"; - skill=0.60000002; - init=" this allowDamage false; this allowDamage false; this setVectorUp [0,0,1];"; + dataType="Object"; + class PositionInfo + { + position[]={22165.854,4.8799419,14499.042}; + angles[]={6.2738566,4.6844954,6.2805333}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=442; + type="Land_CncWall1_F"; + atlOffset=8.1300735e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item302 + class Item441 { - position[]={22145.215,3.649143,14456.18}; - azimut=-226.85071; - id=515; - side="EMPTY"; - vehicle="Land_LampHalogen_F"; - skill=0.60000002; - init=" this allowDamage false; this allowDamage false; this setVectorUp [0,0,1];"; + dataType="Object"; + class PositionInfo + { + position[]={22165.857,4.892169,14500.353}; + angles[]={6.2738566,4.6844954,6.2805333}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=443; + type="Land_CncWall1_F"; + atlOffset=8.1777573e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item303 + class Item442 { - position[]={22161.764,3.2981029,14515.153}; - azimut=-272.44894; - id=516; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22165.813,4.9043484,14501.594}; + angles[]={6.2791886,4.6844954,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=444; + type="Land_CncWall1_F"; + atlOffset=0.00056576729; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item304 + class Item443 { - position[]={22149.984,3.4805272,14515.011}; - azimut=-272.44894; - id=517; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22165.783,4.9095998,14502.849}; + angles[]={6.2791886,4.6844954,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=445; + type="Land_CncWall1_F"; + atlOffset=7.390976e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item305 + class Item444 { - position[]={22151.996,3.3521533,14509.734}; - azimut=-2.4333749; - id=518; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.279,4.8406453,14483.456}; + angles[]={6.2818484,4.6740212,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=446; + type="Land_CncWall1_F"; + atlOffset=3.8146973e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item306 + class Item445 { - position[]={22156.369,3.2739782,14509.949}; - azimut=-2.4333749; - id=519; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22147.709,5.3368893,14456.973}; + angles[]={0.018663859,6.2328401,6.2605233}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=447; + type="Land_CncWall1_F"; + atlOffset=0.00075554848; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item307 + class Item446 { - position[]={22160.068,3.4356945,14448.574}; - azimut=-183.33281; - id=520; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22148.959,5.3076944,14457.021}; + angles[]={0.018663859,6.2328401,6.2605233}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=448; + type="Land_CncWall1_F"; + atlOffset=0.00077223778; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item308 + class Item447 { - position[]={22154.461,3.5080457,14448.116}; - azimut=-183.33281; - id=521; - side="EMPTY"; - vehicle="Land_Razorwire_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22150.09,5.281208,14457.065}; + angles[]={0.018663859,6.2328401,6.2605233}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=449; + type="Land_CncWall1_F"; + atlOffset=0.00075531006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item309 + class Item448 { - position[]={25830.223,20.957716,21446.068}; - azimut=-269.17001; - id=522; - side="EMPTY"; - vehicle="Land_CashDesk_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22151.291,5.2440414,14457.164}; + angles[]={0.027993103,6.2328401,6.2511969}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=450; + type="Land_CncWall1_F"; + atlOffset=0.0015907288; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item310 + class Item449 { - position[]={14026.541,26.913677,18704.83}; - azimut=152.694; - offsetY=0.5; - id=523; - side="EMPTY"; - vehicle="Land_CashDesk_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22152.547,5.2020001,14457.23}; + angles[]={0.027993103,6.2328401,6.2511969}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=451; + type="Land_CncWall1_F"; + atlOffset=0.0016157627; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item311 + class Item450 { - position[]={25802.791,20.725479,21408.162}; - azimut=-47.007801; - offsetY=0.44999999; - id=524; - side="EMPTY"; - vehicle="Land_CashDesk_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22153.842,5.1592159,14457.278}; + angles[]={0.027993103,6.2328401,6.2511969}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=452; + type="Land_CncWall1_F"; + atlOffset=0.0015907288; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item312 + class Item451 { - position[]={16991.16,16.379005,12863.847}; - azimut=-222.58842; - id=525; - side="EMPTY"; - vehicle="Land_MarketShelter_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22155.08,5.1181889,14457.327}; + angles[]={0.027993103,6.2328401,6.2511969}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=453; + type="Land_CncWall1_F"; + atlOffset=0.0005645752; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item313 + class Item452 { - position[]={25779.248,20.250072,21353.186}; - azimut=-228.08063; - offsetY=0.5; - id=526; - side="EMPTY"; - vehicle="Land_CashDesk_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22156.309,5.0923548,14457.389}; + angles[]={0.027993103,6.2328401,6.2631893}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=454; + type="Land_CncWall1_F"; + atlOffset=0.0010464191; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item314 + class Item453 { - position[]={16995.295,15.8766,12661.419}; - azimut=-517.90808; - offsetY=0.1; - id=527; - side="EMPTY"; - vehicle="Land_CashDesk_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22157.494,5.0667782,14457.454}; + angles[]={0.027993103,6.2328401,6.2631893}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=455; + type="Land_CncWall1_F"; + atlOffset=0.0010204315; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item315 + class Item454 { - position[]={18158.439,26.49745,12839.705}; - azimut=-589.14899; - offsetY=0.30000001; - id=528; - side="EMPTY"; - vehicle="Land_CashDesk_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22158.711,5.0571113,14457.461}; + angles[]={0.014664836,6.2328401,6.276526}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=456; + type="Land_CncWall1_F"; + atlOffset=0.00021219254; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item316 + class Item455 { - position[]={18158.439,26.49745,12839.705}; - azimut=-589.14893; - id=529; - side="EMPTY"; - vehicle="Land_CashDesk_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22159.834,5.0488629,14457.514}; + angles[]={0.014664836,6.2328401,6.276526}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=457; + type="Land_CncWall1_F"; + atlOffset=0.00023770332; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item317 + class Item456 { - position[]={12682.056,1.9922448,14216.246}; - azimut=-222.14398; - id=530; - side="EMPTY"; - vehicle="Land_CashDesk_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22161,5.0398517,14457.598}; + angles[]={0.014664836,6.2328401,6.276526}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=458; + type="Land_CncWall1_F"; + atlOffset=0.00022554398; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item318 + class Item457 { - position[]={17540.965,2.9164281,18942.279}; - azimut=-222.14398; - id=531; - side="EMPTY"; - vehicle="Land_CashDesk_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22162.273,5.0302949,14457.67}; + angles[]={0.014664836,6.2328401,6.276526}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=459; + type="Land_CncWall1_F"; + atlOffset=0.00022554398; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item319 + class Item458 { - position[]={13948.376,23.116005,18665.617}; - azimut=-138.34399; - offsetY=0.1; - id=532; - side="EMPTY"; - vehicle="Land_CashDesk_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22163.551,5.0352635,14457.707}; + angles[]={0.014664836,6.2328401,0.0066592805}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=460; + type="Land_CncWall1_F"; + atlOffset=0.00022602081; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item320 + class Item459 { - position[]={15935.787,14.171714,16987.725}; - azimut=69.064613; - id=533; - side="EMPTY"; - vehicle="Land_BagBunker_Small_F"; - skill=0.60000002; + dataType="Object"; + class PositionInfo + { + position[]={22164.791,5.0425072,14457.777}; + angles[]={0.014664836,6.2328401,0.0066592805}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=461; + type="Land_CncWall1_F"; + atlOffset=-5.4836273e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item321 + class Item460 { - position[]={15931.467,14.21021,16999.943}; - azimut=69.064613; - id=534; - side="EMPTY"; - vehicle="Land_BagBunker_Small_F"; - skill=0.60000002; + dataType="Object"; + class PositionInfo + { + position[]={22166.037,5.0556493,14457.814}; + angles[]={0.010664274,6.2328401,0.010664274}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=462; + type="Land_CncWall1_F"; + atlOffset=0.00020647049; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item322 + class Item461 { - position[]={15934.458,14.185606,16991.496}; - azimut=71.119247; - id=535; - side="EMPTY"; - vehicle="Land_BarGate_F"; - skill=0.60000002; - init="this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.752,5.0629148,14457.849}; + angles[]={0.010664274,6.2328401,0.010664274}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=463; + type="Land_CncWall1_F"; + atlOffset=0.00019669533; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item323 + class Item462 { - position[]={16014.4,14.4064,16959.6}; - azimut=-36.139599; - offsetY=0.69999999; - id=536; - side="EMPTY"; - vehicle="Land_CargoBox_V1_F"; - skill=0.60000002; - text="fed_bank"; - init="this allowDamage false; this enableSimulation false; this addAction[""Open Vault"",life_fnc_safeOpen,"""",0,false,false,"""",' playerSide == civilian && {_target getVariable[""safe_open"",false]} ']; this addAction[""Fix Vault"",life_fnc_safeFix,"""",0,false,false,"""",' playerSide == west && {_target getVariable [""safe_open"",false]} ' ];"; + dataType="Object"; + class PositionInfo + { + position[]={22165.738,3.8913422,14500.54}; + angles[]={6.2791886,1.5280542,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=464; + type="Land_Razorwire_F"; + atlOffset=0.0065352917; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item324 + class Item463 { - position[]={3404.8494,1.9043919,12896.378}; - azimut=134.68312; - offsetY=0.47999999; - id=537; - side="EMPTY"; - vehicle="Land_CashDesk_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22165.967,4.8640084,14496.634}; + angles[]={6.2818484,4.6745815,6.2805333}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=465; + type="Land_CncWall1_F"; + atlOffset=2.3841858e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item325 + class Item464 { - position[]={3267.1985,2.166265,12959.9}; - azimut=268.55899; - id=538; - side="EMPTY"; - vehicle="Land_Atm_02_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={22146.121,5.3785696,14456.872}; + angles[]={0.018663859,6.2386508,6.2578578}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=466; + type="Land_CncWall1_F"; + atlOffset=0.00090026855; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item326 + class Item465 { - position[]={3655.0068,10.501743,13082.2}; - azimut=179.22011; - id=539; - side="EMPTY"; - vehicle="Land_Atm_02_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={22146.789,5.3607841,14456.918}; + angles[]={0.018663859,6.2386508,6.2578578}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=467; + type="Land_CncWall1_F"; + atlOffset=0.00085401535; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item327 + class Item466 { - position[]={3505.4761,5.0068388,13153.467}; - azimut=313.94617; - id=540; - side="EMPTY"; - vehicle="Land_Atm_02_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={22158.574,4.9460521,14504.606}; + angles[]={6.2738566,3.1129167,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=468; + type="Land_CncWall1_F"; + atlOffset=7.8201294e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item328 + class Item467 { - position[]={9024.7178,30.51642,12121.449}; - azimut=193.04398; - id=541; - side="EMPTY"; - vehicle="Land_Atm_02_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={22157.205,4.9473572,14504.551}; + angles[]={6.2738566,3.1129167,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=469; + type="Land_CncWall1_F"; + atlOffset=7.8439713e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item329 + class Item468 { - position[]={14031.65,25.928997,18743.328}; - azimut=216.16933; - id=542; - side="EMPTY"; - vehicle="Land_Atm_02_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={22155.963,4.9485617,14504.502}; + angles[]={6.2738566,3.1129167,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=470; + type="Land_CncWall1_F"; + atlOffset=7.7962875e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item330 + class Item469 { - position[]={14625.069,17.91,16790.838}; - azimut=315.20599; - id=543; - side="EMPTY"; - vehicle="Land_Atm_02_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={22154.734,4.9519472,14504.485}; + angles[]={6.272521,3.1129167,6.272521}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=471; + type="Land_CncWall1_F"; + atlOffset=0.00020575523; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item331 + class Item470 { - position[]={16885.662,20.479286,12646.807}; - azimut=106.50967; - id=544; - side="EMPTY"; - vehicle="Land_Atm_02_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={22152.379,4.9760289,14504.389}; + angles[]={6.272521,3.1129167,6.272521}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=472; + type="Land_CncWall1_F"; + atlOffset=0.00018572807; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item332 + class Item471 { - position[]={25694.9,21.2306,21387.4}; - azimut=48.075001; - offsetY=0.46926299; - id=545; - side="EMPTY"; - vehicle="Land_Atm_01_F"; - skill=0.60000002; - text="a1"; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={22151.133,4.9890661,14504.363}; + angles[]={6.272521,3.1129167,6.272521}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=473; + type="Land_CncWall1_F"; + atlOffset=0.00021505356; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item333 + class Item472 { - position[]={27032.15,20.7377,23230.598}; - azimut=134.88159; - id=546; - side="EMPTY"; - vehicle="Land_Atm_02_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={22149.824,5.0029039,14504.352}; + angles[]={6.272521,3.1129167,6.272521}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=474; + type="Land_CncWall1_F"; + atlOffset=0.0002052784; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item334 + class Item473 { - position[]={20474.959,34.900452,8853.1641}; - azimut=307.89682; - id=547; - side="EMPTY"; - vehicle="Land_Atm_02_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={22148.598,5.0156288,14504.318}; + angles[]={6.272521,3.1129167,6.272521}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=475; + type="Land_CncWall1_F"; + atlOffset=0.00020551682; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item335 + class Item474 { - position[]={5102.769,48.9464,11237.651}; - azimut=143.88512; - id=548; - side="EMPTY"; - vehicle="Land_Atm_02_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={22147.404,5.0279489,14504.269}; + angles[]={6.2631893,3.1129167,6.2285728}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=476; + type="Land_CncWall1_F"; + atlOffset=0.0029478073; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item336 + class Item475 { - position[]={9221.5313,121.15686,15824.077}; - azimut=154.72716; - id=549; - side="EMPTY"; - vehicle="Land_Atm_02_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={22153.555,4.9642358,14504.458}; + angles[]={6.272521,3.1030028,6.272521}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=477; + type="Land_CncWall1_F"; + atlOffset=0.00018930435; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item337 + class Item476 { - position[]={8648.0625,182.61229,18256.398}; - azimut=423.18103; - id=550; - side="EMPTY"; - vehicle="Land_Atm_02_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={22165.465,4.9182534,14504.783}; + angles[]={6.2711902,3.1378455,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=478; + type="Land_CncWall1_F"; + atlOffset=-0.0015594959; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item338 + class Item477 { - position[]={20782.309,37.2887,16680.162}; - azimut=306.42456; - id=551; - side="EMPTY"; - vehicle="Land_Atm_02_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={22164.811,4.9233222,14504.769}; + angles[]={6.2711902,3.1378455,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=479; + type="Land_CncWall1_F"; + atlOffset=-0.0016760826; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item339 + class Item478 { - position[]={12612.967,16.706055,14381.196}; - azimut=333.08002; - id=552; - side="EMPTY"; - vehicle="Land_Atm_02_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={22165.77,4.9133615,14503.761}; + angles[]={6.2791886,4.6916986,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=480; + type="Land_CncWall1_F"; + atlOffset=7.0810318e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item340 + class Item479 { - position[]={16289.652,25.250095,17295.529}; - azimut=303.26666; - id=553; - side="EMPTY"; - vehicle="Land_Atm_02_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={22165.742,4.9165258,14504.496}; + angles[]={6.2791886,4.6916986,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=481; + type="Land_CncWall1_F"; + atlOffset=7.4863434e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item341 + class Item480 { - position[]={6185.5654,26.6604,15077.238}; - azimut=310.65604; - id=554; - side="EMPTY"; - vehicle="Land_Atm_02_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={22146.096,5.098074,14504.199}; + angles[]={6.2631893,3.1023855,6.2285728}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=482; + type="Land_CncWall1_F"; + atlOffset=0.0029947758; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item342 + class Item481 { - position[]={3161.8101,1.7992139,12892.9}; - azimut=50.364498; - offsetY=2.0169401; - id=555; - side="EMPTY"; - vehicle="Land_LampAirport_F"; - skill=0.60000002; - init="this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22145.375,5.1370826,14504.183}; + angles[]={6.2631893,3.1023855,6.2285728}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=483; + type="Land_CncWall1_F"; + atlOffset=0.0028948784; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item343 + class Item482 { - position[]={3215.5701,2,12894.7}; - azimut=276.64499; - offsetY=2.17309; - id=556; - side="EMPTY"; - vehicle="Land_LampAirport_F"; - skill=0.60000002; - init="this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22163.576,4.9329267,14504.745}; + angles[]={6.2711902,3.1127522,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=484; + type="Land_CncWall1_F"; + atlOffset=-0.0018496513; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item344 + class Item483 { - position[]={3142.4199,2.1553321,12913.6}; - azimut=337.909; - offsetY=-0.0048265499; - id=557; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22162.314,4.9401512,14504.724}; + angles[]={6.2658563,3.1127522,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=485; + type="Land_CncWall1_F"; + atlOffset=-0.0019309521; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item345 + class Item484 { - position[]={3146.6599,1.9409767,12916.2}; - azimut=320.414; - offsetY=-0.0052245902; - id=558; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22161.047,4.9434829,14504.685}; + angles[]={6.2738566,3.0984652,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=486; + type="Land_CncWall1_F"; + atlOffset=7.8678131e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item346 + class Item485 { - position[]={3160.4463,2,12899.165}; - id=559; - side="EMPTY"; - vehicle="Land_Shed_Small_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22159.777,4.9448099,14504.645}; + angles[]={6.2738566,3.0984652,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=487; + type="Land_CncWall1_F"; + atlOffset=8.1062317e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item347 + class Item486 { - position[]={3164.0264,2.1555233,12909.466}; - azimut=269.181; - id=560; - side="EMPTY"; - vehicle="Land_HelipadCircle_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22165.986,3.8515458,14494.336}; + angles[]={6.2818484,1.5280542,6.2805333}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=488; + type="Land_Razorwire_F"; + atlOffset=-1.6689301e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item348 + class Item487 { - position[]={3164.9863,2.0376313,12901.565}; - azimut=270.879; - offsetY=0.0054037599; - id=561; - side="EMPTY"; - vehicle="Land_Wreck_Hunter_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.018,3.8371916,14487.614}; + angles[]={6.2818484,1.5280542,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=489; + type="Land_Razorwire_F"; + atlOffset=-2.8610229e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item349 + class Item488 { - position[]={3164.8762,2.2533913,12917.165}; - azimut=250.034; - offsetY=-0.00336123; - id=562; - side="EMPTY"; - vehicle="Land_Scrap_MRAP_01_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.229,3.8300943,14480.541}; + angles[]={0,1.5280542,6.2818937}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=490; + type="Land_Razorwire_F"; + atlOffset=7.1525574e-007; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item350 + class Item489 { - position[]={3156.21,1.9149365,12920.5}; - azimut=345.51401; - offsetY=0.0025821901; - id=563; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.449,3.8163729,14473.503}; + angles[]={6.2805333,1.5280542,0.0013372133}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=491; + type="Land_Razorwire_F"; + atlOffset=-0.02191186; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item351 + class Item490 { - position[]={3176.0701,2.3527076,12925.3}; - azimut=347.771; - offsetY=-0.00078702002; - id=564; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.746,3.8952913,14466.335}; + angles[]={0.0053265258,1.5280542,0.0080009829}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=492; + type="Land_Razorwire_F"; + atlOffset=-0.017050743; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item352 + class Item491 { - position[]={3166.1201,2.2884536,12923}; - azimut=345.578; - offsetY=0.0021059499; - id=565; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.975,4.0081019,14461.646}; + angles[]={0.019996032,1.5280542,0.0080009829}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=493; + type="Land_Razorwire_F"; + atlOffset=0.0038495064; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item353 + class Item492 { - position[]={3171.0601,2.3315015,12924.2}; - azimut=347.76999; - offsetY=0.00119328; - id=566; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22162.684,4.0170736,14457.908}; + angles[]={0.014664836,3.0841372,0.0066592805}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=494; + type="Land_Razorwire_F"; + atlOffset=0.00010490417; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item354 + class Item493 { - position[]={3151.26,1.7868848,12918.9}; - azimut=337.94199; - offsetY=0.0014327799; - id=567; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22156.514,4.0609941,14457.549}; + angles[]={0.014664836,3.0811498,6.276526}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=495; + type="Land_Razorwire_F"; + atlOffset=-0.012411356; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item355 + class Item494 { - position[]={3161.25,2.1168127,12921.7}; - azimut=345.258; - offsetY=0.00646353; - id=568; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22149.711,4.2841301,14457.173}; + angles[]={0.027993103,3.0873852,6.2511969}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=496; + type="Land_Razorwire_F"; + atlOffset=0.0064437389; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item356 + class Item495 { - position[]={3164.5664,2.1299379,12905.365}; - offsetY=2.3841901e-007; - id=569; - side="EMPTY"; - vehicle="Land_FuelStation_Feed_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22148.955,4.3103232,14457.102}; + angles[]={0.027993103,3.0821002,6.2511969}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=497; + type="Land_Razorwire_F"; + atlOffset=0.014162779; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item357 + class Item496 { - position[]={3186.1899,2.3004792,12927.5}; - azimut=347.772; - offsetY=-0.00059461599; - id=570; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22162.848,3.9314179,14504.655}; + angles[]={6.2738566,6.2463975,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=498; + type="Land_Razorwire_F"; + atlOffset=0.00051116943; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item358 + class Item497 { - position[]={3191.24,2.2781599,12928.6}; - azimut=347.771; - offsetY=-0.00056386; - id=571; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22156.605,3.9228559,14504.515}; + angles[]={6.272521,6.2610211,6.272521}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=499; + type="Land_Razorwire_F"; + atlOffset=-0.015549898; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item359 + class Item498 { - position[]={3181.1299,2.3376679,12926.4}; - azimut=347.772; - offsetY=-0.00084924698; - id=572; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22149.652,4.0088477,14504.325}; + angles[]={6.2631893,6.2248621,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=500; + type="Land_Razorwire_F"; + atlOffset=0.013937235; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item360 + class Item499 { - position[]={3195.75,2.318258,12930.4}; - azimut=335.88699; - offsetY=-0.00186968; - id=573; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22174.393,3.8888917,14509.278}; + angles[]={6.2818484,1.5280542,6.2645216}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=501; + type="Land_Razorwire_F"; + atlOffset=0.00015044212; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item361 + class Item500 { - position[]={3200.0601,2.5755248,12932.7}; - azimut=326.54901; - offsetY=-0.0089206696; - id=574; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22174.559,3.8446841,14502.498}; + angles[]={0,1.5280542,6.276526}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=502; + type="Land_Razorwire_F"; + atlOffset=1.2874603e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item362 + class Item501 { - position[]={3202.74,2.472981,12934.4}; - azimut=321.45599; - offsetY=-0.0085034398; - id=575; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22174.721,3.8300533,14495.685}; + angles[]={6.2818484,1.5280614,6.2805333}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=503; + type="Land_Razorwire_F"; + atlOffset=-1.1920929e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item363 + class Item502 { - position[]={3203.72,2.5135231,12935.2}; - azimut=322.05301; - offsetY=-0.0085654296; - id=576; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22174.906,3.8205256,14488.912}; + angles[]={6.2818484,1.5280542,6.2805333}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=504; + type="Land_Razorwire_F"; + atlOffset=-0.001455307; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item364 + class Item503 { - position[]={3214.3101,2.3862352,12940.2}; - azimut=322.991; - offsetY=-0.0051760701; - id=577; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22174.875,3.817615,14481.79}; + angles[]={6.2818484,1.5280542,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=505; + type="Land_Razorwire_F"; + atlOffset=-0.0085186958; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item365 + class Item504 { - position[]={3218.21,2.217736,12943.1}; - azimut=324.47601; - offsetY=-0.0027067701; - id=578; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22175.049,3.8722291,14475.019}; + angles[]={0,1.5280542,0.0093286335}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=506; + type="Land_Razorwire_F"; + atlOffset=2.8371811e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item366 + class Item505 { - position[]={3222.1799,2.290669,12946.3}; - azimut=324.22699; - offsetY=-0.00192332; - id=579; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22175.318,4.037035,14468.245}; + angles[]={0.023993526,1.5280542,0.0093350215}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=507; + type="Land_Razorwire_F"; + atlOffset=0.017445326; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item367 + class Item506 { - position[]={3223.8,2.0463922,12932.1}; - azimut=169.595; - offsetY=0.0020709001; - id=580; - side="EMPTY"; - vehicle="GroundWeaponHolder"; - skill=0.60000002; + dataType="Object"; + class PositionInfo + { + position[]={22175.479,4.0806723,14461.437}; + angles[]={0.0080009829,1.5280542,0.021328852}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=508; + type="Land_Razorwire_F"; + atlOffset=-0.0067970753; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item368 + class Item507 { - position[]={3266.5,2.1284056,12947.8}; - offsetY=0.119558; - id=581; - side="EMPTY"; - vehicle="Land_LampAirport_F"; - skill=0.60000002; - init="this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={22175.74,4.1406746,14454.503}; + angles[]={0.0039967569,1.5280542,0.0093286335}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=509; + type="Land_Razorwire_F"; + atlOffset=3.027916e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item369 + class Item508 { - position[]={3361.6299,2,12943.5}; - azimut=314.88101; - offsetY=0.041732799; - id=582; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22175.918,4.1503859,14452.489}; + angles[]={0.0039967569,1.5280542,0.0093286335}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=510; + type="Land_Razorwire_F"; + atlOffset=-0.010494232; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item370 + class Item509 { - position[]={3367.6499,2.0130689,12957.4}; - azimut=228.433; - offsetY=0.00055313099; - id=583; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22171.715,4.1581764,14449.311}; + angles[]={0.0026520467,3.08881,0.0026520467}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=511; + type="Land_Razorwire_F"; + atlOffset=-0.0038974285; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item371 + class Item510 { - position[]={3369.8101,2.0066674,12955}; - azimut=228.02901; - offsetY=0.00036907199; - id=584; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22165,4.1301718,14449.048}; + angles[]={0.0053265258,3.08881,0.0066682254}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=512; + type="Land_Razorwire_F"; + atlOffset=-0.0063135624; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item372 + class Item511 { - position[]={3363.8501,2,12945.8}; - azimut=314.16501; - offsetY=0.036386501; - id=585; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22144.908,4.3818808,14447.581}; + angles[]={6.2658529,3.0721755,6.2631865}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=513; + type="Land_Razorwire_F"; + atlOffset=-2.4318695e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item373 + class Item512 { - position[]={3370.6101,2.0042677,12954.1}; - azimut=225.793; - offsetY=0.151577; - id=586; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22147.639,4.3180223,14516.69}; + angles[]={6.272521,6.240715,6.2698536}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=514; + type="Land_Razorwire_F"; + atlOffset=0.0019593239; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item374 + class Item513 { - position[]={3364.51,2,12946.4}; - azimut=317.93701; - offsetY=0.034812; - id=587; - side="EMPTY"; - vehicle="Land_CncWall1_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.131,4.0423293,14517.68}; + angles[]={6.2751846,6.2324991,6.2765174}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=515; + type="Land_Razorwire_F"; + atlOffset=0.0017912388; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item375 + class Item514 { - position[]={3238.5901,2.1436706,12971.6}; - azimut=282.88901; - offsetY=-0.0048148599; - id=588; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22170.604,4.0048151,14517.682}; + angles[]={6.2765174,6.2324991,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=516; + type="Land_Razorwire_F"; + atlOffset=0.006475687; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item376 + class Item515 { - position[]={3244.22,2.099546,12972.3}; - azimut=182.05299; - offsetY=2.3841901e-007; - id=589; - side="EMPTY"; - vehicle="Land_LampStreet_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22174.188,3.9019337,14513.234}; + angles[]={6.2765174,1.5280542,6.2645216}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=517; + type="Land_Razorwire_F"; + atlOffset=0.00016880035; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item377 + class Item516 { - position[]={3256.6599,2.121567,12979.7}; - azimut=179.229; - offsetY=0.174959; - id=590; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22155.605,8.2302094,14512.804}; + angles[]={6.2658563,6.2689886,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=518; + type="Land_Cargo_Patrol_V1_F"; + atlOffset=0.0059976578; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item378 + class Item517 { - position[]={3249.1001,2.1054738,12976.9}; - azimut=89.023598; - offsetY=0.154424; - id=591; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22144.549,9.4233475,14505.123}; + angles[]={6.2765174,4.1183968,6.2285728}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this allowDamage false; this setVectorUp [0,0,1];"; + }; + id=519; + type="Land_LampHalogen_F"; + atlOffset=0.0090870857; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item379 + class Item518 { - position[]={3241.75,2.0989325,12974.1}; - azimut=358.43301; - offsetY=0.0010128; - id=592; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22166.555,9.1370573,14505.558}; + angles[]={6.2711902,5.6389475,6.2751846}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this allowDamage false; this setVectorUp [0,0,1];"; + }; + id=520; + type="Land_LampHalogen_F"; + atlOffset=0.00062274933; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item380 + class Item519 { - position[]={3246.8201,2.0846105,12974.3}; - azimut=357.54599; - offsetY=0.00099849701; - id=593; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22167.646,9.2978392,14457.181}; + angles[]={0.010664274,1.1102934,0.010664274}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this allowDamage false; this setVectorUp [0,0,1];"; + }; + id=521; + type="Land_LampHalogen_F"; + atlOffset=0.00068926811; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item381 + class Item520 { - position[]={3267.1201,2.1727252,12979.9}; - azimut=178.802; - offsetY=0.157423; - id=594; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22145.381,9.6282549,14456.278}; + angles[]={0.018663859,2.3238938,6.2578578}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false; this allowDamage false; this setVectorUp [0,0,1];"; + }; + id=522; + type="Land_LampHalogen_F"; + atlOffset=0.0029530525; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item382 + class Item521 { - position[]={3251.47,2.1295831,12979.6}; - azimut=177.94701; - offsetY=0.15896399; - id=595; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22161.777,4.0392094,14513.417}; + angles[]={6.2751846,1.5280542,6.2738566}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=523; + type="Land_Razorwire_F"; + atlOffset=7.0333481e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item383 + class Item522 { - position[]={3261.8701,2.1474416,12979.8}; - azimut=178.806; - offsetY=0.159549; - id=596; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22150.012,4.2166581,14513.272}; + angles[]={6.272521,1.5280542,6.256525}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=524; + type="Land_Razorwire_F"; + atlOffset=0.00033164024; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item384 + class Item523 { - position[]={3272.3301,2.2093234,12980}; - azimut=178.793; - offsetY=0.189781; - id=597; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22153.746,4.0608311,14509.729}; + angles[]={6.2658529,6.240715,6.256525}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=525; + type="Land_Razorwire_F"; + atlOffset=0.00038576126; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item385 + class Item524 { - position[]={3282.72,2.315587,12980.3}; - azimut=178.8; - offsetY=0.15425; - id=598; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22158.1,4.0267234,14509.942}; + angles[]={6.2658563,6.240715,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=526; + type="Land_Razorwire_F"; + atlOffset=0.0030078888; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item386 + class Item525 { - position[]={3287.8601,2.3421907,12980.4}; - azimut=178.80701; - offsetY=0.16514499; - id=599; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22158.354,4.2255397,14448.551}; + angles[]={0.012000273,3.0834243,6.2631893}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=527; + type="Land_Razorwire_F"; + atlOffset=0.0065164566; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item387 + class Item526 { - position[]={3277.45,2.2840741,12980.1}; - azimut=178.78999; - offsetY=0.162883; - id=600; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={22152.748,4.3021603,14448.084}; + angles[]={0.0013372133,3.0834243,6.2605233}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this allowDamage false;"; + }; + id=528; + type="Land_Razorwire_F"; + atlOffset=0.000197649; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item388 + class Item527 { - position[]={3327.5901,2.5935254,12973.3}; - offsetY=4.7683699e-007; - id=601; - side="EMPTY"; - vehicle="Land_LampAirport_F"; - skill=0.60000002; - init="this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={25830.223,20.957716,21446.068}; + angles[]={6.2778587,1.5852823,6.2325621}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=529; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item389 + class Item528 { - position[]={3300.8301,2.5894217,12978}; - azimut=197.53101; - offsetY=0.18536299; - id=602; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={14026.541,27.473963,18704.83}; + angles[]={0.0017605233,2.6650131,0.0025135824}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=530; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item390 + class Item529 { - position[]={3311.01,2.5870228,12977.3}; - azimut=179.32401; - offsetY=0.222624; - id=603; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={25802.791,21.271774,21408.162}; + angles[]={6.2824135,5.4627447,6.2798738}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=531; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item391 + class Item530 { - position[]={3305.8799,2.5437505,12977.2}; - azimut=179.32401; - offsetY=0.19911601; - id=604; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={16991.578,17.90064,12863.486}; + angles[]={0.0066682254,2.3982847,6.2498641}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=532; + type="Land_MarketShelter_F"; + atlOffset=0.0009021759; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item392 + class Item531 { - position[]={3314.6799,2.4054577,12975.5}; - azimut=243.535; - offsetY=0.026122799; - id=605; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={25779.248,20.728924,21353.186}; + angles[]={0.00077204045,2.3024275,0.0029499636}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=533; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item393 + class Item532 { - position[]={3348.3899,2.1708519,12967.2}; - azimut=218.543; - offsetY=0.052192699; - id=606; - side="EMPTY"; - vehicle="Land_BarGate_F"; - skill=0.60000002; - init="this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={16995.295,16.329861,12661.419}; + angles[]={0.0030297067,3.5271702,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=534; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item394 + class Item533 { - position[]={3348.49,2.2720964,12969.9}; - azimut=311.84; - offsetY=-0.0042881998; - id=607; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={18158.439,26.925817,12839.705}; + angles[]={6.2826972,2.283783,0.002990101}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=536; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item395 + class Item534 { - position[]={3339.01,3.065208,12978.2}; - azimut=209.487; - offsetY=0.051785499; - id=608; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={12682.056,1.9922448,14216.246}; + angles[]={0.0039967569,2.4060416,6.2219291}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=537; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item396 + class Item535 { - position[]={3356.26,2.093291,12964}; - azimut=135.991; - offsetY=0.00378108; - id=609; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={17540.965,2.9164281,18942.279}; + angles[]={6.2206011,2.4060416,6.259192}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=538; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item397 + class Item536 { - position[]={3360.1001,2.0786791,12964.4}; - azimut=213.51601; - offsetY=0.0029478101; - id=610; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={13948.376,23.751408,18665.617}; + angles[]={0,3.8686273,6.2826972}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=539; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item398 + class Item537 { - position[]={3343.53,2.6094646,12975.6}; - azimut=210.59599; - offsetY=0.0513856; - id=611; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={15936.313,15.134128,16987.922}; + angles[]={6.2818484,1.2054049,6.2765174}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=540; + type="Land_BagBunker_Small_F"; + atlOffset=2.2888184e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item399 + class Item538 { - position[]={3347.8501,2.3836126,12972.9}; - azimut=211.071; - offsetY=0.0059318501; - id=612; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={15931.992,15.172364,17000.143}; + angles[]={0,1.2054049,6.276526}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=541; + type="Land_BagBunker_Small_F"; + atlOffset=1.335144e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item400 + class Item539 { - position[]={3364.0901,2.0360155,12961.2}; - azimut=225.45799; - offsetY=0.00313091; - id=613; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={15933.373,18.247561,16994.744}; + angles[]={6.2818484,1.2412651,6.2765174}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false;"; + }; + id=542; + type="Land_BarGate_F"; + atlOffset=0.00011634827; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item401 + class Item540 { - position[]={3734.1455,18.867737,12978.405}; - azimut=178.55951; - id=614; - side="EMPTY"; - vehicle="Land_Atm_02_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={16014.402,15.140323,16959.6}; + angles[]={0,5.6524305,6.2811141}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Open_Vault"",life_fnc_safeOpen,"""",0,false,false,"""",' playerSide isEqualTo civilian && {_target getVariable [""safe_open"",false]} ']; this addAction[localize""STR_MAR_Fix_Vault"",life_fnc_safeFix,"""",0,false,false,"""",' playerSide isEqualTo west && {_target getVariable [""safe_open"",false]} ' ];"; + name="fed_bank"; + }; + id=543; + type="Land_CargoBox_V1_F"; + atlOffset=0.0030889511; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item402 + class Item541 { - position[]={15590.544,18.560768,17184.262}; - azimut=134.11658; - id=615; - side="EMPTY"; - vehicle="Land_Atm_02_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={3404.8494,2.3842192,12896.378}; + angles[]={0,2.3506639,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + }; + id=544; + type="Land_CashDesk_F"; + atlOffset=0.47982728; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item403 + class Item542 { - position[]={17486.396,12.887951,13266.713}; - azimut=130.24707; - id=616; - side="EMPTY"; - vehicle="Land_Atm_02_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={3267.5601,3.4565868,12959.905}; + angles[]={6.2815294,4.6872387,0.011288759}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=545; + type="Land_Atm_02_F"; + atlOffset=0.0036919117; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item404 + class Item543 { - position[]={14150.847,19.091522,16301.948}; - azimut=310.72684; - id=617; - side="EMPTY"; - vehicle="Land_Atm_02_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={3654.9592,11.783803,13082.587}; + angles[]={0.0084078256,3.1279809,0.034926686}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=546; + type="Land_Atm_02_F"; + atlOffset=-0.0010118484; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item405 + class Item544 { - position[]={16181.791,13.33356,16952.713}; - azimut=-60.276089; - id=618; - side="EMPTY"; - vehicle="Land_BagBunker_Small_F"; - skill=0.60000002; + dataType="Object"; + class PositionInfo + { + position[]={3505.708,6.3066578,13153.238}; + angles[]={0.026195571,5.4793944,0.028861273}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=547; + type="Land_Atm_02_F"; + atlOffset=-0.00074052811; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item406 + class Item545 { - position[]={16175.078,13.328569,16941.625}; - azimut=-60.276089; - id=619; - side="EMPTY"; - vehicle="Land_BagBunker_Small_F"; - skill=0.60000002; + dataType="Object"; + class PositionInfo + { + position[]={9024.8477,31.810513,12121.771}; + angles[]={6.2496753,3.3692529,6.2500401}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=548; + type="Land_Atm_02_F"; + atlOffset=0.00069236755; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item407 + class Item546 { - position[]={16179.711,13.349356,16949.301}; - azimut=-58.221451; - id=620; - side="EMPTY"; - vehicle="Land_BarGate_F"; - skill=0.60000002; - init="this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={14031.881,27.211889,18743.639}; + angles[]={0.0066682254,3.7728665,6.2778587}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=549; + type="Land_Atm_02_F"; + atlOffset=0.018096924; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item408 + class Item547 { - position[]={16213.33,13.287208,17009.059}; - azimut=-62.358036; - id=621; - side="EMPTY"; - vehicle="Land_BagBunker_Small_F"; - skill=0.60000002; + dataType="Object"; + class PositionInfo + { + position[]={14625.333,19.196148,16790.568}; + angles[]={0,5.5013824,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=550; + type="Land_Atm_02_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item409 + class Item548 { - position[]={16207.025,13.314915,16997.736}; - azimut=-62.358036; - id=622; - side="EMPTY"; - vehicle="Land_BagBunker_Small_F"; - skill=0.60000002; + dataType="Object"; + class PositionInfo + { + position[]={16885.33,21.774281,12646.896}; + angles[]={6.2674537,1.8589443,6.2621465}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=551; + type="Land_Atm_02_F"; + atlOffset=0.0011310577; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item410 + class Item549 { - position[]={16211.381,13.275591,17005.566}; - azimut=-60.303398; - id=623; - side="EMPTY"; - vehicle="Land_BarGate_F"; - skill=0.60000002; - init="this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={25694.893,22.510267,21387.395}; + angles[]={0,0.83906704,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + name="a1"; + }; + id=552; + type="Land_Atm_01_F"; + atlOffset=0.019954681; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item411 + class Item550 { - position[]={16118.006,13.740654,16837.504}; - azimut=-58.3465; - offsetY=0.30000001; - special="NONE"; - id=624; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={27031.891,22.028059,23230.848}; + angles[]={6.2702527,2.3541279,6.279892}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=553; + type="Land_Atm_02_F"; + atlOffset=-0.00011444092; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item412 + class Item551 { - position[]={16120.371,13.728279,16841.387}; - azimut=-58.3465; - offsetY=0.30000001; - special="NONE"; - id=625; - side="EMPTY"; - vehicle="Land_CncWall4_F"; - skill=0.60000002; - init="this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={20475.316,36.145649,8852.8203}; + angles[]={6.1954112,5.3738132,6.2352223}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=554; + type="Land_Atm_02_F"; + atlOffset=-0.0040779114; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item413 + class Item552 { - position[]={3277.3,3.38745,12970.5}; - azimut=358.327; - offsetY=1.09; - id=626; - side="EMPTY"; - vehicle="Land_Laptop_unfolded_F"; - skill=0.60000002; - text="hq_lt_1"; - init="this enableSimulation false; this allowDamage false; this addAction[""Federal Reserve - Front Entrance"",life_fnc_fedCamDisplay,""front""]; this addAction[""Federal Reserve - Side Entrance"",life_fnc_fedCamDisplay,""side""]; this addAction[""Federal Reserve - Back Entrance"",life_fnc_fedCamDisplay,""back""]; this addAction[""Federal Reserve - Vault View"",life_fnc_fedCamDisplay,""vault""]; this addAction[""Turn Off Display"",life_fnc_fedCamDisplay,""off""];"; + dataType="Object"; + class PositionInfo + { + position[]={5102.4609,50.228088,11237.893}; + angles[]={6.2325621,2.5112691,0.069222413}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=555; + type="Land_Atm_02_F"; + atlOffset=0.004699707; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item414 + class Item553 { - position[]={3277.3,3.38745,12970.5}; - azimut=358.327; - offsetY=0.2; - id=627; - side="EMPTY"; - vehicle="Land_TableDesk_F"; - skill=0.60000002; - text="hq_desk_1"; - init="this enableSimulation false; this allowDamage false;"; + dataType="Object"; + class PositionInfo + { + position[]={9221.3594,122.44349,15824.41}; + angles[]={6.276526,2.7004983,0.010664274}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=556; + type="Land_Atm_02_F"; + atlOffset=9.9182129e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item415 + class Item554 { - position[]={13815.865,20.242474,18985.881}; - azimut=319.11188; - id=628; - side="EMPTY"; - vehicle="Land_Atm_02_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={8647.7188,183.90533,18256.324}; + angles[]={0.071877465,1.1027169,0.0053377044}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=557; + type="Land_Atm_02_F"; + atlOffset=0.0034637451; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item416 + class Item555 { - position[]={11692.8,37.644802,15919.2}; - azimut=269.63101; - offsetY=0.53802103; - id=629; - side="EMPTY"; - vehicle="Land_Atm_01_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={20782.65,38.560787,16679.916}; + angles[]={6.2671871,5.3481174,6.2511969}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=558; + type="Land_Atm_02_F"; + atlOffset=-0.0026321411; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item417 + class Item556 { - position[]={11682.9,37.615601,15912.5}; - azimut=0.026865199; - offsetY=3.8996999; - id=630; - side="EMPTY"; - vehicle="Land_Pallet_MilBoxes_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Armament"",life_fnc_weaponShopMenu,""gang"",0,false,false,"""",' _b = nearestBuilding (getPosATL player); !isNil {_b getVariable ""gangOwner""} && {(_b getVariable ""gangOwner"") == (group player)} && playerSide == civilian ']; this setVariable[""realname"",""Gang Armament""];"; + dataType="Object"; + class PositionInfo + { + position[]={12613.121,17.978411,14380.806}; + angles[]={6.2405448,5.813343,0.010669862}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=559; + type="Land_Atm_02_F"; + atlOffset=0.001247406; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item418 + class Item557 { - position[]={11677.6,37.627735,15913.4}; - azimut=180.03101; - offsetY=3.86322; - id=631; - side="EMPTY"; - vehicle="Land_WoodenTable_large_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={16289.984,26.526188,17295.291}; + angles[]={6.2593217,5.2930017,6.2685533}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=560; + type="Land_Atm_02_F"; + atlOffset=-0.004327774; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item419 + class Item558 { - position[]={11678,37.754391,15919.1}; - azimut=0.0115331; - offsetY=3.7370801; - id=632; - side="EMPTY"; - vehicle="Land_Sink_F"; - skill=0.60000002; - text="mari_processor"; - init="this allowDamage false; this enableSimulation false; this addAction[""Process Marijuana"",life_fnc_processAction,""marijuana"",0,false,false,"""",' _b = nearestBuilding (getPosATL player); life_inv_cannabis > 0 && !life_is_processing && !isNil {_b getVariable ""gangOwner""} && {(_b getVariable ""gangOwner"") == (group player)} && playerSide == civilian ']; this setVariable[""realname"",""Marijuana Processing""];"; + dataType="Object"; + class PositionInfo + { + position[]={6185.8218,27.943752,15076.95}; + angles[]={6.251195,5.4219708,0.021328852}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=561; + type="Land_Atm_02_F"; + atlOffset=0.00096511841; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item420 + class Item559 { - position[]={11677.7,37.627602,15913.4}; - azimut=89.404602; - offsetY=4.7279301; - id=633; - side="EMPTY"; - vehicle="Vest_V_TacVest_blk"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3162.0295,16.235058,12893.066}; + angles[]={0,0.87902629,6.282495}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false;"; + }; + id=562; + type="Land_LampAirport_F"; + atlOffset=0.27868462; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item421 + class Item560 { - position[]={11681.5,37.762955,15920.1}; - azimut=269.68701; - offsetY=3.7525699; - id=634; - side="EMPTY"; - vehicle="Land_WoodenTable_small_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3215.3105,16.59227,12894.738}; + angles[]={0,4.8283658,6.2826972}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false;"; + }; + id=563; + type="Land_LampAirport_F"; + atlOffset=0.39676428; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item422 + class Item561 { - position[]={11694.4,37.645069,15920.8}; - azimut=359.97101; - offsetY=1.22691; - id=635; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3142.3359,3.9253316,12913.816}; + angles[]={6.2711902,5.8976245,6.2565274}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=564; + type="Land_CncWall4_F"; + atlOffset=0.00074791908; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item423 + class Item562 { - position[]={11678.5,37.808308,15920.9}; - azimut=359.478; - offsetY=4.7951598; - id=636; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3146.5601,3.7132256,12916.391}; + angles[]={0.0013372133,5.5922794,6.2285743}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=565; + type="Land_CncWall4_F"; + atlOffset=0.0026273727; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item424 + class Item563 { - position[]={11681.4,37.782158,15920.9}; - azimut=358.32501; - offsetY=4.7707901; - id=637; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3164.4521,4.1313467,12909.225}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=566; + type="Land_Shed_Small_F"; + atlOffset=-0.17199945; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item425 + class Item564 { - position[]={11679.3,37.804558,15920.9}; - azimut=358.94101; - offsetY=4.7756; - id=638; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3164.0264,2.1555233,12909.466}; + angles[]={6.2738504,4.6980948,0.043971907}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=567; + type="Land_HelipadCircle_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item426 + class Item565 { - position[]={11696.6,37.650936,15920.9}; - azimut=0.0090809297; - offsetY=1.2211699; - id=639; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3164.7224,3.9098487,12901.344}; + angles[]={6.259192,4.7277303,6.2805333}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=568; + type="Land_Wreck_Hunter_F"; + atlOffset=0.0059597492; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item427 + class Item566 { - position[]={11676.8,37.845718,15918.9}; - azimut=270.06201; - offsetY=4.6560998; - id=640; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3164.9199,3.4822693,12917.539}; + angles[]={6.2791886,4.3639164,0.042640556}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=569; + type="Land_Scrap_MRAP_01_F"; + atlOffset=0.0011205673; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item428 + class Item567 { - position[]={11693.8,37.643997,15920.8}; - azimut=0.0175559; - offsetY=1.22815; - id=641; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3156.0647,3.6800022,12920.744}; + angles[]={6.2778587,6.0303569,0.02666023}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=570; + type="Land_CncWall4_F"; + atlOffset=0.003223896; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item429 + class Item568 { - position[]={11682.3,37.772568,15920.9}; - azimut=1.94023; - offsetY=4.82166; - id=642; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3175.9841,4.117907,12925.552}; + angles[]={6.2805333,6.0697489,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=571; + type="Land_CncWall4_F"; + atlOffset=5.4836273e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item430 + class Item569 { - position[]={11697.4,37.653069,15920.9}; - azimut=0.037401401; - offsetY=1.2189; - id=643; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3166.0056,4.052949,12923.261}; + angles[]={0.0039967569,6.0314741,0.0093286335}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=572; + type="Land_CncWall4_F"; + atlOffset=0.0022017956; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item431 + class Item570 { - position[]={11677.4,37.803055,15920.2}; - azimut=278.24301; - offsetY=3.72158; - id=644; - side="EMPTY"; - vehicle="Land_Sack_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3170.9436,4.0961394,12924.452}; + angles[]={6.2805333,6.0697312,0.015998369}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=573; + type="Land_CncWall4_F"; + atlOffset=0.0014231205; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item432 + class Item571 { - position[]={11677.7,37.626801,15912.8}; - azimut=273.254; - offsetY=4.7287002; - id=645; - side="EMPTY"; - vehicle="Weapon_arifle_Katiba_C_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3151.0916,3.5495334,12919.139}; + angles[]={0,5.8982005,0.021328852}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=574; + type="Land_CncWall4_F"; + atlOffset=0.0018347502; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item433 + class Item572 { - position[]={11683.2,37.747063,15920.2}; - azimut=207.10001; - offsetY=3.7511599; - id=646; - side="EMPTY"; - vehicle="Land_Portable_generator_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3161.0754,3.8828368,12921.946}; + angles[]={6.2791886,6.0258889,0.042640556}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=575; + type="Land_CncWall4_F"; + atlOffset=0.0080823898; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item434 + class Item573 { - position[]={11677.3,37.740234,15917.7}; - azimut=235.589; - offsetY=3.75085; - id=647; - side="EMPTY"; - vehicle="Land_MetalBarrel_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3164.571,2.8796177,12905.348}; + angles[]={6.259192,0,6.2805333}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=576; + type="Land_FuelStation_Feed_F"; + atlOffset=0.00020480156; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item435 + class Item574 { - position[]={11683.2,37.738014,15919.8}; - azimut=204.043; - offsetY=3.76085; - id=648; - side="EMPTY"; - vehicle="Land_ExtensionCord_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3186.1157,4.065536,12927.757}; + angles[]={0,6.0697665,6.2751918}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=577; + type="Land_CncWall4_F"; + atlOffset=5.6028366e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item436 + class Item575 { - position[]={11682.1,37.758801,15920.2}; - azimut=269.742; - offsetY=4.6174798; - id=649; - side="EMPTY"; - vehicle="Land_Suitcase_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3191.1565,4.0431376,12928.854}; + angles[]={6.2818484,6.0697489,6.2805333}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=578; + type="Land_CncWall4_F"; + atlOffset=9.2983246e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item437 + class Item576 { - position[]={11677.1,37.689613,15912.5}; - azimut=74.511002; - offsetY=4.6682401; - id=650; - side="EMPTY"; - vehicle="Land_Ammobox_rounds_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3181.0535,4.1029673,12926.655}; + angles[]={6.2818484,6.0697665,6.2765174}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=579; + type="Land_CncWall4_F"; + atlOffset=4.2438507e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item438 + class Item577 { - position[]={11677.8,37.628536,15914.2}; - azimut=107.976; - offsetY=4.7270298; - id=651; - side="EMPTY"; - vehicle="Land_Ammobox_rounds_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3195.6155,4.0983353,12930.412}; + angles[]={6.1585026,5.8623338,6.2805333}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=580; + type="Land_CncWall4_F"; + atlOffset=0.013818979; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item439 + class Item578 { - position[]={11678,37.628136,15914.1}; - azimut=88.826698; - offsetY=4.7274399; - id=652; - side="EMPTY"; - vehicle="Land_Ammobox_rounds_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3200.0212,4.3564272,12932.817}; + angles[]={6.2325611,5.6993556,6.2060056}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=581; + type="Land_CncWall4_F"; + atlOffset=0.0075657368; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item440 + class Item579 { - position[]={11681.3,37.774139,15920.5}; - azimut=4.7138801; - offsetY=4.61727; - id=653; - side="EMPTY"; - vehicle="Land_TinContainer_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3202.6213,4.2481279,12934.567}; + angles[]={6.2325621,5.6104655,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=582; + type="Land_CncWall1_F"; + atlOffset=0.002250433; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item441 + class Item580 { - position[]={11680.9,37.780682,15920.6}; - azimut=29.730801; - offsetY=4.6173301; - id=654; - side="EMPTY"; - vehicle="Land_ButaneTorch_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3203.604,4.2887316,12935.369}; + angles[]={6.2325621,5.6208854,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=583; + type="Land_CncWall1_F"; + atlOffset=0.0022656918; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item442 + class Item581 { - position[]={11681.4,37.761738,15920}; - azimut=281.24701; - offsetY=4.61731; - id=655; - side="EMPTY"; - vehicle="Land_GasCooker_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3214.1316,4.1566143,12940.345}; + angles[]={6.253861,5.6372561,6.2778587}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=584; + type="Land_CncWall4_F"; + atlOffset=0.00077605247; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item443 + class Item582 { - position[]={11681.8,37.768806,15920.5}; - azimut=6.4974499; - offsetY=4.61724; - id=656; - side="EMPTY"; - vehicle="Land_GasCanister_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3218.0957,3.9862208,12943.314}; + angles[]={0.0079935296,5.6631746,6.2445393}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=585; + type="Land_CncWall4_F"; + atlOffset=0.001373291; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item444 + class Item583 { - position[]={11692.2,37.550812,15904.2}; - offsetY=-0.0107651; - id=657; - side="EMPTY"; - vehicle="FlagPole_F"; - skill=0.60000002; - text="gang_flag_1"; - init="this allowDamage false; this addAction [""Capture Gang Area"",life_fnc_captureHideout,"""",0,false,false,"""",' playerSide == civilian && !isNil {(group player) getVariable ""gang_owner""}'];"; + dataType="Object"; + class PositionInfo + { + position[]={3222.0317,4.0696783,12946.29}; + angles[]={6.165071,5.6588283,6.2631893}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=586; + type="Land_CncWall4_F"; + atlOffset=0.012721777; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item445 + class Item584 { - position[]={11695.7,37.648533,15920.5}; - azimut=359.97; - offsetY=0.53438199; - id=658; - side="EMPTY"; - vehicle="Land_InfoStand_V1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Gang Market"",life_fnc_virt_menu,""gang"",0,false,false,"""",' _b = nearestBuilding (getPosATL player); !isNil {_b getVariable ""gangOwner""} && {(_b getVariable ""gangOwner"") == (group player)} '];"; + dataType="Object"; + class PositionInfo + { + position[]={3223.8535,2.708127,12932.204}; + angles[]={0,2.9599912,6.2445393}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=587; + type="GroundWeaponHolder"; + atlOffset=0.002572298; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item446 + class Item585 { - position[]={4887.7686,17.113359,14414.218}; - azimut=69.083534; - offsetY=0.53802103; - id=659; - side="EMPTY"; - vehicle="Land_Atm_01_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={3266.4573,14.668694,12947.969}; + angles[]={6.2751846,0,0.0039967569}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false;"; + }; + id=588; + type="Land_LampAirport_F"; + atlOffset=0.12005949; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item447 + class Item586 { - position[]={4894.6807,17.030001,14423.959}; - azimut=-200.521; - offsetY=3.8996999; - id=660; - side="EMPTY"; - vehicle="Land_Pallet_MilBoxes_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Armament"",life_fnc_weaponShopMenu,""gang"",0,false,false,"""",' _b = nearestBuilding (getPosATL player); !isNil {_b getVariable ""gangOwner""} && {(_b getVariable ""gangOwner"") == (group player)} && playerSide == civilian ']; this setVariable[""realname"",""Gang Armament""];"; + dataType="Object"; + class PositionInfo + { + position[]={3361.4185,3.8062015,12943.67}; + angles[]={0.0011451211,5.4957104,6.2819896}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=589; + type="Land_CncWall4_F"; + atlOffset=3.9100647e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item448 + class Item587 { - position[]={4899.9663,16.908295,14424.986}; - azimut=-20.516621; - offsetY=3.86322; - id=661; - side="EMPTY"; - vehicle="Land_WoodenTable_large_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3367.4692,3.7774856,12957.193}; + angles[]={6.2805333,3.986908,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=590; + type="Land_CncWall4_F"; + atlOffset=0.00056099892; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item449 + class Item588 { - position[]={4901.5908,16.961405,14419.505}; - azimut=-200.536; - offsetY=3.7370801; - id=662; - side="EMPTY"; - vehicle="Land_Sink_F"; - skill=0.60000002; - text="coke_processor"; - init="this allowDamage false; this enableSimulation false; this addAction[""Process Cocaine"",life_fnc_processAction,""cocaine"",0,false,false,"""",' _b = (nearestObjects[getPosATL player,[""Land_u_Barracks_V2_F"",""Land_i_Barracks_V2_F""],25]) select 0; life_inv_coke > 0 && !life_is_processing && !isNil {_b getVariable ""gangOwner""} && {(_b getVariable ""gangOwner"") == (group player)} && playerSide == civilian ']; this setVariable[""realname"",""Cocaine Processing""];"; + dataType="Object"; + class PositionInfo + { + position[]={3369.5608,3.7710829,12954.861}; + angles[]={6.2805333,3.979857,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=591; + type="Land_CncWall1_F"; + atlOffset=0.00037646294; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item450 + class Item589 { - position[]={4899.8706,16.912947,14424.942}; - azimut=-111.14305; - offsetY=4.7279301; - id=663; - side="EMPTY"; - vehicle="Vest_V_TacVest_blk"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3363.7019,3.8006971,12946.042}; + angles[]={0.0011451211,5.4832139,6.2819896}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=592; + type="Land_CncWall1_F"; + atlOffset=0.036289454; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item451 + class Item590 { - position[]={4898.6592,17.039774,14417.351}; - azimut=69.139534; - offsetY=3.7525699; - id=664; - side="EMPTY"; - vehicle="Land_WoodenTable_small_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3370.3721,3.9202542,12953.946}; + angles[]={6.2778144,3.9408312,6.2798738}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=593; + type="Land_CncWall1_F"; + atlOffset=0.00088167191; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item452 + class Item591 { - position[]={4886.832,17.20125,14412.157}; - azimut=159.42352; - offsetY=1.22691; - id=665; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3364.3779,3.7990925,12946.651}; + angles[]={0.0011451211,5.5490475,6.2819896}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=594; + type="Land_CncWall1_F"; + atlOffset=0.034684896; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item453 + class Item592 { - position[]={4901.7554,17.009682,14417.648}; - azimut=158.93051; - offsetY=4.7951598; - id=666; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3238.3577,3.9133067,12971.636}; + angles[]={0.0039967569,4.9373446,6.2618566}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=595; + type="Land_CncWall4_F"; + atlOffset=0.00041031837; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item454 + class Item593 { - position[]={4899.0361,17.039118,14416.636}; - azimut=157.77753; - offsetY=4.7707901; - id=667; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3244.1782,8.2299337,12970.704}; + angles[]={0.0039967569,3.1774242,6.2805333}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=596; + type="Land_LampStreet_F"; + atlOffset=6.4849854e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item455 + class Item594 { - position[]={4901.001,17.017878,14417.359}; - azimut=158.39352; - offsetY=4.7756; - id=668; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3256.7097,4.061799,12979.438}; + angles[]={0.0045674569,3.1281362,6.2750664}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=597; + type="Land_CncWall4_F"; + atlOffset=0.17422819; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item456 + class Item595 { - position[]={4884.8032,17.253086,14411.293}; - azimut=-200.53847; - offsetY=1.2211699; - id=669; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3249.3613,4.0251369,12976.952}; + angles[]={0.0085554048,1.5537549,0.0045543881}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=598; + type="Land_CncWall4_F"; + atlOffset=0.15281844; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item457 + class Item596 { - position[]={4902.647,16.884541,14420.118}; - azimut=69.514534; - offsetY=4.6560998; - id=670; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3241.7156,3.8633623,12974.375}; + angles[]={0.0039967569,6.255836,6.2805333}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=599; + type="Land_CncWall4_F"; + atlOffset=0.0010323524; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item458 + class Item597 { - position[]={4887.3926,17.19207,14412.373}; - azimut=-200.52998; - offsetY=1.22815; - id=671; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3246.7815,3.8490396,12974.575}; + angles[]={0.0039967569,6.2403545,6.2805333}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=600; + type="Land_CncWall4_F"; + atlOffset=0.0010211468; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item459 + class Item598 { - position[]={4898.1934,17.04829,14416.309}; - azimut=-198.60732; - offsetY=4.82166; - id=672; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3267.1086,4.0937438,12979.624}; + angles[]={6.2788868,3.1206837,0.027753571}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=601; + type="Land_CncWall4_F"; + atlOffset=0.0018777847; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item460 + class Item599 { - position[]={4884.0527,17.275982,14411.014}; - azimut=-200.51015; - offsetY=1.2189; - id=673; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3251.4868,4.0542927,12979.337}; + angles[]={0.0035040791,3.1057611,0.01401217}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=602; + type="Land_CncWall4_F"; + atlOffset=0.15896726; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item461 + class Item600 { - position[]={4902.5376,16.950886,14418.687}; - azimut=77.695534; - offsetY=3.72158; - id=674; - side="EMPTY"; - vehicle="Land_Sack_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3261.9202,4.0722294,12979.538}; + angles[]={0.0043123867,3.1207533,6.2760344}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=603; + type="Land_CncWall4_F"; + atlOffset=0.15907049; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item462 + class Item601 { - position[]={4899.6543,16.922562,14425.51}; - azimut=72.706543; - offsetY=4.7287002; - id=675; - side="EMPTY"; - vehicle="Weapon_arifle_Katiba_C_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3272.3704,4.1611133,12979.716}; + angles[]={6.2747283,3.1205266,6.2816415}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=604; + type="Land_CncWall4_F"; + atlOffset=0.18835616; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item463 + class Item602 { - position[]={4897.1074,17.053431,14416.642}; - azimut=6.5523949; - offsetY=3.7511599; - id=676; - side="EMPTY"; - vehicle="Land_Portable_generator_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3282.7158,4.2302494,12980.003}; + angles[]={6.2676635,3.1206486,0.023542082}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=605; + type="Land_CncWall4_F"; + atlOffset=0.0048480034; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item464 + class Item603 { - position[]={4901.7563,16.886692,14421.069}; - azimut=35.041397; - offsetY=3.75085; - id=677; - side="EMPTY"; - vehicle="Land_MetalBarrel_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3287.8667,4.2695093,12980.114}; + angles[]={6.2737427,3.1207709,0.017541012}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=606; + type="Land_CncWall4_F"; + atlOffset=0.0015459061; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item465 + class Item604 { - position[]={4896.9668,17.051903,14417.023}; - azimut=3.4953747; - offsetY=3.76085; - id=678; - side="EMPTY"; - vehicle="Land_ExtensionCord_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3277.4846,4.2077723,12979.808}; + angles[]={6.2701745,3.1204741,0.0015822123}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=607; + type="Land_CncWall4_F"; + atlOffset=0.0039713383; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item466 + class Item605 { - position[]={4898.1338,17.045919,14417.04}; - azimut=69.194527; - offsetY=4.6174798; - id=679; - side="EMPTY"; - vehicle="Land_Suitcase_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3327.6135,15.006951,12972.84}; + angles[]={6.2245865,0,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false;"; + }; + id=608; + type="Land_LampAirport_F"; + atlOffset=0.021421671; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item467 + class Item606 { - position[]={4900.1147,16.899794,14426.007}; - azimut=-126.03655; - offsetY=4.6682401; - id=680; - side="EMPTY"; - vehicle="Land_Ammobox_rounds_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3300.8,4.5087252,12977.576}; + angles[]={6.1936131,3.4475665,6.2713351}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=609; + type="Land_CncWall4_F"; + atlOffset=0.047140837; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item468 + class Item607 { - position[]={4900.0596,16.904911,14424.163}; - azimut=-92.571617; - offsetY=4.7270298; - id=681; - side="EMPTY"; - vehicle="Land_Ammobox_rounds_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3310.9998,4.534658,12976.84}; + angles[]={6.1743279,3.1297944,0.025694696}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=610; + type="Land_CncWall4_F"; + atlOffset=0.058595419; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item469 + class Item608 { - position[]={4899.8325,16.915775,14424.188}; - azimut=-111.72096; - offsetY=4.7274399; - id=682; - side="EMPTY"; - vehicle="Land_Ammobox_rounds_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3305.8691,4.4738655,12976.764}; + angles[]={6.1876974,3.1297944,0.025875021}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=611; + type="Land_CncWall4_F"; + atlOffset=0.050192118; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item470 + class Item609 { - position[]={4898.9907,17.037947,14417.033}; - azimut=-195.83366; - offsetY=4.61727; - id=683; - side="EMPTY"; - vehicle="Land_TinContainer_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3314.4197,4.160234,12975.138}; + angles[]={6.161129,4.2504878,0.018667053}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=612; + type="Land_CncWall4_F"; + atlOffset=0.03203845; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item471 + class Item610 { - position[]={4899.3955,17.033964,14417.085}; - azimut=-170.81674; - offsetY=4.6173301; - id=684; - side="EMPTY"; - vehicle="Land_ButaneTorch_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3351.095,6.2218661,12964.983}; + angles[]={6.2645216,3.8142948,6.2791886}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false;"; + }; + id=613; + type="Land_BarGate_F"; + atlOffset=0.052928925; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item472 + class Item611 { - position[]={4898.7251,17.038651,14417.478}; - azimut=80.699524; - offsetY=4.61731; - id=685; - side="EMPTY"; - vehicle="Land_GasCooker_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3348.2749,4.042212,12969.986}; + angles[]={6.2432079,5.4426346,6.2791886}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=614; + type="Land_CncWall4_F"; + atlOffset=0.0014417171; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item473 + class Item612 { - position[]={4898.5259,17.04298,14416.859}; - azimut=-194.05009; - offsetY=4.61724; - id=686; - side="EMPTY"; - vehicle="Land_GasCanister_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3338.9639,4.8426886,12977.745}; + angles[]={6.1663861,3.6562378,6.249866}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=615; + type="Land_CncWall4_F"; + atlOffset=0.064920425; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item474 + class Item613 { - position[]={4883.064,17.030001,14428.476}; - azimut=-200.548; - offsetY=-0.0107651; - id=687; - side="EMPTY"; - vehicle="FlagPole_F"; - skill=0.60000002; - text="gang_flag_2"; - init="this allowDamage false; this addAction [""Capture Gang Area"",life_fnc_captureHideout,"""",0,false,false,"""",' playerSide == civilian && !isNil {(group player) getVariable ""gang_owner""}'];"; + dataType="Object"; + class PositionInfo + { + position[]={3356.4797,3.8578856,12963.805}; + angles[]={6.2698536,2.3734906,6.2778587}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=616; + type="Land_CncWall4_F"; + atlOffset=0.0039710999; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item475 + class Item614 { - position[]={4885.5059,17.208822,14411.982}; - azimut=159.423; - offsetY=0.53438199; - id=688; - side="EMPTY"; - vehicle="Land_InfoStand_V1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Gang Market"",life_fnc_virt_menu,""gang"",0,false,false,"""",' _b = (nearestObjects[getPosATL player,[""Land_u_Barracks_V2_F"",""Land_i_Barracks_V2_F""],25]) select 0; !isNil {_b getVariable ""gangOwner""} && {(_b getVariable ""gangOwner"") == (group player)} '];"; + dataType="Object"; + class PositionInfo + { + position[]={3359.9778,3.8426456,12964.135}; + angles[]={6.2698579,3.7265573,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=617; + type="Land_CncWall4_F"; + atlOffset=0.0029816628; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item476 + class Item615 { - position[]={18384.959,27.050535,15244.038}; - azimut=440.17065; - offsetY=0.53802103; - id=689; - side="EMPTY"; - vehicle="Land_Atm_01_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""ATM"",life_fnc_atmMenu,"""",0,FALSE,FALSE,"""",' vehicle player == player && player distance _target < 4 '];"; + dataType="Object"; + class PositionInfo + { + position[]={3343.479,4.3869476,12975.146}; + angles[]={6.1663861,3.6755934,6.249866}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=618; + type="Land_CncWall4_F"; + atlOffset=0.064547777; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item477 + class Item616 { - position[]={18393.619,27.08457,15252.262}; - azimut=170.56599; - offsetY=3.8996999; - id=690; - side="EMPTY"; - vehicle="Land_Pallet_MilBoxes_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false; this addAction[""Armament"",life_fnc_weaponShopMenu,""gang"",0,false,false,"""",' _b = (nearestObjects[getPosATL player,[""Land_u_Barracks_V2_F"",""Land_i_Barracks_V2_F""],25]) select 0; !isNil {_b getVariable ""gangOwner""} && {(_b getVariable ""gangOwner"") == (group player)} && playerSide == civilian ']; this setVariable[""realname"",""Gang Armament""];"; + dataType="Object"; + class PositionInfo + { + position[]={3347.771,4.1488991,12972.608}; + angles[]={6.2578578,3.6838839,6.2645216}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=619; + type="Land_CncWall4_F"; + atlOffset=0.006799221; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item478 + class Item617 { - position[]={18398.992,27.061018,15252.243}; - azimut=350.5708; - offsetY=3.86322; - id=691; - side="EMPTY"; - vehicle="Land_WoodenTable_large_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3363.9202,3.8005729,12960.965}; + angles[]={6.2698579,3.9349842,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=620; + type="Land_CncWall4_F"; + atlOffset=0.0032868385; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item479 + class Item618 { - position[]={18399.535,27.025404,15246.563}; - azimut=170.55099; - offsetY=3.7370801; - id=692; - side="EMPTY"; - vehicle="Land_Sink_F"; - skill=0.60000002; - text="heroin_processor"; - init="this allowDamage false; this enableSimulation false; this addAction[""Process Heroin"",life_fnc_processAction,""heroin"",0,false,false,"""",' _b = (nearestObjects[getPosATL player,[""Land_u_Barracks_V2_F"",""Land_i_Barracks_V2_F""],25]) select 0; life_inv_heroinu > 0 && !life_is_processing && !isNil {_b getVariable ""gangOwner""} && {(_b getVariable ""gangOwner"") == (group player)} && playerSide == civilian ']; this setVariable[""realname"",""Heroin Processing""];"; + dataType="Object"; + class PositionInfo + { + position[]={3734.1392,20.153889,12978.781}; + angles[]={0,3.1164513,6.2826972}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=621; + type="Land_Atm_02_F"; + atlOffset=0.00048828125; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item480 + class Item619 { - position[]={18398.895,27.061481,15252.229}; - azimut=259.94434; - offsetY=4.7279301; - id=693; - side="EMPTY"; - vehicle="Vest_V_TacVest_blk"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={15590.28,19.846914,17184.531}; + angles[]={0.0039967569,2.3407757,6.2791886}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=622; + type="Land_Atm_02_F"; + atlOffset=1.9073486e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item481 + class Item620 { - position[]={18396.26,27.026529,15244.992}; - azimut=440.22665; - offsetY=3.7525699; - id=694; - side="EMPTY"; - vehicle="Land_WoodenTable_small_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={17486.113,14.173491,13266.963}; + angles[]={0.0039967569,2.2732401,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=623; + type="Land_Atm_02_F"; + atlOffset=1.6212463e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item482 + class Item621 { - position[]={18383.645,27.046898,15242.18}; - azimut=530.51038; - offsetY=1.22691; - id=695; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={14151.122,20.382095,16301.715}; + angles[]={0.010664274,5.4232063,0.0066682254}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=624; + type="Land_Atm_02_F"; + atlOffset=8.7738037e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item483 + class Item622 { - position[]={18399.348,27.001619,15244.7}; - azimut=530.01733; - offsetY=4.7951598; - id=696; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={16181.317,14.304016,16952.986}; + angles[]={6.2818484,5.2311692,6.2738566}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=625; + type="Land_BagBunker_Small_F"; + atlOffset=3.528595e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item484 + class Item623 { - position[]={18396.479,27.016195,15244.229}; - azimut=528.86438; - offsetY=4.7707901; - id=697; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={16174.597,14.296299,16941.895}; + angles[]={6.2778587,5.2311692,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=626; + type="Land_BagBunker_Small_F"; + atlOffset=2.0027161e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item485 + class Item624 { - position[]={18398.559,27.006229,15244.559}; - azimut=529.48035; - offsetY=4.7756; - id=698; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={16177.938,17.416348,16946.379}; + angles[]={0,5.2670298,6.2738566}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false;"; + }; + id=627; + type="Land_BarGate_F"; + atlOffset=0.017130852; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item486 + class Item625 { - position[]={18381.482,27.051542,15241.73}; - azimut=170.54871; - offsetY=1.2211699; - id=699; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={16212.839,14.254855,17009.311}; + angles[]={6.2778587,5.1948323,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=628; + type="Land_BagBunker_Small_F"; + atlOffset=1.4305115e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item487 + class Item626 { - position[]={18400.701,27.024916,15246.953}; - azimut=440.60165; - offsetY=4.6560998; - id=700; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={16206.536,14.282191,16997.992}; + angles[]={6.2818484,5.1948323,6.2805333}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=629; + type="Land_BagBunker_Small_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item488 + class Item627 { - position[]={18384.232,27.043633,15242.278}; - azimut=170.55719; - offsetY=1.22815; - id=701; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={16209.716,17.349487,17002.592}; + angles[]={0.0026520467,5.2306929,6.2738566}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false;"; + }; + id=630; + type="Land_BarGate_F"; + atlOffset=0.00015163422; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item489 + class Item628 { - position[]={18395.596,27.019024,15244.072}; - azimut=172.47986; - offsetY=4.82166; - id=702; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={16117.757,15.80426,16837.625}; + angles[]={0.0039967569,5.2648468,0.0013372133}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false;"; + }; + id=631; + type="Land_CncWall4_F"; + atlOffset=0.30001354; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item490 + class Item629 { - position[]={18380.701,27.049879,15241.6}; - azimut=170.57703; - offsetY=1.2189; - id=703; - side="EMPTY"; - vehicle="Land_Pallet_vertical_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={16120.122,15.791885,16841.508}; + angles[]={0.0039967569,5.2648468,0.0013372133}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false;"; + }; + id=632; + type="Land_CncWall4_F"; + atlOffset=0.30001354; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item491 + class Item630 { - position[]={18400.301,27.006794,15245.572}; - azimut=448.78265; - offsetY=3.72158; - id=704; - side="EMPTY"; - vehicle="Land_Sack_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3277.3,3.4612718,12970.5}; + angles[]={0,6.2539859,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_FED_Front"",life_fnc_fedCamDisplay,""front""]; this addAction[localize""STR_MAR_FED_Side"",life_fnc_fedCamDisplay,""side""]; this addAction[localize""STR_MAR_FED_Back"",life_fnc_fedCamDisplay,""back""]; this addAction[localize""STR_MAR_FED_Vault"",life_fnc_fedCamDisplay,""vault""]; this addAction[localize""STR_MAR_FED_Off_display"",life_fnc_fedCamDisplay,""off""];"; + name="hq_lt_1"; + }; + id=633; + type="Land_Laptop_unfolded_F"; + atlOffset=0.067400932; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item492 + class Item631 { - position[]={18398.801,27.064331,15252.817}; - azimut=443.79364; - offsetY=4.7287002; - id=705; - side="EMPTY"; - vehicle="Weapon_arifle_Katiba_C_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={3277.2983,2.8222558,12970.501}; + angles[]={0,6.2539859,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false;"; + name="hq_desk_1"; + }; + id=634; + type="Land_TableDesk_F"; + atlOffset=0.20000529; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item493 + class Item632 { - position[]={18394.59,27.030855,15244.61}; - azimut=377.63968; - offsetY=3.7511599; - id=706; - side="EMPTY"; - vehicle="Land_Portable_generator_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={13816.073,21.525152,18985.555}; + angles[]={6.2511969,5.5695529,0.027990974}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=635; + type="Land_Atm_02_F"; + atlOffset=0.0011405945; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item494 + class Item633 { - position[]={18400.002,27.038803,15248.037}; - azimut=406.12869; - offsetY=3.75085; - id=707; - side="EMPTY"; - vehicle="Land_MetalBarrel_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11692.81,39.463417,15919.2}; + angles[]={0,4.7059488,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=636; + type="Land_Atm_01_F"; + atlOffset=0.53800964; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item495 + class Item634 { - position[]={18394.537,27.036049,15245.02}; - azimut=374.58267; - offsetY=3.76085; - id=708; - side="EMPTY"; - vehicle="Land_ExtensionCord_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11682.772,41.965408,15912.511}; + angles[]={0,0.00046888617,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Armament"",life_fnc_weaponShopMenu,""gang"",0,false,false,"""",' _b = nearestBuilding (getPosATL player); !isNil {_b getVariable ""gangOwner""} && {(_b getVariable ""gangOwner"") == (group player)} && playerSide isEqualTo civilian ']; this addAction[localize""STR_Shops_C_Gang"",life_fnc_clothingMenu,""gang_clothing"",0,false,false,"""",' _b = nearestBuilding (getPosATL player); !isNil {_b getVariable ""gangOwner""} && {(_b getVariable ""gangOwner"") == (group player)} && playerSide isEqualTo civilian ']; this setVariable [""realname"",""Gang Armament""];"; + }; + id=637; + type="Land_Pallet_MilBoxes_F"; + atlOffset=3.2467079; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item496 + class Item635 { - position[]={18395.693,27.027262,15244.802}; - azimut=440.28165; - offsetY=4.6174798; - id=709; - side="EMPTY"; - vehicle="Land_Suitcase_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11677.6,41.923252,15913.4}; + angles[]={0,3.1421337,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=638; + type="Land_WoodenTable_large_F"; + atlOffset=3.2223625; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item497 + class Item636 { - position[]={18399.344,27.062944,15253.213}; - azimut=245.05072; - offsetY=4.6682401; - id=710; - side="EMPTY"; - vehicle="Land_Ammobox_rounds_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11678,42.109108,15919.1}; + angles[]={0,0.00020129058,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_Process_Marijuana"",life_fnc_processAction,""marijuana"",0,false,false,"""",' _b = nearestBuilding (getPosATL player); life_inv_cannabis > 0 && !life_is_processing && !life_action_inUse && !isNil {_b getVariable ""gangOwner""} && {(_b getVariable ""gangOwner"") == (group player)} && playerSide isEqualTo civilian ']; this setVariable [""realname"",""Marijuana Processing""];"; + name="mari_processor"; + }; + id=639; + type="Land_Sink_F"; + atlOffset=3.2228775; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item498 + class Item637 { - position[]={18398.936,27.058022,15251.421}; - azimut=278.51575; - offsetY=4.7270298; - id=711; - side="EMPTY"; - vehicle="Land_Ammobox_rounds_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11677.682,43.016762,15913.393}; + angles[]={0,1.5604047,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=640; + type="Vest_V_TacVest_blk"; + atlOffset=0.75296021; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item499 + class Item638 { - position[]={18398.723,27.059462,15251.495}; - azimut=259.36642; - offsetY=4.7274399; - id=712; - side="EMPTY"; - vehicle="Land_Ammobox_rounds_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11681.5,41.947823,15920.1}; + angles[]={0,4.7069263,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=641; + type="Land_WoodenTable_small_F"; + atlOffset=3.246933; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item500 + class Item639 { - position[]={18396.527,27.020777,15244.632}; - azimut=175.25349; - offsetY=4.61727; - id=713; - side="EMPTY"; - vehicle="Land_TinContainer_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11694.398,39.607349,15920.8}; + angles[]={0,6.2826791,0.0026520467}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=642; + type="Land_Pallet_vertical_F"; + atlOffset=1.2269096; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item501 + class Item640 { - position[]={18396.928,27.018284,15244.603}; - azimut=200.27042; - offsetY=4.6173301; - id=714; - side="EMPTY"; - vehicle="Land_ButaneTorch_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11678.502,43.338493,15920.878}; + angles[]={6.2525291,6.2740746,6.2805109}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=643; + type="Land_Pallet_vertical_F"; + atlOffset=4.7951584; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item502 + class Item641 { - position[]={18396.334,27.027426,15245.101}; - azimut=451.78665; - offsetY=4.61731; - id=715; - side="EMPTY"; - vehicle="Land_GasCooker_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11681.408,43.28809,15920.884}; + angles[]={6.2605233,6.2539511,6.272521}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=644; + type="Land_Pallet_vertical_F"; + atlOffset=4.7707901; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item503 + class Item642 { - position[]={18396.025,27.022398,15244.544}; - azimut=177.03708; - offsetY=4.61724; - id=716; - side="EMPTY"; - vehicle="Land_GasCanister_F"; - skill=0.60000002; - init="this allowDamage false; this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11679.308,43.3153,15920.884}; + angles[]={6.2605233,6.2647023,6.272521}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=645; + type="Land_Pallet_vertical_F"; + atlOffset=4.7756004; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item504 + class Item643 { - position[]={18383.088,27.124443,15258.921}; - azimut=170.53999; - offsetY=-0.0107651; - id=717; - side="EMPTY"; - vehicle="FlagPole_F"; - skill=0.60000002; - text="gang_flag_3"; - init="this allowDamage false; this addAction [""Capture Gang Area"",life_fnc_captureHideout,"""",0,false,false,"""",' playerSide == civilian && !isNil {(group player) getVariable ""gang_owner""}'];"; + dataType="Object"; + class PositionInfo + { + position[]={11696.598,39.607475,15920.9}; + angles[]={0,0.00015849213,0.0026520467}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=646; + type="Land_Pallet_vertical_F"; + atlOffset=1.2211685; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item505 + class Item644 { - position[]={18382.309,27.055088,15242.263}; - azimut=530.50897; - offsetY=0.53438199; - id=718; - side="EMPTY"; - vehicle="Land_InfoStand_V1_F"; - skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[""Gang Market"",life_fnc_virt_menu,""gang"",0,false,false,"""",' _b = (nearestObjects[getPosATL player,[""Land_u_Barracks_V2_F"",""Land_i_Barracks_V2_F""],25]) select 0; !isNil {_b getVariable ""gangOwner""} && {(_b getVariable ""gangOwner"") == (group player)} '];"; + dataType="Object"; + class PositionInfo + { + position[]={11676.899,43.230019,15918.878}; + angles[]={6.2525291,4.7134714,6.1467061}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=647; + type="Land_Pallet_vertical_F"; + atlOffset=4.6561012; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item506 + class Item645 { - position[]={4875.4331,17.972208,14398.885}; - azimut=-21.076899; - id=719; - side="EMPTY"; - vehicle="Land_HBarrierBig_F"; - skill=0.60000002; - init="this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11693.799,39.607521,15920.801}; + angles[]={0.0013372133,0.00030640824,0.0013372133}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=648; + type="Land_Pallet_vertical_F"; + atlOffset=1.2281494; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item507 + class Item646 { - position[]={4863.6318,18.309771,14397.813}; - azimut=69.118431; - id=720; - side="EMPTY"; - vehicle="Land_HBarrierBig_F"; - skill=0.60000002; - init="this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11682.308,43.329369,15920.884}; + angles[]={6.2605233,0.033863403,6.272521}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=649; + type="Land_Pallet_vertical_F"; + atlOffset=4.8216591; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item508 + class Item647 { - position[]={4861.0337,18.157667,14404.368}; - azimut=-111.86848; - id=721; - side="EMPTY"; - vehicle="Land_HBarrierBig_F"; - skill=0.60000002; - init="this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11697.398,39.607338,15920.9}; + angles[]={0,0.00065277755,0.0026520467}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=650; + type="Land_Pallet_vertical_F"; + atlOffset=1.2188988; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item509 + class Item648 { - position[]={4857.9307,17.689947,14411.893}; - azimut=-112.35616; - id=722; - side="EMPTY"; - vehicle="Land_HBarrierBig_F"; - skill=0.60000002; - init="this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11677.404,41.921909,15920.203}; + angles[]={0,4.8562565,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=651; + type="Land_Sack_F"; + atlOffset=3.2560425; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item510 + class Item649 { - position[]={4859.1333,17.269112,14416.625}; - azimut=-38.448238; - id=723; - side="EMPTY"; - vehicle="Land_HBarrierBig_F"; - skill=0.60000002; - init="this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11677.7,42.355499,15912.8}; + angles[]={0,4.7691817,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=652; + type="Weapon_arifle_Katiba_C_F"; + atlOffset=0.75292969; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item511 + class Item650 { - position[]={4865.2612,16.965828,14421.551}; - azimut=-218.50249; - id=724; - side="EMPTY"; - vehicle="Land_HBarrierBig_F"; - skill=0.60000002; - init="this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11683.2,41.857403,15920.2}; + angles[]={0,3.6145771,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=653; + type="Land_Portable_generator_F"; + atlOffset=3.2296295; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item512 + class Item651 { - position[]={4871.4668,16.744299,14426.515}; - azimut=-38.786606; - id=725; - side="EMPTY"; - vehicle="Land_HBarrierBig_F"; - skill=0.60000002; - init="this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11677.3,41.913761,15917.7}; + angles[]={0,4.111804,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=654; + type="Land_MetalBarrel_F"; + atlOffset=3.2224922; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item513 + class Item652 { - position[]={4876.7041,16.460484,14432.409}; - azimut=-57.827621; - id=726; - side="EMPTY"; - vehicle="Land_HBarrierBig_F"; - skill=0.60000002; - init="this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11683.2,41.570335,15919.8}; + angles[]={0,3.5612221,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=655; + type="Land_ExtensionCord_F"; + atlOffset=3.2302704; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item514 + class Item653 { - position[]={4882.0571,16.213467,14436.791}; - azimut=-21.076899; - id=727; - side="EMPTY"; - vehicle="Land_HBarrierBig_F"; - skill=0.60000002; - init="this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11682.1,42.621635,15920.2}; + angles[]={0,4.7078862,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=656; + type="Land_Suitcase_F"; + atlOffset=0.77371216; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item515 + class Item654 { - position[]={4889.4258,16.131992,14439.66}; - azimut=-22.144547; - id=728; - side="EMPTY"; - vehicle="Land_HBarrierBig_F"; - skill=0.60000002; - init="this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11677.1,42.463215,15912.5}; + angles[]={0,1.3004622,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=657; + type="Land_Ammobox_rounds_F"; + atlOffset=0.0023040771; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item516 + class Item655 { - position[]={4894.7798,16.176722,14438.689}; - azimut=-136.73715; - id=729; - side="EMPTY"; - vehicle="Land_HBarrierBig_F"; - skill=0.60000002; - init="this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11677.8,42.46093,15914.2}; + angles[]={0,1.8845366,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=658; + type="Land_Ammobox_rounds_F"; + atlOffset=1.9073486e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item517 + class Item656 { - position[]={4899.7461,16.427912,14433.261}; - azimut=57.053257; - id=730; - side="EMPTY"; - vehicle="Land_HBarrierBig_F"; - skill=0.60000002; - init="this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11678,42.460938,15914.1}; + angles[]={0,1.5503184,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=659; + type="Land_Ammobox_rounds_F"; + atlOffset=2.6702881e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item518 + class Item657 { - position[]={4903.2759,16.6042,14426.509}; - azimut=68.683388; - id=731; - side="EMPTY"; - vehicle="Land_HBarrierBig_F"; - skill=0.60000002; - init="this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11681.3,42.490788,15920.5}; + angles[]={0,0.082272723,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=660; + type="Land_TinContainer_F"; + atlOffset=0.011291504; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item519 + class Item658 { - position[]={4906.1079,16.786463,14418.869}; - azimut=-108.3455; - id=732; - side="EMPTY"; - vehicle="Land_HBarrierBig_F"; - skill=0.60000002; - init="this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11680.9,42.529354,15920.6}; + angles[]={0,0.51890033,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=661; + type="Land_ButaneTorch_F"; + atlOffset=0.01789093; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item520 + class Item659 { - position[]={4907.5044,16.915689,14414.329}; - azimut=-109.15462; - id=733; - side="EMPTY"; - vehicle="Land_HBarrierBig_F"; - skill=0.60000002; - init="this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11681.4,42.474232,15920}; + angles[]={0,4.9086862,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=662; + type="Land_GasCooker_F"; + atlOffset=0.77647781; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item521 + class Item660 { - position[]={4905.2168,17.084143,14409.901}; - azimut=-21.076899; - id=734; - side="EMPTY"; - vehicle="Land_HBarrierBig_F"; - skill=0.60000002; - init="this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11681.8,42.44133,15920.5}; + angles[]={0,0.11340189,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=663; + type="Land_GasCanister_F"; + atlOffset=0.0059280396; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item522 + class Item661 { - position[]={4882.624,17.701826,14401.694}; - azimut=-21.076899; - id=735; - side="EMPTY"; - vehicle="Land_HBarrierBig_F"; - skill=0.60000002; - init="this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11692.287,41.536949,15904.482}; + angles[]={6.256525,0,0.0039967569}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this addAction[localize""STR_NOTF_captureGangHideout"",life_fnc_captureHideout,"""",0,false,false,"""",' playerSide isEqualTo civilian && !isNil {(group player) getVariable ""gang_owner""}'];"; + name="gang_flag_1"; + }; + id=664; + type="FlagPole_F"; + atlOffset=0.0014610291; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item523 + class Item662 { - position[]={4889.7798,17.496145,14404.149}; - azimut=-193.92442; - id=736; - side="EMPTY"; - vehicle="Land_HBarrierBig_F"; - skill=0.60000002; - init="this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={11695.698,38.758278,15920.5}; + angles[]={0,6.2826619,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_Shops_Gang"",life_fnc_virt_menu,""gang"",0,false,false,"""",' _b = nearestBuilding (getPosATL player); !isNil {_b getVariable ""gangOwner""} && {(_b getVariable ""gangOwner"") == (group player)} '];"; + }; + id=665; + type="Land_InfoStand_V1_F"; + atlOffset=0.53438568; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item524 + class Item663 { - position[]={4897.2788,17.320499,14406.559}; - azimut=-21.076899; - id=737; - side="EMPTY"; - vehicle="Land_HBarrierBig_F"; - skill=0.60000002; - init="this enableSimulation false;"; + dataType="Object"; + class PositionInfo + { + position[]={4887.7593,18.931973,14414.214}; + angles[]={0,1.2057351,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=666; + type="Land_Atm_01_F"; + atlOffset=0.53786469; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - }; - class Markers - { - items=217; - class Item0 + class Item664 { - position[]={8459.6777,104.56568,25131.203}; - name="respawn_civilian"; - type="Empty"; + dataType="Object"; + class PositionInfo + { + position[]={4894.8037,21.37981,14423.994}; + angles[]={0,2.7834339,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Armament"",life_fnc_weaponShopMenu,""gang"",0,false,false,"""",' _b = nearestBuilding (getPosATL player); !isNil {_b getVariable ""gangOwner""} && {(_b getVariable ""gangOwner"") == (group player)} && playerSide isEqualTo civilian ']; this addAction[localize""STR_Shops_C_Gang"",life_fnc_clothingMenu,""gang_clothing"",0,false,false,"""",' _b = nearestBuilding (getPosATL player); !isNil {_b getVariable ""gangOwner""} && {(_b getVariable ""gangOwner"") == (group player)} && playerSide isEqualTo civilian ']; this setVariable [""realname"",""Gang Armament""];"; + }; + id=667; + type="Land_Pallet_MilBoxes_F"; + atlOffset=3.22509; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item1 + class Item665 { - position[]={8301.9658,76.704063,25059.033}; - name="Respawn_west"; - type="Empty"; + dataType="Object"; + class PositionInfo + { + position[]={4899.9663,21.20381,14424.986}; + angles[]={0,5.9251027,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=668; + type="Land_WoodenTable_large_F"; + atlOffset=3.0669041; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item2 + class Item666 { - position[]={3518.26,5.7627802,13146.568}; - name="city"; - type="Empty"; + dataType="Object"; + class PositionInfo + { + position[]={4901.5908,21.316124,14419.505}; + angles[]={0,2.7831721,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_Process_Cocaine"",life_fnc_processAction,""cocaine"",0,false,false,"""",' _b = (nearestObjects[getPosATL player,[""Land_u_Barracks_V2_F"",""Land_i_Barracks_V2_F""],25]) select 0; life_inv_cocaineUnprocessed > 0 && !life_is_processing && !life_action_inUse && !isNil {_b getVariable ""gangOwner""} && {(_b getVariable ""gangOwner"") == (group player)} && playerSide isEqualTo civilian ']; this setVariable [""realname"",""Cocaine Processing""];"; + name="coke_processor"; + }; + id=669; + type="Land_Sink_F"; + atlOffset=2.9938736; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item3 + class Item667 { - position[]={3400.7595,1.8830158,12899.346}; - name="fish_market_1"; - text="@STR_MAR_Fish_Market"; - type="mil_box"; - colorName="ColorGreen"; + dataType="Object"; + class PositionInfo + { + position[]={4899.8853,22.302111,14424.956}; + angles[]={0,4.3433733,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=670; + type="Vest_V_TacVest_blk"; + atlOffset=0.0047721863; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item4 + class Item668 { - position[]={3765.8088,18.85,12990.187}; - name="hospital_marker"; - text="@STR_MAR_Hospital"; - type="loc_Hospital"; - colorName="ColorRed"; + dataType="Object"; + class PositionInfo + { + position[]={4898.6592,21.224638,14417.351}; + angles[]={0,1.2067125,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=671; + type="Land_WoodenTable_small_F"; + atlOffset=3.0877323; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item5 + class Item669 { - position[]={3529.9373,7.3869972,13055.158}; - name="civ_spawn_1"; - type="Empty"; + dataType="Object"; + class PositionInfo + { + position[]={4886.832,19.162865,14412.188}; + angles[]={0.042640556,2.7824655,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=672; + type="Land_Pallet_vertical_F"; + atlOffset=1.2269096; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item6 + class Item670 { - position[]={16822.93,22.089239,12720.003}; - name="civ_spawn_2"; - type="Empty"; + dataType="Object"; + class PositionInfo + { + position[]={4901.7622,22.540178,14417.651}; + angles[]={0.0039967569,2.7738607,6.2738566}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=673; + type="Land_Pallet_vertical_F"; + atlOffset=4.7951603; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item7 + class Item671 { - position[]={14016.111,26.688026,18698.537}; - name="civ_spawn_3"; - type="Empty"; + dataType="Object"; + class PositionInfo + { + position[]={4899.043,22.545244,14416.639}; + angles[]={0.0039967569,2.7537372,6.2738566}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=674; + type="Land_Pallet_vertical_F"; + atlOffset=4.7707901; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item8 + class Item672 { - position[]={3292.1787,2.2604189,12961.598}; - name="cop_spawn_1"; - type="Empty"; - angle=180.00848; + dataType="Object"; + class PositionInfo + { + position[]={4901.0078,22.528814,14417.362}; + angles[]={0.0039967569,2.7644885,6.2738566}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=675; + type="Land_Pallet_vertical_F"; + atlOffset=4.7756004; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item9 + class Item673 { - position[]={16569.354,11,12735.809}; - name="cop_spawn_2"; - type="Empty"; + dataType="Object"; + class PositionInfo + { + position[]={4884.811,19.208546,14411.332}; + angles[]={0.053282689,2.783129,6.272521}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=676; + type="Land_Pallet_vertical_F"; + atlOffset=1.2211704; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item10 + class Item674 { - position[]={13820.758,19.826002,18969.209}; - name="cop_spawn_3"; - text="@STR_MAR_Police_Station"; - type="mil_box"; - colorName="ColorBLUFOR"; + dataType="Object"; + class PositionInfo + { + position[]={4902.6821,22.274502,14420.149}; + angles[]={0.042640556,1.2132574,6.2352223}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=677; + type="Land_Pallet_vertical_F"; + atlOffset=4.6560993; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item11 + class Item675 { - position[]={14161.147,19.243717,16295.893}; - name="cop_spawn_4"; - text="@STR_MAR_Police_Air_HQ"; - type="mil_box"; - colorName="ColorBLUFOR"; + dataType="Object"; + class PositionInfo + { + position[]={4887.3926,19.154924,14412.404}; + angles[]={0.042640556,2.783277,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=678; + type="Land_Pallet_vertical_F"; + atlOffset=1.2281494; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item12 + class Item676 { - position[]={19856.078,62.778057,17895.051}; - name="iron_1"; - text="@STR_MAR_Iron_Mine"; - type="mil_triangle"; - colorName="ColorBrown"; + dataType="Object"; + class PositionInfo + { + position[]={4898.2002,22.605286,14416.312}; + angles[]={0.0039967569,2.816834,6.2738566}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=679; + type="Land_Pallet_vertical_F"; + atlOffset=4.8216591; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item13 + class Item677 { - position[]={23823.781,3.1900001,18601.668}; - name="salt_1"; - text="@STR_MAR_Salt_Mine"; - type="mil_triangle"; - colorName="ColorBrown"; + dataType="Object"; + class PositionInfo + { + position[]={4884.0605,19.229172,14411.053}; + angles[]={0.053282689,2.7836232,6.272521}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=680; + type="Land_Pallet_vertical_F"; + atlOffset=1.2189007; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item14 + class Item678 { - position[]={27361.367,6.3006272,24465.764}; - name="Salt"; - text="@STR_MAR_Salt_Processing"; - type="mil_box"; - colorName="ColorBrown"; + dataType="Object"; + class PositionInfo + { + position[]={4902.5347,21.069738,14418.683}; + angles[]={0,1.3560429,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=681; + type="Land_Sack_F"; + atlOffset=2.9678555; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item15 + class Item679 { - position[]={22150.52,3.150569,14475.64}; - name="Correctional Facility"; - text="@STR_MAR_Altis_Corrections"; - type="mil_dot"; - colorName="Color4_FD_F"; + dataType="Object"; + class PositionInfo + { + position[]={4899.6543,21.651262,14425.51}; + angles[]={0,1.2689686,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=682; + type="Weapon_arifle_Katiba_C_F"; + atlOffset=0.0151577; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item16 + class Item680 { - position[]={3269.3455,2.1793349,12967.998}; - name="police_hq_1"; - text="@STR_MAR_Police_HQ"; - type="mil_box"; - colorName="Color4_FD_F"; + dataType="Object"; + class PositionInfo + { + position[]={4897.1074,21.163771,14416.642}; + angles[]={0,0.11436086,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=683; + type="Land_Portable_generator_F"; + atlOffset=3.0999794; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item17 + class Item681 { - position[]={16589.234,11,12763.845}; - name="police_hq_2"; - text="@STR_MAR_Police_Station"; - type="mil_box"; - colorName="Color4_FD_F"; + dataType="Object"; + class PositionInfo + { + position[]={4901.7563,21.060217,14421.069}; + angles[]={0,0.61158776,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=684; + type="Land_MetalBarrel_F"; + atlOffset=2.9329319; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item18 + class Item682 { - position[]={14276.118,4.1247582,13044.42}; - name="CG"; - text="@STR_MAR_Coast_Guard"; - type="Empty"; - colorName="Color4_FD_F"; + dataType="Object"; + class PositionInfo + { + position[]={4896.9668,20.884226,14417.023}; + angles[]={0,0.061005797,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=685; + type="Land_ExtensionCord_F"; + atlOffset=3.1081409; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item19 + class Item683 { - position[]={9188.2607,14.383561,21670.799}; - name="Rebelop"; - text="@STR_MAR_Rebel_Outpost"; - type="mil_triangle"; - colorName="Color1_FD_F"; + dataType="Object"; + class PositionInfo + { + position[]={4898.1338,21.908751,14417.04}; + angles[]={0,1.2076724,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=686; + type="Land_Suitcase_F"; + atlOffset=0.0064659119; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item20 + class Item684 { - position[]={14676.569,17.91,16773.182}; - name="airshop"; - text="@STR_MAR_Air_Shop"; - type="mil_dot"; - colorName="Color1_FD_F"; + dataType="Object"; + class PositionInfo + { + position[]={4900.1147,21.673395,14426.007}; + angles[]={0,4.0834327,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=687; + type="Land_Ammobox_rounds_F"; + atlOffset=0.52944565; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item21 + class Item685 { - position[]={3763.6846,34.367668,12372.792}; - name="civ_truck_shop1"; - text="@STR_MAR_Truck_Shop"; - type="c_car"; - colorName="ColorBlue"; + dataType="Object"; + class PositionInfo + { + position[]={4900.0596,21.737303,14424.163}; + angles[]={0,4.6675062,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=688; + type="Land_Ammobox_rounds_F"; + atlOffset=0.59335327; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item22 + class Item686 { - position[]={6263.5244,43,16265.374}; - name="OilP"; - text="@STR_MAR_Oil_Processing"; - type="mil_box"; - colorName="ColorBrown"; + dataType="Object"; + class PositionInfo + { + position[]={4899.8325,21.748577,14424.188}; + angles[]={0,4.3332868,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=689; + type="Land_Ammobox_rounds_F"; + atlOffset=0.0071105957; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item23 + class Item687 { - position[]={10232.705,95.303696,14854.982}; - name="iron_processing"; - text="@STR_MAR_Iron_processing"; - type="mil_box"; - colorName="ColorBrown"; + dataType="Object"; + class PositionInfo + { + position[]={4898.9907,21.754593,14417.033}; + angles[]={0,2.8652432,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=690; + type="Land_TinContainer_F"; + atlOffset=0.61662865; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item24 + class Item688 { - position[]={8090.8218,77.531647,22620.234}; - name="sand_1"; - text="@STR_MAR_Sand_Mine"; - type="mil_triangle"; - colorName="ColorBrown"; + dataType="Object"; + class PositionInfo + { + position[]={4899.3955,21.782637,14417.085}; + angles[]={0,3.3018708,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=691; + type="Land_ButaneTorch_F"; + atlOffset=0.61270714; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item25 + class Item689 { - position[]={8959.7256,69.222336,15507.252}; - name="chop_shop_1"; - text="@STR_MAR_Chop_Shop"; - type="o_armor"; - colorName="Color1_FD_F"; + dataType="Object"; + class PositionInfo + { + position[]={4898.7251,21.751146,14417.478}; + angles[]={0,1.4084724,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=692; + type="Land_GasCooker_F"; + atlOffset=0.61737251; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item26 + class Item690 { - position[]={8440.3506,49.484863,12756.805}; - name="cocaine processing"; - text="@STR_MAR_Cocaine_Processing"; - type="mil_dot"; - colorName="Color1_FD_F"; + dataType="Object"; + class PositionInfo + { + position[]={4898.5259,21.715506,14416.859}; + angles[]={0,2.8963726,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=693; + type="Land_GasCanister_F"; + atlOffset=0.003288269; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item27 + class Item691 { - position[]={167.63799,0.021615377,14709.002}; - name="truck_1"; - text="@STR_MAR_Truck_Shop"; - type="c_car"; - colorName="ColorBlack"; + dataType="Object"; + class PositionInfo + { + position[]={4883.104,21.006805,14428.075}; + angles[]={0,2.7829626,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this addAction[localize""STR_NOTF_captureGangHideout"",life_fnc_captureHideout,"""",0,false,false,"""",' playerSide isEqualTo civilian && !isNil {(group player) getVariable ""gang_owner""}'];"; + name="gang_flag_2"; + }; + id=694; + type="FlagPole_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item28 + class Item692 { - position[]={4412.5562,37.095924,12605.266}; - name="lead_1"; - text="@STR_MAR_Copper_Mine"; - type="mil_triangle"; - colorName="ColorBrown"; + dataType="Object"; + class PositionInfo + { + position[]={4885.5059,18.318567,14411.982}; + angles[]={0,2.7824564,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_Shops_Gang"",life_fnc_virt_menu,""gang"",0,false,false,"""",' _b = (nearestObjects[getPosATL player,[""Land_u_Barracks_V2_F"",""Land_i_Barracks_V2_F""],25]) select 0; !isNil {_b getVariable ""gangOwner""} && {(_b getVariable ""gangOwner"") == (group player)} '];"; + }; + id=695; + type="Land_InfoStand_V1_F"; + atlOffset=0.038593292; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item29 + class Item693 { - position[]={167.56963,0.078673914,14509.83}; - name="atm"; - text="@STR_MAR_ATM"; - type="loc_Tourism"; - colorName="ColorGreen"; + dataType="Object"; + class PositionInfo + { + position[]={18384.951,28.869158,15244.036}; + angles[]={0,1.3992414,6.2822089}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=696; + type="Land_Atm_01_F"; + atlOffset=0.53800011; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item30 + class Item694 { - position[]={163.73174,0.012321081,14411.306}; - name="lbank"; - text="@STR_MAR_Local_Bank"; - type="loc_Tourism"; - colorName="ColorBLUFOR"; + dataType="Object"; + class PositionInfo + { + position[]={18393.748,31.434256,15252.272}; + angles[]={0,2.9769382,6.2822089}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Armament"",life_fnc_weaponShopMenu,""gang"",0,false,false,"""",' _b = (nearestObjects[getPosATL player,[""Land_u_Barracks_V2_F"",""Land_i_Barracks_V2_F""],25]) select 0; !isNil {_b getVariable ""gangOwner""} && {(_b getVariable ""gangOwner"") == (group player)} && playerSide isEqualTo civilian ']; this addAction[localize""STR_Shops_C_Gang"",life_fnc_clothingMenu,""gang_clothing"",0,false,false,"""",' _b = (nearestObjects[getPosATL player,[""Land_u_Barracks_V2_F"",""Land_i_Barracks_V2_F""],25]) select 0; !isNil {_b getVariable ""gangOwner""} && {(_b getVariable ""gangOwner"") == (group player)} && playerSide isEqualTo civilian ']; this setVariable [""realname"",""Gang Armament""];"; + }; + id=697; + type="Land_Pallet_MilBoxes_F"; + atlOffset=3.3166447; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item31 + class Item695 { - position[]={169.09892,-0.026115492,14814.396}; - name="Carshop"; - text="@STR_MAR_Car_Shop"; - type="c_car"; - colorName="ColorWhite"; + dataType="Object"; + class PositionInfo + { + position[]={18398.992,31.356533,15252.243}; + angles[]={0,6.1186147,6.2822089}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=698; + type="Land_WoodenTable_large_F"; + atlOffset=3.2618599; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item32 + class Item696 { - position[]={169.36064,0.027309759,14608.475}; - name="Hospital_1"; - text="@STR_MAR_Hospital_Clinic"; - type="loc_Hospital"; - colorName="ColorRed"; + dataType="Object"; + class PositionInfo + { + position[]={18399.535,31.380136,15246.563}; + angles[]={0,2.9766765,6.2822089}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_Process_Heroin"",life_fnc_processAction,""heroin"",0,false,false,"""",' _b = (nearestObjects[getPosATL player,[""Land_u_Barracks_V2_F"",""Land_i_Barracks_V2_F""],25]) select 0; life_inv_heroinUnprocessed > 0 && !life_is_processing && !life_action_inUse && !isNil {_b getVariable ""gangOwner""} && {(_b getVariable ""gangOwner"") == (group player)} && playerSide isEqualTo civilian ']; this setVariable [""realname"",""Heroin Processing""];"; + name="heroin_processor"; + }; + id=699; + type="Land_Sink_F"; + atlOffset=3.100647; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item33 + class Item697 { - position[]={3669.2529,10.441362,13108.502}; - name="car1"; - type="c_car"; - colorName="ColorWhite"; + dataType="Object"; + class PositionInfo + { + position[]={18398.912,32.450623,15252.239}; + angles[]={0,4.5368843,6.2822089}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=700; + type="Vest_V_TacVest_blk"; + atlOffset=0.00048065186; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item34 + class Item698 { - position[]={13928.122,24.577969,22310.945}; - name="diamond_1"; - text="@STR_MAR_Diamond_Mine"; - type="mil_triangle"; - colorName="ColorBrown"; + dataType="Object"; + class PositionInfo + { + position[]={18396.26,31.211393,15244.992}; + angles[]={0,1.400219,6.2822089}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=701; + type="Land_WoodenTable_small_F"; + atlOffset=3.1140518; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item35 + class Item699 { - position[]={16990.332,16.389584,12866.398}; - name="car1_2"; - type="c_car"; - colorName="ColorWhite"; - angle=0.011481642; + dataType="Object"; + class PositionInfo + { + position[]={18383.645,29.009182,15242.18}; + angles[]={0,2.9759669,6.2822089}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=702; + type="Land_Pallet_vertical_F"; + atlOffset=0.59643936; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item36 + class Item700 { - position[]={3479.1758,2.6362305,13231.096}; - name="Gen"; - text="@STR_MAR_General_Store"; - type="c_unknown"; - colorName="ColorGreen"; + dataType="Object"; + class PositionInfo + { + position[]={18399.354,32.532078,15244.691}; + angles[]={6.2711902,2.9673619,6.2751918}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=703; + type="Land_Pallet_vertical_F"; + atlOffset=4.7951603; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item37 + class Item701 { - position[]={162.51799,-0.069760568,14300.679}; - name="Gen_1"; - text="@STR_MAR_Civilian_Shops"; - type="c_unknown"; - colorName="ColorGreen"; + dataType="Object"; + class PositionInfo + { + position[]={18396.482,32.522297,15244.22}; + angles[]={6.2711854,2.9472394,6.2778587}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=704; + type="Land_Pallet_vertical_F"; + atlOffset=4.7707901; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item38 + class Item702 { - position[]={161.06902,0.056310706,14202.72}; - name="boat_1"; - text="@STR_MAR_Boat_Shop"; - type="c_ship"; - colorName="ColorWhite"; + dataType="Object"; + class PositionInfo + { + position[]={18398.564,32.517128,15244.55}; + angles[]={6.2711902,2.9579902,6.2751918}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=705; + type="Land_Pallet_vertical_F"; + atlOffset=4.7756004; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item39 + class Item703 { - position[]={3647.8298,10.226415,13122.039}; - name="civ_car_1"; - type="Empty"; - angle=222.94595; + dataType="Object"; + class PositionInfo + { + position[]={18381.482,29.008087,15241.73}; + angles[]={0,2.9766364,6.2822089}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=706; + type="Land_Pallet_vertical_F"; + atlOffset=0.59323311; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item40 + class Item704 { - position[]={3653.8333,10.282446,13121.501}; - name="civ_car_1_1"; - type="Empty"; - angle=208.40829; + dataType="Object"; + class PositionInfo + { + position[]={18400.705,32.416298,15246.942}; + angles[]={6.2685208,1.406764,6.2778587}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=707; + type="Land_Pallet_vertical_F"; + atlOffset=4.6560974; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item41 + class Item705 { - position[]={3364.3098,4.8093276,13064.118}; - name="Gen_3"; - text="@STR_MAR_Bruce_Outfits"; - type="c_unknown"; - colorName="ColorGreen"; + dataType="Object"; + class PositionInfo + { + position[]={18384.232,29.007156,15242.278}; + angles[]={0,2.9767845,6.2822089}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=708; + type="Land_Pallet_vertical_F"; + atlOffset=0.59498787; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item42 + class Item706 { - position[]={16993.305,16.343332,12859.62}; - name="civ_car_2"; - type="Empty"; - angle=148.42909; + dataType="Object"; + class PositionInfo + { + position[]={18395.6,32.575996,15244.063}; + angles[]={6.2711854,3.0103414,6.2778587}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=709; + type="Land_Pallet_vertical_F"; + atlOffset=4.821661; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item43 + class Item707 { - position[]={14037.903,25.621716,18750.951}; - name="civ_car_3"; - type="Empty"; - angle=126.40627; + dataType="Object"; + class PositionInfo + { + position[]={18380.701,29.004154,15241.6}; + angles[]={0,2.9771307,6.2822089}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=710; + type="Land_Pallet_vertical_F"; + atlOffset=0.58853722; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item44 + class Item708 { - position[]={4187.0205,36.297176,13106.365}; - name="apple_1"; - text="@STR_MAR_Apple_Field"; - type="loc_Tree"; - colorName="Color3_FD_F"; + dataType="Object"; + class PositionInfo + { + position[]={18400.297,31.12565,15245.569}; + angles[]={0,1.5495496,6.2822089}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=711; + type="Land_Sack_F"; + atlOffset=3.0672722; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item45 + class Item709 { - position[]={25982.121,15.485652,20889.566}; - name="apple_2"; - text="@STR_MAR_Apple_Field"; - type="loc_Tree"; - colorName="Color3_FD_F"; + dataType="Object"; + class PositionInfo + { + position[]={18398.801,31.793032,15252.817}; + angles[]={0,1.4624748,6.2822089}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=712; + type="Weapon_arifle_Katiba_C_F"; + atlOffset=0.0040149689; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item46 + class Item710 { - position[]={4345.1636,33.150127,13982.917}; - name="peaches_2"; - text="@STR_MAR_Peaches_Field"; - type="loc_Tree"; - colorName="Color3_FD_F"; + dataType="Object"; + class PositionInfo + { + position[]={18394.59,31.141195,15244.61}; + angles[]={0,0.30787039,6.2822089}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=713; + type="Land_Portable_generator_F"; + atlOffset=3.1153374; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item47 + class Item711 { - position[]={10800.928,32.462917,13238.061}; - name="peaches_1"; - text="@STR_MAR_Peaches_Field"; - type="loc_Tree"; - colorName="Color3_FD_F"; + dataType="Object"; + class PositionInfo + { + position[]={18400.002,31.212328,15248.037}; + angles[]={0,0.8050971,6.2822089}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=714; + type="Land_MetalBarrel_F"; + atlOffset=3.1282597; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item48 + class Item712 { - position[]={3486.2664,7.7271852,12951.688}; - name="Gen_3_1"; - text="@STR_MAR_Market"; - type="c_unknown"; - colorName="ColorGreen"; + dataType="Object"; + class PositionInfo + { + position[]={18394.537,30.868372,15245.02}; + angles[]={0,0.25451565,6.2822089}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=715; + type="Land_ExtensionCord_F"; + atlOffset=3.1301689; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item49 + class Item713 { - position[]={10022.424,14.231085,12550.737}; - name="apple_3"; - text="@STR_MAR_Apple_Field"; - type="loc_Tree"; - colorName="Color3_FD_F"; + dataType="Object"; + class PositionInfo + { + position[]={18395.693,31.890093,15244.802}; + angles[]={0,1.4011788,6.2822089}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=716; + type="Land_Suitcase_F"; + atlOffset=0.00049972534; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item50 + class Item714 { - position[]={13618,16.567661,18105.947}; - name="apple_4"; - text="@STR_MAR_Apple_Field"; - type="loc_Tree"; - colorName="Color3_FD_F"; + dataType="Object"; + class PositionInfo + { + position[]={18399.344,31.836546,15253.213}; + angles[]={0,4.2769418,6.2822089}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=717; + type="Land_Ammobox_rounds_F"; + atlOffset=0.73516655; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item51 + class Item715 { - position[]={13120.37,39.285686,19673.133}; - name="peaches_3"; - text="@STR_MAR_Peaches_Field"; - type="loc_Tree"; - colorName="Color3_FD_F"; + dataType="Object"; + class PositionInfo + { + position[]={18398.936,31.890413,15251.421}; + angles[]={0,4.8610168,6.2822089}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=718; + type="Land_Ammobox_rounds_F"; + atlOffset=0.78863525; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item52 + class Item716 { - position[]={14418.972,18.719999,16244.317}; - name="air_serv_1"; - text="@STR_MAR_Air_Service"; - type="respawn_air"; - colorName="Color1_FD_F"; + dataType="Object"; + class PositionInfo + { + position[]={18398.723,31.892263,15251.495}; + angles[]={0,4.5267982,6.2822089}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=719; + type="Land_Ammobox_rounds_F"; + atlOffset=0.79027748; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item53 + class Item717 { - position[]={3269.3455,2.1793349,12967.998}; - name="Police HQ_1"; - text="@STR_MAR_Police_HQ"; - type="mil_box"; - colorName="Color4_FD_F"; + dataType="Object"; + class PositionInfo + { + position[]={18396.527,31.737423,15244.632}; + angles[]={0,3.0587504,6.2822089}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=720; + type="Land_TinContainer_F"; + atlOffset=0.63927841; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item54 + class Item718 { - position[]={4563.9795,262.76147,15414.913}; - name="7News_1"; - text="@STR_MAR_Channel_News"; - type="loc_Transmitter"; - colorName="ColorWhite"; + dataType="Object"; + class PositionInfo + { + position[]={18396.928,31.766956,15244.603}; + angles[]={0,3.495378,6.2822089}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=721; + type="Land_ButaneTorch_F"; + atlOffset=0.63723755; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item55 + class Item719 { - position[]={3669.2141,10.440954,13108.464}; - name="car1_1"; - text="@STR_MAR_Car_Shop"; - type="c_car"; - colorName="ColorWhite"; + dataType="Object"; + class PositionInfo + { + position[]={18396.334,31.739922,15245.101}; + angles[]={0,1.6019793,6.2822089}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=722; + type="Land_GasCooker_F"; + atlOffset=0.0011196136; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item56 + class Item720 { - position[]={14032.284,25.46665,18758.639}; - name="car1_2_1_1"; - text="@STR_MAR_Car_Shop"; - type="c_car"; - colorName="ColorWhite"; - angle=359.19183; + dataType="Object"; + class PositionInfo + { + position[]={18396.025,31.694921,15244.544}; + angles[]={0,3.08988,6.2822089}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false;"; + }; + id=723; + type="Land_GasCanister_F"; + atlOffset=0.64037895; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item57 + class Item721 { - position[]={3041.5544,2.0197022,12612.536}; - name="boat_2"; - text="@STR_MAR_Boat_Shop"; - type="c_ship"; - colorName="ColorWhite"; + dataType="Object"; + class PositionInfo + { + position[]={18383.055,31.100756,15258.516}; + angles[]={6.2818484,2.9764843,6.2818484}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this addAction[localize""STR_NOTF_captureGangHideout"",life_fnc_captureHideout,"""",0,false,false,"""",' playerSide isEqualTo civilian && !isNil {(group player) getVariable ""gang_owner""}'];"; + name="gang_flag_3"; + }; + id=724; + type="FlagPole_F"; + atlOffset=1.9073486e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item58 + class Item722 { - position[]={3638.6743,10.186527,13077.098}; - name="license_shop"; - text="@STR_MAR_DMV"; - type="c_unknown"; - colorName="ColorBlue"; - angle=-1.9030067; + dataType="Object"; + class PositionInfo + { + position[]={18382.309,28.164822,15242.259}; + angles[]={0,2.9759431,6.2822089}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_Shops_Gang"",life_fnc_virt_menu,""gang"",0,false,false,"""",' _b = (nearestObjects[getPosATL player,[""Land_u_Barracks_V2_F"",""Land_i_Barracks_V2_F""],25]) select 0; !isNil {_b getVariable ""gangOwner""} && {(_b getVariable ""gangOwner"") == (group player)} '];"; + }; + id=725; + type="Land_InfoStand_V1_F"; + atlOffset=0.53439522; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item59 + class Item723 { - position[]={3914.5459,16.270481,13591.836}; - name="dp_missions"; - text="@STR_MAR_Delivery_Missions"; - type="mil_box"; - colorName="ColorYellow"; + dataType="Object"; + class PositionInfo + { + position[]={4875.4688,19.179504,14399}; + angles[]={0.021328852,5.9153242,6.256525}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false;"; + }; + id=726; + type="Land_HBarrierBig_F"; + atlOffset=0.00070953369; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item60 + class Item724 { - position[]={3427.2068,2.5439744,12735.082}; - name="dive_shop"; - text="@STR_MAR_Diving_Shop"; - type="mil_box"; - colorName="ColorOrange"; - angle=-144.45552; + dataType="Object"; + class PositionInfo + { + position[]={4863.7534,19.516754,14397.836}; + angles[]={0.021328852,1.2063441,6.256525}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false;"; + }; + id=727; + type="Land_HBarrierBig_F"; + atlOffset=0.00069999695; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item61 + class Item725 { - position[]={3492.7932,19.49818,14145.842}; - name="Dealer_1"; - text="@STR_MAR_Drug_Dealer"; - type="mil_dot"; - colorName="ColorOrange"; + dataType="Object"; + class PositionInfo + { + position[]={4860.9766,19.368576,14404.419}; + angles[]={0.039979152,4.3307123,6.256525}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false;"; + }; + id=728; + type="Land_HBarrierBig_F"; + atlOffset=0.0013980865; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item62 + class Item726 { - position[]={3649.4426,7.00559,13384.339}; - name="jail_release"; - type="Empty"; - angle=190.78471; + dataType="Object"; + class PositionInfo + { + position[]={4857.8784,18.896141,14412.013}; + angles[]={0.09834861,4.3222008,6.2525291}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false;"; + }; + id=729; + type="Land_HBarrierBig_F"; + atlOffset=0.0064277649; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item63 + class Item727 { - position[]={8637.5557,180.94052,18280.637}; - name="dp_1_1"; - text="DP 3"; - type="mil_box"; - colorName="ColorYellow"; + dataType="Object"; + class PositionInfo + { + position[]={4859.1357,18.474552,14416.763}; + angles[]={0.042640556,5.6121373,6.2618566}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false;"; + }; + id=730; + type="Land_HBarrierBig_F"; + atlOffset=0.0013599396; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item64 + class Item728 { - position[]={14193.35,29.500216,18714.625}; - name="dp_1_2"; - text="DP 7"; - type="mil_box"; - colorName="ColorYellow"; + dataType="Object"; + class PositionInfo + { + position[]={4865.3027,18.178024,14421.52}; + angles[]={0.045302324,2.4695976,6.2685165}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false;"; + }; + id=731; + type="Land_HBarrierBig_F"; + atlOffset=0.0013961792; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item65 + class Item729 { - position[]={4657.2241,293.14618,21402.947}; - name="dp_1_3"; - text="DP 4"; - type="mil_box"; - colorName="ColorYellow"; + dataType="Object"; + class PositionInfo + { + position[]={4871.457,17.948776,14426.66}; + angles[]={0.049292382,5.6062317,6.2711854}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false;"; + }; + id=732; + type="Land_HBarrierBig_F"; + atlOffset=0.0015449524; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item66 + class Item730 { - position[]={25638.574,19.618872,21308.701}; - name="dp_1_4"; - text="DP 16"; - type="mil_box"; - colorName="ColorYellow"; + dataType="Object"; + class PositionInfo + { + position[]={4876.5728,17.655365,14432.574}; + angles[]={0.075853623,5.2739029,0.066567369}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false;"; + }; + id=733; + type="Land_HBarrierBig_F"; + atlOffset=0.0062351227; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item67 + class Item731 { - position[]={26975.738,20.035761,23262.752}; - name="dp_1_5"; - text="DP 17"; - type="mil_box"; - colorName="ColorYellow"; - angle=-140.186; + dataType="Object"; + class PositionInfo + { + position[]={4882.0313,17.404213,14437.022}; + angles[]={0.11811461,5.9153242,0.02399601}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false;"; + }; + id=734; + type="Land_HBarrierBig_F"; + atlOffset=0.0088500977; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item68 + class Item732 { - position[]={18065.555,22.422867,15194.638}; - name="dp_1_6"; - text="DP 19"; - type="mil_box"; - colorName="ColorYellow"; + dataType="Object"; + class PositionInfo + { + position[]={4889.3887,17.333885,14439.822}; + angles[]={0.059927464,5.8966904,0.031988446}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false;"; + }; + id=735; + type="Land_HBarrierBig_F"; + atlOffset=0.0028038025; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item69 + class Item733 { - position[]={16805.742,23.940353,12662.737}; - name="dp_1_7"; - text="DP 18"; - type="mil_box"; - colorName="ColorYellow"; - angle=165.897; + dataType="Object"; + class PositionInfo + { + position[]={4894.7056,17.387215,14438.727}; + angles[]={0.059928458,3.896672,6.2765174}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false;"; + }; + id=736; + type="Land_HBarrierBig_F"; + atlOffset=0.0022506714; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item70 + class Item734 { - position[]={18813.75,31.821898,16642.586}; - name="dp_1_8"; - text="DP 13"; - type="mil_box"; - colorName="ColorYellow"; - angle=43.241501; + dataType="Object"; + class PositionInfo + { + position[]={4899.9668,17.612698,14433.4}; + angles[]={0.10494683,0.99576718,6.1729674}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false;"; + }; + id=737; + type="Land_HBarrierBig_F"; + atlOffset=0.013959885; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item71 + class Item735 { - position[]={12310.653,24.094952,15700.001}; - name="dp_1_9"; - text="DP 12"; - type="mil_box"; - colorName="ColorYellow"; + dataType="Object"; + class PositionInfo + { + position[]={4903.498,17.794754,14426.582}; + angles[]={0.063912325,1.1987512,6.1729679}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false;"; + }; + id=738; + type="Land_HBarrierBig_F"; + atlOffset=0.0098114014; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item72 + class Item736 { - position[]={20946.139,43.178474,16965.078}; - name="dp_1_10"; - text="DP 14"; - type="mil_box"; - colorName="ColorYellow"; + dataType="Object"; + class PositionInfo + { + position[]={4906.0605,17.997406,14418.929}; + angles[]={0.042640556,4.3922,6.2485328}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false;"; + }; + id=739; + type="Land_HBarrierBig_F"; + atlOffset=0.0018310547; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item73 + class Item737 { - position[]={21382.348,21.960739,16411.709}; - name="dp_1_11"; - text="DP 15"; - type="mil_box"; - colorName="ColorYellow"; - angle=-61.743599; + dataType="Object"; + class PositionInfo + { + position[]={4907.457,18.127731,14414.358}; + angles[]={0.018663859,4.378078,6.2485328}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false;"; + }; + id=740; + type="Land_HBarrierBig_F"; + atlOffset=0.00095558167; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item74 + class Item738 { - position[]={19408.297,40.008781,13218.935}; - name="dp_1_12"; - text="DP 21"; - type="mil_box"; - colorName="ColorYellow"; + dataType="Object"; + class PositionInfo + { + position[]={4905.2637,18.291206,14410.015}; + angles[]={0.019996032,5.9153242,6.247201}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false;"; + }; + id=741; + type="Land_HBarrierBig_F"; + atlOffset=0.0010147095; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item75 + class Item739 { - position[]={19969.447,59.631565,11420.619}; - name="dp_1_13"; - text="DP 22"; - type="mil_box"; - colorName="ColorYellow"; - angle=-62.148312; + dataType="Object"; + class PositionInfo + { + position[]={4882.6533,18.907116,14401.831}; + angles[]={0.038647637,5.9153242,6.2618537}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false;"; + }; + id=742; + type="Land_HBarrierBig_F"; + atlOffset=0.0012245178; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item76 + class Item740 { - position[]={21654.904,16.099901,7537.6016}; - name="dp_1_14"; - text="DP 24"; - type="mil_box"; - colorName="ColorYellow"; - angle=144.67558; + dataType="Object"; + class PositionInfo + { + position[]={4889.7783,18.708233,14404.095}; + angles[]={0.027990974,2.8985658,6.272521}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false;"; + }; + id=743; + type="Land_HBarrierBig_F"; + atlOffset=0.00053405762; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item77 + class Item741 { - position[]={20488.617,32.754906,8805.3506}; - name="dp_1_15"; - text="DP 23"; - type="mil_box"; - colorName="ColorYellow"; - angle=-44.569088; + dataType="Object"; + class PositionInfo + { + position[]={4897.2983,18.528465,14406.671}; + angles[]={0.018663859,5.9153242,6.2698536}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false;"; + }; + id=744; + type="Land_HBarrierBig_F"; + atlOffset=0.00031471252; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item78 + class Item742 { - position[]={10393.356,123.94481,19064.67}; - name="dp_1_16"; - text="DP 5"; - type="mil_box"; - colorName="ColorYellow"; + dataType="Object"; + class PositionInfo + { + position[]={3748.6001,11.723812,13456.9}; + angles[]={0,3.1379449,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=745; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item79 + class Item743 { - position[]={12576.474,15.308428,14367.098}; - name="dp_1_17"; - text="DP 10"; - type="mil_box"; - colorName="ColorYellow"; + dataType="Object"; + class PositionInfo + { + position[]={4026.0801,25.916964,12589.9}; + angles[]={0,0.72484571,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=746; + type="Land_CashDesk_F"; + atlOffset=0.20866203; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item80 + class Item744 { - position[]={9190.6123,121.27175,15831.551}; - name="dp_1_19"; - text="DP 11"; - type="mil_box"; - colorName="ColorYellow"; + dataType="Object"; + class PositionInfo + { + position[]={5050.5601,17.171949,14437.9}; + angles[]={0,2.7419298,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=747; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item81 + class Item745 { - position[]={9025.9814,23.697897,11975.625}; - name="dp_1_20"; - text="DP 9"; - type="mil_box"; - colorName="ColorYellow"; - angle=86.109383; + dataType="Object"; + class PositionInfo + { + position[]={5764.4102,222.58003,20074.4}; + angles[]={0.0039967569,4.7577853,0.0039967569}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=748; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item82 + class Item746 { - position[]={5097.6162,50.34985,11267.257}; - name="dp_1_18"; - text="DP 8"; - type="mil_box"; - colorName="ColorYellow"; - angle=122.0182; + dataType="Object"; + class PositionInfo + { + position[]={6188.5601,27.529886,15095.7}; + angles[]={0,5.6139565,6.2823396}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=749; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item83 + class Item747 { - position[]={14563.34,45.28418,20771.504}; - name="dp_1_21"; - text="DP 6"; - type="mil_box"; - colorName="ColorYellow"; + dataType="Object"; + class PositionInfo + { + position[]={6797.5,41.768726,15579}; + angles[]={0,1.5981228,6.282495}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=750; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item84 + class Item748 { - position[]={4138.9399,52.056519,11766.21}; - name="dp_1_18_1"; - text="DP 1"; - type="mil_box"; - colorName="ColorYellow"; + dataType="Object"; + class PositionInfo + { + position[]={8493.6602,177.75172,18277.1}; + angles[]={0,6.0063586,0}; + }; + side="Empty"; + class Attributes + { + skill=0.60000002; + }; + id=751; + type="Land_CashDesk_F"; + atlOffset=0.3939209; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item85 + class Item749 { - position[]={4932.7715,77.810303,16146.252}; - name="dp_1_18_2"; - text="DP 2"; - type="mil_box"; - colorName="ColorYellow"; + dataType="Object"; + class PositionInfo + { + position[]={9028.8604,111.84645,15714.9}; + angles[]={0,2.9765368,6.2822089}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=752; + type="Land_CashDesk_F"; + atlOffset=0.18852997; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item86 + class Item750 { - position[]={20783.684,36.263039,6768.6069}; - name="dp_1_14_1"; - text="DP 25"; - type="mil_box"; - colorName="ColorYellow"; - angle=-25.325846; + dataType="Object"; + class PositionInfo + { + position[]={9208.0479,18.159578,12096.297}; + angles[]={0,2.6701443,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false;"; + }; + id=753; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item87 + class Item751 { - position[]={20884.641,2.7453954,14624.866}; - name="Dealer_1_3"; - text="@STR_MAR_Drug_Dealer"; - type="mil_dot"; - colorName="ColorOrange"; + dataType="Object"; + class PositionInfo + { + position[]={11847.1,12.690077,14145.1}; + angles[]={0,2.1387787,6.2823396}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init=" this allowDamage false;"; + }; + id=754; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item88 + class Item752 { - position[]={14327.465,18.488745,17427.523}; - name="Dealer_1_4"; - text="@STR_MAR_Drug_Dealer"; - type="mil_dot"; - colorName="ColorOrange"; - angle=-57.933056; + dataType="Object"; + class PositionInfo + { + position[]={12032.4,27.800705,15812.4}; + angles[]={0,3.0933692,6.2826972}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=755; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item89 + class Item753 { - position[]={25943.723,17.185471,21374.17}; - name="Kavala Freight Yard_1_1_1_1_1"; - text="@STR_MAR_Sofia_Freight_Yard"; - type="mil_dot"; - colorName="ColorUnknown"; - angle=-415.91299; + dataType="Object"; + class PositionInfo + { + position[]={14184.6,16.767673,16533.199}; + angles[]={0,0.7167927,6.2826972}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=756; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item90 + class Item754 { - position[]={25831.131,20.912157,21446.154}; - name="car1_1"; - text="@STR_MAR_Car_Shop"; - type="c_car"; - colorName="ColorWhite"; + dataType="Object"; + class PositionInfo + { + position[]={14239.9,18.606827,18315}; + angles[]={0,0.8363077,6.282495}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=757; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item91 + class Item755 { - position[]={14344.174,37.080429,18952.045}; - name="dimond_1"; - text="@STR_MAR_Diamond_Processing"; - type="mil_triangle"; - colorName="ColorBrown"; + dataType="Object"; + class PositionInfo + { + position[]={15319.7,16.732328,17594.301}; + angles[]={0,0.11341254,6.2826972}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=758; + type="Land_CashDesk_F"; + atlOffset=0.19405365; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item92 + class Item756 { - position[]={9186.0107,27.468599,13990.347}; - name="oil_2"; - text="@STR_MAR_Oil_Field"; - type="mil_triangle"; - colorName="ColorBrown"; + dataType="Object"; + class PositionInfo + { + position[]={15795.3,14.47997,17464.4}; + angles[]={0,0.53573406,6.2815661}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=759; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item93 + class Item757 { - position[]={9757.7891,231.07008,19445.281}; - name="oil_1"; - text="@STR_MAR_Oil_Field"; - type="mil_triangle"; - colorName="ColorBrown"; + dataType="Object"; + class PositionInfo + { + position[]={16756.801,12.748837,12500.2}; + angles[]={0,2.4673369,6.2823396}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=760; + type="Land_CashDesk_F"; + atlOffset=9.5367432e-007; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item94 + class Item758 { - position[]={11556.398,77.697838,7048.0737}; - name="weed_1"; - text="@STR_MAR_Weed_Field"; - type="mil_dot"; - colorName="Color1_FD_F"; + dataType="Object"; + class PositionInfo + { + position[]={16858.4,12.621861,15467.9}; + angles[]={0,1.1635952,6.282495}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=761; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item95 + class Item759 { - position[]={10390.828,27.723936,13200.983}; - name="Weed_p_1"; - text="@STR_MAR_Weed_Processing"; - type="mil_dot"; - colorName="Color1_FD_F"; + dataType="Object"; + class PositionInfo + { + position[]={17433.6,5.7356176,13938.2}; + angles[]={0.00084572798,1.5707213,6.2823396}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=762; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item96 + class Item760 { - position[]={25694.566,20.358076,21346.656}; - name="civ_spawn_4"; - type="Empty"; + dataType="Object"; + class PositionInfo + { + position[]={19956.199,60.225342,11433.3}; + angles[]={0,4.0529685,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=763; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item97 + class Item761 { - position[]={25821.314,21.358133,21446.559}; - name="civ_car_4"; - type="Empty"; - angle=-90.254326; + dataType="Object"; + class PositionInfo + { + position[]={20767.699,37.011307,16670}; + angles[]={0,5.3129215,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=764; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item98 + class Item762 { - position[]={22146.869,3.1667604,14481.148}; - name="jail_marker"; - type="Empty"; + dataType="Object"; + class PositionInfo + { + position[]={21233.5,23.430079,7094.3198}; + angles[]={0,2.3027875,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=765; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item99 + class Item763 { - position[]={3244.9341,2.1102631,12960.808}; - name="cop_car_1"; - type="Empty"; - angle=-181.36848; + dataType="Object"; + class PositionInfo + { + position[]={23362.4,13.042418,19812.4}; + angles[]={0,5.628582,6.2823396}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=766; + type="Land_CashDesk_F"; + atlOffset=0.12228584; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item100 + class Item764 { - position[]={13780.473,20.25041,18931.313}; - name="cop_car_2"; - type="Empty"; - angle=48.511902; + dataType="Object"; + class PositionInfo + { + position[]={25691.801,21.209721,21389.699}; + angles[]={0,5.6041474,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + }; + id=767; + type="Land_CashDesk_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=1; + }; }; - class Item101 + class Item765 { - position[]={16597.652,11,12724.459}; - name="cop_car_3"; - type="Empty"; - angle=47.457199; + dataType="Group"; + side="West"; + class Entities + { + items=19; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8573.1602,96.894371,25159.443}; + angles[]={0.18067649,4.9885001,6.1861625}; + }; + side="West"; + flags=6; + class Attributes + { + skill=0.60000002; + name="cop_1"; + description="Public Slot - Cop 1"; + isPlayable=1; + }; + id=769; + type="B_RangeMaster_F"; + }; + class Item1 + { + dataType="Object"; + class PositionInfo + { + position[]={8578.1602,96.640274,25157.795}; + angles[]={0.2531251,4.9803491,6.1115494}; + }; + side="West"; + flags=4; + class Attributes + { + skill=0.60000002; + name="cop_2"; + description="Public Slot - Cop 2"; + isPlayable=1; + }; + id=770; + type="B_RangeMaster_F"; + }; + class Item2 + { + dataType="Object"; + class PositionInfo + { + position[]={8568.1602,97.88295,25157.795}; + angles[]={0.15475833,4.8629413,6.1571898}; + }; + side="West"; + flags=4; + class Attributes + { + skill=0.60000002; + name="cop_3"; + description="Public Slot - Cop 3"; + isPlayable=1; + }; + id=771; + type="B_RangeMaster_F"; + }; + class Item3 + { + dataType="Object"; + class PositionInfo + { + position[]={8583.1602,96.375931,25155.059}; + angles[]={0.2531251,4.9803491,6.0793829}; + }; + side="West"; + flags=4; + class Attributes + { + skill=0.60000002; + name="cop_4"; + description="Public Slot - Cop 4"; + isPlayable=1; + }; + id=772; + type="B_RangeMaster_F"; + }; + class Item4 + { + dataType="Object"; + class PositionInfo + { + position[]={8563.1602,98.913971,25155.059}; + angles[]={0.11154399,4.9803491,6.1729679}; + }; + side="West"; + flags=4; + class Attributes + { + skill=0.60000002; + name="cop_5"; + description="WhiteListed - Cop 5"; + isPlayable=1; + }; + id=773; + type="B_RangeMaster_F"; + }; + class Item5 + { + dataType="Object"; + class PositionInfo + { + position[]={8588.6719,95.292046,25151.945}; + angles[]={0.015987216,4.9803491,6.0819488}; + }; + side="West"; + flags=4; + class Attributes + { + skill=0.60000002; + name="cop_6"; + description="WhiteListed - Cop 6"; + isPlayable=1; + }; + id=774; + type="B_RangeMaster_F"; + }; + class Item6 + { + dataType="Object"; + class PositionInfo + { + position[]={8559.8096,99.022697,25157.398}; + angles[]={0.11154399,4.9803491,6.1729679}; + }; + side="West"; + flags=4; + class Attributes + { + skill=0.60000002; + name="cop_7"; + description="WhiteListed - Cop 7"; + isPlayable=1; + }; + id=775; + type="B_RangeMaster_F"; + }; + class Item7 + { + dataType="Object"; + class PositionInfo + { + position[]={8575.9307,95.854919,25162.324}; + angles[]={0.2531251,4.9803491,6.1115494}; + }; + side="West"; + flags=4; + class Attributes + { + skill=0.60000002; + name="cop_8"; + description="WhiteListed - Cop 8"; + isPlayable=1; + }; + id=776; + type="B_RangeMaster_F"; + }; + class Item8 + { + dataType="Object"; + class PositionInfo + { + position[]={8588.0615,95.241844,25155.527}; + angles[]={0.22163936,4.9803491,6.0526972}; + }; + side="West"; + flags=4; + class Attributes + { + skill=0.60000002; + name="cop_9"; + description="WhiteListed - Cop 9"; + isPlayable=1; + }; + id=777; + type="B_RangeMaster_F"; + }; + class Item9 + { + dataType="Object"; + class PositionInfo + { + position[]={8578.0879,97.408798,25152.393}; + angles[]={0.071872659,4.9803491,6.1861625}; + }; + side="West"; + flags=4; + class Attributes + { + skill=0.60000002; + name="cop_10"; + description="WhiteListed - Cop 10"; + isPlayable=1; + }; + id=778; + type="B_RangeMaster_F"; + }; + class Item10 + { + dataType="Object"; + class PositionInfo + { + position[]={8568.3994,97.029327,25162.65}; + angles[]={6.1914506,4.9803491,6.1310449}; + }; + side="West"; + flags=4; + class Attributes + { + skill=0.60000002; + name="cop_11"; + description="WhiteListed - Cop 11"; + isPlayable=1; + }; + id=779; + type="B_RangeMaster_F"; + }; + class Item11 + { + dataType="Object"; + class PositionInfo + { + position[]={8582.2803,96.694107,25151.414}; + angles[]={0.071872659,4.9803491,6.0263247}; + }; + side="West"; + flags=4; + class Attributes + { + skill=0.60000002; + name="cop_12"; + description="WhiteListed - Cop 12"; + isPlayable=1; + }; + id=780; + type="B_RangeMaster_F"; + }; + class Item12 + { + dataType="Object"; + class PositionInfo + { + position[]={8562.9443,98.364365,25159.313}; + angles[]={0.15475833,4.9803491,6.1297359}; + }; + side="West"; + flags=4; + class Attributes + { + skill=0.60000002; + name="cop_13"; + description="WhiteListed - Cop 13"; + isPlayable=1; + }; + id=781; + type="B_RangeMaster_F"; + atlOffset=7.6293945e-006; + }; + class Item13 + { + dataType="Object"; + class PositionInfo + { + position[]={8586.7178,95.741585,25148.891}; + angles[]={0.016004669,5.1804862,6.0793829}; + }; + side="West"; + flags=4; + class Attributes + { + skill=0.60000002; + name="cop_14"; + description="WhiteListed - Cop 14"; + isPlayable=1; + }; + id=782; + type="B_RangeMaster_F"; + atlOffset=7.6293945e-006; + }; + class Item14 + { + dataType="Object"; + class PositionInfo + { + position[]={8564.2061,97.669922,25162.691}; + angles[]={6.2431998,4.9803491,6.1297359}; + }; + side="West"; + flags=4; + class Attributes + { + skill=0.60000002; + name="cop_15"; + description="WhiteListed - Cop 15"; + isPlayable=1; + }; + id=783; + type="B_RangeMaster_F"; + }; + class Item15 + { + dataType="Object"; + class PositionInfo + { + position[]={8593.1602,94.469978,25145.607}; + angles[]={0.011990411,4.9803491,6.0819488}; + }; + side="West"; + flags=4; + class Attributes + { + skill=0.60000002; + name="cop_16"; + description="WhiteListed - Cop 16"; + isPlayable=1; + }; + id=784; + type="B_RangeMaster_F"; + atlOffset=7.6293945e-006; + }; + class Item16 + { + dataType="Object"; + class PositionInfo + { + position[]={8582.7285,95.76548,25157.764}; + angles[]={0.2531251,4.9803491,6.0793829}; + }; + side="West"; + flags=4; + class Attributes + { + skill=0.60000002; + name="cop_17"; + description="WhiteListed - Cop 17"; + isPlayable=1; + }; + id=785; + type="B_RangeMaster_F"; + }; + class Item17 + { + dataType="Object"; + class PositionInfo + { + position[]={8577.4766,96.239716,25159.801}; + angles[]={0.2531251,4.9803491,6.1115494}; + }; + side="West"; + flags=4; + class Attributes + { + skill=0.60000002; + name="cop_18"; + description="WhiteListed - Cop 18"; + isPlayable=1; + }; + id=786; + type="B_RangeMaster_F"; + }; + class Item18 + { + dataType="Object"; + class PositionInfo + { + position[]={8567.707,97.554123,25160.207}; + angles[]={0.18067649,4.9803491,6.1310449}; + }; + side="West"; + flags=4; + class Attributes + { + skill=0.60000002; + name="cop_19"; + description="WhiteListed - Cop 19"; + isPlayable=1; + }; + id=787; + type="B_RangeMaster_F"; + }; + }; + class Attributes + { + }; + id=768; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Police"; + }; + }; + }; + nAttributes=1; + }; }; - class Item102 + class Item766 { - position[]={14166.416,19.370966,16293.32}; - name="cop_air_2"; - type="Empty"; - angle=131.20648; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8446.5459,83.457657,25236.496}; + angles[]={6.2818937,0.29628709,0.24560273}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_1"; + description="Civilian 1"; + isPlayable=1; + }; + id=789; + type="C_man_1"; + atlOffset=7.6293945e-006; + }; + }; + class Attributes + { + }; + id=788; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 01"; + }; + }; + }; + nAttributes=1; + }; }; - class Item103 + class Item767 { - position[]={3194.3025,2,12897.396}; - name="cop_air_1"; - type="Empty"; - angle=-174.51483; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8448.6963,83.995567,25235.621}; + angles[]={6.2818937,0.51036918,0.24560273}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_2"; + description="Civilian 2"; + isPlayable=1; + }; + id=791; + type="C_man_1"; + atlOffset=7.6293945e-006; + }; + }; + class Attributes + { + }; + id=790; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 02"; + }; + }; + }; + nAttributes=1; + }; }; - class Item104 + class Item768 { - position[]={14026.765,26.91745,18705.039}; - name="license_shop_1"; - text="@STR_MAR_DMV"; - type="c_unknown"; - colorName="ColorBlue"; - angle=-1.9030067; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8450.8818,84.541428,25234.168}; + angles[]={6.2818937,0.29626966,0.24560273}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_3"; + description="Civilian 3"; + isPlayable=1; + }; + id=793; + type="C_man_1"; + atlOffset=7.6293945e-006; + }; + }; + class Attributes + { + }; + id=792; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 03"; + }; + }; + }; + nAttributes=1; + }; }; - class Item105 + class Item769 { - position[]={14696.649,17.91,16745.135}; - name="civ_air_1"; - type="Empty"; - angle=-51.978672; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8452.584,84.954285,25232.861}; + angles[]={6.2818413,0.51036918,0.10758209}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_4"; + description="Civilian 4"; + isPlayable=1; + }; + id=795; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=794; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 04"; + }; + }; + }; + nAttributes=1; + }; }; - class Item106 + class Item770 { - position[]={14685.702,17.91,16733.902}; - name="civ_air_1_2"; - type="Empty"; - angle=-40.436687; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8455.1162,85.225624,25231.24}; + angles[]={6.2818413,0.29626966,0.10758209}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_5"; + description="Civilian 5"; + isPlayable=1; + }; + id=797; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=796; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 05"; + }; + }; + }; + nAttributes=1; + }; }; - class Item107 + class Item771 { - position[]={26847.824,24.010233,24593.961}; - name="airshop_1"; - text="@STR_MAR_Air_Shop"; - type="mil_dot"; - colorName="Color1_FD_F"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8444.8975,83.40358,25234.66}; + angles[]={0.12074188,0.29628709,0.1780934}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_6"; + description="Civilian 6"; + isPlayable=1; + }; + id=799; + type="C_man_1"; + atlOffset=7.6293945e-006; + }; + }; + class Attributes + { + }; + id=798; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 06"; + }; + }; + }; + nAttributes=1; + }; }; - class Item108 + class Item772 { - position[]={26868.67,24.432938,24567.48}; - name="civ_air_2"; - type="Empty"; - angle=-51.978699; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8447.9111,83.974861,25233.176}; + angles[]={0.12074188,0.51036918,0.12730432}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_7"; + description="Civilian 7"; + isPlayable=1; + }; + id=801; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=800; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 07"; + }; + }; + }; + nAttributes=1; + }; }; - class Item109 + class Item773 { - position[]={26855.113,24.246786,24554.789}; - name="civ_air_2_2"; - type="Empty"; - angle=-40.436699; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8450.0967,84.430763,25231.723}; + angles[]={0.12074188,0.29626966,0.12730432}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_8"; + description="Civilian 8"; + isPlayable=1; + }; + id=803; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=802; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 08"; + }; + }; + }; + nAttributes=1; + }; }; - class Item110 + class Item774 { - position[]={3764.394,34.275726,12364.51}; - name="civ_truck_1"; - type="Empty"; - angle=131.83951; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8452.1465,84.87133,25230.254}; + angles[]={0.12074188,0.51036918,0.12730432}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_9"; + description="Civilian 9"; + isPlayable=1; + }; + id=805; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=804; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 09"; + }; + }; + }; + nAttributes=1; + }; }; - class Item111 + class Item775 { - position[]={28307.711,14.887112,25769.699}; - name="dp_1_15_1"; - text="DP 20"; - type="mil_box"; - colorName="ColorYellow"; - angle=-89.313202; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8454.3311,84.861992,25228.797}; + angles[]={6.0653682,0.29626966,0.10758209}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_10"; + description="Civilian 10"; + isPlayable=1; + }; + id=807; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=806; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 10"; + }; + }; + }; + nAttributes=1; + }; }; - class Item112 + class Item776 { - position[]={3155.5701,-0.020821352,12871.082}; - name="cop_ship_1"; - type="Empty"; - angle=254.11; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8444.1318,83.448647,25233.152}; + angles[]={0.12074188,0.29628709,0.1780934}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_11"; + description="Civilian 11"; + isPlayable=1; + }; + id=809; + type="C_man_1"; + atlOffset=7.6293945e-006; + }; + }; + class Attributes + { + }; + id=808; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 11"; + }; + }; + }; + nAttributes=1; + }; }; - class Item113 + class Item777 { - position[]={3002.437,0.019021351,12651.198}; - name="civ_ship_1"; - text="@STR_MAR_Boat_Spawn"; - type="loc_Quay"; - colorName="ColorOrange"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8447.1465,84.059853,25231.668}; + angles[]={0.12074188,0.51036918,0.12730432}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_12"; + description="Civilian 12"; + isPlayable=1; + }; + id=811; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=810; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 12"; + }; + }; + }; + nAttributes=1; + }; }; - class Item114 + class Item778 { - position[]={9085.4102,20.793713,12038.007}; - name="Gen_3_1_1"; - text="@STR_MAR_Market"; - type="c_unknown"; - colorName="ColorGreen"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8449.3311,84.515862,25230.215}; + angles[]={0.12074188,0.29626966,0.12730432}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_13"; + description="Civilian 13"; + isPlayable=1; + }; + id=813; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=812; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 13"; + }; + }; + }; + nAttributes=1; + }; }; - class Item115 + class Item779 { - position[]={8956.4238,27.330736,11999.08}; - name="Gen_3_3"; - text="@STR_MAR_Bruce_Outfits"; - type="c_unknown"; - colorName="ColorGreen"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8451.3799,84.684662,25228.74}; + angles[]={6.1967392,0.51036918,0.12730432}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_14"; + description="Civilian 14"; + isPlayable=1; + }; + id=815; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=814; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 14"; + }; + }; + }; + nAttributes=1; + }; }; - class Item116 + class Item780 { - position[]={25665.254,19.308283,21296.332}; - name="Gen_3_4"; - text="@STR_MAR_Bruce_Outfits"; - type="c_unknown"; - colorName="ColorGreen"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8453.5654,84.673721,25227.289}; + angles[]={6.1967392,0.29626966,6.2565165}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_15"; + description="Civilian 15"; + isPlayable=1; + }; + id=817; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=816; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 15"; + }; + }; + }; + nAttributes=1; + }; }; - class Item117 + class Item781 { - position[]={25573.17,19.70323,21312.16}; - name="Gen_3_1_1_1"; - text="@STR_MAR_Market"; - type="c_unknown"; - colorName="ColorGreen"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8442.8584,83.393929,25231.773}; + angles[]={0.13779375,0.29628709,0.16125098}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_16"; + description="Civilian 16"; + isPlayable=1; + }; + id=819; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=818; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 16"; + }; + }; + }; + nAttributes=1; + }; }; - class Item118 + class Item782 { - position[]={14041.689,24.368345,18787.1}; - name="Gen_3_1_1_2"; - text="@STR_MAR_Market"; - type="c_unknown"; - colorName="ColorGreen"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8445.8701,84.064232,25230.285}; + angles[]={0.12074188,0.51036918,0.12730432}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_17"; + description="Civilian 17"; + isPlayable=1; + }; + id=821; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=820; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 17"; + }; + }; + }; + nAttributes=1; + }; }; - class Item119 + class Item783 { - position[]={14074.721,23.343645,18559.061}; - name="Gen_3_4_1"; - text="@STR_MAR_Bruce_Outfits"; - type="c_unknown"; - colorName="ColorGreen"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8448.0557,84.26693,25228.83}; + angles[]={6.1967392,0.29626966,0.12730432}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_18"; + description="Civilian 18"; + isPlayable=1; + }; + id=823; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=822; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 18"; + }; + }; + }; + nAttributes=1; + }; }; - class Item120 + class Item784 { - position[]={9530.3555,127.03247,15077.41}; - name="copper_mine_1"; - text="@STR_MAR_Copper_Processing"; - type="mil_box"; - colorName="ColorBrown"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8450.1035,84.401962,25227.363}; + angles[]={6.1967392,0.51036918,0.12730432}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_19"; + description="Civilian 19"; + isPlayable=1; + }; + id=825; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=824; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 19"; + }; + }; + }; + nAttributes=1; + }; }; - class Item121 + class Item785 { - position[]={25801.424,20.775288,21409.266}; - name="license_shop_2"; - text="@STR_MAR_DMV"; - type="c_unknown"; - colorName="ColorBlue"; - angle=-1.9030067; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8452.29,84.555489,25225.906}; + angles[]={6.1967392,0.29626966,0.12730432}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_20"; + description="Civilian 20"; + isPlayable=1; + }; + id=827; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=826; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 20"; + }; + }; + }; + nAttributes=1; + }; }; - class Item122 + class Item786 { - position[]={16813.541,22.862633,12625.873}; - name="Gen_2"; - text="@STR_MAR_General_Store"; - type="c_unknown"; - colorName="ColorGreen"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8441.9443,83.425323,25230.477}; + angles[]={0.13779375,0.29628709,0.16125098}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_21"; + description="Civilian 21"; + isPlayable=1; + }; + id=829; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=828; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 21"; + }; + }; + }; + nAttributes=1; + }; }; - class Item123 + class Item787 { - position[]={25779.512,20.229164,21352.607}; - name="Gen_2_1"; - text="@STR_MAR_General_Store"; - type="c_unknown"; - colorName="ColorGreen"; - angle=-0.67126209; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8444.9561,84.091431,25228.99}; + angles[]={0.11021754,0.51036918,0.16125098}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_22"; + description="Civilian 22"; + isPlayable=1; + }; + id=831; + type="C_man_1"; + atlOffset=7.6293945e-006; + }; + }; + class Attributes + { + }; + id=830; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 22"; + }; + }; + }; + nAttributes=1; + }; }; - class Item124 + class Item788 { - position[]={16995.186,15.885057,12661.559}; - name="license_shop_2_1"; - text="@STR_MAR_DMV"; - type="c_unknown"; - colorName="ColorBlue"; - angle=30.320122; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8447.1416,84.11113,25227.535}; + angles[]={0.11021754,0.29626966,6.2139654}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_23"; + description="Civilian 23"; + isPlayable=1; + }; + id=833; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=832; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 23"; + }; + }; + }; + nAttributes=1; + }; }; - class Item125 + class Item789 { - position[]={5188.1885,217.79607,20872.66}; - name="cocaine_1"; - text="@STR_MAR_Cocaine_Field"; - type="mil_dot"; - colorName="Color1_FD_F"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8449.1904,84.172775,25226.066}; + angles[]={6.1967392,0.51036918,0.12730432}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_24"; + description="Civilian 24"; + isPlayable=1; + }; + id=835; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=834; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 24"; + }; + }; + }; + nAttributes=1; + }; }; - class Item126 + class Item790 { - position[]={5190.8076,219.8526,20877.027}; - name="coke_area"; - markerType="ELLIPSE"; - type="Empty"; - colorName="ColorWhite"; - a=100; - b=100; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8451.376,84.3265,25224.613}; + angles[]={6.1967392,0.29626966,0.12730432}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_25"; + description="Civilian 25"; + isPlayable=1; + }; + id=837; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=836; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 25"; + }; + }; + }; + nAttributes=1; + }; }; - class Item127 + class Item791 { - position[]={12582.778,34.149235,16394.836}; - name="oil_trader"; - text="@STR_MAR_Oil_Trader"; - type="b_unknown"; - colorName="ColorOrange"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8441.1357,83.409523,25229.539}; + angles[]={0.11021754,0.29628709,0.16125098}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_26"; + description="Civilian 26"; + isPlayable=1; + }; + id=839; + type="C_man_1"; + atlOffset=7.6293945e-006; + }; + }; + class Attributes + { + }; + id=838; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 26"; + }; + }; + }; + nAttributes=1; + }; }; - class Item128 + class Item792 { - position[]={20695.104,4.5465231,19467.057}; - name="oil_trader_1"; //uwaga czy to działa ,Attention it is correct? salt or oil trader: name was oil, text was salt trader, the down code all traders in oil name ??? - text="@STR_MAR_Salt_Trader"; - type="b_unknown"; - colorName="ColorOrange"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8444.1494,84.063774,25228.055}; + angles[]={0.11021754,0.51036918,0.16125098}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_27"; + description="Civilian 27"; + isPlayable=1; + }; + id=841; + type="C_man_1"; + atlOffset=7.6293945e-006; + }; + }; + class Attributes + { + }; + id=840; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 27"; + }; + }; + }; + nAttributes=1; + }; }; - class Item129 + class Item793 { - position[]={17869.166,2.40886,18199.828}; - name="oil_trader_2"; - text="@STR_MAR_Diamond_Trader"; - type="b_unknown"; - colorName="ColorOrange"; - angle=0.26148701; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8446.335,84.270393,25226.602}; + angles[]={0.11021754,0.29626966,6.2139654}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_28"; + description="Civilian 28"; + isPlayable=1; + }; + id=843; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=842; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 28"; + }; + }; + }; + nAttributes=1; + }; }; - class Item130 + class Item794 { - position[]={4928.9746,16.186176,14576.784}; - name="oil_trader_3"; - text="@STR_MAR_Glass_Trader"; - type="b_unknown"; - colorName="ColorOrange"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8448.3838,84.291313,25225.129}; + angles[]={0.11021754,0.51036918,6.2139654}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_29"; + description="Civilian 29"; + isPlayable=1; + }; + id=845; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=844; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 29"; + }; + }; + }; + nAttributes=1; + }; }; - class Item131 + class Item795 { - position[]={5327.8848,22.266685,14476.616}; - name="oil_trader_4"; - text="@STR_MAR_Iron_Copper Trader"; - type="b_unknown"; - colorName="ColorOrange"; - angle=-0.60203898; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8450.5693,84.300629,25223.676}; + angles[]={0.11021754,0.29626966,6.2139654}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_30"; + description="Civilian 30"; + isPlayable=1; + }; + id=847; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=846; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 30"; + }; + }; + }; + nAttributes=1; + }; }; - class Item132 + class Item796 { - position[]={5379.1855,77.380905,17922.482}; - name="dimond_1_1"; - text="@STR_MAR_Sand_Processing"; - type="mil_triangle"; - colorName="ColorBrown"; - angle=-80.305901; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8440.2686,83.40715,25228.285}; + angles[]={0.11021754,0.29628709,0.16125098}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_31"; + description="Civilian 31"; + isPlayable=1; + }; + id=849; + type="C_man_1"; + atlOffset=7.6293945e-006; + }; + }; + class Attributes + { + }; + id=848; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 31"; + }; + }; + }; + nAttributes=1; + }; }; - class Item133 + class Item797 { - position[]={18157.965,26.492321,12840.584}; - name="civ_truck_shop1_1"; - text="@STR_MAR_Truck_Shop"; - type="c_car"; - colorName="ColorBlue"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8443.2803,84.061646,25226.797}; + angles[]={0.11021754,0.51036918,0.16125098}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_32"; + description="Civilian 32"; + isPlayable=1; + }; + id=851; + type="C_man_1"; + atlOffset=7.6293945e-006; + }; + }; + class Attributes + { + }; + id=850; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 32"; + }; + }; + }; + nAttributes=1; + }; }; - class Item134 + class Item798 { - position[]={18145.107,26.476664,12855.548}; - name="civ_truck_2"; - type="Empty"; - angle=-0.16382165; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8445.4658,84.46991,25225.344}; + angles[]={0.11021754,0.29626966,6.2139654}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_33"; + description="Civilian 33"; + isPlayable=1; + }; + id=853; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=852; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 33"; + }; + }; + }; + nAttributes=1; + }; }; - class Item135 + class Item799 { - position[]={18149.994,26.508713,12855.938}; - name="civ_truck_2_1"; - type="Empty"; - angle=-0.16382165; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8447.5146,84.490364,25223.875}; + angles[]={0.11021754,0.51036918,6.2139654}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_34"; + description="Civilian 34"; + isPlayable=1; + }; + id=855; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=854; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 34"; + }; + }; + }; + nAttributes=1; + }; }; - class Item136 + class Item800 { - position[]={12290.406,123.8956,8899.7314}; - name="Rebelop_1"; - text="@STR_MAR_Rebel_Outpost"; - type="mil_triangle"; - colorName="Color1_FD_F"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8449.7002,84.496979,25222.418}; + angles[]={0.086446159,0.29626966,6.2139654}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_35"; + description="Civilian 35"; + isPlayable=1; + }; + id=857; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=856; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 35"; + }; + }; + }; + nAttributes=1; + }; }; - class Item137 + class Item801 { - position[]={20081.033,100.96766,6737.1904}; - name="Rebelop_2"; - text="@STR_MAR_Rebel_Outpost"; - type="mil_triangle"; - colorName="Color1_FD_F"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8439.1416,83.605179,25226.352}; + angles[]={0.18968238,0.29628709,0.081157811}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_36"; + description="Civilian 36"; + isPlayable=1; + }; + id=859; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=858; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 36"; + }; + }; + }; + nAttributes=1; + }; }; - class Item138 + class Item802 { - position[]={9326.4922,14.638341,11912.618}; - name="gun_store_1"; - text="@STR_MAR_Gun_Store"; - type="loc_Bunker"; - colorName="ColorRed"; - angle=7.2259879; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8442.1553,84.135712,25224.863}; + angles[]={0.18968238,0.51036918,0.081157811}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_37"; + description="Civilian 37"; + isPlayable=1; + }; + id=861; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=860; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 37"; + }; + }; + }; + nAttributes=1; + }; }; - class Item139 + class Item803 { - position[]={16340.104,24.965635,17266.721}; - name="gun_store_1_1"; - text="@STR_MAR_Gun_Store"; - type="loc_Bunker"; - colorName="ColorRed"; - angle=62.195702; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8444.3408,84.608986,25223.41}; + angles[]={0.11021754,0.29626966,0.16125098}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_38"; + description="Civilian 38"; + isPlayable=1; + }; + id=863; + type="C_man_1"; + atlOffset=7.6293945e-006; + }; + }; + class Attributes + { + }; + id=862; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 38"; + }; + }; + }; + nAttributes=1; + }; }; - class Item140 + class Item804 { - position[]={19878.146,30.042439,17011.926}; - name="heroin_1"; - text="@STR_MAR_Heroin_Field"; - type="hd_dot"; - colorName="ColorRed"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8446.3896,84.767769,25221.941}; + angles[]={0.086446159,0.51036918,6.2139654}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_39"; + description="Civilian 39"; + isPlayable=1; + }; + id=865; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=864; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 39"; + }; + }; + }; + nAttributes=1; + }; }; - class Item141 + class Item805 { - position[]={19877.701,29.819229,17004.623}; - name="heroin_area"; - markerType="ELLIPSE"; - type="Empty"; - colorName="ColorWhite"; - a=100; - b=100; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8448.5752,84.7425,25220.484}; + angles[]={0.086446159,0.29626966,6.2139654}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_40"; + description="Civilian 40"; + isPlayable=1; + }; + id=867; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=866; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 40"; + }; + }; + }; + nAttributes=1; + }; }; - class Item142 + class Item806 { - position[]={23644.953,51.044296,21802.297}; - name="heroin_p"; - text="@STR_MAR_Heroin_Processing"; - type="mil_dot"; - colorName="ColorRed"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8437.5088,83.884026,25224.207}; + angles[]={0.18968238,0.51036918,0.081157811}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_41"; + description="Civilian 41"; + isPlayable=1; + }; + id=869; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=868; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 41"; + }; + }; + }; + nAttributes=1; + }; }; - class Item143 + class Item807 { - position[]={3744.7651,12.664954,13272.564}; - name="car_g_1"; - type="Empty"; - angle=51.99506; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8440.1025,84.355133,25222.852}; + angles[]={0.18968238,0.51036918,0.081157811}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_42"; + description="Civilian 42"; + isPlayable=1; + }; + id=871; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=870; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 42"; + }; + }; + }; + nAttributes=1; + }; }; - class Item144 + class Item808 { - position[]={3739.0391,12.721933,13268.451}; - name="civ_gar_1"; - text="@STR_MAR_Garage"; - type="o_service"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8442.9678,84.917328,25221.34}; + angles[]={0.22036527,0.51036918,0.081157811}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_43"; + description="Civilian 43"; + isPlayable=1; + }; + id=873; + type="C_man_1"; + atlOffset=7.6293945e-006; + }; + }; + class Attributes + { + }; + id=872; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 43"; + }; + }; + }; + nAttributes=1; + }; }; - class Item145 + class Item809 { - position[]={14266.07,19.374266,16294.293}; - name="air_g_1"; - type="Empty"; - angle=153.94191; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8445.0967,85.348373,25220.063}; + angles[]={0.22036527,0.51036918,6.0793829}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_44"; + description="Civilian 44"; + isPlayable=1; + }; + id=875; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=874; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 44"; + }; + }; + }; + nAttributes=1; + }; }; - class Item146 + class Item810 { - position[]={14259,19.362194,16303.427}; - name="civ_gar_1_1"; - text="@STR_MAR_Garage"; - type="o_service"; - angle=108.01333; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8447.5361,85.17308,25218.594}; + angles[]={0.22036527,0.51036918,6.0793829}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_45"; + description="Civilian 45"; + isPlayable=1; + }; + id=877; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=876; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 45"; + }; + }; + }; + nAttributes=1; + }; }; - class Item147 + class Item811 { - position[]={25716.904,18.13162,21271.055}; - name="car_g_2"; - type="Empty"; - angle=220.388; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8436.2666,83.967125,25222.449}; + angles[]={0.32295573,0.51036918,0.21401228}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_46"; + description="Civilian 46"; + isPlayable=1; + }; + id=879; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=878; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 46"; + }; + }; + }; + nAttributes=1; + }; }; - class Item148 + class Item812 { - position[]={25723.572,18.269375,21278.281}; - name="civ_gar_1_2"; - text="@STR_MAR_Garage"; - type="o_service"; - angle=168.39328; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8438.8604,84.648697,25221.094}; + angles[]={0.32295573,0.51036918,6.2538638}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_47"; + description="Civilian 47"; + isPlayable=1; + }; + id=881; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=880; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 47"; + }; + }; + }; + nAttributes=1; + }; }; - class Item149 + class Item813 { - position[]={14476.976,19.342848,17749.266}; - name="car_g_3"; - type="Empty"; - angle=511.55499; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8441.7256,85.208801,25219.586}; + angles[]={0.22036527,0.51036918,0.081157811}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_48"; + description="Civilian 48"; + isPlayable=1; + }; + id=883; + type="C_man_1"; + atlOffset=7.6293945e-006; + }; + }; + class Attributes + { + }; + id=882; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 48"; + }; + }; + }; + nAttributes=1; + }; }; - class Item150 + class Item814 { - position[]={14473.113,19.164511,17754.678}; - name="civ_gar_1_3"; - text="@STR_MAR_Garage"; - type="o_service"; - angle=136.74835; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8443.8535,85.668137,25218.309}; + angles[]={0.22036527,0.51036918,0.081157811}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_49"; + description="Civilian 49"; + isPlayable=1; + }; + id=885; + type="C_man_1"; + atlOffset=7.6293945e-006; + }; + }; + class Attributes + { + }; + id=884; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 49"; + }; + }; + }; + nAttributes=1; + }; }; - class Item151 + class Item815 { - position[]={12682.691,1.9715809,14214.604}; - name="boat_2_1"; - text="@STR_MAR_Boat_Shop"; - type="c_ship"; - colorName="ColorWhite"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8446.2939,85.823586,25216.836}; + angles[]={0.22036527,0.51036918,6.0793829}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_50"; + description="Civilian 50"; + isPlayable=1; + }; + id=887; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=886; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 50"; + }; + }; + }; + nAttributes=1; + }; }; - class Item152 + class Item816 { - position[]={12697.163,-0.013685904,14197.867}; - name="civ_ship_2"; - text="@STR_MAR_Boat_Spawn"; - type="loc_Quay"; - colorName="ColorOrange"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8435.0771,84.197052,25220.99}; + angles[]={0.32295573,0.51036918,0.21401228}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_51"; + description="Civilian 51"; + isPlayable=1; + }; + id=889; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=888; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 51"; + }; + }; + }; + nAttributes=1; + }; }; - class Item153 + class Item817 { - position[]={17539.715,3.019192,18943.441}; - name="boat_2_1_1"; - text="@STR_MAR_Boat_Shop"; - type="c_ship"; - colorName="ColorWhite"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8437.6709,85.171371,25219.637}; + angles[]={0.32295573,0.51036918,6.2538638}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_52"; + description="Civilian 52"; + isPlayable=1; + }; + id=891; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=890; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 52"; + }; + }; + }; + nAttributes=1; + }; }; - class Item154 + class Item818 { - position[]={17565.404,0,18927.883}; - name="civ_ship_3"; - text="@STR_MAR_Boat_Spawn"; - type="loc_Quay"; - colorName="ColorOrange"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8440.5361,85.592865,25218.125}; + angles[]={0.32295573,0.51036918,6.2538638}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_53"; + description="Civilian 53"; + isPlayable=1; + }; + id=893; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=892; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 53"; + }; + }; + }; + nAttributes=1; + }; }; - class Item155 + class Item819 { - position[]={17017.518,15.925221,12628.14}; - name="Gen_3_1_1_3"; - text="@STR_MAR_Market"; - type="c_unknown"; - colorName="ColorGreen"; - angle=127.88971; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8442.667,85.958107,25216.848}; + angles[]={0.32295573,0.51036918,6.2538638}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_54"; + description="Civilian 54"; + isPlayable=1; + }; + id=895; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=894; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 54"; + }; + }; + }; + nAttributes=1; + }; }; - class Item156 + class Item820 { - position[]={13946.49,22.888865,18664.123}; - name="Gen_4"; - text="@STR_MAR_General_Store"; - type="c_unknown"; - colorName="ColorGreen"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8445.1064,86.39547,25215.379}; + angles[]={0.22036527,0.51036918,6.0793829}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_55"; + description="Civilian 55"; + isPlayable=1; + }; + id=897; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=896; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 55"; + }; + }; + }; + nAttributes=1; + }; }; - class Item157 + class Item821 { - position[]={12288.481,123.74883,8919.6299}; - name="reb_v_2"; - type="Empty"; - angle=-74.833801; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8444.0127,86.991837,25214}; + angles[]={0.42229986,0.51036918,6.2538638}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_56"; + description="Civilian 56"; + isPlayable=1; + }; + id=899; + type="C_man_1"; + atlOffset=7.6293945e-006; + }; + }; + class Attributes + { + }; + id=898; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 56"; + }; + }; + }; + nAttributes=1; + }; }; - class Item158 + class Item822 { - position[]={16018.33,13.650147,16953.154}; - name="fed_reserve"; - text="@STR_MAR_Federal_Reserve"; - type="mil_box"; - colorName="Color4_FD_F"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8441.3779,86.487373,25215.379}; + angles[]={0.32295573,0.51036918,6.2538638}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_57"; + description="Civilian 57"; + isPlayable=1; + }; + id=901; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=900; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 57"; + }; + }; + }; + nAttributes=1; + }; }; - class Item159 + class Item823 { - position[]={23538.549,13.160051,19945.574}; - name="cop_spawn_5"; - text="@STR_MAR_Highway_Patrol"; - type="mil_box"; - colorName="ColorBLUFOR"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8439.4346,86.043716,25216.875}; + angles[]={0.32295573,0.51036918,6.2538638}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_58"; + description="Civilian 58"; + isPlayable=1; + }; + id=903; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=902; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 58"; + }; + }; + }; + nAttributes=1; + }; }; - class Item160 + class Item824 { - position[]={23526.816,12.94872,19936.809}; - name="cop_car_5"; - type="Empty"; - angle=91.179642; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8436.8018,85.542587,25218.09}; + angles[]={0.32295573,0.51036918,0.21401228}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_59"; + description="Civilian 59"; + isPlayable=1; + }; + id=905; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=904; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 59"; + }; + }; + }; + nAttributes=1; + }; }; - class Item161 + class Item825 { - position[]={17073.295,24.327265,11361.496}; - name="rock_1"; - text="@STR_MAR_Rock_Quarry"; - type="mil_box"; - colorName="ColorBrown"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8433.6416,84.285217,25219.793}; + angles[]={0.32295573,0.51036918,0.21401228}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_60"; + description="Civilian 60"; + isPlayable=1; + }; + id=907; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=906; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 60"; + }; + }; + }; + nAttributes=1; + }; }; - class Item162 + class Item826 { - position[]={19314.266,21.279949,16545.195}; - name="rock_proc"; - text="@STR_MAR_Rock_Processing"; - type="mil_dot"; - colorName="ColorBrown"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8442.9873,87.648857,25212.605}; + angles[]={0.42229986,0.51036918,6.2538638}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_61"; + description="Civilian 61"; + isPlayable=1; + }; + id=909; + type="C_man_1"; + atlOffset=7.6293945e-006; + }; + }; + class Attributes + { + }; + id=908; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 61"; + }; + }; + }; + nAttributes=1; + }; }; - class Item163 + class Item827 { - position[]={16578.012,14.273811,15989.947}; - name="oil_trader_3_1"; - text="@STR_MAR_Cement_Trader"; - type="b_unknown"; - colorName="ColorOrange"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8440.3135,87.070709,25214.066}; + angles[]={0.42229986,0.51036918,6.2538638}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_62"; + description="Civilian 62"; + isPlayable=1; + }; + id=911; + type="C_man_1"; + atlOffset=7.6293945e-006; + }; + }; + class Attributes + { + }; + id=910; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 62"; + }; + }; + }; + nAttributes=1; + }; }; - class Item164 + class Item828 { - position[]={11849.67,4.2975636,13611.597}; - name="dive_shop_1"; - text="@STR_MAR_Diving_Shop"; - type="mil_box"; - colorName="ColorOrange"; - angle=-144.45552; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8438.3682,86.553596,25215.445}; + angles[]={0.32295573,0.51036918,6.2538638}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_63"; + description="Civilian 63"; + isPlayable=1; + }; + id=913; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=912; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 63"; + }; + }; + }; + nAttributes=1; + }; }; - class Item165 + class Item829 { - position[]={15213.041,-0.011334214,12527.978}; - name="turtle_1"; - markerType="ELLIPSE"; - type="Empty"; - colorName="ColorRed"; - a=350; - b=350; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8435.8291,85.840416,25216.578}; + angles[]={0.3467271,0.51036918,0.18840829}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_64"; + description="Civilian 64"; + isPlayable=1; + }; + id=915; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=914; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 64"; + }; + }; + }; + nAttributes=1; + }; }; - class Item166 + class Item830 { - position[]={15239.204,-0.10417931,12503.155}; - name="turtle_1_name"; - text="@STR_MAR_Turtle_Poaching"; - type="mil_dot"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8432.5869,84.568619,25218.387}; + angles[]={0.3467271,0.51036918,0.18840829}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_65"; + description="Civilian 65"; + isPlayable=1; + }; + id=917; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=916; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 65"; + }; + }; + }; + nAttributes=1; + }; }; - class Item167 + class Item831 { - position[]={6444.689,-0.064472109,9385.3115}; - name="turtle_2"; - markerType="ELLIPSE"; - type="Empty"; - colorName="ColorRed"; - a=350; - b=350; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8464.2949,85.231827,25217.971}; + angles[]={0.062587507,6.2545094,0.19612266}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_66"; + description="Civilian 66"; + isPlayable=1; + }; + id=919; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=918; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 66"; + }; + }; + }; + nAttributes=1; + }; }; - class Item168 + class Item832 { - position[]={6470.8521,0.066574216,9360.4893}; - name="turtle_1_name_1"; - text="@STR_MAR_Turtle_Poaching"; - type="mil_dot"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8462.3389,84.792877,25218.771}; + angles[]={0.062587507,0.51036918,0.19612266}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_67"; + description="Civilian 67"; + isPlayable=1; + }; + id=921; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=920; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 67"; + }; + }; + }; + nAttributes=1; + }; }; - class Item169 + class Item833 { - position[]={3293.7217,-0.11467069,16612.359}; - name="turtle_3"; - markerType="ELLIPSE"; - type="Empty"; - colorName="ColorRed"; - a=350; - b=350; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8460.3936,84.320313,25220.145}; + angles[]={0.062587507,0.51036918,0.19612266}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_68"; + description="Civilian 68"; + isPlayable=1; + }; + id=923; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=922; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 68"; + }; + }; + }; + nAttributes=1; + }; }; - class Item170 + class Item834 { - position[]={3319.884,-0.087620348,16587.537}; - name="turtle_1_name_2"; - text="@STR_MAR_Turtle_Poaching"; - type="mil_dot"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8457.8535,84.228195,25221.281}; + angles[]={0.062587507,0.51036918,6.2565165}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_69"; + description="Civilian 69"; + isPlayable=1; + }; + id=925; + type="C_man_1"; + atlOffset=7.6293945e-006; + }; + }; + class Attributes + { + }; + id=924; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 69"; + }; + }; + }; + nAttributes=1; + }; }; - class Item171 + class Item835 { - position[]={10246.375,5.3159304,11272.208}; - name="turle_dealer"; - text="@STR_MAR_Turtle_Dealer"; - type="mil_dot"; - colorName="ColorRed"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8454.6123,84.281906,25223.09}; + angles[]={6.1967392,0.51036918,6.2565165}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_70"; + description="Civilian 70"; + isPlayable=1; + }; + id=927; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=926; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 70"; + }; + }; + }; + nAttributes=1; + }; }; - class Item172 + class Item836 { - position[]={24660.627,17.608727,23158.951}; - name="chop_shop_2"; - text="@STR_MAR_Chop_Shop"; - type="o_armor"; - colorName="Color1_FD_F"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8463.7822,85.27742,25215.617}; + angles[]={0.062587507,0.51036918,0.19612266}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_71"; + description="Civilian 71"; + isPlayable=1; + }; + id=929; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=928; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 71"; + }; + }; + }; + nAttributes=1; + }; }; - class Item173 + class Item837 { - position[]={5242.2974,78.634445,11514.398}; - name="chop_shop_3"; - text="@STR_MAR_Chop_Shop"; - type="o_armor"; - colorName="Color1_FD_F"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8461.1064,84.654434,25217.074}; + angles[]={0.062587507,0.51036918,0.19612266}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_72"; + description="Civilian 72"; + isPlayable=1; + }; + id=931; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=930; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 72"; + }; + }; + }; + nAttributes=1; + }; }; - class Item174 + class Item838 { - position[]={19029.779,23.749619,14549.058}; - name="chop_shop_4"; - text="@STR_MAR_Chop_Shop"; - type="o_armor"; - colorName="Color1_FD_F"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8459.1611,84.370499,25218.453}; + angles[]={0.062587507,0.51036918,6.2565165}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_73"; + description="Civilian 73"; + isPlayable=1; + }; + id=933; + type="C_man_1"; + atlOffset=7.6293945e-006; + }; + }; + class Attributes + { + }; + id=932; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 73"; + }; + }; + }; + nAttributes=1; + }; }; - class Item175 + class Item839 { - position[]={9179.4131,14.457561,21646.748}; - name="reb_v_1"; - type="Empty"; - angle=152.46985; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8456.6221,84.367172,25219.586}; + angles[]={0.062587507,0.51036918,6.2565165}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_74"; + description="Civilian 74"; + isPlayable=1; + }; + id=935; + type="C_man_1"; + atlOffset=7.6293945e-006; + }; + }; + class Attributes + { + }; + id=934; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 74"; + }; + }; + }; + nAttributes=1; + }; }; - class Item176 + class Item840 { - position[]={3654.9668,10.500361,13082.299}; - name="atm_marker"; - type="loc_Tourism"; - colorName="ColorGreen"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8453.3818,84.346542,25221.398}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_75"; + description="Civilian 75"; + isPlayable=1; + }; + id=937; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=936; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Civilian 75"; + }; + }; + }; + nAttributes=1; + }; }; - class Item177 + class Item841 { - position[]={3505.3977,5.0026331,13153.528}; - name="atm_marker_1"; - type="loc_Tourism"; - colorName="ColorGreen"; - angle=-41.826443; + dataType="Group"; + side="Civilian"; + class Entities + { + items=140; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8356.1621,85.693054,24952.854}; + angles[]={6.1102633,2.7592084,0.093064934}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + rank="COLONEL"; + init="this enableSimulation false; this allowDamage false; this hideObject true;"; + name="master_group"; + description="Master Group for NPC's"; + }; + id=945; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute2 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=3; + }; + }; + class Item1 + { + dataType="Object"; + class PositionInfo + { + position[]={9195.1211,14.399302,21678}; + angles[]={0.0080009829,3.1694481,0.011995304}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="removeallWeapons this; this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Rebel_Market"",life_fnc_virt_menu,""rebel""]; this addAction[localize ""STR_MAR_Rebel_Clothing_Shop"",life_fnc_clothingMenu,""reb"",0,false,false,"""",' license_civ_rebel && playerSide isEqualTo civilian']; this addAction[localize ""STR_MAR_Rebel_Weapon_Shop"",life_fnc_weaponShopMenu,""rebel"",0,false,false,"""",' license_civ_rebel && playerSide isEqualTo civilian']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""rebel"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""rebel"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""rebel"",0,false,false,"""",' !license_civ_rebel && playerSide isEqualTo civilian ']; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + name="reb_1"; + }; + id=946; + type="O_Soldier_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item2 + { + dataType="Object"; + class PositionInfo + { + position[]={14566.142,45.54884,20775.221}; + angles[]={6.1940894,2.003119,0.010664274}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_6"; + }; + id=947; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item3 + { + dataType="Object"; + class PositionInfo + { + position[]={14027.133,27.477411,18704.008}; + angles[]={0,5.8322206,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""driver"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""driver"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""driver"",0,false,false,"""",' !license_civ_driver && playerSide isEqualTo civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""boat"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""boat"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""boat"",0,false,false,"""",' !license_civ_boat && playerSide isEqualTo civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""pilot"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""pilot"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""pilot"",0,false,false,"""",' !license_civ_pilot && playerSide isEqualTo civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""trucking"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""trucking"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""trucking"",0,false,false,"""",' !license_civ_trucking && playerSide isEqualTo civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""home"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""home"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""home"",0,false,false,"""",' !license_civ_home && playerSide isEqualTo civilian ']; this setVariable [""realname"",""License Shop""];"; + name="license_shop_1"; + }; + id=948; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item4 + { + dataType="Object"; + class PositionInfo + { + position[]={10394.297,123.83879,19065.605}; + angles[]={6.247201,2.003119,6.1453972}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_5"; + }; + id=949; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item5 + { + dataType="Object"; + class PositionInfo + { + position[]={8639.8613,180.92345,18281.332}; + angles[]={0.057270125,5.6826925,0.0080009829}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_3"; + }; + id=950; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item6 + { + dataType="Object"; + class PositionInfo + { + position[]={14042.346,24.833548,18787.73}; + angles[]={6.2801361,3.2372937,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_Shops_Market"",life_fnc_virt_menu,""market""];"; + }; + id=951; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item7 + { + dataType="Object"; + class PositionInfo + { + position[]={4659.7007,293.05432,21403.863}; + angles[]={0.019996032,3.8470244,6.2192712}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_4"; + }; + id=952; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item8 + { + dataType="Object"; + class PositionInfo + { + position[]={6263.9048,43.392029,16263.992}; + angles[]={0,2.7592087,6.282495}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_Process_Oil"",life_fnc_processAction,""oil"",0,false,false,"""",' life_inv_oilUnprocessed > 0 && !life_is_processing && !life_action_inUse']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""oil"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""oil"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""oil"",0,false,false,"""",' !license_civ_oil && playerSide isEqualTo civilian '];"; + }; + id=953; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item9 + { + dataType="Object"; + class PositionInfo + { + position[]={4934.9546,77.798836,16147.149}; + angles[]={0.018663859,3.2343616,0.0013372133}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_2"; + }; + id=954; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item10 + { + dataType="Object"; + class PositionInfo + { + position[]={12311.673,24.227104,15691.958}; + angles[]={0.022662206,2.0031199,0.0093350215}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_12"; + }; + id=955; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item11 + { + dataType="Object"; + class PositionInfo + { + position[]={9192.7813,121.32066,15832.207}; + angles[]={6.219274,2.7530348,0.0039967569}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_11"; + }; + id=956; + type="C_man_polo_3_F"; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item12 + { + dataType="Object"; + class PositionInfo + { + position[]={10234.658,95.313866,14852.309}; + angles[]={0,5.4553514,0.0026520467}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_Process_Iron"",life_fnc_processAction,""iron"",0,false,false,"""",' life_inv_ironUnrefined > 0 && !life_is_processing && !life_action_inUse']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""iron"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""iron"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""iron"",0,false,false,"""",' !license_civ_iron && playerSide isEqualTo civilian '];"; + }; + id=957; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item13 + { + dataType="Object"; + class PositionInfo + { + position[]={3491.488,19.498314,14146.218}; + angles[]={6.2818484,3.2644343,0.0013372133}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="removeAllWeapons this; this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Drug_Dealer"",life_fnc_virt_menu,""drugdealer"",0,false,false,"""",' isNull objectParent player && player distance _target < 5 && playerSide isEqualTo civilian ']; this addAction[localize""STR_MAR_Question_Dealer"",life_fnc_questionDealer,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 5 && playerSide isEqualTo west && !life_action_inUse '];"; + name="Dealer_1"; + }; + id=958; + type="C_man_polo_6_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item14 + { + dataType="Object"; + class PositionInfo + { + position[]={3914.7332,16.284533,13592.942}; + angles[]={6.2738566,5.4506111,0.014664836}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_missions"; + }; + id=959; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item15 + { + dataType="Object"; + class PositionInfo + { + position[]={4140.8638,52.119354,11767.163}; + angles[]={0.014664836,2.003119,0.03731497}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_1"; + }; + id=960; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item16 + { + dataType="Object"; + class PositionInfo + { + position[]={5096.4019,50.383415,11267.179}; + angles[]={6.2685208,4.1327329,6.2551923}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_8"; + }; + id=961; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item17 + { + dataType="Object"; + class PositionInfo + { + position[]={3759.2966,34.355034,12373.425}; + angles[]={6.2671871,2.5322511,0.0053265258}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Truck_Shop"",life_fnc_vehicleShopMenu,[""civ_truck"",civilian,""civ_truck_1"",""civ"",""Bruce's New & Used Trucks""]];"; + name="carshop1_2"; + }; + id=962; + type="C_man_p_shorts_1_F_afro"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item18 + { + dataType="Object"; + class PositionInfo + { + position[]={10385.096,27.943432,13200.563}; + angles[]={0,5.2470307,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_Process_Marijuana"",life_fnc_processAction,""marijuana"",0,false,false,"""",' life_inv_cannabis > 0 && !life_is_processing && !life_action_inUse']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""marijuana"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""marijuana"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""marijuana"",0,false,false,"""",' !license_civ_marijuana && playerSide isEqualTo civilian '];"; + }; + id=963; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item19 + { + dataType="Object"; + class PositionInfo + { + position[]={12578.539,15.349311,14367.577}; + angles[]={6.2299027,2.7344995,0.0093350215}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_10"; + }; + id=964; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item20 + { + dataType="Object"; + class PositionInfo + { + position[]={14678.168,17.911438,16770.938}; + angles[]={0,2.9989872,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Helicopter_Shop"", life_fnc_vehicleShopMenu,[""civ_air"",civilian,[""civ_air_1"",""civ_air_1_2""],""civ"",""Carl's Airial Auto's""]];"; + }; + id=965; + type="C_man_w_worker_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item21 + { + dataType="Object"; + class PositionInfo + { + position[]={14420.35,18.721437,16240.31}; + angles[]={0,0.5905512,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Service_helicopter"",life_fnc_serviceChopper];"; + }; + id=966; + type="C_man_w_worker_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item22 + { + dataType="Object"; + class PositionInfo + { + position[]={14327.697,18.498035,17426.953}; + angles[]={6.2818484,3.0102098,0.03731497}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="removeAllWeapons this; this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Drug_Dealer"",life_fnc_virt_menu,""drugdealer"",0,false,false,"""",' isNull objectParent player && player distance _target < 5 && playerSide isEqualTo civilian ']; this addAction[localize""STR_MAR_Question_Dealer"",life_fnc_questionDealer,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 5 && playerSide isEqualTo west && !life_action_inUse '];"; + name="Dealer_2"; + }; + id=967; + type="C_man_polo_6_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item23 + { + dataType="Object"; + class PositionInfo + { + position[]={18815.227,31.752302,16641.531}; + angles[]={6.2578602,2.757817,6.253861}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_13"; + }; + id=968; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item24 + { + dataType="Object"; + class PositionInfo + { + position[]={18067.703,22.519835,15194.821}; + angles[]={6.2511969,2.003119,0.027990974}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_19"; + }; + id=969; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item25 + { + dataType="Object"; + class PositionInfo + { + position[]={19410.316,40.130875,13219.034}; + angles[]={0.029324362,2.003119,0.019996032}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_21"; + }; + id=970; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item26 + { + dataType="Object"; + class PositionInfo + { + position[]={21383.93,22.010025,16413.5}; + angles[]={6.2405448,0.92548323,6.2631865}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_15"; + }; + id=971; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item27 + { + dataType="Object"; + class PositionInfo + { + position[]={20948.367,42.999641,16965.086}; + angles[]={0.023993526,2.003119,6.2245865}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_14"; + }; + id=972; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item28 + { + dataType="Object"; + class PositionInfo + { + position[]={25573.992,20.183746,21312.07}; + angles[]={0.0029499636,0.94108629,6.2823396}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_Shops_Market"",life_fnc_virt_menu,""market""];"; + }; + id=973; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item29 + { + dataType="Object"; + class PositionInfo + { + position[]={26849.723,24.091494,24593.23}; + angles[]={0.014664836,2.9989872,0.035984326}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Helicopter_Shop"", life_fnc_vehicleShopMenu,[""civ_air"",civilian,[""civ_air_2"",""civ_air_2_1""],""civ"",""Carl's Airial Auto's""]];"; + }; + id=974; + type="C_man_w_worker_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item30 + { + dataType="Object"; + class PositionInfo + { + position[]={28308.348,14.859849,25768.863}; + angles[]={6.2805333,4.1104469,6.2418756}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_20"; + }; + id=975; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item31 + { + dataType="Object"; + class PositionInfo + { + position[]={19970.723,59.633732,11422.491}; + angles[]={6.2818484,0.91843176,6.2818484}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_22"; + }; + id=976; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item32 + { + dataType="Object"; + class PositionInfo + { + position[]={20785.332,36.074409,6769.4248}; + angles[]={0.078505196,1.5610971,6.2046804}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_25"; + }; + id=977; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item33 + { + dataType="Object"; + class PositionInfo + { + position[]={9085.9502,21.412178,12037.751}; + angles[]={0,3.2372937,6.282495}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_Shops_Market"",life_fnc_virt_menu,""market""];"; + }; + id=978; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item34 + { + dataType="Object"; + class PositionInfo + { + position[]={9029.2949,23.560549,11971.615}; + angles[]={6.2709832,3.5060048,6.2110915}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_9"; + }; + id=979; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item35 + { + dataType="Object"; + class PositionInfo + { + position[]={8956.5781,27.844965,12000.214}; + angles[]={0.00048828125,1.9745483,6.2791739}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Clothing_Store"",life_fnc_clothingMenu,""bruce""];"; + }; + id=980; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item36 + { + dataType="Object"; + class PositionInfo + { + position[]={16992.637,16.34804,12867.863}; + angles[]={6.2751846,2.5509436,6.2645216}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize ""STR_MAR_Car_shop"",life_fnc_vehicleShopMenu,[""civ_car"",civilian,""civ_car_2"",""civ"",""Bruce's New & Used Auto's""]];"; + }; + id=981; + type="C_man_p_beggar_F_afro"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item37 + { + dataType="Object"; + class PositionInfo + { + position[]={21653.066,16.099901,7537.167}; + angles[]={0.054611389,4.5281725,0.013332055}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_24"; + }; + id=982; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item38 + { + dataType="Object"; + class PositionInfo + { + position[]={20490.113,32.765873,8806.7666}; + angles[]={6.2685208,1.2252436,6.2765174}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_23"; + }; + id=983; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item39 + { + dataType="Object"; + class PositionInfo + { + position[]={3405.551,2.385658,12895.252}; + angles[]={0,5.2196856,0}; + }; + side="Civilian"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize ""STR_MAR_Fish_Market"",life_fnc_virt_menu,""fishmarket""];"; + }; + id=984; + type="C_man_1"; + atlOffset=0.45298624; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item40 + { + dataType="Object"; + class PositionInfo + { + position[]={3772.1619,18.997267,12987.073}; + angles[]={0,4.7837877,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Medical_Assistance"",life_fnc_healHospital,"""",1.5,false,false,"""",'isNull objectParent player && player distance _target < 5'];"; + }; + id=985; + type="C_man_polo_3_F"; + atlOffset=0.14582825; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item41 + { + dataType="Object"; + class PositionInfo + { + position[]={3045.5417,2.3432972,12612.413}; + angles[]={0,4.2142758,6.2826972}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Boat_Shop"",life_fnc_vehicleShopMenu,[""civ_ship"",civilian,""civ_ship_1"",""civ"",""Billy's Boat Rentals & Ownership""]]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""civ_ship_1""; life_garage_type = ""Ship""; },"""",0,false,false,"""",'playerSide isEqualTo civilian']; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store'];"; + }; + id=986; + type="C_man_shorts_3_F_euro"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item42 + { + dataType="Object"; + class PositionInfo + { + position[]={3363.8621,5.1254587,13063.233}; + angles[]={0,1.2592249,6.282495}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Clothing_Store"",life_fnc_clothingMenu,""bruce""];"; + }; + id=987; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item43 + { + dataType="Object"; + class PositionInfo + { + position[]={3638.7576,10.525033,13076.297}; + angles[]={0,0.058852673,6.2820935}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""driver"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""driver"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""driver"",0,false,false,"""",' !license_civ_driver && playerSide isEqualTo civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""boat"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""boat"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""boat"",0,false,false,"""",' !license_civ_boat && playerSide isEqualTo civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""pilot"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""pilot"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""pilot"",0,false,false,"""",' !license_civ_pilot && playerSide isEqualTo civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""trucking"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""trucking"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""trucking"",0,false,false,"""",' !license_civ_trucking && playerSide isEqualTo civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""home"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""home"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""home"",0,false,false,"""",' !license_civ_home && playerSide isEqualTo civilian ']; this setVariable [""realname"",""License Shop""];"; + name="license_shop"; + }; + id=988; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item44 + { + dataType="Object"; + class PositionInfo + { + position[]={3669.6492,10.450583,13109.614}; + angles[]={6.2778587,4.8546982,0.0053265258}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize ""STR_MAR_Car_shop"",life_fnc_vehicleShopMenu,[""civ_car"",civilian,[""civ_car_1"",""civ_car_1_1""],""civ"",""Bruce's New & Used Auto's""]]; this setVariable [""realname"", ""Car Shop""];"; + name="carshop1"; + }; + id=989; + type="C_man_p_beggar_F_afro"; + atlOffset=9.5367432e-007; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item45 + { + dataType="Object"; + class PositionInfo + { + position[]={3479.3682,3.1977665,13230.852}; + angles[]={0,5.6205015,6.2819896}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize ""STR_MAR_General_Store"",life_fnc_weaponShopMenu,""genstore""];"; + name="carshop1_3"; + }; + id=990; + type="C_man_p_fugitive_F_asia"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item46 + { + dataType="Object"; + class PositionInfo + { + position[]={3427.5671,2.5662861,12733.979}; + angles[]={6.2751846,4.502007,0.050623242}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; removeallWeapons this; this enableSimulation false; this addAction[localize""STR_MAR_Diving_Shop"",life_fnc_clothingMenu,""dive""]; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""dive"" >> ""displayName"")),[(getNumber(missionConfigFile >> ""Licenses"" >> ""dive"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""dive"",0,false,false,"""",' !license_civ_dive && playerSide isEqualTo civilian '];"; + }; + id=991; + type="B_diver_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item47 + { + dataType="Object"; + class PositionInfo + { + position[]={3171.156,1.8954024,12885.067}; + angles[]={6.2033563,1.2113461,0.079829417}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Boat_Shop"",life_fnc_vehicleShopMenu,[""cop_ship"",west,""cop_ship_1"",""cop"",""APD - Kavala District - Boat Store""]]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""cop_ship_1""; life_garage_type = ""Ship""; },"""",0,false,false,"""",'playerSide isEqualTo west']; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store']; this setObjectTextureGlobal [0,""textures\cop_uniform.jpg""];"; + }; + id=992; + type="B_RangeMaster_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item48 + { + dataType="Object"; + class PositionInfo + { + position[]={3199.7566,2.2509451,12924.192}; + angles[]={6.2818484,2.998982,6.2805333}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Helicopter_Shop"", life_fnc_vehicleShopMenu,[""cop_air"",west,""cop_air_1"",""cop"",""APD - Kavala District""]]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Air"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Air"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""cop_air_1""; life_garage_type = ""Air""; },"""",0,false,false,"""",'playerSide isEqualTo west']; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store']; this setObjectTextureGlobal [0,""textures\cop_uniform.jpg""];"; + }; + id=993; + type="B_RangeMaster_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item49 + { + dataType="Object"; + class PositionInfo + { + position[]={3240.3093,2.1390429,12953.108}; + angles[]={0.0013372133,1.5125442,6.2778587}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_W_E_Vehicle Shop"",life_fnc_vehicleShopMenu,[""cop_car"",west,""cop_car_1"",""cop"",""APD - Kavala District""]]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""cop_car_1""; life_garage_type = ""Car""; },"""",0,false,false,"""",'playerSide isEqualTo west']; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store']; this setVariable [""realname"",""Cop Vehicle Store""]; this setObjectTextureGlobal [0,""textures\cop_uniform.jpg""];"; + }; + id=994; + type="B_RangeMaster_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item50 + { + dataType="Object"; + class PositionInfo + { + position[]={3274.0876,2.5446165,12975.71}; + angles[]={0,3.1774943,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this addAction[localize""STR_MAR_Cop_Item_Shop"",life_fnc_virt_menu,""cop""]; this allowDamage false; this addAction[localize""STR_MAR_Cop_Clothing_Shop"",life_fnc_clothingMenu,""cop""]; this addAction[localize""STR_MAR_Cop_Weapon_Shop"",life_fnc_weaponShopMenu,""cop_basic""]; this addAction[localize""STR_MAR_Patrol_Officer_Weapon_Shop"",life_fnc_weaponShopMenu,""cop_patrol""]; this addAction[localize""STR_MAR_Sergeant_Weapon_Shop"",life_fnc_weaponShopMenu,""cop_sergeant""]; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""cAir"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""cAir"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""cAir"",0,false,false,"""",' !license_cop_cAir && playerSide isEqualTo west ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""cg"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""cg"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""cg"",0,false,false,"""",' !license_cop_cg && playerSide isEqualTo west ']; this setObjectTextureGlobal [0,""textures\cop_uniform.jpg""];"; + name="h1_3"; + }; + id=995; + type="B_RangeMaster_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item51 + { + dataType="Object"; + class PositionInfo + { + position[]={25665.32,19.820503,21297.393}; + angles[]={0,5.2737222,6.2823396}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Clothing_Store"",life_fnc_clothingMenu,""bruce""];"; + }; + id=996; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item52 + { + dataType="Object"; + class PositionInfo + { + position[]={25831.789,20.880169,21446.199}; + angles[]={6.2778587,4.8546982,6.2325621}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize ""STR_MAR_Car_shop"",life_fnc_vehicleShopMenu,[""civ_car"",civilian,""civ_car_4"",""civ"",""Bruce's New & Used Auto's""]];"; + name="carshop4"; + }; + id=997; + type="C_man_p_beggar_F_afro"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item53 + { + dataType="Object"; + class PositionInfo + { + position[]={25641.063,19.613016,21308.449}; + angles[]={6.259192,2.003119,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_16"; + }; + id=998; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item54 + { + dataType="Object"; + class PositionInfo + { + position[]={14161.371,19.162802,16299.394}; + angles[]={0.0066682254,2.998982,0.0026520467}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="removeallWeapons this; this enableSimulation false; this addAction[localize""STR_MAR_Cop_Item_Shop"",life_fnc_virt_menu,""cop""]; this allowDamage false; this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Helicopter_Shop"",life_fnc_vehicleShopMenu,[""cop_air"",west,""cop_air_2"",""cop"",""APD - Air HQ""]]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Air"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Air"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""cop_air_2""; life_garage_type = ""Air""; },"""",0,false,false,"""",'playerSide isEqualTo west']; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store']; this setObjectTextureGlobal [0,""textures\cop_uniform.jpg""];"; + }; + id=999; + type="B_RangeMaster_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item55 + { + dataType="Object"; + class PositionInfo + { + position[]={13791.23,20.285015,18932.363}; + angles[]={6.2751846,4.9072676,6.2791886}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_W_E_Vehicle Shop"",life_fnc_vehicleShopMenu,[""cop_car"",west,""cop_car_2"",""cop"",""APD - Athira District""]]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""cop_car_2""; life_garage_type = ""Car""; },"""",0,false,false,"""",'playerSide isEqualTo west']; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store']; this setObjectTextureGlobal [0,""textures\cop_uniform.jpg""];"; + }; + id=1000; + type="B_RangeMaster_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item56 + { + dataType="Object"; + class PositionInfo + { + position[]={16591.348,11.001439,12719.077}; + angles[]={0,0.6533553,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_W_E_Vehicle Shop"",life_fnc_vehicleShopMenu,[""cop_car"",west,""cop_car_3"",""cop"",""APD - Pyrgos District""]]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""cop_car_3""; life_garage_type = ""Car""; },"""",0,false,false,"""",'playerSide isEqualTo west']; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store']; this setObjectTextureGlobal [0,""textures\cop_uniform.jpg""];"; + }; + id=1001; + type="B_RangeMaster_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item57 + { + dataType="Object"; + class PositionInfo + { + position[]={26975.305,20.053507,23264.219}; + angles[]={6.2618566,5.8395972,0.031988446}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_17"; + }; + id=1002; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item58 + { + dataType="Object"; + class PositionInfo + { + position[]={20884.551,2.7339561,14623.815}; + angles[]={6.2698536,3.5291135,6.2631893}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="removeAllWeapons this; this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Drug_Dealer"",life_fnc_virt_menu,""drugdealer"",0,false,false,"""",' isNull objectParent player && player distance _target < 5 && playerSide isEqualTo civilian ']; this addAction[localize""STR_MAR_Question_Dealer"",life_fnc_questionDealer,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 5 && playerSide isEqualTo west && !life_action_inUse '];"; + name="Dealer_3"; + }; + id=1003; + type="C_man_polo_6_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item59 + { + dataType="Object"; + class PositionInfo + { + position[]={25802.139,21.275713,21408.744}; + angles[]={0,2.3467524,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""driver"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""driver"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""driver"",0,false,false,"""",' !license_civ_driver && playerSide isEqualTo civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""boat"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""boat"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""boat"",0,false,false,"""",' !license_civ_boat && playerSide isEqualTo civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""pilot"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""pilot"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""pilot"",0,false,false,"""",' !license_civ_pilot && playerSide isEqualTo civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""trucking"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""trucking"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""trucking"",0,false,false,"""",' !license_civ_trucking && playerSide isEqualTo civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""home"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""home"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""home"",0,false,false,"""",' !license_civ_home && playerSide isEqualTo civilian ']; this setVariable [""realname"",""License Shop""];"; + name="license_shop_2"; + }; + id=1004; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item60 + { + dataType="Object"; + class PositionInfo + { + position[]={25780.08,20.733459,21352.449}; + angles[]={0.00077204045,5.5718546,0.0029499636}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize ""STR_MAR_General_Store"",life_fnc_weaponShopMenu,""genstore""];"; + }; + id=1005; + type="C_man_p_fugitive_F_asia"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item61 + { + dataType="Object"; + class PositionInfo + { + position[]={16994.877,16.333569,12660.733}; + angles[]={0.0030297067,0.45959806,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""driver"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""driver"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""driver"",0,false,false,"""",' !license_civ_driver && playerSide isEqualTo civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""boat"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""boat"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""boat"",0,false,false,"""",' !license_civ_boat && playerSide isEqualTo civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""pilot"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""pilot"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""pilot"",0,false,false,"""",' !license_civ_pilot && playerSide isEqualTo civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""trucking"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""trucking"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""trucking"",0,false,false,"""",' !license_civ_trucking && playerSide isEqualTo civilian ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""home"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""home"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""home"",0,false,false,"""",' !license_civ_home && playerSide isEqualTo civilian ']; this setVariable [""realname"",""License Shop""];"; + name="license_shop_3"; + }; + id=1006; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item62 + { + dataType="Object"; + class PositionInfo + { + position[]={16805.391,23.93841,12663.88}; + angles[]={0.0026520467,4.8985624,0.0013372133}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_18"; + }; + id=1007; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item63 + { + dataType="Object"; + class PositionInfo + { + position[]={16813.699,23.954258,12624.25}; + angles[]={0,0.0679636,6.2826972}; + }; + side="Civilian"; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize ""STR_MAR_General_Store"",life_fnc_weaponShopMenu,""genstore""];"; + }; + id=1008; + type="C_man_p_fugitive_F_asia"; + atlOffset=1.2672386; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item64 + { + dataType="Object"; + class PositionInfo + { + position[]={12583.018,34.083744,16396.004}; + angles[]={0.050623242,1.3564491,6.2073317}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_Shops_Oil"",life_fnc_virt_menu,""oil""];"; + }; + id=1009; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item65 + { + dataType="Object"; + class PositionInfo + { + position[]={14344.414,37.079552,18952.039}; + angles[]={6.2818484,2.7592087,6.2738566}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_Process_Diamond"",life_fnc_processAction,""diamond"",0,false,false,"""",' life_inv_diamondUncut > 0 && !life_is_processing && !life_action_inUse']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""diamond"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""diamond"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""diamond"",0,false,false,"""",' !license_civ_diamond && playerSide isEqualTo civilian '];"; + }; + id=1010; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item66 + { + dataType="Object"; + class PositionInfo + { + position[]={4929.1216,16.187775,14578.392}; + angles[]={6.2791886,4.4478369,6.2418756}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Glass_Trader"",life_fnc_virt_menu,""glass""];"; + }; + id=1011; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item67 + { + dataType="Object"; + class PositionInfo + { + position[]={5328.0278,22.177763,14478.216}; + angles[]={0.058599081,6.2192163,0.0039967569}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Iron_Copper_Trader"",life_fnc_virt_menu,""iron""];"; + }; + id=1012; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item68 + { + dataType="Object"; + class PositionInfo + { + position[]={9530.334,127.03535,15077.96}; + angles[]={6.2791886,3.8226378,0.026657995}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_Process_Copper"",life_fnc_processAction,""copper"",0,false,false,"""",' life_inv_copperUnrefined > 0 && !life_is_processing && !life_action_inUse']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""copper"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""copper"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""copper"",0,false,false,"""",' !license_civ_copper && playerSide isEqualTo civilian '];"; + }; + id=1013; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item69 + { + dataType="Object"; + class PositionInfo + { + position[]={17869.512,2.4173594,18200.73}; + angles[]={6.2765174,3.8075275,0.0039967569}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Diamond_Trader"",life_fnc_virt_menu,""diamond""];"; + }; + id=1014; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item70 + { + dataType="Object"; + class PositionInfo + { + position[]={20695.477,4.5538244,19467.477}; + angles[]={6.2605233,2.341713,0.057270125}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Salt_Trader"",life_fnc_virt_menu,""salt""];"; + }; + id=1015; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item71 + { + dataType="Object"; + class PositionInfo + { + position[]={5380.313,77.311546,17923.336}; + angles[]={0.0066592805,1.3576045,6.2046819}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Process_Sand"",life_fnc_processAction,""sand"",0,false,false,"""",' life_inv_sand > 0 && !life_is_processing && !life_action_inUse']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""sand"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""sand"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""sand"",0,false,false,"""",' !license_civ_sand && playerSide isEqualTo civilian '];"; + }; + id=1016; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item72 + { + dataType="Object"; + class PositionInfo + { + position[]={16566.492,11.001439,12746.125}; + angles[]={0,3.4420686,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this addAction[localize""STR_MAR_Cop_Item_Shop"",life_fnc_virt_menu,""cop""]; this allowDamage false; this addAction[localize""STR_MAR_Cop_Clothing_Shop"",life_fnc_clothingMenu,""cop""]; this addAction[localize""STR_MAR_Cop_Weapon_Shop"",life_fnc_weaponShopMenu,""cop_basic""]; this addAction[localize""STR_MAR_Patrol_Officer_Weapon_Shop"",life_fnc_weaponShopMenu,""cop_patrol""]; this addAction[localize""STR_MAR_Sergeant_Weapon_Shop"",life_fnc_weaponShopMenu,""cop_sergeant""]; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""cAir"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""cAir"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""cAir"",0,false,false,"""",' !license_cop_cAir && playerSide isEqualTo west ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""cg"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""cg"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""cg"",0,false,false,"""",' !license_cop_cg && playerSide isEqualTo west ']; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 ']; this setObjectTextureGlobal [0,""textures\cop_uniform.jpg""];"; + name="h1_3_1"; + }; + id=1017; + type="B_RangeMaster_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item73 + { + dataType="Object"; + class PositionInfo + { + position[]={13823.305,20.4795,18985.746}; + angles[]={6.247201,3.1774943,0.053282689}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this addAction[localize""STR_MAR_Cop_Item_Shop"",life_fnc_virt_menu,""cop""]; this allowDamage false; this addAction[localize""STR_MAR_Cop_Clothing_Shop"",life_fnc_clothingMenu,""cop""]; this addAction[localize""STR_MAR_Cop_Weapon_Shop"",life_fnc_weaponShopMenu,""cop_basic""]; this addAction[localize""STR_MAR_Patrol_Officer_Weapon_Shop"",life_fnc_weaponShopMenu,""cop_patrol""]; this addAction[localize""STR_MAR_Sergeant_Weapon_Shop"",life_fnc_weaponShopMenu,""cop_sergeant""]; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""cAir"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""cAir"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""cAir"",0,false,false,"""",' !license_cop_cAir && playerSide isEqualTo west ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""cg"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""cg"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""cg"",0,false,false,"""",' !license_cop_cg && playerSide isEqualTo west ']; this setObjectTextureGlobal [0,""textures\cop_uniform.jpg""];"; + name="h1_3_2"; + }; + id=1018; + type="B_RangeMaster_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item74 + { + dataType="Object"; + class PositionInfo + { + position[]={27363.262,6.3357944,24467.051}; + angles[]={6.253861,4.1461344,6.2818484}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_Process_Salt"",life_fnc_processAction,""salt"",0,false,false,"""",' life_inv_saltUnrefined > 0 && !life_is_processing && !life_action_inUse']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""salt"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""salt"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""salt"",0,false,false,"""",' !license_civ_salt && playerSide isEqualTo civilian '];"; + }; + id=1019; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item75 + { + dataType="Object"; + class PositionInfo + { + position[]={14075.289,23.919062,18559.809}; + angles[]={0,0.53849125,6.2823396}; + }; + side="Civilian"; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Clothing_Store"",life_fnc_clothingMenu,""bruce""];"; + }; + id=1020; + type="C_man_1"; + atlOffset=0.51165199; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item76 + { + dataType="Object"; + class PositionInfo + { + position[]={9327.2734,14.885961,11911.506}; + angles[]={6.2819896,0.28158444,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_Shops_W_Gun"",life_fnc_weaponShopMenu,""gun"",0,false,false,"""",' license_civ_gun && playerSide isEqualTo civilian']; this addAction[localize ""STR_Shops_C_Gun"",life_fnc_clothingMenu,""gun_clothing"",0,false,false,"""",' license_civ_gun && playerSide isEqualTo civilian']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""gun"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""gun"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""gun"",0,false,false,"""",' !license_civ_gun && playerSide isEqualTo civilian '];"; + }; + id=1021; + type="B_RangeMaster_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item77 + { + dataType="Object"; + class PositionInfo + { + position[]={12300.223,123.98544,8888.6201}; + angles[]={6.2791886,5.2351255,6.2818484}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="removeallWeapons this; this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Rebel_Market"",life_fnc_virt_menu,""rebel""]; this addAction[localize ""STR_MAR_Rebel_Clothing_Shop"",life_fnc_clothingMenu,""reb"",0,false,false,"""",' license_civ_rebel && playerSide isEqualTo civilian']; this addAction[localize ""STR_MAR_Rebel_Weapon_Shop"",life_fnc_weaponShopMenu,""rebel"",0,false,false,"""",' license_civ_rebel && playerSide isEqualTo civilian']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""rebel"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""rebel"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""rebel"",0,false,false,"""",' !license_civ_rebel && playerSide isEqualTo civilian ']; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + name="reb_1_1"; + }; + id=1022; + type="O_Soldier_F"; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item78 + { + dataType="Object"; + class PositionInfo + { + position[]={20079.059,100.96936,6744.043}; + angles[]={0,3.0050211,6.2818937}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="removeallWeapons this; this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Rebel_Market"",life_fnc_virt_menu,""rebel""]; this addAction[localize ""STR_MAR_Rebel_Clothing_Shop"",life_fnc_clothingMenu,""reb"",0,false,false,"""",' license_civ_rebel && playerSide isEqualTo civilian']; this addAction[localize ""STR_MAR_Rebel_Weapon_Shop"",life_fnc_weaponShopMenu,""rebel"",0,false,false,"""",' license_civ_rebel && playerSide isEqualTo civilian']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""rebel"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""rebel"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""rebel"",0,false,false,"""",' !license_civ_rebel && playerSide isEqualTo civilian ']; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + name="reb_1_2"; + }; + id=1023; + type="O_Soldier_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item79 + { + dataType="Object"; + class PositionInfo + { + position[]={13947.773,23.753139,18665.164}; + angles[]={0,0.85485768,6.2826972}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize ""STR_MAR_General_Store"",life_fnc_weaponShopMenu,""genstore""];"; + name="carshop1_3_1"; + }; + id=1024; + type="C_man_p_fugitive_F_asia"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item80 + { + dataType="Object"; + class PositionInfo + { + position[]={23645.043,51.118584,21801.27}; + angles[]={0.063913256,4.1460648,0.042640556}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_Process_Heroin"",life_fnc_processAction,""heroin"",0,false,false,"""",' life_inv_heroinUnprocessed > 0 && !life_is_processing && !life_action_inUse']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""heroin"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""heroin"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""heroin"",0,false,false,"""",' !license_civ_heroin && playerSide isEqualTo civilian '];"; + }; + id=1025; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item81 + { + dataType="Object"; + class PositionInfo + { + position[]={25723.953,18.246689,21277.715}; + angles[]={6.249866,3.8464839,6.2738566}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; life_garage_type = ""Car""; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""car_g_2""; }]; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store'];"; + }; + id=1026; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item82 + { + dataType="Object"; + class PositionInfo + { + position[]={14473.48,19.166288,17753.941}; + angles[]={6.276526,2.6580021,0.022662206}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; life_garage_type = ""Car""; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""car_g_3""; }]; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store'];"; + }; + id=1027; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item83 + { + dataType="Object"; + class PositionInfo + { + position[]={3739.4626,12.75887,13267.433}; + angles[]={0.022662206,0.90747237,6.2618566}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; life_garage_type = ""Car""; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""car_g_1""; }]; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store'];"; + }; + id=1028; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item84 + { + dataType="Object"; + class PositionInfo + { + position[]={14259.365,19.36528,16302.676}; + angles[]={0.0026520467,2.792649,6.2818484}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Air"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Air"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; life_garage_type = ""Air""; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""air_g_1""; }]; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store'];"; + }; + id=1029; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item85 + { + dataType="Object"; + class PositionInfo + { + position[]={23539.895,13.287899,19956.844}; + angles[]={6.2738566,3.1774943,0.0026520467}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this addAction[localize""STR_MAR_Cop_Item_Shop"",life_fnc_virt_menu,""cop""]; this allowDamage false; this addAction[localize""STR_MAR_Cop_Clothing_Shop"",life_fnc_clothingMenu,""cop""]; this addAction[localize""STR_MAR_Cop_Weapon_Shop"",life_fnc_weaponShopMenu,""cop_basic""]; this addAction[localize""STR_MAR_Patrol_Officer_Weapon_Shop"",life_fnc_weaponShopMenu,""cop_patrol""]; this addAction[localize""STR_MAR_Sergeant_Weapon_Shop"",life_fnc_weaponShopMenu,""cop_sergeant""]; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""cAir"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""cAir"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""cAir"",0,false,false,"""",' !license_cop_cAir && playerSide isEqualTo west ']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""cg"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""cg"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""cg"",0,false,false,"""",' !license_cop_cg && playerSide isEqualTo west ']; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 ']; this setObjectTextureGlobal [0,""textures\cop_uniform.jpg""];"; + name="h1_3_3"; + }; + id=1030; + type="B_RangeMaster_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item86 + { + dataType="Object"; + class PositionInfo + { + position[]={23521.73,12.89639,19942.031}; + angles[]={6.2778587,2.4421871,0.015998369}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_W_E_Vehicle Shop"",life_fnc_vehicleShopMenu,[""cop_car"",west,""cop_car_5"",""cop"",""APD - Highway Patrol""]]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""cop_car_5""; life_garage_type = ""Car""; },"""",0,false,false,"""",'playerSide isEqualTo west']; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store']; this setObjectTextureGlobal [0,""textures\cop_uniform.jpg""];"; + }; + id=1031; + type="B_RangeMaster_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item87 + { + dataType="Object"; + class PositionInfo + { + position[]={8440.2461,49.745098,12761.084}; + angles[]={0,6.2655797,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_Process_Cocaine"",life_fnc_processAction,""cocaine"",0,false,false,"""",' life_inv_cocaineUnprocessed > 0 && !life_is_processing && !life_action_inUse']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""cocaine"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""cocaine"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""cocaine"",0,false,false,"""",' !license_civ_cocaine && playerSide isEqualTo civilian '];"; + }; + id=1032; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item88 + { + dataType="Object"; + class PositionInfo + { + position[]={17541.879,2.8047152,18940.875}; + angles[]={6.2206011,5.6754661,6.259192}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Boat_Shop"",life_fnc_vehicleShopMenu,[""civ_ship"",civilian,""civ_ship_3"",""civ"",""Billy's Boat Rentals & Ownership""]]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""civ_ship_3""; life_garage_type = ""Ship""; },"""",0,false,false,"""",'playerSide isEqualTo civilian']; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store'];"; + }; + id=1033; + type="C_man_shorts_3_F_euro"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item89 + { + dataType="Object"; + class PositionInfo + { + position[]={16578.414,14.27266,15989.216}; + angles[]={6.2791886,2.338659,0.0013372133}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Cement_Trader"",life_fnc_virt_menu,""cement""];"; + }; + id=1034; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item90 + { + dataType="Object"; + class PositionInfo + { + position[]={19314.379,21.273626,16543.754}; + angles[]={6.2791886,6.2462368,6.2605233}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Process_Rock"",life_fnc_processAction,""cement"",0,false,false,"""",' life_inv_rock > 0 && !life_is_processing && !life_action_inUse']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""cement"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""cement"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""cement"",0,false,false,"""",' !license_civ_cement && playerSide isEqualTo civilian '];"; + }; + id=1035; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item91 + { + dataType="Object"; + class PositionInfo + { + position[]={11850.023,4.165082,13610.604}; + angles[]={6.1742849,5.5949535,6.1310372}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; removeallWeapons this; this enableSimulation false; this addAction[localize""STR_MAR_Diving_Shop"",life_fnc_clothingMenu,""dive""]; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""dive"" >> ""displayName"")),[(getNumber(missionConfigFile >> ""Licenses"" >> ""dive"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""dive"",0,false,false,"""",' !license_civ_dive && playerSide isEqualTo civilian '];"; + }; + id=1036; + type="B_diver_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item92 + { + dataType="Object"; + class PositionInfo + { + position[]={16340.838,25.478104,17266.496}; + angles[]={0,0.28158444,6.2822089}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_Shops_W_Gun"",life_fnc_weaponShopMenu,""gun"",0,false,false,"""",' license_civ_gun && playerSide isEqualTo civilian']; this addAction[localize ""STR_Shops_C_Gun"",life_fnc_clothingMenu,""gun_clothing"",0,false,false,"""",' license_civ_gun && playerSide isEqualTo civilian']; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""gun"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""gun"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""gun"",0,false,false,"""",' !license_civ_gun && playerSide isEqualTo civilian '];"; + }; + id=1037; + type="B_RangeMaster_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item93 + { + dataType="Object"; + class PositionInfo + { + position[]={10246.57,5.3210626,11272.109}; + angles[]={0.02666023,4.1930313,6.2818484}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Wong_Food_Cart"",life_fnc_virt_menu,""wongs""];"; + }; + id=1038; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item94 + { + dataType="Object"; + class PositionInfo + { + position[]={18159.439,26.927366,12838.552}; + angles[]={6.2819896,5.553154,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Truck_Shop"",life_fnc_vehicleShopMenu,[""civ_truck"",civilian,[""civ_truck_2"",""civ_truck_2_1""],""civ"",""Bruce's New & Used Trucks""]];"; + }; + id=1039; + type="C_man_p_shorts_1_F_afro"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item95 + { + dataType="Object"; + class PositionInfo + { + position[]={8954.4121,69.251747,15502.962}; + angles[]={6.2658563,0.93218279,6.2778587}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_ChopShop_Title"",life_fnc_chopShopMenu,""chop_shop_1"",1.5,false,false,"""",'isNull objectParent player && player distance _target < 3.5'];"; + }; + id=1040; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item96 + { + dataType="Object"; + class PositionInfo + { + position[]={19028.809,23.678001,14554.516}; + angles[]={0.0093286335,3.3768158,6.2818484}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_ChopShop_Title"",life_fnc_chopShopMenu,""chop_shop_4"",1.5,false,false,"""",'isNull objectParent player && player distance _target < 3.5'];"; + }; + id=1041; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item97 + { + dataType="Object"; + class PositionInfo + { + position[]={24655.934,17.862614,23161.145}; + angles[]={6.2791886,2.6668682,6.2299027}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_ChopShop_Title"",life_fnc_chopShopMenu,""chop_shop_2"",1.5,false,false,"""",'isNull objectParent player && player distance _target < 3.5'];"; + }; + id=1042; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item98 + { + dataType="Object"; + class PositionInfo + { + position[]={5242.1167,78.916672,11515.952}; + angles[]={6.0986428,2.9478137,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_ChopShop_Title"",life_fnc_chopShopMenu,""chop_shop_3"",1.5,false,false,"""",'isNull objectParent player && player distance _target < 3.5'];"; + }; + id=1043; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item99 + { + dataType="Object"; + class PositionInfo + { + position[]={3736.646,19.012299,12979.653}; + angles[]={0,0,6.2826962}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""mAir"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""mAir"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""mAir"",0,false,false,"""",' !license_med_mAir && playerSide isEqualTo independent ']; this addAction[localize""STR_MAR_EMS_Item_Shop"",life_fnc_weaponShopMenu,""med_basic""]; this addAction[localize""STR_MAR_EMS_Clothing_Shop"",life_fnc_clothingMenu,""med_clothing""]; this addAction[localize""STR_MAR_W_E_Vehicle Shop"",life_fnc_vehicleShopMenu,[""med_shop"",independent,""med_car_1"",""med"",""Kavala Hospital""]]; this addAction[localize""STR_MAR_Helicopter_Shop"", life_fnc_vehicleShopMenu,[""med_air_hs"",independent,""medic_spawn_1"",""med"",""Kavala Hospital""]]; this addAction[localize""STR_MAR_W_Car_Garage"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""med_car_1""; life_garage_type = ""Car""; },"""",0,false,false,"""",'playerSide isEqualTo independent']; this addAction[localize""STR_MAR_Helicopter_Garage"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Air"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Air"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""medic_spawn_1""; life_garage_type = ""Air""; },"""",0,false,false,"""",'playerSide isEqualTo independent ']; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store']; this addAction[localize""STR_Shops_Market"",life_fnc_virt_menu,""med_market"",1.5,false,false,"""",' isNull objectParent player && player distance _target < 5 && playerSide isEqualTo independent ']; this setObjectTextureGlobal [0,""textures\medic_uniform.jpg""];"; + }; + id=1044; + type="B_RangeMaster_F"; + atlOffset=0.00021934509; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item100 + { + dataType="Object"; + class PositionInfo + { + position[]={17486.934,13.016437,13271.802}; + angles[]={0.0066671576,5.598824,6.2778621}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""mAir"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""mAir"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""mAir"",0,false,false,"""",' !license_med_mAir && playerSide isEqualTo independent ']; this addAction[localize""STR_MAR_EMS_Item_Shop"",life_fnc_weaponShopMenu,""med_basic""]; this addAction[localize""STR_MAR_EMS_Clothing_Shop"",life_fnc_clothingMenu,""med_clothing""]; this addAction[localize""STR_MAR_W_E_Vehicle Shop"",life_fnc_vehicleShopMenu,[""med_shop"",independent,""med_car_2"",""med"",""Pyrgos Hospital""]]; this addAction[localize""STR_MAR_Helicopter_Shop"", life_fnc_vehicleShopMenu,[""med_air_hs"",independent,""medic_spawn_3"",""med"",""Pyrgos Hospital""]]; this addAction[localize""STR_MAR_W_Car_Garage"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""med_car_2""; life_garage_type = ""Car""; },"""",0,false,false,"""",'playerSide isEqualTo independent']; this addAction[localize""STR_MAR_Helicopter_Garage"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Air"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Air"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""medic_spawn_3""; life_garage_type = ""Air""; },"""",0,false,false,"""",'playerSide isEqualTo independent ']; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store']; this addAction[localize""STR_Shops_Market"",life_fnc_virt_menu,""med_market"",1.5,false,false,"""",' isNull objectParent player && player distance _target < 5 && playerSide isEqualTo independent ']; this setObjectTextureGlobal [0,""textures\medic_uniform.jpg""];"; + }; + id=1045; + type="B_RangeMaster_F"; + atlOffset=0.14700031; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item101 + { + dataType="Object"; + class PositionInfo + { + position[]={15591.025,18.6933,17191.469}; + angles[]={0.010663962,5.598824,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[format[""%1 ($%2)"",localize (getText(missionConfigFile >> ""Licenses"" >> ""mAir"" >> ""displayName"")), [(getNumber(missionConfigFile >> ""Licenses"" >> ""mAir"" >> ""price""))] call life_fnc_numberText],life_fnc_buyLicense,""mAir"",0,false,false,"""",' !license_med_mAir && playerSide isEqualTo independent ']; this addAction[localize""STR_MAR_EMS_Item_Shop"",life_fnc_weaponShopMenu,""med_basic""]; this addAction[localize""STR_MAR_EMS_Clothing_Shop"",life_fnc_clothingMenu,""med_clothing""]; this addAction[localize""STR_MAR_W_E_Vehicle Shop"",life_fnc_vehicleShopMenu,[""med_shop"",independent,""med_car_3"",""med"",""Athira Hospital""]]; this addAction[localize""STR_MAR_Helicopter_Shop"", life_fnc_vehicleShopMenu,[""med_air_hs"",independent,""medic_spawn_2"",""med"",""Athira Hospital""]]; this addAction[localize""STR_MAR_W_Car_Garage"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Car"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""med_car_3""; life_garage_type = ""Car""; },"""",0,false,false,"""",'playerSide isEqualTo independent']; this addAction[localize""STR_MAR_Helicopter_Garage"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Air"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Air"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""medic_spawn_2""; life_garage_type = ""Air""; },"""",0,false,false,"""",'playerSide isEqualTo independent ']; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store']; this addAction[localize""STR_Shops_Market"",life_fnc_virt_menu,""med_market"",1.5,false,false,"""",' isNull objectParent player && player distance _target < 5 && playerSide isEqualTo independent ']; this setObjectTextureGlobal [0,""textures\medic_uniform.jpg""];"; + }; + id=1046; + type="B_RangeMaster_F"; + atlOffset=0.14699936; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item102 + { + dataType="Object"; + class PositionInfo + { + position[]={9169.8594,14.40688,21655.969}; + angles[]={0.0012918708,1.9199357,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="removeallWeapons this; this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_W_E_Vehicle Shop"",life_fnc_vehicleShopMenu,[""reb_car"",civilian,[""reb_v_1"",""reb_v_1_1""],""reb"",""Rebel Motorpool - Western Side""],0,false,false,"""",'license_civ_rebel'];"; + name="reb_1_3"; + }; + id=1047; + type="O_Soldier_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item103 + { + dataType="Object"; + class PositionInfo + { + position[]={12293.014,123.59074,8930.6689}; + angles[]={0.025327841,3.4708891,0.022662206}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="removeallWeapons this; this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_W_E_Vehicle Shop"",life_fnc_vehicleShopMenu,[""reb_car"",civilian,""reb_v_2"",""reb"",""Rebel Motorpool - Western Side""],0,false,false,"""",'license_civ_rebel'];"; + name="reb_1_3_1"; + }; + id=1048; + type="O_Soldier_F"; + atlOffset=-7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item104 + { + dataType="Object"; + class PositionInfo + { + position[]={22160.629,3.0823421,14481.019}; + angles[]={6.2805333,4.7199049,6.2805333}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="removeAllWeapons this; this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Pay_Bail"",life_fnc_postBail,"""",0,false,false,"""",' life_canpay_bail && life_is_arrested '];"; + }; + id=1049; + type="B_RangeMaster_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item105 + { + dataType="Object"; + class PositionInfo + { + position[]={14167.42,16.97547,16520.07}; + angles[]={0,5.4994183,6.2826972}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_GoKart_Shop"",life_fnc_vehicleShopMenu,[""kart_shop"",civilian,""kart_shop_1"",""civ"",""Bobby's Kart Shack""]]; this addAction[localize""STR_Shops_C_Kart"",life_fnc_clothingMenu,""kart""];"; + }; + id=1050; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item106 + { + dataType="Object"; + class PositionInfo + { + position[]={13795.639,60.235905,6395.8105}; + angles[]={0.035984326,3.5225456,0.013332055}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Gold_Bars_Buyer"",life_fnc_virt_menu,""gold""];"; + }; + id=1051; + type="C_man_p_fugitive_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item107 + { + dataType="Object"; + class PositionInfo + { + position[]={12682.571,1.969028,14215.651}; + angles[]={0.0039967569,5.6754794,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Boat_Shop"",life_fnc_vehicleShopMenu,[""civ_ship"",civilian,""civ_ship_2"",""civ"",""Billy's Boat Rentals & Ownership""]]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""civ_ship_2""; life_garage_type = ""Ship""; },"""",0,false,false,"""",'playerSide isEqualTo civilian']; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store'];"; + }; + id=1052; + type="C_man_shorts_3_F_euro"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item108 + { + dataType="Object"; + class PositionInfo + { + position[]={16555.859,1.8146445,15550.137}; + angles[]={6.2605233,5.0868196,6.2458706}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Wong_Food_Cart"",life_fnc_virt_menu,""wongs""];"; + }; + id=1053; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item109 + { + dataType="Object"; + class PositionInfo + { + position[]={3308.0859,12.682378,14142.628}; + angles[]={6.0870724,5.2838869,6.2525291}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Wong_Food_Cart"",life_fnc_virt_menu,""wongs""];"; + }; + id=1054; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item110 + { + dataType="Object"; + class PositionInfo + { + position[]={3486.427,8.2531023,12951.547}; + angles[]={6.2803593,3.2372365,6.2819896}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_Shops_Market"",life_fnc_virt_menu,""market""];"; + }; + id=939; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item111 + { + dataType="Object"; + class PositionInfo + { + position[]={14195.179,29.5403,18714.314}; + angles[]={6.2618566,3.8852601,0.025327841}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_MAR_Deliver_Package"",life_fnc_dpFinish,""dp_1"",0,false,false,"""",'!isNil ""life_dp_point"" && life_delivery_in_progress && life_dp_point == _target ']; this addAction[localize""STR_MAR_Get_Delivery_Mission"",life_fnc_getDPMission,""dp_1"",0,false,false,"""",' isNil ""life_dp_point"" && !life_delivery_in_progress '];"; + name="dp_7"; + }; + id=943; + type="C_man_polo_3_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item112 + { + dataType="Object"; + class PositionInfo + { + position[]={17020.955,16.686567,12626.858}; + angles[]={0,5.4694014,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this allowDamage false; this enableSimulation false; this addAction[localize""STR_Shops_Market"",life_fnc_virt_menu,""market""];"; + }; + id=1056; + type="C_man_1"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item113 + { + dataType="Object"; + class PositionInfo + { + position[]={3748.1101,11.725251,13456.199}; + angles[]={0,0.415528,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Station_Shop"",life_fnc_weaponShopMenu,""f_station_store""];this addAction[localize""STR_Shop_Station_Coffee"",life_fnc_virt_menu,""f_station_coffee""];"; + name="Station_shop_1"; + }; + id=1063; + type="C_Nikos_aged"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item114 + { + dataType="Object"; + class PositionInfo + { + position[]={4026.73,25.918402,12590.5}; + angles[]={0,3.7580254,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Station_Shop"",life_fnc_weaponShopMenu,""f_station_store""];this addAction[localize""STR_Shop_Station_Coffee"",life_fnc_virt_menu,""f_station_coffee""];"; + name="Station_shop_2"; + }; + id=1065; + type="C_Nikos_aged"; + atlOffset=0.22426224; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item115 + { + dataType="Object"; + class PositionInfo + { + position[]={5050.6602,17.173388,14436.899}; + angles[]={0,6.1261058,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Station_Shop"",life_fnc_weaponShopMenu,""f_station_store""];this addAction[localize""STR_Shop_Station_Coffee"",life_fnc_virt_menu,""f_station_coffee""];"; + name="Station_shop_3"; + }; + id=1067; + type="C_Nikos_aged"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item116 + { + dataType="Object"; + class PositionInfo + { + position[]={5763.2798,222.57515,20074.902}; + angles[]={0.0039967569,1.6036434,0.0039967569}; + }; + side="Civilian"; + flags=4; + class Attributes + { + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Station_Shop"",life_fnc_weaponShopMenu,""f_station_store""];this addAction[localize""STR_Shop_Station_Coffee"",life_fnc_virt_menu,""f_station_coffee""];"; + name="Station_shop_04"; + }; + id=1069; + type="C_Nikos_aged"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item117 + { + dataType="Object"; + class PositionInfo + { + position[]={6188.1455,27.531702,15096.578}; + angles[]={0,2.6529529,6.2823396}; + }; + side="Civilian"; + flags=4; + class Attributes + { + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Station_Shop"",life_fnc_weaponShopMenu,""f_station_store""];this addAction[localize""STR_Shop_Station_Coffee"",life_fnc_virt_menu,""f_station_coffee""];"; + name="Station_shop_06"; + }; + id=1071; + type="C_Nikos_aged"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item118 + { + dataType="Object"; + class PositionInfo + { + position[]={6798.5112,41.769466,15579.183}; + angles[]={0,4.8059382,6.282495}; + }; + side="Civilian"; + flags=4; + class Attributes + { + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Station_Shop"",life_fnc_weaponShopMenu,""f_station_store""];this addAction[localize""STR_Shop_Station_Coffee"",life_fnc_virt_menu,""f_station_coffee""];"; + name="Station_shop_07"; + }; + id=1073; + type="C_Nikos_aged"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item119 + { + dataType="Object"; + class PositionInfo + { + position[]={8493.2949,177.75328,18277.709}; + angles[]={0,2.8397205,0}; + }; + side="Civilian"; + class Attributes + { + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Station_Shop"",life_fnc_weaponShopMenu,""f_station_store""];this addAction[localize""STR_Shop_Station_Coffee"",life_fnc_virt_menu,""f_station_coffee""];"; + name="Station_shop_08"; + }; + id=1075; + type="C_Nikos_aged"; + atlOffset=0.42167664; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item120 + { + dataType="Object"; + class PositionInfo + { + position[]={9029.1504,111.84761,15714.1}; + angles[]={0,6.1261058,6.2822089}; + }; + side="Civilian"; + flags=4; + class Attributes + { + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Station_Shop"",life_fnc_weaponShopMenu,""f_station_store""];this addAction[localize""STR_Shop_Station_Coffee"",life_fnc_virt_menu,""f_station_coffee""];"; + name="Station_shop_09"; + }; + id=1077; + type="C_Nikos_aged"; + atlOffset=0.19090271; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item121 + { + dataType="Object"; + class PositionInfo + { + position[]={9208.3896,18.161016,12095.399}; + angles[]={0,5.7293572,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Station_Shop"",life_fnc_weaponShopMenu,""f_station_store""];this addAction[localize""STR_Shop_Station_Coffee"",life_fnc_virt_menu,""f_station_coffee""];"; + name="Station_shop_10"; + }; + id=1079; + type="C_Nikos_aged"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item122 + { + dataType="Object"; + class PositionInfo + { + position[]={11848.3,12.690501,14144.8}; + angles[]={0,4.9514294,6.2823396}; + }; + side="Civilian"; + flags=4; + class Attributes + { + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Station_Shop"",life_fnc_weaponShopMenu,""f_station_store""];this addAction[localize""STR_Shop_Station_Coffee"",life_fnc_virt_menu,""f_station_coffee""];"; + name="Station_shop_11"; + }; + id=1081; + type="C_Nikos_aged"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item123 + { + dataType="Object"; + class PositionInfo + { + position[]={12032.4,27.802143,15811.6}; + angles[]={0,6.1261058,6.2826972}; + }; + side="Civilian"; + flags=4; + class Attributes + { + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Station_Shop"",life_fnc_weaponShopMenu,""f_station_store""];this addAction[localize""STR_Shop_Station_Coffee"",life_fnc_virt_menu,""f_station_coffee""];"; + name="Station_shop_12"; + }; + id=1083; + type="C_Nikos_aged"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item124 + { + dataType="Object"; + class PositionInfo + { + position[]={14185.2,16.76882,16533.902}; + angles[]={0,3.7553027,6.2826972}; + }; + side="Civilian"; + flags=4; + class Attributes + { + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Station_Shop"",life_fnc_weaponShopMenu,""f_station_store""];this addAction[localize""STR_Shop_Station_Coffee"",life_fnc_virt_menu,""f_station_coffee""];"; + name="Station_shop_13"; + }; + id=1085; + type="C_Nikos_aged"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item125 + { + dataType="Object"; + class PositionInfo + { + position[]={14240.7,18.607712,18315.301}; + angles[]={0,3.9735911,6.282495}; + }; + side="Civilian"; + flags=4; + class Attributes + { + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Station_Shop"",life_fnc_weaponShopMenu,""f_station_store""];this addAction[localize""STR_Shop_Station_Coffee"",life_fnc_virt_menu,""f_station_coffee""];"; + name="Station_shop_14"; + }; + id=1087; + type="C_Nikos_aged"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item126 + { + dataType="Object"; + class PositionInfo + { + position[]={15319.8,16.733707,17595.402}; + angles[]={0,2.9568846,6.2826972}; + }; + side="Civilian"; + flags=4; + class Attributes + { + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Station_Shop"",life_fnc_weaponShopMenu,""f_station_store""];this addAction[localize""STR_Shop_Station_Coffee"",life_fnc_virt_menu,""f_station_coffee""];"; + name="Station_shop_15"; + }; + id=1089; + type="C_Nikos_aged"; + atlOffset=0.20879364; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item127 + { + dataType="Object"; + class PositionInfo + { + position[]={15795.9,14.480436,17465.602}; + angles[]={0,3.9331865,6.2815661}; + }; + side="Civilian"; + flags=4; + class Attributes + { + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Station_Shop"",life_fnc_weaponShopMenu,""f_station_store""];this addAction[localize""STR_Shop_Station_Coffee"",life_fnc_virt_menu,""f_station_coffee""];"; + name="Station_shop_16"; + }; + id=1091; + type="C_Nikos_aged"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item128 + { + dataType="Object"; + class PositionInfo + { + position[]={16757.4,12.749768,12499.399}; + angles[]={0,5.5619974,6.2823396}; + }; + side="Civilian"; + flags=4; + class Attributes + { + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Station_Shop"",life_fnc_weaponShopMenu,""f_station_store""];this addAction[localize""STR_Shop_Station_Coffee"",life_fnc_virt_menu,""f_station_coffee""];"; + name="Station_shop_17"; + }; + id=1093; + type="C_Nikos_aged"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item129 + { + dataType="Object"; + class PositionInfo + { + position[]={16859.699,12.622403,15468.5}; + angles[]={0,4.0891318,6.282495}; + }; + side="Civilian"; + flags=4; + class Attributes + { + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Station_Shop"",life_fnc_weaponShopMenu,""f_station_store""];this addAction[localize""STR_Shop_Station_Coffee"",life_fnc_virt_menu,""f_station_coffee""];"; + name="Station_shop_18"; + }; + id=1095; + type="C_Nikos_aged"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item130 + { + dataType="Object"; + class PositionInfo + { + position[]={17435.1,5.7360859,13937.899}; + angles[]={0.00084572798,4.8784399,6.2823396}; + }; + side="Civilian"; + flags=4; + class Attributes + { + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Station_Shop"",life_fnc_weaponShopMenu,""f_station_store""];this addAction[localize""STR_Shop_Station_Coffee"",life_fnc_virt_menu,""f_station_coffee""];"; + name="Station_shop_19"; + }; + id=1097; + type="C_Nikos_aged"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item131 + { + dataType="Object"; + class PositionInfo + { + position[]={19955.301,60.22678,11432.699}; + angles[]={0,0.75088423,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Station_Shop"",life_fnc_weaponShopMenu,""f_station_store""];this addAction[localize""STR_Shop_Station_Coffee"",life_fnc_virt_menu,""f_station_coffee""];"; + name="Station_shop_20"; + }; + id=1099; + type="C_Nikos_aged"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item132 + { + dataType="Object"; + class PositionInfo + { + position[]={20767.199,37.012917,16670.801}; + angles[]={0,2.1910515,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Station_Shop"",life_fnc_weaponShopMenu,""f_station_store""];this addAction[localize""STR_Shop_Station_Coffee"",life_fnc_virt_menu,""f_station_coffee""];"; + name="Station_shop_21"; + }; + id=1101; + type="C_Nikos_aged"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item133 + { + dataType="Object"; + class PositionInfo + { + position[]={21234,23.431517,7093.3096}; + angles[]={0,5.3783193,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Station_Shop"",life_fnc_weaponShopMenu,""f_station_store""];this addAction[localize""STR_Shop_Station_Coffee"",life_fnc_virt_menu,""f_station_coffee""];"; + name="Station_shop_22"; + }; + id=1103; + type="C_Nikos_aged"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item134 + { + dataType="Object"; + class PositionInfo + { + position[]={23362.199,13.044027,19813.301}; + angles[]={0,2.7875004,6.2823396}; + }; + side="Civilian"; + flags=4; + class Attributes + { + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Station_Shop"",life_fnc_weaponShopMenu,""f_station_store""];this addAction[localize""STR_Shop_Station_Coffee"",life_fnc_virt_menu,""f_station_coffee""];"; + name="Station_shop_23"; + }; + id=1105; + type="C_Nikos_aged"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item135 + { + dataType="Object"; + class PositionInfo + { + position[]={25691.199,21.211159,21390.801}; + angles[]={0,2.4514022,0}; + }; + side="Civilian"; + flags=4; + class Attributes + { + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Station_Shop"",life_fnc_weaponShopMenu,""f_station_store""];this addAction[localize""STR_Shop_Station_Coffee"",life_fnc_virt_menu,""f_station_coffee""];"; + name="Station_shop_24"; + }; + id=1107; + type="C_Nikos_aged"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item136 + { + dataType="Object"; + class PositionInfo + { + position[]={14034.074,25.744526,18759.918}; + angles[]={0,2.2652106,6.2826972}; + }; + side="Civilian"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize ""STR_MAR_Car_shop"",life_fnc_vehicleShopMenu,[""civ_car"",civilian,""civ_car_3"",""civ"",""Bruce's New & Used Auto's""]];"; + }; + id=941; + type="C_man_p_beggar_F_afro"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item137 + { + dataType="Object"; + class PositionInfo + { + position[]={17504.932,12.985387,13298.205}; + angles[]={6.2778621,3.9357698,6.2765183}; + }; + side="Civilian"; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Medical_Assistance"",life_fnc_healHospital,"""",1.5,false,false,"""",'isNull objectParent player && player distance _target < 5'];"; + }; + id=1168; + type="C_man_polo_3_F"; + atlOffset=0.25; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item138 + { + dataType="Object"; + class PositionInfo + { + position[]={15608.088,18.800364,17220.947}; + angles[]={0,3.9228544,0}; + }; + side="Civilian"; + class Attributes + { + skill=0.60000002; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Medical_Assistance"",life_fnc_healHospital,"""",1.5,false,false,"""",'isNull objectParent player && player distance _target < 5'];"; + }; + id=1172; + type="C_man_polo_3_F"; + atlOffset=0.25; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="enableSimulation"; + expression="if !(is3DEN) then {_this enablesimulationglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item139 + { + dataType="Object"; + class PositionInfo + { + position[]={4543.0942,263.8743,15403.018}; + }; + side="Civilian"; + flags=5; + class Attributes + { + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_News_AddAction"",life_fnc_newsBroadcast,"""",1.5,false,false,"""",'isNull objectParent player && player distance _target < 4']; this addAction[localize""STR_NOTF_ATM"",life_fnc_atmMenu,"""",0,false,false,"""",' isNull objectParent player && player distance _target < 4 '];"; + }; + id=1175; + type="C_journalist_F"; + class CustomAttributes + { + class Attribute0 + { + property="pitch"; + expression="_this setpitch _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "SCALAR" + }; + }; + value=0.95999998; + }; + }; + }; + nAttributes=1; + }; + }; + }; + class Attributes + { + }; + id=944; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="NPC"; + }; + }; + }; + nAttributes=1; + }; }; - class Item178 + class Item842 { - position[]={3730.8054,18.870001,12973.504}; - name="medic_spawn_1"; - type="Empty"; + dataType="Group"; + side="Independent"; + class Entities + { + items=6; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8424.9258,99.932129,25177.275}; + angles[]={0.26680848,3.2307963,6.2073331}; + }; + side="Independent"; + flags=6; + class Attributes + { + skill=0.60000002; + name="medic_1"; + description="WhiteListed - EMS Medic 1"; + isPlayable=1; + }; + id=1058; + type="B_RangeMaster_F"; + }; + class Item1 + { + dataType="Object"; + class PositionInfo + { + position[]={8425.4766,99.273796,25179.539}; + angles[]={0.26557502,3.2307963,6.2073312}; + }; + side="Independent"; + flags=4; + class Attributes + { + skill=0.60000002; + name="medic_2"; + description="WhiteListed - EMS Medic 2"; + isPlayable=1; + }; + id=1059; + type="B_RangeMaster_F"; + }; + class Item2 + { + dataType="Object"; + class PositionInfo + { + position[]={8427.6777,99.308228,25178.799}; + angles[]={0.26557502,3.2307963,6.2073312}; + }; + side="Independent"; + flags=4; + class Attributes + { + skill=0.60000002; + name="medic_3"; + description="WhiteListed - EMS Medic 3"; + isPlayable=1; + }; + id=1060; + type="B_RangeMaster_F"; + }; + class Item3 + { + dataType="Object"; + class PositionInfo + { + position[]={8428.2236,99.713036,25177.16}; + angles[]={0.26681554,3.2307963,6.2073312}; + }; + side="Independent"; + flags=4; + class Attributes + { + skill=0.60000002; + name="medic_4"; + description="WhiteListed - EMS Medic 4"; + isPlayable=1; + }; + id=1061; + type="B_RangeMaster_F"; + }; + class Item4 + { + dataType="Object"; + class PositionInfo + { + position[]={8427.8242,100.57317,25174.123}; + angles[]={0.26680848,3.2307963,6.2073331}; + }; + side="Independent"; + flags=4; + class Attributes + { + skill=0.60000002; + name="medic_5"; + description="WhiteListed - EMS Medic 5"; + isPlayable=1; + }; + id=1162; + type="B_RangeMaster_F"; + }; + class Item5 + { + dataType="Object"; + class PositionInfo + { + position[]={8426.2715,101.17136,25172.354}; + angles[]={0.26433292,3.2307963,6.2099824}; + }; + side="Independent"; + flags=4; + class Attributes + { + skill=0.60000002; + name="medic_6"; + description="WhiteListed - EMS Medic 6"; + isPlayable=1; + }; + id=1164; + type="B_RangeMaster_F"; + }; + }; + class Attributes + { + }; + id=1057; + class CustomAttributes + { + class Attribute0 + { + property="groupID"; + expression="_this setGroupID [_value];"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Paramedic"; + }; + }; + }; + nAttributes=1; + }; }; - class Item179 + class Item843 { - position[]={15596.775,18.531496,17184.191}; - name="medic_spawn_2"; + dataType="Logic"; + class PositionInfo + { + position[]={8495.3213,102.73811,25178.83}; + }; + name="hc_1"; + isPlayable=1; + description="Headless Client"; + id=1108; + type="HeadlessClient_F"; + atlOffset=7.6293945e-006; + }; + class Item844 + { + dataType="Marker"; + position[]={8430.2295,106.05005,25179.502}; + name="respawn_guerrila"; type="Empty"; - angle=-39.342587; - }; - class Item180 - { - position[]={9024.7109,30.520811,12121.548}; - name="atm_marker_3"; - type="loc_Tourism"; - colorName="ColorGreen"; - angle=13.824054; - }; - class Item181 - { - position[]={14031.674,25.92466,18743.428}; - name="atm_marker_2"; - type="loc_Tourism"; - colorName="ColorGreen"; - angle=36.9492; - }; - class Item182 - { - position[]={14625.156,17.91,16790.781}; - name="atm_marker_4"; - type="loc_Tourism"; - colorName="ColorGreen"; - angle=135.98599; - }; - class Item183 - { - position[]={16885.555,20.481829,12646.81}; - name="atm_marker_5"; - type="loc_Tourism"; - colorName="ColorGreen"; - angle=-72.710434; - }; - class Item184 - { - position[]={25694.893,20.761673,21387.438}; - name="atm_marker_4_1"; - type="loc_Tourism"; - colorName="ColorGreen"; - angle=230.98909; - }; - class Item185 - { - position[]={27032.053,20.738028,23230.627}; - name="atm_marker_2_1"; - type="loc_Tourism"; - colorName="ColorGreen"; - angle=-44.338551; - }; - class Item186 - { - position[]={20475.064,34.895618,8853.1426}; - name="atm_marker_2_2"; - type="loc_Tourism"; - colorName="ColorGreen"; - angle=128.67664; - }; - class Item187 - { - position[]={5102.6821,48.943104,11237.706}; - name="atm_marker_2_3"; - type="loc_Tourism"; - colorName="ColorGreen"; - angle=-35.335003; - }; - class Item188 - { - position[]={9221.4473,121.15643,15824.147}; - name="atm_marker_2_4"; - type="loc_Tourism"; - colorName="ColorGreen"; - angle=-24.492966; - }; - class Item189 - { - position[]={8648.0039,182.61882,18256.303}; - name="atm_marker_2_5"; - type="loc_Tourism"; - colorName="ColorGreen"; - angle=243.96106; - }; - class Item190 - { - position[]={20782.402,37.286591,16680.141}; - name="atm_marker_2_6"; - type="loc_Tourism"; - colorName="ColorGreen"; - angle=127.20448; - }; - class Item191 - { - position[]={12613.043,16.704132,14381.132}; - name="atm_marker_2_7"; - type="loc_Tourism"; - colorName="ColorGreen"; - angle=153.85992; + id=1110; + atlOffset=7.1277847; }; - class Item192 + class Item845 { - position[]={16289.748,25.249407,17295.527}; - name="atm_marker_2_8"; - type="loc_Tourism"; - colorName="ColorGreen"; - angle=124.04665; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8458.0732,85.039246,25227.771}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_76"; + description="Civilian 76"; + isPlayable=1; + }; + id=1112; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=1111; }; - class Item193 + class Item846 { - position[]={6185.6621,26.661465,15077.207}; - name="atm_marker_2_9"; - type="loc_Tourism"; - colorName="ColorGreen"; - angle=131.43578; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8457.1992,84.531029,25225.902}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_77"; + description="Civilian 77"; + isPlayable=1; + }; + id=1114; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=1113; }; - class Item194 + class Item847 { - position[]={14664.1,17.91,16745.1}; - name="respawn_west_1"; - type="Empty"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8459.1152,84.541832,25225.016}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_78"; + description="Civilian 78"; + isPlayable=1; + }; + id=1116; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=1115; }; - class Item195 + class Item848 { - position[]={9184.4463,14.484292,21649.455}; - name="reb_v_1_1"; - type="Empty"; - angle=142.37651; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8460.3467,85.085823,25226.885}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_79"; + description="Civilian 79"; + isPlayable=1; + }; + id=1118; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=1117; }; - class Item196 + class Item849 { - position[]={3738.3508,18.830826,12991.575}; - name="med_car_1"; - type="Empty"; - angle=-95.485893; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8460.4248,84.50029,25224.205}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_80"; + description="Civilian 80"; + isPlayable=1; + }; + id=1120; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=1119; }; - class Item197 + class Item850 { - position[]={15600.498,18.554039,17211.836}; - name="hospital_2"; - text="@STR_MAR_Hospital"; - type="loc_Hospital"; - colorName="ColorRed"; - angle=-52.633999; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8461.501,84.40126,25223.271}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_81"; + description="Civilian 81"; + isPlayable=1; + }; + id=1122; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=1121; }; - class Item198 + class Item851 { - position[]={17495.891,12.760118,13290.289}; - name="hospital_3"; - text="@STR_MAR_Hospital"; - type="loc_Hospital"; - colorName="ColorRed"; - angle=-45.916607; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8461.8428,84.972809,25225.699}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_82"; + description="Civilian 82"; + isPlayable=1; + }; + id=1124; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=1123; }; - class Item199 + class Item852 { - position[]={17493.104,12.868838,13265.117}; - name="medic_spawn_3"; - type="Empty"; - angle=12.349455; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8456.3262,84.288414,25223.691}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_83"; + description="Civilian 83"; + isPlayable=1; + }; + id=1126; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=1125; }; - class Item200 + class Item853 { - position[]={17471.252,12.817257,13280.558}; - name="med_car_2"; - type="Empty"; - angle=-138.86894; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8458.3213,84.199829,25223.283}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_84"; + description="Civilian 84"; + isPlayable=1; + }; + id=1128; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=1127; }; - class Item201 + class Item854 { - position[]={15573.91,18.490637,17202.232}; - name="med_car_3"; - type="Empty"; - angle=-130.62582; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8455.5,84.294289,25221.227}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_85"; + description="Civilian 85"; + isPlayable=1; + }; + id=1130; + type="C_man_1"; + atlOffset=7.6293945e-006; + }; + }; + class Attributes + { + }; + id=1129; + atlOffset=7.6293945e-006; }; - class Item202 + class Item855 { - position[]={14166.97,16.696758,16522.855}; - name="kart_shop_text_1"; - text="@STR_MAR_GoKart_Shop"; - type="loc_Power"; - colorName="ColorBlue"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8463.2148,84.498047,25222.021}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_86"; + description="Civilian 86"; + isPlayable=1; + }; + id=1132; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=1131; }; - class Item203 + class Item856 { - position[]={14161.376,16.312208,16532.488}; - name="kart_shop_1"; - type="Empty"; - angle=298.31378; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8463.2764,84.909081,25224.764}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_87"; + description="Civilian 87"; + isPlayable=1; + }; + id=1134; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=1133; }; - class Item204 + class Item857 { - position[]={3734.157,18.867834,12978.31}; - name="atm_marker_1_1"; - type="loc_Tourism"; - colorName="ColorGreen"; - angle=-177.21307; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8464.6504,84.812256,25223.705}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_88"; + description="Civilian 88"; + isPlayable=1; + }; + id=1136; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=1135; }; - class Item205 + class Item858 { - position[]={15590.591,18.56068,17184.236}; - name="atm_marker_1_2"; - type="loc_Tourism"; - colorName="ColorGreen"; - angle=-221.65602; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8464.1973,84.86541,25220.354}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_89"; + description="Civilian 89"; + isPlayable=1; + }; + id=1138; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=1137; }; - class Item206 + class Item859 { - position[]={17486.479,12.888057,13266.659}; - name="atm_marker_1_3"; - type="loc_Tourism"; - colorName="ColorGreen"; - angle=-225.52553; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8465.6475,84.701126,25222.271}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_90"; + description="Civilian 90"; + isPlayable=1; + }; + id=1140; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=1139; }; - class Item207 + class Item860 { - position[]={13795.459,60.220287,6396.0879}; - name="gold_bar_dealer"; - text="@STR_MAR_Gold_Bars_Buyer"; - type="loc_ViewTower"; - colorName="ColorYellow"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8465.6318,85.119942,25219.666}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_91"; + description="Civilian 91"; + isPlayable=1; + }; + id=1142; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=1141; }; - class Item208 + class Item861 { - position[]={14150.938,19.092634,16301.9}; - name="atm_marker_4_2"; - type="loc_Tourism"; - colorName="ColorGreen"; - angle=131.50685; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8466.8779,84.990494,25221.24}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_92"; + description="Civilian 92"; + isPlayable=1; + }; + id=1144; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=1143; }; - class Item209 + class Item862 { - position[]={13815.971,20.243898,18985.834}; - name="atm_marker_2_10"; - type="loc_Tourism"; - colorName="ColorGreen"; - angle=139.89178; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8459.6025,85.66111,25229.836}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_93"; + description="Civilian 93"; + isPlayable=1; + }; + id=1146; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=1145; }; - class Item210 + class Item863 { - position[]={11693.286,37.651257,15914.844}; - name="gang_area_1"; - text="@STR_MAR_Gang_Hideout1"; - type="hd_warning"; - colorName="ColorRed"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8461.3262,85.569611,25228.629}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_94"; + description="Civilian 94"; + isPlayable=1; + }; + id=1148; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=1147; }; - class Item211 + class Item864 { - position[]={4885.7808,17.059162,14418.125}; - name="gang_area_2"; - text="@STR_MAR_Gang_Hideout2"; - type="hd_warning"; - colorName="ColorRed"; - angle=-358.09299; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8463.2676,85.528191,25227.736}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_95"; + description="Civilian 95"; + isPlayable=1; + }; + id=1150; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=1149; }; - class Item212 + class Item865 { - position[]={18383.779,27.092974,15248.242}; - name="gang_area_3"; - text="@STR_MAR_Gang_Hideout3"; - type="hd_warning"; - colorName="ColorRed"; - angle=2.7999959; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8464.2783,85.373352,25226.549}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_96"; + description="Civilian 96"; + isPlayable=1; + }; + id=1152; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=1151; }; - class Item213 + class Item866 { - position[]={3307.8906,12.716581,14142.727}; - name="turle_dealer_1"; - text="@STR_MAR_Turtle_Dealer"; - type="mil_dot"; - colorName="ColorRed"; - angle=77.713181; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8466.0811,85.333748,25225.734}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_97"; + description="Civilian 97"; + isPlayable=1; + }; + id=1154; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=1153; }; - class Item214 + class Item867 { - position[]={16556.398,1.8017138,15550.469}; - name="turle_dealer_2"; - text="@STR_MAR_Turtle_Dealer"; - type="mil_dot"; - colorName="ColorRed"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8467.0322,85.186295,25224.605}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_98"; + description="Civilian 98"; + isPlayable=1; + }; + id=1156; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=1155; }; - class Item215 + class Item868 { - position[]={7757.6431,108.63041,19958.082}; - name="hunting_zone"; - markerType="ELLIPSE"; - type="Empty"; - colorName="ColorWhite"; - a=1000; - b=1000; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8467.9238,85.056656,25223.455}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_99"; + description="Civilian 99"; + isPlayable=1; + }; + id=1158; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=1157; }; - class Item216 + class Item869 { - position[]={7604.667,128.90898,19991.012}; - name="hunting_marker"; - text="@STR_MAR_Hunting_Grounds"; - type="mil_join"; - colorName="ColorRed"; + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={8468.7168,85.640663,25226.15}; + angles[]={0.086446159,0.51036918,6.232553}; + }; + side="Civilian"; + flags=6; + class Attributes + { + skill=0.60000002; + name="civ_100"; + description="Civilian 100"; + isPlayable=1; + }; + id=1160; + type="C_man_1"; + }; + }; + class Attributes + { + }; + id=1159; }; }; }; -class Intro -{ - addOns[]= - { - "a3_map_stratis", - "a3_map_altis" - }; - addOnsAuto[]= - { - "a3_map_altis" - }; - randomSeed=8749860; - class Intel - { - timeOfChanges=1800.0002; - startWeather=0.30000001; - startWind=0.1; - startWaves=0.1; - forecastWeather=0.30000001; - forecastWind=0.1; - forecastWaves=0.1; - forecastLightnings=0.1; - year=2035; - month=7; - day=6; - hour=14; - minute=15; - startFogDecay=0.0049333; - forecastFogDecay=0.0049333; - }; -}; -class OutroWin -{ - addOns[]= - { - "a3_map_stratis", - "a3_map_altis" - }; - addOnsAuto[]= - { - "a3_map_altis" - }; - randomSeed=285203; - class Intel - { - timeOfChanges=1800.0002; - startWeather=0.30000001; - startWind=0.1; - startWaves=0.1; - forecastWeather=0.30000001; - forecastWind=0.1; - forecastWaves=0.1; - forecastLightnings=0.1; - year=2035; - month=7; - day=6; - hour=14; - minute=15; - startFogDecay=0.0049333; - forecastFogDecay=0.0049333; - }; -}; -class OutroLoose -{ - addOns[]= - { - "a3_map_stratis", - "a3_map_altis" - }; - addOnsAuto[]= - { - "a3_map_altis" - }; - randomSeed=3530506; - class Intel - { - timeOfChanges=1800.0002; - startWeather=0.30000001; - startWind=0.1; - startWaves=0.1; - forecastWeather=0.30000001; - forecastWind=0.1; - forecastWaves=0.1; - forecastLightnings=0.1; - year=2035; - month=7; - day=6; - hour=14; - minute=15; - startFogDecay=0.0049333; - forecastFogDecay=0.0049333; - }; -}; diff --git a/Altis_Life.Altis/script_macros.hpp b/Altis_Life.Altis/script_macros.hpp deleted file mode 100644 index f347a3a2..00000000 --- a/Altis_Life.Altis/script_macros.hpp +++ /dev/null @@ -1,82 +0,0 @@ -/* System Wide Stuff */ -#define SYSTEM_TAG "life" -#define ITEM_TAG format["%1%2",SYSTEM_TAG,"item_"] -#define SUB(var1,var2) var1 = var1 - var2 -#define ADD(var1,var2) var1 = var1 + var2 -#define SEL(ARRAY,INDEX) (ARRAY select INDEX) -#define CASH life_cash -#define BANK life_atmbank -#define GANG_FUNDS grpPlayer getVariable ["gang_bank",0]; - -/* - remoteExec Section - When uncommented it enables proper testing via local testing - Otherwise leave it commented out for "LIVE" servers -*/ -#define DEBUG 1 - -#ifdef DEBUG -#define RCLIENT 0 -#else -#define RCLIENT -2 -#endif - -#define RSERV 2 -#define RANY 0 - -//Namespace Macros -#define SVAR_MNS missionNamespace setVariable -#define SVAR_UINS uiNamespace setVariable -#define SVAR_PNS parsingNamespace setVariable -#define GVAR_MNS missionNamespace getVariable -#define GVAR_UINS uiNamespace getVariable - -//Scripting Macros -#define CONST(var1,var2) var1 = compileFinal (if(typeName var2 == "STRING") then {var2} else {str(var2)}) -#define CONSTVAR(var) var = compileFinal (if(typeName var == "STRING") then {var} else {str(var)}) -#define FETCH_CONST(var) (call var) -#define PVAR_ALL(var) publicVariable var -#define PVAR_SERV(var) publicVariableServer var -#define PVAR_ID(var,id) id publicVariableClient var -#define GVAR getVariable -#define SVAR setVariable -#define RIFLE primaryWeapon player -#define RIFLE_ITEMS primaryWeaponItems player -#define PISTOL handgunWeapon player -#define PISTOL_ITEMS handgunItems player -#define LAUNCHER secondaryWeapon player - -//Display Macros -#define CONTROL(disp,ctrl) ((findDisplay ##disp) displayCtrl ##ctrl) -#define CONTROL_DATA(ctrl) (lbData[ctrl,lbCurSel ctrl]) -#define CONTROL_DATAI(ctrl,index) ctrl lbData index - -//System Macros -#define grpPlayer group player -#define steamid getPlayerUID player -#define LICENSE_VARNAME(varName,flag) format["license_%1_%2",flag,M_CONFIG(getText,"Licenses",varName,"variable")] -#define LICENSE_VALUE(varName,flag) GVAR_MNS [LICENSE_VARNAME(varName,flag),false] -#define ITEM_VARNAME(varName) format["life_inv_%1",M_CONFIG(getText,"VirtualItems",varName,"variable")] -#define ITEM_VALUE(varName) GVAR_MNS [ITEM_VARNAME(varName),0] -#define ITEM_ILLEGAL(varName) M_CONFIG(getNumber,"VirtualItems",varName,"illegal") -#define ITEM_SELLPRICE(varName) M_CONFIG(getNumber,"VirtualItems",varName,"sellPrice") -#define ITEM_BUYPRICE(varName) M_CONFIG(getNumber,"VirtualItems",varName,"buyPrice") -#define ITEM_NAME(varName) M_CONFIG(getText,"VirtualItems",varName,"displayName") - -//Condition Macros -#define EQUAL(condition1,condition2) condition1 isEqualTo condition2 -#define KINDOF_ARRAY(a,b) [##a,##b] call {_veh = _this select 0;_types = _this select 1;_res = false; {if (_veh isKindOf _x) exitwith { _res = true };} forEach _types;_res} - -//Config Macros -#define FETCH_CONFIG(TYPE,CFG,SECTION,CLASS,ENTRY) TYPE(configFile >> CFG >> SECTION >> CLASS >> ENTRY) -#define FETCH_CONFIG2(TYPE,CFG,CLASS,ENTRY) TYPE(configFile >> CFG >> CLASS >> ENTRY) -#define FETCH_CONFIG3(TYPE,CFG,SECTION,CLASS,ENTRY,SUB) TYPE(configFile >> CFG >> SECTION >> CLASS >> ENTRY >> SUB) -#define FETCH_CONFIG4(TYPE,CFG,SECTION,CLASS,ENTRY,SUB,SUB2) TYPE(configFile >> CFG >> SECTION >> CLASS >> ENTRY >> SUB >> SUB2) -#define M_CONFIG(TYPE,CFG,CLASS,ENTRY) TYPE(missionConfigFile >> CFG >> CLASS >> ENTRY) -#define BASE_CONFIG(CFG,CLASS) inheritsFrom(configFile >> CFG >> CLASS) -#define LIFE_SETTINGS(TYPE,SETTING) TYPE(missionConfigFile >> "Life_Settings" >> SETTING) -#define CONFIG_VEHICLES "CfgVehicles" -#define CONFIG_LIFE_VEHICLES "LifeCfgVehicles" -#define CONFIG_WEAPONS "CfgWeapons" -#define CONFIG_MAGAZINES "CfgMagazines" -#define CONFIG_GLASSES "CfgGlasses" \ No newline at end of file diff --git a/Altis_Life.Altis/stringtable.xml b/Altis_Life.Altis/stringtable.xml deleted file mode 100644 index f39e36df..00000000 --- a/Altis_Life.Altis/stringtable.xml +++ /dev/null @@ -1,5791 +0,0 @@ - - - - - Bruce's Outback Outfits - Loja de Roupas - Sklep odzieżowy - - - Altis Police Department Shop - Loja de Roupas Policiais - Sklep Policyjny - - - Mohammed's Jihadi Shop - Loja de Roupas Rebeldes - Sklep samobójców AKBAR - - - Steve's Diving Shop - Loja de equipamentos para Mergulho - Sklep dla nurków - - - Bobby's Kart-Racing Outfits - Loja de equipamentos para Kart - Sklep Kartingowy - - - Altis Market - Altis Markt - Mercato - Marché - Mercado - Market Altis - - - Rebel Market - Rebellen Markt - Mercato Ribelle - Marché Rebel - Mercado Rebelde - Market Rebeliantów - - - Gang Market - Gang Markt - Mercato Gang - Marché de Gang - Mercado da Gangue - Market Gangu - - - Wong's Food Cart - Wong's Spezialitäten - Alimentari - Wong Alimentation - Praça de Alimentação - Przysmaki Wonga - - - Gyro's Coffee - Gyro's Café - Caffè - Café de Gyro - Café do Gyro - Kawiarnia - - - Tonic's Narcotics - Drogendealer - Spacciatore - Dealer de Drogue - Traficante - Sprzedawca 'Trawy' - - - Oil Trader - Ölhändler - Vendita Petrolio - Acheteur de Pétrole - Comprador de Petróleo - Skup Ropy - - - Local Fish Market - Fischmarkt - Pescivendolo - Marché de Poissons - Mercado de Peixes - Sklep Rybny - - - Glass Trader - Glashändler - Vendita Vetro - Acheteur de Verre - Comprador de Vidro - Skup Szkła - - - Altis Industrial Trader - Altis Industriehandel - Vendita materiali industriali - Acheteur Industriel - Comprador de Material Indústrial - Skup materiałów przemysłowych - - - APD Item Shop - APD Gegenstände - Negozio Polizia - Equipement de Police - Equipamentos da Polícia - Zbrojownia Policji - - - Juan's Cement Laying - Juan's Zementleger - Vendita Cemento - Poseur de Ciment - Comprador de Cimento - Wytwórnia cementu - - - Cash 4 Gold - Goldhändler - Vendita Oro - Acheteur d'Or - Comprador de Ouro - Skup złota - - - Diamond Dealer - Juwelier - Gioielleria - Bijouterie - Comprador de Diamante - Skup Diamentów - - - Salt Trader - Salzhändler - Vendita Sale - Acheteur de Sel - Comprador de Sal - Skup soli - - - - - Close - Schließen - Fermer - Chiudi - Fechar - Zamknij - - - Sell - Verkaufen - Vendre - Vendi - Vender - Sprzedaj - - - Buy - Kaufen - Acheter - Compra - Comprar - Kup - - - Give - Geben - Donner - Dai - Dar - Daj - - - Use - Benutzen - Utiliser - Usa - Usar - Użyj - - - Remove - Entfernen - Supprimer - Rimuovi - Remover - Usuń - - - Settings - Einstellungen - Paramètres - Impostazioni - Configurar - Opcje - - - Rent - Mieten - Louer - Affitta - Alugar - Wynajmij - - - Retrieve - Abrufen - Récupérer - Ritira - Recuperar - Odzyskaj - - - You did not select anything. - Du hast nichts ausgewählt. - Vous n'avez rien sélectionné. - Non hai selezionato nulla. - Você não selecionou nada. - Niczego nie zaznaczyłeś. - - - Yes - Ja - Oui - Si - Sim - Tak - - - No - Nein - Aucun - No - Não - Nie - - - Cancel - Abbrechen - Annulée - Annulla - Cancelar - Anuluj - - - - - Admin Menu - Admin Menü - Menu Admin - Menu Admin - Menu Admin - Admin Menu - - - Put the amount you want to compensate: - Coloque a quantidade que você quer compensar: - Wprowadź wartość rekompensaty - - - Get ID - ID abfragen - Obtenir ID - Vedi ID - Obter ID - ID gracza - - - Spectate - Spectate - Zuschauen - Regardez - Observar - Obserwuj - - - Teleport - Teleport - Teleport - Teleport - Teleport - Teleport - - - TP Here - TP Here - TP Hier - TP Ici - TP Aqui - Do Mnie - - - Debug - Debug - Debug - Debug - Debug - Debug - - - Comp - Comp - Comp - Comp - Comp - Comp - - - GodMode - GodMode - Gott - Dieu - GodMode - GodMode - - - Freeze - Freeze - Freeze - Geler - Congelar - Zamroź - - - Markers - Markers - Markers - Markers - Marcações - Markery - - - - - Querying... - Abfrage läuft... - Interrogation... - Ricerca... - Pesquisando... - Wyszukuję... - - - Searching Database for vehicles... - Durchsuche nach Fahrzeugen... - Recherche des véhicules dans le garage... - Ricerca di veicoli nel Database... - Buscando por veículo no banco de dados... - Szukam pojazdu w bazie danych... - - - You are already querying a player. - Du fragst bereits einen Spieler ab. - Vous avez déjà interrogé ce joueur. - Stai già ispezionando un giocatore. - Você já está buscando por um jogador. - Przeszukujesz gracza - - - Player no longer exists? - Spieler existiert nicht mehr? - Le joueur ne semble pas exister - Il giocatore non esiste più - Jogador não existe mais? - Gracz już nie istnieje? - - - You are about to give yourself $%1 to compensate to another player <br/><br/>You must give this cash to the person you are compensating manually. - You are about to give yourself $%1 to compensate to another player <br/><br/>You must give this cash to the person you are compensating manually. - To Be Changed - Vous êtes sur le point de vous donner $%1 pour compenser à un autre joueur <br/><br/> S'il vous plaît donner à cette à la personne vous compensez manuellement - Você está prestes a dar para você mesmo R$%1 para compensar outro jogador <br/><br/>Você deve dar este dinheiro para a pessoa que você está compensando manualmente. - Właśnie przydzieliłeś sobie $%1 w celu rekompensaty graczowi <br/><br/>Musisz przekazać te środki osobiście osobie poszkodowanej. - - - You have added $%1 to your account. - You have added $%1 to your account. - To Be Changed - Vous avez ajouté $%1 à votre compte - Você adicionou R$%1 em sua conta. - Przekazałeś na konto $%1 - - - You can not go above 999999. - You can not go above 999999. - To Be Changed - Vous ne pouvez pas aller au-dessus $999999 - Você não pode ir além de 999999. - Nie można obracać kwotami wyższymi niż 999999. - - - Please type in the amount to compensate. - Please type in the amount to compensate. - To Be Changed - S'il vous plaît entrer la quantité pour compenser - Por favor, insira a quantidade para compensar. - Wprowadź kwotę rekompensaty - - - You have disabled %1's input. - You have disabled %1's input. - To Be Changed - Vous avez désactivé %1's contrôles - Você desabilitou as entradas de %1. - Zablokowałeś grę gracza $%1 - - - You have enabled %1's input. - You have enabled %1's input. - To Be Changed - Vous avez permis %1's contrôles - Você habilitou as entradas de %1. - Odblokowałeś grę gracza $%1 - - - You can't do that dumbass. - You can't do that dumbass. - To Be Changed - Vous ne pouvez pas le faire sur vous-même - Você não pode fazer isso, idiota. - Tak nie można! - - - Your Admin Level is not high enough. - Your Admin Level is not high enough. - To Be Changed - Votre Niveau admin n'est pas suffisamment élevée - Seu nível de ADM não é alto o bastante. - Nie masz wystarczających uprawnień, za niski poziom administracyjny - - - Player Markers Disabled. - Player Markers Disabled. - To Be Changed - Votre Niveau admin n'est pas suffisamment élevée - Marcações dos jogadores desabilitada. - Markery 'OFF' graczy Wyłączone - - - Player Markers Enabled. - Player Markers Enabled. - To Be Changed - Votre Niveau admin n'est pas suffisamment élevée - Marcações dos jogadores habilitada. - Markery 'ON' graczy Włączone - - - Action Cancelled - Aktion abgebrochen - Action Annulée - Azione Annullata - Ação Cancelada - Anulowano akcję - - - - - Bank Account Management - Bankkonto verwalten - Gestion du Compte Bancaire - Gestione Bancaria - Conta Bancária - Bankomat Altis - - - Withdraw - Abheben - Retirer - Preleva - Sacar - Wypłać - - - Deposit - Einzahlen - Déposer - Deposita - Depositar - Deopozyt - - - Transfer - Überweisen - Transférer - Trasferisci - Transferir - Przelew - - - You can't deposit more then $999,999 at a time - Du kannst nicht mehr als $999,999 gleichzeitig einzahlen - Vous ne pouvez pas déposer plus de $999,999 - Non puoi depositare più di €999,999 alla volta - Você não pode transferir mais de R$999.999 em uma transação - Możesz jednorazowo zdeponować nie więcej niż $999,999 - - - The amount entered isn't a numeric value. - Die eingegebene Zahl ist keine richtige Zahl - Vous devez entrer un nombre. - L'importo inserito non è numerico. - O valor digitado não é um número. - Wprwadzona wartość nie jest liczbą - - - You have deposited $%1 into your bank account - Du hast $%1 auf dein Bankkonto überwiesen - Vous avez déposé $%1 dans votre compte bancaire - Hai despositato €%1 nel tuo conto bancario - Você depositou R$%1 na sua conta bancária - Zdeponowałeś na koncie bankowym $%1 - - - You need to select someone to transfer to - Du hast niemanden für den Transfer ausgewählt - Sélectionnez une personne pour le transfert - Devi selezionare qualcuno per trasferire fondi - Você tem que selecionar para quem deseja transferir - Musisz wybrać odbiorcę przelewu - - - The player selected doesn't seem to exist? - Der Spieler scheint nicht zu existieren? - Sembra che il giocatore selezionato non esista - O jogador selecionado parece não existir! - Wybrany gracz wydaje się nie występować w grze - - - You can't transfer more then $999,999 - Du kannst nicht mehr als $999,999 überweisen - Vous ne pouvez pas transférer plus de $999,999 - Non puoi trasferire più di €999.000 alla volta - Você pode trasferir no máximo R$999.999. - Możesz jednorazowo przelać nie więcej niż $999,999 - - - You don't have that much in your bank account! - Du hast nicht so viel Geld auf deinem Bankkonto! - Vous n'avez pas autant dans votre compte bancaire - Non hai fondi sufficienti nel tuo conto in banca! - Você não tem todo esse dinhero na sua conta bancária - Nie masz tyle środków na koncie! - - - You do not have enough money in your bank account, to transfer $%1 you will need $%2 as a tax fee. - Du hast nicht genug Geld auf deinem Konto, es kostet $%2, um $%1 zu überweisen. - Vous n'avez pas assez d'agent dans votre compte bancaire, pour transférer $%1 vous devez payer $%2 de taxe - Non hai fondi sufficienti nel tuo conto in banca, per trasferire €%1 necessiti di €%2 per pagare la tassa di traferimento. - Você não tem dinheiro suficiente na suca conta bancária. Para trasferir R$%1 você irá pagar R$%2 de taxa - Nie masz wystarczająco dużo środków na końcie, do przelewu $%1 będziesz potrzebował jeszcze $%2 na opłatę - - - You have transfered $%1 to %2.\n\nA tax fee of $%3 was taken for the wire transfer. - Du hast $%1 an %2 überwiesen.\n\nEine Gebühr von $%3 wurde verrechnet. - Vous avez transférer $%1 à %2.\n\nA La taxe de $%3 vous à été prélevée pendant le transfert. - Hai trasferito €%1 a €%2.\n\nSono stati trattenuti €%3 di tassa per il trasferimento. - Você trasferiu R$%1 para %2.\n\nA taxa de trasferência foi de: R$%3. - Przelałeś $%1 do %2.\n\nA opłata $%3 pobrana przez WIRE TRANSFER - - - You can't withdraw more then $999,999 - Du kannst nicht mehr als $999,999 abheben - Vous ne pouvez pas retirer plus de $999,999 - Non puoi prelevare più di €999.000 in una volta - Você pode sacar no máximo R$999.999 - Możesz jednorazowo pobrać maks $999,999 - - - You can't withdraw less then $100 - Du kannst nicht weniger als $100 abheben - Vous ne pouvez pas retirer moins de $100 - Non puoi prelevare meno di €100 - Você não pode sacar menos de R$100. - Nie możesz pobrać mniej niż $100 - - - You have withdrawn $%1 from your bank account - Du hast $%1 von deinem Bankkonto abgehoben - Vous avez retiré $%1 de votre compte en banque - Hai prelevato €%1 dal tuo conto in banca - Você sacou R$%1 de sua conta bancária. - Pobrałeś z konta kwotę $%1 - - - You do not have that much cash on you. - Du hast nicht so viel Geld bei dir. - Vous n'avez pas autant d'agent sur vous. - Non hai abbastanza fondi con te. - Você não tem todo esse dinheiro. - Nie masz przy sobie tyle pieniędzy - - - You have deposited $%1 into your gangs bank account - Du hast $%1 auf dein Gang Konto überwiesen - Vous avez déposé $%1 sur le compte bancaire de votre gang. - Hai despoitato €%1 nel conto bancario della tua gang - Você depositou R$%1 na conta da sua gangue. - Zdeponowałeś na koncie gangu kwotę $%1 - - - - - Altis Mobile - Altis Mobilfunk - Altis mobile - Cellulare Altis - Celular - Telefon - - - Message To Send: - Deine Nachricht: - SMS à Envoyer : - Messaggio da mandare: - Mensagem à enviar: - Treść wiadomości - - - Text Message: - Nachricht: - Text Message: - Msg Giocatore: - Mensagem: - Do: Gracz - - - Text Police - An die Polizei - Text Police - Msg Polizia - Polícia - Do: Policja - - - Text Admins - An die Admins - Text Admins - Msg Admin - Msg ADMs - Do: Admin - - - Admin Message - Admin-Nachricht - Admin Message - Admin Msg - ADM Msg - AdmGracz - - - Admin Msg All - Admin-Nachricht an alle - Admin Msg ALL - Admin Msg - SMS do Wszyscy - AdmALL - - - Request EMS - An die Sanitäter - Requête Medecin - Msg medici - Chamar SAMU - MEDYK - - - - - Local Chop Shop - Illegaler Fahrzeughändler - Concessionnaire de véhicule volé - Ricettatore - Desmanche - Dziupla - - - - - Gang Management - Gang Verwaltung - Gestion du Gang - Gestione Gang - Gerenciar Gangue - Gang Menu - - - Gang Management - Current Gangs - Gang Übersicht - Aktuelle Gangs - Gestion de Gangs - Liste des Gangs Actuels - Gestione Gang - Gang Attuali - Gerenciar Gangue - Gangue atual - Gang - zarządzaj - - - Join - Beitreten - Rejoindre - Unisciti - Entrar - Dołącz - - - Leave - Verlassen - Quitter - Abbandona - Sair - Opuść - - - Upgrade Slots - Slots erweitern - Augmenter Slots - Aumenta Posti - Aumentar o número de Slots - Powiększ gang - - - Kick - Kicken - Virer - Espelli - Expulsar - Wykop - - - Set Leader - Neuer Anführer - Passer Chef - Imposta Capo - Passar Liderança - Ustaw lidera - - - To create a gang it costs $%1 - Eine Gang zu erstellen kostet $%1 - Pour créer un gang ça coute %1$ - Creare una gang costa €%1 - Criar uma Gangue custa R$%1 - Koszt ustanowienia gangu to $%1 - - - Create - Erstellen - Créer - Crea - Criar - Stwórz - - - Your Gang Name - Dein Gang Name - Nom de ton Gang - Nome della tua Gang - Nome da Gangue - Nazwa gangu - - - You aren't in a gang currently, what do you want to do? - Du bist in keiner Gang, was möchtest du machen? - Tu n'as pas de gang actuellement - Non sei in una gang, cosa intendi fare? - Você não está em uma Gangue, o que deseja fazer? - Jesteś już w gangu co chcesz zrobić - - - Browse - Durchsuchen - Parcourir - Cerca - Navegar - Przeglądaj - - - Invite Player - Spieler einladen - Inviter joueur - Invita Giocatore - Convidar Jogador - Zaproś - - - Disband Gang - Gang auflösen - Dissoudre Gang - Sciogli Gang - Desfazer Gangue - Opuść gang - - - Gang Invitation - Gang Einladung - Invitation de Gang - Invito Gang - Convite para Gangue - Zaproszenie do gangu - - - Transfer Gang Leadership - Gangleitung übertragen - Transfert du commandement du Gang - Trasferisci Comando - Transferir Liderança - Przekaż kierowanie gangiem - - - Upgrade Maximum Allowed Gang Members - Maximale Anzahl an Gang Mitgliedern erhöhen - Augmentation du nombre de membre acceptés - Aumenta numero massimo membri della Gang - Atualizar limite máximo de membros - Zwiększ maksymalną liczbę członków gangu - - - - - You must create a gang first before capturing it! - Du musst erst in einer Gang sein, um einzunehmen zu können! - Vous devez créer un gang avant de le capturer! - Devi creare una gang prima di catturarla! - Você precisa criar uma gangue antes de tentar capturar! - Przed przechwyceniem musisz stworzyć gang - - - Your gang already has control over this hideout! - Deine Gang hat bereits die Kontrolle über dieses Versteck! - Votre bande a déjà le contrôle de cette cachette! - La tua Gang ha già il controllo di questo Covo - Sua gangue já tem controle sobre esse esconderijo! - Twój gang aktualnie kontroluje tę kryjówkę ! - - - Only one person shall capture at once! - Nur eine Person kann das Versteck einnehmen! - Une seule personne doit capturer à la fois! - Può conquistare solo una persona alla volta! - Somente uma pessoa pode capturar! - Przejmowanie powinna przeprowadzić na raz tylko jedna osoba - - - This hideout is controlled by %1.<br/><br/>Are you sure you want to take over their gang area? - Das Versteck wird durch %1 kontrolliert.<br/><br/>Bist du sicher, dass du ihr Gang Gebiet übernehmen möchtest? - Cette cachette est contrôlée par %1.<br/><br/>Etes-vous sûr que vous voulez prendre en charge leur zone de gang? - Questo Covo è controllato da %1.<br/><br/>Sicuro di voler prendere il controllo della loro area? - Esse esconderijo é controlado por %1.<br/><br/>Você tem certeza que deseja tomar essa área? - Ta kryjówka jest kontrolowana przez %1.<br/><br/>Jesteś pewny że chcesz przjąć ten rejon. - - - Hideout is currently under control... - Versteck ist derzeit unter Kontrolle... - La cachette est actuellement sous contrôle ... - Il Covo è già sotto controllo... - Esconderijo sobre controle.... - Kryjówka pod kontrolą ... - - - Capturing cancelled - Einnehmen abgebrochen - Capture annulée - Cattura annullata - Ação concelada - Przejmowanie anulowane - - - Capturing Hideout - Versteck einnehmen - Capture cachette - Catturando il Covo - Capturando Esconderijo - Przejmowanie kryjówki - - - %1 and his gang: %2 - have taken control of a local hideout! - %1 und seine Gang: 2% - haben die Kontrolle über ein lokales Versteck übernommen! - %1 et sa gang: %2 ont pris le controle de la cachette ! - %1 e la sua Gang: % 2 - hanno preso il controllo di un Covo! - %1 e sua gangue: %2 - agora têm o controle de um esconderijo! - %1 i jego gang: %2 - przejął kontrolę nad kryjówką! - - - You can't have a gang name longer then 32 characters. - Dein Gang Name kann nicht länger als 32 Zeichen sein. - Vous ne pouvez pas avoir un nom de gang de plus de 32 caractères. - %1 e la sua Gang: % 2 - hanno preso il controllo di un Covo! - O nome de sua gangue não pode ter mais de 32 caracteres. - Nazwa gangu może posiadać maksymalnie 32 znaki - - - You have invalid characters in your gang name. It can only consist of Numbers and letters with an underscore - Du hast ein ungültiges Zeichen in deinem Gang Namen. Der Name darf nur aus Zahlen und Buchstaben sowie einem Unterstrich bestehen - Vous avez des caractères non valides dans le nom de votre gang. Il ne peut être constitué de chiffres amd lettres avec un trait de soulignement - Hai inserito caratteri non validi nel nome della Gang. Puoi inserire solo numeri e lettere con un underscore - O nome da sua gangue tem caracteres inválidos. O nome so pode conter caracteres e números separados por underline - Masz nieprawidłowe znaki w nazwie gangu - tylko litery i cyfry oraz podkreślnik - - - You do not have enough money in your bank account.\n\nYou lack: $%1 - Du hast nicht genug Geld auf deinem Bankkonto.\n\nDir fehlen: $%1 - Vous n'avez pas assez d'argent dans votre compte bancaire.\n\nVous manquez de: $%1 - Non hai abbastanza fondi nel tuo conto in banca.\n\nTi mancano: €%1 - Você não tem dinheiro suficiente na sua conta bancária.\n\nFaltam: R$%1 - Nie masz tyle pieniędzy na koncie.\n\nYou brakuje: $%1 - - - You have created the gang %1 for $%2 - Du hast die Gang %1 für $%2 erstellt - Vous avez créé la bande %1 pour $%2 - Hai creato la Gang %1 al costo di €%2 - Você criou a gangue %1 por R$%2 - Stworzyłeś gang %1 za $%2 - - - You are about to disband the gang, by disbanding the gang it will be removed from the database and the group will be dropped. <br/><br/>Are you sure you want to disband the group? You will not be refunded the price for creating it. - Du bist dabei, die Gang aufzulösen. Durch Auflösung der Gang wird sie aus der Datenbank entfernt. <br/><br/>Bist du sicher, dass du die Gang auflösen willst? Du erhältst den Preis für die Erstellung nicht zurück. - Vous vous apprêtez à dissoudre le gang, en démantelant le gang, il sera supprimé de la base de données et le groupe sera supprimé. <br/><br/>Etes-vous sûr de vouloir dissoudre le groupe? Vous ne serez pas remboursé le prix de sa création - Stai per sciogliere la Gang, facendolo sarà rimossa dal Database e il gruppo verrà cancellato. <br/><br/>Sei sicuro di voler sciogliere il gruppo? Non verrai rimborsato dei fondi spesi per crearlo. - Você vai desfazer a sua gangue, ela será apagada do banco de dados. <br/><br/>Você tem certeza que quer desfazer a gangue? Você não será reembolsado. - Chcesz rozwiązać gang, po jego rozwiązaniu zostanie on usunięty z bazy danych i cała grupa zostanie rozwiązana. <br/><br/>Naprawdę chcesz rozwiązać grupę? Nie dostaniesz zwrotu środków za przeznaczonych na stworzenie gangu. - - - Disbanding the gang... - Gang wird aufgelöst... - Démantèlement du gang ... - Sciogliendo la Gang... - Desfazendo a gangue... - Rozwiąż gang - - - Disbanding cancelled - Auflösung abgebrochen - Démantèlement annulé - Scioglimento annullato - Desfazer gangue cancelado - Rozwiązywanie gangu anulowane - - - The leader has disbanded the gang. - Der Anführer hat die Gang aufgelöst. - Le chef a démantelé le gang. - Il Capo ha sciolto la Gang - O lider desfez a gangue. - Szef rozwiązał gang - - - %1 has invited you to a gang called %2<br/>If you accept the invitation you will be a part of their gang and will have access to the gang funds and controlled gang hideouts. - %1 hat dich zu einer Gang namens %2 eingeladen <br/> Wenn Du die Einladung annimmst, wirst du ein Teil der Gang und bekommst Zugang zu den Gang-Konten und kontrollierten Gang Verstecken. - %1 vous a invité à un gang appelé %2<br/>Si vous acceptez l'invitation que vous serez une partie de leur gang et aurez accès à des fonds de gangs et des cachettes de gangs contrôlés. - %1 ti ha invitato nella Gang: %2<br/>Se vuoi accettarai l'invito entrerai a far parte della loro Gang ed avrai accesso ai loro fondi e ai loro Covi. - %1 convidou você para a gangue %2<br/>Se você aceitar terá acesso aos recursos da gangue e os esconderijos controlados pela mesma. - %1 zaprosił cię do gangu o nazwie %2<br/>Jeżeli zaakceptujesz zaproszenie będziesz członkiem gangu i uzyskasz dostęp do funduszy gangu oraz jego kryjówek - - - You are about to invite %1 to your gang, if they accept the invite they will have access to the gang's funds. - Du bist dabei, %1 in deine Gang einzuladen. Wenn die Einladung angenommen wird, hat der Spieler Zugang zu den Mitteln der Gang. - Vous êtes sur le point d'inviter %1 à votre gang, s'ils acceptent l'invitation, ils auront accès à des fonds du gang. - Stai per invitare %1 nella tua Gang, se accetterà l'invito avrà accesso ai fondi della Gang. - Você está prestes a convidar %1 para a gangue, ele terá acesso aos recursos da gangue. - Właśnie zaprosiłeś %1 do gangu, jeśli zaakceptuje zaproszenie będzie miał dostęp do funduszy gangu. - - - You need to select a person to invite! - Du musst einen Spieler zum Einladen auswählen! - Vous devez sélectionner une personne à inviter! - Devi selezionare una persona da invitare! - Você tem que selecionar um jogador para convidar! - Musisz zaznaczyć osobę aby ją zaprosić - - - You have sent a invite to your gang to %1 - Du hast eine Einladung in deine Gang an %1 gesendet - Vous avez envoyé une invitation à votre gang à %1 - Hai mandato l'invito alla tua Gang a %1 - Você enviou um convite para %1 se juntar a sua gangue - Wysłałeś zaproszenie do twojego gangu do %1 - - - Invitation Cancelled - Einladung abgebrochen - Invitation Annulées - Invito Annullato - Convite Cancelado - Zaproszenie anulowane - - - You cannot kick yourself! - Du kannst dich nicht selbst kicken! - Vous ne pouvez pas kicker vous-même! - Non puoi espellerti da solo! - Você não pode kickar você mesmo! - Nie możesz sam się wykopać! - - - Your gang has reached its maximum allowed slots, please upgrade your gangs slot limit. - Deine Gang hat die maximale Anzahl an Plätzen erreicht, bitte erhöhe das Limit deiner Gang. - Votre gang à atteint le nombre de membre maximum, veuillez augmenter cette limite. - la tua Gang ha raggiungo il numero massimo di posti consentiti, aumentane il limite. - Sua gangue está lotada, você deve aumentar o número máximo de jogadores. - Twój gang osiągnął maksymalną pojemność, powiększ swój gang! - - - You need to select a person to kick! - Du musst einen Spieler auswählen, um ihn kicken zu können! - Vous devez choisir une personne pour le kick! - Devi selezionare una persona da espellere! - Você tem que selecionar um jogador para kickar! - Musisz zaznaczyć osobę do wykopania - - - You cannot leave the gang without appointing a new leader first! - Du kannst die Gang nicht verlassen, ohne einen neuen Anführer zu ernennen! - Vous ne pouvez pas quitter le gang sans la nomination d'un nouveau chef d'abord! - Non puoi abbandonare la Gang prima di aver selezionato un nuovo Capo! - Você não pode sair da gangue sem transferir a liderança antes! - Nie możesz opuścić gangu bez przekazania komuś szefostwa nad gangiem - - - You are about to transfer leadership over to %1<br/>By transferring leadership you will no longer be in control of the gang unless ownership is transferred back. - Du bist dabei, die Führung an %1 zu übertragen<br/>Durch die Übertragung der Leitung der Gang hast du keine Kontrolle mehr. - Vous allez transférer le commandement à %1<br/>En transférant le commandement, vous ne serez plus le chef du gang, sauf si le commandement est transféré de nouveau. - Stai per traferire il comando a %1<br/>Facendolo non avrai più il controllo della Gang fino a quando non ti verrà restituito il comando. - Você vai transferir a liderança da gangue para %1<br/>Você não será mais o lider, a não ser que a liderança seja transferida novamente. - Przekazałeś kierowanie gangiem %1<br/> W związku z tym nie będzesz od tej chwili kontroli nad gangiem chyba, że kierowownictwo zostanie ci powierzone ponownie. - - - Transfer of leadership cancelled. - Übertragung der Leitung abgebrochen. - Transfert du commandement annulée. - Trasferimento del comando annullato. - Transferencia de liderança cancelada. - Przkazanie kierownictwa anulowane. - - - You are already the leader! - Du bist bereits der Anführer! - Vous êtes déjà leader! - Sei già il Capo! - Você já está na liderança! - Jesteś już liderem! - - - You need to select a person first! - Du musst erst eine Person auswählen! - Vous devez choisir une personne d'abord! - Devi selezionare una persona! - Você tem que selecionar um jogador antes! - Musisz najpierw zaznaczyć osobę! - - - You are about to upgrade the maximum members allowed for your gang. - Du bist dabei, die maximale Anzahl an Mitgliedern zu erhöhen. - Vous êtes sur le point de mettre à niveau la limite de membre autorisées pour votre gang. - Stai aumentando il numero massimo di membri consentiti all'interno della tua Gang - Você vai atualizar o limite de membros da gangue. - Chcesz zwiększyć maksymalną ilość członków w gangu. - - - Current Max: %1 - Aktuelles Maximum: %1 - Max actuelle: %1 - Attuali Max: %1 - Número máximo atual: %1 - Aktualnie Max: %1 - - - Upgraded Max: %2 - Maximum erhöhen: %2 - Mise à niveau Max: %2 - Aumento Max: %2 - Novo número máximo: %2 - Po ulepszeniu Max: %2 - - - Price: - Preis: - Prix: - Costo: - Preço: - Koszt: - - - You do not have enough money in your bank account to upgrade the gangs maximum member limit. - Du hast nicht genug Geld auf deinem Bankkonto, um das Mitgliederlimit deiner Gang zu erhöhen. - Vous n'avez pas assez d'argent dans votre compte de banque pour mettre à niveau la limite de membre maximale. - Non hai abbastanza fondi nel tuo conto in banca per aumentare il limite massimo di membri. - Você não dinheiro suficiente para aumentar o limite da gangue. - Nie posiadasz wystarczającej ilości środków na koncie aby powiększyć gang - - - Current: - Aktuell: - Actuel: - Attuale: - Atual: - Aktualny: - - - Lacking: - Fehlend: - Manquant: - Mancanza: - Faltando: - Brakuje: - - - You have upgraded from %1 to %2 maximum slots for <t color='#8cff9b'>$%3</t> - Du hast für <t color='#8cff9b'>$%3</t> von %1 auf %2 Plätze erhöht - Vous avez mis à niveau à partir de %1 à %2 membres maximum for <t color='#8cff9b'>$%3</t> - Hai aumentato i posti massimi da %1 a %2 per <t color='#8cff9b'>€%3</t> - Limite de membros atualizado de %1 para %2 por <t color='#8cff9b'>R$%3</t> - Zwiększyłeś ilość możliwych członków gangu z %1 do %2 for <t color='#8cff9b'>$%3</t> - - - Upgrade cancelled. - Aufwertung abgebrochen. - Mise à jour annulée. - Aumento annullato. - Cancelar Upgrade. - Ulepszanie anulowane. - - - Funds: - Geld: - Fonds: - Fondi - Recursos: - Środki: - - - (Gang Leader) - (Anführer) - (Gang Leader) - (Capo Gang) - (Lider da Gangue) - (Szef gangu) - - - - - Vehicle Garage - Fahrzeug Garage - Garage Vehicule - Garage Veicoli - Garagem de Veículos - Garaż: - - - Get Vehicle - Ausparken - Récupérer - Ritira Veicolo - Pegar Veículo - Wyciągnij pojazd: - - - Sell Vehicle - Fahrzeug verkaufen - Vendre - Vendi Veicolo - Vender Veículo - Sprzedaj pojazd - - - Sell Price - Verkaufspreis - Prix de vente - Prezzo di vendita - Preço de Venda - Cena sprzedaży - - - Storage Fee - Lagergebühr - Frais de Stockage - Costo ritiro - Taxa de Armazenamento - Opłata parkingowa - - - No vehicles found in garage. - Keine Fahrzeuge in der Garage gefunden. - Aucuns Vehicules. - Non hai veicoli nel Garage. - Nenhum veiculo encontrado na garagem. - Nie znaleziono pojazdów w garażu - - - You don't have $%1 in your bank account - Du hast keine $%1 auf deinem Bankkonto - Tu n'as pas %1$ sur ton compte en banque. - Non hai €%1 nel tuo conto in banca - Você não tem R$%1 na sua conta bancária - Nie masz %1 na koncie bankowym: - - - Spawning vehicle please wait... - Fahrzeug wird bereitgestellt, bitte warten... - Mise en place du Véhicule, merci de patienter... - Creazione veicolo attendere... - Obtendo veiculo, aguarde por favor... - Wyciągam pojazd, proszę czekać ... - - - Sorry but %1 was classified as a destroyed vehicle and was sent tot he scrap yard. - Entschuldigung, aber dein %1 wurde zerstört und auf den Schrottplatz geschickt. - Désolé mais votre %1 à été détruit et vendu à la casse. - Purtroppo %1 è stato classificato come veicolo distrutto ed è stato mandato allo sfascio. - O veículo %1 foi mandado para o ferro velho pois foi classificado como destroido. - Przepraszamy ale %1 został sklasyfikowany jako zniszczony i został odesłany na złom. - - - Sorry but %1 is already active somewhere in the world and cannot be spawned. - Entschuldigung, aber dein %1 ist bereits ausgeparkt worden und kann darum nicht bereitgestellt werden. - Désolé mais votre %1 à déjà été sortit du garage. - Purtroppo %1 è già presente nella mappa e non può essere ricreato - O veículo %1 já está presente no mapa e não pode ser retirado novamente - Przepraszamy ale %1 jest aktywny gdzieś na mapie i nie może zostać wyciągnięty. - - - There is already a vehicle on the spawn point. You will be refunded the cost of getting out out. - Es steht ein Fahrzeug auf dem Spawnpunkt. Die Kosten für das Ausparken werden dir erstattet. - Il y a déjà un véhicule sur le point de spawn. Le coût de sortie du véhicule vous sera remboursé. - C'è già un veicolo nel punto di creazione. Verrai rimborsato della spesa appena effettuata. - Existe um outro veiculo na area de spawn. Você será reembolsado. - W strefie parkowania znajduje się już pojazd. Środki za parkowanie zostaną zwrócone. - - - You sold that vehicle for $%1 - Du verkaufst dein Fahrzeug für $%1 - Vous avez vendu votre véhicule pour $%1 - Hai venduto il veicolo per €%1 - Você vendeu um veículo por R$%1 - Sprzedałeś pojazd za %1 - - - That vehicle is a rental and cannot be stored in your garage. - Mietwagen können nicht in der Garage geparkt werden. - Ce véhicule est une location et ne peut pas être stockée dans votre garage. - Il veicolo è in affitto e non può essere depositato in garage. - Esse veículo é alugado e não pode ser armazenado na garagem. - Pojazd wynajęty, nie możesz go schować w garażu. - - - That vehicle doesn't belong to you therefor you cannot store it in your garage. - Das Fahrzeug gehört nicht dir und kann deshalb nicht in der Garage geparkt werden. - Ce véhicule ne vous appartient pas, vous ne pouvez pas le stocker dans votre garage. - Il veicolo non ti appartiene e quindi non puoi depositarlo nel tuo garage. - Você não é o proprietário desse veiculo, logo não poderá guarda-lo na garagem. - Pojazd nie należy do ciebie nie możesz go schować w garażu. Ale zawsze możesz podjechać do dziupli! - - - The vehicle has been stored in your garage. - Das Fahrzeug wurde in der Garage geparkt. - Le véhicule a été entreposé dans le garage. - Il veicolo è stato depositato nel tuo garage. - O veículo foi guardado na sua garagem. - Pojazd został zaparkowany. - - - The server is trying to store the vehicle... - Der Server versucht, das Fahrzeug zu speichern... - Le serveur tente de stocker le véhicule ... - Il server cercando di depositare il veicolo... - O servidor está guardando o veiculo... - Serwer próbuje schować pojazd w garażu ... - - - The selection had a error... - Die Auswahl hat einen Fehler... - La selection à une erreur... - La selezione ha avuto un errore... - Erro ao selecionar.... - Ten wybór powoduje błąd - - - There isn't a vehicle near the NPC. - Es befindet sich kein Fahrzeug in der Nähe des NPC. - Il n'y a pas de véhicule près du PNJ - Non c'è alcun veicolo vicino all'NPC. - Não existe um veículo proximo ao NPC - Nie ma pojazdu w pobliżu NPC - - - - - Key Chain - Current List of Keys - Schlüsselbund - Aktuelle Liste - Porte-clés - Liste actuelle des clés - Portachiavi - Lista delle Chiavi - Chaves - Atual Lista de Chaves - Lista kluczyków - - - Drop Key - Schlüssel wegwerfen - Jeter Clef - Abbandona Chiave - Remover Chave - Wyrzuć klucz - - - Give Key - Schlüssel geben - Donner Clef - Dai Chiave - Dar Chave - Daj klucz - - - - - Player Menu - Spieler Menü - Menu du Joueur - Menu Giocatore - Menu Jogador - Menu gracza - - - Current Items - aktuelle Items - Objets Actuels - Oggetti Attuali - Items Atuais - Aktualne wyposażenie: - - - Licenses - Lizenzen - Licences - Licenze - Licenças - Licencje - - - Money Stats - Geld Statistiken - Stats Monétaires - Statistiche Fondi - Dinheiro - Twoje środki - - - My Gang - Meine Gang - Mon Gang - Mia Gang - Gangue - Gang - - - Wanted List - Fahndungsliste - Interpol - Lista Ricercati - Lista de Foragidos - Poszukiwani - - - Cell Phone - Telefon - Téléphone - Cellulare - Celular - Telefon - - - Key Chain - Schlüsselbund - Porte-clés - Portachiavi - Chaves - Klucze - - - Admin Menu - Admin Menü - Menu Admin - Menu Admin - Menu ADM - Admin Menu - - - Sync Data - Daten speichern - Sync Data - Salva Dati - Sincronizar Dados - Synchronizuj - - - - - Settings Menu - Einstellungen - Menu Paramètres - Menu Impostazioni - Configurações - Ustawienia: - - - On Foot: - Zu Fuß: - A Pied: - A piedi: - A Pé: - Na nogach: - - - In Car: - Im Auto: - Terre: - Auto: - No Carro: - W aucie: - - - In Air: - In der Luft: - Air: - Aria: - No Ar: - W powietrzu: - - - View distance while on foot - Sichtweite zu Fuß - Distance de vue à pied - Distanza visiva a piedi - Visualizar distância enquanto a pé - Widoczność gdy na nogach - - - View distance while in a land vehicle - Sichtweite in Fahrzeugen - Distance de vue en voiture - Distanza visiva su veicolo di terra - Visualizar distância enquanto em veículos terrestres - Widoczność gdy w aucie - - - View distance while in a air vehicle - Sichtweite in Helikoptern - Distance de vue dans les airs - Distanza visiva su velivolo - Visualisar distância enquanto em veículos aéreos - Widoczność gdy w powietrzu - - - Player Tags - Spielernamen - Tags Joueurs - Tag Giocatore - Tags de Jogadores - Tagi graczy - - - Tags ON - Namen AN - Tags ON - Tags ON - Tags ON - Tagi ON - - - Tags OFF - Namen AUS - Tags OFF - Tags OFF - Tags OFF - Tagi OFF - - - Sidechat Settings - Sidechat Einstellungen - Sidechat Paramètres - Impostazioni chat fazione - Configurações de Sidechat - Ustawienia czatu - - - Sidechat OFF - Sidechat AUS - Sidechat OFF - Chat fazione OFF - Sidechat OFF - Czat strony OFF - - - Sidechat ON - Sidechat AN - Sidechat ON - Chat fazione ON - Sidechat ON - Czat strony ON - - - - - Shop Inventory - Ladeninventar - Boutique - Inventario Negozio - Loja de Inventário - Oferta sklepu - - - Your Inventory - Eigenes Inventar - Ton Inventaire - Inventario Personale - Seu Inventário - Twoje wyposażenie - - - Buy Item - Kaufen - Acheter Objet - Compra Oggetto - Comprar Item - Kup objekt - - - Sell Item - Verkaufen - Vendre Objet - Vendi Oggetto - Vender Item - Sprzedaj obiekt - - - - - Spawn Selection - Spawn Auswahl - Selection du Spawn - Selezione Spawn - Locais para Começar - Wybierz punkt odrodzenia - - - Spawn - Spawnen - Spawn - Spawn - Começar - Odradzanie - - - Current Spawn Point - Aktueller Spawnpunkt - Point de Spawn Actuel - Punto di Spawn corrente - Ponto de início Atual - Aktualny punkt odrodzenia - - - You have spawned at - Du bist gespawnt in - Tu as spawn à - Ti trovi a - Você irá começar em - Odrodziłeś się w - - - - - Give Ticket - Ticket geben - Verbaliser - Dai Multa - Dar Multa - Wystaw mandat - - - Pay Ticket - Ticket bezahlen - Payer l'amende - Paga Multa - Pagar Multa - Zapłać mandat - - - Refuse Ticket - Ticket ablehnen - Contester l'amende - Rifiuta Multa - Recusar Multa - Odmów przyjęcia mandatu - - - - - Trunk Inventory - Kofferraum - Coffre - Inventario Veicolo - Inventário do Veículo - Zawartość - - - Player Inventory - Spielerinventar - Inventaire Joueur - Inventario Giocatore - Inventário do Jogador - Wyposażenie gracza - - - Take - Nehmen - Récupérer - Prendi - Pegar - Weź - - - Store - Lagern - Déposer - Deposita - Depositar - Schowaj - - - - - APD Wanted List - Fahndungsliste - Interpol - Lista Ricercati - Procurados - Listy gończe - - - Pardon - Erlassen - Excuser - Perdona - Perdão - Usuń z listy - - - - - Salema - Salema - Saumon - Salmone - Salema - Salema - - - Ornate - Ornate - Ornate - Orata - Ornamentado - Dorada - - - Mackerel - Makrele - Maquereau - Sgombro - Cavalinha - Makrela - - - Tuna - Thunfisch - Thon - Tonno - Atum - Tuńczyk - - - Mullet - Barbe - Mulet - Triglia - Tainha - Cefal - - - Cat Shark - Katzenhai - Poisson Chat - Squalo - Tubarão Gato - Rekin - - - Rabbit - Hase - Lapin - Coniglio - Coelho - Zając - - - - - You do not have $%1 for a %2 - Du hast keine $%1 für einen %2 - Tu n'as pas %1$ pour cet élément : %2 - Non hai €%1 per $2 - Você não tem R$%1 para %2 - Nie masz $%1 na %2 - - - You bought a %1 for $%2 - Du hast einen %1 für $%2 gekauft - Tu as acheté cet élément : %1 pour %2$ - Hai comprato un %1 per €%2 - Você comprou %1 por R$%2 - Kupiłeś %1 za $%2 - - - %1 was arrested by %2 - %1 wurde von %2 verhaftet - %1 a été arrêté par %2 - %1 è stato arrestato da %2 - %1 foi preso por %2 - %1 został aresztowany przez %2 - - - You caught a %1 - Du hast einen %1 gefangen - Tu as attrapé un(e) %1 - Hai pescato %1 - Você pegou %1 - Złapałeś %1 - - - You have taken some turtle meat - Du hast etwas Schildkrötenfleisch bekommen - Tu as récupéré un peu de viande de tortue - Hai raccolto della carne di tartaruga - Você pegou carne de tartaruga - Wziąłeś trochę mięsa żółwia - - - You have earned $%1 - Du hast $%1 verdient - Tu as gagné %1$ - Hai guadagnato €%1 - Você ganhou R$%1 - Otrzymałeś $%1 - - - Dropping fishing net... - Fischernetz auswerfen... - Déploiement du filet de pêche.... - Posizionando la rete da pesca... - Jogando rede de pesca... - Rzucam sieć... - - - Didn't catch any fish... - Keinen Fisch gefangen... - Tu n'as réussi à attraper aucun poisson... - Non hai pescato nulla... - A rede voltou vazia... - Nic nie złapałeś... - - - Fishing net pulled up. - Fischernetz einholen. - Le filet de pêche a été entièrement relevé. - Rete da pesca recuperata. - A rede de pesca foi recolhida - Sieć wciągnięta. - - - Your inventory space is full. - Dein Inventar ist voll. - Tu n'as plus de place dans ton inventaire. - Il tuo inventario è pieno. - Seu inventário está cheio - Nie masz więcej miejsca. - - - Gathering %1... - Sammle %1... - Ramassage %1... - Raccogliendo %1 - Coletando %1... - Zbierasz %1 - - - You have sold a %1 for $%2 - Du hast einen %1 für $%2 verkauft - Tu as vendu cet élément : %1 pour $%2 - Hai venduto un %1 per %2€ - Você vendeu %1 por R$%2 - Sprzedałeś %1 za $%2 - - - You have picked %1 %2 - Du hast %1 %2 gesammelt - Tu as ramassé : %1 %2 - Hai trovato %1 %2 - Você pegou %1 %2 - Podniosłeś %1 %2 - - - You have collected some %1 - Du hast etwas %1 gesammelt - Tu as ramassé %1 - Hai raccolto %1 - Você coletou %1 - Wziąłeś %1 - - - You are to deliver this package to %1 - Du musst dieses Paket bei %1 abliefern - Vous avez livré ce packet à %1 - Devi consegnare questo pacco al %1 - Você deverá entregar esse pacote para %1 - Dostarcz tę przesyłkę do %1 - - - Deliver this package to %1 - Liefere dieses Paket bei %1 ab - Livrer ce paquet à %1 - Consegna questo pacco al %1 - Entregue esse pacote para %1 - Dostarcz przesyłkę do %1 - - - You failed to deliver the package because you died. - Du hast es nicht geschafft, das Paket abzuliefern, da du gestorben bist. - Vous avez omis de livrer le colis car vous êtes morts. - Compra Oggetto - Você falhou na tarefa de entrega pois você morreu. - Nie dostarczyłeś przesyłki z uwagi na to że zmarłeś. - - - You do not have $%1 to be healed - Du hast keine $%1, um geheilt zu werden. - Vous n'avez pas $%1 pour vous soignez. - Non hai €$1 per essere curato - Você não tem R$%1 para ser curado - Nie masz $%1 na leczenie - - - Please stay still - Bitte bewege dich nicht - Ne bougez pas - Attendi pazientemente - Fique parado por favor - Proszę się nie ruszać - - - You need to be within 5m while the doctor is healing you - Du musst in der Nähe des Doktors bleiben, während du geheilt wirst - Vous devez être à moins de 5m pendant que le médecin vous soigne - Devi restare entro 5m dal dottore per essere curato - Você tem que estar a 5m para o médico curá-lo - Musisz być w pobliżu doktora gdy ten cię leczy - ok 5m - - - You are now fully healed. - Du wurdest geheilt. - Vous êtes completement soigner. - Sei stato curato completamente. - Sua saúde está perfeita - Zostałeś wyleczony - - - %1 your %2 is being impounded by the police. - %1 dein %2 wird von der Polizei beschlagnahmt. - %1 votre %2 est envoyé a la fourrière par la police. - %1 il tuo %2 sta per essere sequestrato dalla Polizia. - %1 seu %2 está sendo apreendido pela Polícia - %1 twój %2 jest usuwany przez Policję - - - Impounding Vehicle - Fahrzeug wird beschlagnahmt - Mise en fourrière - Sequestro Veicolo in corso - Apreendendo veículo - Usuwam pojazd - - - Impounding has been cancelled. - Beschlagnahmung abgebrochen. - Mise en fourrière annulée. - Il sequestro è stato annullato. - Ação de apreender foi cancelada - Przerwano usuwanie pojazdu - - - You have impounded a %1\n\nYou have received $%2 for cleaning up the streets! - Du hast einen %1 beschlagnahmt\n\nDu hast $%2 für das Aufräumen der Straßen bekommen! - Vous avez mis en fourrière un(e) %1\n\nVous avez reçus $%2 pour avoir nettoyé les rues! - Hai sequestrato un %1\n\nHai ricevuto €%2 per aver mantenuto l'ordine nelle strade! - Você apreendeu %1\n\nVocê recebeu R$%2 por deixar as ruas mais seguras! - Usunąłeś %1\n\n Otrzymujesz $%2 za oczyszczanie mapy - - - %1 has impounded %2's %3 - %1 hat %2's %3 beschlagnahmt - %1 a mis en fourrière le %3 de %2. - %1 ha sequestrato il %2 di %3 - %1 apreendeu %3 de %2 - %1 usunął %2's %3 - - - Abort available in %1 - Abbruch möglich in %1 - Abandonner disponible dans %1 - Abbandona disponibile in %1 - Abortar disponível em %1 - Możesz przerwać za %1 - - - This vehicle is already mining - Dieses Fahrzeug ist bereits am Sammeln - Ce véhicule est déjà en train de miner - Questo veicolo sta già estraendo risorse - Esse veículo já está minerando - Pojazd jest w trakcie wydobycia surowców - - - The vehicle is full - Das Fahrzeug ist voll. - Le véhicule est plein. - Il veicolo è pieno - O veículo está cheio. - Pojazd jest pełny - - - You are not near a resource field - Du bist nicht in der Nähe einer Mine - Vous n'êtes pas à proximité d'un champ de ressources - Non sei vicino ad un campo risorse - Você não está próximo ao recurso - Nie jesteś w pobliżu pola surowców - - - You cannot turn the vehicle on when mining - Du kannst das Fahrzeug nicht starten, solange es am Sammeln ist - Le moteur doit être arreté pour que le véhicule mine - Non puoi accendere il veicolo mentre estrae risorse - Você não pode ligar o veículo enquanto minera - Nie możesz poruszać pojazdem w trakcie wydobycia. - - - The Device is mining... - Das Fahrzeug sammelt... - Le véhicule est en train de miner... - Il veicolo sta estrando risorse... - A máquina está minerando... - Trwa wydobycie... - - - Completed cycle, the device has mined %1 - Sammeln beendet, das Gerät hat %1 gesammelt - Cycle terminé, le véhicule à miné %1 - Ciclo completato, il veicolo ha raccolto %1 - Ciclo completo, a máquina minerou %1 - Urządzenie wydobyło %1 - - - Vehicle is out of fuel - Das Fahrzeug hat keinen Treibstoff mehr - Le véhicule n'a plus d'essence. - Il veicolo è senza carburante - O veículo está sem combustível - Brak paliwa w pojezdzie - - - You have packed up the spike strip. - Du hast das Nagelband eingepackt. - Vous avez emballé la herse. - Hai raccolto una striscia chiodata. - Você recolheu o tapete de espinhos. - Kolczatka zwinięta - - - %1 has been placed in evidence, you have received $%2 as a reward. - %1 hat Beweise hinterlassen, du hast eine Belohnung von $%2 erhalten. - Vous avez ramassé la drogue de %1, vous avez reçu $%2 comme une récompense. - E' stata trovata della merce illegale: %1, hai ricevuto €%2 come ricompensa. - %1 foi pego como evidência, você recebeu R$%2 como recompensa. - %1 umieszczony w dowodach, otrzymujesz w nagrodę $%2 - - - You have picked up $%1 - Du hast $%1 aufgehoben - Vous avez ramassé $%1 - Hai raccolto €%1 - Você pegou R$%1 - Podniosłeś $%1 - - - You must wait at least 3 minutes in jail before paying a bail. - Du musst mindestens 3 Minuten lang im Gefängnis bleiben, bevor du die Kaution beantragen kannst. - Vous devez attendre au moins 3 minutes en prison avant de payer une caution. - Devi aspettare almeno 3 minuti in prigione prima di poter pagare la cauzione. - Você precisa esperar pelo menos 3 minutos antes de poder pagar fiança. - Musisz poczekać conajmniej 3 minuty w więzieniu zanim zapłacisz kaucję. - - - You do not have $%1 in your bank account to pay bail. - Du hast keine $%1 auf deinem Bankkonto, um die Kaution zu bezahlen. - Vous n'avez pas $%1 dans votre compte en banque pour payer la caution. - Non hai €%1 nel tuo conto in banca per poter pagare la cauzione. - Você não tem R$%1 em sua conta bancária para pagar a fiança. - Nie masz $%1 na koncie aby zapłacić kaucję. - - - %1 has posted bail! - %1 hat die Kaution bezahlt! - %1 a payé sa caution! - %1 ha pagato la cauzione! - %1 pagou a fiança! - %1 wpłacił kaucję! - - - There isn't a vehicle nearby... - Es ist kein Fahrzeug in der Nähe... - Il n'y a pas de véhicule à proximité... - Non c'è alcun veicolo qui vicino... - Não existe um veículo por perto... - W pobliżu nie ma pojazdu... - - - You can't open trunk while a player is near! - Você não pode abrir o inventário enquanto estiver perto de um jogador! - Nie możesz otworzyć wyposażenia gdy inny gracz jest w pobliżu! - - - %1 was restrained by %2 - %1 wurde von %2 festgenommen - %1 a été menotté par %2 - %1 è stato ammanettato da %2 - %1 foi imobilizado por %2 - %1 został skuty przez %2 - - - Searching... - Suche... - Recherche... - Ricerca... - Revistando... - Szukam... - - - Couldn't search the vehicle - Das Fahrzeug konnte nicht durchsucht werden - Impossible de fouiller le véhicule - Impossibile ispezionare il veicolo - Você não pode revistar o veículo - Nie można przeszukać pojazdu - - - This vehicle has no information, it was probably spawned in through cheats. \n\nDeleting vehicle. - Über das Fahrzeug gibt es keine Informationen, es wurde vermutlich durch Cheats gespawnt. \n\nLösche Fahrzeuge. - Ce véhicule dispose d'aucune information, il a probablement été engendré en travers tricheurs. \n\ véhicule Deleting. - Il veicolo è privo di identificativi, probabilmente è stato creato mediante cheat. \n\nCancellazione veicolo. - Esse veículo não tem informações, é provável que ele tenha sido criado por um cheater.\n\nDeletando veículo. - Pojazd bez informacji servera, prawdopodobnie umieszczony przez hakera \n\n usuwam pojazd. - - - You are already doing an action. Please wait for it to end. - Du führst bereits eine Aktion aus. Bitte warte, bis diese beendet ist. - Vous faites déjà une action. S'il vous plaît attendre qu'elle se termine. - Stai già compiendo un'azione, attendi che finisca. - Você já está executando uma ação. Por favor espere até que ela acabe. - Aktualnie wykonujesz jakąś akcję poczekaj aż skończysz. - - - %1 was unrestrained by %2 - %1 wurde von %2 freigelassen - %1 a été démenotté par %2 - %2 ha tolto le manette a %1 - %1 foi liberado por %2 - %1 został rozkuty przez %2 - - - %1 has robbed %2 for $%3 - %1 hat $%3 von %2 geraubt - %1 a volés %2 pour $%3 - %1 ha rapinato %2 di €%3 - %1 roubou R$%3 de %2 - %1 obrabował $%2 na $%3 - - - %1 doesn't have any money. - %1 hat kein Geld. - %1 n'a pas d'argent. - %1 non ha alcun soldo. - %1 não tem nenhum dinheiro. - %1 nie ma pieniędzy. - - - %1 was tazed by %2 - %1 wurde von %2 getazert - %1 a été tazé par %2 - %1 è stato taserato da %2 - %1 foi tazed por %2 - %1 został potraktowany paralizatorem przez %2 - - - A vehicle was searched and has $%1 worth of drugs / contraband. - Ein Fahrzeug wurde durchsucht und es wurden Drogen / Schmuggelware im Wert von $%1 gefunden. - Un véhicule venant d'être fouillé avait $%1 de drogue / contrebande. - Un veidolo è stato ispezionato e sono stati sequestrati €%1 in materiale illegale. - O veículo foi revistado e tem R$%1 em drogas ou contrabandos - Podczas przeszukania znalezono narkotyki/kontrabandę o wartości $%1 - - - You have been pulled out of the vehicle - Du wurdest aus dem Fahrzeug gezogen - Vous avez sortie les personnes du véhicule - Sei stato estratto dal veicolo - Você foi retirado do veículo - Zostałeś wyciągnięty z pojazdu - - - %1 has gave you %2 %3 - %1 hat dir %2 %3 gegeben - %1 vous a donné %2 %3 - %1 ti ha dato %2 %3 - %1 lhe deu %2 %3 - %1 dał ci %2 %3 - - - %1 has given you $%2 - %1 hat dir $%2 gegeben - %1 vous a donné $%2 - %1 ti ha dato €%2 - %1 lhe deu R$%2 - %1 dał ci $%2 - - - Sending information to server please wait..... - Sende Informationen an den Server, bitte warten..... - Envoi d'informations au serveur, patienter s'il vous plait.... - Invio delle informazioni al server, attendere prego...... - Enviando informações para o servidor, seja paciente..... - Przesyłam informacje na server poczekaj .... - - - An action is already being processed... - Es wird bereits eine Aktion ausgeführt... - Une action est déjà en cours de traitement ... - Un'azione è già in corso... - Você já está realizando um ação... - Akcja jest w trakcie wykonywania... - - - You're doing it too fast! - Você está fazendo isso muito rápido! - Za szybko zwolnij ! - - - You don't have enough space for that amount! - Du hast für diese Menge nicht genug Platz! - Vous n'avez pas assez d'espace! - Non hai abbastanza spazio per quel quantitativo! - Você não tem espaço suficiente para guardar o item - Nie masz tyle miejsca! - - - You don't have that much money! - Du hast nicht so viel Geld! - Vous n'avez pas assez d'argent! - Non hai tutti quei soldi! - Você não tem todo esse dinheiro! - Nie masz tyle pieniędzy! - - - You are not a cop. - Du bist kein Polizist. - Vous n'êtes pas flic. - Non sei un poliziotto. - Você não é um Policial. - Nie jesteś policjantem - - - You don't have enough room for that item. - Du hast nicht genug Platz für den Gegenstand. - Vous n'avez pas assez de place. - Non hai abbastanza spazio per quell'oggetto. - Você não tem espaço suficiente no seu inventário. - Nie masz wystarczająco miejsca na tą rzecz. - - - You need $%1 to process without a license! - Du musst $%1 haben, um ohne eine Lizenz verarbeiten zu können! - Vous devez payer $%1 pour traiter sans licence! - Você precisa de R$%1 para processar sem uma licença! - Potrzebujesz $%1 w celu przetworzenia bez licencji - - - You can't rapidly use action keys! - Die Aktionstaste kann nicht so schnell hintereinander genutzt werden! - Vous ne pouvez pas utiliser rapidement les touches d'action! - Non puoi riusare così rapidamente il tasto azione! - Você não pode usar a tecla de ação repetidamente! - Za szybko używasz przycisku akcji! - - - You do not have enough funds in your bank account - Du hast nicht genug Geld auf deinem Bankkonto - Vous n'avez pas assez de fond dans votre compte bancaire - Non hai abbastanza fondi nel tuo conto in banca - Você não tem todo esse dinheiro em sua conta bancária. - Nie masz wystarczających środków w banku - - - Couldn't add it to your inventory. - Es konnte nichts zu deinem Inventar hinzugefügt werden - Impossible d'ajouter cela à votre inventaire - Non puoi aggiungerlo al tuo inventario. - Não foi possível adicionar o item ao seu inventário - Nie można dodać tego do twojego wyposażenia - - - You haven't eaten anything in awhile, You should find something to eat soon! - Du hast schon eine Weile nichts mehr gegessen, du solltest schnell etwas zum Essen suchen! - Vous n'avez rien mangé depuis un certain temps, vous devriez trouver quelque chose à manger! - E' da tempo che non mangi qualcosa, dovresti trovare qualcosa da mettere sotto i denti in fretta! - Você não come a bastante tempo. Ache algo para comer logo!. - Zaczynasz być głodny, poszukaj czegoś do jedzenia! - - - You are starting to starve, you need to find something to eat otherwise you will die. - Du hast Hunger, du solltest schnell etwas essen oder du wirst verhungern. - Vous commencez à mourir de faim, vous avez besoin de trouver quelque chose à manger, sinon, vous allez mourrir - Ti stai indebolendo, devi trovare qualcosa da mangiare o morirai. - Você está começando a ficar famindo. Se você não comer irá morrer de fome. - Długo nie jadłeś, zjedz coś lub zginiesz z głodu. - - - You are now starving to death, you will die very soon if you don't eat something - Du bist am Verhungern, du wirst sterben, wenn du nichts zum Essen findest - Vous êtes en train de mourir de faim, vous allez mourir très bientôt si vous ne mangez pas quelque chose - Stai perdendo le forze, se non mangi qualcosa in fretta morirai. - Você está morrendo de fome, coma algo ou irá morrer. - Zaczynasz słabnąć z głodu zjedz coś lub zginiesz !!! - - - You have starved to death. - Du bist verhungert. - Vous êtes mort de faim. - Sei morto per la fame. - Você morreu de fome - Wygłodziłeś się na śmierć. - - - You haven't drank anything in awhile, You should find something to drink soon. - Du hast schon eine Weile nichts mehr getrunken, du solltest schnell etwas zum Trinken suchen. - Vous n'avez rien bu depuis un certain temps, vous devriez trouver quelque chose à boire! - E' da parecchio tempo che non bevi qualcosa, dovresti trovare qualcosa da bere. - Você não bebe nada a bastante tempo. Ache algo para beber logo. - Zaczynasz być spragniony, powinienieś poszukać czegoś do picia. - - - You haven't drank anything in along time, you should find something to drink soon or you'll start to die from dehydration. - Du hast Durst, du solltest schnell etwas trinken oder du wirst verdursten. - Vous commencez à mourir de soif, vous avez besoin de trouver quelque chose à boire, sinon, vous allez mourrir - E' troppo tempo che non bevi qualcosa, dovresti trovare qualcosa da bere o comincerai a disitratarti. - Você está ficando desidratado. Se não beber algo poderá morrer. - Długo nic nie piłeś, napij się czegoś bo możesz zginąć z pragnienia. - - - You are now suffering from severe dehydration find something to drink quickly! - Du bist am Verdursten, du wirst sterben, wenn du nichts zum Trinken findest - Vous êtes en train de mourir de soif, vous allez mourir très bientôt si vous ne buvez pas quelque chose - Stai soffrendo per una grave deidratazione, trova velocemente qualcosa da bere o morirai! - Você está sofrendo de desidratação. Beba algo ou irá morrer! - Zaczynasz słabnąć z pragnienia, wypij coś inaczej zginiesz!!! - - - You have died from dehydration. - Du bist verdurstet. - Vous êtes mort de soif. - Sei morto per disidratazione. - Você morreu desidratado. - Umarłeś z uwagi na odwodnienie organizmu - - - You are over carrying your max weight! You will not be able to run or move fast till you drop some items! - Du trägst zu viel bei dir! Du bist nicht in der Lage, zu rennen oder dich schnell zu bewegen, bis du Gegenstände abgelegt hast! - Vous êtes surchargé, vous ne pouvez plus courrir ou bouger rapidement à moins de lacher quelques objets! - Stai trasportando oltre il tuo carico massimo! Non riuscirai a correre fino a quando non ti libererai di qualche oggetto! - Você está carregando muito peso. Você não irá conseguir correr ou se mover rapidamente. - Niesiesz maksymalny ciężar, nie będziesz mógł biegać ani szybko chodzić dopuki nie wyrzucisz jakiejś rzeczy - - - <t color='#FF0000'><t size='2'>Vehicle Info</t></t><br/><t color='#FFD700'><t size='1.5'>Owners</t></t><br/> %1 - <t color='#FF0000'><t size='2'>Fahrzeuginfo</t></t><br/><t color='#FFD700'><t size='1.5'>Besitzer</t></t><br/> %1 - <t color='#FF0000'><t size='2'>Vehicle Info</t></t><br/><t color='#FFD700'><t size='1.5'>Owners</t></t><br/> %1 - <t color='#FF0000'><t size='2'>Vehicle Info</t></t><br/><t color='#FFD700'><t size='1.5'>Owners</t></t><br/> %1 - <t color='#FF0000'><t size='2'>Info do Veículo</t></t><br/><t color='#FFD700'><t size='1.5'>Donos</t></t><br/> %1 - <t color='#FF0000'><t size='2'>Informacja o pojeździe</t></t><br/><t color='#FFD700'><t size='1.5'>Właściciel</t></t><br/> %1 - - - Cannot search that person. - Diese Person kann nicht durchsucht werden. - Cannot search that person. - Cannot search that person. - Essa pessoa não pode ser revistada. - Nie możesz przeszukać tej osoby - - - Repairing %1 - Wird repariert %1 - Repairing %1 - Repairing %1 - Reparando %1 - Naprawiam %1 - - - You can't do that from inside the vehicle! - Você não pode fazer isso de dentro do veículo! - Nie możesz tego wykonać z wntrza pojazdu! - - - You have repaired that vehicle. - Du hast dieses Fahrzeug repariert. - You have repaired that vehicle. - You have repaired that vehicle. - Você reparou esse veículo. - Naprawiłeś pojazd - - - You have gathered %2 %1(s) - Você colheu %2 %1(s) - Zebrałeś %2 %1 (s) - - - You can't gather from inside a car! - Você não pode colher de dentro do carro! - Nie możesz zbierać z wnętrza samochodu - - - You are not allowed to loot dead bodies - Você não está liberado para lootiar corpos mortos - Nie możesz przeszukiwać martwych ciał - - - You have been frozen by an administrator - You have been frozen by an administrator - Você foi congelado por um administrador - Zostałeś zamrożony przez administratora - - - You have been unfrozen by an administrator - You have been unfrozen by an administrator - Você foi descongelado por um administrador - Zostałeś odmrożony przez administratora - - - - - You have been arrested, wait your time out. If you attempt to respawn or reconnect your time will increase! - Du wurdest festgenommen, sitze deine Zeit ab. Wenn du versuchst, zu respawnen oder die Verbindung zu trennen, erhöht sich deine Zeit! - Vous avez été arrêté, attendez que votre peine soit terminée. Si vous tentez de respawn ou reconnectez votre temps sera augmenté! - Sei stato arrestato, sconta la tua pena. Se cercherai di rinascere o di riconnettere il tuo tempo aumenterà! - Você foi preso, cumpra sua pena. Se você tentar renascer ou reconectar seu tempo na cadeia irá aumentar! - Zostałeś aresztowany, poczekaj na koniec kary. Jeśli się rozłączysz albo odrodzisz twoja kara zostanie powiększona - - - For being arrested you have lost the following licenses if you own them\n\nFirearms License\nRebel License - Bei der Verhaftung hast du folgende Lizenzen verloren\n\nWaffen Lizenz\nRebellen Lizenz - Après votre mise en prison, vous avez perdu les licences suivante si vous les aviez\n\nFirearms License\nRebel License - A causa del tuo arresto hai perso le seguenti licenze, se le possedevi\n\nPorto d'armi\nLicenza Ribelle - Você perdeu as seguintes licenças por ter sido preso\n\nPorte de Armas\n\nTreinamento Rebelde - Z uwagi na aresztowanie straciłeś następujące licencje jeśli je posiadałeś \n\nPozwolenie na broń \nTrening Rebelianta - - - %1 has escaped from jail! - %1 ist aus dem Gefängnis ausgebrochen! - %1 s'est échappé de prison! - %1 è scappato dalla prigione! - %1 escapou da prisão - %1 uciekł z więzienia! - - - You have escaped from jail, you still retain your previous crimes and now have a count of escaping jail. - Du bist aus dem Gefängnis ausgebrochen, die Polizei sucht bereits wegen deiner früheren Verbrechen und Gefängnisausbruch nach dir. - Vous vous êtes échappé de prison, vous conserver toujours vos crimes précédents et ils savent maintenant que vous vous êtes échappé de prison. - Sei scappato di prigione, rimarrai ricercato per i crimini da te commessi in precedenza e in aggiunta per essere scappato di prigione. - Você escapou da prisão, agora você é procurado por esse crime e todos os outros que havia cometido anteriormente - Uciekłeś z więzienia, dalej jesteś ścigany za poprzednie przestępstwa i dodatkowo za ucieczkę. - - - You have served your time in jail and have been released. - Du hast deine Zeit im Gefängnis abgesessen. - Vous avez terminé votre peine, vous êtes libre. - Hai scontato la tua pena in prigione e sei stato rilasciato. - Você pagou pelo seus crimes e foi libertado. - Odbyłeś swoją karę zostałeś zwolniony z więzienia. - - - Time Remaining: - Verbleibende Zeit: - Temps restant: - Tempo rimanente: - Tempo Restante: - Pozostały czas kary: - - - Can pay bail: - Kann Kaution zahlen: - Peut payer la caution: - Puoi pagare la cauzione: - Pode pagar fiança: - Możesz wpłacić kaucję - - - Bail Price: - Kaution: - Prix de la caution: - Costo cauzione: - Preço da fiança: - Wartość kaucji: - - - You have paid your bail and are now free. - Du hast deine Kaution bezahlt und bist nun frei. - Vous avez payé votre caution, vous êtes désormais libres. - Hai pagato la cauzione e sei libero. - Você pagou a fiança e agora está livre. - Zapłaciłeś kaucję jesteś wolny. - - - - - %1 has knocked you out. - %1 hat dich niedergeschlagen. - %1 vous a assommé. - %1 ti ha colpito stordendoti. - %1 nocauteou você. - zostałeś ogłuszony przez %1 - - - You have lost all your motor vehicle licenses for vehicular manslaughter. - Du hast alle deine Fahrzeug-Lizenzen durch fahrlässige Tötung mit einem Fahrzeug verloren. - Vous avez perdu tout vos permis véhicule pour avoir écrasé quelqu'un. - Hai perso tutte le tue licenze di guida a causa di un omicidio stradale. - Você não perdeu suas licenças de motorista por atropelamento. - Straciłeś wszystkie uprawnienia na pojazdy z uwagi na ciągłe zabijanie ludzi pojazdami. - - - You have lost your firearms license for manslaughter. - Du hast deinen Waffenschein wegen Mordes verloren. - Vous avez perdu votre permis d'armes à feu pour homicide involontaire. - Hai perso il tuo Porto d'Armi a causa di un omicidio - Straciłeś pozwolenie na broń z uwagi na zabijanie ludzi z broni palnej - - - They didn't have any cash... - Er hatte kein Geld... - Ils n'ont pas l'agent... - Non hai soldi... - Eles não tinham nenhum dinheiro.. - Nie posiadają żadnych pieniędzy ... - - - You stole $%1 - Du hast $%1 geraubt. - Vous avez volé $%1 - Hai rubato €%1 - Você roubou R$%1 - Ukradłeś %1 - - - The safe is empty! - Der Tresor ist leer! - Le coffre est vide - La cassaforte è vuota! - O Cofre está vazio! - Sejf jest pusty! - - - Someone is already accessing the safe.. - Jemand greift bereits auf den Tresor zu.. - Quelqu'un accède déjà au coffre.. - Qualcuno sta già interagendo con la cassaforte.. - Alguem já está acessando o cofre. - Ktoś właśnie włamuje się do sejfu! - - - There needs to be 5 or more cops online to continue. - Es müssen 5 oder mehr Polizisten online sein, um fortfahren zu können. - Il faut au minimum 5 flic pour continuer - Servono almeno 5 poliziotti online per continuare. - É necessário ter pelo menos 5 Policiais online para continuar. - Potrzeba conajmniej 5 policjantów aby kontynuować - - - Safe Inventory - Tresorinventar - Coffre - Inventario cassaforte - Cofre - Wyposażenie sejfu - - - You need to select an item! - Du musst einen Gegenstand auswählen! - Vous devez sélectionner un objet - Devi selezionare un oggetto! - Você precisa selecionar um item! - Musisz coś wybrać - - - There isn't %1 gold bar(s) in the safe! - Es sind keine %1 Goldbarren im Tresor! - Il n'y a pas %1 lingot(s) d'or dans le coffre - Nella cassaforte non ci sono %1 lingotti d'oro - Não existe %1 barra(s) de ouro no cofre! - W sejfie nie ma % sztab złota! - - - - - Couldn't open the ticketing interface - Der Bußgeldkatalog konnte nicht geöffnet werden - Impossible d'ouvrir l'interface d'amendement - Impossibile aprire l'interfaccia per le multe - Não foi possível abrir o bloco de multa - Nie potrafię otworzyć interfejsu mandatów - - - Ticketing %1 - Verrechne %1 - Mise de l'amende à %1 - Multando %1 - Multando %1 - Mandat dla %1 - - - Person to ticket is nil - Person für das Ticket ist nil - La personne à verbaliser est nulle - La persona da multare è nil - Jogador a ser multado é nulo - Osoba do ukarania mandatem to "nil" - - - Person to ticket doesn't exist. - Die Person für das Ticket gibt es nicht. - La personne à verbaliser est inexistante - La persona da multare non esiste. - Jogador a ser multado não existe. - Nie ma osoby ukaranej mandatem - nie istnieje - - - You didn't enter actual number. - Du hast keine echte Zahl eingegeben. - Vous n'avez pas saisi de nombre. - Non hai inserito un numero correttamente. - Você não digitou um número válido - Wybrałeś zły numer - - - Tickets can not be more than $200,000! - Strafzettel können nicht mehr als $200.000 betragen! - Les billets ne peuvent être plus de $ 200,000! - La multa non può essere più di €200.000! - A multa não pode ser maior que R$200.000! - Mandat nie może być wyższy niż $200.000! - - - %1 gave a ticket of $%2 to %3 - %1 hat %3 einen Strafzettel über $%2 ausgestellt - %1 a mis une contravention de $%2 à %3 - %1 ha dato una multa di €%2 a %3 - %1 deu uma multa de R$%2 para %3 - %1 Wystawił mandat w wysokości %2 dla %3 - - - You don't have enough money in your bank account or on you to pay the ticket. - Du hast nicht genug Geld auf deinem Bankkonto, um den Strafzettel bezahlen zu können. - Vous n'avez pas assez d'argent dans votre compte bancaire ou sur vous pour payer l'amende. - Non hai fondi sufficienti nel tuo conto in banca per pagare la multa. - Você não possui dinheiro suficiente na sua conta bancária ou na sua mão para pagar o bilhete. - Nie masz środków na koncie aby zapłacić mandat. - - - %1 couldn't pay the ticket due to not having enough money. - %1 konnte den Strafzettel nicht bezahlen, weil er nicht genug Geld hat. - % 1 ne pouvait pas payer la contravention car il n'avait pas assez d'argent. - %1 non può pagare la multa perchè non ha sufficienti fondi nel suo conto in banca. - %1 não pode pagar a multa pois não tem dinheiro suficiente. - %1 nie może zapłacić mandatu bo nie ma tylu środków na koncie - - - You have paid the ticket of $%1 - Du hast den Strafzettel von $%1 bezahlt - Vous avez payé l'amende de $%1 - Hai pagato la multa di €%1 - Você pagou a multa de R$%1 - Zapłaciłeś mandat w wysokości $%1 - - - %1 paid the ticket of $%2 - %1 zahlte einen Strafzettel von $%2 - %1 payé la contravention de $%2 - %1 ha pagato la multa di €%2 - %1 pagou a multa de R$%2 - %1 zapłacił mandat w wyskości $%2 - - - %1 paid the ticket. - %1 hat den Strafzettel bezahlt. - %1 payé la contravention. - %1 ha pagato la multa. - %1 pagou a multa. - %1 zapłacił mandat. - - - %1 has given you a ticket for $%2 - %1 hat dir einen Strafzettel von $%2 gegeben - %1 vous a donné une amende de $%2 - %1 ti ha dato una multa di €%2 - %1 lhe aplicou uma multa de R$%2 - %1 dał ci mandat w wysokości $%2 - - - %1 refused to pay the ticket. - %1 weigert sich, den Strafzettel zu bezahlen. - %1 refusé de payer l'amende. - %1 si è rifiutato di pagare la multa. - %1 se recusou a pagar a multa. - %1 odmówił zapłaty mandatu. - - - You have collected a bounty of $%1 for arresting a criminal. - Du hast ein Kopfgeld von $%1 für die Festnahme eines Kriminellen bekommen. - Vous avez reçu une prime de $%1 pour avoir arrêté un criminel. - Hai ricevuto il pagamento di una taglia di €%1 per aver arrestato un criminale ricercato. - Você ganhou uma recompensa de R$%1 por prender um criminoso. - Otrzymujesz nagrodę w wysokości $%1 za aresztowanie poszukiwanego kryminalisty. - - - You have collected a bounty of $%1 for killing a wanted criminal, if you had arrested him you would of received $%2 - Du hast ein Kopfgeld von $%1 für das Töten eines gesuchten Verbrechers erhalten, für eine Festnahme hättest du $%2 bekommen - Vous avez reçu une prime de $%1 pour le meurtre d'un criminel recherché, si vous l'aviez arrêté, vous auriez reçu $% - Hai ricevuto il pagamento di una taglia di €%1 per aver ucciso un criminale ricercato, se lo avessi arrestato avresti ricevuto €%2 - Você ganhou uma recompensa de $%1 por matar um criminoso procurado, se você tivesse o prendido ganharia R$%2 - Otrzymujesz nagrodę w wysokości $%1 za zabicie poszukiwanego kryminalisty, w przypadku gdybyś go aresztował otrzymałbyć $%2 - - - %1 has $%2 worth of contraband on them. - %1 hat Schmuggelware im Wert von $%2 bei sich. - %1 a $%2 de contrebande sur lui. - %1 ha €%2 in materiali illegali con se. - %1 tem R$%1 em contrabando. - %1 miał przy sobie kontrabandę o wartości $%2. - - - Illegal Items - Illegale Gegenstände - Articles illégaux - Oggetti Illegali - Items Ilegais - Nielegalne przedmioty / kontrabanda - - - %1 was identified as the bank robber! - %1 wurde als Bankräuber identifiziert! - %1 à été identifié comme un braqueur de banque! - %1 è stato identificato come il rapinatore della banca! - %1 foi identificado como ladrão de banco! - %1 zidentyfikowany jako kasairz rabujący banki! - - - No illegal items - Keine illegalen Gegenstände - Aucun élément illégal - Nessun oggetto illegale - Sem items ilegais - Brak kontrabandy i nielegalnych przedmiotów - - - You are not near a door! - Du bist nicht in der Nähe einer Tür! - Vous n'êtes pas près d'une porte! - Non sei vicno ad una porta! - Você não está perto de uma porta! - Nie jesteś przy drzwiach - - - You need to enable Picture in Picture (PiP) through your video settings to use this! - Du musst Picture in Picture (PiP) in deinen Video-Einstellungen aktivieren, um dies nutzen zu können! - Vous devez activer le "Picture in Picture" (PiP) dans vos paramètre vidéo pour utilser ceci! - Devi attivare Picture in Picture (PiP) nelle tue impostazioni video per usare questa funzione! - Você precisa habilitar o Picture in Picture (PiP), através das suas configurações de vídeo para usar esta opção! - Musisz włączyć Obraz w obrazie (PiP) w ustawieniach graficznych aby tego używać! - - - Licenses: - Lizenzen: - Licences: - Licenze: - Licenças: - Licencje: - - - No Licenses - Keine Lizenzen - Aucune licence - Nessuna Licenza - Sem Licenças - Brak licencji - - - Nothing illegal in this vehicle - Nichts Illegales in diesem Fahrzeug - Rien d'illégal dans ce véhicule - Niente di illegale nel veicolo - Nada ilegal dentro do veículo - Nie znaleziono niczego nielegalnego w pojeździe - - - This vehicle is empty - Dieses Fahrzeug ist leer - Ce véhicule est vide - Questo veicolo è vuoto - Esse veículo está vazio - Pojazd jest pusty - - - $%1 from the Federal Reserve robbery was returned from the robber being killed. - $%1 wurden in die Staatsbank zurückgebracht. - $%1 du vol de la Réserve fédérale est récupéré du voleur qui vient d'être tué. - €%1 della rapina alla Riserva Federale sono stati recuperati dal rapinatore ucciso. - R$%1 que foi roubado da Reserva Federal retornou a ela após a morte do ladrão. - $%1 z kradzieży w Banku zostało zwrócone po zabiciu włamywacza. - - - Repairing vault... - Tresor wird repariert... - Réparation du coffre... - Riparando il Caveau - Reparando Cofre... - Naprawiam skarbiec... - - - The vault is now fixed and re-secured. - Der Tresor wurde repariert. - Le coffre est de nouveau sécurisé. - Il Caveau è stato riparato e messo in sicurezza. - O Cofre foi consertado e está seguro. - Skarbiec jest naprawiony i zabezpieczony. - - - The vault is already locked? - Der Tresor ist abgeschlossen? - Le coffre est déjà fermé? - Il Caveau è già bloccato? - O Cofre está trancado? - Skarbiec jest zablokowany? - - - You can't enter anything below 1! - Du kannst nichts unter 1 eingeben! - Vous ne pouvez pas moins de 1! - Non puoi selezionare nulla sotto l'1! - Não é permitido usar valores abaixo de 1! - Nie możesz wprowadzić niczego poniżej 1! - - - You can't store anything but gold bars in the safe. - Du kannst nur Goldbarren in den Tresor legen. - Vous ne pouvez pas mettre autre chose que des lingot d'or. - Nella cassaforte puoi depositare solo lingotti d'oro. - Você só pode guardar Barras de Ouro no cofre. - Nie możesz składować niczego poza sztabami złota w sejfie. - - - You don't have %1 gold bar(s) - Du hast keine %1 Goldbarren - Vous n'avez pas %1 lingot(s) d'or - Non hai %1 lingotti d'oro - Você não tem %1 Barra(s) de Ouro - Nie masz %1 sztab(y) złota - - - Couldn't remove the item(s) from your inventory to put in the safe. - Gegenstände konnten nicht von deinem Inventar in den Tresor gepackt werden. - Vous ne pouvez pas supprimer les items de votre inventaire pour les mettre dans le coffre. - Non è stato possibile rimuovere gli oggetti dal tuo inventario per metterli nella cassaforte. - Não foi possível mover o item do inventário para o cofre. - Nie można usunąć rzeczy z twojego wyposażenia aby włożyć je do sejfu - - - Couldn't search %1 - Konnte %1 nicht durchsuchen - Impossible de fouiller %1 - Impossibile ispezionare %1 - Não foi possível buscar por %1 - Nie można przeszukać %1 - - - Repairing Door... - Tür wird repariert... - Réparation de la porte... - Riparando la porta... - Reparando a porta.... - Naprawiam drzwi... - - - No Licenses<br/> - Keine Lizenzen<br/> - Aucune licence<br/> - Nessuna Licenza<br/> - Você não tem licença<br/> - Brak licencji<br/> - - - No one has sold to this dealer recently. - Niemand hat hier kürzlich etwas verkauft. - Personne n'est venu vendre à ce dealer récement - Non è stato visto nessuno vendere a questo spacciatore di recente. - Ninguém vendeu para esse negociante recentemente - Nikt nie sprzedawał ostatnio u dilera. - - - The following people have been selling to this dealer recently. - Die folgenden Leute haben kürzlich an diesen Dealer verkauft. - Les personnes suivantes sont venues vendre à ce dealer récement. - Le seguenti persone sono state viste vendere a questo spacciatore. - Os seguintes jogadores venderam para esse negociante recentemente. - Ostatnio u dilera sprzedawali następujący ludzie. - - - Radar - Radar - Radar - Autovelox - Radar - Radar - - - Vehicle Speed %1 km/h - Geschwindigkeit %1 km/h - Vitesse du véhicule %1 km/h - Velocità veicolo %1 km/h - Velocidade do Veículo %1 km/h - Prędkość pojazdu %1 km/h - - - You have been released automatically for excessive restrainment time - Du wurdest automatisch freigelassen, da die maximale Verhaftungszeit überschritten wurde - Vous êtes démenotté automatiquement pour un menottage excessivement long - Sei stato automaticamente liberato per essere rimasto ammanettato troppo tempo - Você foi solto automaticamente, devido ao tempo limite ter expirado. - Zostałeś automatycznie rozkuty z uwagi na długi upływ czasu od skucia. - - - You have been restrained by %1 - Du wurdest von %1 festgenommen - Vous avez été menotté par %1 - %1 ti ha tolto le manette - Você foi solto por %1 - Zostałeś rozkuty przez %1 - - - - - You tried to give %1 %2 %3 but they couldn't hold that so it was returned. - Du wolltest %1 %2 %3 geben, aber er hat keinen Platz in seinem Inventar und hat es darum zurückgegeben. - Vous avez essayé de donner %1 %2 %3 mais il n'a pas assez de place et vous à tout redonné. - Hai provato a dare %1 %2 %3 ma non poteva trasportarlo quindi ti è stato restituito. - Você tentou dar %1 %2 %3, mas não conseguiu segurar e por isso que foi devolvido. - Próbowałeś dać %1 %2 %3 lecz gracz nie mógł tego unieść, przedmioty zostały zwrócone. - - - %1 returned %2 %3 because they couldn't hold that amount. - %1 hat %2 %3 zurückgegeben, weil er nicht so viel tragen kann. - %1 vous à redonné %2 %3 parce qu'ils ne pouvaient pas en tenir autant. - %1 ha restituito %2 %3 perchè non poteva trasportare quella quantità - %1 retornou %2 %3 porque não conseguiu segurar essa quantidade. - %1 zwrócił %2 %3 ponieważ nie mógł tego unieść - - - %1 has gave you %2 but you can only hold %3 so %4 was returned back. - %1 hat dir %2 gegeben, du kannst aber nur %3 tragen, also hast du %4 zurückgegeben. - %1 vous à donné %2 mais vous ne pouvez en tenir que %3 donc %4 à été redonné. - %1 ti ha dato %2 ma puoi portare solo %3 quindi %4 sono stati restituiti. - %1 retornou %2 %3 porque não conseguiu segurar essa quantidade. - %1 dał ci %2 lecz możesz unieść tylko %3, w związku z tym zwróciłeś %4. - - - Do you want to add this item to your weapon or inventory? If you add it to your weapon your current existing attachment will be lost! - Möchtest du den Aufsatz zu deiner Waffe oder deinem Inventar hinzufügen? Wenn du es zur Waffe hinzufügst, geht der vorhandene Aufsatz verloren! - Voulez-vous ajouter cet article à votre arme ou à votre inventaire? Si vous l'aajoutez à votre arme, votre attachement existant actuel sera perdu! - Vuoi aggiungere questo oggetto alla tua arma o all'inventario? Se lo aggiungerai all'arma verrà rimosso l'eventuale accessorio già presente su di essa! - Você quer adicionar este item à sua arma ou inventário? Se você adicioná-lo à sua arma seu item atual existente será perdida! - Chcesz dodać tę rzecz do broni lub wyposażenia? Jeśli to zrobisz twoje aktualne wyposażenie broni zostanie zmienione na nowo zakupione i przepadnie! - - - Attachment slot taken! - Aufsatz Platz belegt! - Fente de fixation pris! - Slot Accessorio preso! - Slot de acessório utilizado! - Podjąłeś slot - - - Weapon - Waffe - Armes - Arma - Armas - Broń - - - Inventory - Inventar - Inventaire - Inventario - Inventário - Wyposażenie - - - You are not allowed to look into someone's backpack! - Du bist nicht berechtigt, in fremde Rucksäcke zu schauen! - Vous n'êtes pas autorisé à regarder dans le sac à dos de quelqu'un! - Non sei autorizzato a guardare negli zaini altrui! - Você não é liberado para olhar a mochila dos outros! - Nie możesz zaglądać do czyichś plecaków! - - - You are not allowed to access this vehicle while its locked. - Du bist nicht berechtigt, auf dieses Fahrzeug zuzugreifen, während es abgeschlossen ist. - Vous n'êtes pas autorisé à accéder à ce véhicule tant qu'il est vérouillé. - Non ti è permesso l'accesso a questo veicolo mentre è bloccato. - Você não pode acessar o veiculo enquanto ele estiver trancado. - Nie masz dostępu do pojazdu gdy ten jest zamknięty - - - This vehicle's trunk is in use, only one person can use it at a time. - Der Kofferraum dieses Fahrzeuges wird bereits benutzt, nur eine Person kann auf ihn zugreifen. - Le coffre de ce véhicule est en cours d'utilisation, une seule personne peut l'utiliser à la fois. - L'inventario di questo veicolo è in uso, può essere usato solo da una persona alla volta. - A mala desse veículo está em uso, somente uma pessoa pode acessá-la de cada vez. - Bagażnik pojazdu jest w użyciu, na raz może korzystać z niego tylko jedna osoba. - - - Failed Creating Dialog - Erstellen des Dialogs gescheitert - Échec à la création de dialogue - Creazione dialogo fallito - Falha ao criar Diálogo - Nie udało się nawiązać kontaktu - - - You have unlocked your vehicle. - Du hast dein Fahrzeug aufgeschlossen. - Vous avez débloqué votre véhicule. - Hai sbloccato il tuo veicolo. - Você destrancou o veículo. - Odblokowałeś pojazd - - - You have locked your vehicle. - Du hast dein Fahrzeug abgeschlossen. - Vous avez verrouillé votre véhicule. - Hai bloccato il tuo veicolo - Você trancou o veículo. - Zablokowałeś pojazd - - - Sirens On - Sirene AN - Sirenes On - Sirene accese - Sirene Ligada - Syrena włączona - - - Sirens Off - Sirene AUS - Sirenes Off - Sirene spente - Sirene Desligada - Syrena wyłączona - - - You need to install storage containers to have storing capabilities! - Du musst dir Lagerboxen kaufen, um etwas einlagern zu können! - Vous devez installer des conteneurs de stockage pour disposer de capacité de stockage! - Devi posizionare dei contenitori per aver la possibilità di depositare qualcosa! - Você tem que instalar caixas para poder guardar items! - Musisz zainstalować pojemniki aby uzyskać możliwość składowania rzeczy - - - This vehicle isn't capable of storing virtual items. - Dieses Fahrzeug kann keine virtuellen Gegenstände speichern. - Ce véhicule n'est pas en mesure de stocker des objets virtuels. - Questo veicolo non è in grado di trasportare oggetti virtuali. - Esse veículo não pode armazenar items virtuais. - Ten pojazd nie przechowuje wirtualnych przedmiotów - - - Weight: - Gewicht: - Poids: - Peso: - Peso: - Waga: - - - House Storage - Lagerplatz des Hauses - Conteneur de stockage - Inventario Casa - Cavalos de Força: - Domowa skrzynka - - - Vehicle Trunk - Kofferraum - Coffre de véhicule - Inventario veicolo - Capacidade da mala: - Bagażnik pojazdu - - - The vehicle either doesn't exist or is destroyed. - Das Fahrzeug existiert entweder nicht oder wurde zerstört. - Le véhicule n'existe pas ou à est détruit - Il veicolo non esiste o è stato distrutto. - Veículo não existe ou está destruido. - Pojazd nie istnieje lub jest zniszczony - - - Invalid Number format - Ungültiges Zahlenformat - Format de nombre invalide - Formato numerico non valido - Formato de número inválido. - Niepoprawny format liczby - - - You can't enter anything below 1! - Du kannst nichts unter 1 eingeben! - Vous ne pouvez pas entrer quoi que ce soit en dessous de 1! - Non puoi inserire nulla al di sotto di 1! - Você não pode digitar nada abaixo de 1! - Nie możesz wprowadzić niczego poniżej 1! - - - The vehicle doesn't have that many of that item. - Das Fahrzeug hat nicht so viele dieser Gegenstände. - Le véhicule n'e contient pas autant de cet objet. - Il veicolo non contiene così tanti oggetti. - O veículo não tem essa quantidade de items. - Pojazd nie posiada takiej ilości rzeczy. - - - Your sound was set to normal mode! - Seu som voltou ao normal! - Dzwięk został ustawiony w tryb normalny! - - - Your sound was set to fade mode! - Seu som está abafado. - Dzwięk został ustawiony w tryb wyciszony! - - - - - Error saving container, couldn't locate house? - Fehler beim Speichern der Container, es konnte kein Haus gefunden werden? - Erreur lors de la sauvegarde des conteneur, impossible de localiser la maison. - Errore nel salvataggio del contenitore, impossibile trovare la casa? - Erro ao salvar a caixa, não foi possível encontrar a casa. - Błąd w zapisywaniu pojemnika, nie można zlokalizować domu. - - - You are not allowed to access this storage container without the owner opening it. - Du bist nicht berechtigt, auf diesen Container zuzugreifen, ohne dass der Besitzer ihn aufgeschlossen hat. - Vous n'êtes pas autorisé à accéder à ce conteneur de stockage sans que le propriétaire ne l'ouvre. - Non sei autorizzato ad accedere a questo contentitore senza il permesso del proprietario. - Você so pode acessar a caixa se o dono deixar ela aberta. - Nie masz dostępu do pojemnika dopóki właściciel go nie otworzy. - - - You have unlocked the door. - Du hast die Tür aufgeschlossen. - Vous avez ouvert la porte. - Hai sbloccato la porta. - Você destrancou a porta. - Odblokowałeś drzwi. - - - You have locked the door. - Du hast die Tür abgeschlossen. - Vous avez verrouillé la porte. - Hai bloccato la porta. - Você trancou a porta. - Zablokowałeś drzwi. - - - You are not near a door! - Keine Tür in der Nähe! - Vous n'êtes pas près d'une porte! - Non sei vicino ad una porta! - Você não está perto de uma porta! - Nie jesteś przy drzwiach! - - - This house was recently sold and is still processing in the database. - Dieses Haus wurde vor Kurzem verkauft. - Cette maison a été récemment vendu et est en cours de traitement dans la base de données. - Questa casa è stata venduta di recente ed il database la sta ancora processando. - Essa casa já foi vendida, estamos processando a ordem de compra - Ten dom został ostatnio sprzedany i trwa jego przetwarzanie w bazie danych. - - - You do not have a home owners license! - Du hast keine Eigentumsurkunde! - Vous n'avez pas de permis de propriétaires de maison! - Non hai la licenza per il possesso delle case! - Você não tem um Registro Civil para comprar casas! - Nie masz licencji zarządcy nieruchomości! - - - You can only own %1 houses at a time. - Du darfst nur %1 Häuser zugleich besitzen. - Vous ne pouvez posséder que %1 maisons à la fois. - Puoi possedere solo %1 case - Você só pode ter %1 casa(s)! - Możesz posiadać maksymalnie %1 domów. - - - You do not have enough money! - Du hast nicht genug Geld! - Vous n'avez pas assez d'argent! - Non hai fondi a sufficienza! - Você não tem todo esse dinheiro! - Nie masz tyle pieniędzy! - - - This house is available for <t color='#8cff9b'>$%1</t><br/>It supports up to %2 storage containers - Dieses Haus gibt es für <t color='#8cff9b'>$%1</t><br/> Es unterstützt %2 Lagerbox(en) - Cette maison est disponible pour <t color='#8cff9b'>$%1</t><br/> Il prend en charge jusqu'à %2 conteneurs de stockage - Questa casa è disponibile per <t color='#8cff9b'>$%1</t><br/>Può supportare fino a %2 contenitori - Essa casa está disponível por <t color='#8cff9b'>R$%1</t><br/>Ela suporta até %2 caixa(s) - Ten dom jest dostępny za <t color='#8cff9b'>$%1</t><br/>Ma %2 miejsca na pojemniki do przechowywania wyposażenia - - - Purchase House - Haus kaufen - Acheter la Maison - Compra Casa - Comprar Casa - Kup dom! - - - This house doesn't belong to anyone. - Dieses Haus gehört niemandem. - Cette maison n'appartient à personne. - Questa casa non appartiene a nessuno. - Essa casa não tem dono. - Ten dom nie ma właściciela. - - - This person is not online there for you cannot raid their house! - Der Hausbesitzer ist nicht online, daher kannst du sein Haus nicht stürmen! - Cette personne n'est pas en ligne, vous ne pouvez pas perquisitionner cette maison! - Questa persona non è online quindi non puoi perquisire la sua casa! - O dono da casa não está online, você não pode vasculhar a casa! - Osoba nie jest na serwerze, nie możesz przeszukać domu. - - - The door is already unlocked! - Die Tür ist bereits offen! - La porte est déjà débloqué! - La porta è già sbloccata! - A porta está destrancada! - Drzwi są już odblokowane! - - - The door is already locked! - Drzwi są już zablokowane! - - - Breaking lock on door - Türschloss wird aufgebrochen - En train de casser la sérrure - Sbloccando la porta - Quebrando a fechadura da porta - Wyłamuje zablokowane drzwi... - - - %1 your house is being raided by the cops! - %1 dein Haus wird von der Polizei durchsucht! - %1 votre maison est perquisitionnée par les flics! - %1 la Polizia si sta introducendo in casa tua! - %1 Sua casa está sendo vasculhada pela Policia! - %1 twój dom jest kontrolowany przez policję! - - - House Owner - Hauseigentümer - Propriétaire - Proprietario Casa - Proprietário - Właściciel domu - - - There is nothing in this house. - Es gibt nichts in diesem Haus. - Il n'y a rien dans cette maison - In questa casa non c'è nulla. - Essa casa está vazia. - Nie znaleziono niczego nielegalnego. - - - Searching House... - Haus wird durchsucht... - Recherche Maison... - Perquisendo la Casa... - Vasculhando a casa... - Przeszukuję dom... - - - You went too far away from the house! - Du hast dich zu weit vom Haus entfernt! - Vous êtes parti trop loin de la maison! - Sei andato troppo distante dalla casa! - Você está muito distante da casa! - Jesteś za daleko od domu! - - - A house was raided and had $%1 worth of drugs / contraband. - Ein Haus wurde durchsucht und es wurden Drogen / Schmuggelware im Wert von $% gefunden. - Une maison a été perquisitionné et a $%1 de drogue / contrebande. - Una casa è stata perquisita e sono stati trovati €%1 in materiali illegali. - A casa assaltada tem R$%1 em drogas ou contrabandos. - Podczas przeszukania domu znaleziono kontrabandę o wartości $%1. - - - Nothing illegal in this house. - Nichts Illegales in diesem Haus. - Rien d'illégal dans cette maison - Questa casa non contiene nulla d'illegale. - Nada ilegal nessa casa. - Nie znaleziono niczego nielegalnego. - - - House storage unlocked - Lagerplatz des Hauses geöffnet - Stockage de la maison déverrouillé - Contenitori della casa sbloccati - Armário da casa destrancado - Pojemnik odblokowany - - - House storage locked - Lagerplatz des Hauses geschlossen - Stockage de Maison verrouillé - Contenitori della casa bloccati - Armário da casa trancado - Pojemnik zablokowany - - - Locking up house please wait... - Haus wird abgeschlosen, bitte warten... - Fermeture de la maison veuiller patienter... - Bloccando la casa, attendere prego... - Trancando a casa, aguarde... - Blokuję zamykam dom proszę czekać... - - - House has been locked up. - Haus wurde abgeschlossen. - La casa è stata bloccata. - Sua casa foi trancada! - Dom został zablokowany / zamknięty! - - - Are you sure you want to sell your house? It will sell for: <t color='#8cff9b'>$%1</t> - Bist Du sicher, dass du dein Haus verkaufen möchtest? Es wird für <t color='#8cff9b'>$%1</t> verkauft - Etes-vous sûr de vouloir vendre votre maison? Elle se vendra pour: <t color='#8cff9b'>$%1</t> - Sei sicuro di voler vendere la tua casa? La venderai per: <t color='#8cff9b'>€1</t> - Você tem certeza que deseja vender a casa? O valor de venda é: <t color='#8cff9b'>R$%1</t> - Jesteś pewny że chcesz sprzedać dom za <t color='#8cff9b'>$%1</t> - - - - - There isn't a chopper on the helipad! - Es ist kein Helikopter auf dem Landeplatz - Il n'y a pas d'hélicopter sur l'héliport - Non c'è alcun elicottero sulla piazzola d'atterraggio - Não existe uma aeronave no heliponto! - W pobliżu nie ma helikoptera! - - - You need $1,000 to service your chopper - Du benötigst $1,000, um deinen Helikopter zu warten - Vous devez $1000 pour l'entretien de votre hélico - Necessiti di €1.000 per fare manutenzione al tuo elicottero - Você precisa de R$1.000 para reparar a sua aeronave - Potrzebujesz $1000 aby serwisować helikopter - - - Servicing Chopper - Helikopter wird gewartet - Entretien - Manutenendo Elicottero - Reparando aeronave - Serwisuję helikopter - - - The vehicle is no longer alive or on the helipad! - Das Fahrzeug wurde zerstört oder befindest sich nicht mehr auf dem Helikopterlandeplatz! - Le véhicule est détruit ou n'est plus sur l'héliport! - Il veicolo non è più attivo sulla piazzola d'atterraggio! - "A aeronave não está mais disponível no heliponto! - Pojazd nie jest dłużej dostępny na lądowisku - - - Your chopper is now repaired and refuelled. - Der Helicopter ist nun repariert und aufgetankt. - Votre hélicoptère est maintenant réparé et ravitaillé - L'elicottero è stato riparato e rifornito di carburante. - Sua aeronave está reparada e com o tanque cheio! - Helikopter został naprawiony i natankowany - - - - - Cannabis - Kannabis - Cannabis - Cannabis - Maconha não Processada - Konopie - - - Apple - Apfel - Pomme - Mela - Maçã - Jabłko - - - Apples - Äpfel - Pommes - Mele - Maçãs - Jabłka - - - Cocaine - Kokain - Cocaïne - Cocaina - Cocaína - Kokaina - - - Heroin - Heroin - Heroïne - Eroina - Heroína - Heroina - - - Oil - Öl - Pétrole - Olio - Petróleo - Benzyna - - - Peach - Pfirsich - Pêche - Pesca - Pêssego - Brzoskwinia - - - Peaches - Pfirsiche - Pêches - Pesche - Pêssegos - Brzoskwinie - - - Unprocessed Oil - Unverarbeitetes Öl - Pétrole non raffiné - Olio non processato - Petróleo não Refinado - Ropa naftowa - - - Processed Oil - Verarbeitetes Öl - Pétrole raffiné - Olio processato - Petróleo Refinado - Olej napędowy - - - Unprocessed Heroin - Unverarbeitetes Heroin - Graine de pavot - Eroina non processata - Heroína não Processada - Heroina nieoczyszczona - - - Processed Heroin - Verarbeitetes Heroin - Héroine - Eroina processata - Heroína Processada - Heroina oczyszczona - - - Marijuana - Marihuana - Marijuana - Marijuana - Maconha Processada - Marihuana - - - Rabbit Meat - Kaninchenfleisch - Viande de Lapin - Carne di coniglio - Carne de Coelho - Mięso zająca - - - Grilled Rabbit - Gegrilltes Hasenfleisch - Lapin grillé - Carne di coniglio alla griglia - Carne de coelho grelhado - Grilowany zając - - - Salema Meat - Salema Fleisch - Filet de Saupe - Carne di Salmone - Peixe Salema - Mięso salemy - - - Grilled Salema - Gegrillte Sardine - Sardine grillé - Sardine alla griglia - Sardinha Grelhada - Grilowana Salema - - - Ornate Meat - Ornate Fleisch - Filet d'Ornate - Carne di Orata - Carne Francesa - Mięso Ornata - - - Grilled Ornate - Gegrillter Kaiserfisch - Angelfish grillé - Angelfish alla griglia - Angelfish Grelhado - Grilowany Ornat - - - Mackerel Meat - Makrelen Fleisch - Filet de Maquereau - Carne di Sgombro - Peixe Cavalinha - Mięso Makreli - - - Grilled Mackerel - Gegrillte Makrele - Maquereau grillé - Sgombro alla griglia - Cavalinha Grelhada - Grilowana Makrela - - - Tuna Meat - Thunfisch Fleisch - Filet de Thon - Carne di Tonno - Peixe Tuna - Mięso Tuńczyka - - - Grilled Tuna - Gegrillter Thunfisch - Thon grillé - tonno alla griglia - Atum Grelhado - Grilowany Tuńczyk - - - Mullet Meat - Mullet Fleisch - Filet de Mulet - Carne di Triglia - Peixe Mullet - Mięso Cefala - - - Fried Mullet - Frittierte Meeräsche - Rouget frits - Triglia fritta - Mullet Fritado - Grilowany Cefal - - - Cat Shark Meat - Katzenhai Fleisch - Filet de Poisson Chat - Carne di Squalo - Tubarão Gato - Mięso Rekina - - - Fried Catshark - Frittierter Katzenhai - roussette frit - profondo palombo fritti - Tubarão Gato Frito - Grilowany Rekin - - - Turtle Meat - Schildkröten Fleisch - Viande de Tortue - Carne di Tartaruga - Carne de Tartaruga - Mięso Żółwia - - - Raw Chicken - Rohes Hühnchen - poulet cru - pollo crudo - Galinha Crua - Surowy Kurczak - - - Deep Fried Chicken - Schwarz Frittiertes Hühnchen - Noir Fried Chicken - Nero Fried Chicken - Frango Frito - Smażony Kurczak - - - Raw Rooster - Roher Gockel - Coq Raw - Rooster Raw - Galo Cru - Surowy Kogut - - - Grilled Rooster - Gegrillter Gockel - Coq grillé - cazzo alla griglia - Galo Grelhado - Grilowany Kogut - - - Raw Goat - Rohes Ziegenfleisch - chèvre cru - Carne di capra Raw - Carne de Cabra Crua - Surowa Koza - - - Grilled Goat - Gegrilltes Ziegenfleisch - chèvre grillé - Carne di capra alla griglia - Carne de Cabra Grelhada - Grilowana Koza - - - Raw Sheep - Rohes Schafsfleisch - brebis cru - Carne di pecora grezza - Carne de Ovelha Crua - Surowa Owca - - - Grilled Sheep - Gegrilltes Schafsfleisch - moutons grillés - Mutton alla griglia - Mutton Grelhado - Grilowana Owca - - - Fishing Pole - Angel - Canne à pêche - Canna da pesca - Vara de Pescar - Wędka - - - Water Bottle - Wasserflasche - Bouteille d'eau - Bottiglia d'acqua - Garrafa d'água - Butelka wody - - - Coffee - Kaffee - Café - Caffè - Café - Kawa - - - Turtle Soup - Schildkrötensuppe - Soupe à la Tortue - Zuppa di Tartaruga - Sopa de Tartaruga - Zupa z żółwia - - - Donuts - Donuts - Donuts - Ciambelle - Rosquinha - Pączki - - - Empty Fuel Can - Leerer Benzinkanister - Jerrican Vide - Tanica di carburante vuota - Tanque de Gasolina Vazio - Pusty kanister - - - Full Fuel Can - Benzinkanister - Jerrican de Carburant - Tanica di carburante piena - Tanque de Gasolina Cheio - Pełny Kanister - - - Pickaxe - Spitzhacke - Pioche - Piccone - Picareta - Kilof - - - Copper Ore - Kupfererz - Minerai de Cuivre - Minerale di Rame - Pepita de Cobre - Ruda miedzi - - - Iron Ore - Eisenerz - Minerai de Fer - Minerale di Ferro - Pepita de Ferro - Ruda żelaza - - - Iron Ingot - Eisenbarren - Lingot de Fer - Lingotto di ferro - Barra de Ferro - Sztabka żelaza - - - Copper Ingot - Kupferbarren - Lingot de cuivre - Lingotto di Rame - Barra de Cobre - Sztabka miedzi - - - Sand - Sand - Sable - Sabbia - Areia - Piasek - - - Salt - Salz - Sel - Sale - Sal - Sól kopana - - - Refined Salt - Raffiniertes Salz - Sel traité - Sale raffinato - Sal Refinado - Sól rafinowana - - - Glass - Glas - Verre - Vetro - Vidro - Szkło - - - Diamond Cut - Geschliffene Diamanten - Diamant Taillé - Diamante tagliato - Diamante Lapidado - Diament szlifowany - - - Diamond Uncut - Ungeschliffene Diamanten - Diamant Brut - Diamante grezzo - Diamante Bruto - Diament surowy - - - Tactical Bacon - Taktischer Speck - Bacon tactique - Carne secca - Bacon Tático - Posiłek taktyczny - - - RedGull - RedGull - RedGull - RedGull - RedGull - RedGull - - - Lockpick - Dietrich - Outil de crochetage - Grimaldello - Chave Mestra - Wytrych - - - Rock - Stein - Pierre - Roccia - Pedra - Skała - - - Cement Bag - Zement Sack - Sac de ciment - Sacco di Cemento - Saco de Cimento - Worek cementu - - - Gold Bar - Goldbarren - Lingot d'or - Lingotto d'Oro - Barra de Ouro - Sztabka złota - - - Blasting Charge - Sprengladung - Charge de dynamite - Carica Esplosiva - Explosivo - Ładunek wybuchowy - - - Bolt Cutter - Bolzenschneider - Outils de sérrurier - Tronchese - Alicate - Nożyce do kłódek - - - Bomb Defuse Kit - Bombenentschärfungskit - Outils de désamorçage - Attrezzi per il disinnesco - Kit anti-bomba - Zestaw saperski - - - Small Storage Box - Kleine Lagerbox - Petit Conteneur de stockage - Contenitore piccolo - Caixa Pequena - Mały pojemnik - - - Large Storage Box - Große Lagerbox - Grand Conteneur de stockage - Contenitore grande - Caixa Grande - Duży pojemnik - - - Unprocessed Cocaine - Unverarbeitetes Kokain - Feuille de Coca - Cocaina non processata - Cocaína não Refinada - Nieoczyszczona kokaina - - - Processed Cocaine - Verarbeitetes Kokain - Cocaine - Cocaina processata - Cocaína Refinada - Oczyszczona kokaina - - - Spike Strip - Nagelband - Herse - Striscia Chiodata - Tapete de Espinhos - Kolczatka drogowa - - - - - Driver License - Führerschein - Permis de Conduire - Licenza di Guida - Licença de Motorista - Prawo jazdy - - - Pilot License - Pilotenschein - License de Pilote - Licenza da Pilota - Licença de Piloto - Licencja Pilota - - - Heroin Training - Heroinausbildung - Transformation du Pavot - Processo Eroina - Treinamento de Heroina - Wytwarzanie Heroiny - - - Oil Processing - Ölverarbeitung - Raffinage de du pétrole - Processo Olio - Refinamento de Petróleo - Rafinacja ropy naftowej - - - Diving License - Taucherschein - Permis de Plongée - Licenza di Pesca - Licença de Mergulho - Licencja Nurka - - - Boating License - Bootsschein - Permis Bateau - Licenza Nautica - Licença de Barco - Patent Motorowodny - - - Firearm License - Waffenschein - Permis de Port d'Arme - Porto d'Armi - Licença de Porte de Armas - Pozwolenie na broń - - - SWAT License - SWAT-Lizenz - License du SWAT - Licenza SWAT - Licença do Bope - Trening SWAT - - - Coast Guard License - Küstenwache - Garde-Cotes - Licenza Guardia Costiera - Licença da Guarda Costeira - Trening straż przybrzeżna - - - Rebel Training - Rebellenausbildung - Entrainement rebelle - Licenza da Ribelle - Treinamento Rebelde - Trening rebelianta - - - Truck License - LKW-Führerschein - Permis Poids Lourds - Licenza Camion - Licença de Caminhão - Prawo jazdy - ciężarówki - - - Diamond Processing - Diamantenverarbeitung - Taillage des Diamands - Processo Diamanti - Lapidação de Diamante - Szlifierz diamentów - - - Copper Processing - Kupferverarbeitung - Fonte du Cuivre - Processo Rame - Processamento de Cobre - Wytapianie miedzi - - - Iron Processing - Eisenverarbeitung - Fonte du Fer - Processo Ferro - Processamento de Ferro - Wytapianie żelaza - - - Sand Processing - Sandverarbeitung - Traitement du Sable - Processo Sabbia - Processamento de Areia - Hutnik szkła z piasku - - - Salt Processing - Salzverarbeitung - Traitement du Sel - Processo Sale - Processamento de Sal - Warzenie soli - - - Cocaine Training - Kokainausbildung - Transformation de la Coca - Processo Cocaina - Treinamento de Cocaína - Oczyszczanie kokainy - - - Marijuana Training - Marihuanaausbildung - Traitement du Cannabis - Processo Marijuana - Treinamento de Maconha - Suszenie konopi - - - Cement Mixing License - Zementmisch-Lizenz - Fabrication du Ciment - Processo Cemento - Licença de Cimento - Wytwórca cementu - - - Home Owners License - Eigentumsurkunde - Droit de Propriété - Licenza possesso Casa - Licença de Casas - Zarządca nieruchomości - - - - - This can only be used on a vault. - Dies kann nur an einem Tresor benutzt werden. - Cela ne peut être utilisé que sur un coffre-fort. - Può essere usata solo sulla cassaforte. - Isso só pode ser usado em um cofre. - Możesz tego użyć na skarbcu. - - - There is already a charge placed on this vault. - Es gibt bereits eine Sprengladung am Tresor. - Une charge de dynamite est déjà placé sur ce coffre. - C'è già una carica piazzata sulla cassaforte. - Já existe uma carga colocada sobre esse cofre. - Już założono ładunek wybuchowy na skarbcu. - - - The vault is already opened. - Der Tresor ist bereits offen. - Le coffre est déjà ouvert. - La cassaforte è già aperta. - O cofre está aberto. - Skarbiec jest już otwarty. - - - A blasting charge has been placed on the federal reserves vault, You have till the clock runs out to disarm the charge! - Eine Sprengladung wurde am Safe angebracht. Du hast Zeit, bis die Uhr abläuft, um die Ladung zu entschärfen! - Une charge de dynamite a été placé sur le coffre des réserves fédérales, Vous avez jusqu'au temps imparti pour désarmorcer la charge! - Una carica esplosiva è stata piazzata sulla cassaforte della Riserva Federale, puoi cercare di disinnescarla prima che scada il tempo! - O explosivo foi colocado no cofre , você tem até o tempo acabar para desarmar o explosivo. - Ładunek wybuchowy został założony na skarbcu rezerw federalnych, musisz rozbroić ładunek nim wybuchnie! - - - The timer is ticking! Keep the cops away from the vault! - Der Timer läuft! Halte die Polizei von Safe fern! - La minuterie est lancée! Gardez les flics loin de la bombe! - Il tempo sta scorrendo! Tieni la polizia lontana dalla cassaforte! - O tempo está passando! Mantenha os policiais longe do cofre - Zegar tyka! Trzymaj policję z dala od skarbca! - - - The charge has been disarmed! - Die Sprengladung wurde entschärft! - La charge a été désamorcée! - La carica esplosiva è stata disinnescata! - O explosivo foi desarmado! - Ładunek wybuchowy rozbrojony! - - - The vault is now opened - Der Tresor ist jetzt offen - Le coffre est maintenant ouvert - La cassaforte è stata aperta - O cofre está aberto. - Skarbiec otwarty - - - You are not looking at a house door. - Du siehst keine Haustür an. - Vous n'êtes pas en face de la porte. - Non sei girato verso la porta di una casa. - Você não esta olhando para a porta. - Nie patrzysz w stronę drzwi. - - - !!!!! SOMEONE IS BREAKING INTO THE FEDERAL RESERVE !!!!!! - !!!!! JEMAND BRICHT IN DIE ZENTRALBANK EIN !!!!!! - !!!!! QUELQU'UN TENTE DE S'INTRODUIRe DANS LA RÈSERVE FÈDÈRALE !!!!!! - !!!!!! QUALCUNO STA CERCANDO DI INTRODURSI NELLA RISERVA FEDERALE !!!!!! - !!!!! A RESERVA FEDERAL ESTÁ SENDO ROUBADA !!!!!! - !!!!!! KTOŚ SIĘ WŁAMUJE DO BANKU REZERW FEDERALNYCH !!!!! - - - %1 was seen breaking into a house. - %1 wurde beim Einbruch in ein Haus gesehen. - %1 a été vu rentrant dans une maison par effraction. - %1 è stato visto fare irruzione in una casa. - %1 foi visto invadindo sua casa. - %1 był widziany jak włamywał się do domu. - - - Cutting lock on door - Schloss wird aufgebrochen - Crochetage de la serrure - Tranciando i blocchi sulla porta - Quebrando o cadeado da porta - Przecinam zabezpieczenia domu - - - There is no charge on the vault? - Es gibt keine Sprengladung am Tresor? - Il n'y a pas de dynamite sur le coffre? - Non c'è alcuna carica esplosiva sulla cassaforte - Não há nenhum explosivo no cofre. - Nie ma ładunku na skarbcu? - - - Defusing charge... - Sprengladung wird entschärft... - Désamorçage de la charge... - Disinnescando la carica esplosiva... - Desarmando o explosivo... - Rozbrajam ładunek... - - - The charge has been defused - Die Sprengladung wurde entschärft - La charge a été désamorcée - La carica esplosiva è stata disinnescata - O explosivo foi desarmado - Ładunek został rozbrojony - - - You need to look at the vehicle you want to refuel! - Du musst das Fahrzeug ansehen, das du auftanken möchtest! - Vous avez besoin de regarder le véhicule dont vous voulez faire le plein! - Devi essere girato verso il veicolo che vuoi rifornire! - Você precisa estar olhando para o veículo que deseja abastecer! - Musisz spojrzeć w kierunku pojazdu który chcesz zatankować! - - - You need to be closer to the vehicle! - Du musst näher am Fahrzeug sein! - Vous devez être plus proche du véhicule! - Devi stare più vicino al veicolo! - Você precisa estar mais perto do veículo! - Musisz być bliżej pojazdu! - - - Refuelling %1 - Wird betankt %1 - Ravitaillement %1 - Rifornendo %1 - Abastecendo %1 - Tankuję %1 - - - You have refuelled that %1 - Du hast deinen %1 aufgetankt - Vous avez ravitaillé %1 - Hai rifornito di carburante un %1 - Você abasteceu %1 - Zatankowałeś %1 - - - This vehicle is already in your key-chain. - Du hast diesen Fahrzeugschlüssen bereits in deinem Schlüsselbund. - Ce véhicule est déjà dans votre porte-clé. - Possiedi già le chiavi di questo veicolo. - Você já tem a chave desse veículo. - Masz już klucze do tego pojazdu. - - - Lock-picking %1 - Wird aufgebrochen %1 - Crochetage %1 - Scassinando %1 - Arrombando %1 - Włamujesz się do %1 - - - You got to far away from the target. - Du hast dich zu weit vom Ziel entfernt. - Vous êtes trop loin de la cible. - Sei andato troppo lontano dall'obbiettivo - Voçê está muito longe do seu alvo. - Jesteś za daleko od celu. - - - You now have keys to this vehicle. - Du hast nun einen Schlüssel zu diesem Fahrzeug. - Vous avez maintenant les clés de ce véhicule - Sei ora in possesso delle chiavi di questo veicolo. - Agora você tem as chaves do veiculo. - Masz teraz klucze do tego pojazdu - - - The lockpick broke. - Der Dietrich ist abgebrochen. - L'outil de crochetage à cassé - Il grimaldello si è rotto. - A Chave Mestra quebrou. - Wytrych się złamał. - - - %1 was seen trying to lockpick a car. - %1 wurde beim Aufbrechen eines Auto erwischt. - %1 a été vu essayant de crocheter une voiture - %1 è stato visto provare a scassinare un veicolo. - %1 foi visto usando uma Chave Mestra em um carro. - %1 był widziany jak próbował włamać się do samochodu. - - - You are not near a mine! - Du bist nicht in der Nähe einer Mine! - Vous n'êtes pas près d'une mine! - Non ti trovi vicino ad una mina! - Você não está próximo de uma mina! - Nie jesteś blisko kopalni! - - - You can't mine from inside a car! - Du kannst nicht in deinem Auto abbauen! - Vous ne pouvez pas miner à l'intérieur d'une voiture! - Non puoi piazzare mine da dentro un veicolo! - Você não pode minerar dentro do carro! - Nie możesz wydobywać z samochodu! - - - You have mined %2 %1 - Du hast %2 %1 abgebaut - Vous avez miné %2 %1 - Hai minato %2 %1 - Você minerou %2 %1 - Wydobyłeś %2 %1 - - - Place Spike Strip - Nagelband platzieren - Placer la herse - Posa striscie chiodate - Tapete de Espinhos armado. - Rozłóż kolczatkę - - - Pack up Spike Strip - Nagelband zusammenpacken - Ranger la herse - Recupera striscie chiodate - Pegar Tapete de Espinhos. - Zwiń kolczatkę - - - You need to be inside your house to place this. - Du musst in deinem Haus sein, um dies platzieren zu können. - Vous devez être à l'interieur de votre maison pour placer ceci - Devi essere all'interno della tua casa per posizionare questo. - Você precisa estar dentro da sua casa para colocar isso! - Musisz być wewnątrz własnego domu aby to umieścić. - - - You cannot place any more storage containers in your house. - Es können keine weiteren Lagercontainer in dein Haus gestellt werden. - Vous ne pouvez pas placer d'autres conteneur dans votre maison. - Non puoi installare altri contenitori in casa tua. - Você não pode colocar mais caixas dentro da sua casa. - Nie masz więcej miejsca na pojemniki w tym domu. - - - No more free storage spaces in your house. - Es gibt keinen freien Stauraum in deinem Haus mehr. - Plus d'espace libre dans votre maison. - I contenitori in casa tua hanno finito lo spazio disponibile. - Não ha mais espaços para guardar itens em sua casa. - Brak wolnych miejsc na pojemniki w domu. - - - You need to select an item first! - Du musst zuerst einen Gegenstand auswählen! - You need to select an item first! - You need to select an item first! - Você precisa selecionar um item primeiro! - Zaznacz najpier rzecz. - - - You can now run farther for 3 minutes - Du kannst jetzt für 3 Minuten weiterlaufen - You can now run farther for 3 minutes - You can now run farther for 3 minutes - Você agora pode correr por 3 minutos - Możesz przez 3 minuty biec bez wysiłku - - - You already have a Spike Strip active in deployment - Du stellst bereits ein Nagelband auf - You already have a Spike Strip active in deployment - You already have a Spike Strip active in deployment - Você já tem um Tapete de Espinhos ativo - Aktualnie masz rozłożoną kolczatkę - - - You can't refuel the vehicle while in it! - Du kannst ein Fahrzeug nicht betanken während du dich darin befindest! - You can't refuel the vehicle while in it! - You can't refuel the vehicle while in it! - Você não pode abastecer o veículo enquanto dentro dele! - Nie możesz zatankować pojazdu gdy w nim jesteś! - - - This item isn't usable. - Dieser Gegenstand ist nicht benutzbar. - This item isn't usable. - This item isn't usable. - Esse item não é usável. - Nie można użyć tej rzeczy. - - - - - Processing Oil - Öl wird verarbeite - Raffinage de Pétrole - Processando l'Olio - Processando Petróleo - Rafinacja ropy - - - Cutting Diamonds - Diamanten werden geschliffen - Taillage de diamant - Raffinando diamanti - Lapidando Diamante - Szlif diamentów - - - Processing Heroin - Heroin wird verarbeitet - Traitement d'Heroine - Processando Eroina - Processando Heroína - Oczyszczanie heroiny - - - Processing Copper - Kupfer wird verarbeitet - Fonte de Cuivre - Processando Rame - Processando Cobre - Wytop miedzi - - - Processing Iron - Eisen wird verarbeitet - Fonte de fer - Processando Ferro - Processando Ferro - Wytop żelaza - - - Processing Sand - Sand wird verarbeitet - Fonte du Sable - Processando Sabbia - Processando Areia - Topienie piasku - - - Processing Salt - Salz wird verarbeitet - Traitement du Sel - Processando Sale - Refinando Sal - Warzenie soli - - - Processing Cocain - Kokain wird verarbeitet - Traitement de Cocaine - Processando Cocaina - Processando Cocaína - Oczyszczanie kokainy - - - Processing Marijuana - Marihuana wird verarbeitet - Traitement de Marijuana - Processando Marijuana - Processando Maconha - Suszenie marihuany - - - Mixing Cement - Zement wird gemischt - Mélange de ciment - Processando Cemento - Misturando Cimento - Mielenie cementu - - - You need to stay within 10m to process. - Du musst innerhalb von 10m bleiben, um verarbeiten zu können. - Vous devez rester à 10m pour traiter - Devi stare entro 10m per processare. - Você precisa ficar a menos de 10m para processar. - Musisz być w odległości 10 m aby przetwarzanie się odbyło. - - - You need $%1 to process without a license! - Du brauchst $%1, um ohne eine Lizenz verarbeiten zu können! - Vous devez $1% pour traiter sans permis! - Hai bisogno di €%1 per processare senza la dovuta licenza! - Você precisa de R$%1 para processar sem licença! - Musisz mieć $%1 aby przetworzyć bez odpowiedniej licencji - - - You have processed %1 into %2 - Du hast %1 in %2 verarbeitet - Vous avez traité %1 en %2 - Hai processato %1 in %2 - Você trasformou %1 em %2 - Przetworzyłeś %1 na %2 - - - You have processed %1 into %2 for $%3 - Du hast %1 für $%3 in %2 verarbeitet - Vous avez traité %1 en %2 pour $3% - Hai processato %1 in %2 al costo di €%3 - Você trasformou %1 em %2 por R$%3 - Przetworzyłeś %1 na % za $%3 - - - - - Gather Apples - Äpfel sammeln - Récolter des pommes - Raccogli Mele - Colher Maçãs - Zabieranie jabłek - - - Gather Peaches - Pfirsiche sammeln - pflücke des pêches - Raccogli Pesche - Colher Pêssegos - Zbieranie brzoskwiń - - - Gather Heroin - Heroin sammeln - Récolter des graines de Pavot - Raccogli Eroina - Colher Heroína - Zbieranie heroiny - - - Gather Cannabis - Kannabis sammeln - Récolter du Cannabis - Raccogli Cannabis - Colher Maconha - Zbieranie konopii - - - Gather Cocaine - Kokain sammeln - Récolte de la Cocaine - Raccogli Cocaina - Colher Cocaína - Zbieranie kokainy - - - - - Medics Online: %1 - Sanitäter online: %1 - Medics en ligne: %1 - Medici Online: %1 - Médicos Online: %1 - Medycy Online: %1 - - - Medics Nearby: %1 - Sanitäter in der Nähe: %1 - Medics à proximité: %1 - Medici Vicini: %1 - Médicos por perto: %1 - Medycy w pobliżu: %1 - - - %1 is requesting EMS Revive. - %1 benötigt medizinische Hilfe - %1 demande de l'aide d'un EMS. - %1 sta richiedendo l'intervento medico. - %1 requisitou o resgate do SAMU - %1 prosi o pomoc medyczną. - - - Respawn Available in: %1 - Respawn verfügbar in: %1 - Respawn Disponible dans: %1 - Respawn disponibile in: $1 - Respawn Disponível em: %1 - Odrodzenie możliwe za: %1 - - - You can now respawn - Du kannst nun respawnen - Vous pouvez désormais réapparaître - Puoi ora fare respawn - Você pode dar respawn - Możesz się odrodzić - - - %1 has revived you and a fee of $%2 was taken from your bank account for their services. - %1 hat dich wiederbelebt und dafür eine Gebühr von $%2 von deinem Bankkonto eingezogen. - %1 vous à réanimé, les fraits de $%2 sont transféré depuit votre compte bancaire pour leurs services. - %1 ti ha rianimato e sono stati prelevati €%2 dal tuo conto in banca per pagare la prestazione. - %1 reviveu você e uma taxa de R$2% foi cobrada da sua conta bancária para os serviços prestados. - %1 pobrał opłatę w wysokości $%2 za reanimację i przywrócenie funkcji życiowych. - - - Someone else is already reviving this person - Jemand anderes belebt diese Person bereits wieder - Quelqu'un d'autre s'occupe déjà de cette personne - Qualcun'altro sta già provando a rianimare questa persona - Outro médico já está revivendo esse jogador - Ktoś inny aktualnie reanimuje tę osobę - - - Reviving %1 - Wird wiederbelebt %1 - Réanimations %1 - Rianimando %1 - Revivendo %1 - Reanimacja %1 - - - This person either respawned or was already revived. - Diese Person ist entweder respawnt oder wurde bereits wiederbelebt. - Cette personne à soit réapparue, soit a déjà été réanimée. - Questa persona è stata già rianimata o ha fatto respawn. - Esse jogador já deu respawn ou já foi reanimado. - Ta osoba wcześniej się odrodziła lub została reanimowana. - - - You have revived %1 and received $%2 for your services. - Du hast %1 wiederbelebt und $%2 für deine Dienste erhalten. - Vous avez réanimé %1 vous avez reçu $%2 pour votre aide - Hai rianimato %1 e hai ricevuto €%2 per la tua prestazione. - Você reviveu %1 e recebeu R$%2 pelo seus serviços prestados. - Reanimowałeś %1 i za uratowanie życia otrzymałeś $%2. - - - You got to far away from the body. - Du bist zu weit vom Körper entfernt. - Vous êtes trop loin du corps. - Sei andato troppo distante dal corpo. - Você está muito distante do corpo. - Jesteś za daleko od ciała. - - - - - The robbery has failed due to unknown reasons - Der Raub ist aus unbekannten Gründen fehlgeschlagen - Le vol de la réserve fédérale a échoué pour des raisons inconnues - La rapina è fallita per cause sconosciute - O roubo falhou por uma causa desconhecida. - Napad się nie udał z niewiadomych powodów. - - - $%1 was stolen from the robbery on the federal reserve - $%1 wurden von den Räubern aus der Zentralbank gestohlen - $%1 a été volé à la réserve fédérale. - €%1 sono stati rubati durante la rapina alla banca - R$%1 foi roubado da Reserva Federal. - $%1 ukradziono z Rezerwy Federalnej - - - This vault is already being robbed by someone else - Der Tresor wird bereits von jemand anderem ausgeraubt - Ce coffre est déjà pillé par quelqu'un d'autre - Questo Caveau sta venendo rapinando da qualcun'altro - Esse cofre já está sendo roubado por outro jogador. - Skarbiec jest aktualnie rabowany przez inną osobę. - - - This vault was already robbed recently - Der Tresor wurde bereits vor Kurzem ausgeraubt - Ce coffre a déjà été pillé récemment - Questo Caveau è stato svaligiato di recente - Esse cofre já foi assaltado recentemente. - Skarbiec został niedawno zrabowany - - - - - Garage - Garage - Garage - Garage - Garagem - Garaż - - - Your Vehicles - Deine Fahrzeuge - Vos vehicules - I tuoi Veicoli - Seus Veículos - Twój pojazd - - - Vehicle Information - Fahrzeuginformationen - Carte grise du vehicule - Informazioni Veicolo - Informações do Veículo - Informacja o pojeździe - - - Automatically reveals nearest objects within 15m, turn this setting off if you are experiencing performance issues. - Zeigt automatisch nächstgelegene Objekte innerhalb von 15m an, deaktiviere es, wenn du Leistungprobleme hast. - Révèle automatiquement les objets les plus proches au sein de 15m, désactiver ce paramètre si vous rencontrez des problèmes de performance. - Rivela automaticamente gli oggettivi vicini entro 15m, disattiva quest'impostazione se riscontri dei problemi di perfomance di sistema. - Revela objetos à 15m, desligue essa opção se está tendo problemas de performance. - Automatycznie wykrywa najbliższe obiekty w promieniu 15m, wyłącz tę opcję jeśli masz problemy z wydajnością - - - Controls whether or not players will have name tags above their head. - Regelt, ob Spieler Namensschilder über dem Kopf haben. - Contrôle si les joueurs auront ou non leur noms au dessus de leur tête - Controlla la visualizzazione delle tags sopra la testa dei giocatori - Controla se os jogadores terão os nomes em suas cabeças. - Kontroluje czy gracze będą mieli nad głowami swoje Tagi z nazwą - - - Shop Stock - Lagerbestand - Shop Stock - Stock Negozio - Estoque - Sklep oferta - - - - - Player Interaction Menu - Spielerinteraktionsmenü - Menu Interaction du Joueur - Menu d'interazione Giocatore - Menu de Interação do Jogador - Menu Interakcji - - - Put in vehicle - Ins Fahrzeug setzen - Embarquer - Metti nel Veicolo - Colocar no Veículo - Włóż do pojazdu - - - Un-Restrain - Freilassen - Démenotter - Togli Manette - Soltar - Rozkuj - - - Check Licenses - Lizenzen überprüfen - Vérifier Licences - Controlla Licenze - Verificar Licenças - Sprawdź licencje - - - Search Player - Spieler durchsuchen - Fouiller Joueur - Ricerca Giocatore - Revistar Jogador - Przeszukaj - - - Stop Escorting - Eskortieren stoppen - Arrêter Escorte - Ferma Scorta - Parar de Escoltar - Przestań eskortować - - - Escort Player - Spieler eskortieren - Escorter Joueur - Scorta Giocatore - Escoltar Jogador - Eskortuj - - - Ticket Player - Strafzettel ausstellen - Amende Joueur - Multa Giocatore - Multar Jogador - Wystaw mandat - - - Send to jail - Ins Gefängnis stecken - Envoyer en prison - Arresta - Enviar p/ Prisão - Do więzienia - - - Repair Door - Tür reparieren - Réparer la porte - Ripara porta - Consertar Porta - Napraw drzwi - - - Open / Close - Öffnen / Schließen - Ouvrir / Fermer - Apri / Chiudi - Abrir / Fechar - Otwórz / Zamknij - - - Break down door - Tür aufbrechen - Forcer la porte - Sfonda Porta - Quebrar Porta - Wyważ drzwi - - - Search house - Haus durchsuchen - Fouiller la maison - Cerca Casa - Vasculhar a Casa - Przeszukaj dom - - - Lock up house - Haus abschließen - Fermer la maison - Chiudi Casa - Trancar a Casa - Zamknij dom - - - Buy House - Haus kaufen - Acheter la maison - Compra Casa - Comprar a Casa - Kup dom - - - Sell Garage - Garage verkaufen - Vendre le garage - Vendi Garage - Vender Garagem - Sprzedaj garaż - - - Garage - Garage - Accés au garage - Garage - Garagem - Garaż - - - Store Vehicle - Fahrzeug parken - Ranger le vehicule - Parcheggia Veicolo - Guardar Veículo - Zaparkuj pojazd - - - Sell House - Haus verkaufen - Vendre la maison - Vendi Casa - Vender Casa - Sprzedaj dom - - - Unlock Storage - Lagerplatz aufsperren - Déverrouiller l'inventaire - Sblocca contenitori - Destrancar Caixa - Odblokuj pojemnik - - - Lock Storage - Lagerplatz absperren - Verrouiller l'inventaire - Blocca contenitori - Trancar Caixa - Zablokuj pojemnik - - - Turn Lights Off - Licht ausschalten - Lumières éteintes - Spegni luci - Ligar as Luzes - Włącz światło - - - Turn Lights On - Licht anschalten - Lumières allumées - Accendi luci - Apagar as Luzes - Wyłącz światło - - - Deposit To Gang - Auf Gang-Konto einzahlen - Déposer pour le gang - Deposita alla Gang - Depositar: Gangue - Wpłać na konto Gangu - - - - - Vehicle Interaction Menu - Fahrzeuginteraktionsmenü - Menu Interaction Véhicule - Menu d'interazione Veicolo - Menu do Veículo - Menu Interakcji pojazdu - - - Unflip Vehicle - Fahrzeug umdrehen - Retourner Véhicule - Raddrizza veicolo - Desvirar Veículo - Ustaw pojazd - - - Get In Kart - Ins Kart setzen - Mettre dans le kart - Entra nel Kart - Entrar no Veículo - Wejdź do gokarta - - - Push Boat - Boot schieben - Pousser bateau - Spingi Barca - Empurar Barco - Popchnij - - - Repair Vehicle - Fahrzeug reparieren - Réparer Véhicule - Ripara Veicolo - Consertar Veículo - Napraw - - - Registration - Eigentümer - Enregistrement - Registrazione - Registro - Zarejestruj - - - Search Vehicle - Fahrzeug durchsuchen - Fouiller Véhicule - Cerca Veicolo - Vasculhar Veículo - Przeszukaj pojazd - - - Pullout Players - Aus Fahrzeug ziehen - Sortir Personnes - Estrai Giocatore - Retirar Jogadores - Wyciągnij graczy - - - Impound Vehicle - Fahrzeug beschlagnahmen - Mise en fourrière - Sequestra Veicolo - Apreender Veículo - Usunń pojazd - - - Mine from device - Vom Gerät abbauen - Dispositif de minage - Piazza mine dal veicolo - Minerar - Uruchom wydobycie - - - - - Sending request to server for player information UID [%1] - Frage Spieler Informationen zu UID [%1] ab - Envoi de la requête au serveur pour obtenir des informations lecteur UID [%1] - Invio richiesta al server per le informazioni del giocatore UID [%1] - Obtendo informações do UID [%1] no servidor - Wysyłam żądanie do serwera po informację o fraczu UID [%1] - - - The server didn't find any player information matching your UID, attempting to add player to system. - Der Server hat keine Spieler Informationen zu deiner UID gefunden, versuche, Spieler ins System hinzuzufügen. - Le serveur n'a pas trouvé toutes les informations de lecteur correspondant à votre UID, tentative d'ajout du joueur dans le système. - Il server non ha trovato alcuna informazione sul giocatore con il tuo UID, tentativo di aggiunta del giocatore al sistema. - O servidor não encontrou nenhuma informação correspondente ao seu UID, tentando adicionar jogador ao sistema. - Serwer nie odnalazł informacji zgodnych z UID, dodaję gracza do bazy danych. - - - There was an error in trying to setup your client. - Es gab einen Fehler beim Versuch, deinen Client einzurichten. - Il y avait une erreur en essayant de configurer votre client. - C'è stato qualche errore nel cercare di inizializzare il tuo client - Ocorreu um erro ao tentar configurar o seu cliente. - Wystąpił błąd w trakcie ustawiania klienta - - - Received request from server... Validating... - Empfangene Daten vom Server... Überprüfe... - Demande reçue du serveur... Validation... - Ricevuta richiesta dal server... Convalida... - Pedido recebido do servidor... Validando... - Otrzymano żądanie serwera ... sprawdzam - - - You have already used the sync option, you can only use this feature once every 5 minutes. - Du hast bereits die Sync-Option verwendet, diese Funktion kann nur einmal alle 5 Minuten verwendet werden. - Vous avez déjà utilisé l'option de synchronisation, vous ne pouvez utiliser cette fonction une fois toutes les 5 minutes. - Hai già utilizzato la funzione di salva dati, puoi usare quest'opzione solo una volta ogni 5 minuti. - Você já usou a opção de sincronização, você só pode usar esse recurso uma vez a cada 5 minutos. - Użyłeś niedawno opcji synchronizacji, możesz jej używać maksymalnie co 5 minut. - - - Because of some cheater corrupting the BIS MP Framework they have stopped you from enjoying our mission.\n\nYou can try this again in a minute if you feel it is a mistake. - Wegen einiger Cheater ist das BIS MP Framework beschädigt. Versuche es in einer Minute nochmal. - En raison de certains tricheur tentant corrompre le BIS MP Framework,ils vous ont empêché de profiter de notre mission.\n\nVous pouvez essayer ce nouveau dans une minute si vous pensez que c'est une erreur. - A causa di qualche cheater che ha corrotto il BIS MP Framework il tuo divertimento in questa missione finisce qui per ora.\n\nPuoi provare a rientrare a breve se pensi sia un errore. - Por conta de alguns trapaceiros corrompendo o BIS MP Framework eles pararam de desfrutar a nossa missão.\n\nVocê pode tentar de novo em um minuto se achar que isso é um engano. - Z uwagi na to że niektórzy hakerzy psują BIS MP Framework zatrzymują możliwość zabawy na serwerze.\n\nMożesz spróbować ponowni za minutę jeśli uważasz to za błąd - - - Syncing player information to the server.\n\nPlease wait up to 20 seconds before leaving. - Synchronisieren der Spieler Informationen mit dem Server. \n\nBitte warte bis zu 20 Sekunden vor dem Verbindungsabbruch. - Synchronisation des informations de joueur sur le serveur.\n\nS'il vous plaît veuiller attendre 20 secondes avant de quitter. - Salvando le informazioni giocatore sul server.\n\nAttendere fino a 20 secondi prima di abbandonare. - Sincronizando informação do jogador com o servidor.\n\n Por favor aguarde 20 segundos antes de sair. - Synchronizuję informację z serwere, .\n\nProszę poczekać ok 20 sekund przed opuszczeniem serwera - - - - - Because you robbed the bank you can't use the ATM for 5 minutes. - Da du die Bank ausgeraubt hast, kannst du für 5 Minuten keine Bankomaten benutzen. - Vous avez pillé la banque, vous ne pouvez pas utiliser le guichet automatique pendant 5 minutes. - Avendo appena rapinato la banca non puoi utilizzare il Bancomat per 5 minuti. - Você não pode usar o ATM por 5 minutos, pois você assaltou o banco. - Z uwagi na to że okradłeś bank nie możesz korzystać z bankomatu przez najbliższe 5 minut. - - - You didn't choose the clothes you wanted to buy. - Du hast die Kleidung, die du kaufen wolltest, nicht ausgewählt. - Vous n'avez pas choisi les vêtements que vous vouliez acheter. - Non hai selezionato i vestiti che vuoi comprare. - Você não selecionou a roupa que deseja comprar. - Nie wybrałeś ubrań które chcesz kupić. - - - Sorry sir, you don't have enough money to buy those clothes. - Entschuldigung, du hast nicht genug Geld, um diese Kleidung zu kaufen. - Désolé monsieur, vous n'avez pas assez d'argent pour acheter ces vêtements. - Spiacente ma non hai fondi a sufficienza per comprare questi vestiti. - Desculpe senhor, você não tem dinheiro para pagar. Volte sempre. - Przepraszam, ale nie masz tyle pieniędzy aby kupić to ubranie. - - - Total: - Gesamt: - Total: - Totale: - Total: - Razem: - - - No Selection - Keine Auswahl - Aucune Sélection - Nessuna Selezione - Nada Selecionado - Nie wybrano - - - No Display - Keine Anzeige - Pas d'affichage - No Display - Sem exibir - Brak widoku - - - There are no vehicles near to sell. - Es ist keine Fahrzeug zum Verkaufen in der Nähe. - Il n'y a pas de véhicules à proximité à vendre - Nelle vicinanze non ci sono veicoli da vendere. - Não existem veículos para serem vendidos. - W pobliżu nie ma pojazdu do sprzedania. - - - There was a problem opening the chop shop menu. - Es gab ein Problem beim Öffnen des illegalen Fahrzeughändler-Menüs. - Il y a un probleme en ouvrant le menu du concessionnaire de véhicule illégal. - C'è stato un problema aprendo il menu del ricettatore - Ocorreu um problema abrindo o menu, tente novamente. - Powstał problem przy otwieraniu menu dziupli - - - Selling vehicle please wait... - Verkaufe Fahrzeug, bitte warten... - Vente du véhicule, veuillez patienter... - Vendendo il veicolo, attendere prego... - Vendendo o veiculo, aguarde.... - Sprzedaję pojazd proszę czekać ... - - - You need to be a civilian to use this store! - Du musst ein Zivilist sein, um diesen Shop nutzen zu können! - Vous devez être un civil pour utiliser ce magasin! - Devi essere un civile per utilizzare questo negozio! - Você tem que ser um cívil para user essa loja! - Musisz być cywilem aby móc kupować w tym sklepie! - - - You need to be a cop to use this store! - Du musst ein Polizist sein, um diesen Shop nutzen zu können! - Vous devez être un flic pour utiliser ce magasin! - Devi essere un poliziotto per utilizzare questo negozio! - Você tem que ser um policial para usar essa loja! - Musisz być policjantem aby kupować w tym sklepie! - - - You don't have rebel training yet! - Du besitzt keine Rebellen Lizenz! - Vous n'avez pas encore d'entrainement rebelle! - Devi essere ribelle per poter utilizzare questo negozio! - Você não tem Treinamento Rebelde! - Nie posiadasz treningu rebelianta! - - - You need a Diving license to use this shop! - Du benötigst eine Taucherlizenz, um diesen Tauchershop nutzen zu können! - Vous devez avoir votre diplome de plongée pour utiliser ce magasin! - Ti serve la licenza di pesca per usare questo negozio! - Você precisa de uma Licença de Mergulho para usar essa loja! - Nie posiadasz licencji nurka aby kupować w tym sklepie! - - - You need a %1 to buy from this shop! - Du benötigst eine %1, um diesen Shop nutzen zu können! - Vous avez besoin de %1 pour acheter dans ce magasin - Hai bisogno di %1 per comprare da questo negozio! - Você precisa de %1 para comprar nessa loja! - Potrzebujesz %1 by kupować w tym sklepie! - - - Clothing - Kleidung - Tenues - Abiti - Roupas - Odzież - - - Hats - Kopfbedeckungen - Chapeaux - Copricapi - Chapéus - Czapki - - - Glasses - Brillen - Lunettes - Occhiali - Óculos - Okulary - - - Vests - Westen - Gilet - Vesti - Coletes - Kamizelki - - - Backpack - Rucksack - Sac-à-dos - Zaini - Mochilas - Plecaki - - - There is currently a car there. - Es steht bereits ein Fahrzeug dort. - Il y a actuellement une voiture. - C'è già un veicolo qui. - Há um veiculo atualmente no respawn. - Aktualnie jest tam samochód. - - - You do not have enough money on you or in your bank to get your car back. - Du hast nicht genug Geld bei dir oder auf dem Bankkonto, um dein Auto auszulösen. - Vous n'avez pas assez d'argent sur vous ou dans votre banque pour obtenir votre voiture - Non hai abbastanza fondi alla mano o nel tuo conto in banca per poter riavere il tuo veicolo. - Você não tem dinheiro suficiente em sua conta bancária para obter seu veiculo. - Nie masz tyle pieniędzy na koncie aby wyciągnąć samochód. - - - You have unimpounded your %1 for $%3 - Du hast deinen %1 für $%3 ausgelöst - Vous avez sorti votre %1 pour $%3 - Hai ritirato dal sequestro il tuo %1 al costo di €%3 - Você liberou %1 for R$%3 - Przywróciłeś swój %1 za $%3 - - - You did not pick a vehicle! - Du hast kein Fahrzeug ausgewählt! - Vous n'avez pas choisi de véhicule! - Non hai selezionato un veicolo! - Você não conseguiu roubar o veiculo! - Nie wybrałeś pojazdu! - - - You do not have enough cash to purchase this vehicle.\n\nAmount Lacking: $%1 - Du hast nicht genug Geld, um das Fahrzeug zu kaufen.\n\nFehlender Betrag: $%1 - Vous n'avez pas assez d'argent pour acheter ce véhicule \n\nArgent Manquant: $%1 - Non hai fondi sufficienti per comprare questo veicolo.\n\nTi mancano: €%1 - Você não tem dinheiro suficiente para comprar esse veiculo.\n\nFaltam: R$%1 - Nie masz tyle pieniędzy by kupić ten pojazd.\n\nBrakuje: $%1 - - - You do not have the required license! - Du besitzt die benötigte Lizenz nicht! - Vous n'avez pas la licence requise! - Non hai la licenza richiesta per l'acquisto! - Você não tem a licença necessária! - Nie posiadasz odpowiedniej licencji! - - - There is a vehicle currently blocking the spawn point - Ein Fahrzeug blockiert gerade den Spawnpunkt - Il y a actuellement un véhicule qui bloque le point de spawn - C'è già un veicolo che blocca la zona di spawn - Existe um veiculo bloquenado a area de respaw - Inny pojazd blokuje miejsce odrodzenia pojazdów - - - You bought a %1 for $%2 - Du kaufst eine(n) %1 für $%2 - Vous avez acheté un %1 pour $%2 - Hai comprato un %1 al costo di €%2 - Você comprou %1 por R$%2 - Kupiłeś %1 za $%2 - - - Rental Price: - Mietpreis: - Prix de location: - Costo Noleggio: - Alugar: - Wypożyczenie: - - - Ownership Price: - Kaufpreis: - Prix d'achat: - Costo Acquisto: - Comprar: - Kupno: - - - Max Speed: - Max. Geschwindigkeit: - Vitesse Max: - Velocità Max: - Velocidade Máxima: - Prędkość: - - - Horse Power: - Pferdestärken: - Puissance en chevaux: - Cavalli: - Cavalos de Força: - Moc: - - - Passenger Seats: - Passagierplätze: - Sieges passager: - Sedili passeggeri: - Assentos: - Ilość miejsc: - - - Trunk Capacity: - Kofferraumgröße: - Capacité du coffre: - Capacità Inventario: - Armazenamento: - Pojemność bagażnika: - - - Fuel Capacity: - Tankgröße: - Capacité du réservoir: - Capacità Serbatoio: - Autonomia: - Pojemność baku: - - - Armor Rating: - Panzerungsbewertung: - Blindage: - Resistenza: - Blindagem: - Pancerz - - - Retrieval Price: - Einstellpreis: - Prix de sortie: - Costo di ritiro: - Preço para Recuperar: - Koszt wyciągnięcia: - - - Sell Price: - Verkaufspreis: - Prix de vente - Costo di vendita: - Preço de Venda - Cena sprzedaży: - - - Color: - Farbe: - Couleur - Colore: - Cor: - Kolor - - - You are not allowed to use this shop! - Du bist nicht befugt, diesen Shop zu benutzen! - Vous n'êtes pas autorisé à utiliser cette boutique! - Non sei autorizzato ad usare questo negozio! - Você não está autorizado a utilizar essa loja! - Nie jesteś uprawniony do używania tego sklepu! - - - You need to select an item to buy. - Du musst einen Gegenstand auswählen, um ihn zu kaufen. - Vous devez selectionner un objet pour l'acheter. - Seleziona un oggetto per poterlo comprare. - Você precisa selecionar um item para comprar. - Musisz zaznaczyć co chcesz kupić. - - - You didn't enter an actual number - Du hast keine echte Zahl eingegeben - Vous n'avez pas saisi un nombre réel - Non hai inserito correttamente un numero - Você não digitou um número válido. - Nie podałeś aktualnego numeru - - - You don't have that many items to sell! - Du hast nicht so viele Gegenstände zum Verkaufen! - Vous n'avez pas autant d'articles à vendre! - Non hai tutti quegli oggetti da vendere! - Você não tem todos esse items para vender - Nie masz tak dużo rzeczy do sprzedania! - - - The gang has enough funds to pay for this, would you like to pay with the gangs funds or your own? - Die Gang hat genügend Geld, um dafür zu zahlen. Willst du mit dem Geld der Gang oder deinem eigenen bezahlen? - Le gang a suffisamment de fonds pour payer pour cela, voulez-vous payer avec les fonds de gangs ou les vôtres? - La Gang ha fondi a sufficienza per pagare questo, vuoi usare i fondi della Gang o i tuoi personali? - A Gangue tem dinheiro suficiente para pagar por isso, você gostaria de usar o dinheiro da Gangue? - Gang posiada wystarczającą ilość środków aby za to zapłacić, chcesz zapłacić za to środkami gangu, czy własnymi? - - - Gang Funds: - Geld der Gang: - Fonds du gang: - Fondi Gang: - Fundos da Gangue: - Środki gangu: - - - Your Cash: - Bargeld: - Votre argent: - Tuoi Fondi: - Seu Dinheiro: - Twoje środki: - - - Pay with cash or gang funds - Mit Bargeld oder Geld der Gang bezahlen - Payez avec votre argent ou avec les fonds du gangs - Paga con i tuoi contanti o i fondi della Gang - Pagar com a sua conta ou a da Gangue - Zapłać gotówką albo środkami gangu - - - Gang Funds - Geld der Gang - Fonds du gang: - Fondi Gang - Gangue - Środki gangu - - - Your Cash - Bargeld - Votre argent - Tuoi Fondi - Seu - Twoje środki - - - You bought %1 %2 for $%3 with the gangs funds - Du kaufst %1 %2 für $%3 mit dem Geld der Gang - Vous avez acheté %1 %2 pour $%3 avec les fonds gangs - Hai comprato %1 %2 al costo di €%3 con i fondi della Gang - Você comprou %1 %2 por R$%3 com o dinheiro da gangue - Kupiłeś %1 %2 za $%3 ze środków gangu - - - You bought %1 %2 for $%3 - Du kaufst %1 %2 für $%3 - Vous avez acheté %1 %2 pour $%3 - Hai comprato %1 %2 al costo di €%3 - Voce comprou %1 %2 por R$%3 - Kupiłeś %1 %2 za $%3 - - - You sold %1 %2 for $%3 - Du verkaufst %1 %2 für $%3 - Vous avez vendu %1 %2 pour $%3 - Hai venduto %1 %2 al prezzo di €%3 - Você vendeu %1 %2 por R$%3 - Sprzedałeś %1 %2 za $%3 - - - You need to select an item to buy/sell. - Du musst einen Gegenstand auswählen, um ihn zu kaufen / zu verkaufen. - Vous devez sélectionner un élément pour acheter/vendre - Devi selezionare un oggetto per comprare/vendere. - Selecione um item para comprar ou vender. - Musisz wybrać rzecz którą chcesz kupić/sprzedać - - - You sold a %1 for <t color='#8cff9b'>$%2</t> - Du hast eine %1 für <t color='#8cff9b'>$%2</t> verkauft - Vous avez vendu un %1 pour <t color='#8cff9b'>$%2</t> - Hai venduto un %1 al prezzo di <t color='#8cff9b'>$%2</t> - Você vendeu %1 por <t color='#8cff9b'>R$%2</t> - Sprzedałeś %1 za <t color='#8cff9b'>$%2</t> - - - You bought a %1 for <t color='#8cff9b'>$%2</t> with the gangs funds. - Du hast eine %1 für <t color='#8cff9b'>$%2</t> mit dem Geld der Gang gekauft. - Vous avez acheté un %1 pour <t color='#8cff9b'>$%2</t> avec les fonds du gang. - Hai comprato un %1 al costo di <t color='#8cff9b'>$%2</t> con i fondi della Gang. - Você comprou %1 por <t color='#8cff9b'>R$%2</t> com o dinheiro da gangue. - Kupiłeś %1 za <t color='#8cff9b'>$%2</t> ze środków gangu. - - - You bought a %1 for <t color='#8cff9b'>$%2</t> - Du hast eine %1 für <t color='#8cff9b'>$%2</t> gekauft - Vous avez acheté un %1 pour <t color='#8cff9b'>$%2</t> - Hai comprato un %1 al costo di <t color='#8cff9b'>$%2</t> - Você comprou %1 por <t color='#8cff9b'>R$%2</t> - Kupiłeś %1 za <t color='#8cff9b'>$%2</t> - - - Shop Inventory - Ladeninventar - Inventaire de la boutique - Inventario Negozio - Loja de Inventário - Wyposażenie sklepu - - - Your Inventory - Dein Inventar - Votre inventaire - Inventario Personale - Seu Inventário - Twoje wyposażenie - - - - - You will receive your next paycheck in %1 minutes - Du erhältst deinen nächsten Gehaltsscheck in %1 Minuten - Vous recevrez votre prochain chèque de paie dans %1 minutes - Riceverai il tuo prossimo stipendio in %1 minuti - Você irá receber seu próximo pagamento em %1 minuto(s) - Otrzymasz kolejną wypłatę w ciągu %1 minut. - - - You have missed a paycheck because you were dead. - Du erhältst kein Gehaltsscheck, da du gestorben bist. - Vous avez manqué un chèque de paie parce que vous étiez mort. - Hai perso uno stipendio perche eri morto. - Você não recebeu seu pagamento pois estava morto. - Ominęła cię wypłata ponieważ byłeś martwy. - - - You have received a paycheck of $%1 - Du hast deinen Gehaltscheck in Höhe von $%1 erhalten - Vous avez reçu un salaire de $%1 - Hai ricevuto uno stipendio di €%1 - Você recebeu seu pagamento de R$%1 - Otrzymałeś wypłatę w kwocie $%1 - - - - - Drop Fishing Net - Fischernetz auswerfen - Drop Fishing Net - Drop Fishing Net - Jogar Rede de Pesca - Zarzuć sieć - - - Rob Person - Person ausrauben - Rob Person - Rob Person - Roubar Jogador - Obrabuj osobę - - - - - Fish Market - Sklep rybny - - - Hospital - Szpital - - - Police Station - Posterunek policji - - - Police Air HQ - Baza lotnicza policji - - - Iron Mine - Kopalnia miedzi - - - Salt Mine - Kopalnia soli - - - Salt Processing - Warzelnia soli - - - Altis Corrections - Więzienie Altis - - - Police HQ - KG Policji Altis - - - Coast Guard - Straż przybrzeżna - - - Rebel Outpost - Baza rebeliantów - - - Air Shop - Sklep lotniczy - - - Truck Shop - Salon ciężarówek - - - Oil Processing - Rafineria ropy naftowej - - - Iron_processing - Huta żelaza - - - Sand Mine - Kopalnia piasku - - - Chop Shop - Dziupla - - - Cocaine Processing - Oczyszczanie kokainy - - - Copper Mine - Kopalnia miedzi - - - ATM - Bankomat - - - Local Bank - Bank Altis - - - Car Shop - Salon samochodowy - - - Hospital/Clinic - Klinika Altis - - - Diamond Mine - Kopalnia diamentów - - - General Store - Sklep techniczny - - - Civilian Shops - Sklepy dla cywilów - - - Boat Shop - Sklep z łodziami - - - Bruce's Outback Outfits - Sklep odzieżowy - - - Apple Field - Sad jabłkowy - - - Peaches Field - Sad brzoskwiniowy - - - Market - Market spożywczy - - - Air Service Station - Serwis lotniczy - - - Channel 7 News - Maszt nadawczy - - - DMV - Urząd licencyjny - - - Delivery Missions - Misje kurierskie - - - Diving Shop - Akcesoria do nurkowania - - - Drug Dealer - Diler narkotyków - - - Sofia Freight Yard - Terminal transportowy - - - Diamond Processing - Szlifierz diamentów - - - Oil Field - Szyb naftowy - - - Weed Field - Pole marihuany - - - Weed Processing - Suszarnia marihuany - - - Boat Spawn - Przystań - - - Copper Processing - Huta miedzi - - - Cocaine Field - Pole kokainy - - - Oil Trader - Skup benzyny - - - Salt Trader - Skup soli - - - Diamond Trader - Skup diamentów - - - Glass Trader - Skup szkła - - - Iron / Copper Trader - Skup metali - - - Sand Processing - Huta szkła - - - Gun Store - Sklep z bronią - - - Heroin Field - Pole heroiny - - - Heroin Processing - Oczyszczanie heroiny - - - Garage - Garaż - - - Federal Reserve - Bank Rezerw Federalnych - - - Highway Patrol Outpost - Posterunek policji drogowej - - - Rock Quarry - Kamieniołom - - - Rock Processing - Wytwórnia cementu z kamienia - - - Cement Trader - Skup cementu - - - Turtle Poaching - Strefa występowania żółwi morskich - - - Turtle Dealer - Skup żółwi - - - Go-Kart Shop - Sklep z GoKartami - - - Gold Bars Buyer - Skup złota - - - Gang Hideout 1 - Kryjówka gangu 1 - - - Gang Hideout 2 - Kryjówka gangu 2 - - - Gang Hideout 3 - Kryjówka gangu 3 - - - Hunting Grounds - Strefa polowań - - - diff --git a/BEFilters/README.md b/BEFilters/README.md new file mode 100644 index 00000000..dd0967a3 --- /dev/null +++ b/BEFilters/README.md @@ -0,0 +1,8 @@ +BattlEye Filters +================ +The BattlEye filters (.txt files) go into: ARMA_3_DIR → profiles → BattlEye → missionName.mapName
+Example: arma3 → profiles → BattlEye → Altis_Life.Altis

+These BattlEye filters are a work-in-progress and are only applicable to the latest vanilla release of [Altis Life RPG] (https://github.com/ArmaLife/Framework).

+Any modification to the Altis Life RPG mission files will require the BattlEye filters to be updated. + +Read [A Guide to BattlEye Filters​](http://opendayz.net/threads/a-guide-to-battleye-filters.21066/) and [How To: BattlEye filters - DO IT YOURSELF!](http://www.exilemod.com/topic/74-how-to-battleye-filters-do-it-yourself/) to learn how to update your own BattlEye filters for your own custom mission or mod. See also [BattlEye Filters](https://github.com/ArmaLife/Framework/wiki/BattlEye-Filters) on the ArmaLife/Framework GitHub wiki. diff --git a/BEFilters/addBackpackCargo.txt b/BEFilters/addBackpackCargo.txt new file mode 100644 index 00000000..b282e5ab --- /dev/null +++ b/BEFilters/addBackpackCargo.txt @@ -0,0 +1,32 @@ +//regex +1 "" +5 "" !B_(OutdoorPack|AssaultPack|TacticalPack|Kitbag|FieldPack|Bergen|Carryall)_(blk|khk|dgtl|rgr|sgg|cbr|oli|mcamo|ocamo|oucamo) !B_Parachute +5 B_AssaultPack_blk_DiverExp +5 B_AssaultPack_mcamo_AT +5 B_AssaultPack_mcamo_AA +5 B_AssaultPack_mcamo_AAR +5 B_AssaultPack_mcamo_Ammo +5 B_AssaultPack_rgr_LAT +5 B_AssaultPack_rgr_Medic +5 B_AssaultPack_rgr_Repair +5 B_AssaultPack_rgr_ReconMedic +5 B_AssaultPack_rgr_ReconExp +5 B_AssaultPack_rgr_ReconLAT +5 B_Kitbag_rgr_Exp +5 B_Kitbag_mcamo_Eng +5 B_FieldPack_ocamo_Medic +5 B_FieldPack_ocamo_AA +5 B_FieldPack_ocamo_AAR +5 B_FieldPack_ocamo_ReconMedic +5 B_FieldPack_ocamo_ReconExp +5 B_Carryall_ocamo_Exp +5 B_Carryall_mcamo_AAA +5 B_Carryall_mcamo_AAT +5 B_Carryall_ocamo_AAA +5 B_Carryall_ocamo_Eng +5 B_Carryall_cbr_AAT +5 B_Carryall_oucamo_AAT +5 B_Carryall_oucamo_AAA +5 B_Carryall_oucamo_Exp +5 B_Carryall_oucamo_Eng +5 B_B_Parachute_02_F diff --git a/BEFilters/addMagazineCargo.txt b/BEFilters/addMagazineCargo.txt new file mode 100644 index 00000000..7fc7c3b8 --- /dev/null +++ b/BEFilters/addMagazineCargo.txt @@ -0,0 +1,3 @@ +//regex +1 "" +5 "" !=[69]Rnd_45ACP_(Cylinder|Mag) !=[13][60]Rnd_9x21_Mag !=[123][60]Rnd_65x39_caseless_(green|mag) !=[123]0Rnd_[57][56][62]x[45][45]_(Mag|Stanag|UW_Mag) !=Chemlight_(blue|green|red|yellow) !=HandGrenade_Stone diff --git a/BEFilters/addWeaponCargo.txt b/BEFilters/addWeaponCargo.txt new file mode 100644 index 00000000..f3950560 --- /dev/null +++ b/BEFilters/addWeaponCargo.txt @@ -0,0 +1,3 @@ +//regex +1 "" +5 "" !=hgun_(ACPC2|Rook40|PDW2000|Pistol_heavy_02)_F !=hgun_P07_(snds_)?F !=arifle_(TRG20|Katiba|SDAR|MX[C]?)_F !=srifle_DMR_01_F !=SMG_02_ACO_F diff --git a/BEFilters/attachTo.txt b/BEFilters/attachTo.txt new file mode 100644 index 00000000..ee65fe14 --- /dev/null +++ b/BEFilters/attachTo.txt @@ -0,0 +1,3 @@ +//regex +1 "" +5 "" !Box_IND_Grenades_F !B_supplyCrate_F !Land_(ClutterCutter_small|Razorwire)_F !B_RangeMaster_F !C_man_1 !B_Quadbike_01_F ![BOI]_Truck_0[123]_(box|covered|device|fuel|medical|transport)_F !C_Hatchback_01_(sport_)?F ![BC]_(G_)?Offroad_01_(armed_)?F !C_SUV_01_F !C_Van_01_(transport|box|fuel)_F !C_Kart_01_(Blu|Fuel|Red|Vrana)_F ![BCO]_Heli_Light_0[12]_(civil_|stripped_|unarmed_)?F !C_Rubberboat !C_Boat_Civil_01_(police_)?F !B_SDV_01_F ![BO]_MRAP_0[12]_(hmg_)?F !B_(Boat|Heli)_Transport_01_F !B_Boat_Armed_01_minigun_F !NetworkMessageCreateHelicopterRTD diff --git a/BEFilters/createVehicle.txt b/BEFilters/createVehicle.txt new file mode 100644 index 00000000..aff8b011 --- /dev/null +++ b/BEFilters/createVehicle.txt @@ -0,0 +1,32 @@ +//regex +1 "" !=GroundWeaponHolder !=WeaponHolderSimulated !Supply[\d]{1,3} !=#lightpoint !=Land_ClutterCutter_small_F +5 "" !=GroundWeaponHolder !=WeaponHolderSimulated !Supply[\d]{1,3} !=#lightpoint !=Land_ClutterCutter_small_F !B_(OutdoorPack|AssaultPack|TacticalPack|Kitbag|FieldPack|Bergen|Carryall)_(blk|khk|dgtl|rgr|sgg|cbr|oli|mcamo|ocamo|oucamo) !B_Parachute !B_Quadbike_01_F ![BOI]_Truck_0[123]_(box|covered|device|fuel|medical|transport)_F !C_Hatchback_01_(sport_)?F ![BC]_(G_)?Offroad_01_(armed_)?F !C_SUV_01_F !C_Van_01_(transport|box|fuel)_F !C_Kart_01_(Blu|Fuel|Red|Vrana)_F ![BCO]_Heli_Light_0[12]_(civil_|stripped_|unarmed_)?F !C_Rubberboat !C_Boat_Civil_01_(police_)?F !B_SDV_01_F ![BO]_MRAP_0[12]_(hmg_)?F !B_(Boat|Heli)_Transport_01_F !B_Boat_Armed_01_minigun_F !=Chemlight_(red|yellow|green|blue) !=GrenadeHand_stone !=Land_(Razorwire|Money|Suitcase|CanisterFuel|Can|BottlePlastic|TacticalBacon)_F !=Land_Can_V3_F !=Land_BottlePlastic_V1_F !=B_RangeMaster_F !=C_man_1 !=Bo_GBU12_LGB_MI10 !=(CMflare_Chaff_|SmokeLauncher)Ammo !=Box_IND_Grenades_F !=B_supplyCrate_F +5 B_AssaultPack_blk_DiverExp +5 B_AssaultPack_mcamo_AT +5 B_AssaultPack_mcamo_AA +5 B_AssaultPack_mcamo_AAR +5 B_AssaultPack_mcamo_Ammo +5 B_AssaultPack_rgr_LAT +5 B_AssaultPack_rgr_Medic +5 B_AssaultPack_rgr_Repair +5 B_AssaultPack_rgr_ReconMedic +5 B_AssaultPack_rgr_ReconExp +5 B_AssaultPack_rgr_ReconLAT +5 B_Kitbag_rgr_Exp +5 B_Kitbag_mcamo_Eng +5 B_FieldPack_ocamo_Medic +5 B_FieldPack_ocamo_AA +5 B_FieldPack_ocamo_AAR +5 B_FieldPack_ocamo_ReconMedic +5 B_FieldPack_ocamo_ReconExp +5 B_Carryall_ocamo_Exp +5 B_Carryall_mcamo_AAA +5 B_Carryall_mcamo_AAT +5 B_Carryall_ocamo_AAA +5 B_Carryall_ocamo_Eng +5 B_Carryall_cbr_AAT +5 B_Carryall_oucamo_AAT +5 B_Carryall_oucamo_AAA +5 B_Carryall_oucamo_Exp +5 B_Carryall_oucamo_Eng +5 B_B_Parachute_02_F diff --git a/BEFilters/deleteVehicle.txt b/BEFilters/deleteVehicle.txt new file mode 100644 index 00000000..2db515b2 --- /dev/null +++ b/BEFilters/deleteVehicle.txt @@ -0,0 +1,5 @@ +//regex +1 "" +1 "" !Land_(Razorwire|Money|Suitcase|CanisterFuel|Can|BottlePlastic|TacticalBacon)_F !Land_Can_V3_F !Land_BottlePlastic_V1_F !Box_IND_Grenades_F !B_supplyCrate_F !(Cock|Goat|Hen|Ornate|Sheep)_random_F !(CatShark|Mackerel|Mullet|Salema|Tuna|Turtle)_F +//Issue: impounding a vehicle may cause a deleteVehicle kick but no information on classname. Example log: +//06.02.2016 19:14:02: playerName (10.0.0.7:2304) 12345678901234567890123456789012 - #0 4:9 diff --git a/BEFilters/mpEventHandler.txt b/BEFilters/mpEventHandler.txt new file mode 100644 index 00000000..02ae3726 --- /dev/null +++ b/BEFilters/mpEventHandler.txt @@ -0,0 +1,3 @@ +//new +1 "" +7 "" !="_this call fn_whoDoneIt" diff --git a/BEFilters/publicVariable.txt b/BEFilters/publicVariable.txt new file mode 100644 index 00000000..7718bb24 --- /dev/null +++ b/BEFilters/publicVariable.txt @@ -0,0 +1,3 @@ +//regex +1 "" +5 "" !=life_fnc_RequestClientId !=money_log !=advanced_log !=(cop|civ)_[\d]{1,3} !=medic_[1-6] !=life_broadcastTimer diff --git a/BEFilters/publicVariableVal.txt b/BEFilters/publicVariableVal.txt new file mode 100644 index 00000000..e2e8188c --- /dev/null +++ b/BEFilters/publicVariableVal.txt @@ -0,0 +1,3 @@ +//regex +1 "" !=(cop|civ)_[\d]{1,3} !=medic_[1-6] !"arrested ." !"picked up [\d]{1,3} [a-z ]{1,17}" !"created a gang named: [a-z0-9_ ]{1,32} for \$[\d]" !"(bought|sold) a house for \$" !"(bought|chopped|sold) vehicle ." !"(deposited|picked up|robbed|transferred|withdrew) \$" ![\d]{1,5}\.[\d]{1,3} +5 "" !=(cop|civ)_[\d]{1,3} !=medic_[1-6] !"arrested ." !"picked up [\d]{1,3} [a-z ]{1,17}" !"created a gang named: [a-z0-9_ ]{1,32} for \$[\d]" !"(bought|sold) a house for \$" !"(bought|chopped|sold) vehicle ." !"(deposited|picked up|robbed|transferred|withdrew) \$" ![\d]{1,5}\.[\d]{1,3} diff --git a/BEFilters/publicVariableVar.txt b/BEFilters/publicVariableVar.txt new file mode 100644 index 00000000..546aad8c --- /dev/null +++ b/BEFilters/publicVariableVar.txt @@ -0,0 +1,3 @@ +//new +//1 "" +//5 "" diff --git a/BEFilters/remoteControl.txt b/BEFilters/remoteControl.txt new file mode 100644 index 00000000..9fee76b7 --- /dev/null +++ b/BEFilters/remoteControl.txt @@ -0,0 +1,2 @@ +//new +7 "" diff --git a/BEFilters/remoteExec.txt b/BEFilters/remoteExec.txt new file mode 100644 index 00000000..850ac2e7 --- /dev/null +++ b/BEFilters/remoteExec.txt @@ -0,0 +1,3 @@ +//regex +1 "" !="_this call fn_whoDoneIt" +5 "" !BIS_fnc_(effectKilled(AirDestruction|Secondaries)|execVM) !DB_fnc_(insertRequest|queryRequest|updatePartial|updateRequest) !HC_fnc_(addContainer|addHouse|chopShopSell|deleteDBContainer|getVehicles|insertGang|insertRequest|jailSys|queryRequest|receivekeyofServer) !HC_fnc_(removeGang|sellHouse(Container)?|spawnVehicle|spikeStrip) !HC_fnc_update(Gang|HouseContainers|HouseTrunk|Partial|Request) !HC_fnc_vehicle(Create|Delete|Store|Update) !HC_fnc_wanted(Add|Bounty|Crimes|Fetch|ProfUpdate|Remove) !life_fnc_(AAN|addVehicle2Chain|adminid|admininfo|animSync|bountyReceive|broadcast|colorVehicle|copLights) !life_fnc_(copSearch|CopSiren|corpse|demoChargeTimer|flashbang|freezePlayer|gangCreated|gangDisbanded|gangInvite) !life_fnc_(garageRefund|giveDiff|hideObj|impoundMenu|jail(Me|Sys)?) !life_fnc_(jumpFnc|knockedOut|licenseCheck|licensesRead|lightHouse|lockVehicle|medic(Lights|Request|Siren)) !life_fnc_(moveIn|pickupItem|pickupMoney|pulloutVeh|receiveItem|receiveMoney|removeLicenses|restrain|revived) !life_fnc_(robPerson|robReceive|say3D|searchClient|seizeClient|setFuel|simDisable|soundDevice|spikeStripEffect) !life_fnc_(tazeSound|ticketPaid|ticketPrompt|vehicleAnimate) !life_fnc_wanted(Add|Bounty|Crimes|Fetch|Info|List|ProfUpdate|Remove) !life_fnc_wireTransfer !SOCK_fnc_(dataQuery|insertPlayerInfo|updateRequest) !SPY_fnc_(cookieJar|notifyAdmins|observe) !TON_fnc_(addContainer|addHouse|chopShopSell|cleanupRequest|handleBlastingCharge) !TON_fnc_clientGang(Kick|Leader|Left) !TON_fnc_(clientGetKey|clientMessage) !TON_fnc_(deleteDBContainer|getID|getVehicles|insertGang|keyManagement|managesc|pickupAction|player_query|recupkeyforHC) !TON_fnc_(removeGang|sellHouse(Container)?|setObjVar|spawnVehicle|spikeStrip) !TON_fnc_update(Gang|HouseContainers|HouseTrunk) !TON_fnc_vehicle(Create|Delete|Store|Update) !="_this call fn_whoDoneIt" diff --git a/BEFilters/scripts.txt b/BEFilters/scripts.txt new file mode 100644 index 00000000..d0eb4578 --- /dev/null +++ b/BEFilters/scripts.txt @@ -0,0 +1,20 @@ +//new2 +1 "" !="this allowDamage false;" !="this enableSimulation false;" !"this addAction[localize\"STR_" !"this addAction[format[\"%1 ($%2)\",localize (getText(missionConfigFile" +5 addAction !"this addAction[format[\"%1 ($%2)\",localize (getText(missionConfigFile" !HC_fnc_getVehicles !life_fnc_atmMenu !life_fnc_captureHideout !life_fnc_chopShopMenu !life_fnc_clothingMenu !life_fnc_dpFinish !life_fnc_dropFishingNet !life_fnc_fedCamDisplay !life_fnc_fuelStatOpen !life_fnc_getDPMission !life_fnc_healHospital !life_fnc_packupSpikes !life_fnc_postBail !life_fnc_processAction !life_fnc_questionDealer !life_fnc_robAction !life_fnc_safeFix !life_fnc_safeOpen !life_fnc_serviceChopper !life_fnc_storeVehicle !life_fnc_vehicleShopMenu !life_fnc_virt_menu !life_fnc_weaponShopMenu !life_spikestrip !TON_fnc_getVehicles +5 createDialog !\"altisPhone\" !\"Chop_Shop\" !\"DeathScreen\" !\"Federal_Safe\" !\"Life_Admin_Compensate\" !\"life_admin_menu\" !\"Life_atm_management\" !\"Life_cell_phone\" !\"Life_Clothing\" !\"Life_Create_Gang_Diag\" !\"Life_FuelStat\" !\"Life_impound_menu\" !\"Life_key_management\" !\"Life_My_Gang_Diag\" !\"life_news_broadcast\" !\"life_spawn_selection\" !\"life_ticket_give\" !\"life_ticket_pay\" !\"Life_Vehicle_Shop_v2\" !\"life_wanted_menu\" !\"life_weapon_shop\" !\"pInteraction_Menu\" !\"playerSettings\" !\"RscDisplayCamera\" !\"RscDisplayDebugPublic\" !\"RscDisplayWelcome\" !\"RscGUIEditor\" !\"SettingsMenu\" !\"shops_menu\" !\"TrunkMenu\" !\"vInteraction_Menu\" +5 ctrlCreate !\"RscControlsGroupNoHScrollbars\" +5 ctrlDelete !="};\n};\n\n\n\n\n\n\n_ListGroup = _display displayctrl 21903 ;\n\n\n\nctrlDelete _ListGroup;\n_listGroupCfg = configfile >> \"RscDisplayDebri" !=" select 2; \n_ListGroup = _display displayctrl 38400;\n\n\n\nctrlDelete _ListGroup;\n_listGroupCfg = configfile >> \"RscDisplayDLCCo" +5 forceRespawn !="Helper\",\"BIS_fnc_reviveRemoveHelper\",\"BIS_fnc_reviveHandleForceRespawnAction\",\"BIS_fnc_reviveHandleIncapUnitDetection\",\"BIS_fnc_" !="[\"a3\functions_f_mp_mark\revive\fn_reviveHandleForceRespawnAction.sqf\",\".sqf\",0,false,false,false,\"A3_Mark\",\"Revive\",\"reviveHand" !="_reviveHandleReviveAction;\n\n\n[] spawn bis_fnc_reviveHandleForceRespawnAction;\n\n\n[] spawn bis_fnc_reviveHandleIncapUnitDetection;" !="];\nplayer hideobject true;\nplayer enablesimulation false;\nforcerespawn player;\n};\n} else {\nif (isnil \"_respawnOnStart\") then {_r" +5 W_O_O_K_I_E !="\"_endM\"];\nif (isServer && !hasInterface) exitWith {}; \n\n\n\nW_O_O_K_I_E_ANTI_ANTI_HAX = compileFinal (if (\"false\" isEqualType \"\") " +5 E_X_T_A_S_Y !="lse\" isEqualType \"\") then {\"false\"} else {str(\"false\")});\nE_X_T_A_S_Y_ANTI_ANTI_HAX = compileFinal (if (\"false\" isEqualType \"\") " +5 DO_NUKE !="false\" isEqualType \"\") then {\"false\"} else {str(\"false\")});\nDO_NUKE = compileFinal (if (\"false\" isEqualType \"\") then {\"false\"} e" +5 JxMxE !="\"false\" isEqualType \"\") then {\"false\"} else {str(\"false\")});\nJxMxE_spunkveh = compileFinal (if (\"false\" isEqualType \"\") then {\"f" +5 llyyssttiiccc !="then {\"false\"} else {str(\"false\")});\nJJJJ_MMMM___EEEEEEE_LLYYSSTTIICCC_SHIT_RE = compileFinal (if (\"false\" isEqualType \"\") then " +5 J_M_E_ +5 aNUScODERZ +5 Jesus +5 JJJJ_ !="\"false\" isEqualType \"\") then {\"false\"} else {str(\"false\")});\nJJJJ_MMMM___EEEEEEE_LLYYSSTTIICCC_SHIT_RE = compileFinal (if (\"fals" +5 ThirtySix +5 root_ +5 E5P +5 Bossmode diff --git a/BEFilters/selectPlayer.txt b/BEFilters/selectPlayer.txt new file mode 100644 index 00000000..f08c20c1 --- /dev/null +++ b/BEFilters/selectPlayer.txt @@ -0,0 +1,3 @@ +//new +1 "" +5 "" !B_RangeMaster_F !C_man_1 diff --git a/BEFilters/setDamage.txt b/BEFilters/setDamage.txt new file mode 100644 index 00000000..281b6a2c --- /dev/null +++ b/BEFilters/setDamage.txt @@ -0,0 +1,3 @@ +//regex +1 "" +5 "" !=0.[02][05]0000 diff --git a/BEFilters/setPos.txt b/BEFilters/setPos.txt new file mode 100644 index 00000000..50c038f3 --- /dev/null +++ b/BEFilters/setPos.txt @@ -0,0 +1,3 @@ +//regex +1 "" +5 "" !B_Quadbike_01_F ![BOI]_Truck_0[123]_(box|covered|device|fuel|medical|transport)_F !C_Hatchback_01_(sport_)?F ![BC]_(G_)?Offroad_01_(armed_)?F !C_SUV_01_F !C_Van_01_(transport|box|fuel)_F !C_Kart_01_(Blu|Fuel|Red|Vrana)_F ![BCO]_Heli_Light_0[12]_(civil_|stripped_|unarmed_)?F !C_Rubberboat !C_Boat_Civil_01_(police_)?F !B_SDV_01_F ![BO]_MRAP_0[12]_(hmg_)?F !B_(Boat|Heli)_Transport_01_F !B_Boat_Armed_01_minigun_F !B_RangeMaster_F !C_man_1 diff --git a/BEFilters/setVariable.txt b/BEFilters/setVariable.txt new file mode 100644 index 00000000..6d895432 --- /dev/null +++ b/BEFilters/setVariable.txt @@ -0,0 +1,3 @@ +//regex +1 "" +5 "" !bis_disabled_Door_[1-6] !=BIS_fnc_(selectRespawnTemplate_respawned|setVehicleMass) !=chargeplaced !container_(id|owner) !=containers !=currentlyEscorting !=dbInfo !=Escorting !=escortingPlayer !fuelTank(Work)? !gang_(bank|id|maxMembers|members|name|owner) !=gangOwner !=gbank_in_use_by !house_(id|owned|owner|sold) !houses_.+ !=inCapture !=inUse !=isEscorting !=item !life_(clientID|VEH_color) !=lights !=lightSource !=locked !=mining !(real)?name !=NPC !=playerSurrender !=rank !=restrained !=Revive !=Reviving !=robbed !safe(_open)? !=sellers !=siren !=slots !=spikeDeployed !=steam64id !=transporting !Trunk(_in_use(_by)?)? !=uid !=vehicle_info_owners !="(true|false) [\d]:[\d]+ (C_man_1|B_RangeMaster_F)" !=#var !=saved3deninventory diff --git a/BEFilters/setVariableVal.txt b/BEFilters/setVariableVal.txt new file mode 100644 index 00000000..801c5f5b --- /dev/null +++ b/BEFilters/setVariableVal.txt @@ -0,0 +1,2 @@ +//regex +1 "" !(true|false|any) !(cop|civ)_[\d]{1,3} !medic_[1-6] !=[\d]e\+00[67] !=[\d]\.[\d]{1,5}e\+00[67] !=[\d]{1,6} ![\d]{17} !=\[\d{1,5},\d{1,5}(.\d\d)?\] !"\[.{8}# \d{7}: (ammobox_f|supplydrop)\.p3d REMOTE" !=\[\[\],0\] !=\[\] !spikeDeployed !="C Charlie 2-3" !\[\"storage(big|small)\",[\d]{1,6}\] !\[\"(copper|iron|salt)_(unrefined|refined)\",[\d]{1,6}\] !\[\"(catshark|goat|hen|mackerel|mullet|ornate|rabbit|rooster|salema|sheep|tuna|turtle(_soup)?|(_raw))\",[\d]{1,6}\] !\[\"diamond_(cut|uncut)\",[\d]{1,6}\] !\[\"fuel(Empty|Full)\",[\d]{1,6}\] !\[\"(cocaine|heroin|oil)_(unprocessed|processed)\",[\d]{1,6}\] !\[\"(apple|blastingcharge|boltcutter|cannabis|cement|coffee|defusekit|donuts|glass|goldbar)\",[\d]{1,6}\] !\[\"(lockpick|marijuana|peach|pickaxe|redgull|rock|sand|spikeStrip|tbacon|waterBottle)\",[\d]{1,6}\] !\[\"(toolkit|defibrillator)\",[\d]{1,6}\] !\[\"money\",[\d]{1,6}\] !\[\"money\",[\d]\.[\d]{1,5}e\+[\d]{1,3}\] diff --git a/BEFilters/teamSwitch.txt b/BEFilters/teamSwitch.txt new file mode 100644 index 00000000..9fee76b7 --- /dev/null +++ b/BEFilters/teamSwitch.txt @@ -0,0 +1,2 @@ +//new +7 "" diff --git a/BEFilters/waypointCondition.txt b/BEFilters/waypointCondition.txt new file mode 100644 index 00000000..9fee76b7 --- /dev/null +++ b/BEFilters/waypointCondition.txt @@ -0,0 +1,2 @@ +//new +7 "" diff --git a/BEFilters/waypointStatement.txt b/BEFilters/waypointStatement.txt new file mode 100644 index 00000000..9fee76b7 --- /dev/null +++ b/BEFilters/waypointStatement.txt @@ -0,0 +1,2 @@ +//new +7 "" diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 00000000..4af0aacd --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,130 @@ +# Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License # + +(For a human-readable version of this license, see http://creativecommons.org/licenses/by-nc-nd/4.0/) + +By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. + +## Section 1 – Definitions.## + +1. **Adapted Material** means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. + +1. **Copyright and Similar Rights** means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. + +1. **Effective Technological Measures** means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. + +1. **Exceptions and Limitations** means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. + +1. **Licensed Material** means the artistic or literary work, database, or other material to which the Licensor applied this Public License. + +1. **Licensed Rights** means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. + +1. **Licensor** means the individual(s) or entity(ies) granting rights under this Public License. + +1. **NonCommercial** means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange. + +1. **Share** means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. + +1. **Sui Generis Database Rights** means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. + +1. **You** means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. + +## Section 2 – Scope.## +**License grant.** +1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: + 1. reproduce and Share the Licensed Material, in whole or in part, for NonCommercial purposes only; and + 1. produce and reproduce, but not Share, Adapted Material for NonCommercial purposes only. + +1. **Exceptions and Limitations**. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. + +1. **Term**. The term of this Public License is specified in Section 6(a). + +1. **Media and formats; technical modifications allowed**. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. + +1. Downstream recipients. + 1. **Offer from the Licensor – Licensed Material**. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. + 1. **No downstream restrictions**. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. + +1. **No endorsement**. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). + +**Other rights.** +1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. + +1. Patent and trademark rights are not licensed under this Public License. + +1. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties, including when the Licensed Material is used other than for NonCommercial purposes. + +## Section 3 – License Conditions. ## + +Your exercise of the Licensed Rights is expressly made subject to the following conditions. + +a. Attribution. + + 1. If You Share the Licensed Material, You must: + 1. retain the following if it is supplied by the Licensor with the Licensed Material: + - identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); + - a copyright notice; + - a notice that refers to this Public License; + - a notice that refers to the disclaimer of warranties; + - a URI or hyperlink to the Licensed Material to the extent reasonably practicable; + + 1. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and + 1. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. + + For the avoidance of doubt, You do not have permission under this Public License to Share Adapted Material. + + 1. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. + 1. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. + +## Section 4 – Sui Generis Database Rights. ## + +Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: + +1. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database for NonCommercial purposes only and provided You do not Share Adapted Material; + +2. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and + +3. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. + +## Section 5 – Disclaimer of Warranties and Limitation of Liability. ## + +1. **Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.** + +1. **To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.** + +1. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. + +## Section 6 – Term and Termination. ## + +1. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. + +1. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: + 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or + 1. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. + +1. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. + +1. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. + +## Section 7 – Other Terms and Conditions. ## + +1. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. + +1. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. + +## Section 8 – Interpretation. ## + +1. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. + +1. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. + +1. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. + +1. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. + +*Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses.* + +*Creative Commons may be contacted at creativecommons.org.* diff --git a/README.md b/README.md index 0d414f6d..79944e97 100644 --- a/README.md +++ b/README.md @@ -1,74 +1,68 @@ -Altis-Life v4.3.1 -================= -Altis Life or [Altis Life RPG] (http://www.altisliferpg.com) is developed by Tonic AKA [TAW_Tonic] (https://github.com/TAWTonic).
-This contains primarily the release contain and on-going development changes to the mission.
-Altis Life RPG by Tonic is licensed under a [Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License] (http://creativecommons.org/licenses/by-nc-nd/3.0/deed.en_US) -
-By using the framework and/or code inside the framework, you agree to the terms of agreement.
-The terms are subjected to be changed over time. -

-Disclaimer:
-The vast majority of the code / framework has been written by me.
-Any additional code / content used is fully credited and owned by it’s author as well as linked to the authors content (Forums,Media,etc).
-The additional content used within the framework either has the expressed permission of the content creators permission or was automatically used under the GPU (General Purpose License) from public posting with no usage / TOA / Disclaimer, however they still own the rights to their content.
-If in any case that content is being used within this mission / framework that the content creator doesn’t wish for it to be used due to my strict TOA / Agreement all you need to do is ask for it to be removed and it will be honored. +

Altis-Life

+

+ + Altis Life Version + +     + + Altis Life Release + +     + + Arma 3 Version + +
+ + Join the chat at https://discordapp.com/invite/0z4k0hcAcvMl2SQx + +     + + Join the chat at https://gitter.im/ArmaLife/Framework + +     + + Join the support chat at https://gitter.im/ArmaLife/Framework/Support + +
+ + Stories in Ready + +     + + License Type + +     + + Build Status + +

+ +Altis Life or [Altis Life RPG] (http://www.altisliferpg.com) was created and mainly developed by Tonic AKA [TAW_Tonic] (https://github.com/TAWTonic).
+Altis Life is currently being maintained by [Arma Life RPG] (https://github.com/ArmaLife).

-This build is for [extDB2] (https://github.com/Torndeco/extdb2) ------- -To setup extDB2 you need to use the Windows/Linux pre-compiled build and edit the extdb-conf.ini "MySQL_Example" field to "AltisLife" with your Database name and login SQL user details, like this: -``` -[AltisLife] -Type = MySQL -Name = arma3life +By using the framework and/or code inside the framework, you agree to the [terms of agreement] (README.md/#usage--terms-of-agreement).
+The terms are subjected to be changed over time.
-Username = MyDatabaseLogin -Password = MyDatabasePassword +[How to configure your server] (https://github.com/ArmaLife/Framework/wiki/Setup-Server) +------------------------------------- +You can found all the steps to have a fully working server in our [github wiki] (https://github.com/ArmaLife/Framework/wiki). -IP = 127.0.0.1 -Port = 3306 -``` -
- Make sure the following files/folders are in the root directory of your ARMA 3 server files (where the exe is): -Windows: -``` -ARMA_3_DIR -├ @extDB2 -| ├ extDB -| | └ sql_custom_v2 -| | └ altis-life.ini -| ├ extdb-conf.ini -| └ extDB2.dll -└ tbbmalloc.dll -``` -Linux: -``` -ARMA_3_DIR -└ @extDB2 - ├ extDB - | └ sql_custom_v2 - | └ altis-life.ini - ├ extdb-conf.ini - └ extDB2.so -``` -You can drag the extDB2.dll & extdb-conf.ini to root folder as well or you can copy over @extDB2 over as a regular mod. If you choose to use @extDB2 as a regular mod your commandline will be:
-``` -mod=@life_server;@extDB2 ``` +Disclaimer +----------- +> The vast majority of the code / framework has been written by Tonic. + +> Any additional code / content used is fully credited and owned by it’s author as well as linked to the authors content (Forums,Media,etc). + +> The additional content used within the framework either has the expressed permission of the content creators permission or was automatically used under the GPL (General Public License) from public posting with no usage / TOA / Disclaimer, however they still own the rights to their content. + +> If in any case that content is being used within this mission / framework that the content creator doesn’t wish for it to be used due to my strict TOA / Agreement all you need to do is ask for it to be removed and it will be honored.
-If you are not using @extDB2 as a mod and choose to drag extDB2.dll into the main arma 3 server directory then you only need @life_server in the commandline. -ExtDB Requirements ------- -Windows:
-[vc2015 redist (x86)] (https://download.microsoft.com/download/9/3/F/93FCF1E7-E6A4-478B-96E7-D4B285925B00/vc_redist.x86.exe) -

-Debian/Ubuntu x64:
-``` $ apt-get install libtbb2:i386 ``` -

-RedHat/CentOS x64:
-``` $ yum install tbb.i686 ``` -Usage / Terms of agreement: ------- + +Usage / Terms of agreement +--------------------------- > The branding of the mission is to stay ‘Altis Life RPG’. This means you cannot modify it to say something else. i.e Atlis Life by YOURCOMMUNITYNAME/TAG. Everything about the naming / branding is to be left untouched. -> Naturally all credit is to remain intact on all files. Author cannot be modified via Description.ext but can be extended in briefing.sqf +> Naturally all credit is to remain intact on all files. Author cannot be modified via Description.ext / Mission.sqm, but can be extended in briefing.sqf > All of my code is not to be used outside of the mission in another ‘Life’ like mission. It is to stay the Altis Life RPG Framework / my framework or you don’t use it and direct branding. diff --git a/Tanoa_Life.Tanoa/@ COPY FILES FROM LIFE_CLIENT HERE @ b/Tanoa_Life.Tanoa/@ COPY FILES FROM LIFE_CLIENT HERE @ new file mode 100644 index 00000000..e69de29b diff --git a/altislife.sql b/altislife.sql new file mode 100755 index 00000000..26047342 --- /dev/null +++ b/altislife.sql @@ -0,0 +1,209 @@ +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +SET time_zone = "+00:00"; +-- +-- Compatible with newer MySQL versions. (After MySQL-5.5) +-- This SQL uses utf8mb4 and has CURRENT_TIMESTAMP function. +-- + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- +-- Database: `altislife` +-- Default Schema +-- +CREATE DATABASE IF NOT EXISTS `altislife` DEFAULT CHARACTER SET utf8mb4; +USE `altislife`; + +-- +-- Drop procedures to ensure no conflicts +-- +DROP PROCEDURE IF EXISTS `resetLifeVehicles`; +DROP PROCEDURE IF EXISTS `deleteDeadVehicles`; +DROP PROCEDURE IF EXISTS `deleteOldHouses`; +DROP PROCEDURE IF EXISTS `deleteOldGangs`; +DROP PROCEDURE IF EXISTS `deleteOldContainers`; + +DELIMITER $$ +-- +-- Procedures +-- Edit arma3 to match a user in MySQL +-- For external databases: Edit localhost to match arma3server IP +-- + +CREATE DEFINER=`arma3`@`localhost` PROCEDURE `resetLifeVehicles`() +BEGIN + UPDATE `vehicles` SET `active`= 0; +END$$ + +CREATE DEFINER=`arma3`@`localhost` PROCEDURE `deleteDeadVehicles`() +BEGIN + DELETE FROM `vehicles` WHERE `alive` = 0; +END$$ + +CREATE DEFINER=`arma3`@`localhost` PROCEDURE `deleteOldHouses`() +BEGIN + DELETE FROM `houses` WHERE `owned` = 0; +END$$ + +CREATE DEFINER=`arma3`@`localhost` PROCEDURE `deleteOldGangs`() +BEGIN + DELETE FROM `gangs` WHERE `active` = 0; +END$$ + +CREATE DEFINER=`arma3`@`localhost` PROCEDURE `deleteOldContainers`() +BEGIN + DELETE FROM `containers` WHERE `owned` = 0; +END$$ + +DELIMITER ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `players` +-- + +CREATE TABLE IF NOT EXISTS `players` ( + `uid` int(12) NOT NULL AUTO_INCREMENT, + `name` varchar(32) NOT NULL, + `aliases` text NOT NULL, + `playerid` varchar(64) NOT NULL, + `cash` int(100) NOT NULL DEFAULT '0', + `bankacc` int(100) NOT NULL DEFAULT '0', + `coplevel` enum('0','1','2','3','4','5','6','7') NOT NULL DEFAULT '0', + `mediclevel` enum('0','1','2','3','4','5') NOT NULL DEFAULT '0', + `civ_licenses` text NOT NULL, + `cop_licenses` text NOT NULL, + `med_licenses` text NOT NULL, + `civ_gear` text NOT NULL, + `cop_gear` text NOT NULL, + `med_gear` text NOT NULL, + `civ_stats` varchar(32) NOT NULL DEFAULT '"[100,100,0]"', + `cop_stats` varchar(32) NOT NULL DEFAULT '"[100,100,0]"', + `med_stats` varchar(32) NOT NULL DEFAULT '"[100,100,0]"', + `arrested` tinyint(1) NOT NULL DEFAULT '0', + `adminlevel` enum('0','1','2','3','4','5') NOT NULL DEFAULT '0', + `donorlevel` enum('0','1','2','3','4','5') NOT NULL DEFAULT '0', + `blacklist` tinyint(1) NOT NULL DEFAULT '0', + `civ_alive` tinyint(1) NOT NULL DEFAULT '0', + `civ_position` varchar(64) NOT NULL DEFAULT '"[]"', + `playtime` varchar(32) NOT NULL DEFAULT '"[0,0,0]"', + `insert_time` timestamp DEFAULT CURRENT_TIMESTAMP, + `last_seen` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`uid`), + UNIQUE KEY `playerid` (`playerid`), + KEY `name` (`name`), + KEY `blacklist` (`blacklist`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=12 ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `vehicles` +-- + +CREATE TABLE IF NOT EXISTS `vehicles` ( + `id` int(12) NOT NULL AUTO_INCREMENT, + `side` varchar(16) NOT NULL, + `classname` varchar(64) NOT NULL, + `type` varchar(16) NOT NULL, + `pid` varchar(32) NOT NULL, + `alive` tinyint(1) NOT NULL DEFAULT '1', + `blacklist` tinyint(1) NOT NULL DEFAULT '0', + `active` tinyint(1) NOT NULL DEFAULT '0', + `plate` int(20) NOT NULL, + `color` int(20) NOT NULL, + `inventory` text NOT NULL, + `gear` text NOT NULL, + `fuel` double NOT NULL DEFAULT '1', + `damage` varchar(256) NOT NULL, + `insert_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + KEY `side` (`side`), + KEY `pid` (`pid`), + KEY `type` (`type`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=2 ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `houses` +-- Needed for extDB latest update on git +-- + +CREATE TABLE IF NOT EXISTS `houses` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `pid` varchar(32) NOT NULL, + `pos` varchar(64) DEFAULT NULL, + `owned` tinyint(1) DEFAULT '0', + `insert_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`,`pid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=4 ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `gangs` +-- Needed for extDB latest update on git +-- + +CREATE TABLE IF NOT EXISTS `gangs` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `owner` varchar(32) DEFAULT NULL, + `name` varchar(32) DEFAULT NULL, + `members` text, + `maxmembers` int(3) DEFAULT '8', + `bank` int(100) DEFAULT '0', + `active` tinyint(1) DEFAULT '1', + `insert_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE KEY `name_UNIQUE` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `containers` +-- Needed for extDB latest update on git +-- + +CREATE TABLE IF NOT EXISTS `containers` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `pid` varchar(32) NOT NULL, + `classname` varchar(32) NOT NULL, + `pos` varchar(64) DEFAULT NULL, + `inventory` text NOT NULL, + `gear` text NOT NULL, + `dir` varchar(128) DEFAULT NULL, + `active` tinyint(1) NOT NULL DEFAULT '0', + `owned` tinyint(1) DEFAULT '0', + `insert_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`,`pid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=4; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `wanted` +-- Needed for extDB latest update on git +-- + +CREATE TABLE IF NOT EXISTS `wanted` ( + `wantedID` varchar(64) NOT NULL, + `wantedName` varchar(32) NOT NULL, + `wantedCrimes` text NOT NULL, + `wantedBounty` int(100) NOT NULL, + `active` tinyint(1) NOT NULL DEFAULT '0', + `insert_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`wantedID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- -------------------------------------------------------- + +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/arma3life.sql b/arma3life.sql deleted file mode 100644 index 896596ab..00000000 --- a/arma3life.sql +++ /dev/null @@ -1,137 +0,0 @@ -SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; -SET time_zone = "+00:00"; - - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8 */; - --- --- Database: `arma3life` --- Default Schema --- -CREATE DATABASE IF NOT EXISTS `arma3life` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; -USE `arma3life`; - -DELIMITER $$ --- --- Procedures --- Edit arma3 to match a user in MySQL --- -CREATE DEFINER=`arma3`@`localhost` PROCEDURE `resetLifeVehicles`() -BEGIN - UPDATE `vehicles` SET `active`= 0; -END$$ - -CREATE DEFINER=`arma3`@`localhost` PROCEDURE `deleteDeadVehicles`() -BEGIN - DELETE FROM `vehicles` WHERE `alive` = 0; -END$$ - -CREATE DEFINER=`arma3`@`localhost` PROCEDURE `deleteOldHouses`() -BEGIN - DELETE FROM `houses` WHERE `owned` = 0; -END$$ - -CREATE DEFINER=`arma3`@`localhost` PROCEDURE `deleteOldGangs`() -BEGIN - DELETE FROM `gangs` WHERE `active` = 0; -END$$ - -DELIMITER ; - --- -------------------------------------------------------- - --- --- Table structure for table `players` --- - -CREATE TABLE IF NOT EXISTS `players` ( - `uid` int(12) NOT NULL AUTO_INCREMENT, - `name` varchar(32) NOT NULL, - `aliases` text NOT NULL, - `playerid` varchar(50) NOT NULL, - `cash` int(100) NOT NULL DEFAULT '0', - `bankacc` int(100) NOT NULL DEFAULT '0', - `coplevel` enum('0','1','2','3','4','5','6','7') NOT NULL DEFAULT '0', - `mediclevel` enum('0','1','2','3','4','5') NOT NULL DEFAULT '0', - `civ_licenses` text, - `cop_licenses` text, - `med_licenses` text, - `civ_gear` text NOT NULL, - `cop_gear` text NOT NULL, - `med_gear` text NOT NULL, - `arrested` tinyint(1) NOT NULL DEFAULT '0', - `adminlevel` enum('0','1','2','3','4','5') NOT NULL DEFAULT '0', - `donatorlvl` enum('0','1','2','3','4','5') NOT NULL DEFAULT '0', - `blacklist` tinyint(1) NOT NULL DEFAULT '0', - PRIMARY KEY (`uid`), - UNIQUE KEY `playerid` (`playerid`), - KEY `name` (`name`), - KEY `blacklist` (`blacklist`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ; - --- -------------------------------------------------------- - --- --- Table structure for table `vehicles` --- - -CREATE TABLE IF NOT EXISTS `vehicles` ( - `id` int(12) NOT NULL AUTO_INCREMENT, - `side` varchar(15) NOT NULL, - `classname` varchar(32) NOT NULL, - `type` varchar(12) NOT NULL, - `pid` varchar(32) NOT NULL, - `alive` tinyint(1) NOT NULL DEFAULT '1', - `active` tinyint(1) NOT NULL DEFAULT '0', - `plate` int(20) NOT NULL, - `color` int(20) NOT NULL, - `inventory` varchar(500) NOT NULL, - PRIMARY KEY (`id`), - KEY `side` (`side`), - KEY `pid` (`pid`), - KEY `type` (`type`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; - --- -------------------------------------------------------- - --- --- Table structure for table `houses` --- Needed for extDB latest update on git --- - -CREATE TABLE IF NOT EXISTS `houses` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `pid` varchar(32) NOT NULL, - `pos` varchar(64) DEFAULT NULL, - `inventory` text, - `containers` text, - `owned` tinyint(4) DEFAULT '0', - PRIMARY KEY (`id`,`pid`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ; - --- -------------------------------------------------------- - --- --- Table structure for table `gangs` --- Needed for extDB latest update on git --- - -CREATE TABLE IF NOT EXISTS `gangs` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `owner` varchar(32) DEFAULT NULL, - `name` varchar(32) DEFAULT NULL, - `members` text, - `maxmembers` int(2) DEFAULT '8', - `bank` int(100) DEFAULT '0', - `active` tinyint(4) DEFAULT '1', - PRIMARY KEY (`id`), - UNIQUE KEY `name_UNIQUE` (`name`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; - diff --git a/life_client/@ COPY THESE FILES TO MISSION FOLDER @ b/life_client/@ COPY THESE FILES TO MISSION FOLDER @ new file mode 100644 index 00000000..e69de29b diff --git a/life_client/CfgRemoteExec.hpp b/life_client/CfgRemoteExec.hpp new file mode 100644 index 00000000..d15f7526 --- /dev/null +++ b/life_client/CfgRemoteExec.hpp @@ -0,0 +1,175 @@ +#define F(NAME,TARGET) class NAME { \ + allowedTargets = TARGET; \ +}; + +#define ANYONE 0 +#define CLIENT 1 +#define SERVER 2 +#define HC HC_Life + +class CfgRemoteExec { + class Functions { + mode = 1; + jip = 0; + + /* Client only functions */ + F(life_fnc_AAN,CLIENT) + F(life_fnc_addVehicle2Chain,CLIENT) + F(life_fnc_adminID,CLIENT) + F(life_fnc_adminInfo,CLIENT) + F(life_fnc_bountyReceive,CLIENT) + F(life_fnc_copLights,CLIENT) + F(life_fnc_copSearch,CLIENT) + F(life_fnc_copSiren,CLIENT) + F(life_fnc_freezePlayer,CLIENT) + F(life_fnc_gangCreated,CLIENT) + F(life_fnc_gangDisbanded,CLIENT) + F(life_fnc_gangInvite,CLIENT) + F(life_fnc_garageRefund,CLIENT) + F(life_fnc_giveDiff,CLIENT) + F(life_fnc_hideObj,CLIENT) + F(life_fnc_impoundMenu,CLIENT) + F(life_fnc_jail,CLIENT) + F(life_fnc_jailMe,CLIENT) + F(life_fnc_knockedOut,CLIENT) + F(life_fnc_licenseCheck,CLIENT) + F(life_fnc_licensesRead,CLIENT) + F(life_fnc_lightHouse,CLIENT) + F(life_fnc_mediclights,CLIENT) + F(life_fnc_medicRequest,CLIENT) + F(life_fnc_medicSiren,CLIENT) + F(life_fnc_moveIn,CLIENT) + F(life_fnc_pickupItem,CLIENT) + F(life_fnc_pickupMoney,CLIENT) + F(life_fnc_receiveItem,CLIENT) + F(life_fnc_receiveMoney,CLIENT) + F(life_fnc_removeLicenses,CLIENT) + F(life_fnc_restrain,CLIENT) + F(life_fnc_revived,CLIENT) + F(life_fnc_robPerson,CLIENT) + F(life_fnc_robReceive,CLIENT) + F(life_fnc_searchClient,CLIENT) + F(life_fnc_seizeClient,CLIENT) + F(life_fnc_soundDevice,CLIENT) + F(life_fnc_spikeStripEffect,CLIENT) + F(life_fnc_tazeSound,CLIENT) + F(life_fnc_ticketPaid,CLIENT) + F(life_fnc_ticketPrompt,CLIENT) + F(life_fnc_vehicleAnimate,CLIENT) + F(life_fnc_wantedList,CLIENT) + F(life_fnc_wireTransfer,CLIENT) + F(SOCK_fnc_dataQuery,CLIENT) + F(SOCK_fnc_insertPlayerInfo,CLIENT) + F(SOCK_fnc_requestReceived,CLIENT) + F(SOCK_fnc_updateRequest,CLIENT) + F(TON_fnc_clientGangKick,CLIENT) + F(TON_fnc_clientGangLeader,CLIENT) + F(TON_fnc_clientGangLeft,CLIENT) + F(TON_fnc_clientGetKey,CLIENT) + F(TON_fnc_clientMessage,CLIENT) + F(TON_fnc_player_query,CLIENT) + + /* Server only functions */ + F(BIS_fnc_execVM,SERVER) + F(DB_fnc_insertRequest,SERVER) + F(DB_fnc_queryRequest,SERVER) + F(DB_fnc_updatePartial,SERVER) + F(DB_fnc_updateRequest,SERVER) + F(life_fnc_jailSys,SERVER) + F(life_fnc_wantedAdd,SERVER) + F(life_fnc_wantedBounty,SERVER) + F(life_fnc_wantedCrimes,SERVER) + F(life_fnc_wantedFetch,SERVER) + F(life_fnc_wantedProfUpdate,SERVER) + F(life_fnc_wantedRemove,SERVER) + F(SPY_fnc_cookieJar,SERVER) + F(SPY_fnc_observe,SERVER) + F(TON_fnc_addContainer,SERVER) + F(TON_fnc_addHouse,SERVER) + F(TON_fnc_chopShopSell,SERVER) + F(TON_fnc_cleanupRequest,SERVER) + F(TON_fnc_deleteDBContainer,SERVER) + F(TON_fnc_getID,SERVER) + F(TON_fnc_getVehicles,SERVER) + F(TON_fnc_insertGang,SERVER) + F(TON_fnc_keyManagement,SERVER) + F(TON_fnc_manageSC,SERVER) + F(TON_fnc_pickupAction,SERVER) + F(TON_fnc_removeGang,SERVER) + F(TON_fnc_sellHouse,SERVER) + F(TON_fnc_sellHouseContainer,SERVER) + F(TON_fnc_setObjVar,SERVER) + F(TON_fnc_spawnVehicle,SERVER) + F(TON_fnc_spikeStrip,SERVER) + F(TON_fnc_updateGang,SERVER) + F(TON_fnc_updateHouseContainers,SERVER) + F(TON_fnc_updateHouseTrunk,SERVER) + F(TON_fnc_vehicleCreate,SERVER) + F(TON_fnc_vehicleDelete,SERVER) + F(TON_fnc_vehicleStore,SERVER) + F(TON_fnc_vehicleUpdate,SERVER) + F(TON_fnc_handleBlastingCharge,SERVER) + + /* HeadlessClient only functions */ + F(HC_fnc_addContainer,HC) + F(HC_fnc_addHouse,HC) + F(HC_fnc_chopShopSell,HC) + F(HC_fnc_deleteDBContainer,HC) + F(HC_fnc_getVehicles,HC) + F(HC_fnc_insertGang,HC) + F(HC_fnc_insertRequest,HC) + F(HC_fnc_insertVehicle,HC) + F(HC_fnc_jailSys,HC) + F(HC_fnc_keyManagement,HC) + F(HC_fnc_queryRequest,HC) + F(HC_fnc_removeGang,HC) + F(HC_fnc_sellHouse,HC) + F(HC_fnc_sellHouseContainer,HC) + F(HC_fnc_spawnVehicle,HC) + F(HC_fnc_spikeStrip,HC) + F(HC_fnc_updateGang,HC) + F(HC_fnc_updateHouseContainers,HC) + F(HC_fnc_updateHouseTrunk,HC) + F(HC_fnc_updatePartial,HC) + F(HC_fnc_updateRequest,HC) + F(HC_fnc_vehicleCreate,HC) + F(HC_fnc_vehicleDelete,HC) + F(HC_fnc_vehicleStore,HC) + F(HC_fnc_vehicleUpdate,HC) + F(HC_fnc_wantedAdd,HC) + F(HC_fnc_wantedBounty,HC) + F(HC_fnc_wantedCrimes,HC) + F(HC_fnc_wantedFetch,HC) + F(HC_fnc_wantedProfUpdate,HC) + F(HC_fnc_wantedRemove,HC) + + /* Functions for everyone */ + F(BIS_fnc_effectKilledAirDestruction,ANYONE) + F(BIS_fnc_effectKilledSecondaries,ANYONE) + F(life_fnc_animSync,ANYONE) + F(life_fnc_broadcast,ANYONE) + F(life_fnc_colorVehicle,ANYONE) + F(life_fnc_corpse,ANYONE) + F(life_fnc_demoChargeTimer,ANYONE) + F(life_fnc_flashbang,ANYONE) + F(life_fnc_jumpFnc,ANYONE) + F(life_fnc_lockVehicle,ANYONE) + F(life_fnc_pulloutVeh,ANYONE) + F(life_fnc_say3D,ANYONE) + F(life_fnc_setFuel,ANYONE) + F(life_fnc_simDisable,ANYONE) + F(SPY_fnc_notifyAdmins,ANYONE) + }; + + class Commands { + mode = 1; + jip = 0; + + F(addHandgunItem,ANYONE) + F(addMagazine,ANYONE) + F(addPrimaryWeaponItem,ANYONE) + F(addWeapon,ANYONE) + F(setFuel,ANYONE) + F(enableSimulationGlobal,ANYONE) + }; +}; diff --git a/life_client/Functions.hpp b/life_client/Functions.hpp new file mode 100644 index 00000000..545d6403 --- /dev/null +++ b/life_client/Functions.hpp @@ -0,0 +1,362 @@ +class Socket_Reciever { + tag = "SOCK"; + class SQL_Socket { + file = "core\session"; + class dataQuery {}; + class insertPlayerInfo {}; + class requestReceived {}; + class syncData {}; + class updatePartial {}; + class updateRequest {}; + }; +}; + +class Life_Client_Core { + tag = "life"; + + class Master_Directory { + file = "core"; + class initCiv {}; + class initCop {}; + class initMedic {}; + class setupActions {}; + class setupEVH {}; + class survival {}; + class welcomeNotification {}; + }; + + class Actions { + file = "core\actions"; + class arrestAction {}; + class buyLicense {}; + class captureHideout {}; + class catchFish {}; + class dpFinish {}; + class dropFishingNet {}; + class escortAction {}; + class gather {}; + class getDPMission {}; + class gutAnimal {}; + class healHospital {}; + class impoundAction {}; + class mine {}; + class newsBroadcast {}; + class packupSpikes {}; + class pickupItem {}; + class pickupMoney {}; + class postBail {}; + class processAction {}; + class pulloutAction {}; + class putInCar {}; + class removeContainer {}; + class repairTruck {}; + class restrainAction {}; + class robAction {}; + class searchAction {}; + class searchVehAction {}; + class seizePlayerAction {}; + class serviceChopper {}; + class stopEscorting {}; + class storeVehicle {}; + class surrender {}; + class ticketAction {}; + class unrestrain {}; + }; + + class Admin { + file = "core\admin"; + class adminCompensate {}; + class adminDebugCon {}; + class adminFreeze {}; + class admingetID {}; + class adminGodMode {}; + class adminid {}; + class admininfo {}; + class adminMarkers {}; + class adminMenu {}; + class adminQuery {}; + class adminSpectate {}; + class adminTeleport {}; + class adminTpHere {}; + }; + + class Civilian { + file = "core\civilian"; + class civLoadout {}; + class civMarkers {}; + class demoChargeTimer {}; + class freezePlayer {}; + class jail {}; + class jailMe {}; + class knockedOut {}; + class knockoutAction {}; + class removeLicenses {}; + class robPerson {}; + class robReceive {}; + class tazed {}; + }; + + class Config { + file = "core\config"; + class houseConfig {}; + class itemWeight {}; + class vehicleAnimate {}; + class vehicleWeightCfg {}; + }; + + class Cop { + file = "core\cop"; + class bountyReceive {}; + class containerInvSearch {}; + class copInteractionMenu {}; + class copLights {}; + class copLoadout {}; + class copMarkers {}; + class copSearch {}; + class copSiren {}; + class doorAnimate {}; + class fedCamDisplay {}; + class licenseCheck {}; + class licensesRead {}; + class questionDealer {}; + class radar {}; + class repairDoor {}; + class restrain {}; + class searchClient {}; + class seizeClient {}; + class sirenLights {}; + class spikeStripEffect {}; + class ticketGive {}; + class ticketPaid {}; + class ticketPay {}; + class ticketPrompt {}; + class vehInvSearch {}; + class wantedGrab {}; + }; + + class Dialog_Controls { + file = "dialog\function"; + class bankDeposit {}; + class bankTransfer {}; + class bankWithdraw {}; + class displayHandler {}; + class gangDeposit {}; + class gangWithdraw {}; + class garageLBChange {}; + class impoundMenu {}; + class progressBar {}; + class safeFix {}; + class safeInventory {}; + class safeOpen {}; + class safeTake {}; + class sellGarage {}; + class setMapPosition {}; + class spawnConfirm {}; + class spawnMenu {}; + class spawnPointCfg {}; + class spawnPointSelected {}; + class unimpound {}; + class vehicleGarage {}; + class wireTransfer {}; + }; + + class Functions { + file = "core\functions"; + class AAN {}; + class accType {}; + class actionKeyHandler {}; + class animSync {}; + class calWeightDiff {}; + class clearVehicleAmmo {}; + class dropItems {}; + class escInterupt {}; + class fetchCfgDetails {}; + class fetchDeadGear {}; + class fetchVehInfo {}; + class isDamaged {}; + class giveDiff {}; + class handleDamage {}; + class handleInv {}; + class handleItem {}; + class hideObj {}; + class hudSetup {}; + class hudUpdate {}; + class inventoryClosed {}; + class inventoryOpened {}; + class isUIDActive {}; + class keyHandler {}; + class loadDeadGear {}; + class loadGear {}; + class nearATM {}; + class nearestDoor {}; + class nearUnits {}; + class numberText {}; + class onFired {}; + class onTakeItem {}; + class playerSkins {}; + class playerTags {}; + class postNewsBroadcast {}; + class pullOutVeh {}; + class pushObject {}; + class receiveItem {}; + class receiveMoney {}; + class revealObjects {}; + class saveGear {}; + class searchPosEmpty {}; + class simDisable {}; + class stripDownPlayer {}; + class tazeSound {}; + class teleport {}; + class whereAmI {}; + }; + + class Gangs { + file = "core\gangs"; + class createGang {}; + class gangCreated {}; + class gangDisband {}; + class gangDisbanded {}; + class gangInvite {}; + class gangInvitePlayer {}; + class gangKick {}; + class gangLeave {}; + class gangMenu {}; + class gangNewLeader {}; + class gangUpgrade {}; + class initGang {}; + }; + + class Housing { + file = "core\housing"; + class buyHouse {}; + class containerMenu {}; + class copBreakDoor {}; + class copHouseOwner {}; + class garageRefund {}; + class getBuildingPositions {}; + class houseMenu {}; + class initHouses {}; + class lightHouse {}; + class lightHouseAction {}; + class lockHouse {}; + class lockupHouse {}; + class placeContainer {}; + class PlayerInBuilding {}; + class sellHouse {}; + }; + + class Items { + file = "core\items"; + class blastingCharge {}; + class boltcutter {}; + class defuseKit {}; + class flashbang {}; + class jerrycanRefuel {}; + class jerryRefuel {}; + class lockpick {}; + class placestorage {}; + class spikeStrip {}; + class storageBox {}; + }; + + class Medical_System { + file = "core\medical"; + class deathScreen {}; + class medicLights {}; + class medicLoadout {}; + class medicMarkers {}; + class medicRequest {}; + class medicSiren {}; + class medicSirenLights {}; + class onPlayerKilled {}; + class onPlayerRespawn {}; + class requestMedic {}; + class respawned {}; + class revived {}; + class revivePlayer {}; + }; + + class Network { + file = "core\functions\network"; + class broadcast {}; + class corpse {}; + class jumpFnc {}; + class say3D {}; + class setFuel {}; + class soundDevice {}; + }; + + class Player_Menu { + file = "core\pmenu"; + class altisPhone {}; + class cellphone {}; + class giveItem {}; + class giveMoney {}; + class keyDrop {}; + class keyGive {}; + class keyMenu {}; + class p_openMenu {}; + class p_updateMenu {}; + class pardon {}; + class removeItem {}; + class s_onChar {}; + class s_onCheckedChange {}; + class s_onSliderChange {}; + class settingsMenu {}; + class updateViewDistance {}; + class useItem {}; + class wantedAddP {}; + class wantedInfo {}; + class wantedList {}; + class wantedMenu {}; + }; + + class Shops { + file = "core\shops"; + class atmMenu {}; + class buyClothes {}; + class changeClothes {}; + class chopShopMenu {}; + class chopShopSelection {}; + class chopShopSell {}; + class clothingFilter {}; + class clothingMenu {}; + class fuelLBchange {}; + class fuelStatOpen {}; + class vehicleShop3DPreview {}; + class vehicleShopBuy {}; + class vehicleShopEnd3DPreview {}; + class vehicleShopInit3DPreview {}; + class vehicleShopLBChange {}; + class vehicleShopMenu {}; + class virt_buy {}; + class virt_menu {}; + class virt_sell {}; + class virt_update {}; + class weaponShopAccs {}; + class weaponShopBuySell {}; + class weaponShopFilter {}; + class weaponShopMags {}; + class weaponShopMenu {}; + class weaponShopSelection {}; + }; + + class Vehicle { + file = "core\vehicle"; + class addVehicle2Chain {}; + class colorVehicle {}; + class deviceMine {}; + class FuelRefuelcar {}; + class fuelStore {}; + class fuelSupply {}; + class lockVehicle {}; + class openInventory {}; + class vehiclecolor3DRefresh {}; + class vehicleOwners {}; + class vehicleWeight {}; + class vehInventory {}; + class vehStoreItem {}; + class vehTakeItem {}; + class vInteractionMenu {}; + }; +}; diff --git a/life_client/KRON_Strings.sqf b/life_client/KRON_Strings.sqf new file mode 100644 index 00000000..b4dd655f --- /dev/null +++ b/life_client/KRON_Strings.sqf @@ -0,0 +1,355 @@ +// ========================================================================================================= +// +// String Functions Library +// Version: 2.2.1 +// File: KRON_Strings.sqf +// Author: Kronzky +// +// ========================================================================================================= +// +// Usage: +// +// � KRON_StrToArray - Converts a string into an array of characters: +// _array=[_str] call KRON_StrToArray +// +// � KRON_StrLen - Returns the length of the string +// _len=[_str] call KRON_StrLen +// +// � KRON_StrLeft - Returns l characters from the left side of the string +// _left=[_str,l] call KRON_StrLeft +// +// � KRON_StrRight - Returns l characters from the right side of the string +// _right=[_str,l] call KRON_StrRight +// +// � KRON_StrMid - Returns l characters from the string, starting at position p (zero-based) +// If l is not defined, the rest of the string is returned +// _mid=[_str,p,(l)] call KRON_StrMid +// +// � KRON_StrInStr - Tests whether string b is present in string a +// _found=[a,b] call KRON_StrInStr +// +// � KRON_StrIndex - Returns the position of string b in string a +// _index=[a,b] call KRON_StrIndex +// +// � KRON_StrUpper - Converts a string to uppercase characters +// _upper=[_str] call KRON_StrUpper +// +// � KRON_StrLower - Converts a string to lowercase characters +// _lower=[_str] call KRON_StrLower +// +// � KRON_Replace - Replaces every occurrence of string _old in string _str with string _new +// _index=[_str,_old,_new] call KRON_Replace +// +// � KRON_FindFlag - Checks a mixed array (_this) for the presence of a string (_str) +// _flg=[_this,_str] call KRON_FindFlag +// +// � KRON_getArg - Searches a mixed array (_this) for a matching string beginning with (_t), and returns the part after a separator (s) +// A default value can be defined as (_d). +// _arg=[_this,_t,(_d)] call KRON_getArg +// +// � KRON_getArgRev - Works like getArg, but search for the part *after* the colon, and return the part in front of it +// A default value can be defined as (_d). +// _arg=[_this,_t,(_d)] call KRON_getArgRev +// +// � KRON_Compare - Compares two elements and returns -1 if first is smaller, 1 if second is smaller, and 0 if equal +// If optional parameter "case" is given, capitalization is considered (upper before lowercase) +// _cmp=[_str1,_str2,("case")] call KRON_Compare +// +// � KRON_ArraySort - Sorts an array of strings in acsending order (Numbers before letters, uppercase before lowercase) +// If array is multi-dimensional, optional parameter (_idx) specifies which column is used for sorting +// If optional parameter "desc" is given, order is reversed +// If optional parameter "case" is given, capitalization is considered (upper before lowercase) +// _srt=[_arr,(_idx),("desc"),("case")] call KRON_ArraySort +// +// ========================================================================================================= + +KRON_StrToArray = { + private["_in","_i","_arr","_out"]; + _in=_this select 0; + _arr = toArray(_in); + _out=[]; + for "_i" from 0 to (count _arr)-1 do { + _out=_out+[toString([_arr select _i])]; + }; + _out +}; + +KRON_StrLeft = { + private["_in","_len","_arr","_out"]; + _in=_this select 0; + _len=(_this select 1)-1; + _arr=[_in] call KRON_StrToArray; + _out=""; + if (_len>=(count _arr)) then { + _out=_in; + } else { + for "_i" from 0 to _len do { + _out=_out + (_arr select _i); + }; + }; + _out +}; + +KRON_StrLen = { + private["_in","_arr","_len"]; + _in=_this select 0; + _arr=[_in] call KRON_StrToArray; + _len=count (_arr); + _len +}; + +KRON_StrRight = { + private["_in","_len","_arr","_i","_out"]; + _in=_this select 0; + _len=_this select 1; + _arr=[_in] call KRON_StrToArray; + _out=""; + if (_len>(count _arr)) then {_len=count _arr}; + for "_i" from ((count _arr)-_len) to ((count _arr)-1) do { + _out=_out + (_arr select _i); + }; + _out +}; + +KRON_StrMid = { + private["_in","_pos","_len","_arr","_i","_out"]; + _in=_this select 0; + _pos=abs(_this select 1); + _arr=[_in] call KRON_StrToArray; + _len=count(_arr); + if ((count _this)>2) then {_len=(_this select 2)}; + _out=""; + if ((_pos+_len)>=(count _arr)) then {_len=(count _arr)-_pos}; + if (_len>0) then { + for "_i" from _pos to (_pos+_len-1) do { + _out=_out + (_arr select _i); + }; + }; + _out +}; + +KRON_StrIndex = { + private["_hay","_ndl","_lh","_ln","_arr","_tmp","_i","_j","_out"]; + _hay=_this select 0; + _ndl=_this select 1; + _out=-1; + _i=0; + if (_hay == _ndl) exitWith {0}; + _lh=[_hay] call KRON_StrLen; + _ln=[_ndl] call KRON_StrLen; + if (_lh < _ln) exitWith {-1}; + _arr=[_hay] call KRON_StrToArray; + for "_i" from 0 to (_lh-_ln) do { + _tmp=""; + for "_j" from _i to (_i+_ln-1) do { + _tmp=_tmp + (_arr select _j); + }; + if (_tmp==_ndl) exitWith {_out=_i}; + }; + _out +}; + +KRON_StrInStr = { + private["_out"]; + _in=_this select 0; + _out=if (([_this select 0,_this select 1] call KRON_StrIndex)==-1) then {false} else {true}; + _out +}; + +KRON_Replace = { + private["_str","_old","_new","_out","_tmp","_jm","_la","_lo","_ln","_i"]; + _str=_this select 0; + _arr=toArray(_str); + _la=count _arr; + _old=_this select 1; + _new=_this select 2; + _na=[_new] call KRON_StrToArray; + _lo=[_old] call KRON_StrLen; + _ln=[_new] call KRON_StrLen; + _out=""; + for "_i" from 0 to (count _arr)-1 do { + _tmp=""; + if (_i <= _la-_lo) then { + for "_j" from _i to (_i+_lo-1) do { + _tmp=_tmp + toString([_arr select _j]); + }; + }; + if (_tmp==_old) then { + _out=_out+_new; + _i=_i+_lo-1; + } else { + _out=_out+toString([_arr select _i]); + }; + }; + _out +}; + +KRON_StrUpper = { + private["_in","_out"]; + _in=_this select 0; + _out=toUpper(_in); + _out +}; + +KRON_StrLower = { + private["_in","_out"]; + _in=_this select 0; + _out=toLower(_in); + _out +}; + +KRON_ArrayToUpper = { + private["_in","_i","_e","_out"]; + _in=_this select 0; + _out=[]; + if ((count _in)>0) then { + for "_i" from 0 to (count _in)-1 do { + _e=_in select _i; + if (_e isEqualType "") then { + _e=toUpper(_e); + }; + _out set [_i,_e]; + }; + }; + _out +}; + +KRON_Compare = { + private["_k","_n","_s","_i","_c","_t","_s1","_s2","_l1","_l2","_l"]; + _k=[_this,"CASE"] call KRON_findFlag; + _n=0; + _s=0; + for "_i" from 0 to 1 do { + _t=_this select _i; + switch (typeName _t) do { + case "SCALAR": {_n=1}; + case "BOOL": {_this set [_i,str(_t)]}; + case "SIDE": {_this set [_i,str(_t)]}; + case "STRING": {if !(_k) then {_this=[_this] call KRON_ArrayToUpper}}; + default {_n=-1}; + }; + }; + _s1 = _this select 0; + _s2 = _this select 1; + if (_n!=0) exitWith { + if (_n==1) then { + if (_s1<_s2) then {_s=-1} else {if (_s1>_s2) then {_s=1}}; + }; + _s + }; + _s1 = toArray(_s1); + _s2 = toArray(_s2); + _l1 = count _s1; + _l2 = count _s2; + _l=if (_l1<_l2) then {_l1} else {_l2}; + for "_i" from 0 to _l-1 do { + if ((_s1 select _i)<(_s2 select _i)) then { + _s=-1; + _i=_l; + } else { + if ((_s1 select _i)>(_s2 select _i)) then { + _s=1; + _i=_l; + }; + }; + }; + if (_s==0) then { + if (_l1<_l2) then { + _s=-1; + } else { + if (_l1>_l2) then {_s=1}; + }; + }; + _s +}; + +KRON_ArraySort = { + private["_a","_d","_k","_s","_i","_vo","_v1","_v2","_j","_c","_x"]; + _a = +(_this select 0); + _d = if ([_this,"DESC"] call KRON_findFlag) then {-1} else {1}; + _k = if ([_this,"CASE"] call KRON_findFlag) then {"CASE"} else {"nocase"}; + _s = -1; + if ((_a select 0) isEqualType []) then { + _s=0; + if (((count _this)>1) && ((_this select 1) isEqualType 0)) then { + _s=_this select 1; + }; + }; + for "_i" from 0 to (count _a)-1 do { + _vo = _a select _i; + _v1 = _vo; + if (_s>-1) then {_v1=_v1 select _s}; + _j = 0; + for [{_j=_i-1},{_j>=0},{_j=_j-1}] do { + _v2 = _a select _j; + if (_s>-1) then {_v2=_v2 select _s}; + _c=[_v2,_v1,_k] call KRON_Compare; + if (_c!=_d) exitWith {}; + _a set [_j+1,_a select _j]; + }; + _a set [_j+1,_vo]; + }; + _a +}; + +KRON_findFlag = { + private["_in","_flg","_arr","_out"]; + _in=_this select 0; + _flg=toUpper(_this select 1); + _arr=[_in] call KRON_ArrayToUpper; + _out=_flg in _arr; + _out +}; + +KRON_getArg = { + private["_in","_flg","_fl","_def","_arr","_i","_j","_as","_aa","_org","_p","_out"]; + _in=_this select 0; + _flg=toUpper(_this select 1); + _fl=[_flg] call KRON_StrLen; + _out=""; + if ((count _this)>2) then {_out=_this select 2}; + _arr=[_in] call KRON_ArrayToUpper; + if ((count _arr)>0) then { + for "_i" from 0 to (count _in)-1 do { + _as = _arr select _i; + if (_as isEqualType "") then { + _aa = [_as] call KRON_StrToArray; + _p = _aa find ":"; + if (_p==_fl) then { + if (([_as,_fl] call KRON_StrLeft)==_flg) then { + _org = _in select _i; + _out=[_org,_p+1] call KRON_StrMid; + }; + }; + }; + }; + }; + _out +}; + + +KRON_getArgRev = { + private["_in","_flg","_fl","_def","_arr","_i","_j","_as","_aa","_org","_p","_out"]; + _in=_this select 0; + _flg=toUpper(_this select 1); + _fl=[_flg] call KRON_StrLen; + _out=""; + if ((count _this)>2) then {_out=_this select 2}; + _arr=[_in] call KRON_ArrayToUpper; + if ((count _arr)>0) then { + for "_i" from 0 to (count _in)-1 do { + _as = _arr select _i; + if (_as isEqualType "") then { + _aa = [_as] call KRON_StrToArray; + _p = _aa find ":"; + if (_p+1==(count _aa)-_fl) then { + if (([_as,_p+1] call KRON_StrMid)==_flg) then { + _org = _in select _i; + _out=[_org,_p] call KRON_StrLeft; + }; + }; + }; + }; + }; + _out +}; diff --git a/life_client/SpyGlass/README.md b/life_client/SpyGlass/README.md new file mode 100644 index 00000000..b72c65ca --- /dev/null +++ b/life_client/SpyGlass/README.md @@ -0,0 +1,31 @@ +Spyglass +================ +Spyglass an anti-cheat system for [Altis Life RPG](https://github.com/ArmaLife/Framework).

+Any modification to the Altis Life RPG mission files will require changes to Config_Spyglass. + +Notes +If Spyglass is kicking on join, make sure that all functions that you have changed in Altis Life have been whitelisted. +Check Client RPT to find notes on why you are being kicked. + +Example: + 4:50:48 "Variable: reb_1_4 is not allowed TYPE: OBJECT NS: MN" + 4:50:48 "Variable: ggs_shop is not allowed TYPE: OBJECT NS: MN" + 4:50:48 "Variable: reb_helicopter_1 is not allowed TYPE: OBJECT NS: MN" + // Variable: VARIABLENAME is not allowed TYPE: (STRING, CODE, OBJECT, DISPLAY, SCALAR, BOOL) + +If you encounter errors regarding variables, whitelist them via Config_Spyglass under allowedVariables + +allowedVariables[] = { { "reb_1_4", "OBJECT" }, { "ggs_shop", "OBJECT" },{ "reb_helicopter_1", "OBJECT" }}; + +If Arma 3 has updated, it may be possible Bohemia Interactive have included new files into the game. +If this is the case then launch Arma 3 and go to the editor (you do not need to load a mission.) +Press escape and put into init: + +_cfgPatches = []; _binConfigPatches = configFile >> "CfgPatches"; for "_i" from 0 to count (_binConfigPatches)-1 do { _patchEntry = _binConfigPatches select _i; if(isClass _patchEntry) then { _cfgPatches set[count _cfgPatches,(configName _patchEntry)]; }; }; copyToClipboard str(_cfgPatches); + +Paste the results into a notepad. +Open Mission fn_initSpy.sqf and find +_patchList = +Edit the result that you got from your notepad to include at the start ["life_server", +Paste in your results and follow the existing structure. +This should fix any issues. Any other problems, refer to (https://gitter.im/ArmaLife/Framework/Support) for help. diff --git a/life_client/SpyGlass/endoftheline.sqf b/life_client/SpyGlass/endoftheline.sqf new file mode 100644 index 00000000..b3208832 --- /dev/null +++ b/life_client/SpyGlass/endoftheline.sqf @@ -0,0 +1,8 @@ +/* + File: endoftheline.sqf + Author: + + Description: + +*/ +#include "Hi, it appears that your client crashed. Do not worry we will get back with you in six years." \ No newline at end of file diff --git a/life_client/SpyGlass/fn_cmdMenuCheck.sqf b/life_client/SpyGlass/fn_cmdMenuCheck.sqf new file mode 100644 index 00000000..91c79b56 --- /dev/null +++ b/life_client/SpyGlass/fn_cmdMenuCheck.sqf @@ -0,0 +1,28 @@ +#include "..\script_macros.hpp" +/* + File: fn_cmdMenucheck.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Checks to see which commandingMenu is currently active, + if a non white-listed menu is active it will close it and report it + to the server and active admins. +*/ +private["_validMenus","_lastMenu"]; +_validMenus = [ + "RscMainMenu","RscMoveHigh","#WATCH","#WATCH0","RscWatchDir","RscWatchMoveDir","#GETIN","#RscStatus","RscCallSupport","#ACTION", + "RscCombatMode","RscFormations","RscTeam","RscSelectTeam","RscReply","#User:BIS_Menu_GroupCommunication","#CUSTOM_RADIO", + "RscRadio","RscGroupRootMenu","RscMenuReply","RscMenuStatus","","#User:BIS_fnc_addCommMenuItem_menu","RscMenuMove","RscMenuFormations" +]; + +_lastMenu = ""; +for "_i" from 0 to 1 step 0 do { + waitUntil {commandingMenu != _lastMenu}; + _lastMenu = commandingMenu; + + if (!(commandingMenu in _validMenus)) then { + [profileName,getPlayerUID player,_lastMenu] remoteExecCall ["SPY_fnc_observe",RSERV]; + [[0,1],format["%1 was observed by SPY-GLASS, he/she was trying to access commanding menu:\n\n %2\n\n and that commanding-menu is not known to the system. PLEASE NOTE he/she may not be cheating but the SPY-GLASS found it relevant to report in.",profileName,_lastMenu]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; + showCommandingMenu ""; + }; +}; diff --git a/life_client/SpyGlass/fn_cookieJar.sqf b/life_client/SpyGlass/fn_cookieJar.sqf new file mode 100644 index 00000000..087a028b --- /dev/null +++ b/life_client/SpyGlass/fn_cookieJar.sqf @@ -0,0 +1,18 @@ +/* + File: fn_cookieJar.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Reports to the RPT of a confirmed cheater for external programs + to parse,log or ban automatically. +*/ +private["_pName","_pUID","_pReason"]; +params [ + ["_pName","",[""]], + ["_pUID","",[""]], + ["_pReason","",[""]] +]; + +if (_pName isEqualTo "" || _pUID isEqualTo "" || _pReason isEqualTo "") exitWith {}; //Bad params passed.. + +diag_log format["SPYGLASS-FLAG:%1:%2:%3",_pName,_pUID,_pReason]; //Outputs to RPT for external programs to parse,log,react to. diff --git a/life_client/SpyGlass/fn_initSpy.sqf b/life_client/SpyGlass/fn_initSpy.sqf new file mode 100644 index 00000000..2a8b59f9 --- /dev/null +++ b/life_client/SpyGlass/fn_initSpy.sqf @@ -0,0 +1,256 @@ +#include "..\script_macros.hpp" +/* + File: fn_initSpy.sqf + Author: + + Description: + Does some things that I made over-complicated / un-needed but blah. + Will eventually include server-side checks but it's blah at this point. + + Will also become a standalone system which is why it's setup like this. +*/ +private["_binConfigPatches","_cfgPatches","_endM"]; +if (isServer && !hasInterface) exitWith {}; //Server doesn't need to know. +#define CONST(var1,var2) var1 = compileFinal (if (var2 isEqualType "") then {var2} else {str(var2)}) +#define RCLIENT -2 + +CONST(W_O_O_K_I_E_ANTI_ANTI_HAX,"false"); +CONST(W_O_O_K_I_E_FUD_ANTI_ANTI_HAX,"false"); +CONST(E_X_T_A_S_Y_ANTI_ANTI_HAX,"false"); +CONST(E_X_T_A_S_Y_Pro_RE,"false"); +CONST(E_X_T_A_S_Y_Car_RE,"false"); +CONST(DO_NUKE,"false"); +CONST(JxMxE_spunkveh,"false"); +CONST(JxMxE_spunkveh2,"false"); +CONST(JxMxE_spunkair,"false"); +CONST(JJJJ_MMMM___EEEEEEE_LLYYSSTTIICCC_SHIT_RE,"false"); +CONST(JJJJ_MMMM___EEEEEEE_LLYYSSTTIICCC_SHIT_RE_OLD,"false"); +CONST(JJJJ_MMMM___EEEEEEE_SPAWN_VEH,"false"); +CONST(JJJJ_MMMM___EEEEEEE_SPAWN_WEAPON,"false"); + +/* + Compile our list of allowed addon patches, by default this DOES NOT ALLOW ANY ADDONS. + + If you want to white-list addons such as JSRS or Blastcore you need to start a test instance (Host locally and not the mission) and first fill the SPY_cfg_patchList array, once you executed it (Filled it) + Run the following code and it will copy the list of addons / patches not in the list to your clipboard (Ctrl + V) and then add it to the array. + + _cfgPatches = []; + _binConfigPatches = configFile >> "CfgPatches"; + for "_i" from 0 to count (_binConfigPatches)-1 do { + _patchEntry = _binConfigPatches select _i; + if (isClass _patchEntry) then { + if (!((configName _patchEntry) in SPY_cfg_patchList)) then { + _cfgPatches set[count _cfgPatches,(configName _patchEntry)]; + }; + }; + }; + + copyToClipboard str(_cfgPatches); + + i.e + ["cba_xeh","Extended_EventHandlers","CBA_Extended_EventHandlers","JSRS_Environment","WarFXPE","cba_common","cba_events","cba_hashes","cba_network","cba_strings","cba_ui","cba_vectors","JSRS2_120mm_Cannon","JSRS2_127","JSRS2_155mm_AMOS", + "JSRS2_230mm_Titan","JSRS2_30mm_Cannon","JSRS2_35mm_Autocannon","JSRS2_4Five45","JSRS2_ACPC","JSRS2_Autocannon","JSRS2_Bullethits","JSRS2_DAGR","JSRS2_DAR","JSRS2_EBR","JSRS2_Explosions","JSRS2_Explosives","JSRS2_Filters","JSRS2_FS2000", + "JSRS2_Gatling","JSRS2_GMG20","JSRS2_GMG40","JSRS2_Khaybar","JSRS2_LMGRCWS","JSRS2_M134","JSRS2_M200","JSRS2_M320R","JSRS2_M6","JSRS2_Minigun","JSRS2_MX","JSRS2_NLAW","JSRS2_P07","JSRS2_PDW","JSRS2_Rahim","JSRS2_Rook40","JSRS2_RPG32", + "JSRS2_Scorpian","JSRS2_SDAR","JSRS2_Skalpel_ATGM","JSRS2_Skyfire","JSRS2_Sonic_Cracks","JSRS2_Titan","JSRS2_TRG20","JSRS2_Vector","JSRS2_Veh_Titan","JSRS2_Zafir","JSRS2_Zubr45","Blastcore_VEP","cba_ai","cba_arrays","cba_diagnostic","cba_help", + "cba_ui_helper","cba_versioning","JSRS2_Movement","JSRS2_Silencers","cba_main","cba_main_a3","JSRS2_2S9_Sorcher","JSRS2_AFV4_Gorgon","JSRS2_AH99_Blackfoot","JSRS2_AH9_Pawnee","JSRS2_AMV7_Marshal","JSRS2_BTRK_Kamysh","JSRS2_CH49_Mohawk","JSRS2_Distance", + "JSRS2_FighterPlane3","JSRS2_FV720_Mora","JSRS2_Hunter","JSRS2_Ifrit","JSRS2_IFV6a_Cheetah","JSRS2_IFV6c_Panther","JSRS2_M2A1_Slammer","JSRS2_M4_Scorcher","JSRS2_M5_Sandstorm","JSRS2_MBT52_Kuma","JSRS2_Mi48_Kajman","JSRS2_MSE3_Marid","JSRS2_Offroad", + "JSRS2_Po30_Orca","JSRS2_Strider","JSRS2_SUV","JSRS2_T100_Varsuk","JSRS2_Truck1","JSRS2_Truck2","JSRS2_UAV_1","JSRS2_UH80_GhostHawk","JSRS2_Van","JSRS2_WY55_Hellcat","JSRS2_ZSU39_Tigris","cba_xeh_a3"] +*/ +_patchList = +["life_server","A3Data","A3_3DEN_Language","A3_Functions_F","A3_Functions_F_EPA","A3_Functions_F_EPC","A3_LanguageMissions_F_Exp_A","A3_Data_F","A3_Data_F_Hook","A3_Data_F_ParticleEffects","A3_Dubbing_F","A3_Dubbing_F_Beta", +"A3_Dubbing_F_Gamma","A3_Dubbing_Radio_F","A3_Dubbing_Radio_F_Data_ENG","A3_Dubbing_Radio_F_Data_ENGB","A3_Dubbing_Radio_F_Data_GRE","A3_Dubbing_Radio_F_Data_PER","A3_Dubbing_Radio_F_Data_VR","A3_Editor_F","A3_EditorPreviews_F", +"A3_Functions_F_Curator","A3_Language_F","A3_Language_F_Beta","A3_Language_F_Gamma","A3_LanguageMissions_F","A3_LanguageMissions_F_Beta","A3_LanguageMissions_F_Gamma","A3_Misc_F","A3_Misc_F_Helpers","A3_Modules_F", +"A3_Modules_F_Data","A3_Modules_F_DynO","A3_Modules_F_Effects","A3_Modules_F_Events","A3_Modules_F_GroupModifiers","A3_Modules_F_Hc","A3_Modules_F_Intel","A3_Modules_F_LiveFeed","A3_Modules_F_Marta","A3_Modules_F_Misc", +"A3_Modules_F_Multiplayer","A3_Modules_F_ObjectModifiers","A3_Modules_F_Sites","A3_Modules_F_Skirmish","A3_Modules_F_StrategicMap","A3_Modules_F_Supports","A3_Modules_F_Uav","A3_Modules_F_Beta","A3_Modules_F_Beta_Data", +"A3_Modules_F_Beta_FiringDrills","A3_Modules_F_EPB","A3_Modules_F_EPB_Misc","A3_Music_F","A3_Music_F_Music","A3_Music_F_EPA","A3_Music_F_EPA_Music","A3_Music_F_EPB","A3_Music_F_EPB_Music","A3_Music_F_EPC","A3_Music_F_EPC_Music", +"A3_Plants_F","A3_Roads_F","A3_Rocks_F","A3_Rocks_F_Blunt","A3_Rocks_F_Sharp","A3_Rocks_F_Water","A3_Structures_F","A3_Structures_F_Bridges","A3_Structures_F_Civ","A3_Structures_F_Civ_Accessories","A3_Structures_F_Civ_Ancient", +"A3_Structures_F_Civ_BellTowers","A3_Structures_F_Civ_Calvaries","A3_Structures_F_Civ_Camping","A3_Structures_F_Civ_Chapels","A3_Structures_F_Civ_Constructions","A3_Structures_F_Civ_Dead","A3_Structures_F_Civ_Garbage", +"A3_Structures_F_Civ_Graffiti","A3_Structures_F_Civ_InfoBoards","A3_Structures_F_Civ_Kiosks","A3_Structures_F_Civ_Lamps","A3_Structures_F_Civ_Market","A3_Structures_F_Civ_Offices","A3_Structures_F_Civ_Pavements", +"A3_Structures_F_Civ_PlayGround","A3_Structures_F_Civ_SportsGrounds","A3_Structures_F_Civ_Statues","A3_Structures_F_Civ_Tourism","A3_Structures_F_Data","A3_Structures_F_Dominants","A3_Structures_F_Dominants_Amphitheater", +"A3_Structures_F_Dominants_Castle","A3_Structures_F_Dominants_Church","A3_Structures_F_Dominants_Hospital","A3_Structures_F_Dominants_Lighthouse","A3_Structures_F_Dominants_WIP","A3_Structures_F_Furniture", +"A3_Structures_F_Households","A3_Structures_F_Households_Addons","A3_Structures_F_Households_House_Big01","A3_Structures_F_Households_House_Big02","A3_Structures_F_Households_House_Shop01", +"A3_Structures_F_Households_House_Shop02","A3_Structures_F_Households_House_Small01","A3_Structures_F_Households_House_Small02","A3_Structures_F_Households_House_Small03","A3_Structures_F_Households_Slum", +"A3_Structures_F_Households_Stone_Big","A3_Structures_F_Households_Stone_Shed","A3_Structures_F_Households_Stone_Small","A3_Structures_F_Households_WIP","A3_Structures_F_Ind","A3_Structures_F_Ind_AirPort", +"A3_Structures_F_Ind_Cargo","A3_Structures_F_Ind_CarService","A3_Structures_F_Ind_ConcreteMixingPlant","A3_Structures_F_Ind_Crane","A3_Structures_F_Ind_DieselPowerPlant","A3_Structures_F_Ind_Factory", +"A3_Structures_F_Ind_FuelStation","A3_Structures_F_Ind_FuelStation_Small","A3_Structures_F_Ind_Pipes","A3_Structures_F_Ind_PowerLines","A3_Structures_F_Ind_ReservoirTank","A3_Structures_F_Ind_Shed", +"A3_Structures_F_Ind_SolarPowerPlant","A3_Structures_F_Ind_Tank","A3_Structures_F_Ind_Transmitter_Tower","A3_Structures_F_Ind_WavePowerPlant","A3_Structures_F_Ind_Windmill","A3_Structures_F_Ind_WindPowerPlant", +"A3_Structures_F_Items","A3_Structures_F_Items_Documents","A3_Structures_F_Items_Electronics","A3_Structures_F_Items_Food","A3_Structures_F_Items_Gadgets","A3_Structures_F_Items_Luggage","A3_Structures_F_Items_Medical", +"A3_Structures_F_Items_Military","A3_Structures_F_Items_Stationery","A3_Structures_F_Items_Tools","A3_Structures_F_Items_Valuables","A3_Structures_F_Items_Vessels","A3_Structures_F_Mil","A3_Structures_F_Mil_BagBunker", +"A3_Structures_F_Mil_BagFence","A3_Structures_F_Mil_Barracks","A3_Structures_F_Mil_Bunker","A3_Structures_F_Mil_Cargo","A3_Structures_F_Mil_Flags","A3_Structures_F_Mil_Fortification","A3_Structures_F_Mil_Helipads", +"A3_Structures_F_Mil_Offices","A3_Structures_F_Mil_Radar","A3_Structures_F_Mil_Shelters","A3_Structures_F_Mil_TentHangar","A3_Structures_F_Naval","A3_Structures_F_Naval_Buoys","A3_Structures_F_Naval_Fishing", +"A3_Structures_F_Naval_Piers","A3_Structures_F_Naval_RowBoats","A3_Structures_F_Research","A3_Structures_F_System","A3_Structures_F_Training","A3_Structures_F_Training_InvisibleTarget","A3_Structures_F_Walls", +"A3_Structures_F_EPA","A3_Structures_F_EPA_Civ_Camping","A3_Structures_F_EPA_Civ_Constructions","A3_Structures_F_EPA_Items_Electronics","A3_Structures_F_EPA_Items_Food","A3_Structures_F_EPA_Items_Medical", +"A3_Structures_F_EPA_Items_Tools","A3_Structures_F_EPA_Items_Vessels","A3_Structures_F_EPA_Walls","A3_Structures_F_EPB","A3_Structures_F_EPB_Civ_Accessories","A3_Structures_F_EPB_Civ_Camping","A3_Structures_F_EPB_Civ_Dead", +"A3_Structures_F_EPB_Civ_Garbage","A3_Structures_F_EPB_Civ_Graffiti","A3_Structures_F_EPB_Civ_PlayGround","A3_Structures_F_EPB_Furniture","A3_Structures_F_EPB_Items_Documents","A3_Structures_F_EPB_Items_Luggage", +"A3_Structures_F_EPB_Items_Military","A3_Structures_F_EPB_Items_Vessels","A3_Structures_F_EPB_Naval_Fishing","A3_Structures_F_EPC","A3_Structures_F_EPC_Civ_Accessories","A3_Structures_F_EPC_Civ_Camping", +"A3_Structures_F_EPC_Civ_Garbage","A3_Structures_F_EPC_Civ_InfoBoards","A3_Structures_F_EPC_Civ_Kiosks","A3_Structures_F_EPC_Civ_Playground","A3_Structures_F_EPC_Civ_Tourism","A3_Structures_F_EPC_Dominants_GhostHotel", +"A3_Structures_F_EPC_Dominants_Stadium","A3_Structures_F_EPC_Furniture","A3_Structures_F_EPC_Items_Documents","A3_Structures_F_EPC_Items_Electronics","A3_Structures_F_EPC_Walls","A3_UiFonts_F","A3_Animals_F", +"A3_Animals_F_Animconfig","A3_Animals_F_Fishes","A3_Animals_F_Kestrel","A3_Animals_F_Rabbit","A3_Animals_F_Seagull","A3_Animals_F_Snakes","A3_Animals_F_Turtle","A3_Animals_F_Beta","A3_Animals_F_Beta_Chicken", +"A3_Animals_F_Beta_Dog","A3_Animals_F_Beta_Goat","A3_Animals_F_Beta_Sheep","A3_Anims_F","A3_Anims_F_Config_Sdr","A3_Anims_F_Config_Sdr_WeaponSwitching","A3_Anims_F_Data","A3_Anims_F_EPA","A3_Anims_F_EPC","A3_Dubbing_F_EPA", +"A3_Dubbing_F_EPB","A3_Dubbing_F_EPC","A3_Language_F_EPA","A3_Language_F_EPB","A3_Language_F_EPC","A3_LanguageMissions_F_EPA","A3_LanguageMissions_F_EPB","A3_LanguageMissions_F_EPC","A3_Map_Data","A3_Map_Stratis", +"A3_Map_Stratis_Data","A3_Map_Stratis_Data_Layers","A3_Map_Stratis_Scenes_F","A3_Plants_F_Bush","A3_Signs_F","A3_Signs_F_Signs_Ad","A3_Structures_F_Signs_Companies","A3_Ui_F","A3_Ui_F_Data","A3_Ui_F_Curator","A3_Weapons_F", +"A3_Weapons_F_Ammoboxes","A3_Weapons_F_DummyWeapons","A3_Weapons_F_Explosives","A3_Weapons_F_Items","A3_Weapons_F_Launchers_NLAW","A3_Weapons_F_Launchers_RPG32","A3_Weapons_F_Launchers_Titan", +"A3_Weapons_F_LongRangeRifles_DMR_01","A3_Weapons_F_LongRangeRifles_EBR","A3_Weapons_F_LongRangeRifles_GM6","A3_Weapons_F_LongRangeRifles_M320","A3_Weapons_F_Machineguns_M200","A3_Weapons_F_Machineguns_Zafir", +"A3_Weapons_F_Pistols_ACPC2","A3_Weapons_F_Pistols_P07","A3_Weapons_F_Pistols_Pistol_Heavy_01","A3_Weapons_F_Pistols_Pistol_Heavy_02","A3_Weapons_F_Pistols_Rook40","A3_Weapons_F_Rifles_Khaybar","A3_Weapons_F_Rifles_MK20", +"A3_Weapons_F_Rifles_MX","A3_Weapons_F_Rifles_MX_Black","A3_Weapons_F_Rifles_SDAR","A3_Weapons_F_Rifles_TRG20","A3_Weapons_F_SMGs_Pdw2000","A3_Weapons_F_SMGs_SMG_01","A3_Weapons_F_SMGs_SMG_02","A3_Weapons_F_Beta", +"A3_Weapons_F_Beta_Ammoboxes","A3_Weapons_F_Beta_LongRangeRifles_EBR","A3_Weapons_F_Beta_LongRangeRifles_GM6","A3_Weapons_F_Beta_LongRangeRifles_M320","A3_Weapons_F_Beta_Rifles_Khaybar","A3_Weapons_F_Beta_Rifles_MX", +"A3_Weapons_F_Beta_Rifles_TRG20","A3_Weapons_F_Gamma","A3_Weapons_F_Gamma_Ammoboxes","A3_Weapons_F_Gamma_LongRangeRifles_EBR","A3_Weapons_F_Gamma_Rifles_MX","A3_Characters_F","A3_Characters_F_BLUFOR","A3_Characters_F_Civil", +"A3_Characters_F_Heads","A3_Characters_F_OPFOR","A3_Characters_F_Proxies","A3_Characters_F_Beta","A3_Characters_F_Beta_INDEP","A3_Characters_F_Gamma","A3_Data_F_Curator","A3_Data_F_Curator_Eagle","A3_Data_F_Curator_Intel", +"A3_Data_F_Curator_Misc","A3_Data_F_Curator_Respawn","A3_Data_F_Kart","A3_Data_F_Kart_ParticleEffects","A3_Language_F_Curator","A3_Language_F_Kart","A3_LanguageMissions_F_Kart","A3_Map_Altis","A3_Map_Altis_Data", +"A3_Map_Altis_Data_Layers","A3_Map_Altis_Scenes_F","A3_Missions_F","A3_Missions_F_Data","A3_Missions_F_Video","A3_Missions_F_Beta","A3_Missions_F_Beta_Data","A3_Missions_F_Beta_Video","A3_Missions_F_Gamma", +"A3_Missions_F_Gamma_Data","A3_Missions_F_Gamma_Video","A3_Modules_F_Curator","A3_Modules_F_Curator_Animals","A3_Modules_F_Curator_CAS","A3_Modules_F_Curator_Curator","A3_Modules_F_Curator_Effects", +"A3_Modules_F_Curator_Environment","A3_Modules_F_Curator_Flares","A3_Modules_F_Curator_Intel","A3_Modules_F_Curator_Lightning","A3_Modules_F_Curator_Mines","A3_Modules_F_Curator_Misc","A3_Modules_F_Curator_Multiplayer", +"A3_Modules_F_Curator_Objectives","A3_Modules_F_Curator_Ordnance","A3_Modules_F_Curator_Respawn","A3_Modules_F_Curator_SmokeShells","A3_Modules_F_Kart","A3_Modules_F_Kart_Data","A3_Modules_F_Kart_TimeTrials","A3_Sounds_F", +"A3_Sounds_F_Arsenal","A3_Sounds_F_Characters","A3_Sounds_F_Environment","A3_Sounds_F_Sfx","A3_Sounds_F_Vehicles","A3_Sounds_F_EPB","A3_Sounds_F_EPC","A3_Sounds_F_Kart","A3_Static_F","A3_Static_F_Mortar_01","A3_Static_F_Beta", +"A3_Static_F_Beta_Mortar_01","A3_Static_F_Gamma","A3_Static_F_Gamma_Mortar_01","A3_Structures_F_Kart","A3_Structures_F_Kart_Civ_SportsGrounds","A3_Structures_F_Kart_Mil_Flags","A3_Structures_F_Kart_Signs_Companies", +"A3_Ui_F_Kart","A3_Weapons_F_Acc","A3_Weapons_F_Beta_Acc","A3_Weapons_F_EPA","A3_Weapons_F_EPA_Acc","A3_Weapons_F_EPA_Ammoboxes","A3_Weapons_F_EPB","A3_Weapons_F_EPB_Acc","A3_Weapons_F_EPB_Ammoboxes", +"A3_Weapons_F_EPB_LongRangeRifles_GM6","A3_Weapons_F_EPC","A3_Weapons_F_Gamma_Acc","A3_Weapons_F_Kart","A3_Weapons_F_Kart_Pistols_Pistol_Signal_F","A3_Air_F","A3_Air_F_Heli_Light_01","A3_Air_F_Heli_Light_02","A3_Air_F_Beta", +"A3_Air_F_Beta_Heli_Attack_01","A3_Air_F_Beta_Heli_Attack_02","A3_Air_F_Beta_Heli_Transport_01","A3_Air_F_Beta_Heli_Transport_02","A3_Air_F_Beta_Parachute_01","A3_Air_F_Beta_Parachute_02","A3_Air_F_Gamma", +"A3_Air_F_Gamma_Plane_Fighter_03","A3_Anims_F_Kart","A3_Armor_F","A3_Armor_F_Beta","A3_Armor_F_Beta_APC_Tracked_01","A3_Armor_F_Beta_APC_Tracked_02","A3_Armor_F_Gamma","A3_Armor_F_Gamma_MBT_01","A3_Armor_F_Gamma_MBT_02", +"A3_Boat_F","A3_Boat_F_Boat_Armed_01","A3_Boat_F_Boat_Transport_01","A3_Boat_F_Beta","A3_Boat_F_Beta_Boat_Armed_01","A3_Boat_F_Beta_Boat_Transport_01","A3_Boat_F_Beta_SDV_01","A3_Boat_F_Gamma","A3_Boat_F_Gamma_Boat_Civil_01", +"A3_Boat_F_Gamma_Boat_Civil_04","A3_Boat_F_Gamma_Boat_Transport_01","A3_Characters_F_Common","A3_Characters_F_EPA","A3_Characters_F_EPB","A3_Characters_F_EPB_Heads","A3_Characters_F_EPC","A3_Characters_F_Kart", +"A3_Data_F_Bootcamp","A3_Data_F_Curator_Characters","A3_Data_F_Curator_Virtual","A3_Data_F_Heli","A3_Data_F_Mark","A3_Dubbing_F_Bootcamp","A3_Dubbing_F_Heli","A3_Dubbing_F_Mark","A3_Dubbing_F_MP_Mark","A3_Functions_F_Bootcamp", +"A3_Functions_F_Heli","A3_Functions_F_Mark","A3_Functions_F_MP_Mark","A3_Language_F_Bootcamp","A3_Language_F_Heli","A3_Language_F_Mark","A3_Language_F_MP_Mark","A3_LanguageMissions_F_Bootcamp","A3_LanguageMissions_F_Heli", +"A3_LanguageMissions_F_Mark","A3_LanguageMissions_F_MP_Mark","A3_Map_VR","A3_Map_VR_Scenes_F","A3_Missions_F_EPA","A3_Missions_F_EPA_Data","A3_Missions_F_EPA_Video","A3_Missions_F_EPB","A3_Missions_F_EPC","A3_Modules_F_Bootcamp" +,"A3_Modules_F_Bootcamp_Misc","A3_Modules_F_Curator_Chemlights","A3_Modules_F_Heli","A3_Modules_F_Heli_Misc","A3_Modules_F_Mark","A3_Modules_F_Mark_FiringDrills","A3_Modules_F_MP_Mark","A3_Modules_F_MP_Mark_Objectives", +"A3_Music_F_Bootcamp","A3_Music_F_Bootcamp_Music","A3_Music_F_Heli","A3_Music_F_Heli_Music","A3_Music_F_Mark","A3_Music_F_Mark_Music","A3_Soft_F","A3_Soft_F_MRAP_01","A3_Soft_F_MRAP_02","A3_Soft_F_Offroad_01", +"A3_Soft_F_Quadbike_01","A3_Soft_F_Beta","A3_Soft_F_Beta_MRAP_03","A3_Soft_F_Beta_Quadbike_01","A3_Soft_F_Beta_Truck_01","A3_Soft_F_Beta_Truck_02","A3_Soft_F_Gamma","A3_Soft_F_Gamma_Hatchback_01","A3_Soft_F_Gamma_Offroad_01", +"A3_Soft_F_Gamma_Quadbike_01","A3_Soft_F_Gamma_SUV_01","A3_Soft_F_Gamma_Truck_01","A3_Soft_F_Gamma_Truck_02","A3_Soft_F_Gamma_Van_01","A3_Sounds_F_Bootcamp","A3_Sounds_F_Heli","A3_Sounds_F_Mark","A3_Static_F_AA_01", +"A3_Static_F_AT_01","A3_Static_F_Mark","A3_Static_F_Mark_Designator_01","A3_Static_F_Mark_Designator_02","A3_Structures_F_Mil_Scrapyard","A3_Structures_F_Wrecks","A3_Structures_F_Bootcamp","A3_Structures_F_Bootcamp_Civ_Camping", +"A3_Structures_F_Bootcamp_Civ_SportsGrounds","A3_Structures_F_Bootcamp_Ind_Cargo","A3_Structures_F_Bootcamp_Items_Electronics","A3_Structures_F_Bootcamp_Items_Food","A3_Structures_F_Bootcamp_Items_Sport", +"A3_Structures_F_Bootcamp_System","A3_Structures_F_Bootcamp_Training","A3_Structures_F_Bootcamp_VR_Blocks","A3_Structures_F_Bootcamp_VR_CoverObjects","A3_Structures_F_Bootcamp_VR_Helpers","A3_Structures_F_EPA_Mil_Scrapyard", +"A3_Structures_F_Heli","A3_Structures_F_Heli_Civ_Accessories","A3_Structures_F_Heli_Civ_Constructions","A3_Structures_F_Heli_Civ_Garbage","A3_Structures_F_Heli_Civ_Market","A3_Structures_F_Heli_Furniture", +"A3_Structures_F_Heli_Ind_Airport","A3_Structures_F_Heli_Ind_Cargo","A3_Structures_F_Heli_Ind_Machines","A3_Structures_F_Heli_Items_Airport","A3_Structures_F_Heli_Items_Electronics","A3_Structures_F_Heli_Items_Food", +"A3_Structures_F_Heli_Items_Luggage","A3_Structures_F_Heli_Items_Sport","A3_Structures_F_Heli_Items_Tools","A3_Structures_F_Heli_VR_Helpers","A3_Structures_F_Mark","A3_Structures_F_Mark_Items_Military", +"A3_Structures_F_Mark_Items_Sport","A3_Structures_F_Mark_Mil_Flags","A3_Structures_F_Mark_Training","A3_Structures_F_Mark_VR_Helpers","A3_Structures_F_Mark_VR_Shapes","A3_Structures_F_Mark_VR_Targets","A3_Supplies_F_Heli", +"A3_Supplies_F_Heli_Bladders","A3_Supplies_F_Heli_CargoNets","A3_Supplies_F_Heli_Fuel","A3_Supplies_F_Heli_Slingload","A3_Supplies_F_Mark","A3_Ui_F_Bootcamp","A3_Ui_F_Heli","A3_Ui_F_Mark","A3_Ui_F_MP_Mark", +"A3_Weapons_F_Bootcamp","A3_Weapons_F_Bootcamp_Ammoboxes","A3_Weapons_F_Bootcamp_LongRangeRifles_GM6_Camo","A3_Weapons_F_Bootcamp_LongRangeRifles_M320_Camo","A3_Weapons_F_Mark","A3_Weapons_F_Mark_Acc", +"A3_Weapons_F_Mark_LongRangeRifles_DMR_01","A3_Weapons_F_Mark_LongRangeRifles_DMR_02","A3_Weapons_F_Mark_LongRangeRifles_DMR_03","A3_Weapons_F_Mark_LongRangeRifles_DMR_04","A3_Weapons_F_Mark_LongRangeRifles_DMR_05", +"A3_Weapons_F_Mark_LongRangeRifles_DMR_06","A3_Weapons_F_Mark_LongRangeRifles_EBR","A3_Weapons_F_Mark_LongRangeRifles_GM6","A3_Weapons_F_Mark_LongRangeRifles_GM6_Camo","A3_Weapons_F_Mark_LongRangeRifles_M320", +"A3_Weapons_F_Mark_LongRangeRifles_M320_Camo","A3_Weapons_F_Mark_Machineguns_M200","A3_Weapons_F_Mark_Machineguns_MMG_01","A3_Weapons_F_Mark_Machineguns_MMG_02","A3_Weapons_F_Mark_Machineguns_Zafir", +"A3_Weapons_F_Mark_Rifles_Khaybar","A3_Weapons_F_Mark_Rifles_MK20","A3_Weapons_F_Mark_Rifles_MX","A3_Weapons_F_Mark_Rifles_SDAR","A3_Weapons_F_Mark_Rifles_TRG20","A3_Air_F_EPB","A3_Air_F_EPB_Heli_Light_03","A3_Air_F_EPC", +"A3_Air_F_EPC_Plane_CAS_01","A3_Air_F_EPC_Plane_CAS_02","A3_Air_F_EPC_Plane_Fighter_03","A3_Air_F_Heli","A3_Air_F_Heli_Heli_Attack_01","A3_Air_F_Heli_Heli_Attack_02","A3_Air_F_Heli_Heli_Light_01","A3_Air_F_Heli_Heli_Light_02", +"A3_Air_F_Heli_Heli_Light_03","A3_Air_F_Heli_Heli_Transport_01","A3_Air_F_Heli_Heli_Transport_02","A3_Air_F_Heli_Heli_Transport_03","A3_Air_F_Heli_Heli_Transport_04","A3_Anims_F_Bootcamp","A3_Anims_F_Heli","A3_Anims_F_Mark", +"A3_Anims_F_Mark_Deployment","A3_Armor_F_Beta_APC_Wheeled_01","A3_Armor_F_Beta_APC_Wheeled_02","A3_Armor_F_EPB","A3_Armor_F_EPB_APC_Tracked_03","A3_Armor_F_EPB_MBT_03","A3_Armor_F_EPC","A3_Armor_F_EPC_MBT_01", +"A3_Armor_F_Gamma_APC_Wheeled_03","A3_Boat_F_EPC","A3_Boat_F_EPC_Submarine_01","A3_Boat_F_Heli","A3_Boat_F_Heli_Boat_Armed_01","A3_Boat_F_Heli_SDV_01","A3_Cargoposes_F","A3_Cargoposes_F_Heli","A3_Characters_F_Bootcamp", +"A3_Characters_F_Bootcamp_Common","A3_Characters_F_Mark","A3_Data_F_Exp_A","A3_Data_F_Exp_B","A3_Drones_F","A3_Drones_F_Air_F_Gamma_UAV_01","A3_Drones_F_Air_F_Gamma_UAV_02","A3_Drones_F_Characters_F_Gamma", +"A3_Drones_F_Soft_F_Gamma_UGV_01","A3_Drones_F_Weapons_F_Gamma_Ammoboxes","A3_Drones_F_Weapons_F_Gamma_Items","A3_Functions_F_Exp_A","A3_Language_F_Exp_A","A3_Language_F_Exp_B","A3_Missions_F_Curator","A3_Missions_F_Kart", +"A3_Missions_F_Kart_Data","A3_Modules_F_Exp_A","A3_Props_F_Exp_A","A3_Props_F_Exp_A_Military","A3_Props_F_Exp_A_Military_Equipment","A3_Soft_F_EPC","A3_Soft_F_EPC_Truck_03","A3_Soft_F_Kart","A3_Soft_F_Kart_Kart_01", +"A3_Sounds_F_Exp_A","A3_Structures_F_Exp_A","A3_Structures_F_Exp_A_VR_Blocks","A3_Structures_F_Exp_A_VR_Helpers","A3_Ui_F_Exp_A","A3_3DEN","A3_Anims_F_Exp_A","A3_Data_F_Exp_A_Virtual","A3_Missions_F_Bootcamp", +"A3_Missions_F_Bootcamp_Data","A3_Missions_F_Bootcamp_Video","A3_Missions_F_Heli","A3_Missions_F_Heli_Data","A3_Missions_F_Heli_Video","A3_Missions_F_Mark","A3_Missions_F_Mark_Data","A3_Missions_F_Mark_Video", +"A3_Missions_F_MP_Mark","A3_Missions_F_MP_Mark_Data","A3_Soft_F_Bootcamp","A3_Soft_F_Bootcamp_Offroad_01","A3_Soft_F_Bootcamp_Quadbike_01","A3_Soft_F_Bootcamp_Van_01","A3_Soft_F_Heli","A3_Soft_F_Heli_Hatchback_01", +"A3_Soft_F_Heli_MRAP_01","A3_Soft_F_Heli_MRAP_02","A3_Soft_F_Heli_MRAP_03","A3_Soft_F_Heli_Quadbike_01","A3_Soft_F_Heli_SUV_01","A3_Soft_F_Heli_UGV_01","A3_Soft_F_Heli_Van_01","A3_BaseConfig_F","3DEN","A3_Animals_F_Chicken", +"A3_Animals_F_Dog","A3_Animals_F_Goat","A3_Animals_F_Sheep","A3_Armor_F_Panther","A3_Armor_F_AMV","A3_Armor_F_Marid","A3_Armor_F_APC_Wheeled_03","A3_Armor_F_Slammer","A3_Armor_F_T100K","A3_Boat_F_SDV_01", +"A3_Boat_F_EPC_Submarine_01_F","A3_Boat_F_Civilian_Boat","A3_Boat_F_Trawler","A3_Characters_F_INDEP","A3_Air_F_Gamma_UAV_01","A3_Air_F_Gamma_UAV_02","A3_UAV_F_Characters_F_Gamma","A3_Soft_F_Crusher_UGV", +"A3_UAV_F_Weapons_F_Gamma_Ammoboxes","A3_Weapons_F_gamma_Items","A3_Map_Altis_Scenes","A3_Map_Stratis_Scenes","Map_VR","A3_Map_VR_Scenes","A3_Modules_F_Heli_SpawnAi","A3_Modules_F_Mark_Objectives","A3_Signs_F_AD", +"A3_Soft_F_Quadbike","A3_Soft_F_MRAP_03","A3_Soft_F_Beta_Quadbike","A3_Soft_F_HEMTT","A3_Soft_F_TruckHeavy","A3_Soft_F_Bootcamp_Quadbike","A3_Soft_F_Bootcamp_Truck","A3_Soft_F_Car","A3_Soft_F_Gamma_Offroad", +"A3_Soft_F_Gamma_Quadbike","A3_Soft_F_SUV","A3_Soft_F_Gamma_HEMTT","A3_Soft_F_Gamma_TruckHeavy","A3_Soft_F_Truck","A3_Soft_F_Heli_Car","A3_Soft_F_Heli_Quadbike","A3_Soft_F_Heli_SUV","A3_Soft_F_Heli_Crusher_UGV", +"A3_Soft_F_Heli_Truck","A3_Static_F_Gamma_AA","A3_Static_F_Gamma_AT","A3_Structures_F_Items_Cans","A3_Weapons_F_NATO","A3_Weapons_F_CSAT","A3_Weapons_F_AAF","A3_weapons_F_FIA","A3_Weapons_F_ItemHolders","A3_Weapons_F_Headgear", +"A3_Weapons_F_Uniforms","A3_Weapons_F_Vests","A3_Weapons_F_Launchers_LAW","A3_Weapons_F_EPA_LongRangeRifles_DMR_01","A3_Weapons_F_EBR","A3_Weapons_F_EPB_Rifles_MX_Black","A3_Weapons_F_Pistols_PDW2000", +"A3_Weapons_F_Rifles_Vector","a3_weapons_f_rifles_SMG_02","A3_Weapons_F_beta_EBR","A3_Weapons_F_EPA_LongRangeRifles_GM6","A3_Weapons_F_EPB_LongRangeRifles_M320","A3_Weapons_F_Bootcamp_LongRangeRifles_GM6", +"A3_Weapons_F_Bootcamp_LongRangeRifles_M320","A3_Weapons_F_EPB_LongRangeRifles_GM3","A3_Weapons_F_EPA_EBR","A3_Weapons_F_EPA_Rifles_MX","A3_Weapons_F_Mark_EBR","CuratorOnly_Air_F_Beta_Heli_Attack_01", +"CuratorOnly_Air_F_Beta_Heli_Attack_02","CuratorOnly_Air_F_Gamma_UAV_01","CuratorOnly_Armor_F_AMV","CuratorOnly_armor_f_beta_APC_Tracked_02","CuratorOnly_Armor_F_Marid","CuratorOnly_Armor_F_Panther","CuratorOnly_Armor_F_Slammer" +,"CuratorOnly_Armor_F_T100K","CuratorOnly_Boat_F_Boat_Armed_01","CuratorOnly_Characters_F_BLUFOR","CuratorOnly_Characters_F_Common","CuratorOnly_Characters_F_OPFOR","CuratorOnly_Modules_F_Curator_Animals", +"CuratorOnly_Modules_F_Curator_Chemlights","CuratorOnly_Modules_F_Curator_Effects","CuratorOnly_Modules_F_Curator_Environment","CuratorOnly_Modules_F_Curator_Flares","CuratorOnly_Modules_F_Curator_Lightning", +"CuratorOnly_Modules_F_Curator_Mines","CuratorOnly_Modules_F_Curator_Objectives","CuratorOnly_Modules_F_Curator_Ordnance","CuratorOnly_Modules_F_Curator_Smokeshells","CuratorOnly_Signs_F","CuratorOnly_Soft_F_Crusher_UGV", +"CuratorOnly_Soft_F_MRAP_01","CuratorOnly_Soft_F_MRAP_02","CuratorOnly_Soft_F_Quadbike","CuratorOnly_Static_F_Gamma","CuratorOnly_Static_F_Mortar_01","CuratorOnly_Structures_F_Civ_Ancient","CuratorOnly_Structures_F_Civ_Camping", +"CuratorOnly_Structures_F_Civ_Garbage","CuratorOnly_Structures_F_EPA_Civ_Constructions","CuratorOnly_Structures_F_EPB_Civ_Dead","CuratorOnly_Structures_F_Ind_Cargo","CuratorOnly_Structures_F_Ind_Crane", +"CuratorOnly_Structures_F_Ind_ReservoirTank","CuratorOnly_Structures_F_Ind_Transmitter_Tower","CuratorOnly_Structures_F_Items_Vessels","CuratorOnly_Structures_F_Mil_BagBunker","CuratorOnly_Structures_F_Mil_BagFence", +"CuratorOnly_Structures_F_Mil_Cargo","CuratorOnly_Structures_F_Mil_Fortification","CuratorOnly_Structures_F_Mil_Radar","CuratorOnly_Structures_F_Mil_Shelters","CuratorOnly_Structures_F_Research","CuratorOnly_Structures_F_Walls", +"CuratorOnly_Structures_F_Wrecks","A3_Missions_F_Exp_A","A3_Missions_F_Exp_A_Data"]; + +uiNamespace setVariable ["RscDisplayRemoteMissions",displayNull]; //For Spy-Glass.. +uiNamespace setVariable ["RscDisplayMultiplayer",displayNull]; + +_binConfigPatches = configFile >> "CfgPatches"; +for "_i" from 0 to count (_binConfigPatches)-1 do { + _patchEntry = _binConfigPatches select _i; + if (isClass _patchEntry) then { + if (!((configName _patchEntry) in _patchList)) exitWith { + [profileName,getPlayerUID player,(configName _patchEntry)] remoteExec ["SPY_fnc_cookieJar",RSERV]; + [profileName,format["Unknown Addon Patch: %1",(configName _patchEntry)]] remoteExec ["SPY_fnc_notifyAdmins",RCLIENT]; + sleep 0.5; + failMission "SpyGlass"; + }; + }; +}; + +//Check for copy-pasters of Dev-Con styled execution. +//Because I am nice, add these to the following below to allow CBA; "CBA_CREDITS_CONT_C","CBA_CREDITS_M_P +private["_children","_allowedChildren"]; +_children = [configFile >> "RscDisplayMPInterrupt" >> "controls",0] call BIS_fnc_returnChildren; +_allowedChildren = [ +"Title","MissionTitle","PlayersName","ButtonCancel","ButtonSAVE","ButtonSkip","ButtonRespawn","ButtonOptions", +"ButtonVideo","ButtonAudio","ButtonControls","ButtonGame","ButtonTutorialHints","ButtonAbort","DebugConsole", +"Version","TraffLight","Feedback","MessageBox" +]; + +{ + if (!((configName _x) in _allowedChildren)) exitWith { + [profileName,getPlayerUID player,"Modified_MPInterrupt"] remoteExec ["SPY_fnc_cookieJar",RSERV]; + [profileName,"Devcon like executor detected"] remoteExec ["SPY_fnc_notifyAdmins",RCLIENT]; + sleep 0.5; + failMission "SpyGlass"; + }; +} forEach _children; + +/* + Display Validator + Loops through and makes sure none of the displays were modified.. + + TODO: Run check every x minutes and validate all displays. +*/ +{ + _onLoad = getText(configFile >> (_x select 0) >> "onLoad"); + _onUnload = getText(configFile >> (_x select 0) >> "onUnload"); + if (_onLoad != (_x select 1) || _onUnload != (_x select 2)) exitWith { + [profileName,getPlayerUID player,format["Modified_Method_%1",_x select 0]] remoteExecCall ["SPY_fnc_cookieJar",RSERV]; + [profileName,format["Modified Display Method %1 (Memory Edit)",_x select 0]] remoteExecCall ["SPY_fnc_notifyAdmins",RCLIENT]; + sleep 0.5; + vehicle player setVelocity[1e10,1e14,1e18]; //It's a surprise. + sleep 3; + preProcessFile "SpyGlass\endoftheline.sqf"; + sleep 2.5; + failMission "SpyGlass"; + }; +} +forEach [ + ["RscDisplayMainMap","[""onLoad"",_this,""RscDiary"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDiary"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayGetReady","[""onLoad"",_this,""RscDiary"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDiary"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayInventory","[""onLoad"",_this,""RscDisplayInventory"",'IGUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayInventory"",'IGUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayLoadMission","[""onLoad"",_this,""RscDisplayLoading"",'3DENDisplaysTemp'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayLoading"",'3DENDisplaysTemp'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayInterrupt","[""onLoad"",_this,""RscDisplayInterrupt"",'3DENDisplaysTemp'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayInterrupt"",'3DENDisplaysTemp'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayOptionsVideo","[""onLoad"",_this,""RscDisplayOptionsVideo"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayOptionsVideo"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayOptions","[""onLoad"",_this,""RscDisplayOptions"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayOptions"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayAVTerminal","[""onLoad"",_this,""RscDisplayAVTerminal"",'IGUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayAVTerminal"",'IGUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayConfigureAction","[""onLoad"",_this,""RscDisplayConfigureAction"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayConfigureAction"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayConfigureControllers","[""onLoad"",_this,""RscDisplayConfigureControllers"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayConfigureControllers"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayControlSchemes","[""onLoad"",_this,""RscDisplayControlSchemes"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayControlSchemes"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayCustomizeController","[""onLoad"",_this,""RscDisplayCustomizeController"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayCustomizeController"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayDebriefing","[""onLoad"",_this,""RscDisplayDebriefing"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayDebriefing"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayDiary","[""onLoad"",_this,""RscDiary"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDiary"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayGameOptions","[""onLoad"",_this,""RscDisplayGameOptions"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayGameOptions"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayJoystickSchemes","[""onLoad"",_this,""RscDisplayJoystickSchemes"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayJoystickSchemes"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayLoading","[""onLoad"",_this,""RscDisplayLoading"",'3DENDisplaysTemp'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayLoading"",'3DENDisplaysTemp'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayMicSensitivityOptions","[""onLoad"",_this,""RscDisplayMicSensitivityOptions"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayMicSensitivityOptions"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayOptionsAudio","[""onLoad"",_this,""RscDisplayOptionsAudio"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayOptionsAudio"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayOptionsLayout","[""onLoad"",_this,""RscDisplayOptionsLayout"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayOptionsLayout"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayStart","[2] call compile preprocessFileLineNumbers getText (configfile >> 'CfgFunctions' >> 'init'); ['onLoad',_this,'RscDisplayLoading','Loading'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayLoading"",'3DENDisplaysTemp'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayInsertMarker","[""onLoad"",_this,""RscDisplayInsertMarker"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayInsertMarker"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"] +]; + +/* Forgot to include this but this is also also a popular method for "unreleased" stuff */ +if (getText(configFile >> "CfgFunctions" >> "init") != "A3\functions_f\initFunctions.sqf") then { + [profileName,getPlayerUID player,"Modified_Functions_Init"] remoteExecCall ["SPY_fnc_cookieJar",RSERV]; + [profileName,"Modified_Functions_Init"] remoteExecCall ["SPY_fnc_notifyAdmins",RCLIENT]; + sleep 0.5; + vehicle player setVelocity[1e10,1e14,1e18]; //It's a surprise. + sleep 3; + preProcessFile "SpyGlass\endoftheline.sqf"; + sleep 2.5; + failMission "SpyGlass"; +}; + +[] execVM "SpyGlass\fn_cmdMenuCheck.sqf"; +[] execVM "SpyGlass\fn_variableCheck.sqf"; +[] execVM "SpyGlass\fn_menuCheck.sqf"; diff --git a/life_client/SpyGlass/fn_menuCheck.sqf b/life_client/SpyGlass/fn_menuCheck.sqf new file mode 100644 index 00000000..8226369b --- /dev/null +++ b/life_client/SpyGlass/fn_menuCheck.sqf @@ -0,0 +1,176 @@ +#include "..\script_macros.hpp" +/* + File: fn_menuCheck.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Checks for known cheat menus and closes them then reports them to the server. +*/ +private["_displays","_detection","_display","_timeStamp"]; +disableSerialization; + +_displays = [ + [3030,"BIS_configviewer_display"],["RscDisplayMultiplayer","RscDisplayMultiplayer"],[162,"RscDisplayFieldManual"],["RscDisplayRemoteMissions","RscDisplayRemoteMissions"],[125,"RscDisplayEditDiaryRecord"], + [69,"UnknownDisplay"],[19,"UnknownDisplay"],[71,"UnknownDisplay"],[45,"UnknownDisplay"],[132,"UnknownDisplay"],[32,"UnknownDisplay"],[165,"RscDisplayPublishMission"],[2727,"RscDisplayLocWeaponInfo"], + ["RscDisplayMovieInterrupt","RscDisplayMovieInterrupt"],[157,"UnknownDisplay"],[30,"UnknownDisplay"],["RscDisplayArsenal","RscDisplayArsenal"],[166,"RscDisplayPublishMissionSelectTags"],[167,"RscDisplayFileSelect"] +]; + +_detection = false; +_timeStamp = time; +for "_i" from 0 to 1 step 0 do { + { + _targetDisplay = _x select 0; + _targetName = _x select 1; + switch (typeName _targetDisplay) do { + case ("STRING"): {if (!isNull (uiNamespace getVariable [_targetDisplay,displayNull])) exitWith {_detection = true;};}; + default {if (!isNull (findDisplay _targetDisplay)) exitWith {_detection = true;};}; + }; + + if (_detection) exitWith { + [profileName,getPlayerUID player,format["MenuBasedHack_%1",_targetName]] remoteExecCall ["SPY_fnc_cookieJar",RSERV]; + [profileName,format["Menu Hack: %1",_targetName]] remoteExecCall ["SPY_fnc_notifyAdmins",RCLIENT]; + sleep 0.5; + SPYGLASS_END + }; + } forEach _displays; + + if (_detection) exitWith {}; + + /* A very old menu that can cause false-positives so we close it */ + if (!isNull (findDisplay 129)) then { + closeDialog 0; + }; + + /* Check to see if RscDisplayInventory has more controls then it should */ + _display = findDisplay 602; + if (!isNull _display && {count (allControls _display) > 87}) then { + _count = count allControls _display; + [profileName,getPlayerUID player,format["MenuBasedHack_RscDisplayInventory_Controls_%1",_count]] remoteExecCall ["SPY_fnc_cookieJar",RSERV]; + [profileName,format["Menu Hack: RscDisplayInventory number of controls do not match (Count %1)",_count]] remoteExecCall ["SPY_fnc_notifyAdmins",RCLIENT]; + closeDialog 0; + SPYGLASS_END + }; + + if (!isNull (findDisplay 148)) then { + sleep 0.5; + if ((lbSize 104)-1 > 3) exitWith { + [profileName,getPlayerUID player,"MenuBasedHack_RscDisplayConfigureControllers"] remoteExecCall ["SPY_fnc_cookieJar",RSERV]; + [profileName,"Menu Hack: RscDisplayConfigureControllers (JME 313)"] remoteExecCall ["SPY_fnc_notifyAdmins",RCLIENT]; + closeDialog 0; + SPYGLASS_END + }; + }; + + _display = findDisplay 54; + if (!isNull _display) then { + { + if (_x && !isNull _display) exitWith { + [profileName,getPlayerUID player,"MenuBasedHack_RscDisplayInsertMarker"] remoteExecCall ["SPY_fnc_cookieJar",RSERV]; + [profileName,"Menu Hack: RscDisplayInsertMarker"] remoteExecCall ["SPY_fnc_notifyAdmins",RCLIENT]; + closeDialog 0; + SPYGLASS_END + }; + } forEach [ + (toLower ctrlText (_display displayCtrl 1001) != toLower localize "STR_A3_RscDisplayInsertMarker_Title"), + {if (buttonAction (_display displayCtrl _x) != "") exitWith {true}; false} forEach [1,2] + ]; + }; + + _display = findDisplay 131; + if (!isNull _display) then { + //These shouldn't be here... + (_display displayCtrl 102) ctrlRemoveAllEventHandlers "LBDblClick"; + (_display displayCtrl 102) ctrlRemoveAllEventHandlers "LBSelChanged"; + + { + if (_x && !isNull _display) exitWith { + [profileName,getPlayerUID player,"MenuBasedHack_RscDisplayConfigureAction"] remoteExecCall ["SPY_fnc_cookieJar",RSERV]; + [profileName,"Menu Hack: RscDisplayConfigureAction"] remoteExecCall ["SPY_fnc_notifyAdmins",RCLIENT]; + closeDialog 0; + SPYGLASS_END + }; + } forEach [ + (toLower ctrlText (_display displayCtrl 1000) != toLower localize "STR_A3_RscDisplayConfigureAction_Title"), + {if (buttonAction (_display displayCtrl _x) != "") exitWith {true}; false} forEach [1,104,105,106,107,108,109] + ]; + }; + + _display = findDisplay 163; + if (!isNull _display) then { + (_display displayCtrl 101) ctrlRemoveAllEventHandlers "LBDblClick"; + (_display displayCtrl 101) ctrlRemoveAllEventHandlers "LBSelChanged"; + + { + if (_x && !isNull _display) exitWith { + [profileName,getPlayerUID player,"MenuBasedHack_RscDisplayControlSchemes"] remoteExecCall ["SPY_fnc_cookieJar",RSERV]; + [profileName,"Menu Hack: RscDisplayControlSchemes"] remoteExecCall ["SPY_fnc_notifyAdmins",RCLIENT]; + closeDialog 0; + SPYGLASS_END + }; + } forEach [ + (toLower ctrlText (_display displayCtrl 1000) != toLower localize "STR_DISP_OPTIONS_SCHEME"), + {if (buttonAction (_display displayCtrl _x) != "") exitWith {true}; false} forEach [1,2] + ]; + }; + + _display = findDisplay 316000; + if (!isNull _display && !isNil "life_admin_debug" && !life_admin_debug) exitWith { + [profileName,getPlayerUID player,"MenuBasedHack_RscDisplayDebugPublic"] remoteExecCall ["SPY_fnc_cookieJar",RSERV]; + [profileName,"Menu Hack: RscDisplayDebugPublic"] remoteExecCall ["SPY_fnc_notifyAdmins",RCLIENT]; + closeDialog 0; + SPYGLASS_END + }; + + /* We'll just move the no-recoil check into this thread. */ + if ((unitRecoilCoefficient player) < 1) then { + [profileName,getPlayerUID player,"No_recoil_hack"] remoteExec ["SPY_fnc_cookieJar",RSERV]; + [profileName,"No recoil hack"] remoteExec ["SPY_fnc_notifyAdmins",RCLIENT]; + sleep 0.5; + failMission "SpyGlass"; + }; + + /* + Display Validator + Loops through and makes sure none of the displays were modified.. + + Checks every 5 minutes. + */ + if ((time - _timeStamp) > 300) then { + _timeStamp = time; + { + _onLoad = getText(configFile >> (_x select 0) >> "onLoad"); + _onUnload = getText(configFile >> (_x select 0) >> "onUnload"); + if (_onLoad != _x select 1 || _onUnload != _x select 2) exitWith { + [profileName,getPlayerUID player,format["Modified_Method_%1",_x select 0]] remoteExecCall ["SPY_fnc_cookieJar",RSERV]; + [profileName,format["Modified Display Method %1 (Memory Edit)",_x select 0]] remoteExecCall ["SPY_fnc_notifyAdmins",RCLIENT]; + sleep 0.5; + SPYGLASS_END + }; + } + forEach [ + ["RscDisplayMainMap","[""onLoad"",_this,""RscDiary"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDiary"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayGetReady","[""onLoad"",_this,""RscDiary"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDiary"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayInventory","[""onLoad"",_this,""RscDisplayInventory"",'IGUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayInventory"",'IGUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayLoadMission","[""onLoad"",_this,""RscDisplayLoading"",'3DENDisplaysTemp'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayLoading"",'3DENDisplaysTemp'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayInterrupt","[""onLoad"",_this,""RscDisplayInterrupt"",'3DENDisplaysTemp'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayInterrupt"",'3DENDisplaysTemp'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayOptionsVideo","[""onLoad"",_this,""RscDisplayOptionsVideo"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayOptionsVideo"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayOptions","[""onLoad"",_this,""RscDisplayOptions"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayOptions"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayAVTerminal","[""onLoad"",_this,""RscDisplayAVTerminal"",'IGUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayAVTerminal"",'IGUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayConfigureAction","[""onLoad"",_this,""RscDisplayConfigureAction"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayConfigureAction"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayConfigureControllers","[""onLoad"",_this,""RscDisplayConfigureControllers"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayConfigureControllers"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayControlSchemes","[""onLoad"",_this,""RscDisplayControlSchemes"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayControlSchemes"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayCustomizeController","[""onLoad"",_this,""RscDisplayCustomizeController"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayCustomizeController"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayDebriefing","[""onLoad"",_this,""RscDisplayDebriefing"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayDebriefing"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayDiary","[""onLoad"",_this,""RscDiary"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDiary"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayGameOptions","[""onLoad"",_this,""RscDisplayGameOptions"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayGameOptions"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayJoystickSchemes","[""onLoad"",_this,""RscDisplayJoystickSchemes"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayJoystickSchemes"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayLoading","[""onLoad"",_this,""RscDisplayLoading"",'3DENDisplaysTemp'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayLoading"",'3DENDisplaysTemp'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayMicSensitivityOptions","[""onLoad"",_this,""RscDisplayMicSensitivityOptions"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayMicSensitivityOptions"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayOptionsAudio","[""onLoad"",_this,""RscDisplayOptionsAudio"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayOptionsAudio"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayOptionsLayout","[""onLoad"",_this,""RscDisplayOptionsLayout"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayOptionsLayout"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayStart","[2] call compile preprocessFileLineNumbers getText (configfile >> 'CfgFunctions' >> 'init'); ['onLoad',_this,'RscDisplayLoading','Loading'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayLoading"",'3DENDisplaysTemp'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"], + ["RscDisplayInsertMarker","[""onLoad"",_this,""RscDisplayInsertMarker"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')","[""onUnload"",_this,""RscDisplayInsertMarker"",'GUI'] call (uiNamespace getVariable 'BIS_fnc_initDisplay')"] + ]; + }; + uiSleep 1; +}; diff --git a/life_client/SpyGlass/fn_notifyAdmins.sqf b/life_client/SpyGlass/fn_notifyAdmins.sqf new file mode 100644 index 00000000..416722ed --- /dev/null +++ b/life_client/SpyGlass/fn_notifyAdmins.sqf @@ -0,0 +1,12 @@ +#include "..\script_macros.hpp" +/* + File: fn_notifyAdmins.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Checks if player is admin and notifies them that of the + flagged person. +*/ +if (isServer && !hasInterface) exitWith {}; //NO SERVER DO NOT EXECUTE IT! +if (FETCH_CONST(life_adminlevel) < 1) exitWith {}; +hint parseText format["SPY-GLASS
Cheater Flagged


Name: %1
Detection: %2",(_this select 0),(_this select 1)]; diff --git a/life_client/SpyGlass/fn_observe.sqf b/life_client/SpyGlass/fn_observe.sqf new file mode 100644 index 00000000..02b94822 --- /dev/null +++ b/life_client/SpyGlass/fn_observe.sqf @@ -0,0 +1,18 @@ +/* + File: fn_observe.sqf + Author: Bryan "Tonic" Boardwine + + Description: + This is the observation part of SPY-GLASS, it reports to the RPT log + of unusual activity by the player. +*/ +private["_pName","_pUID","_pReason"]; +params [ + ["_pName","",[""]], + ["_pUID","",[""]], + ["_pReason","",[""]] +]; + +if (_pName isEqualTo "" || _pUID isEqualTo "" || _pReason isEqualTo "") exitWith {}; //Bad params passed.. + +diag_log format["||SPY-GLASS Observes|| Name: %1 | UID: %2 | Reason: %3",_pName,_pUID,_pReason]; //Outputs to RPT for external programs to parse,log,react to. diff --git a/life_client/SpyGlass/fn_variableCheck.sqf b/life_client/SpyGlass/fn_variableCheck.sqf new file mode 100644 index 00000000..eb4daff2 --- /dev/null +++ b/life_client/SpyGlass/fn_variableCheck.sqf @@ -0,0 +1,109 @@ +#include "..\script_macros.hpp" +#define SPY_SETTINGS(TYPE,SETTING) TYPE(missionConfigFile >> "SpyGlass" >> SETTING) +/* + File: fn_variableCheck.sqf + Author: + + Description: + Checks against harmful variables, disable this if client-performance is + to bad in the fn_initSpy.sqf, the menuCheck should be good enough! +*/ +private["_BIS_Functions","_LIFE_Functions","_SERVER_Functions","_SOCK_Functions","_DB_Functions","_allowedVariables","_checkFunction","_BIS_UI_Functions","_allowedVariables_UI","_profileCount"]; +_BIS_Functions = SPY_SETTINGS(getArray,"BIS_Functions"); +_BIS_UI_Functions = SPY_SETTINGS(getArray,"BIS_UI_Functions"); +_LIFE_Functions = SPY_SETTINGS(getArray,"LIFE_Functions"); +_SERVER_Functions = SPY_SETTINGS(getArray,"SERVER_Functions"); +_SOCK_Functions = SPY_SETTINGS(getArray,"SOCK_Functions"); +_DB_Functions = SPY_SETTINGS(getArray,"DB_Functions"); +_allowedVariables = SPY_SETTINGS(getArray,"allowedVariables"); +_allowedVariables_UI = SPY_SETTINGS(getArray,"allowedVariables_UI"); +_profileCount = count allVariables profileNameSpace; + +/* Build Player Slots because we name them and they are counted as variables */ +for "_i" from 1 to 125 do { + if (_i <= SPY_SETTINGS(getNumber,"civSlotNumber")) then {_allowedVariables pushBack [format["civ_%1",_i],"OBJECT"]}; + if (_i <= SPY_SETTINGS(getNumber,"copSlotNumber")) then {_allowedVariables pushBack [format["cop_%1",_i],"OBJECT"]}; + if (_i <= SPY_SETTINGS(getNumber,"medSlotNumber")) then {_allowedVariables pushBack [format["medic_%1",_i],"OBJECT"]}; +}; + +/* First lets clear out the memory of potentially bad variables */ +{ + if (!isNil _x) then { + if (!(_x in _BIS_Functions)) then { + if (!(_x in _LIFE_Functions)) then { + if (!(_x in _SERVER_Functions)) then { + if (!(_x in _SOCK_Functions)) then { + if (!(_x in _DB_Functions)) then { + if (!(_x in _BIS_UI_Functions)) then { + _varType = typeName (uiNamespace getVariable _x); + _find = _allowedVariables find [_x,_varType]; + if (_find isEqualTo -1) then { + uiNamespace setVariable [_x,nil]; + }; + }; + }; + }; + }; + }; + }; + }; +} forEach (allVariables uiNamespace); + +/* Some people may be like WTF ALL DEM Checks... It was either this or lazy eval which could have a performance impact on the client. */ +_checkFunction = { + { + if (!isNil _x) then { + if (!(_x in _BIS_Functions)) then { + if (!(_x in _LIFE_Functions)) then { + if (!(_x in _SERVER_Functions)) then { + if (!(_x in _SOCK_Functions)) then { + if (!(_x in _DB_Functions)) then { + _varType = typeName (missionNamespace getVariable _x); + _find = _allowedVariables find [_x,_varType]; + if (_find isEqualTo -1) then { + diag_log format["Variable: %1 is not allowed TYPE: %2 NS: MN",_x,_varType]; + failMission "SpyGlass"; + }; + }; + }; + }; + }; + }; + }; + } forEach allVariables missionNamespace; +}; + +_uiCheckFunction = { + { + if (!isNil _x) then { + if (!(_x in _BIS_Functions)) then { + if (!(_x in _LIFE_Functions)) then { + if (!(_x in _SERVER_Functions)) then { + if (!(_x in _SOCK_Functions)) then { + if (!(_x in _DB_Functions)) then { + if (!(_x in _BIS_UI_Functions)) then { + _varType = typeName (uiNamespace getVariable _x); + _find = _allowedVariables_UI find [_x,_varType]; + if (_find isEqualTo -1) then { + diag_log format["Variable: %1 is not allowed TYPE: %2 NS: UI",_x,_varType]; + failMission "SpyGlass"; + }; + }; + }; + }; + }; + }; + }; + }; + } forEach allVariables uiNamespace; +}; + +for "_i" from 0 to 1 step 0 do { + objNull call _checkFunction; + uiSleep 10; + objNull call _uiCheckFunction; + if (!((count allVariables profileNameSpace) isEqualTo _profileCount) || ((count allVariables parsingNamespace) > 0)) then { + failMission "SpyGlass"; + }; + uiSleep (5 * 60); //Wait 5 minutes +}; diff --git a/life_client/briefing.sqf b/life_client/briefing.sqf new file mode 100644 index 00000000..b6ecc583 --- /dev/null +++ b/life_client/briefing.sqf @@ -0,0 +1,578 @@ +waitUntil {!isNull player && player isEqualTo player}; +if (player diarySubjectExists "controls") exitWith {}; + +player createDiarySubject ["credits","Credits"]; +player createDiarySubject ["changelog","Change Log"]; +player createDiarySubject ["serverrules","General Rules"]; +player createDiarySubject ["policerules","Police Procedures/Rules"]; +player createDiarySubject ["safezones","Safe Zones (No Killing)"]; +//player createDiarySubject ["civrules","Civilian Rules"]; +player createDiarySubject ["illegalitems","Illegal Activity"]; +//player createDiarySubject ["gangrules","Gang Rules"]; +//player createDiarySubject ["terrorrules","Terrorism Rules"]; +player createDiarySubject ["controls","Controls"]; + +/* Example + player createDiaryRecord ["", //Container + [ + "", //Subsection + " +TEXT HERE

+ " + ] + ]; +*/ + + player createDiaryRecord ["credits", + [ + "ArmaLife", + " +ArmaLife is a GitHub project which aims to update and keep adding new features to the original 'Altis Life RPG' by Tonic.

+ " + ] + ]; + + player createDiaryRecord["changelog", + [ + "Altis Life Changelog", + " +The official changelog can be found in ArmaLife github. https://git.io/vVkhe

+v4.4 release 3!
+By: danielstuart14
+Date: 31. May 2016

+v4.4 release 2!
+By: danielstuart14
+Date: 20. March 2016

+v4.4 release 1!
+By: danielstuart14
+Date: 12. February 2016

+v4.3 release 4!
+By: danielstuart14
+Date: 31. January 2016

+v4.3 release 3!
+By: danielstuart14
+Date: Not released

+v4.3 release 2!
+By: danielstuart14
+Date: 22. January 2016

+v4.3 release 1!
+By: danielstuart14
+Date: 19. January 2016

+ " + ] + ]; + + player createDiaryRecord["changelog", + [ + "Server Change Log", + " +This section is meant for people doing their own edits to the mission, DO NOT REMOVE THE ABOVE.

+ " + ] + ]; + + player createDiaryRecord ["serverrules", + [ + "Exploits", + " +These are considered exploits, and you will not be kicked, but banned.

+1. Getting out of jail via any method other than paying bail or escaping via helicopter.
+2. Killing yourself to get out of roleplay. Getting out of being tazed, restrained, arrested, jail, etc. If the log shows you got arrested, then you died, you will be banned. Do not pay bail and kill yourself for an easy ride home. Walk you lazy turd.
+3. Duping items and/or money. If someone sends you an unobtainable amount of money right at the start of the game, report to an admin IMMEDIATELY and transfer said money to an admin. Do this ASAP or an admin could ban you if they see that much on you without question.
+4. Using clearly hacked items. If a hacker comes in and spawns unobtainable items, you could be banned for using said items. Report the items to the admins immediately and stay away from them.
+5. Abusing bugs or game mechanics for gain. Is there a replicating gun somewhere? Report it and leave it alone. If an admin catches you abusing the glitch, ban.

+ " + ] + ]; + + player createDiaryRecord["safezones", + [ + "Safe Zones", + " +If bombing (bombing can be intentionally exploding a vehicle), robbing, or killing occurs around these or in these areas it is punishable by ban.

+Any vehicle spawn (shop or garage)
+Any weapon shop
+All Police HQs
+Rebel Outposts

+ " + ] + ]; + + + player createDiaryRecord ["serverrules", + [ + "Bannable Offenses", + " +Consider this your one and only warning.

+1. Hacking
+2. Cheating
+3. Exploiting (See 'Exploits')
+4. Being kicked 3 or more times.

+ " + ] + ]; + + player createDiaryRecord ["serverrules", + [ + "Cop Interaction", + " +Items on this list may result in your removal from the server and/or ban, based on the admins discretion.

+1. Civilians can be arrested for looking in cops' backpacks/vehicles. Constantly doing this will result in your removal from the server.
+2. Civilians can be arrested for following cops in game in order to give away their position.
+3. Civilians or Rebels who take up arms to kill cops in town or elsewhere for no RP reason will be considered RDMing. See RDMing section.
+4. Following and or harassing cops for long periods of time will be considered griefing and/or spamming, and will result in your removal from the server.
+5. Actively blocking cops from doing their duties can lead to your arrest. Constantly doing this will result in your removal from the server.

+ " + ] + ]; + + player createDiaryRecord ["serverrules", + [ + "Boats", + " +Items on this list may result in your removal from the server and/or ban, based on the admins discretion.

+1. Repeatedly pushing boats without permission.
+2. Pushing a boat with the intention of hurting or killing someone. This is not RP, it is just a flaw in the mechanics.
+3. Purposefully running over swimmers/divers.

+ " + ] + ]; + + player createDiaryRecord ["serverrules", + [ + "Aviation", + " +Items on this list may result in your removal from the server and/or ban, based on the admins discretion.

+1. Purposefully ramming a helicopter into anything. Other helicopters, vehicles, buildings.
+2. Flying below 150m over the city constantly. Once is illegal, more than that you risk crashing into the city, thus against server rules.
+3. Stealing helicopters without proper warning and significant time for the driver to lock the vehicle. If they land and run away without locking, fine, if they just get out and you get in before they get a chance to lock it, no no.

+ " + ] + ]; + + player createDiaryRecord ["serverrules", + [ + "Vehicles", + " +Items on this list may result in your removal from the server and/or ban, based on the admins discretion.

+1. Purposefully running people over (VRDM). There are accidents, and then there is going out of your way to run someone over.
+2. Purposefully throwing yourself in front of vehicles in order to die/get hurt.
+3. Ramming into other vehicles in order to cause an explosion.
+4. Constantly trying to enter vehicles that do not belong to you in order to grief the vehicle owner, and not trying to RP.
+5. Stealing a vehicle just to crash it or otherwise destroy it.
+6. Purchasing multiple vehicles for the purpose of doing any of the above.
+7. The only reason for shooting at a vehicle would be to disable it and/or fire warning shots in a role-play scenario.You are not to deliberately destroy enemies vehicles.

+ " + ] + ]; + + player createDiaryRecord ["serverrules", + [ + "Communication Rules", + " +Items on this list may result in your removal from the server and/or ban, based on the admins discretion.

+1. Side Chat may not be used to play music or otherwise micspam.
+2. Spamming any chat channel will result in your removal.
+4. Teamspeak channels are split up into areas for a reason. Cops must be in the cop channels at all times.
+5. Civilians cannot be in any cop channels on teamspeak in order to gather information on their location or movements. Civs caught doing this will be removed the channel. Repeat offenders can be kicked or banned from both the game and teamspeak.

+ " + ] + ]; + + player createDiaryRecord ["serverrules", + [ + "Random Deathmatching (RDM)", + " +Items on this list may result in your removal from the server and/or ban, based on the admins discretion.

+1. Killing anyone without a roleplay cause.
+2. Declaring a rebellion is not a cause to kill anyone, even cops.
+3. Cops and civilians/rebels can only commence in a shootout if there are reasons relating to a crime.
+4. If you are killed in the crossfire of a fight, it is not RDM.
+5. Killing someone in an attempt to protect yourself or others is not RDMing.
+6. Shooting a player without giving reasonable time to follow demands is considered RDM.

+These are all judged by admins on a case by case basis.

+ " + ] + ]; + player createDiaryRecord ["serverrules", + [ + "New Life Rule", + " +The New Life Rule applies to police and civilians.

+Items on this list may result in your removal from the server and/or ban, based on the admins discretion.

+1. If you are killed you must wait 15 minutes before returning to the scene of your death.
+2. If you die during roleplay your past crimes are forgotten, but you also cannot seek revenge.
+3. If you are RDM'd, it is not a new life.
+4. If you manually respawn, it is not a new life.
+5. If you purposefully kill yourself to avoid roleplay, it is not a new life.

+ " + ] + ]; + + player createDiaryRecord ["serverrules", + [ + "Don't Be A Dick!", + " +If an admin has to tell you that you are being a dick, you are doing dickish things.
+Causing others grief, disrupting roleplay, the list goes on.
+Just don't be a dick okay?
+This rule may be invoked at an admin's discretion.

+ " + ] + ]; + +// Police Section + player createDiaryRecord ["policerules", + [ + "Crisis Negotiation", + " +Crisis Negotiation must be handled by a Sergeant. If one is not available, the person with the next highest rank must handle the situation.

+ " + ] + ]; + player createDiaryRecord ["policerules", + [ + "The Federal Reserve", + " +1. The Federal Reserve is illegal for civilians to enter, unless they have been given authorization. If civilians enter without authorization they are to be escorted off-site or arrested if they persist. +2. Helicopters flying over the Federal Reserve may be asked to leave and disabled if they refuse.
+3. If the Federal Reserve is getting robbed, it is encouraged that all available officers move in to stop it.
+4. Nearby officers should immediately head to the Federal Reserve to assist. Petty crimes can be dropped during a robbery.
+5. Lethal force on bank robbers may be used if no other alternative is available. Every option to taze and arrest the person should be made first.
+6. Police may not fire blindly into the building.
+7. The police should evacuate the civilians from the building during a robbery.
+8. Any civilian who actively makes an attempt to block the police from entering the building may be treated as an accomplice.
+9. Supervisory officers may hire individuals or contract a group of people to work as security guards for the bank. See 'Contracting' section for more information.

+ " + ] + ]; + player createDiaryRecord ["policerules", + [ + "Aviation", + " +1. No helicopter can land within city limits without authorization from the highest ranking officer online. (Exceptions being what is listed below.)
+Kavala: The hospital helipad (037129) or docks (031128).
+Athira: The sports field (138185) or behind the DMV (140188).
+Pyrgos: The fields North/East of DMV (170127)
+Sofia: Opposite the car shop (258214) or the fields Southeast of the garage (257212)
+Small towns: An appropriate location may be chosen. This is to be judged by officers on a case by case basis.

+2. Helicopters may not land on roads.
+3. Police may temporarily forbid landing at but it cannot remain closed for a long period of time.
+4. Helicopters cannot fly below 150m over the city without authorization.
+5. Helicopters cannot hover over the city. Cops may only hover over the city if there is an active police operation going on.

+ " + ] + ]; + + player createDiaryRecord ["policerules", + [ + "Illegal Areas", + " +1. Gang areas are not considered illegal. Thus a cop may enter without a raid, but may not restrain or stop anyone inside without probable cause/illegal activity. (Talking to the gang NPC is NOT probable cause/illegal activity.)
+2. Do not enter an illegal area unless it is part of a raid. see Raiding/Camping.
+3. If you chase someone into an illegal area, call for backup.
+4. Under no circumstances is an officer allowed to camp any illegal area.

+ " + ] + ]; + + player createDiaryRecord ["policerules", + [ + "Patrolling", + " +1. Police may patrol the island's roads and towns searching for abandoned vehicles and criminal activity.
+2. Patrols can be done on foot inside of a town, or in a vehicle when outside.
+3. Patrols do not include illegal areas. See Raiding/Camping.

+ " + ] + ]; + + player createDiaryRecord ["policerules", + [ + "Checkpoints", + " +Cops are encouraged to setup checkpoints in strategic areas to help combat illegal activity and promote safety on the road.

+1. A checkpoint must consist of 3 or more officers, utilizing 2 or more vehicles. An ATV does not count as one of the required vehicles, but may still be used.
+2. A checkpoint can not be setup within 300m of an illegal area. Basically, you cannot set one up on top of an illegal area.
+3. Checkpoints may only be setup on roads, but it does not have to be on a crossroad.
+4. Checkpoints do not have to be marked on the map.

+Proper Checkpoint Procedure:
+1. Have the driver stop the vehicle at a safe distance and turn off the engine.
+2. Ask the driver and any passengers if they have any weapons.
+3. Ask the driver and any passengers to exit the vehicle. If they have weapons, do not immediately restrain them when they get out, tell them to lower their weapons and given them a reasonable amount of time to do so.
+4. Ask them where they are headed to and from.
+5. Ask if they will submit to a search.
+6. If they allow a search, you may restrain them and search them.
+7. If they do not submit to a search, you must let them go, unless there is probable cause.
+8. After the search is done, you may allow them to re-enter their vehicle and drive away.
+9. In case anything illegal is found, the person may be ticketed or arrested depending on the crime.

+ " + ] + ]; + + player createDiaryRecord ["policerules", + [ + "Vehicles", + " +1. Vehicles in the parking lot, or are reasonably parked elsewhere should be left alone.
+2. Vehicles that look abandoned, broken, with no driver, can be impounded.
+3. Boats should be parked reasonably on shore.
+4. Any vehicle that hasn't moved in a significant amount of time may be impounded.
+5. Impounding is an essential job for a cop, it helps keep the server clean and less laggy.
+6. If in doubt, always search the vehicle and message the owner(s) before impounding.
+7. Police speedboats or Hunter HMGs may be used to assist in apprehending criminals. The weapon should be used to disable vehicles, not to blow them up.

+ " + ] + ]; + + player createDiaryRecord ["policerules", + [ + "Speeding", + " +The following speeds are to be enforced by the Altis Police Force for the absolute safety of the citizens of Kavala and all travelling beyond the city.

+Inside major cities:
+Small roads: 50km/h
+Main roads: 65km/h
+Outside major cities:
+Small roads: 80km/h
+Main roads: 110km/h

+ " + ] + ]; + + player createDiaryRecord ["policerules", + [ + "City Protocol", + " +1. Officers may patrol major cities - Kavala, Athira, Pyrgos and Sofia.
+2. Officers may stop by the car shop to make sure there are no cars that need to be impounded.
+3. Officers may not stand around or loiter in the centre of town.
+4. Officers may enter the town in a large number should a rebellious act occur. After the area is clear, they need to leave the town again.
+5. Martial law may not be declared at any time.
+6. The Police HQ buildings are illegal for civilians to enter without authorization, however it is NOT illegal for civilians to be nearby unless they are causing a nuisance.

+ " + ] + ]; + + player createDiaryRecord ["policerules", + [ + "Arresting and Ticketing", + " +Arresting should be done to criminals who are considered a danger to themselves or others.

+1. You may not arrest someone if you have given them a ticket and they paid it.
+2. You must tell the suspect why they are being arrested before you arrest them.
+3. If a civilian is wanted, you may arrest them. Do not kill them, unless the situation falls under the 'Use of Lethal Force' section.

+Ticketing a civilian is considered a warning for the civilian. If they break a law, but do not pose a threat to anyone, you may ticket a civilian.

+1. Tickets must be a reasonable price.
+2. Ticket prices should be based off of the crimes committed.
+3. Refusal to pay a legit ticket is grounds for arrest.
+4. Giving a civilian and illegitimate ticket, such as $100k for speeding, etc., is not allowed and will result in your removal from the police department.

+A complete list of all crimes and the appropriate punishments should be given to officers during training. If in doubt, or if you have not been trained, ask a higher ranking officer what to do.

+ " + ] + ]; + + player createDiaryRecord ["policerules", + [ + "Weapons", + " +A cop is NEVER allowed to supply civilians with weapons. This will get you banned from the server and removed from being a cop.

+Legal Weapons for Civilians to carry with a permit:
+1. P07
+2. Rook
+3. ACP-C2
+4. Zubr
+5. 4-five
+6. PDW2000

+Any other weapon (Including Silenced P07 [Considered a Police Weapon]) is illegal.

+1. Civilians are not allowed to have a weapon out within the town limits.
+2. Civilians may have a gun out when they are not in the town. However they should submit to a license search if confronted by an officer and should have the gun lowered (Press Ctrl Twice).

+ " + ] + ]; + + player createDiaryRecord ["policerules", + [ + "Use of Non-Lethal Force", + " +At this time the Taser (Silenced P07) is the only form of Non-Lethal Force.

+1. Taser should be used to incapacitate non complying civilians in order to restrain them.
+2. Do not discharge your Taser unless you intend to incapacitate a civilian, randomly discharging your weapon will result in your suspension.
+3. Only use your Taser in compliance with the laws and the rules, do NOT enforce your will on others.

+ " + ] + ]; + + player createDiaryRecord ["policerules", + [ + "Raiding/Camping", + " +Raiding is defined as a squad of police officers invading an area of high criminal activity in order to stop the criminals in illegal acts.

+1. In order to raid an area, the cops must have at least 4 officers involved, one of which must be a Sergeant or above.
+2. All civilians in a raid area may be restrained and searched. If nothing illegal is found, you must let them go.
+3. If illegals are found during a search, you may proceed to arrest or fine as usual.
+5. Lethal force is only authorized as described under 'Use of Lethal Force'.
+6. After the area is secure, the officers must leave the area.
+7. An area cannot be raided again for 20 minutes after a previous raid.
+8. If the raid is a failure (All officers die), the 20 minute timer still applies to those officers.
+9. Backup may be called in, but it may not consist of fallen officers (see 'New Life Rule').

+Camping is defined as the prolong stay of an officer in an area.

+1. Checkpoints are not considered camping. See Checkpoint section for a definition of proper checkpoint procedures.
+2. See Bank Robbery and Agia Marina Protocol sections for more info on camping in the main town.
+3. Camping of illegal areas is staying longer than needed after a raid, or if officers do not conduct a raid but continue to watch and take action against civilians entering the area.

+ " + ] + ]; + + player createDiaryRecord ["policerules", + [ + "Chain of Command", + " +The highest ranking officer on duty is in charge of the police force outside of admins currently online. The high ranking officer is expected to follow the rules and guidelines of his/her rank, and must report to the admin in case any action need be taken.

+Police Chain of Command:
+1. Chief
+2. Deputy Chief
+3. Superintendent
+4. Captain
+5. Lieutenant
+6. Sergeant
+7. Senior Patrol Officer
+8. Patrol Officer
+9. Cadet

+Cops in game who are not enrolled/accepted into the SPD are the lowest tier and have no say in police operations.

+ " + ] + ]; + + player createDiaryRecord ["policerules", + [ + "Use of Lethal Force", + " +1. Use of Lethal force is only permitted for the protection of your life, another officers life, or a civilians life, if and only if non-lethal force would not be effective.
+2. Discharging of a weapon when not under threat or not during training exercises is not allowed. Officers caught in violation of this rule will be removed from the server and suspended from the SPD.
+3. Failure to follow proper weapons discipline and procedure will get you removed from the server and suspended from the SPD.

+ " + ] + ]; + + player createDiaryRecord ["policerules", + [ + "TeamSpeak Rule", + " +1. All cops must be on TeamSpeak 3 in a designated cop channel. Failure to be on TeamSpeak during an admin check will result in your immediate dismissal from the server.
+2. Please join TeamSpeak BEFORE you spawn in as a cop, heck, join TeamSpeak before you even join the server.

+ " + ] + ]; + + + +// Illegal Items Section + player createDiaryRecord ["illegalitems", + [ + "Rebel Rules", + " +A rebel is one who rises in armed resistance against a government. In this case it would be the police. However, due to the small amount of police compared to the possible amount of rebels, do not attack the police without a reason, please be civil and use common sense, and don't take the word rebel literally, but instead how it will make this server fun for all.

+1. A rebel must first form a gang, and then declare intentions.
+2. Resistance does not excuse RDMing (See RDMing in General Rules)
+3. Resistance roleplay should be conducted in more ways than constantly robbing the bank or shooting police officers.
+4. Resistance must be coordinated.
+5. A PROPER reason must be behind each and every attack.

+ " + ] + ]; + player createDiaryRecord ["illegalitems", + [ + "Gang Rules", + " +1. Being in a gang is not illegal. Only when illegal crimes are committed.
+2. Being in a gang area is not illegal. Only when partaking in illegal activities.
+3. Gangs may hold and control gang areas. Other gangs may attack a controlling gang to compete for control of a gang area.
+4. To declare war on another gang, the leader must announce it in global and all gang members of both gangs must be notified. For a more long term gang war, a declaration should be made on the forums.
+5. Gangs may not kill unarmed civilians, unless said civilian is part of a rival gang and in your gangs controlled area.
+6. Gangs may not kill civilians, unless they are under threat. Killing unarmed civilians because they do not comply is considered RDM, but you can injure/damage.

+ " + ] + ]; + player createDiaryRecord ["illegalitems", + [ + "Illegal Vehicles", + " +A civilian in control of the following prohibited vehicles is subject to the consequences defined in the unauthorized control of a prohibited vehicle law.

+1. Ifrit
+2. Speedboat
+3. Hunter
+4. Police Offroad

+ " + ] + ]; + player createDiaryRecord ["illegalitems", + [ + "Illegal Weapons", + " +A civilian in possession of the following is subject to the consequences as defined in the illegal possession of a firearm law.

+1. MX Series
+2. Katiba Series
+3. TRG Series
+4. Mk.20 Series
+5. Mk.18 ABR
+6. SDAR Rifle
+7. Sting SMG
+8. Silenced P07 (Taser)
+9. Any explosives

+ " + ] + ]; + player createDiaryRecord ["illegalitems", + [ + "Illegal Items", + " +The following items are illegal to posses:

+1. Turtle
+2. Cocaine
+3. Heroin
+4. Cannabis
+5. Marijuana

+ " + ] + ]; + + +// Controls Section + + player createDiaryRecord ["controls", + [ + "Police and medic controls", + " +F: Vehicle siren.
+L: Speed radar (police only and weapon is P07 Suppressed).
+Left Shift + L: Activates siren lights.
+Left Shift + R: Restrain (police only).

+ " + ] + ]; + player createDiaryRecord ["controls", + [ + "Civilian controls", + " +Left Shift + G: Knock out / stun (Weapon required. Used for robbing).
+Spacebar: Place storage container.

+ " + ] + ]; + player createDiaryRecord ["controls", + [ + "General controls", + " +Y: Open Player Menu.
+U: Lock and unlock vehicles and houses.
+T: Vehicle trunk and house virtual item storage.
+Left Shift + B: Surrender (hands on head).
+Left Windows: Main interaction key. Used for interacting with objects like vehicles, houses, ATMs, and restrained players. Can be rebound to a single key like H by pressing ESC->Configure->Controls->Custom->Use Action 10.
+Left Shift + H: Holsters the weapon in your hands.
+Left Ctrl + H: Revert holster action.
+Shift + Spacebar: Jump.
+Left Shift + O: (un)fade sound (ear plugs).

+ " + ] + ]; diff --git a/life_client/config/Config_Clothing.hpp b/life_client/config/Config_Clothing.hpp new file mode 100644 index 00000000..f52e472d --- /dev/null +++ b/life_client/config/Config_Clothing.hpp @@ -0,0 +1,382 @@ +/* +* ARRAY FORMAT: +* 0: STRING (Classname) +* 1: STRING (Display Name, leave as "" for default) +* 2: SCALAR (Price) +* 4: ARRAY (This is for limiting items to certain things) +* 0: Variable to read from +* 1: Variable Value Type (SCALAR / BOOL / EQUAL) +* 2: What to compare to (-1 = Check Disabled) +* +* Clothing classnames can be found here: https://community.bistudio.com/wiki/Arma_3_CfgWeapons_Equipment +* Backpacks/remaining classnames can be found here (TIP: Search page for "pack"): https://community.bistudio.com/wiki/Arma_3_CfgVehicles_EMPTY +* +*/ +class Clothing { + class bruce { + title = "STR_Shops_C_Bruce"; + license = ""; + side = "civ"; + uniforms[] = { + { "NONE", "Remove Uniform", 0, { "", "", -1 } }, + { "U_C_Poloshirt_stripped", "Poloshirt stripped", 125, { "", "", -1 } }, + { "U_C_Poloshirt_redwhite", "Poloshirt Red/White", 150, { "", "", -1 } }, + { "U_C_Poloshirt_salmon", "Poloshirt Salmon", 175, { "", "", -1 } }, + { "U_C_Poloshirt_blue", "Poloshirt Blue", 250, { "", "", -1 } }, + { "U_C_Poor_2", "Rag tagged clothes", 250, { "", "", -1 } }, + { "U_C_Poloshirt_burgundy", "Poloshirt Burgundy", 275, { "", "", -1 } }, + { "U_C_Poloshirt_tricolour", "Poloshirt Tricolor", 350, { "", "", -1 } }, + { "U_IG_Guerilla2_2", "Green stripped shirt & Pants", 650, { "", "", -1 } }, + { "U_IG_Guerilla3_1", "Brown Jacket & Pants", 735, { "", "", -1 } }, + { "U_OrestesBody", "Surfing On Land", 1100, { "", "", -1 } }, + { "U_IG_Guerilla2_3", "The Outback Rangler", 1200, { "", "", -1 } }, + { "U_C_HunterBody_grn", "The Hunters Look", 1500, { "", "", -1 } }, + { "U_C_WorkerCoveralls", "Mechanic Coveralls", 2500, { "", "", -1 } }, + { "U_NikosAgedBody", "Casual Wears", 5000, { "", "", -1 } } + }; + headgear[] = { + { "NONE", "Remove Hat", 0, { "", "", -1 } }, + { "H_Bandanna_camo", "Camo Bandanna", 120, { "", "", -1 } }, + { "H_Bandanna_surfer", "Surfer Bandanna", 130, { "", "", -1 } }, + { "H_Bandanna_surfer", "", 135, { "", "", -1 } }, + { "H_Bandanna_khk", "Khaki Bandanna", 145, { "", "", -1 } }, + { "H_Cap_blu", "", 150, { "", "", -1 } }, + { "H_Cap_grn", "", 150, { "", "", -1 } }, + { "H_Cap_grn_BI", "", 150, { "", "", -1 } }, + { "H_Cap_oli", "", 150, { "", "", -1 } }, + { "H_Cap_red", "", 150, { "", "", -1 } }, + { "H_Cap_tan", "", 150, { "", "", -1 } }, + { "H_Bandanna_gry", "Grey Bandanna", 150, { "", "", -1 } }, + { "H_Bandanna_sgg", "Sage Bandanna", 160, { "", "", -1 } }, + { "H_Bandanna_cbr", "", 165, { "", "", -1 } }, + { "H_StrawHat", "Straw Fedora", 225, { "", "", -1 } }, + { "H_Hat_tan", "", 265, { "", "", -1 } }, + { "H_Hat_brown", "", 276, { "", "", -1 } }, + { "H_Hat_grey", "", 280, { "", "", -1 } }, + { "H_BandMask_blk", "Hat & Bandanna", 300, { "", "", -1 } }, + { "H_Hat_blue", "", 310, { "", "", -1 } }, + { "H_Hat_checker", "", 340, { "", "", -1 } }, + { "H_Booniehat_tan", "", 425, { "", "", -1 } } + }; + goggles[] = { + { "NONE", "Remove Glasses", 0, { "", "", -1 } }, + { "G_Shades_Black", "", 20, { "", "", -1 } }, + { "G_Shades_Blue", "", 20, { "", "", -1 } }, + { "G_Shades_Green", "", 20, { "", "", -1 } }, + { "G_Shades_Red", "", 20, { "", "", -1 } }, + { "G_Sport_Blackred", "", 25, { "", "", -1 } }, + { "G_Sport_BlackWhite", "", 25, { "", "", -1 } }, + { "G_Sport_Blackyellow", "", 25, { "", "", -1 } }, + { "G_Sport_Checkered", "", 25, { "", "", -1 } }, + { "G_Sport_Greenblack", "", 25, { "", "", -1 } }, + { "G_Sport_Red", "", 25, { "", "", -1 } }, + { "G_Lowprofile", "", 30, { "", "", -1 } }, + { "G_Squares", "", 50, { "", "", -1 } }, + { "G_Aviator", "", 100, { "", "", -1 } }, + { "G_Combat", "", 125, { "", "", -1 } }, + { "G_Lady_Mirror", "", 150, { "", "", -1 } }, + { "G_Lady_Dark", "", 150, { "", "", -1 } }, + { "G_Lady_Blue", "", 150, { "", "", -1 } } + }; + vests[] = { + { "NONE", "Remove Vest", 0, { "", "", -1 } } + }; + backpacks[] = { + { "NONE", "Remove Backpack", 0, { "", "", -1 } }, + { "B_OutdoorPack_blk", "", 500, { "", "", -1 } }, + { "B_AssaultPack_khk", "", 2000, { "", "", -1 } }, + { "B_AssaultPack_dgtl", "", 2000, { "", "", -1 } }, + { "B_AssaultPack_rgr", "", 2000, { "", "", -1 } }, + { "B_AssaultPack_sgg", "", 2000, { "", "", -1 } }, + { "B_AssaultPack_blk", "", 2000, { "", "", -1 } }, + { "B_AssaultPack_cbr", "", 2000, { "", "", -1 } }, + { "B_AssaultPack_mcamo", "", 2000, { "", "", -1 } }, + { "B_TacticalPack_oli", "", 2500, { "", "", -1 } }, + { "B_Kitbag_mcamo", "", 3500, { "", "", -1 } }, + { "B_Kitbag_sgg", "", 3500, { "", "", -1 } }, + { "B_Kitbag_cbr", "", 3500, { "", "", -1 } }, + { "B_FieldPack_blk", "", 5000, { "", "", -1 } }, + { "B_FieldPack_ocamo", "", 5000, { "", "", -1 } }, + { "B_FieldPack_oucamo", "", 5000, { "", "", -1 } }, + { "B_Bergen_sgg", "", 6500, { "", "", -1 } }, + { "B_Bergen_mcamo", "", 6500, { "", "", -1 } }, + { "B_Bergen_rgr", "", 6500, { "", "", -1 } }, + { "B_Bergen_blk", "", 6500, { "", "", -1 } }, + { "B_Carryall_ocamo", "", 7500, { "", "", -1 } }, + { "B_Carryall_oucamo", "", 7500, { "", "", -1 } }, + { "B_Carryall_mcamo", "", 7500, { "", "", -1 } }, + { "B_Carryall_oli", "", 7500, { "", "", -1 } }, + { "B_Carryall_khk", "", 7500, { "", "", -1 } }, + { "B_Carryall_cbr", "", 7500, { "", "", -1 } } + }; + }; + + class cop { + title = "STR_Shops_C_Police"; + license = ""; + side = "cop"; + uniforms[] = { + { "NONE", "Remove Uniform", 0, { "", "", -1 } }, + { "U_Rangemaster", "Cop Uniform", 25, { "", "", -1 } }, + { "U_B_CombatUniform_mcam_tshirt", "", 350, { "life_coplevel", "SCALAR", 1 } }, + { "U_B_CombatUniform_mcam_worn", "", 550, { "life_coplevel", "SCALAR", 2 } }, + { "U_B_survival_uniform", "", 1250, { "life_coplevel", "SCALAR", 1 } } + }; + headgear[] = { + { "NONE", "Remove Hat", 0, { "", "", -1 } }, + { "H_Cap_police", "", 25, { "", "", -1 } }, + { "H_Beret_blk_POLICE", "", 50, { "life_coplevel", "SCALAR", 2 } }, + { "H_HelmetB_plain_mcamo", "", 75, { "life_coplevel", "SCALAR", 1 } }, + { "H_MilCap_mcamo", "", 100, { "life_coplevel", "SCALAR", 2 } }, + { "H_Booniehat_mcamo", "", 120, { "life_coplevel", "SCALAR", 1 } } + }; + goggles[] = { + { "NONE", "Remove Glasses", 0, { "", "", -1 } }, + { "G_Squares", "", 10, { "", "", -1 } }, + { "G_Shades_Blue", "", 20, { "", "", -1 } }, + { "G_Sport_Blackred", "", 20, { "", "", -1 } }, + { "G_Sport_Checkered", "", 20, { "", "", -1 } }, + { "G_Sport_Blackyellow", "", 20, { "", "", -1 } }, + { "G_Sport_BlackWhite", "", 20, { "", "", -1 } }, + { "G_Shades_Black", "", 25, { "", "", -1 } }, + { "G_Lowprofile", "", 30, { "", "", -1 } }, + { "G_Combat", "", 55, { "", "", -1 } }, + { "G_Aviator", "", 100, { "", "", -1 } }, + { "G_Lady_Mirror", "", 150, { "", "", -1 } }, + { "G_Lady_Dark", "", 150, { "", "", -1 } }, + { "G_Lady_Blue", "", 150, { "", "", -1 } } + }; + vests[] = { + { "NONE", "Remove Vest", 0, { "", "", -1 } }, + { "V_Rangemaster_belt", "", 800, { "", "", -1 } }, + { "V_TacVest_blk_POLICE", "", 1000, { "life_coplevel", "SCALAR", 1 } }, + { "V_PlateCarrier2_rgr", "", 1500, { "life_coplevel", "SCALAR", 2 } } + }; + backpacks[] = { + { "NONE", "Remove Backpack", 0, { "", "", -1 } }, + { "B_FieldPack_cbr", "", 500, { "", "", -1 } }, + { "B_AssaultPack_cbr", "", 700, { "", "", -1 } }, + { "B_Kitbag_cbr", "", 800, { "", "", -1 } }, + { "B_Bergen_sgg", "", 2500, { "", "", -1 } }, + { "B_Carryall_cbr", "", 3500, { "", "", -1 } } + }; + }; + + class dive { + title = "STR_Shops_C_Diving"; + license = "dive"; + side = "civ"; + uniforms[] = { + { "NONE", "Remove Uniform", 0, { "", "", -1 } }, + { "U_B_Wetsuit", "", 2000, { "", "", -1 } } + }; + headgear[] = { + { "NONE", "Remove Hat", 0, { "", "", -1 } } + }; + goggles[] = { + { "NONE", "Remove Glasses", 0, { "", "", -1 } }, + { "G_Diving", "", 500, { "", "", -1 } } + }; + vests[] = { + { "NONE", "Remove Vest", 0, { "", "", -1 } }, + { "V_RebreatherB", "", 5000, { "", "", -1 } } + }; + backpacks[] = { + { "NONE", "Remove Backpack", 0, { "", "", -1 } } + }; + }; + + class gun_clothing { + title = "STR_Shops_C_Gun"; + license = "gun"; + side = "civ"; + uniforms[] = { + { "NONE", "Remove Uniform", 0, { "", "", -1 } } + }; + headgear[] = { + { "NONE", "Remove Hat", 0, { "", "", -1 } } + }; + goggles[] = { + { "NONE", "Remove Glasses", 0, { "", "", -1 } } + }; + vests[] = { + { "NONE", "Remove Vest", 0, { "", "", -1 } }, + { "V_Rangemaster_belt", "", 4900, { "", "", -1 } } + }; + backpacks[] = { + { "NONE", "Remove Backpack", 0, { "", "", -1 } } + }; + }; + + class gang_clothing { + title = "STR_Shops_C_Gang"; + license = ""; + side = "civ"; + uniforms[] = { + { "NONE", "Remove Uniform", 0, { "", "", -1 } } + }; + headgear[] = { + { "NONE", "Remove Hat", 0, { "", "", -1 } } + }; + goggles[] = { + { "NONE", "Remove Glasses", 0, { "", "", -1 } } + }; + vests[] = { + { "NONE", "Remove Vest", 0, { "", "", -1 } }, + { "V_Rangemaster_belt", "", 1900, { "", "", -1 } } + }; + backpacks[] = { + { "NONE", "Remove Backpack", 0, { "", "", -1 } } + }; + }; + + class med_clothing { + title = "STR_MAR_EMS_Clothing_Shop"; + license = ""; + side = "med"; + uniforms[] = { + { "NONE", "Remove Uniform", 0, { "", "", -1 } }, + { "U_Rangemaster", "EMS Uniform", 50, { "", "", -1 } } + }; + headgear[] = { + { "NONE", "Remove Hat", 0, { "", "", -1 } }, + { "H_Cap_blu", "", 10, { "", "", -1 } } + }; + goggles[] = { + { "NONE", "Remove Glasses", 0, { "", "", -1 } }, + { "G_Shades_Blue", "", 10, { "", "", -1 } } + }; + vests[] = { + { "NONE", "Remove Vest", 0, { "", "", -1 } } + }; + backpacks[] = { + { "NONE", "Remove Backpack", 0, { "", "", -1 } }, + { "B_FieldPack_oli", "EMS Backpack", 3000, { "", "", -1 } } + }; + }; + + class reb { + title = "STR_Shops_C_Rebel"; + license = "rebel"; + side = "civ"; + uniforms[] = { + { "NONE", "Remove Uniform", 0, { "", "", -1 } }, + { "U_IG_Guerilla1_1", "", 5000, {"", "", -1} }, + { "U_I_G_Story_Protagonist_F", "", 7500, { "", "", -1 } }, + { "U_I_G_resistanceLeader_F", "", 11500, { "", "", -1 } }, + { "U_IG_leader", "Guerilla Leader", 15340, { "", "", -1 } }, + { "U_O_PilotCoveralls", "", 15610, { "", "", -1 } }, + { "U_O_SpecopsUniform_ocamo", "", 17500, { "", "", -1 } }, + { "U_O_GhillieSuit", "", 50000, { "", "", -1 } } + }; + headgear[] = { + { "NONE", "Remove Hat", 0, { "", "", -1 } }, + { "H_Bandanna_camo", "", 650, { "", "", -1 } }, + { "H_ShemagOpen_khk", "", 800, { "", "", -1 } }, + { "H_ShemagOpen_tan", "", 850, { "", "", -1 } }, + { "H_Shemag_olive", "", 850, { "", "", -1 } }, + { "H_MilCap_oucamo", "", 1200, { "", "", -1 } }, + { "H_HelmetO_ocamo", "", 2500, { "", "", -1 } } + }; + goggles[] = { + { "NONE", "Remove Glasses", 0, { "", "", -1 } }, + { "G_Shades_Black", "", 20, { "", "", -1 } }, + { "G_Shades_Blue", "", 20, { "", "", -1 } }, + { "G_Sport_Blackred", "", 25, { "", "", -1 } }, + { "G_Sport_Checkered", "", 25, { "", "", -1 } }, + { "G_Sport_Blackyellow", "", 25, { "", "", -1 } }, + { "G_Sport_BlackWhite", "", 25, { "", "", -1 } }, + { "G_Lowprofile", "", 30, { "", "", -1 } }, + { "G_Squares", "", 50, { "", "", -1 } }, + { "G_Combat", "", 125, { "", "", -1 } }, + { "G_Balaclava_blk", "", 150, { "", "", -1 } }, + { "G_Balaclava_combat", "", 150, { "", "", -1 } }, + { "G_Balaclava_lowprofile", "", 150, { "", "", -1 } }, + { "G_Balaclava_oli", "", 150, { "", "", -1 } }, + { "G_Bandanna_aviator", "", 150, { "", "", -1 } }, + { "G_Bandanna_beast", "", 150, { "", "", -1 } }, + { "G_Bandanna_blk", "", 150, { "", "", -1 } }, + { "G_Bandanna_khk", "", 150, { "", "", -1 } }, + { "G_Bandanna_oli", "", 150, { "", "", -1 } }, + { "G_Bandanna_shades", "", 150, { "", "", -1 } }, + { "G_Bandanna_sport", "", 150, { "", "", -1 } }, + { "G_Bandanna_tan", "", 150, { "", "", -1 } } + }; + vests[] = { + { "NONE", "Remove Vest", 0, { "", "", -1 } }, + { "V_BandollierB_cbr", "", 4500, { "", "", -1 } }, + { "V_HarnessO_brn", "", 7500, { "", "", -1 } }, + { "V_TacVest_khk", "", 12500, { "", "", -1 } } + }; + backpacks[] = { + { "NONE", "Remove Backpack", 0, { "", "", -1 } }, + { "B_OutdoorPack_blk", "", 500, { "", "", -1 } }, + { "B_AssaultPack_khk", "", 2000, { "", "", -1 } }, + { "B_AssaultPack_dgtl", "", 2000, { "", "", -1 } }, + { "B_AssaultPack_rgr", "", 2000, { "", "", -1 } }, + { "B_AssaultPack_sgg", "", 2000, { "", "", -1 } }, + { "B_AssaultPack_blk", "", 2000, { "", "", -1 } }, + { "B_AssaultPack_cbr", "", 2000, { "", "", -1 } }, + { "B_AssaultPack_mcamo", "", 2000, { "", "", -1 } }, + { "B_TacticalPack_oli", "", 2500, { "", "", -1 } }, + { "B_Kitbag_mcamo", "", 3500, { "", "", -1 } }, + { "B_Kitbag_sgg", "", 3500, { "", "", -1 } }, + { "B_Kitbag_cbr", "", 3500, { "", "", -1 } }, + { "B_FieldPack_blk", "", 5000, { "", "", -1 } }, + { "B_FieldPack_ocamo", "", 5000, { "", "", -1 } }, + { "B_FieldPack_oucamo", "", 5000, { "", "", -1 } }, + { "B_Bergen_sgg", "", 6500, { "", "", -1 } }, + { "B_Bergen_mcamo", "", 6500, { "", "", -1 } }, + { "B_Bergen_rgr", "", 6500, { "", "", -1 } }, + { "B_Bergen_blk", "", 6500, { "", "", -1 } }, + { "B_Carryall_ocamo", "", 7500, { "", "", -1 } }, + { "B_Carryall_oucamo", "", 7500, { "", "", -1 } }, + { "B_Carryall_mcamo", "", 7500, { "", "", -1 } }, + { "B_Carryall_oli", "", 7500, { "", "", -1 } }, + { "B_Carryall_khk", "", 7500, { "", "", -1 } }, + { "B_Carryall_cbr", "", 7500, { "", "", -1 } } + }; + }; + + class kart { + title = "STR_Shops_C_Kart"; + license = ""; + side = "civ"; + uniforms[] = { + { "NONE", "Remove Uniform", 0, { "", "", -1 } }, + { "U_C_Driver_1_black", "", 1500, { "", "", -1 } }, + { "U_C_Driver_1_blue", "", 1500, { "", "", -1 } }, + { "U_C_Driver_1_red", "", 1500, { "", "", -1 } }, + { "U_C_Driver_1_orange", "", 1500, { "", "", -1 } }, + { "U_C_Driver_1_green", "", 1500, { "", "", -1 } }, + { "U_C_Driver_1_white", "", 1500, { "", "", -1 } }, + { "U_C_Driver_1_yellow", "", 1500, { "", "", -1 } }, + { "U_C_Driver_2", "", 3500, { "", "", -1 } }, + { "U_C_Driver_1", "", 3600, { "", "", -1 } }, + { "U_C_Driver_3", "", 3700, { "", "", -1 } }, + { "U_C_Driver_4", "", 3700, { "", "", -1 } } + }; + headgear[] = { + { "NONE", "Remove Hat", 0, { "", "", -1 } }, + { "H_RacingHelmet_1_black_F", "", 1000, { "", "", -1 } }, + { "H_RacingHelmet_1_red_F", "", 1000, { "", "", -1 } }, + { "H_RacingHelmet_1_white_F", "", 1000, { "", "", -1 } }, + { "H_RacingHelmet_1_blue_F", "", 1000, { "", "", -1 } }, + { "H_RacingHelmet_1_yellow_F", "", 1000, { "", "", -1 } }, + { "H_RacingHelmet_1_green_F", "", 1000, { "", "", -1 } }, + { "H_RacingHelmet_1_F", "", 2500, { "", "", -1 } }, + { "H_RacingHelmet_2_F", "", 2500, { "", "", -1 } }, + { "H_RacingHelmet_3_F", "", 2500, { "", "", -1 } }, + { "H_RacingHelmet_4_F", "", 2500, { "", "", -1 } } + }; + goggles[] = { + { "NONE", "Remove Glasses", 0, { "", "", -1 } } + }; + vests[] = { + { "NONE", "Remove Vest", 0, { "", "", -1 } } + }; + backpacks[] = { + { "NONE", "Remove Backpack", 0, { "", "", -1 } } + }; + }; +}; diff --git a/life_client/config/Config_Gather.hpp b/life_client/config/Config_Gather.hpp new file mode 100644 index 00000000..44b508bc --- /dev/null +++ b/life_client/config/Config_Gather.hpp @@ -0,0 +1,129 @@ +class CfgGather { + class Resources { + class apple { + amount = 5; + zones[] = { "apple_1", "apple_2", "apple_3", "apple_4" }; + item = ""; + zoneSize = 30; + }; + + class peach { + amount = 5; + zones[] = { "peaches_1", "peaches_2", "peaches_3", "peaches_4" }; + item = ""; + zoneSize = 30; + }; + + class heroin_unprocessed { + amount = 3; + zones[] = { "heroin_1" }; + item = ""; + zoneSize = 30; + }; + + class cocaine_unprocessed { + amount = 3; + zones[] = { "cocaine_1" }; + item = ""; + zoneSize = 30; + }; + + class cannabis { + amount = 3; + zones[] = { "weed_1" }; + item = ""; + zoneSize = 30; + }; + }; + +/* +This block can be set using percent,if you want players to mine only one resource ,just leave it as it is. +Example: + class copper_unrefined + { + amount = 2; + zones[] = { "copper_mine" }; + item = "pickaxe"; + mined[] = { "copper_unrefined" }; +This will make players mine only copper_unrefined +Now let's go deeper +Example 2: + class copper_unrefined + { + amount = 2; + zones[] = { "copper_mine" }; + item = "pickaxe"; + mined[] = { {"copper_unrefined",0,25},{"iron_unrefined",25,95},{"diamond_uncut",95,100} }; + }; + This will give : + 25(±1)% to copper_unrefined; + 70(±1)% to iron_unrefined; + 5%(±1)% to diamond_uncut; + + ! Watch Out ! + If percents are used,you MUST put more than 1 resource in the mined parameter + mined[] = { {"copper_unrefined",0,25} }; NOT OK (But the script will work) + mined[] = { {"copper_unrefined",0,45 },{"iron_unrefined",45} }; NOT OK (The script won't work ) + mined[] = { {"copper_unrefined",0,45},{"copper_unrefined",80,100} }; NOT OK + mined[] = { "copper_unrefined" }; OK + mined[] = { {"copper_unrefined",0,35} , { "iron_unrefined" ,35,100 } }; OK +*/ + + class Minerals { + class copper_unrefined { + amount = 2; + zones[] = { "copper_mine" }; + item = "pickaxe"; + mined[] = {"copper_unrefined"}; + zoneSize = 30; + }; + + class iron_unrefined { + amount = 2; + zones[] = { "iron_mine" }; + item = "pickaxe"; + mined[] = { "iron_unrefined" }; + zoneSize = 30; + }; + + class salt_unrefined { + amount = 2; + zones[] = { "salt_mine" }; + item = "pickaxe"; + mined[] = { "salt_unrefined" }; + zoneSize = 30; + }; + + class sand { + amount = 2; + zones[] = { "sand_mine" }; + item = "pickaxe"; + mined[] = { "sand" }; + zoneSize = 30; + }; + + class diamond_uncut { + amount = 2; + zones[] = { "diamond_mine" }; + item = "pickaxe"; + mined[] = { "diamond_uncut" }; + zoneSize = 30; + }; + + class rock { + amount = 2; + zones[] = { "rock_quarry" }; + item = "pickaxe"; + mined[] = { "rock" }; + zoneSize = 30; + }; + + class oil_unprocessed { + amount = 2; + zones[] = { "oil_field_1", "oil_field_2" }; + item = "pickaxe"; + mined[] = { "oil_unprocessed" }; + zoneSize = 30; + }; + }; +}; \ No newline at end of file diff --git a/Altis_Life.Altis/Config_Licenses.hpp b/life_client/config/Config_Licenses.hpp similarity index 100% rename from Altis_Life.Altis/Config_Licenses.hpp rename to life_client/config/Config_Licenses.hpp diff --git a/life_client/config/Config_Master.hpp b/life_client/config/Config_Master.hpp new file mode 100644 index 00000000..10ffe248 --- /dev/null +++ b/life_client/config/Config_Master.hpp @@ -0,0 +1,206 @@ +#define true 1 +#define false 0 + +/* + Master settings for various features and functionality +*/ +class Life_Settings { +/* Logging and Security Settings*/ + /* Security Settings */ + spyGlass_toggle = true; //Spyglass On/Off Toggle --> True = On & False = Off + + /* Data Logging Settings */ + battlEye_friendlyLogging = false; //False [default] - Read the logs from the server.rpt. True - Read the logs from the publicVariable.log. NOTE: Due to how diag_log works it will log to both files either way and the setting is merely for beautification purposes. + player_advancedLog = false; //False [default] - No advanced logging. True - Logs house purchase and sale, vehicle purchase, sale, and chop shopping, police arrests, and gang creations. Search for: advanced_log + player_moneyLog = false; //False [default] - No money logging. True - Logs player bank deposits, withdraws, and transfers, gang bank deposits and withdraws, money picked up off of the ground, and player robbery. Search for: money_log + player_deathLog = false; //False [default] - No death logging. True - Logs victim and killer, and vehicle or weapon if used, when a player dies. Search for: death_log + +/* Database Related Settings */ + /* Player Data Saving */ + save_virtualItems = true; //Save Virtual items (all sides)? + saved_virtualItems[] = { "pickaxe","fuelEmpty","fuelFull", "spikeStrip", "lockpick", "defuseKit","storageSmall","storageBig","redgull","coffee","waterBottle","apple","peach","tbacon","donuts","rabbit","salema","ornate","mackerel","tuna","mullet","catshark","turtle_soup","hen","rooster","sheep","goat","defibrillator","toolkit" }; //Array of virtual items that can be saved on your player. + save_playerStats = true; //Save food, water and damage (all sides)? + save_civilian_weapons = false; //Allow civilians to save weapons on them? + save_civilian_position = false; //Save civilian location? + save_civilian_position_restart = false; //Save civilian location only between restarts. After a server restart you'll have to spawn again. + /* !!!TO SAVE POSITION BETWEEN RESTARTS save_civilian_position MUST BE TRUE!!! */ + save_civilian_positionStrict = false; //Strip the player if possible combat-log? WARNING: Server crashes and lack of reliable syncing can trigger this. + + /* Vehicle Data Saving */ + save_vehicle_virtualItems = false; //Save virtual items inside the vehicle (all sides)(-- See defined items on next line --) + save_vehicle_items[] = { "pickaxe","fuelEmpty","fuelFull", "spikeStrip", "lockpick", "defuseKit","storageSmall","storageBig","redgull","coffee","waterBottle","apple","peach","tbacon","donuts","rabbit","salema","ornate","mackerel","tuna","mullet","catshark","turtle_soup","hen","rooster","sheep","goat","defibrillator","toolkit" }; + save_vehicle_inventory = false; //Save Arma inventory of vehicle to the database + save_vehicle_fuel = false; //Save vehicle fuel level to the database (Impounded/Garaged). + save_vehicle_damage = false; //Save vehicle damage to the database. + save_vehicle_illegal = false; //This will allow cops to be advised when a vehicle, with illegal items in it, is impounded. This will also save illegal items as proof of crime, and needs "save_vehicle_virtualItems" set as true. Illegal items don't need to be set in save_vehicle_items[] for being saved, if it's enabled. + + +/* System Settings */ + /* ATM & Federal Reserve System Configurations */ + global_ATM = true; //Allow users to access any ATM on the map (Marked & Unmarked). + noatm_timer = 10; //Time in minutes that players cannot deposit money after selling stolen gold. + minimum_cops = 5; //Minimum cops required online to rob the Federal Reserve + + /* Basic System Configurations */ + donor_level = false; //Enable the donor level set in database (var = life_donorlevel; levels = 0,1,2,3,4,5). ATTENTION! Before enabling, read: https://www.bistudio.com/community/game-content-usage-rules & https://www.bistudio.com/monetization + enable_fatigue = true; //Set to false to disable the ARMA 3 fatigue system. + total_maxWeight = 24; //Static variable for the maximum weight allowed without having a backpack + respawn_timer = 30; //How many seconds a player should wait, before being able to respawn. Minimum 5 seconds. + + /* Channel 7 News Station Configurations */ + news_broadcast_cost = 150000; //Cost for a player to send a news station broadcast. + news_broadcast_cooldown = 20; //Time in minutes that is required between news station broadcasts. (Default = 20 minutes) + news_broadcast_header_length = 60; //Number of characters that a header can consist of. Anything over this may clip. This depends on the font size and various other factors. Adjust with caution. + + /* Clothing System Configurations */ + civ_skins = false; //Enable or disable civilian skins. Before enabling, you must add all the SEVEN files to textures folder. (It must be named as: civilian_uniform_1.jpg, civilian_uniform_2.jpg...civilian_uniform_6.jpg, civilian_uniform_7.jpg) + cop_extendedSkins = false; //Enable or disable cop skins by level. Before enabling, you must add all the EIGHT files to textures folder. (It must be named as: cop_uniform.jpg + cop_uniform_1.jpg, cop_uniform_2.jpg...cop_uniform_6.jpg, cop_uniform_7.jpg; meaning cop_uniform = life_coplevel=0, cop_uniform_1 = life_coplevel=1, cop_uniform_2 = life_coplevel=2, etc...) + clothing_noTP = false; //Disable clothing preview teleport? (true = no teleport. false = teleport) + clothing_box = true; //true = teleport to a black box. false = teleport to somewhere on map. (It only affects the game if clothing_noTP is set as false) + clothing_masks[] = { "H_Shemag_olive", "H_Shemag_khk", "H_Shemag_tan", "H_Shemag_olive_hs", "H_ShemagOpen_khk", "H_ShemagOpen_tan", "G_Balaclava_blk", "G_Balaclava_combat", "G_Balaclava_lowprofile", "G_Balaclava_oli", "G_Bandanna_aviator", "G_Bandanna_beast", "G_Bandanna_blk", "G_Bandanna_khk", "G_Bandanna_oli", "G_Bandanna_shades", "G_Bandanna_sport", "G_Bandanna_tan", "U_O_GhillieSuit", "U_I_GhillieSuit", "U_B_GhillieSuit", "H_RacingHelmet_1_black_F", "H_RacingHelmet_1_red_F", "H_RacingHelmet_1_white_F", "H_RacingHelmet_1_blue_F", "H_RacingHelmet_1_yellow_F", "H_RacingHelmet_1_green_F", "H_RacingHelmet_1_F", "H_RacingHelmet_2_F", "H_RacingHelmet_3_F", "H_RacingHelmet_4_F" }; + + /* Fuel System Configurations */ + pump_service = false; //Allow users to use pump service on the map. Default = false + fuel_cost = 80; //Cost of fuel per liter at fuel stations (if not defined for the vehicle already). + service_chopper = 1000; //Cost to service chopper at chopper service station(Repair/Refuel). + fuelCan_refuel = 250; //Cost to refuel an empty fuel canister at the fuel station pumps. (Be wary of your buy/sell prices on fuel cans to prevent exploits...) + + /* Gang System Configurations */ + gang_price = 75000; //Gang creation price. --Remember they are persistent so keep it reasonable to avoid millions of gangs. + gang_upgradeBase = 10000; //The base cost for purchasing additional slots in a gang + gang_upgradeMultiplier = 2.5; //CURRENTLY NOT IN USE + + /* Housing System Configurations */ + house_limit = 5; //Maximum number of houses a player can own. + + /* Hunting & Fishing System Configurations */ + animaltypes_fish[] = { "Salema_F", "Ornate_random_F", "Mackerel_F", "Tuna_F", "Mullet_F", "CatShark_F", "Turtle_F" }; //Classnames of fish you can catch + animaltypes_hunting[] = { "Sheep_random_F", "Goat_random_F", "Hen_random_F", "Cock_random_F", "Rabbit_F" }; //Classnames of aniamls you can hunt/gut + + /* Item-related Restrictions */ + restrict_medic_weapons = true; //Set to false to allow medics to use any weapon --true will remove ANY weapon they attempt to use (primary,secondary,launcher) + restrict_clothingPickup = true; //Set to false to allow civilians to pickup/take any uniform (ground/crates/vehicles) + restrict_weaponPickup = false; //Set to false to allow civilians to pickup/take any weapon (ground/crates/vehicles) + restricted_uniforms[] = { "U_Rangemaster", "U_B_CombatUniform_mcam_tshirt", "U_B_CombatUniform_mcam_worn", "U_B_survival_uniform" }; + restricted_weapons[] = { "hgun_P07_snds_F", "arifle_MX_F", "arifle_MXC_F" }; + + /* Jail System Configurations */ + jail_seize_vItems[] = { "spikeStrip","lockpick","goldbar","blastingcharge","boltcutter","defusekit","heroin_unprocessed","heroin_processed","cannabis","marijuana","cocaine_unprocessed","cocaine_processed","turtle_raw" }; //Define VIRTUAL items you want to be removed from players upon jailing here. Use "jail_seize_inventory" for Arma inventory items. + jail_seize_inventory = false; //Set to true to run the cop seize script on inmates. False will remove only weapons and magazines otherwise. (Basically used in case cops forget to seize items). [See Lines 106-111 below] + sendtoJail_locations[] = { "police_hq_1", "police_hq_2", "cop_spawn_3", "cop_spawn_5", "Correctional_Facility" }; //Enter the variableName from the mission.sqm here to allow cops to send a person to jail at these locations. + + /* Medical System Configurations */ + revive_cops = true; //true to enable cops the ability to revive everyone or false for only medics/ems. + revive_fee = 1500; //Revive fee that players have to pay and medics only EMS(independent) are rewarded with this amount. + hospital_heal_fee = 100; //Fee to heal at a hospital NPC + + /* Paycheck & Bank System Configurations */ + bank_cop = 7000; //Amount of cash in bank for new cops + bank_civ = 3000; //Amount of cash in bank for new civillians + bank_med = 6500; //Amount of cash in bank for new medics + + paycheck_cop = 500; //Payment for cops + paycheck_civ = 350; //Payment for civillians + paycheck_med = 450; //Payment for medics + + paycheck_period = 5; //Scaled in minutes + bank_transferTax = .05; //Tax that player pays when transferring money from ATM. Tax = Amount * multiplier + + /* Player Job System Configurations */ + delivery_points[] = { "dp_1", "dp_2", "dp_3", "dp_4", "dp_5", "dp_6", "dp_7", "dp_8", "dp_9", "dp_10", "dp_11", "dp_12", "dp_13", "dp_14", "dp_15", "dp_15", "dp_16", "dp_17", "dp_18", "dp_19", "dp_20", "dp_21", "dp_22", "dp_23", "dp_24", "dp_25" }; + fuelTank_winMultiplier = 1; //Win Multiplier in FuelTank Missions. Increase for greater payout. Default = 1 + + /* Search & Seizure System Configurations */ + seize_exempt[] = { "Binocular", "ItemWatch", "ItemCompass", "ItemGPS", "ItemMap", "NVGoggles", "FirstAidKit", "ToolKit", "Chemlight_red", "Chemlight_yellow", "Chemlight_green", "Chemlight_blue", "optic_ACO_grn_smg" }; //Arma items that will not get seized from player inventories + seize_uniform[] = { "U_Rangemaster" }; //Any specific uniforms you want to be seized from players + seize_vest[] = { "V_TacVest_blk_POLICE" }; //Any specific vests you want to be seized from players + seize_headgear[] = { "H_Cap_police" }; //Any hats or helmets you want seized from players + seize_minimum_rank = 2; //Required minimum CopLevel to be able to seize items from players + + /* Vehicle System Configurations */ + chopShop_vehicles[] = { "Car", "Air" }; //Vehicles that can be chopped. (Can add: "Ship" and possibly more -> look at the BI wiki...) + vehicle_infiniteRepair[] = {false, false, true, false}; //Set to true for unlimited repairs with 1 toolkit. False will remove toolkit upon use. civilian, west, independent, east + vehicleShop_rentalOnly[] = { "B_MRAP_01_hmg_F", "B_G_Offroad_01_armed_F", "B_Boat_Armed_01_minigun_F" }; //Vehicles that can only be rented and not purchased. (Last only for the session) + vehicleShop_3D = false; //Add preview 3D inside Shop vehicle. Default : False + + /* Vehicle Purchase Prices */ + vehicle_purchase_multiplier_CIVILIAN = 1; //Civilian Vehicle Buy Price = Config_Vehicle price * multiplier + vehicle_purchase_multiplier_COP = .5; //Cop Vehicle Buy Price = Config_Vehicle price * multiplier + vehicle_purchase_multiplier_MEDIC = .75; //Medic Vehicle Buy Price = Config_Vehicle price * multiplier + vehicle_purchase_multiplier_OPFOR = -1; // -- NOT IN USE -- Simply left in for east support. + + /* Vehicle Rental Prices */ + vehicle_rental_multiplier_CIVILIAN = .80; //Civilian Vehicle Rental Price = Config_Vehicle price * multiplier + vehicle_rental_multiplier_COP = .3; //Cop Vehicle Rental Price = Config_Vehicle price * multiplier + vehicle_rental_multiplier_MEDIC = .55; //Medic Vehicle Rental Price = Config_Vehicle price * multiplier + vehicle_rental_multiplier_OPFOR = -1; // -- NOT IN USE -- Simply left in for east support. + + /* Vehicle Sell Prices */ + vehicle_sell_multiplier_CIVILIAN = .5; //Civilian Vehicle Garage Sell Price = Vehicle Buy Price * multiplier + vehicle_sell_multiplier_COP = .5; //Cop Vehicle Garage Sell Price = Vehicle Buy Price * multiplier + vehicle_sell_multiplier_MEDIC = .5; //Medic Vehicle Garage Sell Price = Vehicle Buy Price * multiplier + vehicle_sell_multiplier_OPFOR = -1; // -- NOT IN USE -- Simply left in for east support. + + /* "Other" Vehicle Prices */ + vehicle_chopShop_multiplier = .25; //Chop Shop price for vehicles. TO AVOID EXPLOITS NEVER SET HIGHER THAN A PURCHASE/RENTAL multipler! Payout = Config_vehicle Price * multiplier + vehicle_storage_fee_multiplier = .2; //Pull from garage cost --> Cost takes the playersides Buy Price * multiplier + vehicle_cop_impound_multiplier = .1; //TO AVOID EXPLOITS NEVER SET HIGHER THAN A PURCHASE/RENTAL multipler! Payout = Config_vehicle Price * multiplier + + /* Wanted System Settings * + /* crimes[] = {String, Bounty, Code} */ + crimes[] = { + {"STR_Crime_187V","650","187V"}, + {"STR_Crime_187","2000","187"}, + {"STR_Crime_901","450","901"}, + {"STR_Crime_215","200","215"}, + {"STR_Crime_213","1000","213"}, + {"STR_Crime_211","100","211"}, + {"STR_Crime_207","350","207"}, + {"STR_Crime_207A","200","207A"}, + {"STR_Crime_390","1500","390"}, + {"STR_Crime_487","150","487"}, + {"STR_Crime_488","70","488"}, + {"STR_Crime_480","100","480"}, + {"STR_Crime_481","100","481"}, + {"STR_Crime_482","500","482"}, + {"STR_Crime_483","950","483"}, + {"STR_Crime_459","650","459"}, + {"STR_Crime_666","200","666"}, + {"STR_Crime_667","4500","667"}, + {"STR_Crime_668","1500","668"}, + {"STR_Crime_1","250","1"}, + {"STR_Crime_2","200","2"}, + {"STR_Crime_3","150","3"}, + {"STR_Crime_4","250","4"}, + {"STR_Crime_5","100","5"}, + {"STR_Crime_6","80","6"}, + {"STR_Crime_7","150","7"}, + {"STR_Crime_8","5000","8"}, + {"STR_Crime_9","5000","9"}, + {"STR_Crime_10","15000","10"}, + {"STR_Crime_11","10000","11"}, + {"STR_Crime_12","2500","12"}, + {"STR_Crime_13","1500","13"}, + {"STR_Crime_14","500","14"}, + {"STR_Crime_15","2500","15"}, + {"STR_Crime_16","1500","16"}, + {"STR_Crime_17","100","17"}, + {"STR_Crime_18","1500","18"}, + {"STR_Crime_19","2500","19"}, + {"STR_Crime_20","500","20"}, + {"STR_Crime_21","500","21"}, + {"STR_Crime_22","2000","22"}, + {"STR_Crime_23","5000","23"}, + {"STR_Crime_24","10000","24"}, + {"STR_Crime_25","20000","25"} + }; +}; + +#include "Config_Clothing.hpp" +#include "Config_Licenses.hpp" +#include "Config_Vehicles.hpp" +#include "Config_vItems.hpp" +#include "Config_Weapons.hpp" +#include "Config_Gather.hpp" +#include "Config_SpawnPoints.hpp" +#include "Config_Process.hpp" diff --git a/life_client/config/Config_Process.hpp b/life_client/config/Config_Process.hpp new file mode 100644 index 00000000..7c2aa542 --- /dev/null +++ b/life_client/config/Config_Process.hpp @@ -0,0 +1,99 @@ +/* +* class: +* MaterialsReq (Needed to process) = Array - Format -> {{"ITEM CLASS",HOWMANY}} +* MaterialsGive (Returned items) = Array - Format -> {{"ITEM CLASS",HOWMANY}} +* Text (Progess Bar Text) = Localised String +* NoLicenseCost (Cost to process w/o license) = Scalar +* +* Example for multiprocess: +* +* class Example { +* MaterialsReq[] = {{"cocaine_processed",1},{"heroin_processed",1}}; +* MaterialsGive[] = {{"diamond_cut",1}}; +* Text = "STR_Process_Example"; +* //ScrollText = "Process Example"; +* NoLicenseCost = 4000; +* }; +*/ + +class ProcessAction { + class oil { + MaterialsReq[] = {{"oil_unprocessed",1}}; + MaterialsGive[] = {{"oil_processed",1}}; + Text = "STR_Process_Oil"; + //ScrollText = "Process Oil"; + NoLicenseCost = 1200; + }; + + class diamond { + MaterialsReq[] = {{"diamond_uncut",1}}; + MaterialsGive[] = {{"diamond_cut",1}}; + Text = "STR_Process_Diamond"; + //ScrollText = "Cut Diamonds"; + NoLicenseCost = 1350; + }; + + class heroin { + MaterialsReq[] = {{"heroin_unprocessed",1}}; + MaterialsGive[] = {{"heroin_processed",1}}; + Text = "STR_Process_Heroin"; + //ScrollText = "Process Heroin"; + NoLicenseCost = 1750; + }; + + class copper { + MaterialsReq[] = {{"copper_unrefined",1}}; + MaterialsGive[] = {{"copper_refined",1}}; + Text = "STR_Process_Copper"; + //ScrollText = "Refine Copper"; + NoLicenseCost = 750; + }; + + class iron { + MaterialsReq[] = {{"iron_unrefined",1}}; + MaterialsGive[] = {{"iron_refined",1}}; + Text = "STR_Process_Iron"; + //ScrollText = "Refine Iron"; + NoLicenseCost = 1120; + }; + + class sand { + MaterialsReq[] = {{"sand",1}}; + MaterialsGive[] = {{"glass",1}}; + Text = "STR_Process_Sand"; + //ScrollText = "Melt Sand into Glass"; + NoLicenseCost = 650; + }; + + class salt { + MaterialsReq[] = {{"salt_unrefined",1}}; + MaterialsGive[] = {{"salt_refined",1}}; + Text = "STR_Process_Salt"; + //ScrollText = "Refine Salt"; + NoLicenseCost = 450; + }; + + class cocaine { + MaterialsReq[] = {{"cocaine_unprocessed",1}}; + MaterialsGive[] = {{"cocaine_processed",1}}; + Text = "STR_Process_Cocaine"; + //ScrollText = "Process Cocaine"; + NoLicenseCost = 1500; + }; + + class marijuana { + MaterialsReq[] = {{"cannabis",1}}; + MaterialsGive[] = {{"marijuana",1}}; + Text = "STR_Process_Marijuana"; + //ScrollText = "Harvest Marijuana"; + NoLicenseCost = 500; + }; + + class cement { + MaterialsReq[] = {{"rock",1}}; + MaterialsGive[] = {{"cement",1}}; + Text = "STR_Process_Cement"; + //ScrollText = "Mix Cement"; + NoLicenseCost = 350; + }; +}; diff --git a/life_client/config/Config_SpawnPoints.hpp b/life_client/config/Config_SpawnPoints.hpp new file mode 100644 index 00000000..c6d3380e --- /dev/null +++ b/life_client/config/Config_SpawnPoints.hpp @@ -0,0 +1,147 @@ +/* +* Format: +* licenses: ARRAY (This is for limiting spawn to certain things) +* 0: License Name +* 1: License Check Type +* false: If license isn't set +* true: If license is set +* Example: +* licenses[] = { { "pilot", true }, { "rebel", false } }; //Shows up for players with pilot and without rebel license. +* +* level: ARRAY (This is for limiting spawn to certain things) +* 0: Variable to read from +* 1: Variable Value Type (SCALAR / BOOL / EQUAL / INVERSE) +* SCALAR: VALUE => VALUE +* BOOL: VALUE EXISTS +* EQUAL: VALUE == VALUE +* INVERSE: VALUE <= VALUE +* 2: What to compare to (-1 = Check Disabled) +* +*/ +class CfgSpawnPoints { + class Civilian { + class Kavala { + displayName = "Kavala"; + spawnMarker = "civ_spawn_1"; + icon = "\a3\ui_f\data\map\MapControl\watertower_ca.paa"; + licenses[] = { { "rebel", false } }; + level[] = { "", "", -1 }; + }; + + class Athira { + displayName = "Athira"; + spawnMarker = "civ_spawn_3"; + icon = "\a3\ui_f\data\map\MapControl\watertower_ca.paa"; + licenses[] = { { "", true } }; + level[] = { "", "", -1 }; + }; + + class Pyrgos { + displayName = "Pyrgos"; + spawnMarker = "civ_spawn_2"; + icon = "\a3\ui_f\data\map\MapControl\watertower_ca.paa"; + licenses[] = { { "", true } }; + level[] = { "", "", -1 }; + }; + + class Sofia { + displayName = "Sofia"; + spawnMarker = "civ_spawn_4"; + icon = "\a3\ui_f\data\map\MapControl\watertower_ca.paa"; + licenses[] = { { "", true } }; + level[] = { "", "", -1 }; + }; + + class RebelN { + displayName = "Northern Rebel Base"; + spawnMarker = "Rebelop"; + icon = "\a3\ui_f\data\map\MapControl\bunker_ca.paa"; + licenses[] = { { "rebel", true } }; + level[] = { "", "", -1 }; + }; + + class RebelS { + displayName = "Southern Rebel Base"; + spawnMarker = "Rebelop_1"; + icon = "\a3\ui_f\data\map\MapControl\bunker_ca.paa"; + licenses[] = { { "rebel", true } }; + level[] = { "", "", -1 }; + }; + + class RebelE { + displayName = "Eastern Rebel Base"; + spawnMarker = "Rebelop_2"; + icon = "\a3\ui_f\data\map\MapControl\bunker_ca.paa"; + licenses[] = { { "rebel", true } }; + level[] = { "", "", -1 }; + }; + }; + + class Cop { + class Kavala { + displayName = "Kavala HQ"; + spawnMarker = "cop_spawn_1"; + icon = "\a3\ui_f\data\map\MapControl\watertower_ca.paa"; + licenses[] = { { "", true } }; + level[] = { "", "", -1 }; + }; + + class Athira { + displayName = "Athira HQ"; + spawnMarker = "cop_spawn_3"; + icon = "\a3\ui_f\data\map\MapControl\fuelstation_ca.paa"; + licenses[] = { { "", true } }; + level[] = { "", "", -1 }; + }; + + class Pyrgos { + displayName = "Pyrgos HQ"; + spawnMarker = "cop_spawn_2"; + icon = "\a3\ui_f\data\map\GroupIcons\badge_rotate_0_gs.paa"; + licenses[] = { { "", true } }; + level[] = { "", "", -1 }; + }; + + class Air { + displayName = "Air HQ"; + spawnMarker = "cop_spawn_4"; + icon = "\a3\ui_f\data\map\Markers\NATO\b_air.paa"; + licenses[] = { { "cAir", true } }; + level[] = { "life_coplevel", "SCALAR", 2 }; + }; + + class HW { + displayName = "HW Patrol"; + spawnMarker = "cop_spawn_5"; + icon = "\a3\ui_f\data\map\GroupIcons\badge_rotate_0_gs.paa"; + licenses[] = { { "", true } }; + level[] = { "life_coplevel", "SCALAR", 3 }; + }; + }; + + class Medic { + class Kavala { + displayName = "Kavala Hospital"; + spawnMarker = "medic_spawn_1"; + icon = "\a3\ui_f\data\map\MapControl\hospital_ca.paa"; + licenses[] = { { "", true } }; + level[] = { "", "", -1 }; + }; + + class Athira { + displayName = "Athira Regional"; + spawnMarker = "medic_spawn_2"; + icon = "\a3\ui_f\data\map\MapControl\hospital_ca.paa"; + licenses[] = { { "", true } }; + level[] = { "", "", -1 }; + }; + + class Pyrgos { + displayName = "Pyrgos Hospital"; + spawnMarker = "medic_spawn_3"; + icon = "\a3\ui_f\data\map\MapControl\hospital_ca.paa"; + licenses[] = { { "", true } }; + level[] = { "", "", -1 }; + }; + }; +}; diff --git a/life_client/config/Config_SpyGlass.hpp b/life_client/config/Config_SpyGlass.hpp new file mode 100644 index 00000000..95e3aa14 --- /dev/null +++ b/life_client/config/Config_SpyGlass.hpp @@ -0,0 +1,385 @@ +class SpyGlass { + civSlotNumber = 100; + copSlotNumber = 19; + medSlotNumber = 6; + + /* + Internal functions, sort by what they are. + Please note any functions you add need the functions named defined and the functions meta name which is the functions name + _meta i.e: + "life_fnc_mycoolfunction", "life_fnc_mycoolfunction_meta" + */ + BIS_Functions[] = { + "", "bis_egspectator_allowaiswitch", "bis_egspectator_allowfreecamera", "bis_egspectator_draw3d", "bis_egspectator_entityrespawned", "bis_egspectator_initialized", "bis_egspectator_showfocusinfo", "bis_egspectator_thread", + "bis_egspectator_unitsiconstodraw", "bis_egspectator_whitelistedsides", "bis_egspectatorcamera_camera", "bis_egspectatorcamera_cameramode", "bis_egspectatorcamera_deltatime", "bis_egspectatorcamera_dirtemp", "bis_egspectatorcamera_dummytarget", + "bis_egspectatorcamera_freecamhastarget", "bis_egspectatorcamera_heightmode", "bis_egspectatorcamera_isveryfastspeed", "bis_egspectatorcamera_lastticktime", "bis_egspectatorcamera_manual", "bis_egspectatorcamera_pitch", "bis_egspectatorcamera_targetinvehicle", + "bis_egspectatorcamera_tick", "bis_egspectatorcamera_usesurfacespeed", "bis_egspectatorcamera_vision", "bis_egspectatorcamera_yaw", "bis_egspectatorcamera_zoom", "bis_egspectatorcamera_zoomtemp", "bis_egspectatordraw3d_drawlocations", "bis_fnc_3dcredits", + "bis_fnc_3dencamera", "bis_fnc_3dencontrolshint", "bis_fnc_3dendiagcreatelist", "bis_fnc_3dendiagfonts", "bis_fnc_3dendiagmousecontrol", "bis_fnc_3dendrawlocations", "bis_fnc_3denentitymenu", "bis_fnc_3denexportattributes", "bis_fnc_3denexportoldsqm", + "bis_fnc_3denexportterrainbuilder", "bis_fnc_3denflashlight", "bis_fnc_3dengrid", "bis_fnc_3denintel", "bis_fnc_3deninterface", "bis_fnc_3denlistlocations", "bis_fnc_3denmissionpreview", "bis_fnc_3denmoduledescription", "bis_fnc_3dennotification", "bis_fnc_3denshowmessage", + "bis_fnc_3denstatusbar", "bis_fnc_3dentoolbar", "bis_fnc_3dentutorial", "bis_fnc_3denvisionmode", "bis_fnc_3dmarkers", "bis_fnc_aan", "bis_fnc_absspeed", "bis_fnc_activateaddons", "bis_fnc_addclassoo", "bis_fnc_addcommmenuitem", "bis_fnc_addcuratorareafromtrigger", + "bis_fnc_addcuratorchallenge", "bis_fnc_addcuratoricon", "bis_fnc_addevidence", "bis_fnc_addrespawninventory", "bis_fnc_addrespawnposition", "bis_fnc_addscore", "bis_fnc_addscriptedeventhandler", "bis_fnc_addscriptedeventhandler_egspectator_oncameramodechanged", + "bis_fnc_addscriptedeventhandler_rscdisplayegspectator_mapstatechanged", "bis_fnc_addstackedeventhandler", "bis_fnc_addsupportlink", "bis_fnc_addtopairs", "bis_fnc_addvirtualbackpackcargo", "bis_fnc_addvirtualitemcargo", "bis_fnc_addvirtualmagazinecargo", + "bis_fnc_addvirtualweaponcargo", "bis_fnc_addweapon", "bis_fnc_adjustsimpleobject", "bis_fnc_advhint", "bis_fnc_advhintarg", "bis_fnc_advhintcall", "bis_fnc_advhintcredits", "bis_fnc_aligntabs", "bis_fnc_allsynchronizedobjects", "bis_fnc_ambientanim", "bis_fnc_ambientanimcombat", + "bis_fnc_ambientanimgetparams", "bis_fnc_ambientblacklist", "bis_fnc_ambientblacklistadd", "bis_fnc_ambientboats", "bis_fnc_ambientflyby", "bis_fnc_ambienthelicopters", "bis_fnc_ambientplanes", "bis_fnc_ambientpostprocess", "bis_fnc_animalbehaviour", "bis_fnc_animalrandomization", + "bis_fnc_animalsitespawn", "bis_fnc_animatetaskwaypoint", "bis_fnc_animtype", "bis_fnc_animviewer", "bis_fnc_areequal", "bis_fnc_areequalnotnil", "bis_fnc_arefriendly", "bis_fnc_arithmeticmean", "bis_fnc_arraycompare", "bis_fnc_arrayfinddeep", "bis_fnc_arrayinsert", + "bis_fnc_arraypop", "bis_fnc_arraypush", "bis_fnc_arraypushstack", "bis_fnc_arrayshift", "bis_fnc_arrayshuffle", "bis_fnc_arrayunshift", "bis_fnc_arsenal", "bis_fnc_assignplayerrole", "bis_fnc_basevehicle", "bis_fnc_baseweapon", "bis_fnc_basicbackpack", "bis_fnc_basictask", + "bis_fnc_blackin", "bis_fnc_blackout", "bis_fnc_bleedtickets", "bis_fnc_bloodeffect", "bis_fnc_boundingboxcorner", "bis_fnc_boundingboxdimensions", "bis_fnc_boundingboxmarker", "bis_fnc_boundingcircle", "bis_fnc_briefinganimate", "bis_fnc_briefinginit", "bis_fnc_buildingpositions", + "bis_fnc_call", "bis_fnc_callscriptedeventhandler", "bis_fnc_camera", "bis_fnc_cameraold", "bis_fnc_camfollow", "bis_fnc_cargoturretindex", "bis_fnc_changesupportradiochannel", "bis_fnc_cinemaborder", "bis_fnc_classmagazine", "bis_fnc_classweapon", "bis_fnc_codeperformance", + "bis_fnc_colorconfigtorgba", "bis_fnc_colorrgbatohtml", "bis_fnc_colorrgbatotexture", "bis_fnc_colorrgbtohtml", "bis_fnc_commsmenucreate", "bis_fnc_commsmenutoggleavailability", "bis_fnc_commsmenutogglevisibility", "bis_fnc_compatibleitems", + "bis_fnc_completedcuratorchallengescount", "bis_fnc_conditionalselect", "bis_fnc_configextremes", "bis_fnc_configpath", "bis_fnc_configviewer", "bis_fnc_consolidatearray", "bis_fnc_controlconfigs", "bis_fnc_convertunits", "bis_fnc_countdown", "bis_fnc_counter", + "bis_fnc_createlogrecord", "bis_fnc_createmenu", "bis_fnc_createobjectoo", "bis_fnc_createsimpleobject", "bis_fnc_credits", "bis_fnc_credits_movie", "bis_fnc_credits_movieconfig", "bis_fnc_credits_moviesupport", "bis_fnc_crewcount", "bis_fnc_crossproduct", "bis_fnc_crows", + "bis_fnc_ctrlfittotextheight", "bis_fnc_ctrlsetscale", "bis_fnc_ctrltextheight", "bis_fnc_curatorattachobject", "bis_fnc_curatorattributes", "bis_fnc_curatorautomatic", "bis_fnc_curatorautomaticpositions", "bis_fnc_curatorchallengedestroyvehicle", + "bis_fnc_curatorchallengefindintel", "bis_fnc_curatorchallengefireweapon", "bis_fnc_curatorchallengegetinvehicle", "bis_fnc_curatorchallengeilluminate", "bis_fnc_curatorchallengespawnlightning", "bis_fnc_curatorhint", "bis_fnc_curatorobjectedited", + "bis_fnc_curatorobjectplaced", "bis_fnc_curatorobjectregistered", "bis_fnc_curatorobjectregisteredtable", "bis_fnc_curatorpinged", "bis_fnc_curatorrespawn", "bis_fnc_curatorsaymessage", "bis_fnc_curatorvisionmodes", "bis_fnc_curatorwaypointplaced", "bis_fnc_customgps", + "bis_fnc_customgpsvideo", "bis_fnc_cutdecimals", "bis_fnc_damagechanged", "bis_fnc_damagepulsing", "bis_fnc_dataterminalanimate", "bis_fnc_dataterminalcolor", "bis_fnc_dbclasscheck", "bis_fnc_dbclassid", "bis_fnc_dbclassindex", "bis_fnc_dbclasslist", "bis_fnc_dbclassremove", + "bis_fnc_dbclassreturn", "bis_fnc_dbclassset", "bis_fnc_dbconfigpath", "bis_fnc_dbimportconfig", "bis_fnc_dbimportxml", "bis_fnc_dbisclass", "bis_fnc_dbisvalue", "bis_fnc_dbprint", "bis_fnc_dbsymbolclass", "bis_fnc_dbsymbolvalue", "bis_fnc_dbvaluecheck", "bis_fnc_dbvalueid", + "bis_fnc_dbvalueindex", "bis_fnc_dbvaluelist", "bis_fnc_dbvalueremove", "bis_fnc_dbvaluereturn", "bis_fnc_dbvalueset", "bis_fnc_debugprofile", "bis_fnc_decodeflags", "bis_fnc_deletecounter", "bis_fnc_deleteinventory", "bis_fnc_deletetask", "bis_fnc_deletevehiclecrew", + "bis_fnc_destroycity", "bis_fnc_diagaar", "bis_fnc_diagaarrecord", "bis_fnc_diagaarrecord_fsm", "bis_fnc_diaganim", "bis_fnc_diagbulletcam", "bis_fnc_diagconfig", "bis_fnc_diagfindmissingauthors", "bis_fnc_diaghit", "bis_fnc_diagjiralink", "bis_fnc_diagkey", "bis_fnc_diagkeylayout", + "bis_fnc_diagkeytest", "bis_fnc_diagknownastarget", "bis_fnc_diagknowntargets", "bis_fnc_diagloop", "bis_fnc_diagmacros", "bis_fnc_diagmacrosauthor", "bis_fnc_diagmacroseditorpreview", "bis_fnc_diagmacrosmapsize", "bis_fnc_diagmacrosnamesound", "bis_fnc_diagmacrosverify", + "bis_fnc_diagmissionpositions", "bis_fnc_diagmissionweapons", "bis_fnc_diagpreview", "bis_fnc_diagpreviewcycle", "bis_fnc_diagpreviewvehiclecrew", "bis_fnc_diagradio", "bis_fnc_diagvehicleicons", "bis_fnc_diagwiki", "bis_fnc_diaryhints", "bis_fnc_diarymaps", "bis_fnc_didjip", + "bis_fnc_dirindicator", "bis_fnc_dirteffect", "bis_fnc_dirto", "bis_fnc_disableloading", "bis_fnc_disablesaving", "bis_fnc_displayclouds", "bis_fnc_displaycolorget", "bis_fnc_displaycolorset", "bis_fnc_displaycontrols", "bis_fnc_displayloading", "bis_fnc_displaymission", + "bis_fnc_displayname", "bis_fnc_displayresize", "bis_fnc_distance2d", "bis_fnc_distance2dsqr", "bis_fnc_doorclose", "bis_fnc_doornohandleclose", "bis_fnc_doornohandleopen", "bis_fnc_dooropen", "bis_fnc_dotproduct", "bis_fnc_drawao", "bis_fnc_drawcuratordeaths", + "bis_fnc_drawcuratorlocations", "bis_fnc_drawcuratorrespawnmarkers", "bis_fnc_drawminefields", "bis_fnc_drawrespawnpositions", "bis_fnc_dynamicgroups", "bis_fnc_dynamictext", "bis_fnc_earthquake", "bis_fnc_effectfired", "bis_fnc_effectfiredartillery", "bis_fnc_effectfiredflares", + "bis_fnc_effectfiredhelirocket", "bis_fnc_effectfiredlongsmoke", "bis_fnc_effectfiredrifle", "bis_fnc_effectfiredrocket", "bis_fnc_effectfiredsmokelauncher", "bis_fnc_effectfiredsmokelauncher_boat", "bis_fnc_effectkilled", "bis_fnc_effectkilledairdestruction", + "bis_fnc_effectkilledairdestructionstage2", "bis_fnc_effectkilledsecondaries", "bis_fnc_effectplankton", "bis_fnc_egobjectivevisualizer", "bis_fnc_egobjectivevisualizerdraw", "bis_fnc_egspectator", "bis_fnc_egspectatorcamera", "bis_fnc_egspectatorcamerapreparetarget", + "bis_fnc_egspectatorcameraresettarget", "bis_fnc_egspectatorcamerasettarget", "bis_fnc_egspectatorcameratick", "bis_fnc_egspectatordraw2d", "bis_fnc_egspectatordraw3d", "bis_fnc_egspectatorgetunitstodraw", "bis_fnc_enablesaving", "bis_fnc_encodeflags", "bis_fnc_endloadingscreen", + "bis_fnc_endmission", "bis_fnc_endmissionserver", "bis_fnc_enemydetected", "bis_fnc_enemysides", "bis_fnc_enemytargets", "bis_fnc_error", "bis_fnc_errormsg", "bis_fnc_errorparamstype", "bis_fnc_establishingshot", "bis_fnc_estimatedtimeleft", "bis_fnc_execfsm", "bis_fnc_execremote", + "bis_fnc_executestackedeventhandler", "bis_fnc_execvm", "bis_fnc_exportcfggroups", "bis_fnc_exportcfghints", "bis_fnc_exportcfgmagazines", "bis_fnc_exportcfgpatches", "bis_fnc_exportcfgvehicles", "bis_fnc_exportcfgweapons", "bis_fnc_exportconfighierarchy", "bis_fnc_exportcuratorcosttable", + "bis_fnc_exporteditorpreviews", "bis_fnc_exportfunctionstowiki", "bis_fnc_exportgroupformations", "bis_fnc_exportinventory", "bis_fnc_exportmaptobitxt", "bis_fnc_exportvehicle", "bis_fnc_fadeeffect", "bis_fnc_fatigueeffect", "bis_fnc_feedback_allowdeathscreen", "bis_fnc_feedback_allowpp", + "bis_fnc_feedback_blue", "bis_fnc_feedback_burningtimer", "bis_fnc_feedback_damageblur", "bis_fnc_feedback_damagecc", "bis_fnc_feedback_damagepp", "bis_fnc_feedback_damageradialblur", "bis_fnc_feedback_fatigueblur", "bis_fnc_feedback_fatiguecc", "bis_fnc_feedback_fatiguepp", + "bis_fnc_feedback_fatigueradialblur", "bis_fnc_feedback_testhelper", "bis_fnc_feedbackinit", "bis_fnc_feedbackmain", "bis_fnc_feedbackmain_fsm", "bis_fnc_ffvupdate", "bis_fnc_filterstring", "bis_fnc_findallnestedelements", "bis_fnc_findextreme", "bis_fnc_findinpairs", + "bis_fnc_findnestedelement", "bis_fnc_findoverwatch", "bis_fnc_findsafepos", "bis_fnc_finishcuratorchallenge", "bis_fnc_fixdate", "bis_fnc_flameseffect", "bis_fnc_flies", "bis_fnc_forcecuratorinterface", "bis_fnc_forceend", "bis_fnc_formatcuratorchallengeobjects", "bis_fnc_fps", + "bis_fnc_friendlysides", "bis_fnc_ftlmanager", "bis_fnc_functionmeta", "bis_fnc_functionpath", "bis_fnc_functionsdebug", "bis_fnc_garage3den", "bis_fnc_garage", "bis_fnc_gc", "bis_fnc_gcinit", "bis_fnc_genericsentence", "bis_fnc_genericsentenceinit", "bis_fnc_geometricmean", + "bis_fnc_getangledelta", "bis_fnc_getcfg", "bis_fnc_getcfgdata", "bis_fnc_getcfgdataarray", "bis_fnc_getcfgdatabool", "bis_fnc_getcfgdataobject", "bis_fnc_getcfgdatapool", "bis_fnc_getcfgisclass", "bis_fnc_getcfgsubclasses", "bis_fnc_getfactions", "bis_fnc_getfrompairs", "bis_fnc_getidc", + "bis_fnc_getidd", "bis_fnc_getintersectionsundercursor", "bis_fnc_getlinedist", "bis_fnc_getname", "bis_fnc_getnetmode", "bis_fnc_getobjectbbd", "bis_fnc_getparamvalue", "bis_fnc_getpitchbank", "bis_fnc_getrespawninventories", "bis_fnc_getrespawnmarkers", "bis_fnc_getrespawnpositions", + "bis_fnc_getservervariable", "bis_fnc_getturrets", "bis_fnc_getunitbyuid", "bis_fnc_getunitinsignia", "bis_fnc_getvehiclecustomization", "bis_fnc_getvirtualbackpackcargo", "bis_fnc_getvirtualitemcargo", "bis_fnc_getvirtualmagazinecargo", "bis_fnc_getvirtualweaponcargo", + "bis_fnc_greatestnum", "bis_fnc_gridtopos", "bis_fnc_groupindicator", "bis_fnc_groupvehicles", "bis_fnc_guibackground", "bis_fnc_guieditor", "bis_fnc_guieffecttiles", "bis_fnc_guieffecttiles_ppchromaberration", "bis_fnc_guigrid", "bis_fnc_guigridtoprofile", "bis_fnc_guihint", + "bis_fnc_guimessage", "bis_fnc_guinewsfeed", "bis_fnc_halo", "bis_fnc_halt", "bis_fnc_hatchclose", "bis_fnc_hatchopen", "bis_fnc_healing", "bis_fnc_healtheffects", "bis_fnc_helicoptercanfly", "bis_fnc_helicopterdamage", "bis_fnc_helicoptergethitpoints", "bis_fnc_helicopterseat", + "bis_fnc_helicopterseatmove", "bis_fnc_helicoptertype", "bis_fnc_help", "bis_fnc_highlightcontrol", "bis_fnc_hudlimits", "bis_fnc_importimagelinks", "bis_fnc_inanglesector", "bis_fnc_incapacitatedeffect", "bis_fnc_indicatebleeding", "bis_fnc_infotext", "bis_fnc_init", "bis_fnc_initammobox", + "bis_fnc_initcuratorattribute", "bis_fnc_initdisplay", "bis_fnc_initdisplays", "bis_fnc_initexpo", "bis_fnc_initintelobject", "bis_fnc_initlistnboxsorting", "bis_fnc_initmodules", "bis_fnc_initmodules_animals", "bis_fnc_initmodules_audio", "bis_fnc_initmodules_chemlights", + "bis_fnc_initmodules_curator", "bis_fnc_initmodules_effects", "bis_fnc_initmodules_environment", "bis_fnc_initmodules_events", "bis_fnc_initmodules_firingdrills", "bis_fnc_initmodules_flares", "bis_fnc_initmodules_groupmodifiers", "bis_fnc_initmodules_intel", + "bis_fnc_initmodules_missionflow", "bis_fnc_initmodules_modes", "bis_fnc_initmodules_multiplayer", "bis_fnc_initmodules_no_category", "bis_fnc_initmodules_objectives", "bis_fnc_initmodules_objectmodifiers", "bis_fnc_initmodules_ordnance", "bis_fnc_initmodules_respawn", + "bis_fnc_initmodules_sites", "bis_fnc_initmodules_smokeshells", "bis_fnc_initmodules_strategicmap", "bis_fnc_initmodules_supports", "bis_fnc_initmodules_training", "bis_fnc_initmultiplayer", "bis_fnc_initparams", "bis_fnc_initpixelui", "bis_fnc_initplayable", "bis_fnc_initrespawn", + "bis_fnc_initrespawnbackpack", "bis_fnc_initslidervalue", "bis_fnc_initvehicle", "bis_fnc_initvehiclecrew", "bis_fnc_initvehiclekart", "bis_fnc_initvirtualunit", "bis_fnc_instring", "bis_fnc_instructorfigure", "bis_fnc_interpolateweather", "bis_fnc_intrigger", "bis_fnc_inv", + "bis_fnc_invadd", "bis_fnc_invcodetoarray", "bis_fnc_inventoryexists", "bis_fnc_invremove", "bis_fnc_invslots", "bis_fnc_invslotsempty", "bis_fnc_invslottype", "bis_fnc_invstring", "bis_fnc_isbuildingenterable", "bis_fnc_iscampaign", "bis_fnc_iscurator", "bis_fnc_iscuratoreditable", + "bis_fnc_isdemo", "bis_fnc_isforcedcuratorinterface", "bis_fnc_isinfrontof", "bis_fnc_isinsidearea", "bis_fnc_isinzoom", "bis_fnc_isleapyear", "bis_fnc_isloading", "bis_fnc_islocalized", "bis_fnc_isposblacklisted", "bis_fnc_isthrowable", "bis_fnc_isunitvirtual", "bis_fnc_itemtype", + "bis_fnc_jukebox", "bis_fnc_kbcanspeak", "bis_fnc_kbcreatedummy", "bis_fnc_kbisspeaking", "bis_fnc_kbmenu", "bis_fnc_kbpriority", "bis_fnc_kbsentence", "bis_fnc_kbskip", "bis_fnc_kbtell", "bis_fnc_kbtelllocal", "bis_fnc_kbtopicconfig", "bis_fnc_keycode", "bis_fnc_keyhold", + "bis_fnc_keypointsexport", "bis_fnc_keypointsexportfromkml", "bis_fnc_kmlimport", "bis_fnc_lerp", "bis_fnc_limitsupport", "bis_fnc_linearconversion", "bis_fnc_listcuratorplayers", "bis_fnc_listplayers", "bis_fnc_livefeed", "bis_fnc_livefeedeffects", "bis_fnc_livefeedmoduleeffects", + "bis_fnc_livefeedmoduleinit", "bis_fnc_livefeedmodulesetsource", "bis_fnc_livefeedmodulesettarget", "bis_fnc_livefeedsetsource", "bis_fnc_livefeedsettarget", "bis_fnc_livefeedterminate", "bis_fnc_loadclass", "bis_fnc_loadentry", "bis_fnc_loadfunctions", "bis_fnc_loadinventory", + "bis_fnc_loadvehicle", "bis_fnc_localize", "bis_fnc_locationdescription", "bis_fnc_locations", "bis_fnc_lockeddoornohandleopen", "bis_fnc_lockeddooropen", "bis_fnc_locweaponinfo", "bis_fnc_log", "bis_fnc_logformat", "bis_fnc_logformatserver", "bis_fnc_loop", "bis_fnc_lowestnum", + "bis_fnc_magnitude", "bis_fnc_magnitudesqr", "bis_fnc_managecuratoraddons", "bis_fnc_managecuratorchallenges", "bis_fnc_mapsize", "bis_fnc_markercreate", "bis_fnc_markerparams", "bis_fnc_markerpath", "bis_fnc_markertotrigger", "bis_fnc_markwaypoints", "bis_fnc_maxdiffarray", + "bis_fnc_mirrorcuratorsettings", "bis_fnc_miscanim", "bis_fnc_missilelaunchpositionfix", "bis_fnc_missionconversations", "bis_fnc_missionconversationslocal", "bis_fnc_missionflow", "bis_fnc_missionflow_fsm", "bis_fnc_missionhandlers", "bis_fnc_missionhandlers_reloads", + "bis_fnc_missionrespawntype", "bis_fnc_missiontasks", "bis_fnc_missiontaskslocal", "bis_fnc_missiontimeleft", "bis_fnc_moduleai", "bis_fnc_moduleammo", "bis_fnc_moduleanimals", "bis_fnc_modulearsenal", "bis_fnc_modulebleedtickets", "bis_fnc_modulebootcampstage", "bis_fnc_modulecas", + "bis_fnc_modulechat", "bis_fnc_modulecombatgetin", "bis_fnc_modulecountdown", "bis_fnc_modulecovermap", "bis_fnc_modulecreatediaryrecord", "bis_fnc_modulecreateprojectile", "bis_fnc_modulecurator", "bis_fnc_modulecuratoraddaddons", "bis_fnc_modulecuratoraddcameraarea", + "bis_fnc_modulecuratoraddeditableobjects", "bis_fnc_modulecuratoraddeditingarea", "bis_fnc_modulecuratoraddeditingareaplayers", "bis_fnc_modulecuratoraddicon", "bis_fnc_modulecuratoraddpoints", "bis_fnc_modulecuratorsetattributes", "bis_fnc_modulecuratorsetcamera", + "bis_fnc_modulecuratorsetcoefs", "bis_fnc_modulecuratorsetcostsdefault", "bis_fnc_modulecuratorsetcostsside", "bis_fnc_modulecuratorsetcostsvehicleclass", "bis_fnc_modulecuratorseteditingareatype", "bis_fnc_modulecuratorsetobjectcost", "bis_fnc_moduledamage", "bis_fnc_moduledate", + "bis_fnc_modulediary", "bis_fnc_moduledooropen", "bis_fnc_moduleeffectsbubbles", "bis_fnc_moduleeffectsemittercreator", "bis_fnc_moduleeffectsfire", "bis_fnc_moduleeffectsplankton", "bis_fnc_moduleeffectsshells", "bis_fnc_moduleeffectssmoke", "bis_fnc_moduleendmission", "bis_fnc_moduleexecute", + "bis_fnc_modulefdballoonairdestruction", "bis_fnc_modulefdballoonwaterdestruction", "bis_fnc_modulefdcpclear", "bis_fnc_modulefdcpin", "bis_fnc_modulefdcpout", "bis_fnc_modulefdfademarker", "bis_fnc_modulefdskeetdestruction", "bis_fnc_modulefdstatsclear", "bis_fnc_modulefiringdrill", + "bis_fnc_modulefriendlyfire", "bis_fnc_modulefuel", "bis_fnc_modulegenericradio", "bis_fnc_modulegrenade", "bis_fnc_modulegroupid", "bis_fnc_modulehandle", "bis_fnc_modulehealth", "bis_fnc_modulehint", "bis_fnc_modulehq", "bis_fnc_modulehvtinit", "bis_fnc_modulehvtobjective", + "bis_fnc_modulehvtobjectives", "bis_fnc_modulehvtobjectivesinstance", "bis_fnc_moduleinit", "bis_fnc_modulelightning", "bis_fnc_modulemine", "bis_fnc_modulemissionname", "bis_fnc_modulemode", "bis_fnc_modulemodules", "bis_fnc_modulemptypedefense", "bis_fnc_modulemptypegamemaster", + "bis_fnc_modulemptypegroundsupport", "bis_fnc_modulemptypegroundsupportbase", "bis_fnc_modulemptypesectorcontrol", "bis_fnc_modulemptypeseize", "bis_fnc_modulenametags", "bis_fnc_moduleobjective", "bis_fnc_moduleobjectivefind", "bis_fnc_moduleobjectivegetin", "bis_fnc_moduleobjectivemove", + "bis_fnc_moduleobjectiveracecp", "bis_fnc_moduleobjectiveracefinish", "bis_fnc_moduleobjectiveracestart", "bis_fnc_moduleobjectivesector", "bis_fnc_moduleobjectivetarget", "bis_fnc_modulepositioning", "bis_fnc_moduleposter", "bis_fnc_modulepostprocess", "bis_fnc_moduleprojectile", + "bis_fnc_modulepunishment", "bis_fnc_moduleradiochannelcreate", "bis_fnc_modulerank", "bis_fnc_modulerating", "bis_fnc_moduleremotecontrol", "bis_fnc_modulerespawninventory", "bis_fnc_modulerespawnposition", "bis_fnc_modulerespawntickets", "bis_fnc_modulerespawnvehicle", "bis_fnc_modulesavegame", + "bis_fnc_modulesector", "bis_fnc_modulesfx", "bis_fnc_moduleshowhide", "bis_fnc_modulesimulationmanager", "bis_fnc_modulesiteinit", "bis_fnc_moduleskill", "bis_fnc_moduleskiptime", "bis_fnc_moduleslingload", "bis_fnc_modulesound", "bis_fnc_modulespawnai", "bis_fnc_modulespawnaioptions", + "bis_fnc_modulespawnaipoint", "bis_fnc_modulespawnaisectortactic", "bis_fnc_modulestrategicmapimage", "bis_fnc_modulestrategicmapinit", "bis_fnc_modulestrategicmapmission", "bis_fnc_modulestrategicmapopen", "bis_fnc_modulestrategicmaporbat", "bis_fnc_modulesupportsinitprovider", + "bis_fnc_modulesupportsinitprovidervirtual", "bis_fnc_modulesupportsinitrequester", "bis_fnc_moduletaskcreate", "bis_fnc_moduletasksetdescription", "bis_fnc_moduletasksetdestination", "bis_fnc_moduletasksetstate", "bis_fnc_moduletimemultiplier", "bis_fnc_moduletimetrial", "bis_fnc_moduletracers", + "bis_fnc_moduletrident", "bis_fnc_moduletriggers", "bis_fnc_modulettcpclear", "bis_fnc_modulettcpin", "bis_fnc_modulettcpout", "bis_fnc_modulettcptrigger", "bis_fnc_modulettcptriggerbehind", "bis_fnc_modulettstatsclear", "bis_fnc_moduleunits", "bis_fnc_moduleunlockarea", + "bis_fnc_moduleunlockobject", "bis_fnc_modulevolume", "bis_fnc_moduleweather", "bis_fnc_modulezoneprotection", "bis_fnc_modulezonerestriction", "bis_fnc_monthdays", "bis_fnc_moveaction", "bis_fnc_movein", "bis_fnc_movetorespawnposition", "bis_fnc_mp", "bis_fnc_mp_packet", "bis_fnc_mpexec", + "bis_fnc_music", "bis_fnc_nearesthelipad", "bis_fnc_nearestnum", "bis_fnc_nearestposition", "bis_fnc_nearestroad", "bis_fnc_neutralizeunit", "bis_fnc_noflyzone", "bis_fnc_noflyzonescreate", "bis_fnc_noflyzonesexport", "bis_fnc_numberdigits", "bis_fnc_numbertext", "bis_fnc_objectheight", + "bis_fnc_objectinventoryanimatedclose", "bis_fnc_objectinventoryanimatedopen", "bis_fnc_objectsgrabber", "bis_fnc_objectside", "bis_fnc_objectsmapper", "bis_fnc_objecttype", "bis_fnc_objectvar", "bis_fnc_ondiarychanged", "bis_fnc_onend", "bis_fnc_onload", "bis_fnc_onplayerconnected", + "bis_fnc_openfieldmanual", "bis_fnc_orbataddgroupoverlay", "bis_fnc_orbatanimate", "bis_fnc_orbatconfigpreview", "bis_fnc_orbatgetgroupparams", "bis_fnc_orbatopen", "bis_fnc_orbatremovegroupoverlay", "bis_fnc_orbatsetgroupfade", "bis_fnc_orbatsetgroupparams", "bis_fnc_orbattooltip", + "bis_fnc_ordinalnumber", "bis_fnc_overviewauthor", "bis_fnc_overviewdifficulty", "bis_fnc_overviewmission", "bis_fnc_overviewterrain", "bis_fnc_overviewtimetrial", "bis_fnc_packstaticweapon", "bis_fnc_param", "bis_fnc_paramcountdown", "bis_fnc_paramdaytime", "bis_fnc_paramguerfriendly", + "bis_fnc_paramin", "bis_fnc_paramrespawntickets", "bis_fnc_paramtimeacceleration", "bis_fnc_paramviewdistance", "bis_fnc_paramweather", "bis_fnc_parsenumber", "bis_fnc_phoneticalword", "bis_fnc_pip", "bis_fnc_playendmusic", "bis_fnc_playername", "bis_fnc_playersidefaction", "bis_fnc_playmusic", + "bis_fnc_playsound", "bis_fnc_playvideo", "bis_fnc_posdegtoutm", "bis_fnc_posdegtoworld", "bis_fnc_position", "bis_fnc_postogrid", "bis_fnc_posutmtodeg", "bis_fnc_preload", "bis_fnc_preload_init", "bis_fnc_preload_server", "bis_fnc_prepareao", "bis_fnc_progressloadingscreen", "bis_fnc_quotations", + "bis_fnc_radialred", "bis_fnc_radialredout", "bis_fnc_radiosetchannel", "bis_fnc_radiosetplaylist", "bis_fnc_radiosettrack", "bis_fnc_randomindex", "bis_fnc_randomint", "bis_fnc_randomnum", "bis_fnc_randompos", "bis_fnc_randompostrigger", "bis_fnc_rankparams", "bis_fnc_recompile", + "bis_fnc_refreshcommmenu", "bis_fnc_registercuratorobject", "bis_fnc_relativedirto", "bis_fnc_relpos", "bis_fnc_relposobject", "bis_fnc_relscaleddist", "bis_fnc_removeallscriptedeventhandlers", "bis_fnc_removecommmenuitem", "bis_fnc_removecuratoricon", "bis_fnc_removedestroyedcuratoreditableobjects", + "bis_fnc_removefrompairs", "bis_fnc_removeindex", "bis_fnc_removenestedelement", "bis_fnc_removerespawninventory", "bis_fnc_removerespawnposition", "bis_fnc_removescriptedeventhandler", "bis_fnc_removestackedeventhandler", "bis_fnc_removesupportlink", "bis_fnc_removevirtualbackpackcargo", + "bis_fnc_removevirtualitemcargo", "bis_fnc_removevirtualmagazinecargo", "bis_fnc_removevirtualweaponcargo", "bis_fnc_replacewithsimpleobject", "bis_fnc_respawnbase", "bis_fnc_respawnconfirm", "bis_fnc_respawncounter", "bis_fnc_respawnendmission", "bis_fnc_respawngroup", "bis_fnc_respawninstant", + "bis_fnc_respawnmanager", "bis_fnc_respawnmenuinventory", "bis_fnc_respawnmenuposition", "bis_fnc_respawnmenuspectator", "bis_fnc_respawnnone", "bis_fnc_respawnrounds", "bis_fnc_respawnseagull", "bis_fnc_respawnside", "bis_fnc_respawnspectator", "bis_fnc_respawntickets", "bis_fnc_respawntimepenalty", + "bis_fnc_respawnwave", "bis_fnc_respect", "bis_fnc_returnchildren", "bis_fnc_returnconfigentry", "bis_fnc_returngroupcomposition", "bis_fnc_returnnestedelement", "bis_fnc_returnparents", "bis_fnc_returnvehicleturrets", "bis_fnc_revivebleedout", "bis_fnc_revivecontrol", "bis_fnc_revivedebug", + "bis_fnc_reviveenabled", "bis_fnc_reviveexecutetemplates", "bis_fnc_revivehandleforcerespawnaction", "bis_fnc_revivehandleincapunitdetection", "bis_fnc_revivehandlekeypress", "bis_fnc_revivehandlereviveaction", "bis_fnc_reviveiconcontrol", "bis_fnc_reviveiconmanager", "bis_fnc_reviveincapacitate", + "bis_fnc_reviveinit", "bis_fnc_revivekeys", "bis_fnc_reviveonbeingrevived", "bis_fnc_reviveonforcingrespawn", "bis_fnc_reviveonplayerkilled", "bis_fnc_reviveonplayerrespawn", "bis_fnc_reviveonstate", "bis_fnc_reviveonstatejip", "bis_fnc_reviveprogress", "bis_fnc_reviveremovehelper", + "bis_fnc_revivesethelper", "bis_fnc_revivesetstatus", "bis_fnc_romannumeral", "bis_fnc_rotatevector2d", "bis_fnc_rounddir", "bis_fnc_roundnum", "bis_fnc_rsclayer", "bis_fnc_rsclayer_list", "bis_fnc_runlater", "bis_fnc_sandstorm", "bis_fnc_savegame", "bis_fnc_saveinventory", "bis_fnc_savevehicle", + "bis_fnc_saymessage", "bis_fnc_sceneareaclearance", "bis_fnc_scenecheckweapons", "bis_fnc_scenecreatescenetrigger", "bis_fnc_scenecreatesoundentities", "bis_fnc_scenegetobjects", "bis_fnc_scenegetparticipants", "bis_fnc_scenegetpositionbyangle", "bis_fnc_sceneintruderdetector", + "bis_fnc_scenemiscstuff", "bis_fnc_scenerotate", "bis_fnc_scenesetanimationsforgroup", "bis_fnc_scenesetbehaviour", "bis_fnc_scenesetobjects", "bis_fnc_scenesetposformation", "bis_fnc_scriptedmove", "bis_fnc_scriptedwaypointtype", "bis_fnc_secondstostring", "bis_fnc_selectcrew", + "bis_fnc_selectdiarysubject", "bis_fnc_selectrandom", "bis_fnc_selectrandomweighted", "bis_fnc_selectrespawntemplate", "bis_fnc_selectrespawntemplates_args", "bis_fnc_setcuratorattributes", "bis_fnc_setcuratorcamera", "bis_fnc_setcuratorvisionmodes", "bis_fnc_setdate", "bis_fnc_setfog", + "bis_fnc_setheight", "bis_fnc_setidcstreamfriendly", "bis_fnc_setidentity", "bis_fnc_setmissionstatusslot", "bis_fnc_setnestedelement", "bis_fnc_setobjectrotation", "bis_fnc_setobjecttexture", "bis_fnc_setovercast", "bis_fnc_setpitchbank", "bis_fnc_setppeffecttemplate", "bis_fnc_setrank", + "bis_fnc_setrespawndelay", "bis_fnc_setrespawninventory", "bis_fnc_setservervariable", "bis_fnc_settask", "bis_fnc_settasklocal", "bis_fnc_settopairs", "bis_fnc_setunitinsignia", "bis_fnc_setvehiclemass", "bis_fnc_shakecuratorcamera", "bis_fnc_shakegauges", "bis_fnc_sharedobjectives", + "bis_fnc_showcuratorattributes", "bis_fnc_showcuratorfeedbackmessage", "bis_fnc_showmarkers", "bis_fnc_showmissionstatus", "bis_fnc_shownotification", "bis_fnc_showrespawnmenu", "bis_fnc_showrespawnmenudisableitem", "bis_fnc_showrespawnmenudisableitemcheck", "bis_fnc_showrespawnmenudisableitemdraw", + "bis_fnc_showrespawnmenuheader", "bis_fnc_showrespawnmenuinventory", "bis_fnc_showrespawnmenuinventorydetails", "bis_fnc_showrespawnmenuinventoryitems", "bis_fnc_showrespawnmenuinventorylimit", "bis_fnc_showrespawnmenuinventorylimitrefresh", "bis_fnc_showrespawnmenuinventorylimitrespawn", + "bis_fnc_showrespawnmenuinventorylist", "bis_fnc_showrespawnmenuinventoryloadout", "bis_fnc_showrespawnmenuinventorymetadata", "bis_fnc_showrespawnmenuposition", "bis_fnc_showrespawnmenupositionlist", "bis_fnc_showrespawnmenupositionmap", "bis_fnc_showrespawnmenupositionmapdraw", + "bis_fnc_showrespawnmenupositionmaphandle", "bis_fnc_showrespawnmenupositionmetadata", "bis_fnc_showrespawnmenupositionname", "bis_fnc_showrespawnmenupositionrefresh", "bis_fnc_showtime", "bis_fnc_showunitinfo", "bis_fnc_showwelcomescreen", "bis_fnc_shutdown", "bis_fnc_sidecolor", "bis_fnc_sideid", + "bis_fnc_sideisenemy", "bis_fnc_sideisfriendly", "bis_fnc_sidename", "bis_fnc_sidenameunlocalized", "bis_fnc_sidetype", "bis_fnc_simpleobjectdata", "bis_fnc_singlemissionconfig", "bis_fnc_singlemissionkeys", "bis_fnc_singlemissionname", "bis_fnc_singlewingslidedoorclose", "bis_fnc_singlewingslidedooropen", + "bis_fnc_skirmishtrigger", "bis_fnc_sortalphabetically", "bis_fnc_sortby", "bis_fnc_sortnum", "bis_fnc_spawn", "bis_fnc_spawncrew", "bis_fnc_spawnenemy", "bis_fnc_spawngroup", "bis_fnc_spawnobjects", "bis_fnc_spawnvehicle", "bis_fnc_splitstring", "bis_fnc_spotter", "bis_fnc_startloadingscreen", + "bis_fnc_startloadingscreen_ids", "bis_fnc_strategicmapanimate", "bis_fnc_strategicmapmousebuttonclick", "bis_fnc_strategicmapopen", "bis_fnc_subclasses", "bis_fnc_subselect", "bis_fnc_supplydrop", "bis_fnc_supplydropservice", "bis_fnc_swapvars", "bis_fnc_synchronizedobjects", "bis_fnc_target", + "bis_fnc_taskattack", "bis_fnc_taskchildren", "bis_fnc_taskcompleted", "bis_fnc_taskcreate", "bis_fnc_taskcurrent", "bis_fnc_taskdefend", "bis_fnc_taskdescription", "bis_fnc_taskdestination", "bis_fnc_taskexists", "bis_fnc_taskhandler", "bis_fnc_taskhint", "bis_fnc_taskparent", "bis_fnc_taskpatrol", + "bis_fnc_taskreal", "bis_fnc_tasksetcurrent", "bis_fnc_tasksetdescription", "bis_fnc_tasksetdestination", "bis_fnc_tasksetstate", "bis_fnc_taskstate", "bis_fnc_tasksunit", "bis_fnc_taskvar", "bis_fnc_teamcolor", "bis_fnc_terraingradangle", "bis_fnc_texttiles", "bis_fnc_texturemarker", + "bis_fnc_texturevehicleicon", "bis_fnc_threat", "bis_fnc_timetostring", "bis_fnc_titlecard", "bis_fnc_titletext", "bis_fnc_togglecuratorvisionmode", "bis_fnc_toupperdisplaytexts", "bis_fnc_tracebullets", "bis_fnc_trackmissiontime", "bis_fnc_transportservice", "bis_fnc_tridentclient", + "bis_fnc_tridentexecute", "bis_fnc_tridentgetrelationship", "bis_fnc_tridenthandledamage", "bis_fnc_tridentsetrelationship", "bis_fnc_triggertomarker", "bis_fnc_trimstring", "bis_fnc_twowingdooronehandleclose", "bis_fnc_twowingdooronehandleopen", "bis_fnc_twowingdoortwohandleclose", + "bis_fnc_twowingdoortwohandleopen", "bis_fnc_twowingslidedoorclose", "bis_fnc_twowingslidedooropen", "bis_fnc_typetext2", "bis_fnc_typetext", "bis_fnc_uniqueclasses", "bis_fnc_unitaddon", "bis_fnc_unitcapture", "bis_fnc_unitcapturefiring", "bis_fnc_unitcapturesimple", "bis_fnc_unitheadgear", + "bis_fnc_unitplay", "bis_fnc_unitplayfiring", "bis_fnc_unitplaysimple", "bis_fnc_unitvector", "bis_fnc_unpackstaticweapon", "bis_fnc_updateplayerarray", "bis_fnc_validateparametersoo", "bis_fnc_variablespaceadd", "bis_fnc_variablespaceremove", "bis_fnc_vectoradd", "bis_fnc_vectordiff", + "bis_fnc_vectorfromxtoy", "bis_fnc_vectormultiply", "bis_fnc_vehicleroles", "bis_fnc_version", "bis_fnc_versioninfo", "bis_fnc_vrcourseballistics1", "bis_fnc_vrcourseballistics2", "bis_fnc_vrcourseballistics3", "bis_fnc_vrcourseballistics4", "bis_fnc_vrcoursecommandingactions1", + "bis_fnc_vrcoursecommandingactions2", "bis_fnc_vrcoursecommandingactions3", "bis_fnc_vrcoursecommandingbehaviour1", "bis_fnc_vrcoursecommandingbehaviour2", "bis_fnc_vrcoursecommandingbehaviour3", "bis_fnc_vrcoursecommandingmovement1", "bis_fnc_vrcoursecommandingmovement2", + "bis_fnc_vrcoursecommandingvehicles1", "bis_fnc_vrcoursecommandingvehicles2", "bis_fnc_vrcoursecommandingvehicles3", "bis_fnc_vrcourseheliadvanced1", "bis_fnc_vrcourseheliadvanced2", "bis_fnc_vrcourseheliadvanced3", "bis_fnc_vrcourseheliadvanced4", "bis_fnc_vrcourseheliadvanced5", + "bis_fnc_vrcourseheliadvanced6", "bis_fnc_vrcoursehelibasics1", "bis_fnc_vrcoursehelibasics2", "bis_fnc_vrcoursehelibasics3", "bis_fnc_vrcoursehelislingload1", "bis_fnc_vrcourseheliweapons1", "bis_fnc_vrcourseheliweapons2", "bis_fnc_vrcourseheliweapons3", "bis_fnc_vrcourseheliweapons4", + "bis_fnc_vrcourselaunchers1", "bis_fnc_vrcourselaunchers2", "bis_fnc_vrcourselaunchers3", "bis_fnc_vrcourseplaceables1", "bis_fnc_vrcourseplaceables2", "bis_fnc_vrcourseplaceables3", "bis_fnc_vrcoursetargetdesignation1", "bis_fnc_vrcoursetargetdesignation2", "bis_fnc_vrcoursetargetdesignation3", + "bis_fnc_vrcourseweaponhandlinga1", "bis_fnc_vrcourseweaponhandlinga2", "bis_fnc_vrcourseweaponhandlinga3", "bis_fnc_vrcourseweaponhandlingb1", "bis_fnc_vrcourseweaponhandlingb2", "bis_fnc_vrcourseweaponhandlingb3", "bis_fnc_vrcourseweaponhandlingc1", "bis_fnc_vrcourseweaponhandlingc2", + "bis_fnc_vrdrawborder", "bis_fnc_vrdrawgrid", "bis_fnc_vreffectkilled", "bis_fnc_vrfadein", "bis_fnc_vrfadeout", "bis_fnc_vrhitpart", "bis_fnc_vrspawneffect", "bis_fnc_vrspawnselector", "bis_fnc_vrtimer", "bis_fnc_weaponaddon", "bis_fnc_weaponcomponents", "bis_fnc_worldarea", "bis_fnc_wpartillery", + "bis_fnc_wpland", "bis_fnc_wppatrol", "bis_fnc_wprelax", "bis_fnc_wpsuppress", "bis_fnc_zzrotate", "bis_taskmanagement_markers2d", "gui_fnc_exportdefine" + }; + + BIS_UI_Functions[] = { + "bis_displayinterrupt_isoptionsexpanded", "bis_fnc_3dcredits_meta", "bis_fnc_aan_meta", "bis_fnc_absspeed_meta", "bis_fnc_activateaddons_meta", "bis_fnc_addclassoo_meta", "bis_fnc_addcommmenuitem_meta", "bis_fnc_addcuratorareafromtrigger_meta", "bis_fnc_addcuratorchallenge_meta", + "bis_fnc_addcuratoricon_meta", "bis_fnc_addevidence_meta", "bis_fnc_addrespawninventory_meta", "bis_fnc_addrespawnposition_meta", "bis_fnc_addscore_meta", "bis_fnc_addscriptedeventhandler_meta", "bis_fnc_addstackedeventhandler_meta", "bis_fnc_addsupportlink_meta", "bis_fnc_addtopairs_meta", + "bis_fnc_addvirtualbackpackcargo_meta", "bis_fnc_addvirtualitemcargo_meta", "bis_fnc_addvirtualmagazinecargo_meta", "bis_fnc_addvirtualweaponcargo_meta", "bis_fnc_addweapon_meta", "bis_fnc_advhint_hinthandlers", "bis_fnc_advhint_meta", "bis_fnc_advhintarg_meta", "bis_fnc_advhintcall_meta", + "bis_fnc_advhintcredits_meta", "bis_fnc_aligntabs_meta", "bis_fnc_allsynchronizedobjects_meta", "bis_fnc_ambientanim_meta", "bis_fnc_ambientanimcombat_meta", "bis_fnc_ambientanimgetparams_meta", "bis_fnc_ambientblacklist_meta", "bis_fnc_ambientblacklistadd_meta", "bis_fnc_ambientboats_meta", + "bis_fnc_ambientflyby_meta", "bis_fnc_ambienthelicopters_meta", "bis_fnc_ambientplanes_meta", "bis_fnc_ambientpostprocess_meta", "bis_fnc_animalbehaviour_meta", "bis_fnc_animalsitespawn_meta", "bis_fnc_animatetaskwaypoint_meta", "bis_fnc_animtype_meta", "bis_fnc_animviewer_meta", "bis_fnc_areequal_meta", + "bis_fnc_arefriendly_meta", "bis_fnc_arithmeticmean_meta", "bis_fnc_arraycompare_meta", "bis_fnc_arrayfinddeep_meta", "bis_fnc_arrayinsert_meta", "bis_fnc_arraypop_meta", "bis_fnc_arraypush_meta", "bis_fnc_arraypushstack_meta", "bis_fnc_arrayshift_meta", "bis_fnc_arrayshuffle_meta", + "bis_fnc_arrayunshift_meta", "bis_fnc_arsenal_meta", "bis_fnc_assignplayerrole_meta", "bis_fnc_baseweapon_meta", "bis_fnc_basicbackpack_meta", "bis_fnc_basictask_meta", "bis_fnc_blackin_meta", "bis_fnc_blackout_meta", "bis_fnc_bleedtickets_meta", "bis_fnc_bloodeffect_meta", "bis_fnc_boundingboxcorner_meta", + "bis_fnc_boundingboxdimensions_meta", "bis_fnc_boundingboxmarker_meta", "bis_fnc_boundingcircle_meta", "bis_fnc_briefinganimate_meta", "bis_fnc_briefinginit_meta", "bis_fnc_buildingpositions_meta", "bis_fnc_call_meta", "bis_fnc_callscriptedeventhandler_meta", "bis_fnc_camera_meta", "bis_fnc_cameraold_meta", + "bis_fnc_camfollow_meta", "bis_fnc_cargoturretindex_meta", "bis_fnc_changesupportradiochannel_meta", "bis_fnc_cinemaborder_meta", "bis_fnc_classmagazine_meta", "bis_fnc_classweapon_meta", "bis_fnc_codeperformance_meta", "bis_fnc_colorconfigtorgba_meta", "bis_fnc_colorrgbatohtml_meta", + "bis_fnc_colorrgbatotexture_meta", "bis_fnc_colorrgbtohtml_meta", "bis_fnc_commsmenucreate_meta", "bis_fnc_commsmenutoggleavailability_meta", "bis_fnc_commsmenutogglevisibility_meta", "bis_fnc_completedcuratorchallengescount_meta", "bis_fnc_conditionalselect_meta", "bis_fnc_configextremes_meta", + "bis_fnc_configpath_meta", "bis_fnc_configviewer_meta", "bis_fnc_consolidatearray_meta", "bis_fnc_convertunits_meta", "bis_fnc_countdown_meta", "bis_fnc_counter_meta", "bis_fnc_createlogrecord_meta", "bis_fnc_createmenu_meta", "bis_fnc_createobjectoo_meta", "bis_fnc_credits_meta", "bis_fnc_credits_movie_meta", + "bis_fnc_credits_movieconfig_meta", "bis_fnc_credits_moviesupport_meta", "bis_fnc_crewcount_meta", "bis_fnc_crossproduct_meta", "bis_fnc_crows_meta", "bis_fnc_ctrlfittotextheight_meta", "bis_fnc_ctrlsetscale_meta", "bis_fnc_ctrltextheight_meta", "bis_fnc_curatorattachobject_meta", + "bis_fnc_curatorattributes_meta", "bis_fnc_curatorautomatic_meta", "bis_fnc_curatorautomaticpositions_meta", "bis_fnc_curatorchallengedestroyvehicle_meta", "bis_fnc_curatorchallengefindintel_meta", "bis_fnc_curatorchallengefireweapon_meta", "bis_fnc_curatorchallengegetinvehicle_meta", + "bis_fnc_curatorchallengeilluminate_meta", "bis_fnc_curatorchallengespawnlightning_meta", "bis_fnc_curatorhint_meta", "bis_fnc_curatorobjectedited_meta", "bis_fnc_curatorobjectplaced_meta", "bis_fnc_curatorobjectregistered_meta", "bis_fnc_curatorobjectregisteredtable_meta", "bis_fnc_curatorpinged_meta", + "bis_fnc_curatorrespawn_meta", "bis_fnc_curatorsaymessage_meta", "bis_fnc_curatorvisionmodes_meta", "bis_fnc_curatorwaypointplaced_meta", "bis_fnc_customgps_meta", "bis_fnc_customgpsvideo_meta", "bis_fnc_cutdecimals_meta", "bis_fnc_damagechanged_meta", "bis_fnc_damagepulsing_meta", "bis_fnc_dbclasscheck_meta", + "bis_fnc_dbclassid_meta", "bis_fnc_dbclassindex_meta", "bis_fnc_dbclasslist_meta", "bis_fnc_dbclassremove_meta", "bis_fnc_dbclassreturn_meta", "bis_fnc_dbclassset_meta", "bis_fnc_dbconfigpath_meta", "bis_fnc_dbimportconfig_meta", "bis_fnc_dbimportxml_meta", "bis_fnc_dbisclass_meta", "bis_fnc_dbisvalue_meta", + "bis_fnc_dbprint_meta", "bis_fnc_dbsymbolclass_meta", "bis_fnc_dbsymbolvalue_meta", "bis_fnc_dbvaluecheck_meta", "bis_fnc_dbvalueid_meta", "bis_fnc_dbvalueindex_meta", "bis_fnc_dbvaluelist_meta", "bis_fnc_dbvalueremove_meta", "bis_fnc_dbvaluereturn_meta", "bis_fnc_dbvalueset_meta", "bis_fnc_deleteinventory_meta", + "bis_fnc_deletetask_meta", "bis_fnc_deletevehiclecrew_meta", "bis_fnc_destroycity_meta", "bis_fnc_diagaar_meta", "bis_fnc_diagaarrecord_meta", "bis_fnc_diaganim_meta", "bis_fnc_diagbulletcam_meta", "bis_fnc_diagconfig_meta", "bis_fnc_diagfindmissingauthors_meta", "bis_fnc_diaghit_meta", + "bis_fnc_diagjiralink_meta", "bis_fnc_diagkey_meta", "bis_fnc_diagkeylayout_meta", "bis_fnc_diagkeytest_meta", "bis_fnc_diagknownastarget_meta", "bis_fnc_diagknowntargets_meta", "bis_fnc_diagloop_meta", "bis_fnc_diagmacros_meta", "bis_fnc_diagmacrosauthor_meta", "bis_fnc_diagmacrosmapsize_meta", + "bis_fnc_diagmacrosnamesound_meta", "bis_fnc_diagmacrosverify_meta", "bis_fnc_diagmissionpositions_meta", "bis_fnc_diagmissionweapons_meta", "bis_fnc_diagpreview_meta", "bis_fnc_diagpreviewcycle_meta", "bis_fnc_diagpreviewvehiclecrew_meta", "bis_fnc_diagradio_meta", "bis_fnc_diagvehicleicons_meta", + "bis_fnc_diagwiki_meta", "bis_fnc_diaryhints_meta", "bis_fnc_diarymaps_meta", "bis_fnc_didjip_meta", "bis_fnc_dirindicator_meta", "bis_fnc_dirteffect_meta", "bis_fnc_dirto_meta", "bis_fnc_disableloading_meta", "bis_fnc_disablesaving_meta", "bis_fnc_displayclouds_meta", "bis_fnc_displaycolorget_meta", + "bis_fnc_displaycolorset_meta", "bis_fnc_displaycontrols_meta", "bis_fnc_displayloading_meta", "bis_fnc_displaymission_meta", "bis_fnc_displayname_meta", "bis_fnc_displayresize_meta", "bis_fnc_distance2d_meta", "bis_fnc_distance2dsqr_meta", "bis_fnc_dotproduct_meta", "bis_fnc_drawao_meta", + "bis_fnc_drawcuratordeaths_meta", "bis_fnc_drawcuratorlocations_meta", "bis_fnc_drawcuratorrespawnmarkers_meta", "bis_fnc_drawminefields_meta", "bis_fnc_drawrespawnpositions_meta", "bis_fnc_dynamictext_meta", "bis_fnc_earthquake_meta", "bis_fnc_effectfired_meta", "bis_fnc_effectfiredartillery_meta", + "bis_fnc_effectfiredflares_meta", "bis_fnc_effectfiredhelirocket_meta", "bis_fnc_effectfiredlongsmoke_meta", "bis_fnc_effectfiredrifle_meta", "bis_fnc_effectfiredrocket_meta", "bis_fnc_effectfiredsmokelauncher_boat_meta", "bis_fnc_effectfiredsmokelauncher_meta", "bis_fnc_effectkilled_meta", + "bis_fnc_effectkilledairdestruction_meta", "bis_fnc_effectkilledairdestructionstage2_meta", "bis_fnc_effectkilledsecondaries_meta", "bis_fnc_effectplankton_meta", "bis_fnc_enablesaving_meta", "bis_fnc_endloadingscreen_meta", "bis_fnc_endmission_meta", "bis_fnc_endmissionserver_meta", "bis_fnc_enemydetected_meta", + "bis_fnc_enemysides_meta", "bis_fnc_enemytargets_meta", "bis_fnc_error_meta", "bis_fnc_errormsg_meta", "bis_fnc_establishingshot_meta", "bis_fnc_estimatedtimeleft_meta", "bis_fnc_execfsm_meta", "bis_fnc_executestackedeventhandler_meta", "bis_fnc_execvm_meta", "bis_fnc_exportcfggroups_meta", + "bis_fnc_exportcfghints_meta", "bis_fnc_exportcfgmagazines_meta", "bis_fnc_exportcfgpatches_meta", "bis_fnc_exportcfgvehicles_meta", "bis_fnc_exportcfgweapons_meta", "bis_fnc_exportcuratorcosttable_meta", "bis_fnc_exportfunctionstowiki_meta", "bis_fnc_exportgroupformations_meta", "bis_fnc_exportinventory_meta", + "bis_fnc_exportmaptobitxt_meta", "bis_fnc_fadeeffect_meta", "bis_fnc_fatigueeffect_meta", "bis_fnc_feedbackinit_meta", "bis_fnc_feedbackmain_meta", "bis_fnc_ffvupdate_meta", "bis_fnc_filterstring_meta", "bis_fnc_findextreme_meta", "bis_fnc_findinpairs_meta", "bis_fnc_findnestedelement_meta", + "bis_fnc_findoverwatch_meta", "bis_fnc_findsafepos_meta", "bis_fnc_finishcuratorchallenge_meta", "bis_fnc_fixdate_meta", "bis_fnc_flameseffect_meta", "bis_fnc_flies_meta", "bis_fnc_forcecuratorinterface_meta", "bis_fnc_forceend_meta", "bis_fnc_formatcuratorchallengeobjects_meta", "bis_fnc_fps_meta", + "bis_fnc_friendlysides_meta", "bis_fnc_ftlmanager_meta", "bis_fnc_functionmeta_meta", "bis_fnc_functionpath_meta", "bis_fnc_functionsdebug_meta", "bis_fnc_gc_meta", "bis_fnc_gcinit_meta", "bis_fnc_genericsentence_meta", "bis_fnc_genericsentenceinit_meta", "bis_fnc_geometricmean_meta", "bis_fnc_getcfgdata_meta", + "bis_fnc_getcfgdataarray_meta", "bis_fnc_getcfgdatabool_meta", "bis_fnc_getcfgdataobject_meta", "bis_fnc_getcfgdatapool_meta", "bis_fnc_getcfgisclass_meta", "bis_fnc_getcfgsubclasses_meta", "bis_fnc_getfactions_meta", "bis_fnc_getfrompairs_meta", "bis_fnc_getidc_meta", "bis_fnc_getidd_meta", + "bis_fnc_getlinedist_meta", "bis_fnc_getparamvalue_meta", "bis_fnc_getpitchbank_meta", "bis_fnc_getrespawninventories_meta", "bis_fnc_getrespawnmarkers_meta", "bis_fnc_getrespawnpositions_meta", "bis_fnc_getservervariable_meta", "bis_fnc_getturrets_meta", "bis_fnc_getunitbyuid_meta", "bis_fnc_getunitinsignia_meta", + "bis_fnc_getvirtualbackpackcargo_meta", "bis_fnc_getvirtualitemcargo_meta", "bis_fnc_getvirtualmagazinecargo_meta", "bis_fnc_getvirtualweaponcargo_meta", "bis_fnc_greatestnum_meta", "bis_fnc_gridtopos_meta", "bis_fnc_groupindicator_meta", "bis_fnc_groupvehicles_meta", "bis_fnc_guibackground_meta", + "bis_fnc_guieditor_meta", "bis_fnc_guieffecttiles_alpha", "bis_fnc_guieffecttiles_coef", "bis_fnc_guieffecttiles_meta", "bis_fnc_guigrid_meta", "bis_fnc_guigridtoprofile_meta", "bis_fnc_guihint_meta", "bis_fnc_guimessage_meta", "bis_fnc_guinewsfeed_meta", "bis_fnc_halo_meta", "bis_fnc_halt_meta", + "bis_fnc_healing_meta", "bis_fnc_healtheffects_meta", "bis_fnc_helicoptercanfly_meta", "bis_fnc_helicopterdamage_meta", "bis_fnc_helicoptergethitpoints_meta", "bis_fnc_helicopterseat_meta", "bis_fnc_helicopterseatmove_meta", "bis_fnc_helicoptertype_meta", "bis_fnc_help_meta", "bis_fnc_hudlimits_meta", + "bis_fnc_importimagelinks_meta", "bis_fnc_inanglesector_meta", "bis_fnc_incapacitatedeffect_meta", "bis_fnc_indicatebleeding_meta", "bis_fnc_infotext_meta", "bis_fnc_initcuratorattribute_meta", "bis_fnc_initdisplay_meta", "bis_fnc_initdisplays_meta", "bis_fnc_initdisplays_prestart", "bis_fnc_initexpo_meta", + "bis_fnc_initintelobject_meta", "bis_fnc_initmodules_meta", "bis_fnc_initmultiplayer_meta", "bis_fnc_initparams_meta", "bis_fnc_initplayable_meta", "bis_fnc_initrespawn_meta", "bis_fnc_initrespawnbackpack_meta", "bis_fnc_initvirtualunit_meta", "bis_fnc_instring_meta", "bis_fnc_instructorfigure_meta", + "bis_fnc_interpolateweather_meta", "bis_fnc_intrigger_meta", "bis_fnc_inv_meta", "bis_fnc_invadd_meta", "bis_fnc_invcodetoarray_meta", "bis_fnc_invremove_meta", "bis_fnc_invslots_meta", "bis_fnc_invslotsempty_meta", "bis_fnc_invslottype_meta", "bis_fnc_invstring_meta", "bis_fnc_isbuildingenterable_meta", + "bis_fnc_iscampaign_meta", "bis_fnc_iscurator_meta", "bis_fnc_iscuratoreditable_meta", "bis_fnc_isdemo_meta", "bis_fnc_isforcedcuratorinterface_meta", "bis_fnc_isinfrontof_meta", "bis_fnc_isinsidearea_meta", "bis_fnc_isinzoom_meta", "bis_fnc_isleapyear_meta", "bis_fnc_isloading_meta", "bis_fnc_islocalized_meta", + "bis_fnc_isposblacklisted_meta", "bis_fnc_isunitvirtual_meta", "bis_fnc_itemtype_meta", "bis_fnc_jukebox_meta", "bis_fnc_kbcanspeak_meta", "bis_fnc_kbcreatedummy_meta", "bis_fnc_kbisspeaking_meta", "bis_fnc_kbmenu_meta", "bis_fnc_kbpriority_meta", "bis_fnc_kbsentence_meta", "bis_fnc_kbskip_meta", "bis_fnc_kbtell_meta", + "bis_fnc_kbtelllocal_meta", "bis_fnc_kbtopicconfig_meta", "bis_fnc_keycode_meta", "bis_fnc_keypointsexport_meta", "bis_fnc_keypointsexportfromkml_meta", "bis_fnc_kmlimport_meta", "bis_fnc_limitsupport_meta", "bis_fnc_linearconversion_meta", "bis_fnc_listcuratorplayers_meta", "bis_fnc_listplayers_meta", + "bis_fnc_livefeed_meta", "bis_fnc_livefeedeffects_meta", "bis_fnc_livefeedmoduleeffects_meta", "bis_fnc_livefeedmoduleinit_meta", "bis_fnc_livefeedmodulesetsource_meta", "bis_fnc_livefeedmodulesettarget_meta", "bis_fnc_livefeedsetsource_meta", "bis_fnc_livefeedsettarget_meta", "bis_fnc_livefeedterminate_meta", + "bis_fnc_loadclass_meta", "bis_fnc_loadentry_meta", "bis_fnc_loadfunctions_meta", "bis_fnc_loadinventory_meta", "bis_fnc_localize_meta", "bis_fnc_locationdescription_meta", "bis_fnc_locations_meta", "bis_fnc_locweaponinfo_meta", "bis_fnc_log_meta", "bis_fnc_logformat_meta", "bis_fnc_loop_meta", "bis_fnc_lowestnum_meta", + "bis_fnc_magnitude_meta", "bis_fnc_magnitudesqr_meta", "bis_fnc_managecuratoraddons_meta", "bis_fnc_managecuratorchallenges_meta", "bis_fnc_mapsize_meta", "bis_fnc_markercreate_meta", "bis_fnc_markerparams_meta", "bis_fnc_markerpath_meta", "bis_fnc_markertotrigger_meta", "bis_fnc_markwaypoints_meta", + "bis_fnc_maxdiffarray_meta", "bis_fnc_mirrorcuratorsettings_meta", "bis_fnc_miscanim_meta", "bis_fnc_missilelaunchpositionfix_meta", "bis_fnc_missionconversations_meta", "bis_fnc_missionconversationslocal_meta", "bis_fnc_missionflow_meta", "bis_fnc_missionhandlers_meta", "bis_fnc_missionrespawntype_meta", + "bis_fnc_missiontasks_meta", "bis_fnc_missiontaskslocal_meta", "bis_fnc_missiontimeleft_meta", "bis_fnc_moduleai_meta", "bis_fnc_moduleammo_meta", "bis_fnc_moduleanimals_meta", "bis_fnc_modulearsenal_meta", "bis_fnc_modulebleedtickets_meta", "bis_fnc_modulebootcampstage_meta", "bis_fnc_modulecas_meta", + "bis_fnc_modulechat_meta", "bis_fnc_modulecombatgetin_meta", "bis_fnc_modulecountdown_meta", "bis_fnc_modulecovermap_meta", "bis_fnc_modulecreatediaryrecord_meta", "bis_fnc_modulecreateprojectile_meta", "bis_fnc_modulecurator_meta", "bis_fnc_modulecuratoraddaddons_meta", "bis_fnc_modulecuratoraddcameraarea_meta", + "bis_fnc_modulecuratoraddeditableobjects_meta", "bis_fnc_modulecuratoraddeditingarea_meta", "bis_fnc_modulecuratoraddeditingareaplayers_meta", "bis_fnc_modulecuratoraddicon_meta", "bis_fnc_modulecuratoraddpoints_meta", "bis_fnc_modulecuratorsetattributes_meta", "bis_fnc_modulecuratorsetcamera_meta", + "bis_fnc_modulecuratorsetcoefs_meta", "bis_fnc_modulecuratorsetcostsdefault_meta", "bis_fnc_modulecuratorsetcostsside_meta", "bis_fnc_modulecuratorsetcostsvehicleclass_meta", "bis_fnc_modulecuratorseteditingareatype_meta", "bis_fnc_modulecuratorsetobjectcost_meta", "bis_fnc_moduledamage_meta", + "bis_fnc_moduledate_meta", "bis_fnc_modulediary_meta", "bis_fnc_moduledooropen_meta", "bis_fnc_moduleeffectsbubbles_meta", "bis_fnc_moduleeffectsemittercreator_meta", "bis_fnc_moduleeffectsfire_meta", "bis_fnc_moduleeffectsplankton_meta", "bis_fnc_moduleeffectsshells_meta", "bis_fnc_moduleeffectssmoke_meta", + "bis_fnc_moduleendmission_meta", "bis_fnc_moduleexecute_meta", "bis_fnc_modulefdcpclear_meta", "bis_fnc_modulefdcpin_meta", "bis_fnc_modulefdcpout_meta", "bis_fnc_modulefdfademarker_meta", "bis_fnc_modulefdskeetdestruction_meta", "bis_fnc_modulefdstatsclear_meta", "bis_fnc_modulefiringdrill_meta", + "bis_fnc_modulefriendlyfire_meta", "bis_fnc_modulefuel_meta", "bis_fnc_modulegenericradio_meta", "bis_fnc_modulegroupid_meta", "bis_fnc_modulehandle_meta", "bis_fnc_modulehealth_meta", "bis_fnc_modulehint_meta", "bis_fnc_modulehq_meta", "bis_fnc_moduleinit_meta", "bis_fnc_modulelightning_meta", + "bis_fnc_modulemine_meta", "bis_fnc_modulemissionname_meta", "bis_fnc_modulemode_meta", "bis_fnc_modulemodules_meta", "bis_fnc_modulemptypedefense_meta", "bis_fnc_modulemptypegamemaster_meta", "bis_fnc_modulemptypegroundsupport_meta", "bis_fnc_modulemptypegroundsupportbase_meta", + "bis_fnc_modulemptypesectorcontrol_meta", "bis_fnc_modulemptypeseize_meta", "bis_fnc_moduleobjective_meta", "bis_fnc_moduleobjectivefind_meta", "bis_fnc_moduleobjectivegetin_meta", "bis_fnc_moduleobjectivemove_meta", "bis_fnc_moduleobjectiveracecp_meta", "bis_fnc_moduleobjectiveracefinish_meta", + "bis_fnc_moduleobjectiveracestart_meta", "bis_fnc_moduleobjectivesector_meta", "bis_fnc_moduleobjectivetarget_meta", "bis_fnc_modulepositioning_meta", "bis_fnc_moduleposter_meta", "bis_fnc_modulepostprocess_meta", "bis_fnc_moduleprojectile_meta", "bis_fnc_modulepunishment_meta", "bis_fnc_moduleradiochannelcreate_meta", + "bis_fnc_modulerank_meta", "bis_fnc_modulerating_meta", "bis_fnc_moduleremotecontrol_meta", "bis_fnc_modulerespawninventory_meta", "bis_fnc_modulerespawnposition_meta", "bis_fnc_modulerespawntickets_meta", "bis_fnc_modulerespawnvehicle_meta", "bis_fnc_modulesavegame_meta", "bis_fnc_modulesector_meta", + "bis_fnc_modulesfx_meta", "bis_fnc_moduleshowhide_meta", "bis_fnc_modulesimulationmanager_meta", "bis_fnc_moduleskill_meta", "bis_fnc_moduleskiptime_meta", "bis_fnc_moduleslingload_meta", "bis_fnc_modulesound_meta", "bis_fnc_modulespawnai_meta", "bis_fnc_modulespawnaioptions_meta", "bis_fnc_modulespawnaipoint_meta", + "bis_fnc_modulespawnaisectortactic_meta", "bis_fnc_modulestrategicmapimage_meta", "bis_fnc_modulestrategicmapinit_meta", "bis_fnc_modulestrategicmapmission_meta", "bis_fnc_modulestrategicmapopen_meta", "bis_fnc_modulestrategicmaporbat_meta", "bis_fnc_moduletaskcreate_meta", "bis_fnc_moduletasksetdescription_meta", + "bis_fnc_moduletasksetdestination_meta", "bis_fnc_moduletasksetstate_meta", "bis_fnc_moduletimemultiplier_meta", "bis_fnc_moduletimetrial_meta", "bis_fnc_moduletracers_meta", "bis_fnc_moduletrident_meta", "bis_fnc_moduletriggers_meta", "bis_fnc_modulettcpclear_meta", "bis_fnc_modulettcpin_meta", + "bis_fnc_modulettcpout_meta", "bis_fnc_modulettcptrigger_meta", "bis_fnc_modulettcptriggerbehind_meta", "bis_fnc_modulettstatsclear_meta", "bis_fnc_moduleunits_meta", "bis_fnc_moduleunlockarea_meta", "bis_fnc_moduleunlockobject_meta", "bis_fnc_modulevolume_meta", "bis_fnc_moduleweather_meta", + "bis_fnc_modulezoneprotection_meta", "bis_fnc_modulezonerestriction_meta", "bis_fnc_monthdays_meta", "bis_fnc_moveaction_meta", "bis_fnc_movein_meta", "bis_fnc_movetorespawnposition_meta", "bis_fnc_mpexec_meta", "bis_fnc_music_meta", "bis_fnc_nearesthelipad_meta", "bis_fnc_nearestnum_meta", "bis_fnc_nearestposition_meta", + "bis_fnc_nearestroad_meta", "bis_fnc_neutralizeunit_meta", "bis_fnc_noflyzone_meta", "bis_fnc_noflyzonescreate_meta", "bis_fnc_noflyzonesexport_meta", "bis_fnc_numberdigits_meta", "bis_fnc_numbertext_meta", "bis_fnc_objectheight_meta", "bis_fnc_objectsgrabber_meta", "bis_fnc_objectside_meta", "bis_fnc_objectsmapper_meta", + "bis_fnc_objecttype_meta", "bis_fnc_objectvar_meta", "bis_fnc_ondiarychanged_meta", "bis_fnc_onend_meta", "bis_fnc_onload_meta", "bis_fnc_onplayerconnected_meta", "bis_fnc_openfieldmanual_meta", "bis_fnc_orbataddgroupoverlay_meta", "bis_fnc_orbatanimate_meta", "bis_fnc_orbatconfigpreview_meta", + "bis_fnc_orbatgetgroupparams_meta", "bis_fnc_orbatopen_meta", "bis_fnc_orbatremovegroupoverlay_meta", "bis_fnc_orbatsetgroupfade_meta", "bis_fnc_orbatsetgroupparams_meta", "bis_fnc_orbattooltip_meta", "bis_fnc_ordinalnumber_meta", "bis_fnc_overviewauthor_meta", "bis_fnc_overviewdifficulty_meta", + "bis_fnc_overviewmission_meta", "bis_fnc_overviewterrain_meta", "bis_fnc_overviewtimetrial_meta", "bis_fnc_packstaticweapon_meta", "bis_fnc_param_meta", "bis_fnc_paramcountdown_meta", "bis_fnc_paramdaytime_meta", "bis_fnc_paramguerfriendly_meta", "bis_fnc_paramin_meta", "bis_fnc_paramrespawntickets_meta", + "bis_fnc_paramviewdistance_meta", "bis_fnc_paramweather_meta", "bis_fnc_parsenumber_meta", "bis_fnc_phoneticalword_meta", "bis_fnc_pip_meta", "bis_fnc_playendmusic_meta", "bis_fnc_playername_meta", "bis_fnc_playersidefaction_meta", "bis_fnc_playmusic_meta", "bis_fnc_playsound_meta", "bis_fnc_playvideo_meta", + "bis_fnc_posdegtoutm_meta", "bis_fnc_posdegtoworld_meta", "bis_fnc_position_meta", "bis_fnc_postogrid_meta", "bis_fnc_posutmtodeg_meta", "bis_fnc_preload_meta", "bis_fnc_prepareao_meta", "bis_fnc_progressloadingscreen_meta", "bis_fnc_quotations_meta", "bis_fnc_radialred_meta", "bis_fnc_radialredout_meta", + "bis_fnc_radiosetchannel_meta", "bis_fnc_radiosetplaylist_meta", "bis_fnc_radiosettrack_meta", "bis_fnc_randomindex_meta", "bis_fnc_randomint_meta", "bis_fnc_randomnum_meta", "bis_fnc_randompos_meta", "bis_fnc_randompostrigger_meta", "bis_fnc_rankparams_meta", "bis_fnc_recompile_meta", "bis_fnc_refreshcommmenu_meta", + "bis_fnc_registercuratorobject_meta", "bis_fnc_relativedirto_meta", "bis_fnc_relpos_meta", "bis_fnc_relposobject_meta", "bis_fnc_relscaleddist_meta", "bis_fnc_removeallscriptedeventhandlers_meta", "bis_fnc_removecommmenuitem_meta", "bis_fnc_removecuratoricon_meta", "bis_fnc_removedestroyedcuratoreditableobjects_meta", + "bis_fnc_removefrompairs_meta", "bis_fnc_removeindex_meta", "bis_fnc_removenestedelement_meta", "bis_fnc_removerespawninventory_meta", "bis_fnc_removerespawnposition_meta", "bis_fnc_removescriptedeventhandler_meta", "bis_fnc_removestackedeventhandler_meta", "bis_fnc_removesupportlink_meta", + "bis_fnc_removevirtualbackpackcargo_meta", "bis_fnc_removevirtualitemcargo_meta", "bis_fnc_removevirtualmagazinecargo_meta", "bis_fnc_removevirtualweaponcargo_meta", "bis_fnc_respawnbase_meta", "bis_fnc_respawnconfirm_meta", "bis_fnc_respawncounter_meta", "bis_fnc_respawnendmission_meta", "bis_fnc_respawngroup_meta", + "bis_fnc_respawninstant_meta", "bis_fnc_respawnmanager_meta", "bis_fnc_respawnmenuinventory_meta", "bis_fnc_respawnmenuposition_meta", "bis_fnc_respawnmenuspectator_meta", "bis_fnc_respawnnone_meta", "bis_fnc_respawnrounds_meta", "bis_fnc_respawnseagull_meta", "bis_fnc_respawnside_meta", "bis_fnc_respawnspectator_meta", + "bis_fnc_respawntickets_meta", "bis_fnc_respawntimepenalty_meta", "bis_fnc_respawnwave_meta", "bis_fnc_respect_meta", "bis_fnc_returnchildren_meta", "bis_fnc_returnconfigentry_meta", "bis_fnc_returngroupcomposition_meta", "bis_fnc_returnnestedelement_meta", "bis_fnc_returnparents_meta", + "bis_fnc_returnvehicleturrets_meta", "bis_fnc_romannumeral_meta", "bis_fnc_rotatevector2d_meta", "bis_fnc_rounddir_meta", "bis_fnc_roundnum_meta", "bis_fnc_rsclayer_meta", "bis_fnc_runlater_meta", "bis_fnc_sandstorm_meta", "bis_fnc_savegame_meta", "bis_fnc_saveinventory_meta", "bis_fnc_saymessage_meta", + "bis_fnc_sceneareaclearance_meta", "bis_fnc_scenecheckweapons_meta", "bis_fnc_scenecreatescenetrigger_meta", "bis_fnc_scenecreatesoundentities_meta", "bis_fnc_scenegetobjects_meta", "bis_fnc_scenegetparticipants_meta", "bis_fnc_scenegetpositionbyangle_meta", "bis_fnc_sceneintruderdetector_meta", + "bis_fnc_scenemiscstuff_meta", "bis_fnc_scenerotate_meta", "bis_fnc_scenesetanimationsforgroup_meta", "bis_fnc_scenesetbehaviour_meta", "bis_fnc_scenesetobjects_meta", "bis_fnc_scenesetposformation_meta", "bis_fnc_scriptedmove_meta", "bis_fnc_scriptedwaypointtype_meta", "bis_fnc_secondstostring_meta", + "bis_fnc_selectcrew_meta", "bis_fnc_selectdiarysubject_meta", "bis_fnc_selectrandom_meta", "bis_fnc_selectrandomweighted_meta", "bis_fnc_selectrespawntemplate_meta", "bis_fnc_setcuratorattributes_meta", "bis_fnc_setcuratorcamera_meta", "bis_fnc_setcuratorvisionmodes_meta", "bis_fnc_setdate_meta", "bis_fnc_setfog_meta", + "bis_fnc_setheight_meta", "bis_fnc_setidcstreamfriendly_meta", "bis_fnc_setidentity_meta", "bis_fnc_setmissionstatusslot_meta", "bis_fnc_setnestedelement_meta", "bis_fnc_setobjectrotation_meta", "bis_fnc_setobjecttexture_meta", "bis_fnc_setovercast_meta", "bis_fnc_setpitchbank_meta", "bis_fnc_setppeffecttemplate_meta", + "bis_fnc_setrank_meta", "bis_fnc_setrespawndelay_meta", "bis_fnc_setrespawninventory_meta", "bis_fnc_setservervariable_meta", "bis_fnc_settask_meta", "bis_fnc_settasklocal_meta", "bis_fnc_settopairs_meta", "bis_fnc_setunitinsignia_meta", "bis_fnc_shakecuratorcamera_meta", "bis_fnc_shakegauges_meta", + "bis_fnc_showcuratorattributes_meta", "bis_fnc_showcuratorfeedbackmessage_meta", "bis_fnc_showmarkers_meta", "bis_fnc_showmissionstatus_meta", "bis_fnc_shownotification_meta", "bis_fnc_showrespawnmenu_meta", "bis_fnc_showtime_meta", "bis_fnc_showunitinfo_meta", "bis_fnc_shutdown_meta", "bis_fnc_sidecolor_meta", + "bis_fnc_sideid_meta", "bis_fnc_sidename_meta", "bis_fnc_sidetype_meta", "bis_fnc_singlemissionconfig_meta", "bis_fnc_singlemissionkeys_meta", "bis_fnc_singlemissionname_meta", "bis_fnc_skirmishtrigger_meta", "bis_fnc_sortalphabetically_meta", "bis_fnc_sortby_meta", "bis_fnc_sortnum_meta", "bis_fnc_spawn_meta", + "bis_fnc_spawncrew_meta", "bis_fnc_spawnenemy_meta", "bis_fnc_spawngroup_meta", "bis_fnc_spawnobjects_meta", "bis_fnc_spawnvehicle_meta", "bis_fnc_splitstring_meta", "bis_fnc_spotter_meta", "bis_fnc_startloadingscreen_meta", "bis_fnc_strategicmapanimate_meta", "bis_fnc_strategicmapmousebuttonclick_meta", + "bis_fnc_strategicmapopen_meta", "bis_fnc_subclasses_meta", "bis_fnc_subselect_meta", "bis_fnc_supplydrop_meta", "bis_fnc_supplydropservice_meta", "bis_fnc_swapvars_meta", "bis_fnc_synchronizedobjects_meta", "bis_fnc_target_meta", "bis_fnc_taskattack_meta", "bis_fnc_taskchildren_meta", "bis_fnc_taskcompleted_meta", + "bis_fnc_taskcreate_meta", "bis_fnc_taskcurrent_meta", "bis_fnc_taskdefend_meta", "bis_fnc_taskdescription_meta", "bis_fnc_taskdestination_meta", "bis_fnc_taskexists_meta", "bis_fnc_taskhandler_meta", "bis_fnc_taskhint_meta", "bis_fnc_taskparent_meta", "bis_fnc_taskpatrol_meta", "bis_fnc_taskreal_meta", + "bis_fnc_tasksetcurrent_meta", "bis_fnc_tasksetdescription_meta", "bis_fnc_tasksetdestination_meta", "bis_fnc_tasksetstate_meta", "bis_fnc_taskstate_meta", "bis_fnc_tasksunit_meta", "bis_fnc_taskvar_meta", "bis_fnc_teamcolor_meta", "bis_fnc_terraingradangle_meta", "bis_fnc_texttiles_meta", "bis_fnc_texturemarker_meta", + "bis_fnc_texturevehicleicon_meta", "bis_fnc_threat_meta", "bis_fnc_timetostring_meta", "bis_fnc_titlecard_meta", "bis_fnc_titletext_meta", "bis_fnc_togglecuratorvisionmode_meta", "bis_fnc_toupperdisplaytexts_meta", "bis_fnc_tracebullets_meta", "bis_fnc_trackmissiontime_meta", "bis_fnc_transportservice_meta", "bis_fnc_tridentclient_meta", + "bis_fnc_tridentexecute_meta", "bis_fnc_tridentgetrelationship_meta", "bis_fnc_tridenthandledamage_meta", "bis_fnc_tridentsetrelationship_meta", "bis_fnc_triggertomarker_meta", "bis_fnc_trimstring_meta", "bis_fnc_typetext2_meta", "bis_fnc_typetext_meta", "bis_fnc_uniqueclasses_meta", "bis_fnc_unitaddon_meta", "bis_fnc_unitcapture_meta", + "bis_fnc_unitcapturefiring_meta", "bis_fnc_unitcapturesimple_meta", "bis_fnc_unitplay_meta", "bis_fnc_unitplayfiring_meta", "bis_fnc_unitplaysimple_meta", "bis_fnc_unitvector_meta", "bis_fnc_unpackstaticweapon_meta", "bis_fnc_updateplayerarray_meta", "bis_fnc_validateparametersoo_meta", "bis_fnc_variablespaceadd_meta", + "bis_fnc_variablespaceremove_meta", "bis_fnc_vectoradd_meta", "bis_fnc_vectordiff_meta", "bis_fnc_vectorfromxtoy_meta", "bis_fnc_vectormultiply_meta", "bis_fnc_vehicleroles_meta", "bis_fnc_version_meta", "bis_fnc_vrcourseballistics1_meta", "bis_fnc_vrcourseballistics2_meta", "bis_fnc_vrcourseballistics3_meta", + "bis_fnc_vrcourseballistics4_meta", "bis_fnc_vrcoursecommandingactions1_meta", "bis_fnc_vrcoursecommandingactions2_meta", "bis_fnc_vrcoursecommandingactions3_meta", "bis_fnc_vrcoursecommandingbehaviour1_meta", "bis_fnc_vrcoursecommandingbehaviour2_meta", "bis_fnc_vrcoursecommandingbehaviour3_meta", + "bis_fnc_vrcoursecommandingmovement1_meta", "bis_fnc_vrcoursecommandingmovement2_meta", "bis_fnc_vrcoursecommandingvehicles1_meta", "bis_fnc_vrcoursecommandingvehicles2_meta", "bis_fnc_vrcoursecommandingvehicles3_meta", "bis_fnc_vrcourseheliadvanced1_meta", "bis_fnc_vrcourseheliadvanced2_meta", "bis_fnc_vrcourseheliadvanced3_meta", + "bis_fnc_vrcourseheliadvanced4_meta", "bis_fnc_vrcourseheliadvanced5_meta", "bis_fnc_vrcourseheliadvanced6_meta", "bis_fnc_vrcoursehelibasics1_meta", "bis_fnc_vrcoursehelibasics2_meta", "bis_fnc_vrcoursehelibasics3_meta", "bis_fnc_vrcoursehelislingload1_meta", "bis_fnc_vrcourseheliweapons1_meta", "bis_fnc_vrcourseheliweapons2_meta", + "bis_fnc_vrcourseheliweapons3_meta", "bis_fnc_vrcourseheliweapons4_meta", "bis_fnc_vrcourselaunchers1_meta", "bis_fnc_vrcourselaunchers2_meta", "bis_fnc_vrcourselaunchers3_meta", "bis_fnc_vrcourseplaceables1_meta", "bis_fnc_vrcourseplaceables2_meta", "bis_fnc_vrcourseplaceables3_meta", "bis_fnc_vrcoursetargetdesignation1_meta", + "bis_fnc_vrcoursetargetdesignation2_meta", "bis_fnc_vrcoursetargetdesignation3_meta", "bis_fnc_vrdrawborder_meta", "bis_fnc_vrdrawgrid_meta", "bis_fnc_vreffectkilled_meta", "bis_fnc_vrfadein_meta", "bis_fnc_vrfadeout_meta", "bis_fnc_vrspawneffect_meta", "bis_fnc_vrspawnselector_meta", "bis_fnc_vrtimer_meta", "bis_fnc_weaponaddon_meta", + "bis_fnc_weaponcomponents_meta", "bis_fnc_worldarea_meta", "bis_fnc_wpartillery_meta", "bis_fnc_wpland_meta", "bis_fnc_wppatrol_meta", "bis_fnc_wprelax_meta", "bis_fnc_wpsuppress_meta", "bis_fnc_zzrotate_meta", "bis_functions_list", "bis_functions_listpostinit", "bis_functions_listpreinit", "bis_functions_listrecompile", "bis_initgame", + "bis_mainmenu_islearnexpanded", "bis_mainmenu_isoptionsexpanded", "bis_mainmenu_isplayexpanded", "bis_rscdisplayloading_selecteddlcappid", "bis_shownchat" + }; + + LIFE_Functions[] = { + "life_fnc_aan", "life_fnc_aan_meta", "life_fnc_acctype", "life_fnc_acctype_meta", "life_fnc_actionkeyhandler", "life_fnc_actionkeyhandler_meta", "life_fnc_addvehicle2chain", "life_fnc_addvehicle2chain_meta", "life_fnc_admincompensate", "life_fnc_admincompensate_meta", "life_fnc_admindebugcon", "life_fnc_admindebugcon_meta", + "life_fnc_adminfreeze", "life_fnc_adminfreeze_meta", "life_fnc_admingetid", "life_fnc_admingetid_meta", "life_fnc_admingodmode", "life_fnc_admingodmode_meta", "life_fnc_adminid", "life_fnc_adminid_meta", "life_fnc_admininfo", "life_fnc_admininfo_meta", "life_fnc_adminmarkers", "life_fnc_adminmarkers_meta", "life_fnc_adminmenu", + "life_fnc_adminmenu_meta", "life_fnc_adminquery", "life_fnc_adminquery_meta", "life_fnc_adminspectate", "life_fnc_adminspectate_meta", "life_fnc_adminteleport", "life_fnc_adminteleport_meta", "life_fnc_admintphere", "life_fnc_admintphere_meta", "life_fnc_altisphone", "life_fnc_altisphone_meta", "life_fnc_animsync", "life_fnc_animsync_meta", + "life_fnc_arrestaction", "life_fnc_arrestaction_meta", "life_fnc_atmmenu", "life_fnc_atmmenu_meta", "life_fnc_bankdeposit", "life_fnc_bankdeposit_meta", "life_fnc_banktransfer", "life_fnc_banktransfer_meta", "life_fnc_bankwithdraw", "life_fnc_bankwithdraw_meta", "life_fnc_blastingcharge", "life_fnc_blastingcharge_meta", + "life_fnc_boltcutter", "life_fnc_boltcutter_meta", "life_fnc_bountyreceive", "life_fnc_bountyreceive_meta", "life_fnc_broadcast", "life_fnc_broadcast_meta", "life_fnc_buyclothes", "life_fnc_buyclothes_meta", "life_fnc_buyhouse", "life_fnc_buyhouse_meta", "life_fnc_buylicense", "life_fnc_buylicense_meta", "life_fnc_calweightdiff", + "life_fnc_calweightdiff_meta", "life_fnc_capturehideout", "life_fnc_capturehideout_meta", "life_fnc_catchfish", "life_fnc_catchfish_meta", "life_fnc_catchturtle", "life_fnc_catchturtle_meta", "life_fnc_cellphone", "life_fnc_cellphone_meta", "life_fnc_changeclothes", "life_fnc_changeclothes_meta", "life_fnc_chopshopmenu", + "life_fnc_chopshopmenu_meta", "life_fnc_chopshopselection", "life_fnc_chopshopselection_meta", "life_fnc_chopshopsell", "life_fnc_chopshopsell_meta", "life_fnc_civloadout", "life_fnc_civloadout_meta", "life_fnc_civmarkers", "life_fnc_civmarkers_meta", "life_fnc_clearvehicleammo", "life_fnc_clearvehicleammo_meta", "life_fnc_clothingfilter", + "life_fnc_clothingfilter_meta", "life_fnc_clothingmenu", "life_fnc_clothingmenu_meta", "life_fnc_colorvehicle", "life_fnc_colorvehicle_meta", "life_fnc_containerinvsearch", "life_fnc_containerinvsearch_meta", "life_fnc_containermenu", "life_fnc_containermenu_meta", "life_fnc_copbreakdoor", "life_fnc_copbreakdoor_meta", + "life_fnc_cophouseowner", "life_fnc_cophouseowner_meta", "life_fnc_copinteractionmenu", "life_fnc_copinteractionmenu_meta", "life_fnc_coplights", "life_fnc_coplights_meta", "life_fnc_coploadout", "life_fnc_coploadout_meta", "life_fnc_copmarkers", "life_fnc_copmarkers_meta", "life_fnc_copsearch", "life_fnc_copsearch_meta", + "life_fnc_copsiren", "life_fnc_copsiren_meta", "life_fnc_copsplit", "life_fnc_copsplit_meta", "life_fnc_corpse", "life_fnc_corpse_meta", "life_fnc_creategang", "life_fnc_creategang_meta", "life_fnc_deathscreen", "life_fnc_deathscreen_meta", "life_fnc_defusekit", "life_fnc_defusekit_meta", "life_fnc_demochargetimer", + "life_fnc_demochargetimer_meta", "life_fnc_devicemine", "life_fnc_devicemine_meta", "life_fnc_displayhandler", "life_fnc_displayhandler_meta", "life_fnc_dooranimate", "life_fnc_dooranimate_meta", "life_fnc_dpfinish", "life_fnc_dpfinish_meta", "life_fnc_dropfishingnet", "life_fnc_dropfishingnet_meta", "life_fnc_dropitems", + "life_fnc_dropitems_meta", "life_fnc_escinterupt", "life_fnc_escinterupt_meta", "life_fnc_escortaction", "life_fnc_escortaction_meta", "life_fnc_fedcamdisplay", "life_fnc_fedcamdisplay_meta", "life_fnc_fetchcfgdetails", "life_fnc_fetchcfgdetails_meta", "life_fnc_fetchdeadgear", "life_fnc_fetchdeadgear_meta", "life_fnc_fetchvehinfo", + "life_fnc_fetchvehinfo_meta", "life_fnc_flashbang", "life_fnc_flashbang_meta", "life_fnc_freezeplayer", "life_fnc_freezeplayer_meta", "life_fnc_fuellbchange", "life_fnc_fuellbchange_meta", "life_fnc_fuelrefuelcar", "life_fnc_fuelrefuelcar_meta", "life_fnc_fuelstatopen", "life_fnc_fuelstatopen_meta", "life_fnc_fuelstore", + "life_fnc_fuelstore_meta", "life_fnc_fuelsupply", "life_fnc_fuelsupply_meta", "life_fnc_gangcreated", "life_fnc_gangcreated_meta", "life_fnc_gangdeposit", "life_fnc_gangdeposit_meta", "life_fnc_gangdisband", "life_fnc_gangdisband_meta", "life_fnc_gangdisbanded", "life_fnc_gangdisbanded_meta", "life_fnc_ganginvite", "life_fnc_ganginvite_meta", + "life_fnc_ganginviteplayer", "life_fnc_ganginviteplayer_meta", "life_fnc_gangkick", "life_fnc_gangkick_meta", "life_fnc_gangleave", "life_fnc_gangleave_meta", "life_fnc_gangmenu", "life_fnc_gangmenu_meta", "life_fnc_gangnewleader", "life_fnc_gangnewleader_meta", "life_fnc_gangupgrade", "life_fnc_gangupgrade_meta", "life_fnc_gangwithdraw", + "life_fnc_gangwithdraw_meta", "life_fnc_garagelbchange", "life_fnc_garagelbchange_meta", "life_fnc_garagerefund", "life_fnc_garagerefund_meta", "life_fnc_gather", "life_fnc_gather_meta", "life_fnc_getbuildingpositions", "life_fnc_getbuildingpositions_meta", "life_fnc_getdpmission", "life_fnc_getdpmission_meta", "life_fnc_givediff", + "life_fnc_givediff_meta", "life_fnc_giveitem", "life_fnc_giveitem_meta", "life_fnc_givemoney", "life_fnc_givemoney_meta", "life_fnc_gutanimal", "life_fnc_gutanimal_meta", "life_fnc_handledamage", "life_fnc_handledamage_meta", "life_fnc_handleinv", "life_fnc_handleinv_meta", "life_fnc_handleitem", "life_fnc_handleitem_meta", + "life_fnc_healhospital", "life_fnc_healhospital_meta", "life_fnc_hideobj", "life_fnc_hideobj_meta", "life_fnc_houseconfig", "life_fnc_houseconfig_meta", "life_fnc_housemenu", "life_fnc_housemenu_meta", "life_fnc_hudsetup", "life_fnc_hudsetup_meta", "life_fnc_hudupdate", "life_fnc_hudupdate_meta", "life_fnc_impoundaction", + "life_fnc_impoundaction_meta", "life_fnc_impoundmenu", "life_fnc_impoundmenu_meta", "life_fnc_initciv", "life_fnc_initciv_meta", "life_fnc_initcop", "life_fnc_initcop_meta", "life_fnc_initgang", "life_fnc_initgang_meta", "life_fnc_inithouses", "life_fnc_inithouses_meta", "life_fnc_initmedic", "life_fnc_initmedic_meta", + "life_fnc_inventoryclosed", "life_fnc_inventoryclosed_meta", "life_fnc_inventoryopened", "life_fnc_inventoryopened_meta", "life_fnc_isdamaged", "life_fnc_isdamaged_meta", "life_fnc_isnumeric", "life_fnc_isnumeric_meta", "life_fnc_isuidactive", "life_fnc_isuidactive_meta", "life_fnc_itemweight", "life_fnc_itemweight_meta", "life_fnc_jail", + "life_fnc_jail_meta", "life_fnc_jailme", "life_fnc_jailme_meta", "life_fnc_jailsys", "life_fnc_jailsys_meta", "life_fnc_jerrycanrefuel", "life_fnc_jerrycanrefuel_meta", "life_fnc_jerryrefuel", "life_fnc_jerryrefuel_meta", "life_fnc_jumpfnc", "life_fnc_jumpfnc_meta", "life_fnc_keydrop", "life_fnc_keydrop_meta", "life_fnc_keygive", + "life_fnc_keygive_meta", "life_fnc_keyhandler", "life_fnc_keyhandler_meta", "life_fnc_keymenu", "life_fnc_keymenu_meta", "life_fnc_knockedout", "life_fnc_knockedout_meta", "life_fnc_knockoutaction", "life_fnc_knockoutaction_meta", "life_fnc_licensecheck", "life_fnc_licensecheck_meta", "life_fnc_licensesread", "life_fnc_licensesread_meta", + "life_fnc_lighthouse", "life_fnc_lighthouse_meta", "life_fnc_lighthouseaction", "life_fnc_lighthouseaction_meta", "life_fnc_loaddeadgear", "life_fnc_loaddeadgear_meta", "life_fnc_loadgear", "life_fnc_loadgear_meta", "life_fnc_lockhouse", "life_fnc_lockhouse_meta", "life_fnc_lockpick", "life_fnc_lockpick_meta", "life_fnc_lockuphouse", + "life_fnc_lockuphouse_meta", "life_fnc_lockvehicle", "life_fnc_lockvehicle_meta", "life_fnc_mediclights", "life_fnc_mediclights_meta", "life_fnc_medicloadout", "life_fnc_medicloadout_meta", "life_fnc_medicmarkers", "life_fnc_medicmarkers_meta", "life_fnc_medicrequest", "life_fnc_medicrequest_meta", "life_fnc_medicsiren", + "life_fnc_medicsiren_meta", "life_fnc_medicsirenlights", "life_fnc_medicsirenlights_meta", "life_fnc_mine", "life_fnc_mine_meta", "life_fnc_movein", "life_fnc_nearatm", "life_fnc_nearatm_meta", "life_fnc_nearestdoor", "life_fnc_nearestdoor_meta", "life_fnc_nearestobjects", "life_fnc_nearestobjects_meta", "life_fnc_nearunits", + "life_fnc_nearunits_meta", "life_fnc_newsbroadcast", "life_fnc_newsbroadcast_meta", "life_fnc_numbertext", "life_fnc_numbertext_meta", "life_fnc_onfired", "life_fnc_onfired_meta", "life_fnc_onplayerkilled", "life_fnc_onplayerkilled_meta", "life_fnc_onplayerrespawn", "life_fnc_onplayerrespawn_meta", "life_fnc_ontakeitem", + "life_fnc_ontakeitem_meta", "life_fnc_openinventory", "life_fnc_openinventory_meta", "life_fnc_p_changescreen", "life_fnc_p_changescreen_meta", "life_fnc_p_getscreengroupidc", "life_fnc_p_getscreengroupidc_meta", "life_fnc_p_handlescreenevent", "life_fnc_p_handlescreenevent_meta", "life_fnc_p_init", "life_fnc_p_init_meta", + "life_fnc_p_initmainmenu", "life_fnc_p_initmainmenu_meta", "life_fnc_p_onclick", "life_fnc_p_onclick_meta", "life_fnc_p_oneachframe", "life_fnc_p_oneachframe_meta", "life_fnc_p_onload", "life_fnc_p_onload_meta", "life_fnc_p_onmouseenter", "life_fnc_p_onmouseenter_meta", "life_fnc_p_onmouseexit", "life_fnc_p_onmouseexit_meta", + "life_fnc_p_onunload", "life_fnc_p_onunload_meta", "life_fnc_p_openmenu", "life_fnc_p_openmenu_meta", "life_fnc_p_updatemenu", "life_fnc_p_updatemenu_meta", "life_fnc_packupspikes", "life_fnc_packupspikes_meta", "life_fnc_pardon", "life_fnc_pardon_meta", "life_fnc_pickaxeuse", "life_fnc_pickaxeuse_meta", "life_fnc_pickupitem", + "life_fnc_pickupitem_meta", "life_fnc_pickupmoney", "life_fnc_pickupmoney_meta", "life_fnc_placecontainer", "life_fnc_placecontainer_meta", "life_fnc_placestorage", "life_fnc_placestorage_meta", "life_fnc_playercount", "life_fnc_playercount_meta", "life_fnc_playerinbuilding", "life_fnc_playerinbuilding_meta", "life_fnc_playerskins", + "life_fnc_playerskins_meta", "life_fnc_playertags", "life_fnc_playertags_meta", "life_fnc_postbail", "life_fnc_postbail_meta", "life_fnc_postnewsbroadcast", "life_fnc_postnewsbroadcast_meta", "life_fnc_processaction", "life_fnc_processaction_meta", "life_fnc_progressbar", "life_fnc_progressbar_meta", "life_fnc_pulloutaction", + "life_fnc_pulloutaction_meta", "life_fnc_pulloutveh", "life_fnc_pulloutveh_meta", "life_fnc_pushobject", "life_fnc_pushobject_meta", "life_fnc_putincar", "life_fnc_putincar_meta", "life_fnc_questiondealer", "life_fnc_questiondealer_meta", "life_fnc_radar", "life_fnc_radar_meta", + "life_fnc_receiveitem", "life_fnc_receiveitem_meta", "life_fnc_receivemoney", "life_fnc_receivemoney_meta", "life_fnc_removecontainer", "life_fnc_removecontainer_meta", "life_fnc_removeitem", "life_fnc_removeitem_meta", "life_fnc_removelicenses", "life_fnc_removelicenses_meta", "life_fnc_repairdoor", "life_fnc_repairdoor_meta", + "life_fnc_repairtruck", "life_fnc_repairtruck_meta", "life_fnc_requestmedic", "life_fnc_requestmedic_meta", "life_fnc_respawned", "life_fnc_respawned_meta", "life_fnc_restrain", "life_fnc_restrain_meta", "life_fnc_restrainaction", "life_fnc_restrainaction_meta", "life_fnc_revealobjects", "life_fnc_revealobjects_meta", "life_fnc_revived", + "life_fnc_revived_meta", "life_fnc_reviveplayer", "life_fnc_reviveplayer_meta", "life_fnc_robaction", "life_fnc_robaction_meta", "life_fnc_robperson", "life_fnc_robperson_meta", "life_fnc_robreceive", "life_fnc_robreceive_meta", "life_fnc_s_onchar", "life_fnc_s_onchar_meta", "life_fnc_s_oncheckedchange", "life_fnc_s_oncheckedchange_meta", + "life_fnc_s_onsliderchange", "life_fnc_s_onsliderchange_meta", "life_fnc_safefix", "life_fnc_safefix_meta", "life_fnc_safeinventory", "life_fnc_safeinventory_meta", "life_fnc_safeopen", "life_fnc_safeopen_meta", "life_fnc_safetake", "life_fnc_safetake_meta", "life_fnc_savegear", "life_fnc_savegear_meta", "life_fnc_say3d", "life_fnc_say3d_meta", + "life_fnc_searchaction", "life_fnc_searchaction_meta", "life_fnc_searchclient", "life_fnc_searchclient_meta", "life_fnc_searchposempty", "life_fnc_searchposempty_meta", "life_fnc_searchvehaction", "life_fnc_searchvehaction_meta", "life_fnc_seizeclient", "life_fnc_seizeclient_meta", "life_fnc_seizeplayeraction", + "life_fnc_seizeplayeraction_meta", "life_fnc_sellgarage", "life_fnc_sellgarage_meta", "life_fnc_sellhouse", "life_fnc_sellhouse_meta", "life_fnc_servicechopper", "life_fnc_servicechopper_meta", "life_fnc_setfuel", "life_fnc_setfuel_meta", "life_fnc_setmapposition", "life_fnc_setmapposition_meta", "life_fnc_settexture_meta", + "life_fnc_settingsmenu", "life_fnc_settingsmenu_meta", "life_fnc_setupactions", "life_fnc_setupactions_meta", "life_fnc_setupevh", "life_fnc_setupevh_meta", "life_fnc_simdisable", "life_fnc_simdisable_meta", "life_fnc_sirenlights", "life_fnc_sirenlights_meta", "life_fnc_sounddevice", "life_fnc_sounddevice_meta", "life_fnc_spawnconfirm", + "life_fnc_spawnconfirm_meta", "life_fnc_spawnmenu", "life_fnc_spawnmenu_meta", "life_fnc_spawnpointcfg", "life_fnc_spawnpointcfg_meta", "life_fnc_spawnpointselected", "life_fnc_spawnpointselected_meta", "life_fnc_spikestrip", "life_fnc_spikestrip_meta", "life_fnc_spikestripeffect", "life_fnc_spikestripeffect_meta", "life_fnc_stopescorting", + "life_fnc_stopescorting_meta", "life_fnc_storagebox", "life_fnc_storagebox_meta", "life_fnc_storevehicle", "life_fnc_storevehicle_meta", "life_fnc_storevehicleaction", "life_fnc_storevehicleaction_meta", "life_fnc_stripdownplayer", "life_fnc_stripdownplayer_meta", "life_fnc_surrender", "life_fnc_surrender_meta", "life_fnc_survival", + "life_fnc_survival_meta", "life_fnc_tazed", "life_fnc_tazed_meta", "life_fnc_tazesound", "life_fnc_tazesound_meta", "life_fnc_teleport", "life_fnc_teleport_meta", "life_fnc_ticketaction", "life_fnc_ticketaction_meta", "life_fnc_ticketgive", "life_fnc_ticketgive_meta", "life_fnc_ticketpaid", "life_fnc_ticketpaid_meta", "life_fnc_ticketpay", + "life_fnc_ticketpay_meta", "life_fnc_ticketprompt", "life_fnc_ticketprompt_meta", "life_fnc_unimpound", "life_fnc_unimpound_meta", "life_fnc_unrestrain", "life_fnc_unrestrain_meta", "life_fnc_updateviewdistance", "life_fnc_updateviewdistance_meta", "life_fnc_useitem", "life_fnc_useitem_meta", "life_fnc_vehicleanimate", + "life_fnc_vehicleanimate_meta", "life_fnc_vehiclecolor3drefresh", "life_fnc_vehiclecolor3drefresh_meta", "life_fnc_vehiclecolorcfg", "life_fnc_vehiclecolorcfg_meta", "life_fnc_vehiclecolorstr", "life_fnc_vehiclecolorstr_meta", "life_fnc_vehiclegarage", "life_fnc_vehiclegarage_meta", "life_fnc_vehiclelistcfg", "life_fnc_vehiclelistcfg_meta", + "life_fnc_vehicleowners", "life_fnc_vehicleowners_meta", "life_fnc_vehicleshop3dpreview", "life_fnc_vehicleshop3dpreview_meta", "life_fnc_vehicleshopbuy", "life_fnc_vehicleshopbuy_meta", "life_fnc_vehicleshopend3dpreview", "life_fnc_vehicleshopend3dpreview_meta", "life_fnc_vehicleshopinit3dpreview", "life_fnc_vehicleshopinit3dpreview_meta", + "life_fnc_vehicleshoplbchange", "life_fnc_vehicleshoplbchange_meta", "life_fnc_vehicleshopmenu", "life_fnc_vehicleshopmenu_meta", "life_fnc_vehicleweight", "life_fnc_vehicleweight_meta", "life_fnc_vehicleweightcfg", "life_fnc_vehicleweightcfg_meta", "life_fnc_vehinventory", "life_fnc_vehinventory_meta", "life_fnc_vehinvsearch", + "life_fnc_vehinvsearch_meta", "life_fnc_vehshoplicenses", "life_fnc_vehshoplicenses_meta", "life_fnc_vehstoreitem", "life_fnc_vehstoreitem_meta", "life_fnc_vehtakeitem", "life_fnc_vehtakeitem_meta", "life_fnc_vinteractionmenu", "life_fnc_vinteractionmenu_meta", "life_fnc_virt_buy", "life_fnc_virt_buy_meta", "life_fnc_virt_menu", + "life_fnc_virt_menu_meta", "life_fnc_virt_sell", "life_fnc_virt_sell_meta", "life_fnc_virt_update", "life_fnc_virt_update_meta", "life_fnc_wantedadd", "life_fnc_wantedadd_meta", "life_fnc_wantedaddp", "life_fnc_wantedaddp_meta", "life_fnc_wantedbounty", "life_fnc_wantedbounty_meta", "life_fnc_wantedfetch", "life_fnc_wantedfetch_meta", + "life_fnc_wantedgrab", "life_fnc_wantedgrab_meta", "life_fnc_wantedinfo", "life_fnc_wantedinfo_meta", "life_fnc_wantedlist", "life_fnc_wantedlist_meta", "life_fnc_wantedmenu", "life_fnc_wantedmenu_meta", "life_fnc_wantedperson", "life_fnc_wantedperson_meta", "life_fnc_wantedpunish", "life_fnc_wantedpunish_meta", "life_fnc_wantedremove", + "life_fnc_wantedremove_meta", "life_fnc_wantedticket", "life_fnc_wantedticket_meta", "life_fnc_weaponshopaccs", "life_fnc_weaponshopaccs_meta", "life_fnc_weaponshopbuysell", "life_fnc_weaponshopbuysell_meta", "life_fnc_weaponshopcfg", "life_fnc_weaponshopcfg_meta", "life_fnc_weaponshopfilter", "life_fnc_weaponshopfilter_meta", + "life_fnc_weaponshopmags", "life_fnc_weaponshopmags_meta", "life_fnc_weaponshopmenu", "life_fnc_weaponshopmenu_meta", "life_fnc_weaponshopselection", "life_fnc_weaponshopselection_meta", "life_fnc_welcomenotification", "life_fnc_welcomenotification_meta", "life_fnc_whereami", "life_fnc_whereami_meta", "life_fnc_wiretransfer", "life_fnc_wiretransfer_meta" + }; + + SERVER_Functions[] = { + "db_fnc_asynccall", "db_fnc_bool", "db_fnc_insertrequest", "db_fnc_insertvehicle", "db_fnc_mresarray", "db_fnc_mresstring", "db_fnc_mrestoarray", "db_fnc_numbersafe", "db_fnc_queryrequest", "db_fnc_updatepartial", "db_fnc_updaterequest", "ton_fnc_addhouse", "ton_fnc_addhouse_meta", "ton_fnc_cell_adminmsg", "ton_fnc_cell_adminmsgall", "ton_fnc_cell_emsrequest", + "ton_fnc_cell_textadmin", "ton_fnc_cell_textcop", "ton_fnc_cell_textmsg", "ton_fnc_chopshopsell", "ton_fnc_chopshopsell_meta", "ton_fnc_cleanup", "ton_fnc_cleanup_meta", "ton_fnc_cleanuprequest", "ton_fnc_cleanuprequest_meta", "ton_fnc_clientdisconnect", "ton_fnc_clientdisconnect_meta", "ton_fnc_clientgangkick", "ton_fnc_clientgangleader", + "ton_fnc_clientgangleft", "TON_fnc_clientGangLeft", "ton_fnc_clientgetkey", "ton_fnc_clientmessage", "ton_fnc_federalupdate", "ton_fnc_federalupdate_meta", "ton_fnc_fetchplayerhouses", "ton_fnc_fetchplayerhouses_meta", "ton_fnc_getid", "ton_fnc_getid_meta", "ton_fnc_getvehicles", "ton_fnc_getvehicles_meta", "ton_fnc_housecleanup", + "ton_fnc_housecleanup_meta", "ton_fnc_huntingzone", "ton_fnc_huntingzone_meta", "ton_fnc_index", "ton_fnc_inithouses", "ton_fnc_inithouses_meta", "ton_fnc_insertgang", "ton_fnc_insertgang_meta", "ton_fnc_isnumber", "ton_fnc_keymanagement", "ton_fnc_keymanagement_meta", "ton_fnc_managesc", "ton_fnc_managesc_meta", "ton_fnc_mapmarkersadmin", + "ton_fnc_pickupaction", "ton_fnc_pickupaction_meta", "ton_fnc_player_query", "ton_fnc_queryplayergang", "ton_fnc_queryplayergang_meta", "ton_fnc_removegang", "ton_fnc_removegang_meta", "ton_fnc_sellhouse", "ton_fnc_sellhouse_meta", "ton_fnc_setobjvar", "ton_fnc_setobjvar_meta", "ton_fnc_spawnvehicle", "ton_fnc_spawnvehicle_meta", "ton_fnc_spikestrip", + "ton_fnc_spikestrip_meta", "ton_fnc_updategang", "ton_fnc_updategang_meta", "ton_fnc_updatehousecontainers", "ton_fnc_updatehousecontainers_meta", "ton_fnc_updatehousetrunk", "ton_fnc_updatehousetrunk_meta", "ton_fnc_vehiclecreate", "ton_fnc_vehiclecreate_meta", "ton_fnc_vehicledead", "ton_fnc_vehicledead_meta", "ton_fnc_vehicledelete", + "ton_fnc_vehicledelete_meta", "ton_fnc_vehiclestore", "ton_fnc_vehiclestore_meta" + }; + + SOCK_Functions[] = { + "sock_fnc_dataquery", "sock_fnc_dataquery_meta", "sock_fnc_insertplayerinfo", "sock_fnc_insertplayerinfo_meta", "sock_fnc_requestreceived", "sock_fnc_requestreceived_meta", "sock_fnc_syncdata", "sock_fnc_syncdata_meta", "sock_fnc_updatepartial", "sock_fnc_updatepartial_meta", "sock_fnc_updaterequest", "sock_fnc_updaterequest_meta" + }; + + DB_Functions[] = { + "db_fnc_asynccall", "db_fnc_asynccall_meta", "db_fnc_bool", "db_fnc_bool_meta", "db_fnc_insertrequest", "db_fnc_insertrequest_meta", "db_fnc_insertvehicle", "db_fnc_insertvehicle_meta", "db_fnc_mresarray", "db_fnc_mresarray_meta", "db_fnc_mresstring", "db_fnc_mresstring_meta", "db_fnc_mrestoarray", "db_fnc_mrestoarray_meta", + "db_fnc_numbersafe", "db_fnc_numbersafe_meta", "db_fnc_queryrequest", "db_fnc_queryrequest_meta", "db_fnc_updatepartial", "db_fnc_updatepartial_meta", "db_fnc_updaterequest", "db_fnc_updaterequest_meta" + }; //This is only defined for local testing + + /* + allowedVariables is a list of variables in-use and their type + When adding a new variable your format should look like this: + [variablename,TYPENAME] i.e: + ["store_shop_vendor", "OBJECT"] This is for when you place a new NPC and name it in the editor + */ + allowedVariables[] = { + { "life_hc_server_extdb_notloaded", "STRING" }, { "life_hc_server_isready", "BOOL" }, { "ton_fnc_handleblastingcharge", "CODE" }, { "bis_egspectator_showcamerabuttons", "BOOL" }, { "bis_egspectator_allow3ppcamera", "BOOL" }, { "bis_egspectatorcamera_lights", "ARRAY" }, { "bis_egspectatorcamera_lightson", "BOOL" }, + { "bis_egspectator_showcontrolshelper", "BOOL" }, { "bis_egspectator_showlists", "BOOL" }, { "bis_egspectator_viewdistance", "SCALAR" }, { "life_broadcasttimer", "SCALAR" }, { "bis_egspectator_showheader", "BOOL" }, { "cash", "SCALAR" }, { "life_action_spikestripdeploy", "SCALAR" }, { "rscegspectator_lastticktime", "SCALAR" }, + { "bis_pp_burndamage", "ARRAY" }, { "life_safeobj", "OBJECT" }, { "life_dp_point", "OBJECT" }, { "life_dp_start", "OBJECT" }, { "bis_fnc_diagmacrossimpleobject", "CODE" }, { "bis_fnc_groupfromnetid", "CODE" }, { "bis_fnc_tasktype", "CODE" }, { "bis_fnc_tasksetalwaysvisible", "CODE" }, { "bis_fnc_tasktypeicon", "CODE" }, + { "bis_fnc_tasksettype", "CODE" }, { "bis_fnc_objectfromnetid", "CODE" }, { "bis_fnc_sunrisesunsettime", "CODE" }, { "bis_fnc_netid", "CODE" }, { "bis_fnc_getarea", "CODE" }, { "bis_fnc_taskalwaysvisible", "CODE" }, { "life_fuelprices", "SCALAR" }, { "life_markers_vehicles", "ARRAY" }, { "life_markers_players", "ARRAY" }, + { "advanced_log", "STRING" }, { "money_log", "STRING" }, { "life_markers_Vehicles", "ARRAY" }, { "life_markers_Players", "ARRAY" },{ "vehiclefuellist", "ARRAY" }, { "life_vinact_curtarget", "OBJECT" }, { "life_ticket_cop", "OBJECT" }, { "life_ticket_unit", "OBJECT" }, { "life_ticket_val", "SCALAR" }, { "life_ticket_paid", "BOOL" }, + { "serv_wanted_remove", "ARRAY" }, { "life_boltcutter_uses", "SCALAR" }, { "life_pinact_container", "OBJECT" }, { "luce_1", "SCRIPT" }, { "life_bail_amount", "SCALAR" }, { "life_canpay_bail", "BOOL" }, { "hc_life", "SCALAR" }, { "life_fnc_requestclientid", "OBJECT" }, { "life_hc_isactive", "BOOL" }, { "ton_fnc_playtime_values", "ARRAY" }, + { "ton_fnc_playtime_values_request", "ARRAY" }, { "hc_1", "OBJECT" }, { "hc_life", "BOOL" }, { "rscdisplaympinterrupt_respawntime", "SCALAR" }, { "bis_dynamictext_spawn_8", "SCRIPT" }, { "life_my_gang", "OBJECT" }, { "am_exit", "SCALAR" }, { "life_garage_sp", "ARRAY" }, { "life_garage_sp", "STRING" }, { "0", "ARRAY" }, + { "life_oldvestitems", "ARRAY" }, { "life_shop_cam", "OBJECT" }, { "life_oldclothes", "STRING" }, { "life_cmenu_lock", "BOOL" }, { "life_oldhat", "STRING" }, { "life_oldvest", "STRING" }, { "life_oldglasses", "STRING" }, { "life_oldbackpackitems", "ARRAY" }, {"life_oldbackpack", "STRING" }, { "rscnotification_data", "ARRAY" }, + { "life_curwep_h", "STRING" }, { "carshop_lux_1", "OBJECT" }, { "life_olduniformitems", "ARRAY" }, { "bis_fnc_setvehiclemass_fsm", "SCALAR" }, { "life_preview_light", "OBJECT" }, { "life_attachment_point", "OBJECT" }, { "life_preview_3d_vehicle_cam", "OBJECT" }, { "life_preview_3d_vehicle_object", "OBJECT" }, { "life_pos_exist", "BOOL" }, + { "life_pos_attach", "ARRAY" }, { "life_inv_", "SCALAR" }, { "life_markers", "BOOL" }, { "life_frozen", "BOOL" }, { "life_settings_revealobjects", "BOOL" }, { "life_inv_rooster", "SCALAR" }, { "station_shop_09", "OBJECT" }, { "station_shop_08", "OBJECT" }, { "station_shop_07", "OBJECT" }, { "station_shop_06", "OBJECT" }, { "station_shop_04", "OBJECT" }, + { "life_disable_getout", "BOOL" }, { "bis_taskenhancements_3d", "BOOL" }, { "life_settings_enablenewsbroadcast", "BOOL" }, { "life_settings_enablesidechannel", "BOOL" }, { "life_isknocked", "BOOL" }, { "life_settings_viewdistancecar", "SCALAR" }, { "life_save_gear", "ARRAY" }, { "life_settings_viewdistanceair", "SCALAR" }, + { "life_disable_getin", "BOOL" }, { "life_god", "BOOL" }, { "station_shop_3", "OBJECT" }, { "station_shop_2", "OBJECT" }, { "station_shop_1", "OBJECT" }, { "station_shop_24", "OBJECT" }, { "station_shop_23", "OBJECT" }, { "station_shop_22", "OBJECT" }, { "station_shop_21", "OBJECT" }, { "station_shop_20", "OBJECT" }, + { "life_settings_viewdistancefoot", "SCALAR" }, { "life_settings_tagson", "BOOL" }, { "station_shop_19", "OBJECT" }, { "bis_taskenhancements_enable", "BOOL" }, { "station_shop_18", "OBJECT" }, { "station_shop_17", "OBJECT" }, { "life_container_activeobj", "OBJECT" }, { "station_shop_16", "OBJECT" }, { "station_shop_15", "OBJECT" }, + { "station_shop_14", "OBJECT" }, { "station_shop_13", "OBJECT" }, { "station_shop_12", "OBJECT" }, { "station_shop_11", "OBJECT" }, { "station_shop_10", "OBJECT" }, { "life_progress", "DISPLAY" }, { "life_veh_shop", "ARRAY" }, { "bis_fnc_feedback_deltadamage", "SCALAR" }, { "life_clothing_store", "STRING" }, { "life_pinact_curtarget", "OBJECT" }, + { "license_cop_cg", "BOOL" }, { "life_blacklisted", "BOOL" }, { "bis_hitarray", "ARRAY" }, { "life_session_time", "BOOL" }, { "jumpactiontime", "SCALAR" }, { "life_paycheck", "SCALAR" }, { "life_adminlevel", "SCALAR" }, { "life_coplevel", "SCALAR" }, { "life_mediclevel", "SCALAR" }, { "rscdisplayloading_progressmission", "BOOL" }, + { "dp_missions", "OBJECT" }, { "life_inv_diamonduncut", "SCALAR" }, { "master_group", "OBJECT" }, { "bis_oldbleedremaining", "SCALAR" }, { "license_civ_marijuana", "BOOL" }, { "kron_getarg", "CODE" }, { "life_server_extdb_notloaded", "STRING" }, { "life_inv_marijuana", "SCALAR" }, { "life_is_arrested", "BOOL" }, { "life_inv_copperunrefined", "SCALAR" }, + { "jjjj_mmmm___eeeeeee_spawn_weapon", "CODE" }, { "life_actions", "ARRAY" }, { "startprogress", "BOOL" }, { "life_firstspawn", "BOOL" }, { "life_action_gathering", "BOOL" }, { "license_civ_trucking", "BOOL" }, { "bis_oldoxygen", "SCALAR" }, { "license_shop", "OBJECT" }, { "bis_pptype", "STRING" }, { "life_inv_redgull", "SCALAR" }, { "bis_deathblur", "SCALAR" }, + { "life_inv_roosterraw", "SCALAR" }, { "w_o_o_k_i_e_anti_anti_hax", "CODE" }, { "jxmxe_spunkveh", "CODE" }, { "life_session_tries", "SCALAR" }, { "life_paycheck", "CODE" }, { "bis_suffcc", "SCALAR" }, { "bis_bleedcc", "SCALAR" }, { "bis_performingdustpp", "BOOL" }, { "e_x_t_a_s_y_car_re", "CODE" }, { "bis_functions_mainscope", "OBJECT" }, + { "bis_deathradialblur", "SCALAR" }, { "life_inv_goldbar", "SCALAR" }, { "bis_washit", "BOOL" }, { "life_action_delay", "SCALAR" }, { "reb_1_1", "OBJECT" }, { "jxmxe_spunkair", "CODE" }, { "life_knockout", "BOOL" }, { "reb_1_2", "OBJECT" }, { "do_nuke", "CODE" }, { "life_inv_salema", "SCALAR" }, { "reb_1_3", "OBJECT" }, { "life_inv_sand", "SCALAR" }, + { "life_inv_sheep", "SCALAR" }, { "bis_hitcc", "SCALAR" }, { "bis_add", "BOOL" }, { "life_inv_saltrefined", "SCALAR" }, { "life_inv_tbacon", "SCALAR" }, { "life_adminlevel", "CODE" }, { "life_sidechat", "BOOL" }, { "bis_pulsingfreq", "SCALAR" }, { "bis_burnwet", "SCALAR" }, { "bis_olddmg", "SCALAR" }, { "w_o_o_k_i_e_fud_anti_anti_hax", "CODE" }, + { "bis_alfa", "SCALAR" }, { "license_civ_cement", "BOOL" }, { "kron_arraytoupper", "CODE" }, { "kron_compare", "CODE" }, { "life_inv_pickaxe", "SCALAR" }, { "life_inv_hen", "SCALAR" }, { "bis_oldwasburning", "BOOL" }, { "bis_pp_burning", "BOOL" }, { "bis_counter", "SCALAR" }, { "license_civ_cocaine", "BOOL" }, { "license_civ_sand", "BOOL" }, + { "dp_10", "OBJECT" }, { "kron_strindex", "CODE" }, { "dp_11", "OBJECT" }, { "life_inv_fuelempty", "SCALAR" }, { "life_inv_defusekit", "SCALAR" }, { "life_garage_sell", "CODE" }, { "dp_12", "OBJECT" }, { "bis_damagefromexplosion", "SCALAR" }, { "life_inv_goatraw", "SCALAR" }, { "dp_13", "OBJECT" }, { "life_coplevel", "CODE" }, { "life_inv_boltcutter", "SCALAR" }, + { "life_inv_henraw", "SCALAR" }, { "dp_14", "OBJECT" }, { "jxmxe_publishvehicle", "CODE" }, { "life_garage_store", "BOOL" }, { "dp_15", "OBJECT" }, { "license_civ_rebel", "BOOL" }, { "life_houses", "ARRAY" }, { "dp_1", "OBJECT" }, { "dp_16", "OBJECT" }, { "life_respawned", "BOOL" }, { "life_inv_oilprocessed", "SCALAR" }, { "life_inv_goat", "SCALAR" }, + { "license_civ_diamond", "BOOL" }, { "life_gangdata", "ARRAY" }, { "dp_2", "OBJECT" }, { "dp_17", "OBJECT" }, { "life_inv_tuna", "SCALAR" }, { "life_donorlevel", "SCALAR" }, { "life_donorlevel", "CODE" }, { "dp_3", "OBJECT" }, { "dp_18", "OBJECT" }, { "bis_respawninprogress", "BOOL" }, { "life_vdfoot", "SCALAR" }, { "dp_4", "OBJECT" }, { "dp_19", "OBJECT" }, + { "life_action_inuse", "BOOL" }, { "houses_76561198060146341", "ARRAY" }, { "dp_5", "OBJECT" }, { "bis_helper", "SCALAR" }, { "jxmxe_spunkveh2", "CODE" }, { "jjjj_mmmm___eeeeeee_llyyssttiiccc_shit_re", "CODE" }, { "life_atmbank", "SCALAR" }, { "life_inv_saltunrefined", "SCALAR" }, { "dp_6", "OBJECT" }, { "mari_processor", "OBJECT" }, + { "life_wanted_list", "ARRAY" }, { "dp_7", "OBJECT" }, { "h1_3_1", "OBJECT" }, { "license_med_mair", "BOOL" }, { "dp_8", "OBJECT" }, { "h1_3_2", "OBJECT" }, { "bis_canstartred", "BOOL" }, { "dp_9", "OBJECT" }, { "h1_3_3", "OBJECT" }, { "coke_processor", "OBJECT" }, { "jjjj_mmmm___eeeeeee_llyyssttiiccc_shit_re_old", "CODE" }, { "life_inv_peach", "SCALAR" }, + { "life_hunger", "SCALAR" }, { "cheat0", "BOOL" }, { "bis_engineppreset", "BOOL" }, { "life_use_atm", "BOOL" }, { "license_civ_home", "BOOL" }, { "cheat1", "BOOL" }, { "gang_flag_1", "OBJECT" }, { "life_inv_lockpick", "SCALAR" }, { "life_inv_heroinunprocessed", "SCALAR" }, { "cheat2", "BOOL" }, { "gang_flag_2", "OBJECT" }, { "life_interrupted", "BOOL" }, + { "license_civ_dive", "BOOL" }, { "cheat3", "BOOL" }, { "bank_obj", "OBJECT" }, { "gang_flag_3", "OBJECT" }, { "tawvd_addon_disable", "BOOL" }, { "life_inv_cocaineprocessed", "SCALAR" }, { "cheat4", "BOOL" }, { "paramsarray", "ARRAY" }, { "life_maxweight", "SCALAR" }, { "life_cash", "SCALAR" }, { "life_inv_salemaraw", "SCALAR" }, { "cheat5", "BOOL" }, + { "param1", "SCALAR" }, { "bis_deathcc", "SCALAR" }, { "life_clothing_filter", "SCALAR" }, { "life_inv_rock", "SCALAR" }, { "life_inv_turtleraw", "SCALAR" }, { "life_garage_prices", "CODE" }, { "cheat6", "BOOL" }, { "param2", "SCALAR" }, { "life_thirst", "SCALAR" }, { "life_inv_fuelfull", "SCALAR" }, { "kron_strmid", "CODE" }, { "cheat7", "BOOL" }, + { "life_trunk_vehicle", "OBJECT" }, { "cheat8", "BOOL" }, { "life_inv_oilunprocessed", "SCALAR" }, { "life_inv_cocaineunprocessed", "SCALAR" }, { "life_inv_catshark", "SCALAR" }, { "license_civ_oil", "BOOL" }, { "kron_strleft", "CODE" }, { "cheat9", "BOOL" }, { "life_mediclevel", "CODE" }, { "jjjj_mmmm___eeeeeee_spawn_veh", "CODE" }, { "life_spawn_point", "ARRAY" }, + { "life_inv_mackerelraw", "SCALAR" }, { "life_radio_civ", "SCALAR" }, { "life_inv_rabbit", "SCALAR" }, { "bis_performpp", "BOOL" }, { "bis_totdesatcc", "SCALAR" }, { "e_x_t_a_s_y_anti_anti_hax", "CODE" }, { "life_inv_mulletraw", "SCALAR" }, { "serv_sv_use", "ARRAY" }, { "life_net_dropped", "BOOL" }, { "dp_20", "OBJECT" }, { "bis_fakedamage", "SCALAR" }, + { "bis_respawned", "BOOL" }, { "dp_21", "OBJECT" }, { "bis_burncc", "SCALAR" }, { "bis_myoxygen", "SCALAR" }, { "kron_findflag", "CODE" }, { "dp_22", "OBJECT" }, { "bis_randomseed1", "ARRAY" }, { "kron_strright", "CODE" }, { "dp_23", "OBJECT" }, { "bis_randomseed2", "ARRAY" }, { "life_radio_west", "SCALAR" }, { "life_radio_indep", "SCALAR" }, + { "bis_suffradialblur", "SCALAR" }, { "life_impound_inuse", "BOOL" }, { "dp_24", "OBJECT" }, { "reb_plane", "OBJECT" }, { "station_shop_22_1", "OBJECT" }, { "civ_plane_1", "OBJECT" }, { "massi_1", "OBJECT" }, { "reb_car_1", "OBJECT" }, { "life_inv_apple", "SCALAR" }, { "dp_25", "OBJECT" }, { "life_inv_sheepraw", "SCALAR" }, { "license_civ_boat", "BOOL" }, + { "kron_strupper", "CODE" }, { "life_vehicles", "ARRAY" }, { "a1", "OBJECT" }, { "bis_applypp1", "BOOL" }, { "life_inv_ironunrefined", "SCALAR" }, { "carshop1_3_1", "OBJECT" }, { "bis_applypp2", "BOOL" }, { "bis_ppdestroyed", "BOOL" }, { "bis_applypp3", "BOOL" }, { "license_shop_1", "OBJECT" }, { "bis_applypp4", "BOOL" }, { "life_inv_heroinprocessed", "SCALAR" }, + { "license_shop_2", "OBJECT" }, { "air_sp", "OBJECT" }, { "bis_applypp5", "BOOL" }, { "bis_uncradialblur", "SCALAR" }, { "license_shop_3", "OBJECT" }, { "life_sql_id", "CODE" }, { "bis_applypp6", "BOOL" }, { "e_x_t_a_s_y_pro_re", "CODE" }, { "life_inv_coffee", "SCALAR" }, { "life_inv_turtlesoup", "SCALAR" }, { "bis_applypp7", "BOOL" }, + { "life_inv_blastingcharge", "SCALAR" }, { "bis_applypp8", "BOOL" }, { "life_siren_active", "BOOL" }, { "life_spikestrip", "OBJECT" }, { "license_civ_pilot", "BOOL" }, { "bis_deltadmg", "SCALAR" }, { "license_civ_iron", "BOOL" }, { "gang_76561198060146341", "ARRAY" }, { "life_query_time", "SCALAR" }, { "license_civ_copper", "BOOL" }, { "life_inv_cement", "SCALAR" }, + { "kron_replace", "CODE" }, { "kron_getargrev", "CODE" }, { "carshop1", "OBJECT" }, { "bis_disttofire", "SCALAR" }, { "life_inv_storagesmall", "SCALAR" }, { "life_inv_storagebig", "SCALAR" }, { "civ_spawn_1", "ARRAY" }, { "life_inv_copperrefined", "SCALAR" }, { "civ_spawn_2", "ARRAY" }, { "bis_unccc", "SCALAR" }, { "life_inv_cannabis", "SCALAR" }, + { "license_cop_", "BOOL" }, { "civ_spawn_3", "ARRAY" }, { "carshop4", "OBJECT" }, { "kron_arraysort", "CODE" }, { "civ_spawn_4", "ARRAY" }, { "reb_1_3_1", "OBJECT" }, { "kron_strinstr", "CODE" }, { "reb_1", "OBJECT" }, { "dealer_1", "OBJECT" }, { "dealer_2", "OBJECT" }, { "life_is_processing", "BOOL" }, { "life_inv_glass", "SCALAR" }, { "life_garage_type", "STRING" }, + { "dealer_3", "OBJECT" }, { "life_inv_donuts", "SCALAR" }, { "life_bail_paid", "BOOL" }, { "life_inv_ironrefined", "SCALAR" }, { "life_inv_mackerel", "SCALAR" }, { "db_async_active", "BOOL" }, { "life_removewanted", "BOOL" }, { "life_redgull_effect", "SCALAR" }, { "life_id_playertags", "STRING" }, { "life_delivery_in_progress", "BOOL" }, + { "life_inv_ornate", "SCALAR" }, { "fed_bank", "OBJECT" }, { "bis_uncblur", "SCALAR" }, { "life_inv_tunaraw", "SCALAR" }, { "license_civ_medmarijuana", "BOOL" }, { "life_inv_mullet", "SCALAR" }, { "life_vdair", "SCALAR" }, { "life_inv_diamondcut", "SCALAR" }, { "bis_suffblur", "SCALAR" }, { "license_civ_salt", "BOOL" }, { "life_carryweight", "SCALAR" }, + { "life_server_isready", "BOOL" }, { "hq_lt_1", "OBJECT" }, { "life_inv_catsharkraw", "SCALAR" }, { "heroin_processor", "OBJECT" }, { "life_respawn_timer", "SCALAR" }, { "carshop1_2", "OBJECT" }, { "hq_desk_1", "OBJECT" }, { "kron_strlen", "CODE" }, { "carshop1_3", "OBJECT" }, { "bis_blendcoloralpha", "SCALAR" }, { "life_vdcar", "SCALAR" }, + { "db_async_extralock", "BOOL" }, { "life_clothing_purchase", "ARRAY" }, { "license_civ_driver", "BOOL" }, { "license_civ_ggst1", "BOOL" }, { "license_civ_ggst2", "BOOL" }, { "license_civ_ggst3", "BOOL" }, { "vhe_fnc_grua", "CODE" }, { "vhe_fnc_initgrua", "CODE" }, { "vhe_fnc_sirenasems", "CODE" }, { "vhe_fnc_sirenas", "CODE" }, { "reb_1_4", "OBJECT" }, + { "ggs_shop", "OBJECT" }, { "reb_helicopter_1", "OBJECT" }, { "reb_helicopter_2", "OBJECT" }, { "life_inv_spikestrip", "SCALAR" }, { "license_civ_heroin", "BOOL" }, { "life_clothing_uniform", "SCALAR" }, { "life_inv_waterbottle", "SCALAR" }, { "bis_oldlifestate", "STRING" }, { "life_inv_ornateraw", "SCALAR" }, { "life_id_revealobjects", "STRING" }, + { "h1_3", "OBJECT" }, { "bis_pp_burnparams", "ARRAY" }, { "life_session_completed", "BOOL" }, { "license_civ_gun", "BOOL" }, { "license_cop_cair", "BOOL" }, { "kron_strlower", "CODE" }, { "bis_stackedeventhandlers_oneachframe", "ARRAY" }, { "bis_teamswitched", "BOOL" }, { "life_inv_rabbitraw", "SCALAR" }, { "life_inv_defibrillator", "SCALAR" }, + { "life_inv_toolkit", "SCALAR" }, { "life_gear", "ARRAY" }, { "life_istazed", "BOOL" }, { "kron_strtoarray", "CODE" }, { "life_shop_npc", "OBJECT" }, { "life_shop_type", "STRING" }, { "life_deathcamera", "OBJECT" }, { "life_corpse", "OBJECT" }, { "life_admin_debug", "BOOL" }, { "bis_fnc_camera_target", "OBJECT" }, { "bis_fnc_camera_cam", "OBJECT" }, + { "bis_fnc_camera_acctime", "SCALAR" }, { "bis_fnc_shownotification_process", "SCRIPT" }, { "bis_fnc_shownotification_counter", "SCALAR" }, { "bis_fnc_shownotification_queue", "ARRAY" }, { "life_action_spikestrippickup", "SCALAR" }, { "life_container_active", "BOOL" }, { "life_cur_task", "TASK" }, { "life_cur_task", "OBJECT" }, { "life_enablenewsbroadcast", "BOOL" }, + { "life_enablesidechannel", "BOOL" }, { "life_fed_scam", "OBJECT" }, { "life_coprecieve", "OBJECT" }, { "life_chopshop", "STRING" }, { "life_civ_position", "ARRAY" }, { "life_is_alive", "BOOL" }, { "finishedloop", "BOOL" }, { "life_fnc_wantedcrimes", "CODE" }, { "ton_fnc_vehicleupdate", "CODE" }, { "ton_fnc_recupkeyforhc", "CODE" }, { "life_server_extdb_notloaded", "ARRAY" }, + { "ton_fnc_getplaytime", "CODE" }, { "ton_fnc_sellhousecontainer", "CODE" }, { "ton_fnc_setplaytime", "CODE" }, { "life_fnc_wantedprofupdate", "CODE" }, { "ton_fnc_deletedbcontainer", "CODE" }, { "life_save_civilian_position", "BOOL" }, { "ton_fnc_addcontainer", "CODE" }, { "ton_fnc_requestclientid", "CODE" } + }; + + allowedVariables_UI[] = { + {"rscdisplayinsertmarker", "DISPLAY" }, { "rscdisplayinventory", "DISPLAY" }, { "life_oldbackpack", "STRING" }, { "rscdisplayarcadeunit", "DISPLAY" }, { "rscstatic_display", "DISPLAY" }, { "rscdisplayarcademap_layout_2_isidson", "BOOL" }, { "rscdisplaygameoptions_listtags", "CONTROL" }, { "rscdisplaygameoptions_showdifficultygroup", "CODE" }, + { "rscdisplaygameoptions_currentvalues", "ARRAY" }, { "rscdisplaygameoptions_valuecolora", "CONTROL" }, { "rscdisplaygameoptions_valuecolorb", "CONTROL" }, { "rscdisplaygameoptions_valuecolorg", "CONTROL" }, { "rscdisplaygameoptions_valuecolorr", "CONTROL" }, { "rscdisplaygameoptions_buttoncancel", "CONTROL" }, { "rscdisplaygameoptions_listvariables_lbselchanged", "CODE" }, + { "rscdisplaygameoptions_listpresets_lbselchanged", "CODE" }, { "rscdisplaygameoptions_display", "DISPLAY" }, { "rscdisplaygameoptions_buttonok", "CONTROL" }, { "rscdisplayoptionslayout_data", "ARRAY" }, { "rscdisplaygameoptions_currentnames", "ARRAY" }, { "rscdisplayconfigure_selectedtab", "STRING" }, { "rscdisplaygameoptions_preview", "CONTROL" }, + { "rscdisplaycontrolschemes", "DISPLAY" }, { "rscdisplaygameoptions_sliderposchanged", "CODE" }, { "rscdisplaygameoptions_buttonok_activated", "BOOL" }, { "rscdisplaygameoptions_listtags_lbselchanged", "CODE" }, { "rscdisplayoptionsaudio", "DISPLAY" }, { "rscdisplaygameoptions_buttonok_action", "CODE" }, { "rscdisplaygameoptions_listpresets", "CONTROL" }, + { "rscdisplaygameoptions_listvariables", "CONTROL" }, { "rscdisplaygameoptions_previewbackground", "CONTROL" }, { "rscdisplaygameoptions_slidercolora", "CONTROL" }, { "rscdisplaygameoptions_slidercolorb", "CONTROL" }, { "rscdisplaygameoptions_slidercolorg", "CONTROL" }, { "rscdisplaygameoptions_slidercolorr", "CONTROL" }, { "rscdisplaygameoptions_previewpath", "STRING" }, + { "rscdisplaygameoptions_slidercolorr", "CONTROL" }, { "rscdisplaygameoptions", "DISPLAY" }, { "rscdisplayoptionslayout", "DISPLAY" }, { "rscdisplayconfigureaction", "DISPLAY" }, { "rscdisplayconfigurecontrollers", "DISPLAY" }, { "rscdisplaymicsensitivityoptions", "DISPLAY" }, { "rscdisplayconfigure", "DISPLAY" }, { "rscdisplayoptionsvideo", "DISPLAY" }, + { "rscdisplayoptionsvideouisize", "SCALAR" }, { "rscmsgbox", "DISPLAY" }, { "rscdisplaymission_script", "CODE" }, { "rscdisplayorbat_script", "CODE" }, { "rscdisplaychooseeditorlayout_script", "CODE" }, { "rscrespawncounter_script", "CODE" }, { "rscdisplayteamswitch_script", "CODE" }, { "rscdisplayremotemissions", "DISPLAY" }, { "rscdisplayfilter_script", "CODE" }, + { "rscdisplayloading_progress", "CONTROL" }, { "rscdisplayjoystickschemes_script", "CODE" }, { "rscdisplayfieldmanual_script", "CODE" }, { "rscdebugconsole_watchsave", "ARRAY" }, { "rscdisplaymultiplayersetupparameter_script", "CODE" }, { "rscstanceinfo_script", "CODE" }, { "rscdebugconsole_execute", "CODE" }, { "rscdisplaytemplateload_script", "CODE" }, + { "rscdisplaymissionend_script", "CODE" }, { "rscdiary_playerpos", "ARRAY" }, { "rscdisplaycustomizecontroller_script", "CODE" }, { "rscdisplayloading_display", "DISPLAY" }, { "rscdisplaygameoptions_script", "CODE" }, { "rscdisplaydedicatedserversettings_script", "CODE" }, { "rscdisplayarcademap_layout_2_script", "CODE" }, { "rscdisplayfileselectimage_script", "CODE" }, + { "rscdisplaycommunityguide_script", "CODE" }, { "rscdisplaygarage_script", "CODE" }, { "rscdisplaypublishmissionselecttags_script", "CODE" }, { "rscdisplayinterrupt_script", "CODE" }, { "rscdisplaymultiplayer", "DISPLAY" }, { "rscdisplaymain_script", "CODE" }, { "rscdisplayarcademarker_script", "CODE" }, { "rscdisplayinsertmarker_script", "CODE" }, + { "rscdisplayconfigureaction_script", "CODE" }, { "rscdisplayremotemissions_script", "CODE" }, { "rscdisplaymovieinterrupt_script", "CODE" }, { "rscunitinfo_script", "CODE" }, { "rscdisplayfileselect_script", "CODE" }, { "life_hud_nametags", "DISPLAY" }, { "rscdisplaydebriefing_script", "CODE" }, { "rscslingloadassistant_script", "CODE" }, + { "rscdisplaycampaignselect_script", "CODE" }, { "rsctestcontrolstyles_script", "CODE" }, { "igui_displays", "ARRAY" }, { "rscdisplayoptions_script", "CODE" }, { "rscdisplayhostsettings_script", "CODE" }, { "rscdisplayoptionslayout_script", "CODE" }, { "rscdisplaycreatejiraissue_script", "CODE" }, { "rscadvancedhint_script", "CODE" }, { "bis_functions_listpreinit", "CODE" }, + { "rscdisplayanimviewer_script", "CODE" }, { "rscdisplayloading", "DISPLAY" }, { "rscfiringdrilltime_script", "CODE" }, { "rscdisplayintel_script", "CODE" }, { "rscdiary_script", "CODE" }, { "rscdisplayarcadeunit_script", "CODE" }, { "rscdisplayavterminal_script", "CODE" }, { "rscdisplayrespawn_script", "CODE" }, { "loading_classes", "ARRAY" }, { "rscdebugconsole_watch", "CODE" }, + { "rscdisplaylogin_script", "CODE" }, { "rscunitinfo", "DISPLAY" }, { "bis_functions_list", "CODE" }, { "rscminimap_script", "CODE" }, { "rscstatic_script", "CODE" }, { "rscdisplayloading_ran", "SCALAR" }, { "rscdiary", "DISPLAY" }, { "rscdisplayoptionsvideo_script", "CODE" }, { "rscdisplayconfigurecontrollers_script", "CODE" }, { "rscdisplayselectisland_script", "CODE" }, + { "rscdisplayvehiclemsgbox_script", "CODE" }, { "rscdisplaybootcampmsgbox_script", "CODE" }, { "rscdisplayarcadeeffects_script", "CODE" }, { "rscdisplaynone_script", "CODE" }, { "bis_mainmenu_isplayexpanded", "BOOL" }, { "rscprocedurevisualization_script", "CODE" }, { "bis_functions_listpostinit", "CODE" }, { "rscdisplaywelcome_script", "CODE" }, { "igui_classes", "ARRAY" }, + { "rscdisplaympinterrupt_script", "CODE" }, { "rscdisplaytemplatesave_script", "CODE" }, { "gui_classes", "ARRAY" }, { "rscdisplayremotemissionvoted_script", "CODE" }, { "rscdisplayhostsettings", "DISPLAY" }, { "rscdisplayarcadegroup_script", "CODE" }, { "rscdisplaymultiplayersetupparams_script", "CODE" }, { "rscdisplayoptionsaudio_script", "CODE" }, + { "rscavcamera_script", "CODE" }, { "rscdisplayscriptinghelp_script", "CODE" }, { "rscdisplaymultiplayer_script", "CODE" }, { "rscspectator_script", "CODE" }, { "rscdisplayarcadesensor_script", "CODE" }, { "rscfunctionsviewer_script", "CODE" }, { "bis_mainmenu_isoptionsexpanded", "BOOL" }, { "bis_displayinterrupt_isoptionsexpanded", "BOOL" }, { "rscdisplaypassword_script", "CODE" }, + { "rscdisplaymultiplayersetup_script", "CODE" }, { "rscdisplayipaddress_script", "CODE" }, { "rscfiringdrillcheckpoint_script", "CODE" }, { "rscdisplaycommon_script", "CODE" }, { "rscmsgbox3_script", "CODE" }, { "rscdisplaymissionfail_script", "CODE" }, { "rscdisplaymultiplayersetup", "DISPLAY" }, { "playerhud", "DISPLAY" }, { "rscdisplaympinterrupt", "DISPLAY" }, + { "loading_displays", "ARRAY" }, { "rscdisplayloading_worldtype", "STRING" }, { "rscdisplaydlccontentbrowser_script", "CODE" }, { "rscdisplaymain", "DISPLAY" }, { "rscdisplayfunctionsviewer_script", "CODE" }, { "rscunitinfo_loop", "SCRIPT" }, { "rscdisplaypublishmission_script", "CODE" }, { "rscdisplayinventory_script", "CODE" }, { "rscdisplaylocweaponinfo_script", "CODE" }, + { "rscestablishingshot_script", "CODE" }, { "bis_mainmenu_islearnexpanded", "BOOL" }, { "rscdisplayarcademap_layout_6_script", "CODE" }, { "rscdisplaymodlauncher_script", "CODE" }, { "rscdisplayarsenal_script", "CODE" }, { "rscmsgbox_script", "CODE" }, { "rscdisplayaar_script", "CODE" }, { "rsctestcontroltypes_script", "CODE" }, { "rscdisplaycamera_script", "CODE" }, + { "rscdisplayselectsave_script", "CODE" }, { "bis_shownchat", "BOOL" }, { "rscdisplaycustomarcade_script", "CODE" }, { "rsctilesgroup_script", "CODE" }, { "rscdisplayloading_script", "CODE" }, { "rscdisplaypurchasenotification_script", "CODE" }, { "rscstanceinfo", "DISPLAY" }, { "bis_initgame", "BOOL" }, { "rscdisplaystrategicmap_script", "CODE" }, + { "bis_rscdisplayloading_selecteddlcappid", "SCALAR" }, { "rscnoise_script", "CODE" }, { "rscnotification_script", "CODE" }, { "rscmissionstatus_script", "CODE" }, { "rscdisplayconfigviewer_script", "CODE" }, { "rscdisplaydebugpublic_script", "CODE" }, { "rscdiary_playerpostime", "SCALAR" }, { "rscdisplayarcademodules_script", "CODE" }, { "rsccommmenuitems_script", "CODE" }, + { "gui_listlayerslabels", "ARRAY" }, { "gui_displays", "ARRAY" }, { "rscdisplaysinglemission_script", "CODE" }, { "rscdisplaynewuser_script", "CODE" }, { "rscdisplayloading_last", "ARRAY" }, { "rscdisplayconfigure_script", "CODE" }, { "rscdisplayarcademap_script", "CODE" }, { "rscdisplaycontrolschemes_script", "CODE" }, { "rscdisplayarcadewaypoint_script", "CODE" }, + { "rscdisplaymission", "DISPLAY" }, { "rscdisplayinterruptrevert_script", "CODE" }, { "bis_functions_listrecompile", "CODE" }, { "life_sql_id", "CODE" }, { "rscdisplaydebriefing", "DISPLAY" }, { "rscdisplaymicsensitivityoptions_script", "CODE" }, { "rscdiary_playeralpha", "SCALAR"} + }; +}; diff --git a/life_client/config/Config_Vehicles.hpp b/life_client/config/Config_Vehicles.hpp new file mode 100644 index 00000000..fce8f2c0 --- /dev/null +++ b/life_client/config/Config_Vehicles.hpp @@ -0,0 +1,698 @@ +class CarShops { + /* + * ARRAY FORMAT: + * 0: STRING (Classname) + * 1: ARRAY (This is for limiting items to certain things) + * 0: Variable to read from + * 1: Variable Value Type (SCALAR / BOOL /EQUAL) + * 2: What to compare to (-1 = Check Disabled) + * + * BLUFOR Vehicle classnames can be found here: https://community.bistudio.com/wiki/Arma_3_CfgVehicles_WEST + * OPFOR Vehicle classnames can be found here: https://community.bistudio.com/wiki/Arma_3_CfgVehicles_EAST + * Independent Vehicle classnames can be found here: https://community.bistudio.com/wiki/Arma_3_CfgVehicles_GUER + * Civilian Vehicle classnames can be found here: https://community.bistudio.com/wiki/Arma_3_CfgVehicles_CIV + */ + class civ_car { + side = "civ"; + vehicles[] = { + { "B_Quadbike_01_F", { "", "", -1 } }, + { "C_Hatchback_01_F", { "", "", -1 } }, + { "C_Offroad_01_F", { "", "", -1 } }, + { "C_SUV_01_F", { "", "", -1 } }, + { "C_Hatchback_01_sport_F", { "", "", -1 } }, + { "C_Van_01_transport_F", { "", "", -1 } } + }; + }; + + class kart_shop { + side = "civ"; + vehicles[] = { + { "C_Kart_01_Blu_F", { "", "", -1 } }, + { "C_Kart_01_Fuel_F", { "", "", -1 } }, + { "C_Kart_01_Red_F", { "", "", -1 } }, + { "C_Kart_01_Vrana_F", { "", "", -1 } } + }; + }; + + class civ_truck { + side = "civ"; + vehicles[] = { + { "C_Van_01_box_F", { "", "", -1 } }, + { "I_Truck_02_transport_F", { "", "", -1 } }, + { "I_Truck_02_covered_F", { "", "", -1 } }, + { "B_Truck_01_transport_F", { "", "", -1 } }, + { "O_Truck_03_transport_F", { "", "", -1 } }, + { "O_Truck_03_covered_F", { "", "", -1 } }, + { "B_Truck_01_box_F", { "", "", -1 } }, + { "O_Truck_03_device_F", { "", "", -1 } }, + { "C_Van_01_fuel_F", { "", "", -1 } }, + { "I_Truck_02_fuel_F", { "", "", -1 } }, + { "B_Truck_01_fuel_F", { "", "", -1 } } + }; + }; + + class civ_air { + side = "civ"; + vehicles[] = { + { "C_Heli_Light_01_civil_F", { "", "", -1 } }, + { "B_Heli_Light_01_F", { "", "", -1 } }, + { "O_Heli_Light_02_unarmed_F", { "", "", -1 } } + }; + }; + + class civ_ship { + side = "civ"; + vehicles[] = { + { "C_Rubberboat", { "", "", -1 } }, + { "C_Boat_Civil_01_F", { "", "", -1 } }, + { "B_SDV_01_F", { "", "", -1 } } + }; + }; + + class reb_car { + side = "civ"; + vehicles[] = { + { "B_Quadbike_01_F", { "", "", -1 } }, + { "B_G_Offroad_01_F", { "", "", -1 } }, + { "O_MRAP_02_F", { "", "", -1 } }, + { "B_Heli_Light_01_stripped_F", { "", "", -1 } }, + { "B_G_Offroad_01_armed_F", { "", "", -1 } } + }; + }; + + class med_shop { + side = "med"; + vehicles[] = { + { "C_Offroad_01_F", { "", "", -1 } }, + { "I_Truck_02_medical_F", { "", "", -1 } }, + { "O_Truck_03_medical_F", { "", "", -1 } }, + { "B_Truck_01_medical_F", { "", "", -1 } } + }; + }; + + class med_air_hs { + side = "med"; + vehicles[] = { + { "B_Heli_Light_01_F", { "", "", -1 } }, + { "O_Heli_Light_02_unarmed_F", { "", "", -1 } } + }; + }; + + class cop_car { + side = "cop"; + vehicles[] = { + { "C_Offroad_01_F", { "", "", -1 } }, + { "C_SUV_01_F", { "", "", -1 } }, + { "C_Hatchback_01_sport_F", { "life_coplevel", "SCALAR", 1 } }, + { "B_MRAP_01_F", { "life_coplevel", "SCALAR", 2 } }, + { "B_MRAP_01_hmg_F", { "life_coplevel", "SCALAR", 3 } } + }; + }; + + class cop_air { + side = "cop"; + vehicles[] = { + { "B_Heli_Light_01_F", { "", "", -1 } }, + { "B_Heli_Transport_01_F", { "life_coplevel", "SCALAR", 3 } } + }; + }; + + class cop_ship { + side = "cop"; + vehicles[] = { + { "B_Boat_Transport_01_F", { "", "", -1 } }, + { "C_Boat_Civil_01_police_F", { "", "", -1 } }, + { "B_Boat_Armed_01_minigun_F", { "life_coplevel", "SCALAR", 3 } }, + { "B_SDV_01_F", { "", "", -1 } } + }; + }; +}; + +class LifeCfgVehicles { + /* + * Vehicle Configs (Contains textures and other stuff) + * + * "price" is the price before any multipliers set in Master_Config are applied. + * + * Default Multiplier Values & Calculations: + * Civilian [Purchase, Sell]: [1.0, 0.5] + * Cop [Purchase, Sell]: [0.5, 0.5] + * Medic [Purchase, Sell]: [0.75, 0.5] + * ChopShop: Payout = price * 0.25 + * GarageSell: Payout = price * [0.5, 0.5, 0.5, -1] + * Cop Impound: Payout = price * 0.1 + * Pull Vehicle from Garage: Cost = price * [1, 0.5, 0.75, -1] * [0.5, 0.5, 0.5, -1] + * -- Pull Vehicle & GarageSell Array Explanation = [civ,cop,medic,east] + * + * 1: ARRAY (license required) + * Ex: { "driver", "" , "" , "" } //civilian, west, independent, east + * licenses[] = { {"CIV"}, {"COP"}, {"MEDIC"}, {"EAST"} }; + * Textures config follows { Texture Name, side, {texture(s)path}} + * Texture(s)path follows this format: + * INDEX 0: Texture Layer 0 + * INDEX 1: Texture Layer 1 + * INDEX 2: Texture Layer 2 + * etc etc etc + * + */ + + class Default { + vItemSpace = -1; + licenses[] = { {""}, {""}, {""}, {""} }; + price = -1; + textures[] = {}; + }; + + class I_Truck_02_medical_F { + vItemSpace = 150; + licenses[] = { {""}, {""}, {""}, {""} }; + price = 25000; + textures[] = {}; + }; + + class O_Truck_03_medical_F { + vItemSpace = 200; + licenses[] = { {""}, {""}, {""}, {""} }; + price = 45000; + textures[] = {}; + }; + + class B_Truck_01_medical_F { + vItemSpace = 250; + licenses[] = { {""}, {""}, {""}, {""} }; + price = 60000; + textures[] = {}; + }; + + class C_Rubberboat { + vItemSpace = 45; + licenses[] = { {"boat"}, {""}, {""}, {""} }; + price = 5000; + textures[] = { }; + }; + + class B_Heli_Transport_01_F { + vItemSpace = 200; + licenses[] = { {""}, {"cAir"}, {""}, {""} }; + price = 200000; + textures[] = {}; + }; + + class B_MRAP_01_hmg_F { + vItemSpace = 100; + licenses[] = { {""}, {""}, {""}, {""} }; + price = 750000; + textures[] = { + { "Black", "cop", { + "#(argb,8,8,3)color(0.05,0.05,0.05,1)", + "#(argb,8,8,3)color(0.05,0.05,0.05,1)", + "#(argb,8,8,3)color(0.05,0.05,0.05,1)" + } } + }; + }; + + class B_Boat_Armed_01_minigun_F { + vItemSpace = 175; + licenses[] = { {""}, {"cg"}, {""}, {""} }; + price = 75000; + textures[] = { }; + }; + + class B_Boat_Transport_01_F { + vItemSpace = 45; + licenses[] = { {""}, {"cg"}, {""}, {""} }; + price = 3000; + textures[] = { }; + }; + + class O_Truck_03_transport_F { + vItemSpace = 285; + licenses[] = { {"trucking"}, {""}, {""}, {""} }; + price = 200000; + textures[] = { }; + }; + + class O_Truck_03_device_F { + vItemSpace = 350; + licenses[] = { {"trucking"}, {""}, {""}, {""} }; + price = 450000; + textures[] = { }; + }; + + class Land_CargoBox_V1_F { + vItemSpace = 5000; + licenses[] = { {""}, {""}, {""}, {""} }; + price = -1; + textures[] = {}; + }; + + class Box_IND_Grenades_F { + vItemSpace = 350; + licenses[] = { {""}, {""}, {""}, {""} }; + price = -1; + textures[] = {}; + }; + + class B_supplyCrate_F { + vItemSpace = 700; + licenses[] = { {""}, {""}, {""}, {""} }; + price = -1; + textures[] = {}; + }; + + class B_G_Offroad_01_F { + vItemSpace = 65; + licenses[] = { {""}, {""}, {""}, {""} }; + price = 12500; + textures[] = { }; + }; + + class B_G_Offroad_01_armed_F { + vItemSpace = 65; + licenses[] = { {"rebel"}, {""}, {""}, {""} }; + price = 750000; + textures[] = { }; + }; + + class C_Boat_Civil_01_F { + vItemSpace = 85; + licenses[] = { {"boat"}, {""}, {""}, {""} }; + price = 22000; + textures[] = { }; + }; + + class C_Boat_Civil_01_police_F { + vItemSpace = 85; + licenses[] = { {""}, {"cg"}, {""}, {""} }; + price = 20000; + textures[] = { }; + }; + + class B_Truck_01_box_F { + vItemSpace = 450; + licenses[] = { {"trucking"}, {""}, {""}, {""} }; + price = 350000; + textures[] = { }; + }; + + class B_Truck_01_transport_F { + vItemSpace = 325; + licenses[] = { {"trucking"}, {""}, {""}, {""} }; + price = 275000; + textures[] = { }; + }; + + class O_MRAP_02_F { + vItemSpace = 60; + licenses[] = { {"driver"}, {""}, {""}, {""} }; + price = 150000; + textures[] = { }; + }; + + class C_Offroad_01_F { + vItemSpace = 65; + licenses[] = { {"driver"}, {""}, {""}, {""} }; + price = 12500; + textures[] = { + { "Red", "civ", { + "\A3\soft_F\Offroad_01\Data\offroad_01_ext_co.paa", + "\A3\soft_F\Offroad_01\Data\offroad_01_ext_co.paa" + } }, + { "Yellow", "civ", { + "\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE01_CO.paa", + "\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE01_CO.paa" + } }, + { "White", "civ", { + "\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE02_CO.paa", + "\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE02_CO.paa" + } }, + { "Blue", "civ", { + "\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE03_CO.paa", + "\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE03_CO.paa" + } }, + { "Dark Red", "civ", { + "\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE04_CO.paa", + "\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE04_CO.paa" + } }, + { "Blue / White", "civ", { + "\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE05_CO.paa", + "\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE05_CO.paa" + } }, + { "Taxi", "civ", { + "#(argb,8,8,3)color(0.6,0.3,0.01,1)" + } }, + { "Police", "cop", { + "#(ai,64,64,1)Fresnel(1.3,7)" + } } + }; + }; + + class C_Kart_01_Blu_F { + vItemSpace = 20; + licenses[] = { {"driver"}, {""}, {""}, {""} }; + price = 15000; + textures[] = {}; + }; +/* +To edit another information in this classes you can use this exemple. +class C_Kart_01_Fuel_F : C_Kart_01_Blu_F{ + vItemSpace = 40; + price = ; +}; + +will modify the virtual space and the price of the vehicle, but other information such as license and textures will pick up the vehicle declare at : Vehicle {}; +*/ + class C_Kart_01_Fuel_F : C_Kart_01_Blu_F{}; // Get all information of C_Kart_01_Blu_F + class C_Kart_01_Red_F : C_Kart_01_Blu_F{}; + class C_Kart_01_Vrana_F : C_Kart_01_Blu_F{}; + + class C_Hatchback_01_sport_F { + vItemSpace = 45; + licenses[] = { {"driver"}, {""}, {""}, {""} }; + price = 40000; + textures[] = { + { "Red", "civ", { + "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_sport01_co.paa" + } }, + { "Dark Blue", "civ", { + "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_sport02_co.paa" + } }, + { "Orange", "civ", { + "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_sport03_co.paa" + } }, + { "Black / White", "civ", { + "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_sport04_co.paa" + } }, + { "Beige", "civ", { + "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_sport05_co.paa" + } }, + { "Green", "civ", { + "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_sport06_co.paa" + } }, + { "Police", "cop", { + "#(ai,64,64,1)Fresnel(1.3,7)" + } } + }; + }; + + class B_Quadbike_01_F { + vItemSpace = 25; + licenses[] = { {"driver"}, {""}, {""}, {""} }; + price = 2500; + textures[] = { + { "Brown", "cop", { + "\A3\Soft_F\Quadbike_01\Data\Quadbike_01_co.paa" + } }, + { "Digi Desert", "reb", { + "\A3\Soft_F\Quadbike_01\Data\quadbike_01_opfor_co.paa" + } }, + { "Black", "civ", { + "\A3\Soft_F_beta\Quadbike_01\Data\quadbike_01_civ_black_co.paa" + } }, + { "Blue", "civ", { + "\A3\Soft_F_beta\Quadbike_01\Data\quadbike_01_civ_blue_co.paa" + } }, + { "Red", "civ", { + "\A3\Soft_F_beta\Quadbike_01\Data\quadbike_01_civ_red_co.paa" + } }, + { "White", "civ", { + "\A3\Soft_F_beta\Quadbike_01\Data\quadbike_01_civ_white_co.paa" + } }, + { "Digi Green", "civ", { + "\A3\Soft_F_beta\Quadbike_01\Data\quadbike_01_indp_co.paa" + } }, + { "Hunter Camo", "civ", { + "\a3\soft_f_gamma\Quadbike_01\data\quadbike_01_indp_hunter_co.paa" + } }, + { "Rebel Camo", "reb", { + "\a3\soft_f_gamma\Quadbike_01\data\quadbike_01_indp_hunter_co.paa" + } } + }; + }; + + class I_Truck_02_covered_F { + vItemSpace = 250; + licenses[] = { {"trucking"}, {""}, {""}, {""} }; + price = 100000; + textures[] = { + { "Orange", "civ", { + "\A3\Soft_F_Beta\Truck_02\data\truck_02_kab_co.paa", + "\a3\soft_f_beta\Truck_02\data\truck_02_kuz_co.paa" + } }, + { "Black", "cop", { + "#(argb,8,8,3)color(0.05,0.05,0.05,1)" + } } + }; + }; + + class I_Truck_02_transport_F { + vItemSpace = 200; + licenses[] = { {"trucking"}, {""}, {""}, {""} }; + price = 75000; + textures[] = { + { "Orange", "civ", { + "\A3\Soft_F_Beta\Truck_02\data\truck_02_kab_co.paa", + "\a3\soft_f_beta\Truck_02\data\truck_02_kuz_co.paa" + } }, + { "Black", "cop", { + "#(argb,8,8,3)color(0.05,0.05,0.05,1)" + } } + }; + }; + + class O_Truck_03_covered_F { + vItemSpace = 300; + licenses[] = { {"trucking"}, {""}, {""}, {""} }; + price = 250000; + textures[] = {}; + }; + + class C_Hatchback_01_F { + vItemSpace = 40; + licenses[] = { {"driver"}, {""}, {""}, {""} }; + price = 9500; + textures[] = { + { "Beige", "civ", { + "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_base01_co.paa" + } }, + { "Green", "civ", { + "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_base02_co.paa" + } }, + { "Blue", "civ", { + "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_base03_co.paa" + } }, + { "Dark Blue", "civ", { + "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_base04_co.paa" + } }, + { "Yellow", "civ", { + "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_base06_co.paa" + } }, + { "White", "civ", { + "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_base07_co.paa" + } }, + { "Grey", "civ", { + "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_base08_co.paa" + } }, + { "Black", "civ", { + "\a3\soft_f_gamma\Hatchback_01\data\hatchback_01_ext_base09_co.paa" + } } + }; + }; + + class C_SUV_01_F { + vItemSpace = 50; + licenses[] = { {"driver"}, {""}, {""}, {""} }; + price = 30000; + textures[] = { + { "Dark Red", "civ", { + "\a3\soft_f_gamma\SUV_01\Data\suv_01_ext_co.paa" + } }, + { "Silver", "civ", { + "\a3\soft_f_gamma\SUV_01\Data\suv_01_ext_03_co.paa" + } }, + { "Orange", "civ", { + "\a3\soft_f_gamma\SUV_01\Data\suv_01_ext_04_co.paa" + } }, + { "Police", "cop", { + "\a3\soft_f_gamma\SUV_01\Data\suv_01_ext_02_co.paa" + } }, + }; + }; + + class C_Van_01_transport_F { + vItemSpace = 100; + licenses[] = { {"driver"}, {""}, {""}, {""} }; + price = 45000; + textures[] = { + { "White", "civ", { + "\a3\soft_f_gamma\Van_01\Data\van_01_ext_co.paa" + } }, + { "Red", "civ", { + "\a3\soft_f_gamma\Van_01\Data\van_01_ext_red_co.paa" + } } + }; + }; + + class C_Van_01_box_F { + vItemSpace = 150; + licenses[] = { {"trucking"}, {""}, {""}, {""} }; + price = 60000; + textures[] = { + { "White", "civ", { + "\a3\soft_f_gamma\Van_01\Data\van_01_ext_co.paa" + } }, + { "Red", "civ", { + "\a3\soft_f_gamma\Van_01\Data\van_01_ext_red_co.paa" + } } + }; + }; + + class B_MRAP_01_F { + vItemSpace = 65; + licenses[] = { {""}, {""}, {""}, {""} }; + price = 30000; + textures[] = { + { "Black", "cop", { + "#(argb,8,8,3)color(0.05,0.05,0.05,1)", + "#(argb,8,8,3)color(0.05,0.05,0.05,1)" + } } + }; + }; + + class B_Heli_Light_01_stripped_F { + vItemSpace = 90; + licenses[] = { {""}, {""}, {""}, {""} }; + price = 275000; + textures[] = { + { "Rebel Digital", "reb", { + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_digital_co.paa" + } } + }; + }; + + class B_Heli_Light_01_F { + vItemSpace = 90; + licenses[] = { {"pilot"}, {"cAir"}, {"mAir"}, {""} }; + price = 245000; + textures[] = { + { "Police", "cop", { + "\a3\air_f\Heli_Light_01\Data\heli_light_01_ext_ion_co.paa" + } }, + { "Sheriff", "civ", { + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_sheriff_co.paa" + } }, + { "Civ Blue", "civ", { + "\a3\air_f\Heli_Light_01\Data\heli_light_01_ext_blue_co.paa" + } }, + { "Civ Red", "civ", { + "\a3\air_f\Heli_Light_01\Data\heli_light_01_ext_co.paa" + } }, + { "Blueline", "civ", { + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_blueline_co.paa" + } }, + { "Elliptical", "civ", { + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_elliptical_co.paa" + } }, + { "Furious", "civ", { + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_furious_co.paa" + } }, + { "Jeans Blue", "civ", { + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_jeans_co.paa" + } }, + { "Speedy Redline", "civ", { + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_speedy_co.paa" + } }, + { "Sunset", "civ", { + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_sunset_co.paa" + } }, + { "Vrana", "civ", { + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_vrana_co.paa" + } }, + { "Waves Blue", "civ", { + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_wave_co.paa" + } }, + { "Rebel Digital", "reb", { + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_digital_co.paa" + } }, + { "Digi Green", "reb", { + "\a3\air_f\Heli_Light_01\Data\heli_light_01_ext_indp_co.paa" + } }, + { "EMS White", "med", { + "#(argb,8,8,3)color(1,1,1,0.8)" + } } + }; + }; + + class C_Heli_Light_01_civil_F : B_Heli_Light_01_F { + vItemSpace = 75; + price = 245000; + }; + + class O_Heli_Light_02_unarmed_F { + vItemSpace = 210; + licenses[] = { {"pilot" }, {""}, {"mAir"}, {""} }; + price = 750000; + textures[] = { + { "Black", "cop", { + "\a3\air_f\Heli_Light_02\Data\heli_light_02_ext_co.paa" + } }, + { "White / Blue", "civ", { + "\a3\air_f\Heli_Light_02\Data\heli_light_02_ext_civilian_co.paa" + } }, + { "Digi Green", "civ", { + "\a3\air_f\Heli_Light_02\Data\heli_light_02_ext_indp_co.paa" + } }, + { "Desert Digi", "reb", { + "\a3\air_f\Heli_Light_02\Data\heli_light_02_ext_opfor_co.paa" + } }, + { "EMS White", "med", { + "#(argb,8,8,3)color(1,1,1,0.8)" + } } + }; + }; + + class B_SDV_01_F { + vItemSpace = 50; + licenses[] = { {"boat"}, {"cg"}, {""}, {""} }; + price = 150000; + textures[] = {}; + }; + + class C_Van_01_fuel_F { + vItemSpace = 20; + vFuelSpace = 19500; + licenses[] = { {"trucking"}, {""}, {""}, {""} }; + price = 120000; + textures[] = { + { "White", "civ", { + "\A3\soft_f_gamma\Van_01\data\van_01_ext_co.paa", + "\A3\soft_f_gamma\Van_01\data\van_01_tank_co.paa" + } }, + { "Red", "civ", { + "\A3\soft_f_gamma\Van_01\data\van_01_ext_red_co.paa", + "\A3\soft_f_gamma\Van_01\data\van_01_tank_red_co.paa" + } } + }; + }; + + class I_Truck_02_fuel_F { + vItemSpace = 40; + vFuelSpace = 42000; + licenses[] = { {"trucking"}, {""}, {""}, {""} }; + price = 200000; + textures[] = { + { "White", "civ", { + "\A3\Soft_F_Beta\Truck_02\data\truck_02_kab_co.paa", + "\A3\Soft_F_Beta\Truck_02\data\truck_02_fuel_co.paa" + } } + }; + }; + + class B_Truck_01_fuel_F { + vItemSpace = 50; + vFuelSpace = 50000; + licenses[] = { {"trucking"}, {""}, {""}, {""} }; + price = 250000; + textures[] = {}; + }; +}; diff --git a/life_client/config/Config_Weapons.hpp b/life_client/config/Config_Weapons.hpp new file mode 100644 index 00000000..89136710 --- /dev/null +++ b/life_client/config/Config_Weapons.hpp @@ -0,0 +1,223 @@ +/* +* Format: +* level: ARRAY (This is for limiting items to certain things) +* 0: Variable to read from +* 1: Variable Value Type (SCALAR / BOOL / EQUAL) +* 2: What to compare to (-1 = Check Disabled) +* 3: Custom exit message (Optional) +* +* items: { Classname, Itemname, BuyPrice, SellPrice } +* +* Itemname only needs to be filled if you want to rename the original object name. +* +* Weapon classnames can be found here: https://community.bistudio.com/wiki/Arma_3_CfgWeapons_Weapons +* Item classnames can be found here: https://community.bistudio.com/wiki/Arma_3_CfgWeapons_Items +* +*/ +class WeaponShops { + //Armory Shops + class gun { + name = "Billy Joe's Firearms"; + side = "civ"; + license = "gun"; + level[] = { "", "", -1, "" }; + items[] = { + { "hgun_Rook40_F", "", 6500, 500 }, + { "hgun_Pistol_heavy_02_F", "", 9850, -1 }, + { "hgun_ACPC2_F", "", 11500, -1 }, + { "hgun_PDW2000_F", "", 20000, -1 } + }; + mags[] = { + { "16Rnd_9x21_Mag", "", 25 }, + { "6Rnd_45ACP_Cylinder", "", 50 }, + { "9Rnd_45ACP_Mag", "", 45 }, + { "30Rnd_9x21_Mag", "", 75 } + }; + accs[] = { + { "optic_ACO_grn_smg", "", 2500 } + }; + }; + + class rebel { + name = "Mohammed's Jihadi Shop"; + side = "civ"; + license = "rebel"; + level[] = { "", "", -1, "" }; + items[] = { + { "arifle_TRG20_F", "", 25000, 2500 }, + { "arifle_Katiba_F", "", 30000, 5000 }, + { "srifle_DMR_01_F", "", 50000, -1 }, + { "arifle_SDAR_F", "", 20000, 7500 } + }; + mags[] = { + { "30Rnd_556x45_Stanag", "", 300 }, + { "30Rnd_65x39_caseless_green", "", 275 }, + { "10Rnd_762x54_Mag", "", 500 }, + { "20Rnd_556x45_UW_mag", "", 125 } + }; + accs[] = { + { "optic_ACO_grn", "", 3500 }, + { "optic_Holosight", "", 3600 }, + { "optic_Hamr", "", 7500 }, + { "acc_flashlight", "", 1000 } + }; + }; + + class gang { + name = "Hideout Armament"; + side = "civ"; + license = ""; + level[] = { "", "", -1, "" }; + items[] = { + { "hgun_Rook40_F", "", 1500, 500 }, + { "hgun_Pistol_heavy_02_F", "", 2500, -1 }, + { "hgun_ACPC2_F", "", 4500, -1 }, + { "hgun_PDW2000_F", "", 9500, -1 } + }; + mags[] = { + { "16Rnd_9x21_Mag", "", 25 }, + { "6Rnd_45ACP_Cylinder", "", 50 }, + { "9Rnd_45ACP_Mag", "", 45 }, + { "30Rnd_9x21_Mag", "", 75 } + }; + accs[] = { + { "optic_ACO_grn_smg", "", 950 } + }; + }; + + //Basic Shops + class genstore { + name = "Altis General Store"; + side = "civ"; + license = ""; + level[] = { "", "", -1, "" }; + items[] = { + { "Binocular", "", 150, -1 }, + { "ItemGPS", "", 100, 45 }, + { "ItemMap", "", 50, 35 }, + { "ItemCompass", "", 50, 25 }, + { "ItemWatch", "", 50, -1 }, + { "FirstAidKit", "", 150, 65 }, + { "NVGoggles", "", 2000, 980 }, + { "Chemlight_red", "", 300, -1 }, + { "Chemlight_yellow", "", 300, 50 }, + { "Chemlight_green", "", 300, 50 }, + { "Chemlight_blue", "", 300, 50 } + }; + mags[] = {}; + accs[] = {}; + }; + + class f_station_store { + name = "Altis Fuel Station Store"; + side = ""; + license = ""; + level[] = { "", "", -1, "" }; + items[] = { + { "Binocular", "", 750, -1 }, + { "ItemGPS", "", 500, 45 }, + { "ItemMap", "", 250, 35 }, + { "ItemCompass", "", 250, 25 }, + { "ItemWatch", "", 250, -1 }, + { "FirstAidKit", "", 750, 65 }, + { "NVGoggles", "", 10000, 980 }, + { "Chemlight_red", "", 1500, -1 }, + { "Chemlight_yellow", "", 1500, 50 }, + { "Chemlight_green", "", 1500, 50 }, + { "Chemlight_blue", "", 1500, 50 } + }; + mags[] = {}; + accs[] = {}; + }; + + //Cop Shops + class cop_basic { + name = "Altis Cop Shop"; + side = "cop"; + license = ""; + level[] = { "", "", -1, "" }; + items[] = { + { "arifle_sdar_F", "Taser Rifle", 20000, 7500 }, + { "hgun_P07_snds_F", "Stun Pistol", 2000, 650 }, + { "hgun_P07_F", "", 7500, 1500 }, + { "HandGrenade_Stone", "Flashbang", 1700, -1 }, + { "Binocular", "", 150, -1 }, + { "ItemGPS", "", 100, 45 }, + { "FirstAidKit", "", 150, 65 }, + { "NVGoggles", "", 2000, 980 } + }; + mags[] = { + { "16Rnd_9x21_Mag", "", 25 }, + { "20Rnd_556x45_UW_mag", "Taser Rifle Magazine", 45 } + }; + accs[] = { + { "muzzle_snds_L", "", 650 } + }; + }; + + class cop_patrol { + name = "Altis Patrol Officer Shop"; + side = "cop"; + license = ""; + level[] = { "life_coplevel", "SCALAR", 2, "You must be a Patrol Officer Rank!" }; + items[] = { + { "arifle_MX_F", "", 35000, 7500 }, + { "SMG_02_ACO_F", "", 30000, -1 }, + { "HandGrenade_Stone", "Flashbang", 1700, -1 }, + { "acc_flashlight", "", 750, 100 }, + { "optic_Holosight", "", 1200, 275 }, + { "optic_Arco", "", 2500, -1 }, + { "muzzle_snds_H", "", 2750, -1 } + }; + mags[] = { + { "30Rnd_65x39_caseless_mag", "", 130 }, + { "30Rnd_9x21_Mag", "", 250 } + }; + accs[] = { + { "acc_flashlight", "", 750 }, + { "optic_Holosight", "", 1200 }, + { "optic_Arco", "", 2500 }, + { "muzzle_snds_H", "", 2750 } + }; + }; + + class cop_sergeant { + name = "Altis Sergeant Officer Shop"; + side = "cop"; + license = ""; + level[] = { "life_coplevel", "SCALAR", 3, "You must be a Sergeant Rank!" }; + items[] = { + { "hgun_ACPC2_F", "", 17500, -1 }, + { "SMG_02_ACO_F", "", 15000, -1 }, + { "arifle_MXC_F", "", 30000, 5000 }, + { "HandGrenade_Stone", "Flashbang", 1700, -1 }, + { "optic_Arco", "", 2500, -1 }, + { "muzzle_snds_H", "", 2750, -1 } + }; + mags[] = { + { "9Rnd_45ACP_Mag", "", 200 }, + { "30Rnd_9x21_Mag", "", 60 }, + { "30Rnd_65x39_caseless_mag", "", 100 } + }; + accs[] = { + { "optic_Arco", "", 2500 }, + { "muzzle_snds_H", "", 2750 } + }; + }; + + //Medic Shops + class med_basic { + name = "store"; + side = "med"; + license = ""; + level[] = { "", "", -1, "" }; + items[] = { + { "ItemGPS", "", 100, 45 }, + { "Binocular", "", 150, -1 }, + { "FirstAidKit", "", 150, 65 }, + { "NVGoggles", "", 1200, 980 } + }; + mags[] = {}; + accs[] = {}; + }; +}; diff --git a/Altis_Life.Altis/Config_vItems.hpp b/life_client/config/Config_vItems.hpp similarity index 80% rename from Altis_Life.Altis/Config_vItems.hpp rename to life_client/config/Config_vItems.hpp index c0c97354..f19d6030 100644 --- a/Altis_Life.Altis/Config_vItems.hpp +++ b/life_client/config/Config_vItems.hpp @@ -13,7 +13,15 @@ class VirtualShops { side = "civ"; license = ""; level[] = { "", "", -1, "" }; - items[] = { "waterBottle", "rabbit", "apple", "redgull", "tbacon", "lockpick", "pickaxe", "fuelFull", "peach", "boltcutter", "storagesmall", "storagebig" }; + items[] = { "waterBottle", "rabbit", "apple", "redgull", "tbacon", "pickaxe", "toolkit", "fuelFull", "peach", "storagesmall", "storagebig", "rabbit_raw", "hen_raw", "rooster_raw", "sheep_raw", "goat_raw" }; + }; + + class med_market { + name = "STR_Shops_Market"; + side = "med"; + license = ""; + level[] = { "", "", -1, "" }; + items[] = { "waterBottle", "rabbit", "apple", "redgull", "tbacon", "toolkit", "fuelFull", "peach", "defibrillator" }; }; class rebel { @@ -21,7 +29,7 @@ class VirtualShops { side = "civ"; license = "rebel"; level[] = { "", "", -1, "" }; - items[] = { "waterBottle", "rabbit", "apple", "redgull", "tbacon", "lockpick", "pickaxe", "fuelFull", "peach", "boltcutter", "blastingcharge" }; + items[] = { "waterBottle", "rabbit", "apple", "redgull", "tbacon", "lockpick", "pickaxe", "toolkit", "fuelFull", "peach", "boltcutter", "blastingcharge" }; }; class gang { @@ -29,7 +37,7 @@ class VirtualShops { side = "civ"; license = ""; level[] = { "", "", -1, "" }; - items[] = { "waterBottle", "rabbit", "apple", "redgull", "tbacon", "lockpick", "pickaxe", "fuelFull", "peach", "boltcutter", "blastingcharge" }; + items[] = { "waterBottle", "rabbit", "apple", "redgull", "tbacon", "lockpick", "pickaxe", "toolkit", "fuelFull", "peach", "boltcutter", "blastingcharge" }; }; class wongs { @@ -48,6 +56,14 @@ class VirtualShops { items[] = { "coffee", "donuts" }; }; + class f_station_coffee { + name = "STR_Shop_Station_Coffee"; + side = ""; + license = ""; + level[] = { "", "", -1, "" }; + items[] = { "coffee", "donuts", "redgull", "toolkit", "fuelFull"}; + }; + class drugdealer { name = "STR_Shops_DrugDealer"; side = "civ"; @@ -69,7 +85,7 @@ class VirtualShops { side = "civ"; license = ""; level[] = { "", "", -1, "" }; - items[] = { "salema_raw", "salema", "ornate_raw", "ornate", "mackerel", "mackerel", "tuna_raw", "tuna", "mullet_raw", "mullet", "catshark_raw", "catshark" }; + items[] = { "salema_raw", "salema", "ornate_raw", "ornate", "mackerel_raw", "mackerel", "tuna_raw", "tuna", "mullet_raw", "mullet", "catshark_raw", "catshark" }; }; class glass { @@ -125,7 +141,7 @@ class VirtualShops { side = "cop"; license = ""; level[] = { "", "", -1, "" }; - items[] = { "donuts", "coffee", "spikeStrip", "waterBottle", "rabbit", "apple", "redgull", "fuelFull", "defusekit" }; + items[] = { "donuts", "coffee", "spikeStrip", "waterBottle", "rabbit", "apple", "redgull", "toolkit", "fuelFull", "defusekit", "defibrillator" }; }; }; @@ -139,6 +155,7 @@ class VirtualShops { * illegal = Illegal Item * edible = Item Edible (-1 = Disabled) * icon = Item Icon +* processedItem = Processed Item */ class VirtualItems { //Virtual Items @@ -155,15 +172,37 @@ class VirtualItems { icon = "icons\ico_pickaxe.paa"; }; + class defibrillator { + variable = "defibrillator"; + displayName = "STR_Item_Defibrillator"; + weight = 4; + buyPrice = 900; + sellPrice = 450; + illegal = false; + edible = -1; + icon = "icons\ico_defibrillator.paa"; + }; + + class toolkit { + variable = "toolkit"; + displayName = "STR_Item_Toolkit"; + weight = 4; + buyPrice = 350; + sellPrice = 100; + illegal = false; + edible = -1; + icon = "\a3\weapons_f\items\data\UI\gear_toolkit_ca.paa"; + }; + class fuelEmpty { variable = "fuelEmpty"; displayName = "STR_Item_FuelE"; weight = 2; buyPrice = -1; - sellPrice = -1; + sellPrice = 10; illegal = false; edible = -1; - icon = "icons\ico_fuelempty.paa"; + icon = "icons\ico_fuelEmpty.paa"; }; class fuelFull { @@ -183,9 +222,9 @@ class VirtualItems { weight = 15; buyPrice = 2500; sellPrice = 1200; - illegal = false; + illegal = true; edible = -1; - icon = "icons\ico_spikestrip.paa"; + icon = "icons\ico_spikeStrip.paa"; }; class lockpick { @@ -194,7 +233,7 @@ class VirtualItems { weight = 1; buyPrice = 150; sellPrice = 75; - illegal = false; + illegal = true; edible = -1; icon = "icons\ico_lockpick.paa"; }; @@ -205,9 +244,9 @@ class VirtualItems { weight = 12; buyPrice = -1; sellPrice = 95000; - illegal = false; + illegal = true; edible = -1; - icon = ""; + icon = "icons\ico_goldBar.paa"; }; class blastingcharge { @@ -215,7 +254,7 @@ class VirtualItems { displayName = "STR_Item_BCharge"; weight = 15; buyPrice = 35000; - sellPrice = -1; + sellPrice = 10000; illegal = true; edible = -1; icon = "icons\ico_blastingCharge.paa"; @@ -226,10 +265,10 @@ class VirtualItems { displayName = "STR_Item_BCutter"; weight = 5; buyPrice = 7500; - sellPrice = -1; + sellPrice = 1000; illegal = true; edible = -1; - icon = "icons\ico_boltcutters.paa"; + icon = "icons\ico_boltCutter.paa"; }; class defusekit { @@ -237,10 +276,10 @@ class VirtualItems { displayName = "STR_Item_DefuseKit"; weight = 2; buyPrice = 2500; - sellPrice = -1; - illegal = false; + sellPrice = 2000; + illegal = true; edible = -1; - icon = "icons\ico_defusekit.paa"; + icon = "icons\ico_defuseKit.paa"; }; class storagesmall { @@ -248,7 +287,7 @@ class VirtualItems { displayName = "STR_Item_StorageBS"; weight = 5; buyPrice = 75000; - sellPrice = -1; + sellPrice = 50000; illegal = false; edible = -1; icon = "icons\ico_storageSmall.paa"; @@ -259,7 +298,7 @@ class VirtualItems { displayName = "STR_Item_StorageBL"; weight = 10; buyPrice = 150000; - sellPrice = -1; + sellPrice = 125000; illegal = false; edible = -1; icon = "icons\ico_storageBig.paa"; @@ -274,7 +313,7 @@ class VirtualItems { sellPrice = -1; illegal = false; edible = -1; - icon = ""; + icon = "icons\ico_oilUnprocessed.paa"; }; class oil_processed { @@ -285,7 +324,7 @@ class VirtualItems { sellPrice = 3200; illegal = false; edible = -1; - icon = ""; + icon = "icons\ico_oilProcessed.paa"; }; class copper_unrefined { @@ -296,7 +335,7 @@ class VirtualItems { sellPrice = -1; illegal = false; edible = -1; - icon = ""; + icon = "icons\ico_copperOre.paa"; }; class copper_refined { @@ -307,7 +346,7 @@ class VirtualItems { sellPrice = 1500; illegal = false; edible = -1; - icon = ""; + icon = "icons\ico_copper.paa"; }; class iron_unrefined { @@ -318,7 +357,7 @@ class VirtualItems { sellPrice = -1; illegal = false; edible = -1; - icon = ""; + icon = "icons\ico_ironOre.paa"; }; class iron_refined { @@ -329,7 +368,7 @@ class VirtualItems { sellPrice = 3200; illegal = false; edible = -1; - icon = ""; + icon = "icons\ico_iron.paa"; }; class salt_unrefined { @@ -340,7 +379,7 @@ class VirtualItems { sellPrice = -1; illegal = false; edible = -1; - icon = ""; + icon = "icons\ico_saltUnprocessed.paa"; }; class salt_refined { @@ -351,7 +390,7 @@ class VirtualItems { sellPrice = 1450; illegal = false; edible = -1; - icon = ""; + icon = "icons\ico_saltProcessed.paa"; }; class sand { @@ -362,7 +401,7 @@ class VirtualItems { sellPrice = -1; illegal = false; edible = -1; - icon = ""; + icon = "icons\ico_sand.paa"; }; class glass { @@ -373,7 +412,7 @@ class VirtualItems { sellPrice = 1450; illegal = false; edible = -1; - icon = ""; + icon = "icons\ico_glass.paa"; }; class diamond_uncut { @@ -384,7 +423,7 @@ class VirtualItems { sellPrice = 750; illegal = false; edible = -1; - icon = ""; + icon = "icons\ico_diamondUncut.paa"; }; class diamond_cut { @@ -395,7 +434,7 @@ class VirtualItems { sellPrice = 2000; illegal = false; edible = -1; - icon = ""; + icon = "icons\ico_diamondCut.paa"; }; class rock { @@ -406,7 +445,7 @@ class VirtualItems { sellPrice = -1; illegal = false; edible = -1; - icon = ""; + icon = "icons\ico_rock.paa"; }; class cement { @@ -417,7 +456,7 @@ class VirtualItems { sellPrice = 1950; illegal = false; edible = -1; - icon = ""; + icon = "icons\ico_cement.paa"; }; //Drugs @@ -429,7 +468,8 @@ class VirtualItems { sellPrice = -1; illegal = true; edible = -1; - icon = ""; + icon = "icons\ico_heroinUnprocessed.paa"; + processedItem = "heroin_processed"; }; class heroin_processed { @@ -440,7 +480,7 @@ class VirtualItems { sellPrice = 2560; illegal = true; edible = -1; - icon = ""; + icon = "icons\ico_heroinProcessed.paa"; }; class cannabis { @@ -451,7 +491,8 @@ class VirtualItems { sellPrice = -1; illegal = true; edible = -1; - icon = ""; + icon = "icons\ico_cannabis.paa"; + processedItem = "marijuana"; }; class marijuana { @@ -470,10 +511,11 @@ class VirtualItems { displayName = "STR_Item_CocaineU"; weight = 6; buyPrice = -1; - sellPrice = 3000; + sellPrice = -1; illegal = true; edible = -1; - icon = ""; + icon = "icons\ico_cocaineUnprocessed.paa"; + processedItem = "cocaine_processed"; }; class cocaine_processed { @@ -484,7 +526,7 @@ class VirtualItems { sellPrice = 5000; illegal = true; edible = -1; - icon = ""; + icon = "icons\ico_cocaineProcessed.paa"; }; //Drink @@ -552,7 +594,7 @@ class VirtualItems { sellPrice = 25; illegal = false; edible = 40; - icon = "icons\ico_tbacon.paa"; + icon = "icons\ico_tBacon.paa"; }; class donuts { @@ -571,10 +613,10 @@ class VirtualItems { displayName = "STR_Item_RabbitRaw"; weight = 2; buyPrice = -1; - sellPrice = 65; + sellPrice = 95; illegal = false; edible = -1; - icon = "icons\ico_meat.paa"; + icon = "icons\ico_rabbitRaw.paa"; }; class rabbit { @@ -585,7 +627,7 @@ class VirtualItems { sellPrice = 115; illegal = false; edible = 20; - icon = "icons\ico_cookedMeat.paa"; + icon = "icons\ico_rabbit.paa"; }; class salema_raw { @@ -596,7 +638,7 @@ class VirtualItems { sellPrice = 45; illegal = false; edible = -1; - icon = "icons\ico_meat.paa"; + icon = "icons\ico_salemaRaw.paa"; }; class salema { @@ -607,7 +649,7 @@ class VirtualItems { sellPrice = 55; illegal = false; edible = 30; - icon = "icons\ico_cookedMeat.paa"; + icon = "icons\ico_cookedFish.paa"; }; class ornate_raw { @@ -618,7 +660,7 @@ class VirtualItems { sellPrice = 40; illegal = false; edible = -1; - icon = "icons\ico_meat.paa"; + icon = "icons\ico_ornateRaw.paa"; }; class ornate { @@ -629,7 +671,7 @@ class VirtualItems { sellPrice = 150; illegal = false; edible = 25; - icon = "icons\ico_cookedMeat.paa"; + icon = "icons\ico_cookedFish.paa"; }; class mackerel_raw { @@ -640,7 +682,7 @@ class VirtualItems { sellPrice = 175; illegal = false; edible = -1; - icon = "icons\ico_meat.paa"; + icon = "icons\ico_mackerelRaw.paa"; }; class mackerel { @@ -651,7 +693,7 @@ class VirtualItems { sellPrice = 200; illegal = false; edible = 30; - icon = "icons\ico_cookedMeat.paa"; + icon = "icons\ico_cookedFish.paa"; }; class tuna_raw { @@ -662,7 +704,7 @@ class VirtualItems { sellPrice = 700; illegal = false; edible = -1; - icon = "icons\ico_meat.paa"; + icon = "icons\ico_tunaRaw.paa"; }; class tuna { @@ -673,7 +715,7 @@ class VirtualItems { sellPrice = 1000; illegal = false; edible = 100; - icon = "icons\ico_cookedMeat.paa"; + icon = "icons\ico_cookedFish.paa"; }; class mullet_raw { @@ -684,7 +726,7 @@ class VirtualItems { sellPrice = 250; illegal = false; edible = -1; - icon = "icons\ico_meat.paa"; + icon = "icons\ico_mulletRaw.paa"; }; class mullet { @@ -695,7 +737,7 @@ class VirtualItems { sellPrice = 400; illegal = false; edible = 80; - icon = "icons\ico_cookedMeat.paa"; + icon = "icons\ico_cookedFish.paa"; }; class catshark_raw { @@ -706,7 +748,7 @@ class VirtualItems { sellPrice = 300; illegal = false; edible = -1; - icon = "icons\ico_meat.paa"; + icon = "icons\ico_catsharkRaw.paa"; }; class catshark { @@ -717,29 +759,29 @@ class VirtualItems { sellPrice = 500; illegal = false; edible = 100; - icon = "icons\ico_cookedMeat.paa"; + icon = "icons\ico_cookedFish.paa"; }; class turtle_raw { variable = "turtleRaw"; displayName = "STR_Item_TurtleRaw"; weight = 6; - buyPrice = 4000; + buyPrice = -1; sellPrice = 3000; illegal = true; edible = -1; - icon = "icons\ico_meat.paa"; + icon = "icons\ico_turtleRaw.paa"; }; class turtle_soup { variable = "turtleSoup"; displayName = "STR_Item_TurtleSoup"; weight = 2; - buyPrice = 2500; - sellPrice = 1000; + buyPrice = 1000; + sellPrice = 750; illegal = false; edible = 100; - icon = "icons\ico_cookedMeat.paa"; + icon = "icons\ico_turtleSoup.paa"; }; class hen_raw { @@ -747,10 +789,10 @@ class VirtualItems { displayName = "STR_Item_HenRaw"; weight = 1; buyPrice = -1; - sellPrice = 35; + sellPrice = 65; illegal = false; edible = -1; - icon = "icons\ico_meat.paa"; + icon = "icons\ico_wholeChickenRaw.paa"; }; class hen { @@ -761,7 +803,7 @@ class VirtualItems { sellPrice = 85; illegal = false; edible = 65; - icon = "icons\ico_cookedMeat.paa"; + icon = "icons\ico_wholeChicken.paa"; }; class rooster_raw { @@ -769,21 +811,21 @@ class VirtualItems { displayName = "STR_Item_RoosterRaw"; weight = 1; buyPrice = -1; - sellPrice = 35; + sellPrice = 65; illegal = false; edible = -1; - icon = "icons\ico_meat.paa"; + icon = "icons\ico_chickenDrumstickRaw.paa"; }; class rooster { variable = "rooster"; displayName = "STR_Item_Rooster"; weight = 115; - buyPrice = 85; + buyPrice = 90; sellPrice = 85; illegal = false; edible = 45; - icon = "icons\ico_cookedMeat.paa"; + icon = "icons\ico_chickenDrumstick.paa"; }; class sheep_raw { @@ -791,10 +833,10 @@ class VirtualItems { displayName = "STR_Item_SheepRaw"; weight = 2; buyPrice = -1; - sellPrice = 50; + sellPrice = 95; illegal = false; edible = -1; - icon = "icons\ico_meat.paa"; + icon = "icons\ico_lambChopRaw.paa"; }; class sheep { @@ -805,7 +847,7 @@ class VirtualItems { sellPrice = 115; illegal = false; edible = 100; - icon = "icons\ico_cookedMeat.paa"; + icon = "icons\ico_lambChop.paa"; }; class goat_raw { @@ -813,10 +855,10 @@ class VirtualItems { displayName = "STR_Item_GoatRaw"; weight = 2; buyPrice = -1; - sellPrice = 75; + sellPrice = 115; illegal = false; edible = -1; - icon = "icons\ico_meat.paa"; + icon = "icons\ico_muttonLegRaw.paa"; }; class goat { @@ -827,6 +869,6 @@ class VirtualItems { sellPrice = 135; illegal = false; edible = 100; - icon = "icons\ico_cookedMeat.paa"; + icon = "icons\ico_muttonLeg.paa"; }; }; diff --git a/life_client/core/actions/fn_arrestAction.sqf b/life_client/core/actions/fn_arrestAction.sqf new file mode 100644 index 00000000..dc89bd5e --- /dev/null +++ b/life_client/core/actions/fn_arrestAction.sqf @@ -0,0 +1,37 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_arrestAction.sqf + Author: + + Description: + Arrests the targeted person. +*/ +private["_unit","_id"]; +_unit = param [0,objNull,[objNull]]; +if (isNull _unit) exitWith {}; //Not valid +if (isNil "_unit") exitWith {}; //Not Valid +if (!(_unit isKindOf "Man")) exitWith {}; //Not a unit +if (!isPlayer _unit) exitWith {}; //Not a human +if (!(_unit getVariable "restrained")) exitWith {}; //He's not restrained. +if (!((side _unit) in [civilian,independent])) exitWith {}; //Not a civ +if (isNull _unit) exitWith {}; //Not valid + +if (life_HC_isActive) then { + [getPlayerUID _unit,_unit,player,false] remoteExecCall ["HC_fnc_wantedBounty",HC_Life]; +} else { + [getPlayerUID _unit,_unit,player,false] remoteExecCall ["life_fnc_wantedBounty",RSERV]; +}; + +if (isNull _unit) exitWith {}; //Not valid +detach _unit; +[_unit,false] remoteExecCall ["life_fnc_jail",_unit]; +[0,"STR_NOTF_Arrested_1",true, [_unit getVariable ["realname",name _unit], profileName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; + +if (LIFE_SETTINGS(getNumber,"player_advancedLog") isEqualTo 1) then { + if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then { + advanced_log = format [localize "STR_DL_AL_Arrested_BEF",_unit getVariable ["realname",name _unit]]; + } else { + advanced_log = format [localize "STR_DL_AL_Arrested",profileName,(getPlayerUID player),_unit getVariable ["realname",name _unit]]; + }; + publicVariableServer "advanced_log"; +}; diff --git a/life_client/core/actions/fn_buyLicense.sqf b/life_client/core/actions/fn_buyLicense.sqf new file mode 100644 index 00000000..f4c1ab1a --- /dev/null +++ b/life_client/core/actions/fn_buyLicense.sqf @@ -0,0 +1,22 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_buyLicense.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Called when purchasing a license. May need to be revised. +*/ +private["_type","_varName","_displayName","_sideFlag","_price"]; +_type = _this select 3; + +if (!isClass (missionConfigFile >> "Licenses" >> _type)) exitWith {}; //Bad entry? +_displayName = M_CONFIG(getText,"Licenses",_type,"displayName"); +_price = M_CONFIG(getNumber,"Licenses",_type,"price"); +_sideFlag = M_CONFIG(getText,"Licenses",_type,"side"); +_varName = LICENSE_VARNAME(_type,_sideFlag); + +if (CASH < _price) exitWith {hint format[localize "STR_NOTF_NE_1",[_price] call life_fnc_numberText,localize _displayName];}; +CASH = CASH - _price; + +titleText[format[localize "STR_NOTF_B_1", localize _displayName,[_price] call life_fnc_numberText],"PLAIN"]; +missionNamespace setVariable [_varName,true]; diff --git a/life_client/core/actions/fn_captureHideout.sqf b/life_client/core/actions/fn_captureHideout.sqf new file mode 100644 index 00000000..9c3f9215 --- /dev/null +++ b/life_client/core/actions/fn_captureHideout.sqf @@ -0,0 +1,89 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_captureHideout.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Blah blah. +*/ +private["_group","_hideout","_action","_cpRate","_cP","_progressBar","_title","_titleText","_ui","_flagTexture"]; +_hideout = (nearestObjects[getPosATL player,["Land_u_Barracks_V2_F","Land_i_Barracks_V2_F"],25]) select 0; +_group = _hideout getVariable ["gangOwner",grpNull]; + +if (isNil {group player getVariable "gang_name"}) exitWith {titleText[localize "STR_GNOTF_CreateGang","PLAIN"];}; +if (_group == group player) exitWith {titleText[localize "STR_GNOTF_Controlled","PLAIN"]}; +if ((_hideout getVariable ["inCapture",false])) exitWith {hint localize "STR_GNOTF_onePersonAtATime";}; +if (!isNull _group) then { + _gangName = _group getVariable ["gang_name",""]; + _action = [ + format[localize "STR_GNOTF_AlreadyControlled",_gangName], + localize "STR_GNOTF_CurrentCapture", + localize "STR_Global_Yes", + localize "STR_Global_No" + ] call BIS_fnc_guiMessage; + + _cpRate = 0.0045; +} else { + _cpRate = 0.0075; +}; + +if (!isNil "_action" && {!_action}) exitWith {titleText[localize "STR_GNOTF_CaptureCancel","PLAIN"];}; +life_action_inUse = true; + +//Setup the progress bar +disableSerialization; +_title = localize "STR_GNOTF_Capturing"; +5 cutRsc ["life_progress","PLAIN"]; +_ui = uiNamespace getVariable "life_progress"; +_progressBar = _ui displayCtrl 38201; +_titleText = _ui displayCtrl 38202; +_titleText ctrlSetText format["%2 (1%1)...","%",_title]; +_progressBar progressSetPosition 0.01; +_cP = 0.01; + +for "_i" from 0 to 1 step 0 do { + if (animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { + [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; + player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; + player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; + }; + sleep 0.26; + if (isNull _ui) then { + 5 cutRsc ["life_progress","PLAIN"]; + _ui = uiNamespace getVariable "life_progress"; + _progressBar = _ui displayCtrl 38201; + _titleText = _ui displayCtrl 38202; + }; + _cP = _cP + _cpRate; + _progressBar progressSetPosition _cP; + _titleText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_title]; + _hideout setVariable ["inCapture",true,true]; + if (_cP >= 1 || !alive player) exitWith {_hideout setVariable ["inCapture",false,true];}; + if (life_istazed) exitWith {_hideout setVariable ["inCapture",false,true];}; //Tazed + if (life_isknocked) exitWith {_hideout setVariable ["inCapture",false,true];}; //Knocked + if (life_interrupted) exitWith {_hideout setVariable ["inCapture",false,true];}; +}; + +//Kill the UI display and check for various states +5 cutText ["","PLAIN"]; +player playActionNow "stop"; +if (!alive player || life_istazed || life_isknocked) exitWith {life_action_inUse = false;_hideout setVariable ["inCapture",false,true];}; +if (player getVariable ["restrained",false]) exitWith {life_action_inUse = false;_hideout setVariable ["inCapture",false,true];}; +if (life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_GNOTF_CaptureCancel","PLAIN"]; life_action_inUse = false;_hideout setVariable ["inCapture",false,true];}; +life_action_inUse = false; + +titleText[localize "STR_GNOTF_Captured","PLAIN"]; +_flagTexture = [ + "\A3\Data_F\Flags\Flag_red_CO.paa", + "\A3\Data_F\Flags\Flag_green_CO.paa", + "\A3\Data_F\Flags\Flag_blue_CO.paa", + "\A3\Data_F\Flags\Flag_white_CO.paa", + "\A3\Data_F\Flags\flag_fd_red_CO.paa", + "\A3\Data_F\Flags\flag_fd_green_CO.paa", + "\A3\Data_F\Flags\flag_fd_blue_CO.paa", + "\A3\Data_F\Flags\flag_fd_orange_CO.paa" + ] call BIS_fnc_selectRandom; +_this select 0 setFlagTexture _flagTexture; +[[0,1],"STR_GNOTF_CaptureSuccess",true,[name player,(group player) getVariable "gang_name"]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; +_hideout setVariable ["inCapture",false,true]; +_hideout setVariable ["gangOwner",group player,true]; \ No newline at end of file diff --git a/life_client/core/actions/fn_catchFish.sqf b/life_client/core/actions/fn_catchFish.sqf new file mode 100644 index 00000000..6e88425b --- /dev/null +++ b/life_client/core/actions/fn_catchFish.sqf @@ -0,0 +1,30 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_catchFish.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Catches a fish that is near by. +*/ +private["_fish","_type","_typeName"]; +_fish = param [0,objNull,[objNull]]; +if (isNull _fish) exitWith {}; //Object passed is null? +if (player distance _fish > 3.5) exitWith {}; + +switch (true) do { + case ((typeOf _fish) isEqualTo "Salema_F"): {_typeName = localize "STR_ANIM_Salema"; _type = "salema_raw";}; + case ((typeOf _fish) isEqualTo "Ornate_random_F") : {_typeName = localize "STR_ANIM_Ornate"; _type = "ornate_raw";}; + case ((typeOf _fish) isEqualTo "Mackerel_F") : {_typeName = localize "STR_ANIM_Mackerel"; _type = "mackerel_raw";}; + case ((typeOf _fish) isEqualTo "Tuna_F") : {_typeName = localize "STR_ANIM_Tuna"; _type = "tuna_raw";}; + case ((typeOf _fish) isEqualTo "Mullet_F") : {_typeName = localize "STR_ANIM_Mullet"; _type = "mullet_raw";}; + case ((typeOf _fish) isEqualTo "CatShark_F") : {_typeName = localize "STR_ANIM_Catshark"; _type = "catshark_raw";}; + case ((typeOf _fish) isEqualTo "Turtle_F") : {_typeName = localize "STR_ANIM_Turtle"; _type = "turtle_raw";}; + default {_type = ""}; +}; + +if (_type isEqualTo "") exitWith {}; //Couldn't get a type + +if ([true,_type,1] call life_fnc_handleInv) then { + deleteVehicle _fish; + titleText[format[(localize "STR_NOTF_Fishing"),_typeName],"PLAIN"]; +}; diff --git a/life_client/core/actions/fn_dpFinish.sqf b/life_client/core/actions/fn_dpFinish.sqf new file mode 100644 index 00000000..f1ea35f3 --- /dev/null +++ b/life_client/core/actions/fn_dpFinish.sqf @@ -0,0 +1,21 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_dpFinish.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Finishes the DP Mission and calculates the money earned based + on distance between A->B +*/ +private["_dp","_dis","_price"]; +_dp = param [0,objNull,[objNull]]; +life_delivery_in_progress = false; +life_dp_point = nil; +_dis = round((getPos life_dp_start) distance (getPos _dp)); +_price = round(1.7 * _dis); + +["DeliverySucceeded",[format[(localize "STR_NOTF_Earned_1"),[_price] call life_fnc_numberText]]] call bis_fnc_showNotification; +life_cur_task setTaskState "Succeeded"; +player removeSimpleTask life_cur_task; +CASH = CASH + _price; +[0] call SOCK_fnc_updatePartial; diff --git a/life_client/core/actions/fn_dropFishingNet.sqf b/life_client/core/actions/fn_dropFishingNet.sqf new file mode 100644 index 00000000..9e3b617d --- /dev/null +++ b/life_client/core/actions/fn_dropFishingNet.sqf @@ -0,0 +1,38 @@ +/* + File: fn_dropFishingNet.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Drops a virtual fishing net from the boat. +*/ +private["_fish","_type","_typeName"]; +if (!(vehicle player isKindOf "Ship")) exitWith {}; +_fish = (nearestObjects[getPos vehicle player,["Fish_Base_F"],20]); +life_net_dropped = true; +titleText[localize "STR_NOTF_NetDrop","PLAIN"]; +sleep 5; +if (_fish isEqualTo []) exitWith {titleText[localize "STR_NOTF_NetDropFail","PLAIN"]; life_net_dropped = false;}; +{ + if (_x isKindOf "Fish_Base_F") then { + switch (true) do { + case ((typeOf _x) isEqualTo "Salema_F"): {_typeName = localize "STR_ANIM_Salema"; _type = "salema_raw";}; + case ((typeOf _x) isEqualTo "Ornate_random_F") : {_typeName = localize "STR_ANIM_Ornate"; _type = "ornate_raw";}; + case ((typeOf _x) isEqualTo "Mackerel_F") : {_typeName = localize "STR_ANIM_Mackerel"; _type = "mackerel_raw";}; + case ((typeOf _x) isEqualTo "Tuna_F") : {_typeName = localize "STR_ANIM_Tuna"; _type = "tuna_raw";}; + case ((typeOf _x) isEqualTo "Mullet_F") : {_typeName = localize "STR_ANIM_Mullet"; _type = "mullet_raw";}; + case ((typeOf _x) isEqualTo "CatShark_F") : {_typeName = localize "STR_ANIM_Catshark"; _type = "catshark_raw";}; + default {_type = "";}; + }; + + sleep 3; + + if ([true,_type,1] call life_fnc_handleInv) then { + deleteVehicle _x; + titleText[format[(localize "STR_NOTF_Fishing"),_typeName],"PLAIN"]; + }; + }; +} forEach (_fish); + +sleep 1.5; +titleText[localize "STR_NOTF_NetUp","PLAIN"]; +life_net_dropped = false; diff --git a/life_client/core/actions/fn_escortAction.sqf b/life_client/core/actions/fn_escortAction.sqf new file mode 100644 index 00000000..bdb638f1 --- /dev/null +++ b/life_client/core/actions/fn_escortAction.sqf @@ -0,0 +1,28 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_escortAction.sqf + Author: Bryan "Tonic" Boardwine + + Description: Attaches the desired person(_unit) to the player(player) and "escorts them". +*/ +private ["_unit"]; +_unit = param [0,objNull,[objNull]]; + +if (!isNull(player getVariable ["escortingPlayer",objNull])) exitWith {}; +if (isNil "_unit" || isNull _unit || !isPlayer _unit) exitWith {}; +if (!(side _unit in [civilian,independent])) exitWith {}; +if (player distance _unit > 3) exitWith {}; + +_unit attachTo [player,[0.1,1.1,0]]; +player setVariable ["escortingPlayer",_unit]; +player setVariable ["isEscorting",true]; +_unit setVariable ["transporting",false,true]; +_unit setVariable ["Escorting",true,true]; +player reveal _unit; + +[_unit] spawn { + _unit = _this select 0; + waitUntil {(!(_unit getVariable ["Escorting",false]))}; + player setVariable ["escortingPlayer",nil]; + player setVariable ["isEscorting",false]; +}; diff --git a/life_client/core/actions/fn_gather.sqf b/life_client/core/actions/fn_gather.sqf new file mode 100644 index 00000000..a4811c0c --- /dev/null +++ b/life_client/core/actions/fn_gather.sqf @@ -0,0 +1,76 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_gather.sqf + Author: Devilfloh + + Description: + Main functionality for gathering. +*/ +private["_maxGather","_resource","_amount","_maxGather","_requiredItem"]; +if (life_action_inUse) exitWith {}; +if ((vehicle player) != player) exitWith {}; +if (player getVariable "restrained") exitWith {hint localize "STR_NOTF_isrestrained";}; +if (player getVariable "playerSurrender") exitWith {hint localize "STR_NOTF_surrender";}; + +life_action_inUse = true; +_zone = ""; +_requiredItem = ""; +_exit = false; + +_resourceCfg = missionConfigFile >> "CfgGather" >> "Resources"; +for "_i" from 0 to count(_resourceCfg)-1 do { + + _curConfig = _resourceCfg select _i; + _resource = configName _curConfig; + _maxGather = getNumber(_curConfig >> "amount"); + _zoneSize = getNumber(_curConfig >> "zoneSize"); + _resourceZones = getArray(_curConfig >> "zones"); + _requiredItem = getText(_curConfig >> "item"); + { + if ((player distance (getMarkerPos _x)) < _zoneSize) exitWith {_zone = _x;}; + } forEach _resourceZones; + + if (_zone != "") exitWith {}; +}; + +if (_zone isEqualTo "") exitWith {life_action_inUse = false;}; + +if (_requiredItem != "") then { + _valItem = missionNamespace getVariable "life_inv_" + _requiredItem; + + if (_valItem < 1) exitWith { + switch (_requiredItem) do { + //Messages here + }; + life_action_inUse = false; + _exit = true; + }; +}; + +if (_exit) exitWith {life_action_inUse = false;}; + +_amount = round(random(_maxGather)) + 1; +_diff = [_resource,_amount,life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff; +if (_diff isEqualTo 0) exitWith { + hint localize "STR_NOTF_InvFull"; + life_action_inUse = false; +}; + +switch (_requiredItem) do { + case "pickaxe": {player say3D "mining";}; + default {player say3D "harvest";}; +}; + +for "_i" from 0 to 4 do { + player playMoveNow "AinvPercMstpSnonWnonDnon_Putdown_AmovPercMstpSnonWnonDnon"; + waitUntil{animationState player != "AinvPercMstpSnonWnonDnon_Putdown_AmovPercMstpSnonWnonDnon";}; + sleep 0.5; +}; + +if ([true,_resource,_diff] call life_fnc_handleInv) then { + _itemName = M_CONFIG(getText,"VirtualItems",_resource,"displayName"); + titleText[format[localize "STR_NOTF_Gather_Success",(localize _itemName),_diff],"PLAIN"]; +}; + +sleep 1; +life_action_inUse = false; \ No newline at end of file diff --git a/life_client/core/actions/fn_getDPMission.sqf b/life_client/core/actions/fn_getDPMission.sqf new file mode 100644 index 00000000..046fc72d --- /dev/null +++ b/life_client/core/actions/fn_getDPMission.sqf @@ -0,0 +1,43 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_getDPMission.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Selects a random DP point for a delivery mission. + Needs to be revised. +*/ +private["_dp","_target"]; +_target = param [0,objNull,[objNull]]; +if (str(_target) in LIFE_SETTINGS(getArray,"delivery_points")) then { + private "_point"; + _point = LIFE_SETTINGS(getArray,"delivery_points"); + _point deleteAt (_point find (str(_target))); + _dp = _point call BIS_fnc_selectRandom; +} else { + _dp = LIFE_SETTINGS(getArray,"delivery_points") call BIS_fnc_selectRandom; +}; + +life_dp_start = _target; + +life_delivery_in_progress = true; +life_dp_point = call compile format["%1",_dp]; + +_dp = [_dp,"_"," "] call KRON_Replace; +life_cur_task = player createSimpleTask [format["Delivery_%1",life_dp_point]]; +life_cur_task setSimpleTaskDescription [format[localize "STR_NOTF_DPStart",toUpper _dp],"Delivery Job",""]; +life_cur_task setTaskState "Assigned"; +player setCurrentTask life_cur_task; + +["DeliveryAssigned",[format[localize "STR_NOTF_DPTask",toUpper _dp]]] call bis_fnc_showNotification; + +[] spawn { + waitUntil {!life_delivery_in_progress || !alive player}; + if (!alive player) then { + life_cur_task setTaskState "Failed"; + player removeSimpleTask life_cur_task; + ["DeliveryFailed",[localize "STR_NOTF_DPFailed"]] call BIS_fnc_showNotification; + life_delivery_in_progress = false; + life_dp_point = nil; + }; +}; \ No newline at end of file diff --git a/life_client/core/actions/fn_gutAnimal.sqf b/life_client/core/actions/fn_gutAnimal.sqf new file mode 100644 index 00000000..327c0e19 --- /dev/null +++ b/life_client/core/actions/fn_gutAnimal.sqf @@ -0,0 +1,68 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_gutAnimal.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Guts the animal? +*/ +private["_animalCorpse","_upp","_ui","_progress","_pgText","_cP","_displayName","_item"]; +_animalCorpse = param [0,objNull,[objNull]]; +if (isNull _animalCorpse) exitWith {}; //Object passed is null? + +life_interrupted = false; +if (player distance _animalCorpse > 3.5) exitWith {}; //WTF need check with nearest objects I love Arma +life_action_inUse = true; + +switch (typeOf _animalCorpse) do { + case "Hen_random_F": {_displayName = localize "STR_ANIM_chicken"; _item = "hen_raw";}; + case "Cock_random_F": {_displayName = localize "STR_ANIM_Rooster"; _item = "rooster_raw";}; + case "Goat_random_F": {_displayName = localize "STR_ANIM_Goat"; _item = "goat_raw";}; + case "Sheep_random_F": {_displayName = localize "STR_ANIM_Sheep"; _item = "sheep_raw";}; + case "Rabbit_F": {_displayName = localize "STR_ANIM_Rabbit"; _item = "rabbit_raw";}; + default {_displayName = ""; _item = "";}; +}; + +if (_displayName isEqualTo "") exitWith {life_action_inUse = false;}; + +_upp = format[localize "STR_NOTF_Gutting",_displayName]; +//Setup our progress bar. +disableSerialization; +5 cutRsc ["life_progress","PLAIN"]; +_ui = uiNamespace getVariable "life_progress"; +_progress = _ui displayCtrl 38201; +_pgText = _ui displayCtrl 38202; +_pgText ctrlSetText format["%2 (1%1)...","%",_upp]; +_progress progressSetPosition 0.01; +_cP = 0.01; + +for "_i" from 0 to 1 step 0 do { + if (animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { + [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; + player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; + player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; + }; + uiSleep 0.15; + _cP = _cP + 0.01; + _progress progressSetPosition _cP; + _pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp]; + if (_cP >= 1) exitWith {}; + if (!alive player) exitWith {}; + if (isNull _animalCorpse) exitWith {}; + if (player != vehicle player) exitWith {}; + if (life_interrupted) exitWith {}; +}; + +life_action_inUse = false; +5 cutText ["","PLAIN"]; +player playActionNow "stop"; +if (isNull _animalCorpse) exitWith {life_action_inUse = false;}; +if (life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; +if (player != vehicle player) exitWith {titleText[localize "STR_NOTF_ActionInVehicle","PLAIN"];}; + +if ([true,_item,1] call life_fnc_handleInv) then { + deleteVehicle _animalCorpse; + titleText[format[(localize "STR_NOTF_Guttingfinish"),_displayName],"PLAIN"]; +} else { + titleText[(localize "STR_NOTF_InvFull"),"PLAIN"]; +}; \ No newline at end of file diff --git a/life_client/core/actions/fn_healHospital.sqf b/life_client/core/actions/fn_healHospital.sqf new file mode 100644 index 00000000..06e03441 --- /dev/null +++ b/life_client/core/actions/fn_healHospital.sqf @@ -0,0 +1,39 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_healHospital.sqf + Author: Bryan "Tonic" Boardwine + Reworked: Jesse "TKCJesse" Schultz + + Description: + Prompts user with a confirmation dialog to heal themselves. + Used at the hospitals to restore health to full. + Note: Dialog helps stop a few issues regarding money loss. +*/ +private ["_healCost","_action"]; +if (life_action_inUse) exitWith {}; +if ((damage player) < 0.01) exitWith {hint localize "STR_NOTF_HS_FullHealth"}; +_healCost = LIFE_SETTINGS(getNumber,"hospital_heal_fee"); +if (CASH < _healCost) exitWith {hint format[localize "STR_NOTF_HS_NoCash",[_healCost] call life_fnc_numberText];}; + +life_action_inUse = true; +_action = [ + format [localize "STR_NOTF_HS_PopUp",[_healCost] call life_fnc_numberText], + localize "STR_NOTF_HS_TITLE", + localize "STR_Global_Yes", + localize "STR_Global_No" +] call BIS_fnc_guiMessage; + +if (_action) then { + titleText[localize "STR_NOTF_HS_Healing","PLAIN"]; + closeDialog 0; + uiSleep 8; + if (player distance (_this select 0) > 5) exitWith {life_action_inUse = false; titleText[localize "STR_NOTF_HS_ToFar","PLAIN"]}; + titleText[localize "STR_NOTF_HS_Healed","PLAIN"]; + player setDamage 0; + CASH = CASH - _healCost; + life_action_inUse = false; +} else { + hint localize "STR_NOTF_ActionCancel"; + closeDialog 0; + life_action_inUse = false; +}; diff --git a/life_client/core/actions/fn_impoundAction.sqf b/life_client/core/actions/fn_impoundAction.sqf new file mode 100644 index 00000000..cd4ef636 --- /dev/null +++ b/life_client/core/actions/fn_impoundAction.sqf @@ -0,0 +1,80 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_impoundAction.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Impounds the vehicle +*/ +private["_vehicle","_type","_time","_value","_vehicleData","_upp","_ui","_progress","_pgText","_cP","_filters","_impoundValue","_price","_impoundMultiplier"]; +_vehicle = param [0,objNull,[objNull]]; +_filters = ["Car","Air","Ship"]; +if (!((KINDOF_ARRAY(_vehicle,_filters)))) exitWith {}; +if (player distance cursorObject > 10) exitWith {}; +if (_vehicle getVariable "NPC") exitWith {hint localize "STR_NPC_Protected"}; + +_vehicleData = _vehicle getVariable ["vehicle_info_owners",[]]; +if (_vehicleData isEqualTo 0) exitWith {deleteVehicle _vehicle}; //Bad vehicle. +_vehicleName = FETCH_CONFIG2(getText,"CfgVehicles",(typeOf _vehicle),"displayName"); +_price = M_CONFIG(getNumber,"LifeCfgVehicles",(typeOf _vehicle),"price"); +[0,"STR_NOTF_BeingImpounded",true,[((_vehicleData select 0) select 1),_vehicleName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; +life_action_inUse = true; + +_upp = localize "STR_NOTF_Impounding"; +//Setup our progress bar. +disableSerialization; +5 cutRsc ["life_progress","PLAIN"]; +_ui = uiNamespace getVariable "life_progress"; +_progress = _ui displayCtrl 38201; +_pgText = _ui displayCtrl 38202; +_pgText ctrlSetText format["%2 (1%1)...","%",_upp]; +_progress progressSetPosition 0.01; +_cP = 0.01; + +for "_i" from 0 to 1 step 0 do { + sleep 0.09; + _cP = _cP + 0.01; + _progress progressSetPosition _cP; + _pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp]; + if (_cP >= 1) exitWith {}; + if (player distance _vehicle > 10) exitWith {}; + if (!alive player) exitWith {}; +}; + +5 cutText ["","PLAIN"]; + +if (player distance _vehicle > 10) exitWith {hint localize "STR_NOTF_ImpoundingCancelled"; life_action_inUse = false;}; +if (!alive player) exitWith {life_action_inUse = false;}; + +if (count crew _vehicle isEqualTo 0) then { + if (!(KINDOF_ARRAY(_vehicle,_filters))) exitWith {life_action_inUse = false;}; + _type = FETCH_CONFIG2(getText,"CfgVehicles",(typeOf _vehicle),"displayName"); + + life_impound_inuse = true; + + if (life_HC_isActive) then { + [_vehicle,true,player] remoteExec ["HC_fnc_vehicleStore",HC_Life]; + } else { + [_vehicle,true,player] remoteExec ["TON_fnc_vehicleStore",RSERV]; + }; + + waitUntil {!life_impound_inuse}; + if (playerSide isEqualTo west) then { + _impoundMultiplier = LIFE_SETTINGS(getNumber,"vehicle_cop_impound_multiplier"); + _value = _price * _impoundMultiplier; + [0,"STR_NOTF_HasImpounded",true,[profileName,((_vehicleData select 0) select 1),_vehicleName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; + if (_vehicle in life_vehicles) then { + hint format[localize "STR_NOTF_OwnImpounded",[_value] call life_fnc_numberText,_type]; + BANK = BANK - _value; + } else { + hint format[localize "STR_NOTF_Impounded",_type,[_value] call life_fnc_numberText]; + BANK = BANK + _value; + }; + if (BANK < 0) then {BANK = 0;}; + [1] call SOCK_fnc_updatePartial; + }; +} else { + hint localize "STR_NOTF_ImpoundingCancelled"; +}; + +life_action_inUse = false; diff --git a/life_client/core/actions/fn_mine.sqf b/life_client/core/actions/fn_mine.sqf new file mode 100644 index 00000000..1ed0f368 --- /dev/null +++ b/life_client/core/actions/fn_mine.sqf @@ -0,0 +1,106 @@ +#include "..\..\script_macros.hpp" + /* + File: fn_mine.sqf + Author: Devilfloh + Editor: Dardo + + Description: + Same as fn_gather,but it allows use of probabilities for mining. + */ +private["_maxGather", "_resource", "_amount", "_requiredItem", "_mined"]; +if (life_action_inUse) exitWith {}; +if ((vehicle player) != player) exitWith {}; +if (player getVariable "restrained") exitWith { + hint localize "STR_NOTF_isrestrained"; +}; +_exit = false; +if (player getVariable "playerSurrender") exitWith { + hint localize "STR_NOTF_surrender"; +}; +life_action_inUse = true; +_zone = ""; +_requiredItem = ""; + +_resourceCfg = missionConfigFile >> "CfgGather" >> "Minerals"; +_percent = (floor random 100) + 1; //Make sure it's not 0 + +for "_i" from 0 to count(_resourceCfg)-1 do { + _curConfig = _resourceCfg select _i; + _resources = getArray(_curConfig >> "mined"); + _maxGather = getNumber(_curConfig >> "amount"); + _zoneSize = getNumber(_curConfig >> "zoneSize"); + _resourceZones = getArray(_curConfig >> "zones"); + _requiredItem = getText(_curConfig >> "item"); + _mined = ""; + + if (_resources isEqualTo []) exitWith {}; //Smart guy :O + for "_i" from 0 to count (_resources) do { + if (count _resources isEqualTo 1) exitWith { + if (!((_resources select 0) isEqualType [])) then { + _mined = _resources select 0; + } else { + _mined = (_resources select 0) select 0; + }; + }; + _resource = (_resources select _i) select 0; + _prob = (_resources select _i) select 1; + _probdiff = (_resources select _i) select 2; + if ((_percent >= _prob) && (_percent <= _probdiff)) exitWith { + _mined = _resource; + }; + }; + + { + if ((player distance(getMarkerPos _x)) < _zoneSize) exitWith { + _zone = _x; + }; + } forEach _resourceZones; + + if (_zone != "") exitWith {}; +}; + +if (_zone isEqualTo "") exitWith { + life_action_inUse = false; +}; + +if (_requiredItem != "") then { + _valItem = missionNamespace getVariable "life_inv_" + _requiredItem; + + if (_valItem < 1) exitWith { + switch (_requiredItem) do { + case "pickaxe": { + titleText[(localize "STR_NOTF_Pickaxe"), "PLAIN"]; + }; + }; + life_action_inUse = false; + _exit = true; + }; +}; + +if (_exit) exitWith { + life_action_inUse = false; +}; + +_amount = round(random(_maxGather)) + 1; +_diff = [_mined, _amount, life_carryWeight, life_maxWeight] call life_fnc_calWeightDiff; +if (_diff isEqualTo 0) exitWith { + hint localize "STR_NOTF_InvFull"; + life_action_inUse = false; +}; +player say3D "mining"; + +for "_i" from 0 to 4 do { + player playMoveNow "AinvPercMstpSnonWnonDnon_Putdown_AmovPercMstpSnonWnonDnon"; + waitUntil { + animationState player != "AinvPercMstpSnonWnonDnon_Putdown_AmovPercMstpSnonWnonDnon"; + }; + sleep 0.5; +}; + +if (([true, _mined, _diff] call life_fnc_handleInv)) then { + _itemName = M_CONFIG(getText, "VirtualItems", _mined, "displayName"); + titleText[format[localize "STR_NOTF_Mine_Success", (localize _itemName), _diff], "PLAIN"]; +}; + +sleep 2.5; +life_action_inUse = false; diff --git a/life_client/core/actions/fn_newsBroadcast.sqf b/life_client/core/actions/fn_newsBroadcast.sqf new file mode 100644 index 00000000..758b7cb6 --- /dev/null +++ b/life_client/core/actions/fn_newsBroadcast.sqf @@ -0,0 +1,39 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_newsBroadcast.sqf + Author: Jesse "tkcjesse" Schultz + + Description: + Creates the dialog and handles the data in the Channel 7 News Dialog. +*/ +#define Confirm 100104 + +private ["_msgCost","_display","_confirmBtn","_msgCooldown","_broadcastDelay"]; + +if (!dialog) then { + createDialog "life_news_broadcast"; +}; + +disableSerialization; +_display = findDisplay 100100; +_confirmBtn = _display displayCtrl Confirm; +_confirmBtn ctrlEnable false; + +_msgCooldown = (60 * LIFE_SETTINGS(getNumber,"news_broadcast_cooldown")); +_msgCost = LIFE_SETTINGS(getNumber,"news_broadcast_cost"); + +if (CASH < _msgCost) then { + hint format[localize "STR_News_NotEnough",[_msgCost] call life_fnc_numberText]; +} else { + _confirmBtn ctrlEnable true; + _confirmBtn buttonSetAction "[ctrlText 100101,ctrlText 100102,profilename] call life_fnc_postNewsBroadcast; closeDialog 0;"; +}; + +if (isNil "life_broadcastTimer" || {(time - life_broadcastTimer) > _msgCooldown}) then { + _broadcastDelay = localize "STR_News_Now"; +} else { + _broadcastDelay = [(_msgCooldown - (time - life_broadcastTimer))] call BIS_fnc_secondsToString; + _confirmBtn ctrlEnable false; +}; + +CONTROL(100100,100103) ctrlSetStructuredText parseText format[ localize "STR_News_StructuredText",[_msgCost] call life_fnc_numberText,_broadcastDelay]; \ No newline at end of file diff --git a/life_client/core/actions/fn_packupSpikes.sqf b/life_client/core/actions/fn_packupSpikes.sqf new file mode 100644 index 00000000..31b0365c --- /dev/null +++ b/life_client/core/actions/fn_packupSpikes.sqf @@ -0,0 +1,17 @@ +/* + File: fn_packupSpikes.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Packs up a deployed spike strip. +*/ +private["_spikes"]; +_spikes = nearestObjects[getPos player,["Land_Razorwire_F"],8] select 0; +if (isNil "_spikes") exitWith {}; + +if ([true,"spikeStrip",1] call life_fnc_handleInv) then { + titleText[localize "STR_NOTF_SpikeStrip","PLAIN"]; + player removeAction life_action_spikeStripPickup; + life_action_spikeStripPickup = nil; + deleteVehicle _spikes; +}; \ No newline at end of file diff --git a/life_client/core/actions/fn_pickupItem.sqf b/life_client/core/actions/fn_pickupItem.sqf new file mode 100644 index 00000000..0f58e076 --- /dev/null +++ b/life_client/core/actions/fn_pickupItem.sqf @@ -0,0 +1,62 @@ +#include "..\..\script_macros.hpp" +#define INUSE(ENTITY) ENTITY setVariable ["inUse",false,true] +/* + File: fn_pickupItem.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Master handling for picking up an item. +*/ +private ["_itemInfo","_itemName","_illegal","_diff"]; +if ((time - life_action_delay) < 2) exitWith {hint localize "STR_NOTF_ActionDelay"; INUSE(_this);}; +if (isNull _this || {player distance _this > 3}) exitWith {INUSE(_this);}; + +_itemInfo = _this getVariable ["item",[]]; if (count _itemInfo isEqualTo 0) exitWith {deleteVehicle _this;}; +_illegal = ITEM_ILLEGAL(_itemInfo select 0); +_itemName = ITEM_NAME(_itemInfo select 0); +if (isLocalized _itemName) then { + _itemName = (localize _itemName); +}; + +if (playerSide isEqualTo west && _illegal isEqualTo 1) exitWith { + titleText[format[localize "STR_NOTF_PickedEvidence",_itemName,[round(ITEM_SELLPRICE(_itemInfo select 0) / 2)] call life_fnc_numberText],"PLAIN"]; + BANK = BANK + round(ITEM_SELLPRICE(_itemInfo select 0) / 2); + deleteVehicle _this; + [1] call SOCK_fnc_updatePartial; + life_action_delay = time; +}; + +life_action_delay = time; +_diff = [(_itemInfo select 0),(_itemInfo select 1),life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff; +if (_diff <= 0) exitWith {hint localize "STR_NOTF_InvFull"; INUSE(_this);}; + +if (!(_diff isEqualTo (_itemInfo select 1))) then { + if ([true,(_itemInfo select 0),_diff] call life_fnc_handleInv) then { + player playMove "AinvPknlMstpSlayWrflDnon"; + + _this setVariable ["item",[(_itemInfo select 0),(_itemInfo select 1) - _diff],true]; + titleText[format[localize "STR_NOTF_Picked",_diff,_itemName],"PLAIN"]; + INUSE(_this); + } else { + INUSE(_this); + }; +} else { + if ([true,(_itemInfo select 0),(_itemInfo select 1)] call life_fnc_handleInv) then { + deleteVehicle _this; + //waitUntil{isNull _this}; + player playMove "AinvPknlMstpSlayWrflDnon"; + + titleText[format[localize "STR_NOTF_Picked",_diff,_itemName],"PLAIN"]; + } else { + INUSE(_this); + }; +}; + +if (LIFE_SETTINGS(getNumber,"player_advancedLog") isEqualTo 1) then { + if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then { + advanced_log = format [localize "STR_DL_AL_pickedUp_BEF",_diff,_itemName]; + } else { + advanced_log = format [localize "STR_DL_AL_pickedUp",profileName,(getPlayerUID player),_diff,_itemName]; + }; + publicVariableServer "advanced_log"; +}; diff --git a/life_client/core/actions/fn_pickupMoney.sqf b/life_client/core/actions/fn_pickupMoney.sqf new file mode 100644 index 00000000..fe80848c --- /dev/null +++ b/life_client/core/actions/fn_pickupMoney.sqf @@ -0,0 +1,37 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_pickupMoney.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Picks up money +*/ +private "_value"; +if ((time - life_action_delay) < 1.5) exitWith {hint localize "STR_NOTF_ActionDelay"; _this setVariable ["inUse",false,true];}; +if (isNull _this || {player distance _this > 3}) exitWith {_this setVariable ["inUse",false,true];}; + +_value = ((_this getVariable "item") select 1); +if (!isNil "_value") exitWith { + deleteVehicle _this; + + switch (true) do { + case (_value > 20000000) : {_value = 100000;}; //VAL>20mil->100k + case (_value > 5000000) : {_value = 250000;}; //VAL>5mil->250k + default {}; + }; + + player playMove "AinvPknlMstpSlayWrflDnon"; + titleText[format[localize "STR_NOTF_PickedMoney",[_value] call life_fnc_numberText],"PLAIN"]; + CASH = CASH + _value; + [0] call SOCK_fnc_updatePartial; + life_action_delay = time; + + if (LIFE_SETTINGS(getNumber,"player_moneyLog") isEqualTo 1) then { + if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then { + money_log = format [localize "STR_DL_ML_pickedUpMoney_BEF",[_value] call life_fnc_numberText,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + } else { + money_log = format [localize "STR_DL_ML_pickedUpMoney",profileName,(getPlayerUID player),[_value] call life_fnc_numberText,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + }; + publicVariableServer "money_log"; + }; +}; \ No newline at end of file diff --git a/life_client/core/actions/fn_postBail.sqf b/life_client/core/actions/fn_postBail.sqf new file mode 100644 index 00000000..12bf1099 --- /dev/null +++ b/life_client/core/actions/fn_postBail.sqf @@ -0,0 +1,20 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_postBail.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Called when the player attempts to post bail. + Needs to be revised. +*/ +private["_unit"]; +_unit = param [1,objNull,[objNull]]; +if (life_bail_paid) exitWith {}; +if (isNil "life_bail_amount") then {life_bail_amount = 3500;}; +if (!life_canpay_bail) exitWith {hint localize "STR_NOTF_Bail_Post"}; +if (BANK < life_bail_amount) exitWith {hint format[localize "STR_NOTF_Bail_NotEnough",life_bail_amount];}; + +BANK = BANK - life_bail_amount; +life_bail_paid = true; +[1] call SOCK_fnc_updatePartial; +[0,"STR_NOTF_Bail_Bailed",true,[profileName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; \ No newline at end of file diff --git a/life_client/core/actions/fn_processAction.sqf b/life_client/core/actions/fn_processAction.sqf new file mode 100644 index 00000000..b1799a45 --- /dev/null +++ b/life_client/core/actions/fn_processAction.sqf @@ -0,0 +1,147 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_processAction.sqf + Author: Bryan "Tonic" Boardwine + Modified : NiiRoZz + + Description: + Master handling for processing an item. + NiiRoZz : Added multiprocess +*/ +private["_vendor","_type","_itemInfo","_oldItem","_newItemWeight","_newItem","_oldItemWeight","_cost","_upp","_hasLicense","_itemName","_oldVal","_ui","_progress","_pgText","_cP","_materialsRequired","_materialsGiven","_noLicenseCost","_text","_filter","_totalConversions","_minimumConversions"]; +_vendor = param [0,objNull,[objNull]]; +_type = param [3,"",[""]]; +//Error check +if (isNull _vendor || _type isEqualTo "" || (player distance _vendor > 10)) exitWith {}; +life_action_inUse = true;//Lock out other actions during processing. + +if (isClass (missionConfigFile >> "ProcessAction" >> _type)) then { + _filter = false; + _materialsRequired = M_CONFIG(getArray,"ProcessAction",_type,"MaterialsReq"); + _materialsGiven = M_CONFIG(getArray,"ProcessAction",_type,"MaterialsGive"); + _noLicenseCost = M_CONFIG(getNumber,"ProcessAction",_type,"NoLicenseCost"); + _text = M_CONFIG(getText,"ProcessAction",_type,"Text"); +} else {_filter = true;}; + +if (_filter) exitWith {life_action_inUse = false;}; + +_itemInfo = [_materialsRequired,_materialsGiven,_noLicenseCost,(localize format["%1",_text])]; +if (count _itemInfo isEqualTo 0) exitWith {life_action_inUse = false;}; + +//Setup vars. +_oldItem = _itemInfo select 0; +_newItem = _itemInfo select 1; +_cost = _itemInfo select 2; +_upp = _itemInfo select 3; +_exit = false; +if (count _oldItem isEqualTo 0) exitWith {life_action_inUse = false;}; + +_totalConversions = []; +{ + _var = ITEM_VALUE(_x select 0); + if (_var isEqualTo 0) exitWith {_exit = true;}; + if (_var < (_x select 1)) exitWith {_exit = true;}; + _totalConversions pushBack (floor (_var/(_x select 1))); +} forEach _oldItem; + +if (_exit) exitWith {life_is_processing = false; hint localize "STR_NOTF_NotEnoughItemProcess"; life_action_inUse = false;}; + +if (_vendor in [mari_processor,coke_processor,heroin_processor]) then { + _hasLicense = true; +} else { + _hasLicense = LICENSE_VALUE(_type,"civ"); +}; + +_cost = _cost * (count _oldItem); + +_minimumConversions = _totalConversions call BIS_fnc_lowestNum; +_oldItemWeight = 0; +{ + _weight = ([_x select 0] call life_fnc_itemWeight) * (_x select 1); + _oldItemWeight = _oldItemWeight + _weight; +} count _oldItem; + +_newItemWeight = 0; +{ + _weight = ([_x select 0] call life_fnc_itemWeight) * (_x select 1); + _newItemWeight = _newItemWeight + _weight; +} count _newItem; + +_exit = false; + +if (_newItemWeight > _oldItemWeight) then { + _netChange = _newItemWeight - _oldItemWeight; + _freeSpace = life_maxWeight - life_carryWeight; + if (_freeSpace < _netChange) exitWith {_exit = true;}; + private _estConversions = floor(_freeSpace / _netChange); + if (_estConversions < _minimumConversions) then { + _minimumConversions = _estConversions; + }; +}; + +if (_exit) exitWith {hint localize "STR_Process_Weight"; life_is_processing = false; life_action_inUse = false;}; + +//Setup our progress bar. +disableSerialization; +5 cutRsc ["life_progress","PLAIN"]; +_ui = uiNamespace getVariable "life_progress"; +_progress = _ui displayCtrl 38201; +_pgText = _ui displayCtrl 38202; +_pgText ctrlSetText format["%2 (1%1)...","%",_upp]; +_progress progressSetPosition 0.01; +_cP = 0.01; + +life_is_processing = true; + +if (_hasLicense) then { + for "_i" from 0 to 1 step 0 do { + sleep 0.28; + _cP = _cP + 0.01; + _progress progressSetPosition _cP; + _pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp]; + if (_cP >= 1) exitWith {}; + if (player distance _vendor > 10) exitWith {}; + }; + if (player distance _vendor > 10) exitWith {hint localize "STR_Process_Stay"; 5 cutText ["","PLAIN"]; life_is_processing = false; life_action_inUse = false;}; + + { + [false,(_x select 0),((_x select 1)*(_minimumConversions))] call life_fnc_handleInv; + } count _oldItem; + + { + [true,(_x select 0),((_x select 1)*(_minimumConversions))] call life_fnc_handleInv; + } count _newItem; + + 5 cutText ["","PLAIN"]; + if (_minimumConversions isEqualTo (_totalConversions call BIS_fnc_lowestNum)) then {hint localize "STR_NOTF_ItemProcess";} else {hint localize "STR_Process_Partial";}; + life_is_processing = false; life_action_inUse = false; +} else { + if (CASH < _cost) exitWith {hint format[localize "STR_Process_License",[_cost] call life_fnc_numberText]; 5 cutText ["","PLAIN"]; life_is_processing = false; life_action_inUse = false;}; + + for "_i" from 0 to 1 step 0 do { + sleep 0.9; + _cP = _cP + 0.01; + _progress progressSetPosition _cP; + _pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp]; + if (_cP >= 1) exitWith {}; + if (player distance _vendor > 10) exitWith {}; + }; + + if (player distance _vendor > 10) exitWith {hint localize "STR_Process_Stay"; 5 cutText ["","PLAIN"]; life_is_processing = false; life_action_inUse = false;}; + if (CASH < _cost) exitWith {hint format[localize "STR_Process_License",[_cost] call life_fnc_numberText]; 5 cutText ["","PLAIN"]; life_is_processing = false; life_action_inUse = false;}; + + { + [false,(_x select 0),((_x select 1)*(_minimumConversions))] call life_fnc_handleInv; + } count _oldItem; + + { + [true,(_x select 0),((_x select 1)*(_minimumConversions))] call life_fnc_handleInv; + } count _newItem; + + 5 cutText ["","PLAIN"]; + if (_minimumConversions isEqualTo (_totalConversions call BIS_fnc_lowestNum)) then {hint localize "STR_NOTF_ItemProcess";} else {hint localize "STR_Process_Partial";}; + CASH = CASH - _cost; + [0] call SOCK_fnc_updatePartial; + life_is_processing = false; + life_action_inUse = false; +}; diff --git a/life_client/core/actions/fn_pulloutAction.sqf b/life_client/core/actions/fn_pulloutAction.sqf new file mode 100644 index 00000000..f71f1b77 --- /dev/null +++ b/life_client/core/actions/fn_pulloutAction.sqf @@ -0,0 +1,17 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_pulloutAction.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Pulls civilians out of a car if it's stopped. +*/ +private["_crew"]; +_crew = crew cursorObject; + +{ + if (side _x != west) then { + _x setVariable ["transporting",false,true]; _x setVariable ["Escorting",false,true]; + [_x] remoteExecCall ["life_fnc_pulloutVeh",_x]; + }; +} forEach _crew; diff --git a/life_client/core/actions/fn_putInCar.sqf b/life_client/core/actions/fn_putInCar.sqf new file mode 100644 index 00000000..2b65709f --- /dev/null +++ b/life_client/core/actions/fn_putInCar.sqf @@ -0,0 +1,19 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_putInCar.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Finds the nearest vehicle and loads the target into the vehicle. +*/ +private["_unit"]; +_unit = param [0,objNull,[objNull]]; +if (isNull _unit || !isPlayer _unit) exitWith {}; + +_nearestVehicle = nearestObjects[getPosATL player,["Car","Ship","Submarine","Air"],10] select 0; +if (isNil "_nearestVehicle") exitWith {hint localize "STR_NOTF_VehicleNear"}; + +detach _unit; +[_nearestVehicle] remoteExecCall ["life_fnc_moveIn",_unit]; +_unit setVariable ["Escorting",false,true]; +_unit setVariable ["transporting",true,true]; \ No newline at end of file diff --git a/life_client/core/actions/fn_removeContainer.sqf b/life_client/core/actions/fn_removeContainer.sqf new file mode 100644 index 00000000..54ad20c2 --- /dev/null +++ b/life_client/core/actions/fn_removeContainer.sqf @@ -0,0 +1,48 @@ +#include "..\..\script_macros.hpp" +/* + File : removeContainer.sqf + Author: NiiRoZz + + Description: + Delete Container from house storage +*/ +private["_house","_action","_container","_containerType","_containers"]; +_container = param [0,objNull,[objNull]]; +_containerType = typeOf _container; +_house = nearestObject [player, "House"]; +if (!(_house in life_vehicles)) exitWith {hint localize "STR_ISTR_Box_NotinHouse"}; +if (isNull _container) exitWith {}; +_containers = _house getVariable ["containers",[]]; +closeDialog 0; + +_action = [ + format[localize "STR_House_DeleteContainerMSG"],localize "STR_pInAct_RemoveContainer",localize "STR_Global_Remove",localize "STR_Global_Cancel" +] call BIS_fnc_guiMessage; + +if (_action) then { + private ["_box","_diff"]; + _box = switch (_containerType) do { + case ("B_supplyCrate_F"): {"storagebig"}; + case ("Box_IND_Grenades_F"): {"storagesmall"}; + default {"None"}; + }; + if (_box == "None") exitWith {}; + + _diff = [_box,1,life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff; + if (_diff isEqualTo 0) exitWith {hint localize "STR_NOTF_InvFull"}; + + if (life_HC_isActive) then { + [_container] remoteExecCall ["HC_fnc_deleteDBContainer",HC_Life]; + } else { + [_container] remoteExecCall ["TON_fnc_deleteDBContainer",RSERV]; + }; + + { + if (_x == _container) then { + _containers deleteAt _forEachIndex; + }; + } forEach _containers; + _house setVariable ["containers",_containers,true]; + + [true,_box,1] call life_fnc_handleInv; +}; diff --git a/life_client/core/actions/fn_repairTruck.sqf b/life_client/core/actions/fn_repairTruck.sqf new file mode 100644 index 00000000..3501987a --- /dev/null +++ b/life_client/core/actions/fn_repairTruck.sqf @@ -0,0 +1,71 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_repairTruck.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Main functionality for toolkits, to be revised in later version. +*/ +private["_veh","_upp","_ui","_progress","_pgText","_cP","_displayName","_test","_sideRepairArray"]; +_veh = cursorObject; +life_interrupted = false; +if (isNull _veh) exitWith {}; +if ((_veh isKindOf "Car") || (_veh isKindOf "Ship") || (_veh isKindOf "Air")) then { + if (life_inv_toolkit > 0) then { + life_action_inUse = true; + _displayName = FETCH_CONFIG2(getText,"CfgVehicles",(typeOf _veh),"displayName"); + _upp = format[localize "STR_NOTF_Repairing",_displayName]; + + //Setup our progress bar. + disableSerialization; + 5 cutRsc ["life_progress","PLAIN"]; + _ui = uiNamespace getVariable "life_progress"; + _progress = _ui displayCtrl 38201; + _pgText = _ui displayCtrl 38202; + _pgText ctrlSetText format["%2 (1%1)...","%",_upp]; + _progress progressSetPosition 0.01; + _cP = 0.01; + + for "_i" from 0 to 1 step 0 do { + if (animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { + [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; + player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; + player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; + }; + + sleep 0.27; + _cP = _cP + 0.01; + _progress progressSetPosition _cP; + _pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp]; + if (_cP >= 1) exitWith {}; + if (!alive player) exitWith {}; + if (player != vehicle player) exitWith {}; + if (life_interrupted) exitWith {}; + }; + + life_action_inUse = false; + 5 cutText ["","PLAIN"]; + player playActionNow "stop"; + if (life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; + if (player != vehicle player) exitWith {titleText[localize "STR_NOTF_ActionInVehicle","PLAIN"];}; + + _sideRepairArray = LIFE_SETTINGS(getArray,"vehicle_infiniteRepair"); + + //Check if playerSide has infinite repair enabled + if (playerSide isEqualTo civilian && (_sideRepairArray select 0) isEqualTo 0) then { + [false,"toolkit",1] call life_fnc_handleInv; + }; + if (playerSide isEqualTo west && (_sideRepairArray select 1) isEqualTo 0) then { + [false,"toolkit",1] call life_fnc_handleInv; + }; + if (playerSide isEqualTo independent && (_sideRepairArray select 2) isEqualTo 0) then { + [false,"toolkit",1] call life_fnc_handleInv; + }; + if (playerSide isEqualTo east && (_sideRepairArray select 3) isEqualTo 0) then { + [false,"toolkit",1] call life_fnc_handleInv; + }; + + _veh setDamage 0; + titleText[localize "STR_NOTF_RepairedVehicle","PLAIN"]; + }; +}; diff --git a/life_client/core/actions/fn_restrainAction.sqf b/life_client/core/actions/fn_restrainAction.sqf new file mode 100644 index 00000000..8c8e2848 --- /dev/null +++ b/life_client/core/actions/fn_restrainAction.sqf @@ -0,0 +1,21 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_restrainAction.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Restrains the target. +*/ +private["_unit"]; +_unit = cursorObject; +if (isNull _unit) exitWith {}; //Not valid +if (player distance _unit > 3) exitWith {}; +if (_unit getVariable "restrained") exitWith {}; +if (side _unit isEqualTo west) exitWith {}; +if (player isEqualTo _unit) exitWith {}; +if (!isPlayer _unit) exitWith {}; +//Broadcast! + +_unit setVariable ["restrained",true,true]; +[player] remoteExec ["life_fnc_restrain",_unit]; +[0,"STR_NOTF_Restrained",true,[_unit getVariable ["realname", name _unit], profileName]] remoteExecCall ["life_fnc_broadcast",west]; diff --git a/life_client/core/actions/fn_robAction.sqf b/life_client/core/actions/fn_robAction.sqf new file mode 100644 index 00000000..b99394b1 --- /dev/null +++ b/life_client/core/actions/fn_robAction.sqf @@ -0,0 +1,18 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_robAction.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Starts the robbing process? +*/ +private["_target"]; +_target = cursorObject; + +//Error checks +if (isNull _target) exitWith {}; +if (!isPlayer _target) exitWith {}; + +if (_target getVariable ["robbed",false]) exitWith {}; +[player] remoteExecCall ["life_fnc_robPerson",_target]; +_target setVariable ["robbed",true,true]; diff --git a/life_client/core/actions/fn_searchAction.sqf b/life_client/core/actions/fn_searchAction.sqf new file mode 100644 index 00000000..da370aaa --- /dev/null +++ b/life_client/core/actions/fn_searchAction.sqf @@ -0,0 +1,16 @@ +/* + File: fn_searchAction.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Starts the searching process. +*/ +params [ + ["_unit",objNull,[objNull]] +]; +if (isNull _unit) exitWith {}; +hint localize "STR_NOTF_Searching"; +sleep 2; +if (player distance _unit > 5 || !alive player || !alive _unit) exitWith {hint localize "STR_NOTF_CannotSearchPerson"}; +[player] remoteExec ["life_fnc_searchClient",_unit]; +life_action_inUse = true; \ No newline at end of file diff --git a/life_client/core/actions/fn_searchVehAction.sqf b/life_client/core/actions/fn_searchVehAction.sqf new file mode 100644 index 00000000..e63183e0 --- /dev/null +++ b/life_client/core/actions/fn_searchVehAction.sqf @@ -0,0 +1,30 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_searchVehAction.sqf + Author: + + Description: + +*/ +private["_vehicle","_data"]; +_vehicle = cursorObject; +if ((_vehicle isKindOf "Car") || !(_vehicle isKindOf "Air") || !(_vehicle isKindOf "Ship")) then { + _owners = _vehicle getVariable "vehicle_info_owners"; + if (isNil "_owners") exitWith {hint localize "STR_NOTF_VehCheat"; deleteVehicle _vehicle;}; + + life_action_inUse = true; + hint localize "STR_NOTF_Searching"; + + sleep 3; + life_action_inUse = false; + + if (player distance _vehicle > 10 || !alive player || !alive _vehicle) exitWith {hint localize "STR_NOTF_SearchVehFail";}; + //_inventory = [(_vehicle getVariable "vehicle_info_inv")] call fnc_veh_inv; + //if (isNil {_inventory}) then {_inventory = "Nothing in storage."}; + _owners = [_owners] call life_fnc_vehicleOwners; + + if (_owners == "any
") then { + _owners = "No owners, impound it
"; + }; + hint parseText format[localize "STR_NOTF_SearchVeh",_owners]; +}; diff --git a/life_client/core/actions/fn_seizePlayerAction.sqf b/life_client/core/actions/fn_seizePlayerAction.sqf new file mode 100644 index 00000000..c8d8244d --- /dev/null +++ b/life_client/core/actions/fn_seizePlayerAction.sqf @@ -0,0 +1,17 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_seizePlayerAction.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Starts the seize process.. + Based off Tonic's fn_searchAction.sqf +*/ +params [ + ["_unit",objNull,[objNull]] +]; +if (isNull _unit) exitWith {}; +sleep 2; +if (player distance _unit > 5 || !alive player || !alive _unit) exitWith {hint localize "STR_NOTF_CannotSeizePerson"}; +[player] remoteExec ["life_fnc_seizeClient",_unit]; +life_action_inUse = false; \ No newline at end of file diff --git a/life_client/core/actions/fn_serviceChopper.sqf b/life_client/core/actions/fn_serviceChopper.sqf new file mode 100644 index 00000000..b181f5d2 --- /dev/null +++ b/life_client/core/actions/fn_serviceChopper.sqf @@ -0,0 +1,50 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_serviceChopper.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Main functionality for the chopper service paid, to be replaced in later version. +*/ +private ["_serviceCost"]; +disableSerialization; +private["_search","_ui","_progress","_cP","_pgText"]; +if (life_action_inUse) exitWith {hint localize "STR_NOTF_Action"}; + +_serviceCost = LIFE_SETTINGS(getNumber,"service_chopper"); +_search = nearestObjects[getPos air_sp, ["Air"],10]; + +if (count _search isEqualTo 0) exitWith {hint localize "STR_Service_Chopper_NoAir"}; +if (CASH < _serviceCost) exitWith {hint localize "STR_Serive_Chopper_NotEnough"}; + +life_action_inUse = true; +5 cutRsc ["life_progress","PLAIN"]; +_ui = uiNamespace getVariable "life_progress"; +_progress = _ui displayCtrl 38201; +_pgText = _ui displayCtrl 38202; +_pgText ctrlSetText format[localize "STR_Service_Chopper_Servicing","waiting..."]; +_progress progressSetPosition 0.01; +_cP = 0.01; + +for "_i" from 0 to 1 step 0 do { + sleep 0.2; + _cP = _cP + 0.01; + _progress progressSetPosition _cP; + _pgText ctrlSetText format[localize "STR_Service_Chopper_Servicing",round(_cP * 100)]; + if (_cP >= 1) exitWith {}; +}; + +if (!alive (_search select 0) || (_search select 0) distance air_sp > 15) exitWith {life_action_inUse = false; hint localize "STR_Service_Chopper_Missing"}; + +CASH = CASH - _serviceCost; +if (!local (_search select 0)) then { + [(_search select 0),1] remoteExecCall ["life_fnc_setFuel",(_search select 0)]; +} else { + (_search select 0) setFuel 1; +}; + +(_search select 0) setDamage 0; + +5 cutText ["","PLAIN"]; +titleText [localize "STR_Service_Chopper_Done","PLAIN"]; +life_action_inUse = false; diff --git a/life_client/core/actions/fn_stopEscorting.sqf b/life_client/core/actions/fn_stopEscorting.sqf new file mode 100644 index 00000000..18d9c4c1 --- /dev/null +++ b/life_client/core/actions/fn_stopEscorting.sqf @@ -0,0 +1,18 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_stopEscorting.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Detaches player(_unit) from the Escorter(player) and sets them back down. +*/ +private["_unit"]; +_unit = player getVariable ["escortingPlayer",objNull]; +if (isNull _unit) then {_unit = cursorTarget;}; //Emergency fallback. +if (isNull _unit) exitWith {}; //Target not found even after using cursorTarget. +if (!(_unit getVariable ["Escorting",false])) exitWith {}; //He's not being Escorted. +if (side _unit != civilian) exitWith {}; //Not a civ +detach _unit; +_unit setVariable ["Escorting",false,true]; +player setVariable ["currentlyEscorting",nil]; +player setVariable ["isEscorting",false]; \ No newline at end of file diff --git a/life_client/core/actions/fn_storeVehicle.sqf b/life_client/core/actions/fn_storeVehicle.sqf new file mode 100644 index 00000000..b86c5b2f --- /dev/null +++ b/life_client/core/actions/fn_storeVehicle.sqf @@ -0,0 +1,41 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_storeVehicle.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Stores the vehicle in the garage. +*/ +private["_nearVehicles","_vehicle"]; +if (vehicle player != player) then { + _vehicle = vehicle player; +} else { + _nearVehicles = nearestObjects[getPos (_this select 0),["Car","Air","Ship"],30]; //Fetch vehicles within 30m. + if (count _nearVehicles > 0) then { + { + if (!isNil "_vehicle") exitWith {}; //Kill the loop. + _vehData = _x getVariable ["vehicle_info_owners",[]]; + if (count _vehData > 0) then { + _vehOwner = ((_vehData select 0) select 0); + if ((getPlayerUID player) == _vehOwner) exitWith { + _vehicle = _x; + }; + }; + } forEach _nearVehicles; + }; +}; + +if (isNil "_vehicle") exitWith {hint localize "STR_Garage_NoNPC"}; +if (isNull _vehicle) exitWith {}; +if (!alive _vehicle) exitWith {hint localize "STR_Garage_SQLError_Destroyed"}; + +_storetext = localize "STR_Garage_Store_Success"; + +if (life_HC_isActive) then { + [_vehicle,false,(_this select 1),_storetext] remoteExec ["HC_fnc_vehicleStore",HC_Life]; +} else { + [_vehicle,false,(_this select 1),_storetext] remoteExec ["TON_fnc_vehicleStore",RSERV]; +}; + +hint localize "STR_Garage_Store_Server"; +life_garage_store = true; diff --git a/life_client/core/actions/fn_surrender.sqf b/life_client/core/actions/fn_surrender.sqf new file mode 100644 index 00000000..18628dcc --- /dev/null +++ b/life_client/core/actions/fn_surrender.sqf @@ -0,0 +1,24 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_surrender.sqf + Author: + + Description: Causes player to put their hands on their head. +*/ +if ( player getVariable ["restrained",false] ) exitWith {}; +if ( player getVariable ["Escorting",false] ) exitWith {}; +if ( vehicle player != player ) exitWith {}; +if ( speed player > 1 ) exitWith {}; + +if (player getVariable ["playerSurrender",false]) then { + player setVariable ["playerSurrender",false,true]; +} else { + player setVariable ["playerSurrender",true,true]; +}; + +while {player getVariable ["playerSurrender",false]} do { + player playMove "AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon"; + if (!alive player || (vehicle player) != player) then { player setVariable ["playerSurrender",false,true]; }; +}; + +player playMoveNow "AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon"; diff --git a/life_client/core/actions/fn_ticketAction.sqf b/life_client/core/actions/fn_ticketAction.sqf new file mode 100644 index 00000000..258357fd --- /dev/null +++ b/life_client/core/actions/fn_ticketAction.sqf @@ -0,0 +1,15 @@ +/* + File: fn_ticketAction.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Starts the ticketing process. +*/ +params [ + ["_unit",objNull,[objNull]] +]; +disableSerialization; +if (!(createDialog "life_ticket_give")) exitWith {hint localize "STR_Cop_TicketFail"}; +if (isNull _unit || !isPlayer _unit) exitWith {}; +ctrlSetText[2651,format[localize "STR_Cop_Ticket",_unit getVariable ["realname",name _unit]]]; +life_ticket_unit = _unit; \ No newline at end of file diff --git a/life_client/core/actions/fn_unrestrain.sqf b/life_client/core/actions/fn_unrestrain.sqf new file mode 100644 index 00000000..ac53e3ff --- /dev/null +++ b/life_client/core/actions/fn_unrestrain.sqf @@ -0,0 +1,18 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_unrestrain.sqf + Author: + + Description: + +*/ +private["_unit"]; +_unit = param [0,objNull,[objNull]]; +if (isNull _unit || !(_unit getVariable ["restrained",false])) exitWith {}; //Error check? + +_unit setVariable ["restrained",false,true]; +_unit setVariable ["Escorting",false,true]; +_unit setVariable ["transporting",false,true]; +detach _unit; + +[0,"STR_NOTF_Unrestrain",true,[_unit getVariable ["realname",name _unit], profileName]] remoteExecCall ["life_fnc_broadcast",west]; \ No newline at end of file diff --git a/life_client/core/admin/fn_adminCompensate.sqf b/life_client/core/admin/fn_adminCompensate.sqf new file mode 100644 index 00000000..08a5afbb --- /dev/null +++ b/life_client/core/admin/fn_adminCompensate.sqf @@ -0,0 +1,29 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_adminCompensate.sqf + Author: ColinM9991 + + Description: + Figure it out. +*/ +private["_value","_action"]; +if (FETCH_CONST(life_adminlevel) < 2) exitWith {closeDialog 0; hint localize "STR_ANOTF_ErrorLevel";}; +_value = parseNumber(ctrlText 9922); +if (_value < 0) exitWith {}; +if (_value > 999999) exitWith {hint localize "STR_ANOTF_Fail"}; + +_action = [ + format [localize "STR_ANOTF_CompWarn",[_value] call life_fnc_numberText], + localize "STR_Admin_Compensate", + localize "STR_Global_Yes", + localize "STR_Global_No" +] call BIS_fnc_guiMessage; + +if (_action) then { + CASH = CASH + _value; + hint format [localize "STR_ANOTF_Success",[_value] call life_fnc_numberText]; + closeDialog 0; +} else { + hint localize "STR_NOTF_ActionCancel"; + closeDialog 0; +}; diff --git a/life_client/core/admin/fn_adminDebugCon.sqf b/life_client/core/admin/fn_adminDebugCon.sqf new file mode 100644 index 00000000..248b82da --- /dev/null +++ b/life_client/core/admin/fn_adminDebugCon.sqf @@ -0,0 +1,13 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_adminDebugCon.sqf + Author: ColinM9991 + + Description: + Opens the Debug Console. +*/ +if (FETCH_CONST(life_adminlevel) < 5) exitWith {closeDialog 0; hint localize "STR_NOTF_adminDebugCon";}; +life_admin_debug = true; + +createDialog "RscDisplayDebugPublic"; +[0,format [localize "STR_NOTF_adminHasOpenedDebug",profileName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; diff --git a/life_client/core/admin/fn_adminFreeze.sqf b/life_client/core/admin/fn_adminFreeze.sqf new file mode 100644 index 00000000..498a7a82 --- /dev/null +++ b/life_client/core/admin/fn_adminFreeze.sqf @@ -0,0 +1,17 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_adminFreeze.sqf + Author: ColinM9991 + + Description: Freezes selected player +*/ +if (FETCH_CONST(life_adminlevel) < 4) exitWith {closeDialog 0; hint localize "STR_ANOTF_ErrorLevel";}; + +private["_unit"]; +_unit = lbData[2902,lbCurSel (2902)]; +_unit = call compile format["%1", _unit]; +if (isNil "_unit") exitWith {}; +if (isNull _unit) exitWith {}; +if (_unit == player) exitWith {hint localize "STR_ANOTF_Error";}; + +[player] remoteExec ["life_fnc_freezePlayer",_unit]; diff --git a/life_client/core/admin/fn_adminGetID.sqf b/life_client/core/admin/fn_adminGetID.sqf new file mode 100644 index 00000000..dca5fcc7 --- /dev/null +++ b/life_client/core/admin/fn_adminGetID.sqf @@ -0,0 +1,16 @@ +/* + File: fn_adminGetID.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Fetches the selected ID of the player. + Used by in-game admins to issue bans/kicks. + https://community.bistudio.com/wiki/Multiplayer_Server_Commands +*/ +private "_unit"; +_unit = lbData[2902,lbCurSel (2902)]; +_unit = call compile format["%1", _unit]; +if (isNil "_unit") exitWith {}; +if (isNull _unit) exitWith {}; + +[_unit,player] remoteExecCall ["TON_fnc_getID",2]; \ No newline at end of file diff --git a/life_client/core/admin/fn_adminGodMode.sqf b/life_client/core/admin/fn_adminGodMode.sqf new file mode 100644 index 00000000..8237847d --- /dev/null +++ b/life_client/core/admin/fn_adminGodMode.sqf @@ -0,0 +1,26 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_adminGodMode.sqf + Author: Tobias 'Xetoxyc' Sittenauer + + Description: Enables God mode for Admin +*/ + +if (FETCH_CONST(life_adminlevel) < 4) exitWith {closeDialog 0; hint localize "STR_ANOTF_ErrorLevel";}; + +[] spawn { + while {dialog} do { + closeDialog 0; + sleep 0.01; + }; +}; + +if (life_god) then { + life_god = false; + titleText [localize "STR_ANOTF_godModeOff","PLAIN"]; titleFadeOut 2; + player allowDamage true; +} else { + life_god = true; + titleText [localize "STR_ANOTF_godModeOn","PLAIN"]; titleFadeOut 2; + player allowDamage false; +}; \ No newline at end of file diff --git a/life_client/core/admin/fn_adminID.sqf b/life_client/core/admin/fn_adminID.sqf new file mode 100644 index 00000000..8366dbe7 --- /dev/null +++ b/life_client/core/admin/fn_adminID.sqf @@ -0,0 +1,14 @@ +/* + File: fn_adminID.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Output information received to admin menu. +*/ +private["_display","_ret","_text"]; +disableSerialization; +_ret = _this select 0; +_display = findDisplay 2900; +_text = _display displayCtrl 2903; + +_text ctrlSetStructuredText parseText format["ID: %1",_ret]; \ No newline at end of file diff --git a/life_client/core/admin/fn_adminInfo.sqf b/life_client/core/admin/fn_adminInfo.sqf new file mode 100644 index 00000000..cd278e76 --- /dev/null +++ b/life_client/core/admin/fn_adminInfo.sqf @@ -0,0 +1,46 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_adminInfo.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Output information received to admin menu. +*/ +private["_ret","_unit","_prim","_sec","_vest","_uni","_bp","_attach","_steamName","_secondary"]; +_ret = _this; +disableSerialization; + +_unit = _ret select 3; +_prim = if (!(primaryWeapon _unit isEqualTo "")) then { FETCH_CONFIG2(getText,"CfgWeapons",primaryWeapon _unit,"displayName")} else {"None"}; +_sec = if (!(handgunWeapon _unit isEqualTo "")) then { FETCH_CONFIG2(getText,"CfgWeapons",handgunWeapon _unit,"displayName")} else {"None"}; +_vest = if (!(vest _unit isEqualTo "")) then { FETCH_CONFIG2(getText,"CfgWeapons",vest _unit,"displayName")} else {"None"}; +_uni = if (!(uniform _unit isEqualTo "")) then { FETCH_CONFIG2(getText,"CfgWeapons",uniform _unit,"displayName")} else {"None"}; +_bp = if (!(backpack _unit isEqualTo "")) then {FETCH_CONFIG2(getText,"CfgVehicles",backpack _unit,"displayName")} else {"None"}; + +_attach = []; +_secondary = []; +if (!(primaryWeapon _unit isEqualTo "")) then { + { + if (!(_x isEqualTo "")) then { + _attach pushBack (FETCH_CONFIG2(getText,"CfgWeapons",_x,"displayName")); + }; + } forEach (primaryWeaponItems _unit); +}; + +if (!(handgunItems _unit isEqualTo "")) then { + { + if (!(_x isEqualTo "")) then { + _secondary pushBack (FETCH_CONFIG2(getText,"CfgWeapons",_x,"displayName")); + }; + } forEach (handgunItems _unit); +}; + +_steamName = _ret select 4; +if (!((_ret select 4) isEqualType "")) then { + _steamName = "Not a Steam User!"; +}; + +if (count _attach isEqualTo 0) then {_attach = "None"}; +if (count _secondary isEqualTo 0) then {_secondary = "None"}; +CONTROL(2900,2903) ctrlSetStructuredText parseText format["Name: %1
Steam Name: %10
Player UID: %11
Player Side: %12
Bank: %2
Money: %3
Uniform: %4
Vest: %5
Backpack: %6
Primary: %7
Handgun: %8
Primary Attachments
%9
Secondary Attachments
%13
", +_unit getVariable ["realname",name _unit],[(_ret select 0)] call life_fnc_numberText,[(_ret select 1)] call life_fnc_numberText, _uni,_vest,_bp,_prim,_sec,_attach,_steamName,(_ret select 5),(_ret select 6),_secondary]; diff --git a/life_client/core/admin/fn_adminMarkers.sqf b/life_client/core/admin/fn_adminMarkers.sqf new file mode 100644 index 00000000..020b4d1e --- /dev/null +++ b/life_client/core/admin/fn_adminMarkers.sqf @@ -0,0 +1,10 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_adminMarkers.sqf + Author: NiiRoZz + Description: + Display markers for all players +*/ +if (FETCH_CONST(life_adminlevel) < 4) exitWith {closeDialog 0; hint localize "STR_ANOTF_ErrorLevel";}; + +[] spawn TON_fnc_MapMarkersAdmin; diff --git a/life_client/core/admin/fn_adminMenu.sqf b/life_client/core/admin/fn_adminMenu.sqf new file mode 100644 index 00000000..a62f100e --- /dev/null +++ b/life_client/core/admin/fn_adminMenu.sqf @@ -0,0 +1,43 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_adminMenu.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Opens the admin menu and hides buttons based on life_adminlevel. +*/ +private["_display","_list","_side","_godmode","_markers"]; +if (FETCH_CONST(life_adminlevel) < 1) exitWith {closeDialog 0;}; + +disableSerialization; + +waitUntil {!isNull (findDisplay 2900)}; +_list = CONTROL(2900,2902); +if (FETCH_CONST(life_adminlevel) < 1) exitWith {closeDialog 0;}; + +switch (FETCH_CONST(life_adminlevel)) do +{ + case 1: {ctrlShow [2904,false];ctrlShow [2905,false];ctrlShow [2906,false];ctrlShow [2907,false];ctrlShow [2908,false];ctrlShow [2909,false];ctrlShow [2910,false];ctrlShow [2911,false];}; + case 2: {ctrlShow [2905,false];ctrlShow [2906,false];ctrlShow [2907,false];ctrlShow [2908,false];ctrlShow [2909,false];ctrlShow [2910,false];ctrlShow [2911,false];}; + case 3: {ctrlShow [2907,false];ctrlShow [2908,false];ctrlShow [2909,false];ctrlShow [2910,false];ctrlShow [2911,false];}; + case 4: {ctrlShow [2911,false];}; +}; + +//Purge List +lbClear _list; + +{ + _side = switch (side _x) do {case west: {"Cop"}; case civilian: {"Civ"}; case independent: {"Medic"}; default {"Unknown"};}; + _list lbAdd format["%1 - %2", _x getVariable ["realname",name _x],_side]; + _list lbSetdata [(lbSize _list)-1,str(_x)]; +} forEach playableUnits; +if (FETCH_CONST(life_adminlevel) < 1) exitWith {closeDialog 0;}; + +if (life_god) then { + _godmode = CONTROL(2900,2908); + _godmode ctrlSetTextColor [0, 255, 0, 1]; // green +}; +if (life_markers) then { + _markers = CONTROL(2900,2910); + _markers ctrlSetTextColor [0, 255, 0, 1]; // green +}; \ No newline at end of file diff --git a/life_client/core/admin/fn_adminQuery.sqf b/life_client/core/admin/fn_adminQuery.sqf new file mode 100644 index 00000000..18221635 --- /dev/null +++ b/life_client/core/admin/fn_adminQuery.sqf @@ -0,0 +1,19 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_adminQuery.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Starts the query on a player. +*/ +private["_text","_info","_prim","_sec","_vest","_uni","_bp","_attach","_tmp"]; +disableSerialization; +if (!isNil "admin_query_ip") exitWith {hint localize "STR_ANOTF_Query_2"}; +_text = CONTROL(2900,2903); +_info = lbData[2902,lbCurSel (2902)]; +_info = call compile format["%1", _info]; + +if (isNil "_info") exitWith {_text ctrlSetText localize "STR_ANOTF_QueryFail";}; +if (isNull _info) exitWith {_text ctrlSetText localize "STR_ANOTF_QueryFail";}; +[player] remoteExec ["TON_fnc_player_query",_info]; +_text ctrlSetText localize "STR_ANOTF_Query"; diff --git a/life_client/core/admin/fn_adminSpectate.sqf b/life_client/core/admin/fn_adminSpectate.sqf new file mode 100644 index 00000000..21cadfa1 --- /dev/null +++ b/life_client/core/admin/fn_adminSpectate.sqf @@ -0,0 +1,27 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_adminSpectate.sqf + Author: ColinM9991 + + Description: + Spectate the chosen player. +*/ +if (FETCH_CONST(life_adminlevel) < 3) exitWith {closeDialog 0;}; + +private["_unit"]; +_unit = lbData[2902,lbCurSel (2902)]; +_unit = call compile format["%1", _unit]; +if (isNil "_unit") exitWith {}; +if (isNull _unit) exitWith {}; +if (_unit == player) exitWith {hint localize "STR_ANOTF_Error";}; + +[] spawn { + while {dialog} do { + closeDialog 0; + sleep 0.01; + }; +}; + +_unit switchCamera "INTERNAL"; +hint format[localize "STR_NOTF_nowSpectating",_unit getVariable ["realname",name _unit]]; +AM_Exit = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 68) then {(findDisplay 46) displayRemoveEventHandler ['KeyDown',AM_Exit];player switchCamera 'INTERNAL';hint 'You have stopped spectating';};false"]; \ No newline at end of file diff --git a/life_client/core/admin/fn_adminTeleport.sqf b/life_client/core/admin/fn_adminTeleport.sqf new file mode 100644 index 00000000..ed380d64 --- /dev/null +++ b/life_client/core/admin/fn_adminTeleport.sqf @@ -0,0 +1,19 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_adminTeleport.sqf + Author: ColinM9991 + Credits: To original script author(s) + Description: + Teleport to chosen position. +*/ +if (FETCH_CONST(life_adminlevel) < 3) exitWith {closeDialog 0;}; + +[] spawn { + while {dialog} do { + closeDialog 0; + sleep 0.01; + }; +}; + +openMap [true, false]; +onMapSingleClick "[_pos select 0, _pos select 1, _pos select 2] call life_fnc_teleport"; diff --git a/life_client/core/admin/fn_adminTpHere.sqf b/life_client/core/admin/fn_adminTpHere.sqf new file mode 100644 index 00000000..a04bc1e4 --- /dev/null +++ b/life_client/core/admin/fn_adminTpHere.sqf @@ -0,0 +1,19 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_adminTpHere.sqf + Author: ColinM9991 + + Description: + Teleport selected player to you. +*/ +if (FETCH_CONST(life_adminlevel) < 4) exitWith {closeDialog 0;}; + +private["_target"]; +_target = lbData[2902,lbCurSel (2902)]; +_target = call compile format["%1", _target]; +if (isNil "_target" || isNull _target) exitWith {}; +if (_target == player) exitWith {hint localize "STR_ANOTF_Error";}; + +if (!(vehicle _target isEqualTo _target)) exitWith {hint localize "STR_Admin_CannotTpHere"}; +_target setPos (getPos player); +hint format[localize "STR_NOTF_haveTPedToYou",_target getVariable ["realname",name _target]]; diff --git a/life_client/core/civilian/fn_civLoadout.sqf b/life_client/core/civilian/fn_civLoadout.sqf new file mode 100644 index 00000000..498960fd --- /dev/null +++ b/life_client/core/civilian/fn_civLoadout.sqf @@ -0,0 +1,24 @@ +/* + File: fn_civLoadout.sqf + Author: Tobias 'Xetoxyc' Sittenauer + + Description: + Loads the civs out with the default gear, with randomized clothing. +*/ +private["_handle"]; +_handle = [] spawn life_fnc_stripDownPlayer; +waitUntil {scriptDone _handle}; + +_clothings = ["U_C_Poloshirt_blue","U_C_Poloshirt_burgundy","U_C_Poloshirt_stripped","U_C_Poloshirt_tricolour","U_C_Poloshirt_salmon","U_C_Poloshirt_redwhite","U_C_Commoner1_1"]; +player addUniform (selectRandom _clothings); + +/* ITEMS */ +player addItem "ItemMap"; +player assignItem "ItemMap"; +player addItem "ItemCompass"; +player assignItem "ItemCompass"; +player addItem "ItemWatch"; +player assignItem "ItemWatch"; + +[] call life_fnc_playerSkins; +[] call life_fnc_saveGear; \ No newline at end of file diff --git a/life_client/core/civilian/fn_civMarkers.sqf b/life_client/core/civilian/fn_civMarkers.sqf new file mode 100644 index 00000000..f3ec6385 --- /dev/null +++ b/life_client/core/civilian/fn_civMarkers.sqf @@ -0,0 +1,44 @@ +/* + File: fn_civMarkers.sqf + Author: + + Description: + Add markers for civilians in groups. +*/ +private["_markers","_members"]; +_markers = []; +_members = []; + +for "_i" from 0 to 1 step 0 do { + sleep 0.5; + if (visibleMap) then + { + _members = units (group player); + { + if (_x != player) then { + _marker = createMarkerLocal [format["%1_marker",_x],visiblePosition _x]; + _marker setMarkerColorLocal "ColorCivilian"; + _marker setMarkerTypeLocal "Mil_dot"; + _marker setMarkerTextLocal format["%1", _x getVariable ["realname",name _x]]; + _markers pushBack [_marker,_x]; + }; + } forEach _members; + + while {visibleMap} do + { + { + private["_unit"]; + _unit = _x select 1; + if (!isNil "_unit" && !isNull _unit) then { + (_x select 0) setMarkerPosLocal (visiblePosition _unit); + }; + } forEach _markers; + if (!visibleMap) exitWith {}; + sleep 0.02; + }; + + {deleteMarkerLocal (_x select 0);} forEach _markers; + _markers = []; + _members = []; + }; +}; diff --git a/life_client/core/civilian/fn_demoChargeTimer.sqf b/life_client/core/civilian/fn_demoChargeTimer.sqf new file mode 100644 index 00000000..82044259 --- /dev/null +++ b/life_client/core/civilian/fn_demoChargeTimer.sqf @@ -0,0 +1,27 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_demoChargeTimer.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Starts the "Demo" timer for the police. +*/ +private["_uiDisp","_time","_timer"]; +disableSerialization; +6 cutRsc ["life_timer","PLAIN"]; +_uiDisp = uiNamespace getVariable "life_timer"; +_timer = _uiDisp displayCtrl 38301; +_time = time + (5 * 60); + +for "_i" from 0 to 1 step 0 do { + if (isNull _uiDisp) then { + 6 cutRsc ["life_timer","PLAIN"]; + _uiDisp = uiNamespace getVariable "life_timer"; + _timer = _uiDisp displayCtrl 38301; + }; + if (round(_time - time) < 1) exitWith {}; + if (!(fed_bank getVariable ["chargeplaced",false])) exitWith {}; + _timer ctrlSetText format["%1",[(_time - time),"MM:SS.MS"] call BIS_fnc_secondsToString]; + sleep 0.08; +}; +6 cutText["","PLAIN"]; \ No newline at end of file diff --git a/life_client/core/civilian/fn_freezePlayer.sqf b/life_client/core/civilian/fn_freezePlayer.sqf new file mode 100644 index 00000000..c6a54e0b --- /dev/null +++ b/life_client/core/civilian/fn_freezePlayer.sqf @@ -0,0 +1,22 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_freezePlayer.sqf + Author: ColinM9991 + + Description: + Freezes selected player. +*/ +private["_admin"]; +_admin = param [0,objNull,[objNull]]; + +if (life_frozen) then { + hint localize "STR_NOTF_Unfrozen"; + [1,format[localize "STR_ANOTF_Unfrozen",profileName]] remoteExecCall ["life_fnc_broadcast",_admin]; + disableUserInput false; + life_frozen = false; +} else { + hint localize "STR_NOTF_Frozen"; + [1,format[localize "STR_ANOTF_Frozen",profileName]] remoteExecCall ["life_fnc_broadcast",_admin]; + disableUserInput true; + life_frozen = true; +}; diff --git a/life_client/core/civilian/fn_jail.sqf b/life_client/core/civilian/fn_jail.sqf new file mode 100644 index 00000000..f3a9bf21 --- /dev/null +++ b/life_client/core/civilian/fn_jail.sqf @@ -0,0 +1,62 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_jail.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Starts the initial process of jailing. +*/ +private ["_illegalItems"]; +params [ + ["_unit",objNull,[objNull]], + ["_bad",false,[false]] +]; + +if (isNull _unit) exitWith {}; //Dafuq? +if (_unit != player) exitWith {}; //Dafuq? +if (life_is_arrested) exitWith {}; //Dafuq i'm already arrested +_illegalItems = LIFE_SETTINGS(getArray,"jail_seize_vItems"); + +player setVariable ["restrained",false,true]; +player setVariable ["Escorting",false,true]; +player setVariable ["transporting",false,true]; + +titleText[localize "STR_Jail_Warn","PLAIN"]; +hint localize "STR_Jail_LicenseNOTF"; +player setPos (getMarkerPos "jail_marker"); + +if (_bad) then { + waitUntil {alive player}; + sleep 1; +}; + +//Check to make sure they goto check +if (player distance (getMarkerPos "jail_marker") > 40) then { + player setPos (getMarkerPos "jail_marker"); +}; + +[1] call life_fnc_removeLicenses; + +{ + _amount = ITEM_VALUE(_x); + if (_amount > 0) then { + [false,_x,_amount] call life_fnc_handleInv; + }; +} forEach _illegalItems; + +life_is_arrested = true; + +if (LIFE_SETTINGS(getNumber,"jail_seize_inventory") isEqualTo 1) then { + [] spawn life_fnc_seizeClient; +} else { + removeAllWeapons player; + {player removeMagazine _x} forEach (magazines player); +}; + +if (life_HC_isActive) then { + [player,_bad] remoteExecCall ["HC_fnc_jailSys",HC_Life]; +} else { + [player,_bad] remoteExecCall ["life_fnc_jailSys",RSERV]; +}; + +[5] call SOCK_fnc_updatePartial; diff --git a/life_client/core/civilian/fn_jailMe.sqf b/life_client/core/civilian/fn_jailMe.sqf new file mode 100644 index 00000000..f9171a9f --- /dev/null +++ b/life_client/core/civilian/fn_jailMe.sqf @@ -0,0 +1,97 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_jailMe.sqf + Author Bryan "Tonic" Boardwine + + Description: + Once word is received by the server the rest of the jail execution is completed. +*/ +private["_time","_bail","_esc","_countDown"]; + +params [ + ["_ret",[],[[]]], + ["_bad",false,[false]] +]; + + +if (_bad) then { _time = time + 1100; } else { _time = time + (15 * 60); }; + +if (count _ret > 0) then { life_bail_amount = (_ret select 2); } else { life_bail_amount = 1500; _time = time + (10 * 60); }; +_esc = false; +_bail = false; + +[_bad] spawn { + life_canpay_bail = false; + if (_this select 0) then { + sleep (10 * 60); + } else { + sleep (5 * 60); + }; + life_canpay_bail = true; +}; + +for "_i" from 0 to 1 step 0 do { + if ((round(_time - time)) > 0) then { + _countDown = [(_time - time),"MM:SS.MS"] call BIS_fnc_secondsToString; + hintSilent parseText format[(localize "STR_Jail_Time")+ "
%1

" +(localize "STR_Jail_Pay")+ " %3
" +(localize "STR_Jail_Price")+ " $%2",_countDown,[life_bail_amount] call life_fnc_numberText,if (life_canpay_bail) then {"Yes"} else {"No"}]; + }; + + if (player distance (getMarkerPos "jail_marker") > 60) exitWith { + _esc = true; + }; + + if (life_bail_paid) exitWith { + _bail = true; + }; + + if ((round(_time - time)) < 1) exitWith {hint ""}; + if (!alive player && ((round(_time - time)) > 0)) exitWith {}; + sleep 0.1; +}; + + +switch (true) do { + case (_bail): { + life_is_arrested = false; + life_bail_paid = false; + hint localize "STR_Jail_Paid"; + serv_wanted_remove = [player]; + player setPos (getMarkerPos "jail_release"); + + if (life_HC_isActive) then { + [getPlayerUID player] remoteExecCall ["HC_fnc_wantedRemove",HC_Life]; + } else { + [getPlayerUID player] remoteExecCall ["life_fnc_wantedRemove",RSERV]; + }; + + [5] call SOCK_fnc_updatePartial; + }; + + case (_esc): { + life_is_arrested = false; + hint localize "STR_Jail_EscapeSelf"; + [0,"STR_Jail_EscapeNOTF",true,[profileName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; + + if (life_HC_isActive) then { + [getPlayerUID player,profileName,"901"] remoteExecCall ["HC_fnc_wantedAdd",HC_Life]; + } else { + [getPlayerUID player,profileName,"901"] remoteExecCall ["life_fnc_wantedAdd",RSERV]; + }; + + [5] call SOCK_fnc_updatePartial; + }; + + case (alive player && !_esc && !_bail): { + life_is_arrested = false; + hint localize "STR_Jail_Released"; + + if (life_HC_isActive) then { + [getPlayerUID player] remoteExecCall ["HC_fnc_wantedRemove",HC_Life]; + } else { + [getPlayerUID player] remoteExecCall ["life_fnc_wantedRemove",RSERV]; + }; + + player setPos (getMarkerPos "jail_release"); + [5] call SOCK_fnc_updatePartial; + }; +}; diff --git a/life_client/core/civilian/fn_knockedOut.sqf b/life_client/core/civilian/fn_knockedOut.sqf new file mode 100644 index 00000000..64182176 --- /dev/null +++ b/life_client/core/civilian/fn_knockedOut.sqf @@ -0,0 +1,34 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_knockedOut.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Starts and monitors the knocked out state. +*/ +private "_obj"; +params [ + ["_target",objNull,[objNull]], + ["_who","",[""]] +]; + +if (isNull _target) exitWith {}; +if (_target != player) exitWith {}; +if (_who isEqualTo "") exitWith {}; + +titleText[format[localize "STR_Civ_KnockedOut",_who],"PLAIN"]; +player playMoveNow "Incapacitated"; +disableUserInput true; + +_obj = "Land_ClutterCutter_small_F" createVehicle ASLTOATL(visiblePositionASL player); +_obj setPosATL ASLTOATL(visiblePositionASL player); + +life_isknocked = true; +player attachTo [_obj,[0,0,0]]; +sleep 15; +player playMoveNow "AmovPpneMstpSrasWrflDnon"; +disableUserInput false; +detach player; +deleteVehicle _obj; +life_isknocked = false; +player setVariable ["robbed",false,true]; diff --git a/life_client/core/civilian/fn_knockoutAction.sqf b/life_client/core/civilian/fn_knockoutAction.sqf new file mode 100644 index 00000000..1eab0409 --- /dev/null +++ b/life_client/core/civilian/fn_knockoutAction.sqf @@ -0,0 +1,22 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_knockoutAction.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Knocks out the target. +*/ +private "_target"; +_target = param [0,objNull,[objNull]]; + +//Error checks +if (isNull _target) exitWith {}; +if (!isPlayer _target) exitWith {}; +if (player distance _target > 4) exitWith {}; +life_knockout = true; +[player,"AwopPercMstpSgthWrflDnon_End2"] remoteExecCall ["life_fnc_animSync",RCLIENT]; +sleep 0.08; +[_target,profileName] remoteExec ["life_fnc_knockedOut",_target]; + +sleep 3; +life_knockout = false; diff --git a/life_client/core/civilian/fn_removeLicenses.sqf b/life_client/core/civilian/fn_removeLicenses.sqf new file mode 100644 index 00000000..8826fb6f --- /dev/null +++ b/life_client/core/civilian/fn_removeLicenses.sqf @@ -0,0 +1,47 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_removeLicenses.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Used for stripping certain licenses off of civilians as punishment. +*/ +private "_state"; +_state = param [0,1,[0]]; + +switch (_state) do { + //Death while being wanted + case 0: { + missionNamespace setVariable [LICENSE_VARNAME("rebel","civ"),false]; + missionNamespace setVariable [LICENSE_VARNAME("driver","civ"),false]; + missionNamespace setVariable [LICENSE_VARNAME("heroin","civ"),false]; + missionNamespace setVariable [LICENSE_VARNAME("marijuana","civ"),false]; + missionNamespace setVariable [LICENSE_VARNAME("cocaine","civ"),false]; + }; + + //Jail licenses + case 1: { + missionNamespace setVariable [LICENSE_VARNAME("gun","civ"),false]; + missionNamespace setVariable [LICENSE_VARNAME("driver","civ"),false]; + missionNamespace setVariable [LICENSE_VARNAME("rebel","civ"),false]; + }; + + //Remove motor vehicle licenses + case 2: { + if (missionNamespace getVariable LICENSE_VARNAME("driver","civ") || missionNamespace getVariable LICENSE_VARNAME("pilot","civ") || missionNamespace getVariable LICENSE_VARNAME("trucking","civ") || missionNamespace getVariable LICENSE_VARNAME("boat","civ")) then { + missionNamespace setVariable [LICENSE_VARNAME("pilot","civ"),false]; + missionNamespace setVariable [LICENSE_VARNAME("driver","civ"),false]; + missionNamespace setVariable [LICENSE_VARNAME("trucking","civ"),false]; + missionNamespace setVariable [LICENSE_VARNAME("boat","civ"),false]; + hint localize "STR_Civ_LicenseRemove_1"; + }; + }; + + //Killing someone while owning a gun license + case 3: { + if (missionNamespace getVariable LICENSE_VARNAME("gun","civ")) then { + missionNamespace setVariable [LICENSE_VARNAME("gun","civ"),false]; + hint localize "STR_Civ_LicenseRemove_2"; + }; + }; +}; diff --git a/life_client/core/civilian/fn_robPerson.sqf b/life_client/core/civilian/fn_robPerson.sqf new file mode 100644 index 00000000..254c79e1 --- /dev/null +++ b/life_client/core/civilian/fn_robPerson.sqf @@ -0,0 +1,28 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_robPerson.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Robs a person. +*/ +params [ + ["_robber",objNull,[objNull]] +]; +if (isNull _robber) exitWith {}; //No one to return it to? + +if (CASH > 0) then { + [CASH,player,_robber] remoteExecCall ["life_fnc_robReceive",_robber]; + + if (life_HC_isActive) then { + [getPlayerUID _robber,_robber getVariable ["realname",name _robber],"211"] remoteExecCall ["HC_fnc_wantedAdd",HC_Life]; + } else { + [getPlayerUID _robber,_robber getVariable ["realname",name _robber],"211"] remoteExecCall ["life_fnc_wantedAdd",RSERV]; + }; + + [1,"STR_NOTF_Robbed",true,[_robber getVariable ["realname",name _robber],profileName,[CASH] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; + CASH = 0; + [0] call SOCK_fnc_updatePartial; +} else { + [2,"STR_NOTF_RobFail",true,[profileName]] remoteExecCall ["life_fnc_broadcast",_robber]; +}; diff --git a/life_client/core/civilian/fn_robReceive.sqf b/life_client/core/civilian/fn_robReceive.sqf new file mode 100644 index 00000000..deb61a98 --- /dev/null +++ b/life_client/core/civilian/fn_robReceive.sqf @@ -0,0 +1,29 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_robReceive.sqf + Author: Bryan "Tonic" Boardwine + + Description: + +*/ +params [ + ["_cash",0,[0]], + ["_victim",objNull,[objNull]], + ["_robber",objNull,[objNull]] +]; + +if (_robber == _victim) exitWith {}; +if (_cash isEqualTo 0) exitWith {titleText[localize "STR_Civ_RobFail","PLAIN"]}; + +CASH = CASH + _cash; +[0] call SOCK_fnc_updatePartial; +titleText[format[localize "STR_Civ_Robbed",[_cash] call life_fnc_numberText],"PLAIN"]; + +if (LIFE_SETTINGS(getNumber,"player_moneyLog") isEqualTo 1) then { + if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then { + money_log = format [localize "STR_DL_ML_Robbed_BEF",[_cash] call life_fnc_numberText,_victim,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + } else { + money_log = format [localize "STR_DL_ML_Robbed",profileName,(getPlayerUID player),[_cash] call life_fnc_numberText,_victim,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + }; + publicVariableServer "money_log"; +}; diff --git a/life_client/core/civilian/fn_tazed.sqf b/life_client/core/civilian/fn_tazed.sqf new file mode 100644 index 00000000..242b4189 --- /dev/null +++ b/life_client/core/civilian/fn_tazed.sqf @@ -0,0 +1,58 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_tazed.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Starts the tazed animation and broadcasts out what it needs to. +*/ +private["_curWep","_curMags","_attach"]; +params [ + ["_unit",objNull,[objNull]], + ["_shooter",objNull,[objNull]] +]; + +if (isNull _unit || isNull _shooter) exitWith {player allowDamage true; life_istazed = false;}; + +if (_shooter isKindOf "Man" && alive player) then { + if (!life_istazed) then { + life_istazed = true; + _curWep = currentWeapon player; + _curMags = magazines player; + _attach = if (!(primaryWeapon player isEqualTo "")) then {primaryWeaponItems player} else {[]}; + + {player removeMagazine _x} forEach _curMags; + player removeWeapon _curWep; + player addWeapon _curWep; + if (!(count _attach isEqualTo 0) && !(primaryWeapon player isEqualTo "")) then { + { + _unit addPrimaryWeaponItem _x; + } forEach _attach; + }; + + if (!(count _curMags isEqualTo 0)) then { + {player addMagazine _x;} forEach _curMags; + }; + + [_unit] remoteExecCall ["life_fnc_tazeSound",RCLIENT]; + _obj = "Land_ClutterCutter_small_F" createVehicle ASLTOATL(visiblePositionASL player); + _obj setPosATL ASLTOATL(visiblePositionASL player); + [player,"AinjPfalMstpSnonWnonDf_carried_fallwc"] remoteExecCall ["life_fnc_animSync",RCLIENT]; + [0,"STR_NOTF_Tazed",true,[profileName, _shooter getVariable ["realname",name _shooter]]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; + _unit attachTo [_obj,[0,0,0]]; + disableUserInput true; + sleep 15; + + [player,"AmovPpneMstpSrasWrflDnon"] remoteExecCall ["life_fnc_animSync",RCLIENT]; + + if (!(player getVariable ["Escorting",false])) then { + detach player; + }; + life_istazed = false; + player allowDamage true; + disableUserInput false; + }; +} else { + _unit allowDamage true; + life_iztazed = false; +}; diff --git a/life_client/core/clientValidator.sqf b/life_client/core/clientValidator.sqf new file mode 100644 index 00000000..a60806bc --- /dev/null +++ b/life_client/core/clientValidator.sqf @@ -0,0 +1,25 @@ +#include "..\script_macros.hpp" +/* + File: clientValidator.sqf + Author: + + Description: + Loops through a list of variables and checks whether + or not they are defined, if they are defined then trigger + spyglass and kick the client to the lobby. +*/ +private["_vars"]; +_vars = [ + "life_revive_fee","life_gangPrice","life_gangUpgradeBase","life_enableFatigue","life_paycheck_period","life_vShop_rentalOnly","sell_array","buy_array", + "life_weapon_shop_array","life_garage_prices","life_garage_sell","life_houseLimit","life_gangUpgradeMultipler","life_impound_car","life_impound_boat", + "life_impound_air" +]; + +{ + if (!isNil {(missionNamespace getVariable _x)}) exitWith { + [profileName,getPlayerUID player,format["VariableSetBeforeInitialized_%1",_x]] remoteExecCall ["SPY_fnc_cookieJar",RSERV]; + [profileName,format["Variable set before client initialized: %1",_x]] remoteExecCall ["SPY_fnc_notifyAdmins",RCLIENT]; + sleep 0.5; + failMission "SpyGlass"; + }; +} forEach _vars; \ No newline at end of file diff --git a/life_client/core/config/fn_houseConfig.sqf b/life_client/core/config/fn_houseConfig.sqf new file mode 100644 index 00000000..b6ffa56d --- /dev/null +++ b/life_client/core/config/fn_houseConfig.sqf @@ -0,0 +1,25 @@ +/* + File: fn_houseConfig.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Master config file for buyable houses? +*/ +private["_house"]; +_house = param [0,"",[""]]; +if (_house isEqualTo "") exitWith {[]}; + +/* + Return Format: + [price,# of containers allowed] +*/ +switch (true) do { + case (_house in ["Land_i_House_Big_02_V1_F","Land_i_House_Big_02_V2_F","Land_i_House_Big_02_V3_F"]): {[1550000,3]}; + case (_house in ["Land_i_House_Big_01_V1_F","Land_i_House_Big_01_V2_F","Land_i_House_Big_01_V3_F"]): {[2200000,4]}; + case (_house in ["Land_i_Garage_V1_F","Land_i_Garage_V2_F"]): {[500000,0]}; + case (_house in ["Land_i_House_Small_01_V1_F","Land_i_House_Small_01_V2_F","Land_i_House_Small_01_V3_F"]): {[1050000,2]}; + case (_house in ["Land_i_House_Small_02_V1_F","Land_i_House_Small_02_V2_F","Land_i_House_Small_02_V3_F"]): {[1000500,2]}; + case (_house in ["Land_i_House_Small_03_V1_F"]): {[1250000,3]}; + case (_house in ["Land_i_Stone_HouseSmall_V2_F","Land_i_Stone_HouseSmall_V1_F","Land_i_Stone_HouseSmall_V3_F"]): {[750000,1]}; + default {[]}; +}; diff --git a/life_client/core/config/fn_itemWeight.sqf b/life_client/core/config/fn_itemWeight.sqf new file mode 100644 index 00000000..aacd4c54 --- /dev/null +++ b/life_client/core/config/fn_itemWeight.sqf @@ -0,0 +1,13 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_itemWeight.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Gets the items weight and returns it. +*/ +private["_item"]; +_item = param [0,"",[""]]; +if (_item isEqualTo "") exitWith {}; + +M_CONFIG(getNumber,"VirtualItems",_item,"weight"); diff --git a/life_client/core/config/fn_vehicleAnimate.sqf b/life_client/core/config/fn_vehicleAnimate.sqf new file mode 100644 index 00000000..625a7939 --- /dev/null +++ b/life_client/core/config/fn_vehicleAnimate.sqf @@ -0,0 +1,64 @@ +/* + File: fn_vehicleAnimate.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Pass what you want to be animated. +*/ +private["_vehicle","_animate","_state"]; +params [ + ["_vehicle",objNull,[objNull]], + ["_animate","",["",[]]], + ["_preset",false,[false]] +]; +if (isNull _vehicle) exitWith {}; //FUCK + +if (!_preset) then +{ + if (count _animate > 1) then + { + { + _vehicle animate[_x select 0,_x select 1]; + } forEach _animate; + } + else + { + _vehicle animate[_animate select 0,_animate select 1]; + }; +} + else +{ + switch (_animate) do + { + case "civ_littlebird": + { + _vehicle animate ["addDoors",1]; + _vehicle animate ["addBenches",0]; + _vehicle animate ["addTread",0]; + _vehicle animate ["AddCivilian_hide",1]; + _vehicle lockCargo [2,true]; + _vehicle lockCargo [3,true]; + _vehicle lockCargo [4,true]; + _vehicle lockCargo [5,true]; + }; + + case "service_truck": + { + _vehicle animate ["HideServices", 0]; + _vehicle animate ["HideDoor3", 1]; + }; + + case "med_offroad": + { + _vehicle animate ["HidePolice", 0]; + _vehicle setVariable ["lights",false,true]; + }; + + case "cop_offroad": + { + _vehicle animate ["HidePolice", 0]; + _vehicle animate ["HideBumper1", 0]; + _vehicle setVariable ["lights",false,true]; + }; + }; +}; diff --git a/life_client/core/config/fn_vehicleWeightCfg.sqf b/life_client/core/config/fn_vehicleWeightCfg.sqf new file mode 100644 index 00000000..7eb4ab96 --- /dev/null +++ b/life_client/core/config/fn_vehicleWeightCfg.sqf @@ -0,0 +1,19 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_vehicleWeightCfg.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Master configuration for vehicle weight. +*/ +private["_className","_classNameLife","_weight"]; +_className = param [0,"",[""]]; +_classNameLife = _className; +if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _classNameLife)) then { + _classNameLife = "Default"; //Use Default class if it doesn't exist + diag_log format["%1: LifeCfgVehicles class doesn't exist",_className]; +}; +_weight = M_CONFIG(getNumber,"LifeCfgVehicles",_classNameLife,"vItemSpace"); + +if (isNil "_weight") then {_weight = -1;}; +_weight; diff --git a/life_client/core/configuration.sqf b/life_client/core/configuration.sqf new file mode 100644 index 00000000..370ab0cb --- /dev/null +++ b/life_client/core/configuration.sqf @@ -0,0 +1,103 @@ +#include "..\script_macros.hpp" +/* + File: configuration.sqf + Author: + + Description: + Master Life Configuration File + This file is to setup variables for the client, there are still other configuration files in the system + +***************************** +****** Backend Variables ***** +***************************** +*/ +life_query_time = time; +life_action_delay = time; +life_trunk_vehicle = objNull; +life_session_completed = false; +life_garage_store = false; +life_session_tries = 0; +life_net_dropped = false; +life_siren_active = false; +life_clothing_filter = 0; +life_clothing_uniform = -1; +life_redgull_effect = time; +life_is_processing = false; +life_bail_paid = false; +life_impound_inuse = false; +life_action_inUse = false; +life_spikestrip = objNull; +life_knockout = false; +life_interrupted = false; +life_respawned = false; +life_removeWanted = false; +life_action_gathering = false; +tawvd_addon_disable = true; +life_god = false; +life_frozen = false; +life_save_gear = []; +life_container_activeObj = objNull; +life_disable_getIn = false; +life_disable_getOut = false; +life_admin_debug = false; +life_preview_3D_vehicle_cam = objNull; +life_preview_3D_vehicle_object = objNull; +life_preview_light = objNull; +life_pos_exist = false; +life_pos_attach = []; +life_civ_position = []; +life_markers = false; +life_canpay_bail = true; + +//Settings +life_settings_enableNewsBroadcast = profileNamespace getVariable ["life_enableNewsBroadcast",true]; +life_settings_enableSidechannel = profileNamespace getVariable ["life_enableSidechannel",true]; +life_settings_tagson = profileNamespace getVariable ["life_settings_tagson",true]; +life_settings_revealObjects = profileNamespace getVariable ["life_settings_revealObjects",true]; +life_settings_viewDistanceFoot = profileNamespace getVariable ["life_viewDistanceFoot",1250]; +life_settings_viewDistanceCar = profileNamespace getVariable ["life_viewDistanceCar",1250]; +life_settings_viewDistanceAir = profileNamespace getVariable ["life_viewDistanceAir",1250]; + +//Uniform price (0),Hat Price (1),Glasses Price (2),Vest Price (3),Backpack Price (4) +life_clothing_purchase = [-1,-1,-1,-1,-1]; +/* +***************************** +****** Weight Variables ***** +***************************** +*/ +life_maxWeight = LIFE_SETTINGS(getNumber,"total_maxWeight"); +life_carryWeight = 0; //Represents the players current inventory weight (MUST START AT 0). + +/* +***************************** +****** Life Variables ******* +***************************** +*/ +life_net_dropped = false; +life_use_atm = true; +life_is_arrested = false; +life_is_alive = false; +life_delivery_in_progress = false; +life_thirst = 100; +life_hunger = 100; +CASH = 0; + +life_istazed = false; +life_isknocked = false; +life_vehicles = []; + +/* + Master Array of items? +*/ +//Setup variable inv vars. +{ + missionNamespace setVariable [ITEM_VARNAME(configName _x),0]; +} forEach ("true" configClasses (missionConfigFile >> "VirtualItems")); + +/* Setup the BLAH! */ +{ + _varName = getText(_x >> "variable"); + _sideFlag = getText(_x >> "side"); + + missionNamespace setVariable [LICENSE_VARNAME(_varName,_sideFlag),false]; +} forEach ("true" configClasses (missionConfigFile >> "Licenses")); diff --git a/life_client/core/cop/fn_bountyReceive.sqf b/life_client/core/cop/fn_bountyReceive.sqf new file mode 100644 index 00000000..eb46eb55 --- /dev/null +++ b/life_client/core/cop/fn_bountyReceive.sqf @@ -0,0 +1,22 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_bountyReceive.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Notifies the player he has received a bounty and gives him the cash. +*/ +private["_val","_total"]; +params [ + ["_val","",["",0]], + ["_total","",["",0]] +]; + +if (_val isEqualTo _total) then { + titleText[format[localize "STR_Cop_BountyRecieve",[_val] call life_fnc_numberText],"PLAIN"]; +} else { + titleText[format[localize "STR_Cop_BountyKill",[_val] call life_fnc_numberText,[_total] call life_fnc_numberText],"PLAIN"]; +}; + +BANK = BANK + _val; +[1] call SOCK_fnc_updatePartial; diff --git a/life_client/core/cop/fn_containerInvSearch.sqf b/life_client/core/cop/fn_containerInvSearch.sqf new file mode 100644 index 00000000..d28bcbad --- /dev/null +++ b/life_client/core/cop/fn_containerInvSearch.sqf @@ -0,0 +1,41 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_containerInvSearch.sqf + Author: NiiRoZz + Inspired : Bryan "Tonic" Boardwine + + Description: + Searches the container for illegal items. +*/ +private _container = param [0,objNull,[objNull]]; +if (isNull _container) exitWith {}; + +private _containerInfo = _container getVariable ["Trunk",[]]; +if (_containerInfo isEqualTo []) exitWith {hint localize "STR_Cop_ContainerEmpty"}; + +private _value = 0; +_illegalValue = 0; +{ + _var = _x select 0; + _val = _x select 1; + _isIllegalItem = M_CONFIG(getNumber,"VirtualItems",_var,"illegal"); + if (_isIllegalItem isEqualTo 1 ) then { + _illegalPrice = M_CONFIG(getNumber,"VirtualItems",_var,"sellPrice"); + if (!isNull (missionConfigFile >> "VirtualItems" >> _var >> "processedItem")) then { + _illegalItemProcessed = M_CONFIG(getText,"VirtualItems",_var,"processedItem"); + _illegalPrice = M_CONFIG(getNumber,"VirtualItems",_illegalItemProcessed,"sellPrice"); + }; + + _illegalValue = _illegalValue + (round(_val * _illegalPrice / 2)); + }; +} forEach (_containerInfo select 0); +_value = _illegalValue; +if (_value > 0) then { + [0,"STR_NOTF_ContainerContraband",true,[[_value] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; + BANK = BANK + _value; + [1] call SOCK_fnc_updatePartial; + _container setVariable ["Trunk",[[],0],true]; + [_container] remoteExecCall ["TON_fnc_updateHouseTrunk",2]; +} else { + hint localize "STR_Cop_NoIllegalContainer"; +}; diff --git a/life_client/core/cop/fn_copInteractionMenu.sqf b/life_client/core/cop/fn_copInteractionMenu.sqf new file mode 100644 index 00000000..7fa123b0 --- /dev/null +++ b/life_client/core/cop/fn_copInteractionMenu.sqf @@ -0,0 +1,90 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_copInteractionMenu.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Replaces the mass addactions for various cop actions towards another player. +*/ +#define Btn1 37450 +#define Btn2 37451 +#define Btn3 37452 +#define Btn4 37453 +#define Btn5 37454 +#define Btn6 37455 +#define Btn7 37456 +#define Btn8 37457 +#define Title 37401 + +private["_display","_curTarget","_seizeRank","_Btn1","_Btn2","_Btn3","_Btn4","_Btn5","_Btn6","_Btn7","_Btn8"]; + +disableSerialization; +_curTarget = param [0,objNull,[objNull]]; +_seizeRank = LIFE_SETTINGS(getNumber,"seize_minimum_rank"); + +if (player getVariable ["Escorting", false]) then { + if (isNull _curTarget) exitWith {closeDialog 0;}; //Bad target + if (!isPlayer _curTarget && side _curTarget isEqualTo civilian) exitWith {closeDialog 0;}; //Bad side check? + if (player distance _curTarget > 4 ) exitWith {closeDialog 0;}; // Prevents menu accessing from far distances. +}; + +if (!dialog) then { + createDialog "pInteraction_Menu"; +}; + +_display = findDisplay 37400; +_Btn1 = _display displayCtrl Btn1; +_Btn2 = _display displayCtrl Btn2; +_Btn3 = _display displayCtrl Btn3; +_Btn4 = _display displayCtrl Btn4; +_Btn5 = _display displayCtrl Btn5; +_Btn6 = _display displayCtrl Btn6; +_Btn7 = _display displayCtrl Btn7; +_Btn8 = _display displayCtrl Btn8; +life_pInact_curTarget = _curTarget; + +if (player getVariable ["isEscorting",false]) then { + { _x ctrlShow false; } forEach [_Btn1,_Btn2,_Btn3,_Btn5,_Btn6,_Btn7,_Btn8]; +}; + +//Set Unrestrain Button +_Btn1 ctrlSetText localize "STR_pInAct_Unrestrain"; +_Btn1 buttonSetAction "[life_pInact_curTarget] call life_fnc_unrestrain; closeDialog 0;"; + +//Set Check Licenses Button +_Btn2 ctrlSetText localize "STR_pInAct_checkLicenses"; +_Btn2 buttonSetAction "[player] remoteExecCall [""life_fnc_licenseCheck"",life_pInact_curTarget]; closeDialog 0;"; + +//Set Search Button +_Btn3 ctrlSetText localize "STR_pInAct_SearchPlayer"; +_Btn3 buttonSetAction "[life_pInact_curTarget] spawn life_fnc_searchAction; closeDialog 0;"; + +//Set Escort Button +if (player getVariable ["isEscorting",false]) then { + _Btn4 ctrlSetText localize "STR_pInAct_StopEscort"; + _Btn4 buttonSetAction "[] call life_fnc_stopEscorting; closeDialog 0;"; +} else { + _Btn4 ctrlSetText localize "STR_pInAct_Escort"; + _Btn4 buttonSetAction "[life_pInact_curTarget] call life_fnc_escortAction; closeDialog 0;"; +}; + +//Set Ticket Button +_Btn5 ctrlSetText localize "STR_pInAct_TicketBtn"; +_Btn5 buttonSetAction "[life_pInact_curTarget] call life_fnc_ticketAction;"; + +_Btn6 ctrlSetText localize "STR_pInAct_Arrest"; +_Btn6 buttonSetAction "[life_pInact_curTarget] call life_fnc_arrestAction; closeDialog 0;"; +_Btn6 ctrlEnable false; + +_Btn7 ctrlSetText localize "STR_pInAct_PutInCar"; +_Btn7 buttonSetAction "[life_pInact_curTarget] call life_fnc_putInCar; closeDialog 0;"; + +//SeizeWeapons Button +_Btn8 ctrlSetText localize "STR_pInAct_Seize"; +_Btn8 buttonSetAction "[life_pInact_curTarget] spawn life_fnc_seizePlayerAction; closeDialog 0;"; + +if (FETCH_CONST(life_coplevel) < _seizeRank) then {_Btn8 ctrlEnable false;}; + +{ + if ((player distance (getMarkerPos _x) <30)) exitWith { _Btn6 ctrlEnable true;}; +} forEach LIFE_SETTINGS(getArray,"sendtoJail_locations"); \ No newline at end of file diff --git a/life_client/core/cop/fn_copLights.sqf b/life_client/core/cop/fn_copLights.sqf new file mode 100644 index 00000000..f36c9db3 --- /dev/null +++ b/life_client/core/cop/fn_copLights.sqf @@ -0,0 +1,131 @@ +/* + File: fn_copLights.sqf + Author: mindstorm, modified by Adanteh + Link: http://forums.bistudio.com/showthread.php?157474-Offroad-Police-sirens-lights-and-underglow + + Description: + Adds the light effect to cop vehicles, specifically the offroad. +*/ +Private ["_vehicle","_lightRed","_lightBlue","_lightleft","_lightright","_leftRed"]; +_vehicle = _this select 0; + +if (isNil "_vehicle" || isNull _vehicle || !(_vehicle getVariable "lights")) exitWith {}; +_lightRed = [20, 0.1, 0.1]; +_lightBlue = [0.1, 0.1, 20]; + +_lightleft = "#lightpoint" createVehicle getPos _vehicle; +sleep 0.2; +_lightleft setLightColor _lightRed; +_lightleft setLightBrightness 0.2; +_lightleft setLightAmbient [0.1,0.1,1]; + +switch (typeOf _vehicle) do +{ + case "C_Offroad_01_F": + { + _lightleft lightAttachObject [_vehicle, [-0.37, 0.0, 0.56]]; + }; + + case "B_MRAP_01_F": + { + _lightleft lightAttachObject [_vehicle, [-0.37, -1.9, 0.7]]; + }; + + case "C_SUV_01_F": + { + _lightleft lightAttachObject [_vehicle, [-0.37,-1.2,0.42]]; + }; + + case "C_Hatchback_01_sport_F": + { + _lightleft lightAttachObject [_vehicle, [-0.35,-0.2,0.25]]; + }; + + case "B_Heli_Light_01_F": + { + _lightleft lightAttachObject [_vehicle,[-0.37, 0.0, -0.80]]; + }; + + case "B_Heli_Transport_01_F": + { + _lightleft lightAttachObject [_vehicle, [-0.5, 0.0, 0.81]]; + }; +}; + +_lightleft setLightAttenuation [0.181, 0, 1000, 130]; +_lightleft setLightIntensity 10; +_lightleft setLightFlareSize 0.38; +_lightleft setLightFlareMaxDistance 150; +_lightleft setLightUseFlare true; + +_lightright = "#lightpoint" createVehicle getPos _vehicle; +sleep 0.2; +_lightright setLightColor _lightBlue; +_lightright setLightBrightness 0.2; +_lightright setLightAmbient [0.1,0.1,1]; + +switch (typeOf _vehicle) do +{ + case "C_Offroad_01_F": + { + _lightright lightAttachObject [_vehicle, [0.37, 0.0, 0.56]]; + }; + + case "B_MRAP_01_F": + { + _lightright lightAttachObject [_vehicle, [0.37, -1.9, 0.7]]; + }; + + case "C_SUV_01_F": + { + _lightright lightAttachObject [_vehicle, [0.37,-1.2,0.42]]; + }; + + case "C_Hatchback_01_sport_F": + { + _lightright lightAttachObject [_vehicle, [0.35,-0.2,0.25]]; + }; + + case "B_Heli_Light_01_F": + { + _lightright lightAttachObject [_vehicle,[0.37, 0.0, -0.80]]; + }; + + case "B_Heli_Transport_01_F": + { + _lightright lightAttachObject [_vehicle, [0.5, 0.0, 0.81]]; + }; +}; + +_lightright setLightAttenuation [0.181, 0, 1000, 130]; +_lightright setLightIntensity 10; +_lightright setLightFlareSize 0.38; +_lightright setLightFlareMaxDistance 150; +_lightright setLightUseFlare true; + +//ARE YOU ALL HAPPY?!?!?!?!?!?!?!?!?%#?@WGD?TGD?BN?ZDHBFD?GA +_lightleft setLightDayLight true; +_lightright setLightDayLight true; + +_leftRed = true; +while{ (alive _vehicle)} do +{ + if (!(_vehicle getVariable "lights")) exitWith {}; + if (_leftRed) then + { + _leftRed = false; + _lightright setLightBrightness 0.0; + sleep 0.05; + _lightleft setLightBrightness 6; + } + else + { + _leftRed = true; + _lightleft setLightBrightness 0.0; + sleep 0.05; + _lightright setLightBrightness 6; + }; + sleep (_this select 1); +}; +deleteVehicle _lightleft; +deleteVehicle _lightright; \ No newline at end of file diff --git a/Altis_Life.Altis/core/cop/fn_copLoadout.sqf b/life_client/core/cop/fn_copLoadout.sqf similarity index 83% rename from Altis_Life.Altis/core/cop/fn_copLoadout.sqf rename to life_client/core/cop/fn_copLoadout.sqf index 9661db35..a3e4043b 100644 --- a/Altis_Life.Altis/core/cop/fn_copLoadout.sqf +++ b/life_client/core/cop/fn_copLoadout.sqf @@ -1,10 +1,10 @@ /* - File: fn_copLoadout.sqf - Author: Bryan "Tonic" Boardwine - Edited: Itsyuka - - Description: - Loads the cops out with the default gear. + File: fn_copLoadout.sqf + Author: Bryan "Tonic" Boardwine + Edited: Itsyuka + + Description: + Loads the cops out with the default gear. */ private["_handle"]; _handle = [] spawn life_fnc_stripDownPlayer; @@ -14,8 +14,8 @@ waitUntil {scriptDone _handle}; player addUniform "U_Rangemaster"; player addVest "V_Rangemaster_belt"; -player addWeapon "hgun_P07_snds_F"; player addMagazine "16Rnd_9x21_Mag"; +player addWeapon "hgun_P07_snds_F"; player addMagazine "16Rnd_9x21_Mag"; player addMagazine "16Rnd_9x21_Mag"; player addMagazine "16Rnd_9x21_Mag"; diff --git a/life_client/core/cop/fn_copMarkers.sqf b/life_client/core/cop/fn_copMarkers.sqf new file mode 100644 index 00000000..14c3efe8 --- /dev/null +++ b/life_client/core/cop/fn_copMarkers.sqf @@ -0,0 +1,66 @@ +/* + File: fn_copMarkers.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Marks cops on the map for other cops. Only initializes when the actual map is open. +*/ +_markers = []; +_cops = []; +_units = []; + +//Check if medics (indep) are in the room. -fn_requestMedic.sqf +_medicsOnline = {_x != player && {side _x isEqualTo independent} && {alive _x}} count playableUnits > 0; + + +sleep 0.5; +if (visibleMap) then { + {if (side _x isEqualTo west) then {_cops pushBack _x;}} forEach playableUnits; //Fetch list of cops / blufor + + // Check to see if medics are online else create dead markers. -Raid + if (!_medicsOnline) then { + { + _name = _x getVariable "name"; + _down = _x getVariable ["Revive",false]; + if (!isNil "_name" && !_down) then { + _units pushBack _x; + }; + } forEach allDeadMen; + //Loop through and create markers. + { + _marker = createMarkerLocal [format["%1_dead_marker",_x],visiblePosition _x]; + _marker setMarkerColorLocal "ColorRed"; + _marker setMarkerTypeLocal "loc_Hospital"; + _marker setMarkerTextLocal format["%1",(_x getVariable ["name","Unknown Player"])]; + _markers pushBack _marker; + } forEach _units; + }; + + //Create markers + { + if (_x != player) then { + _marker = createMarkerLocal [format["%1_marker",_x],visiblePosition _x]; + _marker setMarkerColorLocal "ColorBLUFOR"; + _marker setMarkerTypeLocal "Mil_dot"; + _marker setMarkerTextLocal format["%1", _x getVariable ["realname",name _x]]; + + _markers pushBack [_marker,_x]; + }; + } forEach _cops; + + while {visibleMap} do { + { + private["_unit"]; + _unit = _x select 1; + if (!isNil "_unit" && !isNull _unit) then { + (_x select 0) setMarkerPosLocal (visiblePosition _unit); + }; + } forEach _markers; + if (!visibleMap) exitWith {}; + sleep 0.02; + }; + + {deleteMarkerLocal (_x select 0);} forEach _markers; + _markers = []; + _cops = []; +}; diff --git a/life_client/core/cop/fn_copSearch.sqf b/life_client/core/cop/fn_copSearch.sqf new file mode 100644 index 00000000..35d5175d --- /dev/null +++ b/life_client/core/cop/fn_copSearch.sqf @@ -0,0 +1,63 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_copSearch.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Returns information on the search. +*/ +life_action_inUse = false; +private["_license","_guns","_gun"]; +params [ + ["_civ",objNull,[objNull]], + ["_invs",[],[[]]], + ["_robber",false,[false]] +]; + +if (isNull _civ) exitWith {}; + +_illegal = 0; +_inv = ""; +if (count _invs > 0) then { + { + _displayName = M_CONFIG(getText,"VirtualItems",(_x select 0),"displayName"); + _inv = _inv + format["%1 %2
",(_x select 1),(localize _displayName)]; + _price = M_CONFIG(getNumber,"VirtualItems",(_x select 0),"sellPrice"); + if (!isNull (missionConfigFile >> "VirtualItems" >> (_x select 0) >> "processedItem")) then { + _processed = M_CONFIG(getText,"VirtualItems",(_x select 0),"processedItem"); + _price = M_CONFIG(getNumber,"VirtualItems",_processed,"sellPrice"); + }; + + if (!(_price isEqualTo -1)) then { + _illegal = _illegal + ((_x select 1) * _price); + }; + } forEach _invs; + if (_illegal > 6000) then { + + if (life_HC_isActive) then { + [getPlayerUID _civ,_civ getVariable ["realname",name _civ],"482"] remoteExecCall ["HC_fnc_wantedAdd",HC_Life]; + } else { + [getPlayerUID _civ,_civ getVariable ["realname",name _civ],"482"] remoteExecCall ["life_fnc_wantedAdd",RSERV]; + }; + + }; + + if (life_HC_isActive) then { + [getPlayerUID _civ,_civ getVariable ["realname",name _civ],"481"] remoteExecCall ["HC_fnc_wantedAdd",HC_Life]; + } else { + [getPlayerUID _civ,_civ getVariable ["realname",name _civ],"481"] remoteExecCall ["life_fnc_wantedAdd",RSERV]; + }; + + [0,"STR_Cop_Contraband",true,[(_civ getVariable ["realname",name _civ]),[_illegal] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",west]; +} else { + _inv = localize "STR_Cop_NoIllegal"; +}; + +if (!alive _civ || player distance _civ > 5) exitWith {hint format[localize "STR_Cop_CouldntSearch",_civ getVariable ["realname",name _civ]]}; +//hint format["%1",_this]; +hint parseText format["%1

" +(localize "STR_Cop_IllegalItems")+ "

%2



%3" +,(_civ getVariable ["realname",name _civ]),_inv,if (_robber) then {"Robbed the bank"} else {""}]; + +if (_robber) then { + [0,"STR_Cop_Robber",true,[(_civ getVariable ["realname",name _civ])]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; +}; diff --git a/life_client/core/cop/fn_copSiren.sqf b/life_client/core/cop/fn_copSiren.sqf new file mode 100644 index 00000000..9abf1e22 --- /dev/null +++ b/life_client/core/cop/fn_copSiren.sqf @@ -0,0 +1,23 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_copSiren.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Starts the cop siren sound for other players. +*/ +private["_vehicle"]; +_vehicle = param [0,objNull,[objNull]]; + +if (isNull _vehicle) exitWith {}; +if (isNil {_vehicle getVariable "siren"}) exitWith {}; + +for "_i" from 0 to 1 step 0 do { + if (!(_vehicle getVariable "siren")) exitWith {}; + if (count crew _vehicle isEqualTo 0) then {_vehicle setVariable ["siren",false,true]}; + if (!alive _vehicle) exitWith {}; + if (isNull _vehicle) exitWith {}; + _vehicle say3D "sirenLong";//Class name specified in description.ext + sleep 4.870;//Exactly matches the length of the audio file. + if (!(_vehicle getVariable "siren")) exitWith {}; +}; diff --git a/life_client/core/cop/fn_doorAnimate.sqf b/life_client/core/cop/fn_doorAnimate.sqf new file mode 100644 index 00000000..9ca8b08b --- /dev/null +++ b/life_client/core/cop/fn_doorAnimate.sqf @@ -0,0 +1,29 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_doorAnimate.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Animates a door? +*/ +private["_b","_doors","_door"]; +_b = _this select 0; +_doors = 1; +_doors = FETCH_CONFIG2(getNumber,"CfgVehicles",typeOf _b,"NumberOfDoors"); + +_door = 0; +//Find the nearest door +for "_i" from 1 to _doors do { + _selPos = _b selectionPosition format["Door_%1_trigger",_i]; + _worldSpace = _b modelToWorld _selPos; + if (player distance _worldSpace < 5) exitWith {_door = _i;}; +}; +if (_door isEqualTo 0) exitWith {hint localize "STR_Cop_NotaDoor"}; //Not near a door to be broken into. + +if (_b animationPhase format["door_%1_rot",_door] isEqualTo 0) then { + _b animate[format["door_%1_rot",_door],1]; +} else { + _b animate[format["door_%1_rot",_door],0]; +}; + +closeDialog 0; \ No newline at end of file diff --git a/life_client/core/cop/fn_fedCamDisplay.sqf b/life_client/core/cop/fn_fedCamDisplay.sqf new file mode 100644 index 00000000..76f95660 --- /dev/null +++ b/life_client/core/cop/fn_fedCamDisplay.sqf @@ -0,0 +1,53 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_fedCamDisplay.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Turns on and displays a security cam like feed via PiP to the laptop display. +*/ +_laptop = _this select 0; +_mode = _this select 3; + +if (!isPiPEnabled) exitWith {hint localize "STR_Cop_EnablePiP";}; +if (isNil "life_fed_scam") then { + life_fed_scam = "camera" camCreate [0,0,0]; + life_fed_scam camSetFov 0.5; + life_fed_scam camCommit 0; + "rendertarget0" setPiPEffect [0]; + life_fed_scam cameraEffect ["INTERNAL", "BACK", "rendertarget0"]; + _laptop setObjectTexture [0,"#(argb,256,256,1)r2t(rendertarget0,1.0)"]; +}; + +switch (_mode) do { + case "side": { + life_fed_scam camSetPos [16029.1,16938.9,3.08817]; + life_fed_scam camSetTarget [16034.9,16930.6,0.00146008]; + life_fed_scam camCommit 0; + }; + + case "vault": { + life_fed_scam camSetPos [16031.1,16936.6,10.287]; + life_fed_scam camSetTarget [16017.1,16957.3,0.597221]; + life_fed_scam camCommit 0; + }; + + case "front": { + life_fed_scam camSetPos [16084.3,16997.8,23.6492] ; + life_fed_scam camSetTarget [16037.8,16966.7,0.00145817]; + life_fed_scam camCommit 0; + }; + + case "back": { + life_fed_scam camSetPos [16002,16904.9,5.71753]; + life_fed_scam camSetTarget [15998.7,16939.7,0.00146866]; + life_fed_scam camCommit 0; + }; + + case "off" :{ + life_fed_scam cameraEffect ["terminate", "back"]; + camDestroy life_fed_scam; + _laptop setObjectTexture [0,""]; + life_fed_scam = nil; + }; +}; diff --git a/life_client/core/cop/fn_licenseCheck.sqf b/life_client/core/cop/fn_licenseCheck.sqf new file mode 100644 index 00000000..a0c04068 --- /dev/null +++ b/life_client/core/cop/fn_licenseCheck.sqf @@ -0,0 +1,25 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_licenseCheck.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Returns the licenses to the cop. +*/ +private["_cop","_licenses","_licensesConfigs"]; +_cop = param [0,objNull,[objNull]]; +if (isNull _cop) exitWith {}; //Bad entry + +_licenses = ""; + +//Config entries for licenses that are civilian +_licensesConfigs = "getText(_x >> 'side') isEqualTo 'civ'" configClasses (missionConfigFile >> "Licenses"); + +{ + if (LICENSE_VALUE(configName _x,"civ")) then { + _licenses = _licenses + localize getText(_x >> "displayName") + "
"; + }; +} forEach _licensesConfigs; + +if (_licenses isEqualTo "") then {_licenses = (localize "STR_Cop_NoLicensesFound");}; +[profileName,_licenses] remoteExecCall ["life_fnc_licensesRead",_cop]; diff --git a/life_client/core/cop/fn_licensesRead.sqf b/life_client/core/cop/fn_licensesRead.sqf new file mode 100644 index 00000000..b0b40e22 --- /dev/null +++ b/life_client/core/cop/fn_licensesRead.sqf @@ -0,0 +1,13 @@ +/* + File: fn_licensesRead.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Outprints the licenses. +*/ +params [ + ["_civ","",[""]], + ["_licenses",(localize "STR_Cop_NoLicenses"),[""]] +]; + +hint parseText format["%1
" +(localize "STR_Cop_Licenses")+ "
%2",_civ,_licenses]; \ No newline at end of file diff --git a/life_client/core/cop/fn_questionDealer.sqf b/life_client/core/cop/fn_questionDealer.sqf new file mode 100644 index 00000000..93bb813d --- /dev/null +++ b/life_client/core/cop/fn_questionDealer.sqf @@ -0,0 +1,33 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_questionDealer.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Questions the drug dealer and sets the sellers wanted. +*/ +private["_sellers","_crimes","_names"]; +_sellers = (_this select 0) getVariable ["sellers",[]]; +if (count _sellers isEqualTo 0) exitWith {hint localize "STR_Cop_DealerQuestion"}; //No data. +life_action_inUse = true; +_crimes = LIFE_SETTINGS(getArray,"crimes"); + +_names = ""; +{ + _val = 0; + if ((_x select 2) > 150000) then { + _val = round((_x select 2) / 16); + } else { + _val = ["483",_crimes] call TON_fnc_index; + _val = ((_crimes select _val) select 1); + if (_val isEqualType "") then { + _val = parseNumber _val; + }; + }; + [(_x select 0),(_x select 1),"483",_val] remoteExecCall ["life_fnc_wantedAdd",RSERV]; + _names = _names + format["%1
",(_x select 1)]; +} forEach _sellers; + +hint parseText format[(localize "STR_Cop_DealerMSG")+ "

%1",_names]; +(_this select 0) setVariable ["sellers",[],true]; +life_action_inUse = false; diff --git a/life_client/core/cop/fn_radar.sqf b/life_client/core/cop/fn_radar.sqf new file mode 100644 index 00000000..71b1a84f --- /dev/null +++ b/life_client/core/cop/fn_radar.sqf @@ -0,0 +1,23 @@ +/* + File: fn_radar.sqf + Author: Silly Aussie kid named Jaydon + + Description: + Looks like weird but radar? +*/ +if (playerSide != west) exitWith {}; +private ["_speed","_vehicle"]; +_vehicle = cursorObject; +_speed = round speed _vehicle; + +if ((_vehicle isKindOf "Car") && (currentWeapon player) isEqualTo "hgun_P07_snds_F") then { + switch (true) do { + case (_speed > 33 && _speed <= 80): { + hint parseText format ["" +(localize "STR_Cop_Radar")+ "
" +(localize "STR_Cop_VehSpeed"),round _speed]; + }; + + case (_speed > 80): { + hint parseText format ["" +(localize "STR_Cop_Radar")+ "
" +(localize "STR_Cop_VehSpeed"),round _speed]; + }; + }; +}; \ No newline at end of file diff --git a/life_client/core/cop/fn_repairDoor.sqf b/life_client/core/cop/fn_repairDoor.sqf new file mode 100644 index 00000000..9ee05d44 --- /dev/null +++ b/life_client/core/cop/fn_repairDoor.sqf @@ -0,0 +1,82 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_repairDoor.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Re-locks the door mainly for the federal reserve structures. +*/ +private["_building","_doors","_door","_cP","_cpRate","_ui","_title","_titleText","_locked"]; +_building = param [0,objNull,[objNull]]; +if (isNull _building) exitWith {}; +if (!(_building isKindOf "House_F")) exitWith {hint localize "STR_ISTR_Bolt_NotNear";}; + +_doors = 1; +_doors = FETCH_CONFIG2(getNumber,"CfgVehicles",(typeOf _building),"NumberOfDoors"); +_door = 0; +//Find the nearest door +for "_i" from 1 to _doors do { + _selPos = _building selectionPosition format["Door_%1_trigger",_i]; + _worldSpace = _building modelToWorld _selPos; + if (player distance _worldSpace < 5) exitWith {_door = _i;}; +}; + +if (_door isEqualTo 0) exitWith {hint localize "STR_Cop_NotaDoor"}; //Not near a door to be broken into. +_doorN = _building getVariable [format["bis_disabled_Door_%1",_door],0]; +if (_doorN isEqualTo 1) exitWith {hint localize "STR_House_FedDoor_Locked"}; +life_action_inUse = true; + +closeDialog 0; +//Setup the progress bar +disableSerialization; +_title = localize "STR_Cop_RepairingDoor"; +5 cutRsc ["life_progress","PLAIN"]; +_ui = uiNamespace getVariable "life_progress"; +_progressBar = _ui displayCtrl 38201; +_titleText = _ui displayCtrl 38202; +_titleText ctrlSetText format["%2 (1%1)...","%",_title]; +_progressBar progressSetPosition 0.01; +_cP = 0.01; + +switch (typeOf _building) do { + case "Land_Dome_Big_F": {_cpRate = 0.008;}; + case "Land_Research_house_V1_F": {_cpRate = 0.005;}; + default {_cpRate = 0.08;} +}; + +for "_i" from 0 to 1 step 0 do { + if (animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { + [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; + player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; + player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; + }; + sleep 0.26; + if (isNull _ui) then { + 5 cutRsc ["life_progress","PLAIN"]; + _ui = uiNamespace getVariable "life_progress"; + }; + _cP = _cP + _cpRate; + _progressBar progressSetPosition _cP; + _titleText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_title]; + if (_cP >= 1 || !alive player) exitWith {}; + if (life_interrupted) exitWith {}; +}; + +//Kill the UI display and check for various states +5 cutText ["","PLAIN"]; +player playActionNow "stop"; +if (!alive player) exitWith {life_action_inUse = false;}; +if (life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; +life_action_inUse = false; + +_building animate [format["door_%1_rot",_door],0]; +_building setVariable [format["bis_disabled_Door_%1",_door],1,true]; //Lock the door. + +_locked = true; +for "_i" from 1 to _doors do { + if ((_building getVariable [format["bis_disabled_Door_%1",_i],0]) isEqualTo 0) exitWith {_locked = false}; +}; + +if (_locked) then { + _building setVariable ["locked",true,true]; +}; diff --git a/life_client/core/cop/fn_restrain.sqf b/life_client/core/cop/fn_restrain.sqf new file mode 100644 index 00000000..f23f614f --- /dev/null +++ b/life_client/core/cop/fn_restrain.sqf @@ -0,0 +1,94 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_restrain.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Restrains the client. +*/ +private["_cop","_player","_vehicle"]; +_cop = param [0,objNull,[objNull]]; +_player = player; +_vehicle = vehicle player; +if (isNull _cop) exitWith {}; + +//Monitor excessive restrainment +[] spawn { + private "_time"; + for "_i" from 0 to 1 step 0 do { + _time = time; + waitUntil {(time - _time) > (5 * 60)}; + + if (!(player getVariable ["restrained",false])) exitWith {}; + if (!([west,getPos player,30] call life_fnc_nearUnits) && (player getVariable ["restrained",false]) && isNull objectParent player) exitWith { + player setVariable ["restrained",false,true]; + player setVariable ["Escorting",false,true]; + player setVariable ["transporting",false,true]; + detach player; + titleText[localize "STR_Cop_ExcessiveRestrain","PLAIN"]; + }; + }; +}; + +titleText[format[localize "STR_Cop_Restrained",_cop getVariable ["realname",name _cop]],"PLAIN"]; + +life_disable_getIn = true; +life_disable_getOut = false; + +while {player getVariable "restrained"} do { + if (isNull objectParent player) then { + player playMove "AmovPercMstpSnonWnonDnon_Ease"; + }; + + _state = vehicle player; + waitUntil {animationState player != "AmovPercMstpSnonWnonDnon_Ease" || !(player getVariable "restrained") || vehicle player != _state}; + + if (!alive player) exitWith { + player setVariable ["restrained",false,true]; + player setVariable ["Escorting",false,true]; + player setVariable ["transporting",false,true]; + detach _player; + }; + + if (!alive _cop) then { + player setVariable ["Escorting",false,true]; + detach player; + }; + + if (vehicle player != player && life_disable_getIn) then { + player action["eject",vehicle player]; + }; + + if ((vehicle player != player) && (vehicle player != _vehicle)) then { + _vehicle = vehicle player; + }; + + if (isNull objectParent player && life_disable_getOut) then { + player moveInCargo _vehicle; + }; + + if ((vehicle player != player) && life_disable_getOut && (driver (vehicle player) isEqualTo player)) then { + player action["eject",vehicle player]; + player moveInCargo _vehicle; + }; + + if (vehicle player != player && life_disable_getOut) then { + _turrets = [[-1]] + allTurrets _vehicle; + { + if (_vehicle turretUnit [_x select 0] isEqualTo player) then { + player action["eject",vehicle player]; + sleep 1; + player moveInCargo _vehicle; + }; + }forEach _turrets; + }; +}; + +//disableUserInput false; + +if (alive player) then { + player switchMove "AmovPercMstpSlowWrflDnon_SaluteIn"; + player setVariable ["Escorting",false,true]; + player setVariable ["transporting",false,true]; + detach player; +}; diff --git a/life_client/core/cop/fn_searchClient.sqf b/life_client/core/cop/fn_searchClient.sqf new file mode 100644 index 00000000..f7f6ac8a --- /dev/null +++ b/life_client/core/cop/fn_searchClient.sqf @@ -0,0 +1,33 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_searchClient.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Searches the player and he returns information back to the player. +*/ +private["_inv","_val","_var","_robber"]; +params [ + ["_cop",objNull,[objNull]] +]; +if (isNull _cop) exitWith {}; + +_inv = []; +_robber = false; + +//Illegal items +{ + _var = configName(_x); + _val = ITEM_VALUE(_var); + if (_val > 0) then { + _inv pushBack [_var,_val]; + [false,_var,_val] call life_fnc_handleInv; + }; +} forEach ("getNumber(_x >> 'illegal') isEqualTo 1" configClasses (missionConfigFile >> "VirtualItems")); + +if (!life_use_atm) then { + CASH = 0; + _robber = true; +}; + +[player,_inv,_robber] remoteExec ["life_fnc_copSearch",_cop]; diff --git a/life_client/core/cop/fn_seizeClient.sqf b/life_client/core/cop/fn_seizeClient.sqf new file mode 100644 index 00000000..e4d850b5 --- /dev/null +++ b/life_client/core/cop/fn_seizeClient.sqf @@ -0,0 +1,50 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_seizeClient.sqf + Author: Daniel "Skalicon" Larusso + + Description: + Removes the players weapons client side +*/ +private ["_exempt","_uniform","_vest","_headgear"]; +_exempt = LIFE_SETTINGS(getArray,"seize_exempt"); +_headgear = LIFE_SETTINGS(getArray,"seize_headgear"); +_vest = LIFE_SETTINGS(getArray,"seize_vest"); +_uniform = LIFE_SETTINGS(getArray,"seize_uniform"); + +{ + if (!(_x in _exempt)) then { + player removeWeapon _x; + }; +} forEach weapons player; + +{ + if (!(_x in _exempt)) then { + player removeItemFromUniform _x; + }; +} forEach uniformItems player; + +{ + if (!(_x in _exempt)) then { + player removeItemFromVest _x; + }; +} forEach vestItems player; + +{ + if (!(_x in _exempt)) then { + player removeItemFromBackpack _x; + }; +} forEach backpackItems player; + +{ + if (!(_x in _exempt)) then { + player removeMagazine _x; + }; +} forEach magazines player; + +if (uniform player in _uniform) then {removeUniform player;}; +if (vest player in _vest) then {removeVest player;}; +if (headgear player in _headgear) then {removeHeadgear player;}; + +[] call SOCK_fnc_updateRequest; +titleText[localize "STR_NOTF_SeizeIllegals","PLAIN"]; diff --git a/life_client/core/cop/fn_sirenLights.sqf b/life_client/core/cop/fn_sirenLights.sqf new file mode 100644 index 00000000..4ce2b575 --- /dev/null +++ b/life_client/core/cop/fn_sirenLights.sqf @@ -0,0 +1,22 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_sirenLights.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Lets play a game! Can you guess what it does? I have faith in you, if you can't + then you have failed me and therefor I lose all faith in humanity.. No pressure. +*/ +private["_vehicle"]; +_vehicle = param [0,objNull,[objNull]]; +if (isNull _vehicle) exitWith {}; //Bad entry! +if (!(typeOf _vehicle in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F","C_Hatchback_01_sport_F","B_Heli_Light_01_F","B_Heli_Transport_01_F"])) exitWith {}; //Last chance check to prevent something from defying humanity and creating a monster. + +_trueorfalse = _vehicle getVariable ["lights",false]; + +if (_trueorfalse) then { + _vehicle setVariable ["lights",false,true]; +} else { + _vehicle setVariable ["lights",true,true]; + [_vehicle,0.22] remoteExec ["life_fnc_copLights",RCLIENT]; +}; \ No newline at end of file diff --git a/life_client/core/cop/fn_spikeStripEffect.sqf b/life_client/core/cop/fn_spikeStripEffect.sqf new file mode 100644 index 00000000..11c862cc --- /dev/null +++ b/life_client/core/cop/fn_spikeStripEffect.sqf @@ -0,0 +1,14 @@ +/* + File: fn_spikeStripEffect.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Doesn't work without the server-side effect but shifted part of it clientside + so code can easily be changed. Ultimately it just pops the tires. +*/ +private["_vehicle"]; +_vehicle = param [0,objNull,[objNull]]; +if (isNull _vehicle) exitWith {}; //Bad vehicle type + +_vehicle setHitPointDamage["HitLFWheel",1]; +_vehicle setHitPointDamage["HitRFWheel",1]; diff --git a/life_client/core/cop/fn_ticketGive.sqf b/life_client/core/cop/fn_ticketGive.sqf new file mode 100644 index 00000000..86f4eec9 --- /dev/null +++ b/life_client/core/cop/fn_ticketGive.sqf @@ -0,0 +1,20 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_ticketGive.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Gives a ticket to the targeted player. +*/ +private["_val"]; +if (isNil "life_ticket_unit") exitWith {hint localize "STR_Cop_TicketNil"}; +if (isNull life_ticket_unit) exitWith {hint localize "STR_Cop_TicketExist"}; + +_val = ctrlText 2652; + +if (!([_val] call TON_fnc_isnumber)) exitWith {hint localize "STR_Cop_TicketNum"}; +if ((parseNumber _val) > 200000) exitWith {hint localize "STR_Cop_TicketOver100"}; + +[0,"STR_Cop_TicketGive",true,[profileName,[(parseNumber _val)] call life_fnc_numberText,life_ticket_unit getVariable ["realname",name life_ticket_unit]]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; +[player,(parseNumber _val)] remoteExec ["life_fnc_ticketPrompt",life_ticket_unit]; +closeDialog 0; diff --git a/life_client/core/cop/fn_ticketPaid.sqf b/life_client/core/cop/fn_ticketPaid.sqf new file mode 100644 index 00000000..b8c9d59c --- /dev/null +++ b/life_client/core/cop/fn_ticketPaid.sqf @@ -0,0 +1,18 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_ticketPaid.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Verifies that the ticket was paid. +*/ +params [ + ["_value",5,[0]], + ["_unit",objNull,[objNull]], + ["_cop",objNull,[objNull]] +]; +if (isNull _unit || {_unit != life_ticket_unit}) exitWith {}; //NO +if (isNull _cop || {_cop != player}) exitWith {}; //Double NO + +BANK = BANK + _value; +[1] call SOCK_fnc_updatePartial; \ No newline at end of file diff --git a/life_client/core/cop/fn_ticketPay.sqf b/life_client/core/cop/fn_ticketPay.sqf new file mode 100644 index 00000000..fe37d194 --- /dev/null +++ b/life_client/core/cop/fn_ticketPay.sqf @@ -0,0 +1,47 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_ticketPay.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Pays the ticket. +*/ +if (isNil "life_ticket_val" || isNil "life_ticket_cop") exitWith {}; +if (CASH < life_ticket_val) exitWith { + if (BANK < life_ticket_val) exitWith { + hint localize "STR_Cop_Ticket_NotEnough"; + [1,"STR_Cop_Ticket_NotEnoughNOTF",true,[profileName]] remoteExecCall ["life_fnc_broadcast",life_ticket_cop]; + closeDialog 0; + }; + + hint format[localize "STR_Cop_Ticket_Paid",[life_ticket_val] call life_fnc_numberText]; + BANK = BANK - life_ticket_val; + [1] call SOCK_fnc_updatePartial; + life_ticket_paid = true; + + [0,"STR_Cop_Ticket_PaidNOTF",true,[profileName,[life_ticket_val] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",west]; + [1,"STR_Cop_Ticket_PaidNOTF_2",true,[profileName]] remoteExecCall ["life_fnc_broadcast",life_ticket_cop]; + [life_ticket_val,player,life_ticket_cop] remoteExecCall ["life_fnc_ticketPaid",life_ticket_cop]; + + if (life_HC_isActive) then { + [getPlayerUID player] remoteExecCall ["HC_fnc_wantedRemove",HC_Life]; + } else { + [getPlayerUID player] remoteExecCall ["life_fnc_wantedRemove",RSERV]; + }; + closeDialog 0; +}; + +CASH = CASH - life_ticket_val; +[0] call SOCK_fnc_updatePartial; +life_ticket_paid = true; + +if (life_HC_isActive) then { + [getPlayerUID player] remoteExecCall ["HC_fnc_wantedRemove",HC_Life]; +} else { + [getPlayerUID player] remoteExecCall ["life_fnc_wantedRemove",RSERV]; +}; + +[0,"STR_Cop_Ticket_PaidNOTF",true,[profileName,[life_ticket_val] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",west]; +closeDialog 0; +[1,"STR_Cop_Ticket_PaidNOTF_2",true,[profileName]] remoteExecCall ["life_fnc_broadcast",life_ticket_cop]; +[life_ticket_val,player,life_ticket_cop] remoteExecCall ["life_fnc_ticketPaid",life_ticket_cop]; \ No newline at end of file diff --git a/life_client/core/cop/fn_ticketPrompt.sqf b/life_client/core/cop/fn_ticketPrompt.sqf new file mode 100644 index 00000000..fa81833a --- /dev/null +++ b/life_client/core/cop/fn_ticketPrompt.sqf @@ -0,0 +1,31 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_ticketPrompt + Author: Bryan "Tonic" Boardwine + + Description: + Prompts the player that he is being ticketed. +*/ +private["_cop","_val"]; +if (!isNull (findDisplay 2600)) exitWith {}; //Already at the ticket menu, block for abuse? +_cop = _this select 0; +if (isNull _cop) exitWith {}; +_val = _this select 1; + +createDialog "life_ticket_pay"; +disableSerialization; +waitUntil {!isNull (findDisplay 2600)}; + +life_ticket_paid = false; +life_ticket_val = _val; +life_ticket_cop = _cop; +CONTROL(2600,2601) ctrlSetStructuredText parseText format["" +(localize "STR_Cop_Ticket_GUI_Given"),_cop getVariable ["realname",name _cop],_val]; + +[] spawn { + disableSerialization; + waitUntil {life_ticket_paid || (isNull (findDisplay 2600))}; + if (isNull (findDisplay 2600) && !life_ticket_paid) then { + [0,"STR_Cop_Ticket_Refuse",true,[profileName]] remoteExecCall ["life_fnc_broadcast",west]; + [1,"STR_Cop_Ticket_Refuse",true,[profileName]] remoteExecCall ["life_fnc_broadcast",life_ticket_cop]; + }; +}; \ No newline at end of file diff --git a/life_client/core/cop/fn_vehInvSearch.sqf b/life_client/core/cop/fn_vehInvSearch.sqf new file mode 100644 index 00000000..f43d004c --- /dev/null +++ b/life_client/core/cop/fn_vehInvSearch.sqf @@ -0,0 +1,41 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_vehInvSearch.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Searches the vehicle for illegal items. +*/ +private["_vehicle","_vehicleInfo","_value","_list"]; +_vehicle = cursorObject; +_list = ["Air","Ship","LandVehicle"]; +if (isNull _vehicle || {!(KINDOF_ARRAY(_vehicle,_list))}) exitWith {}; + +_vehicleInfo = _vehicle getVariable ["Trunk",[]]; +if (count _vehicleInfo isEqualTo 0) exitWith {hint localize "STR_Cop_VehEmpty"}; + +_value = 0; +_illegalValue = 0; +{ + _var = _x select 0; + _val = _x select 1; + _isIllegalItem = M_CONFIG(getNumber,"VirtualItems",_var,"illegal"); + if (_isIllegalItem isEqualTo 1 ) then{ + _illegalPrice = M_CONFIG(getNumber,"VirtualItems",_var,"sellPrice"); + if (!isNull (missionConfigFile >> "VirtualItems" >> _var >> "processedItem")) then { + _illegalItemProcessed = M_CONFIG(getText,"VirtualItems",_var,"processedItem"); + _illegalPrice = M_CONFIG(getNumber,"VirtualItems",_illegalItemProcessed,"sellPrice"); + }; + + _illegalValue = _illegalValue + (round(_val * _illegalPrice / 2)); + }; +} forEach (_vehicleInfo select 0); +_value = _illegalValue; +if (_value > 0) then { + [0,"STR_NOTF_VehContraband",true,[[_value] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; + BANK = BANK + _value; + [1] call SOCK_fnc_updatePartial; + _vehicle setVariable ["Trunk",[[],0],true]; +} else { + hint localize "STR_Cop_NoIllegalVeh"; +}; diff --git a/life_client/core/cop/fn_wantedGrab.sqf b/life_client/core/cop/fn_wantedGrab.sqf new file mode 100644 index 00000000..a1bec18e --- /dev/null +++ b/life_client/core/cop/fn_wantedGrab.sqf @@ -0,0 +1,21 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_wantedGrab.sqf + Author: ColinM + + Description: + Prepare the array to query the crimes. +*/ +private["_display","_tab","_criminal"]; +disableSerialization; +_display = findDisplay 2400; +_tab = _display displayCtrl 2402; +_criminal = lbData[2401,(lbCurSel 2401)]; +_criminal = call compile format["%1", _criminal]; +if (isNil "_criminal") exitWith {}; + +if (life_HC_isActive) then { + [player,_criminal] remoteExec ["HC_fnc_wantedCrimes",HC_Life]; +} else { + [player,_criminal] remoteExec ["life_fnc_wantedCrimes",RSERV]; +}; diff --git a/life_client/core/fn_initCiv.sqf b/life_client/core/fn_initCiv.sqf new file mode 100644 index 00000000..aa9aaac9 --- /dev/null +++ b/life_client/core/fn_initCiv.sqf @@ -0,0 +1,37 @@ +#include "..\script_macros.hpp" +/* + File: fn_initCiv.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Initializes the civilian. +*/ +private["_spawnPos"]; +civ_spawn_1 = nearestObjects[getMarkerPos "civ_spawn_1", ["Land_i_Shop_01_V1_F","Land_i_Shop_01_V2_F","Land_i_Shop_01_V3_F","Land_i_Shop_02_V1_F","Land_i_Shop_02_V2_F","Land_i_Shop_02_V3_F"],250]; +civ_spawn_2 = nearestObjects[getMarkerPos "civ_spawn_2", ["Land_i_Shop_01_V1_F","Land_i_Shop_01_V2_F","Land_i_Shop_01_V3_F","Land_i_Shop_02_V1_F","Land_i_Shop_02_V2_F","Land_i_Shop_02_V3_F"],250]; +civ_spawn_3 = nearestObjects[getMarkerPos "civ_spawn_3", ["Land_i_Shop_01_V1_F","Land_i_Shop_01_V2_F","Land_i_Shop_01_V3_F","Land_i_Shop_02_V1_F","Land_i_Shop_02_V2_F","Land_i_Shop_02_V3_F"],250]; +civ_spawn_4 = nearestObjects[getMarkerPos "civ_spawn_4", ["Land_i_Shop_01_V1_F","Land_i_Shop_01_V2_F","Land_i_Shop_01_V3_F","Land_i_Shop_02_V1_F","Land_i_Shop_02_V2_F","Land_i_Shop_02_V3_F"],250]; +waitUntil {!(isNull (findDisplay 46))}; +if (life_is_alive && !life_is_arrested) then { + /* Spawn at our last position */ + player setVehiclePosition [life_civ_position, [], 0, "CAN_COLLIDE"]; +} else { + if (!life_is_alive && !life_is_arrested) then { + if (LIFE_SETTINGS(getNumber,"save_civilian_positionStrict") isEqualTo 1) then { + _handle = [] spawn life_fnc_civLoadout; + waitUntil {scriptDone _handle}; + CASH = 0; + [0] call SOCK_fnc_updatePartial; + }; + [] call life_fnc_spawnMenu; + waitUntil{!isNull (findDisplay 38500)}; //Wait for the spawn selection to be open. + waitUntil{isNull (findDisplay 38500)}; //Wait for the spawn selection to be done. + } else { + if (life_is_arrested) then { + life_is_arrested = false; + [player,true] spawn life_fnc_jail; + }; + }; +}; +life_is_alive = true; +player addRating 9999999; diff --git a/life_client/core/fn_initCop.sqf b/life_client/core/fn_initCop.sqf new file mode 100644 index 00000000..ac153658 --- /dev/null +++ b/life_client/core/fn_initCop.sqf @@ -0,0 +1,30 @@ +#include "..\script_macros.hpp" +/* + File: fn_initCop.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Cop Initialization file. +*/ +private "_end"; +player addRating 9999999; +waitUntil {!(isNull (findDisplay 46))}; +_end = false; + +if (life_blacklisted) exitWith { + ["Blacklisted",false,true] call BIS_fnc_endMission; + sleep 30; +}; + +if (!(str(player) in ["cop_1","cop_2","cop_3","cop_4"])) then { + if ((FETCH_CONST(life_coplevel) isEqualTo 0) && (FETCH_CONST(life_adminlevel) isEqualTo 0)) then { + ["NotWhitelisted",false,true] call BIS_fnc_endMission; + sleep 35; + }; +}; + + +player setVariable ["rank",(FETCH_CONST(life_coplevel)),true]; +[] call life_fnc_spawnMenu; +waitUntil{!isNull (findDisplay 38500)}; //Wait for the spawn selection to be open. +waitUntil{isNull (findDisplay 38500)}; //Wait for the spawn selection to be done. diff --git a/life_client/core/fn_initMedic.sqf b/life_client/core/fn_initMedic.sqf new file mode 100644 index 00000000..d1e871d0 --- /dev/null +++ b/life_client/core/fn_initMedic.sqf @@ -0,0 +1,29 @@ +#include "..\script_macros.hpp" +/* + File: fn_initMedic.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Initializes the medic.. +*/ +private["_end"]; +player addRating 99999999; +waitUntil {!(isNull (findDisplay 46))}; + +if ((FETCH_CONST(life_medicLevel)) < 1 && (FETCH_CONST(life_adminlevel) isEqualTo 0)) exitWith { + ["Notwhitelisted",false,true] call BIS_fnc_endMission; + sleep 35; +}; + +if (LIFE_SETTINGS(getNumber,"restrict_medic_weapons") isEqualTo 1) then { + [] spawn { + for "_i" from 0 to 1 step 0 do { + waitUntil {sleep 3; currentWeapon player != ""}; + removeAllWeapons player; + }; + }; +}; + +[] call life_fnc_spawnMenu; +waitUntil{!isNull (findDisplay 38500)}; //Wait for the spawn selection to be open. +waitUntil{isNull (findDisplay 38500)}; //Wait for the spawn selection to be done. diff --git a/life_client/core/fn_setupActions.sqf b/life_client/core/fn_setupActions.sqf new file mode 100644 index 00000000..a37d992d --- /dev/null +++ b/life_client/core/fn_setupActions.sqf @@ -0,0 +1,17 @@ +/* + File: fn_setupActions.sqf + Author: + + Description: + Master addAction file handler for all client-based actions. +*/ +switch (playerSide) do { + case civilian: { + //Drop fishing net + life_actions = [player addAction[localize "STR_pAct_DropFishingNet",life_fnc_dropFishingNet,"",0,false,false,"",' + (surfaceisWater (getPos vehicle player)) && (vehicle player isKindOf "Ship") && life_carryWeight < life_maxWeight && speed (vehicle player) < 2 && speed (vehicle player) > -1 && !life_net_dropped ']]; + //Rob person + life_actions = life_actions + [player addAction[localize "STR_pAct_RobPerson",life_fnc_robAction,"",0,false,false,"",' + !isNull cursorObject && player distance cursorObject < 3.5 && isPlayer cursorObject && animationState cursorObject == "Incapacitated" && !(cursorObject getVariable ["robbed",false]) ']]; + }; +}; diff --git a/Altis_Life.Altis/core/fn_setupEVH.sqf b/life_client/core/fn_setupEVH.sqf similarity index 81% rename from Altis_Life.Altis/core/fn_setupEVH.sqf rename to life_client/core/fn_setupEVH.sqf index 3f7d64b8..63876c6c 100644 --- a/Altis_Life.Altis/core/fn_setupEVH.sqf +++ b/life_client/core/fn_setupEVH.sqf @@ -1,5 +1,9 @@ /* - Master eventhandler file + File: fn_setupEVH.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Master eventhandler file */ player addEventHandler["Killed", {_this spawn life_fnc_onPlayerKilled}]; player addEventHandler["handleDamage",{_this call life_fnc_handleDamage;}]; @@ -8,4 +12,3 @@ player addEventHandler["Take",{_this call life_fnc_onTakeItem}]; //Prevent peopl player addEventHandler["Fired",{_this call life_fnc_onFired}]; player addEventHandler["InventoryClosed", {_this call life_fnc_inventoryClosed}]; player addEventHandler["InventoryOpened", {_this call life_fnc_inventoryOpened}]; -"life_fnc_MP_packet" addPublicVariableEventHandler {[_this select 0,_this select 1] call life_fnc_MPexec;}; \ No newline at end of file diff --git a/life_client/core/fn_setupStationService.sqf b/life_client/core/fn_setupStationService.sqf new file mode 100644 index 00000000..20cc1434 --- /dev/null +++ b/life_client/core/fn_setupStationService.sqf @@ -0,0 +1,72 @@ +/* + File: fn_setupStationService.sqf + Author: NiiRoZz + + Description: + Add action fuel action in Station Service. + + put function in init file then execute it with: + ["obj id"] call getObjcsInMap; + example: ["Land_fs_feed_F"] call getObjcInMap; + + Function : + getObjcInMap = + { + private ["_pos", "_Station", "_br", "_tab", "_TexteSortie"]; + _pos = getArray(configFile >> "CfgWorlds" >> worldName >> "centerPosition"); + _Station = nearestObjects [_pos, _this, 25000]; + _br = toString [13, 10]; + _tab = toString [9]; + + _TexteSortie = "_position = [" + _br; + + { + _TexteSortie = _TexteSortie + _tab + (str (getpos _x)); + _TexteSortie = if (_forEachIndex < ((count _Station) - 1)) then {_TexteSortie + ", " + _br} else {_TexteSortie + _br}; + } forEach _Station; + _TexteSortie = _TexteSortie + "];"; + hint "Completed"; + copyToClipboard _TexteSortie; + }; +*/ +private ["_positionAltis"]; +_positionAltis = [ + [[9205.75,12112.2,-0.0487232], "Land_fs_feed_F"], + [[11831.6,14155.9,-0.0342016], "Land_fs_feed_F"], + [[12024.7,15830,-0.0298138], "Land_fs_feed_F"], + [[12026.6,15830.1,-0.0342979], "Land_fs_feed_F"], + [[12028.4,15830,-0.0388737], "Land_fs_feed_F"], + [[9025.78,15729.4,-0.0206528], "Land_fs_feed_F"], + [[9023.75,15729,-0.0271606], "Land_fs_feed_F"], + [[9021.82,15728.7,-0.0293427], "Land_fs_feed_F"], + [[16750.9,12513.1,-0.0525198], "Land_fs_feed_F"], + [[6798.15,15561.6,-0.0441437], "Land_fs_feed_F"], + [[6198.83,15081.4,-0.0912418], "Land_fs_feed_F"], + [[14173.2,16541.8,-0.0946102], "Land_fs_feed_F"], + [[5023.26,14429.6,-0.0978947], "Land_fs_feed_F"], + [[5019.68,14436.7,-0.0114822], "Land_fs_feed_F"], + [[4001.12,12592.1,-0.0966625], "Land_fs_feed_F"], + [[17417.2,13936.7,-0.10652], "Land_fs_feed_F"], + [[3757.14,13477.9,-0.0540276], "Land_fs_feed_F"], + [[3757.54,13485.9,-0.010498], "Land_fs_feed_F"], + [[16875.2,15469.4,0.037343], "Land_fs_feed_F"], + [[16871.7,15476.6,0.010293], "Land_fs_feed_F"], + [[8481.69,18260.7,-0.0266876], "Land_fs_feed_F"], + [[15297.1,17565.9,-0.283808], "Land_fs_feed_F"], + [[14221.4,18302.5,-0.0697155], "Land_fs_feed_F"], + [[15781,17453.2,-0.285281], "Land_fs_feed_F"], + [[19961.3,11454.6,-0.0349236], "Land_fs_feed_F"], + [[19965.1,11447.6,-0.0483704], "Land_fs_feed_F"], + [[5769,20085.7,-0.0156555], "Land_fs_feed_F"], + [[21230.4,7116.56,-0.0604229], "Land_fs_feed_F"], + [[20784.8,16665.9,-0.0521202], "Land_fs_feed_F"], + [[20789.6,16672.3,-0.0213318], "Land_fs_feed_F"], + [[23379.4,19799,-0.0544052], "Land_fs_feed_F"], + [[25701.2,21372.6,-0.0774155], "Land_fs_feed_F"] +]; + +{ + _pump = nearestObject _x; + _pump setFuelCargo 0; + _pump addAction [localize "STR_Action_Pump", life_fnc_fuelStatOpen, 1, 3, true, true, "", 'cursorObject isEqualTo _target', 5]; +} forEach _positionAltis; diff --git a/life_client/core/fn_survival.sqf b/life_client/core/fn_survival.sqf new file mode 100644 index 00000000..360ae2d9 --- /dev/null +++ b/life_client/core/fn_survival.sqf @@ -0,0 +1,108 @@ +#include "..\script_macros.hpp" +/* + File: fn_survival.sqf + Author: Bryan "Tonic" Boardwine + + Description: + All survival? things merged into one thread. +*/ +private["_fnc_food","_fnc_water","_foodTime","_waterTime","_bp","_walkDis","_lastPos","_curPos"]; +_fnc_food = { + if (life_hunger < 2) then {player setDamage 1; hint localize "STR_NOTF_EatMSG_Death";} + else + { + life_hunger = life_hunger - 10; + [] call life_fnc_hudUpdate; + if (life_hunger < 2) then {player setDamage 1; hint localize "STR_NOTF_EatMSG_Death";}; + switch (life_hunger) do { + case 30: {hint localize "STR_NOTF_EatMSG_1";}; + case 20: {hint localize "STR_NOTF_EatMSG_2";}; + case 10: { + hint localize "STR_NOTF_EatMSG_3"; + if (LIFE_SETTINGS(getNumber,"enable_fatigue") isEqualTo 1) then {player setFatigue 1;}; + }; + }; + }; +}; + +_fnc_water = { + if (life_thirst < 2) then {player setDamage 1; hint localize "STR_NOTF_DrinkMSG_Death";} + else + { + life_thirst = life_thirst - 10; + [] call life_fnc_hudUpdate; + if (life_thirst < 2) then {player setDamage 1; hint localize "STR_NOTF_DrinkMSG_Death";}; + switch (life_thirst) do { + case 30: {hint localize "STR_NOTF_DrinkMSG_1";}; + case 20: { + hint localize "STR_NOTF_DrinkMSG_2"; + if (LIFE_SETTINGS(getNumber,"enable_fatigue") isEqualTo 1) then {player setFatigue 1;}; + }; + case 10: { + hint localize "STR_NOTF_DrinkMSG_3"; + if (LIFE_SETTINGS(getNumber,"enable_fatigue") isEqualTo 1) then {player setFatigue 1;}; + }; + }; + }; +}; + +//Setup the time-based variables. +_foodTime = time; +_waterTime = time; +_walkDis = 0; +_bp = ""; +_lastPos = visiblePosition player; +_lastPos = (_lastPos select 0) + (_lastPos select 1); +_lastState = vehicle player; + +for "_i" from 0 to 1 step 0 do { + /* Thirst / Hunger adjustment that is time based */ + if ((time - _waterTime) > 600) then {[] call _fnc_water; _waterTime = time;}; + if ((time - _foodTime) > 850) then {[] call _fnc_food; _foodTime = time;}; + + /* Adjustment of carrying capacity based on backpack changes */ + if (backpack player isEqualTo "") then { + life_maxWeight = LIFE_SETTINGS(getNumber,"total_maxWeight"); + _bp = backpack player; + } else { + if (!(backpack player isEqualTo "") && {!(backpack player isEqualTo _bp)}) then { + _bp = backpack player; + life_maxWeight = LIFE_SETTINGS(getNumber,"total_maxWeight") + round(FETCH_CONFIG2(getNumber,"CfgVehicles",_bp,"maximumload") / 4); + }; + }; + + /* Check if the player's state changed? */ + if (vehicle player != _lastState || {!alive player}) then { + [] call life_fnc_updateViewDistance; + _lastState = vehicle player; + }; + + /* Check if the weight has changed and the player is carrying to much */ + if (life_carryWeight > life_maxWeight && {!isForcedWalk player}) then { + player forceWalk true; + if (LIFE_SETTINGS(getNumber,"enable_fatigue") isEqualTo 1) then {player setFatigue 1;}; + hint localize "STR_NOTF_MaxWeight"; + } else { + if (isForcedWalk player) then { + player forceWalk false; + }; + }; + + /* Travelling distance to decrease thirst/hunger which is captured every second so the distance is actually greater then 650 */ + if (!alive player) then {_walkDis = 0;} else { + _curPos = visiblePosition player; + _curPos = (_curPos select 0) + (_curPos select 1); + if (!(_curPos isEqualTo _lastPos) && {(isNull objectParent player)}) then { + _walkDis = _walkDis + 1; + if (_walkDis isEqualTo 650) then { + _walkDis = 0; + life_thirst = life_thirst - 5; + life_hunger = life_hunger - 5; + [] call life_fnc_hudUpdate; + }; + }; + _lastPos = visiblePosition player; + _lastPos = (_lastPos select 0) + (_lastPos select 1); + }; + uiSleep 1; +}; diff --git a/life_client/core/fn_welcomeNotification.sqf b/life_client/core/fn_welcomeNotification.sqf new file mode 100644 index 00000000..9ca5a3a1 --- /dev/null +++ b/life_client/core/fn_welcomeNotification.sqf @@ -0,0 +1,50 @@ +/* + File: fn_welcomeNotification.sqf + Author: + + Description: + Called upon first spawn selection and welcomes our player. +*/ +disableSerialization; +[ + "", + 0, + 0.2, + 10, + 0, + 0, + 8 +] spawn BIS_fnc_dynamicText; + +createDialog "RscDisplayWelcome"; + +_display = findDisplay 999999; +_text1 = _display displayCtrl 1100; +_buttonSpoiler = _display displayCtrl 2400; +_textSpoiler = _display displayCtrl 1101; +_text2 = _display displayCtrl 1102; + +_message = ""; +_message = _message + "

"; +_message = _message + "Useful Links (click on the links to open your browser)

"; +_message = _message + " ArmaLife -- Our Website, check it out for the latest news and updates.

"; +_message = _message + "TeamSpeak 3 Address: ADDRESS HERE

"; + + +//Fill only the first text +_text1 ctrlSetStructuredText (parseText _message); + +//Resize StructuredText component to display the scrollbar if needed +_positionText1 = ctrlPosition _text1; +_yText1 = _positionText1 select 1; +_hText1 = ctrlTextHeight _text1; +_text1 ctrlSetPosition [_positionText1 select 0, _yText1, _positionText1 select 2, _hText1]; +_text1 ctrlCommit 0; +//Hide second text, spoiler text and button +_buttonSpoiler ctrlSetFade 1; +_buttonSpoiler ctrlCommit 0; +_buttonSpoiler ctrlEnable false; +_textSpoiler ctrlSetFade 1; +_textSpoiler ctrlCommit 0; +_text2 ctrlSetFade 1; +_text2 ctrlCommit 0; diff --git a/Altis_Life.Altis/core/fsm/client.fsm b/life_client/core/fsm/client.fsm similarity index 91% rename from Altis_Life.Altis/core/fsm/client.fsm rename to life_client/core/fsm/client.fsm index b1097d70..4f73f027 100644 --- a/Altis_Life.Altis/core/fsm/client.fsm +++ b/life_client/core/fsm/client.fsm @@ -57,10 +57,10 @@ class FSM to="Split"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(time - _lastcheck) > ((getNumber(missionConfigFile >> ""Life_Settings"" >> ""paycheck_period"")) * 60)"/*%FSM*/; - action=/*%FSM*/"if(!alive player) then {" \n + action=/*%FSM*/"if (!alive player) then {" \n " systemChat localize ""STR_FSM_MissedPay"";" \n "} else {" \n - " if(player distance (getMarkerPos ""fed_reserve"") < 120 && playerSide == west) then {" \n + " if (player distance (getMarkerPos ""fed_reserve"") < 120 && playerSide isEqualTo west) then {" \n " systemChat format[localize ""STR_FSM_ReceivedPay"",[(call life_paycheck) + 1500] call life_fnc_numberText];" \n " life_atmbank = life_atmbank + (call life_paycheck) + 1500;" \n " } else {" \n @@ -73,10 +73,10 @@ class FSM "" \n "//Group clean (Local)" \n "{" \n - " if(local _x && {(count units _x == 0)}) then {" \n + " if (local _x && {(units _x isEqualTo [])}) then {" \n " deleteGroup _x;" \n " };" \n - "} foreach allGroups;" \n + "} forEach allGroups;" \n "" \n "" \n ""/*%FSM*/; @@ -91,4 +91,4 @@ class FSM { }; }; -/*%FSM*/ \ No newline at end of file +/*%FSM*/ diff --git a/Altis_Life.Altis/core/fsm/timeModule.fsm b/life_client/core/fsm/timeModule.fsm similarity index 95% rename from Altis_Life.Altis/core/fsm/timeModule.fsm rename to life_client/core/fsm/timeModule.fsm index 34e5a11d..214625be 100644 --- a/Altis_Life.Altis/core/fsm/timeModule.fsm +++ b/life_client/core/fsm/timeModule.fsm @@ -53,7 +53,7 @@ class FSM class Apply_Time_Multi { name = "Apply_Time_Multi"; - init = /*%FSM*/"if(_fastNight && {sunOrMoon == 0}) then {" \n + init = /*%FSM*/"if (_fastNight && {sunOrMoon isEqualTo 0}) then {" \n " setTimeMultiplier _skipNight;" \n "} else {" \n " setTimeMultiplier _skipDay;" \n @@ -80,7 +80,7 @@ class FSM priority = 0.000000; to="Apply_Time_Multi"; precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"sunOrMoon == 1 - _sunState"/*%FSM*/; + condition=/*%FSM*/"sunOrMoon isEqualTo 1 - _sunState"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ diff --git a/life_client/core/functions/fn_AAN.sqf b/life_client/core/functions/fn_AAN.sqf new file mode 100644 index 00000000..0eb5a9e7 --- /dev/null +++ b/life_client/core/functions/fn_AAN.sqf @@ -0,0 +1,42 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_AAN.sqf + Author: Karel Moricky + Modified: Jesse "tkcjesse" Schultz + + Description: + It's showtime! + + Parameter(s): + _this select 0: STRUCTURED TEXT: Header text + _this select 1: STRUCTURED TEXT: Bottom text (moving) + _this select 2: PROFILENAME: Below Header text +*/ +private ["_header","_line","_sender","_display","_textHeader","_textLine","_textLinePos","_textClock"]; +_header = _this select 0; +_line = _this select 1; +_sender = _this select 2; +disableSerialization; + +if (!life_settings_enableNewsBroadcast || isStreamFriendlyUIEnabled) exitWith {}; + +30 cutRsc ["rscAAN","plain"]; +_display = uiNamespace getVariable "BIS_AAN"; +_textHeader = _display displayCtrl 3001; +_textHeader ctrlSetStructuredText parseText format [localize "STR_News_BroadcastedBy",_header,_sender]; +_textHeader ctrlCommit 0; + +_textLine = _display displayCtrl 3002; +_textLine ctrlSetStructuredText parseText format[" %1 %1 %1 %1",_line]; +_textLine ctrlCommit 0; +_textLinePos = ctrlPosition _textLine; +_textLinePos set [0,-100]; +_textLine ctrlSetPosition _textLinePos; +_textLine ctrlCommit 1500; + +_textClock = _display displayctrl 3003; +_textClock ctrlSetText ([daytime,"HH:MM"] call bis_fnc_timetostring); +_textClock ctrlCommit 0; + +sleep 30; +30 cutText ["","plain"]; diff --git a/life_client/core/functions/fn_accType.sqf b/life_client/core/functions/fn_accType.sqf new file mode 100644 index 00000000..fb475722 --- /dev/null +++ b/life_client/core/functions/fn_accType.sqf @@ -0,0 +1,69 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_accType.sqf + Author: Bryan "Tonic" Boardwine + + *Functionality from Virtual Ammobox System* + + Description: + Checks what type of an attachment is passed and what it is compatible with. + Should now be compatible with the new compatibleItems class structure... This was not a fun task but thankfully + Robalo gave me some code that showed me the way. If it isn't 100% compatible then IDFK. The forEach in a forEach drove me nuts and + not the best way to do things, I really don't know what I was thinking but doing PHP code for two weeks and playing GTA V tends to make you + forget things.... Wow what a ramble... blah blah blah. + + Returns: + 0: Unknown Error + 1: Primary + 2: Secondary + 3: Handgun +*/ +private["_item","_type","_tmp","_ret","_weaponArray"]; +params [ + ["_item","",[""]], + ["_type",0,[0]] +]; +if (_item isEqualTo "" || _type isEqualTo 0) exitWith {0}; +_ret = 0; + +_weaponArray = [primaryWeapon player, secondaryWeapon player, handgunWeapon player]; +{ + if (!(_ret isEqualTo 0)) exitWith {}; //Make sure we exit the loop since there was already a match. + if (!(_x isEqualTo "")) then + { + _weapon = _x; + _cfgInfo = [_weapon,"CfgWeapons"] call life_fnc_fetchCfgDetails; + + _legacyItems = ((_cfgInfo select 10) + (_cfgInfo select 11) + (_cfgInfo select 12)); + _newItems = _cfgInfo select 14; + + //Check Legacy Items first + if (count _legacyItems > 0) then { + for "_i" from 0 to (count _legacyItems)-1 do { + _legacyItems set[_i,toLower(_legacyItems select _i)]; + }; + + if ((toLower _item) in _legacyItems) exitWith {_ret = switch (_weapon) do {case (primaryWeapon player): {1};case (secondaryWeapon player) : {2};case (handgunWeapon player): {3};default {0};};}; + }; + + //Check new compatibleItems class structure + if (count _newItems > 0) then { + //This gets weird with forEach in forEach :\ + { + if (!(_ret isEqualTo 0)) exitWith {}; + + if (isClass (configFile >> "CfgWeapons" >> _weapon >> "WeaponSlotsInfo" >> _x >> "compatibleItems")) then { + _cfg = FETCH_CONFIG4(getNumber,"CfgWeapons",_weapon,"WeaponSlotsInfo",_x,"compatibleItems",_item); + }; + + if (isNil "_cfg") then {_cfg = 0;}; + if (_cfg isEqualTo 1) exitWith { + _ret = switch (_weapon) do {case (primaryWeapon player): {1};case (secondaryWeapon player) : {2};case (handgunWeapon player): {3};default {0};}; + }; + } forEach _newItems; + if (!(_ret isEqualTo 0)) exitWith {}; //Make sure we exit the loop + }; + }; +} forEach _weaponArray; + +_ret; diff --git a/life_client/core/functions/fn_actionKeyHandler.sqf b/life_client/core/functions/fn_actionKeyHandler.sqf new file mode 100644 index 00000000..7c6b19e0 --- /dev/null +++ b/life_client/core/functions/fn_actionKeyHandler.sqf @@ -0,0 +1,119 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_actionKeyHandler.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Master action key handler, handles requests for picking up various items and + interacting with other players (Cops = Cop Menu for unrestrain,escort,stop escort, arrest (if near cop hq), etc). +*/ +private["_curObject","_isWater","_CrateModelNames","_crate","_fish","_animal","_whatIsIt","_handle"]; +_curObject = cursorObject; +if (life_action_inUse) exitWith {}; //Action is in use, exit to prevent spamming. +if (life_interrupted) exitWith {life_interrupted = false;}; +_isWater = surfaceIsWater (visiblePositionASL player); + +if (player getVariable ["isEscorting",false]) exitWith { + [] call life_fnc_copInteractionMenu; +}; + +if (LIFE_SETTINGS(getNumber,"global_ATM") isEqualTo 1) then{ + //Check if the player is near an ATM. + if ((call life_fnc_nearATM) && {!dialog}) exitWith { + [] call life_fnc_atmMenu; + }; +}; + +if (isNull _curObject) exitWith { + if (_isWater) then { + _fish = (nearestObjects[player,(LIFE_SETTINGS(getArray,"animaltypes_fish")),3]) select 0; + if (!isNil "_fish") then { + if (!alive _fish) then { + [_fish] call life_fnc_catchFish; + }; + }; + } else { + _animal = (nearestObjects[player,(LIFE_SETTINGS(getArray,"animaltypes_hunting")),3]) select 0; + if (!isNil "_animal") then { + if (!alive _animal) then { + [_animal] call life_fnc_gutAnimal; + }; + } else { + private "_handle"; + if (playerSide isEqualTo civilian && !life_action_gathering) then { + _whatIsIt = [] call life_fnc_whereAmI; + if (life_action_gathering) exitWith {}; //Action is in use, exit to prevent spamming. + switch (_whatIsIt) do { + case "mine" : { _handle = [] spawn life_fnc_mine }; + default { _handle = [] spawn life_fnc_gather }; + }; + life_action_gathering = true; + waitUntil {scriptDone _handle}; + life_action_gathering = false; + }; + }; + }; +}; + +if ((_curObject isKindOf "B_supplyCrate_F" || _curObject isKindOf "Box_IND_Grenades_F") && {player distance _curObject < 3} ) exitWith { + if (alive _curObject) then { + [_curObject] call life_fnc_containerMenu; + }; +}; + +if (_curObject isKindOf "House_F" && {player distance _curObject < 12} || ((nearestObject [[16019.5,16952.9,0],"Land_Dome_Big_F"]) == _curObject || (nearestObject [[16019.5,16952.9,0],"Land_Research_house_V1_F"]) == _curObject)) exitWith { + [_curObject] call life_fnc_houseMenu; +}; + +if (dialog) exitWith {}; //Don't bother when a dialog is open. +if (vehicle player != player) exitWith {}; //He's in a vehicle, cancel! +life_action_inUse = true; + +//Temp fail safe. +[] spawn { + sleep 60; + life_action_inUse = false; +}; + +//Check if it's a dead body. +if (_curObject isKindOf "Man" && !(_curObject isKindOf "Animal") && {!alive _curObject} && !(_curObject getVariable ["Revive",false]) && {playerSide in [west,independent]}) exitWith { + //Hotfix code by ins0 + if (((playerSide isEqualTo west && {(LIFE_SETTINGS(getNumber,"revive_cops") isEqualTo 1)}) || playerSide isEqualTo independent)) then { + if (life_inv_defibrillator > 0) then { + [_curObject] call life_fnc_revivePlayer; + }; + }; +}; + +//If target is a player then check if we can use the cop menu. +if (isPlayer _curObject && _curObject isKindOf "Man") then { + if ((_curObject getVariable ["restrained",false]) && !dialog && playerSide isEqualTo west) then { + [_curObject] call life_fnc_copInteractionMenu; + }; +} else { + //OK, it wasn't a player so what is it? + private["_isVehicle","_miscItems","_money","_list"]; + + _list = ["landVehicle","Ship","Air"]; + _isVehicle = if (KINDOF_ARRAY(_curObject,_list)) then {true} else {false}; + _miscItems = ["Land_BottlePlastic_V1_F","Land_TacticalBacon_F","Land_Can_V3_F","Land_CanisterFuel_F","Land_Suitcase_F"]; + + //It's a vehicle! open the vehicle interaction key! + if (_isVehicle) then { + if (!dialog) then { + if (player distance _curObject < ((boundingBox _curObject select 1) select 0)+2 && (!(player getVariable ["restrained",false])) && (!(player getVariable ["playerSurrender",false])) && !life_isknocked && !life_istazed) then { + [_curObject] call life_fnc_vInteractionMenu; + }; + }; + } else { + //OK, it wasn't a vehicle so let's see what else it could be? + if ((typeOf _curObject) in _miscItems) then { + [_curObject,player,false] remoteExecCall ["TON_fnc_pickupAction",RSERV]; + } else { + //It wasn't a misc item so is it money? + if ((typeOf _curObject) isEqualTo "Land_Money_F" && {!(_curObject getVariable ["inUse",false])}) then { + [_curObject,player,true] remoteExecCall ["TON_fnc_pickupAction",RSERV]; + }; + }; + }; +}; diff --git a/life_client/core/functions/fn_animSync.sqf b/life_client/core/functions/fn_animSync.sqf new file mode 100644 index 00000000..fc52de93 --- /dev/null +++ b/life_client/core/functions/fn_animSync.sqf @@ -0,0 +1,15 @@ +/* + File: fn_animSync.sqf + Author: + + Description: + +*/ +private["_unit","_anim"]; +params [ + ["_unit",objNull,[objNull]], + ["_anim","",[""]], + ["_cancelOwner",false,[true]] +]; +if (isNull _unit || {(local _unit && _cancelOwner)}) exitWith {}; +_unit switchMove _anim; diff --git a/life_client/core/functions/fn_calWeightDiff.sqf b/life_client/core/functions/fn_calWeightDiff.sqf new file mode 100644 index 00000000..08ee5aab --- /dev/null +++ b/life_client/core/functions/fn_calWeightDiff.sqf @@ -0,0 +1,31 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_calWeightDiff.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Calculates weight differences in the _cWeight (current Weight) against the _mWeight (Max Weight) + Multiple purpose system for this life mission. +*/ +private["_item","_value","_cWeight","_mWeight","_sum","_weight"]; +params [ + ["_item","",[""]], + ["_value",-1,[0]], + ["_cWeight",-1,[0]], + ["_mWeight",-1,[0]] +]; + +if (_item isEqualTo "" || _value isEqualTo -1 || _cWeight isEqualTo -1 || _mWeight isEqualTo -1) exitWith {}; +_weight = ([_item] call life_fnc_itemWeight) * _value; +_sum = _value; + +if ((_cweight + _weight) > _mWeight) then { + for "_i" from 0 to 1 step 0 do { + _sum = _sum - 1; + if (_sum < 1) exitWith {}; + _weight = ([_item] call life_fnc_itemweight) * _sum; + if ((_cWeight + _weight) <= _mWeight) exitWith {}; + }; +}; + +_sum; diff --git a/life_client/core/functions/fn_clearVehicleAmmo.sqf b/life_client/core/functions/fn_clearVehicleAmmo.sqf new file mode 100644 index 00000000..5af5c35b --- /dev/null +++ b/life_client/core/functions/fn_clearVehicleAmmo.sqf @@ -0,0 +1,40 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_clearVehicleAmmo.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Clears the vehicle of ammo types that we don't want. + + Syntax: _vehicle removeMagazinesTurret [magazineName, turretPath] + Documentation: https://community.bistudio.com/wiki/removeMagazinesTurret +*/ +private["_vehicle","_veh"]; +_vehicle = param [0,objNull,[objNull]]; +if (isNull _vehicle) exitWith {}; +_veh = typeOf _vehicle; + +if (_veh isEqualTo "B_Boat_Armed_01_minigun_F") then { + _vehicle removeMagazinesTurret ["200Rnd_40mm_G_belt",[0]]; +}; + +if (_veh isEqualTo "B_APC_Wheeled_01_cannon_F") then { + _vehicle removeMagazinesTurret ["60Rnd_40mm_GPR_Tracer_Red_shells",[0]]; + _vehicle removeMagazinesTurret ["40Rnd_40mm_APFSDS_Tracer_Red_shells",[0]]; +}; + +if (_veh isEqualTo "O_Heli_Attack_02_black_F") then { + _vehicle removeMagazinesTurret ["250Rnd_30mm_APDS_shells",[0]]; + _vehicle removeMagazinesTurret ["8Rnd_LG_scalpel",[0]]; + _vehicle removeMagazinesTurret ["38Rnd_80mm_rockets",[0]]; +}; + +if (_veh isEqualTo "B_Heli_Transport_01_F") then { + _vehicle removeMagazinesTurret ["2000Rnd_65x39_Belt_Tracer_Red",[1]]; + _vehicle removeMagazinesTurret ["2000Rnd_65x39_Belt_Tracer_Red",[2]]; +}; + +clearWeaponCargoGlobal _vehicle; +clearMagazineCargoGlobal _vehicle; +clearItemCargoGlobal _vehicle; +clearBackpackCargoGlobal _vehicle; diff --git a/life_client/core/functions/fn_dropItems.sqf b/life_client/core/functions/fn_dropItems.sqf new file mode 100644 index 00000000..8cc370dc --- /dev/null +++ b/life_client/core/functions/fn_dropItems.sqf @@ -0,0 +1,115 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_dropItems.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Called on death, player drops any 'virtual' items they may be carrying. +*/ +private["_obj","_unit","_item","_value"]; +_unit = _this select 0; + +{ + if (_x isEqualType "") then {_item = _x;} else {_item = configName _x}; + _value = ITEM_VALUE(_item); + _itemName = ITEM_VARNAME(_item); + + switch (_item) do { + case "waterBottle": { + if (_value > 0) then { + _pos = _unit modelToWorld[0,3,0]; + _pos = [(_pos select 0),(_pos select 1),0]; + _obj = "Land_BottlePlastic_V1_F" createVehicle _pos; + //_obj setVariable ["water",_value,true]; + [_obj] remoteExecCall ["life_fnc_simDisable",RANY]; + _obj setPos _pos; + _obj setVariable ["item",[_item,_value],true]; + missionNamespace setVariable [_itemName,0]; + }; + }; + + case "tbacon": { + if (_value > 0) then { + _pos = _unit modelToWorld[0,3,0]; + _pos = [(_pos select 0),(_pos select 1),0]; + _obj = "Land_TacticalBacon_F" createVehicle _pos; + [_obj] remoteExecCall ["life_fnc_simDisable",RANY]; + _obj setPos _pos; + _obj setVariable ["item",[_item,_value],true]; + missionNamespace setVariable [_itemName,0]; + }; + }; + + case "redgull": { + if (_value > 0) then { + _pos = _unit modelToWorld[0,3,0]; + _pos = [(_pos select 0),(_pos select 1),0]; + _obj = "Land_Can_V3_F" createVehicle _pos; + [_obj] remoteExecCall ["life_fnc_simDisable",RANY]; + _obj setPos _pos; + _obj setVariable ["item",[_item,_value],true]; + missionNamespace setVariable [_itemName,0]; + }; + }; + + case "fuelEmpty": { + if (_value > 0) then { + _pos = _unit modelToWorld[0,3,0]; + _pos = [(_pos select 0),(_pos select 1),0]; + _obj = "Land_CanisterFuel_F" createVehicle _pos; + [_obj] remoteExecCall ["life_fnc_simDisable",RANY]; + _obj setPos _pos; + _obj setVariable ["item",[_item,_value],true]; + missionNamespace setVariable [_itemName,0]; + }; + }; + + case "fuelFull": { + if (_value > 0) then { + _pos = _unit modelToWorld[0,3,0]; + _pos = [(_pos select 0),(_pos select 1),0]; + _obj = "Land_CanisterFuel_F" createVehicle _pos; + [_obj] remoteExecCall ["life_fnc_simDisable",RANY]; + _obj setPos _pos; + _obj setVariable ["item",[_item,_value],true]; + missionNamespace setVariable [_itemName,0]; + }; + }; + + case "coffee": { + if (_value > 0) then { + _pos = _unit modelToWorld[0,3,0]; + _pos = [(_pos select 0),(_pos select 1),0]; + _obj = "Land_Can_V3_F" createVehicle _pos; + [_obj] remoteExecCall ["life_fnc_simDisable",RANY]; + _obj setPos _pos; + _obj setVariable ["item",[_item,_value],true]; + missionNamespace setVariable [_itemName,0]; + }; + }; + + case "life_cash": { + if (CASH > 0) then { + _pos = _unit modelToWorld[0,3,0]; + _pos = [(_pos select 0),(_pos select 1),0]; + _obj = "Land_Money_F" createVehicle _pos; + _obj setVariable ["item",["money",missionNamespace getVariable [_item,0]],true]; + _obj setPos _pos; + [_obj] remoteExecCall ["life_fnc_simDisable",RANY]; + missionNamespace setVariable ["CASH",0]; + }; + }; + + default { + if (_value > 0) then { + _pos = _unit modelToWorld[0,3,0]; + _pos = [(_pos select 0),(_pos select 1),0]; + _obj = "Land_Suitcase_F" createVehicle _pos; + [_obj] remoteExecCall ["life_fnc_simDisable",RANY]; + _obj setPos _pos; + _obj setVariable ["item",[_item,_value],true]; + missionNamespace setVariable [_itemName,0]; + }; + }; + }; +} forEach (("true" configClasses (missionConfigFile >> "VirtualItems")) + ["life_cash"]); diff --git a/life_client/core/functions/fn_escInterupt.sqf b/life_client/core/functions/fn_escInterupt.sqf new file mode 100644 index 00000000..9c1076ac --- /dev/null +++ b/life_client/core/functions/fn_escInterupt.sqf @@ -0,0 +1,65 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_escInterupt.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Monitors when the ESC menu is pulled up and blocks off + certain controls when conditions meet. +*/ +private["_abortButton","_respawnButton","_fieldManual","_escSync","_canUseControls"]; +disableSerialization; + +_escSync = { + private["_abortButton","_thread","_syncManager"]; + disableSerialization; + + _syncManager = { + disableSerialization; + private["_abortButton","_timeStamp"]; + _abortButton = CONTROL(49,104); + _timeStamp = time + 10; + + waitUntil { + _abortButton ctrlSetText format[localize "STR_NOTF_AbortESC",[(_timeStamp - time),"SS.MS"] call BIS_fnc_secondsToString]; + _abortButton ctrlCommit 0; + round(_timeStamp - time) <= 0 || isNull (findDisplay 49) + }; + + _abortButton ctrlSetText localize "STR_DISP_INT_ABORT"; + _abortButton ctrlCommit 0; + }; + + _abortButton = CONTROL(49,104); + + if (_this) then { + _thread = [] spawn _syncManager; + waitUntil{scriptDone _thread || isNull (findDisplay 49)}; + _abortButton ctrlEnable true; + }; +}; + +_canUseControls = { + if (playerSide isEqualTo west) exitWith {true}; + if ((player getVariable ["restrained",false]) || (player getVariable ["Escorting",false]) || (player getVariable ["transporting",false]) || (life_is_arrested) || (life_istazed) || (life_isknocked)) then {false} else {true}; +}; + +for "_i" from 0 to 1 step 0 do { + waitUntil{!isNull (findDisplay 49)}; + _abortButton = CONTROL(49,104); + _abortButton buttonSetAction "[] call SOCK_fnc_updateRequest; [player] remoteExec [""TON_fnc_cleanupRequest"",2];"; + _respawnButton = CONTROL(49,1010); + _fieldManual = CONTROL(49,122); + + //Block off our buttons first. + _abortButton ctrlEnable false; + _respawnButton ctrlEnable false; + _fieldManual ctrlEnable false; //Never re-enable, blocks an old script executor. + + _usebleCtrl = call _canUseControls; + _usebleCtrl spawn _escSync; + if (_usebleCtrl) then { + _respawnButton ctrlEnable true; //Enable the button. + }; + waitUntil{isNull (findDisplay 49)}; +}; diff --git a/life_client/core/functions/fn_fetchCfgDetails.sqf b/life_client/core/functions/fn_fetchCfgDetails.sqf new file mode 100644 index 00000000..4c1182bd --- /dev/null +++ b/life_client/core/functions/fn_fetchCfgDetails.sqf @@ -0,0 +1,123 @@ +#include "..\..\script_macros.hpp" +/* + @version: 1.7 + @file_name: fn_fetchCfgDetails.sqf + @file_author: TAW_Tonic + @file_edit: 8/2/2013 + @file_description: Fetch information about the entities config + + USAGE: + [Classname,Cfg* (Optional)] call VAS_fnc_fetchCfgDetails; + + Return: + 0: classname + 1: displayname + 2: picture + 3: scope + 4: type + 5: itemInfo Type (if any, -1 means none) + 6: Cfg Location i.e CfgWeapons + 7: Magazines + 8: Muzzles + 9: Short Description + 10: acc_Pointers + 11: acc_Optics + 12: acc_Muzzles + 13: Base (Superclass) + 14: New compatibleItems Structure +*/ +private["_className","_section","_type","_accPointer","_accMuzzle","_accOptic","_classes","_itemInfo","_magazines","_scope","_config","_displayName"]; +params [ + ["_className","",[""]], + ["_section","",[""]] +]; +if (_className isEqualTo "") exitWith {[]}; + +_type = -1; +_accPointer = []; +_accOptic = []; +_accMuzzle = []; +_classes = []; +_scope = 0; +_itemInfo = -1; +_muzzles = []; +_magazines = []; +_return = []; + +if (_section isEqualTo "") then { + _section = switch (true) do { + case (isClass(configFile >> "CfgMagazines" >> _className)): {"CfgMagazines"}; + case (isClass(configFile >> "CfgWeapons" >> _className)): {"CfgWeapons"}; + case (isClass(configFile >> "CfgVehicles" >> _className)): {"CfgVehicles"}; + case (isClass(configFile >> "CfgGlasses" >> _className)): {"CfgGlasses"}; + }; +}; + +if (!(_section isEqualType "") || {!isClass(configFile >> _section >> _className)} || {_section isEqualTo ""}) exitWith {[]}; +_config = configFile >> _section >> _className; +_displayName = getText(_config >> "displayName"); +_picture = getText(_config >> "picture"); +_desc = getText(_config >> "descriptionshort"); +_base = inheritsFrom _config; + +switch (_section) do +{ + case "CfgVehicles": { + _type = getText(_config >> "vehicleClass"); + _scope = getNumber(_config >> "scope"); + }; + + case "CfgWeapons": { + _scope = getNumber(_config >> "scope"); + _type = getNumber(_config >> "type"); + _desc = getText(_config >> "descriptionshort"); + + //Compatible attachments + if (isClass (_config >> "WeaponSlotsInfo")) then + { + _accPointer = getArray(_config >> "WeaponSlotsInfo" >> "PointerSlot" >> "compatibleItems"); + _accOptic = getArray(_config >> "WeaponSlotsInfo" >> "CowsSlot" >> "compatibleItems"); + _accMuzzle = getArray(_config >> "WeaponSlotsInfo" >> "MuzzleSlot" >> "compatibleItems"); + + { private "_thiscfgitem"; + for "_i" from 0 to (count(_x) - 1) do { + _thiscfgitem = _x select _i; + if (isClass _thiscfgitem) then { + if !((configName _thiscfgitem) in _classes) then { + _classes pushBack configName _thiscfgitem; + }; + }; + }; + } forEach ([_config>>"WeaponSlotsInfo"] call bis_fnc_returnParents); + }; + + if (isClass (_config >> "ItemInfo")) then { + _itemInfo = getNumber(_config >> "ItemInfo" >> "Type"); + }; + + _muzzles = getArray(_config >> "muzzles"); + _magazines = getArray(_config >> "magazines"); + if (!isNil "_muzzles") then { + private["_tmp"]; + { + if (_x != "this") then { + _tmp = getArray(_base >> _x >> "magazines"); { + _magazines pushBack _x; + } forEach (_tmp); + }; + } forEach _muzzles; + }; + }; + + case "CfgMagazines": { + _scope = getNumber(_config >> "scope"); + }; +}; + +if (!isNil "_classes") then { + _classes = _classes - ["MuzzleSlot"]; + _classes = _classes - ["CowsSlot"]; + _classes = _classes - ["PointerSlot"]; +}; +_return = [_className,_displayName,_picture,_scope,_type,_itemInfo,_section,_magazines,_muzzles,_desc,_accPointer,_accOptic,_accMuzzle,_base,_classes]; +_return; diff --git a/life_client/core/functions/fn_fetchDeadGear.sqf b/life_client/core/functions/fn_fetchDeadGear.sqf new file mode 100644 index 00000000..6bc3b278 --- /dev/null +++ b/life_client/core/functions/fn_fetchDeadGear.sqf @@ -0,0 +1,57 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_fetchDeadGear.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Fetches gear off of a body. +*/ +private["_primary,_launcher","_handgun","_magazines","_uniform","_vest","_backpack","_items","_primitems","_secitems","_handgunitems","_uitems","_vitems","_bitems","_headgear","_goggles","_unit"]; +_unit = param [0,objNull,[objNull]]; +if (isNull _unit) exitWith {}; +_primitems = []; +_secitems = []; +_handgunitems = []; +_primary = primaryWeapon _unit; +_launcher = secondaryWeapon _unit; +_handgun = handGunWeapon _unit; +_magazines = []; +_uniform = uniform _unit; +_vest = vest _unit; +_backpack = backpack _unit; +_items = assignedItems _unit; +if (!(primaryWeapon _unit isEqualTo "")) then {_primitems = primaryWeaponItems _unit;}; +if (!(handgunWeapon _unit isEqualTo "")) then {_handgunItems = handgunItems _unit;}; +_headgear = headgear _unit; +_goggles = goggles _unit; +_uitems = []; +_vitems = []; +_bitems = []; +if (_uniform != "") then {{_uitems pushBack _x;} forEach (uniformItems _unit);}; +if (_vest != "") then {{_vitems pushBack _x;} forEach (vestItems _unit);}; +if (_backpack != "") then {{_bitems pushBack _x;} forEach (backPackItems _unit);}; + +if (!(primaryWeapon _unit isEqualTo "")) then { + _unit selectWeapon (primaryWeapon _unit); + if (!(currentMagazine _unit isEqualTo "")) then { + _magazines pushBack currentMagazine _unit; + }; +}; + +if (!(secondaryWeapon _unit isEqualTo "")) then { + _unit selectWeapon (secondaryWeapon _unit); + if (!(currentMagazine _unit isEqualTo "")) then { + _magazines pushBack currentMagazine _unit; + }; +}; + +if (!(handgunWeapon _unit isEqualTo "")) then { + _unit selectWeapon (handgunWeapon _unit); + if (!(currentMagazine _unit isEqualTo "")) then { + _magazines pushBack currentMagazine _unit; + }; +}; +_unit selectWeapon (primaryWeapon _unit); + +if (isNil "_handgunItems") then {_handgunItems = ["","",""];}; +[_primary,_launcher,_handgun,_magazines,_uniform,_vest,_backpack,_items,_primitems,_secitems,_handgunitems,_uitems,_vitems,_bitems,_headgear,_goggles]; diff --git a/life_client/core/functions/fn_fetchVehInfo.sqf b/life_client/core/functions/fn_fetchVehInfo.sqf new file mode 100644 index 00000000..fce3426e --- /dev/null +++ b/life_client/core/functions/fn_fetchVehInfo.sqf @@ -0,0 +1,57 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_fetchVehInfo.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Used in returning information about a vehicle from Config >> "CfgVehicles" + + Return: + 0: classname + 1: scope + 2: picture + 3: displayname + 4: vehicleclass + 5: side + 6: faction + 7: Base / Superclass + 8: Max Speed + 9: Armor Rating + 10: Passenger Seats + 11: Max Horse power + 12: Fuel Capacity +*/ +private["_class","_scope","_picture","_displayName","_vehicleClass","_side","_faction","_superClass","_speed","_armor","_seats","_hp","_fuel"]; +_class = param [0,"",[""]]; +if (_class isEqualTo "") exitWith {[]}; //Bad class passed. +if (!isClass (configFile >> "CfgVehicles" >> _class)) exitWith {[]}; //Class doesn't exist in CfgVehicles + +//Predefine some stuff. +_scope = -1; +_picture = ""; +_displayName = ""; +_vehicleClass = ""; +_side = -1; +_faction = ""; +_speed = 0; +_armor = 0; +_seats = 0; +_hp = 0; +_fuel = 0; + +//Fetch +_scope = FETCH_CONFIG2(getNumber,"CfgVehicles",_class,"scope"); +_picture = FETCH_CONFIG2(getText,"CfgVehicles",_class,"picture"); +_displayName = FETCH_CONFIG2(getText,"CfgVehicles",_class,"displayName"); +_vehicleClass = FETCH_CONFIG2(getText,"CfgVehicles",_class,"vehicleClass"); +_side = FETCH_CONFIG2(getNumber,"CfgVehicles",_class,"side"); +_faction = FETCH_CONFIG2(getText,"CfgVehicles",_class,"faction"); +_superClass = BASE_CONFIG("CfgVehicles",_class); +_speed = FETCH_CONFIG2(getNumber,"CfgVehicles",_class,"maxSpeed"); +_armor = FETCH_CONFIG2(getNumber,"CfgVehicles",_class,"armor"); +_seats = FETCH_CONFIG2(getNumber,"CfgVehicles",_class,"transportSoldier"); +_hp = FETCH_CONFIG2(getNumber,"CfgVehicles",_class,"enginePower"); +_fuel = FETCH_CONFIG2(getNumber,"CfgVehicles",_class,"fuelCapacity"); + +//Return +[_class,_scope,_picture,_displayName,_vehicleClass,_side,_faction,_superClass,_speed,_armor,_seats,_hp,_fuel]; diff --git a/life_client/core/functions/fn_giveDiff.sqf b/life_client/core/functions/fn_giveDiff.sqf new file mode 100644 index 00000000..ff8c6ff3 --- /dev/null +++ b/life_client/core/functions/fn_giveDiff.sqf @@ -0,0 +1,26 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_giveDiff.sqf + Author: Bryan "Tonic" Boardwine + + Description: + ??A?SD?ADS?A +*/ +private["_unit","_item","_val","_from","_bool"]; +_unit = _this select 0; +if (_unit != player) exitWith {}; +_item = _this select 1; +_val = _this select 2; +_from = _this select 3; +_bool = if (count _this > 4) then {true} else {false}; +_type = M_CONFIG(getText,"VirtualItems",_item,"displayName"); + +if (_bool) then { + if ([true,_item,(parseNumber _val)] call life_fnc_handleInv) then { + hint format[localize "STR_MISC_TooMuch",_from getVariable ["realname",name _from],_val,(localize _type)]; + }; +} else { + if ([true,_item,(parseNumber _val)] call life_fnc_handleInv) then { + hint format[localize "STR_MISC_TooMuch_2",_from getVariable ["realname",name _from],_val,(localize _type)]; + }; +}; \ No newline at end of file diff --git a/life_client/core/functions/fn_handleDamage.sqf b/life_client/core/functions/fn_handleDamage.sqf new file mode 100644 index 00000000..4462f930 --- /dev/null +++ b/life_client/core/functions/fn_handleDamage.sqf @@ -0,0 +1,50 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_handleDamage.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Handles damage, specifically for handling the 'tazer' pistol and nothing else. +*/ +params [ + ["_unit",objNull,[objNull]], + ["_part","",[""]], + ["_damage",0,[0]], + ["_source",objNull,[objNull]], + ["_projectile","",[""]], + ["_index",0,[0]] +]; + +//Handle the tazer first (Top-Priority). +if (!isNull _source) then { + if (_source != _unit) then { + if (currentWeapon _source in ["hgun_P07_snds_F","arifle_SDAR_F"] && _projectile in ["B_9x21_Ball","B_556x45_dual"]) then { + if (side _source isEqualTo west && playerSide isEqualTo civilian) then { + _damage = 0; + if (alive player && !life_istazed && !life_isknocked && !(_unit getVariable ["restrained",false])) then { + private["_distance"]; + _distance = 35; + if (_projectile == "B_556x45_dual") then {_distance = 100;}; + if (_unit distance _source < _distance) then { + if (vehicle player != player) then { + if (typeOf (vehicle player) == "B_Quadbike_01_F") then { + player action ["Eject",vehicle player]; + [_unit,_source] spawn life_fnc_tazed; + }; + } else { + [_unit,_source] spawn life_fnc_tazed; + }; + }; + }; + }; + + //Temp fix for super tasers on cops. + if (side _source isEqualTo west && (playerSide isEqualTo west || playerSide isEqualTo independent)) then { + _damage = 0; + }; + }; + }; +}; + +[] spawn life_fnc_hudUpdate; +_damage; \ No newline at end of file diff --git a/life_client/core/functions/fn_handleInv.sqf b/life_client/core/functions/fn_handleInv.sqf new file mode 100644 index 00000000..4d95b2b2 --- /dev/null +++ b/life_client/core/functions/fn_handleInv.sqf @@ -0,0 +1,51 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_handleInv.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Do I really need one? +*/ +private["_math","_item","_num","_return","_var","_weight","_value","_diff"]; +params [ + ["_math",false,[false]], + ["_item","",[""]], + ["_num",0,[0]] +]; +if (_item isEqualTo "" || _num isEqualTo 0) exitWith {false}; + +_var = ITEM_VARNAME(_item); + +if (_math) then { + _diff = [_item,_num,life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff; + _num = _diff; + if (_num <= 0) exitWith {false}; +}; +_weight = ([_item] call life_fnc_itemWeight) * _num; +_value = ITEM_VALUE(_item); + +if (_math) then { + //Lets add! + if ((life_carryWeight + _weight) <= life_maxWeight) then { + missionNamespace setVariable [_var,(_value + _num)]; + + if ((missionNamespace getVariable _var) > _value) then { + life_carryWeight = life_carryWeight + _weight; + _return = true; + } else { + _return = false; + }; + } else {_return = false;}; +} else { + //Lets SUB! + if ((_value - _num) < 0) then { _return = false;} else { + missionNamespace setVariable [_var,(_value - _num)]; + + if ((missionNamespace getVariable _var) < _value) then { + life_carryWeight = life_carryWeight - _weight; + _return = true; + } else {_return = false;}; + }; +}; + +_return; diff --git a/life_client/core/functions/fn_handleItem.sqf b/life_client/core/functions/fn_handleItem.sqf new file mode 100644 index 00000000..d0878b09 --- /dev/null +++ b/life_client/core/functions/fn_handleItem.sqf @@ -0,0 +1,498 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_handleItem.sqf + Author: Bryan "Tonic" Boardwine + + Description + Main gear handling functionality. +*/ +private["_item","_details","_bool","_ispack","_items","_isgun","_ongun","_override","_toUniform","_toVest","_preview"]; +params [ + ["_item","",[""]], + ["_bool",false,[false]], + ["_ispack",false,[false]], + ["_ongun",false,[false]], + ["_override",false,[false]], + ["_toUniform",false,[false]], + ["_toVest",false,[false]], + ["_preview",false,[false]] +]; + +//Some checks +if (_item isEqualTo "") exitWith {}; +_isgun = false; + +_details = [_item] call life_fnc_fetchCfgDetails; +if (count _details isEqualTo 0) exitWith {}; + +if (_bool) then { + switch (_details select 6) do { + case "CfgGlasses": { + if (_toUniform) exitWith {player addItemToUniform _item;}; + if (_toVest) exitWith {player addItemToVest _item;}; + + if (_ispack) then { + player addItemToBackpack _item; + } else { + if (_override) then { + player addItem _item; + } else { + if (!(goggles player isEqualTo "")) then { + removeGoggles player; + }; + player addGoggles _item; + }; + }; + }; + + case "CfgVehicles": { + if (!(backpack player isEqualTo "")) then { + _items = (backpackItems player); + removeBackpack player; + }; + + player addBackpack _item; + clearAllItemsFromBackpack player; + + if (!isNil "_items") then { + {[_x,true,true,false,true] call life_fnc_handleItem; } forEach _items; + }; + }; + + case "CfgMagazines": { + if (_toUniform) exitWith {player addItemToUniform _item;}; + if (_toVest) exitWith {player addItemToVest _item;}; + if (_ispack) exitWith {player addItemToBackpack _item;}; + + player addMagazine _item; + }; + + case "CfgWeapons": { + //New addition + if (_toUniform) exitWith {player addItemToUniform _item;}; + if (_toVest) exitWith {player addItemToVest _item;}; + if (_ispack) exitWith {player addItemToBackpack _item;}; + + if ((_details select 4) in [1,2,4,5,4096]) then { + if ((_details select 4) isEqualTo 4096) then { + if ((_details select 5) isEqualTo -1) then { + _isgun = true; + }; + } else { + _isgun = true; + }; + }; + + if (_isgun) then { + if (!_ispack && _override) exitWith {}; //It was in the vest/uniform, try to close to prevent it overriding stuff... (Actual weapon and not an item) + if (_item isEqualTo "MineDetector") then { + player addItem _item; + } else { + player addWeapon _item; + }; + } else { + switch (_details select 5) do { + case 0: { + if (_ispack) then { + player addItemToBackpack _item; + } else { + if (_override) then { + player addItem _item; + } else { + if (_item in (assignedItems player)) then { + player addItem _item; + } else { + player addItem _item; + player assignItem _item; + }; + }; + }; + }; + + case 605: { + if (_ispack) then{ + player addItemToBackpack _item; + } else { + if (_override) then { + player addItem _item; + } else { + if (headgear player isEqualTo _item && {!_preview}) then { + player addItem _item; + } else { + if (!(headgear player isEqualTo "")) then {removeHeadGear player;}; + player addHeadGear _item; + }; + }; + }; + }; + + case 801: { + if (_ispack) then { + player addItemToBackpack _item; + } else { + if (_override) then { + player addItem _item; + } else { + if (player isKindOf "Civilian") then { + if (uniform player isEqualTo _item && {!_preview}) then { + player addItem _item; + } else { + if (!(uniform player isEqualTo "")) then { + _items = uniformItems player; + removeUniform player; + }; + + player addUniform _item; + if (!isNil "_items") then { + {player addItemToUniform _x} forEach _items; + }; + }; + } else { + if (!(uniform player isEqualTo "")) then { + _items = uniformItems player; + removeUniform player; + }; + + if (!(player isUniformAllowed _item)) then { + player forceAddUniform _item; + } else { + player addUniform _item; + }; + if (!isNil "_items") then { + {player addItemToUniform _x} forEach _items; + }; + }; + }; + }; + }; + + case 701: { + if (_ispack) then { + player addItemToBackpack _item; + } else { + if (_override) then{ + player addItem _item; + } else { + if (vest player isEqualTo _item && {!_preview}) then { + player addItem _item; + } else { + if (!(vest player isEqualTo "")) then { + _items = vestItems player; + removeVest player; + }; + + player addVest _item; + + if (!isNil "_items") then { + {[_x,true,false,false,true] spawn life_fnc_handleItem;} forEach _items; + }; + }; + }; + }; + }; + + case 201: { + if (_ispack) then { + player addItemToBackpack _item; + } else { + private "_type"; + _type = [_item,201] call life_fnc_accType; + if (_ongun) then { + switch (_type) do { + case 1: { player addPrimaryWeaponItem _item; }; + case 2: { player addSecondaryWeaponItem _item; }; + case 3: { player addHandgunItem _item; }; + }; + } else { + if (_override) then { + player addItem _item; + } else { + private["_wepItems","_action","_slotTaken"]; + _wepItems = switch (_type) do {case 1:{primaryWeaponItems player}; case 2:{secondaryWeaponItems player}; case 3:{handgunItems player}; default {["","",""]};}; + _slotTaken = false; + + if (!((_wepItems select 2) isEqualTo "")) then {_slotTaken = true;}; + + if (_slotTaken) then { + _action = [localize "STR_MISC_AttachmentMSG",localize "STR_MISC_Attachment",localize "STR_MISC_Weapon",localize "STR_MISC_Inventory"] call BIS_fnc_guiMessage; + if (_action) then { + switch (_type) do { + case 1: {player addPrimaryWeaponItem _item;}; + case 2: {player addSecondaryWeaponItem _item;}; + case 3: {player addHandgunItem _item;}; + default {player addItem _item;}; + }; + } else { + player addItem _item; //Add it to any available container + }; + } else { + switch (_type) do { + case 1: {player addPrimaryWeaponItem _item;}; + case 2: {player addSecondaryWeaponItem _item;}; + case 3: {player addHandgunItem _item;}; + default {player addItem _item;}; + }; + }; + }; + }; + }; + }; + + case 301: { + if (_ispack) then { + player addItemToBackpack _item; + } else { + private "_type"; + _type = [_item,301] call life_fnc_accType; + + if (_ongun) then { + switch (_type) do { + case 1: { player addPrimaryWeaponItem _item; }; + case 2: { player addSecondaryWeaponItem _item; }; + case 3: { player addHandgunItem _item; }; + }; + } else { + if (_override) then { + player addItem _item; + } else { + private["_wepItems","_action","_slotTaken"]; + _wepItems = switch (_type) do {case 1:{primaryWeaponItems player}; case 2:{secondaryWeaponItems player}; case 3:{handgunItems player}; default {["","",""]};}; + _slotTaken = false; + + if (!((_wepItems select 1) isEqualTo "")) then {_slotTaken = true;}; + + if (_slotTaken) then { + _action = [localize "STR_MISC_AttachmentMSG",localize "STR_MISC_Attachment",localize "STR_MISC_Weapon",localize "STR_MISC_Inventory"] call BIS_fnc_guiMessage; + if (_action) then { + switch (_type) do { + case 1: {player addPrimaryWeaponItem _item;}; + case 2: {player addSecondaryWeaponItem _item;}; + case 3: {player addHandgunItem _item;}; + default {player addItem _item;}; + }; + } else { + player addItem _item; //Add it to any available container + }; + } else { + switch (_type) do { + case 1: {player addPrimaryWeaponItem _item;}; + case 2: {player addSecondaryWeaponItem _item;}; + case 3: {player addHandgunItem _item;}; + default {player addItem _item;}; + }; + }; + }; + }; + }; + }; + + case 101:{ + if (_ispack) then { + player addItemToBackpack _item; + } else { + private "_type"; + _type = [_item,101] call life_fnc_accType; + + if (_ongun) then { + switch (_type) do { + case 1: { player addPrimaryWeaponItem _item; }; + case 2: { player addSecondaryWeaponItem _item; }; + case 3: { player addHandgunItem _item; }; + }; + } else { + if (_override) then { + player addItem _item; + } else { + private["_wepItems","_action","_slotTaken"]; + _wepItems = switch (_type) do {case 1:{primaryWeaponItems player}; case 2:{secondaryWeaponItems player}; case 3:{handgunItems player}; default {["","",""]};}; + _slotTaken = false; + + if (!((_wepItems select 0) isEqualTo "")) then {_slotTaken = true;}; + + if (_slotTaken) then { + _action = [localize "STR_MISC_AttachmentMSG",localize "STR_MISC_Attachment",localize "STR_MISC_Weapon",localize "STR_MISC_Inventory"] call BIS_fnc_guiMessage; + if (_action) then { + switch (_type) do { + case 1: {player addPrimaryWeaponItem _item;}; + case 2: {player addSecondaryWeaponItem _item;}; + case 3: {player addHandgunItem _item;}; + default {player addItem _item;}; + }; + } else { + player addItem _item; //Add it to any available container + }; + } else { + switch (_type) do { + case 1: {player addPrimaryWeaponItem _item;}; + case 2: {player addSecondaryWeaponItem _item;}; + case 3: {player addHandgunItem _item;}; + default {player addItem _item;}; + }; + }; + }; + }; + }; + }; + + case 621: { + if (_ispack) then { + player addItemToBackpack _item; + } else { + if (_override) then { + player addItem _item; + } else { + player addItem _item; + player assignItem _item; + }; + }; + }; + + case 616: { + if (_ispack) then { + player addItemToBackpack _item; + } else { + if (_override) then { + player addItem _item; + } else { + player addItem _item; + player assignItem _item; + }; + }; + }; + + default { + if (_ispack) then { + player addItemToBackpack _item; + } else { + player addItem _item; + }; + }; + }; + }; + }; + }; +} else { + switch (_details select 6) do { + case "CfgVehicles": { + removeBackpack player; + }; + + case "CfgMagazines": { + player removeMagazine _item; + }; + + case "CfgGlasses": { + if (_item isEqualTo goggles player) then { + removeGoggles player; + } else { + player removeItem _item; + }; + }; + + case "CfgWeapons": { + if ((_details select 4) in [1,2,4,5,4096]) then { + if ((_details select 4) isEqualTo 4096) then { + if ((_details select 5) isEqualTo 1) then { + _isgun = true; + }; + } else { + _isgun = true; + }; + }; + + if (_isgun) then { + switch (true) do { + case (primaryWeapon player isEqualTo _item) : {_ispack = false;}; + case (secondaryWeapon player isEqualTo _item) : {_ispack = false;}; + case (handgunWeapon player isEqualTo _item) : {_ispack = false;}; + case (_item in assignedItems player) : {_ispack = false;}; + default {_ispack = true;}; + }; + + if (_item isEqualTo "MineDetector") then { + player removeItem _item; + } else { + + //Lovely code provided by [OCB]Dash + private "_tmpfunction"; + _tmpfunction = { + private["_tWeapons","_tWeaponCount"]; + switch (true) do { + case (_this in (uniformItems player)): { + _tWeapons = (getWeaponCargo (uniformContainer player)) select 0; + _tWeaponCount = (getWeaponCargo (uniformContainer player)) select 1; + + clearWeaponCargo (uniformContainer player); + { + _numVestWeps = _tWeaponCount select _forEachIndex; + if (_x == _this) then + { + _numVestWeps = _numVestWeps - 1; + }; + (uniformContainer player) addWeaponCargo [ _x,_numVestWeps]; + }forEach _tWeapons; + }; + + case (_this in (vestItems player)): { + _tWeapons = (getWeaponCargo (vestContainer player)) select 0; + _tWeaponCount = (getWeaponCargo (vestContainer player)) select 1; + + clearWeaponCargo (vestContainer player); + { + _numVestWeps = _tWeaponCount select _forEachIndex; + if (_x == _this) then + { + _numVestWeps = _numVestWeps - 1; + }; + (vestContainer player) addWeaponCargo [ _x,_numVestWeps]; + }forEach _tWeapons; + }; + + case (_this in (backpackItems player)): { + _tWeapons = (getWeaponCargo (backpackContainer player)) select 0; + _tWeaponCount = (getWeaponCargo (backpackContainer player)) select 1; + + clearWeaponCargo (backpackContainer player); + { + _numVestWeps = _tWeaponCount select _forEachIndex; + if (_x == _this) then + { + _numVestWeps = _numVestWeps - 1; + }; + (backpackContainer player) addWeaponCargo [ _x,_numVestWeps]; + }forEach _tWeapons; + }; + }; + }; + + if (_ispack) then { + _item call _tmpfunction; + } else { + switch (true) do { + case (_item in (uniformItems player)): {_item call _tmpfunction;}; + case (_item in (vestItems player)) : {_item call _tmpfunction;}; + case (_item in (backpackItems player)) : {_item call _tmpfunction;}; + default {player removeWeapon _item;}; + }; + }; + }; + } else { + switch (_details select 5) do { + case 0: {player unassignItem _item; player removeItem _item;}; + case 605: {if (headgear player isEqualTo _item) then {removeHeadgear player} else {player removeItem _item};}; + case 801: {if (uniform player isEqualTo _item) then {removeUniform player} else {player removeItem _item};}; + case 701: {if (vest player isEqualTo _item) then {removeVest player} else {player removeItem _item};}; + case 621: {player unassignItem _item; player removeItem _item;}; + case 616: {player unassignItem _item; player removeItem _item;}; + default { + switch (true) do { + case (_item in primaryWeaponItems player) : {player removePrimaryWeaponItem _item;}; + case (_item in handgunItems player) : {player removeHandgunItem _item;}; + default {player removeItem _item;}; + }; + }; + }; + }; + }; + }; +}; diff --git a/life_client/core/functions/fn_hideObj.sqf b/life_client/core/functions/fn_hideObj.sqf new file mode 100644 index 00000000..0bf04d50 --- /dev/null +++ b/life_client/core/functions/fn_hideObj.sqf @@ -0,0 +1,18 @@ +/* + File: fn_hideObj.sqf + + Author: Daniel Stuart and NiiRoZz + + Description: + Hides an object for all the players + + Usage : + _id = The owner of player + [_object] remoteExecCall ["life_fnc_hideObj",-_id]; +*/ +params [ + ["_object",objNull,[objNull]] +]; +if (isNull _object) exitWith {}; + +_object hideObject true; diff --git a/life_client/core/functions/fn_hudSetup.sqf b/life_client/core/functions/fn_hudSetup.sqf new file mode 100644 index 00000000..ab98e831 --- /dev/null +++ b/life_client/core/functions/fn_hudSetup.sqf @@ -0,0 +1,22 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_hudSetup.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Setups the hud for the player? +*/ +disableSerialization; + +cutRsc ["playerHUD", "PLAIN", 2, false]; +[] call life_fnc_hudUpdate; + +[] spawn +{ + private["_dam"]; + for "_i" from 0 to 1 step 0 do { + _dam = damage player; + waitUntil {(damage player) != _dam}; + [] call life_fnc_hudUpdate; + }; +}; diff --git a/life_client/core/functions/fn_hudUpdate.sqf b/life_client/core/functions/fn_hudUpdate.sqf new file mode 100644 index 00000000..1590b254 --- /dev/null +++ b/life_client/core/functions/fn_hudUpdate.sqf @@ -0,0 +1,14 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_hudUpdate.sqf + Author: Daniel Stuart + + Description: + Updates the HUD when it needs to. +*/ +disableSerialization; + +if (isNull LIFEdisplay) then {[] call life_fnc_hudSetup;}; +LIFEctrl(2200) progressSetPosition (life_hunger / 100); +LIFEctrl(2201) progressSetPosition (1 - (damage player)); +LIFEctrl(2202) progressSetPosition (life_thirst / 100); diff --git a/life_client/core/functions/fn_inString.sqf b/life_client/core/functions/fn_inString.sqf new file mode 100644 index 00000000..8de69370 --- /dev/null +++ b/life_client/core/functions/fn_inString.sqf @@ -0,0 +1,29 @@ +/* + File: fn_inString.sqf + Author: Killzone_Kid + + Description: + Find a string within a string (case insensitive) + + Parameter(s): + _this select 0: string to be found + _this select 1: string to search in + + Returns: + BooLean (true when string is found) +*/ +private ["_needle","_haystack","_needleLen","_hay","_found"]; +_needle = param [0,"",[""]]; +_haystack = toArray (param [1,"",[""]]); +_needleLen = count toArray _needle; +_hay = +_haystack; +_hay resize _needleLen; +_found = false; + +for "_i" from _needleLen to count _haystack do { + if (toString _hay == _needle) exitWith {_found = true}; + _hay set [_needleLen, _haystack select _i]; + _hay set [0, "x"]; + _hay = _hay - ["x"] +}; +_found diff --git a/life_client/core/functions/fn_inventoryClosed.sqf b/life_client/core/functions/fn_inventoryClosed.sqf new file mode 100644 index 00000000..3ae23443 --- /dev/null +++ b/life_client/core/functions/fn_inventoryClosed.sqf @@ -0,0 +1,33 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_inventoryClosed.sqf + Author: Bryan "Tonic" Boardwine + Modified : NiiRoZz + + Description: + 1 : Used for syncing house container data but when the inventory menu + is closed a sync request is sent off to the server. + 2 : Used for syncing vehicle inventory when save vehicle gear are activated +*/ +private "_container"; +_container = param [1,objNull,[objNull]]; +if (isNull _container) exitWith {}; //MEH + +if ((typeOf _container) in ["Box_IND_Grenades_F","B_supplyCrate_F"]) exitWith { + if (life_HC_isActive) then { + [_container] remoteExecCall ["HC_fnc_updateHouseContainers",HC_Life]; + } else { + [_container] remoteExecCall ["TON_fnc_updateHouseContainers",RSERV]; + }; +}; + +if (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1) then { + if ((_container isKindOf "Car") || (_container isKindOf "Air") || (_container isKindOf "Ship")) then { + if (life_HC_isActive) then { + [_container,1] remoteExecCall ["HC_fnc_vehicleUpdate",HC_Life]; + } else { + [_container,1] remoteExecCall ["TON_fnc_vehicleUpdate",RSERV]; + }; + }; +}; +[] call SOCK_fnc_updateRequest; \ No newline at end of file diff --git a/life_client/core/functions/fn_inventoryOpened.sqf b/life_client/core/functions/fn_inventoryOpened.sqf new file mode 100644 index 00000000..7afd62ef --- /dev/null +++ b/life_client/core/functions/fn_inventoryOpened.sqf @@ -0,0 +1,40 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_inventoryOpened.sqf + Author: Bryan "Tonic" Boardwine + + Description: + For the mean time it blocks the player from opening another persons backpack +*/ +private["_container","_unit","_list"]; +if (count _this isEqualTo 1) exitWith {false}; +_unit = _this select 0; +_container = _this select 1; + +_isPack = FETCH_CONFIG2(getNumber,"CfgVehicles",typeOf _container,"isBackpack"); +if (_isPack isEqualTo 1) exitWith { + hint localize "STR_MISC_Backpack"; + true; +}; + +if ((typeOf _container) in ["Box_IND_Grenades_F","B_supplyCrate_F"]) exitWith { + _house = nearestObject [player, "House"]; + if (!(_house in life_vehicles) && (_house getVariable ["locked",true])) exitWith { + hint localize "STR_House_ContainerDeny"; + true; + }; +}; + +_list = ["LandVehicle","Ship","Air"]; +if (KINDOF_ARRAY(_container,_list)) exitWith { + if (!(_container in life_vehicles) && (_container getVariable ["locked",true])) exitWith { + hint localize "STR_MISC_VehInventory"; + true; + }; +}; + +//Allow alive players who've been knocked out to be looted, just not the dead ones +if (_container isKindOf "Man" && !alive _container) exitWith { + hint localize "STR_NOTF_NoLootingPerson"; + true; +}; diff --git a/life_client/core/functions/fn_isDamaged.sqf b/life_client/core/functions/fn_isDamaged.sqf new file mode 100644 index 00000000..d60673fe --- /dev/null +++ b/life_client/core/functions/fn_isDamaged.sqf @@ -0,0 +1,17 @@ +/* +* File: fn_isDamaged.sqf +* Author: BoGuu +* +* Description: +* Returns true if the target is damaged, else returns false. +*/ + +private["_damage","_return"]; +params [ + ["_target",objNull,[objNull]] +]; + +_damage = (getAllHitPointsDamage _target select 2) call BIS_fnc_greatestnum; +_return = ([false,true] select (_damage > 0.01)); + +_return; \ No newline at end of file diff --git a/life_client/core/functions/fn_isUIDActive.sqf b/life_client/core/functions/fn_isUIDActive.sqf new file mode 100644 index 00000000..de99e97c --- /dev/null +++ b/life_client/core/functions/fn_isUIDActive.sqf @@ -0,0 +1,20 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_isUIDActive.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Sees if the UID passed to it is in the server. + + Returns: + True if there was a match, false if not in server. +*/ +private["_uid","_ret"]; +_uid = param [0,"",[""]]; +if (_uid isEqualTo "") exitWith {false}; //Bad UID +_ret = false; +{ + if (isPlayer _x && {getPlayerUID _x isEqualTo _uid}) exitWith {_ret = true;}; +} forEach playableUnits; + +_ret; diff --git a/life_client/core/functions/fn_keyHandler.sqf b/life_client/core/functions/fn_keyHandler.sqf new file mode 100644 index 00000000..10339068 --- /dev/null +++ b/life_client/core/functions/fn_keyHandler.sqf @@ -0,0 +1,376 @@ +#include "..\..\script_macros.hpp" +/* +* File: fn_keyHandler.sqf +* Author: Bryan "Tonic" Boardwine +* +* Description: +* Main key handler for event 'keyDown'. +*/ +private ["_handled","_shift","_alt","_code","_ctrl","_alt","_ctrlKey","_veh","_locked","_interactionKey","_mapKey","_interruptionKeys"]; +_ctrl = _this select 0; +_code = _this select 1; +_shift = _this select 2; +_ctrlKey = _this select 3; +_alt = _this select 4; +_speed = speed cursorObject; +_handled = false; + +_interactionKey = if (count (actionKeys "User10") isEqualTo 0) then {219} else {(actionKeys "User10") select 0}; +_mapKey = (actionKeys "ShowMap" select 0); +//hint str _code; +_interruptionKeys = [17,30,31,32]; //A,S,W,D + +//Vault handling... +if ((_code in (actionKeys "GetOver") || _code in (actionKeys "salute") || _code in (actionKeys "SitDown") || _code in (actionKeys "Throw") || _code in (actionKeys "GetIn") || _code in (actionKeys "GetOut") || _code in (actionKeys "Fire") || _code in (actionKeys "ReloadMagazine") || _code in [16,18]) && ((player getVariable ["restrained",false]) || (player getVariable ["playerSurrender",false]) || life_isknocked || life_istazed)) exitWith { + true; +}; + +if (life_action_inUse) exitWith { + if (!life_interrupted && _code in _interruptionKeys) then {life_interrupted = true;}; + _handled; +}; + +//Hotfix for Interaction key not being able to be bound on some operation systems. +if (!(count (actionKeys "User10") isEqualTo 0) && {(inputAction "User10" > 0)}) exitWith { + //Interaction key (default is Left Windows, can be mapped via Controls -> Custom -> User Action 10) + if (!life_action_inUse) then { + [] spawn { + private "_handle"; + _handle = [] spawn life_fnc_actionKeyHandler; + waitUntil {scriptDone _handle}; + life_action_inUse = false; + }; + }; + true; +}; + +if (life_container_active) then { + switch (_code) do { + //space key + case 57: { + [] spawn life_fnc_placestorage; + }; + //ESC key + case 1: { + if (!life_container_active || life_container_activeObj isEqualTo objNull || !((typeOf life_container_activeObj) in ["B_supplyCrate_F","Box_IND_Grenades_F"])) exitWith {}; + detach life_container_activeObj; + deleteVehicle life_container_activeObj; + life_container_active = false; + life_container_activeObj = objNull; + }; + }; + true; +}; + +switch (_code) do { + //Space key for Jumping + case 57: { + if (isNil "jumpActionTime") then {jumpActionTime = 0;}; + if (_shift && {!(animationState player isEqualTo "AovrPercMrunSrasWrflDf")} && {isTouchingGround player} && {stance player isEqualTo "STAND"} && {speed player > 2} && {!life_is_arrested} && {((velocity player) select 2) < 2.5} && {time - jumpActionTime > 1.5}) then { + jumpActionTime = time; //Update the time. + [player] remoteExec ["life_fnc_jumpFnc",RANY]; //Global execution + _handled = true; + }; + }; + + //Surrender (Shift + B) + case 48: { + if (_shift) then { + if (player getVariable ["playerSurrender",false]) then { + player setVariable ["playerSurrender",false,true]; + } else { + [] spawn life_fnc_surrender; + }; + _handled = true; + }; + }; + + //Map Key + case _mapKey: { + switch (playerSide) do { + case west: {if (!visibleMap) then {[] spawn life_fnc_copMarkers;}}; + case independent: {if (!visibleMap) then {[] spawn life_fnc_medicMarkers;}}; + case civilian: {if (!visibleMap) then {[] spawn life_fnc_civMarkers;}}; + }; + }; + + //Holster / recall weapon. (Shift + H) + case 35: { + if (_shift && !_ctrlKey && !(currentWeapon player isEqualTo "")) then { + life_curWep_h = currentWeapon player; + player action ["SwitchWeapon", player, player, 100]; + player switchCamera cameraView; + }; + + if (!_shift && _ctrlKey && !isNil "life_curWep_h" && {!(life_curWep_h isEqualTo "")}) then { + if (life_curWep_h in [primaryWeapon player,secondaryWeapon player,handgunWeapon player]) then { + player selectWeapon life_curWep_h; + }; + }; + }; + + //Interaction key (default is Left Windows, can be mapped via Controls -> Custom -> User Action 10) + case _interactionKey: { + if (!life_action_inUse) then { + [] spawn { + private "_handle"; + _handle = [] spawn life_fnc_actionKeyHandler; + waitUntil {scriptDone _handle}; + life_action_inUse = false; + }; + }; + }; + + //Restraining (Shift + R) + case 19: { + if (_shift) then {_handled = true;}; + if (_shift && playerSide isEqualTo west && {!isNull cursorObject} && {cursorObject isKindOf "Man"} && {(isPlayer cursorObject)} && {(side cursorObject in [civilian,independent])} && {alive cursorObject} && {cursorObject distance player < 3.5} && {!(cursorObject getVariable "Escorting")} && {!(cursorObject getVariable "restrained")} && {speed cursorObject < 1}) then { + [] call life_fnc_restrainAction; + }; + }; + + //Knock out, this is experimental and yeah... (Shift + G) + case 34: { + if (_shift) then {_handled = true;}; + if (_shift && playerSide isEqualTo civilian && !isNull cursorObject && cursorObject isKindOf "Man" && isPlayer cursorObject && alive cursorObject && cursorObject distance player < 4 && speed cursorObject < 1) then { + if ((animationState cursorObject) != "Incapacitated" && (currentWeapon player == primaryWeapon player || currentWeapon player == handgunWeapon player) && currentWeapon player != "" && !life_knockout && !(player getVariable ["restrained",false]) && !life_istazed && !life_isknocked) then { + [cursorObject] spawn life_fnc_knockoutAction; + }; + }; + }; + + //T Key (Trunk) + case 20: { + if (!_alt && !_ctrlKey && !dialog && {!life_action_inUse}) then { + if (vehicle player != player && alive vehicle player) then { + if ((vehicle player) in life_vehicles) then { + [vehicle player] spawn life_fnc_openInventory; + }; + } else { + private "_list"; + _list = ((ASLtoATL (getPosASL player)) nearEntities [["Box_IND_Grenades_F","B_supplyCrate_F"], 2.5]) select 0; + if (!(isNil "_list")) then { + _house = nearestObject [(ASLtoATL (getPosASL _list)), "House"]; + if (_house getVariable ["locked", false]) then { + hint localize "STR_House_ContainerDeny"; + } else { + [_list] spawn life_fnc_openInventory; + }; + } else { + _list = ["landVehicle","Air","Ship"]; + if (KINDOF_ARRAY(cursorObject,_list) && {player distance cursorObject < 7} && {isNull objectParent player} && {alive cursorObject} && {!life_action_inUse}) then { + if (cursorObject in life_vehicles) then { + [cursorObject] spawn life_fnc_openInventory; + }; + }; + }; + }; + }; + }; + + //L Key? + case 38: { + //If cop run checks for turning lights on. + if (_shift && playerSide in [west,independent]) then { + if (vehicle player != player && (typeOf vehicle player) in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F","C_Hatchback_01_sport_F","B_Heli_Light_01_F","B_Heli_Transport_01_F"]) then { + if (!isNil {vehicle player getVariable "lights"}) then { + if (playerSide isEqualTo west) then { + [vehicle player] call life_fnc_sirenLights; + } else { + [vehicle player] call life_fnc_medicSirenLights; + }; + _handled = true; + }; + }; + }; + + if (!_alt && !_ctrlKey) then { [] call life_fnc_radar; }; + }; + + //Y Player Menu + case 21: { + if (!_alt && !_ctrlKey && !dialog && !(player getVariable ["restrained",false]) && {!life_action_inUse}) then { + if (!_shift) then { + [] call life_fnc_p_openMenu; + } else { + [] call life_fnc_altisPhone; + }; + }; + }; + + //F Key + case 33: { + if (playerSide in [west,independent] && {vehicle player != player} && {!life_siren_active} && {((driver vehicle player) == player)}) then { + [] spawn { + life_siren_active = true; + sleep 4.7; + life_siren_active = false; + }; + + _veh = vehicle player; + if (isNil {_veh getVariable "siren"}) then {_veh setVariable ["siren",false,true];}; + if ((_veh getVariable "siren")) then { + titleText [localize "STR_MISC_SirensOFF","PLAIN"]; + _veh setVariable ["siren",false,true]; + } else { + titleText [localize "STR_MISC_SirensON","PLAIN"]; + _veh setVariable ["siren",true,true]; + if (playerSide isEqualTo west) then { + [_veh] remoteExec ["life_fnc_copSiren",RCLIENT]; + } else { + [_veh] remoteExec ["life_fnc_medicSiren",RCLIENT]; + }; + }; + }; + }; + + //O Key + case 24: { + if (_shift) then { + if (soundVolume != 1) then { + 1 fadeSound 1; + systemChat localize "STR_MISC_soundnormal"; + } else { + 1 fadeSound 0.1; + systemChat localize "STR_MISC_soundfade"; + }; + }; + }; + + //U Key + case 22: { + if (!_alt && !_ctrlKey) then { + if (isNull objectParent player) then { + _veh = cursorObject; + } else { + _veh = vehicle player; + }; + + if (_veh isKindOf "House_F" && {playerSide isEqualTo civilian}) then { + if (_veh in life_vehicles && player distance _veh < 8) then { + _door = [_veh] call life_fnc_nearestDoor; + if (_door isEqualTo 0) exitWith {hint localize "STR_House_Door_NotNear"}; + _locked = _veh getVariable [format["bis_disabled_Door_%1",_door],0]; + + if (_locked isEqualTo 0) then { + _veh setVariable [format["bis_disabled_Door_%1",_door],1,true]; + _veh animate [format["door_%1_rot",_door],0]; + systemChat localize "STR_House_Door_Lock"; + } else { + _veh setVariable [format["bis_disabled_Door_%1",_door],0,true]; + _veh animate [format["door_%1_rot",_door],1]; + systemChat localize "STR_House_Door_Unlock"; + }; + }; + } else { + _locked = locked _veh; + if (_veh in life_vehicles && player distance _veh < 8) then { + if (_locked isEqualTo 2) then { + if (local _veh) then { + _veh lock 0; + + // BI + _veh animateDoor ["door_back_R",1]; + _veh animateDoor ["door_back_L",1]; + _veh animateDoor ['door_R',1]; + _veh animateDoor ['door_L',1]; + _veh animateDoor ['Door_L_source',1]; + _veh animateDoor ['Door_rear',1]; + _veh animateDoor ['Door_rear_source',1]; + _veh animateDoor ['Door_1_source',1]; + _veh animateDoor ['Door_2_source',1]; + _veh animateDoor ['Door_3_source',1]; + _veh animateDoor ['Door_LM',1]; + _veh animateDoor ['Door_RM',1]; + _veh animateDoor ['Door_LF',1]; + _veh animateDoor ['Door_RF',1]; + _veh animateDoor ['Door_LB',1]; + _veh animateDoor ['Door_RB',1]; + _veh animateDoor ['DoorL_Front_Open',1]; + _veh animateDoor ['DoorR_Front_Open',1]; + _veh animateDoor ['DoorL_Back_Open',1]; + _veh animateDoor ['DoorR_Back_Open ',1]; + } else { + [_veh,0] remoteExecCall ["life_fnc_lockVehicle",_veh]; + + _veh animateDoor ["door_back_R",1]; + _veh animateDoor ["door_back_L",1]; + _veh animateDoor ['door_R',1]; + _veh animateDoor ['door_L',1]; + _veh animateDoor ['Door_L_source',1]; + _veh animateDoor ['Door_rear',1]; + _veh animateDoor ['Door_rear_source',1]; + _veh animateDoor ['Door_1_source',1]; + _veh animateDoor ['Door_2_source',1]; + _veh animateDoor ['Door_3_source',1]; + _veh animateDoor ['Door_LM',1]; + _veh animateDoor ['Door_RM',1]; + _veh animateDoor ['Door_LF',1]; + _veh animateDoor ['Door_RF',1]; + _veh animateDoor ['Door_LB',1]; + _veh animateDoor ['Door_RB',1]; + _veh animateDoor ['DoorL_Front_Open',1]; + _veh animateDoor ['DoorR_Front_Open',1]; + _veh animateDoor ['DoorL_Back_Open',1]; + _veh animateDoor ['DoorR_Back_Open ',1]; + }; + systemChat localize "STR_MISC_VehUnlock"; + [_veh,"unlockCarSound"] remoteExec ["life_fnc_say3D",RANY]; + } else { + if (local _veh) then { + _veh lock 2; + + _veh animateDoor ["door_back_R",0]; + _veh animateDoor ["door_back_L",0]; + _veh animateDoor ['door_R',0]; + _veh animateDoor ['door_L',0]; + _veh animateDoor ['Door_L_source',0]; + _veh animateDoor ['Door_rear',0]; + _veh animateDoor ['Door_rear_source',0]; + _veh animateDoor ['Door_1_source',0]; + _veh animateDoor ['Door_2_source',0]; + _veh animateDoor ['Door_3_source',0]; + _veh animateDoor ['Door_LM',0]; + _veh animateDoor ['Door_RM',0]; + _veh animateDoor ['Door_LF',0]; + _veh animateDoor ['Door_RF',0]; + _veh animateDoor ['Door_LB',0]; + _veh animateDoor ['Door_RB',0]; + _veh animateDoor ['DoorL_Front_Open',0]; + _veh animateDoor ['DoorR_Front_Open',0]; + _veh animateDoor ['DoorL_Back_Open',0]; + _veh animateDoor ['DoorR_Back_Open ',0]; + } else { + [_veh,2] remoteExecCall ["life_fnc_lockVehicle",_veh]; + + _veh animateDoor ["door_back_R",0]; + _veh animateDoor ["door_back_L",0]; + _veh animateDoor ['door_R',0]; + _veh animateDoor ['door_L',0]; + _veh animateDoor ['Door_L_source',0]; + _veh animateDoor ['Door_rear',0]; + _veh animateDoor ['Door_rear_source',0]; + _veh animateDoor ['Door_1_source',0]; + _veh animateDoor ['Door_2_source',0]; + _veh animateDoor ['Door_3_source',0]; + _veh animateDoor ['Door_LM',0]; + _veh animateDoor ['Door_RM',0]; + _veh animateDoor ['Door_LF',0]; + _veh animateDoor ['Door_RF',0]; + _veh animateDoor ['Door_LB',0]; + _veh animateDoor ['Door_RB',0]; + _veh animateDoor ['DoorL_Front_Open',0]; + _veh animateDoor ['DoorR_Front_Open',0]; + _veh animateDoor ['DoorL_Back_Open',0]; + _veh animateDoor ['DoorR_Back_Open ',0]; + }; + systemChat localize "STR_MISC_VehLock"; + [_veh,"lockCarSound"] remoteExec ["life_fnc_say3D",RANY]; + }; + }; + }; + }; + }; +}; + +_handled; diff --git a/life_client/core/functions/fn_loadDeadGear.sqf b/life_client/core/functions/fn_loadDeadGear.sqf new file mode 100644 index 00000000..69540ba6 --- /dev/null +++ b/life_client/core/functions/fn_loadDeadGear.sqf @@ -0,0 +1,64 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_loadDeadGear.sqf + Author: Bryan "Tonic" Boardwine + + Description: + BLAH +*/ +private["_allowedItems","_loadout","_primary","_launcher","_handgun","_magazines","_uniform","_vest","_backpack","_items","_primitems","_secitems","_handgunitems","_uitems","_vitems","_bitems","_handle"]; +_loadout = param [0,[],[[]]]; + +_primary = _loadout select 0; +_launcher = _loadout select 1; +_handgun = _loadout select 2; +_magazines = _loadout select 3; +_uniform = _loadout select 4; +_vest = _loadout select 5; +_backpack = _loadout select 6; +_items = _loadout select 7; +_primitems = _loadout select 8; +_secitems = _loadout select 9; +_handgunitems = _loadout select 10; +_uitems = _loadout select 11; +_vitems = _loadout select 12; +_bitems = _loadout select 13; +_headgear = _loadout select 14; +_goggles = _loadout select 15; + +//Strip the unit down +RemoveAllWeapons player; +{player removeMagazine _x;} forEach (magazines player); +removeUniform player; +removeVest player; +removeBackpack player; +removeGoggles player; +removeHeadGear player; +{ + player unassignItem _x; + player removeItem _x; +} forEach (assignedItems player); + +//Add the gear +if (!(_uniform isEqualTo "")) then {_handle = [_uniform,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};}; +if (!(_vest isEqualTo "")) then {_handle = [_vest,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};}; +if (!(_backpack isEqualTo "")) then {_handle = [_backpack,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};}; +{ + _handle = [_x,true,false,false,false] spawn life_fnc_handleItem; + waitUntil {scriptDone _handle}; +} forEach _magazines; + +if (!(_primary isEqualTo "")) then {[_primary,true,false,false,false] spawn life_fnc_handleItem;}; +if (!(_launcher isEqualTo "")) then {[_launcher,true,false,false,false] spawn life_fnc_handleItem;}; +if (!(_handgun isEqualTo "")) then {[_handgun,true,false,false,false] spawn life_fnc_handleItem;}; + +{_handle = [_x,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};} forEach _items; +{[_x,true,false,false,true] call life_fnc_handleItem;} forEach (_uitems); +{[_x,true,false,false,true] call life_fnc_handleItem;} forEach (_vitems); +{[_x,true,true,false,false] call life_fnc_handleItem;} forEach (_bitems); +{[_x,true,false,true,false] call life_fnc_handleItem;} forEach (_primitems); +{[_x,true,false,true,false] call life_fnc_handleItem;} forEach (_secitems); +{[_x,true,false,true,false] call life_fnc_handleItem;} forEach (_handgunitems); + +if (!(_headgear isEqualTo "")) then {player addHeadGear _headgear}; +if (!(_goggles isEqualTo "")) then {player addGoggles _goggles}; diff --git a/life_client/core/functions/fn_loadGear.sqf b/life_client/core/functions/fn_loadGear.sqf new file mode 100644 index 00000000..2e796b04 --- /dev/null +++ b/life_client/core/functions/fn_loadGear.sqf @@ -0,0 +1,93 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_loadGear.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Loads saved civilian gear, this is limited for a reason and that's balance. +*/ +private["_itemArray","_handle"]; +_itemArray = life_gear; +waitUntil {!(isNull (findDisplay 46))}; + +_handle = [] spawn life_fnc_stripDownPlayer; +waitUntil {scriptDone _handle}; + +if (count _itemArray isEqualTo 0) exitWith { + switch (playerSide) do { + case west: { + [] call life_fnc_copLoadout; + }; + + case civilian: { + [] call life_fnc_civLoadout; + }; + + case independent: { + [] call life_fnc_medicLoadout; + }; + }; +}; + +_itemArray params [ + "_uniform", + "_vest", + "_backpack", + "_goggles", + "_headgear", + ["_items",[]], + "_prim", + "_seco", + ["_uItems",[]], + ["_uMags",[]], + ["_bItems",[]], + ["_bMags",[]], + ["_vItems",[]], + ["_vMags",[]], + ["_pItems",[]], + ["_hItems",[]], + ["_yItems",[]] +]; + +if (!(_goggles isEqualTo "")) then {_handle = [_goggles,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};}; +if (!(_headgear isEqualTo "")) then {_handle = [_headgear,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};}; +if (!(_uniform isEqualTo "")) then {_handle = [_uniform,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};}; +if (!(_vest isEqualTo "")) then {_handle = [_vest,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};}; +if (!(_backpack isEqualTo "")) then {_handle = [_backpack,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};}; + +/* Hotfix for losing virtual items on login */ +if (!isNil {(_this select 0)}) then { + life_maxWeight = life_maxWeight + (round(FETCH_CONFIG2(getNumber,"CfgVehicles",(backpack player),"maximumload") / 4)); +}; + +{_handle = [_x,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};} forEach _items; + +{player addItemToUniform _x;} forEach (_uItems); +{(uniformContainer player) addItemCargoGlobal [_x,1];} forEach (_uMags); +{player addItemToVest _x;} forEach (_vItems); +{(vestContainer player) addItemCargoGlobal [_x,1];} forEach (_vMags); +{player addItemToBackpack _x;} forEach (_bItems); +{(backpackContainer player) addItemCargoGlobal [_x,1];} forEach (_bMags); +life_maxWeight = 100; + +{ + [true,(_x select 0),(_x select 1)] call life_fnc_handleInv; +} forEach (_yItems); + +life_maxWeight = 24; +//Primary & Secondary (Handgun) should be added last as magazines do not automatically load into the gun. +if (!(_prim isEqualTo "")) then {_handle = [_prim,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};}; +if (!(_seco isEqualTo "")) then {_handle = [_seco,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};}; + +{ + if (!(_x isEqualTo "")) then { + player addPrimaryWeaponItem _x; + }; +} forEach (_pItems); +{ + if (!(_x isEqualTo "")) then { + player addHandgunItem _x; + }; +} forEach (_hItems); + +[] call life_fnc_playerSkins; diff --git a/life_client/core/functions/fn_nearATM.sqf b/life_client/core/functions/fn_nearATM.sqf new file mode 100644 index 00000000..38a09d71 --- /dev/null +++ b/life_client/core/functions/fn_nearATM.sqf @@ -0,0 +1,18 @@ +/* + File: fn_nearATM.sqf + Author: Bryan "Tonic" Boardwine + Modified : NiiRoZz : for use with new command cursorObject + + Description: + Checks if the player is near an ATM object on the map. + + RETURNS: + 0: BOOL (True for yes, false for no) +*/ +private ["_objs","_return"]; +_obj = cursorObject; +_return = false; + +if ((["atm_",str(_obj)] call BIS_fnc_inString) && player distance _obj < 2.3) then {_return = true;}; + +_return; diff --git a/life_client/core/functions/fn_nearUnits.sqf b/life_client/core/functions/fn_nearUnits.sqf new file mode 100644 index 00000000..5250c7ee --- /dev/null +++ b/life_client/core/functions/fn_nearUnits.sqf @@ -0,0 +1,24 @@ +/* + File: fn_nearUnits.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Checks for units near (human units) + + Returns: + true - Units are near + false - No units near +*/ +private["_faction","_position","_radius","_ret"]; +params [ + ["_faction",sideUnknown,[sideUnknown]], + ["_position",(getPos player),[[]]], + ["_radius",30,[0]] +]; +_ret = false; + +//Error check +if (_faction isEqualTo sideUnknown) exitWith {_ret}; + +_ret = {_x != player && side _x isEqualTo _faction && alive _x && _position distance _x < _radius} count playableUnits > 0; +_ret; diff --git a/life_client/core/functions/fn_nearestDoor.sqf b/life_client/core/functions/fn_nearestDoor.sqf new file mode 100644 index 00000000..47be9149 --- /dev/null +++ b/life_client/core/functions/fn_nearestDoor.sqf @@ -0,0 +1,22 @@ +/* + File: fn_nearestDoor.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Fetches the nearest door of the building the player is looking + at. +*/ +private["_house","_door","_numOfDoors"]; +_house = param [0,objNull,[objNull]]; +if (isNull _house) exitWith {0}; +if (!(_house isKindOf "House_F")) exitWith {0}; + +_door = 0; +_doors = getNumber(configFile >> "CfgVehicles" >> (typeOf _house) >> "numberOfDoors"); +for "_i" from 1 to _doors do { + _selectionPos = _house selectionPosition format["Door_%1_trigger",_i]; + _worldSpace = _house modelToWorld _selectionPos; + if (player distance _worldSpace < 2.4) exitWith {_door = _i}; +}; + +_door; diff --git a/life_client/core/functions/fn_numberText.sqf b/life_client/core/functions/fn_numberText.sqf new file mode 100644 index 00000000..b8eb645a --- /dev/null +++ b/life_client/core/functions/fn_numberText.sqf @@ -0,0 +1,29 @@ +/* + File: fn_numberText.sqf + Author: Karel Moricky + + Description: + Convert a number into string (avoiding scientific notation) + + Parameter(s): + _this: NUMBER + + Returns: + STRING +*/ +private ["_number","_mod","_digots","_digitsCount","_modBase","_numberText"]; +params [ + ["_number",0,[0]], + ["_mod",3,[0]] +]; + +_digits = _number call bis_fnc_numberDigits; +_digitsCount = count _digits - 1; + +_modBase = _digitsCount % _mod; +_numberText = ""; +{ + _numberText = _numberText + str _x; + if ((_foreachindex - _modBase) % (_mod) isEqualTo 0 && _foreachindex != _digitsCount) then {_numberText = _numberText + ",";}; +} forEach _digits; +_numberText diff --git a/life_client/core/functions/fn_onFired.sqf b/life_client/core/functions/fn_onFired.sqf new file mode 100644 index 00000000..6b7636c8 --- /dev/null +++ b/life_client/core/functions/fn_onFired.sqf @@ -0,0 +1,22 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_onFired.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Handles various different ammo types being fired. +*/ +private["_ammoType","_projectile"]; +_ammoType = _this select 4; +_projectile = _this select 6; + +if (_ammoType isEqualTo "GrenadeHand_stone") then { + _projectile spawn { + private "_position"; + while {!isNull _this} do { + _position = ASLtoATL (visiblePositionASL _this); + sleep 0.1; + }; + [_position] remoteExec ["life_fnc_flashbang",RCLIENT]; + }; +}; diff --git a/life_client/core/functions/fn_onPutItem.sqf b/life_client/core/functions/fn_onPutItem.sqf new file mode 100644 index 00000000..11b4af43 --- /dev/null +++ b/life_client/core/functions/fn_onPutItem.sqf @@ -0,0 +1,15 @@ +/* + File: fn_onPutItem.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Syncs changes to containers in houses? +*/ +private["_unit","_item","_house","_container"]; +params [ + ["_unit",objNull,[objNull]], + ["_container",objNull,[objNull]], + ["_item","",[""]] +]; + +if (isNull _unit || _item isEqualTo "") exitWith {}; //Bad thingies? diff --git a/life_client/core/functions/fn_onTakeItem.sqf b/life_client/core/functions/fn_onTakeItem.sqf new file mode 100644 index 00000000..fad1baa0 --- /dev/null +++ b/life_client/core/functions/fn_onTakeItem.sqf @@ -0,0 +1,47 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_onTakeItem.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Blocks the unit from taking something they should not have. +*/ +private["_unit","_item","_restrictedClothing","_restrictedWeapons"]; +params [ + ["_unit",objNull,[objNull]], + ["_container",objNull,[objNull]], + ["_item","",[""]] +]; + +if (isNull _unit || _item isEqualTo "") exitWith {}; //Bad thingies? +_restrictedClothing = LIFE_SETTINGS(getArray,"restricted_uniforms"); +_restrictedWeapons = LIFE_SETTINGS(getArray,"restricted_weapons"); + +switch (playerSide) do +{ + case west: { + if (_item in ["U_Rangemaster"]) then { + [] call life_fnc_playerSkins; + }; + }; + case civilian: { + if (LIFE_SETTINGS(getNumber,"restrict_clothingPickup") isEqualTo 1) then { + if (_item in _restrictedClothing) then { + [_item,false,false,false,false] call life_fnc_handleItem; + }; + }; + if (LIFE_SETTINGS(getNumber,"restrict_weaponPickup") isEqualTo 1) then { + if (_item in _restrictedWeapons) then { + [_item,false,false,false,false] call life_fnc_handleItem; + }; + }; + if (_item in ["U_C_Poloshirt_blue","U_C_Poloshirt_burgundy","U_C_Poloshirt_stripped","U_C_Poloshirt_tricolour","U_C_Poloshirt_salmon","U_C_Poloshirt_redwhite","U_C_Commoner1_1"]) then { + [] call life_fnc_playerSkins; + }; + }; + case independent: { + if (_item in ["U_Rangemaster"]) then { + [] call life_fnc_playerSkins; + }; + }; +}; diff --git a/life_client/core/functions/fn_playerSkins.sqf b/life_client/core/functions/fn_playerSkins.sqf new file mode 100644 index 00000000..24c846ea --- /dev/null +++ b/life_client/core/functions/fn_playerSkins.sqf @@ -0,0 +1,55 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_playerSkins.sqf + Author: Daniel Stuart + + Description: + Sets skins for players by their side and uniform. +*/ +private["_skinName"]; + +switch (playerSide) do { + case civilian: { + if (LIFE_SETTINGS(getNumber,"civ_skins") isEqualTo 1) then { + if (uniform player isEqualTo "U_C_Poloshirt_blue") then { + player setObjectTextureGlobal [0, "textures\civilian_uniform_1.jpg"]; + }; + if (uniform player isEqualTo "U_C_Poloshirt_burgundy") then { + player setObjectTextureGlobal [0, "textures\civilian_uniform_2.jpg"]; + }; + if (uniform player isEqualTo "U_C_Poloshirt_stripped") then { + player setObjectTextureGlobal [0, "textures\civilian_uniform_3.jpg"]; + }; + if (uniform player isEqualTo "U_C_Poloshirt_tricolour") then { + player setObjectTextureGlobal [0, "textures\civilian_uniform_4.jpg"]; + }; + if (uniform player isEqualTo "U_C_Poloshirt_salmon") then { + player setObjectTextureGlobal [0, "textures\civilian_uniform_5.jpg"]; + }; + if (uniform player isEqualTo "U_C_Poloshirt_redwhite") then { + player setObjectTextureGlobal [0, "textures\civilian_uniform_6.jpg"]; + }; + if (uniform player isEqualTo "U_C_Commoner1_1") then { + player setObjectTextureGlobal [0, "textures\civilian_uniform_7.jpg"]; + }; + }; + }; + + case west: { + if (uniform player isEqualTo "U_Rangemaster") then { + _skinName = "textures\cop_uniform.jpg"; + if (LIFE_SETTINGS(getNumber,"cop_extendedSkins") isEqualTo 1) then { + if (FETCH_CONST(life_coplevel) >= 1) then { + _skinName = ["textures\cop_uniform_",(FETCH_CONST(life_coplevel)),".jpg"] joinString ""; + }; + }; + player setObjectTextureGlobal [0, _skinName]; + }; + }; + + case independent: { + if (uniform player isEqualTo "U_Rangemaster") then { + player setObjectTextureGlobal [0, "textures\medic_uniform.jpg"]; + }; + }; +}; diff --git a/life_client/core/functions/fn_playerTags.sqf b/life_client/core/functions/fn_playerTags.sqf new file mode 100644 index 00000000..672ee01f --- /dev/null +++ b/life_client/core/functions/fn_playerTags.sqf @@ -0,0 +1,79 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_playerTags.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Adds the tags above other players heads when close and have visible range. +*/ +if (!life_settings_tagson) exitWith {}; +private["_ui","_units","_masks"]; +#define iconID 78000 +#define scale 0.8 + +if (visibleMap || {!alive player} || {dialog}) exitWith { + 500 cutText["","PLAIN"]; +}; + +_ui = uiNamespace getVariable ["Life_HUD_nameTags",displayNull]; +if (isNull _ui) then { + 500 cutRsc["Life_HUD_nameTags","PLAIN"]; + _ui = uiNamespace getVariable ["Life_HUD_nameTags",displayNull]; +}; + +_units = nearestObjects[(visiblePosition player),["Man","Land_Pallet_MilBoxes_F","Land_Sink_F"],50]; +_units = _units - [player]; + +_masks = LIFE_SETTINGS(getArray,"clothing_masks"); + +{ + private "_text"; + _idc = _ui displayCtrl (iconID + _forEachIndex); + if (!(lineIntersects [eyePos player, eyePos _x, player, _x]) && alive _x && {!isNil {_x getVariable "realname"}}) then { + _pos = switch (typeOf _x) do { + case "Land_Pallet_MilBoxes_F": {[visiblePosition _x select 0, visiblePosition _x select 1, (getPosATL _x select 2) + 1.5]}; + case "Land_Sink_F": {[visiblePosition _x select 0, visiblePosition _x select 1, (getPosATL _x select 2) + 2]}; + default {[visiblePosition _x select 0, visiblePosition _x select 1, ((_x modelToWorld (_x selectionPosition "head")) select 2)+.5]}; + }; + _sPos = worldToScreen _pos; + _distance = _pos distance player; + if (!((headgear _x) in _masks || (goggles _x) in _masks || (uniform _x) in _masks)) then { + if (count _sPos > 1 && {_distance < 15}) then { + _text = switch (true) do { + case (_x in (units group player) && playerSide isEqualTo civilian): {format["%1",(_x getVariable ["realname",name _x])];}; + case (side _x isEqualTo west && {!isNil {_x getVariable "rank"}}): {format[" %2",switch ((_x getVariable "rank")) do { + case 2: {"\a3\ui_f\data\gui\cfg\Ranks\corporal_gs.paa"}; + case 3: {"\a3\ui_f\data\gui\cfg\Ranks\sergeant_gs.paa"}; + case 4: {"\a3\ui_f\data\gui\cfg\Ranks\lieutenant_gs.paa"}; + case 5: {"\a3\ui_f\data\gui\cfg\Ranks\captain_gs.paa"}; + case 6: {"\a3\ui_f\data\gui\cfg\Ranks\major_gs.paa"}; + case 7: {"\a3\ui_f\data\gui\cfg\Ranks\colonel_gs.paa"}; + case 8: {"\a3\ui_f\data\gui\cfg\Ranks\general_gs.paa"}; + default {"\a3\ui_f\data\gui\cfg\Ranks\private_gs.paa"}; + },_x getVariable ["realname",name _x]]}; + case (side _x isEqualTo independent): {format[" %1",_x getVariable ["realname",name _x]]}; + default { + if (!isNil {(group _x) getVariable "gang_name"}) then { + format["%1
%2",_x getVariable ["realname",name _x],(group _x) getVariable ["gang_name",""]]; + } else { + _x getVariable ["realname",name _x]; + }; + }; + }; + + _idc ctrlSetStructuredText parseText _text; + _idc ctrlSetPosition [_sPos select 0, _sPos select 1, 0.4, 0.65]; + _idc ctrlSetScale scale; + _idc ctrlSetFade 0; + _idc ctrlCommit 0; + _idc ctrlShow true; + } else { + _idc ctrlShow false; + }; + } else { + _idc ctrlShow false; + }; + } else { + _idc ctrlShow false; + }; +} forEach _units; diff --git a/life_client/core/functions/fn_postNewsBroadcast.sqf b/life_client/core/functions/fn_postNewsBroadcast.sqf new file mode 100644 index 00000000..a98a3603 --- /dev/null +++ b/life_client/core/functions/fn_postNewsBroadcast.sqf @@ -0,0 +1,32 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_postNewsBroadcast.sqf + Author: Jesse "tkcjesse" Schultz + + Description: + Handles actions after the broadcast button is clicked. +*/ +private ["_broadcastHeader","_broadcastMessage","_length","_badCharacter","_characterByte","_allowed","_allowedLength"]; +disableSerialization; +_broadcastHeader = ctrlText (CONTROL(100100,100101)); +_broadcastMessage = ctrlText (CONTROL(100100,100102)); +_length = count (toArray (_broadcastHeader)); +_characterByte = toArray (_broadcastHeader); +_allowed = toArray("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_ "); +_allowedLength = LIFE_SETTINGS(getNumber,"news_broadcast_header_length"); +_badCharacter = false; + +if (_length > _allowedLength) exitWith {hint format[localize "STR_News_HeaderLength",_allowedLength];}; + +{ + if (!(_x in _allowed)) exitWith {_badCharacter = true;}; +} forEach _characterByte; + +if (_badCharacter) exitWith {hint localize "STR_News_UnsupportedCharacter"}; + +[_broadcastHeader,_broadcastMessage,profileName] remoteExec ['life_fnc_AAN',-2]; + +CASH = CASH - LIFE_SETTINGS(getNumber,"news_broadcast_cost"); +[0] call SOCK_fnc_updatePartial; +life_broadcastTimer = time; +publicVariable "life_broadcastTimer"; \ No newline at end of file diff --git a/life_client/core/functions/fn_pullOutVeh.sqf b/life_client/core/functions/fn_pullOutVeh.sqf new file mode 100644 index 00000000..f78744f4 --- /dev/null +++ b/life_client/core/functions/fn_pullOutVeh.sqf @@ -0,0 +1,22 @@ +/* + File: fn_pullOutVeh.sqf + Author: Bryan "Tonic" Boardwine + + Description: + +*/ +if (playerSide isEqualTo west || (isNull objectParent player)) exitWith {}; +if (player getVariable "restrained") then { + detach player; + player setVariable ["Escorting",false,true]; + player setVariable ["transporting",false,true]; + life_disable_getOut = false; + player action ["Eject", vehicle player]; + titleText[localize "STR_NOTF_PulledOut","PLAIN"]; + titleFadeOut 4; + life_disable_getIn = true; +} else { + player action ["Eject", vehicle player]; + titleText[localize "STR_NOTF_PulledOut","PLAIN"]; + titleFadeOut 4; +}; diff --git a/life_client/core/functions/fn_pushObject.sqf b/life_client/core/functions/fn_pushObject.sqf new file mode 100644 index 00000000..fb8c821e --- /dev/null +++ b/life_client/core/functions/fn_pushObject.sqf @@ -0,0 +1,64 @@ +/* + File: fn_pushObject.sqf + Author: FEINT + Version : 1.0 + + Descrition : + © 2013 ALL RIGHTS RESERVED + TO MODIFY OR COPY FROM THIS FILE - CONTACT JON HILLENBRAND THROUGH HIS WEBSITE - WWW.JONHILLENBRAND.COM + + Cleaned by NiiRoZz for Altis Life +*/ + +private ["_caller","_thingToPush","_dir","_speed","_vel","_thingToPushType","_nameOfThingToPush","_textString","_targetDistance","_dist","_relativePosModel","_minSetBoxLimits","_maxSetBoxLimits","_minX","_minY","_minZ","_maxX","_maxY","_maxZ","_xRPM","_yRPM","_zRPM","_thingToPushLimits","_posCaller","_headPos","_headDir"]; +_caller = player; +_thingToPush = cursorObject; +_posCaller = visiblePosition _caller; +_dir = getDir _caller; +if (!local _thingToPush) exitWith {}; + +// _distanceFromTarget = _caller distance _thingToPush; +_thingToPushType = typeOf _thingToPush; +_nameOfThingToPush = (getText (configFile >> "cfgVehicles" >> (_thingToPushType) >> "displayname")); +// _weightOfThing = (getText (configFile >> "cfgVehicles" >> (_thingToPushType) >> "weight")); + +if (!(isNull _thingToPush) && ((_thingToPush isKindOf "AllVehicles") || (_thingToPush isKindOf "Thing") || (_thingToPush isKindOf "Object") )) then { + _targetDistance = _caller distance _thingToPush; + // ***************************** RELATIVE MODEL POSITION CODE**************************************** + _thingToPushLimits = boundingBox _thingToPush; + _dist = 2; + _posCaller = [(_posCaller select 0) + _dist*sin _dir, (_posCaller select 1) + _dist*cos _dir, _posCaller select 2]; + _relativePosModel = _thingToPush worldToModel _posCaller; + + // boundingBox returns the following [[minX, minY, minZ], [maxX, maxY, maxZ]] + // boundingBoxReal returns the following [[minX, minZ, minY], [maxX, maxZ, maxY]] + _minSetBoxLimits = _thingToPushLimits select 0; + _maxSetBoxLimits = _thingToPushLimits select 1; + _minX = _minSetBoxLimits select 0; + _minY = _minSetBoxLimits select 1; + _minZ = _minSetBoxLimits select 2; + _maxX = _maxSetBoxLimits select 0; + _maxY = _maxSetBoxLimits select 1; + _maxZ = _maxSetBoxLimits select 2; + + // RELATIVE OFFSET POSITION OF _mineHead FROM NEAREST VEHICLE IN MODEL SPACE + _xRPM = _relativePosModel select 0; + _yRPM = _relativePosModel select 1; + _zRPM = _relativePosModel select 2; + + if (((_xRPM > _minX) && (_xRPM < _maxX) && (_yRPM > _minY) && (_yRPM < _maxY) && (_zRPM > _minZ) && (_zRPM < _maxZ)) || (_targetDistance <= 3.5)) then { + + _headPos=screenToWorld [0.5,0.5]; + _headDir=[(_headPos select 0)-(getPos _caller select 0), (_headPos select 1)-(getPos _caller select 1), (_headPos select 2)-(getPos _caller select 2)]; + _dir = (_headDir select 0) atan2 (_headDir select 1); + + _speed = 6; + _vel = velocity _thingToPush; + + _thingToPush setVelocity [(_vel select 0)+((sin _dir)*_speed), (_vel select 1)+((cos _dir)*_speed),1]; + if (_thingToPush isKindOf "Ship") then { + sleep 1; + _thingToPush setVelocity [0,0,0]; + }; + }; +}; diff --git a/life_client/core/functions/fn_receiveItem.sqf b/life_client/core/functions/fn_receiveItem.sqf new file mode 100644 index 00000000..d8f5a6e5 --- /dev/null +++ b/life_client/core/functions/fn_receiveItem.sqf @@ -0,0 +1,33 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_receiveItem.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Receive an item from a player. +*/ +private["_unit","_val","_item","_from","_diff"]; +_unit = _this select 0; +if (_unit != player) exitWith {}; +_val = _this select 1; +_item = _this select 2; +_from = _this select 3; + +_diff = [_item,(parseNumber _val),life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff; + +if (!(_diff isEqualTo (parseNumber _val))) then { + if ([true,_item,_diff] call life_fnc_handleInv) then { + hint format[localize "STR_MISC_TooMuch_3",_from getVariable ["realname",name _from],_val,_diff,((parseNumber _val) - _diff)]; + [_from,_item,str((parseNumber _val) - _diff),_unit] remoteExecCall ["life_fnc_giveDiff",_from]; + } else { + [_from,_item,_val,_unit,false] remoteExecCall ["life_fnc_giveDiff",_from]; + }; +} else { + if ([true,_item,(parseNumber _val)] call life_fnc_handleInv) then { + private "_type"; + _type = M_CONFIG(getText,"VirtualItems",_item,"displayName"); + hint format[localize "STR_NOTF_GivenItem",_from getVariable ["realname",name _from],_val,(localize _type)]; + } else { + [_from,_item,_val,_unit,false] remoteExecCall ["life_fnc_giveDiff",_from]; + }; +}; \ No newline at end of file diff --git a/life_client/core/functions/fn_receiveMoney.sqf b/life_client/core/functions/fn_receiveMoney.sqf new file mode 100644 index 00000000..5f627491 --- /dev/null +++ b/life_client/core/functions/fn_receiveMoney.sqf @@ -0,0 +1,23 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_receiveMoney.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Receives money +*/ + +params [ + ["_unit",objNull,[objNull]], + ["_val","",[""]], + ["_from",objNull,[objNull]] +]; + +if (isNull _unit || isNull _from || _val isEqualTo "") exitWith {}; +if (player != _unit) exitWith {}; +if (!([_val] call TON_fnc_isnumber)) exitWith {}; +if (_unit == _from) exitWith {}; //Bad boy, trying to exploit his way to riches. + +hint format[localize "STR_NOTF_GivenMoney",_from getVariable ["realname",name _from],[(parseNumber (_val))] call life_fnc_numberText]; +CASH = CASH + parseNumber(_val); +[0] call SOCK_fnc_updatePartial; \ No newline at end of file diff --git a/life_client/core/functions/fn_revealObjects.sqf b/life_client/core/functions/fn_revealObjects.sqf new file mode 100644 index 00000000..877dbcd7 --- /dev/null +++ b/life_client/core/functions/fn_revealObjects.sqf @@ -0,0 +1,17 @@ +/* + File: fn_revealObjects.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Reveals nearest objects within 15 automatically to help with picking + up various static objects on the ground such as money, water, etc. + + Can be taxing on low-end systems or AMD CPU users. +*/ +if (!life_settings_revealObjects) exitWith {}; +private "_objects"; +_objects = nearestObjects[visiblePositionASL player, ["Land_CargoBox_V1_F","Land_BottlePlastic_V1_F","Land_TacticalBacon_F","Land_Can_V3_F","Land_CanisterFuel_F","Land_Money_F","Land_Suitcase_F","Man"], 15]; +{ + player reveal _x; + (group player) reveal _x; +} forEach _objects; \ No newline at end of file diff --git a/life_client/core/functions/fn_saveGear.sqf b/life_client/core/functions/fn_saveGear.sqf new file mode 100644 index 00000000..28f7c06d --- /dev/null +++ b/life_client/core/functions/fn_saveGear.sqf @@ -0,0 +1,157 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_saveGear.sqf + Author: Bryan "Tonic" Boardwine + Full Gear/Y-Menu Save by Vampire + Edited: Itsyuka + + Description: + Saves the players gear for syncing to the database for persistence.. +*/ +private["_return","_uItems","_bItems","_vItems","_pItems","_hItems","_yItems","_uMags","_vMags","_bMags","_pMag","_hMag","_uni","_ves","_bag","_handled","_savedVirtualItems"]; +_return = []; +_savedVirtualItems = LIFE_SETTINGS(getArray,"saved_virtualItems"); + +_return pushBack uniform player; +_return pushBack vest player; +_return pushBack backpack player; +_return pushBack goggles player; +_return pushBack headgear player; +_return pushBack assignedITems player; +if (playerSide isEqualTo west || playerSide isEqualTo civilian && {LIFE_SETTINGS(getNumber,"save_civilian_weapons") isEqualTo 1}) then { + _return pushBack primaryWeapon player; + _return pushBack handgunWeapon player; +} else { + _return pushBack []; + _return pushBack []; +}; + +_uItems = []; +_uMags = []; +_bItems = []; +_bMags = []; +_vItems = []; +_vMags = []; +_pItems = []; +_hItems = []; +_yItems = []; +_uni = []; +_ves = []; +_bag = []; + +if (!(uniform player isEqualTo "")) then { + { + if (_x in (magazines player)) then { + _uMags pushBack _x; + } else { + _uItems pushBack _x; + }; + } forEach (uniformItems player); +}; + +if (!(backpack player isEqualTo "")) then { + { + if (_x in (magazines player)) then { + _bMags pushBack _x; + } else { + _bItems pushBack _x; + }; + } forEach (backpackItems player); +}; + +if (!(vest player isEqualTo "")) then { + { + if (_x in (magazines player)) then { + _vMags pushBack _x; + } else { + _vItems pushBack _x; + }; + } forEach (vestItems player); +}; + +if (count (primaryWeaponMagazine player) > 0 && alive player) then { + _pMag = ((primaryWeaponMagazine player) select 0); + + if (!(_pMag isEqualTo "")) then { + _uni = player canAddItemToUniform _pMag; + _ves = player canAddItemToVest _pMag; + _bag = player canAddItemToBackpack _pMag; + _handled = false; + + if (_ves) then { + _vMags pushBack _pMag; + _handled = true; + }; + + if (_uni && !_handled) then { + _uMags pushBack _pMag; + _handled = true; + }; + + if (_bag && !_handled) then { + _bMags pushBack _pMag; + _handled = true; + }; + }; +}; + +if (count (handgunMagazine player) > 0 && alive player) then { + _hMag = ((handgunMagazine player) select 0); + + if (!(_hMag isEqualTo "")) then { + _uni = player canAddItemToUniform _hMag; + _ves = player canAddItemToVest _hMag; + _bag = player canAddItemToBackpack _hMag; + _handled = false; + + if (_ves) then { + _vMags pushBack _hMag; + _handled = true; + }; + + if (_uni && !_handled) then { + _uMags pushBack _hMag; + _handled = true; + }; + + if (_bag && !_handled) then { + _bMags pushBack _hMag; + _handled = true; + }; + }; +}; + +if (count (primaryWeaponItems player) > 0) then { + { + _pItems pushBack _x; + } forEach (primaryWeaponItems player); +}; + +if (count (handgunItems player) > 0) then { + { + _hItems pushBack _x; + } forEach (handGunItems player); +}; + +{ + _val = ITEM_VALUE(_x); + if (_val > 0) then { + _yItems pushBack [_x,_val]; + }; +} forEach _savedVirtualItems; + +_return pushBack _uItems; +_return pushBack _uMags; +_return pushBack _bItems; +_return pushBack _bMags; +_return pushBack _vItems; +_return pushBack _vMags; +_return pushBack _pItems; +_return pushBack _hItems; +if (LIFE_SETTINGS(getNumber,"save_virtualItems") isEqualTo 1) then { + _return pushBack _yItems; +} else { + _return pushBack []; +}; + +life_gear = _return; diff --git a/life_client/core/functions/fn_searchPosEmpty.sqf b/life_client/core/functions/fn_searchPosEmpty.sqf new file mode 100644 index 00000000..2b889221 --- /dev/null +++ b/life_client/core/functions/fn_searchPosEmpty.sqf @@ -0,0 +1,33 @@ +/* + File: fn_searchPosEmpty.sqf + Author: R3F_Team + + Description: + Return a clear position in the sky. + + Parameter(s): + 0: (Optional) offset 3D cube in which to look for a location (default [0,0,0]) + + Returns: + Array (Position) +*/ +private ["_offset", "_nb_tirages", "_position_degagee"]; + +_offset = if (count _this > 0) then {_this select 0} else {[0,0,0]}; + +// Find an open position (sphere of radius 50 m) into the sky. +for [ + { + _position_degagee = [random 3000, random 3000, 10000 + (random 20000)] vectorAdd _offset; + _nb_tirages = 1; + }, + { + !isNull (nearestObject _position_degagee) && _nb_tirages < 25 + }, + { + _position_degagee = [random 3000, random 3000, 10000 + (random 20000)] vectorAdd _offset; + _nb_tirages = _nb_tirages+1; + } +] do {}; + +_position_degagee diff --git a/life_client/core/functions/fn_simDisable.sqf b/life_client/core/functions/fn_simDisable.sqf new file mode 100644 index 00000000..79127af0 --- /dev/null +++ b/life_client/core/functions/fn_simDisable.sqf @@ -0,0 +1,15 @@ +/* + File: fn_simDisable.sqf + Author: + + Description: + +*/ +private["_obj","_bool"]; +params [ + ["_obj",objNull,[objNull]], + ["_bool",false,[false]] +]; +if (isNull _obj) exitWith {}; + +_obj enableSimulation _bool; diff --git a/life_client/core/functions/fn_stripDownPlayer.sqf b/life_client/core/functions/fn_stripDownPlayer.sqf new file mode 100644 index 00000000..a34d0681 --- /dev/null +++ b/life_client/core/functions/fn_stripDownPlayer.sqf @@ -0,0 +1,22 @@ +/* + File: fn_stripDownPlayer.sqf + Author: Tobias 'Xetoxyc' Sittenauer + + Description: Strip the player down +*/ +removeAllWeapons player; +{player removeMagazine _x;} forEach (magazines player); +removeUniform player; +removeVest player; +removeBackpack player; +removeGoggles player; +removeHeadGear player; + +{ + player unassignItem _x; + player removeItem _x; +} forEach (assignedItems player); + +if (hmd player != "") then { + player unlinkItem (hmd player); +}; \ No newline at end of file diff --git a/life_client/core/functions/fn_tazeSound.sqf b/life_client/core/functions/fn_tazeSound.sqf new file mode 100644 index 00000000..3027b015 --- /dev/null +++ b/life_client/core/functions/fn_tazeSound.sqf @@ -0,0 +1,11 @@ +/* + File: fn_tazeSound.sqf + Author: + + Description: + +*/ +private["_source"]; +_source = param [0,objNull,[objNull]]; +if (isNull _source) exitWith {}; +_source say3D "tazerSound"; diff --git a/life_client/core/functions/fn_teleport.sqf b/life_client/core/functions/fn_teleport.sqf new file mode 100644 index 00000000..63d8ce75 --- /dev/null +++ b/life_client/core/functions/fn_teleport.sqf @@ -0,0 +1,13 @@ +/* + File: fn_teleport.sqf + Author: ColinM9991 + Credits: To original script author(s) + Description: + Teleport to chosen position. +*/ +private ["_pos"]; +_pos = [_this select 0, _this select 1, _this select 2]; +(vehicle player) setPos [_pos select 0, _pos select 1, 0]; +onMapSingleClick ""; +openMap [false, false]; +hint localize "STR_NOTF_Teleport"; diff --git a/life_client/core/functions/fn_whereAmI.sqf b/life_client/core/functions/fn_whereAmI.sqf new file mode 100644 index 00000000..4ac9679c --- /dev/null +++ b/life_client/core/functions/fn_whereAmI.sqf @@ -0,0 +1,57 @@ +/* + File: fn_whereAmI.sqf + Author: Dardo + + Description: + Return the nearest kind of resource field to the player + + mine + resource + nothing +*/ + +private["_zonem", "_zone", "_mine", "_zoneSize", "_resource", "_nothing"]; +_resourceCfg = missionConfigFile >> "CfgGather" >> "Minerals"; + +for "_i" from 0 to count(_resourceCfg)-1 do { + private["_curConfig", "_resourceZones", "_requiredItem"]; + _zonem = ""; + _curConfig = _resourceCfg select _i; + _resourceZones = getArray(_curConfig >> "zones"); + _zoneSize = getNumber(_curConfig >> "zoneSize"); + { + if ((player distance(getMarkerPos _x)) < _zoneSize) exitWith { + _zonem = _x; + }; + } forEach _resourceZones; + if (_zonem != "") exitWith {}; +}; + +if (_zonem != "") exitWith { + _mine = "mine"; + _mine; +}; + + + +_resourceCfg = missionConfigFile >> "CfgGather" >> "Resources"; +for "_i" from 0 to count(_resourceCfg)-1 do { + private["_curConfig", "_resourceZones", "_requiredItem"]; + _zone = ""; + _curConfig = _resourceCfg select _i; + _resourceZones = getArray(_curConfig >> "zones"); + { + if ((player distance(getMarkerPos _x)) < _zoneSize) exitWith { + _zone = _x; + }; + } forEach _resourceZones; + if (_zone != "") exitWith {}; +}; +if (_zone != "") exitWith { + _resource = "resource"; + _resource; +}; +if (_zone isEqualTo "") exitWith { + _nothing = "nothing"; + _nothing; +}; diff --git a/life_client/core/functions/network/fn_broadcast.sqf b/life_client/core/functions/network/fn_broadcast.sqf new file mode 100644 index 00000000..65c723f0 --- /dev/null +++ b/life_client/core/functions/network/fn_broadcast.sqf @@ -0,0 +1,57 @@ +/* + File: fn_broadcast.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Broadcast system used in the life mission for multi-notification purposes. +*/ +private["_type","_message"]; +params [ + ["_type",0,[[],0]], + ["_message","",[""]], + ["_localize",false,[false]] +]; +if (_message isEqualTo "") exitWith {}; + +if (_localize) exitWith { + _arr = _this select 3; + _msg = switch (count _arr) do { + case 0: {localize _message;}; + case 1: {format[localize _message,_arr select 0];}; + case 2: {format[localize _message,_arr select 0, _arr select 1];}; + case 3: {format[localize _message,_arr select 0, _arr select 1, _arr select 2];}; + case 4: {format[localize _message,_arr select 0, _arr select 1, _arr select 2, _arr select 3];}; + }; + + if (_type isEqualType []) then { + for "_i" from 0 to (count _type)-1 do { + switch (_type select _i) do { + case 0: {systemChat _msg;}; + case 1: {hint _msg;}; + case 2: {titleText[_msg,"PLAIN"];}; + }; + }; + } else { + switch (_type) do { + case 0: {systemChat _msg;}; + case 1: {hint _msg;}; + case 2: {titleText[_msg,"PLAIN"];}; + }; + }; +}; + +if (_type isEqualType []) then { + for "_i" from 0 to (count _type)-1 do { + switch (_type select _i) do { + case 0: {systemChat _message}; + case 1: {hint format["%1", _message]}; + case 2: {titleText[format["%1",_message],"PLAIN"];}; + }; + }; +} else { + switch (_type) do { + case 0: {systemChat _message}; + case 1: {hint format["%1", _message]}; + case 2: {titleText[format["%1",_message],"PLAIN"];}; + }; +}; diff --git a/life_client/core/functions/network/fn_corpse.sqf b/life_client/core/functions/network/fn_corpse.sqf new file mode 100644 index 00000000..25252c65 --- /dev/null +++ b/life_client/core/functions/network/fn_corpse.sqf @@ -0,0 +1,12 @@ +/* + File: fn_corpse.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Hides dead bodies. +*/ +private _corpse = param [0,objNull,[objNull]]; +if (isNull _corpse) exitWith {}; +if (alive _corpse) exitWith {}; //Stop script kiddies. + +deleteVehicle _corpse; diff --git a/life_client/core/functions/network/fn_jumpFnc.sqf b/life_client/core/functions/network/fn_jumpFnc.sqf new file mode 100644 index 00000000..e1451d72 --- /dev/null +++ b/life_client/core/functions/network/fn_jumpFnc.sqf @@ -0,0 +1,36 @@ +/* + File: fn_jumpFnc.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Makes the target jump. +*/ +private["_vel","_dir","_v1","_v2","_anim","_oldpos"]; +private _unit = param [0,objNull,[objNull]]; +_oldpos = getPosATL _unit; + +if (isNull _unit) exitWith {}; //Bad data + +if (animationState _unit == "AovrPercMrunSrasWrflDf") exitWith {}; + +if (local _unit) then { + _v1 = 3.82; + _v2 = .4; + _dir = direction player; + _vel = velocity _unit; + _unit setVelocity[(_vel select 0)+(sin _dir*_v2),(_vel select 1)+(cos _dir*_v2),(_vel select 2)+_v1]; +}; + +_anim = animationState _unit; +_unit switchMove "AovrPercMrunSrasWrflDf"; + +if (local _unit) then { + waitUntil { + if ((getPos _unit select 2) > 4) then { + _unit setposATL _oldpos; + _unit setVelocity [0, 0, 0]; + }; + animationState _unit != "AovrPercMrunSrasWrflDf" + }; + _unit switchMove _anim; +}; diff --git a/life_client/core/functions/network/fn_say3D.sqf b/life_client/core/functions/network/fn_say3D.sqf new file mode 100644 index 00000000..9a2a13ac --- /dev/null +++ b/life_client/core/functions/network/fn_say3D.sqf @@ -0,0 +1,16 @@ +/* + File: fn_say3D.sqf + Author: Bryan "Tonic" Boardwine + + Description: Pass your sounds that you want everyone nearby to hear through here. + + Example: [_veh,"unlock"] remoteExec ["life_fnc_say3D",RANY]; +*/ +private["_object","_sound"]; +params [ + ["_object",objNull,[objNull]], + ["_sound","",[""]] +]; + +if (isNull _object || _sound isEqualTo "") exitWith {}; +_object say3D _sound; diff --git a/life_client/core/functions/network/fn_setFuel.sqf b/life_client/core/functions/network/fn_setFuel.sqf new file mode 100644 index 00000000..09bbbdc4 --- /dev/null +++ b/life_client/core/functions/network/fn_setFuel.sqf @@ -0,0 +1,7 @@ +/* + File: fn_setFuel.sqf + Author: Bryan "Tonic" Boardwine + + Description: Used to set fuel levels in vehicles. (Ex. Service Chopper) +*/ +(_this select 0) setFuel (_this select 1); \ No newline at end of file diff --git a/life_client/core/functions/network/fn_soundDevice.sqf b/life_client/core/functions/network/fn_soundDevice.sqf new file mode 100644 index 00000000..322dbb83 --- /dev/null +++ b/life_client/core/functions/network/fn_soundDevice.sqf @@ -0,0 +1,16 @@ +/* + File: fn_soundDevice.sqf + Author: + + Description: + Plays a device sound for mining (Mainly Tempest device). +*/ +if (isNull _this) exitWith {}; +if (player distance _this > 2500) exitWith {}; //Don't run it... They're to far out.. + +for "_i" from 0 to 1 step 0 do { + if (isNull _this || !alive _this) exitWith {}; + if (isNil {_this getVariable "mining"}) exitWith {}; + _this say3D "Device_disassembled_loop"; + sleep 28.6; +}; \ No newline at end of file diff --git a/life_client/core/gangs/fn_createGang.sqf b/life_client/core/gangs/fn_createGang.sqf new file mode 100644 index 00000000..d7be3e0a --- /dev/null +++ b/life_client/core/gangs/fn_createGang.sqf @@ -0,0 +1,39 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_createGang.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Pulls up the menu and creates the gang with the name the user enters in. +*/ +private["_gangName","_length","_badChar","_chrByte","_allowed"]; +disableSerialization; + +_gangName = ctrlText (CONTROL(2520,2522)); +_length = count (toArray(_gangName)); +_chrByte = toArray (_gangName); +_allowed = toArray("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_ "); +if (_length > 32) exitWith {hint localize "STR_GNOTF_Over32"}; +_badChar = false; +{if (!(_x in _allowed)) exitWith {_badChar = true;};} forEach _chrByte; +if (_badChar) exitWith {hint localize "STR_GNOTF_IncorrectChar";}; +if (BANK < (LIFE_SETTINGS(getNumber,"gang_price"))) exitWith {hint format[localize "STR_GNOTF_NotEnoughMoney",[((LIFE_SETTINGS(getNumber,"gang_price")) - BANK)] call life_fnc_numberText];}; + +if (life_HC_isActive) then { + [player,getPlayerUID player,_gangName] remoteExec ["HC_fnc_insertGang",HC_Life]; +} else { + [player,getPlayerUID player,_gangName] remoteExec ["TON_fnc_insertGang",RSERV]; +}; + +if (LIFE_SETTINGS(getNumber,"player_advancedLog") isEqualTo 1) then { + if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then { + advanced_log = format [localize "STR_DL_AL_createdGang_BEF",_gangName,(LIFE_SETTINGS(getNumber,"gang_price"))]; + } else { + advanced_log = format [localize "STR_DL_AL_createdGang",profileName,(getPlayerUID player),_gangName,(LIFE_SETTINGS(getNumber,"gang_price"))]; + }; + publicVariableServer "advanced_log"; +}; + +hint localize "STR_NOTF_SendingData"; +closeDialog 0; +life_action_gangInUse = true; diff --git a/life_client/core/gangs/fn_gangCreated.sqf b/life_client/core/gangs/fn_gangCreated.sqf new file mode 100644 index 00000000..e0996b10 --- /dev/null +++ b/life_client/core/gangs/fn_gangCreated.sqf @@ -0,0 +1,20 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_gangCreated.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Tells the player that the gang is created and throws him into it. +*/ +private "_group"; +life_action_gangInUse = nil; + +if (BANK < (LIFE_SETTINGS(getNumber,"gang_price"))) exitWith { + hint format[localize "STR_GNOTF_NotEnoughMoney",[((LIFE_SETTINGS(getNumber,"gang_price"))-BANK)] call life_fnc_numberText]; + {group player setVariable [_x,nil,true];} forEach ["gang_id","gang_owner","gang_name","gang_members","gang_maxmembers","gang_bank"]; +}; + +BANK = BANK - LIFE_SETTINGS(getNumber,"gang_price"); +[1] call SOCK_fnc_updatePartial; + +hint format[localize "STR_GNOTF_CreateSuccess",(group player) getVariable "gang_name",[(LIFE_SETTINGS(getNumber,"gang_price"))] call life_fnc_numberText]; \ No newline at end of file diff --git a/life_client/core/gangs/fn_gangDisband.sqf b/life_client/core/gangs/fn_gangDisband.sqf new file mode 100644 index 00000000..9d859068 --- /dev/null +++ b/life_client/core/gangs/fn_gangDisband.sqf @@ -0,0 +1,29 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_gangDisband.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Prompts the user about disbanding the gang and if the user accepts the gang will be + disbanded and removed from the database. +*/ +private "_action"; +_action = [ + localize "STR_GNOTF_DisbandWarn", + localize "STR_Gang_Disband_Gang", + localize "STR_Global_Yes", + localize "STR_Global_No" +] call BIS_fnc_guiMessage; + +if (_action) then { + hint localize "STR_GNOTF_DisbandGangPro"; + + if (life_HC_isActive) then { + [group player] remoteExec ["HC_fnc_removeGang",HC_Life]; + } else { + [group player] remoteExec ["TON_fnc_removeGang",RSERV]; + }; + +} else { + hint localize "STR_GNOTF_DisbandGangCanc"; +}; \ No newline at end of file diff --git a/life_client/core/gangs/fn_gangDisbanded.sqf b/life_client/core/gangs/fn_gangDisbanded.sqf new file mode 100644 index 00000000..5dfef763 --- /dev/null +++ b/life_client/core/gangs/fn_gangDisbanded.sqf @@ -0,0 +1,18 @@ +/* + File: fn_gangDisbanded.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Notifies members that the gang has been disbanded. +*/ +private "_group"; +_group = param [0,grpNull,[grpNull]]; +if (isNull _group) exitWith {}; //Fail horn please. +if (!isNull (findDisplay 2620)) then {closeDialog 2620}; + +hint localize "STR_GNOTF_DisbandWarn_2"; +[player] joinSilent (createGroup civilian); + +if (units _group isEqualTo []) then { + deleteGroup _group; +}; diff --git a/life_client/core/gangs/fn_gangInvite.sqf b/life_client/core/gangs/fn_gangInvite.sqf new file mode 100644 index 00000000..c0af63e3 --- /dev/null +++ b/life_client/core/gangs/fn_gangInvite.sqf @@ -0,0 +1,46 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_gangInvite.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Prompts the player about an invite. +*/ +private ["_action","_grpMembers"]; +params [ + ["_name","",[""]], + ["_group",grpNull,[grpNull]] +]; + +if (_name isEqualTo "" || isNull _group) exitWith {}; //Fail horn anyone? +if (!isNil {(group player) getVariable "gang_name"}) exitWith {hint localize "STR_GNOTF_AlreadyInGang";}; + +_gangName = _group getVariable "gang_name"; +_action = [ + format[localize "STR_GNOTF_InviteMSG",_name,_gangName], + localize "STR_Gang_Invitation", + localize "STR_Global_Yes", + localize "STR_Global_No" +] call BIS_fnc_guiMessage; + +if (_action) then { + [player] join _group; + + if (life_HC_isActive) then { + [4,_group] remoteExecCall ["HC_fnc_updateGang",HC_Life]; + } else { + [4,_group] remoteExecCall ["TON_fnc_updateGang",RSERV]; + }; + +} else { + _grpMembers = group player getVariable "gang_members"; + _grpMembers = _grpMembers - [getPlayerUID player]; + group player setVariable ["gang_members",_grpMembers,true]; + + if (life_HC_isActive) then { + [4,_grpMembers] remoteExecCall ["HC_fnc_updateGang",HC_Life]; + } else { + [4,_grpMembers] remoteExecCall ["TON_fnc_updateGang",RSERV]; + }; + +}; diff --git a/life_client/core/gangs/fn_gangInvitePlayer.sqf b/life_client/core/gangs/fn_gangInvitePlayer.sqf new file mode 100644 index 00000000..0a48d888 --- /dev/null +++ b/life_client/core/gangs/fn_gangInvitePlayer.sqf @@ -0,0 +1,36 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_gangInvitePlayer.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Invites the player into the gang. +*/ +private "_unit"; +disableSerialization; + +if ((lbCurSel 2632) isEqualTo -1) exitWith {hint localize "STR_GNOTF_SelectPerson"}; +_unit = call compile format["%1",CONTROL_DATA(2632)]; + +if (isNull _unit) exitWith {}; //Bad unit? +if (_unit == player) exitWith {hint localize "STR_GNOTF_InviteSelf"}; +if (!isNil {(group _unit) getVariable "gang_name"}) exitWith {hint localize "STR_GNOTF_playerAlreadyInGang";}; //Added + +if (count(group player getVariable ["gang_members",8]) == (group player getVariable ["gang_maxMembers",8])) exitWith {hint localize "STR_GNOTF_MaxSlot"}; + +_action = [ + format[localize "STR_GNOTF_InvitePlayerMSG",_unit getVariable ["realname",name _unit]], + localize "STR_Gang_Invitation", + localize "STR_Global_Yes", + localize "STR_Global_No" +] call BIS_fnc_guiMessage; + +if (_action) then { + [profileName,group player] remoteExec ["life_fnc_gangInvite",_unit]; + _members = group player getVariable "gang_members"; + _members pushBack getPlayerUID _unit; + group player setVariable ["gang_members",_members,true]; + hint format[localize "STR_GNOTF_InviteSent",_unit getVariable ["realname",name _unit]]; +} else { + hint localize "STR_GNOTF_InviteCancel"; +}; diff --git a/life_client/core/gangs/fn_gangKick.sqf b/life_client/core/gangs/fn_gangKick.sqf new file mode 100644 index 00000000..3b766ecb --- /dev/null +++ b/life_client/core/gangs/fn_gangKick.sqf @@ -0,0 +1,34 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_gangKick.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Kicks a player from your gang. +*/ +private["_unit","_unitID","_members"]; +disableSerialization; + +if ((lbCurSel 2621) isEqualTo -1) exitWith {hint localize "STR_GNOTF_SelectKick"}; +_unit = call compile format["%1",CONTROL_DATA(2621)]; + +if (isNull _unit) exitWith {}; //Bad unit? +if (_unit == player) exitWith {hint localize "STR_GNOTF_KickSelf"}; + +_unitID = getPlayerUID _unit; +_members = group player getVariable "gang_members"; +if (isNil "_members") exitWith {}; +if (!(_members isEqualType [])) exitWith {}; + +_members = _members - [_unitID]; +group player setVariable ["gang_members",_members,true]; + +[_unit,group player] remoteExec ["TON_fnc_clientGangKick",_unit]; //Boot that bitch! + +if (life_HC_isActive) then { + [4,group player] remoteExec ["HC_fnc_updateGang",HC_Life]; //Update the database. +} else { + [4,group player] remoteExec ["TON_fnc_updateGang",RSERV]; //Update the database. +}; + +[] call life_fnc_gangMenu; diff --git a/life_client/core/gangs/fn_gangLeave.sqf b/life_client/core/gangs/fn_gangLeave.sqf new file mode 100644 index 00000000..fb8dca04 --- /dev/null +++ b/life_client/core/gangs/fn_gangLeave.sqf @@ -0,0 +1,28 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_gangLeave.sqf + Author: Bryan "Tonic" Boardwine + + Description: + 32 hours later... +*/ +private["_unitID ","_members"]; +if (getPlayerUID player isEqualTo (group player getVariable "gang_owner")) exitWith {hint localize "STR_GNOTF_LeaderLeave"}; + +_unitID = getPlayerUID player; +_members = group player getVariable "gang_members"; +if (isNil "_members") exitWith {}; +if (!(_members isEqualType [])) exitWith {}; + +_members = _members - [_unitID]; +group player setVariable ["gang_members",_members,true]; + +[player,group player] remoteExec ["TON_fnc_clientGangLeft",player]; + +if (life_HC_isActive) then { + [4,group player] remoteExec ["HC_fnc_updateGang",HC_Life]; //Update the database. +} else { + [4,group player] remoteExec ["TON_fnc_updateGang",RSERV]; //Update the database. +}; + +closeDialog 0; diff --git a/life_client/core/gangs/fn_gangMenu.sqf b/life_client/core/gangs/fn_gangMenu.sqf new file mode 100644 index 00000000..57214b91 --- /dev/null +++ b/life_client/core/gangs/fn_gangMenu.sqf @@ -0,0 +1,61 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_gangMenu.sqf + Author: Bryan "Tonic" Boardwine + + Description: + 31 hours of no sleep screw your description. +*/ +private["_ownerID","_gangBank","_gangMax","_gangName","_members","_allUnits","_ctrl"]; +disableSerialization; +if (isNull (findDisplay 2620)) then { + if (!(createDialog "Life_My_Gang_Diag")) exitWith {}; //NOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOO00000000000000oooooo +}; + +_ownerID = group player getVariable ["gang_owner",""]; +if (_ownerID isEqualTo "") exitWith {closeDialog 0;}; //Bad juju + +_gangName = group player getVariable "gang_name"; +_gangBank = GANG_FUNDS; +_gangMax = group player getVariable "gang_maxMembers"; + +if (_ownerID != getPlayerUID player) then { + (CONTROL(2620,2622)) ctrlEnable false; //Upgrade + (CONTROL(2620,2624)) ctrlEnable false; // Kick + (CONTROL(2620,2625)) ctrlEnable false; //Set New Leader + (CONTROL(2620,2630)) ctrlEnable false; //Invite Player + (CONTROL(2620,2631)) ctrlEnable false; //Disband Gang +}; + +(CONTROL(2620,2629)) ctrlSetText _gangName; +(CONTROL(2620,601)) ctrlSetText format[(localize "STR_GNOTF_Funds")+ " $%1",[_gangBank] call life_fnc_numberText]; + +//Loop through the players. +_members = CONTROL(2620,2621); +lbClear _members; +{ + if ((getPlayerUID _x) == _ownerID) then { + _members lbAdd format["%1 " +(localize "STR_GNOTF_GangLeader"),(_x getVariable ["realname",name _x])]; + _members lbSetData [(lbSize _members)-1,str(_x)]; + } else { + _members lbAdd format["%1",(_x getVariable ["realname",name _x])]; + _members lbSetData [(lbSize _members)-1,str(_x)]; + }; +} forEach (units group player); + +_grpMembers = units group player; +_allUnits = playableUnits; + +//Clear out the list.. +{ + if (_x in _grpMembers || side _x != civilian && isNil {(group _x) getVariable "gang_id"}) then { + _allUnits deleteAt _forEachIndex; + }; +} forEach _allUnits; + +_ctrl = CONTROL(2620,2632); +lbClear _ctrl; //Purge the list +{ + _ctrl lbAdd format["%1",_x getVariable ["realname",name _x]]; + _ctrl lbSetData [(lbSize _ctrl)-1,str(_x)]; +} forEach _allUnits; diff --git a/life_client/core/gangs/fn_gangNewLeader.sqf b/life_client/core/gangs/fn_gangNewLeader.sqf new file mode 100644 index 00000000..f32e8a61 --- /dev/null +++ b/life_client/core/gangs/fn_gangNewLeader.sqf @@ -0,0 +1,41 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_gangNewLeader.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Something about being a quitter. +*/ +private["_unit","_unitID","_members","_action","_index"]; +disableSerialization; + +if ((lbCurSel 2621) isEqualTo -1) exitWith {hint localize "STR_GNOTF_TransferSelect"}; +_unit = call compile format["%1",CONTROL_DATA(2621)]; + +if (isNull _unit) exitWith {}; //Bad unit? +if (_unit == player) exitWith {hint localize "STR_GNOTF_TransferSelf"}; + +_action = [ + format[localize "STR_GNOTF_TransferMSG",_unit getVariable ["realname",name _unit]], + localize "STR_Gang_Transfer", + localize "STR_Global_Yes", + localize "STR_Global_No" +] call BIS_fnc_guiMessage; + +if (_action) then { + _unitID = getPlayerUID _unit; + if (_unitID isEqualTo "") exitWith {hint localize "STR_GNOTF_badUID";}; //Unlikely? + group player setVariable ["gang_owner",_unitID,true]; + group player selectLeader _unit; + [_unit,group player] remoteExec ["TON_fnc_clientGangLeader",_unit]; //Boot that bitch! + + if (life_HC_isActive) then { + [3,group player] remoteExec ["HC_fnc_updateGang",HC_Life]; //Update the database. + } else { + [3,group player] remoteExec ["TON_fnc_updateGang",RSERV]; //Update the database. + }; + +} else { + hint localize "STR_GNOTF_TransferCancel"; +}; +[] call life_fnc_gangMenu; diff --git a/life_client/core/gangs/fn_gangUpgrade.sqf b/life_client/core/gangs/fn_gangUpgrade.sqf new file mode 100644 index 00000000..65fa5658 --- /dev/null +++ b/life_client/core/gangs/fn_gangUpgrade.sqf @@ -0,0 +1,42 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_gangUpgrade.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Determinds the upgrade price and blah +*/ +private["_maxMembers","_slotUpgrade","_upgradePrice"]; +_maxMembers = group player getVariable ["gang_maxMembers",8]; +_slotUpgrade = _maxMembers + 4; +_upgradePrice = round(_slotUpgrade * ((LIFE_SETTINGS(getNumber,"gang_upgradeBase"))) / ((LIFE_SETTINGS(getNumber,"gang_upgradeMultiplier")))); + +_action = [ + format[(localize "STR_GNOTF_MaxMemberMSG")+ "

" +(localize "STR_GNOTF_CurrentMax")+ "
" +(localize "STR_GNOTF_UpgradeMax")+ "
" +(localize "STR_GNOTF_Price")+ " $%3",_maxMembers,_slotUpgrade,[_upgradePrice] call life_fnc_numberText], + localize "STR_Gang_UpgradeMax", + localize "STR_Global_Buy", + localize "STR_Global_Cancel" +] call BIS_fnc_guiMessage; + +if (_action) then { + if (BANK < _upgradePrice) exitWith { + hint parseText format[ + (localize "STR_GNOTF_NotEoughMoney_2")+ "

" +(localize "STR_GNOTF_Current")+ " $%1
" +(localize "STR_GNOTF_Lacking")+ " $%2", + [BANK] call life_fnc_numberText, + [_upgradePrice - BANK] call life_fnc_numberText + ]; + }; + BANK = BANK - _upgradePrice; + [1] call SOCK_fnc_updatePartial; + group player setVariable ["gang_maxMembers",_slotUpgrade,true]; + hint parseText format[localize "STR_GNOTF_UpgradeSuccess",_maxMembers,_slotUpgrade,[_upgradePrice] call life_fnc_numberText]; + + if (life_HC_isActive) then { + [2,group player] remoteExec ["HC_fnc_updateGang",HC_Life]; + } else { + [2,group player] remoteExec ["TON_fnc_updateGang",RSERV]; + }; + +} else { + hint localize "STR_GNOTF_UpgradeCancel"; +}; diff --git a/life_client/core/gangs/fn_initGang.sqf b/life_client/core/gangs/fn_initGang.sqf new file mode 100644 index 00000000..71e90121 --- /dev/null +++ b/life_client/core/gangs/fn_initGang.sqf @@ -0,0 +1,43 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_initGang.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Main initialization for gangs. +*/ +private["_exitLoop","_group","_wait"]; +if (playerSide != civilian) exitWith {}; //What in the hell? +[player] join (createGroup civilian); +if (count life_gangData isEqualTo 0) exitWith {}; //Dafuq? + +_wait = round(random(8)); +sleep _wait; + +//Loop through to make sure there is not a group already created with the gang. +_exitLoop = false; +{ + _groupName = _x getVariable "gang_name"; + if (!isNil "_groupName") then { + _groupOwner = _x getVariable ["gang_owner",""]; + _groupID = _x getVariable "gang_id"; + if (_groupOwner isEqualTo "" || isNil "_groupID") exitWith {}; //Seriously? + if ((life_gangData select 0) isEqualTo _groupID && {(life_gangData select 1) isEqualTo _groupOwner}) exitWith {_group = _x; _exitLoop = true;}; + }; +} forEach allGroups; + +if (!isNil "_group") then { + [player] join _group; + if ((life_gangData select 1) isEqualTo getPlayerUID player) then { + _group selectLeader player; + [player,_group] remoteExecCall ["TON_fnc_clientGangLeader",(units _group)]; + }; +} else { + _group = group player; + _group setVariable ["gang_id",(life_gangData select 0),true]; + _group setVariable ["gang_owner",(life_gangData select 1),true]; + _group setVariable ["gang_name",(life_gangData select 2),true]; + _group setVariable ["gang_maxMembers",(life_gangData select 3),true]; + _group setVariable ["gang_bank",(life_gangData select 4),true]; + _group setVariable ["gang_members",(life_gangData select 5),true]; +}; diff --git a/life_client/core/housing/fn_buyHouse.sqf b/life_client/core/housing/fn_buyHouse.sqf new file mode 100644 index 00000000..41b83ba7 --- /dev/null +++ b/life_client/core/housing/fn_buyHouse.sqf @@ -0,0 +1,66 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_buyHouse.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Buys the house? +*/ +private["_house","_uid","_action","_houseCfg"]; +_house = param [0,objNull,[objNull]]; +_uid = getPlayerUID player; + +if (isNull _house) exitWith {}; +if (!(_house isKindOf "House_F")) exitWith {}; +if (_house getVariable ["house_owned",false]) exitWith {hint localize "STR_House_alreadyOwned";}; +if (!isNil {(_house getVariable "house_sold")}) exitWith {hint localize "STR_House_Sell_Process"}; +if (!license_civ_home) exitWith {hint localize "STR_House_License"}; +if (count life_houses >= (LIFE_SETTINGS(getNumber,"house_limit"))) exitWith {hint format[localize "STR_House_Max_House",LIFE_SETTINGS(getNumber,"house_limit")]}; +closeDialog 0; + +_houseCfg = [(typeOf _house)] call life_fnc_houseConfig; +if (count _houseCfg isEqualTo 0) exitWith {}; + +_action = [ + format[localize "STR_House_BuyMSG", + [(_houseCfg select 0)] call life_fnc_numberText, + (_houseCfg select 1)],localize "STR_House_Purchase",localize "STR_Global_Buy",localize "STR_Global_Cancel" +] call BIS_fnc_guiMessage; + +if (_action) then { + if (BANK < (_houseCfg select 0)) exitWith {hint format [localize "STR_House_NotEnough"]}; + BANK = BANK - (_houseCfg select 0); + [1] call SOCK_fnc_updatePartial; + + if (life_HC_isActive) then { + [_uid,_house] remoteExec ["HC_fnc_addHouse",HC_Life]; + } else { + [_uid,_house] remoteExec ["TON_fnc_addHouse",RSERV]; + }; + + if (LIFE_SETTINGS(getNumber,"player_advancedLog") isEqualTo 1) then { + if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then { + advanced_log = format [localize "STR_DL_AL_boughtHouse_BEF",[(_houseCfg select 0)] call life_fnc_numberText,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + } else { + advanced_log = format [localize "STR_DL_AL_boughtHouse",profileName,(getPlayerUID player),[(_houseCfg select 0)] call life_fnc_numberText,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + }; + publicVariableServer "advanced_log"; + }; + + _house setVariable ["house_owner",[_uid,profileName],true]; + _house setVariable ["locked",true,true]; + _house setVariable ["containers",[],true]; + _house setVariable ["uid",floor(random 99999),true]; + + life_vehicles pushBack _house; + life_houses pushBack [str(getPosATL _house),[]]; + _marker = createMarkerLocal [format["house_%1",(_house getVariable "uid")],getPosATL _house]; + _houseName = FETCH_CONFIG2(getText,"CfgVehicles",(typeOf _house), "displayName"); + _marker setMarkerTextLocal _houseName; + _marker setMarkerColorLocal "ColorBlue"; + _marker setMarkerTypeLocal "loc_Lighthouse"; + _numOfDoors = FETCH_CONFIG2(getNumber,"CfgVehicles",(typeOf _house),"numberOfDoors"); + for "_i" from 1 to _numOfDoors do { + _house setVariable [format["bis_disabled_Door_%1",_i],1,true]; + }; +}; diff --git a/life_client/core/housing/fn_containerMenu.sqf b/life_client/core/housing/fn_containerMenu.sqf new file mode 100644 index 00000000..20e4bc55 --- /dev/null +++ b/life_client/core/housing/fn_containerMenu.sqf @@ -0,0 +1,47 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_containerMenu.sqf + Author: NiiRoZz + + Description: + Container interaction menu. +*/ +#define Btn1 37450 +#define Btn2 37451 +#define Btn3 37452 +#define Btn4 37453 +#define Btn5 37454 +#define Btn6 37455 +#define Btn7 37456 +#define Btn8 37457 +#define Title 37401 + +private["_container","_Btn1","_Btn2","_Btn3","_Btn4","_Btn5","_Btn6","_Btn7","_Btn8"]; +disableSerialization; +_container = param [0,objNull,[objNull]]; +if (isNull _container) exitWith {}; //Bad target + +if (!dialog) then { + createDialog "pInteraction_Menu"; +}; + +_Btn1 = CONTROL(37400,Btn1); +_Btn2 = CONTROL(37400,Btn2); +_Btn3 = CONTROL(37400,Btn3); +_Btn4 = CONTROL(37400,Btn4); +_Btn5 = CONTROL(37400,Btn5); +_Btn6 = CONTROL(37400,Btn6); +_Btn7 = CONTROL(37400,Btn7); +_Btn8 = CONTROL(37400,Btn8); +{_x ctrlShow false;} forEach [_Btn1,_Btn2,_Btn3,_Btn4,_Btn5,_Btn6,_Btn7,_Btn8]; + +life_pInact_container = _container; +if (playerSide isEqualTo west) then { + _Btn1 ctrlSetText localize "STR_vInAct_SearchContainer"; + _Btn1 buttonSetAction "[life_pInact_container] spawn life_fnc_containerInvSearch; closeDialog 0;"; + _Btn1 ctrlShow true; +} else { + _Btn1 ctrlSetText localize "STR_pInAct_RemoveContainer"; + _Btn1 buttonSetAction "[life_pInact_container] spawn life_fnc_removeContainer; closeDialog 0;"; + _Btn1 ctrlShow true; +}; diff --git a/life_client/core/housing/fn_copBreakDoor.sqf b/life_client/core/housing/fn_copBreakDoor.sqf new file mode 100644 index 00000000..86f4968c --- /dev/null +++ b/life_client/core/housing/fn_copBreakDoor.sqf @@ -0,0 +1,65 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_copBreakDoor.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Allows cops to 'kick' in the door? +*/ +private["_house","_door","_title","_titleText","_progressBar","_cpRate","_cP","_uid"]; +_house = param [0,objNull,[objNull]]; + +if (isNull _house || !(_house isKindOf "House_F")) exitWith {}; +if (isNil {(_house getVariable "house_owner")}) exitWith {hint localize "STR_House_Raid_NoOwner"}; + +_uid = (_house getVariable "house_owner") select 0; +if (!([_uid] call life_fnc_isUIDActive)) exitWith {hint localize "STR_House_Raid_OwnerOff"}; + +_door = [_house] call life_fnc_nearestDoor; +if (_door isEqualTo 0) exitWith {hint localize "STR_Cop_NotaDoor"}; +if ((_house getVariable [format["bis_disabled_Door_%1",_door],0]) isEqualTo 0) exitWith {hint localize "STR_House_Raid_DoorUnlocked"}; + +life_action_inUse = true; + +//Setup the progress bar +disableSerialization; +_title = localize "STR_House_Raid_Progress"; +5 cutRsc ["life_progress","PLAIN"]; +_ui = uiNamespace getVariable "life_progress"; +_progressBar = _ui displayCtrl 38201; +_titleText = _ui displayCtrl 38202; +_titleText ctrlSetText format["%2 (1%1)...","%",_title]; +_progressBar progressSetPosition 0.01; +_cP = 0.01; +_cpRate = 0.0092; + +[2,"STR_House_Raid_NOTF",true,[(_house getVariable "house_owner") select 1]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; + +for "_i" from 0 to 1 step 0 do { + if (animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { + [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; + player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; + player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; + }; + sleep 0.26; + if (isNull _ui) then { + 5 cutRsc ["life_progress","PLAIN"]; + _ui = uiNamespace getVariable "life_progress"; + }; + _cP = _cP + _cpRate; + _progressBar progressSetPosition _cP; + _titleText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_title]; + if (_cP >= 1 || !alive player) exitWith {}; + if (life_interrupted) exitWith {}; +}; + +//Kill the UI display and check for various states +5 cutText ["","PLAIN"]; +player playActionNow "stop"; + +if (!alive player) exitWith {life_action_inUse = false;}; +if (life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; + +life_action_inUse = false; +_house animate [format["door_%1_rot",_door],1]; +_house setVariable [format["bis_disabled_Door_%1",_door],0,true]; //Unlock the door. diff --git a/life_client/core/housing/fn_copHouseOwner.sqf b/life_client/core/housing/fn_copHouseOwner.sqf new file mode 100644 index 00000000..6b85394b --- /dev/null +++ b/life_client/core/housing/fn_copHouseOwner.sqf @@ -0,0 +1,11 @@ +/* + File: fn_copHouseOwner.sqf + Author: + + Description: + Displays the house owner +*/ +private _house = param [0,objNull,[objNull]]; +if (isNull _house || !(_house isKindOf "House_F")) exitWith {}; +if (isNil {(_house getVariable "house_owner")}) exitWith {hint localize "STR_House_Raid_NoOwner"}; +hint parseText format["" +(localize "STR_House_Raid_Owner")+ "
%1",(_house getVariable "house_owner") select 1]; diff --git a/life_client/core/housing/fn_garageRefund.sqf b/life_client/core/housing/fn_garageRefund.sqf new file mode 100644 index 00000000..da1b375a --- /dev/null +++ b/life_client/core/housing/fn_garageRefund.sqf @@ -0,0 +1,13 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_garageRefund.sqf + Author: Bryan "Tonic" Boardwine + + Description: + I don't know? +*/ +_price = _this select 0; +_unit = _this select 1; +if (_unit != player) exitWith {}; +BANK = BANK + _price; +[1] call SOCK_fnc_updatePartial; \ No newline at end of file diff --git a/life_client/core/housing/fn_getBuildingPositions.sqf b/life_client/core/housing/fn_getBuildingPositions.sqf new file mode 100644 index 00000000..eb6b4318 --- /dev/null +++ b/life_client/core/housing/fn_getBuildingPositions.sqf @@ -0,0 +1,38 @@ +/* + File: fn_getBuildingPositions.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Retrieves all 3D-world positions in a building and also restricts + certain positions due to window positioning. +*/ +private["_building","_arr","_restricted","_exitLoop","_i"]; +_building = _this select 0; +_arr = []; + +_restricted = switch (typeOf _building) do { +case "Land_i_House_Big_02_V1_F": {[0,1,2,3,4]}; +case "Land_i_House_Big_02_V2_F": {[0,1,2,3,4]}; +case "Land_i_House_Big_02_V3_F": {[0,1,2,3,4]}; +case "Land_i_House_Big_01_V1_F": {[2,3]}; +case "Land_i_House_Big_01_V2_F": {[2,3]}; +case "Land_i_House_Big_01_V3_F": {[2,3]}; +case "Land_i_Stone_HouseSmall_V1_F": {[0,1,3,4]}; +case "Land_i_Stone_HouseSmall_V2_F": {[0,1,3,4]}; +case "Land_i_Stone_HouseSmall_V3_F": {[0,1,3,4]}; +default {[]}; +}; + +_i = 0; +_exitLoop = false; //Loops are not fun. +for "_i" from 0 to 1 step 0 do { + if (!(_i in _restricted)) then { + _pos = _building buildingPos _i; + if (_pos isEqualTo [0,0,0]) exitWith {_exitLoop = true;}; + _arr pushBack _pos; + }; + if (_exitLoop) exitWith {}; + _i = _i + 1; +}; + +_arr; diff --git a/life_client/core/housing/fn_houseMenu.sqf b/life_client/core/housing/fn_houseMenu.sqf new file mode 100644 index 00000000..d87a9710 --- /dev/null +++ b/life_client/core/housing/fn_houseMenu.sqf @@ -0,0 +1,122 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_houseMenu.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Building interaction menu +*/ +#define Btn1 37450 +#define Btn2 37451 +#define Btn3 37452 +#define Btn4 37453 +#define Btn5 37454 +#define Btn6 37455 +#define Btn7 37456 +#define Btn8 37457 +#define Title 37401 + +private["_display","_curTarget","_Btn1","_Btn2","_Btn3","_Btn4","_Btn5","_Btn6","_Btn7","_Btn8"]; +disableSerialization; +_curTarget = param [0,objNull,[objNull]]; +if (isNull _curTarget) exitWith {}; //Bad target +if (playerSide isEqualTo independent) exitWith {}; +_houseCfg = [(typeOf _curTarget)] call life_fnc_houseConfig; +if (count _houseCfg isEqualTo 0 && playerSide isEqualTo civilian) exitWith {}; + +if (!dialog) then { + createDialog "pInteraction_Menu"; +}; + +_Btn1 = CONTROL(37400,Btn1); +_Btn2 = CONTROL(37400,Btn2); +_Btn3 = CONTROL(37400,Btn3); +_Btn4 = CONTROL(37400,Btn4); +_Btn5 = CONTROL(37400,Btn5); +_Btn6 = CONTROL(37400,Btn6); +_Btn7 = CONTROL(37400,Btn7); +_Btn8 = CONTROL(37400,Btn8); +{_x ctrlShow false;} forEach [_Btn1,_Btn2,_Btn3,_Btn4,_Btn5,_Btn6,_Btn7,_Btn8]; + +life_pInact_curTarget = _curTarget; +if (_curTarget isKindOf "House_F" && playerSide isEqualTo west) exitWith { + if ((nearestObject [[16019.5,16952.9,0],"Land_Dome_Big_F"]) == _curTarget || (nearestObject [[16019.5,16952.9,0],"Land_Research_house_V1_F"]) == _curTarget) then { + + _Btn1 ctrlSetText localize "STR_pInAct_Repair"; + _Btn1 buttonSetAction "[life_pInact_curTarget] spawn life_fnc_repairDoor; closeDialog 0;"; + _Btn1 ctrlShow true; + + _Btn2 ctrlSetText localize "STR_pInAct_CloseOpen"; + _Btn2 buttonSetAction "[life_pInact_curTarget] call life_fnc_doorAnimate; closeDialog 0;"; + _Btn2 ctrlShow true; + + } else { + if (!isNil {_curTarget getVariable "house_owner"}) then { + _Btn1 ctrlSetText localize "STR_House_Raid_Owner"; + _Btn1 buttonSetAction "[life_pInact_curTarget] call life_fnc_copHouseOwner;"; + _Btn1 ctrlShow true; + + _Btn2 ctrlSetText localize "STR_pInAct_BreakDown"; + _Btn2 buttonSetAction "[life_pInact_curTarget] spawn life_fnc_copBreakDoor; closeDialog 0;"; + _Btn2 ctrlShow true; + + _Btn4 ctrlSetText localize "STR_pInAct_LockHouse"; + _Btn4 buttonSetAction "[life_pInact_curTarget] spawn life_fnc_lockupHouse; closeDialog 0;"; + _Btn4 ctrlShow true; + } else { + closeDialog 0; + }; + }; +}; + +if (!(_curTarget in life_vehicles) || isNil {_curTarget getVariable "house_owner"}) then { + _Btn1 ctrlSetText localize "STR_pInAct_BuyHouse"; + _Btn1 buttonSetAction "[life_pInact_curTarget] spawn life_fnc_buyHouse;"; + _Btn1 ctrlShow true; + + if (!isNil {_curTarget getVariable "house_owner"}) then { + _Btn1 ctrlEnable false; + }; +} else { + if ((typeOf _curTarget) in ["Land_i_Garage_V1_F","Land_i_Garage_V2_F"]) then { + _Btn1 ctrlSetText localize "STR_pInAct_SellGarage"; + _Btn1 buttonSetAction "[life_pInact_curTarget] spawn life_fnc_sellHouse; closeDialog 0;"; + _Btn1 ctrlShow true; + + if (((_curTarget getVariable "house_owner") select 0) != getPlayerUID player) then { + _Btn1 ctrlEnable false; + }; + + _Btn2 ctrlSetText localize "STR_pInAct_AccessGarage"; + _Btn2 buttonSetAction "[life_pInact_curTarget,""Car""] spawn life_fnc_vehicleGarage; closeDialog 0;"; + _Btn2 ctrlShow true; + + _Btn3 ctrlSetText localize "STR_pInAct_StoreVeh"; + _Btn3 buttonSetAction "[life_pInact_curTarget,player] spawn life_fnc_storeVehicle; closeDialog 0;"; + _Btn3 ctrlShow true; + } else { + _Btn1 ctrlSetText localize "STR_pInAct_SellHouse"; + _Btn1 buttonSetAction "[life_pInact_curTarget] spawn life_fnc_sellHouse; closeDialog 0;"; + _Btn1 ctrlShow true; + + if (((_curTarget getVariable "house_owner") select 0) != (getPlayerUID player)) then { + _Btn1 ctrlEnable false; + }; + + if (_curTarget getVariable ["locked",false]) then { + _Btn2 ctrlSetText localize "STR_pInAct_UnlockStorage"; + } else { + _Btn2 ctrlSetText localize "STR_pInAct_LockStorage"; + }; + _Btn2 buttonSetAction "[life_pInact_curTarget] call life_fnc_lockHouse; closeDialog 0;"; + _Btn2 ctrlShow true; + + if (isNull (_curTarget getVariable ["lightSource",objNull])) then { + _Btn3 ctrlSetText localize "STR_pInAct_LightsOn"; + } else { + _Btn3 ctrlSetText localize "STR_pInAct_LightsOff"; + }; + _Btn3 buttonSetAction "[life_pInact_curTarget] call life_fnc_lightHouseAction; closeDialog 0;"; + _Btn3 ctrlShow true; + }; +}; diff --git a/life_client/core/housing/fn_initHouses.sqf b/life_client/core/housing/fn_initHouses.sqf new file mode 100644 index 00000000..90c60491 --- /dev/null +++ b/life_client/core/housing/fn_initHouses.sqf @@ -0,0 +1,21 @@ +/* + File: fn_initHouses.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Initializes the players houses, mainly throwing down markers. +*/ +if (life_houses isEqualTo []) exitWith {}; //Nothing to do. + +{ + _position = call compile format["%1",_x select 0]; + _house = nearestObject [_position, "House"]; + _house setVariable ["uid",round(random 99999),true]; + _houseName = getText(configFile >> "CfgVehicles" >> (typeOf _house) >> "displayName"); + + _marker = createMarkerLocal [format["house_%1",(_house getVariable "uid")],_position]; + _marker setMarkerTextLocal _houseName; + _marker setMarkerColorLocal "ColorBlue"; + _marker setMarkerTypeLocal "loc_Lighthouse"; + +} forEach life_houses; diff --git a/life_client/core/housing/fn_lightHouse.sqf b/life_client/core/housing/fn_lightHouse.sqf new file mode 100644 index 00000000..ebdab473 --- /dev/null +++ b/life_client/core/housing/fn_lightHouse.sqf @@ -0,0 +1,44 @@ +/* + File: fn_lightHouse.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Tells clients to either turn the lights on for that house + or off. +*/ +private["_lightSource","_exit"]; +params [ + ["_house",objNull,[objNull]], + ["_mode",false,[false]] +]; + + +if (isNull _house) exitWith {}; +if (!(_house isKindOf "House_F")) exitWith {}; + +_exit = false; +if (_mode) then { + _lightSource = "#lightpoint" createVehicleLocal [0,0,0]; + + switch (true) do { + case ((typeOf _house) in ["Land_i_House_Big_01_V1_F","Land_i_House_Big_01_V2_F","Land_i_House_Big_01_V3_F"]): {_lightSource lightAttachObject [_house,[0,-2,3.8]];}; + case ((typeOf _house) in ["Land_i_House_Big_02_V1_F","Land_i_House_Big_02_V2_F","Land_i_House_Big_02_V3_F"]): {_lightSource lightAttachObject [_house,[2,0,3.5]];}; + case ((typeOf _house) in ["Land_i_House_Small_01_V1_F","Land_i_House_Small_01_V2_F","Land_i_House_Small_01_V3_F"]): {_lightSource lightAttachObject [_house,[-1.5,0,2]]}; + case ((typeOf _house) in ["Land_i_House_Small_02_V1_F","Land_i_House_Small_02_V2_F","Land_i_House_Small_02_V3_F"]): {_lightSource lightAttachObject [_house,[2,0,2.4]]}; + case ((typeOf _house) in ["Land_i_House_Small_03_V1_F","Land_i_House_Small_03_V3_F","Land_i_House_Small_03_V3_F"]): {_lightSource lightAttachObject [_house,[-3.3,1,2.5]];}; + default {_exit = true;}; + }; + if (_exit) exitWith {deleteVehicle _lightSource;}; + + _lightSource setLightColor [250,150,50]; + _lightSource setLightAmbient [1,1,0.2]; + _lightSource setLightAttenuation [1,0,0,0]; + _lightSource setLightIntensity 10; + _lightSource setLightUseFlare true; + _lightSource setLightFlareSize 0.2; + _lightSource setLightFlareMaxDistance 50; + _house setVariable ["lightSource",_lightSource]; +} else { + if (isNull (_house getVariable ["lightSource",objNull])) exitWith {}; + deleteVehicle (_house getVariable ["lightSource",objNull]); +}; \ No newline at end of file diff --git a/life_client/core/housing/fn_lightHouseAction.sqf b/life_client/core/housing/fn_lightHouseAction.sqf new file mode 100644 index 00000000..8a29007e --- /dev/null +++ b/life_client/core/housing/fn_lightHouseAction.sqf @@ -0,0 +1,18 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_lightHouseAction.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Lights up the house. +*/ +private "_house"; +_house = param [0,objNull,[objNull]]; +if (isNull _house) exitWith {}; +if (!(_house isKindOf "House_F")) exitWith {}; + +if (isNull (_house getVariable ["lightSource",objNull])) then { + [_house,true] remoteExecCall ["life_fnc_lightHouse",RCLIENT]; +} else { + [_house,false] remoteExecCall ["life_fnc_lightHouse",RCLIENT]; +}; \ No newline at end of file diff --git a/life_client/core/housing/fn_lockHouse.sqf b/life_client/core/housing/fn_lockHouse.sqf new file mode 100644 index 00000000..7c92b68b --- /dev/null +++ b/life_client/core/housing/fn_lockHouse.sqf @@ -0,0 +1,20 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_lockHouse.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Unlocks / locks the house. +*/ +private["_house"]; +_house = param [0,objNull,[objNull]]; +if (isNull _house || !(_house isKindOf "House_F")) exitWith {}; + +_state = _house getVariable ["locked",true]; +if (_state) then { + _house setVariable ["locked",false,true]; + titleText[localize "STR_House_StorageUnlock","PLAIN"]; +} else { + _house setVariable ["locked",true,true]; + titleText[localize "STR_House_StorageLock","PLAIN"]; +}; \ No newline at end of file diff --git a/life_client/core/housing/fn_lockupHouse.sqf b/life_client/core/housing/fn_lockupHouse.sqf new file mode 100644 index 00000000..ffef78f7 --- /dev/null +++ b/life_client/core/housing/fn_lockupHouse.sqf @@ -0,0 +1,26 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_lockupHouse.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Locks up the entire house and closes all doors. +*/ +private["_house"]; +_house = param [0,objNull,[objNull]]; +if (isNull _house || !(_house isKindOf "House_F")) exitWith {}; + +_numberOfDoors = FETCH_CONFIG2(getNumber,"CfgVehicles",(typeOf _house), "numberOfDoors"); + +if (_numberOfDoors isEqualTo -1 || _numberOfDoors isEqualTo 0) exitWith {}; //MEH + +titleText [localize "STR_House_LockingUp","PLAIN"]; +sleep 3; + +for "_i" from 1 to _numberOfDoors do { + _house animate[format["door_%1_rot",_i],0]; + _house setVariable [format["bis_disabled_Door_%1",_i],1,true]; +}; + +_house setVariable ["locked",true,true]; +titleText[localize "STR_House_LockedUp","PLAIN"]; diff --git a/life_client/core/housing/fn_placeContainer.sqf b/life_client/core/housing/fn_placeContainer.sqf new file mode 100644 index 00000000..364e2471 --- /dev/null +++ b/life_client/core/housing/fn_placeContainer.sqf @@ -0,0 +1,72 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_placeContainer.sqf + Author: NiiRoZz + Credits: BoGuu + + Description: + Check container if are in house and if house are owner of player and if all this conditions are true add container in database +*/ +private["_container","_isFloating","_type","_house","_containers","_houseCfg","_message","_isPlaced"]; +params [ + ["_container",objNull,[objNull]], + ["_isFloating",true,[true]] +]; + +_uid = getPlayerUID player; +_house = nearestObject [player, "House"]; + +switch (true) do { + case (typeOf _container isEqualTo "B_supplyCrate_F"): {_type = "storagebig"}; + case (typeOf _container isEqualTo "Box_IND_Grenades_F") : {_type = "storagesmall"}; + default {_type = ""}; +}; + +_message = 0; +_isPlaced = false; +if (!isNull _house) then { + _message = 1; + if (([player] call life_fnc_playerInBuilding) && {([_container] call life_fnc_playerInBuilding)}) then { + _message = 2; + if ((_house in life_vehicles) && !(isNil {_house getVariable "house_owner"})) then { + _message = 3; + if (!_isFloating) then { + _message = 4; + _containers = _house getVariable ["containers",[]]; + _houseCfg = [(typeOf _house)] call life_fnc_houseConfig; + if (_houseCfg isEqualTo []) exitWith {}; + if (count _containers < (_houseCfg select 1)) then { + _isPlaced = true; + if (life_HC_isActive) then { + [_uid,_container] remoteExec ["HC_fnc_addContainer",HC_Life]; + } else { + [_uid,_container] remoteExec ["TON_fnc_addContainer",RSERV]; + }; + _container setVariable ["Trunk",[[],0],true]; + _container setVariable ["container_owner",[_uid],true]; + _containers pushBack _container; + _house setVariable ["containers",_containers,true]; + sleep 1; + }; + }; + }; + }; +}; + +if (_isPlaced) exitWith {}; + +deleteVehicle _container; +[true,_type,1] call life_fnc_handleInv; + +if (_message isEqualTo 0 || _message isEqualTo 1) then { + hint localize "STR_House_Container_House_Near"; +}; +if (_message isEqualTo 2) then { + hint localize "STR_House_Container_House_Near_Owner"; +}; +if (_message isEqualTo 3) then { + hint localize "STR_House_Container_Floating"; +}; +if (_message isEqualTo 4) then { + hint localize "STR_ISTR_Box_HouseFull"; +}; \ No newline at end of file diff --git a/life_client/core/housing/fn_playerInBuilding.sqf b/life_client/core/housing/fn_playerInBuilding.sqf new file mode 100644 index 00000000..e904f176 --- /dev/null +++ b/life_client/core/housing/fn_playerInBuilding.sqf @@ -0,0 +1,65 @@ +/* + File: fn_playerInBuilding.sqf + Author: Mad_Cheese + + Description: + Indicates whether a player is in a building. + Edit: BoGuu - lineIntersectsWith returns an array ordered by distance from farthest to closest. + Script needed to check the last index for each wallCheck array. + + Parameter(s): + 0: OBJECT - Unit + + Returns: + BOOL - True if player is in a building, else false + + Example + //--- Find if a unit is in building + [player] call life_fnc_playerInBuilding +*/ + +private ["_unit","_position","_roofCheck","_return"]; + +_unit = _this select 0; +_position = getposASL _unit; +_eyePosition = eyePos _unit; +_return = false; +_array = []; + +_roof = [_eyePosition select 0,_eyePosition select 1, (_eyePosition select 2) + 20]; +_floor = [_eyePosition select 0,_eyePosition select 1, (_eyePosition select 2) - 5]; +_wallFront = [(_eyePosition select 0) + (((50)*sin(getDir _unit))), (_eyePosition select 1) + ((50)*cos(getDir _unit)),(_eyePosition select 2)]; +_wallBack = [(_eyePosition select 0) + (((-50)*sin(getDir _unit))), (_eyePosition select 1) + ((-50)*cos(getDir _unit)),(_eyePosition select 2)]; +_wallRight = [(_eyePosition select 0) + (((50)*sin(getDir _unit + 90))), (_eyePosition select 1) + ((0)*cos(getDir _unit)),(_eyePosition select 2)]; +_wallLeft = [(_eyePosition select 0) + (((-50)*sin(getDir _unit + 90))), (_eyePosition select 1) + ((0)*cos(getDir _unit)),(_eyePosition select 2)]; + +_roofCheck = lineIntersectsWith [_eyePosition,_roof,_unit,_unit,true]; + +if (_roofCheck isEqualTo []) exitWith { + _return +}; + +_floorCheck = lineIntersectsWith [_eyePosition,_floor,_unit,_unit,true]; +_wallCheck_Front = lineIntersectsWith [_eyePosition,_wallFront,_unit,_unit,true]; +_wallCheck_Back = lineIntersectsWith [_eyePosition,_wallBack,_unit,_unit,true]; +_wallCheck_Right = lineIntersectsWith [_eyePosition,_wallRight,_unit,_unit,true]; +_wallCheck_Left = lineIntersectsWith [_eyePosition,_wallLeft,_unit,_unit,true]; + +if ((_roofCheck select 0) isKindOf "House_F") then { + { + _index = (count _x) - 1; + if (_index > -1) then { + if ((_x select _index) isKindOf "House_F") then { + _array pushBack (_x select _index); + }; + }; + } forEach [_wallCheck_Front,_wallCheck_Back,_wallCheck_Right,_wallCheck_Left,_floorCheck]; + + if ({_x == (_roofCheck select 0)} count _array >= 3) then { + _return = true; + } else { + _return = false; + }; +}; + +_return; diff --git a/life_client/core/housing/fn_sellHouse.sqf b/life_client/core/housing/fn_sellHouse.sqf new file mode 100644 index 00000000..2bddf4a6 --- /dev/null +++ b/life_client/core/housing/fn_sellHouse.sqf @@ -0,0 +1,82 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_sellHouse.sqf + Author: Bryan "Tonic" Boardwine + Modified : NiiRoZz + + Description: + Sells the house and delete all container near house. +*/ +private["_house","_uid","_action","_houseCfg"]; +if ((time - life_action_delay) < 2) exitWith {hint localize "STR_NOTF_ActionDelay"}; +life_action_delay = time; +_house = param [0,objNull,[objNull]]; +_uid = getPlayerUID player; + +if (isNull _house) exitWith {}; +if (!(_house isKindOf "House_F")) exitWith {}; +if (isNil {_house getVariable "house_owner"}) exitWith {hint localize "STR_House_noOwner";}; +closeDialog 0; + +_houseCfg = [(typeOf _house)] call life_fnc_houseConfig; +if (count _houseCfg isEqualTo 0) exitWith {}; + +_action = [ + format[localize "STR_House_SellHouseMSG", + (round((_houseCfg select 0)/2)) call life_fnc_numberText, + (_houseCfg select 1)],localize "STR_pInAct_SellHouse",localize "STR_Global_Sell",localize "STR_Global_Cancel" +] call BIS_fnc_guiMessage; + +if (_action) then { + _house setVariable ["house_sold",true,true]; + + if (life_HC_isActive) then { + [_house] remoteExecCall ["HC_fnc_sellHouse",HC_Life]; + } else { + [_house] remoteExecCall ["TON_fnc_sellHouse",RSERV]; + }; + + _house setVariable ["locked",false,true]; + deleteMarkerLocal format["house_%1",_house getVariable "uid"]; + _house setVariable ["uid",nil,true]; + + BANK = BANK + (round((_houseCfg select 0)/2)); + [1] call SOCK_fnc_updatePartial; + _index = life_vehicles find _house; + + if (LIFE_SETTINGS(getNumber,"player_advancedLog") isEqualTo 1) then { + if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then { + advanced_log = format [localize "STR_DL_AL_soldHouse_BEF",(round((_houseCfg select 0)/2)),[BANK] call life_fnc_numberText]; + } else { + advanced_log = format [localize "STR_DL_AL_soldHouse",profileName,(getPlayerUID player),(round((_houseCfg select 0)/2)),[BANK] call life_fnc_numberText]; + }; + publicVariableServer "advanced_log"; + }; + + if (_index != -1) then { + life_vehicles deleteAt _index; + }; + + _index = [str(getPosATL _house),life_houses] call TON_fnc_index; + if (_index != -1) then { + life_houses deleteAt _index; + }; + _numOfDoors = FETCH_CONFIG2(getNumber,"CfgVehicles",(typeOf _house), "numberOfDoors"); + for "_i" from 1 to _numOfDoors do { + _house setVariable [format["bis_disabled_Door_%1",_i],0,true]; + }; + _containers = _house getVariable ["containers",[]]; + if (count _containers > 0) then { + { + _x setVariable ["Trunk",nil,true]; + + if (life_HC_isActive) then { + [_x] remoteExecCall ["HC_fnc_sellHouseContainer",HC_Life]; + } else { + [_x] remoteExecCall ["TON_fnc_sellHouseContainer",RSERV]; + }; + + } forEach _containers; + }; + _house setVariable ["containers",nil,true]; +}; diff --git a/life_client/core/init.sqf b/life_client/core/init.sqf new file mode 100644 index 00000000..8335bea5 --- /dev/null +++ b/life_client/core/init.sqf @@ -0,0 +1,162 @@ +#include "..\script_macros.hpp" +/* + File: init.sqf + Author: + + Description: + Master client initialization file +*/ + +private["_handle","_timeStamp","_server_isReady","_extDB_notLoaded"]; +life_firstSpawn = true; +life_session_completed = false; +0 cutText[localize "STR_Init_ClientSetup","BLACK FADED"]; +0 cutFadeOut 9999999; +_timeStamp = diag_tickTime; +diag_log "----------------------------------------------------------------------------------------------------"; +diag_log "--------------------------------- Starting Altis Life Client Init ----------------------------------"; +diag_log "------------------------------------------ Version 4.4R3 -------------------------------------------"; +diag_log "----------------------------------------------------------------------------------------------------"; +waitUntil {!isNull player && player == player}; //Wait till the player is ready +[] call compile PreprocessFileLineNumbers "core\clientValidator.sqf"; +enableSentences false; + +//Setup initial client core functions +diag_log "::Life Client:: Initialization Variables"; +[] call compile PreprocessFileLineNumbers "core\configuration.sqf"; + +//Set bank amount for new players +switch (playerSide) do { + case west: { + life_paycheck = LIFE_SETTINGS(getNumber,"paycheck_cop"); + }; + case civilian: { + life_paycheck = LIFE_SETTINGS(getNumber,"paycheck_civ"); + }; + case independent: { + life_paycheck = LIFE_SETTINGS(getNumber,"paycheck_med"); + }; +}; + +diag_log "::Life Client:: Variables initialized"; +diag_log "::Life Client:: Setting up Eventhandlers"; +[] call life_fnc_setupEVH; + +diag_log "::Life Client:: Eventhandlers completed"; +diag_log "::Life Client:: Setting up user actions"; +[] call life_fnc_setupActions; + +diag_log "::Life Client:: User actions completed"; +diag_log "::Life Client:: Waiting for server functions to transfer.."; +waitUntil {(!isNil "TON_fnc_clientGangLeader")}; + +diag_log "::Life Client:: Received server functions."; +0 cutText [localize "STR_Init_ServerReady","BLACK FADED"]; +0 cutFadeOut 99999999; + +diag_log "::Life Client:: Waiting for the server to be ready.."; +waitUntil{!isNil "life_HC_isActive"}; +if (life_HC_isActive) then { + waitUntil{!isNil "life_HC_server_isReady" && !isNil "life_HC_server_extDB_notLoaded"}; + _server_isReady = life_HC_server_isReady; + _extDB_notLoaded = life_HC_server_extDB_notLoaded; +} else { + waitUntil{!isNil "life_server_isReady" && !isNil "life_server_extDB_notLoaded"}; + _server_isReady = life_server_isReady; + _extDB_notLoaded = life_server_extDB_notLoaded; +}; + +waitUntil{_server_isReady}; +if (_extDB_notLoaded isEqualType []) exitWith { + diag_log (_extDB_notLoaded select 1); + 999999 cutText [localize "STR_Init_ExtdbFail","BLACK FADED"]; + 999999 cutFadeOut 99999999; +}; + +[] call SOCK_fnc_dataQuery; +waitUntil {life_session_completed}; +0 cutText[localize "STR_Init_ClientFinish","BLACK FADED"]; +0 cutFadeOut 9999999; + +//diag_log "::Life Client:: Group Base Execution"; +[] spawn life_fnc_escInterupt; + +switch (playerSide) do { + case west: { + _handle = [] spawn life_fnc_initCop; + waitUntil {scriptDone _handle}; + }; + case civilian: { + //Initialize Civilian Settings + _handle = [] spawn life_fnc_initCiv; + waitUntil {scriptDone _handle}; + }; + case independent: { + //Initialize Medics and blah + _handle = [] spawn life_fnc_initMedic; + waitUntil {scriptDone _handle}; + }; +}; + +player setVariable ["restrained",false,true]; +player setVariable ["Escorting",false,true]; +player setVariable ["transporting",false,true]; +player setVariable ["playerSurrender",false,true]; + +diag_log "Past Settings Init"; +[] execFSM "core\fsm\client.fsm"; + +diag_log "Executing client.fsm"; +waitUntil {!(isNull (findDisplay 46))}; + +diag_log "Display 46 Found"; +(findDisplay 46) displayAddEventHandler ["KeyDown", "_this call life_fnc_keyHandler"]; +player addRating 99999999; + +[player,life_settings_enableSidechannel,playerSide] remoteExecCall ["TON_fnc_manageSC",RSERV]; +0 cutText ["","BLACK IN"]; +[] call life_fnc_hudSetup; + +/* Set up frame-by-frame handlers */ +LIFE_ID_PlayerTags = ["LIFE_PlayerTags","onEachFrame","life_fnc_playerTags"] call BIS_fnc_addStackedEventHandler; +LIFE_ID_RevealObjects = ["LIFE_RevealObjects","onEachFrame","life_fnc_revealObjects"] call BIS_fnc_addStackedEventHandler; + +player setVariable ["steam64ID",getPlayerUID player]; +player setVariable ["realname",profileName,true]; + +life_fnc_moveIn = compileFinal +" + life_disable_getIn = false; + player moveInCargo (_this select 0); + life_disable_getOut = true; +"; + +life_fnc_RequestClientId = player; +publicVariableServer "life_fnc_RequestClientId"; //Variable OwnerID for HeadlessClient + +[] spawn life_fnc_survival; + +[] spawn { + for "_i" from 0 to 1 step 0 do { + waitUntil{(!isNull (findDisplay 49)) && (!isNull (findDisplay 602))}; // Check if Inventory and ESC dialogs are open + (findDisplay 49) closeDisplay 2; // Close ESC dialog + (findDisplay 602) closeDisplay 2; // Close Inventory dialog + }; +}; + +CONSTVAR(life_paycheck); //Make the paycheck static. +if (LIFE_SETTINGS(getNumber,"enable_fatigue") isEqualTo 0) then {player enableFatigue false;}; + +if (LIFE_SETTINGS(getNumber,"pump_service") isEqualTo 1) then{ + [] execVM "core\fn_setupStationService.sqf"; +}; + +if (life_HC_isActive) then { + [getPlayerUID player,player getVariable ["realname",name player]] remoteExec ["HC_fnc_wantedProfUpdate",HC_Life]; +} else { + [getPlayerUID player,player getVariable ["realname",name player]] remoteExec ["life_fnc_wantedProfUpdate",RSERV]; +}; + +diag_log "----------------------------------------------------------------------------------------------------"; +diag_log format[" End of Altis Life Client Init :: Total Execution Time %1 seconds ",(diag_tickTime) - _timeStamp]; +diag_log "----------------------------------------------------------------------------------------------------"; diff --git a/life_client/core/items/fn_blastingCharge.sqf b/life_client/core/items/fn_blastingCharge.sqf new file mode 100644 index 00000000..ca36704b --- /dev/null +++ b/life_client/core/items/fn_blastingCharge.sqf @@ -0,0 +1,27 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_blastingCharge.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Blasting charge is used for the federal reserve vault and nothing more.. Yet. +*/ +private["_vault","_handle"]; +_vault = param [0,ObjNull,[ObjNull]]; + +if (isNull _vault) exitWith {}; //Bad object +if (typeOf _vault != "Land_CargoBox_V1_F") exitWith {hint localize "STR_ISTR_Blast_VaultOnly"}; +if (_vault getVariable ["chargeplaced",false]) exitWith {hint localize "STR_ISTR_Blast_AlreadyPlaced"}; +if (_vault getVariable ["safe_open",false]) exitWith {hint localize "STR_ISTR_Blast_AlreadyOpen"}; +if (west countSide playableUnits < (LIFE_SETTINGS(getNumber,"minimum_cops"))) exitWith { + hint format [localize "STR_Civ_NotEnoughCops",(LIFE_SETTINGS(getNumber,"minimum_cops"))] +}; +if ((nearestObject [[16019.5,16952.9,0],"Land_Research_house_V1_F"]) getVariable ["locked",true]) exitWith {hint localize "STR_ISTR_Blast_Exploit"}; +if (!([false,"blastingcharge",1] call life_fnc_handleInv)) exitWith {}; //Error? + +_vault setVariable ["chargeplaced",true,true]; +[0,"STR_ISTR_Blast_Placed"] remoteExecCall ["life_fnc_broadcast",west]; +hint localize "STR_ISTR_Blast_KeepOff"; + +[] remoteExec ["life_fnc_demoChargeTimer",[west,player]]; +[] remoteExec ["TON_fnc_handleBlastingCharge",2]; diff --git a/life_client/core/items/fn_boltcutter.sqf b/life_client/core/items/fn_boltcutter.sqf new file mode 100644 index 00000000..fe267e82 --- /dev/null +++ b/life_client/core/items/fn_boltcutter.sqf @@ -0,0 +1,98 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_boltcutter.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Breaks the lock on a single door (Closet door to the player). +*/ +private["_building","_door","_doors","_cpRate","_title","_progressBar","_titleText","_cp","_ui"]; +_building = param [0,objNull,[objNull]]; + +if (isNull _building) exitWith {}; +if (!(_building isKindOf "House_F")) exitWith {hint localize "STR_ISTR_Bolt_NotNear";}; +if (((nearestObject [[16019.5,16952.9,0],"Land_Dome_Big_F"]) == _building || (nearestObject [[16019.5,16952.9,0],"Land_Research_house_V1_F"]) == _building) && (west countSide playableUnits < (LIFE_SETTINGS(getNumber,"minimum_cops")))) exitWith { + hint format [localize "STR_Civ_NotEnoughCops",(LIFE_SETTINGS(getNumber,"minimum_cops"))] +}; +if ((typeOf _building) == "Land_Research_house_V1_F" && (nearestObject [[16019.5,16952.9,0],"Land_Dome_Big_F"]) getVariable ["locked",true]) exitWith {hint localize "STR_ISTR_Bolt_Exploit"}; +if (isNil "life_boltcutter_uses") then {life_boltcutter_uses = 0;}; + +_doors = FETCH_CONFIG2(getNumber,"CfgVehicles",(typeOf _building),"numberOfDoors"); +_door = 0; +//Find the nearest door +for "_i" from 1 to _doors do { + _selPos = _building selectionPosition format["Door_%1_trigger",_i]; + _worldSpace = _building modelToWorld _selPos; + if (player distance _worldSpace < 2) exitWith {_door = _i;}; +}; +if (_door isEqualTo 0) exitWith {hint localize "STR_Cop_NotaDoor"}; //Not near a door to be broken into. +if ((_building getVariable [format["bis_disabled_Door_%1",_door],0]) isEqualTo 0) exitWith {hint localize "STR_House_Raid_DoorUnlocked"}; + +if ((nearestObject [[16019.5,16952.9,0],"Land_Dome_Big_F"]) == _building || (nearestObject [[16019.5,16952.9,0],"Land_Research_house_V1_F"]) == _building) then { + [[1,2],"STR_ISTR_Bolt_AlertFed",true,[]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; +} else { + [0,"STR_ISTR_Bolt_AlertHouse",true,[profileName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; +}; + +life_action_inUse = true; +//Setup the progress bar +disableSerialization; +_title = localize "STR_ISTR_Bolt_Process"; +5 cutRsc ["life_progress","PLAIN"]; +_ui = uiNamespace getVariable "life_progress"; +_progressBar = _ui displayCtrl 38201; +_titleText = _ui displayCtrl 38202; +_titleText ctrlSetText format["%2 (1%1)...","%",_title]; +_progressBar progressSetPosition 0.01; +_cP = 0.01; + +switch (typeOf _building) do { + case "Land_Dome_Big_F": {_cpRate = 0.003;}; + case "Land_Research_house_V1_F": {_cpRate = 0.0015;}; + default {_cpRate = 0.08;} +}; + +for "_i" from 0 to 1 step 0 do { + if (animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { + [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; + player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; + player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; + }; + sleep 0.26; + if (isNull _ui) then { + 5 cutRsc ["life_progress","PLAIN"]; + _ui = uiNamespace getVariable "life_progress"; + _progressBar = _ui displayCtrl 38201; + _titleText = _ui displayCtrl 38202; + }; + _cP = _cP + _cpRate; + _progressBar progressSetPosition _cP; + _titleText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_title]; + if (_cP >= 1 || !alive player) exitWith {}; + if (life_istazed) exitWith {}; //Tazed + if (life_isknocked) exitWith {}; //Knocked + if (life_interrupted) exitWith {}; +}; + +//Kill the UI display and check for various states +5 cutText ["","PLAIN"]; +player playActionNow "stop"; +if (!alive player || life_istazed || life_isknocked) exitWith {life_action_inUse = false;}; +if (player getVariable ["restrained",false]) exitWith {life_action_inUse = false;}; +if (life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; +life_boltcutter_uses = life_boltcutter_uses + 1; +life_action_inUse = false; + +if (life_boltcutter_uses >= 5) then { + [false,"boltcutter",1] call life_fnc_handleInv; + life_boltcutter_uses = 0; +}; + +_building setVariable [format["bis_disabled_Door_%1",_door],0,true]; //Unlock the door. +_building setVariable ["locked",false,true]; + +if (life_HC_isActive) then { + [getPlayerUID player,profileName,"459"] remoteExecCall ["HC_fnc_wantedAdd",HC_Life]; +} else { + [getPlayerUID player,profileName,"459"] remoteExecCall ["life_fnc_wantedAdd",RSERV]; +}; diff --git a/life_client/core/items/fn_defuseKit.sqf b/life_client/core/items/fn_defuseKit.sqf new file mode 100644 index 00000000..cc0f6165 --- /dev/null +++ b/life_client/core/items/fn_defuseKit.sqf @@ -0,0 +1,57 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_defuseKit.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Defuses blasting charges for the cops? +*/ +private["_vault","_ui","_title","_progressBar","_cP","_titleText"]; +_vault = param [0,objNull,[objNull]]; + +if (isNull _vault) exitWith {}; +if (typeOf _vault != "Land_CargoBox_V1_F") exitWith {hint localize "STR_ISTR_defuseKit_NotNear"}; +if (!(_vault getVariable ["chargeplaced",false])) exitWith {hint localize "STR_ISTR_Defuse_Nothing"}; + +life_action_inUse = true; +//Setup the progress bar +disableSerialization; + +_title = localize "STR_ISTR_Defuse_Process"; +5 cutRsc ["life_progress","PLAIN"]; +_ui = uiNamespace getVariable "life_progress"; +_progressBar = _ui displayCtrl 38201; +_titleText = _ui displayCtrl 38202; +_titleText ctrlSetText format["%2 (1%1)...","%",_title]; +_progressBar progressSetPosition 0.01; +_cP = 0.01; + +for "_i" from 0 to 1 step 0 do { + if (animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { + [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; + player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; + player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; + }; + sleep 0.26; + if (isNull _ui) then { + 5 cutRsc ["life_progress","PLAIN"]; + _ui = uiNamespace getVariable "life_progress"; + _progressBar = _ui displayCtrl 38201; + _titleText = _ui displayCtrl 38202; + }; + _cP = _cP + .0035; + _progressBar progressSetPosition _cP; + _titleText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_title]; + if (_cP >= 1 || !alive player) exitWith {}; + if (life_interrupted) exitWith {}; +}; + +//Kill the UI display and check for various states +5 cutText ["","PLAIN"]; +player playActionNow "stop"; +if (!alive player) exitWith {life_action_inUse = false;}; +if (life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; + +life_action_inUse = false; +_vault setVariable ["chargeplaced",false,true]; +[0,localize "STR_ISTR_Defuse_Success"] remoteExecCall ["life_fnc_broadcast",west]; \ No newline at end of file diff --git a/life_client/core/items/fn_flashbang.sqf b/life_client/core/items/fn_flashbang.sqf new file mode 100644 index 00000000..f34b8173 --- /dev/null +++ b/life_client/core/items/fn_flashbang.sqf @@ -0,0 +1,64 @@ +/* + File: fn_flashbang.sqf + Author: + + Description: + Handles flash-banging yeahhhh.. +*/ +private["_pos","_eyeDir","_pPos","_impactPos","_norm","_angle","_blurEffect","_ppEffect"]; +_pos = param [0,[],[[]]]; +if (_pos isEqualTo []) exitWith {}; //Badddd +if (player distance _pos > 25) exitWith {}; //Bad again. + +_pos set[2,(_pos select 2)+0.2]; +if (lineIntersects [eyePos player, ATLtoASL _pos,player]) exitWith {}; + +_eyeDir = eyeDirection player; +_pPos = getPosATL player; +_impactPos = [(_pos select 0)-(_pPos select 0),(_pos select 1)-(_pPos select 1),(_pos select 2)-(_pPos select 2)]; +_norm = sqrt((_impactPos select 0)^2+(_impactPos select 1)^2+(_impactPos select 2)^2); +_angle = aCos ((_eyeDir select 0)*((_impactPos select 0) / _norm)+((_impactPos select 1) / _norm)*(_eyeDir select 1)+((_impactPos select 2) / _norm)*(_eyeDir select 2)); + +playSound "flashbang"; +_blurEffect = ppEffectCreate ["DynamicBlur",500]; +_blurEffect ppEffectForceInNVG true; +_blurEffect ppEffectEnable true; + +if (_angle < 90) then { + //Create white-screen + _ppEffect = ppEffectCreate ["ColorCorrections",2500]; + _ppEffect ppEffectAdjust [1, 1, -0.01, [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]; + _ppEffect ppEffectCommit 0.1; + _ppEffect ppEffectEnable true; + _ppEffect ppEffectForceInNVG true; + _blurEffect ppEffectAdjust [3]; + _blurEffect ppEffectCommit 0.2; + 23 fadeSound 0.1; + sleep 13; + + _ppEffect ppEffectAdjust [1, 1, -0.02, [4.5, 3.5, 1.6, -0.02],[1.8, 1.6, 1.6, 1],[-1.5,0,-0.2,1]]; + _ppEffect ppEffectCommit 10; + sleep 5; + 15 fadeSound 1; + sleep 5; + _ppEffect ppEffectEnable false; + ppEffectDestroy _ppEffect; + + _blurEffect ppEffectAdjust [0]; + _blurEffect ppEffectCommit 3; + sleep 3; + _blurEffect ppEffectEnable false; + ppEffectDestroy _blurEffect; +} else { + _blurEffect ppEffectAdjust [2.1]; + _blurEffect ppEffectCommit 0.1; + 15 fadeSound 0.25; + sleep 15; + _blurEffect ppEffectAdjust [0]; + _blurEffect ppEffectCommit 10; + sleep 5; + 15 fadeSound 1; + sleep 5; + _blurEffect ppEffectEnable false; + ppEffectDestroy _blurEffect; +}; diff --git a/life_client/core/items/fn_jerryCanRefuel.sqf b/life_client/core/items/fn_jerryCanRefuel.sqf new file mode 100644 index 00000000..69fb3072 --- /dev/null +++ b/life_client/core/items/fn_jerryCanRefuel.sqf @@ -0,0 +1,80 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_jerryCanRefuel.sqf + Author: Bryan "Tonic" Boardwine + Modified: Jesse "tkcjesse" Schultz + + Description: + Refuels the empty fuel canister at a gas pump. Based off the jerryRefuel/lockpick scripts by Tonic. +*/ +private ["_startPos","_badDistance","_title","_ui","_progress","_pgText","_cP","_action","_fuelCost"]; +life_interrupted = false; +if (life_inv_fuelEmpty isEqualTo 0) exitWith {}; +if (count(nearestObjects [player,["Land_FuelStation_Feed_F","Land_fs_feed_F"],3.5]) isEqualTo 0) exitWith { hint localize "STR_ISTR_Jerry_Distance";}; +if (life_action_inUse) exitWith {}; +if ((vehicle player) != player) exitWith {}; +if (player getVariable "restrained") exitWith {hint localize "STR_NOTF_isrestrained";}; +if (player getVariable "playerSurrender") exitWith {hint localize "STR_NOTF_surrender";}; +_fuelCost = LIFE_SETTINGS(getNumber,"fuelCan_refuel"); + +life_action_inUse = true; +_action = [ + format [localize "STR_ISTR_Jerry_PopUp",[_fuelCost] call life_fnc_numberText], + localize "STR_ISTR_Jerry_StationPump", + localize "STR_Global_Yes", + localize "STR_Global_No" +] call BIS_fnc_guiMessage; + +if (_action) then { + if (CASH < _fuelCost) exitWith {hint localize "STR_NOTF_NotEnoughMoney"; life_action_inUse = false;}; + _startPos = getPos player; + //Setup our progress bar. + disableSerialization; + 5 cutRsc ["life_progress","PLAIN"]; + _title = localize "STR_ISTR_Jerry_Refuel"; + _ui = uiNamespace getVariable "life_progress"; + _progress = _ui displayCtrl 38201; + _pgText = _ui displayCtrl 38202; + _pgText ctrlSetText format["%2 (1%1)...","%",_title]; + _progress progressSetPosition 0.01; + _cP = 0.01; + + for "_i" from 0 to 1 step 0 do { + if (animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { + [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; + player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; + player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; + }; + sleep 0.2; + if (isNull _ui) then { + 5 cutRsc ["life_progress","PLAIN"]; + _ui = uiNamespace getVariable "life_progress"; + _progressBar = _ui displayCtrl 38201; + _titleText = _ui displayCtrl 38202; + }; + _cP = _cP + 0.01; + _progress progressSetPosition _cP; + _pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_title]; + if (_cP >= 1) exitWith {}; + if (!alive player) exitWith {life_action_inUse = false;}; + if (life_interrupted) exitWith {life_interrupted = false; life_action_inUse = false;}; + }; + + //Kill the UI display and check for various states + 5 cutText ["","PLAIN"]; + player playActionNow "stop"; + + if (!alive player || life_istazed || life_isknocked) exitWith {life_action_inUse = false;}; + if (player getVariable ["restrained",false]) exitWith {life_action_inUse = false;}; + if (!isNil "_badDistance") exitWith {titleText[localize "STR_ISTR_Lock_TooFar","PLAIN"]; life_action_inUse = false;}; + if (life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; + if (!([false,"fuelEmpty",1] call life_fnc_handleInv)) exitWith {life_action_inUse = false;}; + life_action_inUse = false; + CASH = CASH - _fuelCost; + [true,"fuelFull",1] call life_fnc_handleInv; + hint localize "STR_ISTR_Jerry_Refueled"; +} else { + hint localize "STR_NOTF_ActionCancel"; + closeDialog 0; + life_action_inUse = false; +}; \ No newline at end of file diff --git a/life_client/core/items/fn_jerryRefuel.sqf b/life_client/core/items/fn_jerryRefuel.sqf new file mode 100644 index 00000000..63a2117d --- /dev/null +++ b/life_client/core/items/fn_jerryRefuel.sqf @@ -0,0 +1,87 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_jerryRefuel.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Refuels the vehicle if the player has a fuel can. +*/ +private["_vehicle","_displayName","_upp","_ui","_progress","_pgText","_cP","_previousState"]; +_vehicle = cursorObject; +life_interrupted = false; + +if (isNull _vehicle) exitWith {hint localize "STR_ISTR_Jerry_NotLooking"}; +if (!(_vehicle isKindOF "LandVehicle") && !(_vehicle isKindOf "Air") && !(_vehicle isKindOf "Ship")) exitWith {}; +if (player distance _vehicle > 7.5) exitWith {hint localize "STR_ISTR_Jerry_NotNear"}; + +if (!([false,"fuelFull",1] call life_fnc_handleInv)) exitWith {}; +life_action_inUse = true; + +_displayName = FETCH_CONFIG2(getText,"CfgVehicles",(typeOf _vehicle),"displayName"); + +_upp = format[localize "STR_ISTR_Jerry_Process",_displayName]; + +//Setup our progress bar. +disableSerialization; +5 cutRsc ["life_progress","PLAIN"]; +_ui = uiNamespace getVariable "life_progress"; +_progress = _ui displayCtrl 38201; +_pgText = _ui displayCtrl 38202; +_pgText ctrlSetText format["%2 (1%1)...","%",_upp]; +_progress progressSetPosition 0.01; +_cP = 0.01; + +for "_i" from 0 to 1 step 0 do { + if (animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { + [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; + player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; + player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; + }; + sleep 0.2; + if (isNull _ui) then { + 5 cutRsc ["life_progress","PLAIN"]; + _ui = uiNamespace getVariable "life_progress"; + _progressBar = _ui displayCtrl 38201; + _titleText = _ui displayCtrl 38202; + }; + _cP = _cP + 0.01; + _progress progressSetPosition _cP; + _pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp]; + if (_cP >= 1) exitWith {}; + if (!alive player) exitWith {}; + if (life_interrupted) exitWith {}; +}; +life_action_inUse = false; +5 cutText ["","PLAIN"]; +player playActionNow "stop"; +if (!alive player) exitWith {}; +if (life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"];}; + + +switch (true) do { + case (_vehicle isKindOF "LandVehicle"): { + if (!local _vehicle) then { + [_vehicle,(Fuel _vehicle) + 0.5] remoteExecCall ["life_fnc_setFuel",_vehicle]; + } else { + _vehicle setFuel ((Fuel _vehicle) + 0.5); + }; + }; + + case (_vehicle isKindOf "Air"): { + if (!local _vehicle) then { + [_vehicle,(Fuel _vehicle) + 0.2] remoteExecCall ["life_fnc_setFuel",_vehicle]; + } else { + _vehicle setFuel ((Fuel _vehicle) + 0.2); + }; + }; + + case (_vehicle isKindOf "Ship"): { + if (!local _vehicle) then { + [_vehicle,(Fuel _vehicle) + 0.35] remoteExecCall ["life_fnc_setFuel",_vehicle]; + } else { + _vehicle setFuel ((Fuel _vehicle) + 0.35); + }; + }; +}; +titleText[format[localize "STR_ISTR_Jerry_Success",_displayName],"PLAIN"]; +[true,"fuelEmpty",1] call life_fnc_handleInv; \ No newline at end of file diff --git a/life_client/core/items/fn_lockpick.sqf b/life_client/core/items/fn_lockpick.sqf new file mode 100644 index 00000000..9a174db9 --- /dev/null +++ b/life_client/core/items/fn_lockpick.sqf @@ -0,0 +1,105 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_lockpick.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Main functionality for lock-picking. +*/ +private["_curTarget","_distance","_isVehicle","_title","_progressBar","_cP","_titleText","_dice","_badDistance"]; +_curTarget = cursorObject; +life_interrupted = false; + +if (life_action_inUse) exitWith {}; +if (isNull _curTarget) exitWith {}; //Bad type +_distance = ((boundingBox _curTarget select 1) select 0) + 2; +if (player distance _curTarget > _distance) exitWith {}; //Too far + +_isVehicle = if ((_curTarget isKindOf "LandVehicle") || (_curTarget isKindOf "Ship") || (_curTarget isKindOf "Air")) then {true} else {false}; +if (_isVehicle && _curTarget in life_vehicles) exitWith {hint localize "STR_ISTR_Lock_AlreadyHave"}; + +//More error checks +if (!_isVehicle && !isPlayer _curTarget) exitWith {}; +if (!_isVehicle && !(_curTarget getVariable ["restrained",false])) exitWith {}; +if (_curTarget getVariable "NPC") exitWith {hint localize "STR_NPC_Protected"}; + +_title = format[localize "STR_ISTR_Lock_Process",if (!_isVehicle) then {"Handcuffs"} else {getText(configFile >> "CfgVehicles" >> (typeOf _curTarget) >> "displayName")}]; +life_action_inUse = true; //Lock out other actions + +//Setup the progress bar +disableSerialization; +5 cutRsc ["life_progress","PLAIN"]; +_ui = uiNamespace getVariable "life_progress"; +_progressBar = _ui displayCtrl 38201; +_titleText = _ui displayCtrl 38202; +_titleText ctrlSetText format["%2 (1%1)...","%",_title]; +_progressBar progressSetPosition 0.01; +_cP = 0.01; + +for "_i" from 0 to 1 step 0 do { + if (animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { + [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; + player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; + player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; + }; + + sleep 0.26; + + if (isNull _ui) then { + 5 cutRsc ["life_progress","PLAIN"]; + _ui = uiNamespace getVariable "life_progress"; + _progressBar = _ui displayCtrl 38201; + _titleText = _ui displayCtrl 38202; + }; + _cP = _cP + 0.01; + _progressBar progressSetPosition _cP; + _titleText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_title]; + + if (_cP >= 1 || !alive player) exitWith {}; + if (life_istazed) exitWith {}; //Tazed + if (life_isknocked) exitWith {}; //Knocked + if (life_interrupted) exitWith {}; + if (player getVariable ["restrained",false]) exitWith {}; + if (player distance _curTarget > _distance) exitWith {_badDistance = true;}; +}; + +//Kill the UI display and check for various states +5 cutText ["","PLAIN"]; +player playActionNow "stop"; + +if (!alive player || life_istazed || life_isknocked) exitWith {life_action_inUse = false;}; +if (player getVariable ["restrained",false]) exitWith {life_action_inUse = false;}; +if (!isNil "_badDistance") exitWith {titleText[localize "STR_ISTR_Lock_TooFar","PLAIN"]; life_action_inUse = false;}; +if (life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; +if (!([false,"lockpick",1] call life_fnc_handleInv)) exitWith {life_action_inUse = false;}; + +life_action_inUse = false; + +if (!_isVehicle) then { + _curTarget setVariable ["restrained",false,true]; + _curTarget setVariable ["Escorting",false,true]; + _curTarget setVariable ["transporting",false,true]; +} else { + _dice = random(100); + if (_dice < 30) then { + titleText[localize "STR_ISTR_Lock_Success","PLAIN"]; + life_vehicles pushBack _curTarget; + + if (life_HC_isActive) then { + [getPlayerUID player,profileName,"487"] remoteExecCall ["HC_fnc_wantedAdd",HC_Life]; + } else { + [getPlayerUID player,profileName,"487"] remoteExecCall ["life_fnc_wantedAdd",RSERV]; + }; + + } else { + + if (life_HC_isActive) then { + [getPlayerUID player,profileName,"215"] remoteExecCall ["HC_fnc_wantedAdd",HC_Life]; + } else { + [getPlayerUID player,profileName,"215"] remoteExecCall ["life_fnc_wantedAdd",RSERV]; + }; + + [0,"STR_ISTR_Lock_FailedNOTF",true,[profileName]] remoteExecCall ["life_fnc_broadcast",west]; + titleText[localize "STR_ISTR_Lock_Failed","PLAIN"]; + }; +}; diff --git a/life_client/core/items/fn_placestorage.sqf b/life_client/core/items/fn_placestorage.sqf new file mode 100644 index 00000000..433ffcee --- /dev/null +++ b/life_client/core/items/fn_placestorage.sqf @@ -0,0 +1,29 @@ +#include "..\..\script_macros.hpp" +/* + File : fn_placestorage.sqf + Author: NiiRoZz + + Description: + PLace container were player select with preview + +*/ +private["_container","_isFloating"]; + +if (!life_container_active || life_container_activeObj isEqualTo objNull || !((typeOf life_container_activeObj) in ["B_supplyCrate_F","Box_IND_Grenades_F"])) exitWith {}; + +_container = life_container_activeObj; +_isFloating = if (((getPos _container) select 2) < 0.1) then {false} else {true}; +detach _container; +[_object,true] remoteExecCall ["enableSimulationGlobal", RSERV]; +_container setPosATL [getPosATL _container select 0, getPosATL _container select 1, (getPosATL _container select 2) + 0.7]; +_container allowDamage false; + +if ((typeOf _container) isEqualTo "B_supplyCrate_F") then { + [false,"storagebig",1] call life_fnc_handleInv; +} else { + [false,"storagesmall",1] call life_fnc_handleInv; +}; + +[_container, _isFloating] call life_fnc_placeContainer; +life_container_active = false; +life_container_activeObj = objNull; diff --git a/life_client/core/items/fn_spikeStrip.sqf b/life_client/core/items/fn_spikeStrip.sqf new file mode 100644 index 00000000..625c7407 --- /dev/null +++ b/life_client/core/items/fn_spikeStrip.sqf @@ -0,0 +1,33 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_spikeStrip.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Creates a spike strip and preps it. +*/ +private["_spikeStrip"]; +if (!isNil "life_action_spikeStripPickup") exitWith {hint localize "STR_ISTR_SpikesDeployment"}; // avoid conflicts with addactions allowing duplication. +_spikeStrip = "Land_Razorwire_F" createVehicle [0,0,0]; +_spikeStrip attachTo[player,[0,5.5,0]]; +_spikeStrip setDir 90; +_spikeStrip setVariable ["item","spikeDeployed",true]; + +life_action_spikeStripDeploy = player addAction[localize "STR_ISTR_Spike_Place",{if (!isNull life_spikestrip) then {detach life_spikeStrip; life_spikeStrip = objNull;}; player removeAction life_action_spikeStripDeploy; life_action_spikeStripDeploy = nil;},"",999,false,false,"",'!isNull life_spikestrip']; +life_spikestrip = _spikeStrip; +waitUntil {isNull life_spikeStrip}; + +if (!isNil "life_action_spikeStripDeploy") then {player removeAction life_action_spikeStripDeploy;}; +if (isNull _spikeStrip) exitWith {life_spikestrip = objNull;}; + +_spikeStrip setPos [(getPos _spikeStrip select 0),(getPos _spikeStrip select 1),0]; +_spikeStrip setDamage 1; + +life_action_spikeStripPickup = player addAction[localize "STR_ISTR_Spike_Pack",life_fnc_packupSpikes,"",0,false,false,"", +' _spikes = nearestObjects[getPos player,["Land_Razorwire_F"],8] select 0; !isNil "_spikes" && !isNil {(_spikes getVariable "item")}']; + +if (life_HC_isActive) then { + [_spikeStrip] remoteExec ["HC_fnc_spikeStrip",HC_Life]; //Send it to the HeadlessClient for monitoring. +} else { + [_spikeStrip] remoteExec ["TON_fnc_spikeStrip",RSERV]; //Send it to the server for monitoring. +}; diff --git a/life_client/core/items/fn_storageBox.sqf b/life_client/core/items/fn_storageBox.sqf new file mode 100644 index 00000000..6c523ebc --- /dev/null +++ b/life_client/core/items/fn_storageBox.sqf @@ -0,0 +1,49 @@ +#include "..\..\script_macros.hpp" +/* + File : fn_storageBox.sqf + Author: NiiRoZz + + Description: + Create Storage and attachto player; +*/ +private["_object","_attachPos"]; +params [ + ["_size",false,[false]] +]; +if (!(nearestObject [player, "House"] in life_vehicles)) exitWith {hint localize "STR_ISTR_Box_NotinHouse";}; + +life_container_active = true; +closeDialog 0; + +if (_size) then { + _object = "B_supplyCrate_F" createVehicle [0,0,0]; +} else { + _object = "Box_IND_Grenades_F" createVehicle [0,0,0]; +}; + +life_container_activeObj = _object; +_attachPos = [0.16, 3, ((boundingBoxReal _object) select 1) select 2]; +[_object,false] remoteExecCall ["enableSimulationGlobal", RSERV]; +_object attachTo[player, _attachPos]; + +clearWeaponCargoGlobal _object; +clearMagazineCargoGlobal _object; +clearItemCargoGlobal _object; +clearBackpackCargoGlobal _object; + +titleText [localize "STR_NOTF_PlaceContainer", "PLAIN"]; + +//Loop Prevent running outside with the crate.. +[] spawn { + for "_i" from 0 to 1 step 0 do { + if (!life_container_active || life_container_activeObj isEqualTo objNull || !((typeOf life_container_activeObj) in ["B_supplyCrate_F","Box_IND_Grenades_F"])) exitWith {}; + if (!(nearestObject [player, "House"] in life_vehicles)) exitWith { + hint localize "STR_ISTR_Box_NotinHouse"; + detach life_container_activeObj; + deleteVehicle life_container_activeObj; + life_container_active = false; + life_container_activeObj = objNull; + }; + uiSleep 1; + }; +}; diff --git a/life_client/core/medical/fn_deathScreen.sqf b/life_client/core/medical/fn_deathScreen.sqf new file mode 100644 index 00000000..fdbd96ab --- /dev/null +++ b/life_client/core/medical/fn_deathScreen.sqf @@ -0,0 +1,21 @@ +/* + File: fn_deathScreen.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Handles stuff being displayed on the death screen while + it is currently active. +*/ +private["_medicsOnline","_medicsNear"]; +disableSerialization; + +_medicsOnline = ((findDisplay 7300) displayCtrl 7304); +_medicsNear = ((findDisplay 7300) displayCtrl 7305); + +waitUntil { + _nearby = if (([independent,getPosATL player,120] call life_fnc_nearUnits)) then {"Yes"} else {"No"}; + _medicsOnline ctrlSetText format[localize "STR_Medic_Online",independent countSide playableUnits]; + _medicsNear ctrlSetText format[localize "STR_Medic_Near",_nearby]; + sleep 1; + (isNull (findDisplay 7300)) +}; diff --git a/life_client/core/medical/fn_medicLights.sqf b/life_client/core/medical/fn_medicLights.sqf new file mode 100644 index 00000000..b650fe1b --- /dev/null +++ b/life_client/core/medical/fn_medicLights.sqf @@ -0,0 +1,81 @@ +/* + File: fn_medicLights.sqf + Author: mindstorm, modified by Adanteh + Link: http://forums.bistudio.com/showthread.php?157474-Offroad-Police-sirens-lights-and-underglow + + Description: + Adds the light effect to cop vehicles, specifically the offroad. +*/ +Private ["_vehicle","_lightRed","_lightBlue","_lightleft","_lightright","_leftRed"]; +_vehicle = _this select 0; + +if (isNil "_vehicle" || isNull _vehicle || !(_vehicle getVariable "lights")) exitWith {}; +_lightRed = [0.1, 0.1, 20]; +_lightBlue = [0.1, 0.1, 20]; + +_lightleft = "#lightpoint" createVehicle getPos _vehicle; +sleep 0.2; +_lightleft setLightColor _lightRed; +_lightleft setLightBrightness 0.2; +_lightleft setLightAmbient [0.1,0.1,1]; + +switch (typeOf _vehicle) do +{ + case "C_Offroad_01_F": + { + _lightleft lightAttachObject [_vehicle, [-0.37, 0.0, 0.56]]; + }; +}; + +_lightleft setLightAttenuation [0.181, 0, 1000, 130]; +_lightleft setLightIntensity 10; +_lightleft setLightFlareSize 0.38; +_lightleft setLightFlareMaxDistance 150; +_lightleft setLightUseFlare true; + +_lightright = "#lightpoint" createVehicle getPos _vehicle; +sleep 0.2; +_lightright setLightColor _lightBlue; +_lightright setLightBrightness 0.2; +_lightright setLightAmbient [0.1,0.1,1]; + +switch (typeOf _vehicle) do +{ + case "C_Offroad_01_F": + { + _lightright lightAttachObject [_vehicle, [0.37, 0.0, 0.56]]; + }; +}; + +_lightright setLightAttenuation [0.181, 0, 1000, 130]; +_lightright setLightIntensity 10; +_lightright setLightFlareSize 0.38; +_lightright setLightFlareMaxDistance 150; +_lightright setLightUseFlare true; + +//ARE YOU ALL HAPPY?!?!?!?!?!?!?!?!?%#?@WGD?TGD?BN?ZDHBFD?GA +_lightleft setLightDayLight true; +_lightright setLightDayLight true; + +_leftRed = true; +while{ (alive _vehicle)} do +{ + if (!(_vehicle getVariable "lights")) exitWith {}; + if (_leftRed) then + { + _leftRed = false; + _lightright setLightBrightness 0.0; + sleep 0.05; + _lightleft setLightBrightness 6; + } + else + { + _leftRed = true; + _lightleft setLightBrightness 0.0; + sleep 0.05; + _lightright setLightBrightness 6; + }; + sleep (_this select 1); +}; +deleteVehicle _lightleft; +deleteVehicle _lightright; \ No newline at end of file diff --git a/Altis_Life.Altis/core/medical/fn_medicLoadout.sqf b/life_client/core/medical/fn_medicLoadout.sqf similarity index 77% rename from Altis_Life.Altis/core/medical/fn_medicLoadout.sqf rename to life_client/core/medical/fn_medicLoadout.sqf index 97a1bea2..1b207873 100644 --- a/Altis_Life.Altis/core/medical/fn_medicLoadout.sqf +++ b/life_client/core/medical/fn_medicLoadout.sqf @@ -1,10 +1,10 @@ #include "..\..\script_macros.hpp" /* - File: fn_medicLoadout.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Loads the medic out with the default gear. + File: fn_medicLoadout.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Loads the medic out with the default gear. */ private["_handle"]; _handle = [] spawn life_fnc_stripDownPlayer; diff --git a/life_client/core/medical/fn_medicMarkers.sqf b/life_client/core/medical/fn_medicMarkers.sqf new file mode 100644 index 00000000..c212d481 --- /dev/null +++ b/life_client/core/medical/fn_medicMarkers.sqf @@ -0,0 +1,61 @@ +/* + File: fn_medicMarkers.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Marks downed players on the map when it's open. +*/ +private["_markers","_units","_medics"]; +_markers = []; +_markersMedecin = []; +_units = []; +_medics = []; + +sleep 0.25; +if (visibleMap) then { + {if (side _x isEqualTo independent) then {_medics pushBack _x;}} forEach playableUnits; //Fetch list of cops / blufor + { + _name = _x getVariable "name"; + _down = _x getVariable ["Revive",false]; + if (!isNil "_name" && !_down) then { + _units pushBack _x; + }; + } forEach allDeadMen; + + { + if (_x != player) then { + _markerss = createMarkerLocal [format["%1_marker",_x],visiblePosition _x]; + _markerss setMarkerColorLocal "ColorIndependent"; + _markerss setMarkerTypeLocal "Mil_dot"; + _markerss setMarkerTextLocal format["%1", _x getVariable ["realname",name _x]]; + + _markersMedecin pushBack [_markerss,_x]; + }; + } forEach _medics; + + //Loop through and create markers. + { + _marker = createMarkerLocal [format["%1_dead_marker",_x],visiblePosition _x]; + _marker setMarkerColorLocal "ColorRed"; + _marker setMarkerTypeLocal "loc_Hospital"; + _marker setMarkerTextLocal format["%1",(_x getVariable ["name","Unknown Player"])]; + _markers pushBack _marker; + } forEach _units; + + while {visibleMap} do { + { + private["_unit"]; + _unit = _x select 1; + if (!isNil "_unit" && !isNull _unit) then { + (_x select 0) setMarkerPosLocal (visiblePosition _unit); + }; + } forEach _markersMedecin; + if (!visibleMap) exitWith {}; + sleep 0.02; + }; + {deleteMarkerLocal (_x select 0);} forEach _markersMedecin; + _markersMedecin = []; + _medics = []; + waitUntil {!visibleMap}; + {deleteMarkerLocal _x;} forEach _markers; +}; diff --git a/life_client/core/medical/fn_medicRequest.sqf b/life_client/core/medical/fn_medicRequest.sqf new file mode 100644 index 00000000..99a6f7ae --- /dev/null +++ b/life_client/core/medical/fn_medicRequest.sqf @@ -0,0 +1,16 @@ +/* + File: fn_medicRequest.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Notifies the medics that someone has requested emergency and prompts them + if they want to take the request or not. +*/ +params [ + ["_caller",objNull,[objNull]], + ["_callerName","Unknown Player",[""]] +]; + +if (isNull _caller) exitWith {}; //Bad data + +["MedicalRequestEmerg",[format[localize "STR_Medic_Request",_callerName]]] call BIS_fnc_showNotification; diff --git a/life_client/core/medical/fn_medicSiren.sqf b/life_client/core/medical/fn_medicSiren.sqf new file mode 100644 index 00000000..120b5ad6 --- /dev/null +++ b/life_client/core/medical/fn_medicSiren.sqf @@ -0,0 +1,23 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_medicSiren.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Starts the medic siren sound for other players. +*/ +private["_vehicle"]; +_vehicle = param [0,objNull,[objNull]]; + +if (isNull _vehicle) exitWith {}; +if (isNil {_vehicle getVariable "siren"}) exitWith {}; + +for "_i" from 0 to 1 step 0 do { + if (!(_vehicle getVariable "siren")) exitWith {}; + if (count crew _vehicle isEqualTo 0) then {_vehicle setVariable ["siren",false,true]}; + if (!alive _vehicle) exitWith {}; + if (isNull _vehicle) exitWith {}; + _vehicle say3D "medicSiren";//Class name specified in description.ext + sleep 4.275;//Exactly matches the length of the audio file. + if (!(_vehicle getVariable "siren")) exitWith {}; +}; diff --git a/life_client/core/medical/fn_medicSirenLights.sqf b/life_client/core/medical/fn_medicSirenLights.sqf new file mode 100644 index 00000000..d49b56ad --- /dev/null +++ b/life_client/core/medical/fn_medicSirenLights.sqf @@ -0,0 +1,22 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_sirenLights.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Lets play a game! Can you guess what it does? I have faith in you, if you can't + then you have failed me and therefor I lose all faith in humanity.. No pressure. +*/ +private ["_vehicle","_trueorfalse"]; +_vehicle = param [0,objNull,[objNull]]; +if (isNull _vehicle) exitWith {}; //Bad entry! +if (!(typeOf _vehicle in ["C_Offroad_01_F"])) exitWith {}; //Last chance check to prevent something from defying humanity and creating a monster. + +_trueorfalse = _vehicle getVariable ["lights",false]; + +if (_trueorfalse) then { + _vehicle setVariable ["lights",false,true]; +} else { + _vehicle setVariable ["lights",true,true]; + [_vehicle,0.22] remoteExec ["life_fnc_medicLights",RCLIENT]; +}; \ No newline at end of file diff --git a/life_client/core/medical/fn_onPlayerKilled.sqf b/life_client/core/medical/fn_onPlayerKilled.sqf new file mode 100644 index 00000000..0841901d --- /dev/null +++ b/life_client/core/medical/fn_onPlayerKilled.sqf @@ -0,0 +1,143 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_onPlayerKilled.sqf + Author: Bryan "Tonic" Boardwine + + Description: + When the player dies collect various information about that player + and pull up the death dialog / camera functionality. +*/ +params [ + ["_unit",objNull,[objNull]], + ["_killer",objNull,[objNull]] +]; +disableSerialization; + +if ((vehicle _unit) != _unit) then { + UnAssignVehicle _unit; + _unit action ["getOut", vehicle _unit]; + _unit setPosATL [(getPosATL _unit select 0) + 3, (getPosATL _unit select 1) + 1, 0]; +}; + +//Set some vars +_unit setVariable ["Revive",true,true]; +_unit setVariable ["name",profileName,true]; //Set my name so they can say my name. +_unit setVariable ["restrained",false,true]; +_unit setVariable ["Escorting",false,true]; +_unit setVariable ["transporting",false,true]; +_unit setVariable ["playerSurrender",false,true]; +_unit setVariable ["steam64id",(getPlayerUID player),true]; //Set the UID. + +//Setup our camera view +life_deathCamera = "CAMERA" camCreate (getPosATL _unit); +showCinemaBorder true; +life_deathCamera cameraEffect ["Internal","Back"]; +createDialog "DeathScreen"; +life_deathCamera camSetTarget _unit; +life_deathCamera camSetRelPos [0,3.5,4.5]; +life_deathCamera camSetFOV .5; +life_deathCamera camSetFocus [50,0]; +life_deathCamera camCommit 0; + +(findDisplay 7300) displaySetEventHandler ["KeyDown","if ((_this select 1) isEqualTo 1) then {true}"]; //Block the ESC menu + +//Create a thread for something? +_unit spawn { + private["_maxTime","_RespawnBtn","_Timer"]; + disableSerialization; + _RespawnBtn = ((findDisplay 7300) displayCtrl 7302); + _Timer = ((findDisplay 7300) displayCtrl 7301); + + if (LIFE_SETTINGS(getNumber,"respawn_timer") < 5) then { + _maxTime = time + 5; + } else { + _maxTime = time + LIFE_SETTINGS(getNumber,"respawn_timer"); + }; + _RespawnBtn ctrlEnable false; + waitUntil {_Timer ctrlSetText format[localize "STR_Medic_Respawn",[(_maxTime - time),"MM:SS"] call BIS_fnc_secondsToString]; + round(_maxTime - time) <= 0 || isNull _this}; + _RespawnBtn ctrlEnable true; + _Timer ctrlSetText localize "STR_Medic_Respawn_2"; +}; + +_unit spawn { + private["_requestBtn","_requestTime"]; + disableSerialization; + _requestBtn = ((findDisplay 7300) displayCtrl 7303); + _requestBtn ctrlEnable false; + _requestTime = time + 5; + waitUntil {round(_requestTime - time) <= 0 || isNull _this}; + _requestBtn ctrlEnable true; +}; + +[] spawn life_fnc_deathScreen; + +//Create a thread to follow with some what precision view of the corpse. +[_unit] spawn { + private["_unit"]; + _unit = _this select 0; + waitUntil {if (speed _unit isEqualTo 0) exitWith {true}; life_deathCamera camSetTarget _unit; life_deathCamera camSetRelPos [0,3.5,4.5]; life_deathCamera camCommit 0;}; +}; + +//Make the killer wanted +if (!isNull _killer && {_killer != _unit} && {side _killer != west} && {alive _killer}) then { + if (vehicle _killer isKindOf "LandVehicle") then { + + if (life_HC_isActive) then { + [getPlayerUID _killer,_killer getVariable ["realname",name _killer],"187V"] remoteExecCall ["HC_fnc_wantedAdd",HC_Life]; + } else { + [getPlayerUID _killer,_killer getVariable ["realname",name _killer],"187V"] remoteExecCall ["life_fnc_wantedAdd",RSERV]; + }; + + //Get rid of this if you don't want automatic vehicle license removal. + if (!local _killer) then { + [2] remoteExecCall ["life_fnc_removeLicenses",_killer]; + }; + } else { + + if (life_HC_isActive) then { + [getPlayerUID _killer,_killer getVariable ["realname",name _killer],"187"] remoteExecCall ["HC_fnc_wantedAdd",HC_Life]; + } else { + [getPlayerUID _killer,_killer getVariable ["realname",name _killer],"187"] remoteExecCall ["life_fnc_wantedAdd",RSERV]; + }; + + if (!local _killer) then { + [3] remoteExecCall ["life_fnc_removeLicenses",_killer]; + }; + }; +}; + +life_save_gear = [player] call life_fnc_fetchDeadGear; + +_containers = nearestObjects[getPosATL player,["WeaponHolderSimulated"],5]; +{deleteVehicle _x;} forEach _containers; + +//Killed by cop stuff... +if (side _killer isEqualTo west && playerSide != west) then { + life_copRecieve = _killer; + //Did I rob the federal reserve? + if (!life_use_atm && {CASH > 0}) then { + [format[localize "STR_Cop_RobberDead",[CASH] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; + CASH = 0; + }; +}; + +if (!isNull _killer && {_killer != _unit}) then { + life_removeWanted = true; +}; + +_handle = [_unit] spawn life_fnc_dropItems; +waitUntil {scriptDone _handle}; + +life_hunger = 100; +life_thirst = 100; +life_carryWeight = 0; +CASH = 0; +life_is_alive = false; + +[] call life_fnc_hudUpdate; //Get our HUD updated. +[player,life_settings_enableSidechannel,playerSide] remoteExecCall ["TON_fnc_manageSC",RSERV]; + +[0] call SOCK_fnc_updatePartial; +[3] call SOCK_fnc_updatePartial; +[4] call SOCK_fnc_updatePartial; diff --git a/life_client/core/medical/fn_onPlayerRespawn.sqf b/life_client/core/medical/fn_onPlayerRespawn.sqf new file mode 100644 index 00000000..f0821bc2 --- /dev/null +++ b/life_client/core/medical/fn_onPlayerRespawn.sqf @@ -0,0 +1,31 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_onPlayerRespawn.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Does something but I won't know till I write it... +*/ +private["_unit","_corpse","_containers"]; +_unit = _this select 0; +_corpse = _this select 1; +life_corpse = _corpse; + +//Comment this code out if you want them to keep the weapon on the ground. +_containers = nearestObjects[getPosATL _corpse,["WeaponHolderSimulated"],5]; //Fetch list of containers (Simulated = weapons) +{deleteVehicle _x;} forEach _containers; //Delete the containers. + +//Set some vars on our new body. +_unit setVariable ["restrained",false,true]; +_unit setVariable ["Escorting",false,true]; +_unit setVariable ["transporting",false,true]; +_unit setVariable ["playerSurrender",false,true]; +_unit setVariable ["steam64id",getPlayerUID player,true]; //Reset the UID. +_unit setVariable ["realname",profileName,true]; //Reset the players name. + +_unit addRating 1e12; //Set our rating to a high value, this is for a ARMA engine thing. +player playMoveNow "AmovPpneMstpSrasWrflDnon"; + +[] call life_fnc_setupActions; +[_unit,life_settings_enableSidechannel,playerSide] remoteExecCall ["TON_fnc_manageSC",RSERV]; +if (LIFE_SETTINGS(getNumber,"enable_fatigue") isEqualTo 0) then {player enableFatigue false;}; diff --git a/life_client/core/medical/fn_requestMedic.sqf b/life_client/core/medical/fn_requestMedic.sqf new file mode 100644 index 00000000..b2514b1e --- /dev/null +++ b/life_client/core/medical/fn_requestMedic.sqf @@ -0,0 +1,26 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_requestMedic.sqf + Author: Bryan "Tonic" Boardwine + + Description: + N/A +*/ +private "_medicsOnline"; +_medicsOnline = {_x != player && {side _x isEqualTo independent} && {alive _x}} count playableUnits > 0; //Check if medics (indep) are in the room. + +life_corpse setVariable ["Revive",false,true]; //Set the corpse to a revivable state. +if (_medicsOnline) then { + //There is medics let's send them the request. + [life_corpse,profileName] remoteExecCall ["life_fnc_medicRequest",independent]; +} else { + //No medics were online, send it to the police. + [life_corpse,profileName] remoteExecCall ["life_fnc_medicRequest",west]; +}; + +//Create a thread to monitor duration since last request (prevent spammage). +[] spawn { + ((findDisplay 7300) displayCtrl 7303) ctrlEnable false; + sleep (2 * 60); + ((findDisplay 7300) displayCtrl 7303) ctrlEnable true; +}; diff --git a/life_client/core/medical/fn_respawned.sqf b/life_client/core/medical/fn_respawned.sqf new file mode 100644 index 00000000..98b27f65 --- /dev/null +++ b/life_client/core/medical/fn_respawned.sqf @@ -0,0 +1,87 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_respawned.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Sets the player up if he/she used the respawn option. +*/ +private["_handle"]; +//Reset our weight and other stuff + +life_use_atm = true; +life_hunger = 100; +life_thirst = 100; +life_carryWeight = 0; +CASH = 0; //Make sure we don't get our cash back. +life_respawned = false; +player playMove "AmovPercMstpSnonWnonDnon"; + +life_corpse setVariable ["Revive",nil,true]; +life_corpse setVariable ["name",nil,true]; +life_corpse setVariable ["Reviving",nil,true]; +player setVariable ["Revive",nil,true]; +player setVariable ["name",nil,true]; +player setVariable ["Reviving",nil,true]; + +//Load gear for a 'new life' +switch (playerSide) do +{ + case west: { + _handle = [] spawn life_fnc_copLoadout; + }; + case civilian: { + _handle = [] spawn life_fnc_civLoadout; + }; + case independent: { + _handle = [] spawn life_fnc_medicLoadout; + }; + waitUntil {scriptDone _handle}; +}; + +//Cleanup of weapon containers near the body & hide it. +if (!isNull life_corpse) then { + private "_containers"; + life_corpse setVariable ["Revive",true,true]; + _containers = nearestObjects[life_corpse,["WeaponHolderSimulated"],5]; + {deleteVehicle _x;} forEach _containers; //Delete the containers. + deleteVehicle life_corpse; +}; + +//Destroy our camera... +life_deathCamera cameraEffect ["TERMINATE","BACK"]; +camDestroy life_deathCamera; + +//Bad boy +if (life_is_arrested) exitWith { + hint localize "STR_Jail_Suicide"; + life_is_arrested = false; + [player,true] spawn life_fnc_jail; + [] call SOCK_fnc_updateRequest; +}; + +//Johnny law got me but didn't let the EMS revive me, reward them half the bounty. +if (!isNil "life_copRecieve") then { + + if (life_HC_isActive) then { + [getPlayerUID player,player,life_copRecieve,true] remoteExecCall ["HC_fnc_wantedBounty",HC_Life]; + } else { + [getPlayerUID player,player,life_copRecieve,true] remoteExecCall ["life_fnc_wantedBounty",RSERV]; + }; + + life_copRecieve = nil; +}; + +//So I guess a fellow gang member, cop or myself killed myself so get me off that Altis Most Wanted +if (life_removeWanted) then { + + if (life_HC_isActive) then { + [getPlayerUID player] remoteExecCall ["HC_fnc_wantedRemove",HC_Life]; + } else { + [getPlayerUID player] remoteExecCall ["life_fnc_wantedRemove",RSERV]; + }; + +}; + +[] call SOCK_fnc_updateRequest; +[] call life_fnc_hudUpdate; //Request update of hud. diff --git a/life_client/core/medical/fn_revivePlayer.sqf b/life_client/core/medical/fn_revivePlayer.sqf new file mode 100644 index 00000000..70bf7256 --- /dev/null +++ b/life_client/core/medical/fn_revivePlayer.sqf @@ -0,0 +1,78 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_revivePlayer.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Starts the revive process on the player. +*/ +private["_target","_revivable","_targetName","_ui","_progressBar","_titleText","_cP","_title","_reviveCost"]; +_target = param [0,objNull,[objNull]]; +if (isNull _target) exitWith {}; +_reviveCost = LIFE_SETTINGS(getNumber,"revive_fee"); + +_revivable = _target getVariable ["Revive",false]; +if (_revivable) exitWith {}; +if (_target getVariable ["Reviving",objNull] == player) exitWith {hint localize "STR_Medic_AlreadyReviving";}; +if (player distance _target > 5) exitWith {}; //Not close enough. + +//Fetch their name so we can shout it. +_targetName = _target getVariable ["name","Unknown"]; +_title = format[localize "STR_Medic_Progress",_targetName]; +life_action_inUse = true; //Lockout the controls. + +_target setVariable ["Reviving",player,true]; +//Setup our progress bar +disableSerialization; +5 cutRsc ["life_progress","PLAIN"]; +_ui = uiNamespace getVariable ["life_progress",displayNull]; +_progressBar = _ui displayCtrl 38201; +_titleText = _ui displayCtrl 38202; +_titleText ctrlSetText format["%2 (1%1)...","%",_title]; +_progressBar progressSetPosition 0.01; +_cP = 0.01; + +//Lets reuse the same thing! +for "_i" from 0 to 1 step 0 do { + if (animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { + [player,"AinvPknlMstpSnonWnonDnon_medic_1"] remoteExecCall ["life_fnc_animSync",RCLIENT]; + player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; + }; + + sleep .15; + _cP = _cP + .01; + _progressBar progressSetPosition _cP; + _titleText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_title]; + if (_cP >= 1 || !alive player) exitWith {}; + if (life_istazed) exitWith {}; //Tazed + if (life_isknocked) exitWith {}; //Knocked + if (life_interrupted) exitWith {}; + if (player getVariable ["restrained",false]) exitWith {}; + if (player distance _target > 4) exitWith {_badDistance = true;}; + if (_target getVariable ["Revive",false]) exitWith {}; + if (_target getVariable ["Reviving",objNull] != player) exitWith {}; +}; + +//Kill the UI display and check for various states +5 cutText ["","PLAIN"]; +player playActionNow "stop"; + +if (_target getVariable ["Reviving",objNull] != player) exitWith {hint localize "STR_Medic_AlreadyReviving"}; +_target setVariable ["Reviving",NIL,true]; + +if (!alive player || life_istazed || life_isknocked) exitWith {life_action_inUse = false;}; +if (_target getVariable ["Revive",false]) exitWith {hint localize "STR_Medic_RevivedRespawned"}; +if (player getVariable ["restrained",false]) exitWith {life_action_inUse = false;}; +if (!isNil "_badDistance") exitWith {titleText[localize "STR_Medic_TooFar","PLAIN"]; life_action_inUse = false;}; +if (life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; + +BANK = BANK + _reviveCost; +[1] call SOCK_fnc_updatePartial; + +life_action_inUse = false; +_target setVariable ["Revive",true,true]; +[profileName] remoteExecCall ["life_fnc_revived",_target]; +titleText[format[localize "STR_Medic_RevivePayReceive",_targetName,[_reviveCost] call life_fnc_numberText],"PLAIN"]; + +sleep .6; +player reveal _target; \ No newline at end of file diff --git a/life_client/core/medical/fn_revived.sqf b/life_client/core/medical/fn_revived.sqf new file mode 100644 index 00000000..917608c0 --- /dev/null +++ b/life_client/core/medical/fn_revived.sqf @@ -0,0 +1,46 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_revived.sqf + Author: Bryan "Tonic" Boardwine + + Description: + THANK YOU JESUS I WAS SAVED! +*/ +private["_medic","_dir","_reviveCost"]; +_medic = param [0,"Unknown Medic",[""]]; +_reviveCost = LIFE_SETTINGS(getNumber,"revive_fee"); + +[life_save_gear] spawn life_fnc_loadDeadGear; +life_corpse setVariable ["realname",nil,true]; //Should correct the double name sinking into the ground. +[life_corpse] remoteExecCall ["life_fnc_corpse",RANY]; + +_dir = getDir life_corpse; +hint format[localize "STR_Medic_RevivePay",_medic,[_reviveCost] call life_fnc_numberText]; + +closeDialog 0; +life_deathCamera cameraEffect ["TERMINATE","BACK"]; +camDestroy life_deathCamera; + +//Take fee for services. +if (BANK > _reviveCost) then { + BANK = BANK - _reviveCost; +} else { + BANK = 0; +}; + +//Bring me back to life. +player setDir _dir; +player setPosASL (visiblePositionASL life_corpse); +life_corpse setVariable ["Revive",nil,true]; +life_corpse setVariable ["name",nil,true]; +[life_corpse] remoteExecCall ["life_fnc_corpse",RANY]; +deleteVehicle life_corpse; + +life_is_alive = true; + +player setVariable ["Revive",nil,true]; +player setVariable ["name",nil,true]; +player setVariable ["Reviving",nil,true]; +[] call life_fnc_playerSkins; +[] call life_fnc_hudUpdate; //Request update of hud. +[] call SOCK_fnc_updateRequest; diff --git a/life_client/core/pmenu/fn_altisPhone.sqf b/life_client/core/pmenu/fn_altisPhone.sqf new file mode 100644 index 00000000..3fd4830f --- /dev/null +++ b/life_client/core/pmenu/fn_altisPhone.sqf @@ -0,0 +1,11 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_altisPhone.sqf + Author: Daniel Stuart + + Description: + Opens the player's phone menu +*/ +if (!alive player || dialog) exitWith {}; //Prevent them from opening this for exploits while dead. +createDialog "altisPhone"; +disableSerialization; diff --git a/life_client/core/pmenu/fn_cellphone.sqf b/life_client/core/pmenu/fn_cellphone.sqf new file mode 100644 index 00000000..26f128df --- /dev/null +++ b/life_client/core/pmenu/fn_cellphone.sqf @@ -0,0 +1,35 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_cellphone.sqf + Author: Alan + + Description: + Opens the cellphone menu? +*/ +private["_display","_units","_type"]; + +disableSerialization; +waitUntil {!isNull findDisplay 3000}; +_display = findDisplay 3000; +_units = _display displayCtrl 3004; + +ctrlSetText [3003, ""]; +lbClear _units; + +if (FETCH_CONST(life_adminlevel) < 1) then { + ctrlShow[3020,false]; + ctrlShow[3021,false]; +}; +{ + if (alive _x && _x != player) then { + switch (side _x) do { + case west: {_type = "Cop"}; + case civilian: {_type = "Civ"}; + case independent: {_type = "Med"}; + }; + _units lbAdd format["%1 (%2)",_x getVariable ["realname",name _x],_type]; + _units lbSetData [(lbSize _units)-1,str(_x)]; + }; +} forEach playableUnits; + +lbSetCurSel [3004,0]; \ No newline at end of file diff --git a/life_client/core/pmenu/fn_giveItem.sqf b/life_client/core/pmenu/fn_giveItem.sqf new file mode 100644 index 00000000..3b30e05a --- /dev/null +++ b/life_client/core/pmenu/fn_giveItem.sqf @@ -0,0 +1,37 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_giveItem.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Gives the selected item & amount to the selected player and + removes the item & amount of it from the players virtual + inventory. +*/ +private["_unit","_val"]; +_val = ctrlText 2010; +ctrlShow[2002,false]; +if ((lbCurSel 2023) isEqualTo -1) exitWith {hint localize "STR_NOTF_noOneSelected"; +ctrlShow[2002,true];}; +_unit = lbData [2023,lbCurSel 2023]; +_unit = call compile format["%1",_unit]; + +if ((lbCurSel 2005) isEqualTo -1) exitWith {hint localize "STR_NOTF_didNotSelectItemToGive";ctrlShow[2002,true];}; + +_item = lbData [2005,(lbCurSel 2005)]; +if (isNil "_unit") exitWith {ctrlShow[2002,true];}; +if (_unit == player) exitWith {ctrlShow[2002,true];}; +if (isNull _unit) exitWith {ctrlShow[2002,true];}; + +//A series of checks *ugh* +if (!([_val] call TON_fnc_isnumber)) exitWith {hint localize "STR_NOTF_notNumberFormat";ctrlShow[2002,true];}; +if (parseNumber(_val) <= 0) exitWith {hint localize "STR_NOTF_enterAmountGive";ctrlShow[2002,true];}; +if (isNil "_unit") exitWith {ctrlShow[2001,true]; hint localize "STR_NOTF_notWithinRange";}; +if (!([false,_item,(parseNumber _val)] call life_fnc_handleInv)) exitWith {hint localize "STR_NOTF_couldNotGive";ctrlShow[2002,true];}; + +[_unit,_val,_item,player] remoteExecCall ["life_fnc_receiveItem",_unit]; +_type = M_CONFIG(getText,"VirtualItems",_item,"displayName"); +hint format [localize "STR_NOTF_youGaveItem",_unit getVariable ["realname",name _unit],_val,(localize _type)]; +[] call life_fnc_p_updateMenu; + +ctrlShow[2002,true]; \ No newline at end of file diff --git a/life_client/core/pmenu/fn_giveMoney.sqf b/life_client/core/pmenu/fn_giveMoney.sqf new file mode 100644 index 00000000..bfa72e81 --- /dev/null +++ b/life_client/core/pmenu/fn_giveMoney.sqf @@ -0,0 +1,34 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_giveMoney.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Gives the selected amount of money to the selected player. +*/ +private["_unit","_amount"]; +_amount = ctrlText 2018; +ctrlShow[2001,false]; +if ((lbCurSel 2022) isEqualTo -1) exitWith {hint localize "STR_NOTF_noOneSelected";ctrlShow[2001,true];}; +_unit = lbData [2022,lbCurSel 2022]; +_unit = call compile format["%1",_unit]; +if (isNil "_unit") exitWith {ctrlShow[2001,true];}; +if (_unit == player) exitWith {ctrlShow[2001,true];}; +if (isNull _unit) exitWith {ctrlShow[2001,true];}; + +//A series of checks *ugh* +if (!life_use_atm) exitWith {hint localize "STR_NOTF_recentlyRobbedBank";ctrlShow[2001,true];}; +if (!([_amount] call TON_fnc_isnumber)) exitWith {hint localize "STR_NOTF_notNumberFormat";ctrlShow[2001,true];}; +if (parseNumber(_amount) <= 0) exitWith {hint localize "STR_NOTF_enterAmount";ctrlShow[2001,true];}; +if (parseNumber(_amount) > CASH) exitWith {hint localize "STR_NOTF_notEnoughtToGive";ctrlShow[2001,true];}; +if (isNull _unit) exitWith {ctrlShow[2001,true];}; +if (isNil "_unit") exitWith {ctrlShow[2001,true]; hint localize "STR_NOTF_notWithinRange";}; + +hint format [localize "STR_NOTF_youGaveMoney",[(parseNumber(_amount))] call life_fnc_numberText,_unit getVariable ["realname",name _unit]]; +CASH = CASH - (parseNumber(_amount)); +[0] call SOCK_fnc_updatePartial; + +[_unit,_amount,player] remoteExecCall ["life_fnc_receiveMoney",_unit]; +[] call life_fnc_p_updateMenu; + +ctrlShow[2001,true]; \ No newline at end of file diff --git a/life_client/core/pmenu/fn_keyDrop.sqf b/life_client/core/pmenu/fn_keyDrop.sqf new file mode 100644 index 00000000..c51de3ce --- /dev/null +++ b/life_client/core/pmenu/fn_keyDrop.sqf @@ -0,0 +1,26 @@ +/* + File: fn_keyDrop.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Drops the key. +*/ +private["_dialog","_list","_sel","_vehicle","_impounded","_owners","_index","_index2","_i"]; +disableSerialization; + +_dialog = findDisplay 2700; +_list = _dialog displayCtrl 2701; +_sel = lbCurSel _list; +if (_sel isEqualTo -1) exitWith {hint localize "STR_NOTF_noDataSelected";}; +if ((_list lbData _sel) isEqualTo "") exitWith {hint localize "STR_NOTF_didNotSelectVehicle";}; +_index = (parseNumber(_list lbData _sel)); +_vehicle = life_vehicles select _index; +if (_vehicle isKindOf "House_F") exitWith {hint localize "STR_NOTF_cannotRemoveHouseKeys";}; +_owners = _vehicle getVariable "vehicle_info_owners"; + +_index2 = [(getPlayerUID player),_owners] call TON_fnc_index; +life_vehicles = life_vehicles - [_vehicle]; +_owners deleteAt _index; +_vehicle setVariable ["vehicle_info_owners",_owners,true]; + +[] spawn life_fnc_keyMenu; diff --git a/life_client/core/pmenu/fn_keyGive.sqf b/life_client/core/pmenu/fn_keyGive.sqf new file mode 100644 index 00000000..a8d8dd8d --- /dev/null +++ b/life_client/core/pmenu/fn_keyGive.sqf @@ -0,0 +1,38 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_keyGive.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Gives a copy of the key for the selected vehicle to the selected player. + Player must be within range. +*/ +private["_dialog","_list","_plist","_sel","_vehicle","_owners","_index","_unit","_uid"]; +disableSerialization; + +_dialog = findDisplay 2700; +_list = _dialog displayCtrl 2701; +_plist = _dialog displayCtrl 2702; + +_sel = lbCurSel _list; +if ((_list lbData _sel) isEqualTo "") exitWith {hint localize "STR_NOTF_didNotSelectVehicle";}; +_vehicle = _list lbData _sel; +_vehicle = life_vehicles select parseNumber(_vehicle); + +if ((lbCurSel 2702) isEqualTo -1) exitWith {hint localize "STR_NOTF_didNotSelectPlayer";}; +_sel = lbCurSel _plist; +_unit = _plist lbData _sel; +_unit = call compile format["%1", _unit]; +if (isNull _unit || isNil "_unit") exitWith {}; +if (_unit == player) exitWith {}; + +_uid = getPlayerUID _unit; +_owners = _vehicle getVariable "vehicle_info_owners"; +_index = [_uid,_owners] call TON_fnc_index; +if (_index isEqualTo -1) then { + _owners pushBack [_uid,_unit getVariable ["realname",name _unit]]; + _vehicle setVariable ["vehicle_info_owners",_owners,true]; +}; + +hint format [localize "STR_NOTF_givenKeysTo",_unit getVariable ["realname",name _unit],typeOf _vehicle]; +[_vehicle,_unit,profileName] remoteExecCAll ["TON_fnc_clientGetKey",_unit]; diff --git a/life_client/core/pmenu/fn_keyMenu.sqf b/life_client/core/pmenu/fn_keyMenu.sqf new file mode 100644 index 00000000..284990e6 --- /dev/null +++ b/life_client/core/pmenu/fn_keyMenu.sqf @@ -0,0 +1,53 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_keyMenu.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Initializes the key menu + Will be revised. +*/ +private["_display","_vehicles","_plist","_near_units","_pic","_name","_text","_color","_index"]; +disableSerialization; + +waitUntil {!isNull (findDisplay 2700)}; +_display = findDisplay 2700; +_vehicles = _display displayCtrl 2701; +lbClear _vehicles; +_plist = _display displayCtrl 2702; +lbClear _plist; +_near_units = []; + +{ if (player distance _x < 20) then {_near_units pushBack _x};} forEach playableUnits; + +for "_i" from 0 to (count life_vehicles)-1 do { + _veh = life_vehicles select _i; + if (!isNull _veh && alive _veh) then { + _color = ((M_CONFIG(getArray,"LifeCfgVehicles",(typeOf _veh),"textures") select (_veh getVariable "Life_VEH_color")) select 0); + if (isNil "_color") then {_color = ""}; + _text = format["(%1)",_color]; + if (_text == "()") then { + _text = ""; + }; + + _name = getText(configFile >> "CfgVehicles" >> (typeOf _veh) >> "displayName"); + _pic = getText(configFile >> "CfgVehicles" >> (typeOf _veh) >> "picture"); + _vehicles lbAdd format["%1 %3 - [Distance: %2m]",_name,round(player distance _veh),_text]; + if (_pic != "pictureStaticObject") then { + _vehicles lbSetPicture [(lbSize _vehicles)-1,_pic]; + }; + _vehicles lbSetData [(lbSize _vehicles)-1,str(_i)]; + }; +}; + +{ + if (!isNull _x && alive _x && player distance _x < 20 && _x != player) then { + _plist lbAdd format["%1 - %2",_x getVariable ["realname",name _x], side _x]; + _plist lbSetData [(lbSize _plist)-1,str(_x)]; + }; +} forEach _near_units; + +if (((lbSize _vehicles)-1) isEqualTo -1) then { + _vehicles lbAdd localize "STR_NOTF_noVehOwned"; + _vehicles lbSetData [(lbSize _vehicles)-1,""]; +}; diff --git a/life_client/core/pmenu/fn_p_openMenu.sqf b/life_client/core/pmenu/fn_p_openMenu.sqf new file mode 100644 index 00000000..a10df7eb --- /dev/null +++ b/life_client/core/pmenu/fn_p_openMenu.sqf @@ -0,0 +1,32 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_p_openMenu.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Opens the players virtual inventory menu +*/ +if (!alive player || dialog) exitWith {}; //Prevent them from opening this for exploits while dead. +createDialog "playerSettings"; +disableSerialization; + +switch (playerSide) do { + case west: { + ctrlShow[2011,false]; + }; + + case civilian: { + ctrlShow[2012,false]; + }; + + case independent: { + ctrlShow[2012,false]; + ctrlShow[2011,false]; + }; +}; + +if (FETCH_CONST(life_adminlevel) < 1) then { + ctrlShow[2021,false]; +}; + +[] call life_fnc_p_updateMenu; diff --git a/life_client/core/pmenu/fn_p_updateMenu.sqf b/life_client/core/pmenu/fn_p_updateMenu.sqf new file mode 100644 index 00000000..71fee870 --- /dev/null +++ b/life_client/core/pmenu/fn_p_updateMenu.sqf @@ -0,0 +1,70 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_p_updateMenu.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Updates the player menu (Virtual Interaction Menu) +*/ +private["_inv","_lic","_licenses","_near","_near_units","_mstatus","_shrt","_side","_struct"]; +disableSerialization; + +if (FETCH_CONST(life_adminlevel) < 1) then { + ctrlShow[2021,false]; +}; + +_side = switch (playerSide) do {case west:{"cop"}; case civilian:{"civ"}; case independent:{"med"};}; + +_inv = CONTROL(2001,2005); +_lic = CONTROL(2001,2014); +_near = CONTROL(2001,2022); +_near_i = CONTROL(2001,2023); +_mstatus = CONTROL(2001,2015); +_struct = ""; +lbClear _inv; +lbClear _near; +lbClear _near_i; + +//Near players +_near_units = []; +{ if (player distance _x < 10) then {_near_units pushBack _x};} forEach playableUnits; +{ + if (!isNull _x && alive _x && player distance _x < 10 && _x != player) then { + _near lbAdd format["%1 - %2",_x getVariable ["realname",name _x], side _x]; + _near lbSetData [(lbSize _near)-1,str(_x)]; + _near_i lbAdd format["%1 - %2",_x getVariable ["realname",name _x], side _x]; + _near_i lbSetData [(lbSize _near)-1,str(_x)]; + }; +} forEach _near_units; + +_mstatus ctrlSetStructuredText parseText format[" $%1
$%2",[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; +ctrlSetText[2009,format["Weight: %1 / %2", life_carryWeight, life_maxWeight]]; + +{ + if (ITEM_VALUE(configName _x) > 0) then { + _inv lbAdd format["%2 [x%1]",ITEM_VALUE(configName _x),localize (getText(_x >> "displayName"))]; + _inv lbSetData [(lbSize _inv)-1,configName _x]; + _icon = M_CONFIG(getText,"VirtualItems",configName _x,"icon"); + if (!(_icon isEqualTo "")) then { + _inv lbSetPicture [(lbSize _inv)-1,_icon]; + }; + }; +} forEach ("true" configClasses (missionConfigFile >> "VirtualItems")); + +{ + _displayName = getText(_x >> "displayName"); + + if (LICENSE_VALUE(configName _x,_side)) then { + _struct = _struct + format["%1
",localize _displayName]; + }; +} forEach (format["getText(_x >> 'side') isEqualTo '%1'",_side] configClasses (missionConfigFile >> "Licenses")); + +if (_struct isEqualTo "") then { + _struct = "No Licenses"; +}; + +_lic ctrlSetStructuredText parseText format[" + +%1 + +",_struct]; diff --git a/life_client/core/pmenu/fn_pardon.sqf b/life_client/core/pmenu/fn_pardon.sqf new file mode 100644 index 00000000..d7bb9321 --- /dev/null +++ b/life_client/core/pmenu/fn_pardon.sqf @@ -0,0 +1,25 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_pardon.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Pardons the selected player. +*/ +private["_display","_list"]; +disableSerialization; +if (playerSide != west) exitWith {}; + +_display = findDisplay 2400; +_list = _display displayCtrl 2402; +_data = lbData[2401,(lbCurSel 2401)]; +_data = call compile format["%1", _data]; +if (isNil "_data") exitWith {}; +if (!(_data isEqualType [])) exitWith {}; +if (_data isEqualTo []) exitWith {}; + +if (life_HC_isActive) then { + [(_data select 0)] remoteExecCall ["HC_fnc_wantedRemove",HC_Life]; +} else { + [(_data select 0)] remoteExecCall ["life_fnc_wantedRemove",RSERV]; +}; diff --git a/life_client/core/pmenu/fn_removeItem.sqf b/life_client/core/pmenu/fn_removeItem.sqf new file mode 100644 index 00000000..998d0a19 --- /dev/null +++ b/life_client/core/pmenu/fn_removeItem.sqf @@ -0,0 +1,24 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_removeItem.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Removes the selected item & amount to remove from the players + virtual inventory. +*/ +private["_data","_value","_obj"]; +disableSerialization; +_data = lbData[2005,(lbCurSel 2005)]; +_value = ctrlText 2010; + +if (_data isEqualTo "") exitWith {hint localize "STR_NOTF_didNotSelectToRemove";}; +if (!([_value] call TON_fnc_isnumber)) exitWith {hint localize "STR_NOTF_notNumberFormat";}; +if (parseNumber(_value) <= 0) exitWith {hint localize "STR_NOTF_enterAmountRemove";}; +if (ITEM_ILLEGAL(_data) isEqualTo 1 && ([west,visiblePosition player,100] call life_fnc_nearUnits)) exitWith {titleText[localize "STR_NOTF_illegalItemCannotDispose","PLAIN"]}; +if (player != vehicle player) exitWith {titleText[localize "STR_NOTF_cannotRemoveInVeh","PLAIN"]}; +if (!([false,_data,(parseNumber _value)] call life_fnc_handleInv)) exitWith {hint localize "STR_NOTF_couldNotRemoveThatMuch";}; + +hint format [localize "STR_NOTF_removedFromInventory",(parseNumber _value),(localize ITEM_NAME(_data))]; + +[] call life_fnc_p_updateMenu; diff --git a/life_client/core/pmenu/fn_s_onChar.sqf b/life_client/core/pmenu/fn_s_onChar.sqf new file mode 100644 index 00000000..23a682ae --- /dev/null +++ b/life_client/core/pmenu/fn_s_onChar.sqf @@ -0,0 +1,38 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_s_onChar.sqf + Author: Bryan "Tonic" Boardwine + + Description: + When a character is entered it is validated and changes the + correct slider it is associated with. I probably over-complicated + this more then I had to but onChar behaves weird. + + PARAMS: + 0: CONTROL + 1: SCALAR (INT) + 2: STRING (Case option) +*/ +private["_control","_code","_slider","_value","_varName","_onKeyUp"]; +_control = _this select 0; +_code = _this select 1; +_slider = _this select 2; +_onKeyUp = _this select 3; + +disableSerialization; +if (isNull _control) exitWith {}; + +if (_onKeyUp) then { + _value = parseNumber(ctrlText _control); + _varName = switch (_slider) do { + case "ground": {"life_settings_viewDistanceFoot";}; + case "vehicle": {"life_settings_viewDistanceCar"}; + case "ship": {"life_settings_viewDistanceCar"}; + case "air": {"life_settings_viewDistanceAir"}; + default {"life_settings_viewDistanceFoot"}; + }; + + missionNamespace setVariable [_varName,_value]; + [] call life_fnc_settingsMenu; + [] call life_fnc_updateViewDistance; +}; \ No newline at end of file diff --git a/life_client/core/pmenu/fn_s_onCheckedChange.sqf b/life_client/core/pmenu/fn_s_onCheckedChange.sqf new file mode 100644 index 00000000..ed8ddb13 --- /dev/null +++ b/life_client/core/pmenu/fn_s_onCheckedChange.sqf @@ -0,0 +1,62 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_s_onCheckedChange.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Switching it up and making it prettier.. +*/ +private["_option","_state"]; +_option = _this select 0; +_state = _this select 1; + +switch (_option) do { + case "tags": { + if (_state isEqualTo 1) then { + life_settings_tagson = true; + profileNamespace setVariable ["life_settings_tagson",true]; + LIFE_ID_PlayerTags = ["LIFE_PlayerTags","onEachFrame","life_fnc_playerTags"] call BIS_fnc_addStackedEventHandler; + } else { + life_settings_tagson = false; + profileNamespace setVariable ["life_settings_tagson",false]; + [LIFE_ID_PlayerTags,"onEachFrame"] call BIS_fnc_removeStackedEventHandler; + }; + }; + + case "objects": { + if (_state isEqualTo 1) then { + life_settings_revealObjects = true; + profileNamespace setVariable ["life_settings_revealObjects",true]; + LIFE_ID_RevealObjects = ["LIFE_RevealObjects","onEachFrame","life_fnc_revealObjects"] call BIS_fnc_addStackedEventHandler; + } else { + life_settings_revealObjects = false; + profileNamespace setVariable ["life_settings_revealObjects",false]; + [LIFE_ID_RevealObjects,"onEachFrame"] call BIS_fnc_removeStackedEventHandler; + }; + }; + + case "sidechat": { + if (_state isEqualTo 1) then { + life_enableSidechannel = true; + profileNamespace setVariable ["life_enableSidechannel",true]; + life_settings_enableSidechannel = profileNamespace getVariable ["life_enableSidechannel",true]; + } else { + life_enableSidechannel = false; + profileNamespace setVariable ["life_enableSidechannel",false]; + life_settings_enableSidechannel = profileNamespace getVariable ["life_enableSidechannel",false]; + }; + [player,life_settings_enableSidechannel,playerSide] remoteExecCall ["TON_fnc_manageSC",RSERV]; + }; + + case "broadcast": { + if (_state isEqualTo 1) then { + life_enableNewsBroadcast = true; + profileNamespace setVariable ["life_enableNewsBroadcast",true]; + life_settings_enableNewsBroadcast = profileNamespace getVariable ["life_enableNewsBroadcast",true]; + } else { + life_enableNewsBroadcast = false; + profileNamespace setVariable ["life_enableNewsBroadcast",false]; + life_settings_enableNewsBroadcast = profileNamespace getVariable ["life_enableNewsBroadcast",false]; + }; + }; +}; diff --git a/life_client/core/pmenu/fn_s_onSliderChange.sqf b/life_client/core/pmenu/fn_s_onSliderChange.sqf new file mode 100644 index 00000000..8a12a594 --- /dev/null +++ b/life_client/core/pmenu/fn_s_onSliderChange.sqf @@ -0,0 +1,64 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_s_onSliderChange.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Called when the slider is changed for any field and updates the view distance for it. +*/ +private["_mode","_value"]; +params [ + ["_mode",-1,[0]], + ["_value",-1,[0]] +]; +if (_mode isEqualTo -1 || _value isEqualTo -1) exitWith {}; +disableSerialization; + +switch (_mode) do { + case 0: + { + life_settings_viewDistanceFoot = round(_value); + ctrlSetText[2902,format["%1",round(_value)]]; + [] call life_fnc_updateViewDistance; + profileNamespace setVariable ["life_viewDistanceFoot",round(_value)]; + }; + + case 1: + { + life_settings_viewDistanceCar = round(_value); + ctrlSetText[2912,format["%1",round(_value)]]; + [] call life_fnc_updateViewDistance; + profileNamespace setVariable ["life_viewDistanceCar",round(_value)]; + }; + + case 2: + { + life_settings_viewDistanceAir = round(_value); + ctrlSetText[2922,format["%1",round(_value)]]; + [] call life_fnc_updateViewDistance; + profileNamespace setVariable ["life_viewDistanceAir",round(_value)]; + }; + + case 3: { + _classname = lbData[20302,(lbCurSel 20302)]; + _index = lbValue[20302,(lbCurSel 20302)]; + if ((lbCurSel 20302) isEqualTo -1) exitWith {hint localize "STR_Select_Vehicle_Pump";}; + if (!isNil "_classname" || _classname =="") then { + _car = (vehiclefuelList select _index) select 0; + _vehicleInfo = [_className] call life_fnc_fetchVehInfo; + _fuel = fuel _car; + _fueltank = (_vehicleInfo select 12); + if (_car isKindOf "B_Truck_01_box_F" || _car isKindOf "B_Truck_01_transport_F") then { + _fueltank = 450; + }; + ctrlSetText[20324,format["Fuel : %1 liters",round(_value) - (floor(_fuel * _fueltank))]]; + ctrlSetText [20323,format ["Total : $%1",round (life_fuelPrices * (round(_value) -(floor(_fuel * _fueltank)))) ]]; + } else { + hint localize "STR_Select_Vehicle_Pump"; + }; + }; + + case 4: { + player setDir (360 - _value); + }; +}; diff --git a/life_client/core/pmenu/fn_settingsMenu.sqf b/life_client/core/pmenu/fn_settingsMenu.sqf new file mode 100644 index 00000000..8d8ec135 --- /dev/null +++ b/life_client/core/pmenu/fn_settingsMenu.sqf @@ -0,0 +1,37 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_settingsMenu + Author: Bryan "Tonic" Boardwine + + Description: + Setup the settings menu. +*/ +if (isNull (findDisplay 2900)) then { + if (!createDialog "SettingsMenu") exitWith {hint localize "STR_NOTF_menuWillNotOpen";}; +}; + +disableSerialization; + +ctrlSetText[2902, format["%1", life_settings_viewDistanceFoot]]; +ctrlSetText[2912, format["%1", life_settings_viewDistanceCar]]; +ctrlSetText[2922, format["%1", life_settings_viewDistanceAir]]; + +/* Set up the sliders */ +{ + slidersetRange [(_x select 0),100,8000]; + CONTROL(2900,(_x select 0)) sliderSetSpeed [100,100,100]; + sliderSetPosition [(_x select 0),(_x select 1)]; +} forEach [[2901,life_settings_viewDistanceFoot],[2911,life_settings_viewDistanceCar],[2921,life_settings_viewDistanceAir]]; + + +if (isNil "life_settings_revealObjects") then { + life_settings_enableNewsBroadcast = profileNamespace setVariable ["life_enableNewsBroadcast",true]; + life_settings_enableSidechannel = profileNamespace setVariable ["life_enableSidechannel",true]; + life_settings_tagson = profileNamespace setVariable ["life_settings_tagson",true]; + life_settings_revealObjects = profileNamespace setVariable ["life_settings_revealObjects",true]; +}; + +CONTROL(2900,2971) cbSetChecked life_settings_enableSidechannel; +CONTROL(2900,2973) cbSetChecked life_settings_enableNewsBroadcast; +CONTROL(2900,2970) cbSetChecked life_settings_tagson; +CONTROL(2900,2972) cbSetChecked life_settings_revealObjects; diff --git a/life_client/core/pmenu/fn_updateViewDistance.sqf b/life_client/core/pmenu/fn_updateViewDistance.sqf new file mode 100644 index 00000000..91e7c474 --- /dev/null +++ b/life_client/core/pmenu/fn_updateViewDistance.sqf @@ -0,0 +1,14 @@ +/* + File: fn_updateViewDistance.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Updates the view distance dependant on whether the player is on foot, a car or an aircraft. +*/ +switch (true) do +{ + case ((vehicle player) isKindOf "Man"): {setViewDistance life_settings_viewDistanceFoot}; + case ((vehicle player) isKindOf "LandVehicle"): {setViewDistance life_settings_viewDistanceCar}; + case ((vehicle player) isKindOf "Ship"): {setViewDistance life_settings_viewDistanceCar}; + case ((vehicle player) isKindOf "Air"): {setViewDistance life_settings_viewDistanceAir}; +}; diff --git a/life_client/core/pmenu/fn_useItem.sqf b/life_client/core/pmenu/fn_useItem.sqf new file mode 100644 index 00000000..a474aaab --- /dev/null +++ b/life_client/core/pmenu/fn_useItem.sqf @@ -0,0 +1,100 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_useItem.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Main function for item effects and functionality through the player menu. +*/ +private "_item"; +disableSerialization; +if ((lbCurSel 2005) isEqualTo -1) exitWith {hint localize "STR_ISTR_SelectItemFirst";}; +_item = CONTROL_DATA(2005); + +switch (true) do { + case (_item in ["waterBottle","coffee","redgull"]): { + if ([false,_item,1] call life_fnc_handleInv) then { + life_thirst = 100; + if (LIFE_SETTINGS(getNumber,"enable_fatigue") isEqualTo 1) then {player setFatigue 0;}; + if (_item isEqualTo "redgull" && {LIFE_SETTINGS(getNumber,"enable_fatigue") isEqualTo 1}) then { + [] spawn { + life_redgull_effect = time; + titleText[localize "STR_ISTR_RedGullEffect","PLAIN"]; + player enableFatigue false; + waitUntil {!alive player || ((time - life_redgull_effect) > (3 * 60))}; + player enableFatigue true; + }; + }; + }; + }; + + case (_item isEqualTo "boltcutter"): { + [cursorObject] spawn life_fnc_boltcutter; + closeDialog 0; + }; + + case (_item isEqualTo "blastingcharge"): { + player reveal fed_bank; + (group player) reveal fed_bank; + [cursorObject] spawn life_fnc_blastingCharge; + closeDialog 0; + }; + + case (_item isEqualTo "defusekit"): { + [cursorObject] spawn life_fnc_defuseKit; + closeDialog 0; + }; + + case (_item isEqualTo "storagesmall"): { + [false] call life_fnc_storageBox; + }; + + case (_item isEqualTo "storagebig"): { + [true] call life_fnc_storageBox; + }; + + case (_item isEqualTo "spikeStrip"): { + if (!isNull life_spikestrip) exitWith {hint localize "STR_ISTR_SpikesDeployment"; closeDialog 0}; + if ([false,_item,1] call life_fnc_handleInv) then { + [] spawn life_fnc_spikeStrip; + closeDialog 0; + }; + }; + + case (_item isEqualTo "fuelFull"): { + if (vehicle player != player) exitWith {hint localize "STR_ISTR_RefuelInVehicle"}; + [] spawn life_fnc_jerryRefuel; + closeDialog 0; + }; + + case (_item isEqualTo "fuelEmpty"): { + [] spawn life_fnc_jerryCanRefuel; + closeDialog 0; + }; + + case (_item isEqualTo "lockpick"): { + [] spawn life_fnc_lockpick; + closeDialog 0; + }; + + case (_item in ["apple","rabbit","salema","ornate","mackerel","tuna","mullet","catshark","turtle_soup","hen","rooster","sheep","goat","donuts","tbacon","peach"]): { + if (!(M_CONFIG(getNumber,"VirtualItems",_item,"edible") isEqualTo -1)) then { + if ([false,_item,1] call life_fnc_handleInv) then { + _val = M_CONFIG(getNumber,"VirtualItems",_item,"edible"); + _sum = life_hunger + _val; + switch (true) do { + case (_val < 0 && _sum < 1): {life_hunger = 5;}; //This adds the ability to set the entry edible to a negative value and decrease the hunger without death + case (_sum > 100): {life_hunger = 100;}; + default {life_hunger = _sum;}; + }; + }; + }; + }; + + default { + hint localize "STR_ISTR_NotUsable"; + }; +}; + +[] call life_fnc_p_updateMenu; +[] call life_fnc_hudUpdate; \ No newline at end of file diff --git a/life_client/core/pmenu/fn_wantedAddP.sqf b/life_client/core/pmenu/fn_wantedAddP.sqf new file mode 100644 index 00000000..20ccbe3e --- /dev/null +++ b/life_client/core/pmenu/fn_wantedAddP.sqf @@ -0,0 +1,27 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_wantedAddP.sqf + Author: + + Description: + +*/ +private["_unit","_amount"]; +if (playerSide != west) exitWith {hint localize "STR_Cop_wantedList_notCop";}; +if ((lbCurSel 2406) isEqualTo -1) exitWith {hint localize "STR_Cop_wantedList_noPlayerSelected";}; +if ((lbCurSel 2407) isEqualTo -1) exitWith {hint localize "STR_Cop_wantedList_noCrimeSelected";}; +_unit = lbData [2406,lbCurSel 2406]; +_unit = call compile format["%1",_unit]; +_amount = lbData [2407,lbCurSel 2407]; +if (isNil "_unit") exitWith {}; +//if (side _unit isEqualTo west) exitWith {hint "What are ya trying to do, start a police war? Dickhead." }; +//if (_unit == player) exitWith {hint "You can't make yourself wanted, dipshit";}; +if (isNull _unit) exitWith {}; + +[1,"STR_Wanted_AddP",true,[_unit getVariable ["realname",name _unit],_amount,getPlayerUID _unit]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; + +if (life_HC_isActive) then { + [getPlayerUID _unit,_unit getVariable ["realname",name _unit],_amount] remoteExecCall ["HC_fnc_wantedAdd",HC_Life]; +} else { + [getPlayerUID _unit,_unit getVariable ["realname",name _unit],_amount] remoteExecCall ["life_fnc_wantedAdd",RSERV]; +}; diff --git a/life_client/core/pmenu/fn_wantedInfo.sqf b/life_client/core/pmenu/fn_wantedInfo.sqf new file mode 100644 index 00000000..9e602b12 --- /dev/null +++ b/life_client/core/pmenu/fn_wantedInfo.sqf @@ -0,0 +1,32 @@ +/* + File: fn_wantedInfo.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Pulls back information about the wanted criminal. +*/ +private["_display","_list","_crimes","_bounty","_mylist","_data"]; +disableSerialization; + +_data = param [0,[],[[]]]; +_display = findDisplay 2400; +_list = _display displayCtrl 2402; +_mylist = []; +_data = call compile format["%1", _data]; +if (isNil "_data") exitWith {hint localize "STR_Cop_wantedList_FailedToFetch";}; +if (!(_data isEqualType [])) exitWith {hint localize "STR_Cop_wantedList_FailedToFetch";}; +if (_data isEqualTo []) exitWith {hint localize "STR_Cop_wantedList_FailedToFetch";}; +lbClear _list; + +_crimes = _data select 0; + +{ + _crime = _x; + if (!(_crime in _mylist)) then + { + _mylist pushBack _crime; + _list lbAdd format[localize "STR_Wanted_Count",{_x == _crime} count _crimes,localize _crime]; + }; +} forEach _crimes; + +ctrlSetText[2403,format[localize "STR_Wanted_Bounty",[(_data select 1)] call life_fnc_numberText]]; diff --git a/life_client/core/pmenu/fn_wantedList.sqf b/life_client/core/pmenu/fn_wantedList.sqf new file mode 100644 index 00000000..d512f9d3 --- /dev/null +++ b/life_client/core/pmenu/fn_wantedList.sqf @@ -0,0 +1,27 @@ +/* + Copyright © 2013 Bryan "Tonic" Boardwine, All rights reserved + See http://armafiles.info/life/list.txt for servers that are permitted to use this code. + File: fn_wantedList.sqf + Author: Bryan "Tonic" Boardwine" + + Description: + Displays wanted list information sent from the server. +*/ +private["_info","_display","_list","_entry"]; +disableSerialization; +_info = param [0,[],[[]]]; +_display = findDisplay 2400; +_list = _display displayCtrl 2401; + +{ + _entry = _x; + _list lbAdd format["%1", _entry select 1]; + _list lbSetData [(lbSize _list)-1,str(_entry)]; +} forEach _info; + +ctrlSetText[2404,"Connection Established"]; + +if (((lbSize _list)-1) isEqualTo -1) then +{ + _list lbAdd "No criminals"; +}; diff --git a/life_client/core/pmenu/fn_wantedMenu.sqf b/life_client/core/pmenu/fn_wantedMenu.sqf new file mode 100644 index 00000000..57b2077b --- /dev/null +++ b/life_client/core/pmenu/fn_wantedMenu.sqf @@ -0,0 +1,53 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_wantedMenu.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Opens the Wanted menu and connects to the APD. +*/ +private["_display","_list","_list2","_name","_crimes","_bounty","_units"]; +disableSerialization; + +if (playerSide != west) exitWith {}; // Only for cops open this menu + +createDialog "life_wanted_menu"; + +_display = findDisplay 2400; +_list = _display displayCtrl 2401; +_players = _display displayCtrl 2406; +lbClear _list; +_units = []; + +lbClear _players; + +{ + _side = switch (side _x) do {case west: {"Cop"}; case civilian : {"Civ"}; default {"Unknown"};}; + _players lbAdd format["%1 - %2", name _x,_side]; + _players lbSetdata [(lbSize _players)-1,str(_x)]; +} forEach playableUnits; + +_list2 = CONTROL(2400,2407); +lbClear _list2; //Purge the list + +_crimes = LIFE_SETTINGS(getArray,"crimes"); +{ + if (isLocalized (_x select 0)) then { + _list2 lbAdd format["%1 - $%2 (%3)",localize (_x select 0),(_x select 1),(_x select 2)]; + } else { + _list2 lbAdd format["%1 - $%2 (%3)",(_x select 0),(_x select 1),(_x select 2)]; + }; + _list2 lbSetData [(lbSize _list2)-1,(_x select 2)]; +} forEach _crimes; + +ctrlSetText[2404,"Establishing connection..."]; + +if (FETCH_CONST(life_coplevel) < 3 && FETCH_CONST(life_adminlevel) isEqualTo 0) then { + ctrlShow[2405,false]; +}; + +if (life_HC_isActive) then { + [player] remoteExec ["HC_fnc_wantedFetch",HC_Life]; +} else { + [player] remoteExec ["life_fnc_wantedFetch",RSERV]; +}; diff --git a/life_client/core/session/fn_dataQuery.sqf b/life_client/core/session/fn_dataQuery.sqf new file mode 100644 index 00000000..a57657b2 --- /dev/null +++ b/life_client/core/session/fn_dataQuery.sqf @@ -0,0 +1,22 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_dataQuery.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Starts the 'authentication' process and sends a request out to + the server to check for player information. +*/ +private["_uid","_side","_sender"]; +if (life_session_completed) exitWith {}; //Why did this get executed when the client already initialized? Fucking arma... +_sender = player; +_uid = getPlayerUID _sender; +_side = playerSide; +cutText[format[localize "STR_Session_Query",_uid],"BLACK FADED"]; +0 cutFadeOut 999999999; + +if (life_HC_isActive) then { + [_uid,_side,_sender] remoteExec ["HC_fnc_queryRequest",HC_Life]; +} else { + [_uid,_side,_sender] remoteExec ["DB_fnc_queryRequest",RSERV]; +}; diff --git a/life_client/core/session/fn_insertPlayerInfo.sqf b/life_client/core/session/fn_insertPlayerInfo.sqf new file mode 100644 index 00000000..f5ae83ca --- /dev/null +++ b/life_client/core/session/fn_insertPlayerInfo.sqf @@ -0,0 +1,31 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_insertPlayerInfo.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Upon first join inital player data is sent to the server and added to the database. + Setup data gets sent to life_server\Functions\MySQL\fn_insertRequest.sqf +*/ +if (life_session_completed) exitWith {}; //Why did this get executed when the client already initialized? Fucking arma... +cutText[localize "STR_Session_QueryFail","BLACK FADED"]; +0 cutFadeOut 9999999; +private ["_bank"]; + +switch (playerSide) do { + case west: { + _bank = LIFE_SETTINGS(getNumber,"bank_cop"); + }; + case civilian: { + _bank = LIFE_SETTINGS(getNumber,"bank_civ"); + }; + case independent: { + _bank = LIFE_SETTINGS(getNumber,"bank_med"); + }; +}; + +if (life_HC_isActive) then { + [getPlayerUID player,profileName,CASH,_bank,player] remoteExecCall ["HC_fnc_insertRequest",HC_Life]; +} else { + [getPlayerUID player,profileName,CASH,_bank,player] remoteExecCall ["DB_fnc_insertRequest",RSERV]; +}; \ No newline at end of file diff --git a/life_client/core/session/fn_requestReceived.sqf b/life_client/core/session/fn_requestReceived.sqf new file mode 100644 index 00000000..2190ae6c --- /dev/null +++ b/life_client/core/session/fn_requestReceived.sqf @@ -0,0 +1,113 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_requestReceived.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Called by the server saying that we have a response so let's + sort through the information, validate it and if all valid + set the client up. +*/ +private["_array"]; +life_session_tries = life_session_tries + 1; +if (life_session_completed) exitWith {}; //Why did this get executed when the client already initialized? Fucking arma... +if (life_session_tries > 3) exitWith {cutText[localize "STR_Session_Error","BLACK FADED"]; 0 cutFadeOut 999999999;}; + +0 cutText [localize "STR_Session_Received","BLACK FADED"]; +0 cutFadeOut 9999999; + +//Error handling and junk.. +if (isNil "_this") exitWith {[] call SOCK_fnc_insertPlayerInfo;}; +if (_this isEqualType "") exitWith {[] call SOCK_fnc_insertPlayerInfo;}; +if (count _this isEqualTo 0) exitWith {[] call SOCK_fnc_insertPlayerInfo;}; +if ((_this select 0) isEqualTo "Error") exitWith {[] call SOCK_fnc_insertPlayerInfo;}; +if (!(getPlayerUID player isEqualTo (_this select 0))) exitWith {[] call SOCK_fnc_dataQuery;}; + +//Lets make sure some vars are not set before hand.. If they are get rid of them, hopefully the engine purges past variables but meh who cares. +if (!isServer && (!isNil "life_adminlevel" || !isNil "life_coplevel" || !isNil "life_donorlevel")) exitWith { + [profileName,getPlayerUID player,"VariablesAlreadySet"] remoteExecCall ["SPY_fnc_cookieJar",RSERV]; + [profileName,format["Variables set before client initialization...\nlife_adminlevel: %1\nlife_coplevel: %2\nlife_donorlevel: %3",life_adminlevel,life_coplevel,life_donorlevel]] remoteExecCall ["SPY_fnc_notifyAdmins",RCLIENT]; + sleep 0.9; + failMission "SpyGlass"; +}; + +//Parse basic player information. +CASH = parseNumber (_this select 2); +BANK = parseNumber (_this select 3); +CONST(life_adminlevel,parseNumber (_this select 4)); +if (LIFE_SETTINGS(getNumber,"donor_level") isEqualTo 1) then { + CONST(life_donorlevel,parseNumber (_this select 5)); +} else { + CONST(life_donorlevel,0); +}; + +//Loop through licenses +if (count (_this select 6) > 0) then { + {missionNamespace setVariable [(_x select 0),(_x select 1)];} forEach (_this select 6); +}; + +life_gear = _this select 8; +[true] call life_fnc_loadGear; + +//Parse side specific information. +switch (playerSide) do { + case west: { + CONST(life_coplevel, parseNumber(_this select 7)); + CONST(life_medicLevel,0); + life_blacklisted = _this select 9; + if (LIFE_SETTINGS(getNumber,"save_playerStats") isEqualTo 1) then { + life_hunger = ((_this select 10) select 0); + life_thirst = ((_this select 10) select 1); + player setDamage ((_this select 10) select 2); + }; + }; + + case civilian: { + life_is_arrested = _this select 7; + CONST(life_coplevel, 0); + CONST(life_medicLevel, 0); + life_houses = _this select 13; + if (LIFE_SETTINGS(getNumber,"save_playerStats") isEqualTo 1) then { + life_hunger = ((_this select 9) select 0); + life_thirst = ((_this select 9) select 1); + player setDamage ((_this select 9) select 2); + }; + + //Position + if (LIFE_SETTINGS(getNumber,"save_civilian_position") isEqualTo 1) then { + life_is_alive = _this select 10; + life_civ_position = _this select 11; + if (life_is_alive) then { + if (count life_civ_position != 3) then {diag_log format["[requestReceived] Bad position received. Data: %1",life_civ_position];life_is_alive =false;}; + if (life_civ_position distance (getMarkerPos "respawn_civilian") < 300) then {life_is_alive = false;}; + }; + }; + + { + _house = nearestObject [(call compile format["%1",(_x select 0)]), "House"]; + life_vehicles pushBack _house; + } forEach life_houses; + + life_gangData = _this select 14; + if (!(count life_gangData isEqualTo 0)) then { + [] spawn life_fnc_initGang; + }; + [] spawn life_fnc_initHouses; + }; + + case independent: { + CONST(life_medicLevel, parseNumber(_this select 7)); + CONST(life_coplevel,0); + if (LIFE_SETTINGS(getNumber,"save_playerStats") isEqualTo 1) then { + life_hunger = ((_this select 9) select 0); + life_thirst = ((_this select 9) select 1); + player setDamage ((_this select 9) select 2); + }; + }; +}; + +if (count (_this select 15) > 0) then { + {life_vehicles pushBack _x;} forEach (_this select 15); +}; + +life_session_completed = true; diff --git a/life_client/core/session/fn_syncData.sqf b/life_client/core/session/fn_syncData.sqf new file mode 100644 index 00000000..7b41a649 --- /dev/null +++ b/life_client/core/session/fn_syncData.sqf @@ -0,0 +1,19 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_syncData.sqf + Author: Bryan "Tonic" Boardwine" + + Description: + Used for player manual sync to the server. +*/ +_fnc_scriptName = "Player Synchronization"; +if (isNil "life_session_time") then {life_session_time = false;}; +if (life_session_time) exitWith {hint localize "STR_Session_SyncdAlready";}; + +[] call SOCK_fnc_updateRequest; +hint localize "STR_Session_SyncData"; +[] spawn { + life_session_time = true; + sleep (5 * 60); + life_session_time = false; +}; diff --git a/life_client/core/session/fn_updatePartial.sqf b/life_client/core/session/fn_updatePartial.sqf new file mode 100644 index 00000000..4746eefa --- /dev/null +++ b/life_client/core/session/fn_updatePartial.sqf @@ -0,0 +1,63 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_updatePartial.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Sends specific information to the server to update on the player, + meant to keep the network traffic down with large sums of data flowing + through remoteExec +*/ +private["_mode","_packet","_array","_flag"]; +_mode = param [0,0,[0]]; +_packet = [getPlayerUID player,playerSide,nil,_mode]; +_array = []; +_flag = switch (playerSide) do {case west: {"cop"}; case civilian: {"civ"}; case independent: {"med"};}; + +switch (_mode) do { + case 0: { + _packet set[2,CASH]; + }; + + case 1: { + _packet set[2,BANK]; + }; + + case 2: { + { + _varName = LICENSE_VARNAME(configName _x,_flag); + _array pushBack [_varName,LICENSE_VALUE(configName _x,_flag)]; + } forEach (format["getText(_x >> 'side') isEqualTo '%1'",_flag] configClasses (missionConfigFile >> "Licenses")); + + _packet set[2,_array]; + }; + + case 3: { + [] call life_fnc_saveGear; + _packet set[2,life_gear]; + }; + + case 4: { + _packet set[2,life_is_alive]; + _packet set[4,getPosATL player]; + }; + + case 5: { + _packet set[2,life_is_arrested]; + }; + + case 6: { + _packet set[2,CASH]; + _packet set[4,BANK]; + }; + + case 7: { + // Tonic is using for keychain..? + }; +}; + +if (life_HC_isActive) then { + _packet remoteExecCall ["HC_fnc_updatePartial",HC_Life]; +} else { + _packet remoteExecCall ["DB_fnc_updatePartial",RSERV]; +}; diff --git a/life_client/core/session/fn_updateRequest.sqf b/life_client/core/session/fn_updateRequest.sqf new file mode 100644 index 00000000..c1cb8cba --- /dev/null +++ b/life_client/core/session/fn_updateRequest.sqf @@ -0,0 +1,44 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_updateRequest.sqf + Author: Tonic + + Description: + Passes ALL player information to the server to save player data to the database. +*/ +private["_packet","_array","_flag","_alive","_position"]; +_packet = [getPlayerUID player,(profileName),playerSide,CASH,BANK]; +_array = []; +_alive = alive player; +_position = getPosATL player; +_flag = switch (playerSide) do {case west: {"cop"}; case civilian: {"civ"}; case independent: {"med"};}; + +{ + _varName = LICENSE_VARNAME(configName _x,_flag); + _array pushBack [_varName,LICENSE_VALUE(configName _x,_flag)]; +} forEach (format["getText(_x >> 'side') isEqualTo '%1'",_flag] configClasses (missionConfigFile >> "Licenses")); + +_packet pushBack _array; + +[] call life_fnc_saveGear; +_packet pushBack life_gear; + +_array = []; +_array pushBack life_hunger; +_array pushBack life_thirst; +_array pushBack (damage player); +_packet pushBack _array; + +switch (playerSide) do { + case civilian: { + _packet pushBack life_is_arrested; + _packet pushBack _alive; + _packet pushBack _position; + }; +}; + +if (life_HC_isActive) then { + _packet remoteExecCall ["HC_fnc_updateRequest",HC_Life]; +} else { + _packet remoteExecCall ["DB_fnc_updateRequest",RSERV]; +}; diff --git a/life_client/core/shops/fn_FuelLBchange.sqf b/life_client/core/shops/fn_FuelLBchange.sqf new file mode 100644 index 00000000..5fe3a1d5 --- /dev/null +++ b/life_client/core/shops/fn_FuelLBchange.sqf @@ -0,0 +1,43 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_fuelLBChange.sqf + Author: NiiRoZz + + Description: + Change when slide change. That descripotion +*/ +disableSerialization; +private["_control","_index","_className","_basePrice","_vehicleInfo","_colorArray","_ctrl"]; +_control = _this select 0; +_index = _this select 1; + +//Fetch some information. +_className = _control lbData _index; +_vIndex = _control lbValue _index; +_vehicle = (vehiclefuelList select _vindex) select 0; +_vehicleInfo = [_className] call life_fnc_fetchVehInfo; + +_fuel = fuel _vehicle; +_fueltank = (_vehicleInfo select 12); +if (_vehicle isKindOf "B_Truck_01_box_F" || _vehicle isKindOf "B_Truck_01_transport_F") then {_fueltank = 350;};//hemtt +if (_vehicle isKindOf "C_Van_01_box_F") then {_fueltank = 100;}; +if (_vehicle isKindOf "I_Truck_02_covered_F" || _vehicle isKindOf "I_Truck_02_transport_F") then {_fueltank = 175;}; +ctrlShow [20330,true]; + +(CONTROL(20300,20303)) ctrlSetStructuredText parseText format[ + (localize "STR_Shop_Veh_UI_Fuel")+ " %1l
" + + (localize "STR_Fuel_Tank_Vehicle")+ " %2l", + _fueltank, + round(_fueltank * _fuel) +]; + +{ + slidersetRange [_x,(floor(_fuel * _fueltank)),_fueltank]; +} forEach [20901]; + +{ + sliderSetPosition[_x ,(floor(_fuel * _fueltank))]; +} forEach [20901]; + +ctrlSetText [20323,format ["Total : %1$",life_fuelPrices * ((SliderPosition 20901) -(floor(_fuel * _fueltank))) ]]; +true; \ No newline at end of file diff --git a/life_client/core/shops/fn_FuelStatOpen.sqf b/life_client/core/shops/fn_FuelStatOpen.sqf new file mode 100644 index 00000000..ab732204 --- /dev/null +++ b/life_client/core/shops/fn_FuelStatOpen.sqf @@ -0,0 +1,52 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_fuelStatOpen.sqf + Author : NiiRoZz + + Description: + Open dialog Pump. +*/ +private["_shop","_sideCheck","_spawnPoints","_shopFlag","_disableBuy","_fuelCost"]; + +disableSerialization; +//Long boring series of checks +if (life_action_inUse) exitWith {}; +if (dialog) exitWith {}; +if (life_is_processing) exitWith {}; +life_action_inUse = true; +_fuelstations = nearestObjects [player, ["Land_fs_feed_F"],10]; +if (_fuelstations isEqualTo []) exitWith {life_action_inUse = false;}; +_vehicleList = nearestObjects [player, ["Car","air"], 10]; +if (count _vehicleList < 1) exitWith {hint localize "STR_NOTF_VehicleNear";life_action_inUse = false;}; +if (!createDialog "Life_FuelStat") exitWith {}; +_fuelCost = LIFE_SETTINGS(getNumber,"fuel_cost"); +[] spawn {waitUntil {!dialog}; life_action_inUse = false;}; +ctrlSetText [20301,"Fuel Station"]; +if (isNil "life_fuelPrices") then { + life_fuelPrices = _fuelCost; +}; + +//Fetch the shop config. +vehicleFuelList =[]; +{ + _fuel = fuel _x; + vehicleFuelList pushBack [_x,_fuel]; +} forEach _vehicleList; + +_control = ((findDisplay 20300) displayCtrl 20302); +lbClear _control; //Flush the list. + +ctrlSetText [20322,format [localize "STR_Price_Fuel_Pump",life_fuelPrices]]; +ctrlSetText [20323,format ["Total : %1$",life_fuelPrices * 0.1]]; + +//Loop through +{ + _className = typeOf (_x select 0); + _fuelleft = _x select 1; + + _vehicleInfo = [_className]call life_fnc_fetchVehInfo; + _control lbAdd (_vehicleInfo select 3); + _control lbSetPicture [(lbSize _control)-1,(_vehicleInfo select 2)]; + _control lbSetData [(lbSize _control)-1,_className]; + _control lbSetValue [(lbSize _control)-1,_ForEachIndex]; +} forEach vehicleFuelList; diff --git a/life_client/core/shops/fn_atmMenu.sqf b/life_client/core/shops/fn_atmMenu.sqf new file mode 100644 index 00000000..858d75d4 --- /dev/null +++ b/life_client/core/shops/fn_atmMenu.sqf @@ -0,0 +1,43 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_atmMenu.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Opens and manages the bank menu. +*/ +private["_units","_type"]; + +if (!life_use_atm) exitWith { + hint format [localize "STR_Shop_ATMRobbed",(LIFE_SETTINGS(getNumber,"noatm_timer"))]; +}; + +if (!dialog) then { + if (!(createDialog "Life_atm_management")) exitWith {}; +}; + +disableSerialization; +_units = CONTROL(2700,2703); + +lbClear _units; +CONTROL(2700,2701) ctrlSetStructuredText parseText format[" $%1
$%2",[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + +{ + _name = _x getVariable ["realname",name _x]; + if (alive _x && (!(_name isEqualTo profileName))) then { + switch (side _x) do { + case west: {_type = "Cop"}; + case civilian: {_type = "Civ"}; + case independent: {_type = "EMS"}; + }; + _units lbAdd format["%1 (%2)",_x getVariable ["realname",name _x],_type]; + _units lbSetData [(lbSize _units)-1,str(_x)]; + }; +} forEach playableUnits; + +lbSetCurSel [2703,0]; + +if (isNil {(group player getVariable "gang_bank")}) then { + (CONTROL(2700,2705)) ctrlEnable false; + (CONTROL(2700,2706)) ctrlEnable false; +}; diff --git a/life_client/core/shops/fn_buyClothes.sqf b/life_client/core/shops/fn_buyClothes.sqf new file mode 100644 index 00000000..bf337f5e --- /dev/null +++ b/life_client/core/shops/fn_buyClothes.sqf @@ -0,0 +1,25 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_buyClothes.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Buys the current set of clothes and closes out of the shop interface. +*/ +private["_price"]; +if ((lbCurSel 3101) isEqualTo -1) exitWith {titleText[localize "STR_Shop_NoClothes","PLAIN"];}; + +_price = 0; +{ + if (!(_x isEqualTo -1)) then { + _price = _price + _x; + }; +} forEach life_clothing_purchase; + +if (_price > CASH) exitWith {titleText[localize "STR_Shop_NotEnoughClothes","PLAIN"];}; +CASH = CASH - _price; +[0] call SOCK_fnc_updatePartial; + +life_clothesPurchased = true; +[] call life_fnc_playerSkins; +closeDialog 0; \ No newline at end of file diff --git a/life_client/core/shops/fn_changeClothes.sqf b/life_client/core/shops/fn_changeClothes.sqf new file mode 100644 index 00000000..3a51af22 --- /dev/null +++ b/life_client/core/shops/fn_changeClothes.sqf @@ -0,0 +1,49 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_changeClothes.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Used in the clothing store to show a 'preview' of the piece of clothing. +*/ +disableSerialization; +private["_control","_selection","_data","_price","_total","_totalPrice"]; +_control = (_this select 0) select 0; +_selection = (_this select 0) select 1; +_price = (findDisplay 3100) displayCtrl 3102; +_total = (findDisplay 3100) displayCtrl 3106; +if (_selection isEqualTo -1) exitWith {hint localize "STR_Shop_NoSelection";}; +if (isNull _control) exitWith {hint localize "STR_Shop_NoDisplay"}; +if (life_cMenu_lock) exitWith {}; +life_cMenu_lock = true; + +life_clothing_purchase set[life_clothing_filter,(_control lbValue _selection)]; +_data = _control lbData _selection; + +if (_data isEqualTo "NONE") then { + _item = switch (life_clothing_filter) do { + case 0: {uniform player}; + case 1: {headGear player}; + case 2: {goggles player}; + case 3: {vest player}; + case 4: {backpack player}; + }; + + [_item,false] call life_fnc_handleItem; +} else { + [_data,true,nil,nil,nil,nil,nil,true] call life_fnc_handleItem; +}; + +life_cMenu_lock = false; +_price ctrlSetStructuredText parseText format [(localize "STR_GNOTF_Price")+ " $%1",[(_control lbValue _selection)] call life_fnc_numberText]; + +_totalPrice = 0; +{ + if (_x != -1) then { + _totalPrice = _totalPrice + _x; + }; +} forEach life_clothing_purchase; + +_total ctrlSetStructuredText parseText format [(localize "STR_Shop_Total")+ " $%1",[_totalPrice] call life_fnc_numberText]; + +[] call life_fnc_playerSkins; diff --git a/life_client/core/shops/fn_chopShopMenu.sqf b/life_client/core/shops/fn_chopShopMenu.sqf new file mode 100644 index 00000000..3e095c66 --- /dev/null +++ b/life_client/core/shops/fn_chopShopMenu.sqf @@ -0,0 +1,47 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_chopShopMenu.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Opens & initializes the chop shop menu. +*/ +private["_control","_price","_nearVehicles","_chopMultiplier","_chopable","_nearUnits"]; +if (life_action_inUse) exitWith {hint localize "STR_NOTF_ActionInProc"}; +if (playerSide != civilian) exitWith {hint localize "STR_NOTF_notAllowed"}; +disableSerialization; +_chopable = LIFE_SETTINGS(getArray,"chopShop_vehicles"); +_nearVehicles = nearestObjects [getMarkerPos (_this select 3),_chopable,25]; +_nearUnits = (nearestObjects[player,["Man"],5]) arrayIntersect playableUnits; +if (count _nearUnits > 1) exitWith {hint localize "STR_NOTF_PlayerNear"}; + +life_chopShop = _this select 3; +//Error check +if (count _nearVehicles isEqualTo 0) exitWith {titleText[localize "STR_Shop_NoVehNear","PLAIN"];}; +if (!(createDialog "Chop_Shop")) exitWith {hint localize "STR_Shop_ChopShopError"}; + +_control = CONTROL(39400,39402); +{ + if (alive _x) then { + _className = typeOf _x; + _classNameLife = _className; + _displayName = getText(configFile >> "CfgVehicles" >> _className >> "displayName"); + _picture = getText(configFile >> "CfgVehicles" >> _className >> "picture"); + + if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _classNameLife)) then { + _classNameLife = "Default"; //Use Default class if it doesn't exist + diag_log format["%1: LifeCfgVehicles class doesn't exist",_className]; + }; + + _price = M_CONFIG(getNumber,"LifeCfgVehicles",_classNameLife,"price"); + _chopMultiplier = LIFE_SETTINGS(getNumber,"vehicle_chopShop_multiplier"); + + _price = _price * _chopMultiplier; + if (!isNil "_price" && count crew _x isEqualTo 0) then { + _control lbAdd _displayName; + _control lbSetData [(lbSize _control)-1,str(_forEachIndex)]; + _control lbSetPicture [(lbSize _control)-1,_picture]; + _control lbSetValue [(lbSize _control)-1,_price]; + }; + }; +} forEach _nearVehicles; diff --git a/life_client/core/shops/fn_chopShopSelection.sqf b/life_client/core/shops/fn_chopShopSelection.sqf new file mode 100644 index 00000000..1683d3da --- /dev/null +++ b/life_client/core/shops/fn_chopShopSelection.sqf @@ -0,0 +1,21 @@ +/* + File: fn_chopShopSelection.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Displays the pricing for the currently selected vehicle. +*/ +disableSerialization; +private["_control","_selection","_price","_priceTag"]; +params [ + ["_control",controlNull,[controlNull]], + ["_selection",-1,[0]] +]; + +//Error checks +if (isNull _control || _selection isEqualTo -1) exitWith {}; + +_price = _control lbValue _selection; + +_priceTag = ((findDisplay 39400) displayCtrl 39401); +_priceTag ctrlSetStructuredText parseText format ["" +(localize "STR_GNOTF_Price")+ "$%1",[(_price)] call life_fnc_numberText]; diff --git a/life_client/core/shops/fn_chopShopSell.sqf b/life_client/core/shops/fn_chopShopSell.sqf new file mode 100644 index 00000000..46437ade --- /dev/null +++ b/life_client/core/shops/fn_chopShopSell.sqf @@ -0,0 +1,40 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_chopShopSell.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Sells the selected vehicle off. +*/ +disableSerialization; +private["_control","_price","_vehicle","_nearVehicles","_price2","_chopable"]; +_control = CONTROL(39400,39402); +_price = _control lbValue (lbCurSel _control); +_vehicle = _control lbData (lbCurSel _control); +_vehicle = call compile format["%1", _vehicle]; +_chopable = LIFE_SETTINGS(getArray,"chopShop_vehicles"); +_nearVehicles = nearestObjects [getMarkerPos life_chopShop,_chopable,25]; +_vehicle = (_nearVehicles select _vehicle); +if (isNull _vehicle) exitWith {}; + +hint localize "STR_Shop_ChopShopSelling"; +life_action_inUse = true; +_price2 = CASH + _price; +[0] call SOCK_fnc_updatePartial; + +if (life_HC_isActive) then { + [player,_vehicle,_price,_price2] remoteExecCall ["HC_fnc_chopShopSell",HC_Life]; +} else { + [player,_vehicle,_price,_price2] remoteExecCall ["TON_fnc_chopShopSell",RSERV]; +}; + +if (LIFE_SETTINGS(getNumber,"player_advancedLog") isEqualTo 1) then { + if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then { + advanced_log = format [localize "STR_DL_AL_choppedVehicle_BEF",_vehicle,[_price] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + } else { + advanced_log = format [localize "STR_DL_AL_choppedVehicle",profileName,(getPlayerUID player),_vehicle,[_price] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + }; + publicVariableServer "advanced_log"; +}; + +closeDialog 0; \ No newline at end of file diff --git a/life_client/core/shops/fn_clothingFilter.sqf b/life_client/core/shops/fn_clothingFilter.sqf new file mode 100644 index 00000000..29e488f2 --- /dev/null +++ b/life_client/core/shops/fn_clothingFilter.sqf @@ -0,0 +1,108 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_clothingFilter.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Functionality for filtering clothing types in the menu. +*/ +disableSerialization; +private["_control","_selection","_list","_filter","_pic","_details"]; +_control = _this select 0; +_selection = _this select 1; +life_clothing_filter = _selection; + +switch (_selection) do { + case 4: { + life_shop_cam camSetTarget (player modelToWorld [0,-.15,1.3]); + life_shop_cam camSetPos (player modelToWorld [1,-4,2]); + life_shop_cam camCommit 1; + }; + + case 0: { + life_shop_cam camSetTarget (player modelToWorld [0,0,1]); + life_shop_cam camSetPos (player modelToWorld [1,4,2]); + life_shop_cam camCommit 1; + }; + + case 3: { + life_shop_cam camSetTarget (player modelToWorld [0,0,1.4]); + life_shop_cam camSetPos (player modelToWorld [-.1,2,1.4]); + life_shop_cam camCommit 1; + }; + + default { + life_shop_cam camSetTarget (player modelToWorld [0,0,1.6]); + life_shop_cam camSetPos (player modelToWorld [-.5,1,1.6]); + life_shop_cam camCommit 1; + }; +}; + +if (isNull (findDisplay 3100)) exitWith {}; + +_list = CONTROL(3100,3101); +lbClear _filter; +lbClear _list; + +_array = switch (_selection) do { + case 0: {M_CONFIG(getArray,"Clothing",life_clothing_store,"uniforms");}; + case 1: {M_CONFIG(getArray,"Clothing",life_clothing_store,"headgear");}; + case 2: {M_CONFIG(getArray,"Clothing",life_clothing_store,"goggles");}; + case 3: {M_CONFIG(getArray,"Clothing",life_clothing_store,"vests");}; + case 4: {M_CONFIG(getArray,"Clothing",life_clothing_store,"backpacks");}; +}; + +{ + _className = (_x select 0); + _displayName = (_x select 1); + _price = (_x select 2); + _levelAssert = (_x select 3); + _levelName = (_levelAssert select 0); + _levelType = (_levelAssert select 1); + _levelValue = (_levelAssert select 2); + + if (!(_className isEqualTo "NONE")) then { + _details = [_className] call life_fnc_fetchCfgDetails; + _pic = (_details select 2); + }; + + if (!(_levelValue isEqualTo -1)) then { + _level = missionNamespace getVariable _levelName; + if (_level isEqualType {}) then {_level = FETCH_CONST(_level);}; + + + _bool = switch (_levelType) do { + case "SCALAR": {_level >= _levelValue}; + case "BOOL": {_level}; + case "EQUAL": {_level isEqualTo _levelValue}; + default {false}; + }; + + if (_bool && {!isNil "_details"}) then { + if (_displayName isEqualTo "") then { + _list lbAdd (_details select 1); + } else { + _list lbAdd _displayName; + }; + + _list lbSetData [(lbSize _list)-1,_className]; + _list lbSetValue [(lbSize _list)-1,_price]; + _list lbSetPicture [(lbSize _list)-1,_pic]; + }; + } else { + if (isNil "_details") then { + _list lbAdd _displayName; + _list lbSetData [(lbSize _list)-1,_className]; + } else { + if (_displayName isEqualTo "") then { + _list lbAdd (_details select 1); + } else { + _list lbAdd _displayName; + }; + + _list lbSetData [(lbSize _list)-1,_className]; + _list lbSetValue [(lbSize _list)-1,_price]; + _list lbSetPicture [(lbSize _list)-1,_pic]; + }; + }; +} forEach _array; diff --git a/life_client/core/shops/fn_clothingMenu.sqf b/life_client/core/shops/fn_clothingMenu.sqf new file mode 100644 index 00000000..df936da2 --- /dev/null +++ b/life_client/core/shops/fn_clothingMenu.sqf @@ -0,0 +1,256 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_clothingMenu.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Opens and initializes the clothing store menu. + Started clean, finished messy. +*/ +private["_list","_clothes","_pic","_filter","_pos","_oldPos","_oldDir","_oldBev","_flag","_shopTitle","_license","_shopSide","_exit","_testLogic","_nearVeh","_ut1","_ut2","_ut3","_ut4","_ut5","_light"]; +if (player != vehicle player) exitWith {titleText[localize "STR_NOTF_ActionInVehicle","PLAIN"];}; +_exit = false; + +/* License check & config validation */ +if (!isClass(missionConfigFile >> "Clothing" >> (_this select 3))) exitWith {}; //Bad config entry. +_shopTitle = M_CONFIG(getText,"Clothing",(_this select 3),"title"); +_shopSide = M_CONFIG(getText,"Clothing",(_this select 3),"side"); +_license = M_CONFIG(getText,"Clothing",(_this select 3),"license"); + +if (!(_shopSide isEqualTo "")) then { + _flag = switch (playerSide) do {case west: {"cop"}; case independent: {"med"}; default {"civ"};}; + if (!(_flag isEqualTo _shopSide)) then {_exit = true;}; +}; +if (_exit) exitWith {}; + +if (!(_license isEqualTo "")) then { + _flag = M_CONFIG(getText,"Licenses",_license,"side"); + if (!(LICENSE_VALUE(_license,_flag))) exitWith {hint localize "STR_Shop_Veh_NoLicense"; _exit = true;}; +}; +if (_exit) exitWith {}; + +ctrlSetText [3103,localize _shopTitle]; +/* Open up the menu */ +createDialog "Life_Clothing"; +disableSerialization; + +(findDisplay 3100) displaySetEventHandler ["KeyDown","if ((_this select 1) isEqualTo 1) then {closeDialog 0; [] call life_fnc_playerSkins;}"]; //Fix Custom Skin after ESC + +sliderSetRange [3107, 0, 360]; + +//Cop / Civ Pre Check +if (((_this select 3) in ["bruce","dive","reb","kart"] && playerSide != civilian)) exitWith {hint localize "STR_Shop_NotaCiv"; closeDialog 0;}; +if (((_this select 3) == "reb" && !license_civ_rebel)) exitWith {hint localize "STR_Shop_NotaReb"; closeDialog 0;}; +if (((_this select 3) in ["cop"] && playerSide != west)) exitWith {hint localize "STR_Shop_NotaCop"; closeDialog 0;}; +if (((_this select 3) in ["dive"] && !license_civ_dive)) exitWith { hint localize "STR_Shop_NotaDive"; closeDialog 0;}; + +if (LIFE_SETTINGS(getNumber,"clothing_noTP") isEqualTo 1) then { + _pos = getPosATL player; +} else { + if (LIFE_SETTINGS(getNumber,"clothing_box") isEqualTo 1) then { + _pos = [1000,1000,10000]; + } else { + switch (_this select 3) do { + case "reb": {_pos = [13590,12214.6,0.00141621];}; + case "cop": {_pos = [12817.5,16722.9,0.00151062];}; + case "kart": {_pos = [14120.5,16440.3,0.00139236];}; + default {_pos = [17088.2,11313.6,0.00136757];}; + }; + }; + + _oldDir = getDir player; + _oldPos = visiblePositionASL player; + _oldBev = behaviour player; + + _testLogic = "Logic" createVehicleLocal _pos; + _testLogic setPosATL _pos; + + _nearVeh = _testLogic nearEntities ["AllVehicles", 20]; + + if (LIFE_SETTINGS(getNumber,"clothing_box") isEqualTo 1) then { + _ut1 = "UserTexture10m_F" createVehicleLocal (_testLogic modelToWorld [0,5,10]); + _ut1 attachTo [_testLogic,[0,5,5]]; + _ut1 setDir 0; + _ut2 = "UserTexture10m_F" createVehicleLocal (_testLogic modelToWorld [5,0,10]); + _ut2 attachTo [_testLogic,[5,0,5]]; + _ut2 setDir (getDir _testLogic) + 90; + _ut3 = "UserTexture10m_F" createVehicleLocal (_testLogic modelToWorld [-5,0,10]); + _ut3 attachTo [_testLogic,[-5,0,5]]; + _ut3 setDir (getDir _testLogic) - 90; + _ut4 = "UserTexture10m_F" createVehicleLocal (_testLogic modelToWorld [0,-5,10]); + _ut4 attachTo [_testLogic,[0,-5,5]]; + _ut4 setDir 180; + _ut5 = "UserTexture10m_F" createVehicleLocal (_testLogic modelToWorld [0,0,10]); + _ut5 attachTo [_testLogic,[0,0,0]]; + _ut5 setObjectTexture [0,"a3\map_data\gdt_concrete_co.paa"]; + detach _ut5; + _ut5 setVectorDirAndUp [[0,0,-.33],[0,.33,0]]; + }; + + _light = "#lightpoint" createVehicleLocal _pos; + _light setLightBrightness 0.5; + _light setLightColor [1,1,1]; + _light setLightAmbient [1,1,1]; + _light lightAttachObject [_testLogic, [0,0,0]]; + + {if (_x != player) then {_x hideObject true;};} forEach playableUnits; + if (LIFE_SETTINGS(getNumber,"clothing_box") isEqualTo 0) then { + {if (_x != player && _x != _light) then {_x hideObject true;};} forEach _nearVeh; + }; + + if (LIFE_SETTINGS(getNumber,"clothing_box") isEqualTo 1) then { + {_x setObjectTexture [0,"#(argb,8,8,3)color(0,0,0,1)"];} forEach [_ut1,_ut2,_ut3,_ut4]; + }; + + player setBehaviour "SAFE"; + player attachTo [_testLogic,[0,0,0]]; + player switchMove ""; + player setDir 360; +}; + +life_clothing_store = (_this select 3); + +/* Store license check */ +if (isClass(missionConfigFile >> "Licenses" >> life_clothing_store)) then { + _flag = M_CONFIG(getText,"Licenses",life_clothing_store,"side"); + _displayName = M_CONFIG(getText,"Licenses",life_clothing_store,"displayName"); + if (!(LICENSE_VALUE(life_clothing_store,_flag))) exitWith { + hint format[localize "STR_Shop_YouNeed",localize _displayName]; + closeDialog 0; + }; +}; + +//initialize camera view +life_shop_cam = "CAMERA" camCreate getPos player; +showCinemaBorder false; +life_shop_cam cameraEffect ["Internal", "Back"]; +life_shop_cam camSetTarget (player modelToWorld [0,0,1]); +life_shop_cam camSetPos (player modelToWorld [1,4,2]); +life_shop_cam camSetFOV .33; +life_shop_cam camSetFocus [50, 0]; +life_shop_cam camCommit 0; +life_cMenu_lock = false; + +if (isNull (findDisplay 3100)) exitWith {}; +_list = (findDisplay 3100) displayCtrl 3101; +_filter = (findDisplay 3100) displayCtrl 3105; +lbClear _filter; +lbClear _list; + +_filter lbAdd localize "STR_Shop_UI_Clothing"; +_filter lbAdd localize "STR_Shop_UI_Hats"; +_filter lbAdd localize "STR_Shop_UI_Glasses"; +_filter lbAdd localize "STR_Shop_UI_Vests"; +_filter lbAdd localize "STR_Shop_UI_Backpack"; + +_filter lbSetCurSel 0; + +life_oldClothes = uniform player; +life_olduniformItems = uniformItems player; +life_oldBackpack = backpack player; +life_oldVest = vest player; +life_oldVestItems = vestItems player; +life_oldBackpackItems = backpackItems player; +life_oldGlasses = goggles player; +life_oldHat = headgear player; + +[] call life_fnc_playerSkins; + +waitUntil {isNull (findDisplay 3100)}; +if (LIFE_SETTINGS(getNumber,"clothing_noTP") isEqualTo 0) then { + {if (_x != player) then {_x hideObject false;};} forEach playableUnits; + if (LIFE_SETTINGS(getNumber,"clothing_box") isEqualTo 0) then { + {if (_x != player && _x != _light) then {_x hideObject false;};} forEach _nearVeh; + }; + detach player; + player setBehaviour _oldBev; + player setPosASL _oldPos; + player setDir _oldDir; + if (LIFE_SETTINGS(getNumber,"clothing_box") isEqualTo 1) then { + {deleteVehicle _x;} forEach [_testLogic,_ut1,_ut2,_ut3,_ut4,_ut5,_light]; + } else { + {deleteVehicle _x;} forEach [_testLogic,_light]; + }; +}; +life_shop_cam cameraEffect ["TERMINATE","BACK"]; +camDestroy life_shop_cam; +life_clothing_filter = 0; +if (isNil "life_clothesPurchased") exitWith { + life_clothing_purchase = [-1,-1,-1,-1,-1]; + if (life_oldClothes != "") then {player addUniform life_oldClothes;} else {removeUniform player}; + if (life_oldHat != "") then {player addHeadgear life_oldHat} else {removeHeadgear player;}; + if (life_oldGlasses != "") then {player addGoggles life_oldGlasses;} else {removeGoggles player}; + if (backpack player != "") then { + if (life_oldBackpack isEqualTo "") then { + removeBackpack player; + } else { + removeBackpack player; + player addBackpack life_oldBackpack; + clearAllItemsFromBackpack player; + if (count life_oldBackpackItems > 0) then { + { + [_x,true,true] call life_fnc_handleItem; + } forEach life_oldBackpackItems; + }; + }; + }; + + if (count life_oldUniformItems > 0) then { + {[_x,true,false,false,true] call life_fnc_handleItem;} forEach life_oldUniformItems; + }; + + if (vest player != "") then { + if (life_oldVest isEqualTo "") then { + removeVest player; + } else { + player addVest life_oldVest; + if (count life_oldVestItems > 0) then { + {[_x,true,false,false,true] call life_fnc_handleItem;} forEach life_oldVestItems; + }; + }; + }; + [] call life_fnc_playerSkins; +}; +life_clothesPurchased = nil; + +//Check uniform purchase. +if ((life_clothing_purchase select 0) isEqualTo -1) then { + if (life_oldClothes != uniform player) then {player addUniform life_oldClothes;}; +}; +//Check hat +if ((life_clothing_purchase select 1) isEqualTo -1) then { + if (life_oldHat != headgear player) then {if (life_oldHat isEqualTo "") then {removeHeadGear player;} else {player addHeadGear life_oldHat;};}; +}; +//Check glasses +if ((life_clothing_purchase select 2) isEqualTo -1) then { + if (life_oldGlasses != goggles player) then { + if (life_oldGlasses isEqualTo "") then { + removeGoggles player; + } else { + player addGoggles life_oldGlasses; + }; + }; +}; +//Check Vest +if ((life_clothing_purchase select 3) isEqualTo -1) then { + if (life_oldVest != vest player) then { + if (life_oldVest isEqualTo "") then {removeVest player;} else { + player addVest life_oldVest; + {[_x,true,false,false,true] call life_fnc_handleItem;} forEach life_oldVestItems; + }; + }; +}; + +//Check Backpack +if ((life_clothing_purchase select 4) isEqualTo -1) then { + if (life_oldBackpack != backpack player) then { + if (life_oldBackpack isEqualTo "") then {removeBackpack player;} else { + removeBackpack player; + player addBackpack life_oldBackpack; + {[_x,true,true] call life_fnc_handleItem;} forEach life_oldBackpackItems; + }; + }; +}; + +life_clothing_purchase = [-1,-1,-1,-1,-1]; +[] call life_fnc_saveGear; diff --git a/life_client/core/shops/fn_impoundMenu.sqf b/life_client/core/shops/fn_impoundMenu.sqf new file mode 100644 index 00000000..56bc069f --- /dev/null +++ b/life_client/core/shops/fn_impoundMenu.sqf @@ -0,0 +1,54 @@ +/* + File: fn_impoundMenu.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Lists impounded vehicles. + DUE TO BE REWROTE IN NEW SYSTEM +*/ +private["_display","_cars","_name","_pic","_color","_text","_price"]; + +if (!dialog) then +{ + if (!(createDialog "Life_impound_menu")) exitWith {}; + life_impound_yard = _this select 3; +}; +disableSerialization; + +_display = findDisplay 2800; +if (isNull _display) exitWith {}; +_cars = _display displayCtrl 2801; +lbClear _cars; + +for "_i" from 0 to (count life_vehicles)-1 do +{ + _veh = life_vehicles select _i; + if (_veh distance impound_obj < 50) then + { + _price = [_veh] call life_fnc_impoundPrice; + switch (true) do + { + case (_veh isKindOf "Car") : {_price = _price + 100;}; + case (_veh isKindOf "Air") : {_price = _price + 650;}; + case (_veh isKindOf "Ship") : {_price = _price + 50;}; + }; + + if (_price > CASH) then + { + _price = _price + 200; + }; + _color = [(typeOf _veh),(_veh getVariable "Life_VEH_color")] call life_fnc_vehicleColorStr; + _text = format["(%1)",_color]; + if (_text == "()") then + { + _text = ""; + }; + + _name = getText(configFile >> "CfgVehicles" >> (typeOf _veh) >> "displayName"); + _pic = getText(configFile >> "CfgVehicles" >> (typeOf _veh) >> "picture"); + _cars lbAdd format["%1 %2 - Cost: $%3",_name,_text,[_price] call life_fnc_numberText]; + _cars lbSetPicture [(lbSize _cars)-1,_pic]; + _cars lbSetData [(lbSize _cars)-1,str(_i)]; + _cars lbSetValue [(lbSize _cars)-1,_price]; + }; +}; \ No newline at end of file diff --git a/life_client/core/shops/fn_vehicleShop3DPreview.sqf b/life_client/core/shops/fn_vehicleShop3DPreview.sqf new file mode 100644 index 00000000..e895c330 --- /dev/null +++ b/life_client/core/shops/fn_vehicleShop3DPreview.sqf @@ -0,0 +1,55 @@ +/** + * Bibliothèque de fonctions permettant la visualisation 3D d'objets + * + * Copyright (C) 2014 Team ~R3F~ + * + * This program is free software under the terms of the GNU General Public License version 3. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + /* + File: fn_vehicleShop3DPreview.sqf + Modified By: NiiRoZz + + Description: + Called when a new selection is made in the list box and + displays the new vehicle selected. +*/ + + +private ["_classView","_object","_id"]; + +if (isNil "life_preview_3D_vehicle_cam") then +{ + [] call life_fnc_vehicleShopInit3DPreview; +}; + +_classView = _this select 0; + +// Ignore non instantiable objects. +if (_classView != "" && {isClass (configFile >> "CfgVehicles" >> _classView) && {getNumber (configFile >> "CfgVehicles" >> _classView >> "scope") > 0}}) then +{ + // Skip if object view is the same as previous. + if (isNull life_preview_3D_vehicle_object || {_classView != typeOf life_preview_3D_vehicle_object}) then + { + if (!isNull life_preview_3D_vehicle_object) then {detach life_preview_3D_vehicle_object; deleteVehicle life_preview_3D_vehicle_object;}; + // Create and place the object in the sky + if (!life_pos_exist) then { + life_pos_attach = [[5000, 5000, 0]] call life_fnc_searchPosEmpty; + life_pos_exist = true; + life_preview_light = "#lightpoint" createVehicle life_pos_attach; + life_preview_light setLightBrightness 0.5; + life_preview_light setLightColor [1,1,1]; + life_preview_light setLightAmbient [1,1,1]; + }; + _object = _classView createVehicle life_pos_attach; + _id = player getVariable ["life_clientID",-1]; + [_object] remoteExecCall ["life_fnc_hideObj",-_id]; + [life_preview_light] remoteExecCall ["life_fnc_hideObj",-_id]; + [_object] call life_fnc_clearVehicleAmmo; + _object attachTo [life_attachment_point, life_pos_attach]; + + life_preview_3D_vehicle_object = _object; + }; +}; diff --git a/life_client/core/shops/fn_vehicleShopBuy.sqf b/life_client/core/shops/fn_vehicleShopBuy.sqf new file mode 100644 index 00000000..c817e06d --- /dev/null +++ b/life_client/core/shops/fn_vehicleShopBuy.sqf @@ -0,0 +1,152 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_vehicleShopBuy.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Does something with vehicle purchasing. +*/ +private["_mode","_vIndex","_spawnPoints","_className","_purchasePrice","_buyMultiplier","_rentMultiplier","_colorIndex","_spawnPoint","_vehicle","_vehicleList","_shopSide","_licenses","_licensesName","_exit","_initalPrice"]; +_mode = _this select 0; +_exit = false; +if ((lbCurSel 2302) isEqualTo -1) exitWith {hint localize "STR_Shop_Veh_DidntPick";closeDialog 0;}; +_className = lbData[2302,(lbCurSel 2302)]; +_vIndex = lbValue[2302,(lbCurSel 2302)]; +_vehicleList = M_CONFIG(getArray,"CarShops",(life_veh_shop select 0),"vehicles"); +_shopSide = M_CONFIG(getText,"CarShops",(life_veh_shop select 0),"side"); + +_licenses = switch (playerSide) do { + case civilian: {(M_CONFIG(getArray,"LifeCfgVehicles",_className,"licenses") select 0)}; + case west: {(M_CONFIG(getArray,"LifeCfgVehicles",_className,"licenses") select 1)}; + case independent: {(M_CONFIG(getArray,"LifeCfgVehicles",_className,"licenses") select 2)}; + case east: {(M_CONFIG(getArray,"LifeCfgVehicles",_className,"licenses") select 3)}; +}; + +_initalPrice = M_CONFIG(getNumber,"LifeCfgVehicles",_className,"price"); + +switch (playerSide) do { + case civilian: { + _buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_CIVILIAN"); + _rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_CIVILIAN"); + }; + case west: { + _buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_COP"); + _rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_COP"); + }; + case independent: { + _buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_MEDIC"); + _rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_MEDIC"); + }; + case east: { + _buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_OPFOR"); + _rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_OPFOR"); + }; +}; + + if (_mode) then { + _purchasePrice = round(_initalPrice * _buyMultiplier); + } else { + _purchasePrice = round(_initalPrice * _rentMultiplier); + }; +_colorIndex = lbValue[2304,(lbCurSel 2304)]; + +_licensesName = ""; +{ + if (!(_x isEqualTo "") && {!(LICENSE_VALUE(_x,_shopSide))}) then { + _licensesName = _licensesName + localize M_CONFIG(getText,"Licenses",_x,"displayName") + "
"; + _exit = true; + }; +} forEach _licenses; + +if (_exit) exitWith {hint parseText format[(localize "STR_Shop_Veh_NoLicense")+ "

%1",_licensesName];closeDialog 0;}; + +if (_purchasePrice < 0) exitWith {closeDialog 0;}; //Bad price entry +if (CASH < _purchasePrice) exitWith {hint format[localize "STR_Shop_Veh_NotEnough",[_purchasePrice - CASH] call life_fnc_numberText];closeDialog 0;}; + +_spawnPoints = life_veh_shop select 1; +_spawnPoint = ""; + +if (((life_veh_shop select 0) == "med_air_hs")) then { + if ((nearestObjects[(getMarkerPos _spawnPoints),["Air"],35]) isEqualTo []) exitWith {_spawnPoint = _spawnPoints}; +} else { + //Check if there is multiple spawn points and find a suitable spawnpoint. + if (_spawnPoints isEqualType []) then { + //Find an available spawn point. + {if ((nearestObjects[(getMarkerPos _x),["Car","Ship","Air"],5]) isEqualTo []) exitWith {_spawnPoint = _x};} forEach _spawnPoints; + } else { + if ((nearestObjects[(getMarkerPos _spawnPoints),["Car","Ship","Air"],5]) isEqualTo []) exitWith {_spawnPoint = _spawnPoints}; + }; +}; + + +if (_spawnPoint isEqualTo "") exitWith {hint localize "STR_Shop_Veh_Block";closeDialog 0;}; +CASH = CASH - _purchasePrice; +[0] call SOCK_fnc_updatePartial; +hint format[localize "STR_Shop_Veh_Bought",getText(configFile >> "CfgVehicles" >> _className >> "displayName"),[_purchasePrice] call life_fnc_numberText]; + +//Spawn the vehicle and prep it. +if ((life_veh_shop select 0) == "med_air_hs") then { + _vehicle = createVehicle [_className,[0,0,999],[], 0, "NONE"]; + waitUntil {!isNil "_vehicle" && {!isNull _vehicle}}; //Wait? + _vehicle allowDamage false; + _hs = nearestObjects[getMarkerPos _spawnPoint,["Land_Hospital_side2_F"],50] select 0; + _vehicle setPosATL (_hs modelToWorld [-0.4,-4,12.65]); + sleep 0.6; +} else { + _vehicle = createVehicle [_className, (getMarkerPos _spawnPoint), [], 0, "NONE"]; + waitUntil {!isNil "_vehicle" && {!isNull _vehicle}}; //Wait? + _vehicle allowDamage false; //Temp disable damage handling.. + _vehicle setPos (getMarkerPos _spawnPoint); + _vehicle setVectorUp (surfaceNormal (getMarkerPos _spawnPoint)); + _vehicle setDir (markerDir _spawnPoint); +}; +_vehicle lock 2; +[_vehicle,_colorIndex] call life_fnc_colorVehicle; +[_vehicle] call life_fnc_clearVehicleAmmo; +[_vehicle,"trunk_in_use",false,true] remoteExecCall ["TON_fnc_setObjVar",RSERV]; +[_vehicle,"vehicle_info_owners",[[getPlayerUID player,profileName]],true] remoteExecCall ["TON_fnc_setObjVar",RSERV]; +_vehicle disableTIEquipment true; //No Thermals.. They're cheap but addictive. + +//Side Specific actions. +switch (playerSide) do { + case west: { + [_vehicle,"cop_offroad",true] spawn life_fnc_vehicleAnimate; + }; + case civilian: { + if ((life_veh_shop select 2) isEqualTo "civ" && {_className == "B_Heli_Light_01_F"}) then { + [_vehicle,"civ_littlebird",true] spawn life_fnc_vehicleAnimate; + }; + }; + case independent: { + [_vehicle,"med_offroad",true] spawn life_fnc_vehicleAnimate; + }; +}; + +_vehicle allowDamage true; + +life_vehicles pushBack _vehicle; + +//Always handle key management by the server +[getPlayerUID player,playerSide,_vehicle,1] remoteExecCall ["TON_fnc_keyManagement",RSERV]; + +if (_mode) then { + if (!(_className in (LIFE_SETTINGS(getArray,"vehicleShop_rentalOnly")))) then { + if (life_HC_isActive) then { + [(getPlayerUID player),playerSide,_vehicle,_colorIndex] remoteExecCall ["HC_fnc_vehicleCreate",HC_Life]; + } else { + [(getPlayerUID player),playerSide,_vehicle,_colorIndex] remoteExecCall ["TON_fnc_vehicleCreate",RSERV]; + }; + }; +}; + +if (LIFE_SETTINGS(getNumber,"player_advancedLog") isEqualTo 1) then { + if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then { + advanced_log = format [localize "STR_DL_AL_boughtVehicle_BEF",_className,[_purchasePrice] call life_fnc_numberText,[CASH] call life_fnc_numberText,[BANK] call life_fnc_numberText]; + } else { + advanced_log = format [localize "STR_DL_AL_boughtVehicle",profileName,(getPlayerUID player),_className,[_purchasePrice] call life_fnc_numberText,[CASH] call life_fnc_numberText,[BANK] call life_fnc_numberText]; + }; + publicVariableServer "advanced_log"; +}; + +closeDialog 0; //Exit the menu. +true; diff --git a/life_client/core/shops/fn_vehicleShopEnd3DPreview.sqf b/life_client/core/shops/fn_vehicleShopEnd3DPreview.sqf new file mode 100644 index 00000000..2bf92817 --- /dev/null +++ b/life_client/core/shops/fn_vehicleShopEnd3DPreview.sqf @@ -0,0 +1,28 @@ +/** + * Bibliothèque de fonctions permettant la visualisation 3D d'objets + * + * Copyright (C) 2014 Team ~R3F~ + * + * This program is free software under the terms of the GNU General Public License version 3. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + File: fn_vehicleShopEnd3DPreview.sqf + Modified By: NiiRoZz + + Description: + Called when a player end the vehicle shop and destroy cam and vehicle +*/ + +if (!isNull life_preview_3D_vehicle_object) then {detach life_preview_3D_vehicle_object; deleteVehicle life_preview_3D_vehicle_object;}; +life_preview_3D_vehicle_object = objNull; + +life_preview_3D_vehicle_cam cameraEffect ["Terminate", "BACK"]; +camDestroy life_preview_3D_vehicle_cam; +deleteVehicle life_preview_light; +life_preview_light = objNull; +life_preview_3D_vehicle_cam = objNull; +life_pos_exist = false; +life_pos_attach = []; \ No newline at end of file diff --git a/life_client/core/shops/fn_vehicleShopInit3DPreview.sqf b/life_client/core/shops/fn_vehicleShopInit3DPreview.sqf new file mode 100644 index 00000000..b2229601 --- /dev/null +++ b/life_client/core/shops/fn_vehicleShopInit3DPreview.sqf @@ -0,0 +1,62 @@ +/** + * Bibliothèque de fonctions permettant la visualisation 3D d'objets + * + * Copyright (C) 2014 Team ~R3F~ + * + * This program is free software under the terms of the GNU General Public License version 3. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + File: fn_vehicleShopInit3DPreview.sqf + Modified By: NiiRoZz + + Description: + Called when a player open the vehicle shop and setup cam and the while for rotate around the vehicle +*/ +// Creating a camera. +life_preview_3D_vehicle_cam = "camera" camCreate ([[5000, 5000, 0]] call life_fnc_searchPosEmpty); +life_preview_3D_vehicle_cam cameraEffect ["Internal", "BACK"]; +life_preview_3D_vehicle_cam camSetFocus [-1, -1]; +showCinemaBorder false; +life_preview_3D_vehicle_cam camCommit 0; + +life_preview_3D_vehicle_object = objNull; + +// Thread execution performing a continuous rotation of the camera around the view object. +0 spawn +{ + // Until we left the visualization. + for "_i" from 0 to 1 step 0 do { + if (isNull life_preview_3D_vehicle_cam) exitWith {}; + private ["_object","_distanceCam","_azimuthCam"]; + + // Waiting for a view object. + waitUntil {!isNull life_preview_3D_vehicle_object}; + + _object = life_preview_3D_vehicle_object; + + _distanceCam = 2.25 * ( + [boundingBoxReal _object select 0 select 0, boundingBoxReal _object select 0 select 2] + distance + [boundingBoxReal _object select 1 select 0, boundingBoxReal _object select 1 select 2] + ); + _azimuthCam = 0; + + life_preview_3D_vehicle_cam camSetTarget _object; + life_preview_3D_vehicle_cam camSetPos (_object modelToWorld [_distanceCam * sin _azimuthCam, _distanceCam * cos _azimuthCam, _distanceCam * 0.33]); + life_preview_3D_vehicle_cam camCommit 0; + + // Rotation around the object. + for "_i" from 0 to 1 step 0 do { + if (!(life_preview_3D_vehicle_object isEqualTo _object)) exitWith {}; + _azimuthCam = _azimuthCam + 1.00; + + life_preview_3D_vehicle_cam camSetPos (_object modelToWorld [_distanceCam * sin _azimuthCam, _distanceCam * cos _azimuthCam, _distanceCam * 0.33]); + life_preview_3D_vehicle_cam camCommit 0.05; + + sleep 0.05; + }; + }; +}; diff --git a/life_client/core/shops/fn_vehicleShopLBChange.sqf b/life_client/core/shops/fn_vehicleShopLBChange.sqf new file mode 100644 index 00000000..b6e8f2d3 --- /dev/null +++ b/life_client/core/shops/fn_vehicleShopLBChange.sqf @@ -0,0 +1,108 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_vehicleShopLBChange.sqf + Author: Bryan "Tonic" Boardwine + Modified : NiiRoZz + + Description: + Called when a new selection is made in the list box and + displays various bits of information about the vehicle. +*/ +disableSerialization; +private["_className","_classNameLife","_initalPrice","_buyMultiplier","_rentMultiplier","_vehicleInfo","_colorArray","_ctrl","_trunkSpace","_maxspeed","_horsepower","_passengerseats","_fuel","_armor"]; + +//Fetch some information. +_className = (_this select 0) lbData (_this select 1); +_classNameLife = _className; +_vIndex = (_this select 0) lbValue (_this select 1); + +_initalPrice = M_CONFIG(getNumber,"LifeCfgVehicles",_classNameLife,"price"); + +switch (playerSide) do { + case civilian: { + _buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_CIVILIAN"); + _rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_CIVILIAN"); + }; + case west: { + _buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_COP"); + _rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_COP"); + }; + case independent: { + _buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_MEDIC"); + _rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_MEDIC"); + }; + case east: { + _buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_OPFOR"); + _rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_OPFOR"); + }; +}; + +_vehicleInfo = [_className] call life_fnc_fetchVehInfo; +_trunkSpace = [_className] call life_fnc_vehicleWeightCfg; +_maxspeed = (_vehicleInfo select 8); +_horsepower = (_vehicleInfo select 11); +_passengerseats = (_vehicleInfo select 10); +_fuel = (_vehicleInfo select 12); +_armor = (_vehicleInfo select 9); +[_className] call life_fnc_vehicleShop3DPreview; + +ctrlShow [2330,true]; +(CONTROL(2300,2303)) ctrlSetStructuredText parseText format[ + (localize "STR_Shop_Veh_UI_Rental")+ " $%1
" + + (localize "STR_Shop_Veh_UI_Ownership")+ " $%2
" + + (localize "STR_Shop_Veh_UI_MaxSpeed")+ " %3 km/h
" + + (localize "STR_Shop_Veh_UI_HPower")+ " %4
" + + (localize "STR_Shop_Veh_UI_PSeats")+ " %5
" + + (localize "STR_Shop_Veh_UI_Trunk")+ " %6
" + + (localize "STR_Shop_Veh_UI_Fuel")+ " %7
" + + (localize "STR_Shop_Veh_UI_Armor")+ " %8", + [round(_initalPrice * _rentMultiplier)] call life_fnc_numberText, + [round(_initalPrice * _buyMultiplier)] call life_fnc_numberText, + _maxspeed, + _horsepower, + _passengerseats, + if (_trunkSpace isEqualTo -1) then {"None"} else {_trunkSpace}, + _fuel, + _armor +]; + +_ctrl = CONTROL(2300,2304); +lbClear _ctrl; + +if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _classNameLife)) then { + _classNameLife = "Default"; //Use Default class if it doesn't exist + diag_log format["%1: LifeCfgVehicles class doesn't exist",_className]; +}; +_colorArray = M_CONFIG(getArray,"LifeCfgVehicles",_classNameLife,"textures"); + +{ + _flag = (_x select 1); + _textureName = (_x select 0); + if ((life_veh_shop select 2) isEqualTo _flag) then { + _ctrl lbAdd _textureName; + _ctrl lbSetValue [(lbSize _ctrl)-1,_forEachIndex]; + }; +} forEach _colorArray; + +_numberindexcolorarray = []; +for "_i" from 0 to (count(_colorArray) - 1) do { + _numberindexcolorarray pushBack _i; +}; +_indexrandom = _numberindexcolorarray call BIS_fnc_selectRandom; +_ctrl lbSetCurSel _indexrandom; + +if (_className in (LIFE_SETTINGS(getArray,"vehicleShop_rentalOnly"))) then { + ctrlEnable [2309,false]; +} else { + if (!(life_veh_shop select 3)) then { + ctrlEnable [2309,true]; + }; +}; + +if ((lbSize _ctrl)-1 != -1) then { + ctrlShow[2304,true]; +} else { + ctrlShow[2304,false]; +}; + +true; diff --git a/life_client/core/shops/fn_vehicleShopMenu.sqf b/life_client/core/shops/fn_vehicleShopMenu.sqf new file mode 100644 index 00000000..d35d2920 --- /dev/null +++ b/life_client/core/shops/fn_vehicleShopMenu.sqf @@ -0,0 +1,80 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_vehicleShopMenu.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Blah +*/ +private["_shop","_sideCheck","_spawnPoints","_shopFlag","_shopTitle","_disableBuy"]; +(_this select 3) params [ + ["_shop","",[""]], + ["_sideCheck",sideUnknown,[civilian]], + ["_spawnPoints","",["",[]]], + ["_shopFlag","",[""]], + ["_shopTitle","",[""]], + ["_disableBuy",false,[true]] +]; + +disableSerialization; +//Long boring series of checks +if (dialog) exitWith {}; +if (_shop isEqualTo "") exitWith {}; +if (_sideCheck != sideUnknown && {playerSide != _sideCheck}) exitWith {hint localize "STR_Shop_Veh_NotAllowed"}; +if (LIFE_SETTINGS(getNumber,"vehicleShop_3D") isEqualTo 1) then { + createDialog "Life_Vehicle_Shop_v2_3D"; +} else { + createDialog "Life_Vehicle_Shop_v2"; +}; + +life_veh_shop = [_shop,_spawnpoints,_shopFlag,_disableBuy]; //Store it so so other parts of the system can access it. + +ctrlSetText [2301,_shopTitle]; + +if (_disableBuy) then { + //Disable the buy button. + ctrlEnable [2309,false]; +}; + +//Fetch the shop config. +_vehicleList = M_CONFIG(getArray,"CarShops",_shop,"vehicles"); + +_control = CONTROL(2300,2302); +lbClear _control; //Flush the list. +ctrlShow [2330,false]; +ctrlShow [2304,false]; + +//Loop through +{ + _className = _x select 0; + _levelAssert = _x select 1; + _levelName = _levelAssert select 0; + _levelType = _levelAssert select 1; + _levelValue = _levelAssert select 2; + _showall = true; + + if (!(_levelValue isEqualTo -1)) then { + _level = missionNamespace getVariable _levelName; + if (_level isEqualType {}) then {_level = FETCH_CONST(_level);}; + + _showall = switch (_levelType) do { + case "SCALAR": {_level >= _levelValue}; + case "BOOL": {_level}; + case "EQUAL": {_level isEqualTo _levelValue}; + default {false}; + }; + }; + + if (_showall) then { + _vehicleInfo = [_className] call life_fnc_fetchVehInfo; + _control lbAdd (_vehicleInfo select 3); + _control lbSetPicture [(lbSize _control)-1,(_vehicleInfo select 2)]; + _control lbSetData [(lbSize _control)-1,_className]; + _control lbSetValue [(lbSize _control)-1,_ForEachIndex]; + }; +} forEach _vehicleList; + +if (LIFE_SETTINGS(getNumber,"vehicleShop_3D") isEqualTo 1) then { + [] call life_fnc_vehicleShopInit3DPreview; +}; +((findDisplay 2300) displayCtrl 2302) lbSetCurSel 0; diff --git a/life_client/core/shops/fn_virt_buy.sqf b/life_client/core/shops/fn_virt_buy.sqf new file mode 100644 index 00000000..34ded226 --- /dev/null +++ b/life_client/core/shops/fn_virt_buy.sqf @@ -0,0 +1,63 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_virt_buy.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Buy a virtual item from the store. +*/ +private["_type","_price","_amount","_diff","_name","_hideout"]; +if ((lbCurSel 2401) isEqualTo -1) exitWith {hint localize "STR_Shop_Virt_Nothing"}; +_type = lbData[2401,(lbCurSel 2401)]; +_price = lbValue[2401,(lbCurSel 2401)]; +_amount = ctrlText 2404; +if (!([_amount] call TON_fnc_isnumber)) exitWith {hint localize "STR_Shop_Virt_NoNum";}; +_diff = [_type,parseNumber(_amount),life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff; +_amount = parseNumber(_amount); +if (_diff <= 0) exitWith {hint localize "STR_NOTF_NoSpace"}; +_amount = _diff; +_hideout = (nearestObjects[getPosATL player,["Land_u_Barracks_V2_F","Land_i_Barracks_V2_F"],25]) select 0; +if ((_price * _amount) > CASH && {!isNil "_hideout" && {!isNil {group player getVariable "gang_bank"}} && {(group player getVariable "gang_bank") <= _price * _amount}}) exitWith {hint localize "STR_NOTF_NotEnoughMoney"}; +if ((time - life_action_delay) < 0.2) exitWith {hint localize "STR_NOTF_ActionDelay";}; +life_action_delay = time; + +_name = M_CONFIG(getText,"VirtualItems",_type,"displayName"); + +if ([true,_type,_amount] call life_fnc_handleInv) then { + if (!isNil "_hideout" && {!isNil {group player getVariable "gang_bank"}} && {(group player getVariable "gang_bank") >= _price}) then { + _action = [ + format[(localize "STR_Shop_Virt_Gang_FundsMSG")+ "

" +(localize "STR_Shop_Virt_Gang_Funds")+ " $%1
" +(localize "STR_Shop_Virt_YourFunds")+ " $%2", + [(group player getVariable "gang_bank")] call life_fnc_numberText, + [CASH] call life_fnc_numberText + ], + localize "STR_Shop_Virt_YourorGang", + localize "STR_Shop_Virt_UI_GangFunds", + localize "STR_Shop_Virt_UI_YourCash" + ] call BIS_fnc_guiMessage; + if (_action) then { + hint format[localize "STR_Shop_Virt_BoughtGang",_amount,(localize _name),[(_price * _amount)] call life_fnc_numberText]; + _funds = group player getVariable "gang_bank"; + _funds = _funds - (_price * _amount); + group player setVariable ["gang_bank",_funds,true]; + + if (life_HC_isActive) then { + [1,group player] remoteExecCall ["HC_fnc_updateGang",HC_Life]; + } else { + [1,group player] remoteExecCall ["TON_fnc_updateGang",RSERV]; + }; + + } else { + if ((_price * _amount) > CASH) exitWith {[false,_type,_amount] call life_fnc_handleInv; hint localize "STR_NOTF_NotEnoughMoney";}; + hint format[localize "STR_Shop_Virt_BoughtItem",_amount,(localize _name),[(_price * _amount)] call life_fnc_numberText]; + CASH = CASH - _price * _amount; + }; + } else { + if ((_price * _amount) > CASH) exitWith {hint localize "STR_NOTF_NotEnoughMoney"; [false,_type,_amount] call life_fnc_handleInv;}; + hint format[localize "STR_Shop_Virt_BoughtItem",_amount,(localize _name),[(_price * _amount)] call life_fnc_numberText]; + CASH = CASH - _price * _amount; + }; + [] call life_fnc_virt_update; +}; + +[0] call SOCK_fnc_updatePartial; +[3] call SOCK_fnc_updatePartial; diff --git a/life_client/core/shops/fn_virt_menu.sqf b/life_client/core/shops/fn_virt_menu.sqf new file mode 100644 index 00000000..2d74425e --- /dev/null +++ b/life_client/core/shops/fn_virt_menu.sqf @@ -0,0 +1,59 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_virt_menu.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Initialize the virtual shop menu. +*/ +private["_exit","_shopSide","_license","_levelAssert","_levelName","_levelType","_levelValue","_levelMsg","_flag"]; +if (isNil {(_this select 3)}) exitWith {}; +_exit = false; +_shopSide = M_CONFIG(getText,"VirtualShops",(_this select 3),"side"); +_license = M_CONFIG(getText,"VirtualShops",(_this select 3),"license"); +_levelAssert = M_CONFIG(getArray,"VirtualShops",(_this select 3),"level"); +_levelName = (_levelAssert select 0); +_levelType = (_levelAssert select 1); +_levelValue = (_levelAssert select 2); +_levelMsg = (_levelAssert select 3); +life_shop_type = _this select 3; +life_shop_npc = _this select 0; + +if (!(_shopSide isEqualTo "")) then { + _flag = switch (playerSide) do {case west: {"cop"}; case independent: {"med"}; default {"civ"};}; + if (!(_flag isEqualTo _shopSide)) then {_exit = true;}; +}; +if (_exit) exitWith {}; + +if (!(_license isEqualTo "")) then { + _flag = M_CONFIG(getText,"Licenses",_license,"side"); + if (!(LICENSE_VALUE(_license,_flag))) exitWith {hint localize "STR_Shop_Veh_NoLicense"; _exit = true;}; +}; +if (_exit) exitWith {}; + +if (!(_levelValue isEqualTo -1)) then { + _level = missionNamespace getVariable _levelName; + if (_level isEqualType {}) then {_level = FETCH_CONST(_level);}; + + _flag = switch (_levelType) do { + case "SCALAR": {_level >= _levelValue}; + case "BOOL": {_level}; + case "EQUAL": {_level isEqualTo _levelValue}; + default {false}; + }; + if (!(_flag)) then { + _exit = true; + if (_levelMsg isEqualTo "") then { + _levelMsg = (localize "STR_Shop_Veh_NotAllowed"); + } else { + if (isLocalized _levelMsg) then { + _levelMsg = (localize _levelMsg); + }; + }; + }; +}; +if (_exit) exitWith {hint _levelMsg;}; + +createDialog "shops_menu"; + +[] call life_fnc_virt_update; diff --git a/life_client/core/shops/fn_virt_sell.sqf b/life_client/core/shops/fn_virt_sell.sqf new file mode 100644 index 00000000..4c6baaee --- /dev/null +++ b/life_client/core/shops/fn_virt_sell.sqf @@ -0,0 +1,54 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_virt_sell.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Sell a virtual item to the store / shop +*/ +private["_type","_index","_price","_amount","_name"]; +if ((lbCurSel 2402) isEqualTo -1) exitWith {}; +_type = lbData[2402,(lbCurSel 2402)]; +_price = M_CONFIG(getNumber,"VirtualItems",_type,"sellPrice"); +if (_price isEqualTo -1) exitWith {}; + +_amount = ctrlText 2405; +if (!([_amount] call TON_fnc_isnumber)) exitWith {hint localize "STR_Shop_Virt_NoNum";}; +_amount = parseNumber (_amount); +if (_amount > (ITEM_VALUE(_type))) exitWith {hint localize "STR_Shop_Virt_NotEnough"}; +if ((time - life_action_delay) < 0.2) exitWith {hint localize "STR_NOTF_ActionDelay";}; +life_action_delay = time; + +_price = (_price * _amount); +_name = M_CONFIG(getText,"VirtualItems",_type,"displayName"); +if ([false,_type,_amount] call life_fnc_handleInv) then { + hint format[localize "STR_Shop_Virt_SellItem",_amount,(localize _name),[_price] call life_fnc_numberText]; + CASH = CASH + _price; + [0] call SOCK_fnc_updatePartial; + [] call life_fnc_virt_update; +}; + +if (life_shop_type isEqualTo "drugdealer") then { + private["_array","_ind","_val"]; + _array = life_shop_npc getVariable ["sellers",[]]; + _ind = [getPlayerUID player,_array] call TON_fnc_index; + if (!(_ind isEqualTo -1)) then { + _val = ((_array select _ind) select 2); + _val = _val + _price; + _array set[_ind,[getPlayerUID player,profileName,_val]]; + life_shop_npc setVariable ["sellers",_array,true]; + } else { + _array pushBack [getPlayerUID player,profileName,_price]; + life_shop_npc setVariable ["sellers",_array,true]; + }; +}; + +if (life_shop_type isEqualTo "gold" && (LIFE_SETTINGS(getNumber,"noatm_timer")) > 0) then { + [] spawn { + life_use_atm = false; + sleep ((LIFE_SETTINGS(getNumber,"noatm_timer")) * 60); + life_use_atm = true; + }; +}; + +[3] call SOCK_fnc_updatePartial; \ No newline at end of file diff --git a/life_client/core/shops/fn_virt_update.sqf b/life_client/core/shops/fn_virt_update.sqf new file mode 100644 index 00000000..69816c9b --- /dev/null +++ b/life_client/core/shops/fn_virt_update.sqf @@ -0,0 +1,50 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_virt_update.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Update and fill the virtual shop menu. +*/ +private["_item_list","_gear_list","_shopItems","_name","_price"]; +disableSerialization; + +//Setup control vars. +_item_list = CONTROL(2400,2401); +_gear_list = CONTROL(2400,2402); + +//Purge list +lbClear _item_list; +lbClear _gear_list; + +if (!isClass(missionConfigFile >> "VirtualShops" >> life_shop_type)) exitWith {closeDialog 0; hint localize "STR_NOTF_ConfigDoesNotExist";}; //Make sure the entry exists.. +ctrlSetText[2403,localize (M_CONFIG(getText,"VirtualShops",life_shop_type,"name"))]; +_shopItems = M_CONFIG(getArray,"VirtualShops",life_shop_type,"items"); + +{ + _displayName = M_CONFIG(getText,"VirtualItems",_x,"displayName"); + _price = M_CONFIG(getNumber,"VirtualItems",_x,"buyPrice"); + if (!(_price isEqualTo -1)) then { + _item_list lbAdd format["%1 ($%2)",(localize _displayName),[_price] call life_fnc_numberText]; + _item_list lbSetData [(lbSize _item_list)-1,_x]; + _item_list lbSetValue [(lbSize _item_list)-1,_price]; + _icon = M_CONFIG(getText,"VirtualItems",_x,"icon"); + if (!(_icon isEqualTo "")) then { + _item_list lbSetPicture [(lbSize _item_list)-1,_icon]; + }; + }; +} forEach _shopItems; + +{ + _name = M_CONFIG(getText,"VirtualItems",_x,"displayName"); + _val = ITEM_VALUE(_x); + + if (_val > 0) then { + _gear_list lbAdd format["%2 [x%1]",_val,(localize _name)]; + _gear_list lbSetData [(lbSize _gear_list)-1,_x]; + _icon = M_CONFIG(getText,"VirtualItems",_x,"icon"); + if (!(_icon isEqualTo "")) then { + _gear_list lbSetPicture [(lbSize _gear_list)-1,_icon]; + }; + }; +} forEach _shopItems; diff --git a/life_client/core/shops/fn_weaponShopAccs.sqf b/life_client/core/shops/fn_weaponShopAccs.sqf new file mode 100644 index 00000000..fb44dede --- /dev/null +++ b/life_client/core/shops/fn_weaponShopAccs.sqf @@ -0,0 +1,45 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_weaponShopAccs.sqf + Author: Daniel Stuart + + Description: + Set Weapon Shop in accessories mode +*/ +disableSerialization; + +if ((uiNamespace getVariable ["Weapon_Accessories",0]) isEqualTo 0) then { + private["_weapon","_slotArray","_weaponArray"]; + _weapon = lbData[38403,lbCurSel (38403)]; + _slotArray = []; + _weaponArray = []; + + if (isArray (configFile >> "CfgWeapons" >> _weapon >> "WeaponSlotsInfo" >> "CowsSlot" >> "compatibleItems")) then { + _slotArray = FETCH_CONFIG3(getArray,"CfgWeapons",_weapon,"WeaponSlotsInfo","CowsSlot","compatibleItems"); + { + _weaponArray pushBack _x; + } forEach _slotArray; + }; + if (isArray (configFile >> "CfgWeapons" >> _weapon >> "WeaponSlotsInfo" >> "MuzzleSlot" >> "compatibleItems")) then { + _slotArray = FETCH_CONFIG3(getArray,"CfgWeapons",_weapon,"WeaponSlotsInfo","MuzzleSlot","compatibleItems"); + { + _weaponArray pushBack _x; + } forEach _slotArray; + }; + if (isArray (configFile >> "CfgWeapons" >> _weapon >> "WeaponSlotsInfo" >> "PointerSlot" >> "compatibleItems")) then { + _slotArray = FETCH_CONFIG3(getArray,"CfgWeapons",_weapon,"WeaponSlotsInfo","PointerSlot","compatibleItems"); + { + _weaponArray pushBack _x; + } forEach _slotArray; + }; + if (isArray (configFile >> "CfgWeapons" >> _weapon >> "WeaponSlotsInfo" >> "UnderBarrelSlot" >> "compatibleItems")) then { + _slotArray = FETCH_CONFIG3(getArray,"CfgWeapons",_weapon,"WeaponSlotsInfo","UnderBarrelSlot","compatibleItems"); + { + _weaponArray pushBack _x; + } forEach _slotArray; + }; + uiNamespace setVariable ["Accessories_Array",_weaponArray]; + uiNamespace setVariable ["Weapon_Accessories",1]; +} else { + uiNamespace setVariable ["Weapon_Accessories",0]; +}; diff --git a/life_client/core/shops/fn_weaponShopBuySell.sqf b/life_client/core/shops/fn_weaponShopBuySell.sqf new file mode 100644 index 00000000..10aa947d --- /dev/null +++ b/life_client/core/shops/fn_weaponShopBuySell.sqf @@ -0,0 +1,72 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_weaponShopBuySell.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Master handling of the weapon shop for buying / selling an item. +*/ +disableSerialization; +private["_price","_item","_itemInfo","_bad"]; +if ((lbCurSel 38403) isEqualTo -1) exitWith {hint localize "STR_Shop_Weapon_NoSelect"}; +_price = lbValue[38403,(lbCurSel 38403)]; if (isNil "_price") then {_price = 0;}; +_item = lbData[38403,(lbCurSel 38403)]; +_itemInfo = [_item] call life_fnc_fetchCfgDetails; + +_bad = ""; + +if ((_itemInfo select 6) != "CfgVehicles") then { + if ((_itemInfo select 4) in [4096,131072]) then { + if (!(player canAdd _item) && (uiNamespace getVariable ["Weapon_Shop_Filter",0]) != 1) exitWith {_bad = (localize "STR_NOTF_NoRoom")}; + }; +}; + +if (_bad != "") exitWith {hint _bad}; + +if ((uiNamespace getVariable ["Weapon_Shop_Filter",0]) isEqualTo 1) then { + CASH = CASH + _price; + [_item,false] call life_fnc_handleItem; + hint parseText format[localize "STR_Shop_Weapon_Sold",_itemInfo select 1,[_price] call life_fnc_numberText]; + [nil,(uiNamespace getVariable ["Weapon_Shop_Filter",0])] call life_fnc_weaponShopFilter; //Update the menu. +} else { + private["_hideout"]; + _hideout = (nearestObjects[getPosATL player,["Land_u_Barracks_V2_F","Land_i_Barracks_V2_F"],25]) select 0; + if (!isNil "_hideout" && {!isNil {group player getVariable "gang_bank"}} && {(group player getVariable "gang_bank") >= _price}) then { + _action = [ + format[(localize "STR_Shop_Virt_Gang_FundsMSG")+ "

" +(localize "STR_Shop_Virt_Gang_Funds")+ " $%1
" +(localize "STR_Shop_Virt_YourFunds")+ " $%2", + [(group player getVariable "gang_bank")] call life_fnc_numberText, + [CASH] call life_fnc_numberText + ], + localize "STR_Shop_Virt_YourorGang", + localize "STR_Shop_Virt_UI_GangFunds", + localize "STR_Shop_Virt_UI_YourCash" + ] call BIS_fnc_guiMessage; + if (_action) then { + hint parseText format[localize "STR_Shop_Weapon_BoughtGang",_itemInfo select 1,[_price] call life_fnc_numberText]; + _funds = group player getVariable "gang_bank"; + _funds = _funds - _price; + group player setVariable ["gang_bank",_funds,true]; + [_item,true] spawn life_fnc_handleItem; + + if (life_HC_isActive) then { + [1,group player] remoteExecCall ["HC_fnc_updateGang",HC_Life]; + } else { + [1,group player] remoteExecCall ["TON_fnc_updateGang",RSERV]; + }; + + + } else { + if (_price > CASH) exitWith {hint localize "STR_NOTF_NotEnoughMoney"}; + hint parseText format[localize "STR_Shop_Weapon_BoughtItem",_itemInfo select 1,[_price] call life_fnc_numberText]; + CASH = CASH - _price; + [_item,true] spawn life_fnc_handleItem; + }; + } else { + if (_price > CASH) exitWith {hint localize "STR_NOTF_NotEnoughMoney"}; + hint parseText format[localize "STR_Shop_Weapon_BoughtItem",_itemInfo select 1,[_price] call life_fnc_numberText]; + CASH = CASH - _price; + [_item,true] spawn life_fnc_handleItem; + }; +}; +[0] call SOCK_fnc_updatePartial; +[] call life_fnc_saveGear; \ No newline at end of file diff --git a/life_client/core/shops/fn_weaponShopFilter.sqf b/life_client/core/shops/fn_weaponShopFilter.sqf new file mode 100644 index 00000000..0c7b082f --- /dev/null +++ b/life_client/core/shops/fn_weaponShopFilter.sqf @@ -0,0 +1,125 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_weaponShopFilter.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Applies the filter selected and changes the list. +*/ +private["_itemList","_index","_config","_priceTag","_itemArray"]; +_index = (lbCurSel 38402); +_shop = uiNamespace getVariable ["Weapon_Shop",""]; +if (_index isEqualTo -1 || _shop isEqualTo "") exitWith {systemChat "Bad Data Filter"; closeDialog 0;}; //Bad data passing. + +uiNamespace setVariable ["Weapon_Shop_Filter",_index]; +//Setup List Control & Purge it. + +_priceTag = ((findDisplay 38400) displayCtrl 38404); +_priceTag ctrlSetStructuredText parseText ""; +_itemList = ((findDisplay 38400) displayCtrl 38403); +lbClear _itemList; + +if ((uiNamespace getVariable ["Weapon_Magazine",0]) isEqualTo 1 || (uiNamespace getVariable ["Weapon_Accessories",0]) isEqualTo 1) then { + if ((uiNamespace getVariable ["Weapon_Magazine",0]) isEqualTo 1) then { + _config = M_CONFIG(getArray,"WeaponShops",_shop,"mags"); + { + _var = _x select 0; + _count = {_x == _var} count (uiNamespace getVariable ["Magazine_Array",[]]); + if (_count > 0) then { + _itemInfo = [(_x select 0)] call life_fnc_fetchCfgDetails; + _itemList lbAdd format["%1",if (!((_x select 1) isEqualTo "")) then {(_x select 1)} else {(_itemInfo select 1)}]; + _itemList lbSetData[(lbSize _itemList)-1,(_itemInfo select 0)]; + _itemList lbSetPicture[(lbSize _itemList)-1,(_itemInfo select 2)]; + _itemList lbSetValue[(lbSize _itemList)-1,(_x select 2)]; + }; + } forEach (_config); + ((findDisplay 38400) displayCtrl 38406) ctrlSetText localize "STR_Global_Weapons"; + ctrlShow [38406,true]; + ctrlShow [38407,false]; + } else { + _config = M_CONFIG(getArray,"WeaponShops",_shop,"accs"); + { + _var = _x select 0; + _count = {_x == _var} count (uiNamespace getVariable ["Accessories_Array",[]]); + if (_count > 0) then { + _itemInfo = [(_x select 0)] call life_fnc_fetchCfgDetails; + _itemList lbAdd format["%1",if (!((_x select 1) isEqualTo "")) then {(_x select 1)} else {(_itemInfo select 1)}]; + _itemList lbSetData[(lbSize _itemList)-1,(_itemInfo select 0)]; + _itemList lbSetPicture[(lbSize _itemList)-1,(_itemInfo select 2)]; + _itemList lbSetValue[(lbSize _itemList)-1,(_x select 2)]; + }; + } forEach (_config); + ((findDisplay 38400) displayCtrl 38407) ctrlSetText localize "STR_Global_Weapons"; + ctrlShow [38406,false]; + ctrlShow [38407,true]; + }; + + ((findDisplay 38400) displayCtrl 38405) ctrlSetText localize "STR_Global_Buy"; + ctrlShow [38402,false]; +} else { + switch (_index) do { + case 0: { + _config = M_CONFIG(getArray,"WeaponShops",_shop,"items"); + { + _itemInfo = [(_x select 0)] call life_fnc_fetchCfgDetails; + _itemList lbAdd format["%1",if (!((_x select 1) isEqualTo "")) then {(_x select 1)} else {(_itemInfo select 1)}]; + _itemList lbSetData[(lbSize _itemList)-1,(_itemInfo select 0)]; + _itemList lbSetPicture[(lbSize _itemList)-1,(_itemInfo select 2)]; + _itemList lbSetValue[(lbSize _itemList)-1,(_x select 2)]; + } forEach (_config); + + ((findDisplay 38400) displayCtrl 38405) ctrlSetText localize "STR_Global_Buy"; + ((findDisplay 38400) displayCtrl 38406) ctrlSetText localize "STR_Global_Mags"; + ((findDisplay 38400) displayCtrl 38407) ctrlSetText localize "STR_Global_Accs"; + ctrlShow [38402,true]; + ctrlShow [38406,true]; + ctrlShow [38407,true]; + }; + + case 1: { + private["_listedItems"]; + _config = []; + _listedItems = []; + //Go through weapons + if (primaryWeapon player != "") then {_config pushBack primaryWeapon player;}; + if (secondaryWeapon player != "") then {_config pushBack secondaryWeapon player;}; + if (handgunWeapon player != "") then {_config pushBack handgunWeapon player;}; + + //Go through items + _config = _config + primaryWeaponItems player; + _config = _config + (assignedItems player); + _config = _config + (uniformItems player); + _config = _config + (vestItems player); + _config = _config + (backPackItems player); + + ((findDisplay 38400) displayCtrl 38405) ctrlSetText localize "STR_Global_Sell"; + ctrlShow [38402,true]; + ctrlShow [38406,false]; + ctrlShow [38407,false]; + + _itemArray = M_CONFIG(getArray,"WeaponShops",_shop,"items"); + { + if (!(_x in _listedItems) && _x != "") then { + _iS = [_x,_itemArray] call TON_fnc_index; + if (_iS != -1) then { + if (!(((_itemArray select _iS) select 3) isEqualTo -1)) then { + _itemInfo = [_x] call life_fnc_fetchCfgDetails; + _listedItems pushBack _x; + + _itemCount = {_x == (_itemInfo select 0)} count _config; + if (_itemCount > 1) then { + _itemList lbAdd format["[%2] %1",(_itemInfo select 1),_itemCount]; + } else { + _itemList lbAdd format["%1",(_itemInfo select 1)]; + }; + _itemList lbSetData[(lbSize _itemList)-1,(_itemInfo select 0)]; + _itemList lbSetPicture[(lbSize _itemList)-1,(_itemInfo select 2)]; + }; + }; + }; + } forEach _config; + }; + }; +}; + +((findDisplay 38400) displayCtrl 38403) lbSetCurSel 0; diff --git a/life_client/core/shops/fn_weaponShopMags.sqf b/life_client/core/shops/fn_weaponShopMags.sqf new file mode 100644 index 00000000..cf4c42df --- /dev/null +++ b/life_client/core/shops/fn_weaponShopMags.sqf @@ -0,0 +1,19 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_weaponShopMags.sqf + Author: Daniel Stuart + + Description: + Set Weapon Shop in magazine mode +*/ +disableSerialization; + +if ((uiNamespace getVariable ["Weapon_Magazine",0]) isEqualTo 0) then { + private["_weapon"]; + _weapon = lbData[38403,lbCurSel (38403)]; + _weapon = FETCH_CONFIG2(getArray,"CfgWeapons",_weapon,"magazines"); + uiNamespace setVariable ["Magazine_Array",_weapon]; + uiNamespace setVariable ["Weapon_Magazine",1]; +} else { + uiNamespace setVariable ["Weapon_Magazine",0]; +}; diff --git a/life_client/core/shops/fn_weaponShopMenu.sqf b/life_client/core/shops/fn_weaponShopMenu.sqf new file mode 100644 index 00000000..6788cab2 --- /dev/null +++ b/life_client/core/shops/fn_weaponShopMenu.sqf @@ -0,0 +1,79 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_weaponShopMenu.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Something +*/ +private["_shopSide","_shopSide","_license","_itemInfo","_itemList","_license","_flag","_exit","_level","_levelAssert","_levelName","_levelType","_levelValue","_levelMsg"]; +_exit = false; +_shopTitle = M_CONFIG(getText,"WeaponShops",(_this select 3),"name"); +_shopSide = M_CONFIG(getText,"WeaponShops",(_this select 3),"side"); +_license = M_CONFIG(getText,"WeaponShops",(_this select 3),"license"); +_levelAssert = M_CONFIG(getArray,"WeaponShops",(_this select 3),"level"); +_levelName = (_levelAssert select 0); +_levelType = (_levelAssert select 1); +_levelValue = (_levelAssert select 2); +_levelMsg = (_levelAssert select 3); + +if (!(_shopSide isEqualTo "")) then { + _flag = switch (playerSide) do {case west: {"cop"}; case independent: {"med"}; default {"civ"};}; + if (!(_flag isEqualTo _shopSide)) then {_exit = true;}; +}; +if (_exit) exitWith {}; + +if (!(_license isEqualTo "")) then { + _flag = M_CONFIG(getText,"Licenses",_license,"side"); + if (!(LICENSE_VALUE(_license,_flag))) exitWith {hint localize "STR_Shop_Veh_NoLicense"; _exit = true;}; +}; +if (_exit) exitWith {}; + +if (!(_levelValue isEqualTo -1)) then { + _level = missionNamespace getVariable _levelName; + if (_level isEqualType {}) then {_level = FETCH_CONST(_level);}; + + _flag = switch (_levelType) do { + case "SCALAR": {_level >= _levelValue}; + case "BOOL": {_level}; + case "EQUAL": {_level isEqualTo _levelValue}; + default {false}; + }; + if (!(_flag)) then { + _exit = true; + if (_levelMsg isEqualTo "") then { + _levelMsg = (localize "STR_Shop_Veh_NotAllowed"); + } else { + if (isLocalized _levelMsg) then { + _levelMsg = (localize _levelMsg); + }; + }; + }; +}; +if (_exit) exitWith {hint _levelMsg;}; + +uiNamespace setVariable ["Weapon_Shop",(_this select 3)]; +uiNamespace setVariable ["Weapon_Magazine",0]; +uiNamespace setVariable ["Weapon_Accessories",0]; +uiNamespace setVariable ["Magazine_Array",[]]; +uiNamespace setVariable ["Accessories_Array",[]]; + +if (!(createDialog "life_weapon_shop")) exitWith {}; +if (!isClass(missionConfigFile >> "WeaponShops" >> (_this select 3))) exitWith {}; //Bad config entry. + +disableSerialization; + +ctrlSetText[38401,_shopTitle]; + +_filters = ((findDisplay 38400) displayCtrl 38402); +lbClear _filters; + +ctrlShow [38406,true]; +ctrlEnable [38406,false]; +ctrlShow [38407,true]; +ctrlEnable [38407,false]; + +_filters lbAdd localize "STR_Shop_Weapon_ShopInv"; +_filters lbAdd localize "STR_Shop_Weapon_YourInv"; + +_filters lbSetCurSel 0; diff --git a/life_client/core/shops/fn_weaponShopSelection.sqf b/life_client/core/shops/fn_weaponShopSelection.sqf new file mode 100644 index 00000000..84a8b91f --- /dev/null +++ b/life_client/core/shops/fn_weaponShopSelection.sqf @@ -0,0 +1,103 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_weaponShopSelection.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Checks the weapon & adds the price tag. +*/ +private["_control","_index","_shop","_priceTag","_price","_item","_itemArray","_bool"]; +params [ + ["_control",controlNull,[controlNull]], + ["_index",-1,[0]] +]; +_shop = uiNamespace getVariable ["Weapon_Shop",""]; +if (isNull _control) exitWith {closeDialog 0;}; //Bad data +if (_index isEqualTo -1) exitWith {}; //Nothing selected + +_priceTag = CONTROL(38400,38404); + +if ((uiNamespace getVariable ["Weapon_Shop_Filter",0]) isEqualTo 1) then { + _item = CONTROL_DATAI(_control,_index); + _itemArray = M_CONFIG(getArray,"WeaponShops",_shop,"items"); + _item = [_item,_itemArray] call TON_fnc_index; + _price = ((_itemArray select _item) select 3); + _priceTag ctrlSetStructuredText parseText format ["Price: $%1",[(_price)] call life_fnc_numberText]; + _control lbSetValue[_index,_price]; +} else { + _price = _control lbValue _index; + _item = CONTROL_DATAI(_control,_index); + if (_price > CASH) then { + _priceTag ctrlSetStructuredText parseText format ["Price: $%1
You lack: $%2
",[(_price)] call life_fnc_numberText,[(_price - CASH)] call life_fnc_numberText]; + } else { + _priceTag ctrlSetStructuredText parseText format ["Price: $%1",[(_price)] call life_fnc_numberText]; + }; + if ((uiNamespace getVariable ["Weapon_Magazine",0]) isEqualTo 0 && (uiNamespace getVariable ["Weapon_Accessories",0]) isEqualTo 0) then { + if (isClass (configFile >> "CfgWeapons" >> _item)) then { + //Magazines menu + if (isArray (configFile >> "CfgWeapons" >> _item >> "magazines")) then { + _itemArray = FETCH_CONFIG2(getArray,"CfgWeapons",_item,"magazines"); + _bool = false; + { + _var = _x select 0; + _count = {_x == _var} count _itemArray; + if (_count > 0) exitWith {_bool = true}; + } forEach M_CONFIG(getArray,"WeaponShops",_shop,"mags"); + if (_bool) then { + ((findDisplay 38400) displayCtrl 38406) ctrlEnable true; + } else { + ((findDisplay 38400) displayCtrl 38406) ctrlEnable false; + }; + } else { + ((findDisplay 38400) displayCtrl 38406) ctrlEnable false; + }; + + //Accessories Menu + if (isClass (configFile >> "CfgWeapons" >> _item >> "WeaponSlotsInfo")) then { + private["_slotArray"]; + _itemArray = []; + if (isArray (configFile >> "CfgWeapons" >> _item >> "WeaponSlotsInfo" >> "CowsSlot" >> "compatibleItems")) then { + _slotArray = FETCH_CONFIG3(getArray,"CfgWeapons",_item,"WeaponSlotsInfo","CowsSlot","compatibleItems"); + { + _itemArray pushBack _x; + } forEach _slotArray; + }; + if (isArray (configFile >> "CfgWeapons" >> _item >> "WeaponSlotsInfo" >> "MuzzleSlot" >> "compatibleItems")) then { + _slotArray = FETCH_CONFIG3(getArray,"CfgWeapons",_item,"WeaponSlotsInfo","MuzzleSlot","compatibleItems"); + { + _itemArray pushBack _x; + } forEach _slotArray; + }; + if (isArray (configFile >> "CfgWeapons" >> _item >> "WeaponSlotsInfo" >> "PointerSlot" >> "compatibleItems")) then { + _slotArray = FETCH_CONFIG3(getArray,"CfgWeapons",_item,"WeaponSlotsInfo","PointerSlot","compatibleItems"); + { + _itemArray pushBack _x; + } forEach _slotArray; + }; + if (isArray (configFile >> "CfgWeapons" >> _item >> "WeaponSlotsInfo" >> "UnderBarrelSlot" >> "compatibleItems")) then { + _slotArray = FETCH_CONFIG3(getArray,"CfgWeapons",_item,"WeaponSlotsInfo","UnderBarrelSlot","compatibleItems"); + { + _itemArray pushBack _x; + } forEach _slotArray; + }; + + _bool = false; + { + _var = _x select 0; + _count = {_x == _var} count _itemArray; + if (_count > 0) exitWith {_bool = true}; + } forEach M_CONFIG(getArray,"WeaponShops",_shop,"accs"); + if (_bool) then { + ((findDisplay 38400) displayCtrl 38407) ctrlEnable true; + } else { + ((findDisplay 38400) displayCtrl 38407) ctrlEnable false; + }; + } else { + ((findDisplay 38400) displayCtrl 38407) ctrlEnable false; + }; + } else { + ((findDisplay 38400) displayCtrl 38406) ctrlEnable false; + ((findDisplay 38400) displayCtrl 38407) ctrlEnable false; + }; + }; +}; diff --git a/life_client/core/vehicle/fn_addVehicle2Chain.sqf b/life_client/core/vehicle/fn_addVehicle2Chain.sqf new file mode 100644 index 00000000..ce2910c2 --- /dev/null +++ b/life_client/core/vehicle/fn_addVehicle2Chain.sqf @@ -0,0 +1,12 @@ +/* + File: fn_addVehicle2Chain.sqf + Author: Bryan "Tonic" Boardwine + + Description: + A short function for telling the player to add a vehicle to his keychain. +*/ +private "_vehicle"; +_vehicle = param [0,objNull,[objNull]]; +if (!(_vehicle in life_vehicles)) then { + life_vehicles pushBack _vehicle; +}; \ No newline at end of file diff --git a/life_client/core/vehicle/fn_colorVehicle.sqf b/life_client/core/vehicle/fn_colorVehicle.sqf new file mode 100644 index 00000000..8f2062d8 --- /dev/null +++ b/life_client/core/vehicle/fn_colorVehicle.sqf @@ -0,0 +1,42 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_colorVehicle.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Reskins the vehicle. +*/ +private ["_textures","_className","_classNameLife"]; +params [ + ["_vehicle",objNull,[objNull]], + ["_index",-1,[0]] +]; + +_className = typeOf _vehicle; +_classNameLife = _className; + +if (isNull _vehicle || !alive _vehicle || _index isEqualTo -1) exitWith {}; +//Does the vehicle already have random styles? Halt till it's set. + +if (local _vehicle) then { + switch _className do { + case "C_Offroad_01_F": {[_vehicle,"color",3,true] remoteExecCall ["TON_fnc_setObjVar",RSERV];}; + case "C_Hatchback_01_F": {[_vehicle,"color",1,true] remoteExecCall ["TON_fnc_setObjVar",RSERV];}; + case "C_Hatchback_01_sport_F": {[_vehicle,"color",1,true] remoteExecCall ["TON_fnc_setObjVar",RSERV];}; + case "C_SUV_01_F": {[_vehicle,"color",1,true] remoteExecCall ["TON_fnc_setObjVar",RSERV];}; + case "C_Van_01_box_F": {[_vehicle,"color",1,true] remoteExecCall ["TON_fnc_setObjVar",RSERV];}; + case "C_Van_01_transport_F": {[_vehicle,"color",1,true] remoteExecCall ["TON_fnc_setObjVar",RSERV];}; + }; +}; + +if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _classNameLife)) then { + _classNameLife = "Default"; //Use Default class if it doesn't exist + diag_log format["%1: LifeCfgVehicles class doesn't exist",_className]; +}; + +_textures = ((M_CONFIG(getArray,"LifeCfgVehicles",_classNameLife,"textures") select _index) select 2); +if (isNil "_textures" || {count _textures isEqualTo 0}) exitWith {}; + +_vehicle setVariable ["Life_VEH_color",_index,true]; + +{_vehicle setObjectTextureGlobal [_forEachIndex,_x];} forEach _textures; diff --git a/life_client/core/vehicle/fn_deviceMine.sqf b/life_client/core/vehicle/fn_deviceMine.sqf new file mode 100644 index 00000000..8d274193 --- /dev/null +++ b/life_client/core/vehicle/fn_deviceMine.sqf @@ -0,0 +1,178 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_deviceMine.sqf + Author: Bryan "Tonic" Boardwine + Modified: Devilfloh + Description: + Starts automated mining of resource from the tempest device. Not integrated with percents. +*/ +private["_vehicle","_resourceZones","_zone","_weight","_resource","_vInv","_itemIndex","_items","_sum","_itemWeight","_isMineral"]; +_vehicle = param [0,objNull,[objNull]]; +_isMineral = true; +if (isNull _vehicle) exitWith {}; + +if (!isNil {_vehicle getVariable "mining"}) exitWith { + hint localize "STR_NOTF_DeviceIsMining"; +}; + +if (fuel _vehicle isEqualTo 0) exitWith { + titleText[localize "STR_NOTF_OutOfFuel","PLAIN"]; +}; + +closeDialog 0; //Close the interaction menu. +life_action_inUse = true; //Lock out the interaction menu for a bit.. + +_weight = [_vehicle] call life_fnc_vehicleWeight; +if ((_weight select 1) >= (_weight select 0)) exitWith { + hint localize "STR_NOTF_DeviceFull"; + life_action_inUse = false; +}; + +//check if we are in the resource zone for any of the resources +_zone = ""; + +_resourceCfg = missionConfigFile >> "CfgGather" >> "Resources"; +for "_i" from 0 to count(_resourceCfg)-1 do { + _curConfig = (_resourceCfg select _i); + _resource = configName(_curConfig); + _resourceZones = getArray(_curConfig >> "zones"); + _zoneSize = getNumber(_curConfig >> "zoneSize"); + + { + if ((player distance (getMarkerPos _x)) < _zoneSize) exitWith { + _zone = _x; + }; + } forEach _resourceZones; + + if (_zone != "") exitWith {_isMineral = false;}; +}; + +_resourceCfg = missionConfigFile >> "CfgGather" >> "Minerals"; +for "_i" from 0 to count(_resourceCfg)-1 do { + private ["_curConfig","_resourceZones","_resources","_mined"]; + + if (!_isMineral) exitWith {}; + _curConfig = (_resourceCfg select _i); + _resources = getArray(_curConfig >> "mined"); + _resourceZones = getArray(_curConfig >> "zones"); + _zoneSize = getNumber(_curConfig >> "zoneSize"); + + if (!(_resources select 0 isEqualType [])) then { + _mined = _resources select 0; + } else { + _mined = (_resources select 0) select 0; + }; + + { + if ((player distance (getMarkerPos _x)) < _zoneSize) exitWith { + _zone = _x; + }; + } forEach _resourceZones; + + if (_zone != "") exitWith {_resource = _mined}; +}; + +if (_zone isEqualTo "") exitWith { + hint localize "STR_NOTF_notNearResource"; + life_action_inUse = false; +}; + +_vehicle setVariable ["mining",true,true]; //Lock the device +_vehicle remoteExec ["life_fnc_soundDevice",RCLIENT]; //Broadcast the 'mining' sound of the device for nearby units. + +life_action_inUse = false; //Unlock it since it's going to do it's own thing... + +for "_i" from 0 to 1 step 0 do { + if (!alive _vehicle || isNull _vehicle) exitWith {}; + + if ((isEngineOn _vehicle) || ((speed _vehicle) > 5)) exitWith { + titleText[localize "STR_NOTF_MiningStopped","PLAIN"]; + }; + + if (fuel _vehicle isEqualTo 0) exitWith { + titleText[localize "STR_NOTF_OutOfFuel","PLAIN"]; + }; + + titleText[localize "STR_NOTF_DeviceMining","PLAIN"]; + _time = time + 27; + + //Wait for 27 seconds with a 'delta-time' wait. + waitUntil { + if ((isEngineOn _vehicle) || ((speed _vehicle) > 5)) exitWith { + _vehicle setVariable ["mining",nil,true]; + titleText[localize "STR_NOTF_MiningStopped","PLAIN"]; + true + }; + + if (round(_time - time) < 1) exitWith { + true + }; + + if (fuel _vehicle < 0.1) exitWith { + _vehicle setVariable ["mining",nil,true]; + titleText[localize "STR_NOTF_OutOfFuel","PLAIN"]; + true + }; + + sleep 0.2; + false + }; + + if ((isEngineOn _vehicle) || ((speed _vehicle) > 5)) exitWith { + _vehicle setVariable ["mining",nil,true]; + titleText[localize "STR_NOTF_MiningStopped","PLAIN"]; + }; + + _vehicle_data = _vehicle getVariable ["Trunk",[[],0]]; + _inv = (_vehicle_data select 0); + _space = (_vehicle_data select 1); + _itemIndex = [_resource,_inv] call TON_fnc_index; + _weight = [_vehicle] call life_fnc_vehicleWeight; + _random = 10 + round((random(10))); + _sum = [_resource,_random,(_weight select 1),(_weight select 0)] call life_fnc_calWeightDiff; // Get a sum base of the remaining weight.. + + if (_sum < 1) exitWith { + titleText[localize "STR_NOTF_DeviceFull","PLAIN"]; + _vehicle setVariable ["mining",nil,true]; + }; + + if (_itemIndex isEqualTo -1) then { + _inv pushBack [_resource,_sum]; + } else { + _val = (_inv select _itemIndex) select 1; + _inv set[_itemIndex,[_resource,_val + _sum]]; + }; + + if (fuel _vehicle < 0.1) exitWith { + _vehicle setVariable ["mining",nil,true]; + titleText[localize "STR_NOTF_OutOfFuel","PLAIN"]; + }; + + //Locality checks... + if (local _vehicle) then { + _vehicle setFuel (fuel _vehicle)-0.05; + } else { + [_vehicle,(fuel _vehicle)-0.05] remoteExec ["life_fnc_setFuel",_vehicle]; + }; + + if (fuel _vehicle < 0.1) exitWith { + titleText[localize "STR_NOTF_OutOfFuel","PLAIN"]; + _vehicle setVariable ["mining",nil,true]; + }; + + _itemName = M_CONFIG(getText,"VirtualItems",_resource,"displayName"); + titleText[format[localize "STR_NOTF_DeviceMined",_sum,(localize _itemName)],"PLAIN"]; + _itemWeight = ([_resource] call life_fnc_itemWeight) * _sum; + _vehicle setVariable ["Trunk",[_inv,_space + _itemWeight],true]; + _weight = [_vehicle] call life_fnc_vehicleWeight; + _sum = [_resource,_random,(_weight select 1),(_weight select 0)] call life_fnc_calWeightDiff; //Get a sum base of the remaining weight.. + + if (_sum < 1) exitWith { + _vehicle setVariable ["mining",nil,true]; + titleText[localize "STR_NOTF_DeviceFull","PLAIN"]; + }; + + sleep 2; +}; + +_vehicle setVariable ["mining",nil,true]; diff --git a/life_client/core/vehicle/fn_fuelRefuelCar.sqf b/life_client/core/vehicle/fn_fuelRefuelCar.sqf new file mode 100644 index 00000000..a34dd263 --- /dev/null +++ b/life_client/core/vehicle/fn_fuelRefuelCar.sqf @@ -0,0 +1,85 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_fuelRefuelCar.sqf + Author: NiiRoZz + + Description: + Adds fuel in car. +*/ +disableSerialization; +private["_control","_index","_className","_basePrice","_vehicleInfo","_colorArray","_ctrl"]; +_classname = lbData[20302,(lbCurSel 20302)]; +_index = lbValue[20302,(lbCurSel 20302)]; + +if (isNil "_classname" || _classname isEqualTo "") exitWith { + hint localize "STR_Select_Vehicle_Pump"; + vehiclefuelList = []; + life_action_inUse = false; + closeDialog 0; +}; + +_car = (vehiclefuelList select _index) select 0; +_vehicleInfo = [_className]call life_fnc_fetchVehInfo; +_fuelNow = fuel _car; +_fueltank = (_vehicleInfo select 12); +if (_car isKindOf "B_Truck_01_box_F" || _car isKindOf "B_Truck_01_transport_F") then {_fueltank = 350;};//hemtt +if (_car isKindOf "C_Van_01_box_F") then {_fueltank = 100;}; +if (_car isKindOf "I_Truck_02_covered_F" || _car isKindOf "I_Truck_02_transport_F") then {_fueltank = 175;}; +_fueltoput= ((SliderPosition 20901)-(floor(_fuelnow * _fueltank))); +_setfuell = _fuelnow + (_fueltoput/_fueltank); +_timer = ((_fueltoput * .25)/100); +if (_car distance player > 10 && vehicle player != player) exitWith { + hint localize "STR_Distance_Vehicle_Pump"; + vehiclefuelList = []; + life_action_inUse = false; + closeDialog 0; +}; + +if ((BANK - (_fueltoput * life_fuelPrices))> 0)then { + life_is_processing = true; + //Setup our progress bar. + disableSerialization; + 5 cutRsc ["life_progress","PLAIN"]; + _ui = uiNameSpace getVariable "life_progress"; + _progress = _ui displayCtrl 38201; + _pgText = _ui displayCtrl 38202; + _pgText ctrlSetText format["%2 (1%1)...","%","Refuel:"]; + _progress progressSetPosition 0.01; + _cP = 0.01; + _tp =0; + _totalcost = _fueltoput * life_fuelPrices; + for "_i" from 0 to 1 step 0 do { + sleep _timer; + _cP = _cP + 0.01; + _progress progressSetPosition _cP; + _pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%","Refuel:"]; + if (_cP >= 1) exitWith {}; + if (player distance _car > 10) exitWith {}; + if (vehicle player != player) exitWith {}; + if !((BANK - round(0.01 * _totalcost))> 0) exitWith {}; + BANK = BANK - round((0.01 * _totalcost)); + _tp = _tp +1; + if (_tp == 9) then { + _tp = 0; + [_car,_cp * _setfuell] remoteExecCall ["life_fnc_setFuel",_car]; + }; + }; + 5 cutText ["","PLAIN"]; + if (_car distance player > 10 || vehicle player != player) then { + hint localize "STR_Distance_Vehicle_Pump"; + vehiclefuelList = []; + life_is_processing = false; + life_action_inUse = false; + [0] call SOCK_fnc_updatePartial; + closeDialog 0; + } else { + life_is_processing = false; + [0] call SOCK_fnc_updatePartial; + }; +} else { + hint localize "STR_NOTF_NotEnoughMoney"; +}; + +vehiclefuelList = []; +life_action_inUse = false; +closeDialog 0; diff --git a/life_client/core/vehicle/fn_fuelStore.sqf b/life_client/core/vehicle/fn_fuelStore.sqf new file mode 100644 index 00000000..23ce7873 --- /dev/null +++ b/life_client/core/vehicle/fn_fuelStore.sqf @@ -0,0 +1,57 @@ + +/* + File: fn_fuelStore.sqf + Author: Ulrich "Zero" Werren + + Description: + Fuel Tank Job, Fill Truck with Fuel. +*/ + +private["_vehicle","_fuelSpace","_fuelState","_fuelLevel","_ui","_progress","_pgText"]; +_vehicle = param [0,objNull,[objNull]]; +if (isNull _vehicle) exitWith {}; +if (!isNil {_vehicle getVariable "fuelTankWork"}) exitWith {titleText[localize "STR_FuelTank_InUse","PLAIN"];}; +closeDialog 0; +life_action_inUse = true; +if (isNil {_vehicle getVariable "fuelTank"}) then{ + _fuelSpace = getNumber(missionConfigFile >> "LifeCfgVehicles" >> (typeOf _vehicle) >> "vFuelSpace"); + _fuelState = 0; + _vehicle setVariable ["fuelTank",[_fuelSpace,_fuelState],true]; +}else{ + _fuelSpace = (_vehicle getVariable "fuelTank") select 0; + _fuelState = (_vehicle getVariable "fuelTank") select 1; +}; + +_vehicle setVariable ["fuelTankWork",true,true]; +_vehicle remoteExec ["life_fnc_soundDevice",-2]; +life_action_inUse = false; + +disableSerialization; +5 cutRsc ["life_progress","PLAIN"]; +_ui = uiNamespace getVariable "life_progress"; +_progress = _ui displayCtrl 38201; +_pgText = _ui displayCtrl 38202; +_pgText ctrlSetText format["Tank %1 Ltr / %2 Ltr",_fuelState,_fuelSpace]; +_fuelLevel = (1 / _fuelSpace) * _fuelState; +_progress progressSetPosition _fuelLevel; + +waitUntil { + if (!alive _vehicle || isNull _vehicle) exitWith {true}; + if (isEngineOn _vehicle) exitWith {titleText[localize "STR_FuelTank_Stopped","PLAIN"]; true}; + if (isNil {_vehicle getVariable "fuelTankWork"}) exitWith {titleText[localize "STR_FuelTank_Stopped","PLAIN"]; true}; + if (player distance _vehicle > 20) exitWith {titleText[localize "STR_FuelTank_Stopped","PLAIN"]; true}; + + _fuelState = _fuelState + 100; + _vehicle setVariable ["fuelTank",[_fuelSpace,_fuelState],true]; + _fuelLevel = (1 / _fuelSpace) * _fuelState; + + _progress progressSetPosition _fuelLevel; + _pgText ctrlSetText format["Tank %1 Ltr / %2 Ltr",_fuelState,_fuelSpace]; + + if (_fuelState >= _fuelSpace) exitWith {titleText [localize "STR_FuelTank_Full","PLAIN"]; true}; + sleep 0.5; + false +}; + +5 cutText ["","PLAIN"]; +_vehicle setVariable ["fuelTankWork",nil,true]; diff --git a/life_client/core/vehicle/fn_fuelSupply.sqf b/life_client/core/vehicle/fn_fuelSupply.sqf new file mode 100644 index 00000000..3a382b27 --- /dev/null +++ b/life_client/core/vehicle/fn_fuelSupply.sqf @@ -0,0 +1,124 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_fuelSupply.sqf + Author: Ulrich "Zero" Werren + + Description: + Fuel Tank Job, Fill Gas Station with Fuel. +*/ +private["_vehicle","_fuelSpace","_fuelState","_fuelFeedState","_fuelLevel","_distance","_shortest","_random","_another","_ui","_progress","_pgText","_win","_price","_pricem"]; +_vehicle = param [0,objNull,[objNull]]; +if (isNull _vehicle) exitWith {}; +if (!isNil {_vehicle getVariable "fuelTankWork"}) exitWith {titleText[localize "STR_FuelTank_InUse","PLAIN"];}; +closeDialog 0; + +life_action_inUse = true; + +if (isNil {_vehicle getVariable "fuelTank"}) then{ + _fuelSpace = getNumber(missionConfigFile >> "LifeCfgVehicles" >> (typeOf _vehicle) >> "vFuelSpace"); + _fuelState = 0; + _vehicle setVariable ["fuelTank",[_fuelSpace,_fuelState],true]; +}else{ + _fuelSpace = (_vehicle getVariable "fuelTank") select 0; + _fuelState = (_vehicle getVariable "fuelTank") select 1; +}; + +_another = false; +{ + if (!isNil {_x getVariable "fuelTankWork"}) exitWith {_another}; +} forEach (nearestObjects [_vehicle, ["C_Van_01_fuel_F","I_Truck_02_fuel_F","B_Truck_01_fuel_F"], 100]); + +if (_another)exitWith{titleText[localize "STR_FuelTank_AnotherInUse","PLAIN"];life_action_inUse = false;}; + +if (_fuelState <= 0) exitWith { + titleText[localize "STR_FuelTank_Empty","PLAIN"]; + life_action_inUse = false; +}; + + +_fuelFeedState = 0; +_random = floor((random 11000) + 1500); + +{ + if (isNil {_x getVariable "fuelTank"}) then{ + _x setVariable ["fuelTank",[_random,time],true]; + _fuelFeedState = _random; + }else{ + _fuelFeedState = (_x getVariable "fuelTank") select 0; + if (_fuelFeedState <= 0) then { + if (time >= ((_x getVariable "fuelTank") select 1)) then { + _x setVariable ["fuelTank",[_random,time],true]; + _fuelFeedState = _random; + }; + }; + }; +} forEach (nearestObjects [_vehicle, ["Land_FuelStation_Feed_F","Land_fs_feed_F"], 100]); + +if (_fuelFeedState <= 0) exitWith {titleText [localize "STR_FuelTank_FeedFull","PLAIN"]; life_action_inUse = false;}; + +_shortest = 100000; +{ + _distance = _vehicle distance (getMarkerPos _x); + if (_distance < _shortest) then { _shortest = _distance}; +} forEach ["fuel_storage_1","fuel_storage_2"]; + +if (_distance < 1000) exitWith {titleText [localize "STR_FuelTank_PipeLine","PLAIN"]; life_action_inUse = false;}; + +_pricem = getNumber(missionConfigFile >> "Life_Settings" >> "fuelTank_winMultiplier"); +_price = floor((((floor(_shortest / 100) * 100) / 1337) * _pricem) * 100) / 100; +_win = 0; + +_vehicle setVariable ["fuelTankWork",true,true]; +_vehicle remoteExec ["life_fnc_soundDevice",-2]; +life_action_inUse = false; + +disableSerialization; +5 cutRsc ["life_progress","PLAIN"]; +_ui = uiNamespace getVariable "life_progress"; +_progress = _ui displayCtrl 38201; +_pgText = _ui displayCtrl 38202; +_pgText ctrlSetText format["Tank %1 Ltr / %2 Ltr",_fuelState,_fuelSpace]; +_fuelLevel = (1 / _fuelSpace) * _fuelState; +_progress progressSetPosition _fuelLevel; + +waitUntil { + if (!alive _vehicle || isNull _vehicle) exitWith {true}; + if (isEngineOn _vehicle) exitWith {titleText[localize "STR_FuelTank_Stopped","PLAIN"]; true}; + if (isNil {_vehicle getVariable "fuelTankWork"}) exitWith {titleText[localize "STR_FuelTank_Stopped","PLAIN"]; true}; + if (player distance _vehicle > 20) exitWith {titleText[localize "STR_FuelTank_Stopped","PLAIN"]; true}; + + _fuelState = _fuelState - 100; + _fuelFeedState = _fuelFeedState - 100; + + _win = _win + (_price * 100); + _vehicle setVariable ["fuelTank",[_fuelSpace,_fuelState],true]; + + _fuelLevel = (1 / _fuelSpace) * _fuelState; + _progress progressSetPosition _fuelLevel; + _pgText ctrlSetText format["Tank %1 Ltr / %2 Ltr ( $ %3 / Ltr )",_fuelState,_fuelSpace,_price]; + + if (_fuelState isEqualTo 0 || _fuelFeedState <= 0) exitWith {true}; + + sleep 1; + false +}; + + +{ + if (_fuelFeedState <= 0) then{ + _x setVariable ["fuelTank",[0,(time + 1800)],true]; + }else{ + _x setVariable ["fuelTank",[_fuelFeedState,time],true]; + }; +} forEach (nearestObjects [_vehicle, ["Land_FuelStation_Feed_F","Land_fs_feed_F"], 100]); + +if (_fuelFeedState <= 0) then {titleText [localize "STR_FuelTank_FeedFull","PLAIN"]}; +if (_fuelState <= 0) then {titleText [localize "STR_FuelTank_Empty","PLAIN"]}; +sleep 2; + +CASH = CASH + _win; +[0] call SOCK_fnc_updatePartial; + +titleText [format[localize "STR_FuelTank_Money", _win], "PLAIN"]; +5 cutText ["","PLAIN"]; +_vehicle setVariable ["fuelTankWork",nil,true]; diff --git a/life_client/core/vehicle/fn_lockVehicle.sqf b/life_client/core/vehicle/fn_lockVehicle.sqf new file mode 100644 index 00000000..f42ed4b4 --- /dev/null +++ b/life_client/core/vehicle/fn_lockVehicle.sqf @@ -0,0 +1,15 @@ +/* + File: fn_lockVehicle.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Locks the vehicle (used through the network when the person calling it isn't local). +*/ +params [ + ["_vehicle",objNull,[objNull]], + ["_state",2,[0,false]] +]; + +if (isNull _vehicle) exitWith {}; + +_vehicle lock _state; \ No newline at end of file diff --git a/life_client/core/vehicle/fn_openInventory.sqf b/life_client/core/vehicle/fn_openInventory.sqf new file mode 100644 index 00000000..e977741a --- /dev/null +++ b/life_client/core/vehicle/fn_openInventory.sqf @@ -0,0 +1,60 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_openInventory.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Starts the initialization of vehicle virtual inventory menu. +*/ +private["_vehicle","_veh_data"]; +if (dialog) exitWith {}; +_vehicle = param [0,objNull,[objNull]]; +if (isNull _vehicle || !(_vehicle isKindOf "Car" || _vehicle isKindOf "Air" || _vehicle isKindOf "Ship" || _vehicle isKindOf "Box_IND_Grenades_F" || _vehicle isKindOf "B_supplyCrate_F")) exitWith {}; //Either a null or invalid vehicle type. +if ((_vehicle getVariable ["trunk_in_use",false])) exitWith {hint localize "STR_MISC_VehInvUse"}; +_vehicle setVariable ["trunk_in_use",true,true]; +_vehicle setVariable ["trunk_in_use_by",player,true]; +if (!createDialog "TrunkMenu") exitWith {hint localize "STR_MISC_DialogError";}; //Couldn't create the menu? +disableSerialization; + +if (_vehicle isKindOf "Box_IND_Grenades_F" || _vehicle isKindOf "B_supplyCrate_F") then { + ctrlSetText[3501,format[(localize "STR_MISC_HouseStorage")+ " - %1",getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName")]]; +} else { + ctrlSetText[3501,format[(localize "STR_MISC_VehStorage")+ " - %1",getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName")]]; +}; + +_veh_data = [_vehicle] call life_fnc_vehicleWeight; + +if (_veh_data select 0 isEqualTo -1) exitWith {closeDialog 0; _vehicle setVariable ["trunk_in_use",false,true]; hint localize "STR_MISC_NoStorageVeh";}; + +ctrlSetText[3504,format[(localize "STR_MISC_Weight")+ " %1/%2",_veh_data select 1,_veh_data select 0]]; +[_vehicle] call life_fnc_vehInventory; +life_trunk_vehicle = _vehicle; + +_vehicle spawn { + waitUntil {isNull (findDisplay 3500)}; + _this setVariable ["trunk_in_use",false,true]; + if (_this isKindOf "Box_IND_Grenades_F" || _this isKindOf "B_supplyCrate_F") then { + + if (life_HC_isActive) then { + [_this] remoteExecCall ["HC_fnc_updateHouseTrunk",HC_Life]; + } else { + [_this] remoteExecCall ["TON_fnc_updateHouseTrunk",2]; + }; + }; +}; + +if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { + _vehicle spawn { + waitUntil {isNull (findDisplay 3500)}; + _this setVariable ["trunk_in_use",false,true]; + if ((_this isKindOf "Car") || (_this isKindOf "Air") || (_this isKindOf "Ship")) then { + [] call SOCK_fnc_updateRequest; + + if (life_HC_isActive) then { + [_this,2] remoteExecCall ["HC_fnc_vehicleUpdate",HC_Life]; + } else { + [_this,2] remoteExecCall ["TON_fnc_vehicleUpdate",2]; + }; + }; + }; +}; diff --git a/life_client/core/vehicle/fn_vInteractionMenu.sqf b/life_client/core/vehicle/fn_vInteractionMenu.sqf new file mode 100644 index 00000000..77aaef32 --- /dev/null +++ b/life_client/core/vehicle/fn_vInteractionMenu.sqf @@ -0,0 +1,132 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_vInteractionMenu.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Replaces the mass add actions for various vehicle actions. +*/ +#define Btn1 37450 +#define Btn2 37451 +#define Btn3 37452 +#define Btn4 37453 +#define Btn5 37454 +#define Btn6 37455 +#define Title 37401 +private["_display","_curTarget","_Btn1","_Btn2","_Btn3","_Btn4","_Btn5","_Btn6","_dlcVehicles"]; +if (!dialog) then { + createDialog "vInteraction_Menu"; +}; +disableSerialization; + +_curTarget = param [0,objNull,[objNull]]; +if (isNull _curTarget) exitWith {closeDialog 0;}; //Bad target +_isVehicle = if ((_curTarget isKindOf "landVehicle") || (_curTarget isKindOf "Ship") || (_curTarget isKindOf "Air")) then {true} else {false}; +if (!_isVehicle) exitWith {closeDialog 0;}; + +_display = findDisplay 37400; +_Btn1 = _display displayCtrl Btn1; +_Btn2 = _display displayCtrl Btn2; +_Btn3 = _display displayCtrl Btn3; +_Btn4 = _display displayCtrl Btn4; +_Btn5 = _display displayCtrl Btn5; +_Btn6 = _display displayCtrl Btn6; +life_vInact_curTarget = _curTarget; +_dlcVehicles = ["C_Kart_01_Blu_F","C_Kart_01_Red_F","C_Kart_01_Fuel_F","C_Kart_01_Vrana_F","B_Heli_Transport_03_F","B_Heli_Transport_03_unarmed_F","O_Heli_Transport_04_F","O_Heli_Transport_04_ammo_F","O_Heli_Transport_04_bench_F","O_Heli_Transport_04_box_F","O_Heli_Transport_04_covered_F","O_Heli_Transport_04_fuel_F","O_Heli_Transport_04_medevac_F","O_Heli_Transport_04_repair_F"]; + +//Set Repair Action +_Btn1 ctrlSetText localize "STR_vInAct_Repair"; +_Btn1 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_repairTruck; closeDialog 0;"; + +if ((life_inv_toolkit >= 1) && {alive life_vInact_curTarget} && {([life_vInact_curTarget] call life_fnc_isDamaged)}) then {_Btn1 ctrlEnable true;} else {_Btn1 ctrlEnable false;}; + +if (playerSide isEqualTo west) then { + _Btn2 ctrlSetText localize "STR_vInAct_Registration"; + _Btn2 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_searchVehAction; closeDialog 0;"; + + _Btn3 ctrlSetText localize "STR_vInAct_SearchVehicle"; + _Btn3 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_vehInvSearch; closeDialog 0;"; + + _Btn4 ctrlSetText localize "STR_vInAct_PullOut"; + _Btn4 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_pulloutAction; closeDialog 0;"; + if (crew _curTarget isEqualTo []) then {_Btn4 ctrlEnable false;}; + + _Btn5 ctrlSetText localize "STR_vInAct_Impound"; + _Btn5 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_impoundAction; closeDialog 0;"; + + if (_curTarget isKindOf "Ship") then { + _Btn6 ctrlSetText localize "STR_vInAct_PushBoat"; + _Btn6 buttonSetAction "[] spawn life_fnc_pushObject; closeDialog 0;"; + if (_curTarget isKindOf "Ship" && {local _curTarget} && {crew _curTarget isEqualTo []}) then { _Btn6 ctrlEnable true;} else {_Btn6 ctrlEnable false}; + } else { + if ((typeOf (_curTarget) in _dlcVehicles) && !(288520 in getDLCs 1)) then { + if (_curTarget isKindOf "Air") then { + _Btn6 ctrlSetText localize "STR_vInAct_GetInHeli"; + } else { + _Btn6 ctrlSetText localize "STR_vInAct_GetInKart"; + }; + _Btn6 buttonSetAction "player moveInDriver life_vInact_curTarget; closeDialog 0;"; + if (crew _curTarget isEqualTo [] && {canMove _curTarget} && {locked _curTarget isEqualTo 0}) then {_Btn6 ctrlEnable true;} else {_Btn6 ctrlEnable false}; + } else { + _Btn6 ctrlSetText localize "STR_vInAct_Unflip"; + _Btn6 buttonSetAction "life_vInact_curTarget setPos [getPos life_vInact_curTarget select 0, getPos life_vInact_curTarget select 1, (getPos life_vInact_curTarget select 2)+0.5]; closeDialog 0;"; + if (alive _curTarget && {crew _curTarget isEqualTo []} && {canMove _curTarget}) then { _Btn6 ctrlEnable false;} else {_Btn6 ctrlEnable true;}; + }; + }; +} else { + if (_curTarget isKindOf "Ship") then { + _Btn2 ctrlSetText localize "STR_vInAct_PushBoat"; + _Btn2 buttonSetAction "[] spawn life_fnc_pushObject; closeDialog 0;"; + if (alive _curTarget && {_curTarget isKindOf "Ship"} && {local _curTarget} && {crew _curTarget isEqualTo []}) then { _Btn2 ctrlEnable true;} else {_Btn2 ctrlEnable false}; + } else { + if ((typeOf (_curTarget) in _dlcVehicles) && !(288520 in getDLCs 1)) then { + if (_curTarget isKindOf "Air") then { + _Btn2 ctrlSetText localize "STR_vInAct_GetInHeli"; + } else { + _Btn2 ctrlSetText localize "STR_vInAct_GetInKart"; + }; + _Btn2 buttonSetAction "player moveInDriver life_vInact_curTarget; closeDialog 0;"; + if (crew _curTarget isEqualTo [] && {canMove _curTarget} && {locked _curTarget isEqualTo 0}) then {_Btn2 ctrlEnable true;} else {_Btn2 ctrlEnable false}; + } else { + _Btn2 ctrlSetText localize "STR_vInAct_Unflip"; + _Btn2 buttonSetAction "life_vInact_curTarget setPos [getPos life_vInact_curTarget select 0, getPos life_vInact_curTarget select 1, (getPos life_vInact_curTarget select 2)+0.5]; closeDialog 0;"; + if (alive _curTarget && {crew _curTarget isEqualTo []} && {canMove _curTarget}) then { _Btn2 ctrlEnable false;} else {_Btn2 ctrlEnable true;}; + }; + }; + if (typeOf _curTarget == "O_Truck_03_device_F") then { + _Btn3 ctrlSetText localize "STR_vInAct_DeviceMine"; + _Btn3 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_deviceMine"; + if (!isNil {(_curTarget getVariable "mining")} || !local _curTarget && {_curTarget in life_vehicles}) then { + _Btn3 ctrlEnable false; + } else { + _Btn3 ctrlEnable true; + }; + } else { + _Btn3 ctrlShow false; + if (typeOf (_curTarget) in ["C_Van_01_fuel_F","I_Truck_02_fuel_F","B_Truck_01_fuel_F"] && _curTarget in life_vehicles) then { + if (!isNil {_curTarget getVariable "fuelTankWork"}) then { + _Btn3 ctrlSetText localize "STR_FuelTank_Stop"; + _Btn3 buttonSetAction "life_vInact_curTarget setVariable [""fuelTankWork"",nil,true]; closeDialog 0;"; + _Btn3 ctrlShow true; + } else { + if (count (nearestObjects [_curTarget, ["Land_FuelStation_Feed_F","Land_fs_feed_F"], 15]) > 0) then { + _Btn3 ctrlSetText localize "STR_FuelTank_Supply"; + _Btn3 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_fuelSupply"; + _Btn3 ctrlShow true; + }else{ + { + if (player distance (getMarkerPos _x) < 20) exitWith { + _Btn3 ctrlSetText localize "STR_FuelTank_Store"; + _Btn3 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_fuelStore"; + _Btn3 ctrlShow true; + }; + } forEach ["fuel_storage_1","fuel_storage_2"]; + }; + }; + }; + }; + + _Btn4 ctrlShow false; + _Btn5 ctrlShow false; + _Btn6 ctrlShow false; +}; diff --git a/life_client/core/vehicle/fn_vehInventory.sqf b/life_client/core/vehicle/fn_vehInventory.sqf new file mode 100644 index 00000000..227bcd43 --- /dev/null +++ b/life_client/core/vehicle/fn_vehInventory.sqf @@ -0,0 +1,53 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_vehInventory.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Used a refresher for the vehicle inventory / trunk menu items. +*/ +private["_veh","_tInv","_pInv","_veh_data"]; +_veh = param [0,objNull,[objNull]]; +if (isNull _veh || !alive _veh) exitWith {closeDialog 0;}; //If null / dead exit menu +disableSerialization; + +_tInv = CONTROL(3500,3502); +_pInv = CONTROL(3500,3503); +lbClear _tInv; +lbClear _pInv; + +_veh_data = [_veh] call life_fnc_vehicleWeight; + +if ((_veh_data select 0) isEqualTo -1) exitWith {closeDialog 0}; + +ctrlSetText[3504,format["Weight: %1/%2",(_veh_data select 1),(_veh_data select 0)]]; +_data = _veh getVariable ["Trunk",[]]; +if (count _data isEqualTo 0) then {_veh setVariable ["Trunk",[[],0],true]; _data = [];} else {_data = (_data select 0);}; +//Player Inventory Items +{ + _val = ITEM_VALUE(configName _x); + + if (_val > 0) then { + _pInv lbAdd format["[%1] - %2",_val,localize (getText(_x >> "displayName"))]; + _pInv lbSetData [(lbSize _pInv)-1,configName _x]; + _icon = (getText(_x >> "icon")); + if (!(_icon isEqualTo "")) then { + _pInv lbSetPicture [(lbSize _pInv)-1,_icon]; + }; + }; +} forEach ("true" configClasses (missionConfigFile >> "VirtualItems")); + +//Trunk Inventory Items +{ + _name = M_CONFIG(getText,"VirtualItems",(_x select 0),"displayName"); + _val = (_x select 1); + + if (_val > 0) then { + _tInv lbAdd format["[%1] - %2",_val,localize _name]; + _tInv lbSetData [(lbSize _tInv)-1,(_x select 0)]; + _icon = M_CONFIG(getText,"VirtualItems",(_x select 0),"icon"); + if (!(_icon isEqualTo "")) then { + _tInv lbSetPicture [(lbSize _tInv)-1,_icon]; + }; + }; +} forEach _data; diff --git a/life_client/core/vehicle/fn_vehStoreItem.sqf b/life_client/core/vehicle/fn_vehStoreItem.sqf new file mode 100644 index 00000000..3e075bfe --- /dev/null +++ b/life_client/core/vehicle/fn_vehStoreItem.sqf @@ -0,0 +1,57 @@ +#include "..\..\script_macros.hpp" +#define ctrlSelData(ctrl) (lbData[##ctrl,(lbCurSel ##ctrl)]) +/* + File: fn_vehStoreItem.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Used in the vehicle trunk menu, stores the selected item and puts it in the vehicles virtual inventory + if the vehicle has room for the item. +*/ +private["_ctrl","_num","_totalWeight","_itemWeight","_veh_data","_inv","_index","_val"]; +disableSerialization; +if ((life_trunk_vehicle getVariable ["trunk_in_use_by",player]) != player) exitWith { closeDialog 0; hint localize "STR_MISC_VehInvUse"; }; + +_ctrl = ctrlSelData(3503); +_num = ctrlText 3506; +if (!([_num] call TON_fnc_isnumber)) exitWith {hint localize "STR_MISC_WrongNumFormat";}; +_num = parseNumber(_num); +if (_num < 1) exitWith {hint localize "STR_MISC_Under1";}; + +_totalWeight = [life_trunk_vehicle] call life_fnc_vehicleWeight; + +_itemWeight = ([_ctrl] call life_fnc_itemWeight) * _num; +_veh_data = life_trunk_vehicle getVariable ["Trunk",[[],0]]; +_inv = _veh_data select 0; + +if (_ctrl == "goldbar" && {!(life_trunk_vehicle isKindOf "LandVehicle")}) exitWith {hint localize "STR_NOTF_canOnlyStoreInLandVeh";}; + +if (_ctrl == "money") then { + _index = [_ctrl,_inv] call TON_fnc_index; + if (CASH < _num) exitWith {hint localize "STR_NOTF_notEnoughCashToStoreInVeh";}; + if (_index isEqualTo -1) then { + _inv pushBack [_ctrl,_num]; + } else { + _val = _inv select _index select 1; + _inv set[_index,[_ctrl,_val + _num]]; + }; + + CASH = CASH - _num; + [0] call SOCK_fnc_updatePartial; + life_trunk_vehicle setVariable ["Trunk",[_inv,(_veh_data select 1) + _itemWeight],true]; + [life_trunk_vehicle] call life_fnc_vehInventory; +} else { + if (((_totalWeight select 1) + _itemWeight) > (_totalWeight select 0)) exitWith {hint localize "STR_NOTF_VehicleFullOrInsufCap";}; + + if (!([false,_ctrl,_num] call life_fnc_handleInv)) exitWith {hint localize "STR_CouldNotRemoveItemsToPutInVeh";}; + _index = [_ctrl,_inv] call TON_fnc_index; + if (_index isEqualTo -1) then { + _inv pushBack [_ctrl,_num]; + } else { + _val = _inv select _index select 1; + _inv set[_index,[_ctrl,_val + _num]]; + }; + + life_trunk_vehicle setVariable ["Trunk",[_inv,(_veh_data select 1) + _itemWeight],true]; + [life_trunk_vehicle] call life_fnc_vehInventory; +}; \ No newline at end of file diff --git a/life_client/core/vehicle/fn_vehTakeItem.sqf b/life_client/core/vehicle/fn_vehTakeItem.sqf new file mode 100644 index 00000000..2d14f1cc --- /dev/null +++ b/life_client/core/vehicle/fn_vehTakeItem.sqf @@ -0,0 +1,56 @@ +#include "..\..\script_macros.hpp" +#define ctrlSelData(ctrl) (lbData[##ctrl,(lbCurSel ##ctrl)]) +/* + File: fn_vehTakeItem.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Used in the vehicle trunk menu, takes the selected item and puts it in the players virtual inventory + if the player has room. +*/ +private["_ctrl","_num","_index","_data","_old","_value","_weight","_diff"]; +disableSerialization; +if (isNull life_trunk_vehicle || !alive life_trunk_vehicle) exitWith {hint localize "STR_MISC_VehDoesntExist"}; +if (!alive player) exitWith {closeDialog 0;}; +if ((life_trunk_vehicle getVariable ["trunk_in_use_by",player]) != player) exitWith { closeDialog 0; hint localize "STR_MISC_VehInvUse"; }; + +if ((lbCurSel 3502) isEqualTo -1) exitWith {hint localize "STR_Global_NoSelection";}; +_ctrl = ctrlSelData(3502); +_num = ctrlText 3505; +if (!([_num] call TON_fnc_isnumber)) exitWith {hint localize "STR_MISC_WrongNumFormat";}; +_num = parseNumber(_num); +if (_num < 1) exitWith {hint localize "STR_MISC_Under1";}; + +_index = [_ctrl,((life_trunk_vehicle getVariable "Trunk") select 0)] call TON_fnc_index; +_data = (life_trunk_vehicle getVariable "Trunk") select 0; +_old = life_trunk_vehicle getVariable "Trunk"; +if (_index isEqualTo -1) exitWith {}; +_value = _data select _index select 1; +if (_num > _value) exitWith {hint localize "STR_MISC_NotEnough"}; +_num = [_ctrl,_num,life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff; +if (_num isEqualTo 0) exitWith {hint localize "STR_NOTF_InvFull"}; +_weight = ([_ctrl] call life_fnc_itemWeight) * _num; +if (_ctrl == "money") then { + if (_num == _value) then { + _data deleteAt _index; + } else { + _data set[_index,[_ctrl,(_value - _num)]]; + }; + + CASH = CASH + _num; + [0] call SOCK_fnc_updatePartial; + life_trunk_vehicle setVariable ["Trunk",[_data,(_old select 1) - _weight],true]; + [life_trunk_vehicle] call life_fnc_vehInventory; +} else { + if ([true,_ctrl,_num] call life_fnc_handleInv) then { + if (_num == _value) then { + _data deleteAt _index; + } else { + _data set[_index,[_ctrl,(_value - _num)]]; + }; + life_trunk_vehicle setVariable ["Trunk",[_data,(_old select 1) - _weight],true]; + [life_trunk_vehicle] call life_fnc_vehInventory; + } else { + hint localize "STR_NOTF_InvFull"; + }; +}; diff --git a/life_client/core/vehicle/fn_vehicleColor3DRefresh.sqf b/life_client/core/vehicle/fn_vehicleColor3DRefresh.sqf new file mode 100644 index 00000000..87ae9cb0 --- /dev/null +++ b/life_client/core/vehicle/fn_vehicleColor3DRefresh.sqf @@ -0,0 +1,14 @@ +/* + File: fn_vehicleColor3DRefresh.sqf + Author: + Modified: NiiRoZz + + Description: + Called when a new selection is made in the rsc box and paint the vehicle with the color selected. +*/ +disableSerialization; +_display = findDisplay 2300; +_colorIndex = lbValue[2304,(lbCurSel 2304)]; +if (isNull life_preview_3D_vehicle_object) exitWith {}; + +[life_preview_3D_vehicle_object,_colorIndex] call life_fnc_colorVehicle; \ No newline at end of file diff --git a/life_client/core/vehicle/fn_vehicleOwners.sqf b/life_client/core/vehicle/fn_vehicleOwners.sqf new file mode 100644 index 00000000..5b0b232a --- /dev/null +++ b/life_client/core/vehicle/fn_vehicleOwners.sqf @@ -0,0 +1,16 @@ +/* + File: fn_vehicleOwners.sqf + Author: + + Description: + Pulled from old system, will be revised for new system. +*/ +private["_return","_format"]; +_return = ""; + +{ + _format = format["%1
",_x select 1]; + _return = _return + _format; +} forEach (_this select 0); + +_return; diff --git a/life_client/core/vehicle/fn_vehicleWeight.sqf b/life_client/core/vehicle/fn_vehicleWeight.sqf new file mode 100644 index 00000000..47ee9d44 --- /dev/null +++ b/life_client/core/vehicle/fn_vehicleWeight.sqf @@ -0,0 +1,17 @@ +/* + File: fn_vehicleWeight.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Calculates Vehicle Weight. +*/ +private["_vehicle","_weight","_used"]; +_vehicle = param [0,objNull,[objNull]]; +if (isNull _vehicle) exitWith {}; + +_weight = -1; +_used = (_vehicle getVariable "Trunk") select 1; +_weight = [(typeOf _vehicle)] call life_fnc_vehicleWeightCfg; + +if (isNil "_used") then {_used = 0}; +[_weight,_used]; diff --git a/life_client/description.ext b/life_client/description.ext new file mode 100644 index 00000000..70604170 --- /dev/null +++ b/life_client/description.ext @@ -0,0 +1,172 @@ +disableChannels[]={{0,true,true},{1,true,true},{2,true,true}}; // Disabled text and voice for global, side, and command channels. disableChannels[] = {{channelID, disableChat, disableVoice}}; + +#include "config\Config_Spyglass.hpp" +#include "CfgRemoteExec.hpp" +#include "dialog\MasterHandler.hpp" +#include "config\Config_Master.hpp" + +class CfgServer { + DatabaseName = "altislife"; //Config name that'll be grep in the extdb-conf.ini. Default: [altislife] + DebugMode = 0; //Enable many server/hc debugging logs. Default: 0 (1 = Enabled / 0 = Disabled) + HeadlessSupport = 0; //Enable/Disable Headless client support. Default: 1 (1 = Enabled / 0 = Disabled) + /* + Enabled: When HeadlessSupport is set to 1 (enabled), the server will run without fault when no Headless Client is connected. However, it will support the Headless Client if you choose to connect one. + Disabled: If HeadlessSupport is set to 0 (disabled), the connection of a Headless Client will make no difference. This option will increase server performance a TINY but negligible amount. + */ +}; + +class RscTitles { + #include "dialog\progress.hpp" + #include "dialog\hud_nameTags.hpp" + #include "dialog\hud_stats.hpp" +}; + +class CfgFunctions { + #include "Functions.hpp" +}; + +class CfgSounds { + sounds[] = {}; + class sirenLong { + name = "sirenLong"; + sound[] = {"\sounds\sirenLong.ogg", 1.0, 1}; + titles[] = {}; + }; + + class medicSiren { + name = "medicSiren"; + sound[] = {"\sounds\medicSiren.ogg", 1.0, 1}; + titles[] = {}; + }; + + class tazerSound { + name = "tazerSound"; + sound[] = {"\sounds\tazer.ogg", 0.25, 1}; + titles[] = {}; + }; + + class flashbang { + name = "flashbang"; + sound[] = {"\sounds\flashbang.ogg", 1.0, 1}; + titles[] = {}; + }; + + class mining { + name = "mining"; + sound[] = {"\sounds\mining.ogg", 1.0, 1}; + titles[] = {}; + }; + + class harvest { + name = "harvest"; + sound[] = {"\sounds\harvest.ogg", 1.0, 1}; + titles[] = {}; + }; + + class lockCarSound { + name = "lockCarSound"; + sound[] = {"\sounds\carLock.ogg", 0.25, 1}; + titles[] = {}; + }; + + class unlockCarSound { + name = "unlockCarSound"; + sound[] = {"\sounds\carUnlock.ogg", 0.25, 1}; + titles[] = {}; + }; +}; + +class CfgDebriefing { + class NotWhitelisted { + title = "$STR_NotWhitelisted_Title"; + subtitle = "$STR_NotWhitelisted_SubTitle"; + description = "$STR_NotWhitelisted_Descript"; + pictureBackground = ""; + picture = ""; + pictureColor[] = {0,0.3,0.6,1}; + }; + + class Blacklisted { + title = "$STR_Blacklisted_Title"; + subtitle = "$STR_Blacklisted_SubTitle"; + description = "$STR_Blacklisted_Descript"; + pictureBackground = ""; + picture = ""; + pictureColor[] = {0,0.3,0.6,1}; + }; + + class SpyGlass { + title = $STR_SpyDetect_Title; + subTitle = $STR_SpyDetect_SubTitle; + description = $STR_SpyDetect_Descript; + pictureBackground = ""; + picture = ""; + pictureColor[] = {0,0.3,0.6,1}; + }; +}; + +class CfgNotifications { + class MedicalRequestEmerg { + title = "$STR_MedicalRequestEmerg_Title"; + iconPicture = "\A3\ui_f\data\map\mapcontrol\taskIcon_ca.paa"; + description = "%1"; + duration = 5; + priority = 7; + }; + + class DeliveryAssigned { + title = "$STR_DeliveryAssigned_Title"; + iconPicture = "\A3\ui_f\data\map\mapcontrol\taskIcon_ca.paa"; + description = "%1"; + duration = 10; + priority = 7; + }; + + class DeliveryFailed { + title = "$STR_DeliveryFailed_Title"; + iconPicture = "\A3\ui_f\data\map\mapcontrol\taskiconfailed_ca.paa"; + description = "%1"; + duration = 7; + priority = 7; + }; + + class DeliverySucceeded { + title = "$STR_DeliverySucceeded_Title"; + iconPicture = "\A3\ui_f\data\map\mapcontrol\taskIcondone_ca.paa"; + description = "%1"; + duration = 6; + priority = 6; + }; + + class TextMessage { + title = "$STR_TextMessage_Title"; + iconPicture = "icons\ico_messageNew.paa"; + description = "%1"; + duration = 10; + priority = 6; + }; + + class PoliceDispatch { + title = "$STR_PoliceDispatch_Title"; + iconPicture = "icons\ico_messagePolice.paa"; + description = "%1"; + duration = 10; + priority = 6; + }; + + class AdminDispatch { + title = "$STR_AdminDispatch_Title"; + iconPicture = "icons\ico_messageAdmin.paa"; + description = "%1"; + duration = 10; + priority = 6; + }; + + class AdminMessage { + title = "$STR_AdminMessage_Title"; + iconPicture = "icons\ico_messageAdmin.paa"; + description = "%1"; + duration = 10; + priority = 5; + }; +}; diff --git a/life_client/dialog/AltisPhone.hpp b/life_client/dialog/AltisPhone.hpp new file mode 100644 index 00000000..f66a74d4 --- /dev/null +++ b/life_client/dialog/AltisPhone.hpp @@ -0,0 +1,78 @@ +class AltisPhone { + idd = 6600; + movingEnable = 0; + enableSimulation = 1; + name = "AltisPhone"; + onLoad = ""; + controls[] = { + backgroundScreen, + backgroundPhone, + mapIcon, + speechIcon, + mailIcon, + settingsIcon, + framePhone + }; + + class backgroundScreen: Life_RscPicture { + idc = 6601; + text = "textures\phone_bg_manwar.paa"; + x = 0.710431 * safezoneW + safezoneX; + y = 0.533 * safezoneH + safezoneY; + w = 0.15 * safezoneW; + h = 0.5 * safezoneH; + }; + + class backgroundPhone: Life_RscPicture { + idc = 6600; + text = "textures\phone_frame.paa"; + x = 0.710431 * safezoneW + safezoneX; + y = 0.533 * safezoneH + safezoneY; + w = 0.15 * safezoneW; + h = 0.5 * safezoneH; + }; + + class mapIcon: Life_RscPicture { + idc = 6602; + text = "icons\ico_map.paa"; + x = 0.733088 * safezoneW + safezoneX; + y = 0.896 * safezoneH + safezoneY; + w = 0.025 * safezoneW; + h = 0.04 * safezoneH; + }; + + class speechIcon: Life_RscPicture { + idc = 6603; + text = "icons\ico_speech.paa"; + x = 0.75965 * safezoneW + safezoneX; + y = 0.896 * safezoneH + safezoneY; + w = 0.025 * safezoneW; + h = 0.04 * safezoneH; + }; + + class mailIcon: Life_RscPicture { + idc = 6604; + text = "icons\ico_mail.paa"; + x = 0.786212 * safezoneW + safezoneX; + y = 0.896 * safezoneH + safezoneY; + w = 0.025 * safezoneW; + h = 0.04 * safezoneH; + }; + + class settingsIcon: Life_RscPicture { + idc = 6605; + text = "icons\ico_settings.paa"; + x = 0.812774 * safezoneW + safezoneX; + y = 0.896 * safezoneH + safezoneY; + w = 0.025 * safezoneW; + h = 0.04 * safezoneH; + }; + + class framePhone: Life_RscFrame { + idc = 6606; + x = 0.734118 * safezoneW + safezoneX; + y = 0.6276 * safezoneH + safezoneY; + w = 0.104156 * safezoneW; + h = 0.2112 * safezoneH; + }; +}; diff --git a/life_client/dialog/FuelStat.hpp b/life_client/dialog/FuelStat.hpp new file mode 100644 index 00000000..fbcf3e6b --- /dev/null +++ b/life_client/dialog/FuelStat.hpp @@ -0,0 +1,137 @@ +class Life_FuelStat { + idd = 20300; + name="life_fuelStat"; + movingEnabled = 0; + enableSimulation = 1; + onLoad = "ctrlShow [2330,false];"; + + class controlsBackground { + class Life_RscTitleBackground: Life_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class MainBackground: Life_RscText { + colorBackground[] = {0,0,0,0.7}; + idc = -1; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.8; + h = 0.7 - (22 / 250); + }; + + class Title: Life_RscTitle { + idc = 20301; + text = ""; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class VehicleTitleBox: Life_RscText { + idc = -1; + text = "$STR_GUI_ShopStock"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + x = 0.11; + y = 0.26; + w = 0.32; + h = (1 / 25); + }; + + class VehicleInfoHeader: Life_RscText { + idc = 20330; + text = "$STR_GUI_VehInfo"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + x = 0.46; + y = 0.26; + w = 0.42; + h = (1 / 25); + }; + + class FuelPrice: Life_RscTitle { + idc = 20322; + text = "Price:"; + x = 0.15; + y = 0.8; + w = 0.8; + h = (1 / 25); + }; + + class literfuel: Life_RscTitle { + idc = 20324; + text = "Fuel:"; + x = 0.55; + y = 0.75; + w = 0.8; + h = (1 / 25); + }; + class Totalfuel: Life_RscTitle { + idc = 20323; + text = "Total:"; + x = 0.75; + y = 0.8; + w = 0.8; + h = (1 / 25); + }; + class CloseBtn: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_Close"; + onButtonClick = "closeDialog 0; life_action_inUse = false;"; + x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class refuelCar: Life_RscButtonMenu { + idc = 20309; + text = "Refuel"; + onButtonClick = "[] spawn life_fnc_fuelRefuelCar;"; + x = 0.26 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + }; + + class controls { + class VehicleList: Life_RscListBox { + idc = 20302; + text = ""; + sizeEx = 0.04; + colorBackground[] = {0.1,0.1,0.1,0.9}; + onLBSelChanged = "_this call life_fnc_fuelLBChange"; + x = 0.11; + y = 0.302; + w = 0.32; + h = 0.49; + }; + + class fuelTank: life_RscXSliderH { + idc = 20901; + text = ""; + onSliderPosChanged = "[3,_this select 1] call life_fnc_s_onSliderChange;"; + tooltip = ""; + x = 0.47; + y = .80; + w = "9 *(((safezoneW / safezoneH) min 1.2) / 40)"; + h = "1 *((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + }; + + class vehicleInfomationList: Life_RscStructuredText + { + idc = 20303; + text = ""; + sizeEx = 0.035; + x = 0.46; + y = 0.3; + w = 0.42; + h = 0.5; + }; + }; +}; \ No newline at end of file diff --git a/life_client/dialog/MasterHandler.hpp b/life_client/dialog/MasterHandler.hpp new file mode 100644 index 00000000..931f48bc --- /dev/null +++ b/life_client/dialog/MasterHandler.hpp @@ -0,0 +1,31 @@ +/* + Master UI Resource File +*/ +#include "common.hpp" +#include "shop_items.hpp" +#include "player_inv.hpp" +#include "gang.hpp" +#include "key_chain.hpp" +#include "impound.hpp" +#include "bank.hpp" +#include "veh_shop.hpp" +#include "shops.hpp" +#include "hud_stats.hpp" +#include "admin_menu.hpp" +#include "cell_phone.hpp" +#include "wanted_list.hpp" +#include "ticket.hpp" +#include "clothing.hpp" +#include "trunk.hpp" +#include "spawnSelection.hpp" +#include "chop_shop.hpp" +#include "pInteraction.hpp" +#include "deathScreen.hpp" +#include "vehicleShop.hpp" +#include "vehicleShop3D.hpp" +#include "settings.hpp" +#include "federalReserve.hpp" +#include "compensate.hpp" +#include "FuelStat.hpp" +#include "AltisPhone.hpp" +#include "newsStation.hpp" \ No newline at end of file diff --git a/life_client/dialog/admin_menu.hpp b/life_client/dialog/admin_menu.hpp new file mode 100644 index 00000000..c7ea31e1 --- /dev/null +++ b/life_client/dialog/admin_menu.hpp @@ -0,0 +1,151 @@ +class life_admin_menu { + idd = 2900; + name= "life_admin_menu"; + movingEnable = 0; + enableSimulation = 1; + onLoad = "[] spawn life_fnc_adminMenu;"; + + class controlsBackground { + class MainBackground: Life_RscText { + idc = -1; + colorBackground[] = {0,0,0,0.7}; + x = 0.314375 * safezoneW + safezoneX; + y = 0.313 * safezoneH + safezoneY; + w = 0.37125 * safezoneW; + h = 0.396 * safezoneH; + }; + + class Life_RscTitleBackground: Life_RscText { + idc = -1; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + text = "$STR_Admin_Title"; + x = 0.314375 * safezoneW + safezoneX; + y = 0.291 * safezoneH + safezoneY; + w = 0.37125 * safezoneW; + h = 0.022 * safezoneH; + }; + }; + + class controls { + class RscButtonMenu_2400: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_Close"; + onButtonClick = "closeDialog 0;"; + x = 0.324687 * safezoneW + safezoneX; + y = 0.643 * safezoneH + safezoneY; + w = 0.061875 * safezoneW; + h = 0.022 * safezoneH; + }; + + class RscButtonMenu_2402: Life_RscButtonMenu { + idc = -1; + text = "$STR_Admin_GetID"; + onButtonClick = "[] call life_fnc_adminGetID;"; + x = 0.396875 * safezoneW + safezoneX; + y = 0.643 * safezoneH + safezoneY; + w = 0.061875 * safezoneW; + h = 0.022 * safezoneH; + }; + + class RscButtonMenu_2403: Life_RscButtonMenu { + idc = 2904; + text = "$STR_Admin_Compensate"; + onButtonClick = "createDialog ""Life_Admin_Compensate"";"; + x = 0.469062 * safezoneW + safezoneX; + y = 0.643 * safezoneH + safezoneY; + w = 0.061875 * safezoneW; + h = 0.022 * safezoneH; + }; + + class RscButtonMenu_2404: Life_RscButtonMenu { + idc = 2905; + text = "$STR_Admin_Spectate"; + onButtonClick = "[] call life_fnc_adminSpectate;"; + x = 0.54125 * safezoneW + safezoneX; + y = 0.643 * safezoneH + safezoneY; + w = 0.061875 * safezoneW; + h = 0.022 * safezoneH; + }; + + class RscButtonMenu_2405: Life_RscButtonMenu { + idc = 2906; + text = "$STR_Admin_Teleport"; + onButtonClick = "[] call life_fnc_adminTeleport; hint 'Select where you would like to teleport';"; + x = 0.613437 * safezoneW + safezoneX; + y = 0.643 * safezoneH + safezoneY; + w = 0.061875 * safezoneW; + h = 0.022 * safezoneH; + }; + + class RscButtonMenu_2401: Life_RscButtonMenu { + idc = 2907; + text = "$STR_Admin_TpHere"; + onButtonClick = "[] call life_fnc_adminTpHere;"; + x = 0.324687 * safezoneW + safezoneX; + y = 0.676 * safezoneH + safezoneY; + w = 0.061875 * safezoneW; + h = 0.022 * safezoneH; + }; + + class RscButtonMenu_2406: Life_RscButtonMenu { + idc = 2908; + text = "$STR_Admin_God"; + onButtonClick = "[] call life_fnc_adminGodMode;"; + x = 0.396875 * safezoneW + safezoneX; + y = 0.676 * safezoneH + safezoneY; + w = 0.061875 * safezoneW; + h = 0.022 * safezoneH; + }; + + class RscButtonMenu_2407: Life_RscButtonMenu { + idc = 2909; + text = "$STR_Admin_Freeze"; + onButtonClick = "[] call life_fnc_adminFreeze;"; + x = 0.469062 * safezoneW + safezoneX; + y = 0.676 * safezoneH + safezoneY; + w = 0.061875 * safezoneW; + h = 0.022 * safezoneH; + }; + + class RscButtonMenu_2408: Life_RscButtonMenu { + idc = 2910; + text = "$STR_Admin_Markers"; + onButtonClick = "[] spawn life_fnc_adminMarkers;closeDialog 0;"; + x = 0.54125 * safezoneW + safezoneX; + y = 0.676 * safezoneH + safezoneY; + w = 0.061875 * safezoneW; + h = 0.022 * safezoneH; + }; + + class RscButtonMenu_2409: Life_RscButtonMenu { + idc = 2911; + text = "$STR_Admin_Debug"; + onButtonClick = "[] call life_fnc_adminDebugCon;"; + x = 0.613437 * safezoneW + safezoneX; + y = 0.676 * safezoneH + safezoneY; + w = 0.061875 * safezoneW; + h = 0.022 * safezoneH; + }; + + class PlayerList_Admin: Life_RscListBox { + idc = 2902; + text = ""; + sizeEx = 0.035; + onLBSelChanged = "[_this] spawn life_fnc_adminQuery"; + x = 0.324687 * safezoneW + safezoneX; + y = 0.335 * safezoneH + safezoneY; + w = 0.159844 * safezoneW; + h = 0.275 * safezoneH; + }; + + class PlayerBInfo: Life_RscStructuredText { + idc = 2903; + text = ""; + x = 0.489687 * safezoneW + safezoneX; + y = 0.335 * safezoneH + safezoneY; + w = 0.185625 * safezoneW; + h = 0.275 * safezoneH; + colorBackground[] = {0,0,0,0.7}; + }; + }; +}; \ No newline at end of file diff --git a/life_client/dialog/bank.hpp b/life_client/dialog/bank.hpp new file mode 100644 index 00000000..f7684bb3 --- /dev/null +++ b/life_client/dialog/bank.hpp @@ -0,0 +1,128 @@ +class Life_atm_management { + idd = 2700; + name= "life_atm_menu"; + movingEnable = 0; + enableSimulation = 1; + + class controlsBackground { + class Life_RscTitleBackground: Life_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.35; + y = 0.2; + w = 0.3; + h = (1 / 25); + }; + + class MainBackground: Life_RscText { + colorBackground[] = {0, 0, 0, 0.7}; + idc = -1; + x = 0.35; + y = 0.2 + (11 / 250); + w = 0.3; + h = 0.652 - (22 / 250); + }; + }; + + class controls { + class CashTitle: Life_RscStructuredText { + idc = 2701; + text = ""; + x = 0.39; + y = 0.26; + w = 0.3; + h = .14; + }; + + class Title: Life_RscTitle { + colorBackground[] = {0, 0, 0, 0}; + idc = -1; + text = "$STR_ATM_Title"; + x = 0.35; + y = 0.2; + w = 0.6; + h = (1 / 25); + }; + + class WithdrawButton: Life_RscButtonMenu { + idc = -1; + text = "$STR_ATM_Withdraw"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call life_fnc_bankWithdraw"; + x = 0.425; + y = 0.46; + w = (6 / 40); + h = (1 / 25); + }; + + class DepositButton: Life_RscButtonMenu { + idc = -1; + text = "$STR_ATM_Deposit"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call life_fnc_bankDeposit"; + x = 0.425; + y = 0.512; + w = (6 / 40); + h = (1 / 25); + }; + + class moneyEdit: Life_RscEdit { + idc = 2702; + text = "1"; + sizeEx = 0.030; + x = 0.4; + y = 0.41; + w = 0.2; + h = 0.03; + }; + + class PlayerList: Life_RscCombo { + idc = 2703; + x = 0.4; + y = 0.58; + w = 0.2; + h = 0.03; + }; + + class TransferButton: Life_RscButtonMenu { + idc = -1; + text = "$STR_ATM_Transfer"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call life_fnc_bankTransfer"; + x = 0.425; + y = 0.63; + w = (6 / 40); + h = (1 / 25); + }; + + class GangWithdraw : TransferButton { + idc = 2705; + text = "$STR_ATM_WithdrawGang"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call life_fnc_gangWithdraw"; + x = 0.365; + y = 0.7; + w = 0.275; + }; + + class GangDeposit : TransferButton { + idc = 2706; + text = "$STR_ATM_DepositGang"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call life_fnc_gangDeposit"; + x = 0.365; + y = 0.752; + w = 0.275; + }; + + class CloseButtonKey: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_Close"; + onButtonClick = "closeDialog 0;"; + x = 0.35; + y = 0.812; + w = (6.25 / 40); + h = (1 / 25); + }; + }; +}; \ No newline at end of file diff --git a/life_client/dialog/cell_phone.hpp b/life_client/dialog/cell_phone.hpp new file mode 100644 index 00000000..f761b308 --- /dev/null +++ b/life_client/dialog/cell_phone.hpp @@ -0,0 +1,143 @@ +class Life_cell_phone { + idd = 3000; + name= "life_cell_phone"; + movingEnable = 0; + enableSimulation = 1; + onLoad = "[] spawn life_fnc_cellphone"; + + class controlsBackground { + class Life_RscTitleBackground: Life_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.1; + y = 0.2; + w = 0.64; + h = (1 / 25); + }; + + class MainBackground: Life_RscText { + colorBackground[] = {0, 0, 0, 0.7}; + idc = -1; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.64; + h = 0.3 - (5 / 250); + }; + }; + + class controls { + class Title: Life_RscTitle { + colorBackground[] = {0, 0, 0, 0}; + idc = 3001; + text = "$STR_CELL_Title"; + x = 0.1; + y = 0.2; + w = 0.6; + h = (1 / 25); + }; + + class TextToSend: Life_RscTitle { + colorBackground[] = {0, 0, 0, 0}; + idc = 3002; + text = "$STR_CELL_TextToSend"; + x = 0.1; + y = 0.25; + w = 0.6; + h = (1 / 25); + }; + + class textEdit: Life_RscEdit { + idc = 3003; + text = ""; + sizeEx = 0.030; + x = 0.11; + y = 0.3; + w = 0.62; + h = 0.03; + }; + + class TextMsgButton: Life_RscButtonMenu { + idc = 3015; + text = "$STR_CELL_TextMSGBtn"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call TON_fnc_cell_textmsg"; + x = 0.11; + y = 0.35; + w = 0.2; + h = (1 / 25); + }; + + class PlayerList: Life_RscCombo { + idc = 3004; + x = 0.11; + y = 0.4; + w = 0.2; + h = (1 / 25); + }; + + class TextCopButton: Life_RscButtonMenu { + idc = 3016; + text = "$STR_CELL_TextPolice"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call TON_fnc_cell_textcop"; + x = 0.32; + y = 0.35; + w = 0.2; + h = (1 / 25); + }; + + class TextAdminButton: Life_RscButtonMenu { + idc = 3017; + text = "$STR_CELL_TextAdmins"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call TON_fnc_cell_textadmin"; + x = 0.53; + y = 0.35; + w = 0.2; + h = (1 / 25); + }; + + class AdminMsgButton: Life_RscButtonMenu { + idc = 3020; + text = "$STR_CELL_AdminMsg"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call TON_fnc_cell_adminmsg"; + x = 0.32; + y = 0.4; + w = 0.2; + h = (1 / 25); + }; + + class AdminMsgAllButton: Life_RscButtonMenu { + idc = 3021; + text = "$STR_CELL_AdminMSGAll"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call TON_fnc_cell_adminmsgall"; + x = 0.53; + y = 0.4; + w = 0.2; + h = (1 / 25); + }; + + class EMSRequest: Life_RscButtonMenu { + idc = 3022; + text = "$STR_CELL_EMSRequest"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call TON_fnc_cell_emsrequest"; + x = 0.11; + y = 0.45; + w = 0.2; + h = (1 / 25); + }; + + class CloseButtonKey: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_Close"; + onButtonClick = "closeDialog 0;"; + x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.51 + (1 / 50); + w = (6.25 / 40); + h = (1 / 25); + }; + }; +}; \ No newline at end of file diff --git a/life_client/dialog/chop_shop.hpp b/life_client/dialog/chop_shop.hpp new file mode 100644 index 00000000..ac7d008d --- /dev/null +++ b/life_client/dialog/chop_shop.hpp @@ -0,0 +1,77 @@ +class Chop_Shop { + idd = 39400; + movingEnable = 0; + enableSimulation = 1; + + class controlsBackground { + class RscTitleBackground: Life_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.1; + y = 0.2; + w = 0.32; + h = (1 / 25); + }; + + class MainBackGround: Life_RscText { + colorBackground[] = {0,0,0,0.7}; + idc = -1; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.32; + h = 0.6 - (22 / 250); + }; + + class Title: Life_RscTitle { + colorBackground[] = {0,0,0,0}; + idc = -1; + text = "$STR_ChopShop_Title"; + x = 0.1; + y = 0.2; + w = 0.32; + h = (1 / 25); + }; + + class priceInfo: Life_RscStructuredText { + idc = 39401; + text = ""; + sizeEx = 0.035; + x = 0.11; + y = 0.68; + w = 0.2; + h = 0.2; + }; + }; + + class controls { + class vehicleList: Life_RscListBox { + idc = 39402; + onLBSelChanged = "_this call life_fnc_chopShopSelection"; + sizeEx = 0.04; + x = 0.11; + y = 0.25; + w = 0.3; + h = 0.38; + }; + + class BtnSell: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_Sell"; + onButtonclick = "[] call life_fnc_chopShopSell;"; + x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.8 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class BtnClose: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_Close"; + onButtonClick = "closeDialog 0"; + x = 0.1; + y = 0.8 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + }; +}; \ No newline at end of file diff --git a/life_client/dialog/clothing.hpp b/life_client/dialog/clothing.hpp new file mode 100644 index 00000000..80dc92b4 --- /dev/null +++ b/life_client/dialog/clothing.hpp @@ -0,0 +1,113 @@ +class Life_Clothing { + idd = 3100; + name= "Life_Clothing"; + movingEnable = 1; + enableSimulation = 1; + //onLoad = "[] execVM 'core\client\keychain\init.sqf'"; + + class controlsBackground { + class Life_RscTitleBackground: Life_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.0821059 * safezoneW + safezoneX; + y = 0.212176 * safezoneH + safezoneY; + w = 0.318; + h = (1 / 25); + }; + + class MainBackground: Life_RscText { + colorBackground[] = {0, 0, 0, 0.7}; + idc = -1; + x = 0.0822359 * safezoneW + safezoneX; + y = 0.236099 * safezoneH + safezoneY; + w = 0.318; + h = 0.5 - (22 / 250); + }; + }; + + class controls { + class Title: Life_RscTitle { + colorBackground[] = {0, 0, 0, 0}; + idc = 3103; + text = ""; + x = 0.0821059 * safezoneW + safezoneX; + y = 0.212176 * safezoneH + safezoneY; + w = 0.6; + h = (1 / 25); + }; + + class ClothingList: Life_RscListBox { + idc = 3101; + text = ""; + sizeEx = 0.035; + onLBSelChanged = "[_this] call life_fnc_changeClothes;"; + x = 0.0842977 * safezoneW + safezoneX; + y = 0.240498 * safezoneH + safezoneY; + w = 0.3; + h = 0.35; + }; + + class PriceTag: Life_RscStructuredText { + idc = 3102; + text = ""; + sizeEx = 0.035; + x = 0.0853304 * safezoneW + safezoneX; + y = 0.439419 * safezoneH + safezoneY; + w = 0.2; + h = (1 / 25); + }; + + class TotalPrice: Life_RscStructuredText { + idc = 3106; + text = ""; + sizeEx = 0.035; + x = 0.148258 * safezoneW + safezoneX; + y = 0.439419 * safezoneH + safezoneY; + w = 0.2; + h = (1 / 25); + }; + + class FilterList: Life_RscCombo { + idc = 3105; + colorBackground[] = {0,0,0,0.7}; + onLBSelChanged = "_this call life_fnc_clothingFilter"; + x = 0.0822359 * safezoneW + safezoneX; + y = 0.468 * safezoneH + safezoneY; + w = 0.318; + h = 0.035; + }; + + class CloseButtonKey: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_Close"; + onButtonClick = "closeDialog 0; [] call life_fnc_playerSkins;"; + x = 0.157 * safezoneW + safezoneX; + y = 0.489992 * safezoneH + safezoneY; + w = (6.25 / 40); + h = (1 / 25); + }; + + class BuyButtonKey: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_Buy"; + onButtonClick = "[] call life_fnc_buyClothes;"; + x = 0.0822359 * safezoneW + safezoneX; + y = 0.489992 * safezoneH + safezoneY; + w = (6.25 / 40); + h = (1 / 25); + }; + + class viewAngle: life_RscXSliderH { + color[] = {1, 1, 1, 0.45}; + colorActive[] = {1, 1, 1, 0.65}; + idc = 3107; + text = ""; + onSliderPosChanged = "[4,_this select 1] call life_fnc_s_onSliderChange;"; + tooltip = ""; + x = 0.25 * safezoneW + safezoneX; + y = 0.95 * safezoneH + safezoneY; + w = 0.5 * safezoneW; + h = 0.02 * safezoneH; + }; + }; +}; \ No newline at end of file diff --git a/life_client/dialog/common.hpp b/life_client/dialog/common.hpp new file mode 100644 index 00000000..33ce1fdb --- /dev/null +++ b/life_client/dialog/common.hpp @@ -0,0 +1,1163 @@ +#define ST_LEFT 0x00 +#define ST_MULTI 0x10 +#define GUI_GRID_CENTER_WAbs ((safezoneW / safezoneH) min 1.2) +#define GUI_GRID_CENTER_HAbs (GUI_GRID_CENTER_WAbs / 1.2) +#define GUI_GRID_CENTER_W (GUI_GRID_CENTER_WAbs / 40) +#define GUI_GRID_CENTER_H (GUI_GRID_CENTER_HAbs / 25) +#define GUI_GRID_CENTER_X (safezoneX + (safezoneW - GUI_GRID_CENTER_WAbs)/2) +#define GUI_GRID_CENTER_Y (safezoneY + (safezoneH - GUI_GRID_CENTER_HAbs)/2) + +class Life_Checkbox +{ + access = 0; // Control access (0 - ReadAndWrite, 1 - ReadAndCreate, 2 - ReadOnly, 3 - ReadOnlyVerified) + idc = -1; // Control identification (without it, the control won't be displayed) + type = 77; // Type + style = ST_LEFT + ST_MULTI; // Style + default = 0; // Control selected by default (only one within a display can be used) + blinkingPeriod = 0; // Time in which control will fade out and back in. Use 0 to disable the effect. + + x = 0; + y = 0; + w = 1 * GUI_GRID_CENTER_W; // Width + h = 1 * GUI_GRID_CENTER_H; // Height + + //Colors + color[] = { 1, 1, 1, 0.7 }; // Texture color + colorFocused[] = { 1, 1, 1, 1 }; // Focused texture color + colorHover[] = { 1, 1, 1, 1 }; // Mouse over texture color + colorPressed[] = { 1, 1, 1, 1 }; // Mouse pressed texture color + colorDisabled[] = { 1, 1, 1, 0.2 }; // Disabled texture color + + //Background colors + colorBackground[] = { 0, 0, 0, 0 }; // Fill color + colorBackgroundFocused[] = { 0, 0, 0, 0 }; // Focused fill color + colorBackgroundHover[] = { 0, 0, 0, 0 }; // Mouse hover fill color + colorBackgroundPressed[] = { 0, 0, 0, 0 }; // Mouse pressed fill color + colorBackgroundDisabled[] = { 0, 0, 0, 0 }; // Disabled fill color + + //Textures + textureChecked = "\A3\Ui_f\data\GUI\RscCommon\RscCheckBox\CheckBox_checked_ca.paa"; //Texture of checked CheckBox. + textureUnchecked = "\A3\Ui_f\data\GUI\RscCommon\RscCheckBox\CheckBox_unchecked_ca.paa"; //Texture of unchecked CheckBox. + textureFocusedChecked = "\A3\Ui_f\data\GUI\RscCommon\RscCheckBox\CheckBox_checked_ca.paa"; //Texture of checked focused CheckBox (Could be used for showing different texture when focused). + textureFocusedUnchecked = "\A3\Ui_f\data\GUI\RscCommon\RscCheckBox\CheckBox_unchecked_ca.paa"; //Texture of unchecked focused CheckBox. + textureHoverChecked = "\A3\Ui_f\data\GUI\RscCommon\RscCheckBox\CheckBox_checked_ca.paa"; + textureHoverUnchecked = "\A3\Ui_f\data\GUI\RscCommon\RscCheckBox\CheckBox_unchecked_ca.paa"; + texturePressedChecked = "\A3\Ui_f\data\GUI\RscCommon\RscCheckBox\CheckBox_checked_ca.paa"; + texturePressedUnchecked = "\A3\Ui_f\data\GUI\RscCommon\RscCheckBox\CheckBox_unchecked_ca.paa"; + textureDisabledChecked = "\A3\Ui_f\data\GUI\RscCommon\RscCheckBox\CheckBox_checked_ca.paa"; + textureDisabledUnchecked = "\A3\Ui_f\data\GUI\RscCommon\RscCheckBox\CheckBox_unchecked_ca.paa"; + + tooltip = ""; // Tooltip text + tooltipColorShade[] = { 0, 0, 0, 1 }; // Tooltip background color + tooltipColorText[] = { 1, 1, 1, 1 }; // Tooltip text color + tooltipColorBox[] = { 1, 1, 1, 1 }; // Tooltip frame color + + //Sounds + soundClick[] = { "\A3\ui_f\data\sound\RscButton\soundClick", 0.09, 1 }; // Sound played after control is activated in format {file, volume, pitch} + soundEnter[] = { "\A3\ui_f\data\sound\RscButton\soundEnter", 0.09, 1 }; // Sound played when mouse cursor enters the control + soundPush[] = { "\A3\ui_f\data\sound\RscButton\soundPush", 0.09, 1 }; // Sound played when the control is pushed down + soundEscape[] = { "\A3\ui_f\data\sound\RscButton\soundEscape", 0.09, 1 }; // Sound played when the control is released after pushing down + +}; + +class Life_RscScrollBar +{ + color[] = {1,1,1,0.6}; + colorActive[] = {1,1,1,1}; + colorDisabled[] = {1,1,1,0.3}; + thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa"; + arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa"; + arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa"; + border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa"; + shadow = 0; + scrollSpeed = 0.06; + width = 0; + height = 0; + autoScrollEnabled = 1; + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; +}; + +class Life_RscControlsGroup { + type = 15; + idc = -1; + x = 0; + y = 0; + w = 1; + h = 1; + shadow = 0; + style = 16; + + class VScrollBar : Life_RscScrollBar + { + width = 0.021; + autoScrollEnabled = 1; + }; + + class HScrollBar : Life_RscScrollBar + { + height = 0.028; + }; + + class Controls {}; +}; + +class Life_RscControlsGroupNoScrollbars : Life_RscControlsGroup { + class VScrollbar : VScrollbar { + width = 0; + }; + + class HScrollbar : HScrollbar { + height = 0; + }; +}; + +class Life_RscHud +{ + idc = -1; + type = 0; + style = 0x00; + colorBackground[] = { 1 , 1 , 1 , 0 }; + colorText[] = { 1 , 1 , 1 , 1 }; + font = "PuristaSemibold"; + sizeEx = 0.025; + h = 0.25; + text = ""; +}; + +class Life_RscListNBox +{ + style = 16; + type = 102; + shadow = 0; + font = "PuristaMedium"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + color[] = {0.95,0.95,0.95,1}; + colorText[] = {1,1,1,1.0}; + colorDisabled[] = {1,1,1,0.25}; + colorScrollbar[] = {0.95,0.95,0.95,1}; + colorSelect[] = {0,0,0,1}; + colorSelect2[] = {0,0,0,1}; + colorSelectBackground[] = {0.8,0.8,0.8,1}; + colorSelectBackground2[] = {1,1,1,0.5}; + colorPicture[] = {1,1,1,1}; + colorPictureSelected[] = {1,1,1,1}; + colorPictureDisabled[] = {1,1,1,1}; + soundSelect[] = {"",0.1,1}; + soundExpand[] = {"",0.1,1}; + soundCollapse[] = {"",0.1,1}; + period = 1.2; + maxHistoryDelay = 0.5; + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + class ListScrollBar: Life_RscScrollBar{}; + class ScrollBar: Life_RscScrollBar{}; +}; + + +class Life_RscText { + x = 0; + y = 0; + h = 0.037; + w = 0.3; + type = 0; + style = 0; + shadow = 1; + colorShadow[] = {0, 0, 0, 0.5}; + font = "PuristaMedium"; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + text = ""; + colorText[] = {1, 1, 1, 1.0}; + colorBackground[] = {0, 0, 0, 0}; + linespacing = 1; + tooltipColorText[] = {1,1,1,1}; + tooltipColorBox[] = {1,1,1,1}; + tooltipColorShade[] = {0,0,0,0.65}; +}; + +class Life_RscLine: Life_RscText { + idc = -1; + style = 176; + x = 0.17; + y = 0.48; + w = 0.66; + h = 0; + text = ""; + colorBackground[] = {0, 0, 0, 0}; + colorText[] = {1, 1, 1, 1.0}; +}; + +class Life_RscTree { + style = 2; + font = "PuristaMedium"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)"; + expandedTexture = "A3\ui_f\data\gui\Rsccommon\Rsctree\expandedTexture_ca.paa"; + hiddenTexture = "A3\ui_f\data\gui\Rsccommon\Rsctree\hiddenTexture_ca.paa"; + rowHeight = 0.0439091; + color[] = {1, 1, 1, 1}; + colorSelect[] = {0.7, 0.7, 0.7, 1}; + colorBackground[] = {0, 0, 0, 0}; + colorSelectBackground[] = {0, 0, 0, 0.5}; + colorBorder[] = {0, 0, 0, 0}; + borderSize = 0; +}; + +class Life_RscTitle: Life_RscText { + style = 0; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + colorText[] = {0.95, 0.95, 0.95, 1}; +}; + +class life_RscPicture { + shadow = 0; + type = 0; + style = 48; + sizeEx = 0.023; + font = "PuristaMedium"; + colorBackground[] = {}; + colorText[] = {}; + x = 0; + y = 0; + w = 0.2; + h = 0.15; + tooltipColorText[] = {1,1,1,1}; + tooltipColorBox[] = {1,1,1,1}; + tooltipColorShade[] = {0,0,0,0.65}; +}; + +class Life_RscTextMulti: Life_RscText +{ + linespacing = 1; + style = 0 + 16 + 0x200; +}; + +class Life_RscPictureKeepAspect : Life_RscPicture +{ + style = 0x30 + 0x800; +}; + +class Life_RscStructuredText { + type = 13; + style = 0; + x = 0; + y = 0; + h = 0.035; + w = 0.1; + text = ""; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + colorText[] = {1, 1, 1, 1.0}; + shadow = 1; + + class Attributes { + font = "PuristaMedium"; + color = "#ffffff"; + align = "left"; + shadow = 1; + }; +}; + +class Life_RscActiveText { +idc = -1; + type = 11; + style = 0; + x = 0; + y = 0; + h = 0.037; + w = 0.3; + sizeEx = 0.040; + font = "PuristaLight"; + color[] = {1, 1, 1, 1}; + colorActive[] = {1, 0.2, 0.2, 1}; + soundEnter[] = {"\A3\ui_f\data\sound\onover", 0.09, 1}; + soundPush[] = {"\A3\ui_f\data\sound\new1", 0.0, 0}; + soundClick[] = {"\A3\ui_f\data\sound\onclick", 0.07, 1}; + soundEscape[] = {"\A3\ui_f\data\sound\onescape", 0.09, 1}; + action = ""; + text = ""; + tooltipColorText[] = {1,1,1,1}; + tooltipColorBox[] = {1,1,1,1}; + tooltipColorShade[] = {0,0,0,0.65}; +}; + +class Life_RscButton +{ + style = 2; + x = 0; + y = 0; + w = 0.095589; + h = 0.039216; + shadow = 2; + font = "PuristaMedium"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + colorText[] = {1,1,1,1.0}; + colorDisabled[] = {0.4,0.4,0.4,1}; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",0.7}; + colorBackgroundActive[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1}; + colorBackgroundDisabled[] = {0.95,0.95,0.95,1}; + offsetX = 0.003; + offsetY = 0.003; + offsetPressedX = 0.002; + offsetPressedY = 0.002; + colorFocused[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1}; + colorShadow[] = {0,0,0,1}; + colorBorder[] = {0,0,0,1}; + borderSize = 0.0; + soundEnter[] = {"\A3\ui_f\data\sound\RscButton\soundEnter",0.09,1}; + soundPush[] = {"\A3\ui_f\data\sound\RscButton\soundPush",0.09,1}; + soundClick[] = {"\A3\ui_f\data\sound\RscButton\soundClick",0.09,1}; + soundEscape[] = {"\A3\ui_f\data\sound\RscButton\soundEscape",0.09,1}; +}; + +class Life_RscButtonTextOnly : Life_RscButton { + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)"; + colorBackground[] = {1, 1, 1, 0}; + colorBackgroundActive[] = {1, 1, 1, 0}; + colorBackgroundDisabled[] = {1, 1, 1, 0}; + colorFocused[] = {1, 1, 1, 0}; + colorShadow[] = {1, 1, 1, 0}; + borderSize = 0.0; +}; + +class Life_RscShortcutButton { + idc = -1; + style = 0; + default = 0; + shadow = 1; + w = 0.183825; + h = "((((safezoneW / safezoneH) min 1.2) / 1.2) / 20)"; + color[] = {1,1,1,1.0}; + colorFocused[] = {1,1,1,1.0}; + color2[] = {0.95,0.95,0.95,1}; + colorDisabled[] = {1,1,1,0.25}; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1}; + colorBackgroundFocused[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1}; + colorBackground2[] = {1,1,1,1}; + animTextureDefault = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\normal_ca.paa"; + animTextureNormal = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\normal_ca.paa"; + animTextureDisabled = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\normal_ca.paa"; + animTextureOver = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\over_ca.paa"; + animTextureFocused = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\focus_ca.paa"; + animTexturePressed = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\down_ca.paa"; + periodFocus = 1.2; + periodOver = 0.8; + class HitZone + { + left = 0.0; + top = 0.0; + right = 0.0; + bottom = 0.0; + }; + class ShortcutPos + { + left = 0; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + w = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)"; + h = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + }; + class TextPos + { + left = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)"; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + right = 0.005; + bottom = 0.0; + }; + period = 0.4; + font = "PuristaMedium"; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + text = ""; + soundEnter[] = {"\A3\ui_f\data\sound\RscButton\soundEnter",0.09,1}; + soundPush[] = {"\A3\ui_f\data\sound\RscButton\soundPush",0.09,1}; + soundClick[] = {"\A3\ui_f\data\sound\RscButton\soundClick",0.09,1}; + soundEscape[] = {"\A3\ui_f\data\sound\RscButton\soundEscape",0.09,1}; + action = ""; + class Attributes + { + font = "PuristaMedium"; + color = "#E5E5E5"; + align = "left"; + shadow = "true"; + }; + class AttributesImage + { + font = "PuristaMedium"; + color = "#E5E5E5"; + align = "left"; + }; +}; + +class Life_RscButtonMenu : Life_RscShortcutButton { + idc = -1; + type = 16; + style = "0x02 + 0xC0"; + default = 0; + shadow = 0; + x = 0; + y = 0; + w = 0.095589; + h = 0.039216; + animTextureNormal = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDisabled = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureOver = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)"; + animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)"; + colorBackground[] = {0,0,0,0.8}; + colorBackgroundFocused[] = {1,1,1,1}; + colorBackground2[] = {0.75,0.75,0.75,1}; + color[] = {1,1,1,1}; + colorFocused[] = {0,0,0,1}; + color2[] = {0,0,0,1}; + colorText[] = {1,1,1,1}; + colorDisabled[] = {1,1,1,0.25}; + period = 1.2; + periodFocus = 1.2; + periodOver = 1.2; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + tooltipColorText[] = {1,1,1,1}; + tooltipColorBox[] = {1,1,1,1}; + tooltipColorShade[] = {0,0,0,0.65}; + class TextPos + { + left = "0.25 * (((safezoneW / safezoneH) min 1.2) / 40)"; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + right = 0.005; + bottom = 0.0; + }; + class Attributes + { + font = "PuristaLight"; + color = "#E5E5E5"; + align = "left"; + shadow = "false"; + }; + class ShortcutPos + { + left = "(6.25 * (((safezoneW / safezoneH) min 1.2) / 40)) - 0.0225 - 0.005"; + top = 0.005; + w = 0.0225; + h = 0.03; + }; + soundEnter[] = {"\A3\ui_f\data\sound\RscButtonMenu\soundEnter",0.09,1}; + soundPush[] = {"\A3\ui_f\data\sound\RscButtonMenu\soundPush",0.09,1}; + soundClick[] = {"\A3\ui_f\data\sound\RscButtonMenu\soundClick",0.09,1}; + soundEscape[] = {"\A3\ui_f\data\sound\RscButtonMenu\soundEscape",0.09,1}; + textureNoShortcut = ""; +}; + +class Life_RscShortcutButtonMain : Life_RscShortcutButton { + idc = -1; + style = 0; + default = 0; + w = 0.313726; + h = 0.104575; + color[] = {1, 1, 1, 1.0}; + colorDisabled[] = {1, 1, 1, 0.25}; + + class HitZone { + left = 0.0; + top = 0.0; + right = 0.0; + bottom = 0.0; + }; + + class ShortcutPos { + left = 0.0145; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)) / 2"; + w = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2) * (3/4)"; + h = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)"; + }; + + class TextPos { + left = "( ((safezoneW / safezoneH) min 1.2) / 32) * 1.5"; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20)*2 - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)) / 2"; + right = 0.005; + bottom = 0.0; + }; + animTextureNormal = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\normal_ca.paa"; + animTextureDisabled = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\disabled_ca.paa"; + animTextureOver = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\over_ca.paa"; + animTextureFocused = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\focus_ca.paa"; + animTexturePressed = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\down_ca.paa"; + animTextureDefault = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\normal_ca.paa"; + period = 0.5; + font = "PuristaMedium"; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)"; + text = ""; + soundEnter[] = {"\A3\ui_f\data\sound\onover", 0.09, 1}; + soundPush[] = {"\A3\ui_f\data\sound\new1", 0.0, 0}; + soundClick[] = {"\A3\ui_f\data\sound\onclick", 0.07, 1}; + soundEscape[] = {"\A3\ui_f\data\sound\onescape", 0.09, 1}; + action = ""; + + class Attributes { + font = "PuristaMedium"; + color = "#E5E5E5"; + align = "left"; + shadow = "false"; + }; + + class AttributesImage { + font = "PuristaMedium"; + color = "#E5E5E5"; + align = "false"; + }; +}; + +class Life_RscCheckbox { + idc = -1; + type = 7; + style = 0; + x = "LINE_X(XVAL)"; + y = LINE_Y; + w = "LINE_W(WVAL)"; + h = 0.029412; + colorText[] = {1, 0, 0, 1}; + color[] = {0, 0, 0, 0}; + colorBackground[] = {0, 0, 1, 1}; + colorTextSelect[] = {0, 0.8, 0, 1}; + colorSelectedBg[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 1}; + colorSelect[] = {0, 0, 0, 1}; + colorTextDisable[] = {0.4, 0.4, 0.4, 1}; + colorDisable[] = {0.4, 0.4, 0.4, 1}; + font = "PuristaMedium"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)"; + rows = 1; + 5ns = 1; + strings[] = {UNCHECKED}; + checked_strings[] = {CHECKED}; +}; + +class Life_RscProgress +{ + type = 8; + style = 0; + x = 0.344; + y = 0.619; + w = 0.313726; + h = 0.0261438; + texture = ""; + shadow = 2; + colorFrame[] = {0, 0, 0, 1}; + colorBackground[] = {0,0,0,0.7}; + colorBar[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; +}; + +class Life_RscListBox +{ + style = 16; + idc = -1; + type = 5; + w = 0.275; + h = 0.04; + font = "PuristaMedium"; + colorSelect[] = {1, 1, 1, 1}; + colorText[] = {1, 1, 1, 1}; + colorBackground[] = {0.28,0.28,0.28,0.28}; + colorSelect2[] = {1, 1, 1, 1}; + colorSelectBackground[] = {0.95, 0.95, 0.95, 0.5}; + colorSelectBackground2[] = {1, 1, 1, 0.5}; + colorScrollbar[] = {0.2, 0.2, 0.2, 1}; + colorPicture[] = {1,1,1,1}; + colorPictureSelected[] = {1,1,1,1}; + colorPictureDisabled[] = {1,1,1,1}; + arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa"; + arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa"; + wholeHeight = 0.45; + rowHeight = 0.04; + color[] = {0.7, 0.7, 0.7, 1}; + colorActive[] = {0,0,0,1}; + colorDisabled[] = {0,0,0,0.3}; + sizeEx = 0.023; + soundSelect[] = {"",0.1,1}; + soundExpand[] = {"",0.1,1}; + soundCollapse[] = {"",0.1,1}; + maxHistoryDelay = 1; + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + tooltipColorText[] = {1,1,1,1}; + tooltipColorBox[] = {1,1,1,1}; + tooltipColorShade[] = {0,0,0,0.65}; + class ListScrollBar: Life_RscScrollBar + { + color[] = {1,1,1,1}; + autoScrollEnabled = 1; + }; +}; + +class Life_RscEdit { + type = 2; + style = 0x00 + 0x40; + font = "PuristaMedium"; + shadow = 2; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + colorBackground[] = {0, 0, 0, 1}; + soundSelect[] = {"",0.1,1}; + soundExpand[] = {"",0.1,1}; + colorText[] = {0.95, 0.95, 0.95, 1}; + colorDisabled[] = {1, 1, 1, 0.25}; + autocomplete = false; + colorSelection[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 1}; + canModify = 1; +}; + +class Life_RscSlider { + h = 0.025; + color[] = {1, 1, 1, 0.8}; + colorActive[] = {1, 1, 1, 1}; +}; + +class life_RscXSliderH +{ + style = 1024; + type = 43; + shadow = 2; + x = 0; + y = 0; + h = 0.029412; + w = 0.400000; + color[] = { + 1, 1, 1, 0.7 + }; + colorActive[] = { + 1, 1, 1, 1 + }; + colorDisabled[] = { + 1, 1, 1, 0.500000 + }; + arrowEmpty = "\A3\ui_f\data\gui\cfg\slider\arrowEmpty_ca.paa"; + arrowFull = "\A3\ui_f\data\gui\cfg\slider\arrowFull_ca.paa"; + border = "\A3\ui_f\data\gui\cfg\slider\border_ca.paa"; + thumb = "\A3\ui_f\data\gui\cfg\slider\thumb_ca.paa"; +}; + +class Life_RscFrame { + type = 0; + idc = -1; + style = 64; + shadow = 2; + colorBackground[] = {0, 0, 0, 0}; + colorText[] = {1, 1, 1, 1}; + font = "PuristaMedium"; + sizeEx = 0.02; + text = ""; +}; + +class Life_RscBackground: Life_RscText { + type = 0; + IDC = -1; + style = 512; + shadow = 0; + x = 0.0; + y = 0.0; + w = 1.0; + h = 1.0; + text = ""; + ColorBackground[] = {0.48, 0.5, 0.35, 1}; + ColorText[] = {0.1, 0.1, 0.1, 1}; + font = "PuristaMedium"; + SizeEx = 1; +}; + +class Life_RscHTML { + colorText[] = {1, 1, 1, 1.0}; + colorBold[] = {1, 1, 1, 1.0}; + colorLink[] = {1, 1, 1, 0.75}; + colorLinkActive[] = {1, 1, 1, 1.0}; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + prevPage = "\A3\ui_f\data\gui\Rsccommon\Rschtml\arrow_left_ca.paa"; + nextPage = "\A3\ui_f\data\gui\Rsccommon\Rschtml\arrow_right_ca.paa"; + shadow = 2; + + class H1 { + font = "PuristaMedium"; + fontBold = "PuristaSemibold"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)"; + align = "left"; + }; + + class H2 { + font = "PuristaMedium"; + fontBold = "PuristaSemibold"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + align = "right"; + }; + + class H3 { + font = "PuristaMedium"; + fontBold = "PuristaSemibold"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + align = "left"; + }; + + class H4 { + font = "PuristaMedium"; + fontBold = "PuristaSemibold"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + align = "left"; + }; + + class H5 { + font = "PuristaMedium"; + fontBold = "PuristaSemibold"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + align = "left"; + }; + + class H6 { + font = "PuristaMedium"; + fontBold = "PuristaSemibold"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + align = "left"; + }; + + class P { + font = "PuristaMedium"; + fontBold = "PuristaSemibold"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + align = "left"; + }; +}; + +class Life_RscHitZones { + x = 0; + y = 0; + w = 0.1; + h = 0.1; + xCount = 1; + yCount = 1; + xSpace = 0; + ySpace = 0; +}; + +class Life_RscMapControl +{ + access = 0; + type = 101; + idc = 51; + style = 48; + colorBackground[] = {0.969,0.957,0.949,1}; + colorOutside[] = {0,0,0,1}; + colorText[] = {0,0,0,1}; + font = "TahomaB"; + sizeEx = 0.04; + colorSea[] = {0.467,0.631,0.851,0.5}; + colorForest[] = {0.624,0.78,0.388,0.5}; + colorRocks[] = {0,0,0,0.3}; + colorCountlines[] = {0.572,0.354,0.188,0.25}; + colorMainCountlines[] = {0.572,0.354,0.188,0.5}; + colorCountlinesWater[] = {0.491,0.577,0.702,0.3}; + colorMainCountlinesWater[] = {0.491,0.577,0.702,0.6}; + colorForestBorder[] = {0,0,0,0}; + colorRocksBorder[] = {0,0,0,0}; + colorPowerLines[] = {0.1,0.1,0.1,1}; + colorRailWay[] = {0.8,0.2,0,1}; + colorNames[] = {0.1,0.1,0.1,0.9}; + colorInactive[] = {1,1,1,0.5}; + colorLevels[] = {0.286,0.177,0.094,0.5}; + colorTracks[] = {0.84,0.76,0.65,0.15}; + colorRoads[] = {0.7,0.7,0.7,1}; + colorMainRoads[] = {0.9,0.5,0.3,1}; + colorTracksFill[] = {0.84,0.76,0.65,1}; + colorRoadsFill[] = {1,1,1,1}; + colorMainRoadsFill[] = {1,0.6,0.4,1}; + colorGrid[] = {0.1,0.1,0.1,0.6}; + colorGridMap[] = {0.1,0.1,0.1,0.6}; + stickX[] = {0.2,{"Gamma",1,1.5}}; + stickY[] = {0.2,{"Gamma",1,1.5}}; + class Legend + { + colorBackground[] = {1,1,1,0.5}; + color[] = {0,0,0,1}; + x = "SafeZoneX + (((safezoneW / safezoneH) min 1.2) / 40)"; + y = "SafeZoneY + safezoneH - 4.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + w = "10 * (((safezoneW / safezoneH) min 1.2) / 40)"; + h = "3.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + font = "PuristaMedium"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)"; + }; + class ActiveMarker + { + color[] = {0.3,0.1,0.9,1}; + size = 50; + }; + class Command + { + color[] = {1,1,1,1}; + icon = "\A3\ui_f\data\map\mapcontrol\waypoint_ca.paa"; + size = 18; + importance = 1; + coefMin = 1; + coefMax = 1; + }; + class Task + { + colorCreated[] = {1,1,1,1}; + colorCanceled[] = {0.7,0.7,0.7,1}; + colorDone[] = {0.7,1,0.3,1}; + colorFailed[] = {1,0.3,0.2,1}; + color[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"}; + icon = "\A3\ui_f\data\map\mapcontrol\taskIcon_CA.paa"; + iconCreated = "\A3\ui_f\data\map\mapcontrol\taskIconCreated_CA.paa"; + iconCanceled = "\A3\ui_f\data\map\mapcontrol\taskIconCanceled_CA.paa"; + iconDone = "\A3\ui_f\data\map\mapcontrol\taskIconDone_CA.paa"; + iconFailed = "\A3\ui_f\data\map\mapcontrol\taskIconFailed_CA.paa"; + size = 27; + importance = 1; + coefMin = 1; + coefMax = 1; + }; + class CustomMark + { + color[] = {0,0,0,1}; + icon = "\A3\ui_f\data\map\mapcontrol\custommark_ca.paa"; + size = 24; + importance = 1; + coefMin = 1; + coefMax = 1; + }; + class Tree + { + color[] = {0.45,0.64,0.33,0.4}; + icon = "\A3\ui_f\data\map\mapcontrol\bush_ca.paa"; + size = 12; + importance = "0.9 * 16 * 0.05"; + coefMin = 0.25; + coefMax = 4; + }; + class SmallTree + { + color[] = {0.45,0.64,0.33,0.4}; + icon = "\A3\ui_f\data\map\mapcontrol\bush_ca.paa"; + size = 12; + importance = "0.6 * 12 * 0.05"; + coefMin = 0.25; + coefMax = 4; + }; + class Bush + { + color[] = {0.45,0.64,0.33,0.4}; + icon = "\A3\ui_f\data\map\mapcontrol\bush_ca.paa"; + size = "14/2"; + importance = "0.2 * 14 * 0.05 * 0.05"; + coefMin = 0.25; + coefMax = 4; + }; + class Church + { + color[] = {1,1,1,1}; + icon = "\A3\ui_f\data\map\mapcontrol\church_CA.paa"; + size = 24; + importance = 1; + coefMin = 0.85; + coefMax = 1; + }; + class Chapel + { + color[] = {0,0,0,1}; + icon = "\A3\ui_f\data\map\mapcontrol\Chapel_CA.paa"; + size = 24; + importance = 1; + coefMin = 0.85; + coefMax = 1; + }; + class Cross + { + color[] = {0,0,0,1}; + icon = "\A3\ui_f\data\map\mapcontrol\Cross_CA.paa"; + size = 24; + importance = 1; + coefMin = 0.85; + coefMax = 1; + }; + class Rock + { + color[] = {0.1,0.1,0.1,0.8}; + icon = "\A3\ui_f\data\map\mapcontrol\rock_ca.paa"; + size = 12; + importance = "0.5 * 12 * 0.05"; + coefMin = 0.25; + coefMax = 4; + }; + class Bunker + { + color[] = {0,0,0,1}; + icon = "\A3\ui_f\data\map\mapcontrol\bunker_ca.paa"; + size = 14; + importance = "1.5 * 14 * 0.05"; + coefMin = 0.25; + coefMax = 4; + }; + class Fortress + { + color[] = {0,0,0,1}; + icon = "\A3\ui_f\data\map\mapcontrol\bunker_ca.paa"; + size = 16; + importance = "2 * 16 * 0.05"; + coefMin = 0.25; + coefMax = 4; + }; + class Fountain + { + color[] = {0,0,0,1}; + icon = "\A3\ui_f\data\map\mapcontrol\fountain_ca.paa"; + size = 11; + importance = "1 * 12 * 0.05"; + coefMin = 0.25; + coefMax = 4; + }; + class ViewTower + { + color[] = {0,0,0,1}; + icon = "\A3\ui_f\data\map\mapcontrol\viewtower_ca.paa"; + size = 16; + importance = "2.5 * 16 * 0.05"; + coefMin = 0.5; + coefMax = 4; + }; + class Lighthouse + { + color[] = {1,1,1,1}; + icon = "\A3\ui_f\data\map\mapcontrol\lighthouse_CA.paa"; + size = 24; + importance = 1; + coefMin = 0.85; + coefMax = 1; + }; + class Quay + { + color[] = {1,1,1,1}; + icon = "\A3\ui_f\data\map\mapcontrol\quay_CA.paa"; + size = 24; + importance = 1; + coefMin = 0.85; + coefMax = 1; + }; + class Fuelstation + { + color[] = {1,1,1,1}; + icon = "\A3\ui_f\data\map\mapcontrol\fuelstation_CA.paa"; + size = 24; + importance = 1; + coefMin = 0.85; + coefMax = 1; + }; + class Hospital + { + color[] = {1,1,1,1}; + icon = "\A3\ui_f\data\map\mapcontrol\hospital_CA.paa"; + size = 24; + importance = 1; + coefMin = 0.85; + coefMax = 1; + }; + class BusStop + { + color[] = {1,1,1,1}; + icon = "\A3\ui_f\data\map\mapcontrol\busstop_CA.paa"; + size = 24; + importance = 1; + coefMin = 0.85; + coefMax = 1; + }; + class Transmitter + { + color[] = {1,1,1,1}; + icon = "\A3\ui_f\data\map\mapcontrol\transmitter_CA.paa"; + size = 24; + importance = 1; + coefMin = 0.85; + coefMax = 1; + }; + class Stack + { + color[] = {0,0,0,1}; + icon = "\A3\ui_f\data\map\mapcontrol\stack_ca.paa"; + size = 20; + importance = "2 * 16 * 0.05"; + coefMin = 0.9; + coefMax = 4; + }; + class Ruin + { + color[] = {0,0,0,1}; + icon = "\A3\ui_f\data\map\mapcontrol\ruin_ca.paa"; + size = 16; + importance = "1.2 * 16 * 0.05"; + coefMin = 1; + coefMax = 4; + }; + class Tourism + { + color[] = {0,0,0,1}; + icon = "\A3\ui_f\data\map\mapcontrol\tourism_ca.paa"; + size = 16; + importance = "1 * 16 * 0.05"; + coefMin = 0.7; + coefMax = 4; + }; + class Watertower + { + color[] = {1,1,1,1}; + icon = "\A3\ui_f\data\map\mapcontrol\watertower_CA.paa"; + size = 24; + importance = 1; + coefMin = 0.85; + coefMax = 1; + }; + class Waypoint + { + color[] = {0,0,0,1}; + size = 24; + importance = 1; + coefMin = 1; + coefMax = 1; + icon = "\A3\ui_f\data\map\mapcontrol\waypoint_ca.paa"; + }; + class WaypointCompleted + { + color[] = {0,0,0,1}; + size = 24; + importance = 1; + coefMin = 1; + coefMax = 1; + icon = "\A3\ui_f\data\map\mapcontrol\waypointCompleted_ca.paa"; + }; + moveOnEdges = 0;//1; + x = "SafeZoneXAbs"; + y = "SafeZoneY + 1.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + w = "SafeZoneWAbs"; + h = "SafeZoneH - 1.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + shadow = 0; + ptsPerSquareSea = 5; + ptsPerSquareTxt = 3; + ptsPerSquareCLn = 10; + ptsPerSquareExp = 10; + ptsPerSquareCost = 10; + ptsPerSquareFor = 9; + ptsPerSquareForEdge = 9; + ptsPerSquareRoad = 6; + ptsPerSquareObj = 9; + showCountourInterval = 0; + scaleMin = 0.001; + scaleMax = 1; + scaleDefault = 0.16; + maxSatelliteAlpha = 0.85; + alphaFadeStartScale = 0.35; + alphaFadeEndScale = 0.4; + fontLabel = "PuristaMedium"; + sizeExLabel = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)"; + fontGrid = "TahomaB"; + sizeExGrid = 0.02; + fontUnits = "TahomaB"; + sizeExUnits = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)"; + fontNames = "PuristaMedium"; + sizeExNames = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8) * 2"; + fontInfo = "PuristaMedium"; + sizeExInfo = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)"; + fontLevel = "TahomaB"; + sizeExLevel = 0.02; + text = "#(argb,8,8,3)color(1,1,1,1)"; + //text = "\a3\ui_f\data\map_background2_co.paa"; + class power + { + icon = "\A3\ui_f\data\map\mapcontrol\power_CA.paa"; + size = 24; + importance = 1; + coefMin = 0.85; + coefMax = 1; + color[] = {1,1,1,1}; + }; + class powersolar + { + icon = "\A3\ui_f\data\map\mapcontrol\powersolar_CA.paa"; + size = 24; + importance = 1; + coefMin = 0.85; + coefMax = 1; + color[] = {1,1,1,1}; + }; + class powerwave + { + icon = "\A3\ui_f\data\map\mapcontrol\powerwave_CA.paa"; + size = 24; + importance = 1; + coefMin = 0.85; + coefMax = 1; + color[] = {1,1,1,1}; + }; + class powerwind + { + icon = "\A3\ui_f\data\map\mapcontrol\powerwind_CA.paa"; + size = 24; + importance = 1; + coefMin = 0.85; + coefMax = 1; + color[] = {1,1,1,1}; + }; + class shipwreck + { + icon = "\A3\ui_f\data\map\mapcontrol\shipwreck_CA.paa"; + size = 24; + importance = 1; + coefMin = 0.85; + coefMax = 1; + color[] = {1,1,1,1}; + }; + class LineMarker + { + lineDistanceMin = 3e-005; + lineLengthMin = 5; + lineWidthThick = 0.014; + lineWidthThin = 0.008; + textureComboBoxColor = "#(argb,8,8,3)color(1,1,1,1)"; + }; +}; + +class Life_RscCombo { + style = 16; + type = 4; + x = 0; + y = 0; + w = 0.12; + h = 0.035; + shadow = 0; + colorSelect[] = {0, 0, 0, 1}; + soundExpand[] = {"",0.1,1}; + colorText[] = {0.95, 0.95, 0.95, 1}; + soundCollapse[] = {"",0.1,1}; + maxHistoryDelay = 1; + colorBackground[] = {0.4,0.4,0.4,0.4}; + colorSelectBackground[] = {1, 1, 1, 0.7}; + colow_Rscrollbar[] = {1, 0, 0, 1}; + soundSelect[] = { + "", 0.000000, 1 + }; + arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa"; + arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa"; + wholeHeight = 0.45; + color[] = {1, 1, 1, 1}; + colorActive[] = {1, 0, 0, 1}; + colorDisabled[] = {1, 1, 1, 0.25}; + font = "PuristaMedium"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + + class ComboScrollBar : Life_RscScrollBar {}; +}; + +class Life_RscToolbox { + colorText[] = {0.95, 0.95, 0.95, 1}; + color[] = {0.95, 0.95, 0.95, 1}; + colorTextSelect[] = {0.95, 0.95, 0.95, 1}; + colorSelect[] = {0.95, 0.95, 0.95, 1}; + colorTextDisable[] = {0.4, 0.4, 0.4, 1}; + colorDisable[] = {0.4, 0.4, 0.4, 1}; + colorSelectedBg[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + font = "PuristaMedium"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)"; +}; diff --git a/life_client/dialog/compensate.hpp b/life_client/dialog/compensate.hpp new file mode 100644 index 00000000..71bdef7f --- /dev/null +++ b/life_client/dialog/compensate.hpp @@ -0,0 +1,79 @@ +class Life_Admin_Compensate { + idd = 9920; + name= "life_admin_compensate_give"; + movingEnable = 0; + enableSimulation = 1; + onLoad = "[] spawn {waitUntil {!isNull (findDisplay 9920)}; ((findDisplay 9920) displayCtrl 9921) ctrlSetText localize ""STR_Admin_Amount""};"; + + class controlsBackground { + class Life_RscTitleBackground: Life_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.1; + y = 0.2; + w = 0.5; + h = (1 / 25); + }; + + class MainBackground: Life_RscText { + colorBackground[] = {0, 0, 0, 0.7}; + idc = -1; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.5; + h = 0.3 - (22 / 250); + }; + }; + + class controls { + class InfoMsg: Life_RscStructuredText { + idc = 9921; + sizeEx = 0.020; + text = ""; + x = 0.1; + y = 0.25; + w = 0.5; + h = 0.11; + }; + + class Title: Life_RscTitle { + colorBackground[] = {0, 0, 0, 0}; + idc = -1; + text = "$STR_Admin_Compensate"; + x = 0.1; + y = 0.2; + w = 0.5; + h = (1 / 25); + }; + + class AdminCloseComp: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_Close"; + onButtonClick = "closeDialog 0;"; + x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.5 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class AdminCompensVer: Life_RscButtonMenu { + idc = -1; + text = "$STR_Admin_Compensate"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] spawn life_fnc_adminCompensate;"; + x = 0.27; + y = 0.40; + w = (6.25 / 40); + h = (1 / 25); + }; + + class AdminCompensTex: Life_RscEdit { + idc = 9922; + text = ""; + x = 0.04 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.35; + w = (13 / 40); + h = (1 / 25); + }; + }; +}; \ No newline at end of file diff --git a/life_client/dialog/deathScreen.hpp b/life_client/dialog/deathScreen.hpp new file mode 100644 index 00000000..06c3f266 --- /dev/null +++ b/life_client/dialog/deathScreen.hpp @@ -0,0 +1,64 @@ +class DeathScreen { + idd = 7300; + name = "Life_Death_Screen"; + movingEnable = 0; + enableSimulation = 1; + + class controlsBackground { }; + + class Controls { + class MedicsOnline: Life_RscText { + idc = 7304; + colorBackground[] = {0,0,0,0}; + text = "Medics Online: 1"; + x = 0.005 * safezoneW + safezoneX; + y = 0.015 * safezoneH + safezoneY; + w = 0.8; + h = (1 / 25); + }; + + class MedicsNearby: Life_RscText { + idc = 7305; + colorBackground[] = {0,0,0,0}; + text = "Medics Nearby: No"; + x = 0.005 * safezoneW + safezoneX; + y = 0.040 * safezoneH + safezoneY; + w = 0.8; + h = (1 / 25); + }; + + class RespawnBtn: Life_RscButtonMenu { + idc = 7302; + x = 0.9 * safezoneW + safezoneX; + y = 0.015 * safezoneH + safezoneY; + w = (9 / 40); + h = (1 / 25); + text = "Respawn"; + onButtonClick = "closeDialog 0; life_respawned = true; [] call life_fnc_spawnMenu;"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.7}; + class Attributes {align = "center";}; + }; + + class MedicBtn: Life_RscButtonMenu { + idc = 7303; + x = 0.9 * safezoneW + safezoneX; + y = 0.040 * safezoneH + safezoneY; + w = (9 / 40); + h = (1 / 25); + onButtonClick = "[] call life_fnc_requestMedic;"; + text = "Request Medic"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.7}; + class Attributes {align = "center";}; + }; + + class respawnTime: Life_RscText { + idc = 7301; + colorBackground[] = {0,0,0,0.5}; + text = ""; + x = 0.4175 * safezoneW + safezoneX; + y = 0.7 * safezoneH + safezoneY; + w = 0.4; + h = (1 / 25); + }; + }; +}; diff --git a/life_client/dialog/federalReserve.hpp b/life_client/dialog/federalReserve.hpp new file mode 100644 index 00000000..3dbeb5ec --- /dev/null +++ b/life_client/dialog/federalReserve.hpp @@ -0,0 +1,97 @@ +class Federal_Safe { + idd = 3500; + name = "Federal_Safe"; + movingEnable = 0; + enableSimulation = 1; + + class controlsBackground { + class RscTitleBackground: Life_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.1; + y = 0.2; + w = 0.33; + h = (1 / 25); + }; + + class RscBackground: Life_RscText { + colorBackground[] = {0, 0, 0, 0.7}; + idc = -1; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.33; + h = 0.7 - (22 / 250); + }; + + class RscTitleText: Life_RscTitle { + colorBackground[] = {0, 0, 0, 0}; + idc = 3501; + text = ""; + x = 0.1; + y = 0.2; + w = 0.33; + h = (1 / 25); + }; + + class VehicleWeight : RscTitleText { + idc = 3504; + style = 1; + text = ""; + }; + + class RscTrunkText: Life_RscText { + idc = -1; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + text = "$STR_Trunk_TInventory"; + sizeEx = 0.04; + x = 0.11; + y = 0.25; + w = 0.3; + h = 0.04; + }; + }; + + class Controls { + class TrunkGear: Life_RscListBox { + idc = 3502; + text = ""; + sizeEx = 0.030; + x = 0.11; + y = 0.29; + w = 0.3; + h = 0.42; + }; + + class TrunkEdit: Life_RscEdit { + idc = 3505; + text = "1"; + sizeEx = 0.030; + x = 0.11; + y = 0.72; + w = 0.3; + h = 0.03; + }; + + class TakeItem: Life_RscButtonMenu { + idc = -1; + text = "$STR_Trunk_Take"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call life_fnc_safeTake;"; + x = 0.19; + y = 0.78; + w = (6.25 / 40); + h = (1 / 25); + }; + + class ButtonClose: Life_RscButtonMenu { + idc = -1; + //shortcuts[] = {0x00050000 + 2}; + text = "$STR_Global_Close"; + onButtonClick = "closeDialog 0;"; + x = 0.1; + y = 0.9 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + }; +}; \ No newline at end of file diff --git a/life_client/dialog/function/fn_bankDeposit.sqf b/life_client/dialog/function/fn_bankDeposit.sqf new file mode 100644 index 00000000..2e593b44 --- /dev/null +++ b/life_client/dialog/function/fn_bankDeposit.sqf @@ -0,0 +1,32 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_bankDeposit.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Figure it out. +*/ +private ["_value"]; +_value = parseNumber(ctrlText 2702); + +//Series of stupid checks +if (_value > 999999) exitWith {hint localize "STR_ATM_GreaterThan";}; +if (_value < 0) exitWith {}; +if (!([str(_value)] call TON_fnc_isnumber)) exitWith {hint localize "STR_ATM_notnumeric"}; +if (_value > CASH) exitWith {hint localize "STR_ATM_NotEnoughCash"}; + +CASH = CASH - _value; +BANK = BANK + _value; + +hint format[localize "STR_ATM_DepositSuccess",[_value] call life_fnc_numberText]; +[] call life_fnc_atmMenu; +[6] call SOCK_fnc_updatePartial; + +if (LIFE_SETTINGS(getNumber,"player_moneyLog") isEqualTo 1) then { + if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then { + money_log = format [localize "STR_DL_ML_depositedBank_BEF",_value,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + } else { + money_log = format [localize "STR_DL_ML_depositedBank",profileName,(getPlayerUID player),_value,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + }; + publicVariableServer "money_log"; +}; diff --git a/life_client/dialog/function/fn_bankTransfer.sqf b/life_client/dialog/function/fn_bankTransfer.sqf new file mode 100644 index 00000000..27bd0f19 --- /dev/null +++ b/life_client/dialog/function/fn_bankTransfer.sqf @@ -0,0 +1,37 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_bankTransfer.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Figure it out again. +*/ +private["_value","_unit","_tax"]; +_value = parseNumber(ctrlText 2702); +_unit = call compile format["%1",(lbData[2703,(lbCurSel 2703)])]; +if (isNull _unit) exitWith {}; +if ((lbCurSel 2703) isEqualTo -1) exitWith {hint localize "STR_ATM_NoneSelected"}; +if (isNil "_unit") exitWith {hint localize "STR_ATM_DoesntExist"}; +if (_value > 999999) exitWith {hint localize "STR_ATM_TransferMax";}; +if (_value < 0) exitWith {}; +if (!([str(_value)] call TON_fnc_isnumber)) exitWith {hint localize "STR_ATM_notnumeric"}; +if (_value > BANK) exitWith {hint localize "STR_ATM_NotEnoughFunds"}; +_tax = _value * LIFE_SETTINGS(getNumber,"bank_transferTax"); +if ((_value + _tax) > BANK) exitWith {hint format[localize "STR_ATM_SentMoneyFail",_value,_tax]}; + +BANK = BANK - (_value + _tax); + +[_value,profileName] remoteExecCall ["life_fnc_wireTransfer",_unit]; +[] call life_fnc_atmMenu; +[1] call SOCK_fnc_updatePartial; +hint format[localize "STR_ATM_SentMoneySuccess",[_value] call life_fnc_numberText,_unit getVariable ["realname",name _unit],[_tax] call life_fnc_numberText]; + + +if (LIFE_SETTINGS(getNumber,"player_moneyLog") isEqualTo 1) then { + if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then { + money_log = format [localize "STR_DL_ML_transferredBank_BEF",_value,_unit getVariable ["realname",name _unit],[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + } else { + money_log = format [localize "STR_DL_ML_transferredBank",profileName,(getPlayerUID player),_value,_unit getVariable ["realname",name _unit],[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + }; + publicVariableServer "money_log"; +}; diff --git a/life_client/dialog/function/fn_bankWithdraw.sqf b/life_client/dialog/function/fn_bankWithdraw.sqf new file mode 100644 index 00000000..435d0cae --- /dev/null +++ b/life_client/dialog/function/fn_bankWithdraw.sqf @@ -0,0 +1,30 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_bankWithdraw.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Withdraws money from the players account +*/ +private["_value"]; +_value = parseNumber(ctrlText 2702); +if (_value > 999999) exitWith {hint localize "STR_ATM_WithdrawMax";}; +if (_value < 0) exitWith {}; +if (!([str(_value)] call TON_fnc_isnumber)) exitWith {hint localize "STR_ATM_notnumeric"}; +if (_value > BANK) exitWith {hint localize "STR_ATM_NotEnoughFunds"}; +if (_value < 100 && BANK > 20000000) exitWith {hint localize "STR_ATM_WithdrawMin"}; //Temp fix for something. + +CASH = CASH + _value; +BANK = BANK - _value; +hint format [localize "STR_ATM_WithdrawSuccess",[_value] call life_fnc_numberText]; +[] call life_fnc_atmMenu; +[6] call SOCK_fnc_updatePartial; + +if (LIFE_SETTINGS(getNumber,"player_moneyLog") isEqualTo 1) then { + if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then { + money_log = format [localize "STR_DL_ML_withdrewBank_BEF",_value,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + } else { + money_log = format [localize "STR_DL_ML_withdrewBank",profileName,(getPlayerUID player),_value,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + }; + publicVariableServer "money_log"; +}; diff --git a/life_client/dialog/function/fn_displayHandler.sqf b/life_client/dialog/function/fn_displayHandler.sqf new file mode 100644 index 00000000..b899440e --- /dev/null +++ b/life_client/dialog/function/fn_displayHandler.sqf @@ -0,0 +1,14 @@ +/* + File: fn_displayHandler.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Master display handler +*/ +private["_control","_code","_shift","_ctrlKey","_alt","_handled"]; +_handled = false; + +//Esc Key Handler +if ((_this select 1) isEqualTo 1) then {_handled = true;}; + +_handled; diff --git a/life_client/dialog/function/fn_gangDeposit.sqf b/life_client/dialog/function/fn_gangDeposit.sqf new file mode 100644 index 00000000..a9304ed9 --- /dev/null +++ b/life_client/dialog/function/fn_gangDeposit.sqf @@ -0,0 +1,42 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_gangDeposit.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Deposits money into the players gang bank. +*/ +private["_value"]; +_value = parseNumber(ctrlText 2702); +group player setVariable ["gbank_in_use_by",player,true]; + +//Series of stupid checks +if (_value > 999999) exitWith {hint localize "STR_ATM_GreaterThan";}; +if (_value < 0) exitWith {}; +if (!([str(_value)] call TON_fnc_isnumber)) exitWith {hint localize "STR_ATM_notnumeric"}; +if (_value > CASH) exitWith {hint localize "STR_ATM_NotEnoughCash"}; +if ((group player getVariable ["gbank_in_use_by",player]) != player) exitWith {hint localize "STR_ATM_WithdrawMin"}; //Check if it's in use. + +CASH = CASH - _value; +_gFund = GANG_FUNDS; +_gFund = _gFund + _value; +group player setVariable ["gang_bank",_gFund,true]; + +if (life_HC_isActive) then { + [1,group player] remoteExecCall ["HC_fnc_updateGang",HC_Life]; +} else { + [1,group player] remoteExecCall ["TON_fnc_updateGang",RSERV]; +}; + +hint format[localize "STR_ATM_DepositSuccessG",[_value] call life_fnc_numberText]; +[] call life_fnc_atmMenu; +[6] call SOCK_fnc_updatePartial; //Silent Sync + +if (LIFE_SETTINGS(getNumber,"player_moneyLog") isEqualTo 1) then { + if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then { + money_log = format [localize "STR_DL_ML_depositeGang_BEF",_value,[_gFund] call life_fnc_numberText,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + } else { + money_log = format [localize "STR_DL_ML_depositeGang",profileName,(getPlayerUID player),_value,[_gFund] call life_fnc_numberText,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + }; + publicVariableServer "money_log"; +}; diff --git a/life_client/dialog/function/fn_gangWithdraw.sqf b/life_client/dialog/function/fn_gangWithdraw.sqf new file mode 100644 index 00000000..fd82c81b --- /dev/null +++ b/life_client/dialog/function/fn_gangWithdraw.sqf @@ -0,0 +1,46 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_gangWithdraw.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Withdraws money from the gang bank. +*/ +private["_value"]; +if ((time - life_action_delay) < 2) exitWith {hint localize "STR_NOTF_ActionDelay"}; +life_action_delay = time; +_value = parseNumber(ctrlText 2702); +group player setVariable ["gbank_in_use_by",player,true]; +uiSleep ((1 + random (1.75)) + (0.15 + random (3.25))); + +//Series of stupid checks +if ((group player getVariable ["gbank_in_use_by",player]) != player) exitWith {hint localize "STR_ATM_WithdrawInUseG"}; //Check if it's in use. +_gFund = GANG_FUNDS; +if (_value > 999999) exitWith {hint localize "STR_ATM_WithdrawMax";}; +if (_value < 0) exitWith {}; +if (!([str(_value)] call TON_fnc_isnumber)) exitWith {hint localize "STR_ATM_notnumeric"}; +if (_value > _gFund) exitWith {hint localize "STR_ATM_NotEnoughFundsG"}; +if (_val < 100 && _gFund > 20000000) exitWith {hint localize "STR_ATM_WithdrawMin"}; //Temp fix for something. + +_gFund = _gFund - _value; +CASH = CASH + _value; +group player setVariable ["gang_bank",_gFund,true]; + +if (life_HC_isActive) then { + [1,group player] remoteExec ["HC_fnc_updateGang",HC_Life]; //Update the database. +} else { + [1,group player] remoteExec ["TON_fnc_updateGang",RSERV]; //Update the database. +}; + +hint format [localize "STR_ATM_WithdrawSuccessG",[_value] call life_fnc_numberText]; +[] call life_fnc_atmMenu; +[6] call SOCK_fnc_updatePartial; + +if (LIFE_SETTINGS(getNumber,"player_moneyLog") isEqualTo 1) then { + if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then { + money_log = format [localize "STR_DL_ML_withdrewGang_BEF",_value,[_gFund] call life_fnc_numberText,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + } else { + money_log = format [localize "STR_DL_ML_withdrewGang",profileName,(getPlayerUID player),_value,[_gFund] call life_fnc_numberText,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + }; + publicVariableServer "money_log"; +}; diff --git a/life_client/dialog/function/fn_garageLBChange.sqf b/life_client/dialog/function/fn_garageLBChange.sqf new file mode 100644 index 00000000..a1b46b4c --- /dev/null +++ b/life_client/dialog/function/fn_garageLBChange.sqf @@ -0,0 +1,79 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_garageLBChange.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Can't be bothered to answer it.. Already deleted it by accident.. +*/ +disableSerialization; +private["_control","_index","_className","_classNameLife","_dataArr","_vehicleColor","_vehicleInfo","_trunkSpace","_sellPrice","_retrievePrice","_sellMultiplier","_price","_storageFee","_purchasePrice"]; +_control = _this select 0; +_index = _this select 1; + +//Fetch some information. +_dataArr = CONTROL_DATAI(_control,_index); +_dataArr = call compile format["%1",_dataArr]; +_className = (_dataArr select 0); +_classNameLife = _className; + +if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _classNameLife)) then { + _classNameLife = "Default"; //Use Default class if it doesn't exist + diag_log format["%1: LifeCfgVehicles class doesn't exist",_className]; +}; + +_vehicleColor = ((M_CONFIG(getArray,"LifeCfgVehicles",_classNameLife,"textures") select (_dataArr select 1)) select 0); +if (isNil "_vehicleColor") then {_vehicleColor = "Default";}; + +_vehicleInfo = [_className] call life_fnc_fetchVehInfo; +_trunkSpace = [_className] call life_fnc_vehicleWeightCfg; + +_price = M_CONFIG(getNumber,"LifeCfgVehicles",_classNameLife,"price"); +_storageFee = LIFE_SETTINGS(getNumber,"vehicle_storage_fee_multiplier"); + +switch (playerSide) do { + case civilian: { + _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_CIVILIAN"); + _sellMultiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_CIVILIAN"); + }; + case west: { + _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_COP"); + _sellMultiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_COP"); + }; + case independent: { + _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_MEDIC"); + _sellMultiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_MEDIC"); + }; + case east: { + _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_OPFOR"); + _sellMultiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_OPFOR"); + }; +}; +_retrievePrice = _purchasePrice * _storageFee; +_sellPrice = _purchasePrice * _sellMultiplier; + +if (!(_sellPrice isEqualType 0) || _sellPrice < 1) then {_sellPrice = 500;}; +if (!(_retrievePrice isEqualType 0) || _retrievePrice < 1) then {_retrievePrice = 500;}; + +(CONTROL(2800,2803)) ctrlSetStructuredText parseText format[ + (localize "STR_Shop_Veh_UI_RetrievalP")+ " $%1
+ " +(localize "STR_Shop_Veh_UI_SellP")+ " $%2
+ " +(localize "STR_Shop_Veh_UI_Color")+ " %8
+ " +(localize "STR_Shop_Veh_UI_MaxSpeed")+ " %3 km/h
+ " +(localize "STR_Shop_Veh_UI_HPower")+ " %4
+ " +(localize "STR_Shop_Veh_UI_PSeats")+ " %5
+ " +(localize "STR_Shop_Veh_UI_Trunk")+ " %6
+ " +(localize "STR_Shop_Veh_UI_Fuel")+ " %7 + ", +[_retrievePrice] call life_fnc_numberText, +[_sellPrice] call life_fnc_numberText, +(_vehicleInfo select 8), +(_vehicleInfo select 11), +(_vehicleInfo select 10), +if (_trunkSpace isEqualTo -1) then {"None"} else {_trunkSpace}, +(_vehicleInfo select 12), +_vehicleColor +]; + +ctrlShow [2803,true]; +ctrlShow [2830,true]; diff --git a/life_client/dialog/function/fn_impoundMenu.sqf b/life_client/dialog/function/fn_impoundMenu.sqf new file mode 100644 index 00000000..79414907 --- /dev/null +++ b/life_client/dialog/function/fn_impoundMenu.sqf @@ -0,0 +1,36 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_impoundMenu.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Not actually a impound menu, may act as confusion to some but that is what I wanted. + The purpose of this menu is it is now called a 'Garage' where vehicles are stored (persistent ones). +*/ +private["_vehicles","_control"]; +disableSerialization; +_vehicles = param [0,[],[[]]]; + +ctrlShow[2803,false]; +ctrlShow[2830,false]; +waitUntil {!isNull (findDisplay 2800)}; + +if (count _vehicles isEqualTo 0) exitWith { + ctrlSetText[2811,localize "STR_Garage_NoVehicles"]; +}; + +_control = CONTROL(2800,2802); +lbClear _control; + +{ + _vehicleInfo = [(_x select 2)] call life_fnc_fetchVehInfo; + _control lbAdd (_vehicleInfo select 3); + _tmp = [(_x select 2),(_x select 8)]; + _tmp = str(_tmp); + _control lbSetData [(lbSize _control)-1,_tmp]; + _control lbSetPicture [(lbSize _control)-1,(_vehicleInfo select 2)]; + _control lbSetValue [(lbSize _control)-1,(_x select 0)]; +} forEach _vehicles; + +ctrlShow[2810,false]; +ctrlShow[2811,false]; diff --git a/life_client/dialog/function/fn_progressBar.sqf b/life_client/dialog/function/fn_progressBar.sqf new file mode 100644 index 00000000..3cfbdca0 --- /dev/null +++ b/life_client/dialog/function/fn_progressBar.sqf @@ -0,0 +1,14 @@ +/* + File: fn_progressBar.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Initializes the progress bar. +*/ +disableSerialization; +private["_ui","_progress"]; +5 cutRsc ["life_progress","PLAIN"]; +_ui = uiNameSpace getVariable "life_progress"; +_progress = _ui displayCtrl 38201; + +_progress progressSetPosition 0.5; diff --git a/life_client/dialog/function/fn_safeFix.sqf b/life_client/dialog/function/fn_safeFix.sqf new file mode 100644 index 00000000..7ccccbd0 --- /dev/null +++ b/life_client/dialog/function/fn_safeFix.sqf @@ -0,0 +1,57 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_safeFix.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Piece of functionality for the cops to close the safe (lock it) +*/ +private "_vault"; +_vault = _this select 0; +if (!(_vault getVariable ["safe_open",false])) exitWith {hint localize "STR_Cop_VaultLocked"}; + +life_action_inUse = true; + +//Setup the progress bar +disableSerialization; +_title = localize "STR_Cop_RepairVault"; +5 cutRsc ["life_progress","PLAIN"]; +_ui = uiNamespace getVariable "life_progress"; +_progressBar = _ui displayCtrl 38201; +_titleText = _ui displayCtrl 38202; +_titleText ctrlSetText format["%2 (1%1)...","%",_title]; +_progressBar progressSetPosition 0.01; +_cP = 0.01; + +for "_i" from 0 to 1 step 0 do { + if (animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { + [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; + player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; + player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; + }; + + sleep 0.26; + + if (isNull _ui) then { + 5 cutRsc ["life_progress","PLAIN"]; + _ui = uiNamespace getVariable "life_progress"; + _progressBar = _ui displayCtrl 38201; + _titleText = _ui displayCtrl 38202; + }; + _cP = _cP + .012; + _progressBar progressSetPosition _cP; + _titleText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_title]; + if (_cP >= 1 || !alive player) exitWith {}; + if (life_interrupted) exitWith {}; +}; + +//Kill the UI display and check for various states +5 cutText ["","PLAIN"]; +player playActionNow "stop"; +if (!alive player) exitWith {life_action_inUse = false;}; +if (life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; + +life_action_inUse = false; + +_vault setVariable ["safe_open",false,true]; +hint localize "STR_Cop_VaultRepaired"; \ No newline at end of file diff --git a/life_client/dialog/function/fn_safeInventory.sqf b/life_client/dialog/function/fn_safeInventory.sqf new file mode 100644 index 00000000..34a7b8ab --- /dev/null +++ b/life_client/dialog/function/fn_safeInventory.sqf @@ -0,0 +1,27 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_safeInventory.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Fills up the safes inventory. +*/ +private["_safe","_tInv","_pInv","_safeInfo","_str","_shrt","_icon"]; +_safe = param [0,objNull,[objNull]]; +if (isNull _safe) exitWith {closeDialog 0;}; +disableSerialization; + +_tInv = (findDisplay 3500) displayCtrl 3502; +lbClear _tInv; + +_safeInfo = _safe getVariable ["safe",-1]; +if (_safeInfo < 1) exitWith {closeDialog 0; hint localize "STR_Civ_VaultEmpty";}; + +_str = M_CONFIG(getText,"VirtualItems","goldbar","displayName"); +_shrt = M_CONFIG(getText,"VirtualItems","goldbar","variable"); +_tInv lbAdd format["[%1] - %2",_safeInfo,(localize _str)]; +_tInv lbSetData [(lbSize _tInv)-1,_shrt]; +_icon = M_CONFIG(getText,"VirtualItems","goldbar","icon"); +if (!(_icon isEqualTo "")) then { + _tInv lbSetPicture [(lbSize _tInv)-1,_icon]; +}; diff --git a/life_client/dialog/function/fn_safeOpen.sqf b/life_client/dialog/function/fn_safeOpen.sqf new file mode 100644 index 00000000..54725105 --- /dev/null +++ b/life_client/dialog/function/fn_safeOpen.sqf @@ -0,0 +1,28 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_safeOpen.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Opens the safe inventory menu. +*/ +if (dialog) exitWith {}; //A dialog is already open. +life_safeObj = param [0,objNull,[objNull]]; +if (isNull life_safeObj) exitWith {}; +if (playerSide != civilian) exitWith {}; +if ((life_safeObj getVariable ["safe",-1]) < 1) exitWith {hint localize "STR_Civ_VaultEmpty";}; +if (life_safeObj getVariable ["inUse",false]) exitWith {hint localize "STR_Civ_VaultInUse"}; +if (west countSide playableUnits < (LIFE_SETTINGS(getNumber,"minimum_cops"))) exitWith { + hint format [localize "STR_Civ_NotEnoughCops",(LIFE_SETTINGS(getNumber,"minimum_cops"))] +}; +if (!createDialog "Federal_Safe") exitWith {localize "STR_MISC_DialogError"}; + +disableSerialization; +ctrlSetText[3501,(localize "STR_Civ_SafeInv")]; +[life_safeObj] call life_fnc_safeInventory; +life_safeObj setVariable ["inUse",true,true]; + +[life_safeObj] spawn { + waitUntil {isNull (findDisplay 3500)}; + (_this select 0) setVariable ["inUse",false,true]; +}; \ No newline at end of file diff --git a/life_client/dialog/function/fn_safeStore.sqf b/life_client/dialog/function/fn_safeStore.sqf new file mode 100644 index 00000000..90f41e57 --- /dev/null +++ b/life_client/dialog/function/fn_safeStore.sqf @@ -0,0 +1,26 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_safeStore.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Gateway copy of fn_vehStoreItem but designed for the safe. +*/ +private["_ctrl","_num"]; +disableSerialization; +_ctrl = CONTROL_DATA(3503); +_num = ctrlText 3506; + +//Error checks +if (!([_num] call TON_fnc_isnumber)) exitWith {hint localize "STR_MISC_WrongNumFormat";}; +_num = parseNumber(_num); +if (_num < 1) exitWith {hint localize "STR_Cop_VaultUnder1";}; +if (!(_ctrl isEqualTo "goldBar")) exitWith {hint localize "STR_Cop_OnlyGold"}; +if (_num > life_inv_goldbar) exitWith {hint format[localize "STR_Cop_NotEnoughGold",_num];}; + +//Store it. +if (!([false,_ctrl,_num] call life_fnc_handleInv)) exitWith {hint localize "STR_Cop_CantRemove";}; +_safeInfo = life_safeObj getVariable ["safe",0]; +life_safeObj getVariable ["safe",_safeInfo + _num,true]; + +[life_safeObj] call life_fnc_safeInventory; diff --git a/life_client/dialog/function/fn_safeTake.sqf b/life_client/dialog/function/fn_safeTake.sqf new file mode 100644 index 00000000..2d9ad69e --- /dev/null +++ b/life_client/dialog/function/fn_safeTake.sqf @@ -0,0 +1,32 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_safeTake.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Gateway to fn_vehTakeItem.sqf but for safe(s). +*/ +private["_ctrl","_num","_safeInfo"]; +disableSerialization; + +if ((lbCurSel 3502) isEqualTo -1) exitWith {hint localize "STR_Civ_SelectItem";}; +_ctrl = CONTROL_DATA(3502); +_num = ctrlText 3505; +_safeInfo = life_safeObj getVariable ["safe",0]; + +//Error checks +if (!([_num] call TON_fnc_isnumber)) exitWith {hint localize "STR_MISC_WrongNumFormat";}; +_num = parseNumber(_num); +if (_num < 1) exitWith {hint localize "STR_Cop_VaultUnder1";}; +if (!(_ctrl isEqualTo "goldBar")) exitWith {hint localize "STR_Cop_OnlyGold"}; +if (_num > _safeInfo) exitWith {hint format[localize "STR_Civ_IsntEnoughGold",_num];}; + +//Secondary checks +_num = [_ctrl,_num,life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff; +if (_num isEqualTo 0) exitWith {hint localize "STR_NOTF_InvFull"}; + + +//Take it +if (!([true,_ctrl,_num] call life_fnc_handleInv)) exitWith {hint localize "STR_NOTF_CouldntAdd";}; +life_safeObj setVariable ["safe",_safeInfo - _num,true]; +[life_safeObj] call life_fnc_safeInventory; diff --git a/life_client/dialog/function/fn_sellGarage.sqf b/life_client/dialog/function/fn_sellGarage.sqf new file mode 100644 index 00000000..348349a7 --- /dev/null +++ b/life_client/dialog/function/fn_sellGarage.sqf @@ -0,0 +1,69 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_sellGarage.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Sells a vehicle from the garage. +*/ +private["_vehicle","_vehicleLife","_vid","_pid","_sellPrice","_multiplier","_price","_purchasePrice"]; +disableSerialization; +if ((lbCurSel 2802) isEqualTo -1) exitWith {hint localize "STR_Global_NoSelection"}; +_vehicle = lbData[2802,(lbCurSel 2802)]; +_vehicle = (call compile format["%1",_vehicle]) select 0; +_vehicleLife = _vehicle; +_vid = lbValue[2802,(lbCurSel 2802)]; +_pid = getPlayerUID player; + +if (isNil "_vehicle") exitWith {hint localize "STR_Garage_Selection_Error"}; +if ((time - life_action_delay) < 1.5) exitWith {hint localize "STR_NOTF_ActionDelay";}; +if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _vehicleLife)) then { + _vehicleLife = "Default"; //Use Default class if it doesn't exist + diag_log format["%1: LifeCfgVehicles class doesn't exist",_vehicle]; +}; + +_price = M_CONFIG(getNumber,"LifeCfgVehicles",_vehicleLife,"price"); +switch (playerSide) do { + case civilian: { + _multiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_CIVILIAN"); + _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_CIVILIAN"); + }; + case west: { + _multiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_COP"); + _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_COP"); + }; + case independent: { + _multiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_MEDIC"); + _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_MEDIC"); + }; + case east: { + _multiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_OPFOR"); + _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_OPFOR"); + }; +}; + +_sellPrice = _purchasePrice * _multiplier; + +if (!(_sellPrice isEqualType 0) || _sellPrice < 1) then {_sellPrice = 500;}; + +if (life_HC_isActive) then { + [_vid,_pid,_sellPrice,player,life_garage_type] remoteExecCall ["HC_fnc_vehicleDelete",HC_Life]; +} else { + [_vid,_pid,_sellPrice,player,life_garage_type] remoteExecCall ["TON_fnc_vehicleDelete",RSERV]; +}; + +hint format[localize "STR_Garage_SoldCar",[_sellPrice] call life_fnc_numberText]; +BANK = BANK + _sellPrice; +[1] call SOCK_fnc_updatePartial; + +if (LIFE_SETTINGS(getNumber,"player_advancedLog") isEqualTo 1) then { + if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then { + advanced_log = format [localize "STR_DL_AL_soldVehicle_BEF",_vehicleLife,[_sellPrice] call life_fnc_numberText,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + } else { + advanced_log = format [localize "STR_DL_AL_soldVehicle",profileName,(getPlayerUID player),_vehicleLife,[_sellPrice] call life_fnc_numberText,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + }; + publicVariableServer "advanced_log"; +}; + +life_action_delay = time; +closeDialog 0; \ No newline at end of file diff --git a/life_client/dialog/function/fn_setMapPosition.sqf b/life_client/dialog/function/fn_setMapPosition.sqf new file mode 100644 index 00000000..2bef57f0 --- /dev/null +++ b/life_client/dialog/function/fn_setMapPosition.sqf @@ -0,0 +1,20 @@ +/* + File: fn_setMapPosition.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Sets the given control / maps focus position +*/ +disableSerialization; +private["_control","_time","_zoom","_position"]; +params [ + ["_control",controlNull,[controlNull]], + ["_time",1,[0]], + ["_zoom",0.1,[0]], + ["_position",[],[[]]] +]; + +if (isNull _control || _position isEqualTo []) exitWith {}; + +_control ctrlMapAnimAdd[_time,_zoom,_position]; +ctrlMapAnimCommit _control; diff --git a/life_client/dialog/function/fn_spawnConfirm.sqf b/life_client/dialog/function/fn_spawnConfirm.sqf new file mode 100644 index 00000000..1b3bda30 --- /dev/null +++ b/life_client/dialog/function/fn_spawnConfirm.sqf @@ -0,0 +1,62 @@ +/* + File: fn_spawnConfirm.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Spawns the player where he selected. +*/ +private["_spCfg","_sp","_spawnPos"]; +closeDialog 0; +cutText ["","BLACK IN"]; +if (life_spawn_point isEqualTo []) then { + private["_sp","_spCfg"]; + _spCfg = [playerSide] call life_fnc_spawnPointCfg; + _sp = _spCfg select 0; + + if (playerSide isEqualTo civilian) then { + if (isNil {(call compile format["%1",_sp select 0])}) then { + player setPos (getMarkerPos (_sp select 0)); + } else { + _spawnPos = (call compile format["%1",_sp select 0]) call BIS_fnc_selectRandom; + _spawnPos = _spawnPos buildingPos 0; + player setPos _spawnPos; + }; + } else { + player setPos (getMarkerPos (_sp select 0)); + }; + titleText[format["%2 %1",_sp select 1,localize "STR_Spawn_Spawned"],"BLACK IN"]; +} else { + if (playerSide isEqualTo civilian) then { + if (isNil {(call compile format["%1",life_spawn_point select 0])}) then { + if (["house",life_spawn_point select 0] call BIS_fnc_inString) then { + private["_bPos","_house","_pos"]; + _house = nearestObjects [getMarkerPos (life_spawn_point select 0),["House_F"],10] select 0; + _bPos = [_house] call life_fnc_getBuildingPositions; + + if (_bPos isEqualTo []) exitWith { + player setPos (getMarkerPos (life_spawn_point select 0)); + }; + + {_bPos = _bPos - [(_house buildingPos _x)];} forEach (_house getVariable ["slots",[]]); + _pos = _bPos call BIS_fnc_selectRandom; + player setPosATL _pos; + } else { + player setPos (getMarkerPos (life_spawn_point select 0)); + }; + } else { + _spawnPos = (call compile format["%1", life_spawn_point select 0]) call BIS_fnc_selectRandom; + _spawnPos = _spawnPos buildingPos 0; + player setPos _spawnPos; + }; + } else { + player setPos (getMarkerPos (life_spawn_point select 0)); + }; + titleText[format["%2 %1",life_spawn_point select 1,localize "STR_Spawn_Spawned"],"BLACK IN"]; +}; + +if (life_firstSpawn) then { + life_firstSpawn = false; + [] call life_fnc_welcomeNotification; +}; +[] call life_fnc_playerSkins; +[] call life_fnc_hudSetup; \ No newline at end of file diff --git a/life_client/dialog/function/fn_spawnMenu.sqf b/life_client/dialog/function/fn_spawnMenu.sqf new file mode 100644 index 00000000..0a1670da --- /dev/null +++ b/life_client/dialog/function/fn_spawnMenu.sqf @@ -0,0 +1,37 @@ +/* + File: fn_spawnMenu.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Initializes the spawn point selection menu. +*/ +private["_spCfg","_sp","_ctrl"]; +disableSerialization; + +if (life_is_arrested) exitWith { + [] call life_fnc_respawned; +}; + +if (life_respawned) then { + [] call life_fnc_respawned; +}; +cutText["","BLACK FADED"]; +0 cutFadeOut 9999999; +if (!(createDialog "life_spawn_selection")) exitWith {[] call life_fnc_spawnMenu;}; +(findDisplay 38500) displaySetEventHandler ["keyDown","_this call life_fnc_displayHandler"]; + +_spCfg = [playerSide] call life_fnc_spawnPointCfg; + +_ctrl = ((findDisplay 38500) displayCtrl 38510); +{ + _ctrl lnbAddRow[(_spCfg select _ForEachIndex) select 1,(_spCfg select _ForEachIndex) select 0,""]; + _ctrl lnbSetPicture[[_ForEachIndex,0],(_spCfg select _ForEachIndex) select 2]; + _ctrl lnbSetData[[_ForEachIndex,0],(_spCfg select _ForEachIndex) select 0]; +} forEach _spCfg; + +_sp = _spCfg select 0; //First option is set by default + +[((findDisplay 38500) displayCtrl 38502),1,0.1,getMarkerPos (_sp select 0)] call life_fnc_setMapPosition; +life_spawn_point = _sp; + +ctrlSetText[38501,format["%2: %1",_sp select 1,localize "STR_Spawn_CSP"]]; \ No newline at end of file diff --git a/life_client/dialog/function/fn_spawnPointCfg.sqf b/life_client/dialog/function/fn_spawnPointCfg.sqf new file mode 100644 index 00000000..62f640c4 --- /dev/null +++ b/life_client/dialog/function/fn_spawnPointCfg.sqf @@ -0,0 +1,81 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_spawnPointCfg.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Master configuration for available spawn points depending on the units side. + + Return: + [Spawn Marker,Spawn Name,Image Path] +*/ +private["_side","_return","_spawnCfg","_curConfig","_name","_licenses","_level","_levelName","_levelValue","_levelType","_tempConfig","_flag"]; +_side = param [0,civilian,[civilian]]; + +switch (_side) do { + case west: {_side = "Cop"}; + case independent: {_side = "Medic"}; + default {_side = "Civilian"}; +}; + +_return = []; + +_spawnCfg = missionConfigFile >> "CfgSpawnPoints" >> _side; + +for "_i" from 0 to count(_spawnCfg)-1 do { + _flag = true; + _tempConfig = []; + _curConfig = (_spawnCfg select _i); + _licenses = getArray(_curConfig >> "licenses"); + _level = getArray(_curConfig >> "level"); + _levelName = (_level select 0); + _levelType = (_level select 1); + _levelValue = (_level select 2); + + { + if (!((_x select 0) isEqualTo "")) then { + _licenseName = (_x select 0); + _licenseType = (_x select 1); + if (_licenseType isEqualTo 0) then { + if (LICENSE_VALUE(_licenseName,(M_CONFIG(getText,"Licenses",_licenseName,"side")))) exitWith {_flag = false}; + } else { + if (!(LICENSE_VALUE(_licenseName,(M_CONFIG(getText,"Licenses",_licenseName,"side"))))) exitWith {_flag = false}; + }; + }; + } forEach _licenses; + + if (_flag) then { + if (!(_levelValue isEqualTo -1)) then { + _level = missionNamespace getVariable _levelName; + if (_level isEqualType {}) then {_level = FETCH_CONST(_level);}; + _flag = switch (_levelType) do { + case "SCALAR": {_level >= _levelValue}; + case "BOOL": {_level}; + case "EQUAL": {_level isEqualTo _levelValue}; + case "INVERSE": {_level <= _levelValue}; + default {false}; + }; + }; + }; + + if (_flag) then { + _tempConfig pushBack getText(_curConfig >> "spawnMarker"); + _tempConfig pushBack getText(_curConfig >> "displayName"); + _tempConfig pushBack getText(_curConfig >> "icon"); + _return pushBack _tempConfig; + }; +}; + +if (playerSide isEqualTo civilian) then { + if (count life_houses > 0) then { + { + _pos = call compile format["%1",(_x select 0)]; + _house = nearestObject [_pos, "House"]; + _houseName = getText(configFile >> "CfgVehicles" >> (typeOf _house) >> "displayName"); + + _return pushBack [format["house_%1",_house getVariable "uid"],_houseName,"\a3\ui_f\data\map\MapControl\lighthouse_ca.paa"]; + } forEach life_houses; + }; +}; + +_return; diff --git a/life_client/dialog/function/fn_spawnPointSelected.sqf b/life_client/dialog/function/fn_spawnPointSelected.sqf new file mode 100644 index 00000000..059f1246 --- /dev/null +++ b/life_client/dialog/function/fn_spawnPointSelected.sqf @@ -0,0 +1,20 @@ +/* + File: fn_spawnPointSelected.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Sorts out the spawn point selected and does a map zoom. +*/ +disableSerialization; +private["_control","_selection","_spCfg","_sp"]; +params [ + ["_control",controlNull,[controlNull]], + ["_selection",0,[0]] +]; + +_spCfg = [playerSide] call life_fnc_spawnPointCfg; +_sp = _spCfg select _selection; +[((findDisplay 38500) displayCtrl 38502),1,0.1,getMarkerPos (_sp select 0)] call life_fnc_setMapPosition; +life_spawn_point = _sp; + +ctrlSetText[38501,format["%2: %1",_sp select 1,localize "STR_Spawn_CSP"]]; diff --git a/life_client/dialog/function/fn_unimpound.sqf b/life_client/dialog/function/fn_unimpound.sqf new file mode 100644 index 00000000..e792c9d5 --- /dev/null +++ b/life_client/dialog/function/fn_unimpound.sqf @@ -0,0 +1,64 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_unimpound.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Yeah... Gets the vehicle from the garage. +*/ +private["_vehicle","_vehicleLife","_vid","_pid","_unit","_price","_price","_storageFee","_purchasePrice"]; +disableSerialization; +if ((lbCurSel 2802) isEqualTo -1) exitWith {hint localize "STR_Global_NoSelection"}; +_vehicle = lbData[2802,(lbCurSel 2802)]; +_vehicle = (call compile format["%1",_vehicle]) select 0; +_vehicleLife = _vehicle; +_vid = lbValue[2802,(lbCurSel 2802)]; +_pid = getPlayerUID player; +_unit = player; +_spawntext = localize "STR_Garage_spawn_Success"; +if (isNil "_vehicle") exitWith {hint localize "STR_Garage_Selection_Error"}; +if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _vehicleLife)) then { + _vehicleLife = "Default"; //Use Default class if it doesn't exist + diag_log format["%1: LifeCfgVehicles class doesn't exist",_vehicle]; +}; + +_price = M_CONFIG(getNumber,"LifeCfgVehicles",_vehicleLife,"price"); +_storageFee = LIFE_SETTINGS(getNumber,"vehicle_storage_fee_multiplier"); + +switch (playerSide) do { + case civilian: {_purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_CIVILIAN");}; + case west: {_purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_COP");}; + case independent: {_purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_MEDIC");}; + case east: {_purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_OPFOR");}; +}; +_price = _purchasePrice * _storageFee; + +if (!(_price isEqualType 0) || _price < 1) then {_price = 500;}; +if (BANK < _price) exitWith {hint format[(localize "STR_Garage_CashError"),[_price] call life_fnc_numberText];}; + +if (life_garage_sp isEqualType []) then { + if (life_HC_isActive) then { + [_vid,_pid,(life_garage_sp select 0),_unit,_price,(life_garage_sp select 1),_spawntext] remoteExec ["HC_fnc_spawnVehicle",HC_Life]; + } else { + [_vid,_pid,(life_garage_sp select 0),_unit,_price,(life_garage_sp select 1),_spawntext] remoteExec ["TON_fnc_spawnVehicle",RSERV]; + }; +} else { + if (life_garage_sp in ["medic_spawn_1","medic_spawn_2","medic_spawn_3"]) then { + if (life_HC_isActive) then { + [_vid,_pid,life_garage_sp,_unit,_price,0,_spawntext] remoteExec ["HC_fnc_spawnVehicle",HC_Life]; + } else { + [_vid,_pid,life_garage_sp,_unit,_price,_spawntext] remoteExec ["TON_fnc_spawnVehicle",RSERV]; + }; + } else { + if (life_HC_isActive) then { + [_vid,_pid,(getMarkerPos life_garage_sp),_unit,_price,markerDir life_garage_sp,_spawntext] remoteExec ["HC_fnc_spawnVehicle",HC_Life]; + } else { + [_vid,_pid,(getMarkerPos life_garage_sp),_unit,_price,markerDir life_garage_sp,_spawntext] remoteExec ["TON_fnc_spawnVehicle",RSERV]; + }; + }; +}; + +hint localize "STR_Garage_SpawningVeh"; +BANK = BANK - _price; +[1] call SOCK_fnc_updatePartial; +closeDialog 0; diff --git a/life_client/dialog/function/fn_vehicleGarage.sqf b/life_client/dialog/function/fn_vehicleGarage.sqf new file mode 100644 index 00000000..b5c2345a --- /dev/null +++ b/life_client/dialog/function/fn_vehicleGarage.sqf @@ -0,0 +1,26 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_vehicleGarage.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Vehicle Garage, why did I spawn this in an action its self? +*/ +private["_spawnPos","_dir","_type"]; +params [ + ["_spawnPos",objNull,[objNull]], + ["_type","",[""]] +]; + +life_garage_sp = [(_spawnPos modelToWorld [-11.5,0,0]),(getDir _spawnPos)-90]; +life_garage_type = _type; + +if (life_HC_isActive) then { + [getPlayerUID player,playerSide,_type,player] remoteExec ["HC_fnc_getVehicles",HC_Life]; +} else { + [getPlayerUID player,playerSide,_type,player] remoteExec ["TON_fnc_getVehicles",RSERV]; +}; + +createDialog "Life_impound_menu"; +disableSerialization; +ctrlSetText[2802,(localize "STR_ANOTF_QueryGarage")]; diff --git a/life_client/dialog/function/fn_wireTransfer.sqf b/life_client/dialog/function/fn_wireTransfer.sqf new file mode 100644 index 00000000..df972e31 --- /dev/null +++ b/life_client/dialog/function/fn_wireTransfer.sqf @@ -0,0 +1,17 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_wireTransfer.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Initiates the wire-transfer +*/ +params [ + ["_value",0,[0]], + ["_from","",[""]] +]; + +if (_value isEqualTo 0 || _from isEqualTo "" || _from isEqualTo profileName) exitWith {}; //No +BANK = BANK + _value; +[1] call SOCK_fnc_updatePartial; +hint format[localize "STR_ATM_WireTransfer",_from,[_value] call life_fnc_numberText]; \ No newline at end of file diff --git a/life_client/dialog/gang.hpp b/life_client/dialog/gang.hpp new file mode 100644 index 00000000..903e2178 --- /dev/null +++ b/life_client/dialog/gang.hpp @@ -0,0 +1,214 @@ +class Life_My_Gang_Diag { + idd = 2620; + name= "life_my_gang_menu"; + movingEnable = 0; + enableSimulation = 1; + onLoad = ""; + + class controlsBackground { + class Life_RscTitleBackground: Life_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.1; + y = 0.2; + w = 0.6; + h = (1 / 25); + }; + + class MainBackground: Life_RscText { + colorBackground[] = {0, 0, 0, 0.7}; + idc = -1; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.6; + h = 0.6 - (22 / 250); + }; + }; + + class controls { + class Title: Life_RscTitle { + colorBackground[] = {0, 0, 0, 0}; + idc = 2629; + text = ""; + x = 0.1; + y = 0.2; + w = 0.6; + h = (1 / 25); + }; + + class GangMemberList: Life_RscListBox + { + idc = 2621; + text = ""; + sizeEx = 0.035; + x = 0.11; + y = 0.26; + w = 0.350; + h = 0.370; + }; + + class CloseLoadMenu: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_Close"; + onButtonClick = "closeDialog 0;[] call life_fnc_p_updateMenu"; + x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.8 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class GangLeave: Life_RscButtonMenu { + idc = -1; + text = "$STR_Gang_Leave"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call life_fnc_gangLeave"; + x = 0.47; + y = 0.26; + w = (9 / 40); + h = (1 / 25); + }; + + class GangLock: Life_RscButtonMenu { + idc = 2622; + text = "$STR_Gang_UpgradeSlots"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] spawn life_fnc_gangUpgrade"; + x = 0.47; + y = 0.31; + w = (9 / 40); + h = (1 / 25); + }; + + class GangKick: Life_RscButtonMenu { + idc = 2624; + text = "$STR_Gang_Kick"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call life_fnc_gangKick"; + x = 0.47; + y = 0.36; + w = (9 / 40); + h = (1 / 25); + }; + + class GangLeader: Life_RscButtonMenu { + idc = 2625; + text = "$STR_Gang_SetLeader"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] spawn life_fnc_gangNewLeader"; + x = 0.47; + y = 0.41; + w = (9 / 40); + h = (1 / 25); + }; + + class InviteMember: GangLeader { + idc = 2630; + text = "$STR_Gang_Invite_Player"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] spawn life_fnc_gangInvitePlayer"; + y = .51; + }; + + class DisbandGang: InviteMember { + idc = 2631; + text = "$STR_Gang_Disband_Gang"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] spawn life_fnc_gangDisband"; + y = .46; + }; + + class ColorList: Life_RscCombo { + idc = 2632; + x = 0.47; + y = 0.56; + w = (9 / 40); + h = 0.03; + }; + + class GangBank: Title { + idc = 601; + style = 1; + text = ""; + }; + }; +}; + +class Life_Create_Gang_Diag { + idd = 2520; + name= "life_my_gang_menu_create"; + movingEnable = 0; + enableSimulation = 1; + onLoad = "[] spawn {waitUntil {!isNull (findDisplay 2520)}; ((findDisplay 2520) displayCtrl 2523) ctrlSetText format[localize ""STR_Gang_PriceTxt"",[(getNumber(missionConfigFile >> 'Life_Settings' >> 'gang_price'))] call life_fnc_numberText]};"; + + class controlsBackground { + class Life_RscTitleBackground: Life_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.1; + y = 0.2; + w = 0.5; + h = (1 / 25); + }; + + class MainBackground: Life_RscText { + colorBackground[] = {0, 0, 0, 0.7}; + idc = -1; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.5; + h = 0.3 - (22 / 250); + }; + }; + + class controls { + class InfoMsg: Life_RscStructuredText { + idc = 2523; + sizeEx = 0.020; + text = ""; + x = 0.1; + y = 0.25; + w = 0.5; + h = .11; + }; + + class Title: Life_RscTitle { + colorBackground[] = {0, 0, 0, 0}; + idc = -1; + text = "$STR_Gang_Title"; + x = 0.1; + y = 0.2; + w = 0.5; + h = (1 / 25); + }; + + class CloseLoadMenu: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_Close"; + onButtonClick = "closeDialog 0;[] call life_fnc_p_updateMenu;"; + x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.5 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class GangCreateField: Life_RscButtonMenu { + idc = -1; + text = "$STR_Gang_Create"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call life_fnc_createGang"; + x = 0.27; + y = 0.40; + w = (6.25 / 40); + h = (1 / 25); + }; + + class CreateGangText: Life_RscEdit { + idc = 2522; + text = "$STR_Gang_YGN"; + x = 0.04 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.35; + w = (13 / 40); + h = (1 / 25); + }; + }; +}; \ No newline at end of file diff --git a/life_client/dialog/hud_nameTags.hpp b/life_client/dialog/hud_nameTags.hpp new file mode 100644 index 00000000..411855cf --- /dev/null +++ b/life_client/dialog/hud_nameTags.hpp @@ -0,0 +1,138 @@ +#define BaseIconID 78000 + +class Life_HUD_nameTags { + idd = -1; + duration = 1e+011; + name = "Life_HUD_nameTags"; + onLoad = "uiNamespace setVariable ['Life_HUD_nameTags',_this select 0]"; + objects[] = {}; + + class controls + { + class BaseIcon + { + idc = -1; + type = 13; + style = 0; + colorText[] = {1,1,1,1}; + colorBackground[] = {0,0,0,0}; + font = "PuristaMedium"; + text = ""; + size = 0.04; + shadow = 1.5; + w = 0; h = 0; + x = 0.1; y = 0.1; + }; + + class p1 : BaseIcon {idc = BaseIconID;}; + class p2 : BaseIcon {idc = BaseIconID + 1;}; + class p3 : BaseIcon {idc = BaseIconID + 2;}; + class p4 : BaseIcon {idc = BaseIconID + 3;}; + class p5 : BaseIcon {idc = BaseIconID + 4;}; + class p6 : BaseIcon {idc = BaseIconID + 5;}; + class p7 : BaseIcon {idc = BaseIconID + 6;}; + class p8 : BaseIcon {idc = BaseIconID + 7;}; + class p9 : BaseIcon {idc = BaseIconID + 8;}; + class p10 : BaseIcon {idc = BaseIconID + 9;}; + class p11 : BaseIcon {idc = BaseIconID + 10;}; + class p12 : BaseIcon {idc = BaseIconID + 11;}; + class p13 : BaseIcon {idc = BaseIconID + 12;}; + class p14 : BaseIcon {idc = BaseIconID + 13;}; + class p15 : BaseIcon {idc = BaseIconID + 14;}; + class p16 : BaseIcon {idc = BaseIconID + 15;}; + class p17 : BaseIcon {idc = BaseIconID + 16;}; + class p18 : BaseIcon {idc = BaseIconID + 17;}; + class p19 : BaseIcon {idc = BaseIconID + 18;}; + class p20 : BaseIcon {idc = BaseIconID + 19;}; + class p21 : BaseIcon {idc = BaseIconID + 20;}; + class p22 : BaseIcon {idc = BaseIconID + 21;}; + class p23 : BaseIcon {idc = BaseIconID + 22;}; + class p24 : BaseIcon {idc = BaseIconID + 23;}; + class p25 : BaseIcon {idc = BaseIconID + 24;}; + class p26 : BaseIcon {idc = BaseIconID + 25;}; + class p27 : BaseIcon {idc = BaseIconID + 26;}; + class p28 : BaseIcon {idc = BaseIconID + 27;}; + class p29 : BaseIcon {idc = BaseIconID + 28;}; + class p30 : BaseIcon {idc = BaseIconID + 29;}; + class p31 : BaseIcon {idc = BaseIconID + 30;}; + class p32 : BaseIcon {idc = BaseIconID + 31;}; + class p33 : BaseIcon {idc = BaseIconID + 32;}; + class p34 : BaseIcon {idc = BaseIconID + 33;}; + class p35 : BaseIcon {idc = BaseIconID + 34;}; + class p36 : BaseIcon {idc = BaseIconID + 35;}; + class p37 : BaseIcon {idc = BaseIconID + 36;}; + class p38 : BaseIcon {idc = BaseIconID + 37;}; + class p39 : BaseIcon {idc = BaseIconID + 38;}; + class p40 : BaseIcon {idc = BaseIconID + 39;}; + class p41 : BaseIcon {idc = BaseIconID + 40;}; + class p42 : BaseIcon {idc = BaseIconID + 41;}; + class p43 : BaseIcon {idc = BaseIconID + 42;}; + class p44 : BaseIcon {idc = BaseIconID + 43;}; + class p45 : BaseIcon {idc = BaseIconID + 44;}; + class p46 : BaseIcon {idc = BaseIconID + 45;}; + class p47 : BaseIcon {idc = BaseIconID + 46;}; + class p48 : BaseIcon {idc = BaseIconID + 47;}; + class p49 : BaseIcon {idc = BaseIconID + 48;}; + class p50 : BaseIcon {idc = BaseIconID + 49;}; + class p51 : BaseIcon {idc = BaseIconID + 50;}; + class p52 : BaseIcon {idc = BaseIconID + 51;}; + class p53 : BaseIcon {idc = BaseIconID + 52;}; + class p54 : BaseIcon {idc = BaseIconID + 53;}; + class p55 : BaseIcon {idc = BaseIconID + 54;}; + class p56 : BaseIcon {idc = BaseIconID + 55;}; + class p57 : BaseIcon {idc = BaseIconID + 56;}; + class p58 : BaseIcon {idc = BaseIconID + 57;}; + class p59 : BaseIcon {idc = BaseIconID + 58;}; + class p60 : BaseIcon {idc = BaseIconID + 59;}; + class p61 : BaseIcon {idc = BaseIconID + 60;}; + class p62 : BaseIcon {idc = BaseIconID + 61;}; + class p63 : BaseIcon {idc = BaseIconID + 62;}; + class p64 : BaseIcon {idc = BaseIconID + 63;}; + class p65 : BaseIcon {idc = BaseIconID + 64;}; + class p66 : BaseIcon {idc = BaseIconID + 65;}; + class p67 : BaseIcon {idc = BaseIconID + 66;}; + class p68 : BaseIcon {idc = BaseIconID + 67;}; + class p69 : BaseIcon {idc = BaseIconID + 68;}; + class p70 : BaseIcon {idc = BaseIconID + 69;}; + class p71 : BaseIcon {idc = BaseIconID + 70;}; + class p72 : BaseIcon {idc = BaseIconID + 71;}; + class p73 : BaseIcon {idc = BaseIconID + 72;}; + class p74 : BaseIcon {idc = BaseIconID + 73;}; + class p75 : BaseIcon {idc = BaseIconID + 74;}; + class p76 : BaseIcon {idc = BaseIconID + 75;}; + class p77 : BaseIcon {idc = BaseIconID + 76;}; + class p78 : BaseIcon {idc = BaseIconID + 77;}; + class p79 : BaseIcon {idc = BaseIconID + 78;}; + class p80 : BaseIcon {idc = BaseIconID + 79;}; + class p81 : BaseIcon {idc = BaseIconID + 80;}; + class p82 : BaseIcon {idc = BaseIconID + 81;}; + class p83 : BaseIcon {idc = BaseIconID + 82;}; + class p84 : BaseIcon {idc = BaseIconID + 83;}; + class p85 : BaseIcon {idc = BaseIconID + 84;}; + class p86 : BaseIcon {idc = BaseIconID + 85;}; + class p87 : BaseIcon {idc = BaseIconID + 86;}; + class p88 : BaseIcon {idc = BaseIconID + 87;}; + class p89 : BaseIcon {idc = BaseIconID + 88;}; + class p90 : BaseIcon {idc = BaseIconID + 89;}; + class p91 : BaseIcon {idc = BaseIconID + 90;}; + class p92 : BaseIcon {idc = BaseIconID + 91;}; + class p93 : BaseIcon {idc = BaseIconID + 92;}; + class p94 : BaseIcon {idc = BaseIconID + 93;}; + class p95 : BaseIcon {idc = BaseIconID + 94;}; + class p96 : BaseIcon {idc = BaseIconID + 95;}; + class p97 : BaseIcon {idc = BaseIconID + 96;}; + class p98 : BaseIcon {idc = BaseIconID + 97;}; + class p99 : BaseIcon {idc = BaseIconID + 98;}; + class p100 : BaseIcon {idc = BaseIconID + 99;}; + class p101 : BaseIcon {idc = BaseIconID + 100;}; + class p102 : BaseIcon {idc = BaseIconID + 101;}; + class p103 : BaseIcon {idc = BaseIconID + 102;}; + class p104 : BaseIcon {idc = BaseIconID + 103;}; + class p105 : BaseIcon {idc = BaseIconID + 104;}; + class p106 : BaseIcon {idc = BaseIconID + 105;}; + class p107 : BaseIcon {idc = BaseIconID + 106;}; + class p108 : BaseIcon {idc = BaseIconID + 107;}; + class p109 : BaseIcon {idc = BaseIconID + 108;}; + class p110 : BaseIcon {idc = BaseIconID + 109;}; + }; +}; \ No newline at end of file diff --git a/life_client/dialog/hud_stats.hpp b/life_client/dialog/hud_stats.hpp new file mode 100644 index 00000000..02280e14 --- /dev/null +++ b/life_client/dialog/hud_stats.hpp @@ -0,0 +1,88 @@ +#define ST_CENTER 0x02 +/* + Author: Daniel Stuart + + File: hud_stats.hpp +*/ + +class playerHUD { + idd = -1; + duration = 10e10; + movingEnable = 0; + fadein = 0; + fadeout = 0; + name = "playerHUD"; + onLoad = "uiNamespace setVariable ['playerHUD',_this select 0]"; + objects[] = {}; + controls[] = { + Life_RscBackground_HUD, + Life_RscProgress_HUDFood, + Life_RscProgress_HUDHealth, + Life_RscProgress_HUDWater, + Life_RscText_HUDFood, + Life_RscText_HUDHealth, + Life_RscText_HUDWater + }; + + /* Background */ + class Life_RscBackground_HUD: Life_RscBackground { + colorBackground[] = {0,0,0,0.35}; + x = 0.414815 * safezoneW + safezoneX; + y = 0.966667 * safezoneH + safezoneY; + w = 0.170371 * safezoneW; + h = 0.0333333 * safezoneH; + }; + + /* Progress Bars */ + class LIFE_RscProgress_HUDCommon: Life_RscProgress { + colorFrame[] = {0, 0, 0, 0.8}; + y = 0.972223 * safezoneH + safezoneY; + w = 0.0462964 * safezoneW; + h = 0.0222222 * safezoneH; + }; + + class Life_RscProgress_HUDFood: LIFE_RscProgress_HUDCommon { + idc = 2200; + colorBar[] = {0,0.50,0,0.65}; + x = 0.418981 * safezoneW + safezoneX; + }; + + class Life_RscProgress_HUDHealth: LIFE_RscProgress_HUDCommon { + idc = 2201; + colorBar[] = {0.85,0.05,0,0.65}; + x = 0.476852 * safezoneW + safezoneX; + }; + + class Life_RscProgress_HUDWater: LIFE_RscProgress_HUDCommon { + idc = 2202; + colorBar[] = {0,0.25,0.65,0.65}; + x = 0.534723 * safezoneW + safezoneX; + }; + + /* Texts */ + class Life_RscText_HUDCommon: Life_RscText { + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)"; + style = ST_CENTER; + y = 0.970023 * safezoneH + safezoneY; + w = 0.0462964 * safezoneW; + h = 0.0222222 * safezoneH; + }; + + class Life_RscText_HUDFood: Life_RscText_HUDCommon { + idc = 1200; + text = "$STR_HUD_Food"; + x = 0.418981 * safezoneW + safezoneX; + }; + + class Life_RscText_HUDHealth: Life_RscText_HUDCommon { + idc = 1201; + text = "$STR_HUD_Health"; + x = 0.476852 * safezoneW + safezoneX; + }; + + class Life_RscText_HUDWater: Life_RscText_HUDCommon { + idc = 1202; + text = "$STR_HUD_Water"; + x = 0.534723 * safezoneW + safezoneX; + }; +}; \ No newline at end of file diff --git a/life_client/dialog/impound.hpp b/life_client/dialog/impound.hpp new file mode 100644 index 00000000..6fcc8691 --- /dev/null +++ b/life_client/dialog/impound.hpp @@ -0,0 +1,129 @@ +class Life_impound_menu { + idd = 2800; + name="life_vehicle_shop"; + movingEnable = 0; + enableSimulation = 1; + onLoad = "ctrlShow [2330,false];"; + + class controlsBackground { + class Life_RscTitleBackground: Life_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class MainBackground: Life_RscText { + colorBackground[] = {0,0,0,0.7}; + idc = -1; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.8; + h = 0.7 - (22 / 250); + }; + + class Title: Life_RscTitle { + idc = 2801; + text = "$STR_GUI_Garage"; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class VehicleTitleBox: Life_RscText { + idc = -1; + text = "$STR_GUI_YourVeh"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + x = 0.11; + y = 0.26; + w = 0.3; + h = (1 / 25); + }; + + class VehicleInfoHeader: Life_RscText { + idc = 2830; + text = "$STR_GUI_VehInfo"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + x = 0.42; + y = 0.26; + w = 0.46; + h = (1 / 25); + }; + + class CloseBtn: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_Close"; + onButtonClick = "closeDialog 0;"; + x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class RetrieveCar: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_Retrieve"; + onButtonClick = "[] call life_fnc_unimpound;"; + x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class SellCar: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_Sell"; + onButtonClick = "[] call life_fnc_sellGarage; closeDialog 0;"; + x = 0.26 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + }; + + class controls { + class VehicleList: Life_RscListBox { + idc = 2802; + text = ""; + sizeEx = 0.04; + colorBackground[] = {0.1,0.1,0.1,0.9}; + onLBSelChanged = "_this call life_fnc_garageLBChange;"; + x = 0.11; + y = 0.302; + w = 0.303; + h = 0.49; + }; + + class vehicleInfomationList: Life_RscStructuredText { + idc = 2803; + text = ""; + sizeEx = 0.035; + x = 0.41; + y = 0.3; + w = 0.5; + h = 0.5; + }; + + class MainBackgroundHider: Life_RscText { + colorBackground[] = {0,0,0,1}; + idc = 2810; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.8; + h = 0.7 - (22 / 250); + }; + + class MainHideText: Life_RscText { + idc = 2811; + text = "$STR_ANOTF_QueryGarage"; + sizeEx = 0.06; + x = 0.24; + y = 0.5; + w = 0.6; + h = (1 / 15); + }; + }; +}; \ No newline at end of file diff --git a/life_client/dialog/key_chain.hpp b/life_client/dialog/key_chain.hpp new file mode 100644 index 00000000..5ae29120 --- /dev/null +++ b/life_client/dialog/key_chain.hpp @@ -0,0 +1,88 @@ +class Life_key_management { + idd = 2700; + name= "life_key_chain"; + movingEnable = 0; + enableSimulation = 1; + onLoad = "[] spawn life_fnc_keyMenu;"; + + class controlsBackground { + class Life_RscTitleBackground: Life_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.1; + y = 0.2; + w = 0.6; + h = (1 / 25); + }; + + class MainBackground: Life_RscText { + colorBackground[] = {0, 0, 0, 0.7}; + idc = -1; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.6; + h = 0.6 - (22 / 250); + }; + }; + + class controls { + class Title: Life_RscTitle { + colorBackground[] = {0, 0, 0, 0}; + idc = -1; + text = "$STR_Keys_Title"; + x = 0.1; + y = 0.2; + w = 0.6; + h = (1 / 25); + }; + + class KeyChainList: Life_RscListBox { + idc = 2701; + text = ""; + sizeEx = 0.035; + x = 0.12; + y = 0.26; + w = 0.56; + h = 0.370; + }; + + class CloseButtonKey: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_Close"; + onButtonClick = "closeDialog 0;"; + x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.8 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class NearPlayers: Life_RscCombo { + idc = 2702; + x = 0.26; + y = 0.645; + w = 0.275; + h = 0.03; + }; + + class DropKey: Life_RscButtonMenu { + idc = -1; + text = "$STR_Keys_DropKey"; + onButtonClick = "[] call life_fnc_keyDrop"; + x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.8 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class GiveKey: Life_RscButtonMenu { + idc = 2703; + text = "$STR_Keys_GiveKey"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call life_fnc_keyGive"; + x = 0.32; + y = 0.69; + w = (6.25 / 40); + h = (1 / 25); + }; + }; +}; \ No newline at end of file diff --git a/life_client/dialog/newsStation.hpp b/life_client/dialog/newsStation.hpp new file mode 100644 index 00000000..5e1504c6 --- /dev/null +++ b/life_client/dialog/newsStation.hpp @@ -0,0 +1,107 @@ +class life_news_broadcast { + idd = 100100; + name= "life_news_broadcast"; + movingEnable = 0; + enableSimulation = 1; + + class controlsBackground { + class Life_RscTitleBackground: Life_RscText { + colorBackground[] = {"(profileNamespace getVariable ['GUI_BCG_RGB_R',0.3843])", "(profileNamespace getVariable ['GUI_BCG_RGB_G',0.7019])", "(profileNamespace getVariable ['GUI_BCG_RGB_B',0.8862])", "(profileNamespace getVariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.1; + y = 0.2; + w = 0.64; + h = (1 / 25); + }; + + class MainBackground: Life_RscText { + colorBackground[] = {0, 0, 0, 0.7}; + idc = -1; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.64; + h = 0.3 - (5 / 250); + }; + }; + + class controls { + class Title: Life_RscTitle { + colorBackground[] = {0, 0, 0, 0}; + idc = -1; + text = "$STR_News_DialogTitle"; + x = 0.1; + y = 0.2; + w = 0.6; + h = (1 / 25); + }; + + class MsgHeader: Life_RscTitle { + colorBackground[] = {0, 0, 0, 0}; + idc = -1; + text = "$STR_News_MsgHeader"; + x = 0.1; + y = 0.25; + w = 0.6; + h = (1 / 25); + }; + + class MsgHeaderEdit: Life_RscEdit { + idc = 100101; + text = ""; + sizeEx = 0.035; + x = 0.11; + y = 0.3; + w = 0.62; + h = 0.03; + }; + + class MsgText: Life_RscTitle { + colorBackground[] = {0, 0, 0, 0}; + idc = -1; + text = "$STR_News_MsgContent"; + x = 0.1; + y = 0.33; + w = 0.6; + h = (1 /25); + }; + + class MsgContentEdit: Life_RscEdit { + idc = 100102; + text = ""; + sizeEx = 0.035; + x = 0.11; + y = 0.38; + w = 0.62; + h = 0.03; + }; + + class MessageInfo: Life_RscStructuredText { + colorBackground[] = {0, 0, 0, 0}; + idc = 100103; + text = ""; + x = 0.1; + y = 0.43; + w = 0.6; + h = .275; + }; + + class ConfirmButtonKey: Life_RscButtonMenu { + idc = 100104; + text = "$STR_News_Broadcast"; + x = (6.25 / 40) + (4.2 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.51 + (1 / 50); + w = (10.5 / 40); + h = (1 / 25); + }; + + class CloseButtonKey: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_Close"; + onButtonClick = "closeDialog 0;"; + x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.51 + (1 / 50); + w = (6.25 / 40); + h = (1 / 25); + }; + }; +}; \ No newline at end of file diff --git a/life_client/dialog/pInteraction.hpp b/life_client/dialog/pInteraction.hpp new file mode 100644 index 00000000..dfc0c7f5 --- /dev/null +++ b/life_client/dialog/pInteraction.hpp @@ -0,0 +1,255 @@ +#define BGX 0.35 +#define BGY 0.2 +#define BGW 0.46 + +class pInteraction_Menu { + idd = 37400; + movingEnable = 0; + enableSimulation = 1; + + class controlsBackground { + class RscTitleBackground: life_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = BGX; + y = BGY; + w = BGW; + h = (1 / 25); + }; + + class MainBackground: life_RscText { + idc = -1; + colorBackground[] = {0,0,0,0.7}; + x = BGX; + y = BGY + (11 / 250); + w = BGW; + h = 0.6 - (22 / 250) + 0.05; + }; + + class Title: life_RscTitle { + colorBackground[] = {0,0,0,0}; + idc = 37401; + text = "$STR_pInAct_Title"; + x = BGX; + y = BGY; + w = BGW; + h = (1 / 25); + }; + }; + + class controls { + class ButtonClose: Life_RscButtonMenu { + idc = -1; + //shortcuts[] = {0x00050000 + 2}; + text = "$STR_Global_Close"; + onButtonClick = "closeDialog 0;"; + x = BGX; + y = 0.8 - (1 / 25) + 0.05; + w = (6.25 / 40); + h = (1 / 25); + }; + + class ButtonOne: Life_RscButtonMenu { + idc = 37450; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + text = ""; + sizeEx = 0.025; + x = BGX + 0.03; + y = BGY + 0.07; + w = 0.4; + h = 0.038; + }; + + class ButtonTwo: Life_RscButtonMenu { + idc = 37451; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + text = ""; + sizeEx = 0.025; + x = BGX + 0.03; + y = BGY + 0.12; + w = 0.4; + h = 0.038; + }; + + class ButtonThree: Life_RscButtonMenu { + idc = 37452; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + text = ""; + sizeEx = 0.025; + x = BGX + 0.03; + y = BGY + 0.17; + w = 0.4; + h = 0.038; + }; + + class ButtonFour: Life_RscButtonMenu { + idc = 37453; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + text = ""; + sizeEx = 0.025; + x = BGX + 0.03; + y = BGY + 0.22; + w = 0.4; + h = 0.038; + }; + + class ButtonFive: Life_RscButtonMenu { + idc = 37454; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + text = ""; + sizeEx = 0.025; + x = BGX + 0.03; + y = BGY + 0.27; + w = 0.4; + h = 0.038; + }; + + class ButtonSix: Life_RscButtonMenu { + idc = 37455; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + text = ""; + sizeEx = 0.025; + x = BGX + 0.03; + y = BGY + 0.32; + w = 0.4; + h = 0.038; + }; + + class ButtonSeven: Life_RscButtonMenu { + idc = 37456; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + text = ""; + sizeEx = 0.025; + x = BGX + 0.03; + y = BGY + 0.37; + w = 0.4; + h = 0.038; + }; + + class ButtonEight: Life_RscButtonMenu { + idc = 37457; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + text = ""; + sizeEx = 0.025; + x = BGX + 0.03; + y = BGY + 0.42; + w = 0.4; + h = 0.038; + }; + }; +}; + +class vInteraction_Menu { + idd = 37400; + movingEnable = 0; + enableSimulation = 1; + + class controlsBackground { + class RscTitleBackground: life_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = BGX; + y = BGY; + w = BGW; + h = (1 / 25); + }; + + class MainBackground: life_RscText { + idc = -1; + colorBackground[] = {0,0,0,0.7}; + x = BGX; + y = BGY + (11 / 250); + w = BGW; + h = 0.6 - (22 / 250); + }; + + class Title: life_RscTitle { + colorBackground[] = {0,0,0,0}; + idc = 37401; + text = "$STR_vInAct_Title"; + x = BGX; + y = BGY; + w = BGW; + h = (1 / 25); + }; + }; + + class controls { + class ButtonClose: Life_RscButtonMenu { + idc = -1; + //shortcuts[] = {0x00050000 + 2}; + text = "$STR_Global_Close"; + onButtonClick = "closeDialog 0;"; + x = BGX; + y = 0.8 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class ButtonOne: Life_RscButtonMenu { + idc = 37450; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + text = ""; + sizeEx = 0.025; + x = BGX + 0.03; + y = BGY + 0.07; + w = 0.4; + h = 0.038; + }; + + class ButtonTwo: Life_RscButtonMenu { + idc = 37451; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + text = ""; + sizeEx = 0.025; + x = BGX + 0.03; + y = BGY + 0.12; + w = 0.4; + h = 0.038; + }; + + class ButtonThree: Life_RscButtonMenu { + idc = 37452; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + text = ""; + sizeEx = 0.025; + x = BGX + 0.03; + y = BGY + 0.17; + w = 0.4; + h = 0.038; + }; + + class ButtonFour: Life_RscButtonMenu { + idc = 37453; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + text = ""; + sizeEx = 0.025; + x = BGX + 0.03; + y = BGY + 0.22; + w = 0.4; + h = 0.038; + }; + + class ButtonFive: Life_RscButtonMenu { + idc = 37454; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + text = ""; + sizeEx = 0.025; + x = BGX + 0.03; + y = BGY + 0.27; + w = 0.4; + h = 0.038; + }; + + class ButtonSix: Life_RscButtonMenu { + idc = 37455; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + text = ""; + sizeEx = 0.025; + x = BGX + 0.03; + y = BGY + 0.32; + w = 0.4; + h = 0.038; + }; + }; +}; diff --git a/life_client/dialog/player_inv.hpp b/life_client/dialog/player_inv.hpp new file mode 100644 index 00000000..3158287b --- /dev/null +++ b/life_client/dialog/player_inv.hpp @@ -0,0 +1,279 @@ +#include "player_sys.sqf" + +class playerSettings { + idd = playersys_DIALOG; + movingEnable = 1; + enableSimulation = 1; + + class controlsBackground { + class Life_RscTitleBackground: Life_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class MainBackground: Life_RscText { + colorBackground[] = {0, 0, 0, 0.7}; + idc = -1; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.8; + h = 0.6 - (22 / 250); + }; + + class Title: Life_RscTitle { + colorBackground[] = {0, 0, 0, 0}; + idc = -1; + text = "$STR_PM_Title"; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class moneyStatusInfo: Life_RscStructuredText { + idc = 2015; + sizeEx = 0.020; + text = ""; + x = 0.105; + y = 0.30; + w = 0.3; + h = 0.6; + }; + + class PlayersName: Title { + idc = carry_weight; + style = 1; + text = ""; + }; + }; + + class controls { + class itemHeader: Life_RscText { + idc = -1; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + text = "$STR_PM_cItems"; + sizeEx = 0.04; + x = 0.62; + y = 0.26; + w = 0.275; + h = 0.04; + }; + + class licenseHeader: Life_RscText { + idc = -1; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + text = "$STR_PM_Licenses"; + sizeEx = 0.04; + x = 0.336; + y = 0.26; + w = 0.275; + h = 0.04; + }; + + class moneySHeader: Life_RscText { + idc = -1; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + text = "$STR_PM_MoneyStats"; + sizeEx = 0.04; + x = 0.11; + y = 0.26; + w = 0.219; + h = 0.04; + }; + + class itemList: Life_RscListBox { + idc = item_list; + sizeEx = 0.030; + x = 0.62; + y = 0.30; + w = 0.275; + h = 0.3; + }; + + class moneyEdit: Life_RscEdit { + idc = 2018; + text = "1"; + sizeEx = 0.030; + x = 0.12; + y = 0.42; + w = 0.18; + h = 0.03; + }; + + class NearPlayers: Life_RscCombo { + idc = 2022; + x = 0.12; + y = 0.46; + w = 0.18; + h = 0.03; + }; + + class moneyDrop: Life_RscButtonMenu { + idc = 2001; + text = "$STR_Global_Give"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call life_fnc_giveMoney"; + sizeEx = 0.025; + x = 0.135; + y = 0.50; + w = 0.13; + h = 0.036; + }; + + class itemEdit: Life_RscEdit { + idc = item_edit; + text = "1"; + sizeEx = 0.030; + x = 0.62; + y = 0.61; + w = 0.275; + h = 0.03; + + }; + + class iNearPlayers: Life_RscCombo { + idc = 2023; + x = 0.62; + y = 0.65; + w = 0.275; + h = 0.03; + }; + + class DropButton: Life_RscButtonMenu { + idc = 2002; + text = "$STR_Global_Give"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call life_fnc_giveItem;"; + x = 0.765; + y = 0.70; + w = (5.25 / 40); + h = (1 / 25); + }; + + class UseButton: Life_RscButtonMenu { + text = "$STR_Global_Use"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call life_fnc_useItem;"; + x = 0.62; + y = 0.70; + w = (5.25 / 40); + h = (1 / 25); + }; + + class RemoveButton: Life_RscButtonMenu { + text = "$STR_Global_Remove"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call life_fnc_removeItem;"; + x = 0.475; + y = 0.70; + w = (5.25 / 40); + h = (1 / 25); + }; + + class ButtonClose: Life_RscButtonMenu { + idc = -1; + //shortcuts[] = {0x00050000 + 2}; + text = "$STR_Global_Close"; + onButtonClick = "closeDialog 0;"; + x = 0.1; + y = 0.8 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class ButtonSettings: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_Settings"; + onButtonClick = "[] call life_fnc_settingsMenu;"; + x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.8 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class ButtonMyGang: Life_RscButtonMenu { + idc = 2011; + text = "$STR_PM_MyGang"; + onButtonClick = "if (isNil ""life_action_gangInUse"") then {if (isNil {(group player) getVariable ""gang_owner""}) then {createDialog ""Life_Create_Gang_Diag"";} else {[] spawn life_fnc_gangMenu;};};"; + x = 0.1 + (6.25 / 19.8) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.8 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class Licenses_Menu : Life_RscControlsGroup { + idc = -1; + w = 0.28; + h = 0.38; + x = 0.34; + y = 0.30; + + class Controls { + class Life_Licenses: Life_RscStructuredText { + idc = 2014; + sizeEx = 0.020; + text = ""; + x = 0; + y = 0; + w = 0.27; + h = 0.65; + }; + }; + }; + + class ButtonGangList: Life_RscButtonMenu { + idc = 2012; + text = "$STR_PM_WantedList"; + onButtonClick = "[] call life_fnc_wantedMenu"; + x = 0.1 + (6.25 / 19.8) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.8 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class ButtonKeys: Life_RscButtonMenu { + idc = 2013; + text = "$STR_PM_KeyChain"; + onButtonClick = "createDialog ""Life_key_management"";"; + x = 0.26 + (6.25 / 19.8) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.8 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class ButtonCell: Life_RscButtonMenu { + idc = 2014; + text = "$STR_PM_CellPhone"; + onButtonClick = "createDialog ""Life_cell_phone"";"; + x = 0.42 + (6.25 / 19.8) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.8 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class ButtonAdminMenu: Life_RscButtonMenu { + idc = 2021; + text = "$STR_PM_AdminMenu"; + onButtonClick = "createDialog ""life_admin_menu"";"; + x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.805; + w = (6.25 / 40); + h = (1 / 25); + }; + + class ButtonSyncData: Life_RscButtonMenu { + idc = -1; + //shortcuts[] = {0x00050000 + 2}; + text = "$STR_PM_SyncData"; + onButtonClick = "[] call SOCK_fnc_syncData;"; + x = 0.1; + y = 0.805; + w = (6.25 / 40); + h = (1 / 25); + }; + }; +}; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/player_sys.sqf b/life_client/dialog/player_sys.sqf similarity index 77% rename from Altis_Life.Altis/dialog/player_sys.sqf rename to life_client/dialog/player_sys.sqf index 62038bf4..1b885db2 100644 --- a/Altis_Life.Altis/dialog/player_sys.sqf +++ b/life_client/dialog/player_sys.sqf @@ -1,3 +1,10 @@ +/* + File: player_sys.sqf + Author: + + Description: + +*/ #define playersys_DIALOG 2001 #define money_text 2002 #define water_text 2003 diff --git a/life_client/dialog/progress.hpp b/life_client/dialog/progress.hpp new file mode 100644 index 00000000..64e5a8b6 --- /dev/null +++ b/life_client/dialog/progress.hpp @@ -0,0 +1,69 @@ +class life_progress { + name = "life_progress"; + idd = 38200; + fadein=0; + duration = 99999999999; + fadeout=0; + movingEnable = 0; + onLoad="uiNamespace setVariable ['life_progress',_this select 0]"; + objects[]={}; + + class controlsBackground { + class background: Life_RscText { + idc = -1; + colorBackground[] = {0,0,0,0.7}; + x = 0.38140 * safezoneW + safezoneX; + y = 0.06 * safezoneH + safezoneY; + w = 0.65; + h = 0.05; + }; + class ProgressBar: Life_RscProgress { + idc = 38201; + x = 0.38140 * safezoneW + safezoneX; + y = 0.06 * safezoneH + safezoneY; + w = 0.65; + h = 0.05; + }; + + class ProgressText: Life_RscText { + idc = 38202; + text = "Servicing Chopper (50%)..."; + x = 0.386 * safezoneW + safezoneX; + y = 0.0635 * safezoneH + safezoneY; + w = 0.65; + h = (1 / 25); + }; + }; +}; + +class life_timer { + name = "life_timer"; + idd = 38300; + fadeIn = 1; + duration = 99999999999; + fadeout = 1; + movingEnable = 0; + onLoad = "uiNamespace setVariable ['life_timer',_this select 0]"; + objects[] = {}; + + class controlsBackground { + class TimerIcon: life_RscPicture { + idc = -1; + text = "\a3\ui_f\data\IGUI\RscTitles\MPProgress\timer_ca.paa"; + x = 0.00499997 * safezoneW + safezoneX; + y = 0.291 * safezoneH + safezoneY; + w = 0.04; + h = 0.045; + }; + + class TimerText: Life_RscText { + colorBackground[] = {0,0,0,0}; + idc = 38301; + text = ""; + x = 0.0204688 * safezoneW + safezoneX; + y = 0.2778 * safezoneH + safezoneY; + w = 0.09125 * safezoneW; + h = 0.055 * safezoneH; + }; + }; +}; \ No newline at end of file diff --git a/life_client/dialog/settings.hpp b/life_client/dialog/settings.hpp new file mode 100644 index 00000000..593eee65 --- /dev/null +++ b/life_client/dialog/settings.hpp @@ -0,0 +1,201 @@ +class SettingsMenu { + idd = 2900; + name = "SettingsMenu"; + movingEnable = 1; + enableSimulation = 1; + + class controlsBackground { + class RscTitleBackground: Life_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.3; + y = 0.2; + w = 0.5; + h = (1 / 25); + }; + + class RscMainBackground: Life_RscText { + colorBackground[] = {0,0,0,0.7}; + idc = -1; + x = 0.3; + y = 0.2 + (11 / 250); + w = 0.5; + h = 0.48 - (22 / 250); + }; + + class PlayerTagsHeader: Life_RscText { + idc = -1; + text = "$STR_SM_PlayerTags"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + x = 0.30; + y = 0.43; + w = 0.35; + h = (1 / 25); + }; + + class SideChatHeader : PlayerTagsHeader { + idc = -1; + text = "$STR_SM_SC"; + y = 0.48; + }; + + class RevealNearestHeader : PlayerTagsHeader { + idc = -1; + text = "$STR_SM_RNObj"; + y = 0.53; + }; + + class BroacastHeader : PlayerTagsHeader { + idc = -1; + text = "$STR_SM_BCSW"; + y = 0.58; + }; + + class Title: Life_RscTitle { + idc = -1; + colorBackground[] = {0,0,0,0}; + text = "$STR_SM_Title"; + x = 0.3; + y = 0.2; + w = 0.5; + h = (1 / 25); + }; + }; + + class controls { + class VDonFoot: Life_RscText { + idc = -1; + text = "$STR_SM_onFoot"; + x = 0.32; + y = 0.258; + w = 0.275; + h = 0.04; + }; + + class VDinCar: Life_RscText { + idc = -1; + text = "$STR_SM_inCar"; + x = 0.32; + y = 0.305; + w = 0.275; + h = 0.04; + }; + + class VDinAir: Life_RscText { + idc = -1; + text = "$STR_SM_inAir"; + x = 0.32; + y = 0.355; + w = 0.275; + h = 0.04; + }; + + class VD_onfoot_slider: life_RscXSliderH { + idc = 2901; + text = ""; + onSliderPosChanged = "[0,_this select 1] call life_fnc_s_onSliderChange;"; + tooltip = "$STR_SM_ToolTip1"; + x = 0.42; + y = 0.30 - (1 / 25); + w = "9 *(((safezoneW / safezoneH) min 1.2) / 40)"; + h = "1 *((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + }; + + class VD_onfoot_value: Life_RscEdit { + idc = 2902; + text = ""; + onChar = "[_this select 0, _this select 1,'ground',false] call life_fnc_s_onChar;"; + onKeyUp = "[_this select 0, _this select 1,'ground',true] call life_fnc_s_onChar;"; + x = .70; + y = .258; + w = .08; + h = .04; + }; + + class VD_car_slider: life_RscXSliderH { + idc = 2911; + text = ""; + onSliderPosChanged = "[1,_this select 1] call life_fnc_s_onSliderChange;"; + tooltip = "$STR_SM_ToolTip2"; + x = 0.42; + y = 0.35 - (1 / 25); + w = "9 *(((safezoneW / safezoneH) min 1.2) / 40)"; + h = "1 *((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + }; + + class VD_car_value: Life_RscEdit { + idc = 2912; + text = ""; + onChar = "[_this select 0, _this select 1,'vehicle',false] call life_fnc_s_onChar;"; + onKeyUp = "[_this select 0, _this select 1,'vehicle',true] call life_fnc_s_onChar;"; + x = .70; + y = .31; + w = .08; + h = .04; + }; + + class VD_air_slider: life_RscXSliderH { + idc = 2921; + text = ""; + onSliderPosChanged = "[2,_this select 1] call life_fnc_s_onSliderChange;"; + tooltip = "$STR_SM_ToolTip3"; + x = 0.42; + y = 0.40 - (1 / 25); + w = "9 *(((safezoneW / safezoneH) min 1.2) / 40)"; + h = "1 *((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + }; + + class VD_air_value: Life_RscEdit { + idc = 2922; + text = ""; + onChar = "[_this select 0, _this select 1,'air',false] call life_fnc_s_onChar;"; + onKeyUp = "[_this select 0, _this select 1,'air',true] call life_fnc_s_onChar;"; + x = 0.70; + y = 0.36; + w = .08; + h = .04; + }; + + class PlayerTagsONOFF: Life_Checkbox { + tooltip = "$STR_GUI_PlayTags"; + idc = 2970; + sizeEx = 0.04; + onCheckedChanged = "['tags',_this select 1] call life_fnc_s_onCheckedChange;"; + x = 0.65; + y = 0.43; + + }; + + class SideChatONOFF: PlayerTagsONOFF { + idc = 2971; + tooltip = "$STR_GUI_SideSwitch"; + onCheckedChanged = "['sidechat',_this select 1] call life_fnc_s_onCheckedChange;"; + y = 0.48; + }; + + class RevealONOFF : PlayerTagsONOFF { + idc = 2972; + tooltip = "$STR_GUI_PlayerReveal"; + onCheckedChanged = "['objects',_this select 1] call life_fnc_s_onCheckedChange;"; + y = 0.53; + }; + + class BroadcastONOFF : PlayerTagsONOFF { + idc = 2973; + tooltip = "$STR_GUI_BroadcastSwitch"; + onCheckedChanged = "['broadcast',_this select 1] call life_fnc_s_onCheckedChange;"; + y = 0.58; + }; + + class ButtonClose: Life_RscButtonMenu { + idc = -1; + //shortcuts[] = {0x00050000 + 2}; + text = "$STR_Global_Close"; + onButtonClick = "closeDialog 0;"; + x = 0.48; + y = 0.68 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + }; +}; diff --git a/life_client/dialog/shop_items.hpp b/life_client/dialog/shop_items.hpp new file mode 100644 index 00000000..6020462e --- /dev/null +++ b/life_client/dialog/shop_items.hpp @@ -0,0 +1,138 @@ +class shops_menu { + idd = 2400; + name= "shops_menu"; + movingEnable = 0; + enableSimulation = 1; + + class controlsBackground { + class Life_RscTitleBackground: Life_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class MainBackground: Life_RscText { + colorBackground[] = {0, 0, 0, 0.7}; + idc = -1; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.8; + h = 0.6 - (22 / 250); + }; + + class vasText: Life_RscText { + idc = -1; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + text = "$STR_VS_SI"; + sizeEx = 0.04; + x = 0.12; + y = 0.27; + w = 0.350; + h = 0.04; + }; + + class vasgText: Life_RscText { + idc = -1; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + text = "$STR_VS_PI"; + sizeEx = 0.04; + x = 0.53; + y = 0.27; + w = 0.350; + h = 0.04; + }; + }; + + class controls { + class itemList: Life_RscListBox { + idc = 2401; + text = ""; + sizeEx = 0.030; + x = 0.12; + y = 0.31; + w = 0.350; + h = 0.340; + }; + + class pItemlist: Life_RscListBox { + idc = 2402; + text = ""; + sizeEx = 0.030; + x = 0.53; + y = 0.31; + w = 0.350; + h = 0.340; + }; + + class Title: Life_RscTitle { + colorBackground[] = {0, 0, 0, 0}; + idc = 2403; + text = ""; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class PlayersName: Title { + idc = 601; + style = 1; + text = ""; + }; + + class buyEdit: Life_RscEdit { + idc = 2404; + text = "1"; + sizeEx = 0.030; + x = 0.12; + y = 0.66; + w = 0.35; + h = 0.03; + }; + + class sellEdit: Life_RscEdit { + idc = 2405; + text = "1"; + sizeEx = 0.030; + x = 0.53; + y = 0.66; + w = 0.35; + h = 0.03; + }; + + class ButtonAddG: Life_RscButtonMenu { + idc = -1; + text = "$STR_VS_BuyItem"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] spawn life_fnc_virt_buy;"; + x = 0.12 + (0.35 / 2) - ((6.25 / 40) / 2); + y = 0.70; + w = (6.25 / 40); + h = (1 / 25); + }; + + class ButtonRemoveG: Life_RscButtonMenu { + idc = -1; + text = "$STR_VS_SellItem"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call life_fnc_virt_sell"; + x = 0.53 + (0.35 / 2) - ((6.25 / 40) / 2); + y = 0.70; + w = (6.25 / 40); + h = (1 / 25); + }; + + class ButtonClose: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_Close"; + onButtonClick = "closeDialog 0;"; + x = 0.1; + y = 0.8 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + }; +}; \ No newline at end of file diff --git a/life_client/dialog/shops.hpp b/life_client/dialog/shops.hpp new file mode 100644 index 00000000..70fec331 --- /dev/null +++ b/life_client/dialog/shops.hpp @@ -0,0 +1,106 @@ +class life_weapon_shop { + idd = 38400; + movingEnable = 0; + enableSimulation = 1; + + class controlsBackground { + class RscTitleBackground: Life_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.1; + y = 0.2; + w = 0.32; + h = (1 / 25); + }; + + class MainBackground: Life_RscText { + colorBackground[] = {0,0,0,0.7}; + idc = -1; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.32; + h = 0.6 - (22 / 250); + }; + + class Title: Life_RscTitle { + colorBackground[] = {0,0,0,0}; + idc = 38401; + text = ""; + x = 0.1; + y = 0.2; + w = 0.32; + h = (1 / 25); + }; + + class itemInfo: Life_RscStructuredText { + idc = 38404; + text = ""; + sizeEx = 0.035; + x = 0.11; + y = 0.68; + w = 0.2; + h = 0.2; + }; + + class FilterList: Life_RscCombo { + idc = 38402; + onLBSelChanged = "_this call life_fnc_weaponShopFilter"; + x = 0.11; + y = 0.64; + w = 0.3; + h = 0.035; + }; + }; + + class controls { + class itemList: Life_RscListBox { + idc = 38403; + onLBSelChanged = "_this call life_fnc_weaponShopSelection"; + sizeEx = 0.035; + x = 0.11; + y = 0.25; + w = 0.3; + h = 0.38; + }; + + class ButtonBuySell: Life_RscButtonMenu { + idc = 38405; + text = "$STR_Global_Buy"; + onButtonClick = "[] spawn life_fnc_weaponShopBuySell; true"; + x = 0.1; + y = 0.8 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class ButtonClose: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_Close"; + onButtonClick = "closeDialog 0;"; + x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.8 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class ButtonMags: Life_RscButtonMenu { + idc = 38406; + text = "$STR_Global_Mags"; + onButtonClick = "_this call life_fnc_weaponShopMags; _this call life_fnc_weaponShopFilter"; + x = 0.1; + y = 0.8 + (1 / 250 / (safezoneW / safezoneH)); + w = (6.25 / 40); + h = (1 / 25); + }; + + class ButtonAccs: Life_RscButtonMenu { + idc = 38407; + text = "$STR_Global_Accs"; + onButtonClick = "_this call life_fnc_weaponShopAccs; _this call life_fnc_weaponShopFilter"; + x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.8 + (1 / 250 / (safezoneW / safezoneH)); + w = (6.25 / 40); + h = (1 / 25); + }; + }; +}; \ No newline at end of file diff --git a/life_client/dialog/spawnSelection.hpp b/life_client/dialog/spawnSelection.hpp new file mode 100644 index 00000000..b6e65c23 --- /dev/null +++ b/life_client/dialog/spawnSelection.hpp @@ -0,0 +1,81 @@ +class life_spawn_selection { + idd = 38500; + movingEnable = 0; + enableSimulation = 1; + + class controlsBackground { + class life_RscTitleBackground: Life_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class MainBackground: Life_RscText { + colorBackground[] = {0,0,0,0.7}; + idc = -1; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.8; + h = 0.6 - (22 / 250); + }; + + class Title: Life_RscTitle { + colorBackground[] = {0,0,0,0}; + idc = -1; + text = "$STR_Spawn_Title"; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class SpawnPointTitle: Title { + idc = 38501; + style = 1; + text = ""; + }; + + class MapView : Life_RscMapControl { + idc = 38502; + x = 0.328; + y = 0.26; + w = 0.56; + h = 0.56 - (22 / 250); + maxSatelliteAlpha = 0.75;//0.75; + alphaFadeStartScale = 1.15;//0.15; + alphaFadeEndScale = 1.29;//0.29; + }; + }; + + class controls { + class SpawnPointList: Life_RscListNBox { + idc = 38510; + text = ""; + sizeEx = 0.041; + coloumns[] = {0,0,0.9}; + drawSideArrows = 0; + idcLeft = -1; + idcRight = -1; + rowHeight = 0.050; + x = 0.105; + y = 0.26; + w = (8.8 / 40); + h = (10 / 25); + onLBSelChanged = "_this call life_fnc_spawnPointSelected;"; + }; + + class spawnButton: Life_RscButtonMenu { + idc = -1; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + text = "$STR_Spawn_Spawn"; + onButtonClick = "[] call life_fnc_spawnConfirm"; + x = 0.11; + y = 0.69; + w = (8 / 40); + h = (1 / 25); + }; + }; +}; \ No newline at end of file diff --git a/life_client/dialog/ticket.hpp b/life_client/dialog/ticket.hpp new file mode 100644 index 00000000..34fe7655 --- /dev/null +++ b/life_client/dialog/ticket.hpp @@ -0,0 +1,120 @@ +class Life_ticket_give { + idd = 2650; + name = "life_ticket_give"; + movingEnable = 0; + enableSimulation = 1; + + class controlsBackground { + class Life_RscTitleBackground: Life_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.3; + y = 0.2; + w = 0.47; + h = (1 / 25); + }; + + class MainBackground: Life_RscText { + colorBackground[] = {0, 0, 0, 0.7}; + idc = -1; + x = 0.3; + y = 0.2 + (11 / 250); + w = 0.47; + h = 0.3 - (22 / 250); + }; + }; + + class controls { + class Title: Life_RscTitle { + colorBackground[] = {0, 0, 0, 0}; + idc = 2651; + text = ""; + x = 0.3; + y = 0.2; + w = 0.6; + h = (1 / 25); + }; + + class moneyEdit: Life_RscEdit { + idc = 2652; + text = "100"; + sizeEx = 0.030; + x = 0.40; + y = 0.30; + w = 0.25; + h = 0.03; + }; + + class payTicket: Life_RscButtonMenu { + idc = -1; + text = "$STR_Ticket_GiveTicket"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call life_fnc_ticketGive"; + x = 0.45; + y = 0.35; + w = (6.25 / 40); + h = (1 / 25); + }; + }; +}; + +class Life_ticket_pay { + idd = 2600; + name = "life_ticket_pay"; + movingEnable = 0; + enableSimulation = 1; + + class controlsBackground { + class Life_RscTitleBackground: Life_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.3; + y = 0.2; + w = 0.47; + h = (1 / 25); + }; + + class MainBackground: Life_RscText { + colorBackground[] = {0, 0, 0, 0.7}; + idc = -1; + x = 0.3; + y = 0.2 + (11 / 250); + w = 0.47; + h = 0.3 - (22 / 250); + }; + }; + + class controls { + class InfoMsg: Life_RscStructuredText { + idc = 2601; + sizeEx = 0.020; + text = ""; + x = 0.287; + y = 0.2 + (11 / 250); + w = 0.5; + h = 0.12; + }; + + class payTicket: Life_RscButtonMenu { + idc = -1; + text = "$STR_Ticket_PayTicket"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call life_fnc_ticketPay;"; + x = 0.2 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.42 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class refuseTicket: Life_RscButtonMenu { + idc = -1; + text = "$STR_Ticket_RefuseTicket"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "closeDialog 0;"; + x = 0.4 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.42 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + }; +}; \ No newline at end of file diff --git a/life_client/dialog/trunk.hpp b/life_client/dialog/trunk.hpp new file mode 100644 index 00000000..6db0a557 --- /dev/null +++ b/life_client/dialog/trunk.hpp @@ -0,0 +1,140 @@ +class TrunkMenu { + idd = 3500; + name = "TrunkMenu"; + movingEnable = 0; + enableSimulation = 1; + + class controlsBackground { + class RscTitleBackground: Life_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.1; + y = 0.2; + w = 0.7; + h = (1 / 25); + }; + + class RscBackground: Life_RscText { + colorBackground[] = {0, 0, 0, 0.7}; + idc = -1; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.7; + h = 0.7 - (22 / 250); + }; + + class RscTitleText: Life_RscTitle { + colorBackground[] = {0, 0, 0, 0}; + idc = 3501; + text = ""; + x = 0.1; + y = 0.2; + w = 0.7; + h = (1 / 25); + }; + + class VehicleWeight : RscTitleText { + idc = 3504; + style = 1; + text = ""; + }; + + class RscTrunkText: Life_RscText { + idc = -1; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + text = "$STR_Trunk_TInventory"; + sizeEx = 0.04; + x = 0.11; + y = 0.25; + w = 0.3; + h = 0.04; + }; + + class RscPlayerText: Life_RscText { + idc = -1; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + text = "$STR_Trunk_PInventory"; + sizeEx = 0.04; + x = 0.49; + y = 0.25; + w = 0.3; + h = 0.04; + }; + }; + + class Controls { + class TrunkGear: Life_RscListBox { + idc = 3502; + text = ""; + sizeEx = 0.030; + x = 0.11; + y = 0.29; + w = 0.3; + h = 0.42; + }; + + class PlayerGear: Life_RscListBox { + idc = 3503; + text = ""; + sizeEx = 0.030; + + x = 0.49; + y = 0.29; + w = 0.3; + h = 0.42; + }; + + class TrunkEdit: Life_RscEdit { + idc = 3505; + text = "1"; + sizeEx = 0.030; + x = 0.11; + y = 0.72; + w = 0.3; + h = 0.03; + }; + + class PlayerEdit: Life_RscEdit { + idc = 3506; + text = "1"; + sizeEx = 0.030; + x = 0.49; + y = 0.72; + w = 0.3; + h = 0.03; + }; + + class TakeItem: Life_RscButtonMenu { + idc = -1; + text = "$STR_Trunk_Take"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call life_fnc_vehTakeItem;"; + x = 0.19; + y = 0.78; + w = (6.25 / 40); + h = (1 / 25); + }; + + class StoreItem: Life_RscButtonMenu { + idc = -1; + text = "$STR_Trunk_Store"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; + onButtonClick = "[] call life_fnc_vehStoreItem;"; + x = 0.57; + y = 0.78; + w = (6.25 / 40); + h = (1 / 25); + }; + + class ButtonClose: Life_RscButtonMenu { + idc = -1; + //shortcuts[] = {0x00050000 + 2}; + text = "$STR_Global_Close"; + onButtonClick = "closeDialog 0;"; + x = 0.1; + y = 0.9 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + }; +}; \ No newline at end of file diff --git a/life_client/dialog/veh_shop.hpp b/life_client/dialog/veh_shop.hpp new file mode 100644 index 00000000..a4fb9f26 --- /dev/null +++ b/life_client/dialog/veh_shop.hpp @@ -0,0 +1,90 @@ +class Life_vehicle_shop { + idd = 2300; + name= "life_impound_menu"; + movingEnable = 0; + enableSimulation = 1; + //onLoad = "[] execVM 'core\client\keychain\init.sqf'"; + + class controlsBackground { + class Life_RscTitleBackground: Life_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class MainBackground: Life_RscText { + colorBackground[] = {0, 0, 0, 0.7}; + idc = -1; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.8; + h = 0.6 - (22 / 250); + }; + }; + + class controls { + class Title: Life_RscTitle { + colorBackground[] = {0, 0, 0, 0}; + idc = 2301; + text = ""; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class VehicleList: Life_RscListBox { + idc = 2302; + text = ""; + sizeEx = 0.035; + colorBackground[] = {0,0,0,0}; + onLBSelChanged = "[_this] call life_fnc_vehicleColorList"; + x = 0.12; + y = 0.26; + w = 0.76; + h = 0.4; + }; + + class ColorList: Life_RscCombo { + idc = 2303; + x = 0.42; + y = 0.68; + w = 0.275; + h = 0.03; + }; + + class CloseButtonKey: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_Close"; + onButtonClick = "closeDialog 0;"; + x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.8 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class GetCar: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_Buy"; + onButtonClick = "[] spawn life_fnc_vehicleShopBuy"; + x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.8 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class GetCarGarage: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_BuyPerm"; + onButtonClick = "[] spawn life_fnc_vehicleShopBuySave"; + x = 0.26 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.8 - (1 / 25); + w = (10 / 40); + h = (1 / 25); + }; + + }; +}; \ No newline at end of file diff --git a/life_client/dialog/vehicleShop.hpp b/life_client/dialog/vehicleShop.hpp new file mode 100644 index 00000000..e5ca2d5e --- /dev/null +++ b/life_client/dialog/vehicleShop.hpp @@ -0,0 +1,110 @@ +class Life_Vehicle_Shop_v2 { + idd = 2300; + name="life_vehicle_shop"; + movingEnabled = 0; + enableSimulation = 1; + onLoad = "ctrlShow [2330,false];"; + + class controlsBackground { + class Life_RscTitleBackground : Life_RscText { + colorBackground[] = {"(profileNamespace getVariable ['GUI_BCG_RGB_R',0.3843])", "(profileNamespace getVariable ['GUI_BCG_RGB_G',0.7019])", "(profileNamespace getVariable ['GUI_BCG_RGB_B',0.8862])", "(profileNamespace getVariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class MainBackground : Life_RscText { + colorBackground[] = {0,0,0,0.7}; + idc = -1; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.8; + h = 0.7 - (22 / 250); + }; + + class Title : Life_RscTitle { + idc = 2301; + text = ""; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class VehicleTitleBox : Life_RscText { + idc = -1; + text = "$STR_GUI_ShopStock"; + colorBackground[] = {"(profileNamespace getVariable ['GUI_BCG_RGB_R',0.3843])", "(profileNamespace getVariable ['GUI_BCG_RGB_G',0.7019])", "(profileNamespace getVariable ['GUI_BCG_RGB_B',0.8862])", "(profileNamespace getVariable ['GUI_BCG_RGB_A',0.7])"}; + x = 0.11; y = 0.26; + w = 0.3; + h = (1 / 25); + }; + + class VehicleInfoHeader : Life_RscText { + idc = 2330; + text = "$STR_GUI_VehInfo"; + colorBackground[] = {"(profileNamespace getVariable ['GUI_BCG_RGB_R',0.3843])", "(profileNamespace getVariable ['GUI_BCG_RGB_G',0.7019])", "(profileNamespace getVariable ['GUI_BCG_RGB_B',0.8862])", "(profileNamespace getVariable ['GUI_BCG_RGB_A',0.7])"}; + x = 0.42; y = 0.26; + w = 0.46; + h = (1 / 25); + }; + + class CloseBtn : Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_Close"; + onButtonClick = "closeDialog 0;"; + x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class RentCar : Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_RentVeh"; + onButtonClick = "[false] spawn life_fnc_vehicleShopBuy;"; + x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class BuyCar : life_RscButtonMenu { + idc = 2309; + text = "$STR_Global_Buy"; + onButtonClick = "[true] spawn life_fnc_vehicleShopBuy;"; + x = 0.26 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + }; + + class controls { + class VehicleList : Life_RscListBox { + idc = 2302; + text = ""; + sizeEx = 0.04; + colorBackground[] = {0.1,0.1,0.1,0.9}; + onLBSelChanged = "_this call life_fnc_vehicleShopLBChange"; + x = 0.11; y = 0.302; + w = 0.303; h = 0.49; + }; + + class ColorList : Life_RscCombo { + idc = 2304; + x = 0.11; y = 0.8; + w = 0.303; h = 0.03; + }; + + class vehicleInfomationList : Life_RscStructuredText { + idc = 2303; + text = ""; + sizeEx = 0.035; + x = 0.41; y = 0.3; + w = 0.5; h = 0.5; + }; + }; +}; diff --git a/life_client/dialog/vehicleShop3D.hpp b/life_client/dialog/vehicleShop3D.hpp new file mode 100644 index 00000000..97048b16 --- /dev/null +++ b/life_client/dialog/vehicleShop3D.hpp @@ -0,0 +1,120 @@ +class Life_Vehicle_Shop_v2_3D { + idd = 2300; + name="life_vehicle_shop"; + movingEnable = 0; + enableSimulation = 1; + onLoad = "ctrlShow [2330,false];"; + onUnLoad = "[] call life_fnc_vehicleShopEnd3DPreview"; + + class controlsBackground { + class MainBackground: Life_RscText { + colorBackground[] = {0,0,0,0.7}; + idc = -1; + x = 0.0204687 * safezoneW + safezoneX; + y = 0.06 * safezoneH + safezoneY; + w = 0.149531 * safezoneW; + h = 0.638 * safezoneH; + }; + + class SecondBackground: Life_RscText { + colorBackground[] = {0,0,0,0.7}; + idc = -1; + x = 0.809375 * safezoneW + safezoneX; + y = 0.06 * safezoneH + safezoneY; + w = 0.190781 * safezoneW; + h = 0.341 * safezoneH; + }; + + class Title: Life_RscTitle { + idc = 2301; + text = ""; + x = 0.0204687 * safezoneW + safezoneX; + y = 0.027 * safezoneH + safezoneY; + w = 0.144375 * safezoneW; + h = 0.033 * safezoneH; + }; + + class VehicleTitleBox: Life_RscText { + idc = -1; + text = "$STR_GUI_ShopStock"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + x = 0.0204687 * safezoneW + safezoneX; + y = 0.06 * safezoneH + safezoneY; + w = 0.149531 * safezoneW; + h = 0.033 * safezoneH; + }; + + class VehicleInfoHeader: Life_RscText { + idc = 2330; + text = "$STR_GUI_VehInfo"; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + x = 0.809375 * safezoneW + safezoneX; + y = 0.058 * safezoneH + safezoneY; + w = 0.190781 * safezoneW; + h = 0.022 * safezoneH; + }; + + class CloseBtn: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_Close"; + onButtonClick = "closeDialog 0;"; + x = 0.0204687 * safezoneW + safezoneX; + y = 0.669387 * safezoneH + safezoneY; + w = 0.0721724 * safezoneW; + h = 0.0219957 * safezoneH; + }; + + class RentCar: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_RentVeh"; + onButtonClick = "[false] spawn life_fnc_vehicleShopBuy;"; + x = 0.0964687 * safezoneW + safezoneX; + y = 0.636393 * safezoneH + safezoneY; + w = 0.0721724 * safezoneW; + h = 0.0219957 * safezoneH; + }; + + class BuyCar: Life_RscButtonMenu { + idc = 2309; + text = "$STR_Global_Buy"; + onButtonClick = "[true] spawn life_fnc_vehicleShopBuy;"; + x = 0.0204687 * safezoneW + safezoneX; + y = 0.636393 * safezoneH + safezoneY; + w = 0.0721724 * safezoneW; + h = 0.0219957 * safezoneH; + }; + }; + + class controls { + class VehicleList: Life_RscListBox { + idc = 2302; + text = ""; + sizeEx = 0.04; + colorBackground[] = {0.1,0.1,0.1,0.9}; + onLBSelChanged = "_this call life_fnc_vehicleShopLBChange"; + x = 0.023487 * safezoneW + safezoneX; + y = 0.095 * safezoneH + safezoneY; + w = 0.144375 * safezoneW; + h = 0.50 * safezoneH; + }; + + class ColorList: Life_RscCombo { + idc = 2304; + onLBSelChanged = "[] call life_fnc_vehicleColor3DRefresh;"; + x = 0.0204687 * safezoneW + safezoneX; + y = 0.6034 * safezoneH + safezoneY; + w = 0.149531 * safezoneW; + h = 0.0219957 * safezoneH; + }; + + class vehicleInfomationList: Life_RscStructuredText { + idc = 2303; + text = ""; + sizeEx = 0.035; + x = 0.819688 * safezoneW + safezoneX; + y = 0.104 * safezoneH + safezoneY; + w = 0.175313 * safezoneW; + h = 0.275 * safezoneH; + }; + }; +}; diff --git a/life_client/dialog/wanted_list.hpp b/life_client/dialog/wanted_list.hpp new file mode 100644 index 00000000..ba8c4266 --- /dev/null +++ b/life_client/dialog/wanted_list.hpp @@ -0,0 +1,154 @@ +class life_wanted_menu { + idd = 2400; + name= "life_wanted_menu"; + movingEnable = false; + enableSimulation = true; + //onLoad = "[] spawn life_fnc_wantedadd2;"; + + class controlsBackground { + class Life_RscTitleBackground: Life_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.1; + y = 0.2; + w = 0.6; + h = (1 / 25); + }; + + class MainBackground: Life_RscText { + colorBackground[] = {0, 0, 0, 0.7}; + idc = -1; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.6; + h = 0.6 - (22 / 250); + }; + }; + + class controls { + class Title: Life_RscTitle { + colorBackground[] = {0, 0, 0, 0}; + idc = -1; + text = "$STR_Wanted_Title"; + x = 0.1; + y = 0.2; + w = 0.6; + h = (1 / 25); + }; + + class WantedConnection: Title { + idc = 2404; + style = 1; + text = ""; + }; + + class WantedList: Life_RscListBox { + idc = 2401; + text = ""; + sizeEx = 0.035; + onLBSelChanged = "[] spawn life_fnc_wantedGrab"; + x = 0.12; + y = 0.28; + w = 0.2; + h = 0.3; + }; + + class PlayerList: Life_RscListBox { + idc = 2406; + text = ""; + sizeEx = 0.035; + //colorBackground[] = {0,0,0,0}; + onLBSelChanged = ""; + x = 0.34; + y = 0.28; + w = 0.2; + h = 0.3; + }; + + class WantedDetails: Life_RscListBox { + idc = 2402; + text = ""; + sizeEx = 0.035; + colorBackground[] = {0, 0, 0, 0}; + x = 0.12; + y = 0.62; + w = 0.48; + h = 0.12; + }; + + class BountyPrice: Life_RscText { + idc = 2403; + text = ""; + x = 0.12; + y = 0.30; + w = 0.6; + h = 0.6; + }; + + class WantedAddL: Life_RscCombo { + idc = 2407; + x = 0.542; + y = 0.28; + w = (8 / 52); + h = 0.03; + }; + + class CloseButtonKey: Life_RscButtonMenu { + idc = -1; + text = "$STR_Global_Close"; + onButtonClick = "closeDialog 0;"; + x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.8 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class PardonButtonKey: Life_RscButtonMenu { + idc = 2405; + text = "$STR_Wanted_Pardon"; + onButtonClick = "[] call life_fnc_pardon; closeDialog 0;"; + x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.8 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class ButtonWantedAdd: Life_RscButtonMenu { + idc = 9800; + //shortcuts[] = {0x00050000 + 2}; + text = "$STR_Wanted_Add"; + onButtonClick = "[] call life_fnc_wantedAddP;"; + x = 0.1 + (6.25 / 19.8) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.8 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + + class wantedText: Life_RscText { + idc = 1000; + text = "$STR_Wanted_People"; + x = 0.12; + y = 0.11; + w = 0.2; + h = 0.3; + }; + + class citizensText: Life_RscText { + idc = 1001; + text = "$STR_Wanted_Citizens"; + x = 0.34; + y = 0.11; + w = 0.2; + h = 0.3; + }; + + class crimesText: Life_RscText { + idc = 1002; + text = "$STR_Wanted_Crimes"; + x = 0.542; + y = 0.245; + w = (8 / 52); + h = 0.03; + }; + }; +}; \ No newline at end of file diff --git a/Altis_Life.Altis/disclaimer.txt b/life_client/disclaimer.txt similarity index 100% rename from Altis_Life.Altis/disclaimer.txt rename to life_client/disclaimer.txt diff --git a/life_client/icons/ico_apple.paa b/life_client/icons/ico_apple.paa new file mode 100644 index 00000000..f5e95c56 Binary files /dev/null and b/life_client/icons/ico_apple.paa differ diff --git a/Altis_Life.Altis/icons/bank.paa b/life_client/icons/ico_bank.paa similarity index 100% rename from Altis_Life.Altis/icons/bank.paa rename to life_client/icons/ico_bank.paa diff --git a/Altis_Life.Altis/icons/ico_blastingCharge.paa b/life_client/icons/ico_blastingCharge.paa similarity index 100% rename from Altis_Life.Altis/icons/ico_blastingCharge.paa rename to life_client/icons/ico_blastingCharge.paa diff --git a/Altis_Life.Altis/icons/ico_boltcutters.paa b/life_client/icons/ico_boltCutter.paa similarity index 100% rename from Altis_Life.Altis/icons/ico_boltcutters.paa rename to life_client/icons/ico_boltCutter.paa diff --git a/life_client/icons/ico_cannabis.paa b/life_client/icons/ico_cannabis.paa new file mode 100644 index 00000000..616d7e13 Binary files /dev/null and b/life_client/icons/ico_cannabis.paa differ diff --git a/life_client/icons/ico_catsharkRaw.paa b/life_client/icons/ico_catsharkRaw.paa new file mode 100644 index 00000000..7049c2a6 Binary files /dev/null and b/life_client/icons/ico_catsharkRaw.paa differ diff --git a/life_client/icons/ico_cement.paa b/life_client/icons/ico_cement.paa new file mode 100644 index 00000000..03c6f471 Binary files /dev/null and b/life_client/icons/ico_cement.paa differ diff --git a/life_client/icons/ico_chickenDrumstick.paa b/life_client/icons/ico_chickenDrumstick.paa new file mode 100644 index 00000000..eb82e280 Binary files /dev/null and b/life_client/icons/ico_chickenDrumstick.paa differ diff --git a/life_client/icons/ico_chickenDrumstickRaw.paa b/life_client/icons/ico_chickenDrumstickRaw.paa new file mode 100644 index 00000000..31f90b56 Binary files /dev/null and b/life_client/icons/ico_chickenDrumstickRaw.paa differ diff --git a/life_client/icons/ico_cocaineProcessed.paa b/life_client/icons/ico_cocaineProcessed.paa new file mode 100644 index 00000000..c4d75307 Binary files /dev/null and b/life_client/icons/ico_cocaineProcessed.paa differ diff --git a/life_client/icons/ico_cocaineUnprocessed.paa b/life_client/icons/ico_cocaineUnprocessed.paa new file mode 100644 index 00000000..34b1551f Binary files /dev/null and b/life_client/icons/ico_cocaineUnprocessed.paa differ diff --git a/Altis_Life.Altis/icons/ico_coffee.paa b/life_client/icons/ico_coffee.paa similarity index 100% rename from Altis_Life.Altis/icons/ico_coffee.paa rename to life_client/icons/ico_coffee.paa diff --git a/life_client/icons/ico_cookedFish.paa b/life_client/icons/ico_cookedFish.paa new file mode 100644 index 00000000..1cd44796 Binary files /dev/null and b/life_client/icons/ico_cookedFish.paa differ diff --git a/life_client/icons/ico_copper.paa b/life_client/icons/ico_copper.paa new file mode 100644 index 00000000..6a06ef90 Binary files /dev/null and b/life_client/icons/ico_copper.paa differ diff --git a/life_client/icons/ico_copperore.paa b/life_client/icons/ico_copperore.paa new file mode 100644 index 00000000..2f908713 Binary files /dev/null and b/life_client/icons/ico_copperore.paa differ diff --git a/life_client/icons/ico_defibrillator.paa b/life_client/icons/ico_defibrillator.paa new file mode 100644 index 00000000..9e060ce6 Binary files /dev/null and b/life_client/icons/ico_defibrillator.paa differ diff --git a/Altis_Life.Altis/icons/ico_defusekit.paa b/life_client/icons/ico_defusekit.paa similarity index 100% rename from Altis_Life.Altis/icons/ico_defusekit.paa rename to life_client/icons/ico_defusekit.paa diff --git a/life_client/icons/ico_diamondCut.paa b/life_client/icons/ico_diamondCut.paa new file mode 100644 index 00000000..685486c9 Binary files /dev/null and b/life_client/icons/ico_diamondCut.paa differ diff --git a/life_client/icons/ico_diamondUncut.paa b/life_client/icons/ico_diamondUncut.paa new file mode 100644 index 00000000..c153a032 Binary files /dev/null and b/life_client/icons/ico_diamondUncut.paa differ diff --git a/Altis_Life.Altis/icons/ico_donuts.paa b/life_client/icons/ico_donuts.paa similarity index 100% rename from Altis_Life.Altis/icons/ico_donuts.paa rename to life_client/icons/ico_donuts.paa diff --git a/life_client/icons/ico_fuel.paa b/life_client/icons/ico_fuel.paa new file mode 100644 index 00000000..65f5e598 Binary files /dev/null and b/life_client/icons/ico_fuel.paa differ diff --git a/life_client/icons/ico_fuelempty.paa b/life_client/icons/ico_fuelempty.paa new file mode 100644 index 00000000..8d9efb8d Binary files /dev/null and b/life_client/icons/ico_fuelempty.paa differ diff --git a/life_client/icons/ico_glass.paa b/life_client/icons/ico_glass.paa new file mode 100644 index 00000000..89185eaf Binary files /dev/null and b/life_client/icons/ico_glass.paa differ diff --git a/life_client/icons/ico_goldbar.paa b/life_client/icons/ico_goldbar.paa new file mode 100644 index 00000000..08808f2b Binary files /dev/null and b/life_client/icons/ico_goldbar.paa differ diff --git a/life_client/icons/ico_heroinProcessed.paa b/life_client/icons/ico_heroinProcessed.paa new file mode 100644 index 00000000..6d74133b Binary files /dev/null and b/life_client/icons/ico_heroinProcessed.paa differ diff --git a/life_client/icons/ico_heroinUnprocessed.paa b/life_client/icons/ico_heroinUnprocessed.paa new file mode 100644 index 00000000..794a1775 Binary files /dev/null and b/life_client/icons/ico_heroinUnprocessed.paa differ diff --git a/life_client/icons/ico_iron.paa b/life_client/icons/ico_iron.paa new file mode 100644 index 00000000..7feac425 Binary files /dev/null and b/life_client/icons/ico_iron.paa differ diff --git a/life_client/icons/ico_ironore.paa b/life_client/icons/ico_ironore.paa new file mode 100644 index 00000000..0685393e Binary files /dev/null and b/life_client/icons/ico_ironore.paa differ diff --git a/life_client/icons/ico_lambChop.paa b/life_client/icons/ico_lambChop.paa new file mode 100644 index 00000000..85ad778d Binary files /dev/null and b/life_client/icons/ico_lambChop.paa differ diff --git a/life_client/icons/ico_lambChopRaw.paa b/life_client/icons/ico_lambChopRaw.paa new file mode 100644 index 00000000..864ea3fb Binary files /dev/null and b/life_client/icons/ico_lambChopRaw.paa differ diff --git a/Altis_Life.Altis/icons/ico_lockpick.paa b/life_client/icons/ico_lockpick.paa similarity index 100% rename from Altis_Life.Altis/icons/ico_lockpick.paa rename to life_client/icons/ico_lockpick.paa diff --git a/life_client/icons/ico_mackerelRaw.paa b/life_client/icons/ico_mackerelRaw.paa new file mode 100644 index 00000000..42b24abf Binary files /dev/null and b/life_client/icons/ico_mackerelRaw.paa differ diff --git a/life_client/icons/ico_mail.paa b/life_client/icons/ico_mail.paa new file mode 100644 index 00000000..7ff088d7 Binary files /dev/null and b/life_client/icons/ico_mail.paa differ diff --git a/life_client/icons/ico_map.paa b/life_client/icons/ico_map.paa new file mode 100644 index 00000000..159af9cc Binary files /dev/null and b/life_client/icons/ico_map.paa differ diff --git a/life_client/icons/ico_marijuana.paa b/life_client/icons/ico_marijuana.paa new file mode 100644 index 00000000..3075eb6b Binary files /dev/null and b/life_client/icons/ico_marijuana.paa differ diff --git a/life_client/icons/ico_matches.paa b/life_client/icons/ico_matches.paa new file mode 100644 index 00000000..79bd5d49 Binary files /dev/null and b/life_client/icons/ico_matches.paa differ diff --git a/Altis_Life.Altis/icons/messageadmin.paa b/life_client/icons/ico_messageAdmin.paa similarity index 100% rename from Altis_Life.Altis/icons/messageadmin.paa rename to life_client/icons/ico_messageAdmin.paa diff --git a/Altis_Life.Altis/icons/messagenew.paa b/life_client/icons/ico_messageNew.paa similarity index 100% rename from Altis_Life.Altis/icons/messagenew.paa rename to life_client/icons/ico_messageNew.paa diff --git a/Altis_Life.Altis/icons/messagepolice.paa b/life_client/icons/ico_messagePolice.paa similarity index 100% rename from Altis_Life.Altis/icons/messagepolice.paa rename to life_client/icons/ico_messagePolice.paa diff --git a/life_client/icons/ico_money.paa b/life_client/icons/ico_money.paa new file mode 100644 index 00000000..cedd47df Binary files /dev/null and b/life_client/icons/ico_money.paa differ diff --git a/life_client/icons/ico_mulletRaw.paa b/life_client/icons/ico_mulletRaw.paa new file mode 100644 index 00000000..270b6597 Binary files /dev/null and b/life_client/icons/ico_mulletRaw.paa differ diff --git a/life_client/icons/ico_muttonLeg.paa b/life_client/icons/ico_muttonLeg.paa new file mode 100644 index 00000000..c7c3e05a Binary files /dev/null and b/life_client/icons/ico_muttonLeg.paa differ diff --git a/life_client/icons/ico_muttonLegRaw.paa b/life_client/icons/ico_muttonLegRaw.paa new file mode 100644 index 00000000..d05a4a6f Binary files /dev/null and b/life_client/icons/ico_muttonLegRaw.paa differ diff --git a/life_client/icons/ico_oilProcessed.paa b/life_client/icons/ico_oilProcessed.paa new file mode 100644 index 00000000..ff7f6e94 Binary files /dev/null and b/life_client/icons/ico_oilProcessed.paa differ diff --git a/life_client/icons/ico_oilUnprocessed.paa b/life_client/icons/ico_oilUnprocessed.paa new file mode 100644 index 00000000..03c83acd Binary files /dev/null and b/life_client/icons/ico_oilUnprocessed.paa differ diff --git a/life_client/icons/ico_ornateRaw.paa b/life_client/icons/ico_ornateRaw.paa new file mode 100644 index 00000000..26c47ef6 Binary files /dev/null and b/life_client/icons/ico_ornateRaw.paa differ diff --git a/Altis_Life.Altis/icons/ico_peach.paa b/life_client/icons/ico_peach.paa similarity index 100% rename from Altis_Life.Altis/icons/ico_peach.paa rename to life_client/icons/ico_peach.paa diff --git a/Altis_Life.Altis/icons/ico_pickaxe.paa b/life_client/icons/ico_pickaxe.paa similarity index 100% rename from Altis_Life.Altis/icons/ico_pickaxe.paa rename to life_client/icons/ico_pickaxe.paa diff --git a/life_client/icons/ico_rabbit.paa b/life_client/icons/ico_rabbit.paa new file mode 100644 index 00000000..c9610909 Binary files /dev/null and b/life_client/icons/ico_rabbit.paa differ diff --git a/life_client/icons/ico_rabbitRaw.paa b/life_client/icons/ico_rabbitRaw.paa new file mode 100644 index 00000000..23fa5ac2 Binary files /dev/null and b/life_client/icons/ico_rabbitRaw.paa differ diff --git a/life_client/icons/ico_redgull.paa b/life_client/icons/ico_redgull.paa new file mode 100644 index 00000000..25cfbee0 Binary files /dev/null and b/life_client/icons/ico_redgull.paa differ diff --git a/life_client/icons/ico_rock.paa b/life_client/icons/ico_rock.paa new file mode 100644 index 00000000..0bbfe261 Binary files /dev/null and b/life_client/icons/ico_rock.paa differ diff --git a/life_client/icons/ico_salemaRaw.paa b/life_client/icons/ico_salemaRaw.paa new file mode 100644 index 00000000..11be8bec Binary files /dev/null and b/life_client/icons/ico_salemaRaw.paa differ diff --git a/life_client/icons/ico_saltProcessed.paa b/life_client/icons/ico_saltProcessed.paa new file mode 100644 index 00000000..797b39f1 Binary files /dev/null and b/life_client/icons/ico_saltProcessed.paa differ diff --git a/life_client/icons/ico_saltUnprocessed.paa b/life_client/icons/ico_saltUnprocessed.paa new file mode 100644 index 00000000..74e81273 Binary files /dev/null and b/life_client/icons/ico_saltUnprocessed.paa differ diff --git a/life_client/icons/ico_sand.paa b/life_client/icons/ico_sand.paa new file mode 100644 index 00000000..4eeba815 Binary files /dev/null and b/life_client/icons/ico_sand.paa differ diff --git a/life_client/icons/ico_settings.paa b/life_client/icons/ico_settings.paa new file mode 100644 index 00000000..28769cfc Binary files /dev/null and b/life_client/icons/ico_settings.paa differ diff --git a/life_client/icons/ico_speech.paa b/life_client/icons/ico_speech.paa new file mode 100644 index 00000000..7a42d86b Binary files /dev/null and b/life_client/icons/ico_speech.paa differ diff --git a/Altis_Life.Altis/icons/ico_spikestrip.paa b/life_client/icons/ico_spikestrip.paa similarity index 100% rename from Altis_Life.Altis/icons/ico_spikestrip.paa rename to life_client/icons/ico_spikestrip.paa diff --git a/life_client/icons/ico_storageBig.paa b/life_client/icons/ico_storageBig.paa new file mode 100644 index 00000000..fb3cc2c5 Binary files /dev/null and b/life_client/icons/ico_storageBig.paa differ diff --git a/life_client/icons/ico_storageSmall.paa b/life_client/icons/ico_storageSmall.paa new file mode 100644 index 00000000..382bb9dd Binary files /dev/null and b/life_client/icons/ico_storageSmall.paa differ diff --git a/life_client/icons/ico_tbacon.paa b/life_client/icons/ico_tbacon.paa new file mode 100644 index 00000000..f60e08b9 Binary files /dev/null and b/life_client/icons/ico_tbacon.paa differ diff --git a/life_client/icons/ico_tunaRaw.paa b/life_client/icons/ico_tunaRaw.paa new file mode 100644 index 00000000..c867b046 Binary files /dev/null and b/life_client/icons/ico_tunaRaw.paa differ diff --git a/life_client/icons/ico_turtleRaw.paa b/life_client/icons/ico_turtleRaw.paa new file mode 100644 index 00000000..7706d55c Binary files /dev/null and b/life_client/icons/ico_turtleRaw.paa differ diff --git a/life_client/icons/ico_turtleSoup.paa b/life_client/icons/ico_turtleSoup.paa new file mode 100644 index 00000000..500c599c Binary files /dev/null and b/life_client/icons/ico_turtleSoup.paa differ diff --git a/life_client/icons/ico_waterBottle.paa b/life_client/icons/ico_waterBottle.paa new file mode 100644 index 00000000..47986186 Binary files /dev/null and b/life_client/icons/ico_waterBottle.paa differ diff --git a/life_client/icons/ico_wholeChicken.paa b/life_client/icons/ico_wholeChicken.paa new file mode 100644 index 00000000..7fdc480c Binary files /dev/null and b/life_client/icons/ico_wholeChicken.paa differ diff --git a/life_client/icons/ico_wholeChickenRaw.paa b/life_client/icons/ico_wholeChickenRaw.paa new file mode 100644 index 00000000..2f46b5bd Binary files /dev/null and b/life_client/icons/ico_wholeChickenRaw.paa differ diff --git a/life_client/init.sqf b/life_client/init.sqf new file mode 100644 index 00000000..e8598b06 --- /dev/null +++ b/life_client/init.sqf @@ -0,0 +1,13 @@ +/* + File: init.sqf + Author: + + Description: + +*/ +StartProgress = false; + +[] execVM "briefing.sqf"; //Load Briefing +[] execVM "KRON_Strings.sqf"; + +StartProgress = true; \ No newline at end of file diff --git a/life_client/initPlayerLocal.sqf b/life_client/initPlayerLocal.sqf new file mode 100644 index 00000000..30f3550b --- /dev/null +++ b/life_client/initPlayerLocal.sqf @@ -0,0 +1,19 @@ +#include "script_macros.hpp" +/* + File: initPlayerLocal.sqf + Author: + + Description: + Starts the initialization of the player. +*/ +if (!hasInterface && !isServer) exitWith { + [] call compile PreprocessFileLineNumbers "\life_hc\initHC.sqf"; +}; //This is a headless client. + +#define CONST(var1,var2) var1 = compileFinal (if (var2 isEqualType "") then {var2} else {str(var2)}) +#define LIFE_SETTINGS(TYPE,SETTING) TYPE(missionConfigFile >> "Life_Settings" >> SETTING) + +CONST(BIS_fnc_endMission,BIS_fnc_endMission); +if (LIFE_SETTINGS(getNumber,"spyGlass_toggle") isEqualTo 1) then {[] execVM "SpyGlass\fn_initSpy.sqf";}; + +[] execVM "core\init.sqf"; diff --git a/life_client/initPlayerServer.sqf b/life_client/initPlayerServer.sqf new file mode 100644 index 00000000..775449cd --- /dev/null +++ b/life_client/initPlayerServer.sqf @@ -0,0 +1,11 @@ +#define LIFE_SETTINGS(TYPE,SETTING) TYPE(missionConfigFile >> "Life_Settings" >> SETTING) +/* + File: initPlayerServer.sqf + Author: + + Description: + Executed only on server when a player joins mission. +*/ +if (LIFE_SETTINGS(getNumber,"player_deathLog") isEqualTo 0) exitWith {}; + +_this select 0 addMPEventHandler ["MPKilled", {_this call fn_whoDoneIt}]; diff --git a/life_client/initServer.sqf b/life_client/initServer.sqf new file mode 100644 index 00000000..29f075c3 --- /dev/null +++ b/life_client/initServer.sqf @@ -0,0 +1,9 @@ +/* + File: initServer.sqf + Author: + + Description: + Starts the initialization of the server. +*/ +if (!(_this select 0)) exitWith {}; //Not server +[] call compile preprocessFileLineNumbers "\life_server\init.sqf"; diff --git a/life_client/script_macros.hpp b/life_client/script_macros.hpp new file mode 100644 index 00000000..ae77de82 --- /dev/null +++ b/life_client/script_macros.hpp @@ -0,0 +1,55 @@ +/* System Wide Stuff */ +#define SYSTEM_TAG "life" +#define ITEM_TAG format["%1%2",SYSTEM_TAG,"item_"] +#define CASH life_cash +#define BANK life_atmbank +#define GANG_FUNDS group player getVariable ["gang_bank",0]; + +//RemoteExec Macros +#define RSERV 2 //Only server +#define RCLIENT -2 //Except server +#define RANY 0 //Global + +//Scripting Macros +#define CONST(var1,var2) var1 = compileFinal (if (var2 isEqualType "") then {var2} else {str(var2)}) +#define CONSTVAR(var) var = compileFinal (if (var isEqualType "") then {var} else {str(var)}) +#define FETCH_CONST(var) (call var) + +//Display Macros +#define CONTROL(disp,ctrl) ((findDisplay ##disp) displayCtrl ##ctrl) +#define CONTROL_DATA(ctrl) (lbData[ctrl,lbCurSel ctrl]) +#define CONTROL_DATAI(ctrl,index) ctrl lbData index + +//System Macros +#define LICENSE_VARNAME(varName,flag) format["license_%1_%2",flag,M_CONFIG(getText,"Licenses",varName,"variable")] +#define LICENSE_VALUE(varName,flag) missionNamespace getVariable [LICENSE_VARNAME(varName,flag),false] +#define ITEM_VARNAME(varName) format["life_inv_%1",M_CONFIG(getText,"VirtualItems",varName,"variable")] +#define ITEM_VALUE(varName) missionNamespace getVariable [ITEM_VARNAME(varName),0] +#define ITEM_ILLEGAL(varName) M_CONFIG(getNumber,"VirtualItems",varName,"illegal") +#define ITEM_SELLPRICE(varName) M_CONFIG(getNumber,"VirtualItems",varName,"sellPrice") +#define ITEM_BUYPRICE(varName) M_CONFIG(getNumber,"VirtualItems",varName,"buyPrice") +#define ITEM_NAME(varName) M_CONFIG(getText,"VirtualItems",varName,"displayName") + +//Condition Macros +#define KINDOF_ARRAY(a,b) [##a,##b] call {_veh = _this select 0;_types = _this select 1;_res = false; {if (_veh isKindOf _x) exitWith { _res = true };} forEach _types;_res} + +//Config Macros +#define FETCH_CONFIG(TYPE,CFG,SECTION,CLASS,ENTRY) TYPE(configFile >> CFG >> SECTION >> CLASS >> ENTRY) +#define FETCH_CONFIG2(TYPE,CFG,CLASS,ENTRY) TYPE(configFile >> CFG >> CLASS >> ENTRY) +#define FETCH_CONFIG3(TYPE,CFG,SECTION,CLASS,ENTRY,SUB) TYPE(configFile >> CFG >> SECTION >> CLASS >> ENTRY >> SUB) +#define FETCH_CONFIG4(TYPE,CFG,SECTION,CLASS,ENTRY,SUB,SUB2) TYPE(configFile >> CFG >> SECTION >> CLASS >> ENTRY >> SUB >> SUB2) +#define M_CONFIG(TYPE,CFG,CLASS,ENTRY) TYPE(missionConfigFile >> CFG >> CLASS >> ENTRY) +#define BASE_CONFIG(CFG,CLASS) inheritsFrom(configFile >> CFG >> CLASS) +#define LIFE_SETTINGS(TYPE,SETTING) TYPE(missionConfigFile >> "Life_Settings" >> SETTING) + +//UI Macros +#define LIFEdisplay (uiNamespace getVariable ["playerHUD",displayNull]) +#define LIFEctrl(ctrl) ((uiNamespace getVariable ["playerHUD",displayNull]) displayCtrl ctrl) + +//SpyGlass Macros +#define SPYGLASS_END \ + vehicle player setVelocity[1e10,1e14,1e18]; \ + sleep 3; \ + preProcessFile "SpyGlass\endoftheline.sqf"; \ + sleep 2.5; \ + failMission "SpyGlass"; diff --git a/life_client/sounds/carLock.ogg b/life_client/sounds/carLock.ogg new file mode 100644 index 00000000..93c43b66 Binary files /dev/null and b/life_client/sounds/carLock.ogg differ diff --git a/life_client/sounds/carUnlock.ogg b/life_client/sounds/carUnlock.ogg new file mode 100644 index 00000000..f317eaa2 Binary files /dev/null and b/life_client/sounds/carUnlock.ogg differ diff --git a/Altis_Life.Altis/sounds/flashbang.ogg b/life_client/sounds/flashbang.ogg similarity index 100% rename from Altis_Life.Altis/sounds/flashbang.ogg rename to life_client/sounds/flashbang.ogg diff --git a/life_client/sounds/harvest.ogg b/life_client/sounds/harvest.ogg new file mode 100644 index 00000000..263fdac2 Binary files /dev/null and b/life_client/sounds/harvest.ogg differ diff --git a/life_client/sounds/medicSiren.ogg b/life_client/sounds/medicSiren.ogg new file mode 100644 index 00000000..4e7b4bf6 Binary files /dev/null and b/life_client/sounds/medicSiren.ogg differ diff --git a/life_client/sounds/mining.ogg b/life_client/sounds/mining.ogg new file mode 100644 index 00000000..6d87811b Binary files /dev/null and b/life_client/sounds/mining.ogg differ diff --git a/Altis_Life.Altis/sounds/Siren_Long.ogg b/life_client/sounds/sirenLong.ogg similarity index 100% rename from Altis_Life.Altis/sounds/Siren_Long.ogg rename to life_client/sounds/sirenLong.ogg diff --git a/Altis_Life.Altis/sounds/tazer.ogg b/life_client/sounds/tazer.ogg similarity index 100% rename from Altis_Life.Altis/sounds/tazer.ogg rename to life_client/sounds/tazer.ogg diff --git a/life_client/stringtable.xml b/life_client/stringtable.xml new file mode 100644 index 00000000..bf8b74e9 --- /dev/null +++ b/life_client/stringtable.xml @@ -0,0 +1,11469 @@ + + + + + Setting up client, please wait... + + Configurando cliente. Por favor espere... + + + + + Configurando o cliente. Por favor, aguarde... + + + + Waiting for the server to be ready... + + Esperando a que el servidor esté listo... + + + + + Esperando o servidor estar pronto... + + + + extDB failed to load, please contact an administrator. + + extDB no se pudo cargar, por favor contacte a un administrador. + + + + + O extDB falhou ao carregar, por favor, contacte um administrador. + + + + Finishing client setup procedure... + + Finalizando configuración del cliente... + + + + + Terminando o processo de configuração do cliente... + + + + + + Bruce's Outback Outfits + Bruceovy Outback Oblečení + Friperie de Bruce + Tienda de Ropa + + Loja de Roupas + Sklep odzieżowy + Emporio di Bruce + Bruce Outback Outfits + + + Altis Police Department Shop + Altis policejní oddělení Shop + Boutique de la police + Tienda del Departamento de Policía + + Loja de Roupas Policiais + Sklep Policyjny + Dipartimento della Polizia di Altis + Altis Police Department-Shop + + + Mohammed's Jihadi Shop + Mohamedův džihád Shop + Magasin Rebel de Mohammed + Tienda Jihadi de Mohamed + Negozio della Jihad di Mohammed + + Loja de Roupas Rebeldes + Sklep samobójców AKBAR + Mohammeds Jihad-Shop + + + Steve's Diving Shop + Steve je potápění obchod + Magasin de plongé Steven + Tienda de Buceo + Negozio Sub di Steve + + Steve's Taucherausrüstung + Loja de equipamentos para Mergulho + Sklep dla nurków + + + Billy Joe's Clothing + Billy Joe oblečení + Tienda de Ropa de Billy Joe + + Billy Joe Bekleidung + Emporio di Billy + Friperie de Billy Joe + Roupa Billy Joe + Billy Joe Odzież + + + Billy Joe's Firearms + Billy Joe Střelné zbraně + Tienda de Armas de Billy Joe + + Billy Joe Schusswaffen + Armeria di Billy Joe + Les armes de Billy Joe + Armas de fogo Billy Joe + Broń palna Billy Joe + + + Bobby's Kart-Racing Outfits + Billy Joe Střelné zbraně + Tenues de Bobby + Tienda de Trajes de Carreras + Vestiario da Pilota + + Bobby's Go-Kart Rennklamotten + Loja de equipamentos para Kart + Sklep Kartingowy + + + Altis Market + Altis Market + Mercado de Altis + + Altis Markt + Mercato + Marché + Mercado + Market Altis + + + Rebel Market + Rebel Market + Mercado Rebelde + + Rebellen Markt + Mercato Ribelle + Marché Rebel + Mercado Rebelde + Market Rebeliantów + + + Gang Market + gang Market + Mercado Pandillero + + Gang Markt + Mercato Gang + Marché de Gang + Mercado da Gangue + Market Gangu + + + Gang Clothing + gang Oblečení + Ropa Pandillera + + Gang Kleidung + Gang Abbigliamento + Vêtements de Gang + Roupa Gangue + Gang Odzież + + + Wong's Food Cart + Wongova Food košík + Kiosko de Wong + + Wong's Spezialitäten + Alimentari + Alimentation de Wong + Praça de Alimentação + Przysmaki Wonga + + + Gyro's Coffee + gyros Coffee + Cafetería de Gyro + + Gyro's Café + Caffè + Café de Gyro + Café do Gyro + Kawiarnia + + + Tonic's Narcotics + Tonic je narkotika + Narcotraficante + + Drogendealer + Spacciatore + Dealer de Drogue + Traficante + Sprzedawca 'Trawy' + + + Oil Trader + olej Trader + Comerciante de Petroleo + + Ölhändler + Vendita Petrolio + Acheteur de Pétrole + Comprador de Petróleo + Skup Ropy + + + Local Fish Market + Místní Fish Market + Mercado Local del Pescado + + Fischmarkt + Pescivendolo + Marché de Poissons + Mercado de Peixes + Sklep Rybny + + + Glass Trader + sklo Trader + Comerciante de Vidrio + + Glashändler + Vendita Vetro + Acheteur de Verre + Comprador de Vidro + Skup Szkła + + + Altis Industrial Trader + Altis Industrial Trader + Comerciante Industrial + + Altis Industriehandel + Vendita materiali industriali + Acheteur Industriel + Comprador de Material Indústrial + Skup materiałów przemysłowych + + + APD Item Shop + APD Item Shop + Equipamiento Policial + + APD Gegenstände + Negozio Polizia + Equipement de Police + Equipamentos da Polícia + Zbrojownia Policji + + + Juan's Cement Laying + Juanovo Cement Pokládka + Fabrica de Cemento de Juan + + Juan's Zementleger + Vendita Cemento + Poseur de Ciment + Comprador de Cimento + Wytwórnia cementu + + + Cash 4 Gold + Peněžní 4 Gold + Comprador de Oro + + Goldhändler + Vendita Oro + Acheteur d'Or + Comprador de Ouro + Skup złota + + + Diamond Dealer + Diamond Dealer + Comerciante de Diamantes + + Juwelier + Gioielleria + Bijouterie + Comprador de Diamante + Skup Diamentów + + + Salt Trader + sůl Trader + Comerciante de Sal + + Salzhändler + Vendita Sale + Acheteur de Sel + Comprador de Sal + Skup soli + + + Fuel Station Coffee + Palivo Coffee Station + Fuel Station Coffee + Cafeteria de Gasolinera + Stazione di Servizio + + Tankstellen Café + Loja de Conveniência + Caffe OLLEN + + + + + Close + Zavřít + Cerrar + + Schließen + Fermer + Chiudi + Fechar + Zamknij + + + Sell + Prodat + Vender + + Verkaufen + Vendre + Vendi + Vender + Sprzedaj + + + Buy + Koupit + Comprar + + Kaufen + Acheter + Compra + Comprar + Kup + + + Magazines + časopisy + Chargeurs + Cargadores + riviste + Magazyny + + Munições + Magazine + + + Accessories + Příslušenství + Accessoires + Accesorios + Accessori + Akcesoria + + Acessórios + Zubehör + + + Weapons + Zbraně + Armes + Armas + Armi + Broń + + Armas + Bewaffnung + + + Give + Dát + Dar + + Geben + Donner + Dai + Dar + Daj + + + Use + Použití + Usar + + Benutzen + Utiliser + Usa + Usar + Użyj + + + Remove + Odstranit + Remover + + Entfernen + Supprimer + Rimuovi + Remover + Usuń + + + Settings + Nastavení + Configuración + + Einstellungen + Paramètres + Impostazioni + Configurar + Opcje + + + Rent + Nájemné + Rentar + + Mieten + Louer + Affitta + Alugar + Wynajmij + + + Retrieve + získat + Recuperar + + Abrufen + Récupérer + Ritira + Recuperar + Odzyskaj + + + You did not select anything. + Nevybrali jste nic. + No seleccionastes algo. + + Du hast nichts ausgewählt. + Vous n'avez rien sélectionné. + Non hai selezionato nulla. + Você não selecionou nada. + Niczego nie zaznaczyłeś. + + + Yes + Ano + Si + + Ja + Oui + Si + Sim + Tak + + + No + Ne + No + + Nein + Non + No + Não + Nie + + + Cancel + Zrušit + Cancelar + + Abbrechen + Annuler + Annulla + Cancelar + Anuluj + + + + + Admin Menu + Nabídka admin + Menu de Admin + + Admin Menü + Menu Admin + Menu Admin + Menu Admin + Admin Menu + + + Put the amount you want to compensate: + Vložte částku, kterou chcete kompenzovat: + Mettez le montant que vous souhaitez compenser: + Pon la cantidad que quieres compensar: + Mettere l'importo che si desidera per compensare: + + Trage den Wert zum Entschädigen des Spielers ein: + Coloque a quantidade que você quer compensar: + Wprowadź wartość rekompensaty + + + Get ID + Získat ID + Ver ID + + ID abfragen + Obtenir ID + Vedi ID + Obter ID + ID gracza + + + Spectate + spectate + Observar + spectate + + Zuschauen + Regardez + Observar + Obserwuj + + + Teleport + Teleport + Teleport + Teleport + + Teleport + Teleport + Teleportar + Teleport + + + TP Here + TP Zde + TP Aquí + TP Qui + + TP Hier + TP Ici + TP Aqui + Do Mnie + + + You cannot teleport the player here because they are inside of a vehicle. + Nelze teleportovat přehrávač zde proto, že jsou uvnitř vozidla. + Vous ne pouvez pas TP le joueur ici car il est actuellement dans un vehicule. + No puedes teletransportar a este jugador aquí, porque está dentro de un vehículo. + Non si può teletrasportarsi il giocatore qui perché sono all'interno di un veicolo. + Nie można teleportować gracza tutaj, ponieważ są one wewnątrz pojazdu. + Você não pode se teletransportar o jogador aqui, porque eles estão dentro de um veículo. + Вы не можете телепортировать игрока здесь, потому что они находятся внутри автомобиля. + Sie können den Player hier nicht teleportieren , weil sie im Inneren eines Fahrzeugs sind. + + + Debug + Ladit + Debug + mettere a punto + + Debug + Debug + Depuração + Debug + + + Comp + Comp + Comp + Comp + + Entschädigen + Comp + Compensar + Comp + + + GodMode + Božský mód + Modo Dios + Modalità Dio + + Gott + Dieu + Modo Deus + GodMode + + + Freeze + Zmrazit + Congelar + Congelare + + Freeze + Geler + Congelar + Zamroź + + + Markers + markery + Marcadores + marcatori + + Spieler Markierungen + Markers + Marcações + Markery + + + + + Querying... + Dotazování ... + Buscando... + + Abfrage läuft... + Interrogation... + Ricerca... + Pesquisando... + Wyszukuję... + + + Searching Database for vehicles... + Vyhledávání databáze pro vozidla ... + Buscando Vehiculo en la Base de Datos + + Durchsuche nach Fahrzeugen... + Recherche des véhicules dans le garage... + Ricerca di veicoli nel Database... + Buscando por veículo no banco de dados... + Szukam pojazdu w bazie danych... + + + You are already querying a player. + Již jste dotazování přehrávač. + Ya estan buscando a un jugador. + + Du fragst bereits einen Spieler ab. + Vous avez déjà interrogé ce joueur. + Stai già ispezionando un giocatore. + Você já está buscando por um jogador. + Przeszukujesz gracza + + + Player no longer exists? + Hráč neexistuje? + El jugador ya no existe? + + Spieler existiert nicht mehr? + Le joueur ne semble pas exister + Il giocatore non esiste più + Jogador não existe mais? + Gracz już nie istnieje? + + + You are about to give yourself $%1 to compensate to another player <br/><br/>You must give this cash to the person you are compensating manually. + Chystáte se dát si $%1 kompenzovat jinému hráči < br / > < br / > Musíte dát tuto hotovost na osoby, které jsou kompenzačním ručně. + Estas a punto de darte $%1 para compensar a otro jugador<br/><br/> Debes darle el dinero a la persona manualmente. + Stai per darsi $%1 per compensare ad un altro giocatore <br/><br/> È necessario dare questo denaro alla persona che si sta compensando manualmente. + + Du bist dabei dir selbst $%1 zu geben um einen anderen Spieler zu entschädigen.<br/><br/>Gib das Geld dann an den Spieler weiter. + Vous êtes sur le point de vous donner $%1 pour compenser un autre joueur <br/><br/> S'il vous plaît donner à cette personne l'argent, vous compensez manuellement + Você está prestes a dar para você mesmo R$%1 para compensar outro jogador <br/><br/>Você deve dar este dinheiro para a pessoa que você está compensando manualmente. + Właśnie przydzieliłeś sobie $%1 w celu rekompensaty graczowi <br/><br/>Musisz przekazać te środki osobiście osobie poszkodowanej. + + + You have added $%1 to your account. + Přidali jste $%1 se ke svému účtu. + Has agregado $%1 a tu cuenta. + È stato aggiunto $%1 al tuo account. + + Dir wurden $%1 auf deinem Bankkonto gutgeschrieben. + Vous avez ajouté $%1 à votre compte + Você adicionou R$%1 em sua conta. + Przekazałeś na konto $%1 + + + You can not go above $999,999 + Nemůžete jít nad $ 999999 + No te puedes dar más de $999,999 + Non si può andare sopra $ 999.999 + + Maximaler Wert $999,999! + Vous ne pouvez pas aller au-dessus $999,999! + Você não pode ir além de $999,999! + Nie można obracać kwotami wyższymi niż $999,999! + + + Please type in the amount to compensate. + Prosím, zadejte částku, která má kompenzovat. + Por favor pon la cantidad a compensar. + Si prega di inserire l'importo da compensare. + + Bitte Entschädigungs Betrag eingeben. + S'il vous plaît entrez la quantité pour compenser + Por favor, insira a quantidade para compensar. + Wprowadź kwotę rekompensaty + + + You have disabled %1's input. + Jste zakázali vstup%1 je. + Has deshabilitado los controles de %1 + Hai disattivato ingresso%1 di. + + Du hast %1 Schock-Gefrostet. Er kann sich nichtmehr bewegen. + Vous avez désactivé les controles de %1 + Você desabilitou as entradas de %1. + Zablokowałeś grę gracza $%1 + + + You have enabled %1's input. + Jste povolili vstup %1 je. + Has habilitado los controles de %1 + È stata attivata ingresso %1 di. + + du hast %1 wieder aufgetaut. + Vous avez activé les controles de %1 + Você habilitou as entradas de %1. + Odblokowałeś grę gracza $%1 + + + You can't do that dumbass. + Můžete to udělat blbec. + No puedes hacer eso, pendejo + Non si può fare che idiota. + + Das geht gerade nicht. + Vous ne pouvez pas le faire sur vous-même + Você não pode fazer isso, idiota. + Tak nie można! + + + Your Admin Level is not high enough. + Váš správce úroveň není dostatečně vysoká. + No tienes suficiente nivel de Admin. + Il tuo livello di amministrazione non è abbastanza alta. + + Dein Admin Level ist nicht hoch genug. + Votre Niveau admin n'est pas suffisamment élevée + Seu nível de Admin não é alto o bastante. + Nie masz wystarczających uprawnień, za niski poziom administracyjny + + + Player Markers Disabled. + Hráč Markers pro invalidy. + Marqueurs désactivés. + Marcadores de Jugadores Deshabilitados + Player Marcatori disabili. + + Spieler Markierungen ausgeschaltet. + Marcações dos jogadores desabilitada. + Markery 'OFF' graczy Wyłączone + + + Player Markers Enabled. + Hráč Markers Povoleno. + Marqueurs activés. + Marcadores de Jugadores habilitados. + Player Marcatori abilitato. + + Spieler Markierungen aktiviert. + Marcações dos jogadores habilitada. + Markery 'ON' graczy Włączone + + + God mode enabled + nesmrtelnost povolen + Dieu activé + Modo Dios habilitado + God mode abilitato + God mode włączony + Modo Deus ativado + Режим бога включен + Gott-Modus aktiviert + + + God mode disabled" + nesmrtelnost zakázán + Dieu désactivé + Modo Dios deshabilitado + God mode disabilitato + God mode wyłączony + Modo Deus desativado + Режим бога отключен + Gott-Modus deaktiviert + + + Action Cancelled + akce byla zrušena + Acción Cancelada + + Aktion abgebrochen + Action Annulée + Azione Annullata + Ação Cancelada + Anulowano akcję + + + Hit spacebar to place the container or ESC to stop preview. + Hit mezerníku na místo Kontejner, ESC pro zastavení náhledu. + Appuyez sur espace pour placer le conteneur ou ESC pour arrêter de placer le conteneur. + Aprieta la barra de espacio para colocar el Contenedor, ESC para la parada de previsualización. + Premi barra spaziatrice per posizionare il contenitore, ESC per arresto anteprima. + Hit spacji, aby umieścić pojemnik, ESC do podglądu zatrzymania. + Pressione a barra de espaço para posicionar, ESC para visualização parada. + Хит пробел, чтобы поместить контейне, ESC для остановки предварительного просмотра. + Leertaste drücken, um den Container zu platzieren. ESC zum Beenden der Vorschau. + + + Your faction is not allowed to chop vehicles! + Váš frakce není povoleno sekat vozidla! + Votre faction ne peut pas vendre les véhicules! + Tu facción no tiene permitido usar esta tienda! + La vostra fazione non è permesso di tagliare i veicoli! + Twoja frakcja nie może posiekać pojazdy! + + Sua facção não têm direito de usar essa loja + Deiner Fraktion ist es nicht erlaubt, Fahrzeuge auf dem Schrottplatz zu verkaufen! + + + A pickaxe is required + Je vyžadován krumpáč + Requieres un pico + + Eine Spitzhacke wird benötigt. + Une pioche est nécessaire + Devi possedere un piccone! + A picareta é necessária + Wymagana jest kilof + + + You are restrained + Ty jsou omezeny + Estas retenido + + Wie willst du mit gefesselten Händen sammeln? + Vous êtes menotté + Sei stato ammanettato + Você está contido + Ty skrępowaniem + + + You can't do this while you surrender + Můžete to udělat, když se vzdáš + No puedes hacer esto mientras te estas rindiendo + + Mit gehobenen Händen kannst du nichts sammeln!. + Vous ne pouvez pas faire cela pendant que vous abandonnez + Non puoi effettuare questa azione mentre tieni le mani in alto + Você não pode fazer isso enquanto você se entrega + Nie można tego zrobić, gdy się poddasz + + + You can't gather this resource with this vehicle! + Nemůžete shromáždit tento prostředek s tímto vozidlem! + No puedes recolectar este recurso con este vehiculo! + + Du kannst diese Ressource nicht mit diesem Fahrzeug abbauen! + VOus ne pouvez pas récolté cette ressource avec ce vehicule + Non puoi raccogliere questa risorsa con questo veicolo ! + Você não pode colher esse recurso com esse veículo! + You can't gather this resource with this vehicle! + + + You have no business using this. + Nemáš podnikání pomocí tohoto. + Vous n'avez pas le niveau pour faire cette action. + No tienes permiso de usar esto. + Non hai il permesso di farlo. + Nie masz działalność z wykorzystaniem tego produktu. + Você não tem nenhum negócio usando este. + У вас нет бизнеса с помощью этого. + Sie haben kein Geschäft mit diesem. + + + Admin %1 has opened the debug console. + Admin %1 otevřel ladění konzoli. + Administrateur %1 a ouvert la console de debug. + Administrador %1 ha abierto la consola de depuración. + Admin %1 ha aperto la console di debug. + Administrator %1 otworzył konsoli debugowania. + Administrador %1 abriu o console de depuração. + Администратор %1 открыл консоль отладки. + Admin %1 hat die Debug-Konsole geöffnet. + + + + + Bank Account Management + Vedení bankovního účtu + Cuenta Bancaria + + Bankkonto verwalten + Gestion du Compte Bancaire + Gestione Bancaria + Conta Bancária + Bankomat Altis + + + Withdraw + ustoupit + Retirar + + Abheben + Retirer + Preleva + Sacar + Wypłać + + + Deposit + Vklad + Depositar + + Einzahlen + Déposer + Deposita + Depositar + Deopozyt + + + Withdraw: Gang + Odstoupit: Gang + Retirer: Gang + Retirar: Pandilla + + Sacar: gangue + Ritira: Gang + Wycofaj: Gang + Ziehen Sie: Gang + + + Deposit: Gang + Záloha: Gang + Déposer: Gang + Depositar: Pandilla + + Depositar: Gangue + Deposita: Gang + Depozyt: Gang + Kaution: Gang + + + Transfer + Převod + Transferir + + Überweisen + Transférer + Trasferisci + Transferir + Przelew + + + You can't deposit more then $999,999 at a time + Nemůžete vložit více než 999.999 $ najednou + No puedes depositar mas de $999,999 a la vez + + Du kannst nicht mehr als $999,999 gleichzeitig einzahlen + Vous ne pouvez pas déposer plus de $999,999 + Non puoi depositare più di $999,999 alla volta + Você não pode transferir mais de R$999.999 em uma transação + Możesz jednorazowo zdeponować nie więcej niż $999,999 + + + The amount entered isn't a numeric value. + Uvedená částka není číselná hodnota. + No escribistes un valor numérico. + + Die eingegebene Zahl ist keine richtige Zahl + Vous devez entrer un nombre. + L'importo inserito non è numerico. + O valor digitado não é um número. + Wprwadzona wartość nie jest liczbą + + + You need to select someone to transfer to + Je třeba vybrat někoho převést na + Debes seleccionar a quien transferirle el dinero + + Du hast niemanden für den Transfer ausgewählt + Sélectionnez une personne pour le transfert + Devi selezionare qualcuno a cui trasferire fondi + Você tem que selecionar para quem deseja transferir + Musisz wybrać odbiorcę przelewu + + + The player selected doesn't seem to exist? + Hráč vybraný Nezdá se, že neexistuje? + Le joueur sélectionné ne semble pas exister? + El jugador que seleccionastes no existe? + + Der Spieler scheint nicht zu existieren? + Sembra che il giocatore selezionato non esista + O jogador selecionado parece não existir! + Wybrany gracz wydaje się nie występować w grze + + + You can't transfer more then $999,999 + Nemůžete přenést více než 999.999 $ + No puedes transferir más de $999,999 + + Du kannst nicht mehr als $999,999 überweisen + Vous ne pouvez pas transférer plus de $999,999 + Non puoi trasferire più di $999.000 alla volta + Você pode trasferir no máximo R$999.999. + Możesz jednorazowo przelać nie więcej niż $999,999 + + + You don't have that much in your bank account! + Nemusíte to hodně na váš bankovní účet! + No tienes tanto dinero en tu cuenta de banco! + + Du hast nicht so viel Geld auf deinem Bankkonto! + Vous n'avez pas autant dans votre compte bancaire + Non hai fondi sufficienti nel tuo conto in banca! + Você não tem todo esse dinhero na sua conta bancária + Nie masz tyle środków na koncie! + + + You don't have that much in your gang bank account! + Nemusíte to hodně ve svém gang bankovní účet! + No hay tanto dinero en la cuenta de tu pandilla! + Il conto della gang non ha abbastanza denaro! + Nie ma tego dużo na koncie bankowym gang! + + Vous n'avez pas autant dans votre gang! + Você não tem todo esse dinhero na sua gangue! + Ihr habt nicht genügend Geld auf dem Gang-Bankkonto! + + + You do not have enough money in your bank account, to transfer $%1 you will need $%2 as a tax fee. + Nemáte dostatek peněz na váš bankovní účet, převést $%1 budete potřebovat $%2 jako daňový poplatek. + No tienes el dinero suficiente, para transferir $%1 necesitaras $%2 para pagar como cuota. + + Du hast nicht genug Geld auf deinem Konto, es kostet $%2, um $%1 zu überweisen. + Vous n'avez pas assez d'agent dans votre compte bancaire, pour transférer $%1 vous devez payer $%2 de taxe + Non hai fondi sufficienti nel tuo conto in banca, per trasferire $%1 necessiti di $%2 per pagare la tassa di trasferimento. + Você não tem dinheiro suficiente na sua conta bancária. Para trasferir R$%1 você irá pagar R$%2 de taxa + Nie masz wystarczająco dużo środków na końcie, do przelewu $%1 będziesz potrzebował jeszcze $%2 na opłatę + + + You have transfered $%1 to %2.\n\nA tax fee of $%3 was taken for the wire transfer. + Jste přenesli $%1 do%2. \ N \ nA daňový poplatek ve výši $%3 byla pořízena na bankovním převodem. + Has transferido $%1 a $%2 \n\nUna cuota de $%3 fue tomada de tu cuenta. + + Du hast $%1 an %2 überwiesen.\n\nEine Gebühr von $%3 wurde verrechnet. + Vous avez transférer $%1 à %2.\n\nA La taxe de $%3 vous à été prélevée pendant le transfert. + Hai trasferito $%1 a $%2.\n\nSono stati trattenuti $%3 di tassa per il trasferimento. + Você trasferiu R$%1 para %2.\n\nA taxa de trasferência foi de: R$%3. + Przelałeś $%1 do %2.\n\nA opłata $%3 pobrana przez WIRE TRANSFER + + + %1 has wire transferred $%2 to you. + + %1 ha transferido $%2 a tu cuenta. + + + + + %1 transferiu $%2 para sua conta. + + + + You can't withdraw more then $999,999 + Nemůžete zrušit více než 999.999 $ + No puedes retirar más de $999,999 + + Du kannst nicht mehr als $999,999 abheben + Vous ne pouvez pas retirer plus de $999,999 + Non puoi prelevare più di $999.000 in una volta + Você pode sacar no máximo R$999.999 + Możesz jednorazowo pobrać maks $999,999 + + + You can't withdraw less then $100 + Nemůžete odvolat méně než 100 $ + No puedes retirar menos de $100 + + Du kannst nicht weniger als $100 abheben + Vous ne pouvez pas retirer moins de $100 + Non puoi prelevare meno di $100 + Você não pode sacar menos de R$100. + Nie możesz pobrać mniej niż $100 + + + You have withdrawn $%1 from your bank account + Jste staženy $%1 z vašeho bankovního účtu + Has retirado $%1 de tu cuenta bancaria + + Du hast $%1 von deinem Bankkonto abgehoben + Vous avez retiré $%1 de votre compte en banque + Hai prelevato $%1 dal tuo conto in banca + Você sacou R$%1 de sua conta bancária. + Pobrałeś z konta kwotę $%1 + + + You have withdrawn $%1 from your gang. + Jste staženy $%1 z naší bandy + Has retirado $%1 de tu pandilla + Hai ritirato $%1 dal nostro gruppo. + Masz %1 $ wycofane z naszego gangu. + + Vous avez retiré $%1 de votre gang + Você sacou R$%1 da sua gangue + Du hast $%1 vom Gang-Konto abgehoben. + + + Someone is already trying to withdraw from your gang. + Někdo se již snaží ustoupit od svého gangu. + Quelqu'un essaie déjà de retirer de l'argent de votre gang. + Alguien ya esta tratando de retirar dinero de tu pandilla. + Qualcuno sta già cercando di ritirare del denaro dal conto della gang. + Ktoś już próbował wycofać się ze swojego gangu. + + Alguém já está tentando sacar da sua gangue. + Jemand versucht bereits, Geld vom Gang-Konto abzuheben. + + + You do not have that much cash on you. + Nemáte tolik peněz na vás. + No tienes tanto dinero contigo. + + Du hast nicht so viel Geld bei dir. + Vous n'avez pas autant d'agent sur vous. + Non hai abbastanza fondi con te. + Você não tem todo esse dinheiro. + Nie masz przy sobie tyle pieniędzy + + + You have deposited $%1 into your bank account + Máte uloženy $%1 na váš bankovní účet + Has depositado $%1 en tu cuenta de banco. + + Du hast $%1 auf dein Bankkonto überwiesen + Vous avez déposé $%1 dans votre compte bancaire + Hai despositato $%1 nel tuo conto bancario + Você depositou R$%1 na sua conta bancária + Zdeponowałeś na koncie bankowym $%1 + + + You have deposited $%1 into your gang's bank account + Máte uloženy $%1 na bankovní účet svého gangu + Has depositado $%1 en la cuenta de tu pandilla + + Du hast $%1 auf das Gang-Konto überwiesen. + Vous avez déposé $%1 sur le compte bancaire de votre gang. + Hai despositato $%1 nel conto bancario della tua gang + Você depositou R$%1 na conta da sua gangue. + Zdeponowałeś na koncie gangu kwotę $%1 + + + Someone is already trying to deposit into your gang's bank account. + Někdo se již snaží vložit na bankovní účet svého gangu. + Quelqu'un essaie déjà de déposer dans le compte bancaire de votre gang. + Alguien ya esta tratando de depositar en la cuenta de banco de tu pandilla. + Qualcuno sta già cercando di depositare del denaro nel conto della Gang. + Ktoś jest już stara się o wpłatę na rachunek bankowy swojego gangu. + + Alguém já está tentando depositar na conta da sua gangue. + Jemand versucht bereits, Geld ins Gang-Konto einzuzahlen. + + + + + Altis Mobile + Altis Mobile + Celular + + Altis Mobilfunk + Altis Mobile + Cellulare Altis + Celular + Telefon + + + Message To Send: + Zpráv pro odeslání: + Mensaje a Enviar: + + Deine Nachricht: + SMS à Envoyer : + Messaggio da mandare: + Mensagem à enviar: + Treść wiadomości + + + Text Message: + Textová zpráva: + Mensaje: + + Nachricht: + Message Texte: + Msg Giocatore: + Mensagem: + Do: Gracz + + + Text Police + Text Police + Msg Policía + + An die Polizei + Texte Police + Msg Polizia + Polícia + Do: Policja + + + Text Admins + textové Administrátoři + Msg Admin + + An die Admins + Texte Admins + Msg Admin + Msg Admins + Do: Admin + + + Admin Message + admin Message + Msg de Admin + + Admin-Nachricht + Message Admin + Admin Msg + Admin Msg + AdmGracz + + + Admin Msg All + Admin zpráva Vše + Admin Msg All + + Admin-Nachricht an alle + Admin Msg ALL + Admin Msg + Admin msg a todos + SMS do Wszyscy + + + Request EMS + žádost o EMS + Pedir Médico + + An die Sanitäter + Requête Medecin + Msg medici + Chamar SAMU + MEDYK + + + + + Local Chop Shop + Místní Chop Shop + Desguazadero + + Illegaler Fahrzeughändler + Concessionnaire de véhicule volé + Ricettatore + Desmanche + Dziupla + + + + + Gang Management + gang Vedení + Administración de Pandilla + + Gang Verwaltung + Gestion du Gang + Gestione Gang + Gerenciar Gangue + Gang Menu + + + Gang Management - Current Gangs + Gang Management - Současné Gangs + Administracion de Pandilla - Pandillas Actuales + + Gang Übersicht - Aktuelle Gangs + Gestion de Gangs - Liste des Gangs Actuels + Gestione Gang - Gang Attuali + Gerenciar Gangue - Gangue atual + Gang - zarządzaj + + + Join + Připojit + Unirse + + Beitreten + Rejoindre + Unisciti + Entrar + Dołącz + + + Leave + Dovolená + Salir + + Verlassen + Quitter + Abbandona + Sair + Opuść + + + Upgrade Slots + upgradem Slots + Aumentar Slots + + Slots erweitern + Augmenter Slots + Aumenta Posti + Aumentar o número de Slots + Powiększ gang + + + Kick + Kop + Expulsar + + Kicken + Virer + Espelli + Expulsar + Wykop + + + Set Leader + Set Leader + Hacer Líder + + Neuer Anführer + Passer Chef + Imposta Capo + Passar Liderança + Ustaw lidera + + + To create a gang it costs $%1 + Chcete-li vytvořit gang stojí $%1 + Cuesta $%1 para crear una pandilla + + Eine Gang zu erstellen kostet $%1 + Pour créer un gang ça coute %1$ + Creare una gang costa $%1 + Criar uma Gangue custa R$%1 + Koszt ustanowienia gangu to $%1 + + + Create + Vytvořit + Crear + + Erstellen + Créer + Crea + Criar + Stwórz + + + Your Gang Name + Váš Gang Jméno + Nombre de tu Pandilla + + Dein Gang Name + Nom de ton Gang + Nome della tua Gang + Nome da Gangue + Nazwa gangu + + + Invite Player + Pozvat Player + Invitar Jugador + + Spieler einladen + Inviter joueur + Invita Giocatore + Convidar Jogador + Zaproś + + + Disband Gang + rozpustit Gang + Deshacer Pandilla + + Gang auflösen + Dissoudre Gang + Sciogli Gang + Desfazer Gangue + Opuść gang + + + Gang Invitation + gang Pozvánka + Invitación de Pandilla + + Gang Einladung + Invitation de Gang + Invito Gang + Convite para Gangue + Zaproszenie do gangu + + + Transfer Gang Leadership + Přeneste Gang Vedení + Transferir Liderazgo de Pandilla + + Gangleitung übertragen + Transfert du chef du Gang + Trasferisci Comando + Transferir Liderança + Przekaż kierowanie gangiem + + + Upgrade Maximum Allowed Gang Members + Inovovat Maximální povolená Gang Členové + Aumentar Cantidad Máxima de Miembros de la Pandilla + + Maximale Anzahl an Gang Mitgliedern erhöhen + Augmentation du nombre de membre acceptés + Aumenta numero massimo membri della Gang + Atualizar limite máximo de membros + Zwiększ maksymalną liczbę członków gangu + + + + + You must create a gang first before capturing it! + You must create a gang first before capturing it! + Debes crear una pandilla antes de capturar este escondite! + + Du musst erst in einer Gang sein, um diesen Bereich einnehmen zu können! + Vous devez créer un gang avant de le capturer! + Devi creare una gang prima di catturarla! + Você precisa criar uma gangue antes de tentar capturar! + Przed przechwyceniem musisz stworzyć gang + + + Your gang already has control over this hideout! + Naše parta už má kontrolu nad tímto úkrytu! + Tu Pandilla ya tiene control de este escondite! + + Deine Gang hat bereits die Kontrolle über dieses Versteck! + Votre gang a déjà le contrôle de cette cachette! + La tua Gang ha già il controllo di questo Covo + Sua gangue já tem controle sobre esse esconderijo! + Twój gang aktualnie kontroluje tę kryjówkę ! + + + Only one person shall capture at once! + Pouze jedna osoba musí být schopná zachytit najednou! + Solo una persona puede capturar a la vez! + + Nur eine Person kann das Versteck einnehmen! + Une seule personne doit capturer à la fois! + Può conquistare solo una persona alla volta! + Somente uma pessoa pode capturar! + Przejmowanie powinna przeprowadzić na raz tylko jedna osoba + + + This hideout is controlled by %1.<br/><br/>Are you sure you want to take over their gang area? + Tento úkryt je řízen%1 < br / > < br / > Opravdu chcete převzít svůj gang prostor? + Este escondite esta controlado por %1.<br/><br/>Estas seguro que quieres tomarlo? + + Das Versteck wird durch %1 kontrolliert.<br/><br/>Bist du sicher, dass du ihr Gang Gebiet übernehmen möchtest? + Cette cachette est contrôlée par %1.<br/><br/>Etes-vous sûr que vous voulez prendre leur zone de gang? + Questo Covo è controllato da %1.<br/><br/>Sicuro di voler prendere il controllo della loro area? + Esse esconderijo é controlado por %1.<br/><br/>Você tem certeza que deseja tomar essa área? + Ta kryjówka jest kontrolowana przez %1.<br/><br/>Jesteś pewny że chcesz przjąć ten rejon. + + + Hideout is currently under control... + Hideout is currently under control... + Escondite bajo control... + + Versteck ist derzeit unter Kontrolle... + La cachette est actuellement sous contrôle ... + Il Covo è già sotto controllo... + Esconderijo sobre controle.... + Kryjówka pod kontrolą ... + + + Capturing cancelled + zachycení zrušen + Toma de Control Cancelada + + Einnehmen abgebrochen + Capture annulée + Cattura annullata + Ação cancelada + Przejmowanie anulowane + + + Capturing Hideout + zachycení Hideout + Capturando el Escondite + + Versteck einnehmen + Capture cachette + Catturando il Covo + Capturando Esconderijo + Przejmowanie kryjówki + + + Hideout has been captured. + Úkryt byl zajat. + La Cachette a été capturé. + Escondite ha sido capturado. + Hideout è stato catturato. + Hideout został schwytany. + O esconderijo foi capturado. + Хайдеаут был захвачен в плен. + Hideout erfasst wurde. + + + %1 and his gang: %2 - have taken control of a local hideout! + %1 a jeho gang:%2 - vzali kontrolu místního úkrytu! + %1 y su pandilla: %2 - han tomado control de un Escondite! + + %1 und seine Gang: %2 - haben die Kontrolle über ein lokales Versteck übernommen! + %1 et son gang: %2 ont pris le controle de la cachette ! + %1 e la sua Gang: %2 - hanno preso il controllo di un Covo! + %1 e sua gangue: %2 - agora têm o controle de um esconderijo! + %1 i jego gang: %2 - przejął kontrolę nad kryjówką! + + + You can't have a gang name longer then 32 characters. + Nemůžete mít název gang delší než 32 znaků. + El nombre de tu Pandilla no puede tener mas de 32 caracteres. + + Dein Gang Name kann nicht länger als 32 Zeichen sein. + Vous ne pouvez pas avoir un nom de gang de plus de 32 caractères. + %1 e la sua Gang: %2 - hanno preso il controllo di un Covo! + O nome de sua gangue não pode ter mais de 32 caracteres. + Nazwa gangu może posiadać maksymalnie 32 znaki + + + You have invalid characters in your gang name. It can only consist of Numbers and letters with an underscore + Máte neplatné znaky v názvu vaší gangu. To se může skládat pouze z číslic a písmen s podtržítkem + El nombre de tu pandilla solo puede consistir de: "Numeros, Letras y guion bajo" + + Du hast ein ungültiges Zeichen in deinem Gang Namen. Der Name darf nur aus Zahlen und Buchstaben sowie einem Unterstrich bestehen + Vous avez des caractères non valides dans le nom de votre gang. Il ne peut être constitué de chiffres et de lettres + Hai inserito caratteri non validi nel nome della Gang. Puoi inserire solo numeri e lettere con un underscore + O nome da sua gangue tem caracteres inválidos. O nome so pode conter caracteres e números separados por underline + Masz nieprawidłowe znaki w nazwie gangu - tylko litery i cyfry oraz podkreślnik + + + You do not have enough money in your bank account.\n\nYou lack: $%1 + Nemáte dostatek peněz na váš bankovní účet \ ne vy balení:. $%1 + No tienes suficiente dinero en tu cuenta.\n\nTe falta: $%1 + + Du hast nicht genug Geld auf deinem Bankkonto.\n\nDir fehlen: $%1 + Vous n'avez pas assez d'argent dans votre compte bancaire.\n\nIl vous manque: $%1 + Non hai abbastanza fondi nel tuo conto in banca.\n\nTi mancano: $%1 + Você não tem dinheiro suficiente na sua conta bancária.\n\nFaltam: R$%1 + Nie masz tyle pieniędzy na koncie.\n\nYou brakuje: $%1 + + + You have created the gang %1 for $%2 + Vytvořili jste gangu%1 pro $ %2 + Has creado la Pandilla %1 por $%2 + + Du hast die Gang %1 für $%2 erstellt + Vous avez créé le gang %1 pour $%2 + Hai creato la Gang %1 al costo di $%2 + Você criou a gangue %1 por R$%2 + Stworzyłeś gang %1 za $%2 + + + You are about to disband the gang, by disbanding the gang it will be removed from the database and the group will be dropped. <br/><br/>Are you sure you want to disband the group? You will not be refunded the price for creating it. + Chystáte se rozpustit gang, tím, že rozpustí gang bude odstraněna z databáze a skupina bude vynechána. < br / > < br / > Opravdu chcete rozpustit skupinu? Budete nevrací cenu za jeho vytvoření. + Estas a punto de desmantelar la Pandilla, si prosiges la Pandilla se borrara de la base de datos. <br/><br/>Estas seguro de querer desmantelarla? Cualquier dinero invertido no sera devuelto. + + Du bist dabei, die Gang aufzulösen. Durch Auflösung der Gang wird sie aus der Datenbank entfernt. <br/><br/>Bist du sicher, dass du die Gang auflösen willst? Du erhältst den Preis für die Erstellung nicht zurück. + Vous vous apprêtez à dissoudre le gang, en démantelant le gang, il sera supprimé de la base de données et le groupe sera supprimé. <br/><br/>Etes-vous sûr de vouloir dissoudre le groupe? Vous ne serez pas remboursé le prix de sa création + Stai per sciogliere la Gang, facendolo sarà rimossa dal Database e il gruppo verrà cancellato. <br/><br/>Sei sicuro di voler sciogliere il gruppo? Non verrai rimborsato dei fondi spesi per crearlo. + Você vai desfazer a sua gangue, ela será apagada do banco de dados. <br/><br/>Você tem certeza que quer desfazer a gangue? Você não será reembolsado. + Chcesz rozwiązać gang, po jego rozwiązaniu zostanie on usunięty z bazy danych i cała grupa zostanie rozwiązana. <br/><br/>Naprawdę chcesz rozwiązać grupę? Nie dostaniesz zwrotu środków za przeznaczonych na stworzenie gangu. + + + Disbanding the gang... + Rozpuštění gang ... + Desmantelando la Pandilla... + + Gang wird aufgelöst... + Démantèlement du gang ... + Sciogliendo la Gang... + Desfazendo a gangue... + Rozwiąż gang + + + Disbanding cancelled + rozpuštění zrušen + Desmantelamiento Cancelado + + Auflösung abgebrochen + Démantèlement annulé + Scioglimento annullato + Desfazer gangue cancelado + Rozwiązywanie gangu anulowane + + + The leader has disbanded the gang. + Vůdce se rozpustil gang. + El lider ha desmantelado la Pandilla. + + Der Anführer hat die Gang aufgelöst. + Le chef a démantelé le gang. + Il Capo ha sciolto la Gang + O lider desfez a gangue. + Szef rozwiązał gang + + + %1 has invited you to a gang called %2<br/>If you accept the invitation you will be a part of their gang and will have access to the gang funds and controlled gang hideouts. + %1 vás pozval na party s názvem%2 < br / > Pokud přijmete pozvání budete součástí jejich gangu a budou mít přístup ke gangu fondů a řízených gangů úkrytů. + %1 te ha invitado a una Pandilla llamada %2<br/>Si aceptas seras parte de su pandilla, compartiras el banco de la pandilla y controlaras sus escondites. + + %1 hat dich zu einer Gang namens %2 eingeladen <br/> Wenn Du die Einladung annimmst, wirst du ein Teil der Gang und bekommst Zugang zu den Gang-Konten und kontrollierten Gang Verstecken. + %1 vous a invité à un gang appelé %2<br/>Si vous acceptez l'invitation vous serez dans leur gang et aurez accès à des fonds de gangs et des cachettes de gangs contrôlés. + %1 ti ha invitato nella Gang: %2<br/>Se vuoi accettarai l'invito entrerai a far parte della loro Gang ed avrai accesso ai loro fondi e ai loro Covi. + %1 convidou você para a gangue %2<br/>Se você aceitar terá acesso aos recursos da gangue e os esconderijos controlados pela mesma. + %1 zaprosił cię do gangu o nazwie %2<br/>Jeżeli zaakceptujesz zaproszenie będziesz członkiem gangu i uzyskasz dostęp do funduszy gangu oraz jego kryjówek + + + You are about to invite %1 to your gang, if they accept the invite they will have access to the gang's funds. + Chystáte se pozvat%1 na svůj gang, pokud přijmou pozvání budou mít přístup k finančním prostředkům gangu. + Estas a putno de invitar a %1 a tu pandilla, si aceptan tendran aceso al banco de tu Pandilla. + + Du bist dabei, %1 in deine Gang einzuladen. Wenn die Einladung angenommen wird, hat der Spieler Zugang zu den Mitteln der Gang. + Vous êtes sur le point d'inviter %1 à votre gang, s'ils acceptent l'invitation, ils auront accès à des fonds du gang. + Stai per invitare %1 nella tua Gang, se accetterà l'invito avrà accesso ai fondi della Gang. + Você está prestes a convidar %1 para a gangue, ele terá acesso aos recursos da gangue. + Właśnie zaprosiłeś %1 do gangu, jeśli zaakceptuje zaproszenie będzie miał dostęp do funduszy gangu. + + + You need to select a person to invite! + Musíte vybrat osobu vyzvat! + Tiense que selecionar a quien invitar! + + Du musst einen Spieler zum Einladen auswählen! + Vous devez sélectionner une personne à inviter! + Devi selezionare una persona da invitare! + Você tem que selecionar um jogador para convidar! + Musisz zaznaczyć osobę aby ją zaprosić + + + You have sent a invite to your gang to %1 + Jste adresoval zvou na svůj gang do%1 + Has invitado a %1 a tu Pandilla + + Du hast eine Einladung in deine Gang an %1 gesendet + Vous avez envoyé une invitation à votre gang à %1 + Hai mandato l'invito alla tua Gang a %1 + Você enviou um convite para %1 se juntar a sua gangue + Wysłałeś zaproszenie do twojego gangu do %1 + + + Invitation Cancelled + Pozvánka byla zrušena + Invitación Cancelada + + Einladung abgebrochen + Invitation Annulée + Invito Annullato + Convite Cancelado + Zaproszenie anulowane + + + You cannot kick yourself! + Nemůžete kopat sami! + No te puedes expulsar a ti mismo! + + Du kannst dich nicht selbst kicken! + Vous ne pouvez pas kicker vous-même! + Non puoi espellerti da solo! + Você não pode kickar você mesmo! + Nie możesz sam się wykopać! + + + Your gang has reached its maximum allowed slots, please upgrade your gangs slot limit. + Váš gang dosáhla svého maxima dovoleno sloty, proveďte upgrade hranice slotu vašeho gangu. + Tu Pandilla ha llegado a su máxima capacidad, aumenta los slots para seguir invitando. + + Deine Gang hat die maximale Anzahl an Plätzen erreicht, bitte erhöhe das Limit deiner Gang. + Votre gang à atteint le nombre de membre maximum, veuillez augmenter cette limite. + la tua Gang ha raggiungo il numero massimo di posti consentiti, aumentane il limite. + Sua gangue está lotada, você deve aumentar o número máximo de jogadores. + Twój gang osiągnął maksymalną pojemność, powiększ swój gang! + + + You need to select a person to kick! + Musíte vybrat osobu kopat! + Tienes que seleccionar a quien expulsar! + + Du musst einen Spieler auswählen, um ihn kicken zu können! + Vous devez choisir une personne pour la virée! + Devi selezionare una persona da espellere! + Você tem que selecionar um jogador para kickar! + Musisz zaznaczyć osobę do wykopania + + + You cannot leave the gang without appointing a new leader first! + Nemůžete opustit gang, aniž by o jmenování nového vůdce první! + No puedes salir de la Pandilla sin apuntar a un nuevo líder! + + Du kannst die Gang nicht verlassen, ohne einen neuen Anführer zu ernennen! + Vous ne pouvez pas quitter le gang sans la nomination d'un nouveau chef d'abord! + Non puoi abbandonare la Gang prima di aver selezionato un nuovo Capo! + Você não pode sair da gangue sem transferir a liderança antes! + Nie możesz opuścić gangu bez przekazania komuś szefostwa nad gangiem + + + You are about to transfer leadership over to %1<br/>By transferring leadership you will no longer be in control of the gang unless ownership is transferred back. + Chystáte se přenést vedoucí přes%1 < br / > Převedením vedení už nebude mít kontrolu nad gangu, pokud je vlastnictví převedeno zpět. + Estas a punto de transferir liderazgo a %1<br/>Al transferir liderazgo no tendrás control de la Pandilla. + + Du bist dabei, die Führung an %1 zu übertragen<br/>Durch die Übertragung der Leitung der Gang hast du keine Kontrolle mehr. + Vous allez transférer le commandement à %1<br/>En transférant le commandement, vous ne serez plus le chef du gang. + Stai per traferire il comando a %1<br/>Facendolo non avrai più il controllo della Gang fino a quando non ti verrà restituito il comando. + Você vai transferir a liderança da gangue para %1<br/>Você não será mais o lider, a não ser que a liderança seja transferida novamente. + Przekazałeś kierowanie gangiem %1<br/> W związku z tym nie będzesz od tej chwili kontroli nad gangiem chyba, że kierowownictwo zostanie ci powierzone ponownie. + + + Transfer of leadership cancelled. + Převod vedení zrušen. + Transferencia de liderazgo cancelada. + + Übertragung der Leitung abgebrochen. + Transfert du commandement annulée. + Trasferimento del comando annullato. + Transferencia de liderança cancelada. + Przkazanie kierownictwa anulowane. + + + You are already the leader! + Již jste vůdce! + Tu ya eres el líder! + + Du bist bereits der Anführer! + Vous êtes déjà chef! + Sei già il Capo! + Você já está na liderança! + Jesteś już liderem! + + + You need to select a person first! + Je třeba vybrat prvního člověka! + Tienes que seleccionar a alguien primero! + + Du musst erst eine Person auswählen! + Vous devez choisir une personne d'abord! + Devi selezionare una persona! + Você tem que selecionar um jogador antes! + Musisz najpierw zaznaczyć osobę! + + + You are about to upgrade the maximum members allowed for your gang. + Chystáte se aktualizovat maximální povolené členy pro svůj gang. + Estas a punto de aumentar la capacidad de tu Pandilla. + + Du bist dabei, die maximale Anzahl an Mitgliedern zu erhöhen. + Vous êtes sur le point de mettre à niveau la limite de membre autorisées pour votre gang. + Stai aumentando il numero massimo di membri consentiti all'interno della tua Gang + Você vai atualizar o limite de membros da gangue. + Chcesz zwiększyć maksymalną ilość członków w gangu. + + + Current Max: %1 + Proud Max: %1 + Límite Corriente: %1 + + Aktuelles Maximum: %1 + Max actuelle: %1 + Attuali Max: %1 + Número máximo atual: %1 + Aktualnie Max: %1 + + + Upgraded Max: %2 + Modernizované Max: %2 + Nuevo Límite: %2 + + Maximum erhöhen: %2 + Mise à niveau Max: %2 + Aumento Max: %2 + Novo número máximo: %2 + Po ulepszeniu Max: %2 + + + Price: + Cena: + Precio: + + Preis: + Prix: + Costo: + Preço: + Koszt: + + + You do not have enough money in your bank account to upgrade the gangs maximum member limit. + Nemáte dostatek peněz na modernizaci gangů maximální limit člena svého bankovního účtu. + No tienes suficiente dinero como para mejorar la capacidad de tu pandilla. + + Du hast nicht genug Geld auf deinem Bankkonto, um das Mitgliederlimit deiner Gang zu erhöhen. + Vous n'avez pas assez d'argent dans votre compte de banque pour mettre à niveau la limite de membre maximale. + Non hai abbastanza fondi nel tuo conto in banca per aumentare il limite massimo di membri. + Você não dinheiro suficiente para aumentar o limite da gangue. + Nie posiadasz wystarczającej ilości środków na koncie aby powiększyć gang + + + Current: + Aktuální + Corriente: + + Aktuell: + Actuel: + Attuale: + Atual: + Aktualny: + + + Lacking: + postrádat + Falta: + + Fehlend: + Manquant: + Mancanza: + Faltando: + Brakuje: + + + You have upgraded from %1 to %2 maximum slots for <t color='#8cff9b'>$%3</t> + Provedli jste upgrade z%1 do%2 Maximální sloty pro < k color = "# 8cff9b '> $%3 < / > + Has aumentado de %1 a %2 slots <t color='#8cff9b'>$%3</t> + + Du hast für <t color='#8cff9b'>$%3</t> von %1 auf %2 Plätze erhöht + Vous avez mis à niveau à partir de %1 à %2 membres maximum pour <t color='#8cff9b'>$%3</t> + Hai aumentato i posti massimi da %1 a %2 per <t color='#8cff9b'>$%3</t> + Limite de membros atualizado de %1 para %2 por <t color='#8cff9b'>R$%3</t> + Zwiększyłeś ilość możliwych członków gangu z %1 do %2 for <t color='#8cff9b'>$%3</t> + + + Upgrade cancelled. + Upgrade zrušena. + Mejora Cancelada. + + Aufwertung abgebrochen. + Mise à jour annulée. + Aumento annullato. + Cancelar Upgrade. + Ulepszanie anulowane. + + + Funds: + fondy + Fondos: + + Geld: + Fonds: + Fondi + Recursos: + Środki: + + + (Gang Leader) + (Gang Leader) + (Lider de Pandilla) + + (Anführer) + (Chef de Gang) + (Capo Gang) + (Lider da Gangue) + (Szef gangu) + + + You are already in a gang. + Jste již v gangu. + Ya estas en una pandilla. + + Sie befinden sich bereits in einer Gang. + Vous êtes déjà dans un gang. + Sei già in una banda. + Você já está em uma gangue. + Jesteś już w gangu. + + + Bad UID? + Bad UID? + Bad UID? + Bad UID? + Bad UID? + Bad UID? + Bad UID? + Bad UID? + Bad UID? + + + This player is already in a gang. + Tento hráč je již v gangu. + Ce joueur est déjà dans un gang. + Este jugador ya está en una pandilla. + Questo giocatore è già in una banda. + Ten gracz jest już w gangu. + Este jogador já está em uma gangue. + Этот игрок уже в банде. + Dieser Spieler ist bereits in einer Gang. + + + + + Vehicle Garage + Garáž Vehicle + Garaje de Vehículos + + Fahrzeug Garage + Garage de Vehicules + Garage Veicoli + Garagem de Veículos + Garaż + + + Get Vehicle + Získat vozidlo + Obtener Vehículo + + Ausparken + Récupérer + Ritira Veicolo + Pegar Veículo + Wyciągnij pojazd: + + + Sell Vehicle + Navrhujeme Vehicle + Vender Vehículo + + Fahrzeug verkaufen + Vendre + Vendi Veicolo + Vender Veículo + Sprzedaj pojazd + + + Sell Price + Navrhujeme Cena + Precio de Venta + + Verkaufspreis + Prix de vente + Prezzo di vendita + Preço de Venda + Cena sprzedaży + + + Storage Fee + skladného + Cuota de Guardado + + Lagergebühr + Frais de Stockage + Costo ritiro + Taxa de Armazenamento + Opłata parkingowa + + + No vehicles found in garage. + Žádná vozidla nalezený v garáži. + No se encontraron vehículos en el Garaje. + + Keine Fahrzeuge in der Garage gefunden. + Aucuns Vehicules. + Non hai veicoli nel Garage. + Nenhum veiculo encontrado na garagem. + Nie znaleziono pojazdów w garażu + + + You don't have $%1 in your bank account + Nemáte $%1 z vašeho bankovního účtu + No tienes $%1 en tu cuenta de Banco + + Du hast keine $%1 auf deinem Bankkonto + Tu n'as pas %1$ sur ton compte en banque. + Non hai $%1 nel tuo conto in banca + Você não tem R$%1 na sua conta bancária + Nie masz %1 na koncie bankowym: + + + Spawning vehicle please wait... + Plodit vozidlo čekejte prosím ... + Creando vehículo, por favor espera... + + Fahrzeug wird bereitgestellt, bitte warten... + Mise en place du Véhicule, merci de patienter... + Creazione veicolo attendere... + Obtendo veiculo, aguarde por favor... + Wyciągam pojazd, proszę czekać ... + + + Sorry but %1 was classified as a destroyed vehicle and was sent to the scrap yard. + Je nám líto, ale%1 byl klasifikován jako zničené vozidlo a byl poslán na šrotiště. + Lo siento, pero %1 fue clasificado como destruido y fue mandado al basurero. + + Entschuldigung, aber dein %1 wurde zerstört und auf den Schrottplatz geschickt. + Désolé mais votre %1 à été détruit et vendu à la casse. + Purtroppo %1 è stato classificato come veicolo distrutto ed è stato mandato allo sfascio. + O veículo %1 foi mandado para o ferro velho pois foi classificado como destroido. + Przepraszamy ale %1 został sklasyfikowany jako zniszczony i został odesłany na złom. + + + Sorry but %1 is already active somewhere in the world and cannot be spawned. + Je nám líto, ale%1 je již aktivní někde ve světě a nemůže být třel. + Lo siento, pero %1 esta activo en alguna parte del mundo y no puede aparecer. + + Entschuldigung, aber dein %1 ist bereits ausgeparkt worden und kann darum nicht bereitgestellt werden. + Désolé mais votre %1 à déjà été sortit du garage. + Purtroppo %1 è già presente nella mappa e non può essere ricreato + O veículo %1 já está presente no mapa e não pode ser retirado novamente + Przepraszamy ale %1 jest aktywny gdzieś na mapie i nie może zostać wyciągnięty. + + + There is already a vehicle on the spawn point. You will be refunded the cost of getting out out. + K dispozici je již vozidlo na spawn bodu. Ty budou vráceny náklady dostat se ven. + Ya hay un vehículo en el punto de Spawn, se te reembolsara el costo de sacar el vehículo. + + Es steht ein Fahrzeug auf dem Spawnpunkt. Die Kosten für das Ausparken werden dir erstattet. + Il y a déjà un véhicule sur le point de spawn. Le coût de sortie du véhicule vous sera remboursé. + C'è già un veicolo nel punto di creazione. Verrai rimborsato della spesa appena effettuata. + Existe um outro veiculo na area de spawn. Você será reembolsado. + W strefie parkowania znajduje się już pojazd. Środki za parkowanie zostaną zwrócone. + + + You sold that vehicle for $%1 + Ty jsi prodal toto vozidlo za $%1 + Vendiste el vehículo por $%1 + + Du verkaufst dein Fahrzeug für $%1 + Vous avez vendu votre véhicule pour $%1 + Hai venduto il veicolo per $%1 + Você vendeu um veículo por R$%1 + Sprzedałeś pojazd za %1 + + + That vehicle is a rental and cannot be stored in your garage. + Že vozidlo je půjčovna a nemohou být uloženy ve vaší garáži. + Este vehículo es rentado y no puede ser guardado. + + Mietwagen können nicht in der Garage geparkt werden. + Ce véhicule est une location et ne peut pas être stockée dans votre garage. + Il veicolo è in affitto e non può essere depositato in garage. + Esse veículo é alugado e não pode ser armazenado na garagem. + Pojazd wynajęty, nie możesz go schować w garażu. + + + That vehicle doesn't belong to you therefor you cannot store it in your garage. + Co vozidlo nepatří k vám proto jej nelze ukládat ve vaší garáži. + Este vehículo no es tuyo! Asi que no lo puedes guardar. + + Das Fahrzeug gehört nicht dir und kann deshalb nicht in der Garage geparkt werden. + Ce véhicule ne vous appartient pas, vous ne pouvez pas le stocker dans votre garage. + Il veicolo non ti appartiene e quindi non puoi depositarlo nel tuo garage. + Você não é o proprietário desse veiculo, logo não poderá guarda-lo na garagem. + Pojazd nie należy do ciebie nie możesz go schować w garażu. Ale zawsze możesz podjechać do dziupli! + + + The vehicle has been stored in your garage. + Vozidlo bylo uložené v garáži. + Has guardado el vehículo en el garaje. + + Das Fahrzeug wurde in der Garage geparkt. + Le véhicule a été entreposé dans le garage. + Il veicolo è stato depositato nel tuo garage. + O veículo foi guardado na sua garagem. + Pojazd został zaparkowany. + + + Your vehicle is ready! + Vaše vozidlo je připraven! + Tu vehículo esta listo! + + Dein Fahrzeug ist bereit! + Votre véhicule est prêt + Il tuo veicolo è pronto + O seu veículo está pronto + Pojazd jest gotowy + + + The server is trying to store the vehicle... + Tento server se pokouší uložit vozidlo ... + El servidor esta tratando de guardar el vehículo... + + Der Server versucht, das Fahrzeug zu speichern... + Le serveur tente de stocker le véhicule ... + Il server sta cercando di depositare il veicolo... + O servidor está guardando o veiculo... + Serwer próbuje schować pojazd w garażu ... + + + The selection had a error... + Volba obsahuje chybu ... + Huvo un error en la selección... + + Die Auswahl hat einen Fehler... + La selection à une erreur... + La selezione ha avuto un errore... + Erro ao selecionar.... + Ten wybór powoduje błąd + + + There isn't a vehicle near the NPC. + Není vozidla v blízkosti NPC. + No hay un vehículo cerca del NPC. + + Es befindet sich kein Fahrzeug in der Nähe des NPC. + Il n'y a pas de véhicule près du PNJ + Non c'è alcun veicolo vicino all'NPC. + Não existe um veículo proximo ao NPC + Nie ma pojazdu w pobliżu NPC + + + + + Key Chain - Current List of Keys + Klíčenka - Aktuální seznam klíčů + Llavero - Lista de llaves + + Schlüsselbund - Aktuelle Liste + Porte-clés - Liste actuelle des clés + Portachiavi - Lista delle Chiavi + Chaves - Atual Lista de Chaves + Lista kluczyków + + + Drop Key + Drop Key + Tirar llave + + Schlüssel wegwerfen + Jeter Clef + Abbandona Chiave + Remover Chave + Wyrzuć klucz + + + Give Key + dát klíč + Dar Llave + + Schlüssel geben + Donner Clef + Dai Chiave + Dar Chave + Daj klucz + + + + + Player Menu + Nabídka přehrávače + Menu de Jugador + + Spieler Menü + Menu du Joueur + Menu Giocatore + Menu Jogador + Menu gracza + + + Current Items + Aktuální položky + Objetos Actuales + + Aktuelle Items + Items Actuels + Oggetti Attuali + Items Atuais + Aktualne wyposażenie: + + + Licenses + licencí + Licencias + + Lizenzen + Licences + Licenze + Licenças + Licencje + + + Money Stats + peníze Statistiky + Dinero + + Geld Statistiken + Stats Monétaires + Statistiche Fondi + Dinheiro + Twoje środki + + + My Gang + My Gang + Mi Pandilla + + Meine Gang + Mon Gang + Mia Gang + Gangue + Gang + + + Wanted List + seznamu hledaných + Lista de Busqueda + + Fahndungsliste + Interpol + Lista Ricercati + Lista de Foragidos + Poszukiwani + + + Cell Phone + Mobilní telefon + Celular + + Telefon + Téléphone + Cellulare + Celular + Telefon + + + Key Chain + Klíčenka + Llavero + + Schlüsselbund + Porte-clés + Portachiavi + Chaves + Klucze + + + Admin Menu + Nabídka admin + Menu Admin + + Admin Menü + Menu Admin + Menu Admin + Menu Admin + Admin Menu + + + Sync Data + synchronizace dat + Sincronizar + + Daten speichern + Sync Data + Salva Dati + Sincronizar Dados + Synchronizuj + + + + + Settings Menu + Nabídka Nastavení + Configuración + + Einstellungen + Menu Paramètres + Menu Impostazioni + Configurações + Ustawienia: + + + On Foot: + Pěšky: + A Pie: + + Zu Fuß: + Pied: + A piedi: + A Pé: + Na nogach: + + + In Car: + V autě: + En Carro: + + Im Auto: + Terre: + Auto: + No Carro: + W aucie: + + + In Air: + Ve vzduchu: + En Aire: + + In der Luft: + Air: + Aria: + No Ar: + W powietrzu: + + + View distance while on foot + Pohled vzdálenost, zatímco na nohy + Distancia de vista a pie + + Sichtweite zu Fuß + Distance de vue à pied + Distanza visiva a piedi + Visualizar distância enquanto a pé + Widoczność gdy na nogach + + + View distance while in a land vehicle + Pohled vzdálenost, zatímco v pozemního vozidla + Distancia de vista en vehiculo terrestre + + Sichtweite in Fahrzeugen + Distance de vue en voiture + Distanza visiva su veicolo di terra + Visualizar distância enquanto em veículos terrestres + Widoczność gdy w aucie + + + View distance while in a air vehicle + Pohled vzdálenost, zatímco ve vzduchu vozidle + Distancia de vista en vehiculo aéreo + + Sichtweite in Helikoptern + Distance de vue dans les airs + Distanza visiva su velivolo + Visualisar distância enquanto em veículos aéreos + Widoczność gdy w powietrzu + + + Player Tags + přehrávač Tags + Marcador de Jugadores + + Spielernamen + Tags Joueurs + Tag Giocatore + Tags de Jogadores + Tagi graczy + + + Tags ON + značky na + Tags ON + + Namen AN + Tags ON + Tags ON + Tags ON + Tagi ON + + + Tags OFF + Štítky OFF + Tags OFF + + Namen AUS + Tags OFF + Tags OFF + Tags OFF + Tagi OFF + + + Sidechat Switch + Sidechat Spínač + Canal camp + Habilitar Sidechat + Interruttore Sidechat + Sidechat Przełącznik + + Habilitar Sidechat + Sidechat aktivieren + + + Reveal Nearest Objects + Reveal Nejbližší objekty + Révéler les objets les plus proches + Revelar Objetos Cercanos + Rivela oggetti più vicini + Odsłonić Najbliższa Przedmioty + + Mostrar Objetos Próximos + Nahe Objekte anzeigen + + + Broadcast Switch + + + Habilitar Transmisiones + + + + Habilitar Transmissões + + + + Sidechat OFF + Sidechat OFF + Sidechat OFF + + Sidechat AUS + Canal camp OFF + Chat fazione OFF + Sidechat OFF + Czat strony OFF + + + Sidechat ON + Boční Chat ON + Sidechat OFF + + Sidechat AN + Canal camp ON + Chat fazione ON + Sidechat ON + Czat strony ON + + + + + Shop Inventory + Obchod Zásoby + Inventario de Tienda + + Ladeninventar + Boutique + Inventario Negozio + Loja de Inventário + Oferta sklepu + + + Your Inventory + Váš Inventory + Tu Inventario + + Eigenes Inventar + Ton Inventaire + Inventario Personale + Seu Inventário + Twoje wyposażenie + + + Buy Item + Koupit Item + Comprar + + Kaufen + Acheter Objet + Compra Oggetto + Comprar Item + Kup objekt + + + Sell Item + Navrhujeme Item + Vender + + Verkaufen + Vendre Objet + Vendi Oggetto + Vender Item + Sprzedaj obiekt + + + + + Spawn Selection + potěr Selection + Selección de Spawn + + Spawn Auswahl + Selection du Spawn + Selezione Spawn + Locais para Começar + Wybierz punkt odrodzenia + + + Spawn + Potěr + Spawn + + Spawnen + Spawn + Spawn + Começar + Odradzanie + + + Current Spawn Point + Aktuální potěr Point + Punto de Spawn Actual + + Aktueller Spawnpunkt + Point de Spawn Actuel + Punto di Spawn corrente + Ponto de início Atual + Aktualny punkt odrodzenia + + + You have spawned at + Jste třel + Has aparecido en + + Du bist gespawnt in + Tu as spawn à + Ti trovi a + Você irá começar em + Odrodziłeś się w + + + + + Give Ticket + Dejte Ticket + Dar Tiquete + + Ticket geben + Verbaliser + Dai Multa + Dar Multa + Wystaw mandat + + + Pay Ticket + Pay vstupenek + Pagar Tiquete + + Ticket bezahlen + Payer l'amende + Paga Multa + Pagar Multa + Zapłać mandat + + + Refuse Ticket + odmítnout Ticket + Denegar Tiquete + + Ticket ablehnen + Contester l'amende + Rifiuta Multa + Recusar Multa + Odmów przyjęcia mandatu + + + + + Trunk Inventory + kufr Inventory + Inventario del Vehículo + + Kofferraum + Coffre + Inventario Veicolo + Inventário do Veículo + Zawartość + + + Player Inventory + hráč Inventory + Inventario del Jugador + + Spielerinventar + Inventaire Joueur + Inventario Giocatore + Inventário do Jogador + Wyposażenie gracza + + + Take + Vzít + Sacar + + Nehmen + Récupérer + Prendi + Pegar + Weź + + + Store + Obchod + Guardar + + Lagern + Déposer + Deposita + Depositar + Schowaj + + + + + APD Wanted List + LAPD seznamu hledaných + Lista de Busqueda + + Fahndungsliste + Interpol + Lista Ricercati + Lista APD Poszukiwane + Lista de Procurados + + + Pardon + Pardon + Perdonar + + Erlassen + Excuser + Perdona + Pardon + Perdão + + + Add + Přidat + Ajouter + Agregar + Aggiungere + Dodaj + + Adicionar + Hinzufügen + + + Wanted People + chtěl, aby lidé + Les personnes recherchées + Gente Buscada + La gente voleva + Ludzie chcieli + + Pessoas Procuradas + Wanted + + + Citizens + občané + Citoyens + Ciudadanos + cittadini + Obywatele + + Cidadãos + Bürger + + + Crimes + Zločiny + Crimes + Crimenes + crimini + Zbrodnie + + Crimes + Verbrechen + + + %1 has been added to the wanted list. + %1 byl přidán do seznamu hledaných. + %1 a été ajouté à la liste des personnes recherchées. + %1 ha sido agregado a la Lista de Busqueda. + %1 è stato aggiunto alla lista dei ricercati. + %1 został dodany do listy pożądanego. + + %1 foi adicionado a lista de procurados. + %1 wurde zur Fahndungsliste hinzugefügt. + + + %1 count(s) of %2 + Počet%1 (y) z%2 + %1 chef (s) de 2% + %1 cuenta(s) de %2 + %1 count (s) del 2% + %1 count (ów) z %2 + + %1 contagem(s) de %2 + %1 Vergehen: %2 + + + Current Bounty Price: $%1 + Aktuální Bounty Cena: $ %1 + Prix de la prime: $%1 + Recompensa Actual: $%1 + Corrente Bounty Prezzo: $%1 + Aktualny Bounty Cena: $%1 + + Atual recompensa: R$%1 + Aktueller Finderlohn: $%1 + + + + + Salema + Salema + Salema + + Salema + Saumon + Salmone + Salema + Salema + + + Ornate + Vyšperkovaný + Ornate + + Ornate + Ornate + Orata + Ornamentado + Dorada + + + Mackerel + Makrela + Verdel + + Makrele + Maquereau + Sgombro + Cavalinha + Makrela + + + Tuna + Tuňák + Atún + + Thunfisch + Thon + Tonno + Atum + Tuńczyk + + + Mullet + cípal + Lisas + + Barbe + Mullet + Triglia + Tainha + Cefal + + + Cat Shark + Cat žralok + Pez Gato + + Katzenhai + Poisson Chat + Squalo + Tubarão Gato + Rekin + + + Rabbit + Králičí + Conejo + + Hase + Lapin + Coniglio + Coelho + Zając + + + Chicken + Kuře + Gallina + + Hähnchen + Poulet + Pollo + Frango + Kurczak + + + Rooster + Kohout + Gallo + + Hahn + Coq + gallo + galo + kogut + + + Goat + Koza + Cabra + + Ziege + Chèvre + Capra + Cabra + Koza + + + Sheep + Ovce + Obeja + + Schaf + Mouton + pecora + ovelha + Owca + + + Turtle + Želva + Tortuga + + Schildkröte + Tortue + Tartaruga + Tartaruga + żółw + + + + + You do not have $%1 for a %2 + Nemáte $%1 pro%2 + No tienes $%1 para una %2 + + Du hast keine $%1 für einen %2 + Tu n'as pas %1$ pour cet élément : %2 + Non hai $%1 per $2 + Você não tem R$%1 para %2 + Nie masz $%1 na %2 + + + You bought a %1 for $%2 + Koupil sis%1 pro $ %2 + Comprastes una %1 por $%2 + + Du hast einen %1 für $%2 gekauft + Tu as acheté cet élément : %1 pour %2$ + Hai comprato un %1 per $%2 + Você comprou %1 por R$%2 + Kupiłeś %1 za $%2 + + + %1 was arrested by %2 + %1 byl zatčen%2 + %1 fue arrestado por %2 + + %1 wurde von %2 verhaftet + %1 a été arrêté par %2 + %1 è stato arrestato da %2 + %1 foi preso por %2 + %1 został aresztowany przez %2 + + + You caught a %1 + chytil jste%1 + Atrapastes un %1 + + Du hast einen %1 gefangen + Tu as attrapé un(e) %1 + Hai pescato %1 + Você pegou %1 + Złapałeś %1 + + + Gutting %1 + Kuchání%1 + Eviscerando %1 + + Ausnehmen %1 + éviscération %1 + eviscerazione %1 + evisceração %1 + Patroszenie %1 + + + You have collected some raw %1 meat + Nasbíráte nějaké syrové maso %1 + Has recolectado carne cruda de %1 + + You have collected some raw %1 meat + Vous avez recolté quelques bout de viande de %1 + You have collected some raw %1 meat + You have collected some raw %1 meat + You have collected some raw %1 meat + + + You have taken some turtle meat + Jste si vzali nějaké želví maso + Has tomado carne de tortuga. + + Du hast etwas Schildkrötenfleisch bekommen + Tu as récupéré un peu de viande de tortue + Hai raccolto della carne di tartaruga + Você pegou carne de tartaruga + Wziąłeś trochę mięsa żółwia + + + You have earned $%1 + Jste získali $%1 + Has ganado $%1 + + Du hast $%1 verdient + Tu as gagné %1$ + Hai guadagnato $%1 + Você ganhou R$%1 + Otrzymałeś $%1 + + + Dropping fishing net... + Pád rybářská síť ... + Tirando red de pesca... + + Fischernetz auswerfen... + Déploiement du filet de pêche.... + Posizionando la rete da pesca... + Jogando rede de pesca... + Rzucam sieć... + + + Didn't catch any fish... + Nezachytil žádnou rybu ... + No atrapastes peces... + + Keinen Fisch gefangen... + Tu n'as pas réussi à attraper aucun poisson... + Non hai pescato nulla... + A rede voltou vazia... + Nic nie złapałeś... + + + Fishing net pulled up. + Rybářská síť vytáhl nahoru. + Recogistes la red. + + Fischernetz einholen. + Le filet de pêche a été entièrement relevé. + Rete da pesca recuperata. + A rede de pesca foi recolhida + Sieć wciągnięta. + + + Your inventory space is full. + Váš inventář prostor je plný. + No tienes espacio en tu inventorio. + + Dein Inventar ist voll. + Tu n'as plus de place dans ton inventaire. + Il tuo inventario è pieno. + Seu inventário está cheio + Nie masz więcej miejsca. + + + Gathering %1... + Sběr%1 ... + Recolectando %1... + + Sammle %1... + Ramassage %1... + Raccogliendo %1 + Coletando %1... + Zbierasz %1 + + + You have sold a %1 for $%2 + Jste prodal%1 pro $ %2 + Has vendido un %1 por $%2 + + Du hast einen %1 für $%2 verkauft + Tu as vendu cet élément : %1 pour $%2 + Hai venduto un %1 per %2$ + Você vendeu %1 por R$%2 + Sprzedałeś %1 za $%2 + + + You have picked %1 %2 + Jste si vybrali% %1 2 + Has recogido %1 %2 + + Du hast %1 %2 gesammelt + Tu as ramassé : %1 %2 + Hai trovato %1 %2 + Você pegou %1 %2 + Podniosłeś %1 %2 + + + You have collected some %1 + Jste nasbírali řadu%1 + Has recolectado %1 + + Du hast etwas %1 gesammelt + Tu as ramassé %1 + Hai raccolto %1 + Você coletou %1 + Wziąłeś %1 + + + You are to deliver this package to %1. + Jste doručit tento balíček%1 + Debes llevar este paquete a %1 + + Du musst dieses Paket bei %1 abliefern + Vous avez livré ce packet à %1 + Devi consegnare questo pacco al %1 + Você deverá entregar esse pacote para %1 + Dostarcz tę przesyłkę do %1 + + + Deliver this package to %1. + Doručit tento balíček%1 + LLeva el paquete a: %1 + + Liefere dieses Paket bei %1 ab + Livrer ce paquet à %1 + Consegna questo pacco al %1 + Entregue esse pacote para %1 + Dostarcz przesyłkę do %1 + + + You failed to deliver the package because you died. + Nepodařilo se vám doručit balíček, protože jsi zemřela. + Fallastes la misión, porque moristes. + + Du hast es nicht geschafft, das Paket abzuliefern, da du gestorben bist. + Vous avez omis de livrer le colis car vous êtes morts. + Compra Oggetto + Você falhou na tarefa de entrega pois você morreu. + Nie dostarczyłeś przesyłki z uwagi na to że zmarłeś. + + + You do not have $%1 to be healed + Nemáte $%1, aby se léčil + No tienes $%1 para ser curado + + Du hast keine $%1, um geheilt zu werden. + Vous n'avez pas $%1 pour vous soignez. + Non hai $%1 per essere curato + Você não tem R$%1 para ser curado + Nie masz $%1 na leczenie + + + You do not need to be healed! + Nemusíte být uzdraven! + Vous ne devez pas être guéri! + Usted no necesita ser curado! + Non è necessario essere guarito! + Nie trzeba się wyleczyć! + Você não precisa ser curado! + Вам не нужно быть исцелены! + Sie brauchen nicht geheilt zu werden! + + + Spend $%1 to be fully healed? + Útrata $%1 musí být zcela vyléčit? + Donnez $%1 pour être complètement guéri? + Gastar $%1 para ser curado por completo? + Spendere $%1 di essere completamente guarito? + Wydać $%1 w pełni uzdrowiony? + Gastar US $%1 para ser totalmente curado? + Потратит $%1, чтобы быть полностью зажила? + Spend $%1 vollständig geheilt zu werden? + + + Doctor + Doktor + Docteur + Médico + Medico + Lekarz + Médico + Врач + Arzt + + + Please stay still + Prosím, zůstat v klidu + Por favor, no te muevas + + Bitte bewege dich nicht + Ne bougez pas + Attendi pazientemente + Fique parado por favor + Proszę się nie ruszać + + + You need to be within 5m while the doctor is healing you + Musíte být v rámci 5m, zatímco lékař vás hojení + Debes estar a 5m mientras que te curan. + + Du musst in der Nähe des Doktors bleiben, während du geheilt wirst + Vous devez être à moins de 5m pendant que le médecin vous soigne + Devi restare entro 5m dal dottore per essere curato + Você tem que estar a 5m para o médico curá-lo + Musisz być w pobliżu doktora gdy ten cię leczy - ok 5m + + + You are now fully healed. + Ty jsou nyní plně uzdravil. + Estas curado! + + Du wurdest geheilt. + Vous êtes completement soigner. + Sei stato curato completamente. + Sua saúde está perfeita + Zostałeś wyleczony + + + %1 your %2 is being impounded by the police. + %1 Váš%2 je zabaveno policií. + %1 tu %2 esta siendo embargado por la policía. + + %1 dein %2 wird von der Polizei beschlagnahmt. + %1 votre %2 est envoyé a la fourrière par la police. + %1 il tuo %2 sta per essere sequestrato dalla Polizia. + %1 seu %2 está sendo apreendido pela Polícia + %1 twój %2 jest usuwany przez Policję + + + Impounding Vehicle + vzdouvání Vehicle + Embargando Vehículo + + Fahrzeug wird beschlagnahmt + Mise en fourrière + Sequestro Veicolo in corso + Apreendendo veículo + Usuwam pojazd + + + Impounding has been cancelled. + Zabavení byla zrušena. + Embargo cancelado. + + Beschlagnahmung abgebrochen. + Mise en fourrière annulée. + Il sequestro è stato annullato. + Ação de apreender foi cancelada + Przerwano usuwanie pojazdu + + + You have impounded a %1\n\nYou have received $%2 for cleaning up the streets! + Jste zabaveno a%1 \ n \ n jste obdržel $%2 pro čištění ulic! + Has embargado un %1\n\nHas recibido $%2 por limpiar las calles! + + Du hast einen %1 beschlagnahmt\n\nDu hast $%2 für das Aufräumen der Straßen bekommen! + Vous avez mis en fourrière un(e) %1\n\nVous avez reçus $%2 pour avoir nettoyé les rues! + Hai sequestrato un %1\n\nHai ricevuto $%2 per aver mantenuto l'ordine nelle strade! + Você apreendeu %1\n\nVocê recebeu R$%2 por deixar as ruas mais seguras! + Usunąłeś %1\n\n Otrzymujesz $%2 za oczyszczanie mapy + + + %1 has impounded %2's %3 + %1 byl odtažen% %2 3 je + %1 a embargado el %3 de %2 + + %1 hat %2's %3 beschlagnahmt + %1 a mis en fourrière le %3 de %2. + %1 ha sequestrato il %2 di %3 + %1 apreendeu %3 de %2 + %1 usunął %2's %3 + + + You paid $%1 for impounding your own %2. + Zaplatil jste $%1 pro vzdouvání vlastní %2. + Vous avez payé $%1 pour la mise en fourrière de votre propre %2. + Has pagado $%2 para embargar tu propio %1. + Hai pagato $%1 per sequestro la propria %2. + Zapłaciłeś $%1 do zatrzymywania własną %2. + + Du hast %1 $ bezahlt, weil du dein eigenen %2 beschlagnahmt hast. + Você pagou R$%1 para guardar seu próprio %2. + + + Abort available in %1 + Přerušit k dispozici v %1 + Aborto disponible en %1 + + Abbruch möglich in %1 + Abandonner disponible dans %1 + Abbandona disponibile in %1 + Abortar disponível em %1 + Możesz przerwać za %1 + + + This vehicle is already mining + Toto vozidlo je již dobývání + Este Vehículo ya esta minando + + Dieses Fahrzeug ist bereits am Sammeln + Ce véhicule est déjà en train de miner + Questo veicolo sta già estraendo risorse + Esse veículo já está minerando + Pojazd jest w trakcie wydobycia surowców + + + The vehicle is full + Vozidlo je plná + El vehículo esta lleno! + + Das Fahrzeug ist voll. + Le véhicule est plein. + Il veicolo è pieno + O veículo está cheio. + Pojazd jest pełny + + + You are not near a resource field + Nejste v blízkosti oblasti zdrojů + No estas cerca de un campo de recursos. + + Du bist nicht in der Nähe einer Mine + Vous n'êtes pas à proximité d'un champ de ressources + Non sei vicino ad un campo risorse + Você não está próximo ao recurso + Nie jesteś w pobliżu pola surowców + + + You cannot turn the vehicle on when mining + Nemůžete otočit vozidlo o tom, kdy výtěžek + No puedes girar el vehículo mientras esta minando + + Du kannst das Fahrzeug nicht starten, solange es am Sammeln ist + Le moteur doit être arreté pour que le véhicule mine + Non puoi accendere il veicolo mentre estrae risorse + Você não pode ligar o veículo enquanto minera + Nie możesz poruszać pojazdem w trakcie wydobycia. + + + The Device is mining... + Zařízení je důlní ... + El Dispositivo esta minando... + + Das Fahrzeug sammelt... + Le véhicule est en train de miner... + Il veicolo sta estrando risorse... + A máquina está minerando... + Trwa wydobycie... + + + Completed cycle, the device has mined %1 %2 + Dokončena cyklus, přístroj se těžil% %1 2 + Ciclo completado el dispositivo ha minado %1 %2 + + Sammeln beendet, das Gerät hat %1 %2 gesammelt + Cycle terminé, le véhicule à miné %1 %2 + Ciclo completato, il veicolo ha raccolto %1 %2 + Ciclo completo, a máquina minerou %1 %2 + Urządzenie wydobyło %1 %2 + + + Vehicle is out of fuel + Vozidlo je mimo pohonné hmoty + El vehículo no tiene gasolina. + + Das Fahrzeug hat keinen Treibstoff mehr + Le véhicule n'a plus d'essence. + Il veicolo è senza carburante + O veículo está sem combustível + Brak paliwa w pojezdzie + + + You have packed up the spike strip. + Jste sbalil spike proužek. + Has agarrado la Barrera de Clavos. + + Du hast das Nagelband eingepackt. + Vous avez remballé la herse. + Hai raccolto una striscia chiodata. + Você recolheu o tapete de espinhos. + Kolczatka zwinięta + + + %1 has been placed in evidence, you have received $%2 as a reward. + %1 byl umístěn v důkazu, jste obdrželi $%2 jako odměnu. + %1 ha sido colocado en evidencias, has recibido $%2 como recompensa. + + %1 hat Beweise hinterlassen, du hast eine Belohnung von $%2 erhalten. + Vous avez ramassé la drogue de %1, vous avez reçu $%2 comme une récompense. + E' stata trovata della merce illegale: %1, hai ricevuto $%2 come ricompensa. + %1 foi pego como evidência, você recebeu R$%2 como recompensa. + %1 umieszczony w dowodach, otrzymujesz w nagrodę $%2 + + + You have picked up $%1 + Jste zvedl $%1 + Has recogido $%1 + + Du hast $%1 aufgehoben + Vous avez ramassé $%1 + Hai raccolto $%1 + Você pegou R$%1 + Podniosłeś $%1 + + + You must wait at least 3 minutes in jail before paying a bail. + Musíte počkat nejméně 3 minuty ve vězení předtím, než platit kauci. + Debes esperar un minimo de 3 minutos en la cárcel antes de poder pagar la fianza. + + Du musst mindestens 3 Minuten lang im Gefängnis bleiben, bevor du die Kaution beantragen kannst. + Vous devez attendre au moins 3 minutes en prison avant de payer une caution. + Devi aspettare almeno 3 minuti in prigione prima di poter pagare la cauzione. + Você precisa esperar pelo menos 3 minutos antes de poder pagar fiança. + Musisz poczekać conajmniej 3 minuty w więzieniu zanim zapłacisz kaucję. + + + You do not have $%1 in your bank account to pay bail. + Nemáte $%1 z vašeho bankovního účtu platit kauci. + No tienes $%1 en tu cuenta de banco para pagar la fianza! + + Du hast keine $%1 auf deinem Bankkonto, um die Kaution zu bezahlen. + Vous n'avez pas $%1 dans votre compte en banque pour payer la caution. + Non hai $%1 nel tuo conto in banca per poter pagare la cauzione. + Você não tem R$%1 em sua conta bancária para pagar a fiança. + Nie masz $%1 na koncie aby zapłacić kaucję. + + + %1 has posted bail! + %1 byl vyslán na kauci! + %1 a pagado la fianza! + + %1 hat die Kaution bezahlt! + %1 a payé sa caution! + %1 ha pagato la cauzione! + %1 pagou a fiança! + %1 wpłacił kaucję! + + + There isn't a vehicle nearby... + Není vozidlo v blízkosti ... + No hay un vehículo cerca... + + Es ist kein Fahrzeug in der Nähe... + Il n'y a pas de véhicule à proximité... + Non c'è alcun veicolo qui vicino... + Não existe um veículo por perto... + W pobliżu nie ma pojazdu... + + + You can't chop a vehicle while a player is near! + Nemůžeš sekat vozidla, zatímco hráč je blízko! + Vous ne pouvez pas vendre un véhicule alors qu'un le joueur est proche! + No puedes vender este vehículo mientras hay un jugador cerca! + Non si può rubare un veicolo mentre un giocatore è vicino! + Nie można posiekać pojazd podczas gdy gracz jest w pobliżu! + + Você não pode usar o desmanche enquanto um jogador está próximo! + Du kannst kein Fahrzeug beim Schrottplatz verkaufen, während ein Spieler in der Nähe ist! + + + %1 was restrained by %2 + %1 byl omezen%2 + %1 fue retenido por %2 + + %1 wurde von %2 festgenommen + %1 a été menotté par %2 + %1 è stato ammanettato da %2 + %1 foi imobilizado por %2 + %1 został skuty przez %2 + + + Searching... + Hledám ... + Buscando... + + Suche... + Recherche... + Ricerca... + Revistando... + Szukam... + + + Couldn't search the vehicle + Nemohli vyhledávat na vozidlo + No se pudo buscar el vehículo. + + Das Fahrzeug konnte nicht durchsucht werden + Impossible de fouiller le véhicule + Impossibile ispezionare il veicolo + Você não pode revistar o veículo + Nie można przeszukać pojazdu + + + Your illegal items have been put into evidence. + Vaše nelegálních položky byly uvedeny do důkazy. + Tus objetos ilegales fueron confiscados. + + Ihre illegale Gegenstände wurden als Beweismittel gesetzt. + Vos articles illégaux ont été mis en preuve. + I tuoi articoli illegali sono stati messi sotto sequestro. + Seus itens ilegais foram postos em evidência. + Twoje nielegalne pozycje zostały wprowadzone do dowodów. + + + This vehicle has no information, it was probably spawned in through cheats. \n\nDeleting vehicle. + Toto vozidlo nemá žádné informace, to bylo pravděpodobně třel dovnitř podvodníky. \ In \ Odstranění vozidla. + Este vehículo no tiene informacion, posiblemente fue creado atravez de Cheats \n\nBorrando vehículo. + + Über das Fahrzeug gibt es keine Informationen, es wurde vermutlich durch Cheats gespawnt. \n\nLösche Fahrzeuge. + Ce véhicule dispose d'aucune information, il a probablement été engendré à travers un tricheurs. \n\ Supression véhicule. + Il veicolo è privo di identificativi, probabilmente è stato creato mediante cheat. \n\nCancellazione veicolo. + Esse veículo não tem informações, é provável que ele tenha sido criado por um cheater.\n\nDeletando veículo. + Pojazd bez informacji servera, prawdopodobnie umieszczony przez hakera \n\n usuwam pojazd. + + + You are already doing an action. Please wait for it to end. + Ty jsou již dělá akci. Počkejte prosím, až to skončí. + Ya estas haciendo una acción, espera a que termine. + + Du führst bereits eine Aktion aus. Bitte warte, bis diese beendet ist. + Vous faites déjà une action. S'il vous plaît attendez qu'elle se termine. + Stai già compiendo un'azione, attendi che finisca. + Você já está executando uma ação. Por favor espere até que ela acabe. + Aktualnie wykonujesz jakąś akcję poczekaj aż skończysz. + + + %1 was unrestrained by %2 + %1 byl živelný%2 + %1 fue soltado por %2 + + %1 wurde von %2 freigelassen + %1 a été démenotté par %2 + %2 ha tolto le manette a %1 + %1 foi liberado por %2 + %1 został rozkuty przez %2 + + + %1 has robbed %2 for $%3 + %1 oloupil%2 na $ %3 + %1 le ha robado $%3 a %2 + + %1 hat $%3 von %2 geraubt + %1 a volés %2 pour $%3 + %1 ha rapinato %2 di $%3 + %1 roubou R$%3 de %2 + %1 obrabował $%2 na $%3 + + + %1 doesn't have any money. + %1 nemá žádné peníze. + %1 No tiene dinero. + + %1 hat kein Geld. + %1 n'a pas d'argent. + %1 non ha alcun soldo. + %1 não tem nenhum dinheiro. + %1 nie ma pieniędzy. + + + %1 was tazed by %2 + %1 byl tased%2 + %1 fue paralizado por %2 + + %1 wurde von %2 getazert + %1 a été tazé par %2 + %1 è stato taserato da %2 + %1 foi eletrocutado por %2 + %1 został potraktowany paralizatorem przez %2 + + + A vehicle was searched and has $%1 worth of drugs / contraband. + Vozidlo byl prohledán a má $%1 v hodnotě drog / kontrabandu. + Un vehículo fue buscado y se econtro $%1 en drogas / contrabando. + + Ein Fahrzeug wurde durchsucht und es wurden Drogen / Schmuggelware im Wert von $%1 gefunden. + Un véhicule venant d'être fouillé avait $%1 de drogue / contrebande. + Un veicolo è stato ispezionato e sono stati sequestrati $%1 in materiale illegale. + O veículo foi revistado e tem R$%1 em drogas ou contrabandos + Podczas przeszukania znalezono narkotyki/kontrabandę o wartości $%1 + + + A container of house was searched and has $%1 worth of drugs / contraband. + Kontejner domu byl prohledán a má $%1 v hodnotě drog / kontrabandu. + Un contenedor fue buscado y se econtro $%1 en drogas / contrabando. + + Ein Fahrzeug wurde durchsucht und es wurden Drogen / Schmuggelware im Wert von $%1 gefunden. + Un conteneur de maison venant d'être fouillé avait $%1 de drogue / contrebande. + Un veicolo è stato ispezionato e sono stati sequestrati $%1 in materiale illegale. + O veículo foi revistado e tem R$%1 em drogas ou contrabandos + Podczas przeszukania znalezono narkotyki/kontrabandę o wartości $%1 + + + You have been pulled out of the vehicle. + Byli jste vytáhl z vozu. + Te han sacado del vehículo + + Du wurdest aus dem Fahrzeug gezogen + Vous avez sortie les personnes du véhicule + Sei stato estratto dal veicolo + Você foi retirado do veículo + Zostałeś wyciągnięty z pojazdu + + + %1 has gave you %2 %3. + %1 vám již dal% %2 3. + %1 te ha dado %2 %3 + + %1 hat dir %2 %3 gegeben + %1 vous a donné %2 %3 + %1 ti ha dato %2 %3 + %1 lhe deu %2 %3 + %1 dał ci %2 %3 + + + %1 has given you $%2. + %1 vám dal $ %2. + %1 te ha dado $%2 + + %1 hat dir $%2 gegeben + %1 vous a donné $%2 + %1 ti ha dato $%2 + %1 lhe deu R$%2 + %1 dał ci $%2 + + + Sending information to server please wait..... + Odesílání informací serveru čekejte prosím ... + Mandando información, por favor espere... + + Sende Informationen an den Server, bitte warten..... + Envoi d'informations au serveur, patientez s'il vous plait.... + Invio delle informazioni al server, attendere prego...... + Enviando informações para o servidor, seja paciente..... + Przesyłam informacje na server poczekaj .... + + + An action is already being processed... + Akce je již zpracován ... + Una acción ya esta siendo procesada... + + Es wird bereits eine Aktion ausgeführt... + Une action est déjà en cours de traitement ... + Un'azione è già in corso... + Você já está realizando um ação... + Akcja jest w trakcie wykonywania... + + + You're doing it too fast! + Děláte to příliš rychle! + Vous le faites trop vite! + Lo estas haciendo muy rapido! + Lo stai facendo troppo veloce! + + Du bist ganz aus der Puste! Warte ein paar Sekunden! + Você está fazendo isso muito rápido! + Za szybko zwolnij ! + + + You don't have enough space for that amount! + Nemáte dostatek prostoru pro tuto částku! + No tienes suficiente espacio para eso! + + Du hast für diese Menge nicht genug Platz! + Vous n'avez pas assez d'espace! + Non hai abbastanza spazio per quel quantitativo! + Você não tem espaço suficiente para guardar o item + Nie masz tyle miejsca! + + + You don't have that much money! + Nemáte tolik peněz! + No tienes tanto dinero! + + Du hast nicht so viel Geld! + Vous n'avez pas assez d'argent! + Non hai tutti quei soldi! + Você não tem todo esse dinheiro! + Nie masz tyle pieniędzy! + + + You are not a cop. + Ty nejsi polda. + No eres policía. + + Du bist kein Polizist. + Vous n'êtes pas flic. + Non sei un poliziotto. + Você não é um Policial. + Nie jesteś policjantem + + + You don't have enough room for that item. + Nemáte dostatek prostoru pro danou položku. + No tienes el espacio suficiente. + + Du hast nicht genug Platz für den Gegenstand. + Vous n'avez pas assez de place. + Non hai abbastanza spazio per quell'oggetto. + Você não tem espaço suficiente no seu inventário. + Nie masz wystarczająco miejsca na tą rzecz. + + + You need $%1 to process without a license! + Musíte $%1 bez povolení ke zpracování! + Necesitas $%1 par procesar sin una licencia! + È necessario $%1 a processo senza patente! + + Du musst $%1 haben, um ohne eine Lizenz verarbeiten zu können! + Vous devez payer $%1 pour traiter sans licence! + Você precisa de R$%1 para processar sem uma licença! + Potrzebujesz $%1 w celu przetworzenia bez licencji + + + You don't have enough items! + Ty nemají dostatek položku! + No tienes suficientes objetos! + Non disponi di abbastanza materiale grezzo! + Nie masz wystarczająco dużo rzeczy! + + Vous n'avez pas assez d'item! + Você não tem itens suficientes! + Du hast nicht genug Materialien! + + + You have processed your item(s)! + Jste zpracujeme vaši položku (y)! + Has procesado tus objeto(s) + + Vous avez traité vos item(s)! + Hai processato i tuoi oggetti! + Przetworzeniu swój przedmiot (y)! + Você processou seu(s) item(s) + Du hast deine Materialien verarbeitet! + + + You can't rapidly use action keys! + Nemůžete rychle využít akčních kláves! + No puedes usar Keys de Acciones tan rápido! + + Die Aktionstaste kann nicht so schnell hintereinander genutzt werden! + Vous ne pouvez pas utiliser rapidement les touches d'action! + Non puoi riusare così rapidamente il tasto azione! + Você não pode usar a tecla de ação repetidamente! + Za szybko używasz przycisku akcji! + + + You do not have enough funds in your bank account. + Nemáte dostatek prostředků na váš bankovní účet. + No tienes tanto dinero en tu cuenta de banco. + + Du hast nicht genug Geld auf deinem Bankkonto. + Vous n'avez pas assez de fond dans votre compte bancaire. + Non hai abbastanza fondi nel tuo conto in banca. + Você não tem todo esse dinheiro em sua conta bancária. + Nie masz wystarczających środków w banku. + + + Couldn't add it to your inventory. + Nemohl ji přidat do svého inventáře. + No se pudo agregar a tu inventario. + + Es konnte nichts zu deinem Inventar hinzugefügt werden + Impossible d'ajouter cela à votre inventaire + Non puoi aggiungerlo al tuo inventario. + Não foi possível adicionar o item ao seu inventário + Nie można dodać tego do twojego wyposażenia + + + You haven't eaten anything in awhile, You should find something to eat soon! + Jste nejedli nic za čas, byste měli najít něco k jídlu brzy! + No has comido nada en un largo rato. Deberías buscar algo de comer! + + Du hast schon eine Weile nichts mehr gegessen, du solltest schnell etwas zum Essen suchen! + Vous n'avez rien mangé depuis un certain temps, vous devriez trouver quelque chose à manger! + E' da tempo che non mangi qualcosa, dovresti trovare qualcosa da mettere sotto i denti in fretta! + Você não come a bastante tempo. Ache algo para comer logo!. + Zaczynasz być głodny, poszukaj czegoś do jedzenia! + + + You are starting to starve, you need to find something to eat otherwise you will die. + Můžete se začínají hladovět, budete muset najít něco k jídlu jinak zemřete. + Te esta dando mucha, mucha hambre. Come algo o moriras! + + Du hast Hunger, du solltest schnell etwas essen oder du wirst verhungern. + Vous commencez à mourir de faim, vous avez besoin de trouver quelque chose à manger, sinon, vous allez mourrir + Ti stai indebolendo, devi trovare qualcosa da mangiare o morirai. + Você está começando a ficar famindo. Se você não comer irá morrer de fome. + Długo nie jadłeś, zjedz coś lub zginiesz z głodu. + + + You are now starving to death, you will die very soon if you don't eat something. + Nyní jste hladoví k smrti, zemřete velmi brzy, pokud nemáte něco jíst. + Estas a punto de morir de hambre, busca comida rápido! + + Du bist am Verhungern, du wirst sterben, wenn du nichts zum Essen findest + Vous êtes en train de mourir de faim, vous allez mourir très bientôt si vous ne mangez pas quelque chose + Stai perdendo le forze, se non mangi qualcosa in fretta morirai. + Você está morrendo de fome, coma algo ou irá morrer. + Zaczynasz słabnąć z głodu zjedz coś lub zginiesz !!! + + + You have starved to death. + Jste hladem. + Te has muerto de hambre. + + Du bist verhungert. + Vous êtes mort de faim. + Sei morto per la fame. + Você morreu de fome + Wygłodziłeś się na śmierć. + + + You haven't drank anything in awhile, You should find something to drink soon. + Nemáte pil nic za čas, byste měli najít něco k pití brzy. + No has tomado nada en un largo rato. Deberías buscar algo de tomar! + + Du hast schon eine Weile nichts mehr getrunken! Du solltest schnell etwas zum Trinken suchen. + Vous n'avez rien bu depuis un certain temps, vous devriez trouver quelque chose à boire! + E' da parecchio tempo che non bevi qualcosa, dovresti trovare qualcosa da bere. + Você não bebe nada a bastante tempo. Ache algo para beber logo. + Zaczynasz być spragniony, powinienieś poszukać czegoś do picia. + + + You haven't drank anything in along time, you should find something to drink soon or you'll start to die from dehydration. + Vy jste nic pil na delší dobu, měli byste si najít něco k pití hned, nebo budete začnou umírat z dehydratace. + Te esta dando mucha, mucha sed. Toma algo o moriras! + + Du hast Durst! Du solltest schnell etwas trinken oder du wirst verdursten. + Vous commencez à mourir de soif, vous avez besoin de trouver quelque chose à boire, sinon, vous allez mourrir + E' troppo tempo che non bevi qualcosa, dovresti trovare qualcosa da bere o comincerai a disitratarti. + Você está ficando desidratado. Se não beber algo poderá morrer. + Długo nic nie piłeś, napij się czegoś bo możesz zginąć z pragnienia. + + + You are now suffering from severe dehydration find something to drink quickly! + Nyní trpí těžkou dehydratací najít něco k pití rychle! + Estas a punto de morir de desidratación, busca algo de tomar rapido! + + Du bist am Verdursten. Du wirst sterben, wenn du nichts zum Trinken findest + Vous êtes en train de mourir de soif, vous allez mourir très bientôt si vous ne buvez pas quelque chose + Stai soffrendo per una grave deidratazione, trova velocemente qualcosa da bere o morirai! + Você está sofrendo de desidratação. Beba algo ou irá morrer! + Zaczynasz słabnąć z pragnienia, wypij coś inaczej zginiesz!!! + + + You have died from dehydration. + Jsi zemřel na dehydrataci. + Has muerto de desidratación. + + Du bist verdurstet. + Vous êtes mort de soif. + Sei morto per disidratazione. + Você morreu desidratado. + Umarłeś z uwagi na odwodnienie organizmu + + + You are over carrying your max weight! You will not be able to run or move fast till you drop some items! + Překročili jste přenášení maximální váhu! Nebudete moci spustit nebo přesunout rychle, dokud se kapka některé položky! + Estas cargando tu peso máximo! No puedes correr o moverte rapido hasta que botes algunos objetos! + + Du trägst zu viel bei dir! Du bist nicht in der Lage, zu rennen oder dich schnell zu bewegen, bis du Gegenstände abgelegt hast! + Vous êtes surchargé, vous ne pouvez plus courrir ou bouger rapidement à moins de lacher quelques objets! + Stai trasportando oltre il tuo carico massimo! Non riuscirai a correre fino a quando non ti libererai di qualche oggetto! + Você está carregando muito peso. Você não irá conseguir correr ou se mover rapidamente. + Niesiesz maksymalny ciężar, nie będziesz mógł biegać ani szybko chodzić dopuki nie wyrzucisz jakiejś rzeczy + + + <t color='#FF0000'><t size='2'>Vehicle Info</t></t><br/><t color='#FFD700'><t size='1.5'>Owners</t></t><br/> %1 + <t color='#FF0000'><t size='2'>Informace o vozidle</t></t><br/><t color='#FFD700'><t size='1.5'>Majitelé</t></t><br/> %1 + <t color='#FF0000'><t size='2'>Info de Vehículo</t></t><br/><t color='#FFD700'><t size='1.5'>Dueños</t></t><br/> %1 + <t color='#FF0000'><t size='2'>Vehicle Info</t></t><br/><t color='#FFD700'><t size='1.5'>Owners</t></t><br/> %1 + <t color='#FF0000'><t size='2'>Fahrzeuginfo</t></t><br/><t color='#FFD700'><t size='1.5'>Besitzer</t></t><br/> %1 + <t color='#FF0000'><t size='2'>Info de Vehícule</t></t><br/><t color='#FFD700'><t size='1.5'>Propriétaires</t></t><br/> %1 + <t color='#FF0000'><t size='2'>Vehicle Info</t></t><br/><t color='#FFD700'><t size='1.5'>Owners</t></t><br/> %1 + <t color='#FF0000'><t size='2'>Info do Veículo</t></t><br/><t color='#FFD700'><t size='1.5'>Donos</t></t><br/> %1 + <t color='#FF0000'><t size='2'>Informacja o pojeździe</t></t><br/><t color='#FFD700'><t size='1.5'>Właściciel</t></t><br/> %1 + + + Cannot search that person. + Nelze vyhledávat tuto osobu. + No puedes buscar a esa persona. + + Diese Person kann nicht durchsucht werden. + Vous ne pouvez pas fouiller cette personne. + Impossibile perquisire quella persona. + Essa pessoa não pode ser revistada. + Nie możesz przeszukać tej osoby + + + You couldn't effectively seize any items. Try again. + Dalo by se efektivně využily všech položek. Zkus to znovu. + Vous ne pouviez pas saisir les articles. Réessayer. + No pudistes efectivamente, confiscar algun objeto. Prueba de nuevo. + Impossibile perquisire la persona in maniera esaustiva. Riprova. + Nie można skutecznie wykorzystać żadnych przedmiotów. Spróbuj ponownie. + + Você não pode apreender nenhum item, efetivamente. Tente de novo. + Es konnten nicht alle Gegenstände beschlagnahmt werden. Versuche es noch einmal. + + + Repairing %1 + Dalo by se efektivně využily všech položek. Zkus to znovu.... + Reparando %1 + + Wird repariert %1 + Réparation %1 + Riparando %1 + Reparando %1 + Naprawiam %1 + + + You can't do that from inside the vehicle! + Můžete to udělat zevnitř vozu! + Vous ne pouvez pas le faire à l'intérieur du véhicule! + No puedes hacer eso desde adentro del vehículo! + Non si può fare dall'interno del veicolo! + + Du kannst das nicht tun während du in einem Fahrzeug sitzt! + Você não pode fazer isso de dentro do veículo! + Nie możesz tego wykonać z wntrza pojazdu! + + + You have repaired that vehicle. + Jste opravil, že vozidlo. + >Has reparado el vehículo. + + Du hast dieses Fahrzeug repariert. + Vous avez réparé ce véhicule. + Hai riparato il veicolo. + Você reparou esse veículo. + Naprawiłeś pojazd + + + You have mined %2 %1(s). + Jste shromáždili %2 %1(y). + Vous avez recueilli %2 %1(s). + Has recolectado %2 %1(s). + Hai raccolto %2 unità di %1. + + Du hast %2 %1(s) gesammelt. + Você colheu %2 %1(s). + Zebrałeś %2 %1 (s). + + + You have gathered %2 %1(s). + Jste shromáždili %2 %1(y). + Vous avez recueilli %2 %1(s). + Has recolectado %2 %1(s). + Hai raccolto %2 unità di %1. + + Du hast %2 %1(s) gesammelt. + Você colheu %2 %1(s). + Zebrałeś %2 %1 (s). + + + You can't gather from inside a car! + Nemůžete sbírat zevnitř vozu! + Vous ne pouvez pas ramasser à l'intérieur d'une voiture! + No puedes recolectar desde adentro de un vehículo! + Non si può raccogliere da dentro una macchina! + + Wie soll das von hier aus gehen? Du sitzt in einem Fahrzeug! + Você não pode colher de dentro do carro! + Nie możesz zbierać z wnętrza samochodu + + + You are not allowed to loot dead bodies. + Ty jsou není dovoleno kořist mrtvoly. + Vous n'êtes pas autorisé à piller des cadavres. + No puedes buscar cuerpos muertos. + Non è consentito a saccheggiare cadaveri. + + Du darfst keine Leichen durchsuchen + Você não está liberado para lootiar corpos mortos + Nie możesz przeszukiwać martwych ciał + + + You have been frozen by an administrator. + Vy byly zmrazeny správcem. + Vous avez été gelé par un administrateur. + Un admin te ha congelado! + Sei stato congelato da un amministratore. + + Du wurdest von einem Admin eingefroren + Você foi congelado por um administrador + Zostałeś zamrożony przez administratora + + + You have teleported to your selected position. + Jste teleported do vašeho zvolené poloze. + Vous avez téléporté à votre position sélectionnée. + Te has teletransportado a la posisción seleccionada. + Ti sei teletrasportaato alla posizione selezionata. + Masz teleportowany do wybranej pozycji. + + Você foi teleportado para a posição que você selecionou + Du hast dich zu deiner gewünschten Position teleportiert. + + + You have been unfrozen by an administrator. + Byli jste zmrzlá správcem. + Vous avez été dégelés par un administrateur. + Un admin te ha descongelado! + Sei stato scongelato da un amministratore. + + Ein Admin hat dich wieder aufgetaut + Você foi descongelado por um administrador + Zostałeś odmrożony przez administratora + + + No one was selected! + Nikdo byl vybrán! + Personne n'a été sélectionné! + Nadie fue seleccionado! + Nessuno è stato selezionato! + Nikt nie został wybrany! + Ninguém foi selecionado! + Никто не был выбран! + Niemand wurde ausgewählt! + + + You didn't select an item you wanted to give. + Nevybrali jste položku, kterou chtěl dát. + Vous ne l'avez pas sélectionné un item que vous vouliez donner. + No ha seleccionado el objeto que quiere dar. + non è stato selezionato un elemento che si voleva dare. + Nie wybrano element, który chciał dać. + Você não selecionou um item que você queria dar. + Вы не выбрали пункт, который вы хотели дать. + Sie haben keinen Artikel aus, die Sie geben wollte. + + + You didn't enter an actual number format. + Nezadal jste skutečný formát čísla. + Vous n'avez pas saisi un format de nombre réel. + No ha especificado un formato de número real. + Non hai inserito un formato di numero reale. + Nie wprowadzono rzeczywisty format liczb. + Você não inseriu um formato número real. + Вы не ввели фактический формат числа. + Sie haben keine tatsächliche Anzahl Format eingeben. + + + You need to enter an actual amount you want to give. + Musíte zadat skutečnou částku, kterou chcete dát. + Vous devez entrer un montant réel que vous voulez donner. + Es necesario introducir una cantidad real que se desea dar. + È necessario immettere un importo effettivo si vuole dare. + Musisz podać rzeczywistą kwotę, którą chcesz dać. + É necessário introduzir uma quantidade real que você quer dar. + Вам необходимо ввести фактическую сумму, которую вы хотите дать. + Sie benötigen einen tatsächlichen Betrag, den Sie geben wollen, einzugeben. + + + You need to enter an actual amount you want to remove. + Musíte zadat skutečnou částku, kterou chcete odebrat. + Vous devez entrer un montant réel que vous souhaitez supprimer. + Es necesario introducir una cantidad real que se desea eliminar. + È necessario immettere un importo effettivo che si desidera rimuovere. + Musisz podać rzeczywistą kwotę, którą chcesz usunąć. + É necessário introduzir uma quantidade real que você deseja remover. + Вам необходимо ввести фактическую сумму, которую вы хотите удалить. + Sie benötigen einen tatsächlichen Betrag, den Sie entfernen möchten, eingeben. + + + The selected player is not within range. + Zvolená Hráč není v dosahu. + Le joueur sélectionné est hors de portée. + El jugador seleccionado no está dentro del rango. + Il giocatore selezionato non è nel raggio d'azione. + Wybrany gracz nie jest w zasięgu. + O jogador selecionado não está dentro do alcance. + Выбранный игрок не находится в пределах диапазона. + Der ausgewählte Spieler ist nicht in Reichweite. + + + Couldn't give that much of that item, maybe you don't have that amount? + Nemohl dát, že velká část této položky, možná nemáte tuto částku? + Impossible de donner cet article, peut-être vous ne disposez pas d'autant? + No se pudo dar a que gran parte de ese elemento, tal vez usted no tiene esa cantidad? + Impossibile dare quella quantità di oggetti. + nie mógł dać, że wiele z tego elementu, może nie masz tej kwoty? + não poderia dar que muito desse item, talvez você não tem essa quantia? + Не могу дать, что большая часть этого пункта, может быть, у вас нет этой суммы? + Nicht geben konnte, dass dieser Artikel viel, vielleicht auch nicht, dass die Menge, die Sie tun? + + + You gave %1 %2 %3. + Ty jsi dal %1 %2 %3. + Vous avez donné %1 %2 %3. + Diste %1 %2 %3. + Hai dato %1 %2 %3. + Daliście %1 %2 %3. + você deu %1 %2 %3. + Ты дал %1 %2 %3. + Du gabst %1 %2 %3. + + + You don't have that much to give! + Nemusíte to hodně dát! + Vous n'avez pas autant sur vous! + Usted no tiene mucho para dar! + Non hai abbastanza oggetti da dare! + Nie ma tego dużo dać! + Você não tem muito para dar! + Вы не так много, чтобы дать! + Sie haben nicht so viel zu geben! + + + You gave $%1 to %2. + Dal jsi $%1 do %2. + Vous avez donné $%1 à %2. + Usted le dio $%1 a %2. + Hai dato $%1 a %2. + Dałeś $%1 do %2. + Você deu $%1 para %2. + Вы дали $%1 %2. + Sie gaben $%1 %2. + + + You recently robbed the bank! You can't give money away just yet. + Nedávno jste vyloupil banku! Nemůžete dávat peníze pryč jen zatím. + Vous avez récemment volé la banque! Vous ne pouvez pas donner de l'argent pour l'instant. + Recientemente has robado el banco! No se puede dar dinero por el momento. + Recentemente hai rapinato la banca! Non puoi ancora depositare i soldi nel tuo conto bancario. + Niedawno obrabował bank! Nie można dać pieniądze w błoto jeszcze. + Recentemente, você roubou o banco! Você não pode dar dinheiro fora ainda. + Вы недавно ограбили банк! Вы не можете отдавать деньги только пока. + Sie beraubt kürzlich die Bank! Sie können kein Geld geben nur noch weg. + + + No data selected. + vybrány žádné údaje. + Aucune donnée sélectionnée. + No hay datos seleccionados. + Non ci sono dati selezionati. + Nie wybrano danych. + Não há dados selecionado. + Нет выбранных данных. + Keine Daten ausgewählt. + + + You did not select a vehicle. + Nevybrali jste vozidlo. + Vous n'avez pas sélectionné un véhicule. + No ha seleccionado un vehículo. + Non hai selezionato un veicolo. + Nie wybrano pojazdu. + Você não selecionou um veículo. + Вы не выбрали автомобиль. + Sie haben kein Fahrzeug auswählen. + + + You do not own any vehicles. + Nevlastníte žádná vozidla. + Vous ne possédez pas de véhicules. + Usted no posee ningún vehículo. + Non possedete tutti i veicoli. + Nie posiada żadnych pojazdów. + Você não possui quaisquer veículos. + Вы не являетесь владельцем каких-либо транспортных средств. + Sie besitzen keine Fahrzeuge. + + + You did not select a player. + Nevybrali jste si přehrávač. + Vous n'avez pas sélectionné un joueur. + No ha seleccionado un jugador. + Non hai selezionato un giocatore. + Nie wybrano odtwarzacza. + Você não selecionou um jogador. + Вы не выбрали игрока. + Sie haben keinen Spieler auswählen. + + + You have given %1 keys to your %2. + Dali jste %1 klíče ke svému %2. + Vous avez donné les clés de votre %2 à %1. + Usted ha dado %1 llaves de su %2. + Hai dato a %1 chiavi della vostra %2. + Dałeś %1 klucze do %2. + Você tem dado %1 chaves de sua %2. + Вы дали %1 ключи от %2. + Sie haben %1 Schlüssel zu Ihrem %2 angegeben. + + + You cannot remove the keys to your house! + Nemůžete odstranit klíče od domu! + Vous ne pouvez pas supprimer les clés de votre maison! + No se puede quitar las llaves de su casa! + Non è possibile rimuovere le chiavi a casa tua! + Nie można usunąć klucze do swojego domu! + Você não pode remover as chaves de sua casa! + Вы не можете удалить ключи к вашему дому! + Sie können nicht die Schlüssel zu Ihrem Haus zu entfernen! + + + You did not select anything to remove. + Nevybrali jste nic odstranit. + Vous avez rien sélectionné à supprimer. + No ha seleccionado nada que quitar. + Non hai selezionato niente da rimuovere. + Nie zrobił nic, aby usunąć wybrać. + Você não selecionou nada para remover. + Вы ничего удалить не выбрать. + Sie haben nichts auswählen zu entfernen. + + + Could not remove that much of that item. Maybe you do not have that amount? + Nepodařilo se odstranit, že velká část této položky. Možná, že nemáte tuto částku? + Impossible de supprimer autant. Peut-être que vous ne disposez pas de ce montant? + No se pudo eliminar que gran parte de ese elemento. Tal vez usted no tiene esa cantidad? + Impossibile rimuovere quel quantitativo di oggetti. + Nie można usunąć, że wiele z tego elementu. Może nie masz tej kwoty? + Não foi possível remover que muito desse item. Talvez você não tem essa quantia? + Не удалось удалить, что большая часть этого элемента. Может быть, у вас нет этой суммы? + Könnte nicht so viel von diesem Element zu entfernen. Vielleicht haben Sie nicht diesen Betrag? + + + You have successfully removed %1 %2 from your inventory. + Úspěšně jste odstraněny %1 %2 z vašeho inventáře. + Vous avez réussi à retirer %1 %2 de votre inventaire. + Has eliminado correctamente %1 %2 de su inventario. + Hai rimosso con successo %1 %2 dal tuo inventario. + Pomyślnie usunięto %1 %2 z inwentarza. + Você removeu com êxito %1 %2 do seu inventário. + Вы успешно удалены %1 %2 из инвентаря. + Sie haben erfolgreich %1 %2 aus dem Inventar entfernt. + + + Something went wrong; the menu will not open? + Něco se pokazilo; nabídka neotevře? + Quelque chose a mal tourné; le menu ne sera pas ouvert? + Algo salió mal; el menú no se abre? + Qualcosa è andato storto; il menu non si apre? + Coś poszło nie tak; menu nie otworzy? + Algo deu errado; o menu não vai abrir? + Что-то пошло не так; меню не откроется? + Etwas ist schief gelaufen; wird das Menü nicht öffnen? + + + Config does not exist? + Config neexistuje? + Config n'existe pas? + Config no existe? + Config non esiste? + Konfiguracja nie istnieje? + O configuração não existe? + Config не существует? + Config ist nicht vorhanden? + + + You cannot store that in anything but a land vehicle! + Nelze uložit, že v ničem jiném než pozemní vozidla! + Vous pouvez stocker cette item seulement dans les vehicules terrestres! + No se puede almacenar en cualquier cosa menos que un vehículo terrestre! + Non è possibile depositare questa risorsa in un veicolo che non sia terrestre! + Nie można zapisać, że w nic poza pojazdem lądowym! + Você não pode armazenar isso em qualquer coisa, mas um veículo de terra! + Вы не можете хранить, что ничего, кроме наземного транспортного средства! + Sie können nicht das, sondern ein Landfahrzeug in irgendetwas zu speichern! + + + You don't have that much cash on you to store in the vehicle! + Nemáte tolik peněz na vás uložit do vozidla! + Vous ne disposez pas d'autant d'argent sur vous pour stocker dans le véhicule! + Usted no tiene esa cantidad de dinero en efectivo para almacenar en el vehículo! + Non hai abbastanza denaro con te da mettere nel veicolo! + Nie ma tego dużo gotówki na ciebie do przechowywania w pojeździe! + Você não tem que muito dinheiro em você para armazenar no veículo! + У вас не так много наличных денег на вас, чтобы хранить в автомобиле! + Sie haben nicht so viel Geld bei Ihnen im Fahrzeug zu speichern! + + + The vehicle is either full or cannot hold that much. + Vozidlo je buď plný nebo nemůže myslet si, že mnoho. + Le véhicule est plein ou ne peut pas supporter autant d'items. + El vehículo está llena o no puede contener tanta. + Il veicolo è pieno o non può tenere quel quantitativo. + Pojazd jest albo w pełnym lub nie można uznać, że dużo. + O veículo está cheio ou não pode segurar muito. + Транспортное средство либо полностью или не может держать так много. + Das Fahrzeug ist entweder voll oder kann nicht so viel halten. + + + Couldn't remove the items from your inventory to put in the vehicle. + Vozidlo je buď plný nebo nemůže myslet si, že mnoho. + Le véhicule est plein ou ne peut pas supporter autant d'item. + El vehículo está llena o no puede contener tanta. + Impossibile rimuovere quel quantitativo di oggetti dal tuo inventario per metterlo nel veicolo. + Pojazd jest albo w pełnym lub nie można uznać, że dużo. + O veículo está cheio ou não pode segurar muito. + Транспортное средство либо полностью или не может держать так много. + Das Fahrzeug ist entweder voll oder kann nicht so viel halten. + + + This is an illegal item and cops are near by. You cannot dispose of the evidence. + To je ilegální položky a policajti jsou v blízkosti. Nemůžete zbavit důkazů. + Ceci est un élément illégal et les flics sont à proximité. Vous ne pouvez pas jeter la preuve. + Este es un artículo ilegal y policías están cerca. No se puede disponer de las pruebas. + Non puoi liberarti di questo oggetto dato che è una prova evidente. + Jest to nielegalne element i policjanci są w pobliżu. Nie można pozbyć się dowodów. + Este é um item ilegal e policiais estão nas proximidades. Você não pode dispor das provas. + Это незаконный пункт и полицейские находятся поблизости. Вы не можете избавиться от доказательств. + Dies ist eine illegale Artikel und Polizisten sind in der Nähe. Sie können nicht von den Beweisen zu entsorgen. + + + You cannot remove an item when you are in a vehicle. + Nemůžete-li odebrat položku, když jste ve vozidle. + Vous ne pouvez pas supprimer un élément lorsque vous êtes dans un véhicule. + No se puede eliminar un elemento cuando se está en un vehículo. + Non è possibile rimuovere un elemento quando si è in un veicolo. + Nie można usunąć element, kiedy jesteś w pojeździe. + Você não pode remover um item quando você está em um veículo. + Вы не можете удалить элемент, когда вы находитесь в автомобиле. + Sie können ein Element nicht entfernen, wenn Sie in einem Fahrzeug sind. + + + You are now spectating %1.\n\nPress F10 to stop spectating. + Nyní diváck é%1.\n\nStisknutím klávesy F10 k zastavení divácké. + Vous êtes maintenant spectating %1.\n\nAppuyez sur F10 pour arrêter spectating. + Ahora está como espectador de %1.\n\nPulse F10 para salir de modo espectador. + Si è ora spectating %1.\n\nPremere F10 per smettere di spettatori. + Grasz teraz spectating %1.\n\nNaciśnij klawisz F10, aby zatrzymać spectating. + Você agora está como espectador %1.\n\nPressione F10 para sair. + Теперь вы spectating %1.\n\nНажмите F10, чтобы остановить spectating. + Du beobachtest nun %1.\n\nDrücke F10, um das Beobachten zu beenden. + + + You have teleported %1 to your location. + Jste teleported %1 do vaší polohy. + Vous avez téléporté %1 à votre emplacement. + Usted ha teletransportado %1 a su ubicación. + Hai teletrasportato %1 alla vostra posizione. + Masz teleportował %1 na swoim miejscu. + Você teletransportou %1 para a sua localização. + Вы телепортированы %1 к вашему положению. + Du hast %1 zu deiner Position teleportiert. + + + <t color='#ADFF2F'>ATM</t> + <t color='#ADFF2F'>Bankomat</t> + <t color='#ADFF2F'>AU M</t> + <t color='#ADFF2F'>ATM</t> + <t color='#ADFF2F'>ATM</t> + <t color='#ADFF2F'>Bankomat</t> + <t color='#ADFF2F'>Caixa Eletrônico</t> + <t color='#ADFF2F'>Банкомат</t> + <t color='#ADFF2F'>Geldautomat</t> + + + Capture Gang Hideout + Zachyťte Gang skrýš + Capturez Gang Cachette + Capturar Escondite + Cattura Banda Nascondiglio + Przechwytywanie Banda Kryjówka + Capturar Esconderijo de Gangue + Захват шайка укрытие + Ganggebiet einnehmen + + + + + News Station Broadcast + + Anuncio de la Estación de Noticias + + + + + Estação de Transmissão de Notícias + + + + Channel 7 News Station + + Estación del Canal de Noticias 7 + + + + + Estação de Notícias do Canal 7 + + + + Message Heading: + + Título del Mensaje + + + + + Titulo da Mensagem: + + + + Message Content: + + Contenido del Anuncio + + + + + Conteúdo da Mensagem: + + + + Broadcast Message + + Transmitir Anuncio + + + + + Transmitir Anúncio + + + + Broadcast Cost: %1<br />Next Broadcast Available: %2 + + Costo de Transmisión: %1<br />Siguiente Transmisión Disponible en: %2 + + + + + Custo de Transmissão: %1<br />Próxima transmissão disponível em: %2 + + + + The header cannot be over %1 characters + + El título no puede tener mas de %1 caracteres + + + + + O cabeçalho não pode ter mais que %1 caracteres + + + + You've entered an unsupported character! + + Has introducido un carácter inválido + + + + + Você inseriu um caractere inválido + + + + Now + + Ahora + + + + + Agora + + + + You need $%1 to send a broadcast! + + Necesitas %1 para transmitir un anuncio! + + + + + Você precisa de $%1 para enviar uma transmissão! + + + + <t size='2'>%1</t><br />Broadcasted by: %2 + + <t size='2'>%1</t><br />Transmitido por: %2 + + + + + <t size='2'>%1</t><br />Transmitido por: %2 + + + + + + You have been arrested, wait your time out. If you attempt to respawn or reconnect your time will increase! + Jste byli zatčeni, počkejte si na čas ven. Pokud se pokusíte respawn nebo připojit váš čas zvýší! + Te han arrestado. Si tratas de matarte o te desconectas se incrementara tu estadía en la cárcel! + + Du wurdest festgenommen, sitze deine Zeit ab. Wenn du versuchst, zu respawnen oder die Verbindung zu trennen, erhöht sich deine Zeit! + Vous avez été arrêté, attendez que votre peine soit terminée. Si vous tentez de respawn ou reconnectez votre temps sera augmenté! + Sei stato arrestato, sconta la tua pena. Se cercherai di rinascere o di riconnetterti il tuo tempo aumenterà! + Você foi preso, cumpra sua pena. Se você tentar renascer ou reconectar seu tempo na cadeia irá aumentar! + Zostałeś aresztowany, poczekaj na koniec kary. Jeśli się rozłączysz albo odrodzisz twoja kara zostanie powiększona + + + For being arrested you have lost the following licenses if you own them\n\nFirearms License\nRebel License + Za byl zatčen jste ztratili tyto licence, pokud je vlastní \ žádný zbrojní pas \ jRebel licence + Por ser arrestado se te han quitado estas licencias (si las tienes)\n\nL. de Armas \nL. Rebelde + + Bei der Verhaftung hast du folgende Lizenzen verloren, sofern du sie besessen hast\n\nWaffenlizenz\nRebellenlizenz + Après votre mise en prison, vous avez perdu les licences suivante si vous les aviez\n\nPermis de port d'arme\n LicenceRebel + A causa del tuo arresto hai perso le seguenti licenze, se le possedevi\n\nPorto d'armi\nLicenza Ribelle + Você perdeu as seguintes licenças por ter sido preso\n\nPorte de Armas\n\nTreinamento Rebelde + Z uwagi na aresztowanie straciłeś następujące licencje jeśli je posiadałeś \n\nPozwolenie na broń \nTrening Rebelianta + + + %1 has escaped from jail! + %1 utekl z vězení! + %1 se ha escapado de la cárcel! + + %1 ist aus dem Gefängnis ausgebrochen! + %1 s'est échappé de prison! + %1 è scappato dalla prigione! + %1 escapou da prisão! + %1 uciekł z więzienia! + + + You have escaped from jail, you still retain your previous crimes and now have a count of escaping jail. + Jste utekl z vězení, si stále zachovávají své předchozí zločiny a nyní mají počet uniknout vězení. + Te has escapado de la cárcel, retienes tus crimenes anteriores más un crimen de escapado de la cárcel. + + Du bist aus dem Gefängnis ausgebrochen, die Polizei sucht bereits wegen deiner früheren Verbrechen und Gefängnisausbruch nach dir. + Vous vous êtes échappé de prison, vous conserver toujours vos crimes précédents et ils savent maintenant que vous vous êtes échappé de prison. + Sei scappato di prigione, rimarrai ricercato per i crimini da te commessi in precedenza e in aggiunta per essere scappato di prigione. + Você escapou da prisão, agora você é procurado por esse crime e todos os outros que havia cometido anteriormente. + Uciekłeś z więzienia, dalej jesteś ścigany za poprzednie przestępstwa i dodatkowo za ucieczkę. + + + You have served your time in jail and have been released. + Sloužil jste svůj čas ve vězení a byli propuštěni. + Has pasado el tiempo en la cárcel y has sido liberado. + + Du hast deine Zeit im Gefängnis abgesessen. + Vous avez terminé votre peine, vous êtes libre. + Hai scontato la tua pena in prigione e sei stato rilasciato. + Você pagou pelo seus crimes e foi libertado. + Odbyłeś swoją karę zostałeś zwolniony z więzienia. + + + Time Remaining: + Zbývající čas: + Tiempo Restante: + + Verbleibende Zeit: + Temps restant: + Tempo rimanente: + Tempo Restante: + Pozostały czas kary: + + + Can pay bail: + Může zaplatit kauci: + Puedes pagar la fianza en: + + Kann Kaution zahlen: + Peut payer la caution: + Puoi pagare la cauzione: + Pode pagar fiança: + Możesz wpłacić kaucję + + + Bail Price: + Bail Cena: + Precio de Fianza: + + Kaution: + Prix de la caution: + Costo cauzione: + Preço da fiança: + Wartość kaucji: + + + You have paid your bail and are now free. + Jste zaplatili kauci a nyní jsou zdarma. + Has pagado tu fianza y has sido liberado. + + Du hast deine Kaution bezahlt und bist nun frei. + Vous avez payé votre caution, vous êtes désormais libres. + Hai pagato la cauzione e sei libero. + Você pagou a fiança e agora está livre. + Zapłaciłeś kaucję jesteś wolny. + + + + + %1 has knocked you out. + %1 zaklepal vás. + %1 te a noqueado. + + %1 hat dich niedergeschlagen. + %1 vous a assommé. + %1 ti ha colpito stordendoti. + %1 nocauteou você. + zostałeś ogłuszony przez %1 + + + You have lost all your motor vehicle licenses for vehicular manslaughter. + Jste ztratili všechny své licence motorových vozidel pro dopravní zabití. + Has perdido todas tus licencias de vehículos de motor por homicidio vehicular. + + Du hast alle deine Fahrzeug-Lizenzen durch fahrlässige Tötung mit einem Fahrzeug verloren. + Vous avez perdu tout vos permis véhicule pour avoir écrasé quelqu'un. + Hai perso tutte le tue licenze di guida a causa di un omicidio stradale. + Você perdeu sua licença de motorista por atropelamento. + Straciłeś wszystkie uprawnienia na pojazdy z uwagi na ciągłe zabijanie ludzi pojazdami. + + + You have lost your firearms license for manslaughter. + Jste ztratili zbrojního průkazu za zabití. + Has perdido tu licencia de armas por homicidio. + + Du hast deinen Waffenschein wegen Mordes verloren. + Vous avez perdu votre permis d'armes à feu pour homicide involontaire. + Hai perso il tuo Porto d'Armi a causa di un omicidio + Você perdeu sua licença de porte de arma por cometer homicídio. + Straciłeś pozwolenie na broń z uwagi na zabijanie ludzi z broni palnej + + + They didn't have any cash... + Oni neměli žádnou hotovost ... + No tenian dinero... + + Er hatte kein Geld... + Il n'a pas d'argent... + Non hai soldi... + Ele não possuia dinheiro algum... + Nie posiadają żadnych pieniędzy ... + + + You stole $%1 + Ukradl jsi $%1 + Robastes $%1 + + Du hast $%1 geraubt. + Vous avez volé $%1 + Hai rubato $%1 + Você roubou R$%1 + Ukradłeś %1 + + + The safe is empty! + Bezpečné je prázdný! + La caja esta vacía! + + Der Tresor ist leer! + Le coffre est vide + La cassaforte è vuota! + O Cofre está vazio! + Sejf jest pusty! + + + Someone is already accessing the safe.. + Někdo je již přístup k bezpečné .. + Alguien ya esta entrando en la caja.. + + Jemand greift bereits auf den Tresor zu.. + Quelqu'un accède déjà au coffre.. + Qualcuno sta già interagendo con la cassaforte.. + Alguem já está acessando o cofre. + Ktoś właśnie włamuje się do sejfu! + + + There needs to be %1 or more cops online to continue. + Musí existovat%1 nebo více policajtů on-line pokračovat. + Necesita haber %1 o mas policías para continuar. + + Es müssen %1 oder mehr Polizisten online sein, um fortfahren zu können. + Il faut au minimum %1 flic pour continuer + Servono almeno %1 poliziotti online per continuare. + É necessário ter %1 ou mais policiais online para continuar. + Potrzeba conajmniej %1 policjantów aby kontynuować + + + Safe Inventory + Safe Inventory + Inventario de la Caja + + Tresorinventar + Coffre + Inventario cassaforte + Cofre + Wyposażenie sejfu + + + You need to select an item! + Je třeba vybrat položku! + Debes selecionar un objeto! + + Du musst einen Gegenstand auswählen! + Vous devez sélectionner un objet + Devi selezionare un oggetto! + Você precisa selecionar um item! + Musisz coś wybrać + + + There isn't %1 gold bar(s) in the safe! + Není%1 zlatá bar (y) v bezpečí! + No hay %1 barra(s) de oro en la caja! + + Es sind keine %1 Goldbarren im Tresor! + Il n'y a pas %1 lingot(s) d'or dans le coffre + Nella cassaforte non ci sono %1 lingotti d'oro + Não existe %1 barra(s) de ouro no cofre! + W sejfie nie ma % sztab złota! + + + + + Couldn't open the ticketing interface + Nemohl otevřít jízdenek rozhraní + No se pudo abrir el menu de tiquetes! + + Der Bußgeldkatalog konnte nicht geöffnet werden + Impossible d'ouvrir l'interface d'amende + Impossibile aprire l'interfaccia per le multe + Não foi possível abrir o bloco de multa + Nie potrafię otworzyć interfejsu mandatów + + + Ticketing %1 + Jízdenek%1 + Dando Tiquete a %1 + + Verrechne %1 + Mise de l'amende à %1 + Multando %1 + Multando %1 + Mandat dla %1 + + + %2 got back a blacklisted vehicle near %1. + %2 dostat zpět na černou listinu vozidlo nedaleko %1. + %2 revenir un véhicule près de la liste noire %1. + %2 volver un vehículo en la lista negra cerca de %1. + %2 ha ritirato un veicolo blacklistato vicino %1. + %2 wrócić do czarnej listy pojazd pobliżu %1. + %2 retirou um veículo que se encontra na lista negra, perto de %1. + %2 получить обратно в черный список автомобиль возле %1. + %2 hat ein gesuchtes Fahrzeug nahe %1 ausgeparkt. + + + Person to ticket is nil + Osoba, která má lístku je nulová + La persona a quien tiquetear es nulo + + Person für das Ticket ist nil + La personne à verbaliser n'existe pas + La persona da multare è nil + Jogador a ser multado é nulo + Osoba do ukarania mandatem to "nil" + + + Person to ticket doesn't exist. + Osoba, která má letenku neexistuje. + La perosna a quien tiquetear no existe. + + Die Person für das Ticket gibt es nicht. + La personne à verbaliser est inexistante + La persona da multare non esiste. + Jogador a ser multado não existe. + Nie ma osoby ukaranej mandatem - nie istnieje + + + You didn't enter actual number. + Jste nezadali skutečný počet. + No escribistes un numero real. + + Du hast keine echte Zahl eingegeben. + Vous n'avez pas saisi de nombre. + Non hai inserito un numero correttamente. + Você não digitou um número válido. + Wybrałeś zły numer + + + Tickets can not be more than $200,000! + Vstupenky nemůže být více než 200.000 $! + Los tiquetes no pueden ser mas de $200,000! + + Strafzettel können nicht mehr als $200.000 betragen! + Les billets ne peuvent être plus de $200,000! + La multa non può essere più di $200.000! + A multa não pode ser maior que R$200.000! + Mandat nie może być wyższy niż $200.000! + + + %1 gave a ticket of $%2 to %3 + %1 dal lístek na $% %2 3 + %1 le dio un tiquete de $%2 a %3 + + %1 hat %3 einen Strafzettel über $%2 ausgestellt + %1 a mis une contravention de $%2 à %3 + %1 ha dato una multa di $%2 a %3 + %1 deu uma multa de R$%2 para %3 + %1 Wystawił mandat w wysokości %2 dla %3 + + + You don't have enough money in your bank account or on you to pay the ticket. + Nemáte dostatek peněz na váš bankovní účet, nebo na vás zaplatit letenku. + No tienes suficiente dinero para pagar el tiquete. + + Du hast nicht genug Geld auf deinem Bankkonto, um den Strafzettel bezahlen zu können. + Vous n'avez pas assez d'argent dans votre compte bancaire ou sur vous pour payer l'amende. + Non hai fondi sufficienti nel tuo conto in banca per pagare la multa. + Você não possui dinheiro suficiente na sua conta bancária ou na sua mão para pagar o bilhete. + Nie masz środków na koncie aby zapłacić mandat. + + + %1 couldn't pay the ticket due to not having enough money. + %1 nemohl zaplatit letenku z důvodu nemají dostatek peněz. + %1 No puedo pagar el tiquete porque no tiene suficiente dinero. + + %1 konnte den Strafzettel nicht bezahlen, weil er nicht genug Geld hat. + %1 ne pouvait pas payer la contravention car il n'avait pas assez d'argent. + %1 non può pagare la multa perchè non ha sufficienti fondi nel suo conto in banca. + %1 não pode pagar a multa pois não tem dinheiro suficiente. + %1 nie może zapłacić mandatu bo nie ma tylu środków na koncie + + + You have paid the ticket of $%1 + Jste zaplatili letenku ve výši $ %1 + Has pagado el tiquete de $%1 + + Du hast den Strafzettel von $%1 bezahlt + Vous avez payé l'amende de $%1 + Hai pagato la multa di $%1 + Você pagou a multa de R$%1 + Zapłaciłeś mandat w wysokości $%1 + + + %1 paid the ticket of $%2 + %1 zaplatil letenku ve výši $ %2 + %1 a pagado el tiquete de $%2 + + %1 zahlte einen Strafzettel von $%2 + %1 payé la contravention de $%2 + %1 ha pagato la multa di $%2 + %1 pagou a multa de R$%2 + %1 zapłacił mandat w wyskości $%2 + + + %1 paid the ticket. + %1 zaplatil jízdenku. + %1 pago el tiquete. + + %1 hat den Strafzettel bezahlt. + %1 payé la contravention. + %1 ha pagato la multa. + %1 pagou a multa. + %1 zapłacił mandat. + + + %1 has given you a ticket for $%2 + %1 vám dal lístek za $ %2 + %1 te ha dado un tiquete de $%2 + + %1 hat dir einen Strafzettel von $%2 gegeben + %1 vous a donné une amende de $%2 + %1 ti ha dato una multa di $%2 + %1 lhe aplicou uma multa de R$%2 + %1 dał ci mandat w wysokości $%2 + + + %1 refused to pay the ticket. + %1 odmítl zaplatit letenku. + >%1 no aceptó pagar el tiquete. + + %1 weigert sich, den Strafzettel zu bezahlen. + %1 refusé de payer l'amende. + %1 si è rifiutato di pagare la multa. + %1 se recusou a pagar a multa. + %1 odmówił zapłaty mandatu. + + + You have collected a bounty of $%1 for arresting a criminal. + Nasbíráte kvantum $%1 pro aretaci zločince. + Has recolectado la recompensa de $%1 por arrestar a un criminal. + + Du hast ein Kopfgeld von $%1 für die Festnahme eines Kriminellen bekommen. + Vous avez reçu une prime de $%1 pour avoir arrêté un criminel. + Hai ricevuto il pagamento di una taglia di $%1 per aver arrestato un criminale ricercato. + Você ganhou uma recompensa de R$%1 por prender um criminoso. + Otrzymujesz nagrodę w wysokości $%1 za aresztowanie poszukiwanego kryminalisty. + + + You have collected a bounty of $%1 for killing a wanted criminal, if you had arrested him you would of received $%2. + Nasbíráte kvantum $%1 za zabití hledaného zločince, pokud jste ho zatkli byste přijímaného $%2. + Has recolectado la recompensa de $%1 por matar a un criminal, si lo hubieras arrestado hubieses conseguido $%2. + + Du hast ein Kopfgeld von $%1 für das Töten eines gesuchten Verbrechers erhalten, für eine Festnahme hättest du $%2 bekommen. + Vous avez reçu une prime de $%1 pour le meurtre d'un criminel recherché, si vous l'aviez arrêté, vous auriez reçu $%2. + Hai ricevuto il pagamento di una taglia di $%1 per aver ucciso un criminale ricercato, se lo avessi arrestato avresti ricevuto $%2. + Você ganhou uma recompensa de $%1 por matar um criminoso procurado, se você tivesse o prendido ganharia R$%2. + Otrzymujesz nagrodę w wysokości $%1 za zabicie poszukiwanego kryminalisty, w przypadku gdybyś go aresztował otrzymałbyć $%2. + + + %1 has $%2 worth of contraband on them. + %1 má $%2 v hodnotě kontrabandu na nich. + %1 tiene $%2 en contrabando con el. + + %1 hatte Schmuggelware im Wert von $%2 bei sich. + %1 a $%2 de contrebande sur lui. + %1 ha $%2 in materiali illegali con se. + %1 tem R$%1 em contrabando. + %1 miał przy sobie kontrabandę o wartości $%2. + + + Illegal Items + nelegální položky + Objetos Ilegales + + Illegale Gegenstände + Articles illégaux + Oggetti Illegali + Items Ilegais + Nielegalne przedmioty / kontrabanda + + + %1 was identified as the bank robber! + %1 byl identifikován jako bankovního lupiče! + %1 fue identificado como el ladrón del banco! + + %1 wurde als Bankräuber identifiziert! + %1 à été identifié comme un braqueur de banque! + %1 è stato identificato come il rapinatore della banca! + %1 foi identificado como ladrão de banco! + %1 zidentyfikowany jako kasairz rabujący banki! + + + No illegal items + Žádné ilegální položek + No objetos ilegales + + Keine illegalen Gegenstände + Aucun élément illégal + Nessun oggetto illegale + Sem items ilegais + Brak kontrabandy i nielegalnych przedmiotów + + + You are not near a door! + Nejste u dveří! + No estas cerca de una puerta! + + Du bist nicht in der Nähe einer Tür! + Vous n'êtes pas près d'une porte! + Non sei vicno ad una porta! + Você não está perto de uma porta! + Nie jesteś przy drzwiach + + + You need to enable Picture in Picture (PiP) through your video settings to use this! + Je nutné povolit obraz v obraze (PIP) pomocí nastavení videa použít tento! + Debes habilitar la opcion de "Picture in Picture"(PiP) En tus opciones de video para usar esto! + + Du musst Picture in Picture (PiP) in deinen Video-Einstellungen aktivieren, um dies nutzen zu können! + Vous devez activer le "Picture in Picture" (PiP) dans vos paramètre vidéo pour utilser ceci! + Devi attivare Picture in Picture (PiP) nelle tue impostazioni video per usare questa funzione! + Você precisa habilitar o Picture in Picture (PiP), através das suas configurações de vídeo para usar esta opção! + Musisz włączyć Obraz w obrazie (PiP) w ustawieniach graficznych aby tego używać! + + + Licenses: + licencí + Licencias: + + Lizenzen: + Licences: + Licenze: + Licenças: + Licencje: + + + No Licenses + žádné licence + No Licencias + + Keine Lizenzen + Aucune licence + Nessuna Licenza + Sem Licenças + Brak licencji + + + Nothing illegal in this vehicle + Nic nezákonného v tomto vozidle + Nada ilegal en este vehículo + + Nichts Illegales in diesem Fahrzeug + Rien d'illégal dans ce véhicule + Niente di illegale nel veicolo + Nada ilegal dentro do veículo + Nie znaleziono niczego nielegalnego w pojeździe + + + Nothing illegal in this container. + Nic nezákonného v tomto kontejneru + Nada ilegal en este contenedor + Nulla di illegale in questo contenitore + Nic nielegalnego w tym pojemniku. + + Nada ilegal dentro do container + Rien d'illégal dans ce conteneur + Nichts illegales in diesem Container. + + + This vehicle is empty + Toto vozidlo je prázdná + Este vehículo esta limpio + + Dieses Fahrzeug ist leer + Ce véhicule est vide + Questo veicolo è vuoto + Esse veículo está vazio + Pojazd jest pusty + + + This container is empty + Tento zásobník je prázdný + Ce conteneur est vide + Este contenedor esta vacío + Questo contenitore è vuoto + Ten pojemnik jest pusty + Este recipiente está vazio + Этот контейнер пуст + Dieser Container ist leer + + + $%1 from the Federal Reserve robbery was returned from the robber being killed. + $%1 z Federálního rezervního systému loupeže byla vrácena ze lupič byl zabit. + $%1 de la Reserva Federal fue devuelto, ya que mataron al ladrón. + + $%1 wurden in die Staatsbank zurückgebracht. + $%1 du vol de la Réserve fédérale est récupéré du voleur qui vient d'être tué. + $%1 della rapina alla Riserva Federale sono stati recuperati dal rapinatore ucciso. + R$%1 que foi roubado da Reserva Federal retornou a ela após a morte do ladrão. + $%1 z kradzieży w Banku zostało zwrócone po zabiciu włamywacza. + + + Repairing vault... + Oprava klenby ... + Reparando bóveda... + + Tresor wird repariert... + Réparation du coffre... + Riparando il Caveau + Reparando Cofre... + Naprawiam skarbiec... + + + The vault is now fixed and re-secured. + Klenba je nyní pevně stanovena a re-zabezpečeny. + La bóveda esta reparada y segura. + + Der Tresor wurde repariert. + Le coffre est de nouveau sécurisé. + Il Caveau è stato riparato e messo in sicurezza. + O Cofre foi consertado e está seguro. + Skarbiec jest naprawiony i zabezpieczony. + + + The vault is already locked? + Klenba je již uzamčen? + La bóveda ya esta cerrada? + + Der Tresor ist abgeschlossen? + Le coffre est déjà fermé? + Il Caveau è già bloccato? + O Cofre está trancado? + Skarbiec jest zablokowany? + + + You can't enter anything below 1! + Nemůžete nic zadávat menší než 1! + No puede poner nada menor que 1! + + Du kannst nichts unter 1 eingeben! + Vous ne pouvez pas moins de 1! + Non puoi selezionare nulla sotto l'1! + Não é permitido usar valores abaixo de 1! + Nie możesz wprowadzić niczego poniżej 1! + + + You can't store anything but gold bars in the safe. + Nemůžete ukládat nic jiného než zlaté pruty v trezoru. + Solo puedes guardar barras de oro en la bóveda. + + Du kannst nur Goldbarren in den Tresor legen. + Vous ne pouvez pas mettre autre chose que des lingot d'or. + Nella cassaforte puoi depositare solo lingotti d'oro. + Você só pode guardar Barras de Ouro no cofre. + Nie możesz składować niczego poza sztabami złota w sejfie. + + + You don't have %1 gold bar(s) + Nemáte%1 zlatá tyč (y) + No tienes %1 barra(s) de oro + + Du hast keine %1 Goldbarren + Vous n'avez pas %1 lingot(s) d'or + Non hai %1 lingotti d'oro + Você não tem %1 Barra(s) de Ouro + Nie masz %1 sztab(y) złota + + + Couldn't remove the item(s) from your inventory to put in the safe. + Nepodařilo se odstranit položky) z inventáře dát do trezoru. + No se pudieron mover las objetos de tu inventario a la caja. + + Gegenstände konnten nicht von deinem Inventar in den Tresor gepackt werden. + Vous ne pouvez pas supprimer les items de votre inventaire pour les mettre dans le coffre. + Non è stato possibile rimuovere gli oggetti dal tuo inventario per metterli nella cassaforte. + Não foi possível mover o item do inventário para o cofre. + Nie można usunąć rzeczy z twojego wyposażenia aby włożyć je do sejfu + + + Couldn't search %1 + Nemohl hledání%1 + No se pudo buscar a %1 + + Konnte %1 nicht durchsuchen + Impossible de fouiller %1 + Impossibile ispezionare %1 + Não foi possível buscar por %1 + Nie można przeszukać %1 + + + Repairing Door... + Oprava dveří ... + Reparando Puerta... + + Tür wird repariert... + Réparation de la porte... + Riparando la porta... + Reparando a porta.... + Naprawiam drzwi... + + + No Licenses<br/> + Žádné Licence < br / > + No Licencias<br/> + + Keine Lizenzen<br/> + Aucune licence<br/> + Nessuna Licenza<br/> + Você não tem licença<br/> + Brak licencji<br/> + + + No one has sold to this dealer recently. + Nikdo se prodalo tohoto prodejce nedávno. + Nadie le ha vendido a este comerciante recientemente. + + Niemand hat hier kürzlich etwas verkauft. + Personne n'est venu vendre à ce dealer récement + Non è stato visto nessuno vendere a questo spacciatore di recente. + Ninguém vendeu para esse negociante recentemente + Nikt nie sprzedawał ostatnio u dilera. + + + The following people have been selling to this dealer recently. + Následující lidé byli prodeji tohoto prodejce nedávno. + Las siguientes personas le han estado vendiendo a este comerciante recientemente. + + Die folgenden Leute haben kürzlich an diesen Dealer verkauft. + Les personnes suivantes sont venues vendre à ce dealer récement. + Le seguenti persone sono state viste vendere a questo spacciatore. + Os seguintes jogadores venderam para esse negociante recentemente. + Ostatnio u dilera sprzedawali następujący ludzie. + + + Radar + Radar + Radar + + Radar + Radar + Autovelox + Radar + Radar + + + Vehicle Speed %1 km/h + Rychlost vozidla%1 km / h + Velocidad %1 km/h + + Geschwindigkeit %1 km/h + Vitesse du véhicule %1 km/h + Velocità veicolo %1 km/h + Velocidade do Veículo %1 km/h + Prędkość pojazdu %1 km/h + + + You have been released automatically for excessive restrainment time + Byli jste automaticky uvolněn pro nadměrnou restrainment čas + Has sido liberado automáticamente por tiempo excesivo de estar retenido. + + Du wurdest automatisch freigelassen, da die maximale Verhaftungszeit überschritten wurde + Vous êtes démenotté automatiquement pour un menottage excessivement long + Sei stato automaticamente liberato per essere rimasto ammanettato troppo tempo + Você foi solto automaticamente, devido ao tempo limite ter expirado. + Zostałeś automatycznie rozkuty z uwagi na długi upływ czasu od skucia. + + + You have been restrained by %1 + Byli jste omezeni%1 + Has sido retenido por %1 + + Du wurdest von %1 festgenommen + Vous avez été menotté par %1 + %1 ti ha messo le manette + Você foi imobilizado por %1 + Zostałeś rozkuty przez %1 + + + Who do you think you are? + Kdo si myslíš že jsi? + Qui pensez vous être? + ¿Quién te crees que eres? + Chi ti credi di essere? + Za kogo Ty się masz? + Quem você pensa que é? + Кто ты, по-твоему, такой? + Was glaubst du wer du bist? + + + You must select a perp. + Je třeba vybrat pachatele. + Vous devez sélectionner une personne. + Debe seleccionar un asesino. + È necessario selezionare un criminale. + Musisz wybrać perp. + Você deve selecionar um criminoso. + Вы должны выбрать преступника. + Sie müssen eine perp wählen. + + + You must select a crime. + Je třeba vybrat trestného činu. + Vous devez sélectionner un crime. + Debe seleccionar un crimen. + È necessario selezionare un crimine. + Musisz wybrać przestępstwa. + Você deve selecionar um crime. + Вы должны выбрать преступление. + Sie müssen ein Verbrechen aus. + + + Failed to fetch crimes. + Nepodařilo se načíst trestných činů. + Impossible de récupérer les crimes. + No se pudieron obtener los crímenes. + Impossibile recuperare i crimini. + Nie udało się pobrać przestępstw. + Falha ao buscar crimes. + Не удалось получить преступления. + Fehlgeschlagen Verbrechen zu holen. + + + + + You tried to give %1 %2 %3 but they couldn't hold that so it was returned. + Pokusili jste se dát% %1 %2 3, ale nemohli si myslí, že tak to bylo se vrátil. + Le tratastes de dar %1 %2 %3 pero no tenian espacio asi que se te devolvió. + + Du wolltest %1 %2 %3 geben, aber er hat keinen Platz in seinem Inventar und hat es darum zurückgegeben. + Vous avez essayé de donner %1 %2 %3 mais il n'a pas assez de place et vous à tout redonné. + Hai provato a dare a %1 %2 unità di %3 ma non poteva trasportarlo quindi ti sono state restituite restituite. + Você tentou dar %1 %2 %3, mas não conseguiu segurar e por isso que foi devolvido. + Próbowałeś dać %1 %2 %3 lecz gracz nie mógł tego unieść, przedmioty zostały zwrócone. + + + %1 returned %2 %3 because they couldn't hold that amount. + %1 vrátila% %2 3, protože oni nemohli držet tuto částku. + %1 devolvió %2 %3 porque no tenian espacio. + + %1 hat %2 %3 zurückgegeben, weil er nicht so viel tragen kann. + %1 vous à redonné %2 %3 parce qu'ils ne pouvaient pas en tenir autant. + %1 ha restituito %2 %3 perchè non poteva trasportare quella quantità + %1 retornou %2 %3 porque não conseguiu segurar essa quantidade. + %1 zwrócił %2 %3 ponieważ nie mógł tego unieść + + + %1 has gave you %2 but you can only hold %3 so %4 was returned back. + %1 vám již dal%2, ale můžete mít pouze% %3 4 tak byla vrácena zpět. + %1 te a dado %2, pero solo puedes cargar %3 asi que %4 fue devuelto. + + %1 hat dir %2 gegeben, du kannst aber nur %3 tragen, also hast du %4 zurückgegeben. + %1 vous à donné %2 mais vous ne pouvez en tenir que %3 donc %4 à été redonné. + %1 ti ha dato %2 ma puoi portare solo %3 quindi %4 unità sono state restituite. + %1 retornou %2 %3 porque não conseguiu segurar essa quantidade. + %1 dał ci %2 lecz możesz unieść tylko %3, w związku z tym zwróciłeś %4. + + + Do you want to add this item to your weapon or inventory? If you add it to your weapon your current existing attachment will be lost! + Chcete přidat tuto položku do zbraně nebo inventáře? Pokud si jej přidat do svého zbraň váš současný stávající příloha bude ztraceno! + Quieres agregar este Objeto/Arma a tu inventario? Si lo agregas a tu arma tu accesorio actual se perdera! + + Möchtest du den Aufsatz zu deiner Waffe oder deinem Inventar hinzufügen? Wenn du es zur Waffe hinzufügst, geht der vorhandene Aufsatz verloren! + Voulez-vous ajouter cet article à votre arme ou à votre inventaire? Si vous l'aajoutez à votre arme, votre accessoire existant actuel sera perdu! + Vuoi aggiungere questo oggetto alla tua arma o all'inventario? Se lo aggiungerai all'arma verrà rimosso l'eventuale accessorio già presente su di essa! + Você quer adicionar este item à sua arma ou inventário? Se você adicioná-lo à sua arma seu item atual existente será perdida! + Chcesz dodać tę rzecz do broni lub wyposażenia? Jeśli to zrobisz twoje aktualne wyposażenie broni zostanie zmienione na nowo zakupione i przepadnie! + + + Attachment slot taken! + Attachment slot vzít! + Slot de accesorio tomado! + + Aufsatz Platz belegt! + Accessoire pris! + Slot Accessorio preso! + Slot de acessório utilizado! + Podjąłeś slot + + + Weapon + Zbraň + Arma + + Waffe + Armes + Arma + Armas + Broń + + + Inventory + Inventář + Inventario + + Inventar + Inventaire + Inventario + Inventário + Wyposażenie + + + You are not allowed to look into someone's backpack! + Nejste dovoleno dívat se do něčí batohu! + No tienes permiso de ver dentro de las mochilas de los demas! + + Du bist nicht berechtigt, in fremde Rucksäcke zu schauen! + Vous n'êtes pas autorisé à regarder dans le sac à dos de quelqu'un! + Non sei autorizzato a guardare negli zaini altrui! + Você não é liberado para olhar a mochila dos outros! + Nie możesz zaglądać do czyichś plecaków! + + + You are not allowed to access this vehicle while its locked. + Nemáte povolen přístup k toto vozidlo zatímco jeho uzamčen. + No tienes permiso de accesar este vehículo mientras esta cerrado. + + Du bist nicht berechtigt, auf dieses Fahrzeug zuzugreifen, während es abgeschlossen ist. + Vous n'êtes pas autorisé à accéder à ce véhicule tant qu'il est vérouillé. + Non ti è permesso l'accesso a questo veicolo mentre è bloccato. + Você não pode acessar o veiculo enquanto ele estiver trancado. + Nie masz dostępu do pojazdu gdy ten jest zamknięty + + + This vehicle's trunk is in use, only one person can use it at a time. + kmen toto vozidlo je v provozu, může jen jedna osoba ji použít najednou. + El maletero de este vehículo solo puede ser usado por una persona a la vez. + + Der Kofferraum dieses Fahrzeuges wird bereits benutzt, nur eine Person kann auf ihn zugreifen. + Le coffre de ce véhicule est en cours d'utilisation, une seule personne peut l'utiliser à la fois. + L'inventario di questo veicolo è in uso, può essere usato solo da una persona alla volta. + A mala desse veículo está em uso, somente uma pessoa pode acessá-la de cada vez. + Bagażnik pojazdu jest w użyciu, na raz może korzystać z niego tylko jedna osoba. + + + Failed Creating Dialog + Nepodařilo Vytvoření dialog + Falló la creación del dialogo + + Erstellen des Dialogs gescheitert + Échec à la création de dialogue + Creazione dialogo fallito + Falha ao criar Diálogo + Nie udało się nawiązać kontaktu + + + You have unlocked your vehicle. + Jste odemkli své vozidlo. + Has abierto tu vehículo + + Du hast dein Fahrzeug aufgeschlossen. + Vous avez débloqué votre véhicule. + Hai sbloccato il tuo veicolo. + Você destrancou o veículo. + Odblokowałeś pojazd + + + You have locked your vehicle. + Jste zamkli své vozidlo. + Has cerrado tu vehículo. + + Du hast dein Fahrzeug abgeschlossen. + Vous avez verrouillé votre véhicule. + Hai bloccato il tuo veicolo + Você trancou o veículo. + Zablokowałeś pojazd + + + Sirens On + Na sirény + Sirenas Prendidas + + Sirene AN + Sirenes On + Sirene accese + Sirene Ligada + Syrena włączona + + + Sirens Off + sirény Off + Sirenas Apagadas + + Sirene AUS + Sirenes Off + Sirene spente + Sirene Desligada + Syrena wyłączona + + + You need to install storage containers to have storing capabilities! + Je třeba nainstalovat kontejnery skladovací mít skladovací kapacity! + Debes instalar contenedores para tener capabilidades de almacenamiento! + + Du musst dir Lagerboxen kaufen, um etwas einlagern zu können! + Vous devez installer des conteneurs de stockage pour disposer de capacité de stockage! + Devi posizionare dei contenitori per aver la possibilità di depositare qualcosa! + Você tem que instalar caixas para poder guardar items! + Musisz zainstalować pojemniki aby uzyskać możliwość składowania rzeczy + + + This vehicle isn't capable of storing virtual items. + Toto vozidlo není schopné uchovávat virtuální položky. + Este vehiculo no puede guardar objetos virtuales. + + Dieses Fahrzeug kann keine virtuellen Gegenstände speichern. + Ce véhicule n'est pas en mesure de stocker des objets virtuels. + Questo veicolo non è in grado di trasportare oggetti virtuali. + Esse veículo não pode armazenar items virtuais. + Ten pojazd nie przechowuje wirtualnych przedmiotów + + + Weight: + Hmotnost: + Peso: + + Gewicht: + Poids: + Peso: + Peso: + Waga: + + + House Storage + dům Storage + Inventario de la casa + + Lagerplatz des Hauses + Conteneur de stockage + Inventario Casa + Inventário da casa + Domowa skrzynka + + + Vehicle Trunk + vozidlo Trunk + Maletero de Vehículo + + Kofferraum + Coffre de véhicule + Inventario veicolo + Capacidade da mala: + Bagażnik pojazdu + + + The vehicle either doesn't exist or is destroyed. + Vozidlo buď neexistuje, nebo je zničena. + El vehículo no existe o fue destruido. + + Das Fahrzeug existiert entweder nicht oder wurde zerstört. + Le véhicule n'existe pas ou à est détruit + Il veicolo non esiste o è stato distrutto. + Veículo não existe ou está destruido. + Pojazd nie istnieje lub jest zniszczony + + + Invalid number format + Neplatný formát number + Formato de numero inválido + + Ungültiges Zahlenformat + Format de nombre invalide + Formato numerico non valido + Formato de número inválido. + Niepoprawny format liczby + + + You can't enter anything below 1! + Nemůžete nic zadávat menší než 1! + No puedes poner nada menos que 1! + + Du kannst nichts unter 1 eingeben! + Vous ne pouvez pas entrer quoi que ce soit en dessous de 1! + Non puoi inserire nulla al di sotto di 1! + Você não pode digitar nada abaixo de 1! + Nie możesz wprowadzić niczego poniżej 1! + + + The vehicle doesn't have that many of that item. + Vozidlo nemá že mnohé z této položky. + El vehículo no tiene tantos de ese objeto. + + Das Fahrzeug hat nicht so viele dieser Gegenstände. + Le véhicule ne contient pas autant de cet objet. + Il veicolo non contiene così tanti oggetti. + O veículo não tem essa quantidade de items. + Pojazd nie posiada takiej ilości rzeczy. + + + Your sound was set to normal mode! + Váš zvuk byl nastaven do normálního režimu! + Votre son a été augmenté! + Tu sonido fue puesto en modo normal! + Il vostro sound è stato impostato in modalità normale! + + Die Lautstärke ist wieder normal! + Seu som voltou ao normal! + Dzwięk został ustawiony w tryb normalny! + + + Your sound was set to fade mode! + Váš zvuk byl nastaven do režimu slábnout! + Votre son a été diminué! + Tu sonido fue puesto en modo bajo! + Il vostro sound è stato impostato in modalità a svanire! + + Deine Lautstärke wurde in den "Fade-Mode" geändert! + Seu som está abafado. + Dzwięk został ustawiony w tryb wyciszony! + + + An RPG game mode developed by Tonic. + Mód RPG hra vyvinutá Tonic. + Un mode de jeu de RPG développé par Tonic. + Un modo de juego de rol desarrollado por Tonic. + Una modalità di gioco RPG sviluppato da Tonic. + Tryb gry RPG stworzona przez Tonic. + Um modo de jogo RPG desenvolvido pela Tonic. + Режим RPG игра, разработанная компанией Tonic. + Ein RPG-Spiel-Modus von Tonic entwickelt. + + + + + Error saving container, couldn't locate house? + Chyba při ukládání kontejner, nemohl najít dům? + Error al salvar contenedor, no se pudo encontrar la casa? + + Fehler beim Speichern der Container: Es konnte kein Haus gefunden werden. + Erreur lors de la sauvegarde des conteneur, impossible de localiser la maison. + Errore nel salvataggio del contenitore, impossibile trovare la cas a? + Erro ao salvar a caixa, não foi possível encontrar a casa. + Błąd w zapisywaniu pojemnika, nie można zlokalizować domu. + + + You are not allowed to access this storage container without the owner opening it. + Nemáte povolen přístup k tomuto skladovacího kontejneru, aniž by majitel otevření. + No tienes permiso de acceder este contenedor, sin el dueño haberlo abierto. + + Du bist nicht berechtigt, auf diesen Container zuzugreifen, ohne dass der Besitzer ihn aufgeschlossen hat. + Vous n'êtes pas autorisé à accéder à ce conteneur de stockage sans que le propriétaire ne l'ouvre. + Non sei autorizzato ad accedere a questo contentitore senza il permesso del proprietario. + Você so pode acessar a caixa se o dono deixar ela aberta. + Nie masz dostępu do pojemnika dopóki właściciel go nie otworzy. + + + There are no houses near you. + Nejsou žádné domy u vás. + No hay casas cerca de ti. + Non ci sono case vicino a voi. + Brak domy w pobliżu ciebie. + + Il n'y a aucune maison près de vous. + Não há casas perto de você. + Es gibt keine Häuser in deiner Nähe. + + + The storage box is over the stairs! + Úložný box je u konce schodů! + La boîte de rangement est dans les escaliers! + La caja de almacenamiento está sobre las escaleras! + Il contenitore è sopra le scale! + Schowek jest na schodach! + A caixa de armazenamento é sobre as escadas! + Ящик для хранения находится над лестницей! + Der Container ist über die Treppe! + + + You are not the owner of the house. + Nejste vlastníkem domu. + No eres el dueño de la casa. + Non sei il proprietario della casa. + Nie jesteś właścicielem domu. + + Vous n'êtes pas le propriétaire de la maison. + Você não é o dono da casa. + Du bist nicht der Eigentümer des Hauses. + + + You have unlocked the door. + Jste odemkl dveře. + Has abierto la puerta. + + Du hast die Tür aufgeschlossen. + Vous avez ouvert la porte. + Hai sbloccato la porta. + Você destrancou a porta. + Odblokowałeś drzwi. + + + You have locked the door. + Jste zamkli dveře. + Has cerrado con llave la puerta. + + Du hast die Tür abgeschlossen. + Vous avez verrouillé la porte. + Hai bloccato la porta. + Você trancou a porta. + Zablokowałeś drzwi. + + + You are not near a door! + Nejste u dveří! + No estas cerca de una puerta! + + Keine Tür in der Nähe! + Vous n'êtes pas près d'une porte! + Non sei vicino ad una porta! + Você não está perto de uma porta! + Nie jesteś przy drzwiach! + + + This house was recently sold and is still processing in the database. + Tento dům byl nedávno prodán a je stále zpracovává v databázi. + Esta casa fue vendida recientemente y esta procesando datos. + + Dieses Haus wurde vor Kurzem verkauft. + Cette maison a été récemment vendu et est en cours de traitement dans la base de données. + Questa casa è stata venduta di recente ed il database la sta ancora processando. + Essa casa já foi vendida, estamos processando a ordem de compra + Ten dom został ostatnio sprzedany i trwa jego przetwarzanie w bazie danych. + + + You do not have a home owners license! + Nemáte majitelům licenci doma! + No tienes licencia mobiliaria! + + Du hast keine Eigentumsurkunde! + Vous n'avez pas le permis de propriétaires de maison! + Non hai la licenza per il possesso delle case! + Você não tem um Registro Civil para comprar casas! + Nie masz licencji zarządcy nieruchomości! + + + You can only own %1 houses at a time. + Můžete vlastnit pouze%1 domy najednou. + Solo puedes ser dueño de %1 casas a la vez. + + Du darfst nur %1 Häuser zugleich besitzen. + Vous ne pouvez posséder que %1 maisons à la fois. + Puoi possedere solo %1 case + Você só pode ter %1 casa(s)! + Możesz posiadać maksymalnie %1 domów. + + + You do not have enough money! + Nemáte dost peněz! + No tienes suficiente dinero! + + Du hast nicht genug Geld! + Vous n'avez pas assez d'argent! + Non hai fondi a sufficienza! + Você não tem todo esse dinheiro! + Nie masz tyle pieniędzy! + + + This house is available for <t color='#8cff9b'>$%1</t><br/>It supports up to %2 storage containers + Tento dům je k dispozici pro < k color = "# 8cff9b '> $%1 < / t > < br / > Podporuje až %2 skladovací kontejnery + Esta casa esta disponible por <t color='#8cff9b'>$%1</t><br/>Soporta hasta %2 contenedores + + Dieses Haus gibt es für <t color='#8cff9b'>$%1</t><br/> Es unterstützt %2 Lagerbox(en) + Cette maison est disponible pour <t color='#8cff9b'>$%1</t><br/> Il prend en charge jusqu'à %2 conteneurs de stockage + Questa casa è disponibile per <t color='#8cff9b'>$%1</t><br/>Può supportare fino a %2 contenitori + Essa casa está disponível por <t color='#8cff9b'>R$%1</t><br/>Ela suporta até %2 caixa(s) + Ten dom jest dostępny za <t color='#8cff9b'>$%1</t><br/>Ma %2 miejsca na pojemniki do przechowywania wyposażenia + + + Purchase House + nákup domu + Comprar Casa + + Haus kaufen + Acheter la Maison + Compra Casa + Comprar Casa + Kup dom! + + + This house doesn't belong to anyone. + Tento dům nepatří nikomu. + Esta casa no tiene dueño. + + Dieses Haus gehört niemandem. + Cette maison n'appartient à personne. + Questa casa non appartiene a nessuno. + Essa casa não tem dono. + Ten dom nie ma właściciela. + + + This person is not online there for you cannot raid their house! + Tato osoba není on-line proto nelze nájezd svůj dům! + No puedes asaltar esta casa, porque el dueño no esta en linea! + + Der Hausbesitzer ist nicht online, daher kannst du sein Haus nicht stürmen! + Cette personne n'est pas en ligne, vous ne pouvez pas perquisitionner cette maison! + Questa persona non è online quindi non puoi perquisire la sua casa! + O dono da casa não está online, você não pode vasculhar a casa! + Osoba nie jest na serwerze, nie możesz przeszukać domu. + + + The door is already unlocked! + Dveře jsou již odemčené! + La puerta ya esta abierta! + + Die Tür ist bereits offen! + La porte est déjà débloqué! + La porta è già sbloccata! + A porta está destrancada! + Drzwi są już odblokowane! + + + The door is already locked! + Dveře jsou již zamčené! + La porte est déjà fermée! + La puerta ya esta cerrada con llave! + La porta è già chiusa a chiave! + + Die Tür ist bereits verriegelt! + Esta porta já está trancada! + Drzwi są już zablokowane! + + + Breaking lock on door + Lámání zámek na dveřích + Rompiendo la cerradura de la puerta. + + Türschloss wird aufgebrochen + En train de casser la sérrure + Sbloccando la porta + Quebrando a fechadura da porta + Wyłamuje zablokowane drzwi... + + + %1 your house is being raided by the cops! + %1 vašeho domu je vpadl policajti! + %1 tu casa esta siendo asaltada por los policías! + + %1 dein Haus wird von der Polizei durchsucht! + %1 votre maison est perquisitionnée par les flics! + %1 la Polizia si sta introducendo in casa tua! + %1 Sua casa está sendo vasculhada pela Policia! + %1 twój dom jest kontrolowany przez policję! + + + House Owner + Majitel domu + Dueño de la casa + + Hauseigentümer + Propriétaire + Proprietario Casa + Proprietário + Właściciel domu + + + There is nothing in this house. + Není nic v tomto domě. + Esta casa esta vacía. + + Es gibt nichts in diesem Haus. + Il n'y a rien dans cette maison + In questa casa non c'è nulla. + Essa casa está vazia. + Nie znaleziono niczego nielegalnego. + + + Searching House... + Vyhledávání dům ... + Buscando Casa... + + Haus wird durchsucht... + Recherche Maison... + Perquisendo la Casa... + Vasculhando a casa... + Przeszukuję dom... + + + You went too far away from the house! + Jste zašel příliš daleko od domu! + Te alejastes mucho de la casa! + + Du hast dich zu weit vom Haus entfernt! + Vous êtes parti trop loin de la maison! + Sei andato troppo distante dalla casa! + Você está muito distante da casa! + Jesteś za daleko od domu! + + + A house was raided and had $%1 worth of drugs / contraband. + Dům byl vpadl a měl $%1 v hodnotě drog / kontrabandu. + Una casa fue asaltada y se econtraron $%1 en drogas / contrabando. + + Ein Haus wurde durchsucht und es wurden Drogen / Schmuggelware im Wert von $% gefunden. + Une maison a été perquisitionné et avait $%1 de drogue / contrebande. + Una casa è stata perquisita e sono stati trovati $%1 in materiali illegali. + A casa assaltada tem R$%1 em drogas ou contrabandos. + Podczas przeszukania domu znaleziono kontrabandę o wartości $%1. + + + Nothing illegal in this house. + Nic nezákonného v tomto domě. + Nada ilegal en esta casa. + + Nichts Illegales in diesem Haus. + Rien d'illégal dans cette maison + Questa casa non contiene nulla d'illegale. + Nada ilegal nessa casa. + Nie znaleziono niczego nielegalnego. + + + House storage unlocked + Dům skladování odemkl + Inventario de la casa abierto + + Lagerplatz des Hauses geöffnet + Stockage de la maison déverrouillé + Contenitori della casa sbloccati + Armário da casa destrancado + Pojemnik odblokowany + + + House storage locked + Dům skladování zamčené + Inventario de la casa cerrado con llave + + Lagerplatz des Hauses geschlossen + Stockage de Maison verrouillé + Contenitori della casa bloccati + Armário da casa trancado + Pojemnik zablokowany + + + Locking up house please wait... + Zamykání domu čekejte prosím ... + La casa se esta cerrando con llave, por favor espere... + + Haus wird abgeschlosen, bitte warten... + Fermeture de la maison veuillez patienter... + Bloccando la casa, attendere prego... + Trancando a casa, aguarde... + Blokuję zamykam dom proszę czekać... + + + House has been locked up. + Dům byl zamčený. + La maison a été fermé. + La casa se a cerrado con llave. + + Haus wurde abgeschlossen. + La casa è stata bloccata. + Sua casa foi trancada! + Dom został zablokowany / zamknięty! + + + Are you sure you want to sell your house? It will sell for: <t color='#8cff9b'>$%1</t> + Jste si jisti, že chcete prodat svůj dům? To se bude prodávat za: <t color='#8cff9b'>$%1</t> + Estas seguro de que quieres vender tu casa? Se vendera por: <t color='#8cff9b'>$%1</t> + + Bist Du sicher, dass du dein Haus verkaufen möchtest? Es wird für <t color='#8cff9b'>$%1</t> verkauft + Etes-vous sûr de vouloir vendre votre maison? Elle se vendra pour: <t color='#8cff9b'>$%1</t> + Sei sicuro di voler vendere la tua casa? La venderai per: <t color='#8cff9b'>$%1</t> + Você tem certeza que deseja vender a casa? O valor de venda é: <t color='#8cff9b'>R$%1</t> + Jesteś pewny że chcesz sprzedać dom za <t color='#8cff9b'>$%1</t> + + + Are you sure you want to remove it? + Jsou si jisti, že jej chcete odstranit? + Estas seguro de que lo quieres remover? + Sei sicuro di voler rimuovere esso? + Czy na pewno chcesz go usunąć? + + Etes-vous sûr de vouloir delete le container? + Você tem certeza que quer remover isso? + Bist du sicher, dass du den Container entfernen möchtest? + + + This house is already owned even though you shouldn't be seeing this hint... + Tento dům je již ve vlastnictví i když by nemělo být vidět tuto radu ... + Cette maison a déjà un propriétaire, même si vous ne devriez pas voir ce message ... + Esta casa es de propiedad ya pesar de que no debería estar viendo esta pista ... + Questa casa è già di proprietà, anche se non si dovrebbe essere visto questo suggerimento ... + Ten dom jest już własnością, nawet jeśli nie należy widzieć tę wskazówkę ... + Esta casa já é de propriedade mesmo que você não deveria estar vendo essa dica ... + Этот дом уже находится в собственности, даже если вы не должны видеть эту подсказку ... + Dieses Haus befindet sich bereits im Besitz, auch wenn Sie nicht diesen Hinweis werden sehen ... + + + There is no owner for this house. + Neexistuje žádný majitel tohoto domu. + Il n'y a pas le propriétaire de cette maison. + No hay ningún propietario de esta casa. + Non vi è alcun proprietario per questa casa. + Nie ma właściciel tego domu. + Não há proprietário para esta casa. + Там нет владельца для этого дома. + Es gibt keinen Eigentümer für dieses Haus. + + + + + Food + Jídlo + Faim + Comida + Cibo + Jedzenie + + Hunger + Comida + + + Health + Zdraví + Vie + Vida + Salute + Zdrowie + + Gesundheit + Vida + + + Water + Voda + Soif + Agua + acqua + Woda + + Durst + Água + + + + + There isn't a chopper on the helipad! + Není vrtulník na přistávací plocha pro vrtulník! + No hay un helicóptero en el Helipad. + + Es ist kein Helikopter auf dem Landeplatz + Il n'y a pas d'hélicoptère sur l'héliport + Non c'è alcun elicottero sulla piazzola d'atterraggio + Não existe uma aeronave no heliponto! + W pobliżu nie ma helikoptera! + + + You need $1,000 to service your chopper + Musíte $ 1,000 servisních kontrol vrtulník + Necesitas $1,000 para reparar el helicóptero. + + Du benötigst $1,000, um deinen Helikopter zu warten + Vous devez $1000 pour l'entretien de votre hélicoptère + Necessiti di $1.000 per fare manutenzione al tuo elicottero + Você precisa de R$1.000 para reparar a sua aeronave + Potrzebujesz $1000 aby serwisować helikopter + + + Servicing Chopper [%1]... + Servis Chopper [%1] ... + Reparando Helicóptero [%1]... + + Helikopter wird gewartet [%1]... + Entretien [%1]... + Manutenendo Elicottero [%1]... + Reparando aeronave [%1]... + Serwisuję helikopter [%1]... + + + The vehicle is no longer alive or on the helipad! + Vozidlo je již nežije nebo na přistávací plocha pro vrtulník! + El vehiculo no esta vivo o en el helipad! + + Das Fahrzeug wurde zerstört oder befindest sich nicht mehr auf dem Helikopterlandeplatz! + L'hélicoptère est détruit ou n'est plus sur l'héliport! + Il veicolo non è più attivo sulla piazzola d'atterraggio! + "A aeronave não está mais disponível no heliponto! + Pojazd nie jest dłużej dostępny na lądowisku + + + Your chopper is now repaired and refuelled. + Váš vrtulník není opraveno a tankovat. + Tu helicóptero esta reparado y lleno de combustible. + + Der Helicopter ist nun repariert und aufgetankt. + Votre hélicoptère est maintenant réparé et ravitaillé + L'elicottero è stato riparato e rifornito di carburante. + Sua aeronave está reparada e com o tanque cheio! + Helikopter został naprawiony i natankowany + + + + + Marijuana leaf + marihuana list + Cannabis + + Kannabis + Cannabis + Cannabis + Maconha não Processada + Konopie + + + Apple + Jablko + Manzana + + Apfel + Pomme + Mela + Maçã + Jabłko + + + Apples + jablka + Manzanas + + Äpfel + Pommes + Mele + Maçãs + Jabłka + + + Heroin + Heroin + Heroina + + Heroin + Heroïne + Eroina + Heroína + Heroina + + + Oil + Olej + Petróleo + + Öl + Pétrole + Olio + Petróleo + Benzyna + + + Peach + Broskev + Melocotón + + Pfirsich + Pêche + Pesca + Pêssego + Brzoskwinia + + + Peaches + broskve + Melocotones + + Pfirsiche + Pêches + Pesche + Pêssegos + Brzoskwinie + + + Crude Oil + Ropa + Petróleo Crudo + + Unverarbeitetes Öl + Pétrole non raffiné + Olio non processato + Petróleo não Refinado + Ropa naftowa + + + Processed Oil + Zpracovaný olej + Petróleo Procesado + + Verarbeitetes Öl + Pétrole raffiné + Olio processato + Petróleo Refinado + Olej napędowy + + + Opium Poppy + Mák setý + Planta del Opio + + Unverarbeitetes Heroin + Graine de pavot + Eroina non processata + Heroína não Processada + Heroina nieoczyszczona + + + Heroin + Heroin + Heroina + + Verarbeitetes Heroin + Héroine + Eroina processata + Heroína Processada + Heroina oczyszczona + + + Pot + Hrnec + Marihuana + + Marihuana + Marijuana + Marijuana + Maconha Processada + Marihuana + + + Raw Rabbit + Raw Rabbit + Carne de Conejo + + Kaninchenfleisch + Viande de Lapin + Carne di coniglio + Carne de Coelho + Mięso zająca + + + Grilled Rabbit + grilované Rabbit + Conejo Asado + + Gegrilltes Hasenfleisch + Lapin grillé + Carne di coniglio alla griglia + Carne de coelho grelhado + Grilowany zając + + + Raw Salema + Raw Salema + Salema Crudo + + Salema Fleisch + Filet de Saupe + Carne di Salmone + Peixe Salema + Mięso salemy + + + Grilled Salema + Grilované Salema + Salema Cocinado + + Gegrillte Sardine + Sardine grillé + Sardine alla griglia + Sardinha Grelhada + Grilowana Salema + + + Raw Ornate + Raw Ozdobený + Ornate Crudo + + Ornate Fleisch + Filet d'Ornate + Carne di Orata + Carne Francesa + Mięso Ornata + + + Grilled Ornate + grilované Ozdobený + Ornate Cocinado + + Gegrillter Kaiserfisch + Angelfish grillé + Angelfish alla griglia + Angelfish Grelhado + Grilowany Ornat + + + Raw Mackerel + Raw Makrela + Verdel Crudo + + Makrelen Fleisch + Filet de Maquereau + Carne di Sgombro + Peixe Cavalinha + Mięso Makreli + + + Grilled Mackerel + grilované makrely + Verdel Cocinado + + Gegrillte Makrele + Maquereau grillé + Sgombro alla griglia + Cavalinha Grelhada + Grilowana Makrela + + + Raw Tuna + syrového tuňáka + Atún Crudo + + Thunfisch Fleisch + Filet de Thon + Carne di Tonno + Peixe Tuna + Mięso Tuńczyka + + + Grilled Tuna + grilované Tuna + Atún Cocinado + + Gegrillter Thunfisch + Thon grillé + tonno alla griglia + Atum Grelhado + Grilowany Tuńczyk + + + Raw Mullet + Raw Mullet + Lisa Cruda + + Meerbarben Fleisch + Filet de Mulet + Carne di Triglia + Peixe Mullet + Mięso Cefala + + + Fried Mullet + Fried Mullet + Lisa Cocinada + + Frittierte Meerbarbe + Rouget frits + Triglia fritta + Mullet Fritado + Grilowany Cefal + + + Raw Catshark + Raw máčka + Pez Gato Crudo + + Katzenhai Fleisch + Filet de Poisson Chat + Carne di Squalo + Tubarão Gato + Mięso Rekina + + + Fried Catshark + Fried máčka + Pez Gato Cocinado + + Frittierter Katzenhai + roussette frit + profondo palombo fritti + Tubarão Gato Frito + Grilowany Rekin + + + Raw Turtle + Raw Turtle + Carne de Tortuga + + Schildkröten Fleisch + Viande de Tortue + Carne di Tartaruga + Carne de Tartaruga + Mięso Żółwia + + + Turtle Soup + Turtle Soup + Sopa de Tortuga + + Schildkrötensuppe + Soupe à la Tortue + Zuppa di Tartaruga + Sopa de Tartaruga + Zupa z żółwia + + + Raw Chicken + Raw Chicken + Carne de Pollo + + Rohes Hühnchen + poulet cru + pollo crudo + Galinha Crua + Surowy Kurczak + + + Deep Fried Chicken + Smažené kuře + Pollo Frito + + Schwarz Frittiertes Hühnchen + Noir Fried Chicken + Nero Fried Chicken + Frango Frito + Smażony Kurczak + + + Raw Rooster + Raw Kohout + Carne de Gallo + + Rohes Hähnchen + Coq Raw + Rooster Raw + Galo Cru + Surowy Kogut + + + Grilled Rooster + grilované Kohout + Gallo Asado + + Gegrilltes Hähnchen + Coq grillé + cazzo alla griglia + Galo Grelhado + Grilowany Kogut + + + Raw Goat + Raw Kozí + Carne de Cabra + + Rohes Ziegenfleisch + chèvre cru + Carne di capra Raw + Carne de Cabra Crua + Surowa Koza + + + Grilled Goat + grilovaný kozí + Cabra Asada + + Gegrilltes Ziegenfleisch + chèvre grillé + Carne di capra alla griglia + Carne de Cabra Grelhada + Grilowana Koza + + + Raw Sheep + Raw Ovce + Carne de Obeja + + Rohes Schafsfleisch + brebis cru + Carne di pecora grezza + Carne de Ovelha Crua + Surowa Owca + + + Grilled Sheep + grilované Ovce + Obeja Asada + + Gegrilltes Schafsfleisch + moutons grillés + Mutton alla griglia + Mutton Grelhado + Grilowana Owca + + + Fishing Pole + Rybářský prut + Palo de Pesca + + Angel + Canne à pêche + Canna da pesca + Vara de Pescar + Wędka + + + Water Bottle + Láhev na vodu + Botella de Agua + + Wasserflasche + Bouteille d'eau + Bottiglia d'acqua + Garrafa d'água + Butelka wody + + + Coffee + Káva + Café + + Kaffee + Café + Caffè + Café + Kawa + + + Donuts + koblihy + Donas + + Donuts + Donuts + Ciambelle + Rosquinha + Pączki + + + Empty Fuel Canister + Prázdný palivo může + Bidón de Combustible Vacío + + Leerer Benzinkanister + Jerrican Vide + Tanica di carburante vuota + Tanque de Gasolina Vazio + Pusty kanister + + + Full Fuel Canister + Plná palivo může + Bidón de Combustible Lleno + + Gefüllter Benzinkanister + Jerrican de Carburant + Tanica di carburante piena + Tanque de Gasolina Cheio + Pełny Kanister + + + Defibrillator + defibrilátor + Desfibrilador + + Defibrillator + Défibrillateur + defibrillatore + Desfibrilador + defibrylator + + + Toolkit + Toolkit + Kit de Herramientas + + Toolkit + Boîte à outils + kit di strumenti + conjunto de ferramentas + zestaw narzędzi + + + Pickaxe + Krumpáč + Pico + + Spitzhacke + Pioche + Piccone + Picareta + Kilof + + + Copper Ore + Měděná ruda + Cobre + + Kupfererz + Minerai de Cuivre + Minerale di Rame + Pepita de Cobre + Ruda miedzi + + + Iron Ore + Železná Ruda + Hierro + + Eisenerz + Minerai de Fer + Minerale di Ferro + Pepita de Ferro + Ruda żelaza + + + Iron Ingot + Železná cihla + Lingote de Hierro + + Eisenbarren + Lingot de Fer + Lingotto di ferro + Barra de Ferro + Sztabka żelaza + + + Copper Ingot + měď ingotů + Lingote de Cobre + + Kupferbarren + Lingot de cuivre + Lingotto di Rame + Barra de Cobre + Sztabka miedzi + + + Sand + Písek + Arena + + Sand + Sable + Sabbia + Areia + Piasek + + + Salt + Sůl + Sal + + Salz + Sel + Sale + Sal + Sól kopana + + + Refined Salt + rafinovaný Salt + Sal Refinada + + Raffiniertes Salz + Sel traité + Sale raffinato + Sal Refinado + Sól rafinowana + + + Glass + Sklo + Vidrio + + Glas + Verre + Vetro + Vidro + Szkło + + + Polished Diamond + leštěný Diamond + Diamante Pulido + + Geschliffene Diamanten + Diamant Taillé + Diamante tagliato + Diamante Lapidado + Diament szlifowany + + + Uncut Diamond + Uncut Diamond + Diamante Bruto + + Ungeschliffene Diamanten + Diamant Brut + Diamante grezzo + Diamante Bruto + Diament surowy + + + Tactical Bacon + Tactical Bacon + Tocino + + Taktischer Speck + Bacon tactique + Carne secca + Bacon Tático + Posiłek taktyczny + + + RedGull + RedGull + RedGull + RedGull + RedGull + RedGull + RedGull + RedGull + RedGull + + + Lockpick + Šperhák + Ganzúa + + Dietrich + Outil de crochetage + Grimaldello + Chave Mestra + Wytrych + + + Rock + Skála + Piedra + + Stein + Pierre + Roccia + Pedra + Skała + + + Cement Bag + cement Bag + Bolsa de Cemento + + Zement Sack + Sac de ciment + Sacco di Cemento + Saco de Cimento + Worek cementu + + + Gold Bar + Gold Bar + Barra de Oro + + Goldbarren + Lingot d'or + Lingotto d'Oro + Barra de Ouro + Sztabka złota + + + Blasting Charge + Trhací Charge + Carga Explosiva + + Sprengladung + Charge de dynamite + Carica Esplosiva + Explosivo + Ładunek wybuchowy + + + Bolt Cutter + Bolt Cutter + Cizalla + + Bolzenschneider + Outils de sérrurier + Tronchese + Alicate + Nożyce do kłódek + + + Bomb Defuse Kit + Bomby zneškodnit Kit + Kit para Desarmar Bombas + + Bombenentschärfungskit + Outils de désamorçage + Attrezzi per il disinnesco + Kit anti-bomba + Zestaw saperski + + + Small Storage Box + Malá přihrádka + Contenedor Pequeño + + Kleine Lagerbox + Petit Conteneur de stockage + Contenitore piccolo + Caixa Pequena + Mały pojemnik + + + Large Storage Box + Velký úložný box + Contenedor Grande + + Große Lagerbox + Grand Conteneur de stockage + Contenitore grande + Caixa Grande + Duży pojemnik + + + Coca Leaf + Coca Leaf + Hoja de Coca + + Unverarbeitetes Kokain + Feuille de Coca + Cocaina non processata + Cocaína não Refinada + Nieoczyszczona kokaina + + + Coke + Koks + Cocaína + + Verarbeitetes Kokain + Cocaine + Cocaina processata + Cocaína Refinada + Oczyszczona kokaina + + + Spike Strip + Spike Strip + Barrera de Clavos + + Nagelband + Herse + Striscia Chiodata + Tapete de Espinhos + Kolczatka drogowa + + + + + Driver License + Řidičský průkaz + Licencia de Conducir + + Führerschein + Permis de Conduire + Licenza di Guida + Licença de Motorista + Prawo jazdy + + + Pilot License + pilotní licence + Licencia de Piloto + + Pilotenschein + License de Pilote + Licenza da Pilota + Licença de Piloto + Licencja Pilota + + + Heroin Training + heroin Training + Entrenamiento de Heroina + + Heroinausbildung + Transformation du Pavot + Processo Eroina + Treinamento de Heroina + Wytwarzanie Heroiny + + + Oil Processing + Zpracování olej + Procesamiento de Petroleo + + Ölverarbeitung + Raffinage du pétrole + Processo Olio + Refinamento de Petróleo + Rafinacja ropy naftowej + + + Diving License + potápěčské licence + Licencia de Buceo + + Taucherschein + Permis de Plongée + Licenza di Pesca + Licença de Mergulho + Licencja Nurka + + + Boating License + Vodácký licence + Licencia de Botes + + Bootsschein + Permis Bateau + Licenza Nautica + Licença de Barco + Patent Motorowodny + + + Firearm License + zbrojní průkaz + Licencia de Armas + + Waffenschein + Permis de Port d'Arme + Porto d'Armi + Licença de Porte de Armas + Pozwolenie na broń + + + SWAT License + SWAT licence + Licencia SWAT + + SWAT-Lizenz + License du SWAT + Licenza SWAT + Licença do Bope + Trening SWAT + + + Coast Guard License + Pobřežní stráž licence + Licencia de Guardia Costera + + Küstenwachenausbildung + Garde-Cotes + Licenza Guardia Costiera + Licença da Guarda Costeira + Trening straż przybrzeżna + + + Rebel Training + Rebel Training + Entrenamiento Rebelde + + Rebellenausbildung + Entrainement rebelle + Licenza da Ribelle + Treinamento Rebelde + Trening rebelianta + + + Truck License + Truck licence + Licencia de Camiones + + LKW-Führerschein + Permis Poids Lourds + Licenza Camion + Licença de Caminhão + Prawo jazdy - ciężarówki + + + Diamond Processing + Diamond Processing + Procesamiento de Diamantes + + Diamantenverarbeitung + Taillage des Diamands + Processo Diamanti + Lapidação de Diamante + Szlifierz diamentów + + + Copper Processing + Zpracování měď + Procesamiento de Cobre + + Kupferverarbeitung + Fonte du Cuivre + Processo Rame + Processamento de Cobre + Wytapianie miedzi + + + Iron Processing + Zpracování Iron + Procesamiento de Hierro + + Eisenverarbeitung + Fonte du Fer + Processo Ferro + Processamento de Ferro + Wytapianie żelaza + + + Sand Processing + Zpracování písek + Procesamiento de Arena + + Sandverarbeitung + Traitement du Sable + Processo Sabbia + Processamento de Areia + Hutnik szkła z piasku + + + Salt Processing + sůl Processing + Procesamiento de Sal + + Salzverarbeitung + Traitement du Sel + Processo Sale + Processamento de Sal + Warzenie soli + + + Cocaine Training + kokain Training + Entrenamiento de Cocaína + + Kokainausbildung + Transformation de la Cocaine + Processo Cocaina + Treinamento de Cocaína + Oczyszczanie kokainy + + + Marijuana Training + Marihuana Training + Entrenamiento de Marihuana + + Marihuanaausbildung + Traitement du Cannabis + Processo Marijuana + Treinamento de Maconha + Suszenie konopi + + + Cement Mixing License + Cement Mixing licence + Licencia para Mezclar Cemento + + Zementmisch-Lizenz + Fabrication du Ciment + Processo Cemento + Licença de Cimento + Wytwórca cementu + + + Medical Marijuana License + Medical Marihuana Licence + Licencia de Marihuana Medicinal + + Medizinisches Marijuana-Lizenz + Marijuana Médicale Licence + Medical Marijuana Licenza + Licença Medical Marijuana + Medical Marijuana Licencji + + + Home Owners License + Home Majitelé licence + Licencia Mobiliaria + + Eigentumsurkunde + Droit de Propriété + Licenza possesso Casa + Licença de Casas + Zarządca nieruchomości + + + + + This can only be used on a vault. + To lze použít pouze v trezoru. + Esto solo se puede usar en una bóveda. + + Dies kann nur an einem Tresor benutzt werden. + Cela ne peut être utilisé que sur un coffre-fort. + Può essere usata solo sulla cassaforte. + Isso só pode ser usado em um cofre. + Możesz tego użyć na skarbcu. + + + There is already a charge placed on this vault. + Existuje již náboj umístěn na tomto trezoru. + Ya hay un explosivo puesto en esta bóveda + + Es gibt bereits eine Sprengladung am Tresor. + Une charge de dynamite est déjà placé sur ce coffre. + C'è già una carica piazzata sulla cassaforte. + Já existe uma carga colocada sobre esse cofre. + Już założono ładunek wybuchowy na skarbcu. + + + The vault is already opened. + Klenba je již otevřen. + La bóveda ya esta abierta. + + Der Tresor ist bereits offen. + Le coffre est déjà ouvert. + La cassaforte è già aperta. + O cofre está aberto. + Skarbiec jest już otwarty. + + + A blasting charge has been placed on the federal reserves vault, You have till the clock runs out to disarm the charge! + S rozbuškami náboj byl umístěn na federální rezervy trezoru, jste až do hodiny vyčerpá odzbrojit náboj! + Una carga explosiva ha sido puesta en la bóveda de la reserva federal, tienes hasta que se acabe el tiempo para desarmar el explosivo! + + Eine Sprengladung wurde am Safe angebracht. Du hast Zeit, bis die Uhr abläuft, um die Ladung zu entschärfen! + Une charge de dynamite a été placé sur le coffre de la réserve fédérale, Vous avez jusqu'au temps imparti pour désarmorcer la charge! + Una carica esplosiva è stata piazzata sulla cassaforte della Riserva Federale, puoi cercare di disinnescarla prima che scada il tempo! + O explosivo foi colocado no cofre , você tem até o tempo acabar para desarmar o explosivo. + Ładunek wybuchowy został założony na skarbcu rezerw federalnych, musisz rozbroić ładunek nim wybuchnie! + + + The timer is ticking! Keep the cops away from the vault! + Časovač je tikání! Udržujte policajty od trezoru! + El tiempo esta corriendo, manten alejados a los policías! + + Der Timer läuft! Halte die Polizei von Safe fern! + La minuterie est lancée! Gardez les flics loin de la bombe! + Il tempo sta scorrendo! Tieni la polizia lontana dalla cassaforte! + O tempo está passando! Mantenha os policiais longe do cofre + Zegar tyka! Trzymaj policję z dala od skarbca! + + + The charge has been disarmed! + Náboj byl odzbrojen! + El explosivo ha sido desarmado! + + Die Sprengladung wurde entschärft! + La charge a été désamorcée! + La carica esplosiva è stata disinnescata! + O explosivo foi desarmado! + Ładunek wybuchowy rozbrojony! + + + The vault is now opened + Klenba je nyní otevřena + La bóveda esta abierta + + Der Tresor ist jetzt offen + Le coffre est maintenant ouvert + La cassaforte è stata aperta + O cofre está aberto. + Skarbiec otwarty + + + You must open the container before placing the charge! + Je nutné otevřít nádobu před umístěním nabíječku! + Vous devez ouvrir le conteneur avant de placer le chargeur! + Debes abrir el contenedor antes de poner el explosivo! + È necessario aprire il contenitore prima di mettere il caricabatterie! + Musisz otworzyć pojemnik przed wprowadzeniem opłat! + + Você deve abrir o container antes de colocar o explosivo! + Du musst den Container öffnen, bevor du die Ladung platzieren kannst! + + + You are not looking at a house door. + Nejste při pohledu na dveře domu. + No estas viendo a la puerta de una casa. + + Du siehst keine Haustür an. + Vous n'êtes pas en face de la porte. + Non sei girato verso la porta di una casa. + Você não esta olhando para a porta. + Nie patrzysz w stronę drzwi. + + + !!!!! SOMEONE IS BREAKING INTO THE FEDERAL RESERVE !!!!!! + !!!!! Někdo vloupání do Federálního rezervního systému !!!!!! + !!!!! LA RESERVA FEDERAL ESTA SIENDO ASALTADA !!!!!! + + !!!!! JEMAND BRICHT IN DIE ZENTRALBANK EIN !!!!!! + !!!!! QUELQU'UN TENTE DE S'INTRODUIRE DANS LA RÈSERVE FÈDÈRALE !!!!!! + !!!!!! QUALCUNO STA CERCANDO DI INTRODURSI NELLA RISERVA FEDERALE !!!!!! + !!!!! A RESERVA FEDERAL ESTÁ SENDO ROUBADA !!!!!! + !!!!!! KTOŚ SIĘ WŁAMUJE DO BANKU REZERW FEDERALNYCH !!!!! + + + %1 was seen breaking into a house. + %1 byl viděn vloupání do domu. + %1 ha sido visto entrando a una casa. + + %1 wurde beim Einbruch in ein Haus gesehen. + %1 a été vu rentrant dans une maison par effraction. + %1 è stato visto fare irruzione in una casa. + %1 foi visto invadindo sua casa. + %1 był widziany jak włamywał się do domu. + + + Cutting lock on door + Řezání zámek na dveřích + Cortando la cerradura de la puerta + + Schloss wird aufgebrochen + Crochetage de la serrure + Tranciando i blocchi sulla porta + Quebrando o cadeado da porta + Przecinam zabezpieczenia domu + + + You must open the outside doors before opening it! + Je nutné otevřít venkovní dveře před otevřením! + Vous devez ouvrir les portes extérieures avant de l'ouvrir! + Debes abrir las puertas de afuera antes de abrir esta! + È necessario aprire le porte esterne prima di aprirlo! + Musisz otworzyć zewnętrzne drzwi przed otwarciem! + + Você deve abrir as portas externas antes de abrir essa! + Du musst die Außentüren öffnen, bevor du weitermachen kannst! + + + You are not looking at a vault. + Nejste při pohledu na klenbu. + Vous ne cherchez pas à un coffre-fort. + No estas apuntando a la bóveda. + Non cercate in un caveau. + Nie jesteś patrząc na sklepieniu. + Você não está olhando para um cofre. + Вы не смотрите на хранилище. + Sie sind nicht in einem Tresor suchen. + + + There is no charge on the vault? + Neexistuje žádný poplatek na klenbě? + No hay un explosivo en la bobeda? + + Es gibt keine Sprengladung am Tresor? + Il n'y a pas de dynamite sur le coffre? + Non c'è alcuna carica esplosiva sulla cassaforte + Não há nenhum explosivo no cofre. + Nie ma ładunku na skarbcu? + + + Defusing charge... + Zneškodňovat náboj ... + Desarmando Explosivo... + + Sprengladung wird entschärft... + Désamorçage de la charge... + Disinnescando la carica esplosiva... + Desarmando o explosivo... + Rozbrajam ładunek... + + + The charge has been defused + Obvinění byla zneškodněna + El explosivo ha sido desarmado + + Die Sprengladung wurde entschärft + La charge a été désamorcée + La carica esplosiva è stata disinnescata + O explosivo foi desarmado + Ładunek został rozbrojony + + + You need to look at the vehicle you want to refuel! + Musíte se podívat na vozidla, které chcete natankovat! + Debes mirar a el vehiculo que quieres llenar de combustible! + + Du musst das Fahrzeug ansehen, das du auftanken möchtest! + Vous avez besoin de regarder le véhicule dont vous voulez faire le plein! + Devi essere girato verso il veicolo che vuoi rifornire! + Você precisa estar olhando para o veículo que deseja abastecer! + Musisz spojrzeć w kierunku pojazdu który chcesz zatankować! + + + You need to be closer to the vehicle! + Musíte být blíže k vozidlu! + Debes estar más cerca del vehiculo! + + Du musst näher am Fahrzeug sein! + Vous devez être plus proche du véhicule! + Devi stare più vicino al veicolo! + Você precisa estar mais perto do veículo! + Musisz być bliżej pojazdu! + + + Refuelling Fuel Canister + Tankování paliva kanystr + Ravitaillement carburant Bidon + Llenando Bidón de Combustible + Rifornimento carburante scatola metallica + Tankowanie paliwa Kanister + O reabastecimento de combustível vasilha + Дозаправка топлива канистра + Benzinkanister betanken + + + Fuel Station Pump + Čerpací stanice čerpadla + Pompe à essence station + Estación de bombeo de combustible + Pompa Stazione di rifornimento + Paliwo przepompowni + Bomba de Combustível Station + Топливная Насосная станция + Tankstelle Pumpe + + + Spend $%1 to refuel your Empty Fuel Canister? + Utratit $%1 natankovat vaše prázdné palivové kanystr? + Passez $%1 pour faire le plein de votre réservoir de combustible vide? + Gastar $%1 para llenar el Bidón de Combustible? + Spendere $%1 per rifornire di carburante la vostra scatola metallica del combustibile vuoto? + Wydać $%1 zatankować swój pustego zasobnika paliwa? + Gastar R$%1 para reabastecer a sua vasilha de combustível vazio? + Потратить $%1 для дозаправки ваш Пусто баллон с горючим? + Verbringen Sie $%1 Ihre leeren Kraftstoffkanister tanken? + + + You must be closer to the fuel pump! + Musíte být blíže k palivovému čerpadlu! + Vous devez être plus proche de la pompe à carburant! + Debe estar más cerca de la bomba de combustible! + È necessario essere più vicino alla pompa del carburante! + Você deve estar mais perto da bomba de combustível! + Você deve estar mais perto da bomba de combustível! + Вы должны быть ближе к топливному насосу! + Du musst dich näher an der Zapfsäule befinden! + + + You have successfully refuelled the Fuel Canister! + Úspěšně jste tankovat palivový kanystr! + Vous avez ravitaillé avec succès le Bidon carburant! + Usted ha llenado con exito el Bidón de Combustible! + Hai rifornimento con successo il canestro del combustibile! + Pomyślnie zatankowany kanistra paliwa! + Você reabastecido com sucesso a vasilha de combustível! + Вы успешно заправились на баллон с горючим! + Der Benzinkanister wurde betankt! + + + Refuelling %1 + Doplňování paliva%1 + Llenado el Bidón %1 + + Wird betankt %1 + Ravitaillement %1 + Rifornendo %1 + Abastecendo %1 + Tankuję %1 + + + You have refuelled that %1 + Jsi natankoval, že produkt%1 + Has llenado el %1 + + Du hast deinen %1 aufgetankt + Vous avez ravitaillé %1 + Hai rifornito di carburante un %1 + Você abasteceu %1 + Zatankowałeś %1 + + + This vehicle is already in your key-chain. + Toto vozidlo je již ve vaší klíčenky. + Esta vehiculo ya esta en tu llavero. + + Du hast diesen Fahrzeugschlüssel bereits in deinem Schlüsselbund. + Ce véhicule est déjà dans votre porte-clé. + Possiedi già le chiavi di questo veicolo. + Você já tem a chave desse veículo. + Masz już klucze do tego pojazdu. + + + Lock-picking %1 + Lockpicking%1 + Abriendo Cerradura %1 + + Wird aufgebrochen %1 + Crochetage %1 + Scassinando %1 + Arrombando %1 + Włamujesz się do %1 + + + You got to far away from the target. + Dostal jsi příliš daleko od cíle. + Le alejastes mucho del objeto. + + Du hast dich zu weit vom Ziel entfernt. + Vous êtes trop loin de la cible. + Sei andato troppo lontano dall'obiettivo + Voçê está muito longe do seu alvo. + Jesteś za daleko od celu. + + + You now have keys to this vehicle. + Nyní máte klíče k tomuto vozidlu. + Ahora tienes las llaves para este vehiculo. + + Du hast nun einen Schlüssel zu diesem Fahrzeug. + Vous avez maintenant les clés de ce véhicule + Sei ora in possesso delle chiavi di questo veicolo. + Agora você tem as chaves do veiculo. + Masz teraz klucze do tego pojazdu + + + The lockpick broke. + Paklíč zlomil. + La ganzua se rompió. + + Der Dietrich ist abgebrochen. + L'outil de crochetage à cassé + Il grimaldello si è rotto. + A Chave Mestra quebrou. + Wytrych się złamał. + + + %1 was seen trying to lockpick a car. + %1 byl viděn snaží lockpick auto. + %1 ha sido visto tratando de abrir un carro. + + %1 wurde beim Aufbrechen eines Auto erwischt. + %1 a été vu essayant de crocheter une voiture + %1 è stato visto provare a scassinare un veicolo. + %1 foi visto usando uma Chave Mestra em um carro. + %1 był widziany jak próbował włamać się do samochodu. + + + You are not near a mine! + Nejste v blízkosti dolu! + No estas cerca de una mina! + + Du bist nicht in der Nähe einer Mine! + Vous n'êtes pas près d'une mine! + Non ti trovi vicino ad una cava! + Você não está próximo de uma mina! + Nie jesteś blisko kopalni! + + + You can't mine from inside a car! + Nemůžete dolovat z vnitřku vozu! + No puedes minar desde adentro de un vehiculo! + + Du kannst nicht in deinem Auto abbauen! + Vous ne pouvez pas miner à l'intérieur d'une voiture! + Non puoi minare da dentro un veicolo! + Você não pode minerar dentro do carro! + Nie możesz wydobywać z samochodu! + + + You have mined %2 %1 + Jste těžil% %2 1 + Has minado %2 %1 + + Du hast %2 %1 abgebaut + Vous avez miné %2 %1 + Hai minato %2 %1 + Você minerou %2 %1 + Wydobyłeś %2 %1 + + + Place Spike Strip + Umístěte Spike Strip + Poner Barrera de Clavos + + Nagelband platzieren + Placer la herse + Posa striscie chiodate + Tapete de Espinhos armado. + Rozłóż kolczatkę + + + Pack up Spike Strip + Sbalit Spike Strip + Guardar Barrera de Clavos + + Nagelband zusammenpacken + Ranger la herse + Recupera striscie chiodate + Pegar Tapete de Espinhos. + Zwiń kolczatkę + + + You need to be inside your house to place this. + Musíte být uvnitř svého domu na místo toto. + Debes estar dentro de tu casa para poner eso. + + Du musst in deinem Haus sein, um dies platzieren zu können. + Vous devez être à l'interieur de votre maison pour placer ceci + Devi essere all'interno della tua casa per posizionarlo. + Você precisa estar dentro da sua casa para colocar isso! + Musisz być wewnątrz własnego domu aby to umieścić. + + + You cannot place any more storage containers in your house. + Nelze umístit žádné další skladovací kontejnery ve vašem domě. + No puedes poner mas contenedores en tu casa. + + Es können keine weiteren Lagercontainer in dein Haus gestellt werden. + Vous ne pouvez pas placer d'autres conteneur dans votre maison. + Non puoi installare altri contenitori in casa tua. + Você não pode colocar mais caixas dentro da sua casa. + Nie masz więcej miejsca na pojemniki w tym domu. + + + No more free storage spaces in your house. + Žádné další volné skladové prostory v domě. + No hay más espacio de almacenamiento en tu casa. + + Es gibt keinen freien Stauraum in deinem Haus mehr. + Plus d'espace libre dans votre maison. + I contenitori in casa tua hanno finito lo spazio disponibile. + Não ha mais espaços para guardar itens em sua casa. + Brak wolnych miejsc na pojemniki w domu. + + + You need to select an item first! + Je třeba vybrat položku na prvním místě! + Debes seleccionar un objeto primero! + + Du musst zuerst einen Gegenstand auswählen! + Vous devez selectionné un item! + Devi prima selezionare un oggetto! + Você precisa selecionar um item primeiro! + Zaznacz najpier rzecz. + + + You can now run farther for 3 minutes + Nyní můžete spustit další 3 minuty + Ahora puedes correr mas por 3 minutos + + Du kannst jetzt für 3 Minuten weiter laufen + Tu peux courir pendant 3 minutes + Puoi ora correre per 3 minuti consecutivi + Você agora pode correr por 3 minutos + Możesz przez 3 minuty biec bez wysiłku + + + You already have a Spike Strip active in deployment + Ty už mají Spike Strip aktivní při nasazení + Ya tienes una Barrera de Clavos activada + + Du platzierst bereits ein Nagelband + Vous avez deja une herse entrain d'être deployée + Hai già una striscia chiodata piazzata + Você já tem um Tapete de Espinhos ativo + Aktualnie masz rozłożoną kolczatkę + + + You can't refuel the vehicle while in it! + Nemůžete natankovat z vozidla, když v něm! + No puedes llenar tu vehiculo mientras estas adentro de él! + + Du kannst ein Fahrzeug nicht betanken während du dich darin befindest! + Vous ne pouvez pas faire le plein du véhicule tout en étant de le véhicule! + Non puoi rifornire il veicolo di benzina mentre ci sei dentro! + Você não pode abastecer o veículo enquanto dentro dele! + Nie możesz zatankować pojazdu gdy w nim jesteś! + + + This item isn't usable. + Tato položka není použitelný. + Este objeto no es utilizable. + + Dieser Gegenstand ist nicht benutzbar. + Cet item n'est pas utilisable. + Questo oggetto è inutilizzabile. + Esse item não é usável. + Nie można użyć tej rzeczy. + + + + + Processing Oil + zpracování ropy + Procesando Petróleo + + Öl wird verarbeite + Raffinage de Pétrole + Raffinando il Petrolio + Processando Petróleo + Rafinacja ropy + + + Cutting Diamonds + řezání diamantů + Cortando Diamantes + + Diamanten werden geschliffen + Taillage de diamant + Rifinendo diamanti + Lapidando Diamante + Szlif diamentów + + + Processing Opium + zpracování Opium + Procesando Opio + + Heroin wird verarbeitet + Traitement d'Heroine + Processando Eroina + Processando Heroína + Oczyszczanie heroiny + + + Casting Copper Ingots + Casting měděných ingotů + Fundiendo Lingotes de Cobre + + Kupfer wird verarbeitet + Fonte de Cuivre + Processando in lingotti di Rame + Processando Cobre + Wytop miedzi + + + Casting Iron Ingots + Litiny ingoty + Fundiendo Lingotes de Hierro + + Eisen wird verarbeitet + Fonte de fer + Processando Ferro + Processando Ferro + Wytop żelaza + + + Processing Sand + zpracování Písek + Procesando Arena + + Sand wird verarbeitet + Fonte du Sable + Processando Sabbia + Processando Areia + Topienie piasku + + + Processing Salt + zpracování Salt + Procesando Sal + + Salz wird verarbeitet + Traitement du Sel + Processando Sale + Refinando Sal + Warzenie soli + + + Processing Coca Leaves + Zpracování listů koky + Procesando Hojas de Coca + + Kokain wird verarbeitet + Traitement de Cocaine + Processando Cocaina + Processando Cocaína + Oczyszczanie kokainy + + + Processing Marijuana + zpracování Marihuana + Procesando Marihuana + + Marihuana wird verarbeitet + Traitement de Marijuana + Processando Marijuana + Processando Maconha + Suszenie marihuany + + + Mixing Cement + Míchání Cement + Mezclando Cemento + + Zement wird gemischt + Mélange de ciment + Processando Cemento + Misturando Cimento + Mielenie cementu + + + You need to stay within 10m to process. + Musíte zůstat v rozmezí 10 m zpracovat. + Debes estar a menos de 10m para procesar. + + Du musst innerhalb von 10m bleiben, um verarbeiten zu können. + Vous devez rester à 10m pour traiter + Devi stare entro 10m per processare. + Você precisa ficar a menos de 10m para processar. + Musisz być w odległości 10 m aby przetwarzanie się odbyło. + + + You have no inventory space to process your materials. + Nemáš zásob prostor ke zpracování vašich materiálů. + Vous avez pas d'espace d'inventaire pour traiter vos matériaux. + Usted no tiene espacio en el inventario para procesar sus materiales. + Non hai spazio nell'inventario per elaborare i materiali. + Nie masz miejsca na przetwarzanie swoich zapasów materiałów. + Você não tem espaço no inventário para processar seus materiais. + У вас нет места инвентаря для обработки ваших материалов. + Du hast keinen Platz im Inventar, um die Materialien zu verarbeiten. + + + Only part of your materials could be processed due to reaching your maximum weight. + Pouze část svých materiálů by mohla být zpracována z důvodu dosažení maximální váhu. + Seule une partie de votre matériel pourrait être traitée en raison d'atteindre votre poids maximum. + Sólo una parte de los materiales se han podido procesar debido a alcanzar tu peso máximo. + Solo una parte del tuo materiali possono essere trattati a causa di raggiungere il vostro peso massimo. + Tylko część swoich materiałów może być przetwarzane ze względu na osiągnięcie maksymalnej wadze. + Apenas uma parte de seus materiais puderam ser processados, devido o peso máximo ter sido atingido. + Только часть ваших материалов может быть обработан из-за достижения вашего максимального веса. + Nur ein Teil der Materialien kann verarbeitet werden, da das maximale Gewicht sonst erreicht würde. + + + You need $%1 to process without a license! + Musíte $%1 bez povolení ke zpracování! + Necesitas $%1 para procesar sin licencia! + + Du brauchst $%1, um ohne eine Lizenz verarbeiten zu können! + Vous devez $%1 pour traiter sans permis! + Hai bisogno di $%1 per processare senza la dovuta licenza! + Você precisa de R$%1 para processar sem licença! + Musisz mieć $%1 aby przetworzyć bez odpowiedniej licencji + + + You have processed %1 into %2 + Máte zpracovaný%1 do%2 + Has procesado %1 a %2 + + Du hast %1 in %2 verarbeitet + Vous avez traité %1 en %2 + Hai processato %1 in %2 + Você trasformou %1 em %2 + Przetworzyłeś %1 na %2 + + + You have processed %1 into %2 for $%3 + Máte zpracovaný%1 do%2 na $ %3 + Has procesado %1 a %2 por $%3 + + Du hast %1 für $%3 in %2 verarbeitet + Vous avez traité %1 en %2 pour $%3 + Hai processato %1 in %2 al costo di $%3 + Você trasformou %1 em %2 por R$%3 + Przetworzyłeś %1 na % za $%3 + + + + + Medics Online: %1 + Zdravotníci Online: %1 + Médicos en línea: %1 + + Sanitäter online: %1 + Medics en ligne: %1 + Medici Online: %1 + Médicos Online: %1 + Medycy Online: %1 + + + Medics Nearby: %1 + Zdravotníci v blízkosti:%1 + Médicos Cerca: %1 + + Sanitäter in der Nähe: %1 + Medics à proximité: %1 + Medici Vicini: %1 + Médicos por perto: %1 + Medycy w pobliżu: %1 + + + %1 is requesting EMS Revive. + %1 požaduje EMS oživit. + %1 esta pidiendo servicio médico. + + %1 benötigt medizinische Hilfe + %1 demande de l'aide d'un Medecin. + %1 sta richiedendo l'intervento medico. + %1 requisitou o resgate do SAMU + %1 prosi o pomoc medyczną. + + + Respawn Available in: %1 + Respawn K dispozici v:%1 + Puedes reaparecer en: %1 + + Respawn verfügbar in: %1 + Respawn Disponible dans: %1 + Respawn disponibile in: %1 + Respawn Disponível em: %1 + Odrodzenie możliwe za: %1 + + + You can now respawn + Nyní lze respawn + Ya puedes reaparecer + + Du kannst nun respawnen + Vous pouvez désormais réapparaître + Puoi ora fare respawn + Você pode dar respawn + Możesz się odrodzić + + + %1 has revived you and a fee of $%2 was taken from your bank account for their services. + %1 oživil vy a poplatek ve výši $%2 byl převzat z bankovního účtu za své služby. + %1 te a revivido y una cuota de $%2 a sido tomada de tu cuenta por sus servicios. + + %1 hat dich wiederbelebt und dafür eine Gebühr von $%2 von deinem Bankkonto eingezogen. + %1 vous à réanimé, les fraits de $%2 sont transféré depuit votre compte bancaire pour son service. + %1 ti ha rianimato e sono stati prelevati $%2 dal tuo conto in banca per pagare la prestazione. + %1 reviveu você e uma taxa de R$%2 foi cobrada da sua conta bancária para os serviços prestados. + %1 pobrał opłatę w wysokości $%2 za reanimację i przywrócenie funkcji życiowych. + + + Someone else is already reviving this person + Někdo jiný již užívají tuto osobu + Alguien ya esta reviviendo a esta persona + + Jemand anderes belebt diese Person bereits wieder + Quelqu'un d'autre s'occupe déjà de cette personne + Qualcun'altro sta già provando a rianimare questa persona + Outro médico já está revivendo esse jogador + Ktoś inny aktualnie reanimuje tę osobę + + + Reviving %1 + Oživení%1 + Reviviendo %1 + + Wird wiederbelebt %1 + Réanimations %1 + Rianimando %1 + Revivendo %1 + Reanimacja %1 + + + This person either respawned or was already revived. + Tato osoba buď respawned nebo již byl přijat. + Esta persona ya reapareció o fue revivida. + + Diese Person ist entweder respawnt oder wurde bereits wiederbelebt. + Cette personne à soit réapparue, soit a déjà été réanimée. + Questa persona è stata già rianimata o ha fatto respawn. + Esse jogador já deu respawn ou já foi reanimado. + Ta osoba wcześniej się odrodziła lub została reanimowana. + + + You have revived %1 and received $%2 for your services. + Obdrželi jste%1 a získal $ %2 za vaše služby. + Has revivido a %1 y recivido $%2 por tus servicios. + + Du hast %1 wiederbelebt und $%2 für deine Dienste erhalten. + Vous avez réanimé %1 vous avez reçu $%2 pour votre aide + Hai rianimato %1 e hai ricevuto $%2 per la tua prestazione. + Você reviveu %1 e recebeu R$%2 pelo seus serviços prestados. + Reanimowałeś %1 i za uratowanie życia otrzymałeś $%2. + + + You got to far away from the body. + Dostal jsi příliš daleko od těla. + Te alejastes mucho del cuerpo. + + Du bist zu weit vom Körper entfernt. + Vous êtes trop loin du corps. + Sei andato troppo distante dal corpo. + Você está muito distante do corpo. + Jesteś za daleko od ciała. + + + + + The robbery has failed due to unknown reasons + Lupič selhalo kvůli neznámých důvodů + El robo fallo por razones desconocidas + + Der Raub ist aus unbekannten Gründen fehlgeschlagen + Le vol de la réserve fédérale a échoué pour des raisons inconnues + La rapina è fallita per cause sconosciute + O roubo falhou por uma causa desconhecida. + Napad się nie udał z niewiadomych powodów. + + + $%1 was stolen from the robbery on the federal reserve + $%1 byl ukraden z loupeže na federální rezervy + $%1 fue robado de la reserva federal + + $%1 wurden von den Räubern aus der Zentralbank gestohlen + $%1 a été volé à la réserve fédérale. + $%1 sono stati rubati durante la rapina alla banca + R$%1 foi roubado da Reserva Federal. + $%1 ukradziono z Rezerwy Federalnej + + + This vault is already being robbed by someone else + Tato klenba je již okraden někým jiným + La bóveda ya esta siendo robada por alguien mas + + Der Tresor wird bereits von jemand anderem ausgeraubt + Ce coffre est déjà pillé par quelqu'un d'autre + Questo Caveau sta venendo rapinando da qualcun'altro + Esse cofre já está sendo roubado por outro jogador. + Skarbiec jest aktualnie rabowany przez inną osobę. + + + This vault was already robbed recently + Tato klenba byla již nedávno okraden + La bóveda fue robada muy recientemente + + Der Tresor wurde bereits vor Kurzem ausgeraubt + Ce coffre a déjà été pillé récemment + Questo Caveau è stato svaligiato di recente + Esse cofre já foi assaltado recentemente. + Skarbiec został niedawno zrabowany + + + + + Garage + Garáž + Garaje + + Garage + Garage + Garage + Garagem + Garaż + + + Your Vehicles + Vaše Vozidla + Tus vehículos + + Deine Fahrzeuge + Vos vehicules + I tuoi Veicoli + Seus Veículos + Twój pojazd + + + Vehicle Information + Informace o vozidle + Información de Vehículos + + Fahrzeuginformationen + Carte grise du vehicule + Informazioni Veicolo + Informações do Veículo + Informacja o pojeździe + + + Automatically reveals nearest objects within 15m, turn this setting off if you are experiencing performance issues. + Automaticky odhaluje nejbližší objektů v rámci 15m, toto nastavení vypnete, pokud jste se setkali s problémy s výkonem. + Automáticamente revela los objetos más cercanos dentro de 15m, apaga esta opción si estas teniendo problemas de performación. + + Zeigt automatisch nächstgelegene Objekte innerhalb von 15m an, deaktiviere es, wenn du Leistungprobleme hast. + Révèle automatiquement les objets les plus proches au sein de 15m, désactiver ce paramètre si vous rencontrez des problèmes de performance. + Rivela automaticamente gli oggettivi vicini entro 15m, disattiva quest'impostazione se riscontri dei problemi di perfomance di sistema. + Revela objetos à 15m, desabilite essa opção se está tendo problemas de performance. + Automatycznie wykrywa najbliższe obiekty w promieniu 15m, wyłącz tę opcję jeśli masz problemy z wydajnością + + + Switch side-channel mode, turn this off if you don't want to talk with players from your side. + Přepnout do režimu side-channel, tuto funkci vypnout, pokud nechcete mluvit s hráči z vaší strany. + Passez en mode à canal latéral, désactiver cette fonction si vous ne voulez pas parler avec des joueurs de votre côté. + Habilita/Deshabilita el SideChannel, apaga esto si no quieres hablar con jugador de tu lado. + Interruttore modalità side-channel, disattivare questa funzione se non si vuole parlare con i giocatori da parte vostra. + Przełącznik trybu side-channel, to wyłączyć, jeśli nie chce rozmawiać z graczami z boku. + + Habilita/Desabilita o side-channel, desabilite caso você não queira conversar com os jogadores da sua facção. + Sidechat aktivieren. Ausschalten, wenn du nicht mit Spielern deiner Fraktion sprechen möchtest. + + + Switch player's broadcast mode, turn this off if you don't want to see any broadcast from other players. + + + Habilitar/Deshabilitar transmisiones, deshabilita esto si no quieres ver transmisiones de otros jugadores. + + + + Habilita/Desabilita as transmissões dos jogadores, desabilite caso você não queira ver as transmissões dos outros jogadores. + + + + Controls whether or not players will have name tags above their head. + Přepnout do režimu side-channel, tuto funkci vypnout, pokud nechcete mluvit s hráči z vaší strany. + Controla si los jugadores tienen nombres (tags) sobre sus cabezas. + + Regelt, ob Spieler Namensschilder über dem Kopf haben. + Contrôle si les joueurs auront ou non leur noms au dessus de leur tête + Controlla la visualizzazione delle tags sopra la testa dei giocatori + Controla se os jogadores terão os nomes em suas cabeças. + Kontroluje czy gracze będą mieli nad głowami swoje Tagi z nazwą + + + Shop Stock + Obchod Sklad + Inventario de la Tienda + + Lagerbestand + Shop Stock + Stock Negozio + Estoque + Sklep oferta + + + + + Player Interaction Menu + Hráč Interakce Menu + Menu de Interacción de Jugadores + + Spielerinteraktionsmenü + Menu Interaction du Joueur + Menu d'interazione Giocatore + Menu de Interação do Jogador + Menu Interakcji + + + Put in vehicle + Vložíme do vozidla + Poner en vehículo + + Ins Fahrzeug setzen + Embarquer + Metti nel Veicolo + Colocar no Veículo + Włóż do pojazdu + + + Un-Restrain + živelný + Quitar Esposas + + Freilassen + Démenotter + Togli Manette + Soltar + Rozkuj + + + Check Licenses + Zkontrolujte licence + Revisar Licencias + + Lizenzen überprüfen + Vérifier Licences + Controlla Licenze + Verificar Licenças + Sprawdź licencje + + + Search Player + Hledat hráče + Buscar Jugadores + + Spieler durchsuchen + Fouiller Joueur + Ricerca Giocatore + Revistar Jogador + Przeszukaj + + + Stop Escorting + Zastavit doprovázet + Parar de Escoltar + + Eskortieren stoppen + Arrêter Escorte + Ferma Scorta + Parar de Escoltar + Przestań eskortować + + + Escort Player + Escort Player + Escoltar Jugador + + Spieler eskortieren + Escorter Joueur + Scorta Giocatore + Escoltar Jogador + Eskortuj + + + Ticket Player + Ticket Player + Dar Tiquete + + Strafzettel ausstellen + Amende Joueur + Multa Giocatore + Multar Jogador + Wystaw mandat + + + Seize Weapons + zabavili zbraně + Confiscar Armas + + Seize Waffen + Saisir les armes + cogliere Armi + Apreender Armas + Chwytaj broń + + + Send to jail + Poslat do vězení + Encarcelar + + Ins Gefängnis stecken + Envoyer en prison + Arresta + Enviar p/ Prisão + Do więzienia + + + Repair Door + oprava dveří + Reparar Puerta + + Tür reparieren + Réparer la porte + Ripara porta + Consertar Porta + Napraw drzwi + + + Open / Close + Otevřít zavřít + Abrir / Cerrar + + Öffnen / Schließen + Ouvrir / Fermer + Apri / Chiudi + Abrir / Fechar + Otwórz / Zamknij + + + Break down door + Rozebrat dveře + Romper Puerta + + Tür aufbrechen + Forcer la porte + Sfonda Porta + Quebrar Porta + Wyważ drzwi + + + Search house + Vyhledávání dům + Buscar casa + + Haus durchsuchen + Fouiller la maison + Cerca Casa + Vasculhar a Casa + Przeszukaj dom + + + Lock up house + Zamknout dům + Cerrar la casa con llave + + Haus abschließen + Fermer la maison + Chiudi Casa + Trancar a Casa + Zamknij dom + + + Buy House + Koupit dům + Comprar casa + + Haus kaufen + Acheter la maison + Compra Casa + Comprar a Casa + Kup dom + + + Sell Garage + Navrhujeme Garáž + Vender Garaje + + Garage verkaufen + Vendre le garage + Vendi Garage + Vender Garagem + Sprzedaj garaż + + + Remove Container + Nádobu + Remover Contenedor + rimuovere Container + Wyjąć pojemnik + + Supprimer le conteneur + Remover Caixa + Container entfernen + + + Garage + Garáž + Garaje + + Garage + Accés au garage + Garage + Garagem + Garaż + + + Store Vehicle + Store Vehicle + Guardar Vehiculo + + Fahrzeug parken + Ranger le vehicule + Parcheggia Veicolo + Guardar Veículo + Zaparkuj pojazd + + + Sell House + prodat dům + Vender Casa + + Haus verkaufen + Vendre la maison + Vendi Casa + Vender Casa + Sprzedaj dom + + + Unlock Storage + odemknout úložiště + Abrir Almacenamiento + + Lagerplatz aufsperren + Déverrouiller l'inventaire + Sblocca contenitori + Destrancar Caixa + Odblokuj pojemnik + + + Lock Storage + zámek Storage + Cerrar Almacenamiento con Llave + + Lagerplatz absperren + Verrouiller l'inventaire + Blocca contenitori + Trancar Caixa + Zablokuj pojemnik + + + Turn Lights Off + Blinkrů Off + Apagar Luces + + Licht ausschalten + Lumières éteintes + Spegni luci + Ligar as Luzes + Włącz światło + + + Turn Lights On + Turn zapnutá světla + Prender Luces + + Licht anschalten + Lumières allumées + Accendi luci + Apagar as Luzes + Wyłącz światło + + + + + Vehicle Interaction Menu + Interakce vozidel Menu + Menu de interacción de Vehículo + + Fahrzeuginteraktionsmenü + Menu Interaction Véhicule + Menu d'interazione Veicolo + Menu do Veículo + Menu Interakcji pojazdu + + + Unflip Vehicle + Unflip Vehicle + Dar la Vuelta al Vehículo + + Fahrzeug umdrehen + Retourner Véhicule + Raddrizza veicolo + Desvirar Veículo + Ustaw pojazd + + + Get In Kart + Dostat do košíku + Entrar en el Kart + + Ins Kart setzen + Monter dans le kart + Entra nel Kart + Entrar no Kart + Wejdź do gokarta + + + Get In Helicopter + Získat vrtulník + Entrar en el Helicóptero + Get In elicottero + Wchodzić Śmigłowiec + + In den Helikopter einsteigen + Monter dans l'hélicoptere + Entrar no Helicóptero + + + Push Boat + tlačit loď + Empujar Bote + + Boot schieben + Pousser bateau + Spingi Barca + Empurrar Barco + Popchnij + + + Repair Vehicle + opravy vozidel + Reparar Vehículo + + Fahrzeug reparieren + Réparer Véhicule + Ripara Veicolo + Consertar Veículo + Napraw + + + Registration + Registrace + Registración + + Eigentümer + Enregistrement + Registrazione + Registro + Zarejestruj + + + Search Vehicle + Vyhledávání Vehicle + Buscar Vehículo + + Fahrzeug durchsuchen + Fouiller Véhicule + Cerca Veicolo + Vasculhar Veículo + Przeszukaj pojazd + + + Search Container + Vyhledávání Container + Buscar Contenedor + Ricerca Container + Szukaj Kontener + + Fouiller Container + Vasculhar Container + Container suchen + + + Pullout Players + Pull Out Hráči + Sacar Jugadores + + Aus Fahrzeug ziehen + Sortir Personnes + Estrai Giocatore + Retirar Jogadores + Wyciągnij graczy + + + Impound Vehicle + úschovy Vehicle + Confiscar Vehículo + + Fahrzeug beschlagnahmen + Mise en fourrière + Sequestra Veicolo + Apreender Veículo + Usunń pojazd + + + Mine from device + Mine ze zařízení + Minar desde dispositivo + + Vom Gerät abbauen + Dispositif de minage + Piazza mine dal veicolo + Minerar + Uruchom wydobycie + + + Store your vehicle + Ukládat vaše vozidlo + Guardar tu Vehículo + Conservare il veicolo + Przechowuj swój pojazd + + Rangez votre véhicule + Guardar seu veículo + Fahrzeug einparken + + + Store + Obchod + Guardar + Negozio + Sklep + + Ranger + Guardar + Geschäft + + + Clean + Čistý + Limpiar + Pulito + Czysty + + Nettoyer + Limpar + Reinigen + + + This vehicle is NPC protected. + Toto vozidlo je chráněno NPC. + Ce véhicule est protégé NPC. + Este vehículo esta protegido. + Questo veicolo è protetto NPC. + Pojazd ten jest chroniony NPC. + + Esse veículo está protegido. + Dieses Fahrzeug ist NPC-geschützt. + + + + + Sending request to server for player information UID [%1] + Odesílání požadavku na server pro informační hráč UID [%1] + Pidiendo informacion del UID de [%1] del server + + Frage Spieler Informationen zu UID [%1] ab + Envoi de la requête au serveur pour obtenir des informations lecteur UID [%1] + Invio richiesta al server per le informazioni del giocatore UID [%1] + Obtendo informações do UID [%1] no servidor + Wysyłam żądanie do serwera po informację o fraczu UID [%1] + + + The server didn't find any player information matching your UID, attempting to add player to system. + Server nenašel žádné informace hráče nalezen.Chcete UID, pokusu o přidání hráče do systému. + No se encontro ninguna información con tu UID, se esta creando un nuevo jugador. + + Der Server hat keine Spieler Informationen zu deiner UID gefunden, versuche, Spieler ins System hinzuzufügen. + Le serveur n'a pas trouvé toutes les informations de lecteur correspondant à votre UID, tentative d'ajout du joueur dans le système. + Il server non ha trovato alcuna informazione sul giocatore con il tuo UID, tentativo di aggiunta del giocatore al sistema. + O servidor não encontrou nenhuma informação correspondente ao seu UID, tentando adicionar jogador ao sistema. + Serwer nie odnalazł informacji zgodnych z UID, dodaję gracza do bazy danych. + + + There was an error in trying to setup your client. + Došlo k chybě při pokusu o nastavení vašeho klienta. + Hubo un error en tratando de preparar tu cliente. + + Es gab einen Fehler beim Versuch, deinen Client einzurichten. + Il y avait une erreur en essayant de configurer votre client. + C'è stato qualche errore nel cercare di inizializzare il tuo client + Ocorreu um erro ao tentar configurar o seu cliente. + Wystąpił błąd w trakcie ustawiania klienta + + + Received request from server... Validating... + Obdržení požadavku ze serveru ... Ověřování ... + Pedido del server recibido... Validando... + + >Empfange Daten vom Server... Überprüfe... + Demande reçue du serveur... Validation... + Ricevuta richiesta dal server... Convalida... + Pedido recebido do servidor... Validando... + Otrzymano żądanie serwera ... sprawdzam + + + You have already used the sync option, you can only use this feature once every 5 minutes. + Již jste použili možnosti synchronizace, můžete použít pouze tuto funkci jednou za 5 minut. + Ya has usado la función de sincronización, solo la puedes usar una vez cada 5 minutos. + + Du hast bereits die Sync-Option verwendet, diese Funktion kann nur einmal alle 5 Minuten verwendet werden. + Vous avez déjà utilisé l'option de synchronisation, vous ne pouvez utiliser cette fonction une fois toutes les 5 minutes. + Hai già utilizzato la funzione di salva dati, puoi usare quest'opzione solo una volta ogni 5 minuti. + Você já usou a opção de sincronização, você só pode usar esse recurso uma vez a cada 5 minutos. + Użyłeś niedawno opcji synchronizacji, możesz jej używać maksymalnie co 5 minut. + + + Syncing player information to the server.\n\nPlease wait up to 20 seconds before leaving. + Synchronizace informace o hráčích na serveru. \ O \ Prosím, vyčkejte až 20 sekund před odjezdem. + Se esta sinconizando tu información con el server.\n\nPor favor espera 20 segundos antes de salir del server. + + Synchronisieren der Spieler-Informationen mit dem Server. \n\nBitte warte bis zu 20 Sekunden vor dem Verlassen. + Synchronisation des informations de joueur sur le serveur.\n\nS'il vous plaît veuiller attendre 20 secondes avant de quitter. + Salvando le informazioni giocatore sul server.\n\nAttendere fino a 20 secondi prima di abbandonare. + Sincronizando informação do jogador com o servidor.\n\n Por favor aguarde 20 segundos antes de sair. + Synchronizuję informację z serwere, .\n\nProszę poczekać ok 20 sekund przed opuszczeniem serwera + + + + + Because you robbed the bank you can't use the ATM for %1 minutes. + Protože jste vyloupil banku nelze použít bankomat pro%1 minut. + Porque robastes el banco no puedes usar el ATM por %1 minutos. + + Da du die Bank ausgeraubt hast, kannst du für %1 Minuten keine Bankomaten benutzen. + Vous avez pillé la banque, vous ne pouvez pas utiliser le guichet automatique pendant %1 minutes. + Avendo appena rapinato la banca non puoi utilizzare il Bancomat per %1 minuti. + Você não pode usar o ATM por %1 minuto(s), pois você assaltou o banco. + Z uwagi na to że okradłeś bank nie możesz korzystać z bankomatu przez najbliższe %1 minut. + + + You didn't choose the clothes you wanted to buy. + Vy nevybral oblečení, které chtěl koupit. + No elegistes lo que quieres comprar. + + Du hast die Kleidung, die du kaufen wolltest, nicht ausgewählt. + Vous n'avez pas choisi les vêtements que vous vouliez acheter. + Non hai selezionato i vestiti che vuoi comprare. + Você não selecionou a roupa que deseja comprar. + Nie wybrałeś ubrań które chcesz kupić. + + + Sorry sir, you don't have enough money to buy those clothes. + Je nám líto, pane, nemáte dost peněz na nákup ty šaty. + No tienes suficiente dinero. + + Entschuldigung, du hast nicht genug Geld, um diese Kleidung zu kaufen. + Désolé monsieur, vous n'avez pas assez d'argent pour acheter ces vêtements. + Spiacente ma non hai fondi a sufficienza per comprare questi vestiti. + Desculpe senhor, você não tem dinheiro para pagar. Volte sempre. + Przepraszam, ale nie masz tyle pieniędzy aby kupić to ubranie. + + + Total: + Celkový: + Total: + + Gesamt: + Total: + Totale: + Total: + Razem: + + + No Selection + žádný výběr + No Seleccionastes + + Keine Auswahl + Aucune Sélection + Nessuna Selezione + Nada Selecionado + Nie wybrano + + + No Display + Ne Displej + No Display + + Keine Anzeige + Pas d'affichage + No Display + Sem exibir + Brak widoku + + + There are no vehicles near to sell. + Nejsou žádné vozy blízko k prodeji. + No hay Vehículos cercanos para vender. + + Es ist keine Fahrzeug zum Verkaufen in der Nähe. + Il n'y a pas de véhicules à proximité à vendre + Nelle vicinanze non ci sono veicoli da vendere. + Não existem veículos para serem vendidos. + W pobliżu nie ma pojazdu do sprzedania. + + + There was a problem opening the chop shop menu. + Tam bylo otevření nabídky kotleta obchod problém. + Hubo un problema abriendo el menu de la tienda. + + Es gab ein Problem beim Öffnen des illegalen Fahrzeughändler-Menüs. + Il y a un probleme en ouvrant le menu du concessionnaire de véhicule illégal. + C'è stato un problema aprendo il menu del ricettatore + Ocorreu um problema abrindo o menu, tente novamente. + Powstał problem przy otwieraniu menu dziupli + + + Selling vehicle please wait... + Prodejní vozidlo čekejte prosím ... + Vendiendo vehículo, por favor espera... + + Verkaufe Fahrzeug, bitte warten... + Vente du véhicule, veuillez patienter... + Vendendo il veicolo, attendere prego... + Vendendo o veiculo, aguarde.... + Sprzedaję pojazd proszę czekać ... + + + You need to be a civilian to use this store! + Musíte být civilní použít tento obchod! + Necesitas ser un civil para usar esta tienda! + + Du musst ein Zivilist sein, um diesen Shop nutzen zu können! + Vous devez être un civil pour utiliser ce magasin! + Devi essere un civile per utilizzare questo negozio! + Você tem que ser um cívil para user essa loja! + Musisz być cywilem aby móc kupować w tym sklepie! + + + You need to be a cop to use this store! + Musíte být policista použít tento obchod! + Necesitas ser policía para usar esta tienda! + + Du musst ein Polizist sein, um diesen Shop nutzen zu können! + Vous devez être un flic pour utiliser ce magasin! + Devi essere un poliziotto per utilizzare questo negozio! + Você tem que ser um policial para usar essa loja! + Musisz być policjantem aby kupować w tym sklepie! + + + You don't have rebel training yet! + Nemáte rebelů výcvik ještě! + No tienes Entrenamiento Rebelde! + + Du besitzt keine Rebellen Lizenz! + Vous n'avez pas encore d'entrainement rebelle! + Devi essere ribelle per poter utilizzare questo negozio! + Você não tem Treinamento Rebelde! + Nie posiadasz treningu rebelianta! + + + You need a Diving license to use this shop! + Potřebujete licenci potápění použít tento obchod! + Necesitas una licencia de buceo para usar esta tienda! + + Du benötigst eine Taucherlizenz, um diesen Tauchershop nutzen zu können! + Vous devez avoir votre diplome de plongée pour utiliser ce magasin! + Ti serve la licenza di pesca per usare questo negozio! + Você precisa de uma Licença de Mergulho para usar essa loja! + Nie posiadasz licencji nurka aby kupować w tym sklepie! + + + You need a %1 to buy from this shop! + Potřebujete%1 koupit od tomto obchodě! + Necesitas un %1 para comprar algo de esta tienda! + + Du benötigst eine %1, um diesen Shop nutzen zu können! + Vous avez besoin de %1 pour acheter dans ce magasin + Hai bisogno di %1 per comprare da questo negozio! + Você precisa de %1 para comprar nessa loja! + Potrzebujesz %1 by kupować w tym sklepie! + + + Clothing + Oblečení + Ropa + + Kleidung + Tenues + Abiti + Roupas + Odzież + + + Hats + klobouky + Sombreros + + Kopfbedeckungen + Chapeaux + Copricapi + Chapéus + Czapki + + + Glasses + Brýle + Lentes + + Brillen + Lunettes + Occhiali + Óculos + Okulary + + + Vests + vesty + Chalecos + + Westen + Gilet + Vesti + Coletes + Kamizelki + + + Backpack + Batoh + Mochillas + + Rucksack + Sac-à-dos + Zaini + Mochilas + Plecaki + + + There is currently a car there. + Tam je v současné době auto. + Actualmente hay un carro ahi. + + Es steht bereits ein Fahrzeug dort. + Il y a actuellement une voiture. + C'è già un veicolo qui. + Há um veiculo atualmente no respawn. + Aktualnie jest tam samochód. + + + You do not have enough money on you or in your bank to get your car back. + Nemáte dostatek peněz na vás nebo ve vaší bance, aby si své auto zpátky. + No tienes suficiente dinero para recuperar tu carro. + + Du hast nicht genug Geld bei dir oder auf dem Bankkonto, um dein Auto auszulösen. + Vous n'avez pas assez d'argent sur vous ou dans votre banque pour obtenir votre voiture + Non hai abbastanza fondi con te o nel tuo conto in banca per poter ritirare il tuo veicolo. + Você não tem dinheiro suficiente em sua conta bancária para obter seu veiculo. + Nie masz tyle pieniędzy na koncie aby wyciągnąć samochód. + + + You have unimpounded your %1 for $%3 + Jste unimpounded svůj%1 na $%3 + Has desembargado tu %1 por $%3 + + Du hast deinen %1 für $%3 ausgelöst + Vous avez sorti votre %1 pour $%3 + Hai ritirato dal sequestro il tuo %1 al costo di $%3 + Você liberou %1 for R$%3 + Przywróciłeś swój %1 za $%3 + + + You did not pick a vehicle! + Vy nevybral vozidlo! + No has selecionado un vehículo! + + Du hast kein Fahrzeug ausgewählt! + Vous n'avez pas choisi de véhicule! + Non hai selezionato un veicolo! + Você não conseguiu roubar o veiculo! + Nie wybrałeś pojazdu! + + + You do not have enough cash to purchase this vehicle.\n\nAmount Lacking: $%1 + Nemáte dostatek peněz na koupi tohoto vozidla \ n \ nAmount Postrádat:. $%1 + No tienes suficiente dinero para comprar este vehículo.\n\nFalta: $%1 + + Du hast nicht genug Geld, um das Fahrzeug zu kaufen.\n\nFehlender Betrag: $%1 + Vous n'avez pas assez d'argent pour acheter ce véhicule \n\nArgent Manquant: $%1 + Non hai fondi sufficienti per comprare questo veicolo.\n\nTi mancano: $%1 + Você não tem dinheiro suficiente para comprar esse veiculo.\n\nFaltam: R$%1 + Nie masz tyle pieniędzy by kupić ten pojazd.\n\nBrakuje: $%1 + + + You do not have the required license! + Nemáte požadovanou licenci! + No tienes la licencia requerida! + + Du besitzt die benötigte Lizenz nicht! + Vous n'avez pas la licence requise! + Non hai la licenza richiesta per l'acquisto! + Você não tem a licença necessária! + Nie posiadasz odpowiedniej licencji! + + + There is a vehicle currently blocking the spawn point + Tam je vozidlo v současné době blokuje potěr bod + Hay un vehículo bloqueando el punto de Spawn. + + Ein Fahrzeug blockiert gerade den Spawnpunkt + Il y a actuellement un véhicule qui bloque le point de spawn + C'è già un veicolo che blocca la zona di spawn + Existe um veiculo bloquenado a area de respaw + Inny pojazd blokuje miejsce odrodzenia pojazdów + + + You bought a %1 for $%2 + Koupil sis%1 pro $ %2 + Comprastes %1 por $%2 + + Du kaufst eine(n) %1 für $%2 + Vous avez acheté un %1 pour $%2 + Hai comprato un %1 al costo di $%2 + Você comprou %1 por R$%2 + Kupiłeś %1 za $%2 + + + Rental Price: + Pronájem Cena: + Precio de Renta: + + Mietpreis: + Prix de location: + Costo Noleggio: + Alugar: + Wypożyczenie: + + + Ownership Price: + Vlastnictví Cena: + Precio de Compra: + + Kaufpreis: + Prix d'achat: + Costo Acquisto: + Comprar: + Kupno: + + + Max Speed: + Maximální rychlost: + Máxima Velocidad: + + Max. Geschwindigkeit: + Vitesse Max: + Velocità Max: + Velocidade Máxima: + Prędkość: + + + Horse Power: + Koňská síla: + Caballos de Fuerza: + + Pferdestärken: + Puissance en chevaux: + Cavalli: + Cavalos de Força: + Moc: + + + Passenger Seats: + Sedadla pro cestující: + Asientos de Pasajeros: + + Passagierplätze: + Sieges passager: + Sedili passeggeri: + Assentos: + Ilość miejsc: + + + Trunk Capacity: + Zavazadlový prostor Kapacita: + Capacidad de Maletero: + + Kofferraumgröße: + Capacité du coffre: + Capacità Inventario: + Capacidade do Inventário: + Pojemność bagażnika: + + + Fuel Capacity: + Palivo Kapacita: + >Capacidad de Combustible: + + Tankgröße: + Capacité du réservoir: + Capacità Serbatoio: + Capacidade do Reservatório: + Pojemność baku: + + + Armor Rating: + Armor Hodnocení: + Clasificación de Armadura: + + Panzerungsbewertung: + Blindage: + Resistenza: + Resistência: + Pancerz + + + Retrieval Price: + Retrieval Cena: + Precio de Recuperación: + + Einstellpreis: + Prix de sortie: + Costo di ritiro: + Preço para Recuperar: + Koszt wyciągnięcia: + + + Sell Price: + Prodejní cena: + Precio de Venta: + + Verkaufspreis: + Prix de vente + Costo di vendita: + Preço de Venda + Cena sprzedaży: + + + Color: + Barva: + Color: + + Farbe: + Couleur + Colore: + Cor: + Kolor + + + You are not allowed to use this shop! + Ty jsou není dovoleno používat tento obchod! + No tienes permiso de usar esta tienda! + + Du bist nicht befugt, diesen Shop zu benutzen! + Vous n'êtes pas autorisé à utiliser cette boutique! + Non sei autorizzato ad usare questo negozio! + Você não está autorizado a utilizar essa loja! + Nie jesteś uprawniony do używania tego sklepu! + + + You need to select an item to buy. + Je třeba vybrat položku, kterou chcete koupit. + Debes selecionar un objeto para comprar. + + Du musst einen Gegenstand auswählen, um ihn zu kaufen. + Vous devez selectionner un objet pour l'acheter. + Seleziona un oggetto per poterlo comprare. + Você precisa selecionar um item para comprar. + Musisz zaznaczyć co chcesz kupić. + + + You didn't enter an actual number + Nezadal jste skutečný počet + No metistes un numero real + + Du hast keine echte Zahl eingegeben + Vous n'avez pas saisi un nombre réel + Non hai inserito correttamente un numero + Você não digitou um número válido. + Nie podałeś aktualnego numeru + + + You don't have that many items to sell! + Nemusíte, že mnoho položek k prodeji! + No tienes tantos objetos! + + Du hast nicht so viele Gegenstände zum Verkaufen! + Vous n'avez pas autant d'articles à vendre! + Non hai tutti quegli oggetti da vendere! + Você não tem todos esse items para vender + Nie masz tak dużo rzeczy do sprzedania! + + + The gang has enough funds to pay for this, would you like to pay with the gangs funds or your own? + Gang má dostatek finančních prostředků na zaplacení za to, byste chtěli platit fondů bandy nebo sami? + Tu pandilla tiene suficiente dinero para pagar esto, quieres pagar con ese dinero o el tuyo? + + Die Gang hat genügend Geld, um dafür zu zahlen. Willst du mit dem Geld der Gang oder deinem eigenen bezahlen? + Le gang a suffisamment de fonds pour payer pour cela, voulez-vous payer avec les fonds de gangs ou les vôtres? + La Gang ha fondi a sufficienza per pagare questo oggetto, vuoi usare i fondi della Gang o i tuoi personali? + A Gangue tem dinheiro suficiente para pagar por isso, você gostaria de usar o dinheiro da Gangue? + Gang posiada wystarczającą ilość środków aby za to zapłacić, chcesz zapłacić za to środkami gangu, czy własnymi? + + + Gang Funds: + Gang fondy: + Fondos de Pandilla: + + Geld der Gang: + Fonds du gang: + Fondi Gang: + Fundos da Gangue: + Środki gangu: + + + Your Cash: + Váš Cash: + Tu dinero: + + Bargeld: + Votre argent: + Tuoi Fondi: + Seu Dinheiro: + Twoje środki: + + + Pay with cash or gang funds + Platit v hotovosti nebo gangů fondů + Pagar con tu dinero o el de tu pandilla? + + Mit Bargeld oder Geld der Gang bezahlen + Payez avec votre argent ou avec les fonds du gangs + Paga con i tuoi contanti o con i fondi della Gang + Pagar com a sua conta ou a da Gangue + Zapłać gotówką albo środkami gangu + + + Gang Funds + Gang fondy + Fondos de la Pandilla + + Geld der Gang + Fonds du gang: + Fondi Gang + Gangue + Środki gangu + + + Your Cash + Váš Cash + Tu dinero + + Bargeld + Votre argent + Tuoi Fondi + Seu + Twoje środki + + + You bought %1 %2 for $%3 with the gangs funds + Koupili jste% %1 %2 za $ 3 s fondy gangů + Comprastes %1 %2 por $%3 con el dinero de la pandilla + + Du kaufst %1 %2 für $%3 mit dem Geld der Gang + Vous avez acheté %1 %2 pour $%3 avec les fonds gangs + Hai comprato %1 %2 al costo di $%3 con i fondi della Gang + Você comprou %1 %2 por R$%3 com o dinheiro da gangue + Kupiłeś %1 %2 za $%3 ze środków gangu + + + You bought %1 %2 for $%3 + Koupili jste% %1 2 na $ %3 + Comprastes %1 %2 por $%3 + + Du kaufst %1 %2 für $%3 + Vous avez acheté %1 %2 pour $%3 + Hai comprato %1 %2 al costo di $%3 + Voce comprou %1 %2 por R$%3 + Kupiłeś %1 %2 za $%3 + + + You sold %1 %2 for $%3 + Prodali jste% %1 2 na $ %3 + Vendistes %1 %2 por $%3 + + Du verkaufst %1 %2 für $%3 + Vous avez vendu %1 %2 pour $%3 + Hai venduto %1 %2 al prezzo di $%3 + Você vendeu %1 %2 por R$%3 + Sprzedałeś %1 %2 za $%3 + + + You need to select an item to buy/sell. + Je třeba vybrat položku na buy / sell. + Necesitas seleccionar un objetar para vender/comprar. + + Du musst einen Gegenstand auswählen, um ihn zu kaufen / zu verkaufen. + Vous devez sélectionner un élément pour acheter/vendre + Devi selezionare un oggetto per comprare/vendere. + Selecione um item para comprar ou vender. + Musisz wybrać rzecz którą chcesz kupić/sprzedać + + + You sold a %1 for <t color='#8cff9b'>$%2</t> + prodával jsi %1 pro <t color='#8cff9b'>$%2</t> + Vendistes un %1 por <t color='#8cff9b'>$%2</t> + + Du hast eine %1 für <t color='#8cff9b'>$%2</t> verkauft + Vous avez vendu un %1 pour <t color='#8cff9b'>$%2</t> + Hai venduto un %1 al prezzo di <t color='#8cff9b'>$%2</t> + Você vendeu %1 por <t color='#8cff9b'>R$%2</t> + Sprzedałeś %1 za <t color='#8cff9b'>$%2</t> + + + You bought a %1 for <t color='#8cff9b'>$%2</t> with the gangs funds. + Koupil sis %1 pro <t color='#8cff9b'>$%2</t> s peněžními prostředky gangů. + Comprastes un %1 por <t color='#8cff9b'>$%2</t> con los fondos de tu pandilla. + + Du hast eine %1 für <t color='#8cff9b'>$%2</t> mit dem Geld der Gang gekauft. + Vous avez acheté un %1 pour <t color='#8cff9b'>$%2</t> avec les fonds du gang. + Hai comprato un %1 al costo di <t color='#8cff9b'>$%2</t> con i fondi della Gang. + Você comprou %1 por <t color='#8cff9b'>R$%2</t> com o dinheiro da gangue. + Kupiłeś %1 za <t color='#8cff9b'>$%2</t> ze środków gangu. + + + You bought a %1 for <t color='#8cff9b'>$%2</t> + Koupil sis %1 pro <t color='#8cff9b'>$%2</t> + Comprastes un %1 por <t color='#8cff9b'>$%2</t> + + Du hast eine %1 für <t color='#8cff9b'>$%2</t> gekauft + Vous avez acheté un %1 pour <t color='#8cff9b'>$%2</t> + Hai comprato un %1 al costo di <t color='#8cff9b'>$%2</t> + Você comprou %1 por <t color='#8cff9b'>R$%2</t> + Kupiłeś %1 za <t color='#8cff9b'>$%2</t> + + + Shop Inventory + Obchod Zásoby + Inventario de la Tienda + + Ladeninventar + Inventaire de la boutique + Inventario Negozio + Loja de Inventário + Wyposażenie sklepu + + + Your Inventory + Váš Inventory + Tu inventario + + Dein Inventar + Votre inventaire + Inventario Personale + Seu Inventário + Twoje wyposażenie + + + + + You will receive your next paycheck in %1 minutes. + Obdržíte svůj další výplatní pásku v%1 minut. + Recibiras tu siguiente pago en %1 minutos + + Du erhältst deinen nächsten Gehaltsscheck in %1 Minuten. + Vous recevrez votre prochain chèque de paie dans %1 minutes. + Riceverai il tuo prossimo stipendio in %1 minuti. + Você irá receber seu próximo pagamento em %1 minuto(s). + Otrzymasz kolejną wypłatę w ciągu %1 minut. + + + You have missed a paycheck because you were dead. + Jste vynechal výplatu, protože jste byli mrtví. + Te has perdido un pago por estar muerto. + + Du erhältst kein Gehaltsscheck, da du gestorben bist. + Vous avez manqué un chèque de paie parce que vous étiez mort. + Hai perso uno stipendio . + Você não recebeu seu pagamento pois estava morto. + Ominęła cię wypłata ponieważ byłeś martwy. + + + You have received a paycheck of $%1. + Dostali jste výplatu ve výši $ %1. + Has recibido un pago de $%1 + + Du hast deinen Gehaltscheck in Höhe von $%1 erhalten. + Vous avez reçu un salaire de $%1. + Hai ricevuto uno stipendio di $%1. + Você recebeu seu pagamento de R$%1. + Otrzymałeś wypłatę w kwocie $%1. + + + + + Refuel Fuel Canister + Tankovat paliva kanystr + Refuel carburant Bidon + Llenar Bidón de Combustible + Fare rifornimento di carburante scatola metallica + Tankowanie paliwa Canister + Reabastecer de combustível vasilha + Заправить баллон с горючим + Benzinkanister betanken + + + Refuel Vehicle + tankovací Vehicle + Llenar Vehículo + Fare rifornimento di veicoli + Tankowanie samochodów + + Reabastecer Veículo + Ravitaillez en essence le Véhicule + Fahrzeug auftanken + + + Price per Liter: $%1 + Cena za litr: $ %1 + Precio por Litro: $%1 + Prezzo al litro: $%1 + Cena za litr: $%1 + + Preço por Litro : R$%1 + Prix au Litre : $%1 + Preis pro Liter: $%1 + + + Current Fuel Amount: + Aktuální výše Palivo: + Montant Courant de carburant: + Actual cantidad de combustible: + Quantità corrente di benzina: + Aktualny Ilość paliwa: + + Quantidade Atual de Combustível: + Aktuelle Kraftstoffmenge: + + + Select a vehicle + Vyberte si vůz + Selecciona un Vehículo + Selezionare un veicolo + Wybierz pojazd + + Selecione um veículo + Selectionne un vehicule! + Wähle ein Fahrzeug + + + The vehicle is too far or you are in! + Vozidlo je příliš daleko, nebo jste se! + El Vehículo esta muy lejos o tu estas adentro! + Il veicolo è troppo lontano o vi sei all'interno! + Pojazd jest zbyt daleko lub jesteś w! + + O veículo está muito longe ou você está nele! + Le vehicule est trop loin ou tu es dedans! + Das Fahrzeug ist zu weit entfernt oder du sitzt noch drin! + + + The vehicle is full! + Vozidlo je plná! + El Vehículo esta lleno! + Il veicolo è pieno! + Pojazd jest pełna! + + O veículo está cheio! + Le véhicule est plein! + Das Fahrzeug ist voll! + + + + + Drop Fishing Net + Drop rybářská síť + Tirar Red de Pesca + + Fischernetz auswerfen + Lancer le filet de pêche + Drop Fishing Net + Jogar Rede de Pesca + Zarzuć sieć + + + Rob Person + Rob Pearson + Robar Persona + + Person ausrauben + Voler la personne + Deruba + Roubar Jogador + Obrabuj osobę + + + + + Fish Market + Rybí trh + Marché aux poissons + Mercado de Pescado + + Fischmarkt + Peixaria + Sklep rybny + Pescivendolo + + + Hospital + Nemocnice + Hôpital + Hospital + + Krankenhaus + Hospital + Szpital + Ospedale + + + Police Station + Policejní stanice + Poste de police + Estación de Policia + + Polizei Revier + Estação Policial + Posterunek policji + Questura + + + Police Air HQ + Police Air HQ + HQ Air Police + Cuartel Aéreo Policial + QG Aereo Polizia + + Polizei HQ Flughafen + QG Aéreo Policial + Baza lotnicza policji + + + Iron Mine + Železný důl + Mine de fer + Mina de Hierro + + Eisenmine + Mina de Ferro + Kopalnia miedzi + Miniera di ferro + + + Salt Mine + Solný důl + Mine de sel + Mina de Sal + + Salzmine + Mina de Sal + Kopalnia soli + Salina + + + Salt Processing + sůl Processing + Traitement de sel + Procesador de Sal + + Salzverarbeitung + Processador de Sal + Warzelnia soli + Processo del sale + + + Altis Corrections + Altis Opravy + Prison d'Altis + Prisión de Altis + + Altis Bundesgefängnis + Prisão de Altis + Więzienie Altis + Penitenziario di Altis + + + Police HQ + Police HQ + QG de la police + Comisaria de Policía + QG Polizia + + Polizei HauptQuartier + QG Policial + KG Policji Altis + + + Coast Guard + pobřežní hlídka + Garde-côte + Guardia Costera + + Küstenwache + Guarda Costeira + Straż przybrzeżna + Guardia Costiera + + + Rebel Outpost + Rebel Outpost + Avant-Poste Rebel + Base Rebelde + Avamposto Ribelle + + Rebellen Außenposten + Base Rebelde + Baza rebeliantów + + + Air Shop + Air Shop + Magasin Aerien + Tienda Aérea + Negozio Aereo + + Luftfahrzeug Händler + Loja Aérea + Sklep lotniczy + + + Truck Shop + Truck Shop + Vendeur de camion + Tienda de Camiones + + LKW Händler + Loja de Caminhões + Salon ciężarówek + Concessionaria Camion + + + Oil Processing + Zpracování olej + Traitement du petrole + Procesador de Petróleo + + Öl Verarbeiter + Processador de Petróleo + Rafineria ropy naftowej + Raffineria di Petrolio + + + Iron Processing + Zpracování Iron + Traitement de fer + Procesador de Hierro + Processo del ferro + + Eisenschmelze + Processador de Ferro + Huta żelaza + + + Sand Mine + písek Mine + Mine de sable + Mina de Arena + Miniera di sabbia + + Sand Mine + Mina de Areia + Kopalnia piasku + + + Chop Shop + Chop Shop + Vendeur de voitures + Desguace Clandestino + Ricettatore + + Schrotthändler + Desmanche + Dziupla + + + Cocaine Processing + Zpracování kokain + Traitement de cocaïne + Procesador de Cocaína + Trattamento cocaina + + Kokain Verarbeiter + Processador de Cocaína + Oczyszczanie kokainy + + + Copper Mine + měděný důl + Mine de cuivre + Mina de Cobre + Miniera di rame + + Kupfermine + Mina de Cobre + Kopalnia miedzi + + + ATM + bankomat + ATM + ATM + ATM + + Geldautomat + Caixa Eletrônico + Bankomat + + + Local Bank + místní bankovní + Banque locale + Banco Local + Banca locale + + Zentralbank + Banco Local + Bank Altis + + + Car Shop + Auto Shop + Magasin de voitures + Tienda de Coches + Concessionario d `auto + + Autohändler + Loja de Carros + Salon samochodowy + + + Hospital/Clinic + Nemocnice / Klinika + Hôpital / Clinique + Hospital/Clínica + Ospedale / Clinica + + Krankenhaus + Hospital/Clínica + Klinika Altis + + + Diamond Mine + Diamond Mine + Mine de diamant + Mina de Diamantes + Miniera di diamanti + + Diamanten Mine + Mina de Diamante + Kopalnia diamentów + + + General Store + Obchod se smíšeným zbožím + Magasin général + Tienda General + Strumenti Generali + + Supermarkt + Loja de Equipamentos + Sklep techniczny + + + Civilian Shops + civilní Obchody + Magasins civils + Tiendas Civiles + Negozi civili + + Laden für Zivilisten + Lojas Civis + Sklepy dla cywilów + + + Boat Shop + Lodní Shop + Magasin de bateaux + Tienda de Barcos + Concessionaria Nautica + + Boot Händler + Loja de Barcos + Sklep z łodziami + + + Bruce's Outback Outfits + Bruceovy Outback Oblečení + Friperie + Tienda de Ropa + Outfit di Bruce + + Loja de Roupas + Sklep odzieżowy + Bruce Outback Outfits + + + Apple Field + Apple Field + Champs de Pommes + Campo de Manzanas + Campo di Mele + + Apfel Plantage + Campo de Maçãs + Sad jabłkowy + + + Peaches Field + broskve Field + Champs de Pêches + Campo de Melocotones + Campo di Pesche + + Pfirsich Plantage + Campo de Pêras + Sad brzoskwiniowy + + + Market + Trh + Marché + Mercado + Mercato + + Markt + Mercado + Market spożywczy + + + Air Service Station + Stanice Air Service + Réparateur Aérien + Estación de Servicio Aéreo + Stazione Servizio Aereo + + Werkstatt für Luftfahrzeuge + Estação de Serviços Aéreos + Serwis lotniczy + + + Channel 7 News + Channel 7 News + Channel 7 + Canal de Noticias 7 + Notiziario di Altis + + Kanal 7 Nachrichtensender + Canal de Notícias 7 + Maszt nadawczy + + + DMV + DMV + Magasin de licences + Registro de Licencias + + Zulassungstelle für Lizenzen + Loja de Licenças + Urząd licencyjny + Licenze + + + Delivery Missions + Dodací mise + Missions de livraison + Misiones de Entrega + + Kurier Mission + Missões de Entrega + Misje kurierskie + Missioni Postali + + + Deliver Package + doručit balíček + Livrer package + Entregar Paquete + + Paket ausliefern + Entregar Pacote + Dostarcz przesyłkę + Consegna il pacco + + + Get Delivery Mission + Získat Delivery mise + Obtenez Mission de livraison + Empezar Misión de Entrega + + Starte Kurier Mission + Pegar Missão de Entrega + Pobierz przesyłkę do dostarczenia + Ottieni una missione postale + + + Diving Shop + Potápění Shop + Boutique de plongé + Tienda de Buceo + + Taucherladen + Loja de Mergulho + Akcesoria do nurkowania + Negozio da Sub + + + Drug Dealer + Drug prodejce + Dealer de drogue + Narcotraficante + + Drogendealer + Traficante + Diler narkotyków + Spacciatore + + + Diamond Processing + Diamond Processing + Traitement de diamant + Procesador de Diamante + + Diamantenschleifer + Processador de Diamante + Szlifierz diamentów + Processo diamanti + + + Oil Field + Ropné poles + Champs de Pétrole + Campo de Petróleo + + Öl Felder + Campo de Petróleo + Szyb naftowy + Giacimento di Petrolio + + + Marijuana Field + Marihuana Field + Champs de pavots + Campo de Marihuana + + Gras Plantage + Campo de Maconha + Pole marihuany + Campo di Marijuana + + + Marijuana Processing + Zpracování marihuana + Traitement du pavot + Procesador de Marihuana + + Gras Verarbeitung + Processador de Maconha + Suszarnia marihuany + Trattamento Marijuana + + + Boat Spawn + Lodní potěr + Spawn Bateau + Spawn de Barcos + + Boot Spawn + Spawn de Barcos + Przystań + Consegna Barche + + + Copper Processing + Zpracování měď + Traitement de cuivre + Procesador de Cobre + + Kupferschmelze + Processador de Cobre + Huta miedzi + Processo Rame + + + Coca Field + Coca Field + Champ de Cocaine + Campo de Cocaína + + Koks Plantage + Campo de Cocaína + Pole kokainy + Campo di Cocaina + + + Oil Trader + olej Trader + Vendeur de pétrole + Comerciante de Petróleo + + Öl Händler + Comprador de Petróleo + Skup benzyny + Vendita Olio + + + Salt Trader + sůl Trader + Vendeur de sel + Comerciante de Sal + + Salz Händler + Comprador de Sal + Skup soli + Vendita Sale + + + Diamond Trader + Diamond Trader + Vendeur de diamant + Comerciante de Diamantes + + Juwelier + Comprador de Diamante + Skup diamentów + Vendita Diamanti + + + Glass Trader + sklo Trader + Vendeur de verre + Comerciante de Vidrio + + Glasbläserei + Comprador de Vidro + Skup szkła + Vendita del Vetro + + + Iron / Copper Trader + Žehlička / Měď Trader + Vendeur de Fer/Cuivre + Comerciante de Hierro / Cobre + + Händler für Eisen / Kupfer + Comprador de Ferro e Cobre + Skup metali + Vendita del Ferro/Rame + + + Sand Processing + Zpracování písek + Traitement de sable + Procesador de Arena + + Sand Verarbeiter + Processador de Areia + Huta szkła + Processo Sabbia + + + Gun Store + Gun Store + Armurerie + Tienda de Armas + + Waffenladen + Loja de Armas + Sklep z bronią + Armeria + + + Opium Poppy Field + Opium Poppy Field + Champs d'héroïne + Campo de Opio + Opium Poppy Field + + Heroin Plantage + Campo de Heroína + Pole heroiny + + + Heroin Processing + Zpracování heroin + Traitement d'héroïne + Procesador de Heroina + Processing eroina + + Heroin Verarbeitung + Processador de Heroína + Oczyszczanie heroiny + + + Garage + Garáž + Garage + Garaje + Box auto + + Garage + Garagem + Garaż + + + Federal Reserve + federální rezervní systém + Réserve fédérale + Reserva Federal + + Federal Reserve Bank + Reserva Federal + Bank Rezerw Federalnych + Banca Federale + + + Highway Patrol Outpost + Dálniční hlídka Outpost + Poste de Police + Puesto de Patrulla de Carretera + + Mautstation + Base da Polícia Rodoviária + Posterunek policji drogowej + Checkpoint di polizia + + + Rock Quarry + kamenolomu + Mine de pierres + Mina de Piedra + + Steinbruch + Pedreira + Kamieniołom + Cava di Roccia + + + Rock Processing + rock Processing + Traitement de pierres + Procesador de Piedra + + Stein Verarbeitung + Processador de Pedra + Wytwórnia cementu z kamienia + Processo Roccia + + + Cement Trader + cement Trader + Vendeur de ciments + Comerciante de Cemento + + Zement Händler + Comprador de Cimento + Skup cementu + Vendita del Cemento + + + Turtle Poaching + Turtle pytláctví + Zones de tortues + Caza de Tortugas + Bracconaggio di Tartarughe + + Wilderei für Schildkröten + Área de Tartarugas + Strefa występowania żółwi morskich + + + Turtle Dealer + Turtle prodejce + Dealer de Tortues + Traficante de Tortugas + + Schildkröten Händler + Comprador de Tartarugas + Skup żółwi + Vendita Tartarughe + + + Go-Kart Shop + Go-Kart Shop + Magasin de karts + Tienda de Go-Kart + + Go-Kart Händler + Loja de Karts + Sklep z GoKartami + Parco Go-Kart + + + Gold Bars Buyer + Gold Bary kupujícího + Acheteur d'or + Comprador de Oro + + Händler für Goldbarren + Comprador de Barras de Ouro + Skup złota + Gioielliere + + + Gang Hideout 1 + Gang Hideout 1 + Cachette 1 + Escondite de Pandillas 1 + + Gang Versteck 1 + Esconderijo de Gangs 1 + Kryjówka gangu 1 + Covo Gang 1 + + + Gang Hideout 2 + Gang Hideout 2 + Cachette 2 + Escondite de Pandillas 2 + + Gang Versteck 2 + Esconderijo de Gangs 2 + Kryjówka gangu 2 + Covo Gang 2 + + + Gang Hideout 3 + Gang Hideout 3 + Cachette 3 + Escondite de Pandillas 3 + + Gang Versteck 3 + Esconderijo de Gangs 3 + Kryjówka gangu 3 + Covo Gang 3 + + + Hunting Grounds + honební revír + Terrain de chasse + Zona de Caza + + Jagtgründe + Área de Caça + Strefa polowań + Riserva di Caccia + + + Rebel Clothing Shop + Rebel Oblečení Shop + Friperie Rebel + Tienda de Ropa Rebelde + Rebel negozio di abbigliamento + + Rebellen Klamottenladen + Loja de Roupas Rebeldes + Magazyn rebelianta + + + Rebel Weapon Shop + Rebel obchodu se zbraněmi + Vendeur d'armes rebel + Tienda de Armas Rebeldes + + Rebellen Waffenladen + Loja de Armas Rebeldes + Zbrojownia rebelianta + Armeria della Guerriglia + + + Helicopter Shop + vrtulník Shop + Magasin Aerien + Tienda de Helicópteros + Elicottero negozio + + Verkäufer für Heli's + Loja de Helicópteros + Sklep lotniczy + + + Fuel Station Store + Palivo Store Station + Magasin de station à essence + Tienda de Gasolinera + Stazione di rifornimento Conservare + + Tankstelle + Loja de Conveniência + Sklep OLLEN + + + Rebel Market + Rebel Market + Marché Rebel + Mercado Rebelde + mercato Rebel + + Rebellen Markt + Mercado Rebelde + Market rebelianta + + + Question Dealer + Otázka prodejce + Questionner le dealer + Informante + + Informant + Perguntar ao Traficante + Przesłuchaj dilera + Minaccia Spacciatore + + + Service Helicopter + Service Vrtulník + Service d'hélicoptère + Helicóptero de Servicio + + Heli Werkstatt + Serviço Aéreo + Serwisuj pojazd lotniczy + Servizio Aereo + + + Clothing Store + Obchod s oblečením + Friperie + Tienda de Ropa + + Klamottenladen + Loja de Roupas + Sklep odzieżowy + Vestiario + + + Medical Assistance + lékařská pomoc + Assistance médicale + Asistencia Médica + + Medizinischer Ersthelfer + Assistência Médica + Pomoc medyczna + Assistenza Medica + + + Store vehicle in Garage + Skladovat vozidlo v garáži + Ranger le vehicule dans le garage + Guardar vehículo en el Garaje + + Fahrzeug in Garage einparken + Guardar veículo na Garagem + Umieść pojazd w garażu + Deposita veicolo in garage + + + Cop Item Shop + Cop Item Shop + Marché flic + Tienda de Objetos de Policía + Strumenti + + Polizei Ausrüstung + Loja de Items da Polícia + Zaopatrzenie + + + Cop Clothing Shop + Cop Oblečení Shop + Friperie Flic + Tienda de Ropa de Policía + Uniformi + + Polizei Uniformen + Loja de Roupas da Polícia + Umundurowanie + + + Cop Weapon Shop + Cop obchodu se zbraněmi + Vendeur d'armes flic + Tienda de Armas de Policía + Armeria da Agenti + + Polizei Waffenhändler + Loja de Armas da Polícia + Broń policji + + + Patrol Officer Weapon Shop + Policistou obchodu se zbraněmi + Vendeur d'armes flic (Officier) + Tienda de Armas de Oficial de Patrulla + Armeria da Pattuglia + + Loja de Armas de Patrulha + Broń patrolowa + Streifenpolizist Waffenladen + + + Sergeant Weapon Shop + Seržant obchodu se zbraněmi + Vendeur d'armes flic (Sergent) + Tienda de Armas de Oficial de Sargento + Armeria dei Sergenti + + Lojas de Armas de Sargento + Broń sierżanta + Sergeant Waffenladen + + + Vehicle Shop + Shop Vehicle + Magasin de vehicules + Tienda de Vehículos + di veicoli + + Autohändler + Loja de Carros + Pojazdy - sklep + + + Process Sand + proces Písek + Traiter le sable + Procesar Arena + + Verarbeite Sand + Processar Areia + Przetop piasek na szkło + Lavorazione Sabbia + + + Process Rock + proces rock + Traiter la pierre + Procesar Piedra + + Verarbeite Stein + Processar Pedra + Zmiel skały na cement + Processo Roccia + + + Wong's Food Cart + Křídla Food košík + Magasin de Wong + Kiosko de Wong + Wong Food Cart + + Wongs Spezialitäten + Boteco do Wongs + Bar u Wonga + + + Open Vault + otevřená Vault + Ouvrir Coffre + Abrir Bóveda + Apri Cassaforte + + Offener Tresor + Abrir Cofre + Otwórz skarbiec + + + Fix Vault + Fix Vault + Reparer Coffre + Reparar Bóveda + + Tresor reparieren + Consertar Cofre + Napraw skarbiec + Ripara Cassaforte + + + Federal Reserve - Front Entrance + Federální rezervní systém - přední vchod + Réserve fédérale - Entrée avant + Reserva Federal - Entrada Principal + Riserva Federale - Entrata Frontale + + Federal Reserve Bank - Haupteingang + Reserva Federal - Entrada Frontal + Rezerwa federalna - wejście główne + + + Federal Reserve - Side Entrance + Federální rezervní systém - Boční vchod + Réserve fédérale - Entrée latérale + Reserva Federal - Entrada Lateral + Riserva Federale - Ingresso laterale + + Federal Reserve Bank - Seiteneingang + Reserva Federal - Entrada Lateral + Rezerwa federalna - wejście boczne + + + Federal Reserve - Back Entrance + Federální rezervní systém - zadní vchod + Réserve fédérale - Entrée Derriere + Reserva Federal - Entrada Trasera + Riserva Federale - Ingresso sul Retro + + Federal Reserve Bank - Hintereingang + Reserva Federal - Entrada Traseira + Rezerwa federalna - wejście tylne + + + Federal Reserve - Vault View + Federální rezervní systém - Vault View + Réserve fédérale - Voir Coffre + Reserva Federal - Vista a la Bóveda + Riserva Federale - Vista della Cassaforte + + Federal Reserve Bank - Tresor + Reserva Federal - Visão do Cofre + Rezerwa federalna - skarbiec + + + Turn Off Display + Vypnout displej + Désactiver l'affichage + Apagar el Display + Disattivare la visualizzazione + + Bildschirm ausschalten + Desligar Monitor + Wyłącz wyświetlacz + + + Armament + Vyzbrojení + Armement + Armamento + Armamento + + Rüstkammer + Armamento + Zbrojownia gangu + + + EMS Item Shop + EMS Item Shop + Marché medecin + Tienda de Objetos de Médico + Strumenti EMS + + EMS Ausrüstung + Loja de Items Médicos + Wyposażenie medyczne + + + EMS Clothing Shop + EMS Oblečení Shop + Friperie Medecin + Tienda de Ropa de Médico + Uniformi EMS + + EMS Kleidungs-System + EMS Roupa Loja + Sklep odzieżowy EMS + + + Helicopter Garage + vrtulník Garáž + Garage d'hélicoptère + Garaje de Helicóptero + Garage d'Elicotteri + + Helikopter Hangar + Garagem Aérea + Hangar lotniczy + + + Car Garage + Car Garage + Garage de voiture + Garaje de Coches + + Fahrzeug Garage + Garagem de Carros + Hangar lotniczy + Garage Automobili + + + Pay Bail + Pay Bail + Payer la caution + Pagar Fianza + + Zahle Kaution + Pagar Fiança + Zapłać kaucję + Paga cauzione + + + + + Vehicular Manslaughter + dopravní zabití + Voleur de vehicules + Homicidio Vehicular + Omicidio colposo veicolare + Kołowego Manslaughter + + Atropelamento + Fahrlässige Tötung + + + Manslaughter + Zabití + Homicide involontaire + Homicidio + Omicidio colposo + Zabójstwo + + Homicidio Involuntario + Totschlag + + + Escaping Jail + Jak uniknout vězení + Échappé de prison + Escaparse de la Cárcel + Fuga dalla prigione + Uciekając Jail + + Fuga da Prisão + Ausbruch + + + Attempted Auto Theft + Pokusili Theft Auto + Tentative de vol d'automobiles + Atentado: Robo de Vehículo + Tentativo di furto d'auto + Próba Theft Auto + + Tentativa de Roubo de Veiculo + Versuchter Autodiebstahl + + + Use of illegal explosives + Používání nelegálních výbušnin + L'utilisation d'explosifs illégaux + Uso de Explosivos Ilegales + Uso di esplosivi illegali + Używanie nielegalnych materiałów wybuchowych + + Uso de explosivos ilegais + Verwendung von illegalen Sprengstoff + + + Robbery + Loupež + Vol + Robo + Rapina + Rozbój + + Roubo + Raub + + + Kidnapping + Únos + Enlèvement + Secuestro + Rapimento + Porwanie + + Sequestro + Entführung + + + Attempted Kidnapping + pokus o únos + Tentative de kidnapping + Atentado: Secuestro + + Tentativa de Sequestro + Versuchte Entführung + Tentativo di rapimento + Próba porwania + + + Public Intoxication + veřejné Intoxikace + Intoxication publique + Intoxicación Pública + + Uso de Droga em Publico + Öffentlicher Drogenmissbrauch + Uso di stupefacenti in pubblico + Upojenie publiczny + + + Grand Theft + velká loupež + Vol de voiture + Robo Mayor + grande furto + Wielka kradzież + + Grande Roubo + Auto Diebstahl + + + Petty Theft + Petty Theft + Petit vol + Robo Menor + piccoli furti + Drobnych kradzieży + + Pequeno Roubo + Kleiner Diebstahl + + + Hit and run + Zavinit nehodu a ujet + Délit de fuite + Pega y Corre + Mordi e fuggi + Uderz i uciekaj + + Fugir de Batida + Fahrerflucht + + + Drug Possession + držení drog + Possession de drogues + Posesión de Drogas + possesso di droga + Posiadanie narkotyków + + Posse de Droga + Drogenbesitz + + + Intent to distribute + Intent distribuovat + Intention de distribuer + Intención de Distribuir + + Tentativa de Trafico + Versuchter Drogenhandel + Tentativo di spaccio + Zamiarem dystrybucji + + + Drug Trafficking + Obchodování s drogami + Trafic de drogue + Tráfico de Drogas + + Trafico de Drogas + Drogenhandel + Vendita di droga + Handel narkotykami + + + Burglary + loupež + Cambriolage + Robo de Casa + furto con scasso + Włamanie + + Arrombamento + Einbruch + + + Tax Evasion + Daňový únik + Évasion fiscale + Evadir Impuestos + + Evasão Fiscal + Steuerhinterziehung + Evasione delle tasse + Unikanie podatków + + + Terrorism + Terorismus + Terrorisme + Terrorismo + + Terrorismo + Terrorismus + Terrorismo + Terroryzm + + + Unlicensed Hunting + Volně prodejné Hunting + Chasse sans licence + Caza sin Licencia + + Caça sem Licença + Jagen ohne Lizenz + Caccia senza licenza + Polowanie nielicencjonowane + + + Organ Theft + Organ Krádež + Vol d'organes + Robo de Organos + organo furto + Narząd kradzieżą + + Roubo de Orgãos + Organ Diebstahl + + + Attempted Organ Theft + Pokus o krádež Organ + Tentative de vol d'organes + Atentado: Robo de Organos + Tentativo furto di organi + Próba kradzieży narządów + + Tentativa de Roubo de Orgãos + Versuchte Organ-Diebstahl + + + Driving without license + Jízda bez povolení + Conducir sin Licencia + + Absence du permis de conduire + Dirigir sem Licença + Fahren ohne Führerschein + Guida senza patente + Jazda bez licencji + + + Driving on the wrong side of the road + Jízda v špatným směrem do ulice + Conducir en el lado incorrecto de la calle + + Conduite sur le mauvais côté de la route + Dirigindo no sentido contrario + Guida Contromano + Jazda po niewłaściwej stronie drogi + Fahren in die falsche Richtung der Straße + + + Not respecting the signalizations + Nerespektování signalizací + No respetar las señales + + Non respect des signalisations + Não respeitar as sinalizações + Nicht unter Beachtung der Signalisierungen + Mancato rispetto dei segnali stradali + Nie przestrzegając sygnalizacji czy + + + Speeding + rychlá jízda + Exceso de Velocidad + + Excès de vitesse + Excesso de Velocidade + Geschwindigkeitsüberschreitung + Eccesso di velocità + Przyśpieszenie + + + No headlight in the night + No světel v noci + Manejar sin luces en la noche + + Absence de phare la nuit + Farois Apagados Durante a Noite + Fahren ohne Licht + Luci spente durante la notte + Brak świateł w nocy + + + Driving kart without helmet + Hnací motokáru bez helmy + Manejar un Kart sin casco + + Non-port du casque en Kart + Dirigindo Kart Sem Capacete + Fahren ohne Helm + Guida di Kart senza casco + Jazda bez kasku gokarta + + + Badly parked vehicle + Špatně zaparkované vozidlo + Vehículo mal estacionado + + Véhicule mal garé + Veículo Mal Estacionado + Parksünder + Veicolo mal parcheggiato + Źle zaparkowany samochód + + + Rebel vehicle (Not armed) + Rebel vozidla (není ozbrojený) + Vehículo Rebelde (No Armado) + + Véhicule rebel non armé + Veículo Rebelde(Não Armado) + Rebelen Fahrzeug (nicht bewaffnet) + Veicolo blindato(Non armato) + Rebel pojeździe (nie czuwa) + + + Grand Theft (Civilian Vehicle) + Grand Theft (Civilian Vehicle) + Robo Mayor (Vehículo Civil) + + Vol de véhicule civil + Roubo de Veículo (Veículo Civil) + Schwerer Diebstahl (Zivilfahrzeug) + Furto di veicolo (Civile) + Grand Theft (Cywilny Vehicle) + + + + Grand Theft (Military Vehicle) + Grand Theft (Military Vehicle) + Robo Mayor (Vehículo Militar) + + Vol de véhicule militaire + Roubo de Veículo(Militar) + Schwerer Diebstahl (Dienstfahrzeug) + Furto di veicolo militare + Grand Theft (pojazd wojskowy) + + + Armored Vehicle + obrněné vozidlo + Vehículo Blindado + + Véhicules blindés + Veículo Armado + Panzerfahrzeug + Veicolo D'assalto + Opancerzony pojazd + + + Flying over the city without authorization + Létání nad městem bez povolení + Volar sobre la ciudad sin autorización + + Survol de ville sans autorisation + Sobrevoando sobre a cidade sem autorização + Fliegen über die Stadt ohne Genehmigung + Guida di velivolo su città abitata senza autorizzazione + Latające nad miastem bez zezwolenia + + + Closing the street without authorization + Uzavření ulici bez povolení + Cerrar las calles sin autorización + + Interdiction de se poser sans autorisation + Fechar Rua Sem Autorização + Das Schließen der Straße ohne Genehmigung + Impedimento del traffico senza permesso + Zamknięcie ulicy bez zezwolenia + + + Open carry in city (Legal Weapon) + open carry ve městě (právní Weapon) + Cargar Arma Abiertamente en la Ciudad (Arma Legal) + Aprire il trasporto in città (Arma Legale) + Otwarty Carry w mieście (prawny Weapon) + + Arme légale visible en ville + Portar em Cidades(Arma Legal) + Offenes tragen einer legalen Waffe in der Stadt + + + Rebel weapon + Rebel zbraň + Arma Rebelde + + Armes rebelles + Arma Rebelde + Rebellen Waffe + Arma Ribelle + Rebel bronią + + + Illegal clothing + Nelegální oblečení + Ropa Ilegal + abbigliamento illegale + Nielegalna odzież + + Vêtements illégaux + Roupas Ilegais + Illegale Kleidung + + + Hiding face (Mask) + Schovává tvář (Mask) + Ocultar su Cara (Máscara) + Nascondere faccia (Mask) + Ukrywając twarz (maska) + + Cacher son visage + Esconder o Rosto(Mascara) + Verstecken des Gesichts (Maske) + + + Refuses to cooperate + Odmítá spolupracovat + Reusa a Cooperar + Si rifiuta di collaborare + Odmawia współpracy + + Refus d'obtempérer + Recusou-se a Cooperar + Behinderung der Staatsgewalt + + + Hit and run + Zavinit nehodu a ujet + Golpea y Corre + Mordi e fuggi + Uderz i uciekaj + + Délit de fuite + Bater e Fugir + Fahrerflucht + + + Insulting a civilian + Urážky civilní + Insultar a un Civil + + Insulte envers un civil + Insulto a Civil + Beleidigung + Insulto a civile + Obrażanie cywilem + + + Insulting a soldier + Urážky vojáka + Insultar a un Soldado + + Insulte envers un militaire + Insulto as Autoridades + Beamtenbeleidigung + Insulto a pubblico ufficiale + Znieważenie żołnierza + + + Drug dealing + Urážky vojáka... + Venta de Drogas + + Trafique de drogue + Trafico de Drogas + Drogenhandel + Traffico di droga + Handel narkotykami + + + Federal Reserve breaking + Federální rezervní systém lámání + Entrar a la Reserva Federal + + Intrusion dans le coffre du gouverneur + Invasão a Reserva Federal + Bankeinbruch + Rapina alla Riserva Federale + Rezerwa Federalna łamanie + + + Killing of a civilian + Zabíjení civilní + Homicidio de un Civil + Uccisione di un civile + Zabójstwo cywilnej + + Meurtre d'un civil + Matou um Civil + Das Töten eines Zivilen + + + Killing of a soldier + Zabití vojáka + Homicidio de un Soldado + + Meurtre d'un militaire + Matou um Policial + Das Töten eines Beamten + Omicidio di un agente + Zabijając żołnierza + + + + + Gas Storage + Gas Storage + Stockage de gaz + Almacenamiento de Combustible + Stoccaggio di Gas + Magazynów gazu + + Treibstofflager + Posto de Combustível + + + Supply + Zásobování + La fourniture + Suministro + Fornitura + Dostawa + + Liefern + Abastecer + + + Store + Obchod + Deposer + Guardar + Negozio + Sklep + + Lagern + Guardar + + + Stop + Stop + Arrêtez + Parar + Stop + Zatrzymać + + Stoppen + Parar + + + Tanker is already in use. + Tankery je již používán. + Tanker est déjà en cours d'utilisation. + El Camión Cisterna ya esta siendo usado. + La cisterna è già in uso. + Cysterna jest już w użyciu. + + Tankwagen wird bereits benutzt. + Os tanques já estão em uso. + + + Gas station is in use. + Čerpací stanice je v provozu. + Gas station est en cours d'utilisation. + La estación ya se esta usando. + La stazione di benzina è già in uso. + Stacja benzynowa jest w użyciu. + + Tankstelle wird bereits beliefert. + O posto já está sendo usado. + + + Tanker is empty. + Tankery je prázdný. + Tanker est vide. + El Camión cisterna esta vacío. + La cisterna è vuota. + Cysterna jest pusta. + + Treibstofftank ist leer. + Os tanques estão vazios. + + + Tankers is full. + Tankery je plná. + Tankers est plein. + El Camión cisterna esta lleno. + La cisterna è piena. + Zbiornikowce jest pełna. + + Treibstofftank ist voll. + Os tanques estão cheios. + + + Gas station has enough fuel. + Čerpací stanice má dostatek paliva. + Gas station a suffisamment de carburant. + La estación tiene suficiente gasolina. + Il distributore ha abbastanza benzina. + Stacja benzynowa ma wystarczającą ilość paliwa. + + Tankstelle hat genug Treibstoff. + O posto tem combustível suficiente. + + + This gas station is supplied through a pipeline. + Tento Čerpací stanice se dodává potrubím. + Cette station de gaz est fourni par un pipeline + Esta estación es suministrada por una tubería. + Questa stazione di gas è alimentata attraverso una tubatura. + Ta stacja gaz jest dostarczany rurociągiem. + + Diese Tankstelle wird über eine Pipeline versorgt. + Esse posto é abastecido através de uma mangueira. + + + Discontinued operation. + Ukončená činnost. + Activité abandonnée. + Operación discontinuada. + Incarico Incompleto. + Działalność zaniechana. + + Vorgang abgebrochen. + Operação descontinuada. + + + Your share is $%1. + Váš podíl $%1. + Votre part est de $%1. + Tu ganancia es $%1. + La vostra quota è di $%1. + Twój udział jest $%1. + + Dein Anteil beträgt $%1. + A sua parte é de R$%1. + + + + + Mission Failed + Mise selhala + Mission échouée + Misión fallida + Missione fallita + Misja nie powiodła się + Missão fracassada + Миссия провалена + Mission fehlgeschlagen + + + You are not white-listed to use this slot. + Mise selhala + Mission échouée + No tienes permiso de usar este slot. + Missione fallita + Misja nie powiodła się + Missão fracassada + Миссия провалена + Mission fehlgeschlagen + + + You are not allowed to use this slot because you do not have the appropriate permissions. Try another slot. + Ty jsou není dovoleno používat tento slot, protože nemáte příslušná oprávnění. Zkuste použít jiný slot. + Vous n'êtes pas autorisé à utiliser cet emplacement parce que vous ne disposez pas des autorisations appropriées. Essayez un autre emplacement. + No puede usar este slot porque no tiene los permisos requeridos. Por favor trate con otro slot. + Non è consentito usare questo slot, perché non si dispone delle autorizzazioni appropriate. Prova un altro slot. + Nie wolno korzystać z tego gniazda, ponieważ nie masz odpowiednich uprawnień. Spróbuj użyć innego gniazda. + Você não tem permissão para usar esse slot, porque você não tem as permissões apropriadas. Tente outro slot. + Вы не можете использовать этот слот, потому что у вас нет соответствующих разрешений. Попробуйте использовать другой слот. + Sie sind nicht berechtigt diesen Slot zu verwenden, da Sie nicht über die entsprechenden Berechtigungen verfügen. Versuchen Sie einen anderen Steckplatz. + + + + + Mission Failed + Mise selhala + Mission échouée + Misión fallida + Missione fallita + Misja nie powiodła się + Missão fracassada + Миссия провалена + Mission fehlgeschlagen + + + You are blacklisted from cops. + Ty jsou na černé listině z policajtů. + Vous êtes sur la liste noire de flics. + Usted está en la lista negra de policías. + Stai lista nera da poliziotti. + Jesteś na czarnej liście od policjantów. + Você está na lista negra de policiais. + Вы в черном списке от ментов. + Sie sind von Polizisten die schwarze Liste gesetzt. + + + You are not allowed to be a cop due to previous actions and the admins have removed you from being a cop. + Ty jsou nesmí být policajt vzhledem k předcházejícími akcemi a administrátoři vám odstraní z bytí policista. + Vous n'êtes pas autorisé à être un flic en raison des actions précédentes et les admins vous avez supprimé d'être un flic. + No tiene permiso a ser policía por acciones anteriores. Los administradores han bloqueado su acceso. + Non è consentito fare il poliziotto a causa di azioni precedenti e gli amministratori di aver rimosso da essere un poliziotto. + Nie mogą być policjantem z powodu wcześniejszych działań oraz administratorzy usunęli cię od bycia policjantem. + Você não tem permissão para ser um policial devido a ações anteriores e os admins ter removido-lo de ser um policial. + Вы не можете быть полицейским в связи с предыдущими действиями и админы удалили вас от того, чтобы быть полицейским. + Sie sind nicht Polizist werden auf Grund früherer Aktionen und die Admins haben sich von einem Cop entfernt es erlaubt. + + + + + The SpyGlass sees you! + Dalekohled tě vidí! + SpyGlass vous voit! + El SpyGlass te ve! + Il cannocchiale si vede! + Lunetę widzi! + O SpyGlass te vê! + SpyGlass видит, что вы! + Die SpyGlass sieht dich! + + + You were detected by the SpyGlass. + Vy byly detekovány dalekohled. + Vous avez été détecté par SpyGlass. + Fue detectado por el SpyGlass. + Lei è stato rilevato dal SpyGlass. + Ty zostały wykryte przez lunetę. + Você foi detectado pelo SpyGlass. + Вы были обнаружены с помощью SpyGlass. + Sie wurden von der SpyGlass erkannt. + + + You were detected for cheating and have been reported to the server. Enjoy your day. + Vy byly detekovány za podvádění a byly zaznamenány na server. Užijte si svůj den. + Vous avez été détecté pour tricher et ont été signalés au serveur. Profitez de votre journée. + Fue detectada por hacer trampas y se le ha informado al servidor. Disfruta tu día. + Lei è stato rilevato per truffa e sono stati segnalati per il server. Buona giornata. + Ty wykryto oszustwo i zostały zgłoszone do serwera. Miłego dnia. + Está foram detectados por engano e têm sido relatados para o servidor. Aproveite seu dia. + Вы были обнаружены для мошенничества и было сообщено на сервер. Удачного дня. + Sie wurden für Betrug erkannt und haben an den Server gemeldet. Genieße deinen Tag. + + + + + EMS Requested + EMS Požadované + Medecin demandé + Medico Solicitado + EMS richiesto + EMS Zamówiony + EMS solicitada + EMS Запрошенный + EMS Gewünscht + + + Delivery Job Accepted + Dodávka Job Accepted + Livraison emploi Accepté + Misión de Entrega Aceptada + Incarico Postale accettato + Dostawa Praca Zaakceptowany + Entrega aceitado Job + Доставка Работа Принято + Lieferung Job angenommen + + + Delivery Job Failed + Nepodařilo dodávka Job + Livraison Job échoué + Misión de Entrega Fallada + Incarico Postale Fallito + Dostawa Praca Failed + Falha de entrega Job + Доставка Работа Ошибка + Lieferung Job fehlgeschlagen + + + Delivery Job Completed + Dokončena dodávka Job + Livraison terminée + Misión de Entrega Completada + Incarico Postale Completato + Dostawa Praca Zakończony + Concluída a entrega Job + Доставка Работа Завершено + Lieferung Auftrag abgeschlossen + + + Received A Text Message + Přijetí textové zprávy + A reçu un message texte + Recibió un mensaje de texto + Hai ricevuto un messaggio di testo + Otrzymał wiadomość tekstową + Recebeu uma mensagem de texto + Получено текстовое сообщение + Erhielt eine Textnachricht + + + 911 Dispatch Center + 911 Dispatch Center + 911 Dispatch Centre + 911 Centro de Despacho + 911 Centro Richieste + 911 Dispatch Center + 911 Centro de Despacho + 911 диспетчерский центр + 911 Dispatch-Center + + + Admin Dispatch Center + Admin Dispatch Center + Administrateur Dispatch Centre + Centro de Despacho de Administradores + Admin centro di spedizione + Administrator Dispatch Center + Administrador Centro de Despacho + Администратор диспетчерский центр + Admin Verteilzentrum + + + Admin Message + Admin Message + Administrateur message + Mensaje de Administrador + Messaggio dall'Admin + Administrator Wiadomość + Mensagem de administração + Администратор Сообщение + Admin-Nachricht + + + + + arrested %1 + zadržen %1 + + arrestó a %1 + + + prendeu %1 + арестовано %1 + hat %1 verhaftet + + + %1 - %2 arrested %3 + %1 - %2 %3 zatčen + + %1 - %2 arrestó a %3 + + + %1 - %2 prendeu %3 + %1 - %2 %3 арестовано + %1 - %2 hat %3 verhaftet + + + picked up %1 %2 + vyzvednout %1 %2 + + recogió %1 %2 + + + pegou %1 %2 + поднял %1 %2 + hat $%1 $%2 aufgehoben + + + %1 - %2 picked up %3 %4 + %1 - %2 vyzvednout%3 %4 + + %1 - %2 recogió %3 %4 + + + %1 - %2 pegou %3 %4 + взял $%1 от земли. Банковский баланс: $%2 на руку Баланс: $%3 + %1 - %2 hat %3 %4 aufgehoben + + + picked up $%1 from the ground. Bank Balance: $%2 On Hand Balance: $%3 + zvedl $%1 ze země. Banka Zůstatek: $%2 po zralé úvaze rukou: $%3 + + recogió $%1 del suelo. Saldo Bancario: $%2 Saldo en Efectivo: $%3 + + + pegou R$%1 do chão. Quantia no Banco: R$%2 Quantia na Mão: R$%3 + взял $%1 от земли. Банковский баланс: $%2 на руку Баланс: $%3 + hat $%1 vom Boden aufgehoben. Bank-Konto: $%2 Bargeld: $%3 + + + %1 - %2 picked up $%3 from the ground. Bank Balance: $%4 On Hand Balance $%5 + %1 - %2 vyzvednout $%3 ze země. Banka Zůstatek: $%4 po ruce Balance $%5 + + %1 - %2 recogió $%3 del suelo. Saldo Bancario: $%4 Saldo en Efectivo: $%5 + + + %1 - %2 pegou R$%3 do chão. Quantia no Banco: R$%4 Quantia na mão: R$%5 + %1 - %2 взял $%3 от земли. Банковский баланс: $%4 На Hand Баланс $%5 + %1 - %2 hat $%3 vom Boden aufgehoben. Bank-Konto: $%4 Bargeld: $%5 + + + robbed $%1 from %2. Bank Balance: $%3 On Hand Balance: $%4 + oloupen $%1 z %2. Banka Zůstatek: $%3 po zralé úvaze rukou: $%4 + + robó $%1 de $%2. Saldo Bancario: $%3 Saldo en Efectivo: $%4 + + + roubou R$%1 de %2. Quantia no Banco: R$%3 Quantia na Mão: R$%4 + ограбил $%1 из %2. Банковский баланс: $%3 на руку Баланс: $%4 + hat $%1 von $%2 geraubt. Bank-Konto: $%3 Bargeld: $%4 + + + %1 - %2 robbed $%3 from %4. Bank Balance: $%5 On Hand Balance: $%6 + %1 - %2 okraden $%3 z %4. Banka Zůstatek: $%5 po zralé úvaze rukou: $%6 + + %1 - %2 robó $%3 de $%4. Saldo Bancario: $%5 Saldo en Efectivo: $%6 + + + %1 - %2 roubou R$%3 de %4. Quantia no Banco: R$%5 Quantia na Mão: R$%6 + %1 - %2 ограбил $%3 от %4. Банковский баланс: $%5 на руку Баланс: $%6 + %1 - %2 hat $%3 von %4 geraubt. Bank-Konto: $%5 Bargeld: $%6 + + + created a gang named: %1 for $%2 + Vytvořili gang s názvem: %1 za $%2 + + creó una pandilla llamada: %1 por $%2 + + + criou uma gangue chamada: %1 por R$%2 + создали банду под названием: %1 за $%2 + hat eine Gang namens $1 für $%2 erstellt + + + %1 - %2 created a gang named: %3 for $%4 + %1 - %2 vytvořili gang s názvem: %3 za $%4 + + %1 - %2 creó una pandilla llamada: %3 por $%4 + + + %1 - %2 criou uma gangue chamada: %3 por R$%4 + %1 - %2 создали банду под названием: %3 за $%4 + %1 - %2 hat eine Gang namens %3 für $%4 erstellt + + + bought a house for $%1. Bank Balance: $%2 On Hand Cash: $%3 + koupil dům za $%1. Banka Zůstatek: $%2 On Hand Cash: $%3 + + compró una casa por $%1. Saldo Bancario: $%2 Saldo en Efectivo: $%3 + + + comprou uma casa por R$%1. Quantia no Banco: R$%2 Quantia na Mão: R$%3 + купил дом за $%1. Банковский баланс: $%2 на руках наличные деньги: $%3 + hat sich ein Haus für $%1 gekauft. Bank-Konto: $%2 Bargeld: $%3 + + + %1 - %2 bought a house for $%3. Bank Balance: $%4 On Hand Cash: $%5 + %1 - %2 koupil dům za $%3. Banka Zůstatek: $%4 On Hand Cash: $%5 + + %1 - %2 compró una casa por $%3. Saldo Bancario: $%4 Saldo en Efectivo: $%5 + + + %1 - %2 comprou uma casa por R$%3. Quantia no Banco: R$%4 Quantia na Mão: R$%5 + %1 - %2 купил дом за $%3. Банковский баланс: $%4 на руках наличные деньги: $%5 + %1 - %2 hat sich ein Haus für $%3 gekauft. Bank-Konto: $%4 Bargeld: $%5 + + + sold a house for $%1. Bank Balance: $%2 + prodal dům za $%1. Banka Zůstatek: $%2 + + vendió una casa por $%1. Saldo Bancario: $%2 + + + vendeu uma casa por R$%1. Quantia no Banco: R$%2 + продал дом за $%1. Банковский баланс: $%2 + hat sein Haus für $%1 verkauft. Bank-Konto: $%2 + + + %1 - %2 sold a house for $%3. Bank Balance: $%4 + %1 - %2 prodal dům za $%3. Banka Zůstatek: $%4 + + %1 - %2 vendió una casa por $%3. Saldo Bancario: $%4 + + + %1 - %2 vendeu uma casa por R$%3. Quantia no Banco: R$%4 + %1 - %2 продал дом за $%3. Банковский баланс: $%4 + %1 - %2 hat sich ein Haus für $%3 verkauft. Bank-Konto: $%4 + + + chopped vehicle %1 for $%2 On Hand Cash(pre-chop): $%3 + nasekané vozidlo %1 nebo $%2 na ruce hotovosti (pre-CHOP): $%3 + + vendió el vehiculo %1 en el desguace por $%2. Saldo en Efectivo(antes de la venta): $%3 + + + desmanchou um %1 por R$%2 Quantia na Mão (antes do desmanche): R$%3 + нарезанного машина %1 или $%2 на руках Cash (предварительно отбивной): $%3 + hat das Fahrzeug %1 für $%2 im Chop-Shop verkauft. Bargeld(vor Chop): $%3 + + + %1 - %2 chopped vehicle %3 for $%4 On Hand Cash(pre-chop): $%5 + %1 - %2 nasekané vozidla %3 za $%4 po ruce hotovosti (před-kotleta): $%5 + + %1 - %2 vendió el vehiculo %3 en el desguace por $%4. Saldo en Efectivo(antes de la venta): $%5 + + + %1 - %2 desmanchou um %3 por R$%4 Quantia na Mão(antes do desmanche): R$%5 + %1 - %2 нарезанной автомобиля %3 за $%4 на руку Cash (предварительно отбивной): $%5 + %1 - %2 hat das Fahrzeug %3 für $%4 im Chop-Shop verkauft. Bargeld(vor Chop): $%6 + + + bought vehicle %1 for $%2. On Hand Cash: $%3 Bank Balance: $%4 + koupil vozidla %1 nebo $%2. On Hand Cash: $%3 bankovní konto: $%4 + + compró el vehiculo %1 por $%2. Saldo Bancario: $%3 Saldo en Efectivo: $%4 + + + comprou um %1 por R$%2. Quantia na Mão: R$%3 Quantia no Banco: R$%4 + купил автомобиль %1 или $%2. На Hand Cash: $%3 банка Баланс: $%4 + hat sich das Fahrzeug %1 für $%2 gekauft. Bargeld: $%3 Bank-Konto: $%4 + + + %1 - %2 bought vehicle %3 for $%4. On Hand Cash: $%5 Bank Balance $%6 + %1 - %2 koupilo vozidla %3 za $%4. On Hand Cash: $%5 bankovní konto $%6 + + %1 - %2 compró el vehiculo %3 por $%4. Saldo Bancario: $%5 Saldo en Efectivo: $%6 + + + %1 - %2 comprou um %3 por R$%4. Quantia na Mão: R$%5 Quantia no Banco: R$%6 + %1 - %2 купил автомобиль за $%3 %4. На Hand наличных: $%5 баланса банка $%6 + %1 - %2 hat sich das Fahrzeug %3 für $%4 gekauft. Bargeld: $%5 Bank-Konto: $%6 + + + sold vehicle %1 for $%2. Bank Balance: $%3 On Hand Balance: $%4 + prodával vozidla %1 pro $%2. Banka Zůstatek: $%3 po zralé úvaze rukou: $%4 + + vendió el vehiculo %1 por $%2. Saldo Bancario: $%3 Saldo en Efectivo: $%4 + + + vendeu um %1 por R$%2. Quantia no Banco: R$%3 Quantia na Mão: R$%4 + продается автомобиль %1 за $%2. Банковский баланс: $%3 на руку Баланс: $%4 + hat das Fahrzeug %1 für $%2 verkauft. Bank-Konto: $%3 Bargeld: $%4 + + + %1 - %2 sold vehicle %3 for $%4. Bank Balance: $%5 On Hand Balance: $%6 + %1 - %2 prodával vozidla %3 za $%4. Banka Zůstatek: $%5 po zralé úvaze rukou: $%6 + + %1 - %2 vendió el vehiculo %3 por $%4. Saldo Bancario: $%5 Saldo en Efectivo: $%6 + + + %1 - %2 vendeu um %3 por R$%4. Quantia no Banco: R$%5 Quantia na Mão: R$%6 + %1 - %2 продал автомобиль за $%3 %4. Банковский баланс: $%5 на руку Баланс: $%6 + %1 - %2 hat das Fahrzeug %3 für %4 verkauft. Bank-Konto: $%5 Bargeld: $%6 + + + withdrew $%1 from their gang bank. Gang Bank Balance: $%2 Bank Balance: $%3 On Hand Balance: $%4 + stáhl $%1 z jejich gangu banky. Gang bankovní konto: $%2 bankovní konto: $%3 po zralé úvaze rukou: $%4 + + sacó $%1 de la cuenta de su pandilla. Saldo Bancario de la Pandilla: $%2 Saldo Bancario: $%3 Saldo en Efectivo: $%4 + + + sacou R$%1 no banco da sua gangue. Quantia no Banco da Gangue: R$%2 Quantia no Banco: R$%3 Quantia na Mão: R$%4 + снял $%1 от их банды банка. Gang Bank Баланс: $%2 банка Баланс: $%3 на руку Баланс: $%4 + hat $%1 von seinem Gang-Konto abgehoben. Gang-Konto: $%2 Bank-Konto: $%3 Bargeld: $%4 + + + %1 - %2 withdrew $%3 from their gang bank. Gang Bank Balance: $%4 Bank Balance: $%5 On Hand Balance: $%6 + %1 - %2 stáhl $%3 z jejich gangu banky. Gang bankovní konto: $%4 bankovní konto: $%5 po zralé úvaze rukou: $%6 + + %1 - %2 sacó $%3 de la cuenta de su pandilla. Saldo Bancario de la Pandilla: $%4 Saldo Bancario: $%5 Saldo en Efectivo: $%6 + + + %1 - %2 sacou R$%3 no banco da sua gangue. Quantia no Banco da Gangue: R$%4 Quantia no Banco: R$%5 Quantia na Mão: R$%6 + %1 - %2 отозвала $%3 из их банды банка. Gang Bank Баланс: $%4 банка Баланс: $%5 на руку Баланс: $%6 + %1 - %2 hat $%3 von seinem Bankkonto abgehoben. Gang-Konto: $%4 Bank-Konto: $%5 Bargeld: $%6 + + + deposited $%1 into their gang bank. Gang Bank Balance: $%2 Bank Balance: $%3 On Hand Balance: $%4 + uložen $%1 do svého gangu banky. Gang bankovní konto: $%2 bankovní konto: $%3 po zralé úvaze rukou: $%4 + + depositó $%1 a la cuenta de su pandilla. Saldo Bancario de la Pandilla: $%2 Saldo Bancario: $%3 Saldo en Efectivo: $%4 + + + depositou R$%1 no banco da sua gangue. Quantia no Banco da Gangue: R$%2 Quantia no Banco: R$%3 Quantia na Mão: R$%4 + депозит в размере $%1 в их банде банка. Gang Bank Баланс: $%2 банка Баланс: $%3 на руку Баланс: $%4 + hat $%1 auf sein Gang-Konto eingezahlt. Gang-Konto: $%2 Bank-Konto: $%3 Bargeld: $%4 + + + %1 - %2 deposited $%3 into their gang bank. Gang Bank Balance: $%4 Bank Balance: $%5 On Hand Balance: $%6 + %1 - %2 uloženy $%3 do jejich gangu banky. Gang bankovní konto: $%4 bankovní konto: $%5 po zralé úvaze rukou: $%6 + + %1 - %2 depositó $%3 a la cuenta de su pandilla. Saldo Bancario de la Pandilla: $%4 Saldo Bancario: $%5 Saldo en Efectivo: $%6 + + + %1 - %2 depositou R$%3 no banco da sua gangue. Quantia no Banco da Gangue: R$%4 Quantia no Banco: R$%5 Quantia na Mão: R$%6 + %1 - %2 депозит в размере $%3 в их банде банка. Gang Bank Баланс: $%4 банка Баланс: $%5 на руку Баланс: $%6 + %1 - %2 hat $%3 auf sein Gang-Konto überwiesen. Gang-Konto: $%4 Bank-Konto: $%5 Bargeld: $%6 + + + withdrew $%1 from their bank. Bank Balance: $%2 On Hand Balance: $%3 + stáhl $%1 z jejich banky. Banka Zůstatek: $%2 po zralé úvaze rukou: $%3 + + sacó $%1 de su cuenta de banco. Saldo Bancario: $%2 Saldo en Efectivo: $%3 + + + sacou R$%1 do seu banco. Quantia no Banco: R$%2 Quantia na Mão: R$%3 + снял $%1 от своего банка. Банковский баланс: $%2 на руку Баланс: $%3 + hat $%1 von seinem Bankkonto abgehoben. Bank-Konto: $%2 Bargeld: $%3 + + + %1 - %2 withdrew $%3 from their bank. Bank Balance: $%4 On Hand Balance: $%5 + %1 - %2 stáhl $%3 od své banky. Banka Zůstatek: $%4 po zralé úvaze rukou: $%5 + + %1 - %2 sacó $%3 de su cuenta de banco. Saldo Bancario: $%4 Saldo en Efectivo: $%5 + + + %1 - %2 sacou R$%3 do seu banco. Quantia no Banco: R$%4 Quantia na Mão: R$%5 + %1 - %2 отозвала $%3 из своего банка. Банковский баланс: $%4 на руку Баланс: $%5 + %1 - %2 hat $%3 von seinem Bankkonto abgehoben. Bank-Konto: $%4 Bargeld: $%5 + + + transferred $%1 to %2. Bank Balance: $%3 On Hand Balance: $%4 + přestoupil $%1 do %2. Banka Zůstatek: $%3 po zralé úvaze rukou: $%4 + + transferió $%1 a $%2. Saldo Bancario: $%3 Saldo en Efectivo: $%4 + + + transferiu R$%1 para %2. Quantia no Banco: R$%3 Quantia na Mão: R$%4 + перечислил $%1 %2. Банковский баланс: $%3 на руку Баланс: $%4 + hat %2 $%1 überwiesen. Bank-Konto: $%3 Bargeld: $%4 + + + %1 - %2 transferred $%3 to %4. Bank Balance: $%5 On Hand Balance: $%6 + %1 - %2 převedena $%3 až %4. Banka Zůstatek: $%5 po zralé úvaze rukou: $%6 + + %1 - %2 transferió $%3 a $%4. Saldo Bancario: $%5 Saldo en Efectivo: $%6 + + + %1 - %2 transferiu R$%3 para %4. Quantia no Banco: R$%5 Quantia na Mão: R$%6 + %1 -%2 перевели $%3 до %4. Банковский баланс: $%5 на руку Баланс: $%6 + %1 - %2 hat %4 $%3 überwiesen. Bank-Konto: $%5 Bargeld: $%6 + + + deposited $%1 into their bank. Bank Balance: $%2 On Hand Balance: $%3 + uložen $%1 do své banky. Banka Zůstatek: $%2 po zralé úvaze rukou: $%3 + + depositó $%1 a su cuenta de banco. Saldo Bancario: $%2 Saldo en Efectivo: $%3 + + + depositou R$%1 no seu banco. Quantia no Banco: R$%2 Quantia na Mão: R$%3 + депозит в размере $%1 в их банке. Банковский баланс: $%2 на руку Баланс: $%3 + hat $%1 auf sein Bankkonto eingezahlt. Bank-Konto: $%2 Bargeld: $%3 + + + %1 - %2 deposited $%3 into their bank. Bank Balance: $%4 On Hand Balance: $%5 + %1 - %2 uloženy $%3 do své banky. Banka Zůstatek: $%4 po zralé úvaze rukou: $%5 + + %1 - %2 depositó $%3 a su cuenta de banco. Saldo Bancario: $%4 Saldo en Efectivo: $%5 + + + %1 - %2 depositou R$%3 no seu banco. Quantia no Banco: R$%4 Quantia na Mão: R$%5 + %1 - %2 депозит в размере $%3 в свой банк. Банковский баланс: $%4 на руку Баланс: $%5 + %1 - %2 hat $%3 auf sein Konto eingezahlt. Bank-Konto: $%4 Bargeld: $%5 + + + diff --git a/life_client/textures/armalife.jpg b/life_client/textures/armalife.jpg new file mode 100644 index 00000000..ca5405cb Binary files /dev/null and b/life_client/textures/armalife.jpg differ diff --git a/Altis_Life.Altis/textures/cop_uniform.jpg b/life_client/textures/cop_uniform.jpg similarity index 100% rename from Altis_Life.Altis/textures/cop_uniform.jpg rename to life_client/textures/cop_uniform.jpg diff --git a/Altis_Life.Altis/textures/medic_uniform.jpg b/life_client/textures/medic_uniform.jpg similarity index 100% rename from Altis_Life.Altis/textures/medic_uniform.jpg rename to life_client/textures/medic_uniform.jpg diff --git a/life_client/textures/phone_bg_manwar.paa b/life_client/textures/phone_bg_manwar.paa new file mode 100644 index 00000000..b4908f6b Binary files /dev/null and b/life_client/textures/phone_bg_manwar.paa differ diff --git a/life_client/textures/phone_frame.paa b/life_client/textures/phone_frame.paa new file mode 100644 index 00000000..676c5cb8 Binary files /dev/null and b/life_client/textures/phone_frame.paa differ diff --git a/life_hc/FSM/cleanup.fsm b/life_hc/FSM/cleanup.fsm new file mode 100644 index 00000000..7d03c75f --- /dev/null +++ b/life_hc/FSM/cleanup.fsm @@ -0,0 +1,145 @@ +/*%FSM*/ +/*%FSM*/ +/* +item0[] = {"init",0,250,-65.004578,-391.651611,24.995417,-341.651672,0.000000,"init"}; +item1[] = {"true",8,218,-62.976639,-315.185364,27.023363,-265.185364,0.000000,"true"}; +item2[] = {"Share__Work_load",2,250,-64.183350,-224.681931,25.816656,-174.681931,0.000000,"Share " \n "Work-load"}; +item3[] = {"true",8,218,-54.709698,75.189262,35.290302,125.189262,0.000000,"true"}; +item4[] = {"Time_Check",4,218,-219.425827,-133.310532,-129.425964,-83.310455,0.000000,"Time Check"}; +item5[] = {"Delete_Dead_Cars",2,4346,-220.186951,-29.248400,-130.187195,20.751413,0.000000,"Delete" \n "Dead" \n "Cars"}; +item6[] = {"",7,210,-312.538239,95.295059,-304.538239,103.295059,0.000000,""}; +item7[] = {"",7,210,-311.750000,-203.033707,-303.750000,-195.033707,0.000000,""}; +link0[] = {0,1}; +link1[] = {1,2}; +link2[] = {2,4}; +link3[] = {3,6}; +link4[] = {4,5}; +link5[] = {5,3}; +link6[] = {6,7}; +link7[] = {7,2}; +globals[] = {0.000000,0,0,0,0,640,480,1,46,6316128,1,-629.444153,611.207214,293.309357,-434.050568,1243,885,1}; +window[] = {2,-1,-1,-1,-1,985,225,1868,225,3,1261}; +*//*%FSM*/ +class FSM +{ + fsmName = "Server-Side Cleanup"; + class States + { + /*%FSM*/ + class init + { + name = "init"; + init = /*%FSM*/"private[""_impound"",""_cars"",""_objs"",""_totCars"",""_thread""];" \n + "_impound = time;" \n + "_cars = time;" \n + "_objs = time;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + priority = 0.000000; + to="Share__Work_load"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Share__Work_load + { + name = "Share__Work_load"; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Time_Check + { + priority = 0.000000; + to="Delete_Dead_Cars"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((time - _cars) > (3 * 60))"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Delete_Dead_Cars + { + name = "Delete_Dead_Cars"; + init = /*%FSM*/"{" \n + " if (!alive _x) then {" \n + " _dbInfo = _x getVariable [""dbInfo"",[]];" \n + " if (count _dbInfo > 0) then {" \n + " _uid = _dbInfo select 0;" \n + " _plate = _dbInfo select 1;" \n + "" \n + " _query = format[""UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate];" \n + " _query spawn {" \n + " " \n + " _thread = [_this,1] call HC_fnc_asyncCall;" \n + " };" \n + " };" \n + " if (!isNil ""_x"" && {!isNull _x}) then {" \n + " deleteVehicle _x;" \n + " };" \n + " };" \n + "} forEach allMissionObjects ""LandVehicle"";" \n + "" \n + "{" \n + " if (!alive _x) then {" \n + " _dbInfo = _x getVariable [""dbInfo"",[]];" \n + " if (count _dbInfo > 0) then {" \n + " _uid = _dbInfo select 0;" \n + " _plate = _dbInfo select 1;" \n + "" \n + " _query = format[""UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate];" \n + " _query spawn {" \n + " " \n + " _thread = [_this,1] call HC_fnc_asyncCall;" \n + " };" \n + " };" \n + " if (!isNil ""_x"" && {!isNull _x}) then {" \n + " deleteVehicle _x;" \n + " };" \n + " };" \n + "} forEach allMissionObjects ""Air"";" \n + "" \n + "_cars = time;" \n + "" \n + "//Group cleanup." \n + "{" \n + " if (units _x isEqualTo [] && local _x) then {" \n + " deleteGroup _x;" \n + " };" \n + "} forEach allGroups;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + priority = 0.000000; + to="Share__Work_load"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + }; + initState="init"; + finalStates[] = + { + }; +}; +/*%FSM*/ diff --git a/life_hc/KRON_Strings.sqf b/life_hc/KRON_Strings.sqf new file mode 100644 index 00000000..b4dd655f --- /dev/null +++ b/life_hc/KRON_Strings.sqf @@ -0,0 +1,355 @@ +// ========================================================================================================= +// +// String Functions Library +// Version: 2.2.1 +// File: KRON_Strings.sqf +// Author: Kronzky +// +// ========================================================================================================= +// +// Usage: +// +// � KRON_StrToArray - Converts a string into an array of characters: +// _array=[_str] call KRON_StrToArray +// +// � KRON_StrLen - Returns the length of the string +// _len=[_str] call KRON_StrLen +// +// � KRON_StrLeft - Returns l characters from the left side of the string +// _left=[_str,l] call KRON_StrLeft +// +// � KRON_StrRight - Returns l characters from the right side of the string +// _right=[_str,l] call KRON_StrRight +// +// � KRON_StrMid - Returns l characters from the string, starting at position p (zero-based) +// If l is not defined, the rest of the string is returned +// _mid=[_str,p,(l)] call KRON_StrMid +// +// � KRON_StrInStr - Tests whether string b is present in string a +// _found=[a,b] call KRON_StrInStr +// +// � KRON_StrIndex - Returns the position of string b in string a +// _index=[a,b] call KRON_StrIndex +// +// � KRON_StrUpper - Converts a string to uppercase characters +// _upper=[_str] call KRON_StrUpper +// +// � KRON_StrLower - Converts a string to lowercase characters +// _lower=[_str] call KRON_StrLower +// +// � KRON_Replace - Replaces every occurrence of string _old in string _str with string _new +// _index=[_str,_old,_new] call KRON_Replace +// +// � KRON_FindFlag - Checks a mixed array (_this) for the presence of a string (_str) +// _flg=[_this,_str] call KRON_FindFlag +// +// � KRON_getArg - Searches a mixed array (_this) for a matching string beginning with (_t), and returns the part after a separator (s) +// A default value can be defined as (_d). +// _arg=[_this,_t,(_d)] call KRON_getArg +// +// � KRON_getArgRev - Works like getArg, but search for the part *after* the colon, and return the part in front of it +// A default value can be defined as (_d). +// _arg=[_this,_t,(_d)] call KRON_getArgRev +// +// � KRON_Compare - Compares two elements and returns -1 if first is smaller, 1 if second is smaller, and 0 if equal +// If optional parameter "case" is given, capitalization is considered (upper before lowercase) +// _cmp=[_str1,_str2,("case")] call KRON_Compare +// +// � KRON_ArraySort - Sorts an array of strings in acsending order (Numbers before letters, uppercase before lowercase) +// If array is multi-dimensional, optional parameter (_idx) specifies which column is used for sorting +// If optional parameter "desc" is given, order is reversed +// If optional parameter "case" is given, capitalization is considered (upper before lowercase) +// _srt=[_arr,(_idx),("desc"),("case")] call KRON_ArraySort +// +// ========================================================================================================= + +KRON_StrToArray = { + private["_in","_i","_arr","_out"]; + _in=_this select 0; + _arr = toArray(_in); + _out=[]; + for "_i" from 0 to (count _arr)-1 do { + _out=_out+[toString([_arr select _i])]; + }; + _out +}; + +KRON_StrLeft = { + private["_in","_len","_arr","_out"]; + _in=_this select 0; + _len=(_this select 1)-1; + _arr=[_in] call KRON_StrToArray; + _out=""; + if (_len>=(count _arr)) then { + _out=_in; + } else { + for "_i" from 0 to _len do { + _out=_out + (_arr select _i); + }; + }; + _out +}; + +KRON_StrLen = { + private["_in","_arr","_len"]; + _in=_this select 0; + _arr=[_in] call KRON_StrToArray; + _len=count (_arr); + _len +}; + +KRON_StrRight = { + private["_in","_len","_arr","_i","_out"]; + _in=_this select 0; + _len=_this select 1; + _arr=[_in] call KRON_StrToArray; + _out=""; + if (_len>(count _arr)) then {_len=count _arr}; + for "_i" from ((count _arr)-_len) to ((count _arr)-1) do { + _out=_out + (_arr select _i); + }; + _out +}; + +KRON_StrMid = { + private["_in","_pos","_len","_arr","_i","_out"]; + _in=_this select 0; + _pos=abs(_this select 1); + _arr=[_in] call KRON_StrToArray; + _len=count(_arr); + if ((count _this)>2) then {_len=(_this select 2)}; + _out=""; + if ((_pos+_len)>=(count _arr)) then {_len=(count _arr)-_pos}; + if (_len>0) then { + for "_i" from _pos to (_pos+_len-1) do { + _out=_out + (_arr select _i); + }; + }; + _out +}; + +KRON_StrIndex = { + private["_hay","_ndl","_lh","_ln","_arr","_tmp","_i","_j","_out"]; + _hay=_this select 0; + _ndl=_this select 1; + _out=-1; + _i=0; + if (_hay == _ndl) exitWith {0}; + _lh=[_hay] call KRON_StrLen; + _ln=[_ndl] call KRON_StrLen; + if (_lh < _ln) exitWith {-1}; + _arr=[_hay] call KRON_StrToArray; + for "_i" from 0 to (_lh-_ln) do { + _tmp=""; + for "_j" from _i to (_i+_ln-1) do { + _tmp=_tmp + (_arr select _j); + }; + if (_tmp==_ndl) exitWith {_out=_i}; + }; + _out +}; + +KRON_StrInStr = { + private["_out"]; + _in=_this select 0; + _out=if (([_this select 0,_this select 1] call KRON_StrIndex)==-1) then {false} else {true}; + _out +}; + +KRON_Replace = { + private["_str","_old","_new","_out","_tmp","_jm","_la","_lo","_ln","_i"]; + _str=_this select 0; + _arr=toArray(_str); + _la=count _arr; + _old=_this select 1; + _new=_this select 2; + _na=[_new] call KRON_StrToArray; + _lo=[_old] call KRON_StrLen; + _ln=[_new] call KRON_StrLen; + _out=""; + for "_i" from 0 to (count _arr)-1 do { + _tmp=""; + if (_i <= _la-_lo) then { + for "_j" from _i to (_i+_lo-1) do { + _tmp=_tmp + toString([_arr select _j]); + }; + }; + if (_tmp==_old) then { + _out=_out+_new; + _i=_i+_lo-1; + } else { + _out=_out+toString([_arr select _i]); + }; + }; + _out +}; + +KRON_StrUpper = { + private["_in","_out"]; + _in=_this select 0; + _out=toUpper(_in); + _out +}; + +KRON_StrLower = { + private["_in","_out"]; + _in=_this select 0; + _out=toLower(_in); + _out +}; + +KRON_ArrayToUpper = { + private["_in","_i","_e","_out"]; + _in=_this select 0; + _out=[]; + if ((count _in)>0) then { + for "_i" from 0 to (count _in)-1 do { + _e=_in select _i; + if (_e isEqualType "") then { + _e=toUpper(_e); + }; + _out set [_i,_e]; + }; + }; + _out +}; + +KRON_Compare = { + private["_k","_n","_s","_i","_c","_t","_s1","_s2","_l1","_l2","_l"]; + _k=[_this,"CASE"] call KRON_findFlag; + _n=0; + _s=0; + for "_i" from 0 to 1 do { + _t=_this select _i; + switch (typeName _t) do { + case "SCALAR": {_n=1}; + case "BOOL": {_this set [_i,str(_t)]}; + case "SIDE": {_this set [_i,str(_t)]}; + case "STRING": {if !(_k) then {_this=[_this] call KRON_ArrayToUpper}}; + default {_n=-1}; + }; + }; + _s1 = _this select 0; + _s2 = _this select 1; + if (_n!=0) exitWith { + if (_n==1) then { + if (_s1<_s2) then {_s=-1} else {if (_s1>_s2) then {_s=1}}; + }; + _s + }; + _s1 = toArray(_s1); + _s2 = toArray(_s2); + _l1 = count _s1; + _l2 = count _s2; + _l=if (_l1<_l2) then {_l1} else {_l2}; + for "_i" from 0 to _l-1 do { + if ((_s1 select _i)<(_s2 select _i)) then { + _s=-1; + _i=_l; + } else { + if ((_s1 select _i)>(_s2 select _i)) then { + _s=1; + _i=_l; + }; + }; + }; + if (_s==0) then { + if (_l1<_l2) then { + _s=-1; + } else { + if (_l1>_l2) then {_s=1}; + }; + }; + _s +}; + +KRON_ArraySort = { + private["_a","_d","_k","_s","_i","_vo","_v1","_v2","_j","_c","_x"]; + _a = +(_this select 0); + _d = if ([_this,"DESC"] call KRON_findFlag) then {-1} else {1}; + _k = if ([_this,"CASE"] call KRON_findFlag) then {"CASE"} else {"nocase"}; + _s = -1; + if ((_a select 0) isEqualType []) then { + _s=0; + if (((count _this)>1) && ((_this select 1) isEqualType 0)) then { + _s=_this select 1; + }; + }; + for "_i" from 0 to (count _a)-1 do { + _vo = _a select _i; + _v1 = _vo; + if (_s>-1) then {_v1=_v1 select _s}; + _j = 0; + for [{_j=_i-1},{_j>=0},{_j=_j-1}] do { + _v2 = _a select _j; + if (_s>-1) then {_v2=_v2 select _s}; + _c=[_v2,_v1,_k] call KRON_Compare; + if (_c!=_d) exitWith {}; + _a set [_j+1,_a select _j]; + }; + _a set [_j+1,_vo]; + }; + _a +}; + +KRON_findFlag = { + private["_in","_flg","_arr","_out"]; + _in=_this select 0; + _flg=toUpper(_this select 1); + _arr=[_in] call KRON_ArrayToUpper; + _out=_flg in _arr; + _out +}; + +KRON_getArg = { + private["_in","_flg","_fl","_def","_arr","_i","_j","_as","_aa","_org","_p","_out"]; + _in=_this select 0; + _flg=toUpper(_this select 1); + _fl=[_flg] call KRON_StrLen; + _out=""; + if ((count _this)>2) then {_out=_this select 2}; + _arr=[_in] call KRON_ArrayToUpper; + if ((count _arr)>0) then { + for "_i" from 0 to (count _in)-1 do { + _as = _arr select _i; + if (_as isEqualType "") then { + _aa = [_as] call KRON_StrToArray; + _p = _aa find ":"; + if (_p==_fl) then { + if (([_as,_fl] call KRON_StrLeft)==_flg) then { + _org = _in select _i; + _out=[_org,_p+1] call KRON_StrMid; + }; + }; + }; + }; + }; + _out +}; + + +KRON_getArgRev = { + private["_in","_flg","_fl","_def","_arr","_i","_j","_as","_aa","_org","_p","_out"]; + _in=_this select 0; + _flg=toUpper(_this select 1); + _fl=[_flg] call KRON_StrLen; + _out=""; + if ((count _this)>2) then {_out=_this select 2}; + _arr=[_in] call KRON_ArrayToUpper; + if ((count _arr)>0) then { + for "_i" from 0 to (count _in)-1 do { + _as = _arr select _i; + if (_as isEqualType "") then { + _aa = [_as] call KRON_StrToArray; + _p = _aa find ":"; + if (_p+1==(count _aa)-_fl) then { + if (([_as,_p+1] call KRON_StrMid)==_flg) then { + _org = _in select _i; + _out=[_org,_p] call KRON_StrLeft; + }; + }; + }; + }; + }; + _out +}; diff --git a/life_hc/MySQL/Gangs/fn_insertGang.sqf b/life_hc/MySQL/Gangs/fn_insertGang.sqf new file mode 100644 index 00000000..c2dbd4de --- /dev/null +++ b/life_hc/MySQL/Gangs/fn_insertGang.sqf @@ -0,0 +1,70 @@ +#include "\life_hc\hc_macros.hpp" +/* + File: fn_insertGang.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Inserts the gang into the database. +*/ +private ["_query","_queryResult","_gangMembers","_group"]; +params [ + ["_ownerID",objNull,[objNull]], + ["_uid","",[""]], + ["_gangName","",[""]] +]; +_group = group _ownerID; + +if (isNull _ownerID || _uid isEqualTo "" || _gangName isEqualTo "") exitWith {}; //Fail + +_gangName = [_gangName] call HC_fnc_mresString; +_query = format["SELECT id FROM gangs WHERE name='%1' AND active='1'",_gangName]; + +_queryResult = [_query,2] call HC_fnc_asyncCall; + +//Check to see if the gang name already exists. +if (!(count _queryResult isEqualTo 0)) exitWith { + [1,"There is already a gang created with that name please pick another name."] remoteExecCall ["life_fnc_broadcast",_ownerID]; + life_action_gangInUse = nil; + _ownerID publicVariableClient "life_action_gangInUse"; +}; + +_query = format["SELECT id FROM gangs WHERE members LIKE '%2%1%2' AND active='1'",_uid,"%"]; + +_queryResult = [_query,2] call HC_fnc_asyncCall; + +//Check to see if this person already owns or belongs to a gang. +if (!(count _queryResult isEqualTo 0)) exitWith { + [1,"You are currently already active in a gang, please leave the gang first."] remoteExecCall ["life_fnc_broadcast",_ownerID]; + life_action_gangInUse = nil; + _ownerID publicVariableClient "life_action_gangInUse"; +}; + +//Check to see if a gang with that name already exists but is inactive. +_query = format["SELECT id, active FROM gangs WHERE name='%1' AND active='0'",_gangName]; + +_queryResult = [_query,2] call HC_fnc_asyncCall; +_gangMembers = [[_uid]] call HC_fnc_mresArray; + +if (!(count _queryResult isEqualTo 0)) then { + _query = format["UPDATE gangs SET active='1', owner='%1',members='%2' WHERE id='%3'",_uid,_gangMembers,(_queryResult select 0)]; +} else { + _query = format["INSERT INTO gangs (owner, name, members) VALUES('%1','%2','%3')",_uid,_gangName,_gangMembers]; +}; + +_queryResult = [_query,1] call HC_fnc_asyncCall; + +_group setVariable ["gang_name",_gangName,true]; +_group setVariable ["gang_owner",_uid,true]; +_group setVariable ["gang_bank",0,true]; +_group setVariable ["gang_maxMembers",8,true]; +_group setVariable ["gang_members",[_uid],true]; +[_group] remoteExecCall ["life_fnc_gangCreated",_ownerID]; + +sleep 0.35; +_query = format["SELECT id FROM gangs WHERE owner='%1' AND active='1'",_uid]; + +_queryResult = [_query,2] call HC_fnc_asyncCall; + +_group setVariable ["gang_id",(_queryResult select 0),true]; diff --git a/life_hc/MySQL/Gangs/fn_queryPlayerGang.sqf b/life_hc/MySQL/Gangs/fn_queryPlayerGang.sqf new file mode 100644 index 00000000..cf3a2409 --- /dev/null +++ b/life_hc/MySQL/Gangs/fn_queryPlayerGang.sqf @@ -0,0 +1,21 @@ +/* + File: fn_queryPlayerGang.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Queries to see if the player belongs to any gang. +*/ +private["_query","_queryResult"]; + +_query = format["SELECT id, owner, name, maxmembers, bank, members FROM gangs WHERE active='1' AND members LIKE '%2%1%2'",_this,"%"]; + +_queryResult = [_query,2] call HC_fnc_asyncCall; + +if (count _queryResult != 0) then { + _tmp = [_queryResult select 5] call HC_fnc_mresToArray; + if (_tmp isEqualType "") then {_tmp = call compile format["%1",_tmp];}; + _queryResult set[5, _tmp]; +}; +missionNamespace setVariable [format["gang_%1",_this],_queryResult]; diff --git a/life_hc/MySQL/Gangs/fn_removeGang.sqf b/life_hc/MySQL/Gangs/fn_removeGang.sqf new file mode 100644 index 00000000..a6364513 --- /dev/null +++ b/life_hc/MySQL/Gangs/fn_removeGang.sqf @@ -0,0 +1,26 @@ +#include "\life_hc\hc_macros.hpp" +/* + File: fn_removeGang.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Blah +*/ +private["_group","_groupID"]; +_group = param [0,grpNull,[grpNull]]; +if (isNull _group) exitWith {}; + +_groupID = _group getVariable ["gang_id",-1]; +if (_groupID isEqualTo -1) exitWith {}; + +[format["UPDATE gangs SET active='0' WHERE id='%1'",_groupID],1] call HC_fnc_asyncCall; + +_result = [format["SELECT id FROM gangs WHERE active='1' AND id='%1'",_groupID],2] call HC_fnc_asyncCall; +if (count _result isEqualTo 0) then { + [_group] remoteExecCall ["life_fnc_gangDisbanded",(units _group)]; + sleep 5; + deleteGroup _group; +}; +["CALL deleteOldGangs",1] call DB_fnc_asyncCall; diff --git a/life_hc/MySQL/Gangs/fn_updateGang.sqf b/life_hc/MySQL/Gangs/fn_updateGang.sqf new file mode 100644 index 00000000..ddb730c3 --- /dev/null +++ b/life_hc/MySQL/Gangs/fn_updateGang.sqf @@ -0,0 +1,63 @@ +/* + File: fn_updateGang.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Updates the gang information? +*/ +private["_groupID","_bank","_maxMembers","_members","_membersFinal","_query","_owner"]; +params [ + ["_mode",0,[0]], + ["_group",grpNull,[grpNull]] +]; + +if (isNull _group) exitWith {}; //FAIL + +_groupID = _group getVariable ["gang_id",-1]; +if (_groupID isEqualTo -1) exitWith {}; + +switch (_mode) do { + case 0: { + _bank = [(_group getVariable ["gang_bank",0])] call HC_fnc_numberSafe; + _maxMembers = _group getVariable ["gang_maxMembers",8]; + _members = [(_group getVariable "gang_members")] call HC_fnc_mresArray; + _owner = _group getVariable ["gang_owner",""]; + if (_owner isEqualTo "") exitWith {}; + + _query = format["UPDATE gangs SET bank='%1', maxmembers='%2', owner='%3' WHERE id='%4'",_bank,_maxMembers,_owner,_groupID]; + }; + + case 1: { + _query = format["UPDATE gangs SET bank='%1' WHERE id='%2'",([(_group getVariable ["gang_bank",0])] call HC_fnc_numberSafe),_groupID]; + }; + + case 2: { + _query = format["UPDATE gangs SET maxmembers='%1' WHERE id='%2'",(_group getVariable ["gang_maxMembers",8]),_groupID]; + }; + + case 3: { + _owner = _group getVariable ["gang_owner",""]; + if (_owner isEqualTo "") exitWith {}; + _query = format["UPDATE gangs SET owner='%1' WHERE id='%2'",_owner,_groupID]; + }; + + case 4: { + _members = _group getVariable "gang_members"; + if (count _members > (_group getVariable ["gang_maxMembers",8])) then { + _membersFinal = []; + for "_i" from 0 to _maxMembers -1 do { + _membersFinal pushBack (_members select _i); + }; + } else { + _membersFinal = _group getVariable "gang_members"; + }; + _membersFinal = [_membersFinal] call HC_fnc_mresArray; + _query = format["UPDATE gangs SET members='%1' WHERE id='%2'",_membersFinal,_groupID]; + }; +}; + +if (!isNil "_query") then { + [_query,1] call HC_fnc_asyncCall; +}; diff --git a/life_hc/MySQL/General/fn_asyncCall.sqf b/life_hc/MySQL/General/fn_asyncCall.sqf new file mode 100644 index 00000000..8f761d3e --- /dev/null +++ b/life_hc/MySQL/General/fn_asyncCall.sqf @@ -0,0 +1,56 @@ +#include "\life_hc\hc_macros.hpp" +/* + File: fn_asyncCall.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Commits an asynchronous call to ExtDB + + Parameters: + 0: STRING (Query to be ran). + 1: INTEGER (1 = ASYNC + not return for update/insert, 2 = ASYNC + return for query's). + 3: BOOL (True to return a single array, false to return multiple entries mainly for garage). +*/ +private["_queryStmt","_mode","_multiarr","_queryResult","_key","_return","_loop"]; +params [ + ["_queryStmt","",[""]], + ["_mode",1,[0]], + ["_multiarr",false,[false]] +]; + +_key = EXTDB format["%1:%2:%3",_mode,FETCH_CONST(life_sql_id),_queryStmt]; + +if (_mode isEqualTo 1) exitWith {true}; + +_key = call compile format["%1",_key]; +_key = (_key select 1); +_queryResult = EXTDB format["4:%1", _key]; + +//Make sure the data is received +if (_queryResult isEqualTo "[3]") then { + for "_i" from 0 to 1 step 0 do { + if (!(_queryResult isEqualTo "[3]")) exitWith {}; + _queryResult = EXTDB format["4:%1", _key]; + }; +}; + +if (_queryResult isEqualTo "[5]") then { + _loop = true; + for "_i" from 0 to 1 step 0 do { // extDB2 returned that result is Multi-Part Message + _queryResult = ""; + for "_i" from 0 to 1 step 0 do { + _pipe = EXTDB format["5:%1", _key]; + if (_pipe isEqualTo "") exitWith {_loop = false}; + _queryResult = _queryResult + _pipe; + }; + if (!_loop) exitWith {}; + }; +}; +_queryResult = call compile _queryResult; +if ((_queryResult select 0) isEqualTo 0) exitWith {diag_log format ["extDB2: Protocol Error: %1", _queryResult]; []}; +_return = (_queryResult select 1); +if (!_multiarr && count _return > 0) then { + _return = (_return select 0); +}; + +_return; diff --git a/life_hc/MySQL/General/fn_bool.sqf b/life_hc/MySQL/General/fn_bool.sqf new file mode 100644 index 00000000..77cd3048 --- /dev/null +++ b/life_hc/MySQL/General/fn_bool.sqf @@ -0,0 +1,27 @@ +/* + File: fn_bool.sqf + Author: TAW_Tonic + + Description: + Handles bool conversion for MySQL since MySQL doesn't support 'true' or 'false' + instead MySQL uses Tinyint for BOOLEAN (0 = false, 1 = true) +*/ +params [ + ["_bool",0,[false,0]], + ["_mode",0,[0]] +]; + +switch (_mode) do { + case 0: { + if (_bool isEqualType 0) exitWith {0}; + if (_bool) then {1} else {0}; + }; + + case 1: { + if (!(_bool isEqualType 0)) exitWith {false}; + switch (_bool) do { + case 0: {false}; + case 1: {true}; + }; + }; +}; diff --git a/life_hc/MySQL/General/fn_cleanup.sqf b/life_hc/MySQL/General/fn_cleanup.sqf new file mode 100644 index 00000000..f91241a7 --- /dev/null +++ b/life_hc/MySQL/General/fn_cleanup.sqf @@ -0,0 +1,69 @@ +#include "\life_hc\hc_macros.hpp" +/* + File: fn_cleanup.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Server-side cleanup script on vehicles. + Sort of a lame way but whatever. +*/ +private "_deleted"; +_deleted = false; +for "_i" from 0 to 1 step 0 do { + private["_veh","_units","_fuel"]; + sleep (60 * 60); + { + _protect = false; + _veh = _x; + _vehicleClass = getText(configFile >> "CfgVehicles" >> (typeOf _veh) >> "vehicleClass"); + _fuel = 1; + + if (!isNil {_veh getVariable "NPC"} && {_veh getVariable "NPC"}) then {_protect = true;}; + + if ((_vehicleClass in ["Car","Air","Ship","Armored","Submarine"]) && {!(_protect)}) then { + if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then {_fuel = (fuel _veh);}; + _dbInfo = _veh getVariable ["dbInfo",[]]; + _units = {(_x distance _veh < 300)} count playableUnits; + if (crew _x isEqualTo []) then { + switch (true) do { + case ((_x getHitPointDamage "HitEngine") > 0.7 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; + case ((_x getHitPointDamage "HitLFWheel") > 0.98 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; + case ((_x getHitPointDamage "HitLF2Wheel") > 0.98 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; + case ((_x getHitPointDamage "HitRFWheel") > 0.98 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; + case ((_x getHitPointDamage "HitRF2Wheel") > 0.98 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; + case (_units isEqualTo 0): {deleteVehicle _x; _deleted = true;}; + }; + }; + + if (_deleted) then { + waitUntil {isNull _veh}; + _deleted = false; + }; + + if (isNull _veh) then { + if (count _dbInfo > 0) then { + _uid = _dbInfo select 0; + _plate = _dbInfo select 1; + + _query = format["UPDATE vehicles SET active='0', fuel='%3' WHERE pid='%1' AND plate='%2'",_uid,_plate,_fuel]; + + [_query,1] call HC_fnc_asyncCall; + }; + }; + }; + } forEach vehicles; + + sleep (3 * 60); //3 minute cool-down before next cycle. + { + if ((typeOf _x) in ["Land_BottlePlastic_V1_F","Land_TacticalBacon_F","Land_Can_V3_F","Land_CanisterFuel_F", "Land_Can_V3_F","Land_Money_F","Land_Suitcase_F"]) then { + deleteVehicle _x; + }; + } forEach (allMissionObjects "Thing"); + + sleep (2 * 60); + { + deleteVehicle _x; + } forEach (allMissionObjects "GroundWeaponHolder"); +}; diff --git a/life_hc/MySQL/General/fn_huntingZone.sqf b/life_hc/MySQL/General/fn_huntingZone.sqf new file mode 100644 index 00000000..adae1c45 --- /dev/null +++ b/life_hc/MySQL/General/fn_huntingZone.sqf @@ -0,0 +1,55 @@ +/* + File: fn_huntingZone.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Spawns animals around the marker when a player + is near. Very basic WIP + + TODO: + Change it up so animals repopulate over time. +*/ +private["_animalList","_dist","_radius","_zoneName","_unitsNear","_animalsActive"]; +params [ + ["_zoneName","",[""]], + ["_maxAnimals",10,[0]] +]; + +if (_zoneName isEqualTo "") exitWith {}; +_animalList = ["Sheep_random_F","Goat_random_F","Hen_random_F","Cock_random_F"]; +_radius = (getMarkerSize _zoneName) select 0; +_dist = _radius + 100; +_zone = getMarkerPos _zoneName; + +if (!isNil "animals" && {count animals != 0}) then { + _maxAnimals = _maxAnimals - count(animals); +} else { + animals = []; +}; + +_unitsNear = false; +_animalsActive = false; +for "_i" from 0 to 1 step 0 do { + {if ((_x distance _zone) < _dist) exitWith {_unitsNear = true;}; _unitsNear = false;} forEach playableUnits; + if (_unitsNear && !_animalsActive) then { + _animalsActive = true; + for "_i" from 1 to _maxAnimals do { + _animalClass = selectRandom _animalList; + _position = [((_zone select 0) - _radius + random (_radius * 2)), ((_zone select 1) - _radius + random (_radius * 2)),0]; + _animal = createAgent [_animalClass,_position,[],0,"FORM"]; + _animal setDir (random 360); + animals pushBack _animal; + }; + } else { + if (!_unitsNear && _animalsActive) then { + {deleteVehicle _x;} forEach animals; + animals = []; + _animalsActive = false; + }; + }; + sleep (3 + random 2); + _maxAnimals = param [1,10,[0]]; + publicVariableServer "animals"; +}; diff --git a/life_hc/MySQL/General/fn_insertRequest.sqf b/life_hc/MySQL/General/fn_insertRequest.sqf new file mode 100644 index 00000000..f3bd0503 --- /dev/null +++ b/life_hc/MySQL/General/fn_insertRequest.sqf @@ -0,0 +1,50 @@ +#include "\life_hc\hc_macros.hpp" +/* + File: fn_insertRequest.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Does something with inserting... Don't have time for + descriptions... Need to write it... +*/ +private["_queryResult","_query","_alias"]; +params [ + "_uid", + "_name", + ["_money",-1,[0]], + ["_bank",-1,[0]], + ["_returnToSender",objNull,[objNull]] +]; + +//Error checks +if ((_uid isEqualTo "") || (_name isEqualTo "")) exitWith {}; +if (isNull _returnToSender) exitWith {}; + +_query = format["SELECT playerid, name FROM players WHERE playerid='%1'",_uid]; + +_tickTime = diag_tickTime; +_queryResult = [_query,2] call HC_fnc_asyncCall; + +//Double check to make sure the client isn't in the database... +if (_queryResult isEqualType "") exitWith {[] remoteExecCall ["SOCK_fnc_dataQuery",_returnToSender];}; //There was an entry! +if (count _queryResult != 0) exitWith {[] remoteExecCall ["SOCK_fnc_dataQuery",_returnToSender];}; + +//Clense and prepare some information. +_name = [_name] call HC_fnc_mresString; //Clense the name of bad chars. +_alias = [[_name]] call HC_fnc_mresArray; +_money = [_money] call HC_fnc_numberSafe; +_bank = [_bank] call HC_fnc_numberSafe; + +//Prepare the query statement.. +_query = format["INSERT INTO players (playerid, name, cash, bankacc, aliases, cop_licenses, med_licenses, civ_licenses, civ_gear, cop_gear, med_gear) VALUES('%1', '%2', '%3', '%4', '%5','""[]""','""[]""','""[]""','""[]""','""[]""','""[]""')", + _uid, + _name, + _money, + _bank, + _alias +]; + +[_query,1] call HC_fnc_asyncCall; +[] remoteExecCall ["SOCK_fnc_dataQuery",_returnToSender]; diff --git a/life_hc/MySQL/General/fn_insertVehicle.sqf b/life_hc/MySQL/General/fn_insertVehicle.sqf new file mode 100644 index 00000000..63574df9 --- /dev/null +++ b/life_hc/MySQL/General/fn_insertVehicle.sqf @@ -0,0 +1,25 @@ +/* + File: fn_insertVehicle.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Inserts the vehicle into the database +*/ +private["_query","_sql"]; +params [ + "_uid", + "_side", + "_type", + "_className", + ["_color",-1,[0]], + ["_plate",-1,[0]] +]; + +//Stop bad data being passed. +if (_uid isEqualTo "" || _side isEqualTo "" || _type isEqualTo "" || _className isEqualTo "" || _color isEqualTo -1 || _plate isEqualTo -1) exitWith {}; + +_query = format["INSERT INTO vehicles (side, classname, type, pid, alive, active, inventory, color, plate, gear, damage) VALUES ('%1', '%2', '%3', '%4', '1','1','""[[],0]""', '%5', '%6','""[]""','""[]""')",_side,_className,_type,_uid,_color,_plate]; + +[_query,1] call HC_fnc_asyncCall; diff --git a/life_hc/MySQL/General/fn_mresArray.sqf b/life_hc/MySQL/General/fn_mresArray.sqf new file mode 100644 index 00000000..772d9d26 --- /dev/null +++ b/life_hc/MySQL/General/fn_mresArray.sqf @@ -0,0 +1,26 @@ +/* + File: fn_mresArray.sqf + Author: Bryan "Tonic" Boardwine"; + + Description: + Acts as a mres (MySQL Real Escape) for arrays so they + can be properly inserted into the database without causing + any problems. The return method is 'hacky' but it's effective. +*/ +private _array = param [0,[],[[]]]; +_array = str(str(_array)); +_array = toArray(_array); + +for "_i" from 0 to (count _array)-1 do +{ + _sel = _array select _i; + if ((_i != 0 && _i != ((count _array)-1))) then + { + if (_sel isEqualTo 34) then + { + _array set[_i,96]; + }; + }; +}; + +toString(_array); diff --git a/life_hc/MySQL/General/fn_mresString.sqf b/life_hc/MySQL/General/fn_mresString.sqf new file mode 100644 index 00000000..ee204f97 --- /dev/null +++ b/life_hc/MySQL/General/fn_mresString.sqf @@ -0,0 +1,20 @@ +/* + File: fn_mresString.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Makes the string safe to be passed to MySQL (strips various stuff). +*/ +private _string = param [0,"",[""]]; +private _filter = "'/\`:|;,{}-""<>"; + +_string = toArray _string; //Blow it up to an array +_filter = toArray _filter; //Blow it up to an array + +{ + if (_x in _filter) then { + _string deleteAt _forEachIndex; + }; +} forEach _string; + +toString _string; diff --git a/life_hc/MySQL/General/fn_mresToArray.sqf b/life_hc/MySQL/General/fn_mresToArray.sqf new file mode 100644 index 00000000..9ff6a5ed --- /dev/null +++ b/life_hc/MySQL/General/fn_mresToArray.sqf @@ -0,0 +1,25 @@ +/* + File: fn_mresToArray.sqf + Author: Bryan "Tonic" Boardwine"; + + Description: + Acts as a mres (MySQL Real Escape) for arrays so they + can be properly inserted into the database without causing + any problems. The return method is 'hacky' but it's effective. +*/ +private _array = param [0,"",[""]]; +if (_array isEqualTo "") exitWith {[]}; +_array = toArray(_array); + +for "_i" from 0 to (count _array)-1 do +{ + _sel = _array select _i; + if (_sel == 96) then + { + _array set[_i,39]; + }; +}; + +_array = toString(_array); +_array = call compile format["%1", _array]; +_array; diff --git a/life_hc/MySQL/General/fn_numberSafe.sqf b/life_hc/MySQL/General/fn_numberSafe.sqf new file mode 100644 index 00000000..4d621ccb --- /dev/null +++ b/life_hc/MySQL/General/fn_numberSafe.sqf @@ -0,0 +1,29 @@ +/* + File: fn_numberSafe.sqf + Author: Karel Moricky + + Description: + Convert a number into string (avoiding scientific notation) + + Parameter(s): + _this: NUMBER + + Returns: + STRING +*/ +private ["_number","_mod","_digots","_digitsCount","_modBase","_numberText"]; +params [ + ["_number",0,[0]], + ["_mod",3,[0]] +]; + +_digits = _number call bis_fnc_numberDigits; +_digitsCount = count _digits - 1; + +_modBase = _digitsCount % _mod; +_numberText = ""; +{ + _numberText = _numberText + str _x; + if ((_foreachindex - _modBase) % (_mod) isEqualTo 0 && _foreachindex != _digitsCount) then {_numberText = _numberText + "";}; +} forEach _digits; +_numberText diff --git a/life_hc/MySQL/General/fn_queryRequest.sqf b/life_hc/MySQL/General/fn_queryRequest.sqf new file mode 100644 index 00000000..f927b8e0 --- /dev/null +++ b/life_hc/MySQL/General/fn_queryRequest.sqf @@ -0,0 +1,161 @@ +#include "\life_hc\hc_macros.hpp" +/* + File: fn_queryRequest.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Handles the incoming request and sends an asynchronous query + request to the database. + + Return: + ARRAY - If array has 0 elements it should be handled as an error in client-side files. + STRING - The request had invalid handles or an unknown error and is logged to the RPT. +*/ +private["_uid","_side","_query","_queryResult","_tickTime","_tmp"]; +params [ + ["_uid","",[""]], + ["_side",sideUnknown,[civilian]], + ["_ownerID",objNull,[objNull]] +]; + +if (isNull _ownerID) exitWith {}; + +_query = switch (_side) do { + // West - 11 entries returned + case west: {format["SELECT playerid, name, cash, bankacc, adminlevel, donorlevel, cop_licenses, coplevel, cop_gear, blacklist, cop_stats, playtime FROM players WHERE playerid='%1'",_uid];}; + // Civilian - 12 entries returned + case civilian: {format["SELECT playerid, name, cash, bankacc, adminlevel, donorlevel, civ_licenses, arrested, civ_gear, civ_stats, civ_alive, civ_position, playtime FROM players WHERE playerid='%1'",_uid];}; + // Independent - 10 entries returned + case independent: {format["SELECT playerid, name, cash, bankacc, adminlevel, donorlevel, med_licenses, mediclevel, med_gear, med_stats, playtime FROM players WHERE playerid='%1'",_uid];}; +}; + + +_tickTime = diag_tickTime; +_queryResult = [_query,2] call HC_fnc_asyncCall; + +if (_queryResult isEqualType "") exitWith { + [] remoteExecCall ["SOCK_fnc_insertPlayerInfo",_ownerID]; +}; + +if (_queryResult isEqualTo []) exitWith { + [] remoteExecCall ["SOCK_fnc_insertPlayerInfo",_ownerID]; +}; + +//Blah conversion thing from a2net->extdb +_tmp = _queryResult select 2; +_queryResult set[2,[_tmp] call HC_fnc_numberSafe]; +_tmp = _queryResult select 3; +_queryResult set[3,[_tmp] call HC_fnc_numberSafe]; + +//Parse licenses (Always index 6) +_new = [(_queryResult select 6)] call HC_fnc_mresToArray; +if (_new isEqualType "") then {_new = call compile format["%1", _new];}; +_queryResult set[6,_new]; + +//Convert tinyint to boolean +_old = _queryResult select 6; +for "_i" from 0 to (count _old)-1 do { + _data = _old select _i; + _old set[_i,[_data select 0, ([_data select 1,1] call HC_fnc_bool)]]; +}; + +_queryResult set[6,_old]; + +_new = [(_queryResult select 8)] call HC_fnc_mresToArray; +if (_new isEqualType "") then {_new = call compile format["%1", _new];}; +_queryResult set[8,_new]; +//Parse data for specific side. +switch (_side) do { + case west: { + _queryResult set[9,([_queryResult select 9,1] call HC_fnc_bool)]; + + //Parse Stats + _new = [(_queryResult select 10)] call HC_fnc_mresToArray; + if (_new isEqualType "") then {_new = call compile format["%1", _new];}; + _queryResult set[10,_new]; + + //Playtime + _new = [(_queryResult select 11)] call HC_fnc_mresToArray; + if (_new isEqualType "") then {_new = call compile format["%1", _new];}; + _index = TON_fnc_playtime_values_request find [_uid, _new]; + if (_index != -1) then { + TON_fnc_playtime_values_request set[_index,-1]; + TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1]; + TON_fnc_playtime_values_request pushBack [_uid, _new]; + } else { + TON_fnc_playtime_values_request pushBack [_uid, _new]; + }; + _new = _new select 0; + [_uid, _new] call HC_fnc_setPlayTime; + }; + + case civilian: { + _queryResult set[7,([_queryResult select 7,1] call HC_fnc_bool)]; + + //Parse Stats + _new = [(_queryResult select 9)] call HC_fnc_mresToArray; + if (_new isEqualType "") then {_new = call compile format["%1", _new];}; + _queryResult set[9,_new]; + + //Position + _queryResult set[10,([_queryResult select 10,1] call HC_fnc_bool)]; + _new = [(_queryResult select 11)] call HC_fnc_mresToArray; + if (_new isEqualType "") then {_new = call compile format["%1", _new];}; + _queryResult set[11,_new]; + + //Playtime + _new = [(_queryResult select 12)] call HC_fnc_mresToArray; + if (_new isEqualType "") then {_new = call compile format["%1", _new];}; + _index = TON_fnc_playtime_values_request find [_uid, _new]; + if (_index != -1) then { + TON_fnc_playtime_values_request set[_index,-1]; + TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1]; + TON_fnc_playtime_values_request pushBack [_uid, _new]; + } else { + TON_fnc_playtime_values_request pushBack [_uid, _new]; + }; + _new = _new select 2; + [_uid, _new] call HC_fnc_setPlayTime; + + _houseData = _uid spawn HC_fnc_fetchPlayerHouses; + waitUntil {scriptDone _houseData}; + _queryResult pushBack (missionNamespace getVariable [format["houses_%1",_uid],[]]); + _gangData = _uid spawn HC_fnc_queryPlayerGang; + waitUntil{scriptDone _gangData}; + _queryResult pushBack (missionNamespace getVariable [format["gang_%1",_uid],[]]); + }; + + case independent: { + //Parse Stats + _new = [(_queryResult select 9)] call HC_fnc_mresToArray; + if (_new isEqualType "") then {_new = call compile format["%1", _new];}; + _queryResult set[9,_new]; + + //Playtime + _new = [(_queryResult select 10)] call HC_fnc_mresToArray; + if (_new isEqualType "") then {_new = call compile format["%1", _new];}; + _index = TON_fnc_playtime_values_request find [_uid, _new]; + if (_index != -1) then { + TON_fnc_playtime_values_request set[_index,-1]; + TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1]; + TON_fnc_playtime_values_request pushBack [_uid, _new]; + } else { + TON_fnc_playtime_values_request pushBack [_uid, _new]; + }; + _new = _new select 1; + [_uid, _new] call HC_fnc_setPlayTime; + }; +}; + +publicVariable "TON_fnc_playtime_values_request"; + +life_keyreceived = false; +life_keyreceivedvar = []; +[_uid,_side] remoteExecCall ["TON_fnc_recupKeyForHC",RSERV]; +waitUntil {life_keyreceived}; +_keyArr = life_keyreceivedvar; +_queryResult set[15,_keyArr]; + +_queryResult remoteExec ["SOCK_fnc_requestReceived",_ownerID]; diff --git a/life_hc/MySQL/General/fn_receivekeyofServer.sqf b/life_hc/MySQL/General/fn_receivekeyofServer.sqf new file mode 100644 index 00000000..58a01842 --- /dev/null +++ b/life_hc/MySQL/General/fn_receivekeyofServer.sqf @@ -0,0 +1,14 @@ +#include "\life_hc\hc_macros.hpp" +/* + File: fn_receivekeyofServer.sqf + Author: NiiRoZz + + This file is for Nanou's HeadlessClient. + + Description: + Recup the key of player when reconnect +*/ +private["_keyArr","_uid","_side"]; +_keyArr = _this select 0; +life_keyreceivedvar = _keyArr; +life_keyreceived = true; diff --git a/life_hc/MySQL/General/fn_updatePartial.sqf b/life_hc/MySQL/General/fn_updatePartial.sqf new file mode 100644 index 00000000..1ff88910 --- /dev/null +++ b/life_hc/MySQL/General/fn_updatePartial.sqf @@ -0,0 +1,90 @@ +/* + File: fn_updatePartial.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Takes partial data of a player and updates it, this is meant to be + less network intensive towards data flowing through it for updates. +*/ +private["_uid","_side","_value","_value1","_value2","_mode","_query"]; +params [ + ["_uid","",[""]], + ["_side",sideUnknown,[civilian]] +]; +_mode = param [3,-1,[0]]; + +if (_uid isEqualTo "" || _side isEqualTo sideUnknown) exitWith {}; //Bad. +_query = ""; + +switch (_mode) do { + case 0: { + _value = param [2,0,[0]]; + _value = [_value] call HC_fnc_numberSafe; + _query = format["UPDATE players SET cash='%1' WHERE playerid='%2'",_value,_uid]; + }; + + case 1: { + _value = param [2,0,[0]]; + _value = [_value] call HC_fnc_numberSafe; + _query = format["UPDATE players SET bankacc='%1' WHERE playerid='%2'",_value,_uid]; + }; + + case 2: { + _value = param [2,[],[[]]]; + //Does something license related but I can't remember I only know it's important? + for "_i" from 0 to count(_value)-1 do { + _bool = [(_value select _i) select 1] call HC_fnc_bool; + _value set[_i,[(_value select _i) select 0,_bool]]; + }; + _value = [_value] call HC_fnc_mresArray; + switch (_side) do { + case west: {_query = format["UPDATE players SET cop_licenses='%1' WHERE playerid='%2'",_value,_uid];}; + case civilian: {_query = format["UPDATE players SET civ_licenses='%1' WHERE playerid='%2'",_value,_uid];}; + case independent: {_query = format["UPDATE players SET med_licenses='%1' WHERE playerid='%2'",_value,_uid];}; + }; + }; + + case 3: { + _value = param [2,[],[[]]]; + _value = [_value] call HC_fnc_mresArray; + switch (_side) do { + case west: {_query = format["UPDATE players SET cop_gear='%1' WHERE playerid='%2'",_value,_uid];}; + case civilian: {_query = format["UPDATE players SET civ_gear='%1' WHERE playerid='%2'",_value,_uid];}; + case independent: {_query = format["UPDATE players SET med_gear='%1' WHERE playerid='%2'",_value,_uid];}; + }; + }; + + case 4: { + _value = param [2,false,[true]]; + _value = [_value] call HC_fnc_bool; + _value2 = param [4,[],[[]]]; + _value2 = if (count _value2 isEqualTo 3) then {_value2} else {[0,0,0]}; + _value2 = [_value2] call HC_fnc_mresArray; + _query = format["UPDATE players SET civ_alive='%1', civ_position='%2' WHERE playerid='%3'",_value,_value2,_uid]; + }; + + case 5: { + _value = param [2,false,[true]]; + _value = [_value] call HC_fnc_bool; + _query = format["UPDATE players SET arrested='%1' WHERE playerid='%2'",_value,_uid]; + }; + + case 6: { + _value1 = param [2,0,[0]]; + _value2 = param [4,0,[0]]; + _value1 = [_value1] call HC_fnc_numberSafe; + _value2 = [_value2] call HC_fnc_numberSafe; + _query = format["UPDATE players SET cash='%1', bankacc='%2' WHERE playerid='%3'",_value1,_value2,_uid]; + }; + + case 7: { + _array = param [2,[],[[]]]; + [_uid,_side,_array,0] remoteExecCall ["TON_fnc_keyManagement",RSERV]; + }; +}; + +if (_query isEqualTo "") exitWith {}; + +[_query,1] call HC_fnc_asyncCall; diff --git a/life_hc/MySQL/General/fn_updateRequest.sqf b/life_hc/MySQL/General/fn_updateRequest.sqf new file mode 100644 index 00000000..683eade7 --- /dev/null +++ b/life_hc/MySQL/General/fn_updateRequest.sqf @@ -0,0 +1,69 @@ +/* + File: fn_updateRequest.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Updates ALL player information in the database. + Information gets passed here from the client side file: core\session\fn_updateRequest.sqf +*/ +params [ + ["_uid","",[""]], + ["_name","",[""]], + ["_side",sideUnknown,[civilian]], + ["_cash",0,[0]], + ["_bank",5000,[0]], + ["_licenses",[],[[]]], + ["_gear",[],[[]]], + ["_stats",[100,100],[[]]], + "", + "", + ["_position",[],[[]]] +]; + +//Get to those error checks. +if (_uid isEqualTo "" || {_name isEqualTo ""}) exitWith {}; + +//Parse and setup some data. +_name = [_name] call HC_fnc_mresString; +_gear = [_gear] call HC_fnc_mresArray; +_stats = [_stats] call HC_fnc_mresArray; +_cash = [_cash] call HC_fnc_numberSafe; +_bank = [_bank] call HC_fnc_numberSafe; +_position = if (_side isEqualTo civilian) then {[_position] call HC_fnc_mresArray} else {[]}; + +//Does something license related but I can't remember I only know it's important? +for "_i" from 0 to count(_licenses)-1 do { + private _bool = [(_licenses select _i) select 1] call HC_fnc_bool; + _licenses set[_i,[(_licenses select _i) select 0,_bool]]; +}; + +_licenses = [_licenses] call HC_fnc_mresArray; + +//PLAYTIME +private _playtime = [_uid] call HC_fnc_getPlayTime; +private _playtime_update = []; +{ + if ((_x select 0) isEqualTo _uid) exitWith + { + _playtime_update pushBack [_x select 1]; + }; +} forEach TON_fnc_playtime_values_request; +_playtime_update = (_playtime_update select 0) select 0; +switch (_side) do { + case west: {_playtime_update set[0,_playtime];}; + case civilian: {_playtime_update set[2,_playtime];}; + case independent: {_playtime_update set[1,_playtime];}; +}; +_playtime_update = [_playtime_update] call HC_fnc_mresArray; + +private "_query"; +switch (_side) do { + case west: {_query = format["UPDATE players SET name='%1', cash='%2', bankacc='%3', cop_gear='%4', cop_licenses='%5', cop_stats='%6', playtime='%7' WHERE playerid='%8'",_name,_cash,_bank,_gear,_licenses,_stats,_playtime_update,_uid];}; + case civilian: {_query = format["UPDATE players SET name='%1', cash='%2', bankacc='%3', civ_licenses='%4', civ_gear='%5', arrested='%6', civ_stats='%7', civ_alive='%8', civ_position='%9', playtime='%10' WHERE playerid='%11'",_name,_cash,_bank,_licenses,_gear,[_this select 8] call HC_fnc_bool,_stats,[_this select 9] call HC_fnc_bool,_position,_playtime_update,_uid];}; + case independent: {_query = format["UPDATE players SET name='%1', cash='%2', bankacc='%3', med_licenses='%4', med_gear='%5', med_stats='%6', playtime='%7' WHERE playerid='%8'",_name,_cash,_bank,_licenses,_gear,_stats,_playtime_update,_uid];}; +}; + + +_queryResult = [_query,1] call HC_fnc_asyncCall; diff --git a/life_hc/MySQL/Housing/fn_addContainer.sqf b/life_hc/MySQL/Housing/fn_addContainer.sqf new file mode 100644 index 00000000..a7e999cc --- /dev/null +++ b/life_hc/MySQL/Housing/fn_addContainer.sqf @@ -0,0 +1,31 @@ +#include "\life_hc\hc_macros.hpp" +/* + File: fn_addContainer.sqf + Author: NiiRoZz + + This file is for Nanou's HeadlessClient. + + Description: + Add container in Database. +*/ +private["_containerPos","_query","_className","_dir"]; +params [ + ["_uid","",[""]], + ["_container",objNull,[objNull]] +]; + +if (isNull _container || _uid isEqualTo "") exitWith {}; + +_containerPos = getPosATL _container; +_className = typeOf _container; +_dir = [vectorDir _container, vectorUp _container]; + +_query = format["INSERT INTO containers (pid, pos, classname, inventory, gear, owned, dir) VALUES('%1', '%2', '%3', '""[[],0]""', '""[]""', '1', '%4')",_uid,_containerPos,_className,_dir]; +[_query,1] call HC_fnc_asyncCall; + +sleep 0.3; + +_query = format["SELECT id FROM containers WHERE pos='%1' AND pid='%2' AND owned='1'",_containerPos,_uid]; +_queryResult = [_query,2] call HC_fnc_asyncCall; + +_container setVariable ["container_id",(_queryResult select 0),true]; diff --git a/life_hc/MySQL/Housing/fn_addHouse.sqf b/life_hc/MySQL/Housing/fn_addHouse.sqf new file mode 100644 index 00000000..1bba3397 --- /dev/null +++ b/life_hc/MySQL/Housing/fn_addHouse.sqf @@ -0,0 +1,28 @@ +#include "\life_hc\hc_macros.hpp" +/* + File: fn_addHouse.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Blah +*/ +private["_housePos","_query"]; +params [ + ["_uid","",[""]], + ["_house",objNull,[objNull]] +]; +if (isNull _house || _uid isEqualTo "") exitWith {}; + +_housePos = getPosATL _house; + +_query = format["INSERT INTO houses (pid, pos, owned) VALUES('%1', '%2', '1')",_uid,_housePos]; +[_query,1] call HC_fnc_asyncCall; + +sleep 0.3; + +_query = format["SELECT id FROM houses WHERE pos='%1' AND pid='%2' AND owned='1'",_housePos,_uid]; +_queryResult = [_query,2] call HC_fnc_asyncCall; + +_house setVariable ["house_id",(_queryResult select 0),true]; diff --git a/life_hc/MySQL/Housing/fn_deleteDBContainer.sqf b/life_hc/MySQL/Housing/fn_deleteDBContainer.sqf new file mode 100644 index 00000000..8a2e9701 --- /dev/null +++ b/life_hc/MySQL/Housing/fn_deleteDBContainer.sqf @@ -0,0 +1,28 @@ +/* + File : fn_deleteDBContainer.sqf + Author: NiiRoZz + + This file is for Nanou's HeadlessClient. + + Description: + Delete Container and remove Container in Database +*/ +private["_house","_houseID","_ownerID","_housePos","_query","_radius","_containers"]; +_container = param [0,objNull,[objNull]]; +if (isNull _container) exitWith {diag_log "container null";}; + +_containerID = _container getVariable ["container_id",-1]; +if (_containerID isEqualTo -1) then { + _containerPos = getPosATL _container; + _ownerID = (_container getVariable "container_owner") select 0; + _query = format["UPDATE containers SET owned='0', pos='[]' WHERE pid='%1' AND pos='%2' AND owned='1'",_ownerID,_containerPos]; +} else { + _query = format["UPDATE containers SET owned='0', pos='[]' WHERE id='%1'",_containerID]; +}; +_container setVariable ["container_id",nil,true]; +_container setVariable ["container_owner",nil,true]; + +[_query,1] call HC_fnc_asyncCall; + +["CALL deleteOldContainers",1] call HC_fnc_asyncCall; +deleteVehicle _container; diff --git a/life_hc/MySQL/Housing/fn_fetchPlayerHouses.sqf b/life_hc/MySQL/Housing/fn_fetchPlayerHouses.sqf new file mode 100644 index 00000000..dfd3a7ff --- /dev/null +++ b/life_hc/MySQL/Housing/fn_fetchPlayerHouses.sqf @@ -0,0 +1,86 @@ +#include "\life_hc\hc_macros.hpp" +/* + File : fn_fetchPlayerHouses.sqf + Author: Bryan "Tonic" Boardwine + Modified : NiiRoZz + + This file is for Nanou's HeadlessClient. + + Description: + 1. Fetches all the players houses and sets them up. + 2. Fetches all the players containers and sets them up. +*/ +private["_query","_containers","_containerss","_houses"]; +params [ + ["_uid","",[""]] +]; +if (_uid isEqualTo "") exitWith {}; + +_query = format["SELECT pid, pos, classname, inventory, gear, dir, id FROM containers WHERE pid='%1' AND owned='1'",_uid]; +_containers = [_query,2,true] call HC_fnc_asyncCall; + +_containerss = []; +{ + _position = call compile format["%1",_x select 1]; + _house = nearestObject [_position, "House"]; + _direction = call compile format["%1",_x select 5]; + _trunk = [_x select 3] call HC_fnc_mresToArray; + if (_trunk isEqualType "") then {_trunk = call compile format["%1", _trunk];}; + _gear = [_x select 4] call HC_fnc_mresToArray; + if (_gear isEqualType "") then {_gear = call compile format["%1", _gear];}; + _container = createVehicle[_x select 2,[0,0,999],[],0,"NONE"]; + waitUntil {!isNil "_container" && {!isNull _container}}; + _containerss pushBack _container; + _container allowDamage false; + _container setPosATL _position; + _container setVectorDirAndUp _direction; + //Fix position for more accurate positioning + _posX = _position select 0; + _posY = _position select 1; + _posZ = _position select 2; + _currentPos = getPosATL _container; + _fixX = (_currentPos select 0) - _posX; + _fixY = (_currentPos select 1) - _posY; + _fixZ = (_currentPos select 2) - _posZ; + _container setPosATL [(_posX - _fixX), (_posY - _fixY), (_posZ - _fixZ)]; + _container setVectorDirAndUp _direction; + _container setVariable ["Trunk",_trunk,true]; + _container setVariable ["container_owner",[_x select 0],true]; + _container setVariable ["container_id",_x select 6,true]; + clearWeaponCargoGlobal _container; + clearItemCargoGlobal _container; + clearMagazineCargoGlobal _container; + clearBackpackCargoGlobal _container; + if (count _gear > 0) then { + _items = _gear select 0; + _mags = _gear select 1; + _weapons = _gear select 2; + _backpacks = _gear select 3; + for "_i" from 0 to ((count (_items select 0)) - 1) do { + _container addItemCargoGlobal [((_items select 0) select _i), ((_items select 1) select _i)]; + }; + for "_i" from 0 to ((count (_mags select 0)) - 1) do { + _container addMagazineCargoGlobal [((_mags select 0) select _i), ((_mags select 1) select _i)]; + }; + for "_i" from 0 to ((count (_weapons select 0)) - 1) do { + _container addWeaponCargoGlobal [((_weapons select 0) select _i), ((_weapons select 1) select _i)]; + }; + for "_i" from 0 to ((count (_backpacks select 0)) - 1) do { + _container addBackpackCargoGlobal [((_backpacks select 0) select _i), ((_backpacks select 1) select _i)]; + }; + }; + _house setVariable ["containers",_containerss,true]; +} forEach _containers; + +_query = format["SELECT pid, pos FROM houses WHERE pid='%1' AND owned='1'",_uid]; +_houses = [_query,2,true] call HC_fnc_asyncCall; + +_return = []; +{ + _pos = call compile format["%1",_x select 1]; + _house = nearestObject [_pos, "House"]; + _house allowDamage false; + _return pushBack [_x select 1,_containerss]; +} forEach _houses; + +missionNamespace setVariable [format["houses_%1",_uid],_return]; diff --git a/life_hc/MySQL/Housing/fn_houseCleanup.sqf b/life_hc/MySQL/Housing/fn_houseCleanup.sqf new file mode 100644 index 00000000..ca329915 --- /dev/null +++ b/life_hc/MySQL/Housing/fn_houseCleanup.sqf @@ -0,0 +1,22 @@ +/* + File: fn_houseCleanup.sqf + Author: NiiRoZz + + This file is for Nanou's HeadlessClient. + + Description: + Cleans up containers inside in house of player. +*/ +private["_query","_containers"]; +_query = format["SELECT pid, pos FROM containers WHERE pid='%1' AND owned='1'",_this]; + +_containers = [_query,2,true] call HC_fnc_asyncCall; + +if (_containers isEqualTo []) exitWith {}; +{ + _pos = call compile format["%1",_x select 1]; + _container = nearestObjects[_pos,["Box_IND_Grenades_F","B_supplyCrate_F"],12]; + { + deleteVehicle _x; + } forEach _container; +} forEach _containers; diff --git a/life_hc/MySQL/Housing/fn_sellHouse.sqf b/life_hc/MySQL/Housing/fn_sellHouse.sqf new file mode 100644 index 00000000..92119ff2 --- /dev/null +++ b/life_hc/MySQL/Housing/fn_sellHouse.sqf @@ -0,0 +1,29 @@ +/* + File: fn_sellHouse.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Used in selling the house, sets the owned to 0 and will cleanup with a + stored procedure on restart. +*/ +private["_house","_houseID","_ownerID","_housePos","_query","_radius","_containers"]; +_house = param [0,objNull,[objNull]]; +if (isNull _house) exitWith {}; + +_houseID = _house getVariable ["house_id",-1]; +if (_houseID isEqualTo -1) then { + _housePos = getPosATL _house; + _ownerID = (_house getVariable "house_owner") select 0; + _query = format["UPDATE houses SET owned='0', pos='[]' WHERE pid='%1' AND pos='%2' AND owned='1'",_ownerID,_housePos]; +} else { + _query = format["UPDATE houses SET owned='0', pos='[]' WHERE id='%1'",_houseID]; +}; + +_house setVariable ["house_id",nil,true]; +_house setVariable ["house_owner",nil,true]; + +[_query,1] call HC_fnc_asyncCall; +_house setVariable ["house_sold",nil,true]; +["CALL deleteOldHouses",1] call HC_fnc_asyncCall; diff --git a/life_hc/MySQL/Housing/fn_sellHouseContainer.sqf b/life_hc/MySQL/Housing/fn_sellHouseContainer.sqf new file mode 100644 index 00000000..b75dd29a --- /dev/null +++ b/life_hc/MySQL/Housing/fn_sellHouseContainer.sqf @@ -0,0 +1,29 @@ +/* + File : fn_sellHouseContainer.sqf + Author: NiiRoZz + + This file is for Nanou's HeadlessClient. + + Description: + Used in selling the house, container sets the owned to 0 and will cleanup with a + stored procedure on restart. +*/ +private["_house","_houseID","_ownerID","_housePos","_query","_radius","_containers"]; +_container = param [0,objNull,[objNull]]; +if (isNull _container) exitWith {}; + +_containerID = _container getVariable ["container_id",-1]; +if (_containerID isEqualTo -1) then { + _containerPos = getPosATL _container; + _ownerID = (_container getVariable "container_owner") select 0; + _query = format["UPDATE containers SET owned='0', pos='[]' WHERE pid='%1' AND pos='%2' AND owned='1'",_ownerID,_containerPos]; +} else { + _query = format["UPDATE containers SET owned='0', pos='[]' WHERE id='%1'",_containerID]; +}; + +_container setVariable ["container_id",nil,true]; +_container setVariable ["container_owner",nil,true]; +deleteVehicle _container; + +[_query,1] call HC_fnc_asyncCall; +["CALL deleteOldContainers",1] call HC_fnc_asyncCall; diff --git a/life_hc/MySQL/Housing/fn_updateHouseContainers.sqf b/life_hc/MySQL/Housing/fn_updateHouseContainers.sqf new file mode 100644 index 00000000..502b837d --- /dev/null +++ b/life_hc/MySQL/Housing/fn_updateHouseContainers.sqf @@ -0,0 +1,26 @@ +/* + File : fn_updateHouseContainers.sqf + Author: NiiRoZz + + This file is for Nanou's HeadlessClient. + + Description: + Update inventory "i" in container +*/ +private["_containerID","_containers","_query","_vehItems","_vehMags","_vehWeapons","_vehBackpacks","_cargo"]; +_container = param [0,objNull,[objNull]]; +if (isNull _container) exitWith {}; +_containerID = _container getVariable ["container_id",-1]; +if (_houseID isEqualTo -1) exitWith {}; + +_vehItems = getItemCargo _container; +_vehMags = getMagazineCargo _container; +_vehWeapons = getWeaponCargo _container; +_vehBackpacks = getBackpackCargo _container; +_cargo = [_vehItems,_vehMags,_vehWeapons,_vehBackpacks]; + +_cargo = [_cargo] call HC_fnc_mresArray; + +_query = format["UPDATE containers SET gear='%1' WHERE id='%2'",_cargo,_containerID]; + +[_query,1] call HC_fnc_asyncCall; diff --git a/life_hc/MySQL/Housing/fn_updateHouseTrunk.sqf b/life_hc/MySQL/Housing/fn_updateHouseTrunk.sqf new file mode 100644 index 00000000..fe5b087e --- /dev/null +++ b/life_hc/MySQL/Housing/fn_updateHouseTrunk.sqf @@ -0,0 +1,21 @@ +/* + File : fn_updateHouseTrunk.sqf + Author: NiiRoZz + + This file is for Nanou's HeadlessClient. + + Description: + Update inventory "y" in container +*/ +private _container = param [0,objNull,[objNull]]; +if (isNull _container) exitWith {}; + +_trunkData = _container getVariable ["Trunk",[[],0]]; +_containerID = _container getVariable ["container_id",-1]; + +if (_containerID isEqualTo -1) exitWith {}; //Dafuq? + +_trunkData = [_trunkData] call HC_fnc_mresArray; +_query = format["UPDATE containers SET inventory='%1' WHERE id='%2'",_trunkData,_containerID]; + +[_query,1] call HC_fnc_asyncCall; diff --git a/life_hc/MySQL/Items/fn_spikeStrip.sqf b/life_hc/MySQL/Items/fn_spikeStrip.sqf new file mode 100644 index 00000000..66d5a2b8 --- /dev/null +++ b/life_hc/MySQL/Items/fn_spikeStrip.sqf @@ -0,0 +1,24 @@ +#include "\life_hc\hc_macros.hpp" +/* + File: fn_spikeStrip.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + This is the server-side part of it which constantly monitors the spike strip and vehicles near it. + First originally tried triggers but I was never any good at those nor do I like them as they + have a global effect. +*/ +private["_nearVehicles","_spikeStrip"]; +_spikeStrip = param [0,objNull,[objNull]]; +if (isNull _spikeStrip) exitWith {}; //Bad vehicle type passed. + +waitUntil {_nearVehicles = nearestObjects[getPos _spikeStrip,["Car"],5]; count _nearVehicles > 0 || isNull _spikeStrip}; + +if (isNull _spikeStrip) exitWith {}; //It was picked up? +_vehicle = _nearVehicles select 0; + +if (isNil "_vehicle") exitWith {deleteVehicle _spikeStrip;}; +[_vehicle] remoteExec ["life_fnc_spikeStripEffect",_vehicle]; +deleteVehicle _spikeStrip; diff --git a/life_hc/MySQL/Jail/fn_jailSys.sqf b/life_hc/MySQL/Jail/fn_jailSys.sqf new file mode 100644 index 00000000..ac9d5d56 --- /dev/null +++ b/life_hc/MySQL/Jail/fn_jailSys.sqf @@ -0,0 +1,19 @@ +#include "\life_hc\hc_macros.hpp" +/* + File: fn_jailSys.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + I forget? +*/ +private["_unit","_bad","_ret"]; +params [ + ["_unit",objNull,[objNull]], + ["_bad",false,[false]] +]; +if (isNull _unit) exitWith {}; + +_ret = [_unit] call HC_fnc_wantedPerson; +[_ret,_bad] remoteExec ["life_fnc_jailMe",_unit]; diff --git a/life_hc/MySQL/PlayTime/fn_getPlayTime.sqf b/life_hc/MySQL/PlayTime/fn_getPlayTime.sqf new file mode 100644 index 00000000..078a9796 --- /dev/null +++ b/life_hc/MySQL/PlayTime/fn_getPlayTime.sqf @@ -0,0 +1,40 @@ +/* + File : fn_getPlayTime.sqf + Author : NiiRoZz + + This file is for Nanou's HeadlessClient. + + Description : + Gets playtime for player with UID + + GATHERED - Loaded from DB and NOT changed + JOIN - Time, the player joined - the newly gathered playtime will be calculated using difference + +*/ + +private["_uid", "_time_gathered", "_time_join","_time"]; + +_uid = _this select 0; +_time_gathered = nil; +_time_join = nil; + +{ + if ((_x select 0) isEqualTo _uid) exitWith { + _time_gathered = _x select 1; + _time_join = _x select 2; + }; +} forEach TON_fnc_playtime_values; + +if (isNil "_time_gathered" || isNil "_time_join") then { + _time_gathered = 0; + _time_join = time; + TON_fnc_playtime_values pushBack [_uid, _time_gathered, _time_join]; +}; + +publicVariable "TON_fnc_playtime_values"; + +_time = (time - _time_join); //return time +_time = _time + _time_gathered; +_time = round (_time/60); + +_time; \ No newline at end of file diff --git a/life_hc/MySQL/PlayTime/fn_setPlayTime.sqf b/life_hc/MySQL/PlayTime/fn_setPlayTime.sqf new file mode 100644 index 00000000..c51a730b --- /dev/null +++ b/life_hc/MySQL/PlayTime/fn_setPlayTime.sqf @@ -0,0 +1,29 @@ +/* + File : fn_setPlayTime.sqf + Author : NiiRoZz + + This file is for Nanou's HeadlessClient. + + Description : + Sets gathered time of player + + GATHERED - Loaded from DB and NOT changed + JOIN - Time, the player joined - the newly gathered playtime will be calculated using difference + +*/ + +private["_uid", "_time_gathered"]; + +_uid = _this select 0; +_time_gathered = ((_this select 1) * 60); + +//create value using get +[_uid] call HC_fnc_getPlayTime; + +//set value no 1 +{ + if ((_x select 0) isEqualTo _uid) exitWith { + _x set [1, _time_gathered]; + _x set [2, time]; + }; +} forEach TON_fnc_playtime_values; \ No newline at end of file diff --git a/life_hc/MySQL/Vehicles/fn_chopShopSell.sqf b/life_hc/MySQL/Vehicles/fn_chopShopSell.sqf new file mode 100644 index 00000000..3a6031b0 --- /dev/null +++ b/life_hc/MySQL/Vehicles/fn_chopShopSell.sqf @@ -0,0 +1,44 @@ +#include "\life_hc\hc_macros.hpp" +/* + File: fn_chopShopSell.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Checks whether or not the vehicle is persistent or temp and sells it. +*/ +private["_unit","_vehicle","_price","_cash","_ownerUnit"]; +params [ + ["_unit",objNull,[objNull]], + ["_vehicle",objNull,[objNull]], + ["_price",500,[0]], + ["_cash",0,[0]] +]; + +_ownerUnit = _unit getVariable "life_clientID"; + +//Error checks +if (isNull _vehicle || isNull _unit) exitWith { + life_action_inUse = false; + _ownerUnit publicVariableClient "life_action_inUse"; +}; + +_displayName = FETCH_CONFIG2(getText,"CfgVehicles",typeOf _vehicle, "displayName"); + +_dbInfo = _vehicle getVariable ["dbInfo",[]]; +if (count _dbInfo > 0) then { + _uid = (_dbInfo select 0); + _plate = (_dbInfo select 1); + + _query = format["UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'",_uid,_plate]; + + _sql = [_query,1] call HC_fnc_asyncCall; +}; + +deleteVehicle _vehicle; +life_action_inUse = false; +_ownerUnit publicVariableClient "life_action_inUse"; +CASH = _cash; +_ownerUnit publicVariableClient "life_cash"; +[2,"STR_NOTF_ChopSoldCar",true,[_displayName,[_price] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",_unit]; diff --git a/life_hc/MySQL/Vehicles/fn_getVehicles.sqf b/life_hc/MySQL/Vehicles/fn_getVehicles.sqf new file mode 100644 index 00000000..1a6126f2 --- /dev/null +++ b/life_hc/MySQL/Vehicles/fn_getVehicles.sqf @@ -0,0 +1,46 @@ +#include "\life_hc\hc_macros.hpp" +/* + File: fn_getVehicles.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Sends a request to query the database information and returns vehicles. +*/ +private["_pid","_side","_type","_unit","_ret","_tickTime","_queryResult"]; +params [ + ["_pid","",[""]], + ["_side",sideUnknown,[west]], + ["_type","",[""]], + ["_unit",objNull,[objNull]] +]; + +//Error checks +if (_pid isEqualTo "" || _side isEqualTo sideUnknown || _type isEqualTo "" || isNull _unit) exitWith { + if (!isNull _unit) then { + [[]] remoteExec ["life_fnc_impoundMenu",_unit]; + }; +}; + +_side = switch (_side) do { + case west:{"cop"}; + case civilian: {"civ"}; + case independent: {"med"}; + default {"Error"}; +}; + +if (_side == "Error") exitWith { + [[]] remoteExec ["life_fnc_impoundMenu",_unit]; +}; + +_query = format["SELECT id, side, classname, type, pid, alive, active, plate, color FROM vehicles WHERE pid='%1' AND alive='1' AND active='0' AND side='%2' AND type='%3'",_pid,_side,_type]; + +_tickTime = diag_tickTime; +_queryResult = [_query,2,true] call HC_fnc_asyncCall; + +if (_queryResult isEqualType "") exitWith { + [[]] remoteExec ["life_fnc_impoundMenu",_unit]; +}; + +[_queryResult] remoteExec ["life_fnc_impoundMenu",_unit]; diff --git a/life_hc/MySQL/Vehicles/fn_keyManagement.sqf b/life_hc/MySQL/Vehicles/fn_keyManagement.sqf new file mode 100644 index 00000000..7f7abea1 --- /dev/null +++ b/life_hc/MySQL/Vehicles/fn_keyManagement.sqf @@ -0,0 +1,47 @@ +/* + File: fn_keyManagement.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Keeps track of an array locally on the server of a players keys. +*/ +private["_uid","_side","_input","_mode","_arr"]; +params [ + ["_uid","",[""]], + ["_side",sideUnknown,[sideUnknown]] +]; +_mode = param [3,0,[0]]; + +if (_uid isEqualTo "" || _side isEqualTo sideUnknown) exitWith {}; //BAAAAAAAAADDDDDDDD + +switch (_mode) do { + case 0: { + _input = param [2,[],[[]]]; + _arr = []; + { + if (!isNull _x && {!(_x isKindOf "House")}) then { + _arr pushBack _x; + }; + } forEach _input; + + _arr = _arr - [objNull]; + missionNamespace setVariable [format["%1_KEYS_%2",_uid,_side],_arr]; + }; + + case 1: { + _input = param [2,objNull,[objNull]]; + if (isNull _input || _input isKindOf "House") exitWith {}; + _arr = missionNamespace getVariable [format["%1_KEYS_%2",_uid,_side],[]]; + _arr pushBack _input; + _arr = _arr - [objNull]; + missionNamespace setVariable [format["%1_KEYS_%2",_uid,_side],_arr]; + }; + + case 2: { + _arr = missionNamespace getVariable [format["%1_KEYS_%2",_uid,_side],[]]; + _arr = _arr - [objNull]; + missionNamespace setVariable [format["%1_KEYS_%2",_uid,_side],_arr]; + }; +}; diff --git a/life_hc/MySQL/Vehicles/fn_spawnVehicle.sqf b/life_hc/MySQL/Vehicles/fn_spawnVehicle.sqf new file mode 100644 index 00000000..94053a31 --- /dev/null +++ b/life_hc/MySQL/Vehicles/fn_spawnVehicle.sqf @@ -0,0 +1,181 @@ +#include "\life_hc\hc_macros.hpp" +/* + File: fn_spawnVehicle.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Sends the query request to the database, if an array is returned then it creates + the vehicle if it's not in use or dead. +*/ +private["_vid","_sp","_pid","_query","_sql","_vehicle","_nearVehicles","_name","_side","_tickTime","_dir","_servIndex","_damage","_wasIllegal","_location"]; +params [ + ["_vid",-1,[0]], + ["_pid","",[""]], + ["_sp",[],[[],""]], + ["_unit",objNull,[objNull]], + ["_price",0,[0]], + ["_dir",0,[0]], + ["_spawntext","",[""]] +]; +_ownerID = _unit getVariable ["life_clientID",-1]; +_unit_return = _unit; +_name = name _unit; +_side = side _unit; + +//_unit = owner _unit; + +if (_vid isEqualTo -1 || _pid isEqualTo "") exitWith {}; +if (_vid in serv_sv_use) exitWith {}; +serv_sv_use pushBack _vid; +_servIndex = serv_sv_use find _vid; + +_query = format["SELECT id, side, classname, type, pid, alive, active, plate, color, inventory, gear, fuel, damage, blacklist FROM vehicles WHERE id='%1' AND pid='%2'",_vid,_pid]; + +_tickTime = diag_tickTime; +_queryResult = [_query,2] call HC_fnc_asyncCall; + +if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { + diag_log "------------- Client Query Request -------------"; + diag_log format["QUERY: %1",_query]; + diag_log format["Time to complete: %1 (in seconds)",(diag_tickTime - _tickTime)]; + diag_log format["Result: %1",_queryResult]; + diag_log "------------------------------------------------"; +}; + +if (_queryResult isEqualType "") exitWith {}; + +_vInfo = _queryResult; +if (isNil "_vInfo") exitWith {serv_sv_use deleteAt _servIndex;}; +if (count _vInfo isEqualTo 0) exitWith {serv_sv_use deleteAt _servIndex;}; + +if ((_vInfo select 5) isEqualTo 0) exitWith { + serv_sv_use deleteAt _servIndex; + [1,"STR_Garage_SQLError_Destroyed",true,[_vInfo select 2]] remoteExecCall ["life_fnc_broadcast",_unit]; +}; + +if ((_vInfo select 6) isEqualTo 1) exitWith { + serv_sv_use deleteAt _servIndex; + [1,"STR_Garage_SQLError_Active",true,[_vInfo select 2]] remoteExecCall ["life_fnc_broadcast",_unit]; +}; + +if (!(_sp isEqualType "")) then { + _nearVehicles = nearestObjects[_sp,["Car","Air","Ship"],10]; +} else { + _nearVehicles = []; +}; + +if (count _nearVehicles > 0) exitWith { + serv_sv_use deleteAt _servIndex; + [_price,_unit_return] remoteExecCall ["life_fnc_garageRefund",_unit]; + [1,"STR_Garage_SpawnPointError",true] remoteExecCall ["life_fnc_broadcast",_unit]; +}; + +_query = format["UPDATE vehicles SET active='1', damage='""[]""' WHERE pid='%1' AND id='%2'",_pid,_vid]; + +_trunk = [(_vInfo select 9)] call HC_fnc_mresToArray; +_gear = [(_vInfo select 10)] call HC_fnc_mresToArray; +_damage = [(_vInfo select 12)] call HC_fnc_mresToArray; +_wasIllegal = (_vInfo select 13); +_wasIllegal = if (_wasIllegal isEqualTo 1) then { true } else { false }; + +[_query,1] call HC_fnc_asyncCall; +if (_sp isEqualType "") then { + _vehicle = createVehicle[(_vInfo select 2),[0,0,999],[],0,"NONE"]; + waitUntil {!isNil "_vehicle" && {!isNull _vehicle}}; + _vehicle allowDamage false; + _hs = nearestObjects[getMarkerPos _sp,["Land_Hospital_side2_F"],50] select 0; + _vehicle setPosATL (_hs modelToWorld [-0.4,-4,12.65]); + sleep 0.6; +} else { + _vehicle = createVehicle [(_vInfo select 2),_sp,[],0,"NONE"]; + waitUntil {!isNil "_vehicle" && {!isNull _vehicle}}; + _vehicle allowDamage false; + _vehicle setPos _sp; + _vehicle setVectorUp (surfaceNormal _sp); + _vehicle setDir _dir; +}; +_vehicle allowDamage true; +//Send keys over the network. +[_vehicle] remoteExecCall ["life_fnc_addVehicle2Chain",_unit]; +/*[_pid,_side,_vehicle,1] call HC_fnc_keyManagement;*/ +[_pid,_side,_vehicle,1] remoteExecCall ["TON_fnc_keyManagement",RSERV]; +_vehicle lock 2; +//Reskin the vehicle +[_vehicle,_vInfo select 8] remoteExecCall ["life_fnc_colorVehicle",_unit]; +_vehicle setVariable ["vehicle_info_owners",[[_pid,_name]],true]; +_vehicle setVariable ["dbInfo",[(_vInfo select 4),(_vInfo select 7)],true]; +_vehicle disableTIEquipment true; //No Thermals.. They're cheap but addictive. +[_vehicle] call life_fnc_clearVehicleAmmo; + +// Avoid problems if u keep changing which stuff to save! +if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { + _vehicle setVariable ["Trunk",_trunk,true]; + if (_wasIllegal) then { + private "_location"; + if (_sp isEqualType "") then { + _location= (nearestLocations [getPos _sp,["NameCityCapital","NameCity","NameVillage"],1000]) select 0; + } else { + _location= (nearestLocations [_sp,["NameCityCapital","NameCity","NameVillage"],1000]) select 0; + }; + _location = text _location; + [1,"STR_NOTF_BlackListedVehicle",true,[_location,_name]] remoteExecCall ["life_fnc_broadcast",west]; + + _query = format["UPDATE vehicles SET blacklist='0' WHERE id='%1' AND pid='%2'",_vid,_pid]; + _thread = [_query,1] call HC_fnc_asyncCall; + + }; + }else{ + _vehicle setVariable ["Trunk",[[],0],true]; +}; + +if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then { + _vehicle setFuel (_vInfo select 11); + }else{ + _vehicle setFuel 1; +}; + +if (count _gear > 0 && (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1)) then { + _items = _gear select 0; + _mags = _gear select 1; + _weapons = _gear select 2; + _backpacks = _gear select 3; + + for "_i" from 0 to ((count (_items select 0)) - 1) do { + _vehicle addItemCargoGlobal [((_items select 0) select _i), ((_items select 1) select _i)]; + }; + for "_i" from 0 to ((count (_mags select 0)) - 1) do { + _vehicle addMagazineCargoGlobal [((_mags select 0) select _i), ((_mags select 1) select _i)]; + }; + for "_i" from 0 to ((count (_weapons select 0)) - 1) do { + _vehicle addWeaponCargoGlobal [((_weapons select 0) select _i), ((_weapons select 1) select _i)]; + }; + for "_i" from 0 to ((count (_backpacks select 0)) - 1) do { + _vehicle addBackpackCargoGlobal [((_backpacks select 0) select _i), ((_backpacks select 1) select _i)]; + }; +}; + +if (count _damage > 0 && (LIFE_SETTINGS(getNumber,"save_vehicle_damage") isEqualTo 1)) then { + _parts = getAllHitPointsDamage _vehicle; + + for "_i" from 0 to ((count _damage) - 1) do { + _vehicle setHitPointDamage [format["%1",((_parts select 0) select _i)],_damage select _i]; + }; +}; + +//Sets of animations +if ((_vInfo select 1) isEqualTo "civ" && ((_vInfo select 2)) isEqualTo "B_Heli_Light_01_F" && !((_vInfo select 8) isEqualTo 13)) then { + [_vehicle,"civ_littlebird",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit]; +}; + +if ((_vInfo select 1) isEqualTo "cop" && ((_vInfo select 2)) in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F","C_Hatchback_01_sport_F","B_Heli_Light_01_F","B_Heli_Transport_01_F"]) then { + [_vehicle,"cop_offroad",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit]; +}; + +if ((_vInfo select 1) isEqualTo "med" && ((_vInfo select 2)) isEqualTo "C_Offroad_01_F") then { + [_vehicle,"med_offroad",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit]; +}; + +[1,_spawntext] remoteExecCall ["life_fnc_broadcast",_unit]; +serv_sv_use deleteAt _servIndex; diff --git a/life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf b/life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf new file mode 100644 index 00000000..682cc4c1 --- /dev/null +++ b/life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf @@ -0,0 +1,39 @@ +/* + File: fn_vehicleCreate.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Answers the query request to create the vehicle in the database. +*/ +private["_uid","_side","_type","_classname","_color","_plate"]; +params [ + ["_uid","",[""]], + ["_side",sideUnknown,[west]], + ["_vehicle",objNull,[objNull]], + ["_color",-1,[0]] +]; + +//Error checks +if (_uid isEqualTo "" || _side isEqualTo sideUnknown || isNull _vehicle) exitWith {}; +if (!alive _vehicle) exitWith {}; +_className = typeOf _vehicle; +_type = switch (true) do { + case (_vehicle isKindOf "Car"): {"Car"}; + case (_vehicle isKindOf "Air"): {"Air"}; + case (_vehicle isKindOf "Ship"): {"Ship"}; +}; + +_side = switch (_side) do { + case west:{"cop"}; + case civilian: {"civ"}; + case independent: {"med"}; + default {"Error"}; +}; + +_plate = round(random(1000000)); + +[_uid,_side,_type,_classname,_color,_plate] call HC_fnc_insertVehicle; + +_vehicle setVariable ["dbInfo",[_uid,_plate],true]; diff --git a/life_hc/MySQL/Vehicles/fn_vehicleDelete.sqf b/life_hc/MySQL/Vehicles/fn_vehicleDelete.sqf new file mode 100644 index 00000000..4e5ca323 --- /dev/null +++ b/life_hc/MySQL/Vehicles/fn_vehicleDelete.sqf @@ -0,0 +1,25 @@ +/* + File: fn_vehicleDelete.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Doesn't actually delete since we don't give our DB user that type of + access so instead we set it to alive=0 so it never shows again. +*/ +diag_log "Script VehicleDelete HC"; +private["_vid","_sp","_pid","_query","_sql","_type","_thread"]; +params [ + ["_vid",-1,[0]], + ["_pid","",[""]], + ["_sp",2500,[0]], + ["_unit",objNull,[objNull]], + ["_type","",[""]] +]; + +if (_vid isEqualTo -1 || _pid isEqualTo "" || _sp isEqualTo 0 || isNull _unit || _type isEqualTo "") exitWith {}; + +_query = format["UPDATE vehicles SET alive='0' WHERE pid='%1' AND id='%2'",_pid,_vid]; + +_thread = [_query,1] call HC_fnc_asyncCall; diff --git a/life_hc/MySQL/Vehicles/fn_vehicleStore.sqf b/life_hc/MySQL/Vehicles/fn_vehicleStore.sqf new file mode 100644 index 00000000..578dbc99 --- /dev/null +++ b/life_hc/MySQL/Vehicles/fn_vehicleStore.sqf @@ -0,0 +1,156 @@ +#include "\life_hc\hc_macros.hpp" +/* + File: fn_vehicleStore.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Stores the vehicle in the 'Garage' +*/ +private["_vehicle","_impound","_vInfo","_vInfo","_plate","_uid","_query","_sql","_unit","_trunk","_vehItems","_vehMags","_vehWeapons","_vehBackpacks","_cargo","_saveItems","_storetext","_resourceItems","_fuel","_damage","_itemList","_totalweight","_weight"]; +params [ + ["_vehicle",objNull,[objNull]], + ["_impound",false,[true]], + ["_unit",objNull,[objNull]], + ["_storetext","",[""]] +]; +_ownerID = _unit getVariable ["life_clientID",-1]; +_resourceItems = LIFE_SETTINGS(getArray,"save_vehicle_items"); + +if (isNull _vehicle || isNull _unit) exitWith {life_impound_inuse = false; _ownerID publicVariableClient "life_impound_inuse";life_garage_store = false;_ownerID publicVariableClient "life_garage_store";}; //Bad data passed. +_vInfo = _vehicle getVariable ["dbInfo",[]]; + +if (count _vInfo > 0) then { + _plate = _vInfo select 1; + _uid = _vInfo select 0; +}; + +// save damage. +if (LIFE_SETTINGS(getNumber,"save_vehicle_damage") isEqualTo 1) then { + _damage = getAllHitPointsDamage _vehicle; + _damage = _damage select 2; + } else { + _damage = []; +}; +_damage = [_damage] call HC_fnc_mresArray; + +// because fuel price! +if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then { + _fuel = (fuel _vehicle); + } else { + _fuel = 1; +}; + +if (_impound) exitWith { + if (_vInfo isEqualTo []) then { + life_impound_inuse = false; + _ownerID publicVariableClient "life_impound_inuse"; + + if (!isNil "_vehicle" && {!isNull _vehicle}) then { + deleteVehicle _vehicle; + }; + } else { // no free repairs! + _query = format["UPDATE vehicles SET active='0', fuel='%3', damage='%4' WHERE pid='%1' AND plate='%2'",_uid , _plate, _fuel, _damage]; + _thread = [_query,1] call HC_fnc_asyncCall; + + if (!isNil "_vehicle" && {!isNull _vehicle}) then { + deleteVehicle _vehicle; + }; + + life_impound_inuse = false; + _ownerID publicVariableClient "life_impound_inuse"; + }; +}; + +// not persistent so just do this! +if (_vInfo isEqualTo []) exitWith { + [1,"STR_Garage_Store_NotPersistent",true] remoteExecCall ["life_fnc_broadcast",_ownerID]; + life_garage_store = false; + _ownerID publicVariableClient "life_garage_store"; +}; + +if (_uid != getPlayerUID _unit) exitWith { + [1,"STR_Garage_Store_NoOwnership",true] remoteExecCall ["life_fnc_broadcast",_ownerID]; + life_garage_store = false; + _ownerID publicVariableClient "life_garage_store"; +}; + +// sort out whitelisted items! +_trunk = _vehicle getVariable ["Trunk", [[], 0]]; +_itemList = _trunk select 0; +_totalweight = 0; +_items = []; +if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { + if (LIFE_SETTINGS(getNumber,"save_vehicle_illegal") isEqualTo 1) then { + _blacklist = false; + _profileQuery = format["SELECT name FROM players WHERE playerid='%1'", _uid]; + _profileName = [_profileQuery, 2] call DB_fnc_asyncCall; + _profileName = _profileName select 0; + { + _isIllegal = M_CONFIG(getNumber,"VirtualItems",_x select 0,"illegal"); + + _isIllegal = if (_isIllegal isEqualTo 1) then { true } else { false }; + + if (((_x select 0) in _resourceItems) || (_isIllegal)) then { + _items pushBack[_x select 0, _x select 1]; + _weight = (ITEM_WEIGHT(_x select 0)) * (_x select 1); + _totalweight = _weight + _totalweight; + }; + if (_isIllegal) then { + _blacklist = true; + }; + + } + foreach _itemList; + if (_blacklist) then { + [_uid, _profileName, "481"] remoteExecCall["HC_fnc_wantedAdd", HC_Life]; + + _query = format["UPDATE vehicles SET blacklist='1' WHERE pid='%1' AND plate='%2'", _uid, _plate]; + _thread = [_query, 1] call HC_fnc_asyncCall; + }; + + } + else { + { + if ((_x select 0) in _resourceItems) then { + _items pushBack[_x select 0,_x select 1]; + _weight = (ITEM_WEIGHT(_x select 0)) * (_x select 1); + _totalweight = _weight + _totalweight; + }; + } + forEach _itemList; + }; + _trunk = [_items, _totalweight]; + + } + else { + _trunk = [[], 0]; + }; +if (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1) then { + _vehItems = getItemCargo _vehicle; + _vehMags = getMagazineCargo _vehicle; + _vehWeapons = getWeaponCargo _vehicle; + _vehBackpacks = getBackpackCargo _vehicle; + _cargo = [_vehItems,_vehMags,_vehWeapons,_vehBackpacks]; + // no items? clean the array so the database looks pretty + if (((_vehItems select 0) isEqualTo []) && ((_vehMags select 0) isEqualTo []) && ((_vehWeapons select 0) isEqualTo []) && ((_vehBackpacks select 0) isEqualTo [])) then {_cargo = [];}; + } else { + _cargo = []; +}; + +// prepare +_trunk = [_trunk] call HC_fnc_mresArray; +_cargo = [_cargo] call HC_fnc_mresArray; + +// update +_query = format["UPDATE vehicles SET active='0', inventory='%3', gear='%4', fuel='%5', damage='%6' WHERE pid='%1' AND plate='%2'", _uid, _plate, _trunk, _cargo, _fuel, _damage]; +_thread = [_query,1] call HC_fnc_asyncCall; + +if (!isNil "_vehicle" && {!isNull _vehicle}) then { + deleteVehicle _vehicle; +}; + +life_garage_store = false; +_ownerID publicVariableClient "life_garage_store"; +[1,_storetext] remoteExecCall ["life_fnc_broadcast",_ownerID]; diff --git a/life_hc/MySQL/Vehicles/fn_vehicleUpdate.sqf b/life_hc/MySQL/Vehicles/fn_vehicleUpdate.sqf new file mode 100644 index 00000000..b319d610 --- /dev/null +++ b/life_hc/MySQL/Vehicles/fn_vehicleUpdate.sqf @@ -0,0 +1,57 @@ +#include "\life_hc\hc_macros.hpp" +/* + File: fn_vehicleUpdate.sqf + Author : NiiRoZz + + This file is for Nanou's HeadlessClient. + + Description: + Tells the database that this vehicle need update inventory. +*/ +private["_vehicle","_plate","_uid","_query","_sql","_dbInfo","_thread","_cargo","_trunk","_resourceItems","_itemList","_totalweight","_weight"]; +params [ + ["_vehicle",objNull,[objNull]], + ["_mode",1,[0]] +]; +if (isNull _vehicle) exitWith {}; //NULL + +_dbInfo = _vehicle getVariable ["dbInfo",[]]; +if (_dbInfo isEqualTo []) exitWith {}; +_uid = _dbInfo select 0; +_plate = _dbInfo select 1; +switch (_mode) do { + case 1: { + _vehItems = getItemCargo _vehicle; + _vehMags = getMagazineCargo _vehicle; + _vehWeapons = getWeaponCargo _vehicle; + _vehBackpacks = getBackpackCargo _vehicle; + _cargo = [_vehItems,_vehMags,_vehWeapons,_vehBackpacks]; + + // Keep it clean! + if (((_vehItems select 0) isEqualTo []) && ((_vehMags select 0) isEqualTo []) && ((_vehWeapons select 0) isEqualTo []) && ((_vehBackpacks select 0) isEqualTo [])) then {_cargo = [];}; + + _cargo = [_cargo] call HC_fnc_mresArray; + + _query = format["UPDATE vehicles SET gear='%3' WHERE pid='%1' AND plate='%2'",_uid,_plate,_cargo]; + _thread = [_query,1] call HC_fnc_asyncCall; + }; + + case 2: { + _resourceItems = LIFE_SETTINGS(getArray,"save_vehicle_items"); + _trunk = _vehicle getVariable ["Trunk",[[],0]]; + _totalweight = 0; + _items = []; + { + if ((_x select 0) in _resourceItems) then { + _items pushBack [(_x select 0),(_x select 1)]; + _weight = (ITEM_WEIGHT(_x select 0)) * (_x select 1); + _totalweight = _weight + _totalweight; + }; + }forEach (_trunk select 0); + _trunk = [_items,_totalweight]; + _trunk = [_trunk] call HC_fnc_mresArray; + + _query = format["UPDATE vehicles SET inventory='%3' WHERE pid='%1' AND plate='%2'",_uid,_plate,_trunk]; + _thread = [_query,1] call HC_fnc_asyncCall; + }; +}; diff --git a/life_hc/MySQL/WantedSystem/fn_wantedAdd.sqf b/life_hc/MySQL/WantedSystem/fn_wantedAdd.sqf new file mode 100644 index 00000000..d38763b7 --- /dev/null +++ b/life_hc/MySQL/WantedSystem/fn_wantedAdd.sqf @@ -0,0 +1,99 @@ +/* + File: fn_wantedAdd.sqf + Author: Bryan "Tonic" Boardwine" + Database Persistence By: ColinM + Assistance by: Paronity + Stress Tests by: Midgetgrimm + + This file is for Nanou's HeadlessClient. + + Description: + Adds or appends a unit to the wanted list. +*/ +private["_uid","_type","_index","_data","_crimes","_val","_customBounty","_name","_pastCrimes","_query","_queryResult"]; +params [ + ["_uid","",[""]], + ["_name","",[""]], + ["_type","",[""]], + ["_customBounty",-1,[0]] +]; +if (_uid isEqualTo "" || _type isEqualTo "" || _name isEqualTo "") exitWith {}; //Bad data passed. + +//What is the crime? +switch (_type) do +{ + case "187V": {_type = ["187V",650]}; + case "187": {_type = ["187",2000]}; + case "901": {_type = ["901",450]}; + case "215": {_type = ["215",200]}; + case "213": {_type = ["213",1000]}; + case "211": {_type = ["211",100]}; + case "207": {_type = ["207",350]}; + case "207A": {_type = ["207A",200]}; + case "390": {_type = ["390",1500]}; + case "487": {_type = ["487",150]}; + case "488": {_type = ["488",70]}; + case "480": {_type = ["480",100]}; + case "481": {_type = ["481",100]}; + case "482": {_type = ["482",500]}; + case "483": {_type = ["483",950]}; + case "459": {_type = ["459",650]}; + case "666": {_type = ["666",200]}; + case "667": {_type = ["667",4500]}; + case "668": {_type = ["668",1500]}; + + case "1": {_type = ["1",250]}; + case "2": {_type = ["2",100]}; + case "3": {_type = ["3",75]}; + case "4": {_type = ["4",125]}; + case "5": {_type = ["5",50]}; + case "6": {_type = ["6",40]}; + case "7": {_type = ["7",75]}; + case "8": {_type = ["8",2500]}; + case "9": {_type = ["9",2500]}; + case "10": {_type = ["10",7500]}; + case "11": {_type = ["11",5000]}; + case "12": {_type = ["12",1250]}; + case "13": {_type = ["13",750]}; + case "14": {_type = ["14",250]}; + case "15": {_type = ["15",1250]}; + case "16": {_type = ["16",750]}; + case "17": {_type = ["17",50]}; + case "18": {_type = ["18",750]}; + case "19": {_type = ["19",1250]}; + case "20": {_type = ["20",250]}; + case "21": {_type = ["21",250]}; + case "22": {_type = ["22",1000]}; + case "23": {_type = ["23",2500]}; + case "24": {_type = ["24",5000]}; + case "25": {_type = ["25",10000]}; + default {_type = [];}; +}; + +if (_type isEqualTo []) exitWith {}; //Not our information being passed... +//Is there a custom bounty being sent? Set that as the pricing. +if (_customBounty != -1) then {_type set[1,_customBounty];}; +//Search the wanted list to make sure they are not on it. + +_query = format["SELECT wantedID FROM wanted WHERE wantedID='%1'",_uid]; +_queryResult = [_query,2,true] call HC_fnc_asyncCall; +_val = [_type select 1] call HC_fnc_numberSafe; +_number = _type select 0; + +if (count _queryResult != 0) then +{ + _crime = format["SELECT wantedCrimes, wantedBounty FROM wanted WHERE wantedID='%1'",_uid]; + _crimeresult = [_crime,2] call HC_fnc_asyncCall; + _pastcrimess = [_crimeresult select 0] call HC_fnc_mresToArray; + if (_pastcrimess isEqualType "") then {_pastcrimess = call compile format["%1", _pastcrimess];}; + _pastCrimes = _pastcrimess; + _pastCrimes pushBack _number; + _pastCrimes = [_pastCrimes] call HC_fnc_mresArray; + _query = format["UPDATE wanted SET wantedCrimes = '%1', wantedBounty = wantedBounty + '%2', active = '1' WHERE wantedID='%3'",_pastCrimes,_val,_uid]; + [_query,1] call HC_fnc_asyncCall; +} else { + _crimes = [_type select 0]; + _crimes = [_crimes] call HC_fnc_mresArray; + _query = format["INSERT INTO wanted (wantedID, wantedName, wantedCrimes, wantedBounty, active) VALUES('%1', '%2', '%3', '%4', '1')",_uid,_name,_crimes,_val]; + [_query,1] call HC_fnc_asyncCall; +}; diff --git a/life_hc/MySQL/WantedSystem/fn_wantedBounty.sqf b/life_hc/MySQL/WantedSystem/fn_wantedBounty.sqf new file mode 100644 index 00000000..4f4b4742 --- /dev/null +++ b/life_hc/MySQL/WantedSystem/fn_wantedBounty.sqf @@ -0,0 +1,35 @@ +/* + File: fn_wantedBounty.sqf + Author: Bryan "Tonic" Boardwine" + Database Persistence By: ColinM + Assistance by: Paronity + Stress Tests by: Midgetgrimm + + This file is for Nanou's HeadlessClient. + + Description: + Checks if the person is on the bounty list and awards the cop for killing them. +*/ +private["_civ","_cop","_id","_half","_result","_queryResult","_amount"]; +params [ + ["_uid","",[""]], + ["_civ",objNull,[objNull]], + ["_cop",objNull,[objNull]], + ["_half",false,[false]] +]; +if (isNull _civ || isNull _cop) exitWith {}; + +_query = format["SELECT wantedID, wantedName, wantedCrimes, wantedBounty FROM wanted WHERE active='1' AND wantedID='%1'",_uid]; +_queryResult = [_query,2] call HC_fnc_asyncCall; + +if (count _queryResult != 0) then +{ + _amount = _queryResult select 3; + if (_amount != 0) then { + if (_half) then { + [((_amount) / 2),_amount] remoteExecCall ["life_fnc_bountyReceive",_cop]; + } else { + [_amount,_amount] remoteExecCall ["life_fnc_bountyReceive",_cop]; + }; + }; +}; diff --git a/life_hc/MySQL/WantedSystem/fn_wantedCrimes.sqf b/life_hc/MySQL/WantedSystem/fn_wantedCrimes.sqf new file mode 100644 index 00000000..88f02f03 --- /dev/null +++ b/life_hc/MySQL/WantedSystem/fn_wantedCrimes.sqf @@ -0,0 +1,82 @@ +#include "\life_hc\hc_macros.hpp" +/* + File: fn_wantedCrimes.sqf + Author: ColinM + Assistance by: Paronity + Stress Tests by: Midgetgrimm + + This file is for Nanou's HeadlessClient. + + Description: + Grabs a list of crimes committed by a person. +*/ +private["_display","_criminal","_tab","_queryResult","_result","_ret","_crimesDb","_crimesArr","_type"]; +disableSerialization; +params [ + ["_ret",objNull,[objNull]], + ["_criminal",[],[]] +]; + +_query = format["SELECT wantedCrimes, wantedBounty FROM wanted WHERE active='1' AND wantedID='%1'",_criminal select 0]; +_queryResult = [_query,2] call HC_fnc_asyncCall; + +_crimesArr = []; + +_type = [_queryResult select 0] call HC_fnc_mresToArray; +if (_type isEqualType "") then {_type = call compile format["%1", _type];}; +{ + switch (_x) do + { + case "187V": {_x = "STR_Crime_187V"}; + case "187": {_x = "STR_Crime_187"}; + case "901": {_x = "STR_Crime_901"}; + case "215": {_x = "STR_Crime_215"}; + case "213": {_x = "STR_Crime_213"}; + case "211": {_x = "STR_Crime_211"}; + case "207": {_x = "STR_Crime_207"}; + case "207A": {_x = "STR_Crime_207A"}; + case "390": {_x = "STR_Crime_390"}; + case "487": {_x = "STR_Crime_487"}; + case "488": {_x = "STR_Crime_488"}; + case "480": {_x = "STR_Crime_480"}; + case "481": {_x = "STR_Crime_481"}; + case "482": {_x = "STR_Crime_482"}; + case "483": {_x = "STR_Crime_483"}; + case "459": {_x = "STR_Crime_459"}; + case "666": {_x = "STR_Crime_666"}; + case "667": {_x = "STR_Crime_667"}; + case "668": {_x = "STR_Crime_668"}; + case "919": {_x = "STR_Crime_919"}; + case "919A": {_x = "STR_Crime_919A"}; + + case "1": {_x = "STR_Crime_1"}; + case "2": {_x = "STR_Crime_2"}; + case "3": {_x = "STR_Crime_3"}; + case "4": {_x = "STR_Crime_4"}; + case "5": {_x = "STR_Crime_5"}; + case "6": {_x = "STR_Crime_6"}; + case "7": {_x = "STR_Crime_7"}; + case "8": {_x = "STR_Crime_8"}; + case "9": {_x = "STR_Crime_9"}; + case "10": {_x = "STR_Crime_10"}; + case "11": {_x = "STR_Crime_11"}; + case "12": {_x = "STR_Crime_12"}; + case "13": {_x = "STR_Crime_13"}; + case "14": {_x = "STR_Crime_14"}; + case "15": {_x = "STR_Crime_15"}; + case "16": {_x = "STR_Crime_16"}; + case "17": {_x = "STR_Crime_17"}; + case "18": {_x = "STR_Crime_18"}; + case "19": {_x = "STR_Crime_19"}; + case "20": {_x = "STR_Crime_20"}; + case "21": {_x = "STR_Crime_21"}; + case "22": {_x = "STR_Crime_22"}; + case "23": {_x = "STR_Crime_23"}; + case "24": {_x = "STR_Crime_24"}; + case "25": {_x = "STR_Crime_25"}; + }; + _crimesArr pushBack _x; +}forEach _type; +_queryResult set[0,_crimesArr]; + +[_queryResult] remoteExec ["life_fnc_wantedInfo",_ret]; diff --git a/life_hc/MySQL/WantedSystem/fn_wantedFetch.sqf b/life_hc/MySQL/WantedSystem/fn_wantedFetch.sqf new file mode 100644 index 00000000..a7509e1b --- /dev/null +++ b/life_hc/MySQL/WantedSystem/fn_wantedFetch.sqf @@ -0,0 +1,49 @@ +#include "\life_hc\hc_macros.hpp" +/* + File: fn_wantedFetch.sqf + Author: Bryan "Tonic" Boardwine" + Database Persistence By: ColinM + Assistance by: Paronity + Stress Tests by: Midgetgrimm + + This file is for Nanou's HeadlessClient. + + Description: + Displays wanted list information sent from the server. +*/ +private["_ret","_list","_result","_queryResult","_units","_inStatement"]; +_ret = param [0,objNull,[objNull]]; +if (isNull _ret) exitWith {}; +_inStatement = ""; +_list = []; +_units = []; +{if ((side _x) isEqualTo civilian) then {_units pushBack (getPlayerUID _x)};} forEach playableUnits; + +if (_units isEqualTo []) exitWith {[_list] remoteExec ["life_fnc_wantedList",_ret];}; + +{ + if (count _units > 1) then { + if (_inStatement isEqualTo "") then { + _inStatement = "'" + _x + "'"; + } else { + _inStatement = _inStatement + ", '" + _x + "'"; + }; + } else { + _inStatement = _x; + }; +} forEach _units; + +_query = format["SELECT wantedID, wantedName FROM wanted WHERE active='1' AND wantedID in (%1)",_inStatement]; +_queryResult = [_query,2,true] call HC_fnc_asyncCall; + +diag_log format["Query: %1",_query]; + + +{ + _list pushBack (_x); +} +forEach _queryResult; + +if (_list isEqualTo []) exitWith {[_list] remoteExec ["life_fnc_wantedList",_ret];}; + +[_list] remoteExec ["life_fnc_wantedList",_ret]; diff --git a/life_hc/MySQL/WantedSystem/fn_wantedPerson.sqf b/life_hc/MySQL/WantedSystem/fn_wantedPerson.sqf new file mode 100644 index 00000000..31b5d98b --- /dev/null +++ b/life_hc/MySQL/WantedSystem/fn_wantedPerson.sqf @@ -0,0 +1,21 @@ +/* + File: fn_wantedPerson.sqf + Author: Bryan "Tonic" Boardwine" + Database Persistence By: ColinM + Assistance by: Paronity + Stress Tests by: Midgetgrimm + + This file is for Nanou's HeadlessClient. + + Description: + Fetches a specific person from the wanted array. +*/ +private["_index","_queryResult","_result"]; +private _unit = param [0,objNull,[objNull]]; +if (isNull _unit) exitWith {[]}; +_uid = getPlayerUID _unit; + +_query = format["SELECT wantedID, wantedName, wantedBounty FROM wanted WHERE active='1' AND wantedID='%1'",_uid]; +_queryResult = [_query,2] call HC_fnc_asyncCall; +if (_queryResult isEqualTo []) exitWith {[]}; +_queryResult; diff --git a/life_hc/MySQL/WantedSystem/fn_wantedProfUpdate.sqf b/life_hc/MySQL/WantedSystem/fn_wantedProfUpdate.sqf new file mode 100644 index 00000000..3437e8b4 --- /dev/null +++ b/life_hc/MySQL/WantedSystem/fn_wantedProfUpdate.sqf @@ -0,0 +1,29 @@ +#include "\life_hc\hc_macros.hpp" +/* + File: fn_wantedProfUpdate.sqf + Author: [midgetgrimm] + Persistence by: ColinM + + This file is for Nanou's HeadlessClient. + + Description: + Updates name of player if they change profiles +*/ +private["_uid","_name","_query","_tickTime","_wantedCheck","_wantedQuery"]; +params [ + ["_uid","",[""]], + ["_name","",[""]] +]; + +//Bad data check +if (_uid isEqualTo "" || _name isEqualTo "") exitWith {}; + +_wantedCheck = format["SELECT wantedName FROM wanted WHERE wantedID='%1'",_uid]; +_wantedQuery = [_wantedCheck,2] call HC_fnc_asyncCall; +if (_wantedQuery isEqualTo []) exitWith {}; +_wantedQuery = call compile format["%1",_wantedQuery]; + +if (_name != (_wantedQuery select 0)) then { + _query = format["UPDATE wanted SET wantedName='%1' WHERE wantedID='%2'",_name,_uid]; + [_query,2] call HC_fnc_asyncCall; +}; diff --git a/life_hc/MySQL/WantedSystem/fn_wantedRemove.sqf b/life_hc/MySQL/WantedSystem/fn_wantedRemove.sqf new file mode 100644 index 00000000..53a44fa8 --- /dev/null +++ b/life_hc/MySQL/WantedSystem/fn_wantedRemove.sqf @@ -0,0 +1,18 @@ +/* + File: fn_wantedRemove.sqf + Author: Bryan "Tonic" Boardwine" + Database Persistence By: ColinM + Assistance by: Paronity + Stress Tests by: Midgetgrimm + + This file is for Nanou's HeadlessClient. + + Description: + Removes a person from the wanted list. +*/ +private["_uid","_query"]; +_uid = param [0,"",[""]]; +if (_uid isEqualTo "") exitWith {}; //Bad data + +_query = format["UPDATE wanted SET active = '0', wantedCrimes = '[]', wantedBounty = 0 WHERE wantedID='%1'",_uid]; +[_query,2] call HC_fnc_asyncCall; diff --git a/life_hc/PboPrefix.txt b/life_hc/PboPrefix.txt new file mode 100644 index 00000000..ac2bf6e3 --- /dev/null +++ b/life_hc/PboPrefix.txt @@ -0,0 +1 @@ +life_hc \ No newline at end of file diff --git a/life_hc/config.cpp b/life_hc/config.cpp new file mode 100644 index 00000000..926aa874 --- /dev/null +++ b/life_hc/config.cpp @@ -0,0 +1,111 @@ +#define true 1 +#define false 0 + +class DefaultEventHandler; + +class CfgPatches +{ + class life_headless_client + { + units[] = {}; + weapons[] = {}; + requiredAddons[] = {"A3_Data_F"}; + fileName = "life_hc.pbo"; + author[] = {"Nanou"}; + }; +}; + +class CfgFunctions +{ + class Headless_Client + { + tag = "HC"; + class General + { + file = "\life_hc\MySQL\General"; + class asyncCall {}; + class bool {}; + class insertRequest {}; + class insertVehicle {}; + class mresArray {}; + class mresString {}; + class mresToArray {}; + class numberSafe {}; + class queryRequest {}; + class updatePartial {}; + class updateRequest {}; + class cleanup {}; + class huntingZone {}; + class receivekeyofServer {}; + }; + + class PlayTime + { + file = "\life_hc\MySQL\PlayTime"; + class getPlayTime {}; + class setPlayTime {}; + }; + + class Housing + { + file = "\life_hc\MySQL\Housing"; + class addContainer {}; + class addHouse {}; + class deleteDBContainer {}; + class fetchPlayerHouses {}; + class houseCleanup {}; + class sellHouse {}; + class sellHouseContainer {}; + class updateHouseContainers {}; + class updateHouseTrunk {}; + }; + + class Gangs + { + file = "\life_hc\MySQL\Gangs"; + class insertGang {}; + class queryPlayerGang {}; + class removeGang {}; + class updateGang {}; + }; + + class Vehicles + { + file = "\life_hc\MySQL\Vehicles"; + class chopShopSell {}; + class getVehicles {}; + class spawnVehicle {}; + class keyManagement {}; + class vehicleStore {}; + class vehicleCreate {}; + class vehicleDelete {}; + class vehicleUpdate {}; + }; + + class Wanted_Sys + { + file = "\life_hc\MySQL\WantedSystem"; + class wantedFetch {}; + class wantedPerson {}; + class wantedBounty {}; + class wantedRemove {}; + class wantedAdd {}; + class wantedCrimes {}; + class wantedProfUpdate {}; + }; + + class Jail + { + file = "\life_hc\MySQL\Jail"; + class jailSys; + }; + + class Items + { + file = "\life_hc\MySQL\Items"; + class spikeStrip {}; + }; + + }; + +}; diff --git a/life_hc/hc_macros.hpp b/life_hc/hc_macros.hpp new file mode 100644 index 00000000..964d5279 --- /dev/null +++ b/life_hc/hc_macros.hpp @@ -0,0 +1,43 @@ +#define SYSTEM_TAG "HC" +#define CASH life_cash +#define BANK life_atmbank +#define GANG_FUNDS group player getVariable ["gang_bank",0]; + +/* + remoteExec Section + When uncommented it enables proper testing via local testing + Otherwise leave it commented out for "LIVE" servers +*/ +#define DEBUG 1 + +#ifdef DEBUG +#define RCLIENT 0 +#else +#define RCLIENT -2 +#endif + +#define RSERV 2 +#define RANY 0 + +//Scripting Macros +#define CONST(var1,var2) var1 = compileFinal (if (var2 isEqualType "") then {var2} else {str(var2)}) +#define CONSTVAR(var) var = compileFinal (if (var isEqualType "") then {var} else {str(var)}) +#define FETCH_CONST(var) (call var) +#define LIFE_SETTINGS(TYPE,SETTING) TYPE(missionConfigFile >> "Life_Settings" >> SETTING) +#define FETCH_CONFIG(TYPE,CFG,SECTION,CLASS,ENTRY) TYPE(configFile >> CFG >> SECTION >> CLASS >> ENTRY) +#define FETCH_CONFIG2(TYPE,CFG,CLASS,ENTRY) TYPE(configFile >> CFG >> CLASS >> ENTRY) +#define FETCH_CONFIG3(TYPE,CFG,SECTION,CLASS,ENTRY,SUB) TYPE(configFile >> CFG >> SECTION >> CLASS >> ENTRY >> SUB) +#define FETCH_CONFIG4(TYPE,CFG,SECTION,CLASS,ENTRY,SUB,SUB2) TYPE(configFile >> CFG >> SECTION >> CLASS >> ENTRY >> SUB >> SUB2) +#define M_CONFIG(TYPE,CFG,CLASS,ENTRY) TYPE(missionConfigFile >> CFG >> CLASS >> ENTRY) +#define ITEM_WEIGHT(varName) M_CONFIG(getNumber,"VirtualItems",varName,"weight") + +//Condition Macros +#define CONFIG_BOOL(NUMBER) [##NUMBER] call { _ret = false; if ((_this select 0) in [0,1] && (_this select 0) isEqualTo 1) then { _ret = true; }; _ret;} + +// extDB2 Macros +#define EXTDB "extDB2" callExtension +#define EXTDB_SETTING(TYPE,SETTING) TYPE(missionConfigFile >> "CfgServer" >> SETTING) +#define EXTDB_FAILED(MESSAGE) \ + life_HC_server_extDB_notLoaded = [true,##MESSAGE]; \ + publicVariable "life_HC_server_extDB_notLoaded"; \ + diag_log MESSAGE; diff --git a/life_hc/initHC.sqf b/life_hc/initHC.sqf new file mode 100644 index 00000000..d7199641 --- /dev/null +++ b/life_hc/initHC.sqf @@ -0,0 +1,129 @@ +#include "hc_macros.hpp" +/* + File: fn_initHC.sqf + Author: Nanou + + Description: + Initialize the headless client. +*/ +private "_timeStamp"; +if (EXTDB_SETTING(getNumber,"HeadlessSupport") isEqualTo 0) exitWith {}; +life_HC_server_isReady = false; +life_HC_server_extDB_notLoaded = ""; +publicVariable "life_HC_server_isReady"; +life_save_civilian_position = if (LIFE_SETTINGS(getNumber,"save_civilian_position") isEqualTo 0) then {false} else {true}; +[] execVM "\life_hc\KRON_Strings.sqf"; + +if (isNil {uiNamespace getVariable "life_sql_id"}) then { + life_sql_id = round(random(9999)); + CONSTVAR(life_sql_id); + uiNamespace setVariable ["life_sql_id",life_sql_id]; + + try { + _result = EXTDB format["9:ADD_DATABASE:%1",EXTDB_SETTING(getText,"DatabaseName")]; + if (!(_result isEqualTo "[1]")) then {throw "extDB2: Error with Database Connection"}; + _result = EXTDB format["9:ADD_DATABASE_PROTOCOL:%2:SQL_RAW_V2:%1:ADD_QUOTES",FETCH_CONST(life_sql_id),EXTDB_SETTING(getText,"DatabaseName")]; + if (!(_result isEqualTo "[1]")) then {throw "extDB2: Error with Database Connection"}; + } catch { + diag_log _exception; + life_HC_server_extDB_notLoaded = [true, _exception]; + }; + + publicVariable "life_HC_server_extDB_notLoaded"; + if (life_HC_server_extDB_notLoaded isEqualType []) exitWith {}; + EXTDB "9:LOCK"; + diag_log "extDB2: Connected to Database"; +} else { + life_sql_id = uiNamespace getVariable "life_sql_id"; + CONSTVAR(life_sql_id); + diag_log "extDB2: Still Connected to Database"; +}; + +if (life_HC_server_extDB_notLoaded isEqualType []) then { + [] spawn { + for "_i" from 0 to 1 step 0 do { + [0,"There is a problem with the Headless Client, please contact an administrator."] remoteExecCall ["life_fnc_broadcast",RCLIENT]; + sleep 120; + }; + }; +}; + +if (life_HC_server_extDB_notLoaded isEqualType []) exitWith {}; //extDB2-HC did not fully initialize so terminate the rest of the initialization process. + +["CALL resetLifeVehicles",1] call HC_fnc_asyncCall; +["CALL deleteDeadVehicles",1] call HC_fnc_asyncCall; +["CALL deleteOldHouses",1] call HC_fnc_asyncCall; +["CALL deleteOldGangs",1] call HC_fnc_asyncCall; + +_timeStamp = diag_tickTime; +diag_log "----------------------------------------------------------------------------------------------------"; +diag_log "------------------------------------ Starting Altis Life HC Init -----------------------------------"; +diag_log "-------------------------------------------- Version 4.4R3 -----------------------------------------"; +diag_log "----------------------------------------------------------------------------------------------------"; + +[] execFSM "\life_hc\FSM\cleanup.fsm"; + +[] spawn HC_fnc_cleanup; + +/* Initialize hunting zone(s) */ +["hunting_zone",30] spawn HC_fnc_huntingZone; + +// A list of allowed funcs to be passed on the hc (by external sources) +// Have to be written in only lower capitals +HC_MPAllowedFuncs = [ + "hc_fnc_insertrequest", + "hc_fnc_insertvehicle", + "hc_fnc_queryrequest", + "hc_fnc_updatepartial", + "hc_fnc_updaterequest", + "hc_fnc_cleanup", + "hc_fnc_huntingzone", + "hc_fnc_setplaytime", + "hc_fnc_getplaytime", + "hc_fnc_insertgang", + "hc_fnc_queryplayergang", + "hc_fnc_removegang", + "hc_fnc_updategang", + "hc_fnc_addcontainer", + "hc_fnc_addhouse", + "hc_fnc_deletedbcontainer", + "hc_fnc_fetchplayerhouses", + "hc_fnc_housecleanup", + "hc_fnc_sellhouse", + "hc_fnc_sellhousecontainer", + "hc_fnc_updatehousecontainers", + "hc_fnc_updatehousetrunk", + "hc_fnc_keymanagement", + "hc_fnc_vehiclecreate", + "hc_fnc_spawnvehicle", + "hc_fnc_vehiclestore", + "hc_fnc_chopshopsell", + "hc_fnc_getvehicles", + "hc_fnc_vehicledelete", + "hc_fnc_vehicleupdate", + "hc_fnc_jailsys", + "hc_fnc_spikestrip", + "hc_fnc_wantedadd", + "hc_fnc_wantedbounty", + "hc_fnc_wantedcrimes", + "hc_fnc_wantedfetch", + "hc_fnc_wantedperson", + "hc_fnc_wantedprofupdate", + "hc_fnc_wantedremove" +]; + +CONSTVAR(HC_MPAllowedFuncs); + +life_HC_server_isReady = true; +publicVariable "life_HC_server_isReady"; + +[] spawn { + waitUntil{!isNil "serv_sv_use"}; + for "_i" from 0 to 1 step 0 do { + publicVariableServer "serv_sv_use"; + uiSleep 60; + }; +}; +diag_log "----------------------------------------------------------------------------------------------------"; +diag_log format[" End of Altis Life HC Init :: Total Execution Time %1 seconds ",(diag_tickTime) - _timeStamp]; +diag_log "----------------------------------------------------------------------------------------------------"; diff --git a/life_server/FSM/cleanup.fsm b/life_server/FSM/cleanup.fsm index a503ca1a..45f9ba5a 100644 --- a/life_server/FSM/cleanup.fsm +++ b/life_server/FSM/cleanup.fsm @@ -1,145 +1,179 @@ -/*%FSM*/ +/*%FSM*/ /*%FSM*/ /* -item0[] = {"init",0,250,-65.004578,-391.651611,24.995417,-341.651672,0.000000,"init"}; +item0[] = {"init",0,250,-62.908096,-391.651611,27.091887,-341.651672,0.000000,"init"}; item1[] = {"true",8,218,-62.976639,-315.185364,27.023363,-265.185364,0.000000,"true"}; item2[] = {"Share__Work_load",2,250,-64.183350,-224.681931,25.816656,-174.681931,0.000000,"Share " \n "Work-load"}; -item3[] = {"true",8,218,-54.709698,75.189262,35.290302,125.189262,0.000000,"true"}; +item3[] = {"Continue__",4,4314,-220.591476,74.216980,-130.591476,124.216980,0.000000,"" \n "" \n "Continue" \n "" \n ""}; item4[] = {"Time_Check",4,218,-219.425827,-133.310532,-129.425964,-83.310455,0.000000,"Time Check"}; -item5[] = {"Delete_Dead_Cars",2,4346,-220.186951,-29.248400,-130.187195,20.751413,0.000000,"Delete" \n "Dead" \n "Cars"}; +item5[] = {"Delete_Dead_Cars",2,250,-220.186951,-29.248400,-130.187195,20.751413,0.000000,"Delete" \n "Dead" \n "Cars"}; item6[] = {"",7,210,-312.538239,95.295059,-304.538239,103.295059,0.000000,""}; -item7[] = {"",7,210,-311.750000,-203.033707,-303.750000,-195.033707,0.000000,""}; +item7[] = {"",7,210,-312.798218,-204.081940,-304.798218,-196.081940,0.000000,""}; +item8[] = {"End_Cleanup_",1,250,-64.828239,87.581070,25.171984,137.581238,0.000000,"" \n "End Cleanup" \n ""}; +item9[] = {"Check_for_HC_",4,218,-65.059021,-30.047342,24.941008,19.952658,0.000000,"" \n "Check for HC" \n ""}; link0[] = {0,1}; link1[] = {1,2}; link2[] = {2,4}; link3[] = {3,6}; link4[] = {4,5}; link5[] = {5,3}; -link6[] = {6,7}; -link7[] = {7,2}; -globals[] = {0.000000,0,0,0,0,640,480,1,46,6316128,1,-629.444153,611.207214,293.309357,-434.050568,1243,885,1}; -window[] = {2,-1,-1,-1,-1,985,225,1868,225,3,1261}; +link6[] = {5,9}; +link7[] = {6,7}; +link8[] = {7,2}; +link9[] = {9,8}; +globals[] = {0.000000,0,0,0,0,640,480,1,53,6316128,1,-481.887177,425.726196,554.522583,-436.926575,857,816,1}; +window[] = {0,-1,-1,-32000,-32000,1120,545,1909,159,1,875}; *//*%FSM*/ class FSM { - fsmName = "Server-Side Cleanup"; - class States - { - /*%FSM*/ - class init - { - name = "init"; - init = /*%FSM*/"private[""_impound"",""_cars"",""_objs"",""_totCars"",""_thread""];" \n - "_impound = time;" \n - "_cars = time;" \n - "_objs = time;"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class true + fsmName = "Server-Side Cleanup"; + class States { - priority = 0.000000; - to="Share__Work_load"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"true"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; + /*%FSM*/ + class init + { + name = "init"; + itemno = 0; + init = /*%FSM*/"private[""_impound"",""_cars"",""_objs"",""_totCars"",""_thread""];" \n + "_impound = time;" \n + "_cars = time;" \n + "_objs = time;" \n + "cleanupFSM setFSMVariable [""stopfsm"",false];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 1; + priority = 0.000000; + to="Share__Work_load"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Share__Work_load + { + name = "Share__Work_load"; + itemno = 2; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Time_Check + { + itemno = 4; + priority = 0.000000; + to="Delete_Dead_Cars"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((time - _cars) > (3 * 60))"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Delete_Dead_Cars + { + name = "Delete_Dead_Cars"; + itemno = 5; + init = /*%FSM*/"{" \n + " if (!alive _x) then {" \n + " _dbInfo = _x getVariable [""dbInfo"",[]];" \n + " if (count _dbInfo > 0) then {" \n + " _uid = _dbInfo select 0;" \n + " _plate = _dbInfo select 1;" \n + "" \n + " _query = format[""UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate];" \n + " _query spawn {" \n + " " \n + " _thread = [_this,1] call DB_fnc_asyncCall;" \n + " };" \n + " };" \n + " if (!isNil ""_x"" && {!isNull _x}) then {" \n + " deleteVehicle _x;" \n + " };" \n + " };" \n + "} forEach allMissionObjects ""LandVehicle"";" \n + "" \n + "{" \n + " if (!alive _x) then {" \n + " _dbInfo = _x getVariable [""dbInfo"",[]];" \n + " if (count _dbInfo > 0) then {" \n + " _uid = _dbInfo select 0;" \n + " _plate = _dbInfo select 1;" \n + "" \n + " _query = format[""UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate];" \n + " _query spawn {" \n + " " \n + " _thread = [_this,1] call DB_fnc_asyncCall;" \n + " };" \n + " };" \n + " if (!isNil ""_x"" && {!isNull _x}) then {" \n + " deleteVehicle _x;" \n + " };" \n + " };" \n + "} forEach allMissionObjects ""Air"";" \n + "_cars = time;" \n + "" \n + "//Group cleanup." \n + "{" \n + " if (units _x isEqualTo [] && local _x) then {" \n + " deleteGroup _x;" \n + " };" \n + "} forEach allGroups;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Check_for_HC_ + { + itemno = 9; + priority = 0.000000; + to="End_Cleanup_"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"cleanupFSM getFSMVariable ""stopfsm"""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Continue__ + { + itemno = 3; + priority = 0.000000; + to="Share__Work_load"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(cleanupFSM getFSMVariable ""stopfsm"")"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class End_Cleanup_ + { + name = "End_Cleanup_"; + itemno = 8; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Share__Work_load - { - name = "Share__Work_load"; - init = /*%FSM*/""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class Time_Check + initState="init"; + finalStates[] = { - priority = 0.000000; - to="Delete_Dead_Cars"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"((time - _cars) > (3 * 60))"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; + "End_Cleanup_", }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Delete_Dead_Cars - { - name = "Delete_Dead_Cars"; - init = /*%FSM*/"{" \n - " if(!alive _x) then {" \n - " _dbInfo = _x getVariable[""dbInfo"",[]];" \n - " if(count _dbInfo > 0) then {" \n - " _uid = _dbInfo select 0;" \n - " _plate = _dbInfo select 1;" \n - "" \n - " _query = format[""UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate];" \n - " _query spawn {" \n - " " \n - " _thread = [_this,1] call DB_fnc_asyncCall;" \n - " };" \n - " };" \n - " if(!isNil ""_x"" && {!isNull _x}) then {" \n - " deleteVehicle _x;" \n - " };" \n - " };" \n - "} foreach allMissionObjects ""LandVehicle"";" \n - "" \n - "{" \n - " if(!alive _x) then {" \n - " _dbInfo = _x getVariable[""dbInfo"",[]];" \n - " if(count _dbInfo > 0) then {" \n - " _uid = _dbInfo select 0;" \n - " _plate = _dbInfo select 1;" \n - "" \n - " _query = format[""UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate];" \n - " _query spawn {" \n - " " \n - " _thread = [_this,1] call DB_fnc_asyncCall;" \n - " };" \n - " };" \n - " if(!isNil ""_x"" && {!isNull _x}) then {" \n - " deleteVehicle _x;" \n - " };" \n - " };" \n - "} foreach allMissionObjects ""Air"";" \n - "" \n - "_cars = time;" \n - "" \n - "//Group cleanup." \n - "{" \n - " if(count units _x == 0 && local _x) then {" \n - " deleteGroup _x;" \n - " };" \n - "} foreach allGroups;"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class true - { - priority = 0.000000; - to="Share__Work_load"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"true"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - }; - initState="init"; - finalStates[] = - { - }; }; -/*%FSM*/ \ No newline at end of file +/*%FSM*/ diff --git a/life_server/FSM/timeModule.fsm b/life_server/FSM/timeModule.fsm index 34e5a11d..214625be 100644 --- a/life_server/FSM/timeModule.fsm +++ b/life_server/FSM/timeModule.fsm @@ -53,7 +53,7 @@ class FSM class Apply_Time_Multi { name = "Apply_Time_Multi"; - init = /*%FSM*/"if(_fastNight && {sunOrMoon == 0}) then {" \n + init = /*%FSM*/"if (_fastNight && {sunOrMoon isEqualTo 0}) then {" \n " setTimeMultiplier _skipNight;" \n "} else {" \n " setTimeMultiplier _skipDay;" \n @@ -80,7 +80,7 @@ class FSM priority = 0.000000; to="Apply_Time_Multi"; precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"sunOrMoon == 1 - _sunState"/*%FSM*/; + condition=/*%FSM*/"sunOrMoon isEqualTo 1 - _sunState"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ diff --git a/life_server/Functions/Actions/fn_pickupAction.sqf b/life_server/Functions/Actions/fn_pickupAction.sqf index 4699216e..592fa319 100644 --- a/life_server/Functions/Actions/fn_pickupAction.sqf +++ b/life_server/Functions/Actions/fn_pickupAction.sqf @@ -1,23 +1,24 @@ #include "\life_server\script_macros.hpp" /* - Author: Bryan "Tonic" Boardwine - - Description: - Validates that the cash is not a lie + File: fn_pickupAction.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Validates that the cash is not a lie */ params [ - ["_obj",objNull,[objNull]], - ["_client",objNull,[objNull]], - ["_cash",false,[true]] + ["_obj",objNull,[objNull]], + ["_client",objNull,[objNull]], + ["_cash",false,[true]] ]; -if(isNull _obj OR {isNull _client}) exitWith {systemChat "Obj or client is null?";}; //No. -if(!(_obj GVAR ["inUse",false])) exitWith { - _client = owner _client; - _obj SVAR ["inUse",true,true]; - if(_cash) then { - _obj remoteExecCall ["life_fnc_pickupMoney",_client]; - } else { - _obj remoteExecCall ["life_fnc_pickupItem",_client]; - }; +if (isNull _obj || {isNull _client}) exitWith {systemChat "Obj or client is null?";}; //No. +if (!(_obj getVariable ["inUse",false])) exitWith { + _client = owner _client; + _obj setVariable ["inUse",true,true]; + if (_cash) then { + _obj remoteExecCall ["life_fnc_pickupMoney",_client]; + } else { + _obj remoteExecCall ["life_fnc_pickupItem",_client]; + }; }; \ No newline at end of file diff --git a/life_server/Functions/Gangs/fn_insertGang.sqf b/life_server/Functions/Gangs/fn_insertGang.sqf index e7a0829e..173e40c6 100644 --- a/life_server/Functions/Gangs/fn_insertGang.sqf +++ b/life_server/Functions/Gangs/fn_insertGang.sqf @@ -1,19 +1,20 @@ #include "\life_server\script_macros.hpp" /* - Author: Bryan "Tonic" Boardwine + File: fn_insertGang.sqf + Author: Bryan "Tonic" Boardwine - Description: - Inserts the gang into the database. + Description: + Inserts the gang into the database. */ private ["_query","_queryResult","_gangMembers","_group"]; params [ - ["_ownerID",objNull,[objNull]], - ["_uid","",[""]], - ["_gangName","",[""]] + ["_ownerID",objNull,[objNull]], + ["_uid","",[""]], + ["_gangName","",[""]] ]; _group = group _ownerID; -if(isNull _ownerID OR EQUAL(_uid,"") OR EQUAL(_gangName,"")) exitWith {}; //Fail +if (isNull _ownerID || _uid isEqualTo "" || _gangName isEqualTo "") exitWith {}; //Fail _ownerID = owner _ownerID; _gangName = [_gangName] call DB_fnc_mresString; @@ -22,10 +23,10 @@ _query = format["SELECT id FROM gangs WHERE name='%1' AND active='1'",_gangName] _queryResult = [_query,2] call DB_fnc_asyncCall; //Check to see if the gang name already exists. -if(!(EQUAL(count _queryResult,0))) exitWith { - [1,"There is already a gang created with that name please pick another name."] remoteExecCall ["life_fnc_broadcast",_ownerID]; - life_action_gangInUse = nil; - PVAR_ID("life_action_gangInUse",_ownerID); +if (!(count _queryResult isEqualTo 0)) exitWith { + [1,"There is already a gang created with that name please pick another name."] remoteExecCall ["life_fnc_broadcast",_ownerID]; + life_action_gangInUse = nil; + _ownerID publicVariableClient "life_action_gangInUse"; }; _query = format["SELECT id FROM gangs WHERE members LIKE '%2%1%2' AND active='1'",_uid,"%"]; @@ -33,10 +34,10 @@ _query = format["SELECT id FROM gangs WHERE members LIKE '%2%1%2' AND active='1' _queryResult = [_query,2] call DB_fnc_asyncCall; //Check to see if this person already owns or belongs to a gang. -if(!(EQUAL(count _queryResult,0))) exitWith { - [1,"You are currently already active in a gang, please leave the gang first."] remoteExecCall ["life_fnc_broadcast",_ownerID]; - life_action_gangInUse = nil; - PVAR_ID("life_action_gangInUse",_ownerID); +if (!(count _queryResult isEqualTo 0)) exitWith { + [1,"You are currently already active in a gang, please leave the gang first."] remoteExecCall ["life_fnc_broadcast",_ownerID]; + life_action_gangInUse = nil; + _ownerID publicVariableClient "life_action_gangInUse"; }; //Check to see if a gang with that name already exists but is inactive. @@ -45,24 +46,24 @@ _query = format["SELECT id, active FROM gangs WHERE name='%1' AND active='0'",_g _queryResult = [_query,2] call DB_fnc_asyncCall; _gangMembers = [[_uid]] call DB_fnc_mresArray; -if(!(EQUAL(count _queryResult,0))) then { - _query = format["UPDATE gangs SET active='1', owner='%1',members='%2' WHERE id='%3'",_uid,_gangMembers,(_queryResult select 0)]; +if (!(count _queryResult isEqualTo 0)) then { + _query = format["UPDATE gangs SET active='1', owner='%1',members='%2' WHERE id='%3'",_uid,_gangMembers,(_queryResult select 0)]; } else { - _query = format["INSERT INTO gangs (owner, name, members) VALUES('%1','%2','%3')",_uid,_gangName,_gangMembers]; + _query = format["INSERT INTO gangs (owner, name, members) VALUES('%1','%2','%3')",_uid,_gangName,_gangMembers]; }; _queryResult = [_query,1] call DB_fnc_asyncCall; -_group setVariable["gang_name",_gangName,true]; -_group setVariable["gang_owner",_uid,true]; -_group setVariable["gang_bank",0,true]; -_group setVariable["gang_maxMembers",8,true]; -_group setVariable["gang_members",[_uid],true]; +_group setVariable ["gang_name",_gangName,true]; +_group setVariable ["gang_owner",_uid,true]; +_group setVariable ["gang_bank",0,true]; +_group setVariable ["gang_maxMembers",8,true]; +_group setVariable ["gang_members",[_uid],true]; [_group] remoteExecCall ["life_fnc_gangCreated",_ownerID]; -sleep 0.35; +uiSleep 0.35; _query = format["SELECT id FROM gangs WHERE owner='%1' AND active='1'",_uid]; _queryResult = [_query,2] call DB_fnc_asyncCall; -_group SVAR ["gang_id",SEL(_queryResult,0),true]; +_group setVariable ["gang_id",(_queryResult select 0),true]; diff --git a/life_server/Functions/Gangs/fn_queryPlayerGang.sqf b/life_server/Functions/Gangs/fn_queryPlayerGang.sqf index d35b043b..d1de4032 100644 --- a/life_server/Functions/Gangs/fn_queryPlayerGang.sqf +++ b/life_server/Functions/Gangs/fn_queryPlayerGang.sqf @@ -1,8 +1,9 @@ /* - Author: Bryan "Tonic" Boardwine - - Description: - Queries to see if the player belongs to any gang. + File: fn_queryPlayerGang.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Queries to see if the player belongs to any gang. */ private["_query","_queryResult"]; @@ -10,9 +11,9 @@ _query = format["SELECT id, owner, name, maxmembers, bank, members FROM gangs WH _queryResult = [_query,2] call DB_fnc_asyncCall; -if(count _queryResult != 0) then { - _tmp = [_queryResult select 5] call DB_fnc_mresToArray; - if(typeName _tmp == "STRING") then {_tmp = call compile format["%1",_tmp];}; - _queryResult set[5, _tmp]; +if (count _queryResult != 0) then { + _tmp = [_queryResult select 5] call DB_fnc_mresToArray; + if (_tmp isEqualType "") then {_tmp = call compile format["%1", _tmp];}; + _queryResult set[5, _tmp]; }; -missionNamespace setVariable[format["gang_%1",_this],_queryResult]; \ No newline at end of file +missionNamespace setVariable [format["gang_%1",_this],_queryResult]; diff --git a/life_server/Functions/Gangs/fn_removeGang.sqf b/life_server/Functions/Gangs/fn_removeGang.sqf index 9fe5464a..c7b5c186 100644 --- a/life_server/Functions/Gangs/fn_removeGang.sqf +++ b/life_server/Functions/Gangs/fn_removeGang.sqf @@ -1,22 +1,24 @@ #include "\life_server\script_macros.hpp" /* - Author: Bryan "Tonic" Boardwine - - Description: - Blah + File: fn_removeGang.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Removes gang from database */ private["_group","_groupID"]; _group = param [0,grpNull,[grpNull]]; -if(isNull _group) exitWith {}; +if (isNull _group) exitWith {}; -_groupID = _group GVAR ["gang_id",-1]; -if(EQUAL(_groupID,-1)) exitWith {}; +_groupID = _group getVariable ["gang_id",-1]; +if (_groupID isEqualTo -1) exitWith {}; [format["UPDATE gangs SET active='0' WHERE id='%1'",_groupID],1] call DB_fnc_asyncCall; _result = [format["SELECT id FROM gangs WHERE active='1' AND id='%1'",_groupID],2] call DB_fnc_asyncCall; -if(EQUAL(count _result,0)) then { - [_group] remoteExecCall ["life_fnc_gangDisbanded",(units _group)]; - sleep 5; - deleteGroup _group; -}; \ No newline at end of file +if (count _result isEqualTo 0) then { + [_group] remoteExecCall ["life_fnc_gangDisbanded",(units _group)]; + uiSleep 5; + deleteGroup _group; +}; +["CALL deleteOldGangs",1] call DB_fnc_asyncCall; diff --git a/life_server/Functions/Gangs/fn_updateGang.sqf b/life_server/Functions/Gangs/fn_updateGang.sqf index c558c65c..6c309639 100644 --- a/life_server/Functions/Gangs/fn_updateGang.sqf +++ b/life_server/Functions/Gangs/fn_updateGang.sqf @@ -1,58 +1,61 @@ /* - Author: Bryan "Tonic" Boardwine - - Description: - Updates the gang information? + File: fn_updateGang.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Updates the gang information? */ -private["_groupID","_bank","_maxMembers","_members","_query","_owner"]; +private["_groupID","_bank","_maxMembers","_members","_membersFinal","_query","_owner"]; params [ - ["_mode",0,[0]], - ["_group",grpNull,[grpNull]] + ["_mode",0,[0]], + ["_group",grpNull,[grpNull]] ]; -if(isNull _group) exitWith {}; //FAIL +if (isNull _group) exitWith {}; //FAIL -_groupID = _group getVariable["gang_id",-1]; -if(_groupID == -1) exitWith {}; +_groupID = _group getVariable ["gang_id",-1]; +if (_groupID isEqualTo -1) exitWith {}; switch (_mode) do { - case 0: { - _bank = [(_group getVariable ["gang_bank",0])] call DB_fnc_numberSafe; - _maxMembers = _group getVariable ["gang_maxMembers",8]; - _members = [(_group getVariable "gang_members")] call DB_fnc_mresArray; - _owner = _group getVariable ["gang_owner",""]; - if(_owner == "") exitWith {}; - - _query = format["UPDATE gangs SET bank='%1', maxmembers='%2', owner='%3' WHERE id='%4'",_bank,_maxMembers,_owner,_groupID]; - }; - - case 1: { - _query = format["UPDATE gangs SET bank='%1' WHERE id='%2'",([(_group getVariable ["gang_bank",0])] call DB_fnc_numberSafe),_groupID]; - }; - - case 2: { - _query = format["UPDATE gangs SET maxmembers='%1' WHERE id='%2'",(_group getVariable ["gang_maxMembers",8]),_groupID]; - }; - - case 3: { - _owner = _group getVariable["gang_owner",""]; - if(_owner == "") exitWith {}; - _query = format["UPDATE gangs SET owner='%1' WHERE id='%2'",_owner,_groupID]; - }; - - case 4: { - _members = _group getVariable "gang_members"; - if(count _members > (_group getVariable ["gang_maxMembers",8])) then { - _membersFinal = []; - for "_i" from 0 to _maxMembers -1 do { - _membersFinal pushBack (_members select _i); - }; - }; - _membersFinal = [(_group getVariable "gang_members")] call DB_fnc_mresArray; - _query = format["UPDATE gangs SET members='%1' WHERE id='%2'",_membersFinal,_groupID]; - }; + case 0: { + _bank = [(_group getVariable ["gang_bank",0])] call DB_fnc_numberSafe; + _maxMembers = _group getVariable ["gang_maxMembers",8]; + _members = [(_group getVariable "gang_members")] call DB_fnc_mresArray; + _owner = _group getVariable ["gang_owner",""]; + if (_owner isEqualTo "") exitWith {}; + + _query = format["UPDATE gangs SET bank='%1', maxmembers='%2', owner='%3' WHERE id='%4'",_bank,_maxMembers,_owner,_groupID]; + }; + + case 1: { + _query = format["UPDATE gangs SET bank='%1' WHERE id='%2'",([(_group getVariable ["gang_bank",0])] call DB_fnc_numberSafe),_groupID]; + }; + + case 2: { + _query = format["UPDATE gangs SET maxmembers='%1' WHERE id='%2'",(_group getVariable ["gang_maxMembers",8]),_groupID]; + }; + + case 3: { + _owner = _group getVariable ["gang_owner",""]; + if (_owner isEqualTo "") exitWith {}; + _query = format["UPDATE gangs SET owner='%1' WHERE id='%2'",_owner,_groupID]; + }; + + case 4: { + _members = _group getVariable "gang_members"; + if (count _members > (_group getVariable ["gang_maxMembers",8])) then { + _membersFinal = []; + for "_i" from 0 to _maxMembers -1 do { + _membersFinal pushBack (_members select _i); + }; + } else { + _membersFinal = _group getVariable "gang_members"; + }; + _membersFinal = [_membersFinal] call DB_fnc_mresArray; + _query = format["UPDATE gangs SET members='%1' WHERE id='%2'",_membersFinal,_groupID]; + }; }; -if(!isNil "_query") then { - [_query,1] call DB_fnc_asyncCall; +if (!isNil "_query") then { + [_query,1] call DB_fnc_asyncCall; }; diff --git a/life_server/Functions/Housing/fn_addContainer.sqf b/life_server/Functions/Housing/fn_addContainer.sqf new file mode 100644 index 00000000..4ab043a0 --- /dev/null +++ b/life_server/Functions/Housing/fn_addContainer.sqf @@ -0,0 +1,33 @@ +#include "\life_server\script_macros.hpp" +/* + File: fn_addContainer.sqf + Author: NiiRoZz + + Description: + Add container in Database. +*/ +private["_containerPos","_query","_className","_dir"]; +params [ + ["_uid","",[""]], + ["_container",objNull,[objNull]] +]; + +if (isNull _container || _uid isEqualTo "") exitWith {}; + +_containerPos = getPosATL _container; +_className = typeOf _container; +_dir = [vectorDir _container, vectorUp _container]; + +_query = format["INSERT INTO containers (pid, pos, classname, inventory, gear, owned, dir) VALUES('%1', '%2', '%3', '""[[],0]""', '""[]""', '1', '%4')",_uid,_containerPos,_className,_dir]; +if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { + diag_log format["Query: %1",_query]; +}; + +[_query,1] call DB_fnc_asyncCall; + +uiSleep 0.3; + +_query = format["SELECT id FROM containers WHERE pos='%1' AND pid='%2' AND owned='1'",_containerPos,_uid]; +_queryResult = [_query,2] call DB_fnc_asyncCall; +//systemChat format["House ID assigned: %1",_queryResult select 0]; +_container setVariable ["container_id",(_queryResult select 0),true]; diff --git a/life_server/Functions/Housing/fn_addHouse.sqf b/life_server/Functions/Housing/fn_addHouse.sqf index 65481e20..5f76ceb0 100644 --- a/life_server/Functions/Housing/fn_addHouse.sqf +++ b/life_server/Functions/Housing/fn_addHouse.sqf @@ -1,27 +1,30 @@ +#include "\life_server\script_macros.hpp" /* - Author: Bryan "Tonic" Boardwine - - Description: - Blah + File: fn_addHouse.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Inserts the players newly bought house in the database. */ private["_housePos","_query"]; params [ - ["_uid","",[""]], - ["_house",objNull,[objNull]] + ["_uid","",[""]], + ["_house",objNull,[objNull]] ]; - -if(isNull _house OR _uid == "") exitWith {}; +if (isNull _house || _uid isEqualTo "") exitWith {}; _housePos = getPosATL _house; -_query = format["INSERT INTO houses (pid, pos, inventory, containers, owned) VALUES('%1', '%2', '""[[],0]""', '""[]""', '1')",_uid,_housePos]; -diag_log format["Query: %1",_query]; +_query = format["INSERT INTO houses (pid, pos, owned) VALUES('%1', '%2', '1')",_uid,_housePos]; +if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { + diag_log format["Query: %1",_query]; +}; [_query,1] call DB_fnc_asyncCall; -sleep 0.3; +uiSleep 0.3; _query = format["SELECT id FROM houses WHERE pos='%1' AND pid='%2' AND owned='1'",_housePos,_uid]; _queryResult = [_query,2] call DB_fnc_asyncCall; //systemChat format["House ID assigned: %1",_queryResult select 0]; -_house setVariable["house_id",(_queryResult select 0),true]; \ No newline at end of file +_house setVariable ["house_id",(_queryResult select 0),true]; diff --git a/life_server/Functions/Housing/fn_deleteDBContainer.sqf b/life_server/Functions/Housing/fn_deleteDBContainer.sqf new file mode 100644 index 00000000..32ffa344 --- /dev/null +++ b/life_server/Functions/Housing/fn_deleteDBContainer.sqf @@ -0,0 +1,28 @@ +/* + File : fn_deleteDBContainer.sqf + Author: NiiRoZz + + Description: + Delete Container and remove Container in Database +*/ +private["_house","_houseID","_ownerID","_housePos","_query","_radius","_containers"]; +_container = param [0,objNull,[objNull]]; +if (isNull _container) exitWith {diag_log "container null";}; + +_containerID = _container getVariable ["container_id",-1]; +if (_containerID isEqualTo -1) then { + _containerPos = getPosATL _container; + _ownerID = (_container getVariable "container_owner") select 0; + _query = format["UPDATE containers SET owned='0', pos='[]' WHERE pid='%1' AND pos='%2' AND owned='1'",_ownerID,_containerPos]; + //systemChat format[":SERVER:sellHouse: container_id does not exist"]; +} else { + //systemChat format[":SERVER:sellHouse: house_id is %1",_houseID]; + _query = format["UPDATE containers SET owned='0', pos='[]' WHERE id='%1'",_containerID]; +}; +_container setVariable ["container_id",nil,true]; +_container setVariable ["container_owner",nil,true]; + +[_query,1] call DB_fnc_asyncCall; + +["CALL deleteOldContainers",1] call DB_fnc_asyncCall; +deleteVehicle _container; diff --git a/life_server/Functions/Housing/fn_fetchPlayerHouses.sqf b/life_server/Functions/Housing/fn_fetchPlayerHouses.sqf index f7e9c9d2..6b088775 100644 --- a/life_server/Functions/Housing/fn_fetchPlayerHouses.sqf +++ b/life_server/Functions/Housing/fn_fetchPlayerHouses.sqf @@ -1,92 +1,84 @@ +#include "\life_server\script_macros.hpp" /* - Author: Bryan "Tonic" Boardwine + File : fn_fetchPlayerHouses.sqf + Author: Bryan "Tonic" Boardwine + Modified : NiiRoZz - Description: - Fetches all the players houses and sets them up. + Description: + 1. Fetches all the players houses and sets them up. + 2. Fetches all the players containers and sets them up. */ -private["_query","_houses"]; -if(_this == "") exitWith {}; +private["_query","_containers","_containerss","_houses"]; +params [ + ["_uid","",[""]] +]; +if (_uid isEqualTo "") exitWith {}; -_query = format["SELECT pid, pos, inventory, containers FROM houses WHERE pid='%1' AND owned='1'",_this]; +_query = format["SELECT pid, pos, classname, inventory, gear, dir, id FROM containers WHERE pid='%1' AND owned='1'",_uid]; +_containers = [_query,2,true] call DB_fnc_asyncCall; +_containerss = []; +{ + _position = call compile format["%1",_x select 1]; + _house = nearestObject [_position, "House"]; + _direction = call compile format["%1",_x select 5]; + _trunk = [_x select 3] call DB_fnc_mresToArray; + if (_trunk isEqualType "") then {_trunk = call compile format["%1", _trunk];}; + _gear = [_x select 4] call DB_fnc_mresToArray; + if (_gear isEqualType "") then {_gear = call compile format["%1", _gear];}; + _container = createVehicle[_x select 2,[0,0,999],[],0,"NONE"]; + waitUntil {!isNil "_container" && {!isNull _container}}; + _containerss pushBack _container; + _container allowDamage false; + _container setPosATL _position; + _container setVectorDirAndUp _direction; + //Fix position for more accurate positioning + _posX = _position select 0; + _posY = _position select 1; + _posZ = _position select 2; + _currentPos = getPosATL _container; + _fixX = (_currentPos select 0) - _posX; + _fixY = (_currentPos select 1) - _posY; + _fixZ = (_currentPos select 2) - _posZ; + _container setPosATL [(_posX - _fixX), (_posY - _fixY), (_posZ - _fixZ)]; + _container setVectorDirAndUp _direction; + _container setVariable ["Trunk",_trunk,true]; + _container setVariable ["container_owner",[_x select 0],true]; + _container setVariable ["container_id",_x select 6,true]; + clearWeaponCargoGlobal _container; + clearItemCargoGlobal _container; + clearMagazineCargoGlobal _container; + clearBackpackCargoGlobal _container; + if (count _gear > 0) then { + _items = _gear select 0; + _mags = _gear select 1; + _weapons = _gear select 2; + _backpacks = _gear select 3; + for "_i" from 0 to ((count (_items select 0)) - 1) do { + _container addItemCargoGlobal [((_items select 0) select _i), ((_items select 1) select _i)]; + }; + for "_i" from 0 to ((count (_mags select 0)) - 1) do{ + _container addMagazineCargoGlobal [((_mags select 0) select _i), ((_mags select 1) select _i)]; + }; + for "_i" from 0 to ((count (_weapons select 0)) - 1) do{ + _container addWeaponCargoGlobal [((_weapons select 0) select _i), ((_weapons select 1) select _i)]; + }; + for "_i" from 0 to ((count (_backpacks select 0)) - 1) do{ + _container addBackpackCargoGlobal [((_backpacks select 0) select _i), ((_backpacks select 1) select _i)]; + }; + }; + _house setVariable ["containers",_containerss,true]; +} forEach _containers; + +_query = format["SELECT pid, pos FROM houses WHERE pid='%1' AND owned='1'",_uid]; _houses = [_query,2,true] call DB_fnc_asyncCall; _return = []; { - _pos = call compile format["%1",_x select 1]; - _house = nearestBuilding _pos; - _house allowDamage false; - _containers = []; - _house setVariable["slots",[],true]; - if(!isNil {(_house getVariable "containers")}) then { - {if(!isNull _x) then {deleteVehicle _x;};} foreach (_house getVariable "containers"); - }; - - _trunk = [_x select 2] call DB_fnc_mresToArray; - if(typeName _trunk == "STRING") then {_trunk = call compile format["%1", _trunk];}; - _containerData = [_x select 3] call DB_fnc_mresToArray; - if(typeName _containerData == "STRING") then {_containerData = call compile format["%1", _containerData];}; - _house setVariable["Trunk",_trunk,true]; - { - if(count _x == 0) exitWith {}; //No containers / items. - _className = _x select 0; - _weapons = (_x select 1) select 0; - _magazines = (_x select 1) select 1; - _items = (_x select 1) select 2; - _backpacks = (_x select 1) select 3; - - //Setup the variables - _positions = [_house] call life_fnc_getBuildingPositions; - _pos = [0,0,0]; - - { - _slots = _house getVariable ["slots",[]]; - if(!(_forEachIndex in _slots)) exitWith { - _slots pushBack _forEachIndex; - _house setVariable["slots",_slots,true]; - _pos = _x; - }; - } foreach _positions; - - if(_pos isEqualTo [0,0,0]) exitWith {}; - - _container = _className createVehicle [0,0,0]; - _container setPosATL _pos; - _container enableSimulation false; - - _containers pushBack _container; - clearWeaponCargoGlobal _container; - clearItemCargoGlobal _container; - clearMagazineCargoGlobal _container; - clearBackpackCargoGlobal _container; - //Add weapons to the crate. - { - _weaponCount = (_weapons select 1) select _forEachIndex; - _container addWeaponCargoGlobal [_x,_weaponCount]; - } foreach (_weapons select 0); - - //Add magazines - { - _magazineCount = (_magazines select 1) select _forEachIndex; - _container addMagazineCargoGlobal [_x,_magazineCount]; - } foreach (_magazines select 0); - - //Add items - { - _itemCount = (_items select 1) select _forEachIndex; - _container addItemCargoGlobal [_x,_itemCount]; - } foreach (_items select 0); - - //Add backpacks - { - _backpackCount = (_backpacks select 1) select _forEachIndex; - _container addBackpackCargoGlobal [_x,_backpackCount]; - } foreach (_backpacks select 0); - - } foreach _containerData; - - _house setVariable["containers",_containers,true]; - _return pushBack [_x select 1,_containers]; -} foreach _houses; + _pos = call compile format["%1",_x select 1]; + _house = nearestObject [_pos, "House"]; + _house allowDamage false; + _return pushBack [_x select 1,_containerss]; +} forEach _houses; -missionNamespace setVariable[format["houses_%1",_this],_return]; +missionNamespace setVariable [format["houses_%1",_uid],_return]; \ No newline at end of file diff --git a/life_server/Functions/Housing/fn_houseCleanup.sqf b/life_server/Functions/Housing/fn_houseCleanup.sqf index 43133f15..f19f9b61 100644 --- a/life_server/Functions/Housing/fn_houseCleanup.sqf +++ b/life_server/Functions/Housing/fn_houseCleanup.sqf @@ -1,21 +1,20 @@ /* - Author: Bryan "Tonic" Boardwine - - Description: - Cleans up containers inside the house. + File: fn_houseCleanup.sqf + Author: NiiRoZz + + Description: + Cleans up containers inside in house of player. */ -private["_query","_houses"]; -_query = format["SELECT pid, pos, inventory, containers FROM houses WHERE pid='%1' AND owned='1'",_this]; +private["_query","_containers"]; +_query = format["SELECT pid, pos FROM containers WHERE pid='%1' AND owned='1'",_this]; -_houses = [_query,2,true] call DB_fnc_asyncCall; +_containers = [_query,2,true] call DB_fnc_asyncCall; -if(count _houses == 0) exitWith {}; +if (count _containers isEqualTo 0) exitWith {}; { - _pos = call compile format["%1",_x select 1]; - _house = nearestBuilding _pos; - - if(!isNil {(_house getVariable "containers")}) then { - {if(!isNull _x) then {deleteVehicle _x;};} foreach (_house getVariable "containers"); - _house setVariable["containers",nil,true]; - }; -} foreach _houses; \ No newline at end of file + _pos = call compile format["%1",_x select 1]; + _container = nearestObjects[_pos,["Box_IND_Grenades_F","B_supplyCrate_F"],12]; + { + deleteVehicle _x; + } forEach _container; +} forEach _containers; diff --git a/life_server/Functions/Housing/fn_initHouses.sqf b/life_server/Functions/Housing/fn_initHouses.sqf index 8346fa12..6956b177 100644 --- a/life_server/Functions/Housing/fn_initHouses.sqf +++ b/life_server/Functions/Housing/fn_initHouses.sqf @@ -1,28 +1,26 @@ /* - Author: Bryan "Tonic" Boardwine - - Description: - WHAT THE HELL DO YOU THINK IT DOES?!?!!??!?!!?!??! + File: fn_initHouses.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Initalizes house setup when player joins the server. */ private["_queryResult","_query","_count"]; - _count = (["SELECT COUNT(*) FROM houses WHERE owned='1'",2] call DB_fnc_asyncCall) select 0; for [{_x=0},{_x<=_count},{_x=_x+10}] do { - - _query = format["SELECT houses.id, houses.pid, houses.pos, players.name FROM houses INNER JOIN players ON houses.pid=players.playerid WHERE houses.owned='1' LIMIT %1,10",_x]; - _queryResult = [_query,2,true] call DB_fnc_asyncCall; - if(count _queryResult == 0) exitWith {}; - - { - _pos = call compile format["%1",_x select 2]; - _house = nearestBuilding _pos; - _house setVariable["house_owner",[_x select 1,_x select 3],true]; - _house setVariable["house_id",_x select 0,true]; - _house setVariable["locked",true,true]; //Lock up all the stuff. - _numOfDoors = getNumber(configFile >> "CfgVehicles" >> (typeOf _house) >> "numberOfDoors"); - for "_i" from 1 to _numOfDoors do { - _house setVariable[format["bis_disabled_Door_%1",_i],1,true]; - }; - } foreach _queryResult; -}; \ No newline at end of file + _query = format["SELECT houses.id, houses.pid, houses.pos, players.name FROM houses INNER JOIN players WHERE houses.owned='1' AND houses.pid = players.playerid LIMIT %1,10",_x]; + _queryResult = [_query,2,true] call DB_fnc_asyncCall; + if (count _queryResult isEqualTo 0) exitWith {}; + { + _pos = call compile format["%1",_x select 2]; + _house = nearestObject [_pos, "House"]; + _house setVariable ["house_owner",[_x select 1,_x select 3],true]; + _house setVariable ["house_id",_x select 0,true]; + _house setVariable ["locked",true,true]; //Lock up all the stuff. + _numOfDoors = getNumber(configFile >> "CfgVehicles" >> (typeOf _house) >> "numberOfDoors"); + for "_i" from 1 to _numOfDoors do { + _house setVariable [format["bis_disabled_Door_%1",_i],1,true]; + }; + } forEach _queryResult; +}; diff --git a/life_server/Functions/Housing/fn_nearestDoor.sqf b/life_server/Functions/Housing/fn_nearestDoor.sqf index 1828255c..27d32c82 100644 --- a/life_server/Functions/Housing/fn_nearestDoor.sqf +++ b/life_server/Functions/Housing/fn_nearestDoor.sqf @@ -1,21 +1,22 @@ /* - Author: Bryan "Tonic" Boardwine - - Description: - Fetches the nearest door of the building the player is looking - at. + File: fn_nearestDoor.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Fetches the nearest door of the building the player is looking + at. */ private["_house","_door","_numOfDoors"]; -_house = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -if(isNull _house) exitWith {0}; -if(!(_house isKindOf "House_F")) exitWith {0}; +_house = param [0,objNull,[objNull]]; +if (isNull _house) exitWith {0}; +if (!(_house isKindOf "House_F")) exitWith {0}; _door = 0; _doors = getNumber(configFile >> "CfgVehicles" >> (typeOf _house) >> "numberOfDoors"); for "_i" from 1 to _doors do { - _selectionPos = _house selectionPosition format["Door_%1_trigger",_i]; - _worldSpace = _house modelToWorld _selectionPos; - if(player distance _worldSpace < 3.8) exitWith {_door = _i}; + _selectionPos = _house selectionPosition format["Door_%1_trigger",_i]; + _worldSpace = _house modelToWorld _selectionPos; + if (player distance _worldSpace < 3.8) exitWith {_door = _i}; }; -_door; \ No newline at end of file +_door; diff --git a/life_server/Functions/Housing/fn_sellHouse.sqf b/life_server/Functions/Housing/fn_sellHouse.sqf index 387e5838..c4ba57f3 100644 --- a/life_server/Functions/Housing/fn_sellHouse.sqf +++ b/life_server/Functions/Housing/fn_sellHouse.sqf @@ -1,31 +1,29 @@ /* - Author: Bryan "Tonic" Boardwine - - Description: - Used in selling the house, sets the owned to 0 and will cleanup with a - stored procedure on restart. + File: fn_sellHouse.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Used in selling the house, sets the owned to 0 and will cleanup with a + stored procedure on restart. */ private["_house","_houseID","_ownerID","_housePos","_query","_radius","_containers"]; -_house = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -if(isNull _house) exitWith {systemChat ":SERVER:sellHouse: House is null";}; +_house = param [0,objNull,[objNull]]; +if (isNull _house) exitWith {systemChat ":SERVER:sellHouse: House is null";}; -_houseID = _house getVariable["house_id",-1]; -if(_houseID == -1) then { - _housePos = getPosATL _house; - _ownerID = (_house getVariable "house_owner") select 0; - _query = format["UPDATE houses SET owned='0', pos='[]' WHERE pid='%1' AND pos='%2' AND owned='1'",_ownerID,_housePos]; - //systemChat format[":SERVER:sellHouse: house_id does not exist, query: %1",_query]; +_houseID = _house getVariable ["house_id",-1]; +if (_houseID isEqualTo -1) then { + _housePos = getPosATL _house; + _ownerID = (_house getVariable "house_owner") select 0; + _query = format["UPDATE houses SET owned='0', pos='[]' WHERE pid='%1' AND pos='%2' AND owned='1'",_ownerID,_housePos]; + //systemChat format[":SERVER:sellHouse: house_id does not exist, query: %1",_query]; } else { - //systemChat format[":SERVER:sellHouse: house_id is %1",_houseID]; - _query = format["UPDATE houses SET owned='0', pos='[]' WHERE id='%1'",_houseID]; + //systemChat format[":SERVER:sellHouse: house_id is %1",_houseID]; + _query = format["UPDATE houses SET owned='0', pos='[]' WHERE id='%1'",_houseID]; }; -_house setVariable["house_id",nil,true]; -_house setVariable["house_owner",nil,true]; -_radius = (((boundingBoxReal _house select 0) select 2) - ((boundingBoxReal _house select 1) select 2)); -_containers = nearestObjects[(getPosATL _house),["Box_IND_Grenades_F","B_supplyCrate_F"],_radius]; -{deleteVehicle _x} foreach _containers; //Fuck the way you do things Tonic, go fix it +_house setVariable ["house_id",nil,true]; +_house setVariable ["house_owner",nil,true]; [_query,1] call DB_fnc_asyncCall; -_house setVariable["house_sold",nil,true]; -["CALL deleteOldHouses",1] call DB_fnc_asyncCall; \ No newline at end of file +_house setVariable ["house_sold",nil,true]; +["CALL deleteOldHouses",1] call DB_fnc_asyncCall; diff --git a/life_server/Functions/Housing/fn_sellHouseContainer.sqf b/life_server/Functions/Housing/fn_sellHouseContainer.sqf new file mode 100644 index 00000000..cc8fb6b8 --- /dev/null +++ b/life_server/Functions/Housing/fn_sellHouseContainer.sqf @@ -0,0 +1,27 @@ +/* + File : fn_sellHouseContainer.sqf + Author: NiiRoZz + + Description: + Used in selling the house, container sets the owned to 0 and will cleanup with a + stored procedure on restart. +*/ +private["_house","_houseID","_ownerID","_housePos","_query","_radius","_containers"]; +_container = param [0,objNull,[objNull]]; +if (isNull _container) exitWith {}; + +_containerID = _container getVariable ["container_id",-1]; +if (_containerID isEqualTo -1) then { + _containerPos = getPosATL _container; + _ownerID = (_container getVariable "container_owner") select 0; + _query = format["UPDATE containers SET owned='0', pos='[]' WHERE pid='%1' AND pos='%2' AND owned='1'",_ownerID,_containerPos]; +} else { + _query = format["UPDATE containers SET owned='0', pos='[]' WHERE id='%1'",_containerID]; +}; + +_container setVariable ["container_id",nil,true]; +_container setVariable ["container_owner",nil,true]; +deleteVehicle _container; + +[_query,1] call DB_fnc_asyncCall; +["CALL deleteOldContainers",1] call DB_fnc_asyncCall; diff --git a/life_server/Functions/Housing/fn_updateHouseContainers.sqf b/life_server/Functions/Housing/fn_updateHouseContainers.sqf index 13c355c9..def8e87b 100644 --- a/life_server/Functions/Housing/fn_updateHouseContainers.sqf +++ b/life_server/Functions/Housing/fn_updateHouseContainers.sqf @@ -1,29 +1,24 @@ /* - BLAH BLAH - I LOVE NOTEPAD++ GET OVER IT - BLAH! + File : fn_updateHouseContainers.sqf + Author: NiiRoZz + + Description: + Update inventory "i" in container */ -private["_house","_houseID","_containers","_query"]; -_house = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -if(isNull _house) exitWith {systemChat "House null";}; -_houseID = _house getVariable["house_id",-1]; -if(_houseID == -1) exitWith {systemChat "HouseID invalid";}; +private["_containerID","_containers","_query","_vehItems","_vehMags","_vehWeapons","_vehBackpacks","_cargo"]; +_container = param [0,objNull,[objNull]]; +if (isNull _container) exitWith {}; +_containerID = _container getVariable ["container_id",-1]; +if (_houseID isEqualTo -1) exitWith {}; -_containers = _house getVariable ["containers",[]]; +_vehItems = getItemCargo _container; +_vehMags = getMagazineCargo _container; +_vehWeapons = getWeaponCargo _container; +_vehBackpacks = getBackpackCargo _container; +_cargo = [_vehItems,_vehMags,_vehWeapons,_vehBackpacks]; -_arr = []; -{ - _className = typeOf _x; - _weapons = getWeaponCargo _x; - _magazines = getMagazineCargo _x; - _items = getItemCargo _x; - _backpacks = getBackpackCargo _x; - - _arr pushBack [_className,[_weapons,_magazines,_items,_backpacks]]; -} foreach _containers; +_cargo = [_cargo] call DB_fnc_mresArray; -_arr = [_arr] call DB_fnc_mresArray; -_query = format["UPDATE houses SET containers='%1' WHERE id='%2'",_arr,_houseID]; +_query = format["UPDATE containers SET gear='%1' WHERE id='%2'",_cargo,_containerID]; [_query,1] call DB_fnc_asyncCall; -//systemChat "Query ran?"; \ No newline at end of file diff --git a/life_server/Functions/Housing/fn_updateHouseTrunk.sqf b/life_server/Functions/Housing/fn_updateHouseTrunk.sqf index df8ae37a..f4e5a55f 100644 --- a/life_server/Functions/Housing/fn_updateHouseTrunk.sqf +++ b/life_server/Functions/Housing/fn_updateHouseTrunk.sqf @@ -1,19 +1,20 @@ /* - Author: Bryan "Tonic" Boardwine - - Description: - Updates the storage for a house blah blah + File : fn_updateHouseTrunk.sqf + Author: NiiRoZz + + Description: + Update inventory "y" in container */ private["_house"]; -_house = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -if(isNull _house) exitWith {}; +_container = param [0,objNull,[objNull]]; +if (isNull _container) exitWith {}; -_trunkData = _house getVariable["Trunk",[[],0]]; -_houseID = _house getVariable["house_id",-1]; +_trunkData = _container getVariable ["Trunk",[[],0]]; +_containerID = _container getVariable ["container_id",-1]; -if(_houseID == -1) exitWith {}; //Dafuq? +if (_containerID isEqualTo -1) exitWith {}; //Dafuq? _trunkData = [_trunkData] call DB_fnc_mresArray; -_query = format["UPDATE houses SET inventory='%1' WHERE id='%2'",_trunkData,_houseID]; +_query = format["UPDATE containers SET inventory='%1' WHERE id='%2'",_trunkData,_containerID]; -[_query,1] call DB_fnc_asyncCall; \ No newline at end of file +[_query,1] call DB_fnc_asyncCall; diff --git a/life_server/Functions/Jail/fn_jailSys.sqf b/life_server/Functions/Jail/fn_jailSys.sqf index d65cb725..4380d8d6 100644 --- a/life_server/Functions/Jail/fn_jailSys.sqf +++ b/life_server/Functions/Jail/fn_jailSys.sqf @@ -1,16 +1,18 @@ #include "\life_server\script_macros.hpp" /* - File: fn_jailSys.sqf - Author: Bryan "Tonic" Boardwine - - Description: - I forget? + File: fn_jailSys.sqf + Author: Bryan "Tonic" Boardwine + + Description: + I forget? */ private["_unit","_bad","_id","_ret"]; -_unit = [_this,0,Objnull,[Objnull]] call BIS_fnc_param; -if(isNull _unit) exitWith {}; -_bad = [_this,1,false,[false]] call BIS_fnc_param; +params [ + ["_unit",objNull,[objNull]], + ["_bad",false,[false]] +]; +if (isNull _unit) exitWith {}; _id = owner _unit; _ret = [_unit] call life_fnc_wantedPerson; -[_ret,_bad] remoteExec ["life_fnc_jailMe",_id]; \ No newline at end of file +[_ret,_bad] remoteExec ["life_fnc_jailMe",_id]; diff --git a/life_server/Functions/MP/fn_MP.sqf b/life_server/Functions/MP/fn_MP.sqf deleted file mode 100644 index 16e9588a..00000000 --- a/life_server/Functions/MP/fn_MP.sqf +++ /dev/null @@ -1,43 +0,0 @@ -/* - Author: Karel Moricky - - Description: - Send function for remote execution (and executes locally if conditions are met) - - Parameter(s): - 0: ANY - function params - 1: STRING - function name - 2 (Optional): - BOOL - true to execute on each machine (including the one where the function was called from), false to execute it on server only [default: true] - STRING - the function will be executed only where unit defined by the variable is local - OBJECT - the function will be executed only where unit is local - GROUP - the function will be executed only on client who is member of the group - SIDE - the function will be executed on all players of the given side - NUMBER - the function will be executed only on client with the given ID - ARRAY - array of previous data types - 3 (Optional): BOOL - true for persistent call (will be called now and for every JIP client) [default: false] - - Returns: - ARRAY - sent packet -*/ - -with missionnamespace do { - private ["_params","_functionName","_target","_isPersistent","_isCall","_ownerID"]; - - _params = [_this,0,[]] call bis_fnc_param; - _functionName = [_this,1,"",[""]] call bis_fnc_param; - _target = [_this,2,true,[objnull,true,0,[],sideUnknown,grpnull,""]] call bis_fnc_param; - _isPersistent = [_this,3,false,[false]] call bis_fnc_param; - _isCall = [_this,4,false,[false]] call bis_fnc_param; - - //--- Send to server - BIS_fnc_MP_packet = [0,_params,_functionName,_target,_isPersistent,_isCall]; - publicvariableserver "BIS_fnc_MP_packet"; - - //--- Local execution - if !(ismultiplayer) then { - ["BIS_fnc_MP_packet",BIS_fnc_MP_packet] spawn BIS_fnc_MPexec; - }; - - BIS_fnc_MP_packet -}; \ No newline at end of file diff --git a/life_server/Functions/MP/fn_MPexec.sqf b/life_server/Functions/MP/fn_MPexec.sqf deleted file mode 100644 index c48c4268..00000000 --- a/life_server/Functions/MP/fn_MPexec.sqf +++ /dev/null @@ -1,125 +0,0 @@ -/* - Author: Karel Moricky - - Description: - Execute received remote execution - - Parameter(s): - _this select 0: STRING - Packet variable name (always "BIS_fnc_MP_packet") - _this select 1: ARRAY - Packet value (sent by BIS_fnc_MP function; see it's description for more details) - - Returns: - BOOL - true if function was executed successfuly -*/ -private ["_params","_functionName","_target","_isPersistent","_isCall","_varName","_varValue","_function","_validFunctions","_exitScript","_param2"]; -_exitScript = false; - -_varName = _this select 0; -_varValue = _this select 1; - -_mode = [_varValue,0,[0]] call bis_fnc_param; -_params = [_varValue,1,[]] call bis_fnc_param; -_functionName = [_varValue,2,"",[""]] call bis_fnc_param; -_target = [_varValue,3,true,[objnull,true,0,[],sideUnknown,grpnull,""]] call bis_fnc_param; -_isPersistent = [_varValue,4,false,[false]] call bis_fnc_param; -_isCall = [_varValue,5,false,[false]] call bis_fnc_param; - -_validFunctions = ["bis_fnc_execvm","BIS_fnc_effectKilledAirDestruction","BIS_fnc_effectKilledAirDestructionStage2"]; //Only these functions can be passed via BIS_fnc_MP -if(!(_functionName in _validFunctions)) exitWith {false}; //NO. -if(_functionName == "bis_fnc_execvm") then { - _param2 = _params select 1; - if(isNil "_param2") exitWith {_exitScript = true;}; - if(_param2 != "initPlayerServer.sqf") exitWith {_exitScript = true;}; -}; - -if(_exitScript) exitWith {false}; - -if (typename _target == typename []) then { - //--- Multi execution - { - [_varName,[_mode,_params,_functionName,_x,_isPersistent,_isCall]] call bis_fnc_MPexec; - } foreach _target; -} else{ - //--- Single execution - if (ismultiplayer && _mode == 0) then { - private ["_ownerID","_serverID"]; - _serverID = owner (missionnamespace getvariable ["bis_functions_mainscope",objnull]); //--- Server ID is not always 0 - - //--- Server process - switch (typename _target) do { - case (typename ""): { - _ownerID = owner (missionnamespace getvariable [_target,objnull]); - }; - case (typename objnull): { - _ownerID = owner _target; - }; - case (typename true): { - _ownerID = [_serverID,-1] select _target; - }; - case (typename 0): { - _ownerID = _target; - }; - case (typename grpnull); - case (typename sideUnknown): { - _ownerID = -1; - }; - }; - BIS_fnc_MP_packet = [1,_params,_functionName,_target,_isPersistent,_isCall]; - - //--- Send to clients - if (_ownerID < 0) then { - //--- Everyone - publicvariable "BIS_fnc_MP_packet"; - } else { - if (_ownerID != _serverID) then { - //--- Client - _ownerID publicvariableclient "BIS_fnc_MP_packet"; - }; - }; - - //--- Server execution (for all or server only) - if (_ownerID == -1 || _ownerID == _serverID) then { - ["BIS_fnc_MP_packet",BIS_fnc_MP_packet] spawn BIS_fnc_MPexec; - }; - - //--- Persistent call (for all or clients) - if (_isPersistent) then { - if (typename _target != typename 0) then { - private ["_logic","_queue"]; - _logic = missionnamespace getvariable ["bis_functions_mainscope",objnull]; - _queue = _logic getvariable ["BIS_fnc_MP_queue",[]]; - _queue set [ - count _queue, - +BIS_fnc_MP_packet - ]; - _logic setvariable ["BIS_fnc_MP_queue",_queue,true]; - } else { - ["Persistent execution is not allowed when target is %1. Use %2 or %3 instead.",typename 0,typename objnull,typename false] call bis_fnc_error; - }; - }; - } else { - - //--- Local execution - private ["_canExecute"]; - _canExecute = switch (typename _target) do { - case (typename grpnull): {player in units _target}; - case (typename sideUnknown): {(player call bis_fnc_objectside) == _target}; - default {true}; - }; - - if (_canExecute) then { - _function = missionnamespace getvariable _functionName; - if (!isnil "_function") then { - if (_isCall) then { - _params call _function; - } else { - _params spawn _function; - }; - true - } else { - ["Function '%1' does not exist",_functionName] call bis_fnc_error; - false - }; - }; - }; -}; \ No newline at end of file diff --git a/life_server/Functions/MP/fn_addScore.sqf b/life_server/Functions/MP/fn_addScore.sqf deleted file mode 100644 index 8bea35c0..00000000 --- a/life_server/Functions/MP/fn_addScore.sqf +++ /dev/null @@ -1,6 +0,0 @@ -private ["_object","_score"]; -_object = [_this,0,objnull,[objnull]] call bis_fnc_param; -_score = [_this,1,0,[0]] call bis_fnc_param; - -_object addscore _score; -_score \ No newline at end of file diff --git a/life_server/Functions/MP/fn_call.sqf b/life_server/Functions/MP/fn_call.sqf deleted file mode 100644 index a13f7d72..00000000 --- a/life_server/Functions/MP/fn_call.sqf +++ /dev/null @@ -1 +0,0 @@ -#include "fn_spawn.sqf" \ No newline at end of file diff --git a/life_server/Functions/MP/fn_execFSM.sqf b/life_server/Functions/MP/fn_execFSM.sqf deleted file mode 100644 index 8d5f82df..00000000 --- a/life_server/Functions/MP/fn_execFSM.sqf +++ /dev/null @@ -1,12 +0,0 @@ -private ["_params","_fsm"]; - -_params = []; -_fsm = [_this,0,"",["",[]]] call bis_fnc_param; - -if (typename _fsm == typename []) then { - _params = [_this,0,[]] call bis_fnc_param; - _fsm = [_this,1,"",[""]] call bis_fnc_param; - -}; - -_params execfsm _fsm \ No newline at end of file diff --git a/life_server/Functions/MP/fn_execRemote.sqf b/life_server/Functions/MP/fn_execRemote.sqf deleted file mode 100644 index 2a456681..00000000 --- a/life_server/Functions/MP/fn_execRemote.sqf +++ /dev/null @@ -1 +0,0 @@ -#include "fn_MP.sqf" \ No newline at end of file diff --git a/life_server/Functions/MP/fn_execVM.sqf b/life_server/Functions/MP/fn_execVM.sqf deleted file mode 100644 index 9669e039..00000000 --- a/life_server/Functions/MP/fn_execVM.sqf +++ /dev/null @@ -1,11 +0,0 @@ -private ["_params","_script"]; - -_params = []; -_script = [_this,0,"",["",[]]] call bis_fnc_param; - -if (typename _script == typename []) then { - _params = [_this,0,[]] call bis_fnc_param; - _script = [_this,1,"",[""]] call bis_fnc_param; -}; - -_params execvm _script \ No newline at end of file diff --git a/life_server/Functions/MP/fn_initMultiplayer.sqf b/life_server/Functions/MP/fn_initMultiplayer.sqf deleted file mode 100644 index 9d549555..00000000 --- a/life_server/Functions/MP/fn_initMultiplayer.sqf +++ /dev/null @@ -1,56 +0,0 @@ -/* - Author: Karel Moricky - - Description: - Multiplayer mission init, executed automatically upon mission start. - - Parameter(s): - None - - Returns: - NOTHING -*/ - -//--- Execute MP functions -if (isMultiplayer) then { - ["BIS_fnc_initMultiplayer"] call bis_fnc_startLoadingScreen; - BIS_fnc_MP_packet = []; - "BIS_fnc_MP_packet" addPublicVariableEventHandler {_this call BIS_fnc_MPexec}; - - //--- Execute persistent functions - waituntil {!isnil "bis_functions_mainscope"}; - _queue = bis_functions_mainscope getvariable ["BIS_fnc_MP_queue",[]]; - { - //--- Do not declare persistent call again to avoid infinite loop - _varValue = +_x; - _mode = [_varValue,0,[0]] call bis_fnc_paramin; - _params = [_varValue,1,[]] call bis_fnc_paramin; - _functionName = [_varValue,2,"",[""]] call bis_fnc_paramin; - _target = [_varValue,3,-1,[objnull,true,0,[],sideUnknown,grpnull]] call bis_fnc_paramin; - _isPersistent = [_varValue,4,false,[false]] call bis_fnc_paramin; - _isCall = [_varValue,5,false,[false]] call bis_fnc_paramin; - - switch (typename _target) do { - case (typename objnull): { - if (local _target) then { - ["BIS_fnc_MP_packet",[_mode,_params,_functionName,_target,false,_isCall]] call BIS_fnc_MPexec; //--- Local execution - }; - }; - case (typename true): { - if (_target) then { - ["BIS_fnc_MP_packet",[_mode,_params,_functionName,_target,false,_isCall]] call BIS_fnc_MPexec; //--- Local execution - } else { - [_params,_functionName,_target,false,_isCall] call BIS_fnc_MP; //--- Global execution - }; - }; - case (typename grpnull); - case (typename sideUnknown): { - ["BIS_fnc_MP_packet",[_mode,_params,_functionName,_target,false,_isCall]] call BIS_fnc_MPexec; //--- Local execution - }; - case (typename 0): { - //--- Disabled - }; - }; - } foreach _queue; - ["BIS_fnc_initMultiplayer"] call bis_fnc_endLoadingScreen; -}; \ No newline at end of file diff --git a/life_server/Functions/MP/fn_initPlayable.sqf b/life_server/Functions/MP/fn_initPlayable.sqf deleted file mode 100644 index d6ab8072..00000000 --- a/life_server/Functions/MP/fn_initPlayable.sqf +++ /dev/null @@ -1,23 +0,0 @@ -_code = [_this,0,{},[{}]] call bis_fnc_param; -_codeVar = "BIS_fnc_initPlayable_code" + str (["BIS_fnc_initPlayable_code",1] call bis_fnc_counter); - -//--- Execute on JIPped -_exec = compile format [ - " - _unit = _this select 0; - if !(_unit getvariable ['%1',false]) then { - _function = missionnamespace getvariable ['%1',{}]; - [_unit] spawn _function; - _unit setvariable ['%1',true,true]; - }; - - ", - _codeVar -]; -missionnamespace setvariable [_codeVar,_code]; -_exec call bis_fnc_onPlayerConnected; - -//--- Execute on existing -{ - [_x] spawn _exec; -} foreach (playableunits + switchableunits); \ No newline at end of file diff --git a/life_server/Functions/MP/fn_missionTimeLeft.sqf b/life_server/Functions/MP/fn_missionTimeLeft.sqf deleted file mode 100644 index bc980df6..00000000 --- a/life_server/Functions/MP/fn_missionTimeLeft.sqf +++ /dev/null @@ -1,23 +0,0 @@ -/* - Author: Karel Moricky - - Description: - Returns time in seconds until the mission end. - Remaining time can be set using 'estimatedTimeLeft' command or using BIS_fnc_countdown - - Parameter(s): None - - Returns: - NUMBER - time in seconds. -1 when no time was set yet. -*/ - -private ["_value"]; -_value = [] call bis_fnc_countdown; -if (_value <= 0 && ismultiplayer) then { - _value = if (estimatedEndServerTime != 0) then { - ((estimatedEndServerTime - servertime) max 0) - } else { - -1 - }; -}; -_value \ No newline at end of file diff --git a/life_server/Functions/MP/fn_onPlayerConnected.sqf b/life_server/Functions/MP/fn_onPlayerConnected.sqf deleted file mode 100644 index 1161040e..00000000 --- a/life_server/Functions/MP/fn_onPlayerConnected.sqf +++ /dev/null @@ -1,56 +0,0 @@ -/* - Author: Karel Moricky - - Description: - Executes a function on server every time a player connects the mission. - Passed arguments are [player:Object,arguments] - - Parameter(s): - 0: STRING or CODE - function variable or code to be executed - 1: ANY - optional arguments passed to the function - - Returns: - BOOL -*/ - -private ["_function","_args","_execute"]; -_args = [_this,1,[]] call bis_fnc_param; -_execute = [_this,2,false,[false]] call bis_fnc_param; - -if !(_execute) then { - - if (isserver) then { - _function = [_this,0,"",["",{}]] call bis_fnc_param; - - //--- Code input; convert to function - if (typename _function == typename {}) then { - private ["_code"]; - _code = _function; - _function = "BIS_fnc_onPlayerConnected_function" + str (["BIS_fnc_onPlayerConnected_function",1] call bis_fnc_counter); - missionnamespace setvariable [_function,_code]; - }; - - //--- Register - [ - [_function,_args,true], - "BIS_fnc_onPlayerConnected", - true, - true - ] call bis_fnc_mp; - true - } else { - "BIS_fnc_onPlayerConnected can be called only on server." call bis_fnc_error; - false - }; -} else { - _function = [_this,0,"",[""]] call bis_fnc_param; - - //--- Execute - [ - [player,_args], - _function, - false, - false - ] call bis_fnc_mp; - true -}; \ No newline at end of file diff --git a/life_server/Functions/MP/fn_setRespawnDelay.sqf b/life_server/Functions/MP/fn_setRespawnDelay.sqf deleted file mode 100644 index 2d95df4b..00000000 --- a/life_server/Functions/MP/fn_setRespawnDelay.sqf +++ /dev/null @@ -1,42 +0,0 @@ -/* - Author: Karel Moricky - - Description: - Increase the respawn time based on a condition - - Parameter(s): - 0: CODE - Condition, must return BOOL - 1: NUMBER - delay in seconds which is applied when the condition is true - 2: STRING - description displayed when the delay is in effect - - Returns: - NOTHING -*/ -private ["_condition","_delayMax","_description","_delay","_return","_time"]; - -_condition = [_this,0,{false},[{}]] call bis_fnc_param; -_delayMax = [_this,1,0,[0]] call bis_fnc_param; -_description = [_this,2,"",[""]] call bis_fnc_param; -_delay = 0; - -while {!alive player} do { - _return = [call _condition,0,false,[false]] call bis_fnc_paramIn; - if (call _condition) then { - titletext [_description,"plain"]; - if (_delay == 0) then { - _delay = _delayMax; - setPlayerRespawnTime (playerrespawnTime + _delay); - }; - } else { - if (_delay != 0) then { - setPlayerRespawnTime (playerrespawnTime - _delay); - _delay = 0; - }; - }; - - _time = time + 1; - waituntil {time > _time}; -}; - -titletext ["","plain"]; -setPlayerRespawnTime getnumber (missionconfigfile >> "respawnDelay") \ No newline at end of file diff --git a/life_server/Functions/MP/fn_spawn.sqf b/life_server/Functions/MP/fn_spawn.sqf deleted file mode 100644 index 4d937da3..00000000 --- a/life_server/Functions/MP/fn_spawn.sqf +++ /dev/null @@ -1,11 +0,0 @@ -private ["_params","_code"]; - -_params = []; -_code = [_this,0,{},[{},[]]] call bis_fnc_param; - -if (typename _code == typename []) then { - _params = [_this,0,[]] call bis_fnc_param; - _code = [_this,1,{},[{}]] call bis_fnc_param; -}; - -_params call _code \ No newline at end of file diff --git a/life_server/Functions/MySQL/fn_asyncCall.sqf b/life_server/Functions/MySQL/fn_asyncCall.sqf index 1ed19949..69d0252c 100644 --- a/life_server/Functions/MySQL/fn_asyncCall.sqf +++ b/life_server/Functions/MySQL/fn_asyncCall.sqf @@ -1,55 +1,56 @@ #include "\life_server\script_macros.hpp" /* - File: fn_asyncCall.sqf - Author: Bryan "Tonic" Boardwine + File: fn_asyncCall.sqf + Author: Bryan "Tonic" Boardwine - Description: - Commits an asynchronous call to ExtDB + Description: + Commits an asynchronous call to ExtDB - Parameters: - 0: STRING (Query to be ran). - 1: INTEGER (1 = ASYNC + not return for update/insert, 2 = ASYNC + return for query's). - 3: BOOL (True to return a single array, false to return multiple entries mainly for garage). + Parameters: + 0: STRING (Query to be ran). + 1: INTEGER (1 = ASYNC + not return for update/insert, 2 = ASYNC + return for query's). + 3: BOOL (True to return a single array, false to return multiple entries mainly for garage). */ private["_queryStmt","_mode","_multiarr","_queryResult","_key","_return","_loop"]; -_queryStmt = [_this,0,"",[""]] call BIS_fnc_param; -_mode = [_this,1,1,[0]] call BIS_fnc_param; -_multiarr = [_this,2,false,[false]] call BIS_fnc_param; +params [ + ["_queryStmt","",[""]], + ["_mode",1,[0]], + ["_multiarr",false,[false]] +]; _key = EXTDB format["%1:%2:%3",_mode,FETCH_CONST(life_sql_id),_queryStmt]; -if(EQUAL(_mode,1)) exitWith {true}; +if (_mode isEqualTo 1) exitWith {true}; _key = call compile format["%1",_key]; -_key = SEL(_key,1); - -//What the heck is going on with the double while loop? I don't remember this... -_queryResult = ""; -_loop = true; -while{_loop} do { - _queryResult = EXTDB format["4:%1", _key]; - if (EQUAL(_queryResult,"[5]")) then { - // extDB2 returned that result is Multi-Part Message - _queryResult = ""; - while{true} do { - _pipe = EXTDB format["5:%1", _key]; - if(_pipe == "") exitWith {_loop = false}; - _queryResult = _queryResult + _pipe; - }; - } else { - if (EQUAL(_queryResult,"[3]")) then { - diag_log format ["extDB2: uiSleep [4]: %1", diag_tickTime]; - //uiSleep 0.1; - } else { - _loop = false; - }; - }; +_key = (_key select 1); +_queryResult = EXTDB format["4:%1", _key]; + +//Make sure the data is received +if (_queryResult isEqualTo "[3]") then { + for "_i" from 0 to 1 step 0 do { + if (!(_queryResult isEqualTo "[3]")) exitWith {}; + _queryResult = EXTDB format["4:%1", _key]; + }; +}; + +if (_queryResult isEqualTo "[5]") then { + _loop = true; + for "_i" from 0 to 1 step 0 do { // extDB2 returned that result is Multi-Part Message + _queryResult = ""; + for "_i" from 0 to 1 step 0 do { + _pipe = EXTDB format["5:%1", _key]; + if (_pipe isEqualTo "") exitWith {_loop = false}; + _queryResult = _queryResult + _pipe; + }; + if (!_loop) exitWith {}; + }; }; _queryResult = call compile _queryResult; -if(EQUAL(SEL(_queryResult,0),0)) exitWith {diag_log format ["extDB2: Protocol Error: %1", _queryResult]; []}; -_return = SEL(_queryResult,1); -if(!_multiarr && count _return > 0) then { - _return = SEL(_return,0); +if ((_queryResult select 0) isEqualTo 0) exitWith {diag_log format ["extDB2: Protocol Error: %1", _queryResult]; []}; +_return = (_queryResult select 1); +if (!_multiarr && count _return > 0) then { + _return = (_return select 0); }; -_return; \ No newline at end of file +_return; diff --git a/life_server/Functions/MySQL/fn_bool.sqf b/life_server/Functions/MySQL/fn_bool.sqf index 7a184b4b..77cd3048 100644 --- a/life_server/Functions/MySQL/fn_bool.sqf +++ b/life_server/Functions/MySQL/fn_bool.sqf @@ -1,26 +1,27 @@ /* - File: fn_bool.sqf - Author: TAW_Tonic - - Description: - Handles bool conversion for MySQL since MySQL doesn't support 'true' or 'false' - instead MySQL uses Tinyint for BOOLEAN (0 = false, 1 = true) + File: fn_bool.sqf + Author: TAW_Tonic + + Description: + Handles bool conversion for MySQL since MySQL doesn't support 'true' or 'false' + instead MySQL uses Tinyint for BOOLEAN (0 = false, 1 = true) */ -private["_bool","_mode"]; -_bool = [_this,0,0,[false,0]] call BIS_fnc_param; -_mode = [_this,1,0,[0]] call BIS_fnc_param; - +params [ + ["_bool",0,[false,0]], + ["_mode",0,[0]] +]; + switch (_mode) do { - case 0: { - if(typeName _bool == "SCALAR") exitWith {0}; - if(_bool) then {1} else {0}; - }; - - case 1: { - if(typeName _bool != "SCALAR") exitWith {false}; - switch (_bool) do { - case 0: {false}; - case 1: {true}; - }; - }; -}; \ No newline at end of file + case 0: { + if (_bool isEqualType 0) exitWith {0}; + if (_bool) then {1} else {0}; + }; + + case 1: { + if (!(_bool isEqualType 0)) exitWith {false}; + switch (_bool) do { + case 0: {false}; + case 1: {true}; + }; + }; +}; diff --git a/life_server/Functions/MySQL/fn_insertRequest.sqf b/life_server/Functions/MySQL/fn_insertRequest.sqf index a45906db..9737341d 100644 --- a/life_server/Functions/MySQL/fn_insertRequest.sqf +++ b/life_server/Functions/MySQL/fn_insertRequest.sqf @@ -1,24 +1,24 @@ #include "\life_server\script_macros.hpp" /* - File: fn_insertRequest.sqf - Author: Bryan "Tonic" Boardwine + File: fn_insertRequest.sqf + Author: Bryan "Tonic" Boardwine - Description: - Does something with inserting... Don't have time for - descriptions... Need to write it... + Description: + Adds a player to the database upon first joining of the server. + Recieves information from core\sesison\fn_insertPlayerInfo.sqf */ -private["_handler","_thread","_queryResult","_query","_alias"]; +private["_queryResult","_query","_alias"]; params [ - "_uid", - "_name", - ["_money",0], - ["_bank",2500], - ["_returnToSender",objNull,[objNull]] + "_uid", + "_name", + ["_money",-1,[0]], + ["_bank",-1,[0]], + ["_returnToSender",objNull,[objNull]] ]; //Error checks -if((_uid == "") OR (_name == "")) exitWith {systemChat "Bad UID or name";}; //Let the client be 'lost' in 'transaction' -if(isNull _returnToSender) exitWith {systemChat "ReturnToSender is Null!";}; //No one to send this to! +if ((_uid isEqualTo "") || (_name isEqualTo "")) exitWith {systemChat "Bad UID or name";}; //Let the client be 'lost' in 'transaction' +if (isNull _returnToSender) exitWith {systemChat "ReturnToSender is Null!";}; //No one to send this to! _query = format["SELECT playerid, name FROM players WHERE playerid='%1'",_uid]; @@ -26,15 +26,17 @@ _query = format["SELECT playerid, name FROM players WHERE playerid='%1'",_uid]; _tickTime = diag_tickTime; _queryResult = [_query,2] call DB_fnc_asyncCall; -diag_log "------------- Insert Query Request -------------"; -diag_log format["QUERY: %1",_query]; -diag_log format["Time to complete: %1 (in seconds)",(diag_tickTime - _tickTime)]; -diag_log format["Result: %1",_queryResult]; -diag_log "------------------------------------------------"; +if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { + diag_log "------------- Insert Query Request -------------"; + diag_log format["QUERY: %1",_query]; + diag_log format["Time to complete: %1 (in seconds)",(diag_tickTime - _tickTime)]; + diag_log format["Result: %1",_queryResult]; + diag_log "------------------------------------------------"; +}; //Double check to make sure the client isn't in the database... -if(typeName _queryResult == "STRING") exitWith {[] remoteExecCall ["SOCK_fnc_dataQuery",(owner _returnToSender)];}; //There was an entry! -if(count _queryResult != 0) exitWith {[] remoteExecCall ["SOCK_fnc_dataQuery",(owner _returnToSender)];}; +if (_queryResult isEqualType "") exitWith {[] remoteExecCall ["SOCK_fnc_dataQuery",(owner _returnToSender)];}; //There was an entry! +if (count _queryResult != 0) exitWith {[] remoteExecCall ["SOCK_fnc_dataQuery",(owner _returnToSender)];}; //Clense and prepare some information. _name = [_name] call DB_fnc_mresString; //Clense the name of bad chars. @@ -44,13 +46,12 @@ _bank = [_bank] call DB_fnc_numberSafe; //Prepare the query statement.. _query = format["INSERT INTO players (playerid, name, cash, bankacc, aliases, cop_licenses, med_licenses, civ_licenses, civ_gear, cop_gear, med_gear) VALUES('%1', '%2', '%3', '%4', '%5','""[]""','""[]""','""[]""','""[]""','""[]""','""[]""')", - _uid, - _name, - _money, - _bank, - _alias + _uid, + _name, + _money, + _bank, + _alias ]; - [_query,1] call DB_fnc_asyncCall; [] remoteExecCall ["SOCK_fnc_dataQuery",(owner _returnToSender)]; diff --git a/life_server/Functions/MySQL/fn_insertVehicle.sqf b/life_server/Functions/MySQL/fn_insertVehicle.sqf index 7af3dd09..524322b1 100644 --- a/life_server/Functions/MySQL/fn_insertVehicle.sqf +++ b/life_server/Functions/MySQL/fn_insertVehicle.sqf @@ -1,24 +1,24 @@ /* - File: fn_insertVehicle.sqf - Author: Bryan "Tonic" Boardwine + File: fn_insertVehicle.sqf + Author: Bryan "Tonic" Boardwine - Description: - Inserts the vehicle into the database + Description: + Inserts the vehicle into the database */ -private["_uid","_side","_type","_className","_color","_plate","_query","_sql"]; +private["_query","_sql"]; params [ - "_uid", - "_side", - "_type", - "_className", - ["_color",-1,[0]], - ["_plate",-1,[0]] + "_uid", + "_side", + "_type", + "_className", + ["_color",-1,[0]], + ["_plate",-1,[0]] ]; //Stop bad data being passed. -if(_uid == "" OR _side == "" OR _type == "" OR _className == "" OR _color == -1 OR _plate == -1) exitWith {}; +if (_uid isEqualTo "" || _side isEqualTo "" || _type isEqualTo "" || _className isEqualTo "" || _color isEqualTo -1 || _plate isEqualTo -1) exitWith {}; -_query = format["INSERT INTO vehicles (side, classname, type, pid, alive, active, inventory, color, plate) VALUES ('%1', '%2', '%3', '%4', '1','1','""[]""', '%5', '%6')",_side,_className,_type,_uid,_color,_plate]; +_query = format["INSERT INTO vehicles (side, classname, type, pid, alive, active, inventory, color, plate, gear, damage) VALUES ('%1', '%2', '%3', '%4', '1','1','""[[],0]""', '%5', '%6','""[]""','""[]""')",_side,_className,_type,_uid,_color,_plate]; [_query,1] call DB_fnc_asyncCall; diff --git a/life_server/Functions/MySQL/fn_mresArray.sqf b/life_server/Functions/MySQL/fn_mresArray.sqf index 7573c4e8..772d9d26 100644 --- a/life_server/Functions/MySQL/fn_mresArray.sqf +++ b/life_server/Functions/MySQL/fn_mresArray.sqf @@ -1,27 +1,26 @@ /* - File: fn_mresArray.sqf - Author: Bryan "Tonic" Boardwine"; - - Description: - Acts as a mres (MySQL Real Escape) for arrays so they - can be properly inserted into the database without causing - any problems. The return method is 'hacky' but it's effective. + File: fn_mresArray.sqf + Author: Bryan "Tonic" Boardwine"; + + Description: + Acts as a mres (MySQL Real Escape) for arrays so they + can be properly inserted into the database without causing + any problems. The return method is 'hacky' but it's effective. */ -private["_array"]; -_array = [_this,0,[],[[]]] call BIS_fnc_param; +private _array = param [0,[],[[]]]; _array = str(str(_array)); _array = toArray(_array); for "_i" from 0 to (count _array)-1 do { - _sel = _array select _i; - if((_i != 0 && _i != ((count _array)-1))) then - { - if(_sel == 34) then - { - _array set[_i,96]; - }; - }; + _sel = _array select _i; + if ((_i != 0 && _i != ((count _array)-1))) then + { + if (_sel isEqualTo 34) then + { + _array set[_i,96]; + }; + }; }; -toString(_array); \ No newline at end of file +toString(_array); diff --git a/life_server/Functions/MySQL/fn_mresString.sqf b/life_server/Functions/MySQL/fn_mresString.sqf index 2af757b2..ee204f97 100644 --- a/life_server/Functions/MySQL/fn_mresString.sqf +++ b/life_server/Functions/MySQL/fn_mresString.sqf @@ -1,22 +1,20 @@ /* - File: fn_mresString.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Makes the string safe to be passed to MySQL (strips various stuff). + File: fn_mresString.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Makes the string safe to be passed to MySQL (strips various stuff). */ -private["_string","_filter"]; -_string = [_this,0,"",[""]] call BIS_fnc_param; -_filter = "'/\`:|;,{}-""<>"; +private _string = param [0,"",[""]]; +private _filter = "'/\`:|;,{}-""<>"; _string = toArray _string; //Blow it up to an array _filter = toArray _filter; //Blow it up to an array { - if(_x in _filter) then { - _string set[_forEachIndex,-1]; - }; -} foreach _string; + if (_x in _filter) then { + _string deleteAt _forEachIndex; + }; +} forEach _string; -_string = _string - [-1]; -toString _string; \ No newline at end of file +toString _string; diff --git a/life_server/Functions/MySQL/fn_mresToArray.sqf b/life_server/Functions/MySQL/fn_mresToArray.sqf index edbc7be7..9ff6a5ed 100644 --- a/life_server/Functions/MySQL/fn_mresToArray.sqf +++ b/life_server/Functions/MySQL/fn_mresToArray.sqf @@ -1,26 +1,25 @@ /* - File: fn_mresToArray.sqf - Author: Bryan "Tonic" Boardwine"; - - Description: - Acts as a mres (MySQL Real Escape) for arrays so they - can be properly inserted into the database without causing - any problems. The return method is 'hacky' but it's effective. + File: fn_mresToArray.sqf + Author: Bryan "Tonic" Boardwine"; + + Description: + Acts as a mres (MySQL Real Escape) for arrays so they + can be properly inserted into the database without causing + any problems. The return method is 'hacky' but it's effective. */ -private["_array"]; -_array = [_this,0,"",[""]] call BIS_fnc_param; -if(_array == "") exitWith {[]}; +private _array = param [0,"",[""]]; +if (_array isEqualTo "") exitWith {[]}; _array = toArray(_array); for "_i" from 0 to (count _array)-1 do { - _sel = _array select _i; - if(_sel == 96) then - { - _array set[_i,39]; - }; + _sel = _array select _i; + if (_sel == 96) then + { + _array set[_i,39]; + }; }; _array = toString(_array); _array = call compile format["%1", _array]; -_array; \ No newline at end of file +_array; diff --git a/life_server/Functions/MySQL/fn_numberSafe.sqf b/life_server/Functions/MySQL/fn_numberSafe.sqf index 5a8ccd82..4d621ccb 100644 --- a/life_server/Functions/MySQL/fn_numberSafe.sqf +++ b/life_server/Functions/MySQL/fn_numberSafe.sqf @@ -1,19 +1,21 @@ /* - Author: Karel Moricky + File: fn_numberSafe.sqf + Author: Karel Moricky - Description: - Convert a number into string (avoiding scientific notation) + Description: + Convert a number into string (avoiding scientific notation) - Parameter(s): - _this: NUMBER + Parameter(s): + _this: NUMBER - Returns: - STRING + Returns: + STRING */ private ["_number","_mod","_digots","_digitsCount","_modBase","_numberText"]; - -_number = [_this,0,0,[0]] call bis_fnc_param; -_mod = [_this,1,3,[0]] call bis_fnc_param; +params [ + ["_number",0,[0]], + ["_mod",3,[0]] +]; _digits = _number call bis_fnc_numberDigits; _digitsCount = count _digits - 1; @@ -21,7 +23,7 @@ _digitsCount = count _digits - 1; _modBase = _digitsCount % _mod; _numberText = ""; { - _numberText = _numberText + str _x; - if ((_foreachindex - _modBase) % (_mod) == 0 && _foreachindex != _digitsCount) then {_numberText = _numberText + "";}; -} foreach _digits; -_numberText \ No newline at end of file + _numberText = _numberText + str _x; + if ((_foreachindex - _modBase) % (_mod) isEqualTo 0 && _foreachindex != _digitsCount) then {_numberText = _numberText + "";}; +} forEach _digits; +_numberText diff --git a/life_server/Functions/MySQL/fn_queryRequest.sqf b/life_server/Functions/MySQL/fn_queryRequest.sqf index 6f8afdce..ee15482f 100644 --- a/life_server/Functions/MySQL/fn_queryRequest.sqf +++ b/life_server/Functions/MySQL/fn_queryRequest.sqf @@ -1,54 +1,55 @@ #include "\life_server\script_macros.hpp" /* - File: fn_queryRequest.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Handles the incoming request and sends an asynchronous query - request to the database. - - Return: - ARRAY - If array has 0 elements it should be handled as an error in client-side files. - STRING - The request had invalid handles or an unknown error and is logged to the RPT. + File: fn_queryRequest.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Handles the incoming request and sends an asynchronous query + request to the database. + + Return: + ARRAY - If array has 0 elements it should be handled as an error in client-side files. + STRING - The request had invalid handles or an unknown error and is logged to the RPT. */ -private["_uid","_side","_query","_return","_queryResult","_qResult","_handler","_thread","_tickTime","_loops","_returnCount"]; -_uid = [_this,0,"",[""]] call BIS_fnc_param; -_side = [_this,1,sideUnknown,[civilian]] call BIS_fnc_param; -_ownerID = [_this,2,ObjNull,[ObjNull]] call BIS_fnc_param; +private["_uid","_side","_query","_queryResult","_tickTime","_tmp"]; +params [ + ["_uid","",[""]], + ["_side",sideUnknown,[civilian]], + ["_ownerID",objNull,[objNull]] +]; -if(isNull _ownerID) exitWith {}; +if (isNull _ownerID) exitWith {}; _ownerID = owner _ownerID; -/* - _returnCount is the count of entries we are expecting back from the async call. - The other part is well the SQL statement. -*/ -_query = switch(_side) do { - case west: {_returnCount = 10; format["SELECT playerid, name, cash, bankacc, adminlevel, donatorlvl, cop_licenses, coplevel, cop_gear, blacklist FROM players WHERE playerid='%1'",_uid];}; - case civilian: {_returnCount = 9; format["SELECT playerid, name, cash, bankacc, adminlevel, donatorlvl, civ_licenses, arrested, civ_gear FROM players WHERE playerid='%1'",_uid];}; - case independent: {_returnCount = 9; format["SELECT playerid, name, cash, bankacc, adminlevel, donatorlvl, med_licenses, mediclevel, med_gear FROM players WHERE playerid='%1'",_uid];}; +_query = switch (_side) do { + // West - 11 entries returned + case west: {format["SELECT playerid, name, cash, bankacc, adminlevel, donorlevel, cop_licenses, coplevel, cop_gear, blacklist, cop_stats, playtime FROM players WHERE playerid='%1'",_uid];}; + // Civilian - 12 entries returned + case civilian: {format["SELECT playerid, name, cash, bankacc, adminlevel, donorlevel, civ_licenses, arrested, civ_gear, civ_stats, civ_alive, civ_position, playtime FROM players WHERE playerid='%1'",_uid];}; + // Independent - 10 entries returned + case independent: {format["SELECT playerid, name, cash, bankacc, adminlevel, donorlevel, med_licenses, mediclevel, med_gear, med_stats, playtime FROM players WHERE playerid='%1'",_uid];}; }; - _tickTime = diag_tickTime; _queryResult = [_query,2] call DB_fnc_asyncCall; -diag_log "------------- Client Query Request -------------"; -diag_log format["QUERY: %1",_query]; -diag_log format["Time to complete: %1 (in seconds)",(diag_tickTime - _tickTime)]; -diag_log format["Result: %1",_queryResult]; -diag_log "------------------------------------------------"; +if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { + diag_log "------------- Client Query Request -------------"; + diag_log format["QUERY: %1",_query]; + diag_log format["Time to complete: %1 (in seconds)",(diag_tickTime - _tickTime)]; + diag_log format["Result: %1",_queryResult]; + diag_log "------------------------------------------------"; +}; -if(typeName _queryResult == "STRING") exitWith { - [] remoteExecCall ["SOCK_fnc_insertPlayerInfo",_ownerID]; +if (_queryResult isEqualType "") exitWith { + [] remoteExecCall ["SOCK_fnc_insertPlayerInfo",_ownerID]; }; -if(count _queryResult == 0) exitWith { - [] remoteExecCall ["SOCK_fnc_insertPlayerInfo",_ownerID]; +if (count _queryResult isEqualTo 0) exitWith { + [] remoteExecCall ["SOCK_fnc_insertPlayerInfo",_ownerID]; }; //Blah conversion thing from a2net->extdb -private["_tmp"]; _tmp = _queryResult select 2; _queryResult set[2,[_tmp] call DB_fnc_numberSafe]; _tmp = _queryResult select 3; @@ -56,40 +57,105 @@ _queryResult set[3,[_tmp] call DB_fnc_numberSafe]; //Parse licenses (Always index 6) _new = [(_queryResult select 6)] call DB_fnc_mresToArray; -if(typeName _new == "STRING") then {_new = call compile format["%1", _new];}; +if (_new isEqualType "") then {_new = call compile format["%1", _new];}; _queryResult set[6,_new]; //Convert tinyint to boolean _old = _queryResult select 6; -for "_i" from 0 to (count _old)-1 do -{ - _data = _old select _i; - _old set[_i,[_data select 0, ([_data select 1,1] call DB_fnc_bool)]]; +for "_i" from 0 to (count _old)-1 do { + _data = _old select _i; + _old set[_i,[_data select 0, ([_data select 1,1] call DB_fnc_bool)]]; }; _queryResult set[6,_old]; _new = [(_queryResult select 8)] call DB_fnc_mresToArray; -if(typeName _new == "STRING") then {_new = call compile format["%1", _new];}; +if (_new isEqualType "") then {_new = call compile format["%1", _new];}; _queryResult set[8,_new]; //Parse data for specific side. switch (_side) do { - case west: { - _queryResult set[9,([_queryResult select 9,1] call DB_fnc_bool)]; - }; - - case civilian: { - _queryResult set[7,([_queryResult select 7,1] call DB_fnc_bool)]; - _houseData = _uid spawn TON_fnc_fetchPlayerHouses; - waitUntil {scriptDone _houseData}; - _queryResult pushBack (missionNamespace getVariable[format["houses_%1",_uid],[]]); - _gangData = _uid spawn TON_fnc_queryPlayerGang; - waitUntil{scriptDone _gangData}; - _queryResult pushBack (missionNamespace getVariable[format["gang_%1",_uid],[]]); - }; + case west: { + _queryResult set[9,([_queryResult select 9,1] call DB_fnc_bool)]; + + //Parse Stats + _new = [(_queryResult select 10)] call DB_fnc_mresToArray; + if (_new isEqualType "") then {_new = call compile format["%1", _new];}; + _queryResult set[10,_new]; + + //Playtime + _new = [(_queryResult select 11)] call DB_fnc_mresToArray; + if (_new isEqualType "") then {_new = call compile format["%1", _new];}; + _index = TON_fnc_playtime_values_request find [_uid, _new]; + if (_index != -1) then { + TON_fnc_playtime_values_request set[_index,-1]; + TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1]; + TON_fnc_playtime_values_request pushBack [_uid, _new]; + } else { + TON_fnc_playtime_values_request pushBack [_uid, _new]; + }; + [_uid,_new select 0] call TON_fnc_setPlayTime; + }; + + case civilian: { + _queryResult set[7,([_queryResult select 7,1] call DB_fnc_bool)]; + + //Parse Stats + _new = [(_queryResult select 9)] call DB_fnc_mresToArray; + if (_new isEqualType "") then {_new = call compile format["%1", _new];}; + _queryResult set[9,_new]; + + //Position + _queryResult set[10,([_queryResult select 10,1] call DB_fnc_bool)]; + _new = [(_queryResult select 11)] call DB_fnc_mresToArray; + if (_new isEqualType "") then {_new = call compile format["%1", _new];}; + _queryResult set[11,_new]; + + //Playtime + _new = [(_queryResult select 12)] call DB_fnc_mresToArray; + if (_new isEqualType "") then {_new = call compile format["%1", _new];}; + _index = TON_fnc_playtime_values_request find [_uid, _new]; + if (_index != -1) then { + TON_fnc_playtime_values_request set[_index,-1]; + TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1]; + TON_fnc_playtime_values_request pushBack [_uid, _new]; + } else { + TON_fnc_playtime_values_request pushBack [_uid, _new]; + }; + [_uid,_new select 2] call TON_fnc_setPlayTime; + + _houseData = _uid spawn TON_fnc_fetchPlayerHouses; + waitUntil {scriptDone _houseData}; + _queryResult set [13,(missionNamespace getVariable [format["houses_%1",_uid],[]])]; + _gangData = _uid spawn TON_fnc_queryPlayerGang; + waitUntil{scriptDone _gangData}; + _queryResult set [14,(missionNamespace getVariable [format["gang_%1",_uid],[]])]; + + }; + + case independent: { + //Parse Stats + _new = [(_queryResult select 9)] call DB_fnc_mresToArray; + if (_new isEqualType "") then {_new = call compile format["%1", _new];}; + _queryResult set[9,_new]; + + //Playtime + _new = [(_queryResult select 10)] call DB_fnc_mresToArray; + if (_new isEqualType "") then {_new = call compile format["%1", _new];}; + _index = TON_fnc_playtime_values_request find [_uid, _new]; + if (_index != -1) then { + TON_fnc_playtime_values_request set[_index,-1]; + TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1]; + TON_fnc_playtime_values_request pushBack [_uid, _new]; + } else { + TON_fnc_playtime_values_request pushBack [_uid, _new]; + }; + [_uid,_new select 1] call TON_fnc_setPlayTime; + }; }; +publicVariable "TON_fnc_playtime_values_request"; + _keyArr = missionNamespace getVariable [format["%1_KEYS_%2",_uid,_side],[]]; -_queryResult set[12,_keyArr]; +_queryResult set[15,_keyArr]; -_queryResult remoteExec ["SOCK_fnc_requestReceived",_ownerID]; \ No newline at end of file +_queryResult remoteExec ["SOCK_fnc_requestReceived",_ownerID]; diff --git a/life_server/Functions/MySQL/fn_updatePartial.sqf b/life_server/Functions/MySQL/fn_updatePartial.sqf index 45f13a19..ca2d2579 100644 --- a/life_server/Functions/MySQL/fn_updatePartial.sqf +++ b/life_server/Functions/MySQL/fn_updatePartial.sqf @@ -1,82 +1,88 @@ /* - Author: Bryan "Tonic" Boardwine - - Description: - Takes partial data of a player and updates it, this is meant to be - less network intensive towards data flowing through it for updates. + File: fn_updatePartial.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Takes partial data of a player and updates it, this is meant to be + less network intensive towards data flowing through it for updates. */ -private["_uid","_side","_value","_mode","_query"]; -_uid = [_this,0,"",[""]] call BIS_fnc_param; -_side = [_this,1,sideUnknown,[civilian]] call BIS_fnc_param; -_mode = [_this,3,-1,[0]] call BIS_fnc_param; +private["_uid","_side","_value","_value1","_value2","_mode","_query"]; +params [ + ["_uid","",[""]], + ["_side",sideUnknown,[civilian]] +]; +_mode = param [3,-1,[0]]; -if(_uid == "" OR _side == sideUnknown) exitWith {}; //Bad. +if (_uid isEqualTo "" || _side isEqualTo sideUnknown) exitWith {}; //Bad. _query = ""; -switch(_mode) do { - case 0: { - _value = [_this,2,0,[0]] call BIS_fnc_param; - _value = [_value] call DB_fnc_numberSafe; - _query = format["UPDATE players SET cash='%1' WHERE playerid='%2'",_value,_uid]; - }; - - case 1: { - _value = [_this,2,0,[0]] call BIS_fnc_param; - _value = [_value] call DB_fnc_numberSafe; - _query = format["UPDATE players SET bankacc='%1' WHERE playerid='%2'",_value,_uid]; - }; - - case 2: { - _value = [_this,2,[],[[]]] call BIS_fnc_param; - //Does something license related but I can't remember I only know it's important? - for "_i" from 0 to count(_value)-1 do { - _bool = [(_value select _i) select 1] call DB_fnc_bool; - _value set[_i,[(_value select _i) select 0,_bool]]; - }; - _value = [_value] call DB_fnc_mresArray; - switch(_side) do { - case west: {_query = format["UPDATE players SET cop_licenses='%1' WHERE playerid='%2'",_value,_uid];}; - case civilian: {_query = format["UPDATE players SET civ_licenses='%1' WHERE playerid='%2'",_value,_uid];}; - case independent: {_query = format["UPDATE players SET med_licenses='%1' WHERE playerid='%2'",_value,_uid];}; - }; - }; - - case 3: { - _value = [_this,2,[],[[]]] call BIS_fnc_param; - _value = [_value] call DB_fnc_mresArray; - switch(_side) do { - case west: {_query = format["UPDATE players SET cop_gear='%1' WHERE playerid='%2'",_value,_uid];}; - case civilian: {_query = format["UPDATE players SET civ_gear='%1' WHERE playerid='%2'",_value,_uid];}; - case independent: {_query = format["UPDATE players SET med_gear='%1' WHERE playerid='%2'",_value,_uid];}; - }; - }; - - case 4: { - _value = [_this,2,false,[true]] call BIS_fnc_param; - _value = [_value] call DB_fnc_bool; - _query = format["UPDATE players SET alive='%1' WHERE playerid='%2'",_value,_uid]; - }; - - case 5: { - _value = [_this,2,false,[true]] call BIS_fnc_param; - _value = [_value] call DB_fnc_bool; - _query = format["UPDATE players SET arrested='%1' WHERE playerid='%2'",_value,_uid]; - }; - - case 6: { - _value1 = [_this,2,0,[0]] call BIS_fnc_param; - _value2 = [_this,4,0,[0]] call BIS_fnc_param; - _value1 = [_value1] call DB_fnc_numberSafe; - _value2 = [_value2] call DB_fnc_numberSafe; - _query = format["UPDATE players SET cash='%1', bankacc='%2' WHERE playerid='%3'",_value1,_value2,_uid]; - }; - - case 7: { - _array = [_this,2,[],[[]]] call BIS_fnc_param; - [_uid,_side,_array,0] call TON_fnc_keyManagement; - }; +switch (_mode) do { + case 0: { + _value = param [2,0,[0]]; + _value = [_value] call DB_fnc_numberSafe; + _query = format["UPDATE players SET cash='%1' WHERE playerid='%2'",_value,_uid]; + }; + + case 1: { + _value = param [2,0,[0]]; + _value = [_value] call DB_fnc_numberSafe; + _query = format["UPDATE players SET bankacc='%1' WHERE playerid='%2'",_value,_uid]; + }; + + case 2: { + _value = param [2,[],[[]]]; + //Does something license related but I can't remember I only know it's important? + for "_i" from 0 to count(_value)-1 do { + _bool = [(_value select _i) select 1] call DB_fnc_bool; + _value set[_i,[(_value select _i) select 0,_bool]]; + }; + _value = [_value] call DB_fnc_mresArray; + switch (_side) do { + case west: {_query = format["UPDATE players SET cop_licenses='%1' WHERE playerid='%2'",_value,_uid];}; + case civilian: {_query = format["UPDATE players SET civ_licenses='%1' WHERE playerid='%2'",_value,_uid];}; + case independent: {_query = format["UPDATE players SET med_licenses='%1' WHERE playerid='%2'",_value,_uid];}; + }; + }; + + case 3: { + _value = param [2,[],[[]]]; + _value = [_value] call DB_fnc_mresArray; + switch (_side) do { + case west: {_query = format["UPDATE players SET cop_gear='%1' WHERE playerid='%2'",_value,_uid];}; + case civilian: {_query = format["UPDATE players SET civ_gear='%1' WHERE playerid='%2'",_value,_uid];}; + case independent: {_query = format["UPDATE players SET med_gear='%1' WHERE playerid='%2'",_value,_uid];}; + }; + }; + + case 4: { + _value = param [2,false,[true]]; + _value = [_value] call DB_fnc_bool; + _value2 = param [4,[],[[]]]; + _value2 = if (count _value2 isEqualTo 3) then {_value2} else {[0,0,0]}; + _value2 = [_value2] call DB_fnc_mresArray; + _query = format["UPDATE players SET civ_alive='%1', civ_position='%2' WHERE playerid='%3'",_value,_value2,_uid]; + }; + + case 5: { + _value = param [2,false,[true]]; + _value = [_value] call DB_fnc_bool; + _query = format["UPDATE players SET arrested='%1' WHERE playerid='%2'",_value,_uid]; + }; + + case 6: { + _value1 = param [2,0,[0]]; + _value2 = param [4,0,[0]]; + _value1 = [_value1] call DB_fnc_numberSafe; + _value2 = [_value2] call DB_fnc_numberSafe; + _query = format["UPDATE players SET cash='%1', bankacc='%2' WHERE playerid='%3'",_value1,_value2,_uid]; + }; + + case 7: { + _array = param [2,[],[[]]]; + [_uid,_side,_array,0] call TON_fnc_keyManagement; + }; }; -if(_query == "") exitWith {}; +if (_query isEqualTo "") exitWith {}; [_query,1] call DB_fnc_asyncCall; diff --git a/life_server/Functions/MySQL/fn_updateRequest.sqf b/life_server/Functions/MySQL/fn_updateRequest.sqf index 97a7b75a..fb67126c 100644 --- a/life_server/Functions/MySQL/fn_updateRequest.sqf +++ b/life_server/Functions/MySQL/fn_updateRequest.sqf @@ -1,41 +1,66 @@ /* - File: fn_updateRequest.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Ain't got time to describe it, READ THE FILE NAME! + File: fn_updateRequest.sqf + Author: Bryan "Tonic" Boardwine + Description: + Updates ALL player information in the database. + Information gets passed here from the client side file: core\session\fn_updateRequest.sqf */ -private["_uid","_side","_cash","_bank","_licenses","_gear","_name","_query","_thread"]; -_uid = [_this,0,"",[""]] call BIS_fnc_param; -_name = [_this,1,"",[""]] call BIS_fnc_param; -_side = [_this,2,sideUnknown,[civilian]] call BIS_fnc_param; -_cash = [_this,3,0,[0]] call BIS_fnc_param; -_bank = [_this,4,5000,[0]] call BIS_fnc_param; -_licenses = [_this,5,[],[[]]] call BIS_fnc_param; -_gear = [_this,6,[],[[]]] call BIS_fnc_param; +params [ + ["_uid","",[""]], + ["_name","",[""]], + ["_side",sideUnknown,[civilian]], + ["_cash",0,[0]], + ["_bank",5000,[0]], + ["_licenses",[],[[]]], + ["_gear",[],[[]]], + ["_stats",[100,100],[[]]], + "", + "", + ["_position",[],[[]]] +]; //Get to those error checks. -if((_uid == "") OR (_name == "")) exitWith {}; +if (_uid isEqualTo "" || {_name isEqualTo ""}) exitWith {}; //Parse and setup some data. _name = [_name] call DB_fnc_mresString; _gear = [_gear] call DB_fnc_mresArray; +_stats = [_stats] call DB_fnc_mresArray; _cash = [_cash] call DB_fnc_numberSafe; _bank = [_bank] call DB_fnc_numberSafe; +_position = if (_side isEqualTo civilian) then {[_position] call DB_fnc_mresArray} else {[]}; //Does something license related but I can't remember I only know it's important? for "_i" from 0 to count(_licenses)-1 do { - _bool = [(_licenses select _i) select 1] call DB_fnc_bool; - _licenses set[_i,[(_licenses select _i) select 0,_bool]]; + private _bool = [(_licenses select _i) select 1] call DB_fnc_bool; + _licenses set[_i,[(_licenses select _i) select 0,_bool]]; }; _licenses = [_licenses] call DB_fnc_mresArray; +//PLAYTIME +private _playtime = [_uid] call TON_fnc_getPlayTime; +private _playtime_update = []; +{ + if ((_x select 0) isEqualTo _uid) exitWith + { + _playtime_update pushBack [_x select 1]; + }; +} forEach TON_fnc_playtime_values_request; +_playtime_update = (_playtime_update select 0) select 0; switch (_side) do { - case west: {_query = format["UPDATE players SET name='%1', cash='%2', bankacc='%3', cop_gear='%4', cop_licenses='%5' WHERE playerid='%6'",_name,_cash,_bank,_gear,_licenses,_uid];}; - case civilian: {_query = format["UPDATE players SET name='%1', cash='%2', bankacc='%3', civ_licenses='%4', civ_gear='%6', arrested='%7' WHERE playerid='%5'",_name,_cash,_bank,_licenses,_uid,_gear,[_this select 7] call DB_fnc_bool];}; - case independent: {_query = format["UPDATE players SET name='%1', cash='%2', bankacc='%3', med_licenses='%4', med_gear='%6' WHERE playerid='%5'",_name,_cash,_bank,_licenses,_uid,_gear];}; + case west: {_playtime_update set[0,_playtime];}; + case civilian: {_playtime_update set[2,_playtime];}; + case independent: {_playtime_update set[1,_playtime];}; +}; +_playtime_update = [_playtime_update] call DB_fnc_mresArray; + +private "_query"; +switch (_side) do { + case west: {_query = format["UPDATE players SET name='%1', cash='%2', bankacc='%3', cop_gear='%4', cop_licenses='%5', cop_stats='%6', playtime='%7' WHERE playerid='%8'",_name,_cash,_bank,_gear,_licenses,_stats,_playtime_update,_uid];}; + case civilian: {_query = format["UPDATE players SET name='%1', cash='%2', bankacc='%3', civ_licenses='%4', civ_gear='%5', arrested='%6', civ_stats='%7', civ_alive='%8', civ_position='%9', playtime='%10' WHERE playerid='%11'",_name,_cash,_bank,_licenses,_gear,[_this select 8] call DB_fnc_bool,_stats,[_this select 9] call DB_fnc_bool,_position,_playtime_update,_uid];}; + case independent: {_query = format["UPDATE players SET name='%1', cash='%2', bankacc='%3', med_licenses='%4', med_gear='%5', med_stats='%6', playtime='%7' WHERE playerid='%8'",_name,_cash,_bank,_licenses,_gear,_stats,_playtime_update,_uid];}; }; -_queryResult = [_query,1] call DB_fnc_asyncCall; \ No newline at end of file +_queryResult = [_query,1] call DB_fnc_asyncCall; diff --git a/life_server/Functions/PlayTime/fn_getPlayTime.sqf b/life_server/Functions/PlayTime/fn_getPlayTime.sqf new file mode 100644 index 00000000..a869f5b2 --- /dev/null +++ b/life_server/Functions/PlayTime/fn_getPlayTime.sqf @@ -0,0 +1,38 @@ +/* + File : fn_getPlayTime.sqf + Author : NiiRoZz + + Description : + Gets playtime for player with UID + + GATHERED - Loaded from DB and NOT changed + JOIN - Time, the player joined - the newly gathered playtime will be calculated using difference + +*/ + +private["_uid", "_time_gathered", "_time_join","_time"]; + +_uid = _this select 0; +_time_gathered = nil; +_time_join = nil; + +{ + if ((_x select 0) isEqualTo _uid) exitWith { + _time_gathered = _x select 1; + _time_join = _x select 2; + }; +} forEach TON_fnc_playtime_values; + +if (isNil "_time_gathered" || isNil "_time_join") then { + _time_gathered = 0; + _time_join = time; + TON_fnc_playtime_values pushBack [_uid, _time_gathered, _time_join]; +}; + +publicVariable "TON_fnc_playtime_values"; + +_time = (time - _time_join); //return time +_time = _time + _time_gathered; +_time = round (_time/60); + +_time; \ No newline at end of file diff --git a/life_server/Functions/PlayTime/fn_setPlayTime.sqf b/life_server/Functions/PlayTime/fn_setPlayTime.sqf new file mode 100644 index 00000000..5e587079 --- /dev/null +++ b/life_server/Functions/PlayTime/fn_setPlayTime.sqf @@ -0,0 +1,27 @@ +/* + File : fn_setPlayTime.sqf + Author : NiiRoZz + + Description : + Sets gathered time of player + + GATHERED - Loaded from DB and NOT changed + JOIN - Time, the player joined - the newly gathered playtime will be calculated using difference + +*/ + +private["_uid", "_time_gathered"]; + +_uid = _this select 0; +_time_gathered = ((_this select 1) * 60); + +//create value using get +[_uid] call TON_fnc_getPlayTime; + +//set value no 1 +{ + if ((_x select 0) isEqualTo _uid) exitWith { + _x set [1, _time_gathered]; + _x set [2, time]; + }; +} forEach TON_fnc_playtime_values; \ No newline at end of file diff --git a/life_server/Functions/Systems/fn_chopShopSell.sqf b/life_server/Functions/Systems/fn_chopShopSell.sqf index 630fb56d..697b0ffd 100644 --- a/life_server/Functions/Systems/fn_chopShopSell.sqf +++ b/life_server/Functions/Systems/fn_chopShopSell.sqf @@ -1,39 +1,40 @@ #include "\life_server\script_macros.hpp" /* - File: fn_chopShopSell.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Checks whether or not the vehicle is persistent or temp and sells it. + File: fn_chopShopSell.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Checks whether or not the vehicle is persistent or temp and sells it. */ -private["_unit","_vehicle","_price","_cash"]; -_unit = [_this,0,objNull,[objNull]] call BIS_fnc_param; -_vehicle = [_this,1,objNull,[objNull]] call BIS_fnc_param; -_price = [_this,2,500,[0]] call BIS_fnc_param; -_cash = [_this,3,0,[0]] call BIS_fnc_param; +params [ + ["_unit",objNull,[objNull]], + ["_vehicle",objNull,[objNull]], + ["_price",500,[0]], + ["_cash",0,[0]] +]; //Error checks -if(isNull _vehicle OR isNull _unit) exitWith { - life_action_inUse = false; - PVAR_ID("life_action_inUse",owner _unit); +if (isNull _vehicle || isNull _unit) exitWith { + life_action_inUse = false; + owner _unit publicVariableClient "life_action_inUse"; }; -_displayName = FETCH_CONFIG2(getText,CONFIG_VEHICLES,typeOf _vehicle, "displayName"); +_displayName = FETCH_CONFIG2(getText,"CfgVehicles",typeOf _vehicle, "displayName"); _unit = owner _unit; -_dbInfo = _vehicle GVAR ["dbInfo",[]]; -if(count _dbInfo > 0) then { - _uid = SEL(_dbInfo,0); - _plate = SEL(_dbInfo,1); +_dbInfo = _vehicle getVariable ["dbInfo",[]]; +if (count _dbInfo > 0) then { + _uid = (_dbInfo select 0); + _plate = (_dbInfo select 1); + + _query = format["UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'",_uid,_plate]; - _query = format["UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'",_uid,_plate]; - - _sql = [_query,1] call DB_fnc_asyncCall; + _sql = [_query,1] call DB_fnc_asyncCall; }; deleteVehicle _vehicle; life_action_inUse = false; -PVAR_ID("life_action_inUse",_unit); +_unit publicVariableClient "life_action_inUse"; CASH = _cash; -PVAR_ID("life_cash",_unit); -[2,format[(localize "STR_NOTF_ChopSoldCar"),_displayName,[_price] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",_unit]; \ No newline at end of file +_unit publicVariableClient "life_cash"; +[2,"STR_NOTF_ChopSoldCar",true,[_displayName,[_price] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",_unit]; diff --git a/life_server/Functions/Systems/fn_cleanup.sqf b/life_server/Functions/Systems/fn_cleanup.sqf index f0bc14a1..086c796d 100644 --- a/life_server/Functions/Systems/fn_cleanup.sqf +++ b/life_server/Functions/Systems/fn_cleanup.sqf @@ -1,62 +1,67 @@ +#include "\life_server\script_macros.hpp" /* - File: fn_cleanup.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Server-side cleanup script on vehicles. - Sort of a lame way but whatever. + File: fn_cleanup.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Server-side cleanup script on vehicles. + Sort of a lame way but whatever. Yep someone should look at it! */ private "_deleted"; _deleted = false; -while {true} do { - private["_veh","_units"]; - sleep (60 * 60); - { - _veh = _x; - _vehicleClass = getText(configFile >> "CfgVehicles" >> (typeOf _veh) >> "vehicleClass"); - - if(_vehicleClass in ["Car","Air","Ship","Armored","Submarine"]) then { - _dbInfo = _veh getVariable["dbInfo",[]]; - _units = {(_x distance _veh < 300)} count playableUnits; - if(count crew _x == 0) then { - switch (true) do { - case ((_x getHitPointDamage "HitEngine") > 0.7 && _units == 0) : {deleteVehicle _x; _deleted = true;}; - case ((_x getHitPointDamage "HitLFWheel") > 0.98 && _units == 0) : {deleteVehicle _x; _deleted = true;}; - case ((_x getHitPointDamage "HitLF2Wheel") > 0.98 && _units == 0) : {deleteVehicle _x; _deleted = true;}; - case ((_x getHitPointDamage "HitRFWheel") > 0.98 && _units == 0) : {deleteVehicle _x; _deleted = true;}; - case ((_x getHitPointDamage "HitRF2Wheel") > 0.98 && _units == 0) : {deleteVehicle _x; _deleted = true;}; - case (_units == 0): {deleteVehicle _x; _deleted = true;}; - }; - }; - - if(_deleted) then { - waitUntil {isNull _veh}; - _deleted = false; - }; - - if(isNull _veh) then { - if(count _dbInfo > 0) then { - systemChat "Fixing..."; - _uid = _dbInfo select 0; - _plate = _dbInfo select 1; - - _query = format["UPDATE vehicles SET active='0' WHERE pid='%1' AND plate='%2'",_uid,_plate]; - - [_query,1] call DB_fnc_asyncCall; - }; - }; - }; - } foreach vehicles; - - sleep (3 * 60); //3 minute cool-down before next cycle. - { - if((typeOf _x) in ["Land_BottlePlastic_V1_F","Land_TacticalBacon_F","Land_Can_V3_F","Land_CanisterFuel_F", "Land_Can_V3_F","Land_Money_F","Land_Suitcase_F"]) then { - deleteVehicle _x; - }; - } foreach (allMissionObjects "Thing"); - - sleep (2 * 60); - { - deleteVehicle _x; - } foreach (allMissionObjects "GroundWeaponHolder"); -}; \ No newline at end of file +for "_i" from 0 to 1 step 0 do { + private["_veh","_units","_fuel"]; + uiSleep (60 * 60); + { + _protect = false; + _veh = _x; + _vehicleClass = getText(configFile >> "CfgVehicles" >> (typeOf _veh) >> "vehicleClass"); + _fuel = 1; + + if (!isNil {_veh getVariable "NPC"} && {_veh getVariable "NPC"}) then {_protect = true;}; + + if ((_vehicleClass in ["Car","Air","Ship","Armored","Submarine"]) && {!(_protect)}) then { + if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then {_fuel = (fuel _veh);}; + _dbInfo = _veh getVariable ["dbInfo",[]]; + _units = {(_x distance _veh < 300)} count playableUnits; + if (count crew _x isEqualTo 0) then { + switch (true) do { + case ((_x getHitPointDamage "HitEngine") > 0.7 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; + case ((_x getHitPointDamage "HitLFWheel") > 0.98 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; + case ((_x getHitPointDamage "HitLF2Wheel") > 0.98 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; + case ((_x getHitPointDamage "HitRFWheel") > 0.98 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; + case ((_x getHitPointDamage "HitRF2Wheel") > 0.98 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; + case (_units isEqualTo 0): {deleteVehicle _x; _deleted = true;}; + }; + }; + + if (_deleted) then { + waitUntil {isNull _veh}; + _deleted = false; + }; + + if (isNull _veh) then { + if (count _dbInfo > 0) then { + _uid = _dbInfo select 0; + _plate = _dbInfo select 1; + + _query = format["UPDATE vehicles SET active='0', fuel='%3' WHERE pid='%1' AND plate='%2'",_uid,_plate,_fuel]; + + [_query,1] call DB_fnc_asyncCall; + }; + }; + }; + } forEach vehicles; + + uiSleep (3 * 60); //3 minute cool-down before next cycle. + { + if ((typeOf _x) in ["Land_BottlePlastic_V1_F","Land_TacticalBacon_F","Land_Can_V3_F","Land_CanisterFuel_F", "Land_Can_V3_F","Land_Money_F","Land_Suitcase_F"]) then { + deleteVehicle _x; + }; + } forEach (allMissionObjects "Thing"); + + uiSleep (2 * 60); + { + deleteVehicle _x; + } forEach (allMissionObjects "GroundWeaponHolder"); +}; diff --git a/life_server/Functions/Systems/fn_cleanupRequest.sqf b/life_server/Functions/Systems/fn_cleanupRequest.sqf index bc82c1ae..8a7a11f3 100644 --- a/life_server/Functions/Systems/fn_cleanupRequest.sqf +++ b/life_server/Functions/Systems/fn_cleanupRequest.sqf @@ -1,26 +1,26 @@ /* - Author: Bryan "Tonic" Boardwine - - Description: - Client sends a cleanup request when they hit Abort, - the server will then monitor when that client aborts and - delete the weapon holders. + File: fn_cleanupRequest.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Client sends a cleanup request when they hit Abort, + the server will then monitor when that client aborts and + delete the weapon holders. */ -private["_client","_loops"]; -_client = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -if(isNull _client) exitWith {}; +private _client = param [0,objNull,[objNull]]; +if (isNull _client) exitWith {}; + +private _loops = 0; +for "_i" from 0 to 1 step 0 do { + if (_loops >= 25) exitWith {}; + if (!alive _client) exitWith { + _containers = nearestObjects[(getPosATL _client),["WeaponHolderSimulated"],5]; + if (count _containers > 0) then { + {deleteVehicle _x;} forEach _containers; //Delete the containers. + }; + deleteVehicle _client; //Get rid of the corpse. + }; -_loops = 0; -while {true} do { - if(_loops >= 25) exitWith {}; - if(!alive _client) exitWith { - _containers = nearestObjects[_client,["WeaponHolderSimulated"],5]; - if(count _containers > 0) then { - {deleteVehicle _x;} foreach _containers; //Delete the containers. - }; - deleteVehicle _client; //Get rid of the corpse. - }; - - _loops = _loops + 1; - sleep 1; -}; \ No newline at end of file + _loops = _loops + 1; + uiSleep 1; +}; diff --git a/life_server/Functions/Systems/fn_clientDisconnect.sqf b/life_server/Functions/Systems/fn_clientDisconnect.sqf index 7791565e..e814e445 100644 --- a/life_server/Functions/Systems/fn_clientDisconnect.sqf +++ b/life_server/Functions/Systems/fn_clientDisconnect.sqf @@ -1,20 +1,37 @@ #include "\life_server\script_macros.hpp" /* - Author: Bryan "Tonic" Boardwine - - Description: - When a client disconnects this will remove their corpse and - clean up their storage boxes in their house. + File: fn_clientDisconnect.sqf + Author: Bryan "Tonic" Boardwine + + Description: + When a client disconnects this will remove their corpse and + clean up their storage boxes in their house. Also, saves player infos & position. */ -private["_unit","_id","_uid","_name"]; -_unit = SEL(_this,0); -if(isNull _unit) exitWith {}; -_id = SEL(_this,1); -_uid = SEL(_this,2); -_name = SEL(_this,3); +private["_unit","_id","_uid","_name","_alive","_position","_side"]; +_unit = _this select 0; +if (isNull _unit) exitWith {}; +_id = _this select 1; +_uid = _this select 2; +_name = _this select 3; +_side = side _unit; + +//Save player info +if (isNil "HC_UID" || {_uid != HC_UID}) then { + _position = getPosATL _unit; + if ((getMarkerPos "respawn_civilian" distance _position) > 300) then { + //Call UpdateRequest as unit + [] remoteExecCall ["SOCK_fnc_updateRequest",_unit]; + + //Civilian position + if (life_save_civilian_position && _side isEqualTo civilian) then { + _alive = alive _unit; + if (life_HC_isActive) then {[_uid,_side,_alive,4,_position] remoteExec ["HC_fnc_updatePartial",HC_Life];} else {[_uid,_side,_alive,4,_position] spawn DB_fnc_updatePartial;}; + }; + }; +}; _containers = nearestObjects[_unit,["WeaponHolderSimulated"],5]; -{deleteVehicle _x;} foreach _containers; +{deleteVehicle _x;} forEach _containers; deleteVehicle _unit; -_uid spawn TON_fnc_houseCleanup; \ No newline at end of file +_uid spawn TON_fnc_houseCleanup; diff --git a/life_server/Functions/Systems/fn_federalUpdate.sqf b/life_server/Functions/Systems/fn_federalUpdate.sqf index ba56f922..b114cb18 100644 --- a/life_server/Functions/Systems/fn_federalUpdate.sqf +++ b/life_server/Functions/Systems/fn_federalUpdate.sqf @@ -1,13 +1,13 @@ /* - File: fn_federalUpdate.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Uhhh, adds to it? + File: fn_federalUpdate.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Uhhh, adds to it? */ private "_funds"; -while {true} do { - sleep (30 * 60); - _funds = fed_bank getVariable["safe",0]; - fed_bank setVariable["safe",round(_funds+((count playableUnits)/2)),true]; -}; \ No newline at end of file +for "_i" from 0 to 1 step 0 do { + uiSleep (30 * 60); + _funds = fed_bank getVariable ["safe",0]; + fed_bank setVariable ["safe",round(_funds+((count playableUnits)/2)),true]; +}; diff --git a/life_server/Functions/Systems/fn_getID.sqf b/life_server/Functions/Systems/fn_getID.sqf index 844ffd29..7d45aa32 100644 --- a/life_server/Functions/Systems/fn_getID.sqf +++ b/life_server/Functions/Systems/fn_getID.sqf @@ -1,8 +1,14 @@ #include "\life_server\script_macros.hpp" +/* + File: fn_getID.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Used for the admin menu returns the player ID for in-game bans/kicks. + https://community.bistudio.com/wiki/Multiplayer_Server_Commands +*/ private["_id","_ret"]; -_id = _this select 0; -_ret = _this select 1; -_id = owner _id; -_ret = owner _ret; +_id = owner (_this select 0); +_ret = owner (_this select 1); -[_id] remoteExecCall ["life_fnc_adminid",_ret]; \ No newline at end of file +[_id] remoteExecCall ["life_fnc_adminID",_ret]; diff --git a/life_server/Functions/Systems/fn_getVehicles.sqf b/life_server/Functions/Systems/fn_getVehicles.sqf index fd8c99d8..bfc01d42 100644 --- a/life_server/Functions/Systems/fn_getVehicles.sqf +++ b/life_server/Functions/Systems/fn_getVehicles.sqf @@ -1,34 +1,36 @@ #include "\life_server\script_macros.hpp" /* - File: fn_getVehicles.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Sends a request to query the database information and returns vehicles. + File: fn_getVehicles.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Sends a request to query the database information and returns vehicles. */ -private["_pid","_side","_type","_unit","_ret","_tickTime","_queryResult"]; -_pid = [_this,0,"",[""]] call BIS_fnc_param; -_side = [_this,1,sideUnknown,[west]] call BIS_fnc_param; -_type = [_this,2,"",[""]] call BIS_fnc_param; -_unit = [_this,3,ObjNull,[ObjNull]] call BIS_fnc_param; +private["_tickTime","_queryResult"]; +params [ + ["_pid","",[""]], + ["_side",sideUnknown,[west]], + ["_type","",[""]], + ["_unit",objNull,[objNull]] +]; //Error checks -if(_pid == "" OR _side == sideUnknown OR _type == "" OR isNull _unit) exitWith { - if(!isNull _unit) then { - [[]] remoteExecCall ["life_fnc_impoundMenu",(owner _unit)]; - }; +if (_pid isEqualTo "" || _side isEqualTo sideUnknown || _type isEqualTo "" || isNull _unit) exitWith { + if (!isNull _unit) then { + [[]] remoteExec ["life_fnc_impoundMenu",(owner _unit)]; + }; }; _unit = owner _unit; -_side = switch(_side) do { - case west:{"cop"}; - case civilian: {"civ"}; - case independent: {"med"}; - default {"Error"}; +_side = switch (_side) do { + case west:{"cop"}; + case civilian: {"civ"}; + case independent: {"med"}; + default {"Error"}; }; -if(_side == "Error") exitWith { - [[]] remoteExecCall ["life_fnc_impoundMenu",(owner _unit)]; +if (_side == "Error") exitWith { + [[]] remoteExec ["life_fnc_impoundMenu",(owner _unit)]; }; _query = format["SELECT id, side, classname, type, pid, alive, active, plate, color FROM vehicles WHERE pid='%1' AND alive='1' AND active='0' AND side='%2' AND type='%3'",_pid,_side,_type]; @@ -37,14 +39,16 @@ _query = format["SELECT id, side, classname, type, pid, alive, active, plate, co _tickTime = diag_tickTime; _queryResult = [_query,2,true] call DB_fnc_asyncCall; -diag_log "------------- Client Query Request -------------"; -diag_log format["QUERY: %1",_query]; -diag_log format["Time to complete: %1 (in seconds)",(diag_tickTime - _tickTime)]; -diag_log format["Result: %1",_queryResult]; -diag_log "------------------------------------------------"; +if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { + diag_log "------------- Client Query Request -------------"; + diag_log format["QUERY: %1",_query]; + diag_log format["Time to complete: %1 (in seconds)",(diag_tickTime - _tickTime)]; + diag_log format["Result: %1",_queryResult]; + diag_log "------------------------------------------------"; +}; -if(typeName _queryResult == "STRING") exitWith { - [[]] remoteExecCall ["life_fnc_impoundMenu",(owner _unit)]; +if (_queryResult isEqualType "") exitWith { + [[]] remoteExec ["life_fnc_impoundMenu",(owner _unit)]; }; -[_queryResult] remoteExecCall ["life_fnc_impoundMenu",_unit]; \ No newline at end of file +[_queryResult] remoteExec ["life_fnc_impoundMenu",_unit]; diff --git a/life_server/Functions/Systems/fn_handleBlastingCharge.sqf b/life_server/Functions/Systems/fn_handleBlastingCharge.sqf new file mode 100644 index 00000000..23198b86 --- /dev/null +++ b/life_server/Functions/Systems/fn_handleBlastingCharge.sqf @@ -0,0 +1,15 @@ +/* + Author: GetSomePanda / Panda + SteamID: 76561198145366418 + File Name: fn_handleBlastingCharge.sqf + Information: Nothing really special, just handles the fed explosion over the server so if the client who place the charge logs out it still blows up. +*/ +private["_bomb","_time"]; +_time = time + (5 * 60); +waitUntil{(round(_time - time) < 1)}; +sleep 0.9; +if (!(fed_bank getVariable["chargeplaced",false])) exitWith {}; + +_bomb = "Bo_GBU12_LGB_MI10" createVehicle [getPosATL fed_bank select 0, getPosATL fed_bank select 1, (getPosATL fed_bank select 2)+0.5]; +fed_bank setVariable ["chargeplaced",false,true]; +fed_bank setVariable ["safe_open",true,true]; diff --git a/life_server/Functions/Systems/fn_huntingZone.sqf b/life_server/Functions/Systems/fn_huntingZone.sqf index ebedbb02..2f7322ae 100644 --- a/life_server/Functions/Systems/fn_huntingZone.sqf +++ b/life_server/Functions/Systems/fn_huntingZone.sqf @@ -1,42 +1,53 @@ /* - Author: Bryan "Tonic" Boardwine - - Description: - Spawns animals around the marker when a player - is near. Very basic WIP - - TODO: - Change it up so animals repopulate over time. + File: fn_huntingZone.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Spawns animals around the marker when a player + is near. Very basic WIP + + TODO: + Change it up so animals repopulate over time. */ -private["_animalList","_dist","_radius","_animals","_zoneName","_unitsNear","_animalsActive"]; -_zoneName = [_this,0,"",[""]] call BIS_fnc_param; -_maxAnimals = [_this,1,10,[0]] call BIS_fnc_param; -if(_zoneName == "") exitWith {}; + +private["_animalList","_dist","_radius","_zoneName","_unitsNear","_animalsActive"]; +params [ + ["_zoneName","",[""]], + ["_maxAnimals",10,[0]] +]; + +if (_zoneName isEqualTo "") exitWith {}; _animalList = ["Sheep_random_F","Goat_random_F","Hen_random_F","Cock_random_F"]; _radius = (getMarkerSize _zoneName) select 0; _dist = _radius + 100; _zone = getMarkerPos _zoneName; -_animals = []; + +if (!isNil "animals" && {count animals != 0}) then { + _maxAnimals = _maxAnimals - count(animals); +} else { + animals = []; +}; _unitsNear = false; _animalsActive = false; -while {true} do { - {if((_x distance _zone) < _dist) exitWith {_unitsNear = true;}; _unitsNear = false;} foreach playableUnits; - if(_unitsNear && !_animalsActive) then { - _animalsActive = true; - for "_i" from 1 to _maxAnimals do { - _animalClass = _animalList select floor random count _animalList; - _position = [((_zone select 0) - _radius + random (_radius * 2)), ((_zone select 1) - _radius + random (_radius * 2)),0]; - _animal = createAgent [_animalClass,_position,[],0,"FORM"]; - _animal setDir (random 360); - _animals pushBack _animal; - }; - } else { - if(!_unitsNear && _animalsActive) then { - {deleteVehicle _x;} foreach _animals; - _animals = []; - _animalsActive = false; - }; - }; - sleep (3 + random 2); -}; \ No newline at end of file +for "_i" from 0 to 1 step 0 do { + {if ((_x distance _zone) < _dist) exitWith {_unitsNear = true;}; _unitsNear = false;} forEach playableUnits; + if (_unitsNear && !_animalsActive) then { + _animalsActive = true; + for "_i" from 1 to _maxAnimals do { + _animalClass = selectRandom _animalList; + _position = [((_zone select 0) - _radius + random (_radius * 2)), ((_zone select 1) - _radius + random (_radius * 2)),0]; + _animal = createAgent [_animalClass,_position,[],0,"FORM"]; + _animal setDir (random 360); + animals pushBack _animal; + }; + } else { + if (!_unitsNear && _animalsActive) then { + {deleteVehicle _x;} forEach animals; + animals = []; + _animalsActive = false; + }; + }; + uiSleep (3 + random 2); + _maxAnimals = param [1,10,[0]]; +}; diff --git a/life_server/Functions/Systems/fn_keyManagement.sqf b/life_server/Functions/Systems/fn_keyManagement.sqf index 481badb5..4ccdc7dc 100644 --- a/life_server/Functions/Systems/fn_keyManagement.sqf +++ b/life_server/Functions/Systems/fn_keyManagement.sqf @@ -1,42 +1,44 @@ /* - Author: Bryan "Tonic" Boardwine - - Description: - Keeps track of an array locally on the server of a players keys. + File: fn_keyManagement.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Keeps track of an array locally on the server of a players keys. */ -private["_uid","_side","_input","_mode","_arr"]; -_uid = [_this,0,"",[""]] call BIS_fnc_param; -_side = [_this,1,sideUnknown,[sideUnknown]] call BIS_fnc_param; -_mode = [_this,3,0,[0]] call BIS_fnc_param; +params [ + ["_uid","",[""]], + ["_side",sideUnknown,[sideUnknown]] +]; +private _mode = param [3,0,[0]]; + +if (_uid isEqualTo "" || _side isEqualTo sideUnknown) exitWith {}; //BAAAAAAAAADDDDDDDD + +switch (_mode) do { + case 0: { + private _input = param [2,[],[[]]]; + private _arr = []; + { + if (!isNull _x && {!(_x isKindOf "House")}) then { + _arr pushBack _x; + }; + } forEach _input; + + _arr = _arr - [objNull]; + missionNamespace setVariable [format["%1_KEYS_%2",_uid,_side],_arr]; + }; -if(_uid == "" OR _side == sideUnknown) exitWith {}; //BAAAAAAAAADDDDDDDD + case 1: { + private _input = param [2,objNull,[objNull]]; + if (isNull _input || _input isKindOf "House") exitWith {}; + private _arr = missionNamespace getVariable [format["%1_KEYS_%2",_uid,_side],[]]; + _arr pushBack _input; + _arr = _arr - [objNull]; + missionNamespace setVariable [format["%1_KEYS_%2",_uid,_side],_arr]; + }; -switch(_mode) do { - case 0: { - _input = [_this,2,[],[[]]] call BIS_fnc_param; - _arr = []; - { - if(!isNull _x && {!(_x isKindOf "House")}) then { - _arr pushBack _x; - }; - } foreach _input; - - _arr = _arr - [ObjNull]; - missionNamespace setVariable[format["%1_KEYS_%2",_uid,_side],_arr]; - }; - - case 1: { - _input = [_this,2,ObjNull,[ObjNull]] call BIS_fnc_param; - if(isNull _input OR _input isKindOf "House") exitWith {}; - _arr = missionNamespace getVariable [format["%1_KEYS_%2",_uid,_side],[]]; - _arr pushBack _input; - _arr = _arr - [ObjNull]; - missionNamespace setVariable[format["%1_KEYS_%2",_uid,_side],_arr]; - }; - - case 2: { - _arr = missionNamespace getVariable[format["%1_KEYS_%2",_uid,_side],[]]; - _arr = _arr - [ObjNull]; - missionNamespace setVariable[format["%1_KEYS_%2",_uid,_side],_arr]; - }; -}; \ No newline at end of file + case 2: { + private _arr = missionNamespace getVariable [format["%1_KEYS_%2",_uid,_side],[]]; + _arr = _arr - [objNull]; + missionNamespace setVariable [format["%1_KEYS_%2",_uid,_side],_arr]; + }; +}; diff --git a/life_server/Functions/Systems/fn_logIt.sqf b/life_server/Functions/Systems/fn_logIt.sqf deleted file mode 100644 index 15931fd3..00000000 --- a/life_server/Functions/Systems/fn_logIt.sqf +++ /dev/null @@ -1 +0,0 @@ -diag_log format["%1 set %2",_this select 0, _this select 1]; \ No newline at end of file diff --git a/life_server/Functions/Systems/fn_manageSC.sqf b/life_server/Functions/Systems/fn_manageSC.sqf new file mode 100644 index 00000000..6b09896b --- /dev/null +++ b/life_server/Functions/Systems/fn_manageSC.sqf @@ -0,0 +1,40 @@ +/* + File: fn_manageSC.sqf + Author: Bryan "Tonic" Boardwine + + Description: + User management of whether or not they want to be on a sidechat for their side. +*/ +params [ + ["_unit",objNull,[objNull]], + ["_bool",false,[false]], + ["_side",civilian,[civilian]] +]; + +if (isNull _unit) exitWith {}; + +switch (_side) do { + case west: { + if (_bool) then { + life_radio_west radioChannelAdd [_unit]; + } else { + life_radio_west radioChannelRemove [_unit]; + }; + }; + + case civilian: { + if (_bool) then { + life_radio_civ radioChannelAdd [_unit]; + } else { + life_radio_civ radioChannelRemove [_unit]; + }; + }; + + case independent: { + if (_bool) then { + life_radio_indep radioChannelAdd [_unit]; + } else { + life_radio_indep radioChannelRemove [_unit]; + }; + }; +}; diff --git a/life_server/Functions/Systems/fn_managesc.sqf b/life_server/Functions/Systems/fn_managesc.sqf deleted file mode 100644 index 52d041f5..00000000 --- a/life_server/Functions/Systems/fn_managesc.sqf +++ /dev/null @@ -1,39 +0,0 @@ -/* - File: fn_managesc.sqf - Author: Bryan "Tonic" Boardwine - - Description: - User management of whether or not they want to be on a sidechat for their side. -*/ -private["_unit","_bool","_side"]; -_unit = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -_bool = [_this,1,false,[false]] call BIS_fnc_param; -_side = [_this,2,civilian,[west]] call BIS_fnc_param; - -if(isNull _unit) exitWith {}; - -switch (_side) do { - case west: { - if(_bool) then { - life_radio_west radioChannelAdd [_unit]; - } else { - life_radio_west radioChannelRemove [_unit]; - }; - }; - - case civilian: { - if(_bool) then { - life_radio_civ radioChannelAdd [_unit]; - } else { - life_radio_civ radioChannelRemove [_unit]; - }; - }; - - case independent: { - if(_bool) then { - life_radio_indep radioChannelAdd [_unit]; - } else { - life_radio_indep radioChannelRemove [_unit]; - }; - }; -}; \ No newline at end of file diff --git a/life_server/Functions/Systems/fn_recupKeyForHC.sqf b/life_server/Functions/Systems/fn_recupKeyForHC.sqf new file mode 100644 index 00000000..8d3dbb13 --- /dev/null +++ b/life_server/Functions/Systems/fn_recupKeyForHC.sqf @@ -0,0 +1,15 @@ +#include "\life_server\script_macros.hpp" +/* + File: fn_recupKeyForHC.sqf + Author : NiiRoZz + + Description: + Tells the server to recup the Key of player +*/ +params [ + ["_uid","",[""]], + ["_side",sideUnknown,[sideUnknown]] +]; +if (_uid isEqualTo "") exitWith {}; //NULL +_keyArr = missionNamespace getVariable [format["%1_KEYS_%2",_uid,_side],[]]; +[_keyArr] remoteExecCall ["HC_fnc_receivekeyofServer",HC_Life]; diff --git a/life_server/Functions/Systems/fn_setObjVar.sqf b/life_server/Functions/Systems/fn_setObjVar.sqf index f562176d..83db1cfd 100644 --- a/life_server/Functions/Systems/fn_setObjVar.sqf +++ b/life_server/Functions/Systems/fn_setObjVar.sqf @@ -1,15 +1,17 @@ /* - Author: Bryan "Tonic" Boardwine - - Description: - Sets a variable on the given object from the server, - workaround for brokenness of ARMA 3, yes Brokenness is a word! + File: fn_setObjVar.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Sets a variable on the given object from the server, + workaround for brokenness of ARMA 3, yes Brokenness is a word! */ -private["_obj","_varValue","_global","_varName"]; -_obj = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -_varName = [_this,1,"",[""]] call BIS_fnc_param; -_varValue = _this select 2; -_global = [_this,3,false,[true]] call BIS_fnc_param; +params [ + ["_obj",objNull,[objNull]], + ["_varName","",[""]], + "_varValue", + ["_global",false,[false]] +]; -if(isNull _obj OR _varName == "") exitWith {}; //Bad. -_obj setVariable[_varName,_varValue,_global]; \ No newline at end of file +if (isNull _obj || _varName isEqualTo "") exitWith {}; //Bad. +_obj setVariable [_varName,_varValue,_global]; diff --git a/life_server/Functions/Systems/fn_spawnVehicle.sqf b/life_server/Functions/Systems/fn_spawnVehicle.sqf index 4ad53681..f10edf3e 100644 --- a/life_server/Functions/Systems/fn_spawnVehicle.sqf +++ b/life_server/Functions/Systems/fn_spawnVehicle.sqf @@ -1,112 +1,174 @@ #include "\life_server\script_macros.hpp" /* - File: fn_spawnVehicle.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Sends the query request to the database, if an array is returned then it creates - the vehicle if it's not in use or dead. + File: fn_spawnVehicle.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Sends the query request to the database, if an array is returned then it creates + the vehicle if it's not in use or dead. */ -private["_vid","_sp","_pid","_query","_sql","_vehicle","_nearVehicles","_name","_side","_tickTime","_dir","_servIndex"]; -_vid = [_this,0,-1,[0]] call BIS_fnc_param; -_pid = [_this,1,"",[""]] call BIS_fnc_param; -_sp = [_this,2,[],[[],""]] call BIS_fnc_param; -_unit = [_this,3,ObjNull,[ObjNull]] call BIS_fnc_param; -_price = [_this,4,0,[0]] call BIS_fnc_param; -_dir = [_this,5,0,[0]] call BIS_fnc_param; +private["_query","_sql","_vehicle","_nearVehicles","_name","_side","_tickTime","_servIndex","_damage","_wasIllegal","_location","_thread"]; +params [ + ["_vid",-1,[0]], + ["_pid","",[""]], + ["_sp",[],[[],""]], + ["_unit",objNull,[objNull]], + ["_price",0,[0]], + ["_dir",0,[0]], + ["_spawntext","",[""]] +]; _unit_return = _unit; _name = name _unit; _side = side _unit; _unit = owner _unit; -if(EQUAL(_vid,-1) OR EQUAL(_pid,"")) exitWith {}; -if(_vid in serv_sv_use) exitWith {}; +if (_vid isEqualTo -1 || _pid isEqualTo "") exitWith {}; +if (_vid in serv_sv_use) exitWith {}; serv_sv_use pushBack _vid; _servIndex = serv_sv_use find _vid; -_query = format["SELECT id, side, classname, type, pid, alive, active, plate, color FROM vehicles WHERE id='%1' AND pid='%2'",_vid,_pid]; - +_query = format["SELECT id, side, classname, type, pid, alive, active, plate, color, inventory, gear, fuel, damage, blacklist FROM vehicles WHERE id='%1' AND pid='%2'",_vid,_pid]; _tickTime = diag_tickTime; _queryResult = [_query,2] call DB_fnc_asyncCall; -diag_log "------------- Client Query Request -------------"; -diag_log format["QUERY: %1",_query]; -diag_log format["Time to complete: %1 (in seconds)",(diag_tickTime - _tickTime)]; -diag_log format["Result: %1",_queryResult]; -diag_log "------------------------------------------------"; +if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { + diag_log "------------- Client Query Request -------------"; + diag_log format["QUERY: %1",_query]; + diag_log format["Time to complete: %1 (in seconds)",(diag_tickTime - _tickTime)]; + diag_log format["Result: %1",_queryResult]; + diag_log "------------------------------------------------"; +}; -if(EQUAL(typeName _queryResult,typeName "")) exitWith {}; +if (_queryResult isEqualType "") exitWith {}; _vInfo = _queryResult; -if(isNil "_vInfo") exitWith {serv_sv_use deleteAt _servIndex;}; -if(EQUAL(count _vInfo,0)) exitWith {serv_sv_use deleteAt _servIndex;}; +if (isNil "_vInfo") exitWith {serv_sv_use deleteAt _servIndex;}; +if (count _vInfo isEqualTo 0) exitWith {serv_sv_use deleteAt _servIndex;}; -if(EQUAL(SEL(_vInfo,5),0)) exitWith { - serv_sv_use deleteAt _servIndex; - [1,format[(localize "STR_Garage_SQLError_Destroyed"),_vInfo select 2]] remoteExecCall ["life_fnc_broadcast",_unit]; +if ((_vInfo select 5) isEqualTo 0) exitWith { + serv_sv_use deleteAt _servIndex; + [1,"STR_Garage_SQLError_Destroyed",true,[_vInfo select 2]] remoteExecCall ["life_fnc_broadcast",_unit]; }; -if(EQUAL(SEL(_vInfo,6),1)) exitWith { - serv_sv_use deleteAt _servIndex; - [1,format[(localize "STR_Garage_SQLError_Active"),_vInfo select 2]] remoteExecCall ["life_fnc_broadcast",_unit]; +if ((_vInfo select 6) isEqualTo 1) exitWith { + serv_sv_use deleteAt _servIndex; + [1,"STR_Garage_SQLError_Active",true,[_vInfo select 2]] remoteExecCall ["life_fnc_broadcast",_unit]; }; -if!(EQUAL(typeName _sp,typeName "")) then { - _nearVehicles = nearestObjects[_sp,["Car","Air","Ship"],10]; +if (!(_sp isEqualType "")) then { + _nearVehicles = nearestObjects[_sp,["Car","Air","Ship"],10]; } else { - _nearVehicles = []; + _nearVehicles = []; }; -if(count _nearVehicles > 0) exitWith { - serv_sv_use deleteAt _servIndex; - [_price,_unit_return] remoteExecCall ["life_fnc_garageRefund",_unit]; - [1,(localize "STR_Garage_SpawnPointError")] remoteExecCall ["life_fnc_broadcast",_unit]; +if (count _nearVehicles > 0) exitWith { + serv_sv_use deleteAt _servIndex; + [_price,_unit_return] remoteExecCall ["life_fnc_garageRefund",_unit]; + [1,"STR_Garage_SpawnPointError",true] remoteExecCall ["life_fnc_broadcast",_unit]; }; -_query = format["UPDATE vehicles SET active='1' WHERE pid='%1' AND id='%2'",_pid,_vid]; - - -[_query,false] spawn DB_fnc_asyncCall; -if(typeName _sp == "STRING") then { - _vehicle = createVehicle[(_vInfo select 2),[0,0,999],[],0,"NONE"]; - waitUntil {!isNil "_vehicle" && {!isNull _vehicle}}; - _vehicle allowDamage false; - _hs = nearestObjects[getMarkerPos _sp,["Land_Hospital_side2_F"],50] select 0; - _vehicle setPosATL (_hs modelToWorld [-0.4,-4,12.65]); - sleep 0.6; +_query = format["UPDATE vehicles SET active='1', damage='""[]""' WHERE pid='%1' AND id='%2'",_pid,_vid]; + +_trunk = [(_vInfo select 9)] call DB_fnc_mresToArray; +_gear = [(_vInfo select 10)] call DB_fnc_mresToArray; +_damage = [(_vInfo select 12)] call DB_fnc_mresToArray; +_wasIllegal = (_vInfo select 13); +_wasIllegal = if (_wasIllegal isEqualTo 1) then { true } else { false }; + +[_query,1] call DB_fnc_asyncCall; +if (_sp isEqualType "") then { + _vehicle = createVehicle[(_vInfo select 2),[0,0,999],[],0,"NONE"]; + waitUntil {!isNil "_vehicle" && {!isNull _vehicle}}; + _vehicle allowDamage false; + _hs = nearestObjects[getMarkerPos _sp,["Land_Hospital_side2_F"],50] select 0; + _vehicle setPosATL (_hs modelToWorld [-0.4,-4,12.65]); + uiSleep 0.6; } else { - _vehicle = createVehicle [(_vInfo select 2),_sp,[],0,"NONE"]; - waitUntil {!isNil "_vehicle" && {!isNull _vehicle}}; - _vehicle allowDamage false; - _vehicle setPos _sp; - _vehicle setVectorUp (surfaceNormal _sp); - _vehicle setDir _dir; + _vehicle = createVehicle [(_vInfo select 2),_sp,[],0,"NONE"]; + waitUntil {!isNil "_vehicle" && {!isNull _vehicle}}; + _vehicle allowDamage false; + _vehicle setPos _sp; + _vehicle setVectorUp (surfaceNormal _sp); + _vehicle setDir _dir; }; _vehicle allowDamage true; //Send keys over the network. [_vehicle] remoteExecCall ["life_fnc_addVehicle2Chain",_unit]; [_pid,_side,_vehicle,1] call TON_fnc_keyManagement; _vehicle lock 2; -//Reskin the vehicle -[_vehicle,_vInfo select 8] remoteExec ["life_fnc_colorVehicle",RANY]; -_vehicle setVariable["vehicle_info_owners",[[_pid,_name]],true]; -_vehicle setVariable["dbInfo",[(_vInfo select 4),_vInfo select 7]]; -//_vehicle addEventHandler["Killed","_this spawn TON_fnc_vehicleDead"]; //Obsolete function? +//Reskin the vehicle +[_vehicle,(_vInfo select 8)] remoteExecCall ["life_fnc_colorVehicle",_unit]; +_vehicle setVariable ["vehicle_info_owners",[[_pid,_name]],true]; +_vehicle setVariable ["dbInfo",[(_vInfo select 4),(_vInfo select 7)],true]; +_vehicle disableTIEquipment true; //No Thermals.. They're cheap but addictive. [_vehicle] call life_fnc_clearVehicleAmmo; -//Sets of animations +// Avoid problems if u keep changing which stuff to save! +if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { + _vehicle setVariable ["Trunk",_trunk,true]; + if (_wasIllegal) then { + if (_sp isEqualType "") then { + _location= (nearestLocations [getPos _sp,["NameCityCapital","NameCity","NameVillage"],1000]) select 0; + } else { + _location= (nearestLocations [_sp,["NameCityCapital","NameCity","NameVillage"],1000]) select 0; + }; + _location = text _location; + [1,"STR_NOTF_BlackListedVehicle",true,[_location,_name]] remoteExecCall ["life_fnc_broadcast",west]; + + _query = format["UPDATE vehicles SET blacklist='0' WHERE id='%1' AND pid='%2'",_vid,_pid]; + _thread = [_query,1] call DB_fnc_asyncCall; + }; + }else{ + _vehicle setVariable ["Trunk",[[],0],true]; +}; + +if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then { + _vehicle setFuel (_vInfo select 11); + }else{ + _vehicle setFuel 1; +}; + +if (count _gear > 0 && (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1)) then { + _items = _gear select 0; + _mags = _gear select 1; + _weapons = _gear select 2; + _backpacks = _gear select 3; + + for "_i" from 0 to ((count (_items select 0)) - 1) do { + _vehicle addItemCargoGlobal [((_items select 0) select _i), ((_items select 1) select _i)]; + }; + for "_i" from 0 to ((count (_mags select 0)) - 1) do { + _vehicle addMagazineCargoGlobal [((_mags select 0) select _i), ((_mags select 1) select _i)]; + }; + for "_i" from 0 to ((count (_weapons select 0)) - 1) do { + _vehicle addWeaponCargoGlobal [((_weapons select 0) select _i), ((_weapons select 1) select _i)]; + }; + for "_i" from 0 to ((count (_backpacks select 0)) - 1) do { + _vehicle addBackpackCargoGlobal [((_backpacks select 0) select _i), ((_backpacks select 1) select _i)]; + }; +}; + +if (count _damage > 0 && (LIFE_SETTINGS(getNumber,"save_vehicle_damage") isEqualTo 1)) then { + _parts = getAllHitPointsDamage _vehicle; -if(EQUAL(SEL(_vInfo,1),"civ") && EQUAL(SEL(_vInfo,2),"B_Heli_Light_01_F") && !(EQUAL(SEL(_vInfo,8),13))) then { - [_vehicle,"civ_littlebird",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit]; + for "_i" from 0 to ((count _damage) - 1) do { + _vehicle setHitPointDamage [format["%1",((_parts select 0) select _i)],_damage select _i]; + }; }; -if(EQUAL(SEL(_vInfo,1),"cop") && (SEL(_vInfo,2)) in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F"]) then { - [_vehicle,"cop_offroad",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit]; +//Sets of animations +if ((_vInfo select 1) isEqualTo "civ" && (_vInfo select 2) isEqualTo "B_Heli_Light_01_F" && !((_vInfo select 8) isEqualTo 13)) then { + [_vehicle,"civ_littlebird",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit]; +}; + +if ((_vInfo select 1) isEqualTo "cop" && ((_vInfo select 2)) in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F","C_Hatchback_01_sport_F","B_Heli_Light_01_F","B_Heli_Transport_01_F"]) then { + [_vehicle,"cop_offroad",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit]; }; -if(EQUAL(SEL(_vInfo,1),"med") && EQUAL(SEL(_vInfo,2),"C_Offroad_01_F")) then { - [_vehicle,"med_offroad",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit]; +if ((_vInfo select 1) isEqualTo "med" && (_vInfo select 2) isEqualTo "C_Offroad_01_F") then { + [_vehicle,"med_offroad",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit]; }; -[1,"Your vehicle is ready!"] remoteExecCall ["life_fnc_broadcast",_unit]; -serv_sv_use deleteAt _servIndex; \ No newline at end of file + +[1,_spawntext] remoteExecCall ["life_fnc_broadcast",_unit]; +serv_sv_use deleteAt _servIndex; diff --git a/life_server/Functions/Systems/fn_spikeStrip.sqf b/life_server/Functions/Systems/fn_spikeStrip.sqf index ebd612ca..cb6f0d50 100644 --- a/life_server/Functions/Systems/fn_spikeStrip.sqf +++ b/life_server/Functions/Systems/fn_spikeStrip.sqf @@ -1,22 +1,21 @@ #include "\life_server\script_macros.hpp" /* - File: fn_spikeStrip.sqf - Author: Bryan "Tonic" Boardwine - - Description: - This is the server-side part of it which constantly monitors the spike strip and vehicles near it. - First originally tried triggers but I was never any good at those nor do I like them as they - have a global effect. + File: fn_spikeStrip.sqf + Author: Bryan "Tonic" Boardwine + + Description: + This is the server-side part of it which constantly monitors the spike strip and vehicles near it. + First originally tried triggers but I was never any good at those nor do I like them as they + have a global effect. */ -private["_nearVehicles","_spikeStrip"]; -_spikeStrip = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -if(isNull _spikeStrip) exitWith {}; //Bad vehicle type passed. +private _spikeStrip = param [0,objNull,[objNull]]; +if (isNull _spikeStrip) exitWith {}; //Bad vehicle type passed. -waitUntil {_nearVehicles = nearestObjects[getPos _spikeStrip,["Car"],5]; count _nearVehicles > 0 OR isNull _spikeStrip}; +waitUntil {private _nearVehicles = nearestObjects[getPos _spikeStrip,["Car"],5]; count _nearVehicles > 0 || isNull _spikeStrip}; -if(isNull _spikeStrip) exitWith {}; //It was picked up? +if (isNull _spikeStrip) exitWith {}; //It was picked up? _vehicle = _nearVehicles select 0; -if(isNil "_vehicle") exitWith {deleteVehicle _spikeStrip;}; +if (isNil "_vehicle") exitWith {deleteVehicle _spikeStrip;}; [_vehicle] remoteExec ["life_fnc_spikeStripEffect",_vehicle]; -deleteVehicle _spikeStrip; \ No newline at end of file +deleteVehicle _spikeStrip; diff --git a/life_server/Functions/Systems/fn_transferOwnership.sqf b/life_server/Functions/Systems/fn_transferOwnership.sqf new file mode 100644 index 00000000..6cd87616 --- /dev/null +++ b/life_server/Functions/Systems/fn_transferOwnership.sqf @@ -0,0 +1,32 @@ +#include "..\..\script_macros.hpp" +/* + + File: fn_transferOwnership.sqf + Author: BoGuu + + Description: + Transfer agent ownership to HC upon it's connection + +*/ + +_which = param [0,false,[false]]; + +if (_which) then { + + if (!life_HC_isActive) exitWith {diag_log "ERROR: Server is trying to give AI ownership to HC when life_HC_isActive is false";}; + { + if (!(isPlayer _x)) then { + _x setOwner HC_Life; //Move agents over to HC + }; + } forEach animals; + +} else { + + if (life_HC_isActive) exitWith {diag_log "ERROR: Server is trying to give AI ownership to back to itself when life_HC_isActive is true";}; + { + if (!(isPlayer _x)) then { + _x setOwner RSERV; //Move agents over to Server + }; + } forEach animals; + +}; diff --git a/life_server/Functions/Systems/fn_vehicleCreate.sqf b/life_server/Functions/Systems/fn_vehicleCreate.sqf index fb433812..ebdb02f8 100644 --- a/life_server/Functions/Systems/fn_vehicleCreate.sqf +++ b/life_server/Functions/Systems/fn_vehicleCreate.sqf @@ -1,35 +1,36 @@ /* - File: fn_vehicleCreate.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Answers the query request to create the vehicle in the database. + File: fn_vehicleCreate.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Answers the query request to create the vehicle in the database. */ -private["_uid","_side","_type","_classname","_color","_plate"]; -_uid = [_this,0,"",[""]] call BIS_fnc_param; -_side = [_this,1,sideUnknown,[west]] call BIS_fnc_param; -_vehicle = [_this,2,ObjNull,[ObjNull]] call BIS_fnc_param; -_color = [_this,3,-1,[0]] call BIS_fnc_param; +private["_type","_classname","_plate"]; +params [ + ["_uid","",[""]], + ["_side",sideUnknown,[west]], + ["_vehicle",objNull,[objNull]], + ["_color",-1,[0]] +]; //Error checks -if(_uid == "" OR _side == sideUnknown OR isNull _vehicle) exitWith {}; -if(!alive _vehicle) exitWith {}; +if (_uid isEqualTo "" || _side isEqualTo sideUnknown || isNull _vehicle) exitWith {}; +if (!alive _vehicle) exitWith {}; _className = typeOf _vehicle; -_type = switch(true) do { - case (_vehicle isKindOf "Car"): {"Car"}; - case (_vehicle isKindOf "Air"): {"Air"}; - case (_vehicle isKindOf "Ship"): {"Ship"}; +_type = switch (true) do { + case (_vehicle isKindOf "Car"): {"Car"}; + case (_vehicle isKindOf "Air"): {"Air"}; + case (_vehicle isKindOf "Ship"): {"Ship"}; }; -_side = switch(_side) do { - case west:{"cop"}; - case civilian: {"civ"}; - case independent: {"med"}; - default {"Error"}; +_side = switch (_side) do { + case west:{"cop"}; + case civilian: {"civ"}; + case independent: {"med"}; + default {"Error"}; }; _plate = round(random(1000000)); [_uid,_side,_type,_classname,_color,_plate] call DB_fnc_insertVehicle; -_vehicle setVariable["dbInfo",[_uid,_plate]]; -_vehicle addEventHandler["Killed","_this spawn TON_fnc_vehicleDead"]; \ No newline at end of file +_vehicle setVariable ["dbInfo",[_uid,_plate],true]; diff --git a/life_server/Functions/Systems/fn_vehicleDead.sqf b/life_server/Functions/Systems/fn_vehicleDead.sqf deleted file mode 100644 index 6d57433b..00000000 --- a/life_server/Functions/Systems/fn_vehicleDead.sqf +++ /dev/null @@ -1,25 +0,0 @@ -/* - File: fn_vehicleDead.sqf - - Description: - Tells the database that this vehicle has died and can't be recovered. -*/ -private["_vehicle","_plate","_uid","_query","_sql","_dbInfo","_thread"]; -_vehicle = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -hint str _vehicle; -if(isNull _vehicle) exitWith {}; //NULL - -_dbInfo = _vehicle getVariable["dbInfo",[]]; -if(count _dbInfo == 0) exitWith {}; -_uid = _dbInfo select 0; -_plate = _dbInfo select 1; - -_query = format["UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'",_uid,_plate]; - - -_thread = [_query,1] call DB_fnc_asyncCall; - -sleep (1.3 * 60); -if(!isNil "_vehicle" && {!isNull _vehicle}) then { - deleteVehicle _vehicle; -}; \ No newline at end of file diff --git a/life_server/Functions/Systems/fn_vehicleDelete.sqf b/life_server/Functions/Systems/fn_vehicleDelete.sqf index 25937c12..d20b40ad 100644 --- a/life_server/Functions/Systems/fn_vehicleDelete.sqf +++ b/life_server/Functions/Systems/fn_vehicleDelete.sqf @@ -1,22 +1,23 @@ /* - File: fn_vehicleDelete.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Doesn't actually delete since we don't give our DB user that type of - access so instead we set it to alive=0 so it never shows again. + File: fn_vehicleDelete.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Doesn't actually delete since we don't give our DB user that type of + access so instead we set it to alive=0 so it never shows again. */ -private["_vid","_sp","_pid","_query","_sql","_type","_thread"]; -_vid = [_this,0,-1,[0]] call BIS_fnc_param; -_pid = [_this,1,"",[""]] call BIS_fnc_param; -_sp = [_this,2,2500,[0]] call BIS_fnc_param; -_unit = [_this,3,ObjNull,[ObjNull]] call BIS_fnc_param; -_type = [_this,4,"",[""]] call BIS_fnc_param; +private["_query","_thread"]; +params [ + ["_vid",-1,[0]], + ["_pid","",[""]], + ["_sp",2500,[0]], + ["_unit",objNull,[objNull]], + ["_type","",[""]] +]; -if(_vid == -1 OR _pid == "" OR _sp == 0 OR isNull _unit OR _type == "") exitWith {}; +if (_vid isEqualTo -1 || _pid isEqualTo "" || _sp isEqualTo 0 || isNull _unit || _type isEqualTo "") exitWith {}; _unit = owner _unit; _query = format["UPDATE vehicles SET alive='0' WHERE pid='%1' AND id='%2'",_pid,_vid]; - _thread = [_query,1] call DB_fnc_asyncCall; diff --git a/life_server/Functions/Systems/fn_vehicleStore.sqf b/life_server/Functions/Systems/fn_vehicleStore.sqf index 66ea4c08..a43ae2be 100644 --- a/life_server/Functions/Systems/fn_vehicleStore.sqf +++ b/life_server/Functions/Systems/fn_vehicleStore.sqf @@ -1,63 +1,154 @@ #include "\life_server\script_macros.hpp" /* - File: fn_vehicleStore.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Stores the vehicle in the 'Garage' + File: fn_vehicleStore.sqf + Author: Bryan "Tonic" Boardwine + Description: + Stores the vehicle in the 'Garage' */ -private["_vehicle","_impound","_vInfo","_vInfo","_plate","_uid","_query","_sql","_unit"]; -_vehicle = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -_impound = [_this,1,false,[true]] call BIS_fnc_param; -_unit = [_this,2,ObjNull,[ObjNull]] call BIS_fnc_param; - -if(isNull _vehicle OR isNull _unit) exitWith {life_impound_inuse = false; (owner _unit) publicVariableClient "life_impound_inuse";life_garage_store = false;(owner _unit) publicVariableClient "life_garage_store";}; //Bad data passed. - -_vInfo = _vehicle getVariable["dbInfo",[]]; -if(count _vInfo > 0) then { - _plate = _vInfo select 1; - _uid = _vInfo select 0; -}; - -if(_impound) then { - if(count _vInfo == 0) then { - life_impound_inuse = false; - (owner _unit) publicVariableClient "life_impound_inuse"; - if(!isNil "_vehicle" && {!isNull _vehicle}) then { - deleteVehicle _vehicle; - }; - } else { - _query = format["UPDATE vehicles SET active='0' WHERE pid='%1' AND plate='%2'",_uid,_plate]; - - _thread = [_query,1] call DB_fnc_asyncCall; - //waitUntil {scriptDone _thread}; - if(!isNil "_vehicle" && {!isNull _vehicle}) then { - deleteVehicle _vehicle; - }; - life_impound_inuse = false; - (owner _unit) publicVariableClient "life_impound_inuse"; - }; -} else { - if(count _vInfo == 0) exitWith { - [1,(localize "STR_Garage_Store_NotPersistent")] remoteExecCall ["life_fnc_broadcast",(owner _unit)]; - life_garage_store = false; - (owner _unit) publicVariableClient "life_garage_store"; - }; - - if(_uid != getPlayerUID _unit) exitWith { - [1,(localize "STR_Garage_Store_NoOwnership")] remoteExecCall ["life_fnc_broadcast",(owner _unit)]; - life_garage_store = false; - (owner _unit) publicVariableClient "life_garage_store"; - }; - - _query = format["UPDATE vehicles SET active='0' WHERE pid='%1' AND plate='%2'",_uid,_plate]; - - _thread = [_query,1] call DB_fnc_asyncCall; - //waitUntil {scriptDone _thread}; - if(!isNil "_vehicle" && {!isNull _vehicle}) then { - deleteVehicle _vehicle; - }; - life_garage_store = false; - (owner _unit) publicVariableClient "life_garage_store"; - [1,(localize "STR_Garage_Store_Success")] remoteExecCall ["life_fnc_broadcast",(owner _unit)]; -}; \ No newline at end of file +private["_vInfo","_vInfo","_plate","_uid","_query","_sql","_trunk","_vehItems","_vehMags","_vehWeapons","_vehBackpacks","_cargo","_saveItems","_resourceItems","_fuel","_damage","_itemList","_totalweight","_weight","_thread"]; +params [ + ["_vehicle",objNull,[objNull]], + ["_impound",false,[false]], + ["_unit",objNull,[objNull]], + ["_storetext","",[""]] +]; +_resourceItems = LIFE_SETTINGS(getArray,"save_vehicle_items"); + +if (isNull _vehicle || isNull _unit) exitWith {life_impound_inuse = false; (owner _unit) publicVariableClient "life_impound_inuse";life_garage_store = false;(owner _unit) publicVariableClient "life_garage_store";}; //Bad data passed. +_vInfo = _vehicle getVariable ["dbInfo",[]]; + +if (count _vInfo > 0) then { + _plate = _vInfo select 1; + _uid = _vInfo select 0; +}; + +// save damage. +if (LIFE_SETTINGS(getNumber,"save_vehicle_damage") isEqualTo 1) then { + _damage = getAllHitPointsDamage _vehicle; + _damage = _damage select 2; + } else { + _damage = []; +}; +_damage = [_damage] call DB_fnc_mresArray; + +// because fuel price! +if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then { + _fuel = (fuel _vehicle); + } else { + _fuel = 1; +}; + +if (_impound) exitWith { + if (count _vInfo isEqualTo 0) then { + life_impound_inuse = false; + (owner _unit) publicVariableClient "life_impound_inuse"; + + if (!isNil "_vehicle" && {!isNull _vehicle}) then { + deleteVehicle _vehicle; + }; + } else { // no free repairs! + _query = format["UPDATE vehicles SET active='0', fuel='%3', damage='%4' WHERE pid='%1' AND plate='%2'",_uid , _plate, _fuel, _damage]; + _thread = [_query,1] call DB_fnc_asyncCall; + + if (!isNil "_vehicle" && {!isNull _vehicle}) then { + deleteVehicle _vehicle; + }; + + life_impound_inuse = false; + (owner _unit) publicVariableClient "life_impound_inuse"; + }; +}; + +// not persistent so just do this! +if (count _vInfo isEqualTo 0) exitWith { + [1,"STR_Garage_Store_NotPersistent",true] remoteExecCall ["life_fnc_broadcast",(owner _unit)]; + life_garage_store = false; + (owner _unit) publicVariableClient "life_garage_store"; +}; + +if (_uid != getPlayerUID _unit) exitWith { + [1,"STR_Garage_Store_NoOwnership",true] remoteExecCall ["life_fnc_broadcast",(owner _unit)]; + life_garage_store = false; + (owner _unit) publicVariableClient "life_garage_store"; +}; + +// sort out whitelisted items! +_trunk = _vehicle getVariable ["Trunk", [[], 0]]; +_itemList = _trunk select 0; +_totalweight = 0; +_items = []; +if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { + if (LIFE_SETTINGS(getNumber,"save_vehicle_illegal") isEqualTo 1) then { + private["_isIllegal", "_blacklist"]; + _blacklist = false; + _profileQuery = format["SELECT name FROM players WHERE playerid='%1'", _uid]; + _profileName = [_profileQuery, 2] call DB_fnc_asyncCall; + _profileName = _profileName select 0; + + { + _isIllegal = M_CONFIG(getNumber,"VirtualItems",(_x select 0),"illegal"); + + _isIllegal = if (_isIllegal isEqualTo 1) then { true } else { false }; + + if (((_x select 0) in _resourceItems) || (_isIllegal)) then { + _items pushBack[(_x select 0),(_x select 1)]; + _weight = (ITEM_WEIGHT(_x select 0)) * (_x select 1); + _totalweight = _weight + _totalweight; + }; + if (_isIllegal) then { + _blacklist = true; + }; + + } + foreach _itemList; + + if (_blacklist) then { + [_uid, _profileName, "481"] remoteExecCall["life_fnc_wantedAdd", RSERV]; + _query = format["UPDATE vehicles SET blacklist='1' WHERE pid='%1' AND plate='%2'", _uid, _plate]; + _thread = [_query, 1] call DB_fnc_asyncCall; + }; + + } + else { + { + if ((_x select 0) in _resourceItems) then { + _items pushBack[(_x select 0),(_x select 1)]; + _weight = (ITEM_WEIGHT(_x select 0)) * (_x select 1); + _totalweight = _weight + _totalweight; + }; + } + forEach _itemList; + }; + + _trunk = [_items, _totalweight]; +} +else { + _trunk = [[], 0]; +}; + +if (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1) then { + _vehItems = getItemCargo _vehicle; + _vehMags = getMagazineCargo _vehicle; + _vehWeapons = getWeaponCargo _vehicle; + _vehBackpacks = getBackpackCargo _vehicle; + _cargo = [_vehItems,_vehMags,_vehWeapons,_vehBackpacks]; + // no items? clean the array so the database looks pretty + if ((count (_vehItems select 0) isEqualTo 0) && (count (_vehMags select 0) isEqualTo 0) && (count (_vehWeapons select 0) isEqualTo 0) && (count (_vehBackpacks select 0) isEqualTo 0)) then {_cargo = [];}; + } else { + _cargo = []; +}; +// prepare +_trunk = [_trunk] call DB_fnc_mresArray; +_cargo = [_cargo] call DB_fnc_mresArray; + +// update +_query = format["UPDATE vehicles SET active='0', inventory='%3', gear='%4', fuel='%5', damage='%6' WHERE pid='%1' AND plate='%2'", _uid, _plate, _trunk, _cargo, _fuel, _damage]; +_thread = [_query,1] call DB_fnc_asyncCall; + +if (!isNil "_vehicle" && {!isNull _vehicle}) then { + deleteVehicle _vehicle; +}; + +life_garage_store = false; +(owner _unit) publicVariableClient "life_garage_store"; +[1,_storetext] remoteExecCall ["life_fnc_broadcast",(owner _unit)]; diff --git a/life_server/Functions/Systems/fn_vehicleUpdate.sqf b/life_server/Functions/Systems/fn_vehicleUpdate.sqf new file mode 100644 index 00000000..c0cd30ff --- /dev/null +++ b/life_server/Functions/Systems/fn_vehicleUpdate.sqf @@ -0,0 +1,58 @@ +#include "\life_server\script_macros.hpp" +/* + File: fn_vehicleUpdate.sqf + Author : NiiRoZz + + Description: + Tells the database that this vehicle need update inventory. +*/ +private["_plate","_uid","_query","_sql","_dbInfo","_thread","_cargo","_trunk","_resourceItems","_fuel","_damage","_itemList","_totalweight","_weight"]; +params [ + ["_vehicle",objNull,[objNull]], + ["_mode",1,[0]] +]; +if (isNull _vehicle) exitWith {}; //NULL + +_dbInfo = _vehicle getVariable ["dbInfo",[]]; +if (count _dbInfo isEqualTo 0) exitWith {}; +_uid = _dbInfo select 0; +_plate = _dbInfo select 1; +switch (_mode) do { + case 1: { + _vehItems = getItemCargo _vehicle; + _vehMags = getMagazineCargo _vehicle; + _vehWeapons = getWeaponCargo _vehicle; + _vehBackpacks = getBackpackCargo _vehicle; + _cargo = [_vehItems,_vehMags,_vehWeapons,_vehBackpacks]; + + // Keep it clean! + if ((count (_vehItems select 0) isEqualTo 0) && (count (_vehMags select 0) isEqualTo 0) && (count (_vehWeapons select 0) isEqualTo 0) && (count (_vehBackpacks select 0) isEqualTo 0)) then { + _cargo = []; + }; + + _cargo = [_cargo] call DB_fnc_mresArray; + + _query = format["UPDATE vehicles SET gear='%3' WHERE pid='%1' AND plate='%2'",_uid,_plate,_cargo]; + _thread = [_query,1] call DB_fnc_asyncCall; + }; + + case 2: { + _resourceItems = LIFE_SETTINGS(getArray,"save_vehicle_items"); + _trunk = _vehicle getVariable ["Trunk",[[],0]]; + _itemList = _trunk select 0; + _totalweight = 0; + _items = []; + { + if ((_x select 0) in _resourceItems) then { + _items pushBack [_x select 0,_x select 1]; + _weight = (ITEM_WEIGHT(_x select 0)) * (_x select 1); + _totalweight = _weight + _totalweight; + }; + }forEach _itemList; + _trunk = [_items,_totalweight]; + _trunk = [_trunk] call DB_fnc_mresArray; + + _query = format["UPDATE vehicles SET inventory='%3' WHERE pid='%1' AND plate='%2'",_uid,_plate,_trunk]; + _thread = [_query,1] call DB_fnc_asyncCall; + }; +}; diff --git a/life_server/Functions/Systems/fn_whoDoneIt.sqf b/life_server/Functions/Systems/fn_whoDoneIt.sqf new file mode 100644 index 00000000..7c484a83 --- /dev/null +++ b/life_server/Functions/Systems/fn_whoDoneIt.sqf @@ -0,0 +1,40 @@ +/* + File: fn_whoDoneIt.sqf + Description: Save log file of units killed. + Author: Å ColinM - Help of BI Wiki & Forums. + + Credits: KillzoneKid for his Debug_Console v3.0 file. Cuel from the BI Forums for his current & previous posts. +*/ +params [ + ["_victim",objNull,[objNull]], + ["_killer",objNull,[objNull]] +]; + +if (isServer) then { + private["_killerWep","_killerVeh","_distance","_message"]; + if (isNull _victim || isNull _killer) exitWith {}; + + _killerWep = currentWeapon _killer; + _killerVeh = vehicle _killer; + _distance = _killer distance _victim; + _distance = floor(_distance); + + _message = ""; + if (_victim == _killer) then { + _message = format["Suicide Message: %1 committed suicide (or disconnected)", (name _victim)]; + }; + if (_killerWep != "") then { + _message = format["Weapon Death Message: %1 has killed %2 with Weapon %3 from %4 Meters", (name _killer), (name _victim), (getText(configFile >> "cfgWeapons" >> _killerWep >> "displayName")), _distance]; + }; + if (_killerVeh isKindOf "Car" && _killerWep isEqualTo "") then { + _message = format["Vehicle Death Message: %1 has knocked down %2 with a %3", (name _killer), (name _victim), (getText(configFile >> "CfgVehicles" >> (typeOf _killerVeh) >> "displayName"))]; + }; + if (_killerVeh isKindOf "Air" && _killerWep isEqualTo "") then { + _message = format["Aircraft Death Message: %1 has obliterated %2 with a %3", (name _killer), (name _victim), (getText(configFile >> "CfgVehicles" >> (typeOf _killerVeh) >> "displayName"))]; + }; + if (_message isEqualTo "") then { + _message = format["Death Message: %1 has killed %2", (name _killer), (name _victim)]; + }; + + diag_log format["death_log: %1",_message]; +}; diff --git a/life_server/Functions/WantedSystem/fn_wantedAdd.sqf b/life_server/Functions/WantedSystem/fn_wantedAdd.sqf index a2e97907..f44fb983 100644 --- a/life_server/Functions/WantedSystem/fn_wantedAdd.sqf +++ b/life_server/Functions/WantedSystem/fn_wantedAdd.sqf @@ -1,52 +1,97 @@ /* - File: fn_wantedAdd.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Adds or appends a unit to the wanted list. + File: fn_wantedAdd.sqf + Author: Bryan "Tonic" Boardwine" + Database Persistence By: ColinM + Assistance by: Paronity + Stress Tests by: Midgetgrimm + + Description: + Adds or appends a unit to the wanted list. */ -private["_uid","_type","_index","_data","_crimes","_val","_customBounty","_name"]; -_uid = [_this,0,"",[""]] call BIS_fnc_param; -_name = [_this,1,"",[""]] call BIS_fnc_param; -_type = [_this,2,"",[""]] call BIS_fnc_param; -_customBounty = [_this,3,-1,[0]] call BIS_fnc_param; -if(_uid == "" OR _type == "" OR _name == "") exitWith {}; //Bad data passed. +private["_index","_data","_crimes","_val","_pastCrimes","_query","_queryResult"]; +params [ + ["_uid","",[""]], + ["_name","",[""]], + ["_type","",[""]], + ["_customBounty",-1,[0]] +]; +if (_uid isEqualTo "" || _type isEqualTo "" || _name isEqualTo "") exitWith {}; //Bad data passed. //What is the crime? -switch(_type) do +switch (_type) do { - case "187V": {_type = ["Vehicular Manslaughter",6500]}; - case "187": {_type = ["Manslaughter",8500]}; - case "901": {_type = ["Escaping Jail",4500]}; - case "261": {_type = ["Rape",5000]}; //What type of sick bastard would add this? - case "261A": {_type = ["Attempted Rape",3000]}; - case "215": {_type = ["Attempted Auto Theft",2000]}; - case "213": {_type = ["Use of illegal explosives",10000]}; - case "211": {_type = ["Robbery",1000]}; - case "207": {_type = ["Kidnapping",3500]}; - case "207A": {_type = ["Attempted Kidnapping",2000]}; - case "487": {_type = ["Grand Theft",1500]}; - case "488": {_type = ["Petty Theft",700]}; - case "480": {_type = ["Hit and run",1300]}; - case "481": {_type = ["Drug Possession",1000]}; - case "482": {_type = ["Intent to distribute",5000]}; - case "483": {_type = ["Drug Trafficking",9500]}; - case "459": {_type = ["Burglary",6500]}; - default {_type = [];}; + case "187V": {_type = ["187V",650]}; + case "187": {_type = ["187",2000]}; + case "901": {_type = ["901",450]}; + case "215": {_type = ["215",200]}; + case "213": {_type = ["213",1000]}; + case "211": {_type = ["211",100]}; + case "207": {_type = ["207",350]}; + case "207A": {_type = ["207A",200]}; + case "390": {_type = ["390",1500]}; + case "487": {_type = ["487",150]}; + case "488": {_type = ["488",70]}; + case "480": {_type = ["480",100]}; + case "481": {_type = ["481",100]}; + case "482": {_type = ["482",500]}; + case "483": {_type = ["483",950]}; + case "459": {_type = ["459",650]}; + case "666": {_type = ["666",200]}; + case "667": {_type = ["667",4500]}; + case "668": {_type = ["668",1500]}; + + case "1": {_type = ["1",250]}; + case "2": {_type = ["2",100]}; + case "3": {_type = ["3",75]}; + case "4": {_type = ["4",125]}; + case "5": {_type = ["5",50]}; + case "6": {_type = ["6",40]}; + case "7": {_type = ["7",75]}; + case "8": {_type = ["8",2500]}; + case "9": {_type = ["9",2500]}; + case "10": {_type = ["10",7500]}; + case "11": {_type = ["11",5000]}; + case "12": {_type = ["12",1250]}; + case "13": {_type = ["13",750]}; + case "14": {_type = ["14",250]}; + case "15": {_type = ["15",1250]}; + case "16": {_type = ["16",750]}; + case "17": {_type = ["17",50]}; + case "18": {_type = ["18",750]}; + case "19": {_type = ["19",1250]}; + case "20": {_type = ["20",250]}; + case "21": {_type = ["21",250]}; + case "22": {_type = ["22",1000]}; + case "23": {_type = ["23",2500]}; + case "24": {_type = ["24",5000]}; + case "25": {_type = ["25",10000]}; + default {_type = [];}; }; -if(count _type == 0) exitWith {}; //Not our information being passed... +if (count _type isEqualTo 0) exitWith {}; //Not our information being passed... //Is there a custom bounty being sent? Set that as the pricing. -if(_customBounty != -1) then {_type set[1,_customBounty];}; +if (_customBounty != -1) then {_type set[1,_customBounty];}; //Search the wanted list to make sure they are not on it. -_index = [_uid,life_wanted_list] call TON_fnc_index; -if(_index != -1) then { - _data = life_wanted_list select _index; - _crimes = _data select 2; - _crimes pushBack (_type select 0); - _val = _data select 3; - life_wanted_list set[_index,[_name,_uid,_crimes,(_type select 1) + _val]]; +_query = format["SELECT wantedID FROM wanted WHERE wantedID='%1'",_uid]; +_queryResult = [_query,2,true] call DB_fnc_asyncCall; +_val = [_type select 1] call DB_fnc_numberSafe; +_number = _type select 0; + +if (count _queryResult != 0) then +{ + _crime = format["SELECT wantedCrimes, wantedBounty FROM wanted WHERE wantedID='%1'",_uid]; + _crimeresult = [_crime,2] call DB_fnc_asyncCall; + _pastcrimess = [_crimeresult select 0] call DB_fnc_mresToArray; + if (_pastcrimess isEqualType "") then {_pastcrimess = call compile format["%1", _pastcrimess];}; + _pastCrimes = _pastcrimess; + _pastCrimes pushBack _number; + _pastCrimes = [_pastCrimes] call DB_fnc_mresArray; + _query = format["UPDATE wanted SET wantedCrimes = '%1', wantedBounty = wantedBounty + '%2', active = '1' WHERE wantedID='%3'",_pastCrimes,_val,_uid]; + [_query,1] call DB_fnc_asyncCall; } else { - life_wanted_list pushBack [_name,_uid,[(_type select 0)],(_type select 1)]; -}; \ No newline at end of file + _crimes = [_type select 0]; + _crimes = [_crimes] call DB_fnc_mresArray; + _query = format["INSERT INTO wanted (wantedID, wantedName, wantedCrimes, wantedBounty, active) VALUES('%1', '%2', '%3', '%4', '1')",_uid,_name,_crimes,_val]; + [_query,1] call DB_fnc_asyncCall; +}; diff --git a/life_server/Functions/WantedSystem/fn_wantedBounty.sqf b/life_server/Functions/WantedSystem/fn_wantedBounty.sqf index a49ab6b7..f7edadd8 100644 --- a/life_server/Functions/WantedSystem/fn_wantedBounty.sqf +++ b/life_server/Functions/WantedSystem/fn_wantedBounty.sqf @@ -1,22 +1,32 @@ -#include "\life_server\script_macros.hpp" /* - File: fn_wantedBounty.sqf - Author: Bryan "Tonic" Boardwine" - - Description: - Checks if the person is on the bounty list and awards the cop for killing them. + File: fn_wantedBounty.sqf + Author: Bryan "Tonic" Boardwine" + Database Persistence By: ColinM + Assistance by: Paronity + Stress Tests by: Midgetgrimm + + Description: + Checks if the person is on the bounty list and awards the cop for killing them. */ -private["_civ","_cop","_id","_half"]; -_civ = [_this,0,Objnull,[Objnull]] call BIS_fnc_param; -_cop = [_this,1,Objnull,[Objnull]] call BIS_fnc_param; -_half = [_this,2,false,[false]] call BIS_fnc_param; -if(isNull _civ OR isNull _cop) exitWith {}; +private["_id","_result","_queryResult","_amount"]; +params [ + ["_uid","",[""]], + ["_civ",objNull,[objNull]], + ["_cop",objNull,[objNull]], + ["_half",false,[false]] +]; +if (isNull _civ || isNull _cop) exitWith {}; + +_query = format["SELECT wantedID, wantedName, wantedCrimes, wantedBounty FROM wanted WHERE active='1' AND wantedID='%1'",_uid]; +_queryResult = [_query,2] call DB_fnc_asyncCall; -_id = [(getPlayerUID _civ),life_wanted_list] call TON_fnc_index; -if(_id != -1) then { - if(_half) then { - [((life_wanted_list select _id) select 3) / 2,((life_wanted_list select _id) select 3)] remoteExecCall ["life_fnc_bountyReceive",(owner _cop)]; - } else { - [(life_wanted_list select _id) select 3,(life_wanted_list select _id) select 3] remoteExecCall ["life_fnc_bountyReceive",(owner _cop)]; - }; -}; \ No newline at end of file +if (!(_queryResult isEqualTo [])) then { + _amount = _queryResult select 3; + if (_amount != 0) then { + if (_half) then { + [((_amount) / 2),_amount] remoteExecCall ["life_fnc_bountyReceive",(owner _cop)]; + } else { + [_amount,_amount] remoteExecCall ["life_fnc_bountyReceive",(owner _cop)]; + }; + }; +}; diff --git a/life_server/Functions/WantedSystem/fn_wantedCrimes.sqf b/life_server/Functions/WantedSystem/fn_wantedCrimes.sqf new file mode 100644 index 00000000..7f02e8ce --- /dev/null +++ b/life_server/Functions/WantedSystem/fn_wantedCrimes.sqf @@ -0,0 +1,81 @@ +#include "\life_server\script_macros.hpp" +/* + File: fn_wantedCrimes.sqf + Author: ColinM + Assistance by: Paronity + Stress Tests by: Midgetgrimm + + Description: + Grabs a list of crimes committed by a person. +*/ +private["_display","_tab","_queryResult","_result","_crimesDb","_crimesArr","_type"]; +disableSerialization; +params [ + ["_ret",objNull,[objNull]], + ["_criminal",[],[[]]] +]; + +_query = format["SELECT wantedCrimes, wantedBounty FROM wanted WHERE active='1' AND wantedID='%1'",_criminal select 0]; +_queryResult = [_query,2] call DB_fnc_asyncCall; + +_ret = owner _ret; +_crimesArr = []; + +_type = [_queryResult select 0] call DB_fnc_mresToArray; +if (_type isEqualType "") then {_type = call compile format["%1", _type];}; +{ + switch (_x) do + { + case "187V": {_x = "STR_Crime_187V"}; + case "187": {_x = "STR_Crime_187"}; + case "901": {_x = "STR_Crime_901"}; + case "215": {_x = "STR_Crime_215"}; + case "213": {_x = "STR_Crime_213"}; + case "211": {_x = "STR_Crime_211"}; + case "207": {_x = "STR_Crime_207"}; + case "207A": {_x = "STR_Crime_207A"}; + case "390": {_x = "STR_Crime_390"}; + case "487": {_x = "STR_Crime_487"}; + case "488": {_x = "STR_Crime_488"}; + case "480": {_x = "STR_Crime_480"}; + case "481": {_x = "STR_Crime_481"}; + case "482": {_x = "STR_Crime_482"}; + case "483": {_x = "STR_Crime_483"}; + case "459": {_x = "STR_Crime_459"}; + case "666": {_x = "STR_Crime_666"}; + case "667": {_x = "STR_Crime_667"}; + case "668": {_x = "STR_Crime_668"}; + case "919": {_x = "STR_Crime_919"}; + case "919A": {_x = "STR_Crime_919A"}; + + case "1": {_x = "STR_Crime_1"}; + case "2": {_x = "STR_Crime_2"}; + case "3": {_x = "STR_Crime_3"}; + case "4": {_x = "STR_Crime_4"}; + case "5": {_x = "STR_Crime_5"}; + case "6": {_x = "STR_Crime_6"}; + case "7": {_x = "STR_Crime_7"}; + case "8": {_x = "STR_Crime_8"}; + case "9": {_x = "STR_Crime_9"}; + case "10": {_x = "STR_Crime_10"}; + case "11": {_x = "STR_Crime_11"}; + case "12": {_x = "STR_Crime_12"}; + case "13": {_x = "STR_Crime_13"}; + case "14": {_x = "STR_Crime_14"}; + case "15": {_x = "STR_Crime_15"}; + case "16": {_x = "STR_Crime_16"}; + case "17": {_x = "STR_Crime_17"}; + case "18": {_x = "STR_Crime_18"}; + case "19": {_x = "STR_Crime_19"}; + case "20": {_x = "STR_Crime_20"}; + case "21": {_x = "STR_Crime_21"}; + case "22": {_x = "STR_Crime_22"}; + case "23": {_x = "STR_Crime_23"}; + case "24": {_x = "STR_Crime_24"}; + case "25": {_x = "STR_Crime_25"}; + }; + _crimesArr pushBack _x; +}forEach _type; +_queryResult set[0,_crimesArr]; + +[_queryResult] remoteExec ["life_fnc_wantedInfo",_ret]; diff --git a/life_server/Functions/WantedSystem/fn_wantedFetch.sqf b/life_server/Functions/WantedSystem/fn_wantedFetch.sqf index 88ab45e0..8e2b02f2 100644 --- a/life_server/Functions/WantedSystem/fn_wantedFetch.sqf +++ b/life_server/Functions/WantedSystem/fn_wantedFetch.sqf @@ -1,28 +1,48 @@ #include "\life_server\script_macros.hpp" /* - File: fn_wantedFetch.sqf - Author: Bryan "Tonic" Boardwine" + File: fn_wantedFetch.sqf + Author: Bryan "Tonic" Boardwine" + Database Persistence By: ColinM + Assistance by: Paronity + Stress Tests by: Midgetgrimm - Description: - Displays wanted list information sent from the server. + Description: + Displays wanted list information sent from the server. */ -private["_list","_jailedUnits"]; -params [ - ["_ret",ObjNull,[objNull]] -]; -if(isNull _ret) exitWith {}; - +private["_list","_result","_queryResult","_units","_inStatement"]; +private _ret = param [0,objNull,[objNull]]; +if (isNull _ret) exitWith {}; _ret = owner _ret; -_jailedUnits = []; -{if(_x distance (getMarkerPos "jail_marker") < 120) then {_jailedUnits pushBack getPlayerUID _x}} forEach playableUnits; - +_inStatement = ""; _list = []; +_units = []; +{if ((side _x) isEqualTo civilian) then {_units pushBack (getPlayerUID _x)};} forEach playableUnits; + +if (count _units isEqualTo 0) exitWith {[_list] remoteExec ["life_fnc_wantedList",_ret];}; + { - _uid = _x select 1; - if([_uid] call life_fnc_isUIDActive) then { - if(!(_uid in _jailedUnits)) then { - _list pushBack _x; - }; - }; -} foreach life_wanted_list; + if (count _units > 1) then { + if (_inStatement isEqualTo "") then { + _inStatement = "'" + _x + "'"; + } else { + _inStatement = _inStatement + ", '" + _x + "'"; + }; + } else { + _inStatement = _x; + }; +} forEach _units; + +_query = format["SELECT wantedID, wantedName FROM wanted WHERE active='1' AND wantedID in (%1)",_inStatement]; +_queryResult = [_query,2,true] call DB_fnc_asyncCall; +if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { + diag_log format["Query: %1",_query]; +}; + +{ + _list pushBack (_x); +} +forEach _queryResult; + +if (count _list isEqualTo 0) exitWith {[_list] remoteExec ["life_fnc_wantedList",_ret];}; + [_list] remoteExec ["life_fnc_wantedList",_ret]; diff --git a/life_server/Functions/WantedSystem/fn_wantedPardon.sqf b/life_server/Functions/WantedSystem/fn_wantedPardon.sqf deleted file mode 100644 index 2d3962bc..00000000 --- a/life_server/Functions/WantedSystem/fn_wantedPardon.sqf +++ /dev/null @@ -1,18 +0,0 @@ -/* - File: fn_wantedPardon.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Unwants / pardons a person from the wanted list. -*/ -private["_uid"]; -_uid = [_this,0,"",[""]] call BIS_fnc_param; -if(_uid == "") exitWith {}; - -_index = [_uid,life_wanted_list] call TON_fnc_index; - -if(_index != -1) then { - life_wanted_list set[_index,-1]; - life_wanted_list = life_wanted_list - [-1]; - //publicVariable "life_wanted_list"; -}; \ No newline at end of file diff --git a/life_server/Functions/WantedSystem/fn_wantedPerson.sqf b/life_server/Functions/WantedSystem/fn_wantedPerson.sqf index cf5f9706..fc532ddc 100644 --- a/life_server/Functions/WantedSystem/fn_wantedPerson.sqf +++ b/life_server/Functions/WantedSystem/fn_wantedPerson.sqf @@ -1,18 +1,19 @@ /* - File: fn_wantedPerson.sqf - Author: Bryan "Tonic" Boardwine" - - Description: - Fetches a specific person from the wanted array. -*/ -private["_unit","_index"]; -_unit = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -if(isNull _unit) exitWith {[]}; + File: fn_wantedPerson.sqf + Author: Bryan "Tonic" Boardwine" + Database Persistence By: ColinM + Assistance by: Paronity + Stress Tests by: Midgetgrimm -_index = [getPlayerUID _unit,life_wanted_list] call TON_fnc_index; + Description: + Fetches a specific person from the wanted array. +*/ +private["_index","_queryResult","_result"]; +private _unit = param [0,objNull,[objNull]]; +if (isNull _unit) exitWith {[]}; +_uid = getPlayerUID _unit; -if(_index != -1) then { - life_wanted_list select _index; -} else { - []; -}; +_query = format["SELECT wantedID, wantedName, wantedBounty FROM wanted WHERE active='1' AND wantedID='%1'",_uid]; +_queryResult = [_query,2] call DB_fnc_asyncCall; +if (count _queryResult isEqualTo 0) exitWith {[]}; +_queryResult; diff --git a/life_server/Functions/WantedSystem/fn_wantedProfUpdate.sqf b/life_server/Functions/WantedSystem/fn_wantedProfUpdate.sqf new file mode 100644 index 00000000..d6bdaf2e --- /dev/null +++ b/life_server/Functions/WantedSystem/fn_wantedProfUpdate.sqf @@ -0,0 +1,25 @@ +#include "\life_server\script_macros.hpp" +/* + File: fn_wantedProfUpdate.sqf + Author: [midgetgrimm] + Persistence by: ColinM + Description: + Updates name of player if they change profiles +*/ +private["_query","_tickTime","_wantedCheck","_wantedQuery"]; +params [ + ["_uid","",[""]], + ["_name","",[""]] +]; +//Bad data check +if (_uid isEqualTo "" || _name isEqualTo "") exitWith {}; + +_wantedCheck = format["SELECT wantedName FROM wanted WHERE wantedID='%1'",_uid]; +_wantedQuery = [_wantedCheck,2] call DB_fnc_asyncCall; +if (count _wantedQuery isEqualTo 0) exitWith {}; +_wantedQuery = call compile format["%1",_wantedQuery]; + +if (_name != (_wantedQuery select 0)) then { + _query = format["UPDATE wanted SET wantedName='%1' WHERE wantedID='%2'",_name,_uid]; + [_query,2] call DB_fnc_asyncCall; +}; diff --git a/life_server/Functions/WantedSystem/fn_wantedPunish.sqf b/life_server/Functions/WantedSystem/fn_wantedPunish.sqf deleted file mode 100644 index 60f7a1a9..00000000 --- a/life_server/Functions/WantedSystem/fn_wantedPunish.sqf +++ /dev/null @@ -1,15 +0,0 @@ -#include "\life_server\script_macros.hpp" -/* - File: fn_wantedPunish.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Checks to see if the person is wanted, if they are it will punish them. -*/ -private["_uid","_index"]; -_uid = [_this,0,"",[""]] call BIS_fnc_param; -if(_uid == "") exitWith {}; - -_index = [_uid,life_wanted_list] call TON_fnc_index; -if(_index == -1) exitWith {}; -[0] remoteExecCall ["life_fnc_removeLicenses",_uid]; \ No newline at end of file diff --git a/life_server/Functions/WantedSystem/fn_wantedRemove.sqf b/life_server/Functions/WantedSystem/fn_wantedRemove.sqf index 6ca85122..6f6af174 100644 --- a/life_server/Functions/WantedSystem/fn_wantedRemove.sqf +++ b/life_server/Functions/WantedSystem/fn_wantedRemove.sqf @@ -1,15 +1,15 @@ /* - File: fn_wantedRemove.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Removes a person from the wanted list. + File: fn_wantedRemove.sqf + Author: Bryan "Tonic" Boardwine" + Database Persistence By: ColinM + Assistance by: Paronity + Stress Tests by: Midgetgrimm + + Description: + Removes a person from the wanted list. */ -private["_uid","_index"]; -_uid = [_this,0,"",[""]] call BIS_fnc_param; -if(_uid == "") exitWith {}; //Bad data +private _uid = param [0,"",[""]]; +if (_uid isEqualTo "") exitWith {}; //Bad data -_index = [_uid,life_wanted_list] call TON_fnc_index; -if(_index == -1) exitWith {}; -life_wanted_list set[_index,-1]; -life_wanted_list = life_wanted_list - [-1]; \ No newline at end of file +private _query = format["UPDATE wanted SET active = '0', wantedCrimes = '[]', wantedBounty = 0 WHERE wantedID='%1'",_uid]; +[_query,2] call DB_fnc_asyncCall; diff --git a/life_server/Functions/WantedSystem/fn_wantedTicket.sqf b/life_server/Functions/WantedSystem/fn_wantedTicket.sqf deleted file mode 100644 index 371119ab..00000000 --- a/life_server/Functions/WantedSystem/fn_wantedTicket.sqf +++ /dev/null @@ -1,16 +0,0 @@ -/* - File: fn_wantedTicket.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Checks the price of the ticket against the bounty, if => then bounty remove them from the wanted list. -*/ -private["_price","_uid","_ind","_entry"]; -_uid = [_this,0,"",[""]] call BIS_fnc_param; -_price = [_this,1,0,[0]] call BIS_fnc_param; -if(_uid == "" OR _price == 0) exitWith {}; - -_ind = [_uid,life_wanted_list] call TON_fnc_index; -if(_ind == -1) exitWith {}; -life_wanted_list set[_ind,-1]; -life_wanted_list = life_wanted_list - [-1]; \ No newline at end of file diff --git a/life_server/config.cpp b/life_server/config.cpp index b8020621..7e05e6d5 100644 --- a/life_server/config.cpp +++ b/life_server/config.cpp @@ -1,144 +1,129 @@ class DefaultEventhandlers; class CfgPatches { - class life_server { - units[] = {"C_man_1"}; - weapons[] = {}; - requiredAddons[] = {"A3_Data_F","A3_Soft_F","A3_Soft_F_Offroad_01","A3_Characters_F"}; - fileName = "life_server.pbo"; - author[]= {"Tonic"}; - }; -}; - -class Life_Server_Settings { - class EXTDB { - DatabaseName = "AltisLife"; - }; + class life_server { + units[] = {"C_man_1"}; + weapons[] = {}; + requiredAddons[] = {"A3_Data_F","A3_Soft_F","A3_Soft_F_Offroad_01","A3_Characters_F"}; + fileName = "life_server.pbo"; + author = "Tonic"; + }; }; class CfgFunctions { - class BIS_Overwrite { - tag = "BIS"; - class MP - { - file = "\life_server\Functions\MP"; - class initMultiplayer{}; - class call{}; - class spawn{}; - class execFSM{}; - class execVM{}; - class execRemote{}; - class addScore{}; - class setRespawnDelay{}; - class onPlayerConnected{}; - class initPlayable{}; - class missionTimeLeft{}; - }; - }; - - class MySQL_Database { - tag = "DB"; - class MySQL - { - file = "\life_server\Functions\MySQL"; - class numberSafe {}; - class mresArray {}; - class queryRequest{}; - class asyncCall{}; - class insertRequest{}; - class updateRequest{}; - class mresToArray {}; - class insertVehicle {}; - class bool{}; - class mresString {}; - class updatePartial {}; - }; - }; - - class Life_System { - tag = "life"; - class Wanted_Sys { - file = "\life_server\Functions\WantedSystem"; - class wantedFetch {}; - class wantedPerson {}; - class wantedBounty {}; - class wantedTicket {}; - class wantedPardon {}; - class wantedRemove {}; - class wantedAdd {}; - class wantedPunish {}; - }; - - class Jail_Sys { - file = "\life_server\Functions\Jail"; - class jailSys {}; - }; - - class Client_Code { - file = "\life_server\Functions\Client"; - }; - }; - - class TON_System { - tag = "TON"; - class Systems { - file = "\life_server\Functions\Systems"; - class managesc {}; - class cleanup {}; - class huntingZone {}; - class getID {}; - class vehicleCreate {}; - class vehicleDead {}; - class spawnVehicle {}; - class getVehicles {}; - class vehicleStore {}; - class vehicleDelete {}; - class spikeStrip {}; - class logIt {}; - class federalUpdate {}; - class chopShopSell {}; - class clientDisconnect {}; - class cleanupRequest {}; - class setObjVar {}; - class keyManagement {}; - }; - - class Housing { - file = "\life_server\Functions\Housing"; - class addHouse {}; - class fetchPlayerHouses {}; - class initHouses {}; - class sellHouse {}; - class updateHouseContainers {}; - class updateHouseTrunk {}; - class houseCleanup {}; - }; - - class Gangs { - file = "\life_server\Functions\Gangs"; - class insertGang {}; - class queryPlayerGang {}; - class removeGang {}; - class updateGang {}; - }; + class MySQL_Database { + tag = "DB"; + class MySQL + { + file = "\life_server\Functions\MySQL"; + class numberSafe {}; + class mresArray {}; + class queryRequest{}; + class asyncCall{}; + class insertRequest{}; + class updateRequest{}; + class mresToArray {}; + class insertVehicle {}; + class bool {}; + class mresString {}; + class updatePartial {}; + }; + }; + + class Life_System { + tag = "life"; + class Wanted_Sys { + file = "\life_server\Functions\WantedSystem"; + class wantedFetch {}; + class wantedPerson {}; + class wantedBounty {}; + class wantedRemove {}; + class wantedAdd {}; + class wantedCrimes {}; + class wantedProfUpdate {}; + }; + + class Jail_Sys { + file = "\life_server\Functions\Jail"; + class jailSys {}; + }; + + class Client_Code { + file = "\life_server\Functions\Client"; + }; + }; + + class TON_System { + tag = "TON"; + class Systems { + file = "\life_server\Functions\Systems"; + class managesc {}; + class cleanup {}; + class huntingZone {}; + class getID {}; + class vehicleCreate {}; + class spawnVehicle {}; + class getVehicles {}; + class vehicleStore {}; + class vehicleDelete {}; + class spikeStrip {}; + class transferOwnership {}; + class federalUpdate {}; + class chopShopSell {}; + class clientDisconnect {}; + class cleanupRequest {}; + class setObjVar {}; + class keyManagement {}; + class vehicleUpdate {}; + class recupkeyforHC {}; + class handleBlastingCharge {}; + }; - class Actions { - file = "\life_server\Functions\Actions"; - class pickupAction {}; - }; - }; + class Housing { + file = "\life_server\Functions\Housing"; + class addHouse {}; + class addContainer {}; + class fetchPlayerHouses {}; + class initHouses {}; + class sellHouse {}; + class sellHouseContainer {}; + class updateHouseContainers {}; + class updateHouseTrunk {}; + class houseCleanup {}; + class deleteDBContainer {}; + }; + + class Gangs { + file = "\life_server\Functions\Gangs"; + class insertGang {}; + class queryPlayerGang {}; + class removeGang {}; + class updateGang {}; + }; + + class Actions { + file = "\life_server\Functions\Actions"; + class pickupAction {}; + }; + + class PlayTime { + file = "\life_server\Functions\PlayTime"; + class setPlayTime {}; + class getPlayTime {}; + }; + }; }; class CfgVehicles { - class Car_F; - class CAManBase; - class Civilian; - class Civilian_F : Civilian { - class EventHandlers; - }; - - class C_man_1 : Civilian_F { - class EventHandlers: EventHandlers { - init = "(_this select 0) execVM ""\life_server\fix_headgear.sqf"""; - }; - }; -}; \ No newline at end of file + class Car_F; + class CAManBase; + class Civilian; + class Civilian_F : Civilian { + class EventHandlers; + }; + + class C_man_1 : Civilian_F { + class EventHandlers: EventHandlers { + init = "(_this select 0) execVM ""\life_server\fix_headgear.sqf"""; + }; + }; +}; diff --git a/life_server/eventhandlers.sqf b/life_server/eventhandlers.sqf deleted file mode 100644 index 92ce9dac..00000000 --- a/life_server/eventhandlers.sqf +++ /dev/null @@ -1,11 +0,0 @@ -/* - @file Version: 1a - @file name: eventhandlers.sqf - @file Author: TAW_Tonic - @file edit: 4/14/2013 - Copyright © 2013 Bryan Boardwine, All rights reserved - See http://armafiles.info/life/list.txt for servers that are permitted to use this code. -*/ - -if(!isServer) exitWith {}; -"life_fnc_MP_packet" addPublicVariableEventHandler {[_this select 0,_this select 1] call life_fnc_MPexec;}; \ No newline at end of file diff --git a/life_server/fix_headgear.sqf b/life_server/fix_headgear.sqf index 85e113c1..971b0bd5 100644 --- a/life_server/fix_headgear.sqf +++ b/life_server/fix_headgear.sqf @@ -1,47 +1,46 @@ /* - File: randomize_civ1.sqf - Author: pettka - Modified by Tonic for Altis Life. + File: fix_headgear.sqf + Author: pettka + Modified by Tonic for Altis Life. - Description: - Randomizes a headgear form _headgear array and puts it to civilian's headgear slot upon startup of mission. - _rnd1 is used to have some civilians without any headgear - _rnd2 is used to determine particular headgear from array - + Description: + Randomizes a headgear form _headgear array and puts it to civilian's headgear slot upon startup of mission. + _rnd1 is used to have some civilians without any headgear + _rnd2 is used to determine particular headgear from array - Parameter(s): - None - Returns: - Nothing + Parameter(s): + None + + Returns: + Nothing */ -private["_headgear","_headCount","_clothes","_uniform"]; -_headgear = ["H_Cap_tan", "H_Cap_blk", "H_Cap_blk_CMMG", "H_Cap_brn_SPECOPS", "H_Cap_tan_specops_US", "H_Cap_khaki_specops_UK", "H_Cap_red", "H_Cap_grn", - "H_Cap_blu", "H_Cap_grn_BI", "H_Cap_blk_Raven", "H_Cap_blk_ION", "H_Bandanna_khk", "H_Bandanna_sgg", "H_Bandanna_cbr", "H_Bandanna_gry", "H_Bandanna_camo", "H_Bandanna_mcamo", - "H_Bandanna_surfer", "H_Beret_blk", "H_Beret_red", "H_Beret_grn", "H_TurbanO_blk", "H_StrawHat", - "H_StrawHat_dark", "H_Hat_blue", "H_Hat_brown", "H_Hat_camo", "H_Hat_grey", "H_Hat_checker", "H_Hat_tan"]; +private["_headgear","_headCount","_clothes"]; +_headgear = ["H_Cap_tan", "H_Cap_blk", "H_Cap_blk_CMMG", "H_Cap_brn_SPECOPS", "H_Cap_tan_specops_US", "H_Cap_khaki_specops_UK", "H_Cap_red", "H_Cap_grn", + "H_Cap_blu", "H_Cap_grn_BI", "H_Cap_blk_Raven", "H_Cap_blk_ION", "H_Bandanna_khk", "H_Bandanna_sgg", "H_Bandanna_cbr", "H_Bandanna_gry", "H_Bandanna_camo", "H_Bandanna_mcamo", + "H_Bandanna_surfer", "H_Beret_blk", "H_Beret_red", "H_Beret_grn", "H_TurbanO_blk", "H_StrawHat", + "H_StrawHat_dark", "H_Hat_blue", "H_Hat_brown", "H_Hat_camo", "H_Hat_grey", "H_Hat_checker", "H_Hat_tan"]; _headCount = count _headgear; _clothes = ["U_C_Poloshirt_blue","U_C_Poloshirt_burgundy","U_C_Poloshirt_redwhite","U_C_Poloshirt_salmon","U_C_Poloshirt_stripped","U_C_Poloshirt_tricolour","U_C_HunterBody_grn"]; -if (isServer) then +if (isServer) then { - BIS_randomSeed1 = []; - BIS_randomSeed2 = []; - _rnd1 = floor random 3; - - //Hotfix patch, We don't want players getting a 'random' hat, just our NPC's - _this setVariable["BIS_randomSeed1",3,TRUE]; - _rnd2 = floor random _headCount; - _this setVariable ["BIS_randomSeed2", _rnd2, TRUE]; - - //Random clothing for our NPC's to add a bit of spice. - if(local _this && !isPlayer _this) then - { - _uniform = _clothes call BIS_fnc_selectRandom; - _this addUniform _uniform; - }; + BIS_randomSeed1 = []; + BIS_randomSeed2 = []; + _rnd1 = floor random 3; + + //Hotfix patch, We don't want players getting a 'random' hat, just our NPC's + _this setVariable ["BIS_randomSeed1",3,true]; + _rnd2 = floor random _headCount; + _this setVariable ["BIS_randomSeed2", _rnd2, true]; + + //Random clothing for our NPC's to add a bit of spice. + if (local _this && !isPlayer _this) then + { + _this addUniform (selectRandom _clothes); + }; }; waitUntil {!(isNil {_this getVariable "BIS_randomSeed1"})}; @@ -50,5 +49,5 @@ _randomSeed1 = _this getVariable "BIS_randomSeed1"; _randomSeed2 = _this getVariable "BIS_randomSeed2"; if (_randomSeed1 < 2) then { - _this addHeadgear (_headgear select _randomSeed2); //HEY BIS, THIS IS CARRYING A GLOBAL EFFECT, Y U DO THAT? + _this addHeadgear (_headgear select _randomSeed2); //HEY BIS, THIS IS CARRYING A GLOBAL EFFECT, Y U DO THAT? }; \ No newline at end of file diff --git a/life_server/functions.sqf b/life_server/functions.sqf index a918545c..d2922b00 100644 --- a/life_server/functions.sqf +++ b/life_server/functions.sqf @@ -1,215 +1,217 @@ #include "script_macros.hpp" +/* + File: functions.sqf + Author: Bryan "Tonic" Boardwine + + Description: They are functions. +*/ TON_fnc_index = compileFinal " - private[""_item"",""_stack""]; - _item = _this select 0; - _stack = _this select 1; - _return = -1; - - { - if(_item in _x) exitWith { - _return = _forEachIndex; - }; - } foreach _stack; - - _return; + private[""_item"",""_stack""]; + _item = _this select 0; + _stack = _this select 1; + _return = -1; + + { + if (_item in _x) exitWith { + _return = _forEachIndex; + }; + } forEach _stack; + + _return; "; TON_fnc_player_query = compileFinal " - private[""_ret""]; - _ret = _this select 0; - if(isNull _ret) exitWith {}; - if(isNil ""_ret"") exitWith {}; - - [life_atmbank,life_cash,owner player,player] remoteExecCall [""life_fnc_admininfo"",_ret]; + private[""_ret""]; + _ret = _this select 0; + if (isNull _ret) exitWith {}; + if (isNil ""_ret"") exitWith {}; + + [life_atmbank,life_cash,owner player,player,profileNameSteam,getPlayerUID player,playerSide] remoteExecCall [""life_fnc_adminInfo"",_ret]; "; publicVariable "TON_fnc_player_query"; publicVariable "TON_fnc_index"; TON_fnc_isnumber = compileFinal " - private[""_valid"",""_value"",""_compare""]; - _value = _this select 0; - _valid = [""0"",""1"",""2"",""3"",""4"",""5"",""6"",""7"",""8"",""9""]; - _array = [_value] call KRON_StrToArray; - _return = true; - - { - if(_x in _valid) then - {} - else - { - _return = false; - }; - } foreach _array; - _return; + private[""_valid"",""_array""]; + _valid = [""0"",""1"",""2"",""3"",""4"",""5"",""6"",""7"",""8"",""9""]; + _array = [_this select 0] call KRON_StrToArray; + _return = true; + + { + if (!(_x in _valid)) exitWith { + _return = false; + }; + } forEach _array; + _return; "; publicVariable "TON_fnc_isnumber"; TON_fnc_clientGangKick = compileFinal " - private[""_unit"",""_group""]; - _unit = _this select 0; - _group = _this select 1; - if(isNil ""_unit"" OR isNil ""_group"") exitWith {}; - if(player == _unit && (group player) == _group) then - { - life_my_gang = ObjNull; - [player] joinSilent (createGroup civilian); - hint ""You have been kicked out of the gang.""; - - }; + private[""_unit"",""_group""]; + _unit = _this select 0; + _group = _this select 1; + if (isNil ""_unit"" || isNil ""_group"") exitWith {}; + if (player isEqualTo _unit && (group player) == _group) then { + life_my_gang = objNull; + [player] joinSilent (createGroup civilian); + hint ""You have been kicked out of the gang.""; + }; "; publicVariable "TON_fnc_clientGangKick"; TON_fnc_clientGetKey = compileFinal " - private[""_vehicle"",""_unit"",""_giver""]; - _vehicle = _this select 0; - _unit = _this select 1; - _giver = _this select 2; - if(isNil ""_unit"" OR isNil ""_giver"") exitWith {}; - if(player == _unit && !(_vehicle in life_vehicles)) then - { - _name = getText(configFile >> ""CfgVehicles"" >> (typeOf _vehicle) >> ""displayName""); - hint format[""%1 has gave you keys for a %2"",_giver,_name]; - life_vehicles pushBack _vehicle; - [getPlayerUID player,playerSide,_vehicle,1] remoteExecCall [""TON_fnc_keyManagement"",2]; - }; + private[""_vehicle"",""_unit"",""_giver""]; + _vehicle = _this select 0; + _unit = _this select 1; + _giver = _this select 2; + if (isNil ""_unit"" || isNil ""_giver"") exitWith {}; + if (player isEqualTo _unit && !(_vehicle in life_vehicles)) then { + _name = getText(configFile >> ""CfgVehicles"" >> (typeOf _vehicle) >> ""displayName""); + hint format[""%1 has gave you keys for a %2"",_giver,_name]; + life_vehicles pushBack _vehicle; + [getPlayerUID player,playerSide,_vehicle,1] remoteExecCall [""TON_fnc_keyManagement"",2]; + }; "; publicVariable "TON_fnc_clientGetKey"; TON_fnc_clientGangLeader = compileFinal " - private[""_unit"",""_group""]; - _unit = _this select 0; - _group = _this select 1; - if(isNil ""_unit"" OR isNil ""_group"") exitWith {}; - if(player == _unit && (group player) == _group) then - { - player setRank ""COLONEL""; - _group selectLeader _unit; - hint ""You have been made the new leader.""; - }; + private[""_unit"",""_group""]; + _unit = _this select 0; + _group = _this select 1; + if (isNil ""_unit"" || isNil ""_group"") exitWith {}; + if (player isEqualTo _unit && (group player) == _group) then { + player setRank ""COLONEL""; + _group selectLeader _unit; + hint ""You have been made the new leader.""; + }; "; publicVariable "TON_fnc_clientGangLeader"; TON_fnc_clientGangLeft = compileFinal " - private[""_unit"",""_group""]; - _unit = _this select 0; - _group = _this select 1; - if(isNil ""_unit"" OR isNil ""_group"") exitWith {}; - if(player == _unit && (group player) == _group) then - { - life_my_gang = ObjNull; - [player] joinSilent (createGroup civilian); - hint ""You have quit the gang.""; - }; + private[""_unit"",""_group""]; + _unit = _this select 0; + _group = _this select 1; + if (isNil ""_unit"" || isNil ""_group"") exitWith {}; + if (player isEqualTo _unit && (group player) == _group) then { + life_my_gang = objNull; + [player] joinSilent (createGroup civilian); + hint ""You have quit the gang.""; + }; "; publicVariable "TON_fnc_clientGangLeft"; //Cell Phone Messaging /* - -fnc_cell_textmsg - -fnc_cell_textcop - -fnc_cell_textadmin - -fnc_cell_adminmsg - -fnc_cell_adminmsgall + -fnc_cell_textmsg + -fnc_cell_textcop + -fnc_cell_textadmin + -fnc_cell_adminmsg + -fnc_cell_adminmsgall */ //To EMS -TON_fnc_cell_emsrequest = +TON_fnc_cell_emsrequest = compileFinal " private[""_msg"",""_to""]; - ctrlShow[3022,false]; - _msg = ctrlText 3003; - _to = ""EMS Units""; - if(_msg == """") exitWith {hint ""You must enter a message to send!"";ctrlShow[3022,true];}; - - [_msg,name player,5] remoteExecCall [""TON_fnc_clientMessage"",independent]; - [] call life_fnc_cellphone; - hint format[""You have sent a message to all EMS Units."",_to,_msg]; - ctrlShow[3022,true]; + ctrlShow[3022,false]; + _msg = ctrlText 3003; + _to = ""EMS Units""; + if (_msg isEqualTo """") exitWith {hint ""You must enter a message to send!"";ctrlShow[3022,true];}; + + [_msg,name player,5,mapGridPosition player,player] remoteExecCall [""TON_fnc_clientMessage"",independent]; + [] call life_fnc_cellphone; + hint format[""You have sent a message to all EMS Units."",_to,_msg]; + ctrlShow[3022,true]; "; //To One Person TON_fnc_cell_textmsg = compileFinal " - private[""_msg"",""_to""]; - ctrlShow[3015,false]; - _msg = ctrlText 3003; - if(lbCurSel 3004 == -1) exitWith {hint ""You must select a player you are sending the text to!""; ctrlShow[3015,true];}; - _to = call compile format[""%1"",(lbData[3004,(lbCurSel 3004)])]; - if(isNull _to) exitWith {ctrlShow[3015,true];}; - if(isNil ""_to"") exitWith {ctrlShow[3015,true];}; - if(_msg == """") exitWith {hint ""You must enter a message to send!"";ctrlShow[3015,true];}; - - [_msg,name player,0] remoteExecCall [""TON_fnc_clientMessage"",_to]; - [] call life_fnc_cellphone; - hint format[""You sent %1 a message: %2"",name _to,_msg]; - ctrlShow[3015,true]; + private[""_msg"",""_to""]; + ctrlShow[3015,false]; + _msg = ctrlText 3003; + if (lbCurSel 3004 isEqualTo -1) exitWith {hint ""You must select a player you are sending the text to!""; ctrlShow[3015,true];}; + _to = call compile format[""%1"",(lbData[3004,(lbCurSel 3004)])]; + if (isNull _to) exitWith {ctrlShow[3015,true];}; + if (isNil ""_to"") exitWith {ctrlShow[3015,true];}; + if (_msg isEqualTo """") exitWith {hint ""You must enter a message to send!"";ctrlShow[3015,true];}; + + [_msg,name player,0] remoteExecCall [""TON_fnc_clientMessage"",_to]; + [] call life_fnc_cellphone; + hint format[""You sent %1 a message: %2"",name _to,_msg]; + ctrlShow[3015,true]; "; //To All Cops TON_fnc_cell_textcop = compileFinal " - private[""_msg"",""_to""]; - ctrlShow[3016,false]; - _msg = ctrlText 3003; - _to = ""The Police""; - if(_msg == """") exitWith {hint ""You must enter a message to send!"";ctrlShow[3016,true];}; - - [_msg,name player,1] remoteExecCall [""TON_fnc_clientMessage"",-2]; - [] call life_fnc_cellphone; - hint format[""You sent %1 a message: %2"",_to,_msg]; - ctrlShow[3016,true]; + private[""_msg"",""_to""]; + ctrlShow[3016,false]; + _msg = ctrlText 3003; + _to = ""The Police""; + if (_msg isEqualTo """") exitWith {hint ""You must enter a message to send!"";ctrlShow[3016,true];}; + + [_msg,name player,1,mapGridPosition player,player] remoteExecCall [""TON_fnc_clientMessage"",-2]; + [] call life_fnc_cellphone; + hint format[""You sent %1 a message: %2"",_to,_msg]; + ctrlShow[3016,true]; "; //To All Admins TON_fnc_cell_textadmin = compileFinal " - private[""_msg"",""_to"",""_from""]; - ctrlShow[3017,false]; - _msg = ctrlText 3003; - _to = ""The Admins""; - if(_msg == """") exitWith {hint ""You must enter a message to send!"";ctrlShow[3017,true];}; - - [_msg,name player,2] remoteExecCall [""TON_fnc_clientMessage"",-2]; - [] call life_fnc_cellphone; - hint format[""You sent %1 a message: %2"",_to,_msg]; - ctrlShow[3017,true]; + private[""_msg"",""_to"",""_from""]; + ctrlShow[3017,false]; + _msg = ctrlText 3003; + _to = ""The Admins""; + if (_msg isEqualTo """") exitWith {hint ""You must enter a message to send!"";ctrlShow[3017,true];}; + + [_msg,name player,2,mapGridPosition player,player] remoteExecCall [""TON_fnc_clientMessage"",-2]; + [] call life_fnc_cellphone; + hint format[""You sent %1 a message: %2"",_to,_msg]; + ctrlShow[3017,true]; "; //Admin To One Person TON_fnc_cell_adminmsg = compileFinal " - if(isServer) exitWith {}; - if((call life_adminlevel) < 1) exitWith {hint ""You are not an admin!"";}; - private[""_msg"",""_to""]; - _msg = ctrlText 3003; - _to = call compile format[""%1"",(lbData[3004,(lbCurSel 3004)])]; - if(isNull _to) exitWith {}; - if(_msg == """") exitWith {hint ""You must enter a message to send!"";}; - - [_msg,name player,3] remoteExecCall [""TON_fnc_clientMessage"",_to]; - [] call life_fnc_cellphone; - hint format[""Admin Message Sent To: %1 - Message: %2"",name _to,_msg]; + if (isServer) exitWith {}; + if ((call life_adminlevel) < 1) exitWith {hint ""You are not an admin!"";}; + private[""_msg"",""_to""]; + ctrlShow[3020,false]; + _msg = ctrlText 3003; + _to = call compile format[""%1"",(lbData[3004,(lbCurSel 3004)])]; + if (isNull _to) exitWith {ctrlShow[3020,true];}; + if (isNil ""_to"") exitWith {ctrlShow[3020,true];}; + if (_msg isEqualTo """") exitWith {hint ""You must enter a message to send!"";ctrlShow[3020,true];}; + + [_msg,name player,3] remoteExecCall [""TON_fnc_clientMessage"",_to]; + [] call life_fnc_cellphone; + hint format[""Admin Message Sent To: %1 - Message: %2"",name _to,_msg]; + ctrlShow[3020,true]; "; TON_fnc_cell_adminmsgall = compileFinal " - if(isServer) exitWith {}; - if((call life_adminlevel) < 1) exitWith {hint ""You are not an admin!"";}; - private[""_msg"",""_from""]; - _msg = ctrlText 3003; - if(_msg == """") exitWith {hint ""You must enter a message to send!"";}; - - [_msg,name player,4] remoteExecCall [""TON_fnc_clientMessage"",-2]; - [] call life_fnc_cellphone; - hint format[""Admin Message Sent To All: %1"",_msg]; + if (isServer) exitWith {}; + if ((call life_adminlevel) < 1) exitWith {hint ""You are not an admin!"";}; + private[""_msg"",""_from""]; + ctrlShow[3021,false]; + _msg = ctrlText 3003; + if (_msg isEqualTo """") exitWith {hint ""You must enter a message to send!"";ctrlShow[3021,true];}; + + [_msg,name player,4] remoteExecCall [""TON_fnc_clientMessage"",-2]; + [] call life_fnc_cellphone; + hint format[""Admin Message Sent To All: %1"",_msg]; + ctrlShow[3021,true]; "; publicVariable "TON_fnc_cell_textmsg"; @@ -220,85 +222,194 @@ publicVariable "TON_fnc_cell_adminmsgall"; publicVariable "TON_fnc_cell_emsrequest"; //Client Message /* - 0 = private message - 1 = police message - 2 = message to admin - 3 = message from admin - 4 = admin message to all + 0 = private message + 1 = police message + 2 = message to admin + 3 = message from admin + 4 = admin message to all */ TON_fnc_clientMessage = compileFinal " - if(isServer) exitWith {}; - private[""_msg"",""_from"", ""_type""]; - _msg = _this select 0; - _from = _this select 1; - _type = _this select 2; - if(_from == """") exitWith {}; - switch (_type) do - { - case 0 : - { - private[""_message""]; - _message = format["">>>MESSAGE FROM %1: %2"",_from,_msg]; - hint parseText format [""New Message

To: You
From: %1

Message:
%2"",_from,_msg]; - - [""TextMessage"",[format[""You Received A New Private Message From %1"",_from]]] call bis_fnc_showNotification; - systemChat _message; - }; - - case 1 : - { - if(side player != west) exitWith {}; - private[""_message""]; - _message = format[""---911 DISPATCH FROM %1: %2"",_from,_msg]; - hint parseText format [""New Dispatch

To: All Officers
From: %1

Message:
%2"",_from,_msg]; - - [""PoliceDispatch"",[format[""A New Police Report From: %1"",_from]]] call bis_fnc_showNotification; - systemChat _message; - }; - - case 2 : - { - if((call life_adminlevel) < 1) exitWith {}; - private[""_message""]; - _message = format[""???ADMIN REQUEST FROM %1: %2"",_from,_msg]; - hint parseText format [""Admin Request

To: Admins
From: %1

Message:
%2"",_from,_msg]; - - [""AdminDispatch"",[format[""%1 Has Requested An Admin!"",_from]]] call bis_fnc_showNotification; - systemChat _message; - }; - - case 3 : - { - private[""_message""]; - _message = format[""!!!ADMIN MESSAGE: %1"",_msg]; - _admin = format[""Sent by admin: %1"", _from]; - hint parseText format [""Admin Message

To: You
From: An Admin

Message:
%1"",_msg]; - - [""AdminMessage"",[""You Have Received A Message From An Admin!""]] call bis_fnc_showNotification; - systemChat _message; - if((call life_adminlevel) > 0) then {systemChat _admin;}; - }; - - case 4 : - { - private[""_message"",""_admin""]; - _message = format[""!!!ADMIN MESSAGE: %1"",_msg]; - _admin = format[""Sent by admin: %1"", _from]; - hint parseText format [""Admin Message

To: All Players
From: The Admins

Message:
%1"",_msg]; - - [""AdminMessage"",[""You Have Received A Message From An Admin!""]] call bis_fnc_showNotification; - systemChat _message; - if((call life_adminlevel) > 0) then {systemChat _admin;}; - }; - - case 5: { - private[""_message""]; - _message = format[""!!!EMS REQUEST: %1"",_msg]; - hint parseText format [""EMS Request

To: You
From: %1

Message:
%2"",_from,_msg]; - - [""TextMessage"",[format[""EMS Request from %1"",_from]]] call bis_fnc_showNotification; - }; - }; + if (isServer) exitWith {}; + private[""_msg"",""_from"", ""_type""]; + _msg = _this select 0; + _from = _this select 1; + _type = _this select 2; + if (_from isEqualTo """") exitWith {}; + switch (_type) do { + case 0 : { + private[""_message""]; + _message = format["">>>MESSAGE FROM %1: %2"",_from,_msg]; + hint parseText format [""New Message

To: You
From: %1

Message:
%2"",_from,_msg]; + + [""TextMessage"",[format[""You Received A New Private Message From %1"",_from]]] call bis_fnc_showNotification; + systemChat _message; + }; + + case 1 : { + if (side player != west) exitWith {}; + private[""_message"",""_loc"",""_unit""]; + _loc = _this select 3; + _unit = _this select 4; + _message = format[""--- 911 DISPATCH FROM %1: %2"",_from,_msg]; + if (isNil ""_loc"") then {_loc = ""Unknown"";}; + hint parseText format [""New Dispatch

To: All Officers
From: %1
Coords: %2

Message:
%3"",_from,_loc,_msg]; + + [""PoliceDispatch"",[format[""A New Police Report From: %1"",_from]]] call bis_fnc_showNotification; + systemChat _message; + }; + + case 2 : { + if ((call life_adminlevel) < 1) exitWith {}; + private[""_message"",""_loc"",""_unit""]; + _loc = _this select 3; + _unit = _this select 4; + _message = format[""!!! ADMIN REQUEST FROM %1: %2"",_from,_msg]; + if (isNil ""_loc"") then {_loc = ""Unknown"";}; + hint parseText format [""Admin Request

To: Admins
From: %1
Coords: %2

Message:
%3"",_from,_loc,_msg]; + + [""AdminDispatch"",[format[""%1 Has Requested An Admin!"",_from]]] call bis_fnc_showNotification; + systemChat _message; + }; + + case 3 : { + private[""_message""]; + _message = format[""!!! ADMIN MESSAGE: %1"",_msg]; + _admin = format[""Sent by admin: %1"", _from]; + hint parseText format [""Admin Message

To: You
From: An Admin

Message:
%1"",_msg]; + + [""AdminMessage"",[""You Have Received A Message From An Admin!""]] call bis_fnc_showNotification; + systemChat _message; + if ((call life_adminlevel) > 0) then {systemChat _admin;}; + }; + + case 4 : { + private[""_message"",""_admin""]; + _message = format[""!!!ADMIN MESSAGE: %1"",_msg]; + _admin = format[""Sent by admin: %1"", _from]; + hint parseText format [""Admin Message

To: All Players
From: The Admins

Message:
%1"",_msg]; + + [""AdminMessage"",[""You Have Received A Message From An Admin!""]] call bis_fnc_showNotification; + systemChat _message; + if ((call life_adminlevel) > 0) then {systemChat _admin;}; + }; + + case 5: { + if (side player != independent) exitWith {}; + private[""_message"",""_loc"",""_unit""]; + _loc = _this select 3; + _unit = _this select 4; + _message = format[""!!! EMS REQUEST: %1"",_msg]; + hint parseText format [""EMS Request

To: You
From: %1
Coords: %2

Message:
%3"",_from,_loc,_msg]; + + [""TextMessage"",[format[""EMS Request from %1"",_from]]] call bis_fnc_showNotification; + }; + }; "; publicVariable "TON_fnc_clientMessage"; + +TON_fnc_MapMarkersAdmin = compileFinal " + life_markers_Vehicles = []; + life_markers_Players = []; + if (!life_markers) then { + life_markers = true; + hint localize ""STR_ANOTF_MEnabled""; + } else { + life_markers = false; + hint localize ""STR_ANOTF_MDisabled""; + }; + for ""_i"" from 0 to 1 step 0 do { + if (!life_markers) exitWith {}; + { + if ((vehicle _x isKindOf ""LandVehicle"") || (vehicle _x isKindOf ""Air"") || (vehicle _x isKindOf ""Ship"")) then { + if (count(crew vehicle _x) > 0) then { + { + if (!(_x in life_markers_Vehicles) && (alive _x) && (getPlayerUID _x != """")) then { + private[""_pos"", ""_Markers"", ""_Vehicle""]; + _Vehicle = vehicle _x; + _pos = visiblePosition _x; + _Markers = createMarkerLocal[format[""CRW%1%2"", _pos select 0, _pos select 1], [(_pos select 0) + 20, _pos select 1, 0]]; + _TypeVehicle = (getText(configFile >> 'CfgVehicles' >> (typeOf vehicle _x) >> 'displayName')); + _Markers setMarkerTextLocal format['%1---%2---%3m', name _x, _TypeVehicle, round(_x distance player)]; + _Markers setMarkerTypeLocal ""mil_dot""; + if (side _x isEqualTo independent) then { + _Markers setMarkerColorLocal (""ColorIndependent""); + }; + if (side _x isEqualTo civilian) then { + _Markers setMarkerColorLocal (""ColorCivilian""); + }; + if (side _x isEqualTo west) then { + _Markers setMarkerColorLocal (""ColorBLUFOR""); + }; + _Markers setMarkerSizeLocal[1, 1]; + life_markers_Vehicles pushBack _x; + [_x, _Markers, _Vehicle, _TypeVehicle] spawn { + private[""_PlayersOrVehicles"", ""_Marker"", ""_CrewVehicle""]; + _PlayersOrVehicles = _this select 0; + _Marker = _this select 1; + _TypeVehicle = _this select 3; + for ""_i"" from 0 to 1 step 0 do { + if (!life_markers && !(alive _PlayersOrVehicles) && (vehicle _PlayersOrVehicles == _PlayersOrVehicles) && (getPlayerUID _PlayersOrVehicles != """")) exitWith {}; + _CrewVehicle = ((crew vehicle _PlayersOrVehicles) find _PlayersOrVehicles); + _Marker setMarkerPosLocal([(visiblePosition _PlayersOrVehicles select 0) + 20, (visiblePosition _PlayersOrVehicles select 1) - (25 + _CrewVehicle * 20), 0]); + _Marker setMarkerTextLocal format['%1---%2---%3m', name _PlayersOrVehicles, _TypeVehicle, round(_PlayersOrVehicles distance player)]; + sleep 0.01; + }; + deleteMarkerLocal _Marker; + if (_PlayersOrVehicles in life_markers_Vehicles) then { + life_markers_Vehicles deleteAt (life_markers_Vehicles find _PlayersOrVehicles); + }; + true; + }; + }; + } forEach crew vehicle _x; + }; + } else { + if (!(_x in life_markers_Players) && (vehicle _x == _x) && (getPlayerUID _x != """")) then { + private[""_pos"", ""_Markers""]; + _pos = visiblePosition _x; + _Markers = createMarkerLocal[format[""PLR%1%2"", _pos select 0, _pos select 1], [(_pos select 0) + 20, _pos select 1, 0]]; + _Markers setMarkerTypeLocal ""mil_dot""; + _Markers setMarkerSizeLocal[1, 1]; + if (side _x isEqualTo independent) then { + _Markers setMarkerColorLocal (""ColorIndependent""); + }; + if (side _x isEqualTo civilian) then { + _Markers setMarkerColorLocal (""ColorCivilian""); + }; + if (side _x isEqualTo west) then { + _Markers setMarkerColorLocal (""ColorBLUFOR""); + }; + _Markers setMarkerTextLocal format[""%1---%2"", name _x, round(_x distance player)]; + if (_x == player) then { + _Markers setMarkerColorLocal ""ColorGreen""; + }; + life_markers_Players pushBack _x; + [_x, _Markers] spawn { + private[""_PlayersOrVehicles"", ""_Marker""]; + _PlayersOrVehicles = _this select 0; + _Marker = _this select 1; + for ""_i"" from 0 to 1 step 0 do { + if (!life_markers && !(alive _PlayersOrVehicles) && (vehicle _PlayersOrVehicles != _PlayersOrVehicles) && (getPlayerUID _PlayersOrVehicles != """")) exitWith {}; + _Marker setMarkerPosLocal([visiblePosition _PlayersOrVehicles select 0, visiblePosition _PlayersOrVehicles select 1, 0]); + _Marker setMarkerTextLocal format[""%1---%2"", name _PlayersOrVehicles, round(_PlayersOrVehicles distance player)]; + sleep 0.01; + }; + deleteMarkerLocal _Marker; + if (_PlayersOrVehicles in life_markers_Players) then { + life_markers_Players deleteAt (life_markers_Players find _PlayersOrVehicles); + }; + true; + }; + }; + }; + } forEach playableUnits; + sleep 0.3; + }; + { + _Markers = str _x; + deleteMarkerLocal _Markers; + } forEach playableUnits; +"; + +publicVariable "TON_fnc_MapMarkersAdmin"; \ No newline at end of file diff --git a/life_server/init.sqf b/life_server/init.sqf index 75f7e4a4..f562402a 100644 --- a/life_server/init.sqf +++ b/life_server/init.sqf @@ -1,49 +1,65 @@ #include "script_macros.hpp" -#define __EXIT(condition) if(condition) exitWith {} /* - Author: Bryan "Tonic" Boardwine + File: init.sqf + Author: Bryan "Tonic" Boardwine - Description: - Initialize the server and required systems. + Edit: Nanou for HeadlessClient optimization. + Please read support for more informations. + + Description: + Initialize the server and required systems. */ -"BIS_fnc_MP_packet" addPublicVariableEventHandler {_this call life_fnc_MPexec}; +private["_dome","_rsb","_timeStamp"]; DB_Async_Active = false; DB_Async_ExtraLock = false; life_server_isReady = false; life_server_extDB_notLoaded = ""; serv_sv_use = []; -PVAR_ALL("life_server_isReady"); +publicVariable "life_server_isReady"; +life_save_civilian_position = if (LIFE_SETTINGS(getNumber,"save_civilian_position") isEqualTo 0) then {false} else {true}; +fn_whoDoneIt = compile preprocessFileLineNumbers "\life_server\Functions\Systems\fn_whoDoneIt.sqf"; + +/* + Prepare the headless client. +*/ +life_HC_isActive = false; +publicVariable "life_HC_isActive"; +HC_Life = false; +publicVariable "HC_Life"; + +if (EXTDB_SETTING(getNumber,"HeadlessSupport") isEqualTo 1) then { + [] execVM "\life_server\initHC.sqf"; +}; /* - Prepare extDB before starting the initialization process - for the server. + Prepare extDB before starting the initialization process + for the server. */ -if(isNil {GVAR_UINS "life_sql_id"}) then { - life_sql_id = round(random(9999)); - CONSTVAR(life_sql_id); - SVAR_UINS ["life_sql_id",life_sql_id]; - - try { - _result = EXTDB format["9:ADD_DATABASE:%1",EXTDB_SETTING(getText,"DatabaseName")]; - if(!(EQUAL(_result,"[1]"))) then {throw "extDB2: Error with Database Connection"}; - _result = EXTDB format["9:ADD_DATABASE_PROTOCOL:%2:SQL_RAW_V2:%1:ADD_QUOTES",FETCH_CONST(life_sql_id),EXTDB_SETTING(getText,"DatabaseName")]; - if(!(EQUAL(_result,"[1]"))) then {throw "extDB2: Error with Database Connection"}; - } catch { - diag_log _exception; - life_server_extDB_notLoaded = [true, _exception]; - PVAR_ALL("life_server_extDB_notLoaded"); - }; - - __EXIT(!(EQUAL(life_server_extDB_notLoaded,""))); - EXTDB "9:LOCK"; - diag_log "extDB2: Connected to Database"; + +if (isNil {uiNamespace getVariable "life_sql_id"}) then { + life_sql_id = round(random(9999)); + CONSTVAR(life_sql_id); + uiNamespace setVariable ["life_sql_id",life_sql_id]; + try { + _result = EXTDB format["9:ADD_DATABASE:%1",EXTDB_SETTING(getText,"DatabaseName")]; + if (!(_result isEqualTo "[1]")) then {throw "extDB2: Error with Database Connection"}; + _result = EXTDB format["9:ADD_DATABASE_PROTOCOL:%2:SQL_RAW_V2:%1:ADD_QUOTES",FETCH_CONST(life_sql_id),EXTDB_SETTING(getText,"DatabaseName")]; + if (!(_result isEqualTo "[1]")) then {throw "extDB2: Error with Database Connection"}; + } catch { + diag_log _exception; + life_server_extDB_notLoaded = [true, _exception]; + }; + publicVariable "life_server_extDB_notLoaded"; + if (life_server_extDB_notLoaded isEqualType []) exitWith {}; + EXTDB "9:LOCK"; + diag_log "extDB2: Connected to Database"; } else { - life_sql_id = GVAR_UINS "life_sql_id"; - CONSTVAR(life_sql_id); - diag_log "extDB2: Still Connected to Database"; + life_sql_id = uiNamespace getVariable "life_sql_id"; + CONSTVAR(life_sql_id); + diag_log "extDB2: Still Connected to Database"; }; -if(!(EQUAL(life_server_extDB_notLoaded,""))) exitWith {}; //extDB did not fully initialize so terminate the rest of the initialization process. +if (life_server_extDB_notLoaded isEqualType []) exitWith {}; /* Run stored procedures for SQL side cleanup */ ["CALL resetLifeVehicles",1] call DB_fnc_asyncCall; @@ -51,32 +67,44 @@ if(!(EQUAL(life_server_extDB_notLoaded,""))) exitWith {}; //extDB did not fully ["CALL deleteOldHouses",1] call DB_fnc_asyncCall; ["CALL deleteOldGangs",1] call DB_fnc_asyncCall; +_timeStamp = diag_tickTime; +diag_log "----------------------------------------------------------------------------------------------------"; +diag_log "---------------------------------- Starting Altis Life Server Init ---------------------------------"; +diag_log "------------------------------------------ Version 4.4R3 -------------------------------------------"; +diag_log "----------------------------------------------------------------------------------------------------"; + +if (LIFE_SETTINGS(getNumber,"save_civilian_position_restart") isEqualTo 1) then { + [] spawn { + _query = "UPDATE players SET civ_alive = '0' WHERE civ_alive = '1'"; + [_query,1] call DB_fnc_asyncCall; + }; +}; + /* Map-based server side initialization. */ master_group attachTo[bank_obj,[0,0,0]]; -onMapSingleClick "if(_alt) then {vehicle player setPos _pos};"; //Local debug for myself { - _hs = createVehicle ["Land_Hospital_main_F", [0,0,0], [], 0, "NONE"]; - _hs setDir (markerDir _x); - _hs setPosATL (getMarkerPos _x); - _var = createVehicle ["Land_Hospital_side1_F", [0,0,0], [], 0, "NONE"]; - _var attachTo [_hs, [4.69775,32.6045,-0.1125]]; - detach _var; - _var = createVehicle ["Land_Hospital_side2_F", [0,0,0], [], 0, "NONE"]; - _var attachTo [_hs, [-28.0336,-10.0317,0.0889387]]; - detach _var; -} foreach ["hospital_2","hospital_3"]; + _hs = createVehicle ["Land_Hospital_main_F", [0,0,0], [], 0, "NONE"]; + _hs setDir (markerDir _x); + _hs setPosATL (getMarkerPos _x); + _var = createVehicle ["Land_Hospital_side1_F", [0,0,0], [], 0, "NONE"]; + _var attachTo [_hs, [4.69775,32.6045,-0.1125]]; + detach _var; + _var = createVehicle ["Land_Hospital_side2_F", [0,0,0], [], 0, "NONE"]; + _var attachTo [_hs, [-28.0336,-10.0317,0.0889387]]; + detach _var; +} forEach ["hospital_2","hospital_3"]; { - if(!isPlayer _x) then { - _npc = _x; - { - if(_x != "") then { - _npc removeWeapon _x; - }; - } foreach [primaryWeapon _npc,secondaryWeapon _npc,handgunWeapon _npc]; - }; -} foreach allUnits; + if (!isPlayer _x) then { + _npc = _x; + { + if (_x != "") then { + _npc removeWeapon _x; + }; + } forEach [primaryWeapon _npc,secondaryWeapon _npc,handgunWeapon _npc]; + }; +} forEach allUnits; [8,true,12] execFSM "\life_server\FSM\timeModule.fsm"; @@ -97,42 +125,69 @@ fed_bank setVariable ["safe",count playableUnits,true]; /* Event handler for disconnecting players */ addMissionEventHandler ["HandleDisconnect",{_this call TON_fnc_clientDisconnect; false;}]; [] call compile PreProcessFileLineNumbers "\life_server\functions.sqf"; -[] call compile PreProcessFileLineNumbers "\life_server\eventhandlers.sqf"; + +/* Set OwnerID players for Headless Client */ +TON_fnc_requestClientID = +{ + (_this select 1) setVariable ["life_clientID", owner (_this select 1), true]; +}; +"life_fnc_RequestClientId" addPublicVariableEventHandler TON_fnc_requestClientID; + +/* Event handler for logs */ +"money_log" addPublicVariableEventHandler {diag_log (_this select 1)}; +"advanced_log" addPublicVariableEventHandler {diag_log (_this select 1)}; /* Miscellaneous mission-required stuff */ -[] spawn TON_fnc_cleanup; life_wanted_list = []; -[] execFSM "\life_server\FSM\cleanup.fsm"; + +cleanupFSM = [] execFSM "\life_server\FSM\cleanup.fsm"; [] spawn { - private["_logic","_queue"]; - while {true} do { - sleep (30 * 60); - _logic = missionnamespace getvariable ["bis_functions_mainscope",objnull]; - _queue = _logic getvariable "BIS_fnc_MP_queue"; - _logic setVariable["BIS_fnc_MP_queue",[],TRUE]; - - { - _x setVariable["sellers",[],true]; - } foreach [Dealer_1,Dealer_2,Dealer_3]; - }; + for "_i" from 0 to 1 step 0 do { + uiSleep (30 * 60); + { + _x setVariable ["sellers",[],true]; + } forEach [Dealer_1,Dealer_2,Dealer_3]; + }; }; [] spawn TON_fnc_initHouses; +cleanup = [] spawn TON_fnc_cleanup; + +TON_fnc_playtime_values = []; +TON_fnc_playtime_values_request = []; + +//Just incase the Headless Client connects before anyone else +publicVariable "TON_fnc_playtime_values"; +publicVariable "TON_fnc_playtime_values_request"; + /* Setup the federal reserve building(s) */ -private["_dome","_rsb"]; _dome = nearestObject [[16019.5,16952.9,0],"Land_Dome_Big_F"]; _rsb = nearestObject [[16019.5,16952.9,0],"Land_Research_house_V1_F"]; -for "_i" from 1 to 3 do {_dome setVariable[format["bis_disabled_Door_%1",_i],1,true]; _dome animate [format["Door_%1_rot",_i],0];}; -_rsb setVariable["bis_disabled_Door_1",1,true]; -_rsb allowDamage false; +for "_i" from 1 to 3 do {_dome setVariable [format["bis_disabled_Door_%1",_i],1,true]; _dome animate [format["Door_%1_rot",_i],0];}; +_dome setVariable ["locked",true,true]; +_rsb setVariable ["locked",true,true]; +_rsb setVariable ["bis_disabled_Door_1",1,true]; _dome allowDamage false; +_rsb allowDamage false; /* Tell clients that the server is ready and is accepting queries */ life_server_isReady = true; -PVAR_ALL("life_server_isReady"); +publicVariable "life_server_isReady"; /* Initialize hunting zone(s) */ -["hunting_zone",30] spawn TON_fnc_huntingZone; \ No newline at end of file +aiSpawn = ["hunting_zone",30] spawn TON_fnc_huntingZone; + +// We create the attachment point to be used for objects to attachTo load virtually in vehicles. +life_attachment_point = "Land_HelipadEmpty_F" createVehicle [0,0,0]; +life_attachment_point setPosASL [0,0,0]; +life_attachment_point setVectorDirAndUp [[0,1,0], [0,0,1]]; + +// Sharing the point of attachment with all players. +publicVariable "life_attachment_point"; + +diag_log "----------------------------------------------------------------------------------------------------"; +diag_log format[" End of Altis Life Server Init :: Total Execution Time %1 seconds ",(diag_tickTime) - _timeStamp]; +diag_log "----------------------------------------------------------------------------------------------------"; diff --git a/life_server/initHC.sqf b/life_server/initHC.sqf new file mode 100644 index 00000000..a2b61b00 --- /dev/null +++ b/life_server/initHC.sqf @@ -0,0 +1,44 @@ +/* + Author: Nanou + File: fn_initHC.sqf + + Description: + Written for Altis Life RPG. +*/ + +HC_UID = nil; + +// JIP integration of an hc +"life_HC_server_isReady" addPublicVariableEventHandler { + if (_this select 1) then { + HC_UID = getPlayerUID hc_1; + HC_Life = owner hc_1; + publicVariable "HC_Life"; + cleanupFSM setFSMVariable ["stopfsm",true]; + terminate cleanup; + terminate aiSpawn; + [true] call TON_fnc_transferOwnership; + HC_Life publicVariableClient "animals"; + HC_Life publicVariableClient "serv_sv_use"; + life_HC_isActive = true; + publicVariable "life_HC_isActive"; + diag_log "Headless client is connected and ready to work!"; + }; +}; + +HC_DC = ["HC_Disconnected","onPlayerDisconnected", + { + if (!isNil "HC_UID" && {_uid == HC_UID}) then { + life_HC_isActive = false; + publicVariable "life_HC_isActive"; + HC_Life = false; + publicVariable "HC_Life"; + cleanup = [] spawn TON_fnc_cleanup; + cleanupFSM = [] execFSM "\life_server\FSM\cleanup.fsm"; + [false] call TON_fnc_transferOwnership; + aiSpawn = ["hunting_zone",30] spawn TON_fnc_huntingZone; + diag_log "Headless client disconnected! Broadcasted the vars!"; + diag_log "Ready for receiving queries on the server machine."; + }; + } +] call BIS_fnc_addStackedEventHandler; diff --git a/life_server/script_macros.hpp b/life_server/script_macros.hpp index c5286810..1011a646 100644 --- a/life_server/script_macros.hpp +++ b/life_server/script_macros.hpp @@ -1,16 +1,13 @@ #define SYSTEM_TAG "life" #define ITEM_TAG format["%1%2",SYSTEM_TAG,"item_"] -#define SUB(var1,var2) var1 = var1 - var2 -#define ADD(var1,var2) var1 = var1 + var2 -#define SEL(ARRAY,INDEX) (ARRAY select INDEX) #define CASH life_cash #define BANK life_atmbank -#define GANG_FUNDS grpPlayer getVariable ["gang_bank",0]; +#define GANG_FUNDS group player getVariable ["gang_bank",0]; /* - remoteExec Section - When uncommented it enables proper testing via local testing - Otherwise leave it commented out for "LIVE" servers + remoteExec Section + When uncommented it enables proper testing via local testing + Otherwise leave it commented out for "LIVE" servers */ #define DEBUG 1 @@ -23,33 +20,16 @@ #define RSERV 2 #define RANY 0 -//Namespace Macros -#define SVAR_MNS missionNamespace setVariable -#define SVAR_UINS uiNamespace setVariable -#define SVAR_PNS parsingNamespace setVariable -#define GVAR_MNS missionNamespace getVariable -#define GVAR_UINS uiNamespace getVariable - //Scripting Macros -#define CONST(var1,var2) var1 = compileFinal (if(typeName var2 == "STRING") then {var2} else {str(var2)}) -#define CONSTVAR(var) var = compileFinal (if(typeName var == "STRING") then {var} else {str(var)}) +#define CONST(var1,var2) var1 = compileFinal (if (var2 isEqualType "") then {var2} else {str(var2)}) +#define CONSTVAR(var) var = compileFinal (if (var isEqualType "") then {var} else {str(var)}) #define FETCH_CONST(var) (call var) -#define PVAR_ALL(var) publicVariable var -#define PVAR_SERV(var) publicVariableServer var -#define PVAR_ID(var,id) id publicVariableClient var -#define GVAR getVariable -#define SVAR setVariable -#define RIFLE primaryWeapon player -#define RIFLE_ITEMS primaryWeaponItems player -#define PISTOL handgunWeapon player -#define PISTOL_ITEMS handgunItems player -#define LAUNCHER secondaryWeapon player #define EXTDB "extDB2" callExtension -#define EXTDB_SETTING(TYPE,SETTING) TYPE(configFile >> "Life_Server_Settings" >> "EXTDB" >> SETTING) +#define EXTDB_SETTING(TYPE,SETTING) TYPE(missionConfigFile >> "CfgServer" >> SETTING) #define EXTDB_FAILED(MESSAGE) \ - life_server_extDB_notLoaded = [true,##MESSAGE]; \ - PVAR_ALL("life_server_extDB_notLoaded"); \ - diag_log MESSAGE; + life_server_extDB_notLoaded = [true,##MESSAGE]; \ + publicVariable "life_server_extDB_notLoaded"; \ + diag_log MESSAGE; //Display Macros #define CONTROL(disp,ctrl) ((findDisplay ##disp) displayCtrl ##ctrl) @@ -57,20 +37,18 @@ #define CONTROL_DATAI(ctrl,index) ctrl lbData index //System Macros -#define grpPlayer group player -#define steamid getPlayerUID player #define LICENSE_VARNAME(varName,flag) format["license_%1_%2",flag,M_CONFIG(getText,"Licenses",varName,"variable")] -#define LICENSE_VALUE(varName,flag) GVAR_MNS [LICENSE_VARNAME(varName,flag),false] +#define LICENSE_VALUE(varName,flag) missionNamespace getVariable [LICENSE_VARNAME(varName,flag),false] #define ITEM_VARNAME(varName) format["life_inv_%1",M_CONFIG(getText,"VirtualItems",varName,"variable")] -#define ITEM_VALUE(varName) GVAR_MNS [ITEM_VARNAME(varName),0] +#define ITEM_VALUE(varName) missionNamespace getVariable [ITEM_VARNAME(varName),0] #define ITEM_ILLEGAL(varName) M_CONFIG(getNumber,"VirtualItems",ITEM_VARNAME(varName),"illegal") #define ITEM_SELLPRICE(varName) M_CONFIG(getNumber,"VirtualItems",ITEM_VARNAME(varName),"sellPrice") #define ITEM_BUYPRICE(varName) M_CONFIG(getNumber,"VirtualItems",ITEM_VARNAME(varName),"buyPrice") #define ITEM_NAME(varName) M_CONFIG(getText,"VirtualItems",varName,"displayName") +#define ITEM_WEIGHT(varName) M_CONFIG(getNumber,"VirtualItems",varName,"weight") //Condition Macros -#define EQUAL(condition1,condition2) condition1 isEqualTo condition2 -#define KINDOF_ARRAY(a,b) [##a,##b] call {_veh = _this select 0;_types = _this select 1;_res = false; {if (_veh isKindOf _x) exitwith { _res = true };} forEach _types;_res} +#define KINDOF_ARRAY(a,b) [##a,##b] call {_veh = _this select 0;_types = _this select 1;_res = false; {if (_veh isKindOf _x) exitWith { _res = true };} forEach _types;_res} //Config Macros #define FETCH_CONFIG(TYPE,CFG,SECTION,CLASS,ENTRY) TYPE(configFile >> CFG >> SECTION >> CLASS >> ENTRY) @@ -80,8 +58,3 @@ #define M_CONFIG(TYPE,CFG,CLASS,ENTRY) TYPE(missionConfigFile >> CFG >> CLASS >> ENTRY) #define BASE_CONFIG(CFG,CLASS) inheritsFrom(configFile >> CFG >> CLASS) #define LIFE_SETTINGS(TYPE,SETTING) TYPE(missionConfigFile >> "Life_Settings" >> SETTING) -#define CONFIG_VEHICLES "CfgVehicles" -#define CONFIG_LIFE_VEHICLES "LifeCfgVehicles" -#define CONFIG_WEAPONS "CfgWeapons" -#define CONFIG_MAGAZINES "CfgMagazines" -#define CONFIG_GLASSES "CfgGlasses" \ No newline at end of file