first upload

This commit is contained in:
DESKTOP-UH65DCE\MusTanG 2017-05-13 21:51:16 -05:00
parent 26915a7f9b
commit c6f7ac9921
96 changed files with 21037 additions and 0 deletions

View File

@ -0,0 +1,7 @@
Exile Mod
www.exilemod.com
© 2015 Exile Mod Team
This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.

View File

@ -0,0 +1 @@
exile_server_config

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -0,0 +1,9 @@
FLOSS Exception
Free and Open Source Software ("FOSS") License Exception
You can repackage extDB3.dll / extDB3.so (shared libary) along with your project, if your project is licensed under one of the following licenses.
An OSI approved licenses https://opensource.org/licenses/alphabetical
Arma Public License https://www.bistudio.com/community/licenses/arma-public-license
Arma Public License Share Alike https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Important: You will also need to include the extDB3-License-FLOSS-Exception.txt.
This is to prevent confusion if someone grabs extDB3 from your project to use.

View File

@ -0,0 +1,402 @@
Attribution-NonCommercial-NoDerivatives 4.0 International
=======================================================================
Creative Commons Corporation ("Creative Commons") is not a law firm and
does not provide legal services or legal advice. Distribution of
Creative Commons public licenses does not create a lawyer-client or
other relationship. Creative Commons makes its licenses and related
information available on an "as-is" basis. Creative Commons gives no
warranties regarding its licenses, any material licensed under their
terms and conditions, or any related information. Creative Commons
disclaims all liability for damages resulting from their use to the
fullest extent possible.
Using Creative Commons Public Licenses
Creative Commons public licenses provide a standard set of terms and
conditions that creators and other rights holders may use to share
original works of authorship and other material subject to copyright
and certain other rights specified in the public license below. The
following considerations are for informational purposes only, are not
exhaustive, and do not form part of our licenses.
Considerations for licensors: Our public licenses are
intended for use by those authorized to give the public
permission to use material in ways otherwise restricted by
copyright and certain other rights. Our licenses are
irrevocable. Licensors should read and understand the terms
and conditions of the license they choose before applying it.
Licensors should also secure all rights necessary before
applying our licenses so that the public can reuse the
material as expected. Licensors should clearly mark any
material not subject to the license. This includes other CC-
licensed material, or material used under an exception or
limitation to copyright. More considerations for licensors:
wiki.creativecommons.org/Considerations_for_licensors
Considerations for the public: By using one of our public
licenses, a licensor grants the public permission to use the
licensed material under specified terms and conditions. If
the licensor's permission is not necessary for any reason--for
example, because of any applicable exception or limitation to
copyright--then that use is not regulated by the license. Our
licenses grant only permissions under copyright and certain
other rights that a licensor has authority to grant. Use of
the licensed material may still be restricted for other
reasons, including because others have copyright or other
rights in the material. A licensor may make special requests,
such as asking that all changes be marked or described.
Although not required by our licenses, you are encouraged to
respect those requests where reasonable. More_considerations
for the public:
wiki.creativecommons.org/Considerations_for_licensees
=======================================================================
Creative Commons Attribution-NonCommercial-NoDerivatives 4.0
International Public License
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.
a. 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.
b. 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.
c. 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.
d. 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.
e. Licensed Material means the artistic or literary work, database,
or other material to which the Licensor applied this Public
License.
f. 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.
g. Licensor means the individual(s) or entity(ies) granting rights
under this Public License.
h. 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.
i. 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.
j. 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.
k. You means the individual or entity exercising the Licensed Rights
under this Public License. Your has a corresponding meaning.
Section 2 -- Scope.
a. 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:
a. reproduce and Share the Licensed Material, in whole or
in part, for NonCommercial purposes only; and
b. produce and reproduce, but not Share, Adapted Material
for NonCommercial purposes only.
2. 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.
3. Term. The term of this Public License is specified in Section
6(a).
4. 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.
5. Downstream recipients.
a. 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.
b. 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.
6. 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).
b. 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.
2. Patent and trademark rights are not licensed under this
Public License.
3. 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:
a. retain the following if it is supplied by the Licensor
with the Licensed Material:
i. 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);
ii. a copyright notice;
iii. a notice that refers to this Public License;
iv. a notice that refers to the disclaimer of
warranties;
v. a URI or hyperlink to the Licensed Material to the
extent reasonably practicable;
b. indicate if You modified the Licensed Material and
retain an indication of any previous modifications; and
c. 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.
2. 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.
3. 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:
a. 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;
b. 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
c. 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.
a. 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.
b. 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.
c. 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.
a. 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.
b. 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
2. 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.
c. 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.
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
License.
Section 7 -- Other Terms and Conditions.
a. The Licensor shall not be bound by any additional or different
terms or conditions communicated by You unless expressly agreed.
b. 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.
a. 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.
b. 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.
c. 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.
d. 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.” The text of the Creative Commons
public licenses is dedicated to the public domain under the CC0 Public
Domain Dedication. 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.

View File

@ -0,0 +1,7 @@
extDB3 Description
extDB3 is an Arma3 Addon for connecting to Databases (currently only MariaDB/MySQL).
The main purpose for extDB3 is for persistent missions in Arma.
Note it will require some knowledge about SQF & SQL to use.
extDB3 is also designed to be flexible & secure at the same time.
More Info available @ wiki https://bitbucket.org/torndeco/extdb3/wiki/Home

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,33 @@
[Main]
Version = 1
Randomize Config File = false
;; Randomizes Config File after loading.
;; Recommend to turn on, if you have enabled filepatching on arma.
Allow Reset = false
;; Allows 9:RESET, usefull for development work
Thread = 0;
;; Option to force number of worker threads for extDB3.
;; Auto = 0, Min = 2, Max = 6
[Log]
Flush = true;
;; Flush logfile after each update.
;; Option really only usefull if running DEBUG BUILD
[Database]
IP = 127.0.0.1
Port = 3306
Username = changeme
Password = changeme
Database = changeme
[exile]
Database = exile
Username = mysqlUserName
Password = mysqlPassword
IP = 127.0.0.1
Port = 3306

View File

@ -0,0 +1,23 @@
extDB3: https://bitbucket.org/torndeco/extdb3/wiki/Home
extDB3: Version: 1.028
extDB3: Windows Version
Message: All development for extDB3 is done on a Linux Dedicated Server
Message: If you would like to Donate to extDB3 Development
Message: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=2SUEFTGABTAM2
Message: Also leave a message if there is any particular feature you would like to see added.
Message: Thanks for all the people that have donated.
Message: Torndeco: 18/05/15
extDB3: Found extdb3-conf.ini
extDB3: Detected 8 Cores, Setting up 6 Worker Threads
extDB3: ...
extDB3: ...
extDB3: ...
extDB3: ...
extDB3: ...
extDB3: ...
[09:50:36:782352 -05:00] [Thread 2300] extDB3: Locked

View File

@ -0,0 +1 @@
[09:52:44:371275 -05:00] [Thread 7216] MusTanG commited suicide!

View File

@ -0,0 +1,680 @@
[Default]
Version = 1
Strip Chars = "\/\|;{}<>\'"
Strip Chars Mode = 0
Input SQF Parser = false
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Account related queries
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[isKnownAccount]
SQL1_1 = SELECT CASE WHEN EXISTS(SELECT uid FROM account WHERE uid = ?) THEN 'true' ELSE 'false' END
SQL1_INPUTS = 1
OUTPUT = 1
[createAccount]
SQL1_1 = INSERT INTO account SET uid = ?, name = ?
SQL1_INPUTS = 1,2
[startAccountSession]
SQL1_1 = UPDATE account SET name = ?, last_connect_at = NOW(), total_connections = total_connections + 1 WHERE uid = ?
SQL1_INPUTS = 2,1
[endAccountSession]
SQL1_1 = UPDATE account SET last_disconnect_at = NOW() WHERE uid = ?
SQL1_INPUTS = 1
[getAccountStats]
SQL1_1 = SELECT score, kills, deaths, clan_id, locker FROM account WHERE uid = ?
SQL1_INPUTS = 1
OUTPUT = 1,2,3,4,5
[addAccountKill]
SQL1_1 = UPDATE account SET kills = kills + 1 WHERE uid = ?
SQL1_INPUTS = 1
[addAccountDeath]
SQL1_1 = UPDATE account SET deaths = deaths + 1 WHERE uid = ?
SQL1_INPUTS = 1
[getAccountScore]
SQL1_1 = SELECT score FROM account WHERE uid = ?
SQL1_INPUTS = 1
OUTPUT = 1
[setAccountScore]
SQL1_1 = UPDATE account SET score = ? WHERE uid = ?
SQL1_INPUTS = 1,2
[modifyAccountScore]
SQL1_1 = UPDATE account SET score = score + ? WHERE uid = ?
SQL1_INPUTS = 1,2
[updateLocker]
SQL1_1 = UPDATE account SET locker = ? WHERE uid = ?
SQL1_INPUTS = 1,2
[getLocker]
SQL1_1 = SELECT locker FROM account WHERE uid = ?
SQL1_INPUTS = 1
OUTPUT = 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Player related queries
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[hasAlivePlayer]
SQL1_1 = SELECT CASE WHEN EXISTS(SELECT account_uid FROM player WHERE account_uid = ? AND damage < 1) THEN 'true' ELSE 'false' END
SQL1_INPUTS = 1
OUTPUT = 1
[createPlayer]
SQL1_1 = DELETE FROM player WHERE account_uid = ?
SQL2_1 = INSERT INTO player SET account_uid = ?, name = ?
SQL1_INPUTS = 1
SQL2_INPUTS = 1,2
Return InsertID = true
[insertPlayerHistory]
SQL1_1 = INSERT INTO player_history SET account_uid = ?, name = ?, position_x = ?, position_y = ?, position_z = ?
SQL1_INPUTS = 1,2,3,4,5
[deletePlayer]
SQL1_1 = DELETE FROM player WHERE id = ?
SQL1_INPUTS = 1
[loadPlayer]
SQL1_1 = SELECT p.id,
SQL1_2 = p.name,
SQL1_3 = p.account_uid,
SQL1_4 = p.damage,
SQL1_5 = p.hunger,
SQL1_6 = p.thirst,
SQL1_7 = p.alcohol,
SQL1_8 = p.oxygen_remaining,
SQL1_9 = p.bleeding_remaining,
SQL1_10 = p.hitpoints,
SQL1_11 = p.direction,
SQL1_12 = p.position_x,
SQL1_13 = p.position_y,
SQL1_14 = p.position_z,
SQL1_15 = p.assigned_items,
SQL1_16 = p.backpack,
SQL1_17 = p.backpack_items,
SQL1_18 = p.backpack_magazines,
SQL1_19 = p.backpack_weapons,
SQL1_20 = p.current_weapon,
SQL1_21 = p.goggles,
SQL1_22 = p.handgun_items,
SQL1_23 = p.handgun_weapon,
SQL1_24 = p.headgear,
SQL1_25 = p.binocular,
SQL1_26 = p.loaded_magazines,
SQL1_27 = p.primary_weapon,
SQL1_28 = p.primary_weapon_items,
SQL1_29 = p.secondary_weapon,
SQL1_30 = p.secondary_weapon_items,
SQL1_31 = p.uniform,
SQL1_32 = p.uniform_items,
SQL1_33 = p.uniform_magazines,
SQL1_34 = p.uniform_weapons,
SQL1_35 = p.vest,
SQL1_36 = p.vest_items,
SQL1_37 = p.vest_magazines,
SQL1_38 = p.vest_weapons,
SQL1_39 = p.money,
SQL1_40 = a.score,
SQL1_41 = a.kills,
SQL1_42 = a.deaths,
SQL1_43 = c.id,
SQL1_44 = c.name,
SQL1_45 = p.temperature,
SQL1_46 = p.wetness,
SQL1_47 = a.locker
SQL1_48 = FROM player p
SQL1_49 = INNER JOIN account a
SQL1_50 = ON a.uid = p.account_uid
SQL1_51 = LEFT JOIN clan c
SQL1_52 = ON c.id = a.clan_id
SQL1_53 = WHERE p.account_uid = ?
SQL1_INPUTS = 1
OUTPUT = 1,2-STRING,3-STRING,4,5,6,7,8,9,10,11,12,13,14,15,16-STRING,17,18,19,20-STRING,21-STRING,22,23-STRING,24-STRING,25-STRING,26,27-STRING,28,29-STRING,30,31-STRING,32,33,34,35-STRING,36,37,38,39,40,41,42,43,44-STRING,45,46,47
[updatePlayer]
SQL1_1 = UPDATE player SET
SQL1_2 = name = ?,
SQL1_3 = damage = ?,
SQL1_4 = hunger = ?,
SQL1_5 = thirst = ?,
SQL1_6 = alcohol = ?,
SQL1_7 = oxygen_remaining = ?,
SQL1_8 = bleeding_remaining = ?,
SQL1_9 = hitpoints = ?,
SQL1_10 = direction = ?,
SQL1_11 = position_x = ?,
SQL1_12 = position_y = ?,
SQL1_13 = position_z = ?,
SQL1_14 = assigned_items = ?,
SQL1_15 = backpack = ?,
SQL1_16 = backpack_items = ?,
SQL1_17 = backpack_magazines = ?,
SQL1_18 = backpack_weapons = ?,
SQL1_19 = current_weapon = ?,
SQL1_20 = goggles = ?,
SQL1_21 = handgun_items = ?,
SQL1_22 = handgun_weapon = ?,
SQL1_23 = headgear = ?,
SQL1_24 = binocular = ?,
SQL1_25 = loaded_magazines = ?,
SQL1_26 = primary_weapon = ?,
SQL1_27 = primary_weapon_items = ?,
SQL1_28 = secondary_weapon = ?,
SQL1_29 = secondary_weapon_items = ?,
SQL1_30 = uniform = ?,
SQL1_31 = uniform_items = ?,
SQL1_32 = uniform_magazines = ?,
SQL1_33 = uniform_weapons = ?,
SQL1_34 = vest = ?,
SQL1_35 = vest_items = ?,
SQL1_36 = vest_magazines = ?,
SQL1_37 = vest_weapons = ?,
SQL1_38 = temperature = ?,
SQL1_39 = wetness = ?
SQL1_40 = WHERE id = ?
SQL1_INPUTS = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Vehicle related queries
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[insertVehicle]
SQL1_1 = INSERT INTO vehicle SET
SQL1_2 = class = ?,
SQL1_3 = account_uid = ?,
SQL1_4 = is_locked = ?,
SQL1_5 = position_x = ?,
SQL1_6 = position_y = ?,
SQL1_7 = position_z = ?,
SQL1_8 = direction_x = ?,
SQL1_9 = direction_y = ?,
SQL1_10 = direction_z = ?,
SQL1_11 = up_x = ?,
SQL1_12 = up_y = ?,
SQL1_13 = up_z = ?,
SQL1_14 = pin_code = ?
SQL1_INPUTS = 1,2,3,4,5,6,7,8,9,10,11,12,13
Return InsertID = true
[deleteVehicle]
SQL1_1 = DELETE FROM vehicle WHERE id = ?
SQL1_INPUTS = 1
[loadVehicleIdPage]
SQL1_1 = SELECT id FROM vehicle WHERE deleted_at IS NULL LIMIT ?,?
SQL1_INPUTS = 1,2
OUTPUT = 1
[loadVehicle]
SQL1_1 = SELECT id,class,spawned_at,account_uid,is_locked,fuel,damage,hitpoints,position_x,position_y,position_z,direction_x,direction_y,direction_z,up_x,up_y,up_z,cargo_items,cargo_magazines,cargo_weapons,pin_code,vehicle_texture,deleted_at,money FROM vehicle WHERE id = ?
SQL1_INPUTS = 1
OUTPUT = 1,2-STRING,3-STRING,4-STRING,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21-STRING,22,23,24
[loadVehicleContainer]
SQL1_1 = SELECT cargo_container FROM vehicle WHERE id = ?
SQL1_INPUTS = 1
OUTPUT = 1
[updateVehicle]
SQL1_1 = UPDATE vehicle SET
SQL1_2 = is_locked = ?,
SQL1_3 = fuel = ?,
SQL1_4 = damage = ?,
SQL1_5 = hitpoints = ?,
SQL1_6 = position_x = ?,
SQL1_7 = position_y = ?,
SQL1_8 = position_z = ?,
SQL1_9 = direction_x = ?,
SQL1_10 = direction_y = ?,
SQL1_11 = direction_z = ?,
SQL1_12 = up_x = ?,
SQL1_13 = up_y = ?,
SQL1_14 = up_z = ?,
SQL1_15 = cargo_items = ?,
SQL1_16 = cargo_magazines = ?,
SQL1_17 = cargo_weapons = ?,
SQL1_18 = cargo_container = ?,
SQL1_19 = money = ?
SQL1_20 = WHERE id = ?
SQL1_INPUTS = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19
[updateVehicleSkin]
SQL1_1 = UPDATE vehicle SET vehicle_texture = ? WHERE id = ?
SQL1_INPUTS = 1,2
[vehicleSetPinCode]
SQL1_1 = UPDATE vehicle SET pin_code = ? WHERE id = ?
SQL1_INPUTS = 1,2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Construction related queries
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[insertConstruction]
SQL1_1 = INSERT INTO construction SET
SQL1_2 = class = ?,
SQL1_3 = account_uid = ?,
SQL1_4 = position_x = ?,
SQL1_5 = position_y = ?,
SQL1_6 = position_z = ?,
SQL1_7 = direction_x = ?,
SQL1_8 = direction_y = ?,
SQL1_9 = direction_z = ?,
SQL1_10 = up_x = ?,
SQL1_11 = up_y = ?,
SQL1_12 = up_z = ?,
SQL1_13 = territory_id = ?
SQL1_INPUTS = 1,2,3,4,5,6,7,8,9,10,11,12-NULL
Return InsertID = true
[deleteConstruction]
SQL1_1 = DELETE FROM construction WHERE id = ?
SQL1_INPUTS = 1
[loadConstructionIdPage]
SQL1_1 = SELECT id FROM construction WHERE deleted_at IS NULL LIMIT ?,?
SQL1_INPUTS = 1,2
OUTPUT = 1
[loadConstruction]
SQL1_1 = SELECT id,class,account_uid,spawned_at,position_x,position_y,position_z,direction_x,direction_y,direction_z,up_x,up_y,up_z,is_locked,pin_code,territory_id,deleted_at,damage FROM construction WHERE id = ?
SQL1_INPUTS = 1
OUTPUT = 1,2-STRING,3-STRING,4-STRING,5,6,7,8,9,10,11,12,13,14,15-STRING,16,17,18
[countConstruction]
SQL1_1 = SELECT COUNT(*) FROM construction
OUTPUT = 1
[constructionSetPinCode]
SQL1_1 = UPDATE construction SET pin_code= ? WHERE id = ?
SQL1_INPUTS = 1,2
[upgradeObject]
SQL1_1 = UPDATE construction SET class=? WHERE id = ?
SQL1_INPUTS = 1,2
[addDoorLock]
SQL1_1 = UPDATE construction SET pin_code = ?,is_locked = -1 WHERE id = ?
SQL1_INPUTS = 1,2
[updateLock]
SQL1_1 = UPDATE construction SET is_locked = ? WHERE id = ?
SQL1_INPUTS = 1,2
[updateConstructionTerritoryIDs]
SQL1_1 = UPDATE construction SET territory_id = ? WHERE id IN(?)
SQL1_INPUTS = 1,2
[updateDamage]
SQL1_1 = UPDATE construction SET damage = ? WHERE id = ?
SQL1_INPUTS = 1,2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Containers related queries
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[insertContainer]
SQL1_1 = INSERT INTO container SET
SQL1_2 = class = ?,
SQL1_3 = account_uid = ?,
SQL1_4 = position_x = ?,
SQL1_5 = position_y = ?,
SQL1_6 = position_z = ?,
SQL1_7 = direction_x = ?,
SQL1_8 = direction_y = ?,
SQL1_9 = direction_z = ?,
SQL1_10 = up_x = ?,
SQL1_11 = up_y = ?,
SQL1_12 = up_z = ?,
SQL1_13 = cargo_items = ?,
SQL1_14 = cargo_magazines = ?,
SQL1_15 = cargo_weapons = ?,
SQL1_16 = cargo_container = ?,
SQL1_17 = money = ?,
SQL1_18 = pin_code = ?,
SQL1_19 = territory_id = ?
SQL1_INPUTS = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18-NULL
Return InsertID = true
[deleteContainer]
SQL1_1 = DELETE FROM container WHERE id = ?
SQL1_INPUTS = 1
[loadContainerIdPage]
SQL1_1 = SELECT id FROM container WHERE deleted_at IS NULL LIMIT ?,?
SQL1_INPUTS = 1,2
OUTPUT = 1
[loadContainer]
SQL1_1 = SELECT id,class,account_uid,is_locked,position_x,position_y,position_z,direction_x,direction_y,direction_z,up_x,up_y,up_z,cargo_items,cargo_magazines,cargo_weapons,pin_code,territory_id,abandoned,deleted_at,money FROM container WHERE id = ?
SQL1_INPUTS = 1
OUTPUT = 1,2-STRING,3-STRING,4,5,6,7,8,9,10,11,12,13,14,15,16,17-STRING,18,19-STRING,20,21
[loadContainerCargo]
SQL1_1 = SELECT cargo_container FROM container WHERE id = ?
SQL1_INPUTS = 1
OUTPUT = 1
[updateContainer]
SQL1_1 = UPDATE container SET
SQL1_2 = is_locked = ?,
SQL1_3 = position_x = ?,
SQL1_4 = position_y = ?,
SQL1_5 = position_z = ?,
SQL1_6 = direction_x = ?,
SQL1_7 = direction_y = ?,
SQL1_8 = direction_z = ?,
SQL1_9 = up_x = ?,
SQL1_10 = up_y = ?,
SQL1_11 = up_z = ?,
SQL1_12 = cargo_items = ?,
SQL1_13 = cargo_magazines = ?,
SQL1_14 = cargo_weapons = ?,
SQL1_15 = cargo_container = ?,
SQL1_16 = territory_id = ?,
SQL1_17 = money = ?
SQL1_18 = WHERE id = ?
SQL1_INPUTS = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15-NULL,16,17
[containerSetPinCode]
SQL1_1 = UPDATE container SET pin_code= ? WHERE id = ?
SQL1_INPUTS = 1,2
[updateContainerTerritoryIDs]
SQL1_1 = UPDATE container SET territory_id = ? WHERE id IN(?)
SQL1_INPUTS = 1,2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Clan related queries
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[createClan]
SQL1_1 = INSERT INTO clan SET leader_uid = ?, name = ?
SQL1_INPUTS = 1,2
Return InsertID = true
[setAccountClanLink]
SQL1_1 = UPDATE account SET clan_id = ? WHERE uid = ?
SQL1_INPUTS = 1,2
[unLinkClanLink]
SQL1_1 = UPDATE account SET clan_id = NULL WHERE uid = ?
SQL1_INPUTS = 1
[updateClanLeader]
SQL1_1 = UPDATE clan SET leader_uid = ? WHERE id = ?
SQL1_INPUTS = 1,2
[deleteClan]
SQL1_1 = DELETE FROM clan WHERE id = ?
SQL1_INPUTS = 1
[loadClansIdPage]
SQL1_1 = SELECT id FROM clan LIMIT ?,?
SQL1_INPUTS = 1,2
OUTPUT = 1
[getClanInfo]
SQL1_1 = SELECT name,leader_uid FROM clan WHERE id = ?
SQL1_INPUTS = 1
OUTPUT = 1-STRING,2-STRING
[getClanMembers]
SQL1_1 = SELECT uid,name FROM account WHERE clan_id = ?
SQL1_INPUTS = 1
OUTPUT = 1-STRING,2-STRING
[getClanMarkers]
SQL1_1 = SELECT id,markerType,positionArr,color,icon,iconSize,label,labelSize FROM clan_map_marker WHERE clan_id = ?
SQL1_INPUTS = 1
OUTPUT = 1,2,3,4,5-STRING,6,7-STRING,8
[addMarker]
SQL1_1 = INSERT INTO clan_map_marker SET clan_id = ?, markerType = 0, positionArr = ?, color = ?, icon = ?, iconSize = ?, label = ?, labelSize = ?
SQL1_INPUTS = 1,2,3,4,5,6,7
Return InsertID = true
[addPoly]
SQL1_1 = INSERT INTO clan_map_marker SET clan_id = ?, markerType = 1, positionArr = ?, color = ?
SQL1_INPUTS = 1,2,3
Return InsertID = true
[deleteMarker]
SQL1_1 = DELETE FROM clan_map_marker WHERE id = ?
SQL1_INPUTS = 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Territory related queries
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[createTerritory]
SQL1_1 = INSERT INTO territory SET owner_uid = ?, name = ?, position_x = ? , position_y = ? , position_z = ?, radius = ? , level = ? , flag_texture = ? , flag_stolen = ? , flag_stolen_by_uid =? , build_rights = ? , moderators = ?
SQL1_INPUTS = 1,2,3,4,5,6,7,8,9,12-NULL,10,11
Return InsertID = true
[loadTerriotryIdPage]
SQL1_1 = SELECT id FROM territory WHERE deleted_at IS NULL LIMIT ?,?
SQL1_INPUTS = 1,2
OUTPUT = 1
[loadTerritory]
SQL1_1 = SELECT id,owner_uid,name,position_x,position_y,position_z,radius, level,flag_texture,flag_stolen,flag_stolen_by_uid,last_paid_at,build_rights,moderators,deleted_at,(SELECT COUNT(*)FROM construction c WHERE c.territory_id = ?) FROM territory WHERE id = ?
SQL1_INPUTS = 1,1
OUTPUT = 1,2-STRING,3-STRING,4,5,6,7,8,9-STRING,10,11-STRING,12,13,14,15,16
[setTerritoryLevel]
SQL1_1 = UPDATE territory SET level = ? WHERE id = ?
SQL1_INPUTS = 1,2
[setTerritorySize]
SQL1_1 = UPDATE territory SET radius = ? WHERE id = ?
SQL1_INPUTS = 1,2
[updateTerritoryBuildRights]
SQL1_1 = UPDATE territory SET build_rights = ? WHERE id = ?
SQL1_INPUTS = 1,2
[updateTerritoryModerators]
SQL1_1 = UPDATE territory SET moderators = ? WHERE id = ?
SQL1_INPUTS = 1,2
[maintainTerritory]
SQL1_1 = UPDATE territory SET last_paid_at = NOW(),xm8_protectionmoney_notified = 0 WHERE id = ?
SQL1_INPUTS = 1
[deleteTerritory]
SQL1_1 = DELETE FROM territory WHERE id = ?
SQL1_INPUTS = 1
[flagStolen]
SQL1_1 = UPDATE territory SET flag_stolen = 1, flag_stolen_by_uid = ?, flag_stolen_at = NOW() WHERE id = ?
SQL1_INPUTS = 1,2
[flagRestore]
SQL1_1 = UPDATE territory SET flag_stolen = 0, flag_stolen_by_uid = NULL, flag_stolen_at = NULL WHERE id = ?
SQL1_INPUTS = 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Garbage Collector
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Marks for deletion containers outside territories that were not accessed within ? days
[markDeleteOldContainers]
SQL1_1 = UPDATE container SET deleted_at = NOW() WHERE last_updated_at < DATE_SUB(NOW(), INTERVAL ? DAY) AND territory_id IS NULL AND deleted_at IS NULL
SQL1_INPUTS = 1
; Removes containers outside territories that were not accessed within ? days
[deleteOldContainers]
SQL1_1 = DELETE FROM container WHERE deleted_at < DATE_SUB(NOW(), INTERVAL ? DAY) AND territory_id IS NULL
SQL1_INPUTS = 1
; Marks contructions outside territories deleted after ? days
[markDeleteOldConstructions]
SQL1_1 = UPDATE construction SET deleted_at = NOW() WHERE last_updated_at < DATE_SUB(NOW(), INTERVAL ? DAY) AND territory_id IS NULL AND deleted_at IS NULL
SQL1_INPUTS = 1
; Removes contructions outside territories after ? days
[deleteOldConstructions]
SQL1_1 = DELETE FROM construction WHERE deleted_at < DATE_SUB(NOW(), INTERVAL ? DAY) AND territory_id IS NULL
SQL1_INPUTS = 1
; Marks for deletion vehicles that were not used within ? days
[markDeleteOldVehicles]
SQL1_1 = UPDATE vehicle SET deleted_at = NOW() WHERE last_updated_at < DATE_SUB(NOW(), INTERVAL ? DAY) AND deleted_at IS NULL
SQL1_INPUTS = 1
; Removes vehicles that were not used within ? days
[deleteOldVehicles]
SQL1_1 = DELETE FROM vehicle WHERE deleted_at < DATE_SUB(NOW(), INTERVAL ? DAY)
SQL1_INPUTS = 1
; Marks territories (and all containers/constructions) that were not paid within ? days as deleted
[markDeleteUnpaidTerritories]
SQL1_1 = UPDATE territory SET deleted_at = NOW() WHERE last_paid_at < DATE_SUB(NOW(), INTERVAL ? DAY) AND deleted_at IS NULL
SQL2_1 = UPDATE construction SET deleted_at = (select deleted_at from territory where territory.id=construction.territory_id and territory.deleted_at IS NOT NULL)
SQL3_1 = UPDATE container SET deleted_at = (select deleted_at from territory where territory.id=container.territory_id and territory.deleted_at IS NOT NULL)
SQL1_INPUTS = 1
; Removes territories (and all containers/constructions) that were not paid within ? days
[deleteUnpaidTerritories]
SQL1_1 = DELETE FROM territory WHERE deleted_at < DATE_SUB(NOW(), INTERVAL ? DAY)
SQL1_INPUTS = 1
[addAbandonedSafes]
SQL1_1 = UPDATE container SET abandoned = NOW(), pin_code = '0000' WHERE last_updated_at < DATE_SUB(NOW(), INTERVAL ? DAY) AND class = "Exile_Container_Safe" AND territory_id IS NULL
SQL1_INPUTS = 1
[deleteBaseFlagStolen]
SQL1_1 = DELETE FROM territory WHERE flag_stolen_at < DATE_SUB(NOW(), INTERVAL ? DAY)
SQL1_INPUTS = 1
; Unlock doors and mark safes as abandoned if flag stolen for X days
[setAbandonedUnlocked]
SQL1_1 = UPDATE container SET abandoned = NOW(), pin_code = '0000' WHERE (SELECT flag_stolen_at FROM territory WHERE territory.id=container.territory_id AND territory.flag_stolen_at < DATE_SUB(NOW(), INTERVAL ? DAY));
SQL2_1 = UPDATE construction SET pin_code = '0000' WHERE (SELECT flag_stolen_at FROM territory WHERE territory.id = construction.territory_id AND territory.flag_stolen_at < DATE_SUB(NOW(), INTERVAL ? DAY)) AND pin_code != '000000'
SQL1_INPUTS = 1
SQL2_INPUTS = 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Moneh moneh moneh
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[setPlayerMoney]
SQL1_1 = UPDATE player SET money = ? WHERE id = ?
SQL1_INPUTS = 1,2
[getPlayerMoney]
SQL1_1 = SELECT money FROM player WHERE id = ?
SQL1_INPUTS = 1
OUTPUT = 1
[setContainerMoney]
SQL1_1 = UPDATE container SET money = ? WHERE id = ?
SQL1_INPUTS = 1,2
[setVehicleMoney]
SQL1_1 = UPDATE vehicle SET money = ? WHERE id = ?
SQL1_INPUTS = 1,2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; XM8
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[getAllNotifTerritory]
SQL1_1 = SELECT id FROM territory WHERE last_paid_at < DATE_SUB(NOW(), INTERVAL ? - 1 DAY) and xm8_protectionmoney_notified = 0
SQL1_INPUTS = 1
[setTerritoryNotified]
SQL1_1 = UPDATE territory SET xm8_protectionmoney_notified = ? WHERE id = ?
SQL1_INPUTS = 1,2

View File

@ -0,0 +1,2 @@
language="English";
MaxPermanentCraters=200;

View File

@ -0,0 +1,44 @@
hostname = "eXile Altis[DEVELOPMENT]";
password = "privateinstance";
passwordAdmin = "rockP4p3r5ciss0r5";
serverCommandPassword = "exesandohs";
logFile = "server.log";
verifySignatures = 1; // Do NOT use verifySignatures=2! It costs too many FPS
BattlEye = 1;
requiredBuild = 141205; // 1.68 stable
allowedLoadFileExtensions[] = {:};
allowedPreprocessFileExtensions[] = {"sqf"};
allowedHTMLLoadExtensions[] = {"html"};
motdInterval = 5;
maxPlayers = 52;
allowedVoteCmds[] = {};
voteMissionPlayers = 100;
voteThreshold = 100;
disableVoN = 0;
vonCodecQuality = 30;
persistent = 1;
kickDuplicate = 1;
equalModRequired = 0;
kickClientsOnSlowNetwork = 0;
timeStampFormat = "short";
onUserConnected = "";
onUserDisconnected = "";
doubleIdDetected = "";
onUnsignedData = "kick (_this select 0)";
onHackedData = "kick (_this select 0)";
onDifferentData = "kick (_this select 0)";
motd[] = {"Welcome to Arma 3 Exile Mod!", "www.exilemod.com", "Enjoy your stay!" };
class Missions
{
class Exile
{
template = Exile.Altis; // Exile.Namalsk, Exile.Tanoa
// do NOT use custom difficulties!
// Use either ExileRegular or ExileHardcore
// or you will break Exile!
difficulty = "ExileRegular";
};
};

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,561 @@
*** V 1.605 ***
- Added: Version check on file: Bec.lib. if the exe & lib file has a version mismatch Bec will not startup. its added because people tend to only update the exe file.
- Added: command "exit" to the scheduler. when used it will terminate Bec
- Added: Display a warning if a scheduler job used loadbans with no files defined and BeCustomBanFiles is in use.
*** V 1.604 ***
- Fixed: seconds in the scheduler using the hh:mm:ss format had a bug after last update!.
*** V 1.603 ***
- Fixed: A bug when the time in the scheduler was set to 24:00:00 instead of 00:00:00
- FIxed: A Bug in Commands.xml file. if _name_ or _time_ was not set for the ban commands, no reason was given.
*** V 1.602 ***
- Improved: Auto remove starting and ending spaces from the tags in the xml files.
- Fixed: A typo in the code making WhiteListKickMsg not work unless it was spelled wrong.
- Added: New setting to [Misc] -> BeCustomBanFiles, define custom banfiles which will do a (loadbans file) if the file(s) gets changed.
- Added: Logging to BeLog-DATE.log, into about guid verification on player connect when using Bec Reporter. (Status report)
- Changed: SlotLimit chaned a bit again :\
*** V 1.601 ***
- Added: If the -f switch is forgotten, Bec will try and look for the file "Config.cfg" in the Config directory and use that one if it exists.
- Added: When loading plugins, Bec will display its version if the variable: __version__ is defined in the plugin __init__.py file
- Added: fortune as a command for the scheduler. <cmd>fortune</cmd>. will announce a random line from Config\fortune.txt
- ReAdded: A timeout of 3 sec is added before Bec.exe closes on startup errors, Ie missing "Config.cfg" etc..
- Improved: will automatically generate the __init__.py file in the Plugins directory if missing. (does not apply subdir), but will only do so if the directory exists and no --dpl used.
- Fixed: A encoding error that could happen when reading the scheduler file and doing jobs with none ascii. its to prevent spamming up the error.log unnecessary.
- Changed: SlotLimit changed to a more static method. number of reserved slots will no longer depend on admins online but the size of your admin file
- Misc: Plugins cleanup, and minor changes to them, a little updated docs etc,
Plugins are not included in the Bec.zip file any more, but can instead be downloaded separately.
*** V 1.600 ***
- Changed: Scheduler system has gone through a massive update and are no longer compatible with previous versions. You need to adapt your scheduler file to the new method.
- Changed: The scheduler will now start after Bec has logged in. not when Bec starts like it used to.
- Added: New startup parameter: --dpl (disable plugins). when this is used plugins will be disabled. this is a better way to do it than remove the plugins directory
- Fixed: Config Misc -> Timeout will now also work when --dsc is used. but when --dsc is used Bec will wait the entire time unlike what it does without --dsc
- Included: New plugin Watchdogs. will autoreloade when some Bec|Be files gets changed.
*** V 1.599 ***
- Improved: Parsing the Admin file. more error logging etc.
- Improved: Parsing the Command file. more error logging etc.
- Improved: Parsing the Scheduler file. more error logging etc.
*** V 1.598 ***
- Added: New command, <cmd>systime</cmd> for the scheduler file. will announce local server time.
- Added: New command, <cmd>uptime</cmd> for the scheduler file. will announce server uptime. note. it will not work when --dsc is used.
*** V 1.597 ***
- Changed: Queue size from 64 to 128
- Fixed: lines in whitelist file that started with space was ignored. will auto strip leading spaces now.
- Fixed: whitelisting was ignored if the file was empty.
- Added: new command, (systime) for commands.xml, will show current server time, look in commands example file for more info...
*** V 1.596 ***
- Added: MinPlayerName can now be used to force a minimum name length on players.
- Changed: Some log messages
*** V 1.595 ***
- Fixed: Bec version check did not work correctly.
- Added: New Parameter to config file that will allow you to set ban on GameHack, BattlEyeHack, Both or None of them.
Please read the README file for more info, you'll find it under MISC section.
*** V 1.594 ***
- Updated: twisted to version 13.2.0
- Fixed: wrong admin name could be logged to file when commands was issues
- Added: plugin that bans on script restriction.
*** V 1.593 ***
- Fixed: people who dont use the reporter system and uses startup switch --dsc will not get message about reporter account disabled.
- Fixed: Startup errors related to IgnoreChatChars
*** V 1.592 ***
- Fixed: Warning about "Your reporter account will not be working." msg will only be shown if reporter account is set and bec is unable to collect server type.
- Changed: Some changes done on the startup check for server type.
- Fixed: IgnoreChatChars did not work on some chars. new method of defining chars. look at example file.
*** V 1.59.1 ***
- Fixed. Again Slotlimit issues. Quick fix done.
*** V 1.59 ***
- Fixed: names with spaces was stored wrong on event, connecting
- Fixed: Slotlimit was a bit buggy.
- Fixed: whitelist file with format ansi and utf-8 (with bom, "byte order mark") missed one line.
- Fixed: Some typos, "i bet there still are some".
- Fixed: And more misc code cleanup, not worth going into detail.
- Added: Extension check on the BEServer file.
- Added: --enc switch for startup. "use: chcp ,in cmd to get your active char table" default for bec is 65001. "experimental"
- Added: log plugins that starts.
- Added: Timeout setting in [misc], back by user request.
- Added: Exception block to rss plugin.
- Added: Status xml generator plugin.
- Added: Connectionlimiter plugin. this works the same way floodcontrol2 did in version 1.48
- Removed: LogDir removed from the config. the log directory will instead be same as your config name.
- Changed: Some varnames has been changed. will affect plugins.
# Note due to the varname changes. plugins such as the ts3 needs to be replaced. if your using 1.58 or lower.
# You only need to replace -- > (( __init__.py )) < --
*** V 1.58 ***
- Added: Simple Rss News Plugin. will show players the 10 latest Rss News titles from ArmaHolic every 1.5 hour.
- Added: support for _name_ placeholder in <text> tag on kick commands. check commands.xml for example.
- Added: support for _name_ placeholder in <text> tag on ban commands. check commands.xml for example.
- Added: support for _name_ placeholder in <text> tag on warn command. check commands.xml for example.
- Added: More error logging on sertan things.
- Added: --dsc reimpemented. but if you have an reporter account it will be disabled when using --dsc
- Fixed: some prints.
- Fixed: some encoding issues.
- Fixed: loadcommands was broken
- Fixed: loadadmin was broken
- Removed: custom reason (!r blah) been removed on kick and ban command.
*** V 1.57 ***
- Added: Check on Rcon password for none ascii chars.
- Added: Check for rconpassword line in BeServer.cfg.
- Added: Players who join with a name that match a command name will be kicked off.
- Fixed: Minor issue in prosessing players function.
*** V 1.56 ***
- Fixed: Banfile nameing case issue.
- Fixed: Rconpassword line with spaces.
- Fixed: Duplicate message for lobby idlers
- Fixed: Ts3 plugin was missing a setting that caused errors + fixed some other small issues.
- Added: Check for NoneType on some data, hopefully encodig error will be gone.
*** V 1.55 ***
- Changed: psutil from 0.3.0 to Version 1.0.1.
- Fixed: exception handling for new psutil.
- Fixed: uptime command.
- Added: BE Bans can be listed in plugins by using: instance._Bec_BeBans. You need to request the list with the command 'bans' first
- Added: Rcon Admins can be listed in plugins by using: instance._Bec_RconAdmins. You need to request the list with the command 'admins' first.
- Fixed: Ts3 plugin had a minor error. replace your "__init__.py".
*** V 1.54 ***
- Added: extra checks on the process check.
- Fixed: io_lock's was not released, io_lock's removed, plugin will be none blocking. You only have to replace the Ts3Classes.py file.
- Added: permission error logged to the error log.
*** V 1.53 ***
- Added: Permission check on the armaserver process. some people only got wait for host. Bec will now print out if its a permission problem thats causig it.
psutil will raise an psutil.error.AccessDenied excption if there is a permission problem.
- Improved: Servercheck startup function did in some cases hang on startup.
- improved: Plugins can be configured to only start up on N servers. check the Only_X_Server example on how this is done.
- Improved: Ts3 plugin had no support for diffrent settings and was limited to one Ts3 server for all Bec's instances. This is Fixed. reconfigure your ts3 plugin.
- Removed: ConsoleColor. Chattext and Be messages will not be affected.
- Fixed: SlotLimit was broken too.
*** V 1.52 ***
- Fixed: Startup issue with the Servercheck funtion. "hopefully its working for everybody now.".
- Added: Simple Gui Plugin example.
- Changed: Ts3 Plugin. some minor changes.
*** V 1.51 ***
- Added: Error message to the console if players cant not receive private messages.
- Fixed: Config option ServerExeName was ignored.
- Fixed: -v was broken.
- Fixed: --dsc this parameter will not be implemented again. --dsc can not be supported while there is no change in BE for arma2/arma3
Bec needs to know what server its connected too so the reporter function knows where to check guid/report battleye hack.
*** V 1.50.0 ***
- Changed: Ts3 function taken out of main code, rewritten and provided as a plugin instead. it still easy to configure and change to sute your needs.
- Removed: Heartbeat function will no longer be supported. there are other better ways to do the same job.
- Removed: Timeout config value.
- Added: Examples on howto create plugins
*** V 1.49.9 ***
- Added: support for custom message for slotlimit kicks.
- Removed: --dsc will no longer work
- Added: plugin support.
- Removed: floodcontroll
- ++ More Major changes.
*** V 1.49.8 ***
- Fixed: Some typos was reported, now fixed.
- Added: Ability for players/users to notify ts3 admins. example ("!tsadm hey. someone is hacking on the server."). Check the commands & ts3 example files for changes.
- Improved: reconnect function optimized a bit more.
- Added: Passing argument to external scripts. this does not apply for the scheduler.
Example: !math 1+2 , !save "save this text to my file" myfile.txt
This is only limited tested so some bug might occure.
*** V 1.49.7 ***
- Fixed: !ainf listed all admin who had been connected instead of only online admins.
- Improved: ts3 messages will now also contain ip address.
- Fixed: Using !kid & !bid could sometimes kick, ban wrong players.
- Added: loadadmins to the command file. reloade the admin file ingame if it has been changed after bec restarted, See commands.xml for example
- Added: loadcommands to the command file. reloade the command file ingame if it has been changed after bec restarted, See commands.xml for example
*** V 1.49.6 ***
- Fixed: some variables was misspelled that caused errors. :\
*** V 1.49.5 ***
- Fixed: some issues with ts3 logging.
- Fixed: ts3 thread shutdown was not done correctly.
- Fixed: there was a bug in the reporting_failure function.
- Changed: Some player data is initialized earlier.
- Added: more kick types on ignore for ts3 admins. no need to informe admins about "client not responding" kicks, etc.
*** V 1.49.4 ***
- Added: Custom Whitelist message, See Config_Example.cfg file for more info
- Added: Channel colors.
- Changed: The Ts3-Queryer has been rewritten. due to this some functions has been taken out. might be reimplemented at some time..
See Ts3_Example.xml file for more info..
- Fixed: Timeing issuse with high interval schedules. Example : spambot. "schedules set on loop with 1 sec".
- Improved: Scheduler time methode-2 "HH:MM" changed to "HH:MM:SS", you will need to edit your xml time value so it includes the SS.
See Scheduler_Example.xml file for more info
*** V 1.49.3 ***
- Changed: config setting, Color to ConsoleColor
- Changed: Min interval value in ts3 can be set to 30 sec instead of 60.
- Added: config setting, ConsoleHeight, set the default height of Bec's console window
- Added: config setting, ConsoleWidth, set the default width of Bec's console window
- Fixed: Ts3Queryer.. found a problem that caused it to lock up the main threat at times. hopefully no more freez.
- Fixed: Bec could sometimes hang on "Requesting login" if too many Rcon client are connected to the BeServer or for other reasons.
6 attempts with 10 sec between each login-try will be done. if that fails bec will autoquit.
- Optimized: removed unused librarys. reduced overall size with 0.5MB
*** V 1.49.2 ***
- Changed: Channel tag must be set with channel id "Cid", check the example file for more info.
- Fixed: Chat restriction was showing wrong warning counting for all channels except global.
- Added: Ts3 color & bold style on pm text to admins
*** V 1.49.1 ***
- Added: Channel tag
- Added: Name Tag for the queryer.
- Added: Interval tag for the ts3 query loops
*** V 1.49 ***
- Fixed: Yet another attempt to fix the heartbeat. No more updated on this as its working for me on several servers and setup's.
For thouse with issues. a schedule with a bat/cmd script can be created that merges the ban files every 30 min or so.
- Fixed: Whitelist was missing a break on a for loop check.
- Fixed: Whitelist did not check guids of players who was alrady connected.. "ie: bec restarted during the mission"
- Fixed: BadWords warnings did not count while players was in lobby
- Added: switch --dvc to disable check for newer version.
- Added: More error message when parsing the Admin,Command,Scheduler and Ts3 xml file(s).
- Changed: Minimum value for KickLobbyIdlers reduced from 180 to 90 seconds
- Improved: Reporting function.
- Added: Simple Ts3 server query for, pms and pokes regarding, lobby idleing, bans, game hacks.
Note. this in in wip atm and things may change.
*** V 1.48.2 ***
- Added: More error messages on startup failures.
- Added: Support for maxping to the scheduler system. Set your server to allow higher ping when your timezone goes to sleep ;)
- Fixed: Heartbeat was only working on game hacks. should now work on admin ban's aswell.
- Fixed: The command (<name>!upt</name>||<cmd>uptime</cmd>) could cause errors when the --dsc option was provided.
*** V 1.48.1 ***
- Major Hotfix -
- Fixed: Commands and other things did not work if bec was (re)started when there was admins/players on the server. it was a major bug
- Fixed: a few typos.
- Changed: psutil to V 0.3.0 as requested by some wine users. altho no one gave response to if --dsc worked or not
*** V 1.48 ***
- Added: Logging on some errors.
- Fixed: Reporting should now also send BattlEye Hacks as well as GameHack to the DB.
- Fixed: Heartbeat, should now commit on Admin Ban.
- Fixed: WhiteList files may have comments in them now. add a space after the guid: abcdef0123456789 Guid of Nils Pils.
- Fixed: Admins who was listed in admins.xml and not in the WhiteList file was kick. Admins no longer need to be whitelisted.
It make sense to include the admins as whitelisted.
- Changed: No longer need to specify FloodControl1 or FloodControl2. if only FloodControl is specified its assumed "type 1" is in use.
To use "type 2" also specify FloodSampleTime and FloodLockTime
*** V 1.47.1 ***
- Hotfix -
- Fixed: some print commands was not removed in release 1.47.
- Changed: switch --dsc will not disable config values if the ip is set to 127.0.0.1.
Due to problems with getting the module psutil 0.6.1 import properly with bec, it will still use 0.2.0. will look deeper into this when get more time.
This changed might work for people who tries to run Bec under wine. but can not confirm it.
*** V 1.47 ***
- Added: WhiteList File Support. one guid per line
- Added: SlotLimit. can be used to reserve slots
- Added: switch --dec to disable external commands for commands.xml and scheduler.xml
- Added: switch --dsc to disable process check of the arma server pid, note all config values except the one's in the bec block will work.
- Added: Implemented Antispam function.
- Added: Support for loadevents to the scheduler system.
- Added: New function to the scheduler. delay on startup for jobs. check example's for more info.
- Added: Group id 100 as public groupnumber for commands, available commands are: help, pinfo, ainfo and uptime, check commands.xml example.
- Fixed: "custom reason" argument "!r" on kick and ban was not working properly.
- Fixed: makeroom ("!mr") was able to kick admins.
- Improved: Some code with LobbyKick improved.
- Improved: Some update with Heartbeat.
- Improved: Titlebar contains more info.
- Improved: some fixes here and there.
- Improved: Lines written to the to Reporting_Failures.log file will be scrambled to prevent a exploit.
+ some more small stuff..
*** V 1.46 ***
- Fixed: Some typos.
- Added: Support for command #reassign and #mission to scheduler system.
- Added: Text "BEC" as part of the kick text on all automated kick functions
- Added: New tag to admin file called groupname, check admin example file
- Added: Parameter ChatChannelFiles, takes a bool. will create one additional file for each channel, check config example file
- Added: Warnings to lobbplayers when about 30 sec remaining. will only work if KickLobbyIdles is in use
- Added: New ways to use flood control. there are now two types to select from. check docs for more info
- Changed: IngoreChars to IngoreChatChars. edit your configs if you use this.
- Improved: some code improved in general for many functions..
*** V 1.45 ***
- Fixed: Schedules file with none ascii chars causes errors.
- Fixed: !help will only show commands that are available for the group the admin is in.
- Added: Parameter DisallowPlayerNameChars. auto kick players with unwanted chars in their nick. example: [ |^m §0 (0ol ]
- Added: Parameter MaxPlayerNameLength. set max length of player names. min value is 3. auto kick player connecting with longer than set.
- Added: Run external bat/cmd scripts from the chatline.
- Added: Command uptime to command file. show server uptime.
- Improved: New format for time in the scheduler file. make sure to read up on it.
As usual!.. read the docs for how-it it all works
*** V 1.44 ***
- Improved: All error messages during startup from [misc],[reporter],[heartbeat],[chatrestriction] is logged to the error file
- Improved: Scheduler system. it now also include days.
- Added: Support for command #restart,#lock and #unlock to scheduler system.
- Fixed: Some code in Heartbeat
- Fixed: Loadscripts was misspelled in the scheduler system.
- Fixed: Guids with (OK) and (?) on end
- Removed: Patch checks for bec & bec files. admins need to be responsible for their own security
*** V 1.43.1 ***
- Changed: some changes done to how it check the paths.
*** V 1.43 ***
- Security: Bec will no longer be able to run from inside the server directory due to security reasons
- Security: Warn on startup if the admin file is pointed to the server directory/subdir..
- Security: Warn on startup if the command file is pointed to the server directory/subdir.
- Fixed: Minor bug in flood control..
- Fixed: if arguments to !sht (shutdown) was misspelled. "abort & info" the server would instant shutdown.
- Added: Scheduler system. define schedules : http://ibattle.org/install-and-configure/setting-up-the-scheduler/
*** V 1.42 ***
- Improved: Exception handling
- Improved: Info on Error messages
*** V 1.41 ***
- Fixed: Relogin, will try max 3 attempts before it auto quits, will not re-try if the socket is closed.
- Fixed: a sockets was not closing after the its request.
- Fixed: Newline was not added lines in error file.
- Fixed: Never ending loop in servercheck.
- Improved: Reduced numbers of threads.
- Improved: Error message on some errors.
*** V 1.40.2 *** HotFix
- Fixed: 1.4x Broke Language filter.
*** V 1.40.1 *** HotFix
- Fixed: Issue with shutdown command. using !sht abort , !sht abort , !sht N did not shutdown the server
*** V 1.40 ***
- Fixed: KickLobbyIdlers. would kick idlers after 180 sec even if not defined in the config.
- Fixed: Flood Control was not logged to BElog file when it was activated/deactivated.
- Improved: More encoding fixes.
- Improved: Shutdown command can now use time !sht 5 will shutdown the server after 5 sec. !sht info to see how long left
- Improved: Code in general optimized.
*** V 1.39 ***
- Added: Error logdir.
- Added: Future support for say in lobby warnings. "just waiting for new A2/Oa patch to enable this"
- Improved: Support for private messages with say. !say name ! text
- Improved: code for chatrestriction.
- improved: exception handling on unicode errors.
*** V 1.38 ***
- Added: Simple Connect/Flood Control. will lock server based on N numbers of players in lobby,
and unlock it when the number gets below N player. "when players join the mission/is fully ingame"
so server can possess data of players before it unlocks again
- Added: Autokick lobby idlers thats takes up a slot and not playing. min timeout is 180 sec.
- Added: support for Say command in the command file
- Fixed: Yet another encoding issue found and hopefully resolved.
** NOTE **
A players is considered to be in the lobby until hes/she is fully ingame.
A player sitting in example the briefing screen will be seen as if the player is in the lobby.
A players loading will also bee seen as if they are in the lobby.
*** V 1.37 ***
- Fixed: Version checker did print out wrong version on updates.
- Fixed: Pinfo was showing players join date wrong.
- Fixed: Ainfo was showing disconnected admins as being online.
- Removed: Pcapy removed. there will be a standalone app for thous who want to log markers.
- Improved: Unnecessary librarys taken out. size reduced in general.
- Improved: Program Packed with UPX to reduce size more.
*** V 1.36 ***
- Fixed: Added a error check on playerconnect. in some cases exception keyerror occurs
- Fixed: Issue with looking for the BEServer file in some cases
- Added: More error checking for admin.xml file. blocks containing error will be ignored unless its a parsing error
- Added: More error checking for command.xml file. blocks containing error will be ignored unless its a parsing error
*** V 1.35 ***
- Fixed: Config file should now work with ansii, utf8 Without BOM and utf8 With BOM.
- Fixed: Bug in Server startup check.
- Added: New Command. makeroom. kick N players who joined last to make room.
- Added: New Command. help. !help , !help command shows available commands/ description of a command
- Added: New Command. pinfo. will show general info about a player. name, id, jointime and ip.
- Added: New Command. ainfo. will show Bec admins that are online.
- Improved: Admin files do no longer needs to be in the config directory. Custom path can be set.
- Improved: Command files do no longer needs to be in the config directory. Custom path can be set.
- Improved: NickFilterFile parameter.
- Improved: WordFilterFile parameter.
- Changed: Password and BeBanFile is now replaced with BePath instead
- Changed: Command.xml file has one extra tag call desc. this it to contains help info about the command.
*** V 1.34 ***
- Fixed: some log strings cleanups.
- Fixed: problems with encoding when 2 or more char types was used. example: йфяæøå
*** V 1.33 ***
- Fixed: recursion depth problem in recheck_gban
- Fixed: recursion depth problem in check_failedreports
- Improved: Minor changes to config handler.
*** V 1.32 ***
- Fixed "mission" commands. some missions with names longer than 48 chars didnt work.
- Removed: "Motd". it was really annoying as it spammed up the console and other rcons connected.
*** V 1.31 ***
- Fixed: Bug in a guid recheck function due to Guid not shown in Lobby.
error is now ignored.
- Added: Motd
- Changed/Improved: Warnings are reset once a player goes back to lobby.
*** V 1.30 ***
- Added: Optional: IgnoreChars parameter to [Misc].will be used along with AsciiChat. Sometimes you want to allow some symbols not listed in the Ascii table. example æøå
- Added: more internal logging functions.
- Fixed: small bug in unwantednames check.
- Fixed: Tmp admins can no longer give a Perm admin warning..
- Fixed: Missing timeout on retrys for hack reporting.
- Fixed: Admins can not give them self a warning with warn command.
- Improved: Config file can be saved in ansii or utf8 format. utf8 with bom is not supported for config file yet.
- improved: command "warn" can have a custom text set in the Commands.xml file in the Text tag. take a look in the Commands_Example for a example.
- improved: If guid check fails or is not done on a player during connection, it will be checked later
- improved: "bad language warning" gives feedback to which word was triggered to the player.
- improved: some code in general optimized.
*** V 1.21 ***
- Fixed: Mass warning for no reason should not happened anymore if warning system is enabled
- Fixed: Bad language filter reworked, but it will be limited due to the clbuttic problem.
- Fixed: The socket that checked guids was not closing properly after it was done with its request.
- Improved: Reporting_Failures.log function. file will be deleted upon startup if its empty.
*** V 1.20 ***
- Added: Verify user account upon startup if reporter block is enabled.
- Added: Info on the titlebar. useful when running multiple becs.
- Added: Announcement of admins that connects. "atm. This is only shown to players who are ingame"
- Added: Broadcast info from some commands to global. example maxping, lock ,unlock are shown to players.
- Added: Optional: parameter Timeout, define custom timeout on startup in seconds. Default is 30 if not defined
- Added: Optional: parameter to allow only ascii on chat / True|False
- Added: Optional: parameter for bad language on chat.
- Added: Optional: Warnings parameter.
- Added: New command warn, warns a player, this will only have effect if the "Warnings parameter" is set higher than 0
- Added: Function to add/remove temp admin.
- Added: Optional: chat restriction on channels if wanted.
- Added: Support for Marker logger, still a bit in wip. position is not logged for markers..
** Note to be able to use MapLogger you need to have WinPcap 4.x installed.
- Improved: Version Check is a bit improved.
- Improved: Config handler. this will have no real effect on the end user. but its done to ease up the dev process incases new config values need to be added.
- Removed: SpamProtection. it wasnt really any useful.
- Changed: every block in the config must start with uppercase. [Bec] not [bec] so on. you need to modify old configs.
+ some more small stuff..
*** V 1.10 ***
- Added: More internal logging functions.
- Added: Reporting Failure file. in case a hack report could not be sent the it's stored in a file, it will automatically re-upload when possible and clean up the file automaticly.
- Added: Usage of custom reason on the chatline "" example. !kpl name !r you been a badboy"". the kid and bid base commands does not support this option.
- Fixed: Missing newline on GameHack violations bans.
- Fixed: Hack Report function would not send reports due to wrong variable name.
- Fixed: Hack reports should not try to sent reports if reporting function is disabled.
- Fixed: If a ban was added manually it was deleted due to wrong usage of writebans.
- Fixed: Tailban bug, small issue tailing ban files.
- Fixed: None ascii chars as reason caused errors. If reason is None ascii the default reason is set to: Admins Decision!
- Changed: Color on print lines are removed. in favor of custom colors. Color Scheme can be defined in the Misc block by adding: Color = XX
*** V 1.00 ***
- Added: AntiSpam chat function.
- Added: NickFilterFile
- Changed: some config settings.
- Improved: Config handler. only bec block is required. [misc],[reporter] and [heartbeat] are optional.
- Fixed: Adjusted Bec to new BE version. 1.27 for usage of new command.
- Fixed: Ban bug, hopefully resolved. need more feedback on this tho.
- Fixed: ServerExeName had some issues.
- Fixed: utf8 issues with BOM.
- Some other improvements made to the code.
*** V 0.99.1 ***
- Fixed: Added hidden parameter for the config file incase server exe name is not arma2server or arma2oaserver
ServerExeName = YourArmaExeName.exe
*** V 0.99.0 ***
- Fixed: Support for Multi homing ! hopefully the issue is fully resolved now.
- Fixed: Some exit messages was missing their sleep before auto-exiting. so you never saw the message before it quit. normal timeout is 4 sec.
- Fixed: bidkick command changed to bid and will ban instead of kick. its needs a BE id to be able to ban. use #beclient players to get the list
- Fixed: Minor Colorscheme issues.
- Fixed: Some code was improved for Heartbeat
- Fixed: Cleanup in General in the modules and classes.
- Fixed: Compiling script to include some missing info on details of app.
- Added: kid command, will kick a player based on the Be Id
- Added: OPTION: AsciiOnly .auto kick players who uses None ascii chars in player name. example йфч.
this might do jobs for admins on pub servers easier. especially if they dont know how to type æøå or Cyrillic etc.
but negative is might piss of players. when set to false. it uses utf8 ^^
Note. players may still write with none ascii chars.
- Added: Splash. To disable splash. just rename or remove the splash.bmp file
- Added: Simple Icon on the exe
- Note bid and kid are base commands to be put in the Commands.xml file in the <cmd> </cmd> Tag
those two commands are only useful if the player has some chars you cant type.
you will need to use #beclient players to get the Id of the player
*** V 0.98.1 ***
- Added: Reimplemented Ip parameter, removing it broke multihome support.
*** V 0.98.0 ***
- Added: Version Check, Bec will Notify you on startup if there is a newer version out.
- Added: Simple Parser check on the config file. only valid format is ANSI
- Added: Param check on the config file. in case some parameters are missing it will notify you. this is not the same as the parser check
- Changed: Hack reports from older versions are refused. keep bec up-to-date for hack reporting to work.
- Fixed: If Bec was running as a service. in example Firedaemon. when the Arma server was shutdown Bec didn't shutdown the reactor in itself.
- Fixed: Timec error.
- Fixed: File set in BeBanFile parameter should not be defined in [heartbeat]. its ignored if set.
- Fixed: Lower ranked admin can no longer exec kick or ban on a higher ranked admin even if they have permission to execute the command.
- Fixed: Equal ranked admins can only kick each other.Ban possible, Also. no ban on your self is no longer possible
- Removed: Ip as a parameter.. Hard coded ip 127.0.0.1
- Removed: StartTime as a parameter. Hard coded 15 seconds.
- Some other cleanup
*** V0.97.1 ***
- Fixed to get correct socket of arma server. there was a small bug in getting the correct one.
*** V 0.97.0 ***
- Improved: New better function to check for the arma processes.
- Improved: Better Startup procedure. Bec will now first wait for the server exe, then wait for the server to create a socket before trying to login.
in older versions of Bec, it tried to logon once it had found the server running. this caused problems since the socket was not always ready.
- Removed: deprecated parameter "serverparampath", people have a hard time understanding it anyway.
- Fixed: Relogin function was a bit messed up. Note. Bec will only relogin on corrupt data or if the client is no longer authorized
- Fixed: Socket did not close when no connection was established or possible to make... it just hang.
*** V 0.96.0 ***
- Added: Console Colors. should work from win 2000 server and up.
- Added: Logging of execution on commands, it was only printing it to console before.
- Added: Tail of own Be Ban file.
- Added: Reload bans on Be Ban file Changes.
- Added: local heartbeat function. if a server is running multiple dedi servers, you can make bans work on all the servers.
Heartbeat files are set by defining paths to your befiles and only new added bans are added. "its not a mirror"
*** V 0.95.0 ***
- Chat stored into separate file
- Be event-file only log Be events now. not clutter with chat anymore
- Added: a check on names.
- Added: Checking of Guid to a central database
- Added: Hack reporting function to central database
note. to be able to use the cbdb "central ban database" you need an account.
*** V 0.94.0 ***
official release.

View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!-- This file is only provided as an example file and might not sute your needs/demands/taste. -->
<BEAdmins>
<!--
Define admins.
name : name of the admin. do not need to be ingame player name.
guid : match player guid.
group : admin level. value must be a number.
groupname : name of the group the admin is in, can be named anything. if groupname is empty. it will not advitised when you connect
Note: keep <..id= > in order for your admin block. else parsing the file will cause errors. start it at 0 and increment it by 1 for each admin you add.
http://www.ibattle.org/install-and-configure/define-admins/
-->
<admin id="0">
<name>=RAV=MusTanG</name>
<guid>2259dae0ce26ba074caba7ede760e0fa</guid>
<group>0</group>
<groupname>Super Admin</groupname>
</admin>
<admin id="1">
<name>Daarken</name>
<guid>63a202fb7c8d640f35a6c1a35b5169e1</guid>
<group>100</group>
<groupname>Reserved Slots</groupname>
</admin>
</BEAdmins>

View File

@ -0,0 +1,26 @@
arsehole
asshole
bastard
blowjob
bollocks
boobs
bugger
clit
cock
cunt
dick
dildo
fuck
gayboy
gaylord
lardarse
lesbo
lesbe
lezbe
masturbate
nigga
nigger
paki
slut
whore
фда

View File

@ -0,0 +1,48 @@
btk
mgt
deadz
npg
iniquity
teamc4
utcity
biergarten
s7epoch
riotcontrol
hightimez
mydayz
outlaw
ecg
ourdayz
firecock
cantina
mdb
bruuudis
amnesia
kongari
kongaribacon
zenithovmen
zenith
gs96
atd
legion
bigsl
umadbro
mad
s7
fagget
faggot
fuck
fuc
fucker
fuck3r
shit
cunt
asshole
nigger
niger
n1gger
n1gg3r
go fuck yourself
god dam
god
alla

View File

@ -0,0 +1,497 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!--
This file is only provided as an example file and might not sute your needs/demands/taste.
Web Doc : http://www.ibattle.org/install-and-configure/define-commands/
Define In-game Commands
name : The name you want to call your command!. DO NOT START YOUR NAME WITH #
group : The permission level needed to execute the command!
cmd : The Rcon command. Root command. arguments are not passed here!
time : leave empty except for ban commands!
text : Used as reason for kick/ban commands. but also to set default values for example maxping command!
desc : Used to describe the command. will be used in the help system
###############################################################################################################################
Note: Keep the id= in order for your "<command id=X>" block. else parsing the file will cause errors. 1st command starts with 0
Note: Do not start you command with # since its used by the game engine.
Note: Group number 100 is for public use. be careful.. all players may execute commands set to group 100.
Note: The text tag may be cut off if its too long. this is due to a limitation with Battleye.
###############################################################################################################################
Supported commands in the <cmd> </cmd> tag are:
########################
# Arma server commands
########################
#Missions
#Mission
#Reassign
#Restart
#Shutdown
#Lock
#Unlock
########################
# Be commands.
########################
kick
ban
maxping
say
########################
# Bec commands
########################
kid |___. same as kick and ban but. used beid insetead of names: !kid 0, !bid 3 , Use "#beclient players" to get hold of the Id. DO NOT USE "#USERLIST" thats a diffrent thing.
bid |
grant
degrant
warn
makeroom
help
pinfo
ainfo
uptime
external
loadadmins
loadcommands
-->
<BeCommands>
<!--
Shutdown the server.
!cmdName : Instant shutdown.
!cmdName N : set a timer in seconds before shutdown,
!cmdName abort : abort current shutdown procedure.
!cmdName info : display how long left to shutdown.
Uses ArmA #shutdown command.
-->
<command id="0">
<name>!sht</name>
<group>1</group>
<cmd>#shutdown</cmd>
<time></time>
<text></text>
<desc>USAGE :: [!sht] or [!sht N] or [!sht info] or [!sht abort] :: INFO -> Shutdowns the dedicated arma server. use: !sht N, to set a timeout in Seconds before shutdown, !sht abort, to abort current shutdown, !sht info, to see how long left.</desc>
</command>
<!--
Open Mission selection meny.
Note:
An in-game ArmA Admin should be loged in before using this.
Executing this command without an admin logged in may resulting in getting stuck with a black load screen!.
Uses ArmA #missions command.
-->
<command id="1">
<name>!mis</name>
<group>1</group>
<cmd>#missions</cmd>
<time></time>
<text></text>
<desc>USAGE :: !mis :: INFO -> Show mission. Carefull with this command. an admin should be logged in with the arma interface. #login or gui if this is to be used</desc>
</command>
<!--
Restart mission.
Players keeps the same slot as he/she had before the restart.
Uses ArmA #restart command.
-->
<command id="2">
<name>!res</name>
<group>4</group>
<cmd>#restart</cmd>
<time></time>
<text></text>
<desc>USAGE :: !res :: INFO -> Restart mission with current player slot selection</desc>
</command>
<!--
ReAssing Player slots and restart the mission.
Players may not get same slots as they had.
Uses ArmA #reassign command.
-->
<command id="3">
<name>!rea</name>
<group>4</group>
<cmd>#reassign</cmd>
<time></time>
<text></text>
<desc>USAGE :: !rea :: INFO -> Restart the mission with new player slot selection</desc>
</command>
<!--
Lock down the server, No more players will be able to join the server..
If your server is password protected. it will also prevent players knowing the password from connecting.
Uses ArmA #lock command.
-->
<command id="4">
<name>!lck</name>
<group>3</group>
<cmd>#lock</cmd>
<time></time>
<text></text>
<desc>USAGE :: !lck :: INFO -> Locks the server. No one will be able to join.</desc>
</command>
<!--
Unlock the server. allow players to be able to connect again.
Uses ArmA #unlock command.
-->
<command id="5">
<name>!ulck</name>
<group>3</group>
<cmd>#unlock</cmd>
<time></time>
<text></text>
<desc>USAGE :: !ulck :: INFO -> Unlocks the Server.</desc>
</command>
<!--
Change to a new mission.
You need to know the filename but exclude the pbo extension.
Example:
!cmdName abc.vr
!cmdName TestMission.Stratis
!cmdName co40_SomeGame.Altis
Uses ArmA #mission command.
-->
<command id="6">
<name>!cm</name>
<group>4</group>
<cmd>#mission</cmd>
<time></time>
<text></text>
<desc>USAGE :: !cm mission filename :: INFO -> Change Mission. you need to know the filename but exclude the pbo extension.</desc>
</command>
<!--
Change the maxping value.
Set the ping limit on the server. Players with a ping higher than the limit will be kicked off the server.
!cmdName : Will set what is defined in the <text> tag as the new maxping limit.
!cmdName N : Will set a new maxping limit to N milliseconds.
Uses BE maxping command.
-->
<command id="7">
<name>!mp</name>
<group>3</group>
<cmd>maxping</cmd>
<time></time>
<text>150</text>
<desc>USAGE :: [!mp] or [!mp N] :: INFO -> Set a maxping limit on the server. N is the value in milliseconds, default = 150</desc>
</command>
<!--
Ban a player
The <time> tag defines how long the ban is last.
The time value is in minutes.
Value 0 is permanent ban
The <text> tag defines the ban reason
There are two special words that can be used in the <text> tag.
_name_ and,or _time_
if _name_ is used in the reason text, it will replace _name_ with the name of the admin who executed the command.
if _time_ is used in the reason text, it will replace _time_ with the date when the player can come back.
Uses BE ban command.
-->
<command id="8">
<name>!ban</name>
<group>0</group>
<cmd>ban</cmd>
<time>518400</time>
<text>You got a ban by : _name_ , come back _time_</text>
<desc>USAGE :: !ban name :: INFO -> Ban a player.</desc>
</command>
<!--
Kick Command
The <text> tag defines the reason the player will be given.
Like the ban command, the kick support the _name_ place holder in the reason text.
Uses BE kick command.
-->
<command id="9">
<name>!kick</name>
<group>3</group>
<cmd>kick</cmd>
<time></time>
<text>Decision By Admin: _name_</text>
<desc>USAGE :: !kick name :: INFO -> Kick a player.</desc>
</command>
<!--
Special Custom Commands is used with #beclient players to get players id
This can be usefull if you need to kick example a russian named player. "if you dont know how to type in cyrillic"
Example: #beclient players ... !bid 15
bid and kid does not support the _name_ place holder
Uses BE ban or kick commands
-->
<!-- Ban based on BeId -->
<command id="10">
<name>!bid</name>
<group>0</group>
<cmd>bid</cmd>
<time>0</time>
<text>Admins Decision!</text>
<desc>USAGE :: !bid id :: INFO -> Kick a player based on the BEID. use #Beclient players to get the id.</desc>
</command>
<!-- Kick based on BeId -->
<command id="11">
<name>!kid</name>
<group>1</group>
<cmd>kid</cmd>
<time></time>
<text>Admins Decision!</text>
<desc>USAGE :: !kid id :: INFO -> Kick a player based on the BEID. use #Beclient players to find the id.</desc>
</command>
<!--
Give a warning to a player
The Warnings parameter in [Misc] section in Bec config file must be higher than 0 for this to have any effect.
-->
<command id="12">
<name>!warn</name>
<group>3</group>
<cmd>warn</cmd>
<time></time>
<text>This is a Warning given by admin: _name_</text>
<desc>USAGE :: !warn name :: INFO -> Send a warning to a player and increase the warn-counter.</desc>
</command>
<!--
Grant a player tmp admin permissions
The <text> tag defines the group level for the tmp admin.
Tmp admin's will be able to execute all commands in the group level you set him/her too.
-->
<command id="13">
<name>!ata</name>
<group>2</group>
<cmd>grant</cmd>
<time></time>
<text>4</text>
<desc>USAGE :: !ata name :: INFO -> Add a temporary admin into group 4.</desc>
</command>
<!-- Remove tmp admin permission -->
<command id="14">
<name>!rta</name>
<group>2</group>
<cmd>degrant</cmd>
<time></time>
<text></text>
<desc>USAGE :: !rta name :: INFO -> Remove temporary admin.</desc>
</command>
<!--
Make room for a other player, kick last player(s) based on connect time to the server.
Note:
Do not use this if you have restarted Bec during a server session / mission while there was player online.
Reason is that Bec will no longer have their correct connect time.
-->
<command id="15">
<name>!mr</name>
<group>2</group>
<cmd>makeroom</cmd>
<time></time>
<text>Making Room For Members</text>
<desc>USAGE :: !mr N :: INFO -> Kick N numbers of player based on join time. last joined players will get kicked.</desc>
</command>
<!--
Show basic player info
Will send a private message back with info about the requested player such as:
Player: Name | Beid: N | Joined: 12:00:00 12.12 | Ip: 127.0.0.1 | Guid: 1234567898cb748f813a62af1e52579a
-->
<command id="16">
<name>!pinf</name>
<group>2</group>
<cmd>pinfo</cmd>
<time></time>
<text></text>
<desc>USAGE :: !pinf name :: INFO -> Show player info. Beid and join time.</desc>
</command>
<!--
Show admins online
Sends back a private message with a list of Bec admins online.
-->
<command id="17">
<name>!ainf</name>
<group>100</group>
<cmd>ainfo</cmd>
<time></time>
<text></text>
<desc>USAGE :: !ainf :: INFO -> Show Admins online.</desc>
</command>
<!--
Reload the admin file
If you have edited your admin file you can make Bec reload the data instead of restarting Bec.
-->
<command id="18">
<name>!raf</name>
<group>0</group>
<cmd>loadadmins</cmd>
<time></time>
<text></text>
<desc>USAGE :: !raf :: INFO -> Reloade the admin file.</desc>
</command>
<!--
Reloade the command file
If you have edited your commands file you can make Bec reloade the data instead of restarting Bec.
-->
<command id="19">
<name>!rcf</name>
<group>0</group>
<cmd>loadcommands</cmd>
<time></time>
<text></text>
<desc>USAGE :: !rcf :: INFO -> Reloade the command file.</desc>
</command>
<!--
Show the current server time.
This will show the local time on the server not the client time.
It can be useful for players to determine the time zone of the server.
The command will send back a private message to the player.
Server time : 02:41:51 18/12 - 2014
-->
<command id="20">
<name>!time</name>
<group>0</group>
<cmd>systime</cmd>
<time></time>
<text></text>
<desc>USAGE :: !time :: INFO -> Show server time.</desc>
</command>
<!--
Show the server uptime
This will show how long the server has been running and when it was started (Local Server Time)
The command will send back a private message to the player.
Server Uptime : 8:21:34 ~ Started : 2014-12-17 18:28:32
-->
<command id="21">
<name>!uptime</name>
<group>100</group>
<cmd>uptime</cmd>
<time></time>
<text></text>
<desc>USAGE :: !uptime :: INFO -> Show Server Uptime.</desc>
</command>
<!--
Show basic help
This will list up all commands the admin/player is allowed to execute.
If this is set to group 100 Normal players will be able to see all commands in group 100 ("Public commands")
-->
<command id="22">
<name>!help</name>
<group>100</group>
<cmd>help</cmd>
<time></time>
<text></text>
<desc>USAGE :: [!help] or [!help !command] :: INFO -> Use help to show available commands.</desc>
</command>
<!--
Send a pre-defined text message to player(s)
Note about <time> tag.
If set to 1, it will send the message back as a private.
If you want it to be a global message for all players leave the tag empty.
-->
<!-- send a private message with basic info to the admin/player who executed the command -->
<command id="23">
<name>!info</name>
<group>100</group>
<cmd>say</cmd>
<time>1</time>
<text>Use !help to get help, visit our webpage for more info.</text>
<desc>USAGE :: !info :: INFO -> Send a private message with general info.</desc>
</command>
<!-- group 5 admin may send a global message to all players. -->
<command id="24">
<name>!notify</name>
<group>5</group>
<cmd>say</cmd>
<time></time>
<text>The Server will be restart after this mission</text>
<desc>USAGE :: !notify :: INFO :: Sends global message to all player</desc>
</command>
<!--
External scripts
Note:
The 1st Argument Passed to a External script is always the Username "Hardcoded"
The 2nd,3rd,4th.. and so forth are separated by spaces.
-->
<command id="25">
<name>!math</name>
<group>2</group>
<cmd>external</cmd>
<time></time>
<text>Config\Script_Example.bat</text>
<desc>USAGE :: !math Int+Int :: INFO -> Do simple bat math!.</desc>
</command>
</BeCommands>

View File

@ -0,0 +1,183 @@
Frequently asked questions about the scheduler!
----------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------
Q: I don't really understand the two time formats.
What's this hhmmss and hh:mm:ss all about?
A: When we are dealing with Bec time system there are two format and they behave very differently in what they do.
To say it simple. hh:mm:ss is for a specific time of the day and this is set in military time.
so example 18:00:00 is the same as 6 Pm and 06:00:00 is 6 Am.
(Bec inputs its range in 00:00:00 to max 23:59:59) for this format.
Now this other format hhmmss works a bit differently and needs a bit more explaining.
Its basically a countdown format where you divide it up in three sections. [HH] , [MM], [SS]
The first two are the hours. the middle two are the minutes and the last two are the seconds.
(Bec inputs its range in 000000 to max 999999) for this format.
Example 010101 means the job is to be run after 1 hour, 1 minute and 1 second.
Where as example 101010 the job is to be run after 10 hours 10 minutes and 10 seconds
This can also be a bit confusing since you can specify the same "countdown" in several ways.
Example a job is to be run every 1 minute and 30 seconds can be defined two ways.
000130 or 000090
----------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------
Q: Why does none of my schedules work, been editing for hours for no use. :/
A: Because Bec is very strict when it comes to the Scheduler system, it does not tolerate any errors.
Check your Error log for errors, if you have as much as one error related to the scheduler, no tasks will work.
THE Scheduler.xml NEEDS TO BE PERFECTLY EDITED WITH CORRECT SETTINGS FOR ALL TAGS. PERIOD.
Bec will write the errors both to the screen and to the error logfile.
If you can not check the console window then take a look in your Bec directory.
C:\YourPath\Bec\Log\CfgName\Error\BecError_Date.log
----------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------
Q: I want to have two messages running every 20 sec. but show them 10 seconds apart, how to do this?
A: You can do something like this
<job id='0'>
<day>1,2,3,4,5,6,7</day>
<start>000020</start>
<runtime>000020</runtime>
<loop>-1</loop>
<cmd>say -1 text 1</cmd>
</job>
<job id='1'>
<day>1,2,3,4,5,6,7</day>
<start>000030</start>
<runtime>000020</runtime>
<loop>-1</loop>
<cmd>say -1 text 2</cmd>
</job>
As you can see the job 0 will start after 20 seconds. but job 1 will start after 30.
Thus there will be a 10 second offset between the two messages.
18:00:20 : RCon admin #0: (Global) text 1
18:00:30 : RCon admin #0: (Global) text 2
18:00:40 : RCon admin #0: (Global) text 1
18:00:50 : RCon admin #0: (Global) text 2
----------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------
Q: I want to have a message run every N (Hour, Min, Sec) on my server but stop showing it after 10 times.
A: You can do something like this.
<job id='0'>
<day>1,2,3,4,5,6,7</day>
<start>010000</start>
<runtime>010000</runtime>
<loop>9</loop>
<cmd>say -1 text xyz</cmd>
</job>
This will start the job after one hour and show the message, it will continue to show the message nine times more, once each hour
----------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------
Q: How can i set a task to repeat itself within a give time frame of the day. ?
Example i want to show message: "Wherez My Beer Dude" every 15 min from 18:00:00 to 20:00:00
I don't want to create tons of jobs nor do i want to have same message repeating itself all time.
A: You can not stop a task at a precise time.
but we can do this somewhat. We will be using the hh:mm:ss in start tag and some simple math.
So. from 18:00 to 20:00 there is 120 minutes.. ok so we know the total minutes it should be active.
Now to do an estimate: 120 total min / 15 min interval = 8
So we are left with 8 times the messages should be show.
we just put this in our scheduler file
<job id='0'>
<day>1,2,3,4,5,6,7</day>
<start>18:00:00</start>
<runtime>001500</runtime>
<loop>7</loop>
<cmd>say -1 Wherez My Beer Dude</cmd>
</job>
We don't use loop 8, but 7 because we show the message once then repeat it 7 times more with 15 min apart.
In total 8 messages will be shown
----------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------
Q: I have a job that is set to use a external bat script. but it doesn't work.
A: There could be several reasons to it.
-*- Check List -*-
1 - Check your path in your scheduler.xml file, make sure its the full path and set correct.
Thought Bec should detect this if its wrong.
2 - if Bec is started up with the --dec parameter, it will be auto disabled.
(Bec.exe -f my_config.cfg --dec ) disables Bec from using external commands.
This is the case for both the Scheduler.xml and the Commands.xml file
GameHosters that are using Bec and not using (--dec) sets them self at a security risk.
But that another story and not really my problem.
3 - Try run it in CMD.exe, see how it works without Bec.
4 - Keep in mind that the CWD (Current Work Directory) your bat|cmd script or program will have is the same as your Bec install.
Let say the path you have your Bec installed is at (C:\Tools\Bec).
This is and will be the CWD of your script even if its located in C:\Scripts\Myfile.bat or some other place.
Depending on your script and what it does, you might need to set a new work-dir by editing your script with something like:
::--------------------
set NewCWD="C:\Scripts\"
cd /d %NewCWD%
do stuff
::--------------------
----------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------
Q: Which commands does the scheduler support?
A: The scheduler supports these commands in the <cmd> tag.
say -1 some text
loadbans
loadscripts
loadevents
writebans
maxping 250
#shutdown
#restart
#reassign
#lock
#unlock
#mission filename (without the .pbo extension)
systime
uptime
fortune
exit

View File

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<Scheduler>
<!-- this job will start after 10 minutes and run forever with a 1 hour and 30 minutes interval between the jobs -->
<job id='0'>
<day>1,2,3,4,5,6,7</day>
<start>000100</start>
<runtime>001000</runtime>
<loop>-1</loop>
<cmd>say -1 This server restarts every 4 hours</cmd>
</job>
<!-- this job will start after 30 seconds and will only run once. note that the runtime tag is ignored when loop is 0 -->
<job id='1'>
<day>1,2,3,4,5,6,7</day>
<start>000105</start>
<runtime>001000</runtime>
<loop>-1</loop>
<cmd>say -1 TEAMSPEAK IP ts3.eXpoch.INFO -- Donate @ paypal.me/DonkeyPunch</cmd>
</job>
<!-- this job will start after 15 seconds and will run every 25 sec. total times the message will be show is 6 times -->
<job id='2'>
<day>1,2,3,4,5,6,7</day>
<start>000110</start>
<runtime>001000</runtime>
<loop>-1</loop>
<cmd>say -1 Glitching/Cheating/Hacking/Abusing/Exploiting are all BANNABLE offenses</cmd>
</job>
<!-- this job will start at 07:00:00 (7 am) and will repeat itself every 20 min for 3 more time. in total 4 times. will run at set time for defined days -->
<job id='3'>
<day>1,2,3,4,5,6,7</day>
<start>000400</start>
<runtime>003000</runtime>
<loop>-1</loop>
<cmd>say -1 Please Support the server to keep it alive and the man behind the screen! paypal.me/DonkeyPunch</cmd>
</job>
</Scheduler>

View File

@ -0,0 +1,43 @@
@echo off
:: This is only provided as a simple example file
:: Passing Arguments to Scripts from ingame chat..
:: The 1st Argument Passed to a External script is always the Username "Hardcoded"
:: 2nd,3rd,4th etc are seperated by spaces.
:: !script X Y Z
:: !script "X" "Y" "Z"
:: X = arg2 , Y = arg3 , Z = arg4
:: Normally Bec will seperate arguments by spaces. but if you have aruments that has spaces in them. use quotes around them.
:: External Scripts will never return anything back to Arma.
:: EXAMPLE
:: Add two numbers together..
:: !math 1+2
set name=%~1
set /a var=%~2
echo Hello User: %name%
echo The Result of %~2 is: %var%
:: EXAMPLE
:: Write Text to a file..
:: Note the Quote around the string. if we pass a argument with spaces in it we want to remove the quotes.
:: Text and remove quotes.
set arg2=%~2
set arg2=%arg2:"=%
:: Filename
set arg3=%3
:: Now write to the file.
echo User: %~1 Wrote: %arg2% >> %arg3%
timeout 10

View File

@ -0,0 +1,40 @@
8539e01499f87083b3a25eb30041261c headless client
bcc3063dfd509dda3fc38f5803817f8c ArmaJesus
2259dae0ce26ba074caba7ede760e0fa Mustang
63a202fb7c8d640f35a6c1a35b5169e1 Daarken
9b0966dfafa6b55c1fef9865c5ce0b4f Flux101
b042d3073b72df7c926c6b1dd321b8c3 1toKill
362e3513c4987ebdf9eb8a9f644a7c3c MrMan
52f69fd75809984d0084293be1067191 Striker
73f62872411f35f80b2b0a5dac17bec5 Philly
866c65963192df1d0145f38df362724e Eisaak
874c87bff45eb35b865cd5b77c13866e IcyyMike
464e6d4d1748e5093d749953b8fae6a8 DustyBandito
5fc54a9bf95b46f1ee2225e17e1151d5 Ghostman
b93fb872dfe9f87a68b4c7ee766a67f4 Devastator
cd1aa3e33146805039503b68ecffb165 specops
7affebc112d0543b39cee64c288105a4 sneak
52f69fd75809984d0084293be1067191 lucinity
a7ed2c9b213edb8984521b8d26a273b0 Williams
115b9e16e3750e82b59adb25b2e88226 Oswaldcobble
3ed4eeddb53c84f379a2e43a4f20e4d6 GuidoDONE
abb7ca396fa622eb58091f1da0be4d6e HellbentDONE
6203932fe422d82e50214a1bde3782b6 ChupacabraDONE
2ca838fd8176e0860a7bd4ff2645b758 CarelessDONE
9b7566d895969f7513ceec22b5512f16 Jessedi
bc671337665fc1e1e2454bd5f87bbeed LoopsDONE
b4c921bbe1ac8896136aa82a9c33b62e MajewDONE
bc0c9aa700cdd7c288fc5c9b3110f3d1 paddster7DONE
2210fbcac6dadb9f7c499cd750946ad5 grantDONE
fcbdd14f2e5d8388bd1c82828c2764ee swampfoxDONE
f2c6e7369af68845757fefc988171952 fitipaldiDONE
e6e770e301870c69fb8ed4898eceee7e ApexpredatorDONE
457531ce72f14a897d4703d7a5471574 SgtMercDONE
13e88cc791a5831cb2dc2d009c8667e6 BlakeBladesDONE
edf0ea855203ecb15e5c509e1cc83c43 RedeyeDONE
6e453e622670d80e13352d6d50a2e214 SteeleEFBDONE
9844c16e3ad1439931f9ed49d47a9259 mythblaze
6ba17147f227cfa1461a3431908c552f JMonetgoofy
f8a8d26033d17b6ee41e2dee2e5379be Bill
2fc0db78506ccdbee1d115e32f769758 kyle
7703316de64b20500a3284badf90cb57 state

View File

@ -0,0 +1,214 @@
# This config file is only provided as an example file.
# Edit it to sute your needs.
# For more info on how to edit this file. use the Readme.txt file or visit http://www.ibattle.org/install-and-configure
#--------------------------------------------------------------------------------------------------------
[Bec]
#--------------------------------------------------------------------------------------------------------
# Set the ip to your server. normally 127.0.0.1 will be fine.
Ip = 127.0.0.1
# Set the port to the server. default port is 2302
Port = 2304
# Set the path to the BattlEye directory that is currently in use by the server.
BePath = C:\ExileServers\ExileAltis\battleye
# Set the path to your Admins.xml file containing your admins.
Admins = Admins.xml
# Set the path to your Commands.xml file.
Commands = Commands.xml
#--------------------------------------------------------------------------------------------------------
[Misc]
#--------------------------------------------------------------------------------------------------------
# Set which type of hacks that will be added to your banlist.
# 0 = none. 1 = GameHack. 2 = Battleye Hack. 3 = both GameHack & Battleye Hack.
# value 3 is set as default if this parameter is not defined.
Ban = 3
# Set the names of your custom ban files, Separate each file with "," (comma): file1.txt, banfile2.txt, newfile.txt
# If you do not use any custom ban files. delete this option or leave this option commented.
# This option will check ban files for changes and automatic do a loadbans file when a file gets changed
# Do not specify the default bans.txt file here.
# BeCustomBanFiles = Bans1.txt, file2.txt, file3.txt
# Set the height & width of Becs console window
ConsoleHeight = 45
ConsoleWidth = 165
# Only allow english chars.
AsciiNickOnly = True
# Only allow english chars to be typed on the chat. Note, Warnings must be enabled. 0 or more.
AsciiChatOnly = True
# If AsciiChatOnly is set True. you can define none english chars that will be accepted.
# You separate each char with a , "note you need to define lower and upper case of the chars."
IgnoreChatChars = €,£,æ,Æ,ø,Ø,å,Å,ö,ä,ü,ß
# Set the amount of warnings a player will get before kicked. -1 is disabled. 0 instant kick
# 1 == one warning on a bad word. next bad word results in kick
Warnings = -1
# Kick players who has listed chars in their name
# DisallowPlayerNameChars = []{}()0123456789
# Min length, kicks players who has to short name.
MinPlayerNameLength = 3
# Max length, kicks players who has to long name.
MaxPlayerNameLength = 25
# Set the name of your Arma3server.exe if it has been renamed from arma3server.exe to something else!
# if the exe has its original name. comment it out.
# DO NOT SET FULL PATH TO THE EXE FILE
ServerExeName = arma3server_x64.exe
# Set path to the file containing a list of bad words. Note, Warnings must be enabled. 0 or more.
WordFilterFile = BadWords.txt
# Set the path to the file containing whitelisted guids.
# WhiteListFile = WhiteList.txt
# Set custom whitelist kick message. Text must be in ascii letters. MAX 58 CHARS. BE only does ascii on messages
WhiteListKickMsg = Join TS3 or visit DONKEYPUNCH.INFO for more on Whitelisting
# Kick people with offensive names
# NickFilterFile = BadNames.txt
# Set the path to the Scheduler.xml file.
Scheduler = Scheduler.xml
# Kick people who are idleing in the lobby, kick will happen after given time, Min time is 90 sec. use 0 to disable this function.
KickLobbyIdlers = 0
# If enabled. Bec will create separate chat files for each channel along with the main file.
#ChatChannelFiles = false
# Set the amount of Normal players who can connect. Set it to -1 to disable it.
# If set to 0 it means only players who are listed in the Admins.xml, (or whatever you call it) will be able to connect to the server.
# Quick Example 1: server can holed 50 players. and you want to reserve 5 slots for admins. then set SlotLimit to 45.
# Quick Example 2: server can holed 50 players. and you want to reserve 5 slots for admins and 5 slots for friends. then set SlotLimit to 40,
# AND edit your admins.xml. ADD in all your frineds guid and remaining data, put them in group example 100. or whatever you feel likt.
# by using this method you can give some of your friends some access to some commands if you like or none.
# in general this is works like .Whitelisting X player slots for admins and friends, while leaving the remaining Y slots for public.
SlotLimit = 60
# Set the message people will get when they try to connect and is not whitelisted. Text must be in ascii letters.
SlotLimitKickMsg = OOPS Server Full! better Visit DONKEYPUNCH.INFO!
# The amount of time Bec will wait for the server to start up.
Timeout = 30
#--------------------------------------------------------------------------------------------------------
[Reporter]
#--------------------------------------------------------------------------------------------------------
# Reporter account. Fill in the username and password for your reporter account.
# GameHacks, BattlEye Hacks will be reported to a database. all players who connect will also be checked against this database.
# Set the Username for your account
#User = alfred
# Set the Password for your account
#Password = 123456
#--------------------------------------------------------------------------------------------------------
[ChatRestriction]
#--------------------------------------------------------------------------------------------------------
# Set max amount of chat lines a player is allowed to send for each channel.
# Going passed the number will result in kick. -1 is disabled, 0 instant kick.
# If the number is higher than 0 players will be sent warnings.
#Lobby = 30
#Global = 5
#Side = 7
#Group = 9
#Vehicle = 11
#Command = 13
#Commander = 15
#Direct = 17
#--------------------------------------------------------------------------------------------------------
[ChatSpam]
#--------------------------------------------------------------------------------------------------------
# Set max amount of chat lines per channel allowed within given time frame.
# Set the values to 0 to disable this function(s)
# Quick Example:
# Lobby = 5
# Lobby_Time_Lower = 10
# Lobby_Time_Upper = 15
# If the time between each new chatlines from a player is less than CHANNEL_Time_Lower the spam counter increases by + 1.
# Consider the CHANNEL (Lobby) as the spam counter.
# When a player has (CHANNEL - 1) in spam counting. a warning will be sent to whom it may concern.
# If the time between each new chatline from the player is Greater than CHANNEL_Time_Lower and Less than CHANNEL_Time_Upper the spam counter stay as it is.
# If the time since the last chatline is greater then CHANNEL_Time_Upper the spam counter is reset to 1.
# To get optimal result play around a bit with the values on your server.
#Lobby = 0
#Lobby_Time_Lower = 0
#Lobby_Time_Upper = 0
#Global = 0
#Global_Time_Lower = 0
#Global_Time_Upper = 0
#Side = 0
#Side_Time_Lower = 0
#Side_Time_Upper = 0
#Group = 2
#Group_Time_Lower = 1
#Group_Time_Upper = 3
#Vehicle = 0
#Vehicle_Time_Lower = 0
#Vehicle_Time_Upper = 0
#Command = 0
#Command_Time_Lower = 0
#Command_Time_Upper = 0
#Commander = 0
#Commander_Time_Lower = 0
#Commander_Time_Upper = 0
#Direct = 0
#Direct_Time_Lower = 0
#Direct_Time_Upper = 0

View File

@ -0,0 +1,26 @@
Thanks to!
Sebastian. aka $able for support regarding BERcon protocole issues.
Stian Strand. aka Sup@hKing. for supplying test environment.
Daniel Koch. aka Kochleffel. for supplying test environment in Bec's early days.
A Big thanks to all who has Donated!
Karl Lawrence,
Damian Hayden,
Fabien Lefevre,
Ivanov Alexander,
Claus Lauridsen,
Cintia D Fernandes,
Travis Prue,
Dennie Bosch,
Florian Weber,
Anthony Hartfield,
Luc Mathlin,
John Rhodes,
Gorlov Nikita,
Elias Toft Hansen,
Александр Лежепеков,
And all the others who uses Bec, and the forgotten names who has donated and reported bugs and issues etc.
By. Stian Mikalsen.

View File

@ -0,0 +1,46 @@
Battleye Extended Controls "Bec", License.
=========================
Bec Copyright © 2011-2014 by Stian Mikalsen. All rights reserved.
"Software" refers to Bec "Battleye Extended Controls" and all files belonging to the program, including the documentation.
Warranty disclaimer
=========================
The Software is provided "as-is", without any express or implied warranty, to the maximum extent permitted by applicable law.
In no event shall the author be held liable for any damages arising from the direct or indirect use of the Software.
The user must assume the entire risk of using the Software,
knowing in particular that the Software is not designed or intended for use in hazardous environments requiring fail-safe performance,
where its failure to perform, misuse or inability to use adequately can
reasonably be expected to lead to death, personal injury, or severe physical or environmental damage.
Right of use.
=========================
Permission is granted to anyone to use this Software for private purpose, provided that the warranty disclaimer is accepted and the following conditions are met:
1. All redistributions must keep the original package intact. you must retain all copyright notices that are currently in place, and this license without modification.
2. The origin of this Software must not be misrepresented; you must not claim that you wrote the original Software.
3. You may not distribute this Software and|or charge a distribution fee, you must not represent in any way that you are selling the Software itself.
- Exception: As a Game Service Provider you are allowed to charge a fee for Bec. However, if this is done
a one time payment of 50 € (euros), is required, Payment is done through Paypal. contact email for more info.
4. Restrictions. Except as otherwise agreed in writing.
You shall have no right and you shall not permit any third party to:
Decompile, decrypt, disassemble, reverse engineer or attempt to reconstruct or discover any source code or underlying ideas like,
algorithms, file formats or programming or any files contained or generated using the Software by any means whatsoever.
5. The Software shall not be used for any Commercial or Military purpose unless otherwise agreed in writing.
- Exception: see exception for rule 3
6. Use of the software indicates his/her acceptance of all these terms and conditions.
7. If you do not agree to these conditions, delete all files related to this software from your media|storage.
Stian Mikalsen
http://www.Ibattle.org

View File

@ -0,0 +1,804 @@

Options:
-h, --help show this help message and exit
-f FILENAME Config file to read from ( REQUIRED )
-v Show current Bec version and exit
--dec Disable external commands
--dsc Disable server check
--dpl Disable plugins
--enc Set encoding table
FILENAME is the name of your config file. the file MUST be located inside the Config dir..
Bec will automaticly look in the Config directory. so if you have: ..\Bec\Config\myserver.cfg
You start Bec like: Bec.exe -f myserver.cfg
Do not name your config files with space in them. Use underscore if you need to have 2 names it it, example like: foo_bar.cfg
This is a nogo. Bec.exe -f foo bar.cfg
Do it like this. Bec.exe -f foo_bar.cfg or Bec.exe -f 'foo bar.cfg' (using quotes with spaces)
--dec switch will disable external scripts, this applies to both Commands.xml and Scheduler.xml
This means that no bat or cmd files may be executed.
--dsc switch will disable the wait & check for the arma server.
Bec will try and connect directly to the rcon regardless if the server is running or not.
Note. your reporter account will be disabled if you use this option.
--dpl switch will prevent Bec from loading up plugins
--enc switch allows you to set another char table. Bec uses by default 65001.
you can use the command chcp in a console to see current char table.
NOTE: Bec might need admin permission to work properly. but when using the --dsc switch it should not require it.
-------------------------------------------------------------------------------------------------
Are you Upgrading from a previous version ???.
Make sure you read the changelog.txt and check out the example files for possible changes !!!.
Do not email me for bug and such if you are to lazy reading the information given to you.
i'll ignore all emails when it's your own fault you cant get it started.
-------------------------------------------------------------------------------------------------
************** Now... What is Bec and Whats does it do!. **************
Bec , Aka Battleye Extended Controls.
Bec is Automated Rcon Tool for Battleye on Oa & Arma3 Servers.
You can consider Bec a Rcon Bot that does things automated for you.
This is a Server application only, no need for anything as a client, other than arma itself.
For Bec to work properly it depends on Battleye and a stable internet connection and ofcource the Arma server itselfeslf.
Let it also be said that this application is intended to run on the machine that also runs the server.
in other words. for optimal performance do run Bec on the same machine as where the Arma3 server is running.
What this tool does is give you the ability to:
* Give Be Power on the Chatline in-game the mission with Multi Admin Support.
* Logs Chat to file(s) with timestamps, log Be events to Own file. all organized.
* Allows you to setup multiple admins in different Groups, setup multiple custom commands with Permission levels.
* Ie. !bpl bans a player 10 min, !btk bans a player 20 min for Team kill.
* Nick filter. use file with rude, offensive names that you do not allow on your server. auto kicks player on connection.
* Setup White list file for guids, so only listed guids will be able to connect.
* Create Schedules tasks, such as modts, event notification., restart server, run external bat/cmd scripts etc.
* Create your own Python plugins.
* Bec will auto report hacks and also check players who connect against a database if you have an account.
It requires that you signin up an reporter account, this will also give you the ability to use Bec's bansys pages.
++ more
!!! Summary !!!
* Multi Admin Support
* Define Custom Names on Commands
* Set Group Level on Admins and Commands
* Organized Chat logger
* Organized BE Event logger
* Nick Filter, Auto Kick Offensive Names Defined By You
* Word Filter. Warn/Autokick On Offensive Chat.
* Create Whitelist.
* Chat Restriction.
* Chat Spam Protection.
* Autokick Lobby Idlers.
* Create schedules.
(*) Check Guid of players who connects against a central ban database
(*) Report GameHacks To a Central Ban Database
!!! PLEASE DO READ THE HOLE FILE TO SETUP BEC ON YOUR SERVER !!!
******************************************************************************************************
!!! CONFIGURE !!!
-------------
*** Stp 1 ***
-------------
First you need to setup BEServer.cfg for BattlEye.
You need to verify that you have a BEServer.cfg.
If its missing you need to create this file for Battleye before Bec can start to work.
In this file. create one line. like this:
Rconpassword MySecretPassWord
Save it and close.
Http://community.bistudio.com/wiki/BattlEye
Http://forums.bistudio.com for more info about that.
If you are unsure about what this file is. Do read the wiki about it. its Needed for Bec to function.
--- !!! YOU MUST HAVE BATTLEYE SETUP CORRECTLY WITH RCON BEFORE YOU CONTINUE !!! ---
-------------
*** Stp 2 ***
-------------
Place the Bec directory anywhere you want. it doesnt really matter where its located on your disk.
it might be anything like:
C:\Tools\Bec
Open the "Bec\Config" directory and edit the files called.
* Config_EXAMPLE.cfg
* Admins_EXAMPLE.xml
* Commands_EXAMPLE.xml
* Scheduler_EXAMPLE.xml
----------------------------------------------------------
EXAMPLE CONFIG FILE, ALL PARAMETERS DEFINED:
----------------------------------------------------------
[Bec]
Ip = 127.0.0.1
Port = 2302
BePath = C:\SERVER1\BattlEye
Admins = Admins.xml
Commands = Commands.xml
# Optional
[Misc]
Ban = 3
BeCustomBanFiles = Bans1.txt, file2.txt, file3.txt
ConsoleHeight = 65
ConsoleWidth = 125
AsciiNickOnly = True
AsciiChatOnly = True
IgnoreChars = æ,Æ,ø,Ø,å,Å
NickFilterFile = C:\Path\Bec\Config\BadNames.txt
WordFilterFile = C:\Path\Bec\Config\BadWords.txt
WhiteListFile = WhiteList.txt
WhiteListKickMsg = please connect to our ts3 for more information on howto join. ts3.domain.com
Warnings = 5
ServerExeName = myArma2_Server.exe
Timeout = 40
KickLobbyIdlers = 300
Scheduler = Scheduler.xml
MinPlayerNameLength = 3
MaxPlayerNameLength = 16
DisallowPlayerNameChars = [](){}<>/\^¨|§!"'#¤%&@£$€
ChatChannelFiles = true
SlotLimit = 45
SlotLimitKickMsg = The Server has reached its player limit.
# Optional
[ChatRestriction]
Global = 10
Side = -1
Group = -1
Vehicle = -1
Command = -1
Commander = -1
Direct = -1
# Optional
[ChatSpam]
Lobby = 0
Lobby_Time_Lower = 3
Lobby_Time_Upper = 10
Global = 0
Global_Time_Lower = 3
Global_Time_Upper = 10
Side = 0
Side_Time_Lower = 3
Side_Time_Upper = 10
Group = 0
Group_Time_Lower = 3
Group_Time_Upper = 10
Vehicle = 0
Vehicle_Time_Lower = 3
Vehicle_Time_Upper = 10
Command = 0
Command_Time_Lower = 3
Command_Time_Upper = 10
Commander = 0
Commander_Time_Lower = 3
Commander_Time_Upper = 10
Direct = 0
Direct_Time_Lower = 3
Direct_Time_Upper = 10
# Optional
[Reporter]
User = name
Password = pwd
----------------------------------------------------------
EOF
----------------------------------------------------------
MINIMAL CONFIG FILE EXAMPLE
----------------------------------------------------------
[bec]
Ip = 127.0.0.1
Port = 2302
BeBanFile = C:\SERVER1\BattlEye\bans.txt
Admins = Admins.xml
Commands = Commands.xml
----------------------------------------------------------
EOF
# Note that Misc, ChatRestriction, Reporter are all fully optional and does not need to be in the config file.
The only time [Misc] is needed, is if the arma server exe file has been renamed.
Now..
Make a Shortcut to Bec Some place.
Go to properties of this shortcut and edit the Target box, put in the -f argument.
Example!
Target| "c:\..\..\Bec\Bec.exe" -f MyConfig.cfg
Or set up Bec as a service.
Some explanation of the parameters used by Bec.
------------------------------------------------------------------------------------
* BEC *
------------------------------------------------------------------------------------
In the [Bec] block we define Rcon parameters such as Ip, porta etc.
All are needed for Bec to work.
-------------------
* Ip = *
The ip Bec need to connect to the server.
By default you should use 127.0.0.1.
But in some cases you need to use other Ip,
Example if you have 2 servers running on same port and are using multihoming.
if unsure. try with 127.0.0.1 1st
-------------------
* Port = *
The the port the server is running on.
-------------------
* BePath = *
The full path to your Battleye directory for you current profile.
This is the directory where your BEServer.cfg and Bans.txt file is located.
-------------------
* Admins = *
This is the file where you define your admin and the group level on your admins.
This file does not need to be named Admins.xml. but to make it more understandable, we call it Admins.xml for now.
If you do not set full path to this file. it will look in the Config directory 1st.
Valid methods:
Admis = Admins.xml
Admins = C:\some\path\Admins.xml
Admins = \some\path\Admins.xml
Note. if last method is used. Bec needs to be located on the same partition.
For more information on how to create a admin file, Visit:
Http://ibattle.org/install-and-configure/define-admins/
-------------------
* Commands = *
This is the file where you create your commands.
Set custom names and group level in this file.
This file does not need to be named Commands.xml. but to make it more understandable, we call it Commands.xml for now.
If you do not set full path to this file. it will look in the Config directory 1st.
Valid methods:
Commands = Commands.xml
Commands = C:\some\path\Commands.xml
Commands = \some\path\Commands.xml
Note. if last method is used. Bec needs to be located on the same partition.
For more information on how to create a command file, Visit:
Http://ibattle.org/install-and-configure/define-commands/
------------------------------------------------------------------------------------
* MISC
------------------------------------------------------------------------------------
This Block is optional with 1 exception.
In cases where you have renamed your exe file and need to use ServerExeName = MyNewArmaExeName.exe
-------------------
* Ban *
This parameter will define if you will ban people for GameHack, BattlEye Hack, Both or No banning at all
You need to specify the value in range 0 til 3
0 = No ban will occure on GameHack or BattlEye Hacks
1 = Will only ban on GameHacks
2 = will only ban BattlEye Hacks
3 = will ban both GameHack and BattlEye Hacks.
Note: If you have a reporter account and use it. you will still report in GameHacks & BattlEye Hacks regardless of your setting.
However, when you check guid's against the database. it will only kick out people according to you setting.
This means, if you have set it to value 1. people caught for battleye hacks will be able to join your server.
If the parameter is not define. Bec will use value 3 as default.
-------------------
* BeCustomBanFiles *
Set the names of your custom ban files, Separate each file with "," (comma): file1.txt, banfile2.txt, newfile.txt
If you do not use any custom ban files. delete this option or leave this option commented.
This option will check ban files for changes and automatic do a (loadbans file) when a file gets changed
-------------------
* AsciiNickOnly = *
If set to True it will autokick all players who has none ascii chars in the nickname.
Kick happens instant on connect.
If this parameter is not defined, AsciiNickOnly will be set to False by default
-------------------
* AsciiChatOnly = *
If set to True a warning will be send to the player who does not use Ascii on chat.
You will also need to set parameter Warnings to 0 or higher for this option to work..
If this parameter is not defined, AsciiChatOnly will be set to False by default
Note: This will have no affect on admins, and will be ignored when a admin chats.
-------------------
* IgnoreChatChars = *
This Option will only work if AsciiChatOnly is set on.
Add in chars/symbols that is not listed in the ascii table.
example you dont want to have/allow german/russian chars. but norwegian is ok for you
then you can do it like.
AsciiChatOnly = True
IgnoreChatChars = æ,Æ,ø,Ø,å,Å
It's recommended that you use a proper editor like Notepad++
When using non ascii chars. you need to save the file with utf encoding.
-------------------
* NickFilterFile = *
Here you can define player names you do not allow on your server.
If a players nick matches any lines in the file he will be autokicked upon connection
If this parameter is not defined, NickFilterFile will be disabled by default
If you do not set full path to this file. it will look in the Config directory 1st.
Valid methods:
NickFilterFile = BadNames.txt
NickFilterFile = C:\some\path\BadNames.txt
NickFilterFile = \some\path\BadNames.txt
Note. if last method is used. Bec needs to be located on the same partition.
-------------------
* WordFilterFile = *
Here you can define words you do not allow on your chat.
If a players chat matches any lines in the file he will be sent a warning.
You will need to set parameter Warnings to 0 or higher for this option to work..
Autokick will happen when he|she reaches the set value..
If this parameter is not defined, WordFilterFile will be disabled by default
Valid methods:
WordFilterFile = BadNames.txt
WordFilterFile = C:\some\path\BadWords.txt
WordFilterFile = \some\path\BadWords.txt
Note. if last method is used. Bec needs to be located on the same partition.
-------------------
* Warnings = *
This is the number of warning a player should get before autokick happens
If example warning is set to 3. the player will get 3 warnings, if he|she still continue to use none ascii after the 3rd warning. he|she will be kicked.
There are 3 functions that uses this parameter.
1 * AsciiChatOnly
2 * WordFilterFile
3 * Warn "command in Commands.xml file"
Example of reply message from Bec:
22:21:24 : (Global) SomeDude:fucking noob.
22:21:25 : RCon admin #0: (To SomeDude) Watch your language. Warnings left:2
Set this to -1 to disable warnings/warnkick functions listed below.
1 * AsciiChatOnly
2 * WordFilterFile
3 * Warn "command in Commands.xml file"
Setting the value to 0 means Instant kick without warning.
the player will then only get a message on the kick reason why kick happened.
Also take a note, the command "warn" in Commands.xml will only work if this value is set higher than 0,
Since there is no point in send a warning when the value is 0 "instant kick". we use !kpl or other names you defined
NOTE: if you do not define this parameter. it will be set to -1 by default.
All 3 depending functions will then be disabled by default.
NOTE: sending a warning to an another admin will not work.
-------------------
* ServerExeName = *
If you for some reason had to rename your Oa/Arma3 server exe file.
You must use this parameter and set its name. do include the full name inclusive .exe, but not the path.
ServerExeName = myA2Server.exe
-------------------
* ConsoleHeight / ConsoleWidth *
Set the height of Bec's console window
ConsoleHeight = 65
Set the width of Bec's console window
ConsoleWidth = 125
-------------------
* Timeout = *
If your server for some reason needs longer than 30 seconds to start up.
You can then set custom timeout with this parameter
Timeout = 60
The number is set in seconds.
-------------------
* KickLobbyIdlers = *
Auto kick lobby idlers who take up a slot without playing. lowest timeout is 90 sec.
if you set this to 0 it will be disabled or if you dont define this parameter at all it will be ignored.
KickLobbyIdlers = 300
this will kick a player who has been idling in the lobby for 300 sec. 5min
value is set in seconds.
NOTES:
A players is considered to be in the lobby until hes/she is fully ingame.
A player sitting in the briefing screen will be seen as if the player is in the lobby.
A players loading the mission will also be seen as if they are in the lobby.
-------------------
* Scheduler = *
Set the path to your scheduler file.
allows you to create simple schedules.
This is the file where you define your schedules
This file does not need to be named Scheduler.xml.
If you do not set full path to this file. it will look in the Config directory 1st.
Valid methods:
Scheduler = Scheduler.xml
Scheduler = C:\some\path\Scheduler.xml
Scheduler = \some\path\Scheduler.xml
Note. if last method is used. Bec needs to be located on the same partition.
For more information on how to create schedules, Visit:
Http://ibattle.org/install-and-configure/setting-up-the-scheduler/
Known Issues with the Scheduler.
* Text containing chars like % @ etc may cause problems. avoid using them for now.
-------------------
* WhiteListFile = *
Set the path to your whitelist file.
In this file you add one guid per line.
Only players who are listed in this file are able to join the server.
Valid methods:
WhiteListFile = whitelist.txt
WhiteListFile = C:\some\path\whitelist.txt
WhiteListFile = \some\path\whitelist.txt
Note. if last method is used. Bec needs to be located on the same partition.
-------------------
* WhileListKickMsg = *
Set custom whitelist kick message. A message must be minimum 7 chars long.
WhileListKickMsg = please connect to our ts3 for more information on howto join. ts3.domain.com
-------------------
* MinPlayerNameLength = *
MinPlayerNameLength = 3
Set the min length a player name can have.
Players connecting with a name shorter than defined in this parameter will be kicked from the server
-------------------
* MaxPlayerNameLength = *
MaxPlayerNameLength = 16
Set the max length a player name can have.
Players connecting with a name longer than defined in this parameter will be kicked from the server.
-------------------
* DisallowPlayerNameChars = *
Limits chars a player can have in the nick
DisallowPlayerNameChars = [](){}<>/\^¨|§!"'#¤%&@£$€
Players that connects and do have any chars in their name that is listed in this parameter will be kicked from the server.
-------------------
* ChatChannelFiles = *
If enabled. it will create additional chat files. once for each channel.
Files will only be created if there is chat in the channels.
-------------------
* SlotLimit = *
If enabled. it will only allow N normal players to join.
Example:
Max server.. 90 players
(players:90) > slotlimit:54
90 > slotlimit:54 ...meaning that it kick players above player count.. 80
------
44players..
44 > 54 ... nop
------
55players:
55 > 54 ... nop
------
81players
81 > 54 ... yes check...
-----------------------------------
Using slotlimit 45 on max 90 pl server
90 players
90 > 45 ... yes check
------
75players
75 > 45 ... yes check
------
42players
42 > 45 ... nop
------------------------------------------------------------------------------------
* Reporting *
------------------------------------------------------------------------------------
In the [Reporter] block we add in account data so that GameHack's|BattlEye Hacks's gets automatically reported to a central ban database.
You will need an account for this to work.
If you don't have one or don't want to create one, just remove this block since its fully optional.
[Reporter]
User = you
Password = secret
If Enabled it will also check the status on a Guid against the database.
Again this will only work if you have a valid user account..
If you see a file called "Reporting_Failures.log", this is a a fallback file if the host is down or unavailable for some reason.
Do not mess with this file, it will be auto deleted when the bans get uploaded..
------------------------------------------------------------------------------------
* ChatRestriction *
------------------------------------------------------------------------------------
Here you can set max message that is allowed for each channel.
If you want to restrict usage of example global chat.
[ChatRestriction]
Global = 10
This will autokick a player after the 10th message in global channel.
setting the value to 0 mean instant kick..
setting the value to -1 mean its disabled.
The player will receive warnings when typing in the global chat
[ChatRestriction]
Global = 10
Side = -1
Group = -1
Vehicle = -1
Command = -1
Commander = -1
Direct = -1
Is the same as
[ChatRestriction]
Global = 10
So if you dont need any channels to be restricted. you can delete the hole block [ChatRestriction]
Note: This is will not use the Warnings Parameter for its counter.
------------------------------------------------------------------------------------
* ChatSpam Function *
------------------------------------------------------------------------------------
here you can define the limit for the amount of spam you allow on the server before autokick happens.
Note- the ChatSpam works per chat channel.
each channel has 3 variables.
1st is the channel name
2nd the lower time limit
3rd the upper time limit.
Example:
Global = 5
Global_Time_Lower = 4
Global_Time_Upper = 10
This will kick a player if he spammed more than 5 lines on the server within 4 secs.
For each line the player spam on the chat when time is less than 4 secs since last line was received the spam-counter increases.
If the player chats between 4 - 10 seconds the spam counter does not increases, but stays at current level.
If the time is greater than 10 sec since last message. the spam counter is reset.
[ChatSpam]
Lobby = 0
Lobby_Time_Lower = 3
Lobby_Time_Upper = 10
Global = 0
Global_Time_Lower = 3
Global_Time_Upper = 10
Side = 0
Side_Time_Lower = 3
Side_Time_Upper = 10
Group = 0
Group_Time_Lower = 3
Group_Time_Upper = 10
Vehicle = 0
Vehicle_Time_Lower = 3
Vehicle_Time_Upper = 10
Command = 0
Command_Time_Lower = 3
Command_Time_Upper = 10
Commander = 0
Commander_Time_Lower = 3
Commander_Time_Upper = 10
Direct = 0
Direct_Time_Lower = 3
Direct_Time_Upper = 10
____________________________________________________________________________________
| |
| * Understanding the Permission system * |
|____________________________________________________________________________________|
Both Admin and the Command must have assigned a group number.
To be able to execute a command. the admin must have the same or a lower group number as the command.
A lower ranked admin can not kick or ban a higher ranked admin..
When i say higher ranked admin.. it means that a admin that has a lower group number than the admin who tried to execute the command.
Equal ranked admins can only kick each other.
When making commands you should consider the level.
*** Short persudo example ***
You may want to use 3 Preset Ban commands and one Kick.
ban for 10min
ban for 60min
and one ban for PermBan
You may not want all admins to be able to do a permban. but only short bans.
Lets say we have 4 admins and 4 commands.
**************************
# Admins.xml
admin_a - group 0
admin_b - group 1
admin_c - group 2
admin_d - group 1
# Commands.xml
ban_a - group 0 - Perm ban
ban_b - group 1 - 60 min
ban_c - group 2 - 10 min
kick_a - group 3
**************************
# Admin Ban/Kick On ordinary players
(admin_a) can execute command (ban_a, ban_b, ban_c) on any players
(admin_b) can execute command (ban_b, ban_c) on any players
(admin_c) can execute command (ban_c) on any players
(admin_d) can execute command (ban_b, ban_c) on any players
(admin_a, admin_b, admin_c, admin_d) can execute command kick_a on any players.
# Admins vs Admins
* Kick
admin_a can execute kick_a on (admin_a, admin_b, admin_c, admin_d)
admin_b can execute kick_a on (admin_b, admin_c, admin_d)
admin_d can execute kick_a on (admin_c, admin_d)
admin_c can only execute kick_a on (admin_c)
Yes you are reading correct. you can kick yourself. ;)
I use this very much for a fast exit, i hate pressing esc. disconnect, disconnect, then esc again.. !kpl in much faster ;D
* Ban
admin_a can execute (ban_a, ban_b, ban_c) on (admin_b, admin_c, admin_d)
admin_b can execute (ban_b, ban_c) on (admin_c)
admin_c can not ban any of (admin_a, admin_b, admin_c, admin_d) due to its lower rank..
Temp Admins may never execute any kick or ban commands on a perm admin.
------------------------------------------------------------------------------------
* Plugins System *
------------------------------------------------------------------------------------
Bec allows you to make your own plugins written in python (g'old 2.6 :)
There is No to Little Documentation on how to create Plugins for Bec.
The best way to learn is to dig through the plugins you find on Ibattle.org download page.
I'll write up the docs about it once i get more time.
To install a Plugins..
First step is to create a new directory called Plugins in the root of your Bec install. ( X:\Path\Bec\Plugins )
Next, place your Bec plugin inside the Plugins directory: ( X:\Path\Bec\Plugins\MyPlugin )
Example. lets use the ConnectionLimiter as an example. found at www.ibattle.org on the download page
you should end up with something like.
X:\Path\Bec\Plugins\ConnectionLimiter
X:\Path\Bec\Plugins\ConnectionLimiter\__init__.py
X:\Path\Bec\Plugins\ConnectionLimiter\ReadMe.txt
Thats Basicly it. Next step is to Read the ReadMe file the plugin has. some plugins uses a settings file..
So make sure to read the file before starting Bec.
------------------------------------------------------------------------------------
------------------------------------------------------------------------------------
* Basic Rcon Questions..
Q. How do i get a players guid.??
A. You need to type | players | in a Rcon client that accepts command line input.
You also use the same command to find a players id. "BE id".
There are two types of Id's one that Arma will return to you by typing | #userlist |
This Id is not what you are after when using a RCon. you always want to get the BE_ID instead.
Q. How do i Ban a player?
A. first type | players | to get the player BE_ID then execute the command something like this examples.
assuming the player we want to kick has BE_ID 12
ban 12 -- > Permban player with BE_ID without reason.
ban 12 0 -- > Same as above
ban 12 60 -- > Ban player with BE_ID 12 without reason for 60 min.
ban 12 My reason -- > Permban player with BE_ID 12 and setting reason as "My reason" as the Ban message.
ban 12 0 My reason -- > Same as above
ban 12 60 My reason -- > Ban player with BE_ID 12 for 60 min and setting reason to "My reason" as the Ban message.
Q. How do i Kick a player.
A. Same as with Ban. but you do not provide a Time
assuming the player we want to kick has BE_ID 12
kick 12 -- > Kicks player with BE_ID 12 with no reason set. "default is: Admin Kick" by Battleye
kick 12 My Reason -- > Kicks player with BE_ID 12 with reason set as "My reason"
Q. How do i remove a ban.
A. First get the Ban index by typing | bans |. locate the ban id in your ban list for the ban you want to remove.
Once located you type | removeban Number |.
Another way to do it is by locating you bans.txt file. delete the line containing the baned guid.
Once removed you can type | loadbans | to reloade the banfile.
Q. How do i add a ban on a player thats no longer connected?
A. it basicly works the same wat as ban. but you need to provide the guid instead of the BE_ID.
examples.
addban abcdef0123456789876543210fedcba9 -- > Permban player with this guid
addban abcdef0123456789876543210fedcba9 120 "Teamkiller" -- > Ban player with this guid for 120 min and set reason as Teamkiller
For more information use Bis wiki,

Binary file not shown.

After

Width:  |  Height:  |  Size: 420 KiB

View File

@ -0,0 +1,4 @@
RConPassword pw4rcon
MaxPing 500
RConIP 127.0.0.1
RConPort 2304

View File

@ -0,0 +1,4 @@
RConPassword pw4rcon
MaxPing 500
RConIP 192.168.0.102
RConPort 2304

View File

@ -0,0 +1 @@

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,27 @@
****** End-User License Agreement ******
This License Agreement ("Agreement") is made between you (the "Licensee") and BattlEye Innovations / Bastian Suter (the "Licensor"). The terms of this Agreement apply to all current and future versions and updates of BattlEye.
By installing, enabling or using BattlEye, Licensee agrees with all the terms of this Agreement. Licensor reserves all rights not specifically granted and transferred to Licensee.
Licensee understands and agrees with the following:
- Licensor grants Licensee a non-exclusive and non-transferable license to use BattlEye for non-commercial purposes only. Licensee therefore does not own BattlEye, Licensor remains the owner of BattlEye.
- Licensor provides BattlEye on an "as is" basis without warranty of any kind. Licensor neither guarantees the correct, error-free functioning of BattlEye nor is he responsible for any damage caused by the use of BattlEye.
- Licensee may not decompile, disassemble, reverse-engineer, modify or redistribute BattlEye in any way.
- BattlEye will automatically, without notice to Licensee, download and install updates from time to time.
- BattlEye may scan the entire memory, and any game-related and system-related files and folders on harddisk and report results to the connected game server for the sole purpose of detecting cheats.
- BattlEye will never report any of Licensee's private data (documents, passwords, etc.) to other connected computers or to Licensor. BattlEye will not violate Licensee's privacy.
- Licensor is allowed to terminate the license at any time for any reason and without notice to Licensee.
This License Agreement constitutes the entire agreement between Licensor and Licensee and supersedes any prior statements.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
Exile.Altis

View File

@ -0,0 +1,37 @@
ExileServer_object_construction_database_insert = "Overrides\ExileServer_object_construction_database_insert.sqf";
ExileServer_object_construction_database_load = "Overrides\ExileServer_object_construction_database_load.sqf";
ExileServer_object_container_createContainer = "Overrides\ExileServer_object_container_createContainer.sqf";
ExileServer_object_container_database_insert = "Overrides\ExileServer_object_container_database_insert.sqf";
ExileServer_object_container_database_load = "Overrides\ExileServer_object_container_database_load.sqf";
ExileServer_object_container_database_update = "Overrides\ExileServer_object_container_database_update.sqf";
ExileServer_object_player_createBambi = "Overrides\ExileServer_object_player_createBambi.sqf";
ExileServer_object_player_database_load = "Overrides\ExileServer_object_player_database_load.sqf";
ExileServer_object_player_event_onMpKilled = "Overrides\ExileServer_object_player_event_onMpKilled.sqf";
ExileServer_object_vehicle_createNonPersistentVehicle = "Overrides\ExileServer_object_vehicle_createNonPersistentVehicle.sqf";
ExileServer_object_vehicle_createPersistentVehicle = "Overrides\ExileServer_object_vehicle_createPersistentVehicle.sqf";
ExileServer_object_vehicle_database_load = "Overrides\ExileServer_object_vehicle_database_load.sqf";
ExileServer_system_database_connect = "Overrides\ExileServer_system_database_connect.sqf";
ExileServer_system_database_handleBig = "Overrides\ExileServer_system_database_handleBig.sqf";
ExileServer_system_database_query_fireAndForget = "Overrides\ExileServer_system_database_query_fireAndForget.sqf";
ExileServer_system_database_query_insertSingle = "Overrides\ExileServer_system_database_query_insertSingle.sqf";
ExileServer_system_database_query_selectFull = "Overrides\ExileServer_system_database_query_selectFull.sqf";
ExileServer_system_database_query_selectSingle = "Overrides\ExileServer_system_database_query_selectSingle.sqf";
ExileServer_system_database_query_selectSingleField = "Overrides\ExileServer_system_database_query_selectSingleField.sqf";
ExileServer_system_territory_database_insert = "Overrides\ExileServer_system_territory_database_insert.sqf";
ExileServer_system_territory_maintenance_recalculateDueDate = "Overrides\ExileServer_system_territory_maintenance_recalculateDueDate.sqf";
ExileServer_system_territory_network_flagStolenRequest = "Overrides\ExileServer_system_territory_network_flagStolenRequest.sqf";
ExileServer_system_territory_network_payFlagRansomRequest = "Overrides\ExileServer_system_territory_network_payFlagRansomRequest.sqf";
ExileServer_system_territory_network_payTerritoryProtectionMoneyRequest = "Overrides\ExileServer_system_territory_network_payTerritoryProtectionMoneyRequest.sqf";
ExileServer_system_territory_network_purchaseTerritory = "Overrides\ExileServer_system_territory_network_purchaseTerritory.sqf";
ExileServer_system_territory_network_restoreFlagRequest = "Overrides\ExileServer_system_territory_network_restoreFlagRequest.sqf";
ExileServer_system_territory_network_territoryUpgradeRequest = "Overrides\ExileServer_system_territory_network_territoryUpgradeRequest.sqf";
ExileServer_system_trading_network_purchaseItemRequest = "Overrides\ExileServer_system_trading_network_purchaseItemRequest.sqf";
ExileServer_system_trading_network_purchaseVehicleRequest = "Overrides\ExileServer_system_trading_network_purchaseVehicleRequest.sqf";
ExileServer_system_trading_network_purchaseVehicleSkinRequest = "Overrides\ExileServer_system_trading_network_purchaseVehicleSkinRequest.sqf";
ExileServer_system_trading_network_sellItemRequest = "Overrides\ExileServer_system_trading_network_sellItemRequest.sqf";
ExileServer_system_trading_network_wasteDumpRequest = "Overrides\ExileServer_system_trading_network_wasteDumpRequest.sqf";
ExileServer_util_time_addTime = "Overrides\ExileServer_util_time_addTime.sqf";
ExileServer_util_time_currentTime = "Overrides\ExileServer_util_time_currentTime.sqf";
ExileServer_util_time_uptime = "Overrides\ExileServer_util_time_uptime.sqf";
ExileServer_world_initialize = "Overrides\ExileServer_world_initialize.sqf";
ExileClient_util_string_scalarToString = "Overrides\ExileClient_util_string_scalarToString.sqf";

View File

@ -0,0 +1,9 @@
// Fix for 64bit Servers, more info @
// http://www.exilemod.com/topic/21761-168-bugs-megathread-discussion/?do=findComment&comment=156590
// You could also use toFixed, but will have trailing zeros + random crap after 6-7 decimal points, (float precision?)
private "_arr";
if (_this isEqualTo 0) exitWith {"0"};
_arr = toArray str abs (_this % 1);
_arr set [0, 32];
toString (toArray str (abs (_this - _this % 1) * _this / abs _this) + _arr - [32])

View File

@ -0,0 +1,39 @@
/**
* ExileServer_object_construction_database_insert
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_constructionObject","_position","_vectorDirection","_vectorUp","_territoryFlag","_territoryID","_data","_extDB2Message","_constructionID"];
_constructionObject = _this;
_position = getPosATL _constructionObject;
_vectorDirection = vectorDir _constructionObject;
_vectorUp = vectorUp _constructionObject;
_territoryFlag = _constructionObject call ExileClient_util_world_getTerritoryAtPosition;
_territoryID = if (isNull _territoryFlag) then { '' } else { _territoryFlag getVariable ["ExileDatabaseID", '']};
_data =
[
typeOf _constructionObject,
_constructionObject getVariable ["ExileOwnerUID", ""],
_position select 0,
_position select 1,
_position select 2,
_vectorDirection select 0,
_vectorDirection select 1,
_vectorDirection select 2,
_vectorUp select 0,
_vectorUp select 1,
_vectorUp select 2,
_territoryID
];
_extDB2Message = ["insertConstruction", _data] call ExileServer_util_extDB2_createMessage;
_constructionID = _extDB2Message call ExileServer_system_database_query_insertSingle;
_constructionObject setVariable ["ExileDatabaseID", _constructionID];
_constructionObject setVariable ["ExileTerritoryID", _territoryID];
_constructionObject enableDynamicSimulation true;
_constructionID

View File

@ -0,0 +1,47 @@
/**
* ExileServer_object_construction_database_load
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_constructionID","_data","_position","_vectorDirection","_vectorUp","_constructionObject","_damageLevel","_public","_pinCode"];
_constructionID = _this;
_data = format ["loadConstruction:%1", _constructionID] call ExileServer_system_database_query_selectSingle;
_position = [_data select 4, _data select 5, _data select 6];
_vectorDirection = [_data select 7, _data select 8, _data select 9];
_vectorUp = [_data select 10, _data select 11, _data select 12];
_constructionObject = createVehicle [(_data select 1), _position, [], 0, "CAN_COLLIDE"];
_constructionObject setPosATL _position;
_constructionObject setVectorDirAndUp [_vectorDirection, _vectorUp];
_constructionObject setVariable ["ExileDatabaseID", (_data select 0)];
_constructionObject setVariable ["ExileOwnerUID", (_data select 2)];
_constructionObject setVariable ["ExileIsPersistent", true];
_constructionObject setVariable ["ExileTerritoryID", (_data select 15)];
_damageLevel = (_data select 17);
_public = _damageLevel > 0;
_constructionObject setVariable ["ExileConstructionDamage",_damageLevel,_public];
if(_public)then
{
_constructionObject call ExileServer_util_setDamageTexture;
};
_pinCode = _data select 14;
if !(_pinCode isEqualTo "000000") then
{
_constructionObject setVariable ["ExileAccessCode", _pinCode];
_constructionObject setVariable ["ExileIsLocked", (_data select 13), true];
};
if (typeOf _constructionObject in ["Exile_Construction_ConcreteDoor_Static", "Exile_Construction_ConcreteGate_Static", "Exile_Construction_WoodGate_Static", "Exile_Construction_WoodDoor_Static", "Exile_Construction_ConcreteWindowHatch_Static", "Exile_Construction_WoodGate_Reinforced_Static", "Exile_Construction_WoodDoor_Reinforced_Static", "Exile_Construction_ConcreteFloorHatch_Static"]) then
{
_constructionObject enableDynamicSimulation true;
};
_constructionObject setVelocity [0, 0, 0];
_constructionObject setPosATL _position;
_constructionObject setVelocity [0, 0, 0];
_constructionObject setVectorDirAndUp [_vectorDirection, _vectorUp];
_constructionObject setVelocity [0, 0, 0];
_constructionObject

View File

@ -0,0 +1,30 @@
/**
* ExileServer_object_container_createContainer
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_className","_position","_direction","_containerObject"];
_className = _this select 0;
_position = _this select 1;
_direction = _this select 2;
_containerObject = createVehicle [_className, _position, [], 0, "CAN_COLLIDE"];
clearBackpackCargoGlobal _containerObject;
clearItemCargoGlobal _containerObject;
clearMagazineCargoGlobal _containerObject;
clearWeaponCargoGlobal _containerObject;
_containerObject setDir _direction;
_containerObject setPosATL _position;
_containerObject setVariable ["ExileIsPersistent", true];
_containerObject setVariable ["ExileIsContainer", true];
if(getNumber(configFile >> "CfgVehicles" >> typeOf _containerObject >> "exileIsLockable") isEqualTo 1)then
{
_containerObject setVariable ["ExileIsLocked", -1,true];
};
_containerObject enableDynamicSimulation true;
_containerObject

View File

@ -0,0 +1,91 @@
/**
* ExileServer_object_container_database_insert
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_containerObject","_position","_vectorDirection","_vectorUp","_territoryFlag","_territoryID","_data","_extDB2Message","_containerID","_cargoContainers"];
_containerObject = _this;
_position = getPosATL _containerObject;
_vectorDirection = vectorDir _containerObject;
_vectorUp = vectorUp _containerObject;
_territoryFlag = _containerObject call ExileClient_util_world_getTerritoryAtPosition;
_territoryID = if (isNull _territoryFlag) then { '' } else { _territoryFlag getVariable ["ExileDatabaseID", '']};
if !(ExileContainerCargo isEqualTo []) then
{
_data =
[
typeOf _containerObject,
_containerObject getVariable ["ExileOwnerUID", ""],
_position select 0,
_position select 1,
_position select 2,
_vectorDirection select 0,
_vectorDirection select 1,
_vectorDirection select 2,
_vectorUp select 0,
_vectorUp select 1,
_vectorUp select 2,
ExileContainerCargo select 0,
ExileContainerCargo select 1,
ExileContainerCargo select 2,
ExileContainerCargo select 3,
ExileContainerCargo select 4,
"0000",
_territoryID
];
} else
{
_data =
[
typeOf _containerObject,
_containerObject getVariable ["ExileOwnerUID", ""],
_position select 0,
_position select 1,
_position select 2,
_vectorDirection select 0,
_vectorDirection select 1,
_vectorDirection select 2,
_vectorUp select 0,
_vectorUp select 1,
_vectorUp select 2,
[],
[],
[],
[],
0,
"0000",
_territoryID
];
};
_extDB2Message = ["insertContainer", _data] call ExileServer_util_extDB2_createMessage;
_containerID = _extDB2Message call ExileServer_system_database_query_insertSingle;
if !(ExileContainerCargo isEqualTo []) then
{
[_containerObject, (_data select 11)] call ExileServer_util_fill_fillItems;
[_containerObject, (_data select 12)] call ExileServer_util_fill_fillMagazines;
[_containerObject, (_data select 13)] call ExileServer_util_fill_fillWeapons;
_cargoContainers = format ["loadContainerCargo:%1", _containerID] call ExileServer_system_database_query_selectSingle;
if !(_cargoContainers isEqualTo []) then
{
[_containerObject, (_cargoContainers select 0)] call ExileServer_util_fill_fillContainers;
};
ExileContainerCargo = [];
};
_containerObject setVariable ["ExileDatabaseID", _containerID];
_containerObject setVariable ["ExileIsPersistent", true];
_containerObject setVariable ["ExileIsContainer", true];
_containerObject setVariable ["ExileAccessCode","0000"];
_containerObject setVariable ["ExileTerritoryID", _territoryID];
_containerObject setVariable ["ExileMoney", parseNumber (_data select 15), true];
_containerObject addMPEventHandler ["MPKilled", { if !(isServer) exitWith {}; (_this select 0) call ExileServer_object_container_event_onMpKilled; }];
if(getNumber(configFile >> "CfgVehicles" >> typeOf _containerObject >> "exileIsLockable") isEqualTo 1)then
{
_containerObject setVariable ["ExileIsLocked",-1,true];
};
_containerID

View File

@ -0,0 +1,45 @@
/**
* ExileServer_object_container_database_load
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_containerID","_data","_position","_vectorDirection","_vectorUp","_abandoned","_containerObject","_cargoContainers"];
_containerID = _this;
_data = format ["loadContainer:%1", _containerID] call ExileServer_system_database_query_selectSingle;
_position = [_data select 4, _data select 5, _data select 6];
_vectorDirection = [_data select 7, _data select 8, _data select 9];
_vectorUp = [_data select 10, _data select 11, _data select 12];
_abandoned = _data select 18;
_containerObject = [(_data select 1), _position, 0] call ExileServer_object_container_createContainer;
_containerObject setVectorDirAndUp [_vectorDirection, _vectorUp];
_containerObject setVariable ["ExileDatabaseID", _containerID];
_containerObject setVariable ["ExileOwnerUID", (_data select 2),true];
_containerObject setVariable ["ExileAccessCode",(_data select 16)];
_containerObject setVariable ["ExileTerritoryID", (_data select 17)];
_containerObject setVariable ["ExileMoney", (_data select 20), true];
if(getNumber(configFile >> "CfgVehicles" >> typeOf _containerObject >> "exileIsLockable") isEqualTo 1)then
{
_containerObject setVariable ["ExileIsLocked",(_data select 3),true];
};
[_containerObject, (_data select 13)] call ExileServer_util_fill_fillItems;
[_containerObject, (_data select 14)] call ExileServer_util_fill_fillMagazines;
[_containerObject, (_data select 15)] call ExileServer_util_fill_fillWeapons;
_cargoContainers = format ["loadContainerCargo:%1", _containerID] call ExileServer_system_database_query_selectSingle;
if !(_cargoContainers isEqualTo []) then
{
[_containerObject, (_cargoContainers select 0)] call ExileServer_util_fill_fillContainers;
};
if !(_abandoned isEqualTo "") then
{
format ["ExileServer - Adding Container %1 to Abandonded Safes", _containerID] call ExileClient_util_log;
ExileAbandondedSafes pushBack _containerObject;
};
_containerObject enableDynamicSimulation true;
_containerObject addMPEventHandler ["MPKilled", { if !(isServer) exitWith {}; (_this select 0) call ExileServer_object_container_event_onMpKilled; }];
_containerObject

View File

@ -0,0 +1,46 @@
/**
* ExileServer_object_container_database_update
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_containerObject","_containerID","_position","_vectorDirection","_vectorUp","_territoryFlag","_territoryID","_data","_extDB2Message"];
_containerObject= _this;
_containerID = _containerObject getVariable ["ExileDatabaseID", -1];
if (_containerID > -1) then
{
_position = getPosATL _containerObject;
_vectorDirection = vectorDir _containerObject;
_vectorUp = vectorUp _containerObject;
_territoryFlag = _containerObject call ExileClient_util_world_getTerritoryAtPosition;
_territoryID = if (isNull _territoryFlag) then { '' } else { _territoryFlag getVariable ["ExileDatabaseID", '']};
_containerObject setVariable ["ExileTerritoryID", _territoryID];
_data =
[
_containerObject getVariable ["ExileIsLocked",-1],
_position select 0,
_position select 1,
_position select 2,
_vectorDirection select 0,
_vectorDirection select 1,
_vectorDirection select 2,
_vectorUp select 0,
_vectorUp select 1,
_vectorUp select 2,
_containerObject call ExileServer_util_getItemCargo,
magazinesAmmoCargo _containerObject,
weaponsItemsCargo _containerObject,
_containerObject call ExileServer_util_getObjectContainerCargo,
_territoryID,
_containerObject getVariable ["ExileMoney", 0],
_containerID
];
_extDB2Message = ["updateContainer", _data] call ExileServer_util_extDB2_createMessage;
_extDB2Message call ExileServer_system_database_query_fireAndForget;
};
true

View File

@ -0,0 +1,153 @@
/**
* ExileServer_object_player_createBambi
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_sessionID","_requestingPlayer","_spawnLocationMarkerName","_bambiPlayer","_accountData","_direction","_position","_spawnAreaPosition","_spawnAreaRadius","_clanID","_clanData","_clanGroup","_player","_devFriendlyMode","_devs","_parachuteNetID","_spawnType","_parachuteObject"];
_sessionID = _this select 0;
_requestingPlayer = _this select 1;
_spawnLocationMarkerName = _this select 2;
_bambiPlayer = _this select 3;
_accountData = _this select 4;
_direction = random 360;
if ((count ExileSpawnZoneMarkerPositions) isEqualTo 0) then
{
_position = call ExileClient_util_world_findCoastPosition;
if ((toLower worldName) isEqualTo "namalsk") then
{
while {(_position distance2D [76.4239, 107.141, 0]) < 100} do
{
_position = call ExileClient_util_world_findCoastPosition;
};
};
}
else
{
_spawnAreaPosition = getMarkerPos _spawnLocationMarkerName;
_spawnAreaRadius = getNumber(configFile >> "CfgSettings" >> "BambiSettings" >> "spawnZoneRadius");
_position = [_spawnAreaPosition, _spawnAreaRadius] call ExileClient_util_math_getRandomPositionInCircle;
while {surfaceIsWater _position} do
{
_position = [_spawnAreaPosition, _spawnAreaRadius] call ExileClient_util_math_getRandomPositionInCircle;
};
};
_name = name _requestingPlayer;
_clanID = (_accountData select 3);
if !((typeName _clanID) isEqualTo "SCALAR") then
{
_clanID = -1;
_clanData = [];
}
else
{
_clanData = missionNamespace getVariable [format ["ExileServer_clan_%1",_clanID],[]];
if(isNull (_clanData select 5))then
{
_clanGroup = createGroup independent;
_clanData set [5,_clanGroup];
_clanGroup setGroupIdGlobal [_clanData select 0];
missionNameSpace setVariable [format ["ExileServer_clan_%1",_clanID],_clanData];
}
else
{
_clanGroup = (_clanData select 5);
};
[_player] joinSilent _clanGroup;
};
_bambiPlayer setPosATL [_position select 0,_position select 1,0];
_bambiPlayer disableAI "FSM";
_bambiPlayer disableAI "MOVE";
_bambiPlayer disableAI "AUTOTARGET";
_bambiPlayer disableAI "TARGET";
_bambiPlayer disableAI "CHECKVISIBLE";
_bambiPlayer setDir _direction;
_bambiPlayer setName _name;
_bambiPlayer setVariable ["ExileMoney", 0, true];
_bambiPlayer setVariable ["ExileScore", (_accountData select 0)];
_bambiPlayer setVariable ["ExileKills", (_accountData select 1)];
_bambiPlayer setVariable ["ExileDeaths", (_accountData select 2)];
_bambiPlayer setVariable ["ExileClanID", _clanID];
_bambiPlayer setVariable ["ExileClanData", _clanData];
_bambiPlayer setVariable ["ExileHunger", 100];
_bambiPlayer setVariable ["ExileThirst", 100];
_bambiPlayer setVariable ["ExileTemperature", 37];
_bambiPlayer setVariable ["ExileWetness", 0];
_bambiPlayer setVariable ["ExileAlcohol", 0];
_bambiPlayer setVariable ["ExileName", _name];
_bambiPlayer setVariable ["ExileOwnerUID", getPlayerUID _requestingPlayer];
_bambiPlayer setVariable ["ExileIsBambi", true];
_bambiPlayer setVariable ["ExileXM8IsOnline", false, true];
_bambiPlayer setVariable ["ExileLocker", (_accountData select 4), true];
_devFriendlyMode = getNumber (configFile >> "CfgSettings" >> "ServerSettings" >> "devFriendyMode");
if (_devFriendlyMode isEqualTo 1) then
{
_devs = getArray (configFile >> "CfgSettings" >> "ServerSettings" >> "devs");
{
if ((getPlayerUID _requestingPlayer) isEqualTo (_x select 0))exitWith
{
if((name _requestingPlayer) isEqualTo (_x select 1))then
{
_bambiPlayer setVariable ["ExileMoney", 500000, true];
_bambiPlayer setVariable ["ExileScore", 100000];
};
};
}
forEach _devs;
};
_parachuteNetID = "";
if ((getNumber(configFile >> "CfgSettings" >> "BambiSettings" >> "parachuteSpawning")) isEqualTo 1) then
{
_position set [2, getNumber(configFile >> "CfgSettings" >> "BambiSettings" >> "parachuteDropHeight")];
if ((getNumber(configFile >> "CfgSettings" >> "BambiSettings" >> "haloJump")) isEqualTo 1) then
{
_bambiPlayer addBackpackGlobal "B_Parachute";
_bambiPlayer setPosATL _position;
_spawnType = 2;
}
else
{
_parachuteObject = createVehicle ["Steerable_Parachute_F", _position, [], 0, "CAN_COLLIDE"];
_parachuteObject setDir _direction;
_parachuteObject setPosATL _position;
_parachuteObject enableSimulationGlobal true;
_parachuteNetID = netId _parachuteObject;
_spawnType = 1;
};
}
else
{
_spawnType = 0;
};
if((canTriggerDynamicSimulation _player) isEqualTo false) then
{
_player triggerDynamicSimulation true;
};
_bambiPlayer addMPEventHandler ["MPKilled", {_this call ExileServer_object_player_event_onMpKilled}];
_bambiPlayer call ExileServer_object_player_database_insert;
_bambiPlayer call ExileServer_object_player_database_update;
[
_sessionID,
"createPlayerResponse",
[
_bambiPlayer,
_parachuteNetID,
str (_accountData select 0),
(_accountData select 1),
(_accountData select 2),
100,
100,
0,
(getNumber (configFile >> "CfgSettings" >> "BambiSettings" >> "protectionDuration")) * 60,
_clanData,
_spawnType
]
]
call ExileServer_system_network_send_to;
[_sessionID, _bambiPlayer] call ExileServer_system_session_update;
true

View File

@ -0,0 +1,250 @@
/**
* ExileServer_object_player_database_load
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_data","_oldPlayerObject","_playerUID","_sessionID","_position","_direction","_player","_clanID","_clanName","_clanData","_clanGroup","_devFriendlyMode","_devs","_requestingPlayer","_bambiPlayer","_headgear","_goggles","_binocular","_primaryWeapon","_handgunWeapon","_secondaryWeapon","_currentWeapon","_uniform","_vest","_backpack","_uniformContainer","_vestContainer","_backpackContainer","_assignedItems"];
_data = _this select 0;
_oldPlayerObject = _this select 1;
_playerUID = _this select 2;
_sessionID = _this select 3;
_name = name _oldPlayerObject;
_position = [_data select 11, _data select 12, _data select 13];
_direction = _data select 10;
_player = (createGroup independent) createUnit ["Exile_Unit_Player", _position, [], 0, "CAN_COLLIDE"];
_player setDir _direction;
_player setPosATL _position;
_player disableAI "FSM";
_player disableAI "MOVE";
_player disableAI "AUTOTARGET";
_player disableAI "TARGET";
_player disableAI "CHECKVISIBLE";
_clanID = (_data select 42);
_clanName = (_data select 43);
if !((typeName _clanID) isEqualTo "SCALAR") then
{
_clanID = -1;
_clanData = [];
}
else
{
_clanData = missionnamespace getVariable [format ["ExileServer_clan_%1",_clanID],[]];
if(isNull (_clanData select 5))then
{
_clanGroup = createGroup independent;
_clanData set [5,_clanGroup];
_clanGroup setGroupIdGlobal [_clanData select 0];
missionNameSpace setVariable [format ["ExileServer_clan_%1",_clanID],_clanData];
}
else
{
_clanGroup = (_clanData select 5);
};
[_player] joinSilent _clanGroup;
};
_player setDamage (_data select 3);
_player setName _name;
_player setVariable ["ExileMoney", (_data select 38), true];
_player setVariable ["ExileScore", (_data select 39)];
_player setVariable ["ExileKills", (_data select 40)];
_player setVariable ["ExileDeaths", (_data select 41)];
_player setVariable ["ExileClanID", _clanID];
_player setVariable ["ExileClanData", _clanData];
_player setVariable ["ExileName", _name];
_player setVariable ["ExileOwnerUID", _playerUID];
_player setVariable ["ExileDatabaseID", _data select 0];
_player setVariable ["ExileHunger", _data select 4];
_player setVariable ["ExileThirst", _data select 5];
_player setVariable ["ExileAlcohol", _data select 6];
_player setVariable ["ExileTemperature", _data select 44];
_player setVariable ["ExileWetness", _data select 45];
_player setVariable ["ExileIsBambi", false];
_player setVariable ["ExileXM8IsOnline", false, true];
_player setOxygenRemaining (_data select 7);
_player setBleedingRemaining (_data select 8);
_player setVariable ["ExileLocker", (_data select 46), true];
[_player, _data select 9] call ExileClient_util_player_applyHitPointMap;
_devFriendlyMode = getNumber (configFile >> "CfgSettings" >> "ServerSettings" >> "devFriendyMode");
if (_devFriendlyMode isEqualTo 1) then
{
_devs = getArray (configFile >> "CfgSettings" >> "ServerSettings" >> "devs");
{
if ((getPlayerUID _requestingPlayer) isEqualTo (_x select 0))exitWith
{
if((name _requestingPlayer) isEqualTo (_x select 1))then
{
_bambiPlayer setVariable ["ExileMoney", 500000, true];
_bambiPlayer setVariable ["ExileScore", 100000];
};
};
}
forEach _devs;
};
_player call ExileClient_util_playerCargo_clear;
_headgear = _data select 23;
if (_headgear != "") then
{
_player addHeadgear _headgear;
};
_goggles = _data select 20;
if (_goggles != "") then
{
_player addGoggles _goggles;
};
_binocular = _data select 24;
if (_binocular != "") then
{
_player addWeaponGlobal _binocular;
};
_primaryWeapon = _data select 26;
if (_primaryWeapon != "") then
{
_player addWeaponGlobal _primaryWeapon;
removeAllPrimaryWeaponItems _player;
{
if (_x != "") then
{
_player addPrimaryWeaponItem _x;
};
}
forEach (_data select 27);
};
_handgunWeapon = _data select 22;
if (_handgunWeapon != "") then
{
_player addWeaponGlobal _handgunWeapon;
removeAllHandgunItems _player;
{
if (_x != "") then
{
_player addHandgunItem _x;
};
}
forEach (_data select 21);
};
_secondaryWeapon = _data select 28;
if (_secondaryWeapon != "") then
{
_player addWeaponGlobal _secondaryWeapon;
{
if (_x != "") then
{
_player addSecondaryWeaponItem _x;
};
}
forEach (_data select 29);
};
_currentWeapon = _data select 19;
if (_currentWeapon != "") then
{
_player selectWeapon _currentWeapon;
};
{
_player addWeaponItem [_x select 0, [_x select 1, _x select 2, _x select 3]];
}
forEach (_data select 25);
_uniform = _data select 30;
_vest = _data select 34;
_backpack = _data select 15;
if (_uniform != "") then
{
_player forceAddUniform _uniform;
};
if (_vest != "") then
{
_player addVest _vest;
};
if (_backpack != "") then
{
_player addBackpackGlobal _backpack;
};
_uniformContainer = uniformContainer _player;
if !(isNil "_uniformContainer") then
{
{
_uniformContainer addWeaponCargoGlobal _x;
}
forEach (_data select 33);
{
_uniformContainer addMagazineAmmoCargo [_x select 0, 1, _x select 1];
}
forEach (_data select 32);
{
_uniformContainer addItemCargoGlobal _x;
}
forEach (_data select 31);
};
_vestContainer = vestContainer _player;
if !(isNil "_vestContainer") then
{
{
_vestContainer addWeaponCargoGlobal _x;
}
forEach (_data select 37);
{
_vestContainer addMagazineAmmoCargo [_x select 0, 1, _x select 1];
}
forEach (_data select 36);
{
_vestContainer addItemCargoGlobal _x;
}
forEach (_data select 35);
};
_backpackContainer = backpackContainer _player;
if !(isNil "_backpackContainer") then
{
{
_backpackContainer addWeaponCargoGlobal _x;
}
forEach (_data select 18);
{
_backpackContainer addMagazineAmmoCargo [_x select 0, 1, _x select 1];
}
forEach (_data select 17);
{
_backpackContainer addItemCargoGlobal _x;
}
forEach (_data select 16);
};
_assignedItems = _data select 14;
if !(_assignedItems isEqualTo []) then
{
{
_player linkItem _x;
}
forEach _assignedItems;
};
_player addMPEventHandler ["MPKilled", {_this call ExileServer_object_player_event_onMpKilled}];
if((canTriggerDynamicSimulation _player) isEqualTo false) then
{
_player triggerDynamicSimulation true;
};
if (getNumber (configFile >> "CfgSettings" >> "VehicleSpawn" >> "thermalVision") isEqualTo 0) then
{
_player addEventHandler ["WeaponAssembled", {(_this select 1) disableTIEquipment true;}];
};
[
_sessionID,
"loadPlayerResponse",
[
(netId _player),
str (_player getVariable ["ExileScore", 0]),
(_player getVariable ["ExileKills", 0]),
(_player getVariable ["ExileDeaths", 0]),
(_player getVariable ["ExileHunger", 100]),
(_player getVariable ["ExileThirst", 100]),
(_player getVariable ["ExileAlcohol", 0]),
(_player getVariable ["ExileClanData", []]),
(_player getVariable ["ExileTemperature", 0]),
(_player getVariable ["ExileWetness", 0])
]
]
call ExileServer_system_network_send_to;
[_sessionID, _player] call ExileServer_system_session_update;
true

View File

@ -0,0 +1,194 @@
/**
* ExileServer_object_player_event_onMpKilled
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_victim","_killer","_countDeath","_countKill","_killSummary","_killingPlayer","_killType","_oldVictimRespect","_newVictimRespect","_oldKillerRespect","_newKillerRespect","_systemChat","_modifyVictimRespect","_respectLoss","_perks","_minRespectTransfer","_respectTransfer","_perkNames","_killerStatsNeedUpdate","_newKillerFrags","_victimStatsNeedUpdate","_newVictimDeaths","_victimPosition"];
_victim = _this select 0;
_killer = _this select 1;
if (!isServer || hasInterface || isNull _victim) exitWith {};
_victim setVariable ["ExileDiedAt", time];
if !(isPlayer _victim) exitWith {};
_victim setVariable ["ExileIsDead", true];
_victim setVariable ["ExileName", name _victim, true];
_countDeath = false;
_countKill = false;
_killSummary = [];
_killingPlayer = _killer call ExileServer_util_getFragKiller;
_killType = [_victim, _killer, _killingPlayer] call ExileServer_util_getFragType;
_oldVictimRespect = _victim getVariable ["ExileScore", 0];
_newVictimRespect = _oldVictimRespect;
_oldKillerRespect = 0;
if !(isNull _killingPlayer) then
{
_oldKillerRespect = _killingPlayer getVariable ["ExileScore", 0];
};
_newKillerRespect = _oldKillerRespect;
switch (_killType) do
{
default
{
_countDeath = true;
_systemChat = format ["%1 died for an unknown reason!", name _victim];
_newVictimRespect = _oldVictimRespect - round ((abs _oldVictimRespect) / 100 * (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Percentages" >> "unlucky")));
};
case 1:
{
_countDeath = true;
_modifyVictimRespect = true;
_systemChat = format ["%1 commited suicide!", name _victim];
_newVictimRespect = _oldVictimRespect - round ((abs _oldVictimRespect) / 100 * (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Percentages" >> "suicide")));
};
case 2:
{
_countDeath = true;
_countKill = false;
_systemChat = format ["%1 died while playing Russian Roulette!", name _victim];
_newVictimRespect = _oldVictimRespect;
_victim call ExileServer_system_russianRoulette_event_onPlayerDied;
};
case 3:
{
_countDeath = true;
_countKill = false;
_systemChat = format ["%1 crashed to death!", name _victim];
_newVictimRespect = _oldVictimRespect - round ((abs _oldVictimRespect) / 100 * (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Percentages" >> "crash")));
};
case 4:
{
_countDeath = true;
_countKill = false;
_systemChat = format ["%1 was killed by an NPC!", name _victim];
_newVictimRespect = _oldVictimRespect - round ((abs _oldVictimRespect) / 100 * (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Percentages" >> "npc")));
};
case 5:
{
_countDeath = false;
_countKill = false;
_systemChat = format ["%1 was team-killed by %2!", name _victim, name _killingPlayer];
_respectLoss = round ((abs _oldKillerRespect) / 100 * (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Percentages" >> "friendyFire")));
_newKillerRespect = _oldKillerRespect - _respectLoss;
_killSummary pushBack ["FRIENDLY FIRE", -1 * _respectLoss];
};
case 6:
{
_countDeath = false;
_countKill = false;
_systemChat = format ["%1 was killed by %2! (BAMBI SLAYER)", name _victim, name _killingPlayer];
_respectLoss = round ((abs _oldKillerRespect) / 100 * (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Percentages" >> "bambiKill")));
_newKillerRespect = _oldKillerRespect - _respectLoss;
_killSummary pushBack ["BAMBI SLAYER", -1 * _respectLoss];
};
case 7:
{
_countDeath = true;
_countKill = true;
_perks = [_victim, _killer, _killingPlayer] call ExileServer_util_getFragPerks;
_minRespectTransfer = getNumber (configFile >> "CfgSettings" >> "Respect" >> "minRespectTransfer");
_respectTransfer = round ((abs _oldVictimRespect) / 100 * (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Percentages" >> "frag")));
if (_respectTransfer < _minRespectTransfer) then
{
_respectTransfer = _minRespectTransfer;
};
_newVictimRespect = _oldVictimRespect - _respectTransfer;
_newKillerRespect = _oldKillerRespect + _respectTransfer;
_killSummary pushBack ["ENEMY FRAGGED", _respectTransfer];
if (_perks isEqualTo []) then
{
_systemChat = format ["%1 was killed by %2!", name _victim, name _killingPlayer];
}
else
{
_perkNames = [];
{
_perkNames pushBack (_x select 0);
_killSummary pushBack _x;
_newKillerRespect = _newKillerRespect + (_x select 1);
}
forEach _perks;
_systemChat = format ["%1 was killed by %2! (%3)", name _victim, name _killingPlayer, _perkNames joinString ", "];
};
};
};
if !(isNull _killingPlayer) then
{
if !(_killSummary isEqualTo []) then
{
[_killingPlayer, "showFragRequest", [_killSummary]] call ExileServer_system_network_send_to;
};
};
if !(isNull _killingPlayer) then
{
_killerStatsNeedUpdate = false;
if (_countKill) then
{
_newKillerFrags = _killingPlayer getVariable ["ExileKills", 0];
_newKillerFrags = _newKillerFrags + 1;
_killerStatsNeedUpdate = true;
_killingPlayer setVariable ["ExileKills", _newKillerFrags];
format["addAccountKill:%1", getPlayerUID _killingPlayer] call ExileServer_system_database_query_fireAndForget;
};
if !(_newKillerRespect isEqualTo _oldKillerRespect) then
{
_killingPlayer setVariable ["ExileScore", _newKillerRespect];
_killerStatsNeedUpdate = true;
format["setAccountScore:%1:%2", _newKillerRespect, getPlayerUID _killingPlayer] call ExileServer_system_database_query_fireAndForget;
};
if (_killerStatsNeedUpdate) then
{
_killingPlayer call ExileServer_object_player_sendStatsUpdate;
};
};
_victimStatsNeedUpdate = false;
if (_countDeath) then
{
_newVictimDeaths = _victim getVariable ["ExileDeaths", 0];
_newVictimDeaths = _newVictimDeaths + 1;
_victim setVariable ["ExileDeaths", _newVictimDeaths];
_victimStatsNeedUpdate = true;
format["addAccountDeath:%1", getPlayerUID _victim] call ExileServer_system_database_query_fireAndForget;
};
if !(_newVictimRespect isEqualTo _oldVictimRespect) then
{
_victim setVariable ["ExileScore", _newVictimRespect];
_victimStatsNeedUpdate = true;
format["setAccountScore:%1:%2", _newVictimRespect, getPlayerUID _victim] call ExileServer_system_database_query_fireAndForget;
};
if (_victimStatsNeedUpdate) then
{
_victim call ExileServer_object_player_sendStatsUpdate;
};
if ((vehicle _victim) isEqualTo _victim) then
{
if !(underwater _victim) then
{
if !(_victim call ExileClient_util_world_isInTraderZone) then
{
_victim call ExileServer_object_flies_spawn;
};
};
};
if !(_systemChat isEqualTo "") then
{
if ((getNumber (configFile >> "CfgSettings" >> "KillFeed" >> "showKillFeed")) isEqualTo 1) then
{
["systemChatRequest", [_systemChat]] call ExileServer_system_network_send_broadcast;
};
};
if !(_systemChat isEqualTo "") then
{
if ((getNumber (configFile >> "CfgSettings" >> "Logging" >> "deathLogging")) isEqualTo 1) then
{
"extDB3" callExtension format["1:DEATH:%1", _systemChat];
};
};
_victimPosition = getPos _victim;
format["insertPlayerHistory:%1:%2:%3:%4:%5", getPlayerUID _victim, name _victim, _victimPosition select 0, _victimPosition select 1, _victimPosition select 2] call ExileServer_system_database_query_fireAndForget;
format["deletePlayer:%1", _victim getVariable ["ExileDatabaseId", -1]] call ExileServer_system_database_query_fireAndForget;
true

View File

@ -0,0 +1,22 @@
/**
* ExileServer_object_vehicle_createNonPersistentVehicle
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_className","_position","_direction","_usePositionATL","_vehicleObject"];
_className = _this select 0;
_position = _this select 1;
_direction = _this select 2;
_usePositionATL = _this select 3;
_vehicleObject = [_className, _position, _direction, _usePositionATL] call ExileServer_object_vehicle_carefulCreateVehicle;
_vehicleObject setVariable ["ExileIsPersistent", false];
_vehicleObject addEventHandler ["GetIn", {_this call ExileServer_object_vehicle_event_onGetIn}];
_vehicleObject addMPEventHandler ["MPKilled", { if !(isServer) exitWith {}; _this call ExileServer_object_vehicle_event_onMPKilled;}];
_vehicleObject enableDynamicSimulation true;
_vehicleObject

View File

@ -0,0 +1,25 @@
/**
* ExileServer_object_vehicle_createPersistentVehicle
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_className","_position","_direction","_usePositionATL","_pinCode","_vehicleObject"];
_className = _this select 0;
_position = _this select 1;
_direction = _this select 2;
_usePositionATL = _this select 3;
_pinCode = _this select 4;
_vehicleObject = [_className, _position, _direction, _usePositionATL] call ExileServer_object_vehicle_carefulCreateVehicle;
_vehicleObject setVariable ["ExileIsPersistent", true];
_vehicleObject setVariable ["ExileAccessCode", _pinCode];
_vehicleObject addEventHandler ["GetOut", {_this call ExileServer_object_vehicle_event_onGetOut}];
_vehicleObject addEventHandler ["GetIn", {_this call ExileServer_object_vehicle_event_onGetIn}];
_vehicleObject addMPEventHandler ["MPKilled", { if !(isServer) exitWith {}; _this call ExileServer_object_vehicle_event_onMPKilled;}];
_vehicleObject enableDynamicSimulation true;
_vehicleObject

View File

@ -0,0 +1,82 @@
/**
* ExileServer_object_vehicle_database_load
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_vehicleID","_data","_position","_vectorDirection","_vectorUp","_pinCode","_texture","_vehicleObject","_lock","_unlockInSafeZonesAfterRestart","_isLocked","_hitpoints","_cargoContainers"];
_vehicleID = _this;
_data = format ["loadVehicle:%1", _vehicleID] call ExileServer_system_database_query_selectSingle;
_position = [_data select 8, _data select 9, _data select 10];
_vectorDirection = [_data select 11, _data select 12, _data select 13];
_vectorUp = [_data select 14, _data select 15, _data select 16];
_pinCode = _data select 20;
_texture = _data select 21;
_vehicleObject = [(_data select 1), _position, [_vectorDirection, _vectorUp], true,_pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
_vehicleObject setVariable ["ExileDatabaseID", _vehicleID];
_vehicleObject setVariable ["ExileOwnerUID", (_data select 3)];
_vehicleObject setVariable ["ExileMoney", (_data select 23), true];
_lock = (_data select 4);
_unlockInSafeZonesAfterRestart = (getNumber (configFile >> "CfgSettings" >> "VehicleSpawn" >> "unlockInSafeZonesAfterRestart")) isEqualTo 1;
_isLocked = (_lock isEqualTo -1);
if (_isLocked) then
{
if (_unlockInSafeZonesAfterRestart) then
{
if (_position call ExileClient_util_world_isInTraderZone) then
{
_isLocked = false;
};
};
};
if (_isLocked) then
{
_vehicleObject setVariable ["ExileIsLocked", -1];
_vehicleObject lock 2;
_vehicleObject enableRopeAttach false;
}
else
{
_vehicleObject setVariable ["ExileIsLocked", 0];
_vehicleObject lock 0;
_vehicleObject enableRopeAttach true;
};
_vehicleObject setFuel (_data select 5);
_vehicleObject setDamage (_data select 6);
_hitpoints = _data select 7;
if ((typeName _hitpoints) isEqualTo "ARRAY") then
{
{
_vehicleObject setHitPointDamage [_x select 0, _x select 1];
}
forEach _hitpoints;
};
[_vehicleObject, (_data select 17)] call ExileServer_util_fill_fillItems;
[_vehicleObject, (_data select 18)] call ExileServer_util_fill_fillMagazines;
[_vehicleObject, (_data select 19)] call ExileServer_util_fill_fillWeapons;
_cargoContainers = format ["loadVehicleContainer:%1", _vehicleID] call ExileServer_system_database_query_selectSingle;
if ((typeName _cargoContainers) isEqualTo "ARRAY") then
{
if !(_cargoContainers isEqualTo []) then
{
[_vehicleObject, (_cargoContainers select 0)] call ExileServer_util_fill_fillContainers;
};
};
if !(_texture isEqualTo "") then
{
{
_vehicleObject setObjectTextureGlobal [_forEachIndex, _texture select _forEachIndex];
}
forEach _texture;
};
_vehicleObject enableDynamicSimulation true;
if (_vehicleObject call ExileClient_util_world_isInTraderZone) then
{
_vehicleObject allowDamage false;
};
_vehicleObject

View File

@ -0,0 +1,62 @@
/**
* ExileServer_system_database_connect
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_isConnected","_error","_result"];
_isConnected = false;
_error_locked = false;
ExileServerDatabaseSessionId = "";
ExileServerRconSessionID = "";
try
{
_result = "extDB3" callExtension "9:VERSION";
format ["Installed extDB3 version: %1", _result] call ExileServer_util_log;
if ((parseNumber _result) < 1.027) then
{
throw format ["Error Required extDB3 Version 1.027 or higher: %1", _result];
};
_result = parseSimpleArray ("extDB3" callExtension "9:ADD_DATABASE:exile");
if (_result select 0 isEqualTo 0) then
{
throw format ["Could not add database: %1", _result];
};
"Connected to database!" call ExileServer_util_log;
ExileServerDatabaseSessionId = "SQL"; //str(round(random(999999)));
_result = parseSimpleArray ("extDB3" callExtension "9:ADD_DATABASE_PROTOCOL:exile:SQL_CUSTOM:SQL:exile.ini");
if ((_result select 0) isEqualTo 0) then
{
throw format ["Failed to initialize database protocol: %1", _result];
};
ExileServerStartTime = (parseSimpleArray ("extDB3" callExtension "9:LOCAL_TIME")) select 1;
"Database protocol initialized!" call ExileServer_util_log;
"extDB3" callExtension "9:ADD_PROTOCOL:LOG:TRADING:Exile_TradingLog";
"extDB3" callExtension "9:ADD_PROTOCOL:LOG:DEATH:Exile_DeathLog";
"extDB3" callExtension "9:ADD_PROTOCOL:LOG:TERRITORY:Exile_TerritoryLog";
"extDB3" callExtension "9:LOCK";
_isConnected = true;
}
catch
{
if (!_error_locked) then
{
"MySQL connection error!" call ExileServer_util_log;
"Make sure [Database] in the extdb3-conf.ini is set to [exile] unless you have a different database setup!!!!!" call ExileServer_util_log;
"Please have a look at @extDB3/logs/ to find out what went wrong." call ExileServer_util_log;
format ["MySQL Error: %1", _exception] call ExileServer_util_log;
"Server will shutdown now :(" call ExileServer_util_log;
//"extDB3" callExtension "9:SHUTDOWN"; Not implemented in extDB3
}
else
{
format ["extDB3: %1", _exception] call ExileServer_util_log;
"Check your server rpt for errors, your mission might be stuck a loop restarting" call ExileServer_util_log;
};
};
_isConnected

View File

@ -0,0 +1,21 @@
/**
* ExileServer_system_database_handleBig
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_key","_result","_pipe"];
_key = _this;
_result = "";
while{true} do
{
_pipe = "extDB3" callExtension format["5:%1", _key];
if(_pipe isEqualTo "") exitWith {};
_result = _result + _pipe;
};
call (compile _result)

View File

@ -0,0 +1,16 @@
/**
* ExileServer_system_database_query_fireAndForget
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_parameters","_query"];
_parameters = _this;
_query = [1, "SQL",_parameters] joinString ":";
"extDB3" callExtension _query;
true

View File

@ -0,0 +1,16 @@
/**
* ExileServer_system_database_query_insertSingle
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_parameters","_query","_result"];
_parameters = _this;
_query = [0, "SQL",_parameters] joinString ":";
_result = parseSimpleArray ("extDB3" callExtension _query);
(_result select 1) select 0

View File

@ -0,0 +1,27 @@
/**
* ExileServer_system_database_query_selectFull
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_parameters","_query","_result"];
_parameters = _this;
_query = [0, "SQL",_parameters] joinString ":";
_result = parseSimpleArray ("extDB3" callExtension _query);
switch (_result select 0) do
{
case 0:
{
(format["Database Error: %1", (_result select 1)]) call ExileServer_util_log;
};
case 2:
{
_result = (_result select 1) call ExileServer_system_database_handleBig;
};
};
_result select 1

View File

@ -0,0 +1,27 @@
/**
* ExileServer_system_database_query_selectSingle
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_parameters","_query","_result"];
_parameters = _this;
_query = [0, "SQL",_parameters] joinString ":";
_result = parseSimpleArray ("extDB3" callExtension _query);
switch (_result select 0) do
{
case 0:
{
(format["Database Error: %1", (_result select 1)]) call ExileServer_util_log;
};
case 2:
{
_result = (_result select 1) call ExileServer_system_database_handleBig;
};
};
(_result select 1) select 0

View File

@ -0,0 +1,27 @@
/**
* ExileServer_system_database_query_selectSingleField
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_parameters","_query","_result"];
_parameters = _this;
_query = [0,"SQL",_parameters] joinString ":";
_result = parseSimpleArray ("extDB3" callExtension _query);
switch (_result select 0) do
{
case 0:
{
(format["Database Error: %1", (_result select 1)]) call ExileServer_util_log;
};
case 2:
{
_result = (_result select 1) call ExileServer_system_database_handleBig;
};
};
((_result select 1) select 0) select 0

View File

@ -0,0 +1,40 @@
/**
* ExileServer_system_territory_database_insert
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_flagObject","_territoryName","_flagTexture","_territorySize","_owner","_position","_build","_moderators","_data","_extDB2Message","_territoryID"];
_flagObject = _this select 0;
_territoryName = _this select 1;
_flagTexture = _this select 2;
_territorySize = ((getArray(missionConfigFile >> "CfgTerritories" >> "prices")) select 0)select 1;
_owner = _flagObject getVariable ["ExileOwnerUID",""];
_position = getPosATL _flagObject;
_build_rights = _flagObject getVariable ["ExileTerritoryBuildRights",[]];
_moderators = _flagObject getVariable ["ExileTerritoryModerators",[]];
_data =
[
_owner,
_territoryName,
_position select 0,
_position select 1,
_position select 2,
_territorySize,
1,
_flagTexture,
0,
_build_rights,
_moderators,
""
];
_extDB2Message = ["createTerritory", _data] call ExileServer_util_extDB2_createMessage;
_territoryID = _extDB2Message call ExileServer_system_database_query_insertSingle;
_flagObject setVariable ["ExileDatabaseID",_territoryID];
_flagObject setVariable ["ExileFlagTexture",_flagTexture];
true

View File

@ -0,0 +1,19 @@
/**
* ExileServer_system_territory_maintenance_recalculateDueDate
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_flag","_currentTimestamp","_flagBuild","_maintenancePeriod","_maintenancePeriodDueDate"];
_flag = _this;
_currentTimestamp = call ExileServer_util_time_currentTime;
_flagBuild = _flag getVariable ["ExileTerritoryLastPayed", _currentTimestamp];
_maintenancePeriod = getNumber(configFile >> "CfgSettings" >> "GarbageCollector" >> "Database" >> "territoryLifeTime");
_maintenancePeriodDueDate = parseSimpleArray ("extDB3" callExtension format["9:DATEADD:%1:[%2,0,0,0]",_flagBuild,_maintenancePeriod]);
_flag setVariable ["ExileTerritoryMaintenanceDue", _maintenancePeriodDueDate select 1, true];
true

View File

@ -0,0 +1,54 @@
/**
* ExileServer_system_territory_network_flagStolenRequest
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_sessionID","_parameters","_flag","_playerObject","_databaseID","_level","_flagPosition","_spawnRadius","_weaponHolderPosition","_weaponHolder","_logging","_territoryLog"];
_sessionID = _this select 0;
_parameters = _this select 1;
_flag = _parameters select 0;
try
{
_playerObject = _sessionID call ExileServer_system_session_getPlayerObject;
if (isNull _playerObject) then
{
throw "Player Object NULL";
};
if ((_flag getVariable ["ExileFlagStolen", 0]) isEqualTo 1) then
{
throw "Flag already stolen!";
};
if ((_playerObject distance2D _flag) > 5) then
{
throw "You are too far away!";
};
_databaseID = _flag getVariable ["ExileDatabaseID",0];
_level = _flag getVariable ["ExileTerritoryLevel",_level];
_flagPosition = getPosATL _flag;
_flagPosition set[2, 0];
_spawnRadius = 3;
_weaponHolderPosition = getPosATL _playerObject;
_weaponHolder = createVehicle ["GroundWeaponHolder", _weaponHolderPosition, [], 0, "CAN_COLLIDE"];
_weaponHolder setPosATL _weaponHolderPosition;
_weaponHolder addMagazineCargoGlobal [format["Exile_Item_FlagStolen%1", _level], 1];
_flag setVariable ["ExileFlagStolen", 1, true];
format["flagStolen:%1:%2",getPlayerUID _playerObject,_databaseID] call ExileServer_system_database_query_fireAndForget;
_logging = getNumber(configFile >> "CfgSettings" >> "Logging" >> "territoryLogging");
if (_logging isEqualTo 1) then
{
_territoryLog = format ["PLAYER ( %1 ) %2 STOLE A LEVEL %3 FLAG FROM TERRITORY #%4",getPlayerUID _playerObject,_playerObject,_level,_databaseID];
"extDB3" callExtension format["1:TERRITORY:%1",_territoryLog];
};
_flag call ExileServer_system_xm8_sendFlagStolen;
}
catch
{
[_sessionID, "toastRequest", ["ErrorTitleAndText", ["Failed to steal!", _exception]]] call ExileServer_system_network_send_to;
};
true

View File

@ -0,0 +1,79 @@
/**
* ExileServer_system_territory_network_payFlagRansomRequest
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_sessionID","_parameters","_flagNetID","_flag","_playerObject","_buildRights","_playerUID","_level","_itemClassName","_flagFee","_playerMoney","_logging","_databaseID","_territoryLog"];
_sessionID = _this select 0;
_parameters = _this select 1;
_flagNetID = _parameters select 0;
try
{
_flag = objectFromNetid _flagNetID;
if (isNull _flag) then
{
throw "Territory not found!";
};
if ((_flag getVariable ["ExileFlagStolen", 1]) isEqualTo 0) then
{
throw "Flag not stolen!";
};
_playerObject = _sessionID call ExileServer_system_session_getPlayerObject;
if (isNull _playerObject) then
{
throw "You do not exist!";
};
if !(alive _playerObject) then
{
throw "You are dead!";
};
_buildRights = _flag getVariable ["ExileTerritoryBuildRights", []];
_playerUID = getPlayerUID _playerObject;
if !(_playerUID in _buildRights) then
{
throw "Missing build rights!";
};
_level = _flag getVariable ["ExileTerritoryLevel", 0];
_itemClassName = format["Exile_Item_FlagStolen%1", _level];
if !(isClass (missionConfigFile >> "CfgExileArsenal" >> _itemClassName) ) then
{
throw "Flag price not found!";
};
_flagFee = getNumber (missionConfigFile >> "CfgExileArsenal" >> _itemClassName >> "price");
if (_flagFee <= 0) then
{
throw "Invalid flag price!";
};
_playerMoney = _playerObject getVariable ["ExileMoney", 0];
if (_playerMoney < _flagFee) then
{
throw "You are too poor!";
};
if !(_playerObject canAdd _itemClassName) then
{
throw "Inventory is full!";
};
_playerMoney = _playerMoney - _flagFee;
_playerObject setVariable ["ExileMoney", _playerMoney, true];
format ["setPlayerMoney:%1:%2", _playerMoney, _playerObject getVariable ["ExileDatabaseID", 0]] call ExileServer_system_database_query_fireAndForget;
_playerObject addItem _itemClassName;
_logging = getNumber(configFile >> "CfgSettings" >> "Logging" >> "territoryLogging");
if (_logging isEqualTo 1) then
{
_databaseID = _flag getVariable ["ExileDatabaseID",0];
_territoryLog = format ["PLAYER ( %1 ) %2 PAID %3 POP TABS FOR THE RANSOM OF TERRITORY #%4 | PLAYER TOTAL POP TABS: %5", _playerUID, _playerObject, _flagFee, _databaseID, _playerMoney];
"extDB3" callExtension format["1:TERRITORY:%1", _territoryLog];
};
[_sessionID, "toastRequest", ["SuccessTitleOnly", ["Random paid!"]]] call ExileServer_system_network_send_to;
}
catch
{
[_sessionID, "toastRequest", ["ErrorTitleAndText", ["Failed to pay!", _exception]]] call ExileServer_system_network_send_to;
};
true

View File

@ -0,0 +1,64 @@
/**
* ExileServer_system_territory_network_payTerritoryProtectionMoneyRequest
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_sessionID","_parameters","_flagNetID","_playerObject","_flagObject","_flagStolen","_territoryDatabaseID","_radius","_level","_objectsInTerritory","_popTabAmountPerObject","_totalPopTabAmount","_playerPopTabs","_currentTimestamp","_logging","_territoryLog"];
_sessionID = _this select 0;
_parameters = _this select 1;
_flagNetID = _parameters select 0;
try
{
_playerObject = _sessionID call ExileServer_system_session_getPlayerObject;
if (isNull _playerObject) then
{
throw "Invalid player object";
};
_flagObject = objectFromNetId _flagNetID;
if (isNull _flagObject) then
{
throw "Invalid flag object";
};
_flagStolen = _flagObject getVariable ["ExileFlagStolen", 0];
if (_flagStolen isEqualTo 1) then
{
throw "Flag stolen!";
};
_territoryDatabaseID = _flagObject getVariable ["ExileDatabaseID", 0];
_radius = _flagObject getVariable ["ExileTerritorySize", 15];
_level = _flagObject getVariable ["ExileTerritoryLevel", 1];
_objectsInTerritory = _flagObject getVariable ["ExileTerritoryNumberOfConstructions", 0];
_popTabAmountPerObject = getNumber (missionConfigFile >> "CfgTerritories" >> "popTabAmountPerObject");
_totalPopTabAmount = _level * _popTabAmountPerObject * _objectsInTerritory;
_playerPopTabs = _playerObject getVariable ["ExileMoney", 0];
if (_playerPopTabs < _totalPopTabAmount) then
{
throw "You do not have enough pop tabs!";
};
_playerPopTabs = _playerPopTabs - _totalPopTabAmount;
_playerObject setVariable ["ExileMoney", _playerPopTabs, true];
format["setPlayerMoney:%1:%2", _playerPopTabs, _playerObject getVariable ["ExileDatabaseID", 0]] call ExileServer_system_database_query_fireAndForget;
_currentTimestamp = call ExileServer_util_time_currentTime;
_flagObject setVariable ["ExileTerritoryLastPayed", _currentTimestamp];
_flagObject call ExileServer_system_territory_maintenance_recalculateDueDate;
format["maintainTerritory:%1", _territoryDatabaseID] call ExileServer_system_database_query_fireAndForget;
[_sessionID, "toastRequest", ["SuccessTitleOnly", ["Protection money paid!"]]] call ExileServer_system_network_send_to;
_logging = getNumber(configFile >> "CfgSettings" >> "Logging" >> "territoryLogging");
if (_logging isEqualTo 1) then
{
_territoryLog = format ["PLAYER ( %1 ) %2 PAID %3 POP TABS TO PROTECT TERRITORY #%4 | PLAYER TOTAL POP TABS: %5",getPlayerUID _playerObject,_playerObject,_totalPopTabAmount,_territoryDatabaseID,_playerPopTabs];
"extDB3" callExtension format["1:TERRITORY:%1",_territoryLog];
};
_flagObject call ExileServer_system_xm8_sendProtectionMoneyPaid;
}
catch
{
[_sessionID, "toastRequest", ["ErrorTitleAndText", ["Failed to pay!", _exception]]] call ExileServer_system_network_send_to;
_exception call ExileServer_util_log;
};

View File

@ -0,0 +1,46 @@
/**
* ExileServer_system_territory_network_purchaseTerritory
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_sessionID","_player","_price","_playerMoney","_logging","_territoryLog"];
_sessionID = _this select 0;
try
{
_player = _sessionID call ExileServer_system_session_getPlayerObject;
if (isNull _player) then
{
throw 1;
};
if !(alive _player) then
{
throw 2;
};
_price = ((getArray(missionConfigFile >> "CfgTerritories" >> "prices")) select 0) select 0;
_playerMoney = _player getVariable ["ExileMoney", 0];
if (_price > _playerMoney) then
{
throw 3;
};
_playerMoney = _playerMoney - _price;
_player setVariable ["ExileMoney", _playerMoney, true];
format["setPlayerMoney:%1:%2", _playerMoney, _player getVariable ["ExileDatabaseID", 0]] call ExileServer_system_database_query_fireAndForget;
[_sessionID, "purchaseTerritoryResponse" , [0]] call ExileServer_system_network_send_to;
_logging = getNumber(configFile >> "CfgSettings" >> "Logging" >> "territoryLogging");
if (_logging isEqualTo 1) then
{
_territoryLog = format ["PLAYER ( %1 ) %2 PAID %3 POP TABS TO PURCHASE A TERRITORY FLAG | PLAYER TOTAL POP TABS: %4",getPlayerUID _player,_player,_price,_playerMoney];
"extDB3" callExtension format["1:TERRITORY:%1",_territoryLog];
};
}
catch
{
[_sessionID, "purchaseTerritoryResponse" , [_exception]] call ExileServer_system_network_send_to;
};
true

View File

@ -0,0 +1,71 @@
/**
* ExileServer_system_territory_network_restoreFlagRequest
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_sessionID","_parameters","_flagNetID","_flag","_playerObject","_buildRights","_playerUID","_level","_itemClassName","_territoryDatabaseID","_flagTexture","_logging"];
_sessionID = _this select 0;
_parameters = _this select 1;
_flagNetID = _parameters select 0;
try
{
_flag = objectFromNetid _flagNetID;
if (isNull _flag) then
{
throw "Territory not found!";
};
if ((_flag getVariable ["ExileFlagStolen", 1]) isEqualTo 0) then
{
throw "Flag is not stolen!";
};
_playerObject = _sessionID call ExileServer_system_session_getPlayerObject;
if (isNull _playerObject) then
{
throw "You do not exist!";
};
if !(alive _playerObject) then
{
throw "You are dead! Didn't you know that?";
};
if ((_playerObject distance2D _flag) > 4) then
{
throw "You are too far away.";
};
_buildRights = _flag getVariable ["ExileTerritoryBuildRights", []];
_playerUID = getPlayerUID _playerObject;
if !(_playerUID in _buildRights) then
{
throw "Missing build rights.";
};
_level = _flag getVariable ["ExileTerritoryLevel", 0];
_itemClassName = format["Exile_Item_FlagStolen%1", _level];
if !(_itemClassName in (magazines _playerObject)) then
{
throw format ["You need a level %1 flag.", _level];
};
_playerObject removeItem _itemClassName;
_territoryDatabaseID = _flag getVariable ["ExileDatabaseID", 0];
format["flagRestore:%1", _territoryDatabaseID] call ExileServer_system_database_query_fireAndForget;
_flag setVariable ["ExileFlagStolen", 0, true];
_flag setFlagOwner objNull;
_flagTexture = _flag getVariable "ExileFlagTexture";
_flag setFlagTexture _flagTexture;
_logging = getNumber(configFile >> "CfgSettings" >> "Logging" >> "territoryLogging");
if (_logging isEqualTo 1) then
{
"extDB3" callExtension format ["1:TERRITORY:PLAYER ( %1 ) %2 RESTORED THE FLAG OF TERRITORY #%3", _playerUID, _playerObject, _territoryDatabaseID];
};
[_sessionID, "toastRequest", ["SuccessTitleAndText", ["Flag has been restored!", "You can now maintain and build on our territory again."]]] call ExileServer_system_network_send_to;
_flag call ExileServer_system_xm8_sendFlagRestored;
}
catch
{
[_sessionID, "toastRequest", ["ErrorTitleAndText", ["Failed to restore!", _exception]]] call ExileServer_system_network_send_to;
};
true

View File

@ -0,0 +1,72 @@
/**
* ExileServer_system_territory_network_territoryUpgradeRequest
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_sessionID","_parameters","_flag","_playerObject","_databaseID","_moderators","_level","_territoryConfig","_territoryLevels","_territoryPrice","_territoryRange","_playerMoney","_logging","_territoryLog"];
_sessionID = _this select 0;
_parameters = _this select 1;
_flag = _parameters select 0;
try
{
if (isNull _flag) then
{
throw "Invalid flag object";
};
if ((_flag getVariable ["ExileFlagStolen", 0]) isEqualTo 1) then
{
throw "Flag is stolen!";
};
_playerObject = _sessionID call ExileServer_system_session_getPlayerObject;
if (isNull _playerObject) then
{
throw "Player Object NULL";
};
_databaseID = _flag getVariable ["ExileDatabaseID",0];
_moderators = _flag getVariable ["ExileTerritoryModerators",[]];
if !((getPlayerUID _playerObject) in _moderators) then
{
throw "No upgrade Access!";
};
_level = _flag getVariable ["ExileTerritoryLevel",_level];
_territoryConfig = getArray(missionConfigFile >> "CfgTerritories" >> "Prices");
_territoryLevels = count _territoryConfig;
if (_territoryLevels < (_level + 1)) then
{
throw "This territory has already the highest level.";
};
_territoryPrice = (_territoryConfig select _level) select 0;
_territoryRange = (_territoryConfig select _level) select 1;
_playerMoney = _playerObject getVariable ["ExileMoney",0];
if (_playerMoney < _territoryPrice) then
{
throw "Not enough pop tabs!";
};
_playerMoney = _playerMoney - _territoryPrice;
_playerObject setVariable ["ExileMoney", _playerMoney, true];
format["setPlayerMoney:%1:%2", _playerMoney, _playerObject getVariable ["ExileDatabaseID", 0]] call ExileServer_system_database_query_fireAndForget;
_flag setVariable ["ExileTerritoryLevel",_level + 1, true];
_flag setVariable ["ExileTerritorySize",_territoryRange, true];
format ["setTerritoryLevel:%1:%2",_level + 1,_databaseID] call ExileServer_system_database_query_fireAndForget;
format ["setTerritorySize:%1:%2",_territoryRange,_databaseID] call ExileServer_system_database_query_fireAndForget;
_flag call ExileServer_system_territory_updateNearContainers;
_flag call ExileServer_system_territory_updateNearConstructions;
[_sessionID, "toastRequest", ["SuccessTitleAndText", ["Territory upgraded!", format ["Your territory has reached level %1 and now has a new radius of %2 meters.", _level + 1, _territoryRange]]]] call ExileServer_system_network_send_to;
_logging = getNumber(configFile >> "CfgSettings" >> "Logging" >> "territoryLogging");
if (_logging isEqualTo 1) then
{
_territoryLog = format ["PLAYER ( %1 ) %2 PAID %3 POP TABS TO UPGRADE TERRITORY #%4 TO LEVEL %5 | PLAYER TOTAL POP TABS: %6",getPlayerUID _playerObject,_playerObject,_territoryPrice,_databaseID,(_level + 1),_playerMoney];
"extDB3" callExtension format["1:TERRITORY:%1",_territoryLog];
};
}
catch
{
[_sessionID, "toastRequest", ["ErrorTitleAndText", ["Failed to upgrade!", _exception]]] call ExileServer_system_network_send_to;
};
true

View File

@ -0,0 +1,82 @@
/**
* ExileServer_system_trading_network_purchaseItemRequest
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_sessionID","_parameters","_itemClassName","_quantity","_containerType","_containerNetID","_playerObject","_vehicleObject","_salesPrice","_playerMoney","_playerRespect","_quality","_requiredRespect","_logging","_traderLog","_responseCode"];
_sessionID = _this select 0;
_parameters = _this select 1;
_itemClassName = _parameters select 0;
_quantity = _parameters select 1;
_containerType = _parameters select 2;
_containerNetID = _parameters select 3;
try
{
_playerObject = _sessionID call ExileServer_system_session_getPlayerObject;
if (_playerObject getVariable ["ExileMutex",false]) then
{
throw 12;
};
_playerObject setVariable ["ExileMutex",true];
_vehicleObject = objNull;
if (isNull _playerObject) then
{
throw 1;
};
if !(alive _playerObject) then
{
throw 2;
};
if !(isClass (missionConfigFile >> "CfgExileArsenal" >> _itemClassName) ) then
{
throw 3;
};
_salesPrice = getNumber (missionConfigFile >> "CfgExileArsenal" >> _itemClassName >> "price");
if (_salesPrice <= 0) then
{
throw 4;
};
_playerMoney = _playerObject getVariable ["ExileMoney", 0];
if (_playerMoney < _salesPrice) then
{
throw 5;
};
_playerRespect = _playerObject getVariable ["ExileScore", 0];
_quality = getNumber(missionConfigFile >> "CfgExileArsenal" >> _itemClassName >> "quality");
_requiredRespect = getNumber(missionConfigFile >> "CfgTrading" >> "requiredRespect" >> format["Level%1",_quality]);
if (_playerRespect < _requiredRespect) then
{
throw 14;
};
_playerMoney = _playerMoney - _salesPrice;
_playerObject setVariable ["ExileMoney", _playerMoney, true];
format["setPlayerMoney:%1:%2", _playerMoney, _playerObject getVariable ["ExileDatabaseID", 0]] call ExileServer_system_database_query_fireAndForget;
[_sessionID, "purchaseItemResponse", [0, _salesPrice, _itemClassName, 1, _containerType, _containerNetID]] call ExileServer_system_network_send_to;
_logging = getNumber(configFile >> "CfgSettings" >> "Logging" >> "traderLogging");
if (_logging isEqualTo 1) then
{
_traderLog = format ["PLAYER: ( %1 ) %2 PURCHASED ITEM %3 FOR %4 POPTABS | PLAYER TOTAL MONEY: %5",getPlayerUID _playerObject,_playerObject,_itemClassName,_salesPrice,_playerMoney];
"extDB3" callExtension format["1:TRADING:%1",_traderLog];
};
if !(_vehicleObject isEqualTo objNull) then
{
_vehicleObject call ExileServer_object_vehicle_database_update;
}
else
{
_playerObject call ExileServer_object_player_database_update;
};
}
catch
{
_responseCode = _exception;
[_sessionID, "purchaseItemResponse", [_responseCode, 0, "", 0, 0, ""]] call ExileServer_system_network_send_to;
};
_playerObject setVariable ["ExileMutex",false];
true

View File

@ -0,0 +1,90 @@
/**
* ExileServer_system_trading_network_purchaseVehicleRequest
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_sessionID","_parameters","_vehicleClass","_pinCode","_playerObject","_salesPrice","_playerMoney","_position","_vehicleObject","_logging","_traderLog","_responseCode"];
_sessionID = _this select 0;
_parameters = _this select 1;
_vehicleClass = _parameters select 0;
_pinCode = _parameters select 1;
try
{
_playerObject = _sessionID call ExileServer_system_session_getPlayerObject;
if (isNull _playerObject) then
{
throw 1;
};
if !(alive _playerObject) then
{
throw 2;
};
if (_playerObject getVariable ["ExileMutex",false]) then
{
throw 12;
};
_playerObject setVariable ["ExileMutex", true];
if !(isClass (missionConfigFile >> "CfgExileArsenal" >> _vehicleClass) ) then
{
throw 3;
};
_salesPrice = getNumber (missionConfigFile >> "CfgExileArsenal" >> _vehicleClass >> "price");
if (_salesPrice <= 0) then
{
throw 4;
};
_playerMoney = _playerObject getVariable ["ExileMoney", 0];
if (_playerMoney < _salesPrice) then
{
throw 5;
};
if !((count _pinCode) isEqualTo 4) then
{
throw 11;
};
if (_vehicleClass isKindOf "Ship") then
{
_position = [(getPosATL _playerObject), 100, 20] call ExileClient_util_world_findWaterPosition;
_vehicleObject = [_vehicleClass, _position, (random 360), false, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
}
else
{
_position = (getPos _playerObject) findEmptyPosition [10, 250, _vehicleClass];
if (_position isEqualTo []) then
{
throw 13;
};
_vehicleObject = [_vehicleClass, _position, (random 360), true, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
};
_vehicleObject setVariable ["ExileOwnerUID", (getPlayerUID _playerObject)];
_vehicleObject setVariable ["ExileIsLocked",0];
_vehicleObject lock 0;
_vehicleObject call ExileServer_object_vehicle_database_insert;
_vehicleObject call ExileServer_object_vehicle_database_update;
_playerMoney = _playerMoney - _salesPrice;
_playerObject setVariable ["ExileMoney", _playerMoney, true];
format["setPlayerMoney:%1:%2", _playerMoney, _playerObject getVariable ["ExileDatabaseID", 0]] call ExileServer_system_database_query_fireAndForget;
[_sessionID, "purchaseVehicleResponse", [0, netId _vehicleObject, _salesPrice]] call ExileServer_system_network_send_to;
_logging = getNumber(configFile >> "CfgSettings" >> "Logging" >> "traderLogging");
if (_logging isEqualTo 1) then
{
_traderLog = format ["PLAYER: ( %1 ) %2 PURCHASED VEHICLE %3 FOR %4 POPTABS | PLAYER TOTAL MONEY: %5",getPlayerUID _playerObject,_playerObject,_vehicleClass,_salesPrice,_playerMoney];
"extDB3" callExtension format["1:TRADING:%1",_traderLog];
};
}
catch
{
_responseCode = _exception;
[_sessionID, "purchaseVehicleResponse", [_responseCode, "", 0]] call ExileServer_system_network_send_to;
};
if !(isNull _playerObject) then
{
_playerObject setVariable ["ExileMutex", false];
};
true

View File

@ -0,0 +1,93 @@
/**
* ExileServer_system_trading_network_purchaseVehicleSkinRequest
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_sessionID","_parameters","_vehicleNetID","_skinTextures","_playerObject","_vehicleObject","_vehicleParentClass","_salesPrice","_skinVariations","_availableSkinTexture","_playerMoney","_skinMaterials","_skinClassName","_vehicleID","_logging","_traderLog","_responseCode"];
_sessionID = _this select 0;
_parameters = _this select 1;
_vehicleNetID = _parameters select 0;
_skinTextures = _parameters select 1;
try
{
_playerObject = _sessionID call ExileServer_system_session_getPlayerObject;
if (isNull _playerObject) then
{
throw 1;
};
if !(alive _playerObject) then
{
throw 2;
};
if(_playerObject getVariable ["ExileMutex",false]) then
{
throw 12;
};
_playerObject setVariable ["ExileMutex",true];
_vehicleObject = objectFromNetId _vehicleNetID;
if (isNull _vehicleObject) then
{
throw 6;
};
_vehicleParentClass = configName (inheritsFrom (configFile >> "CfgVehicles" >> (typeOf _vehicleObject)));
if !(isClass (missionConfigFile >> "CfgVehicleCustoms" >> _vehicleParentClass) ) then
{
throw 7;
};
_salesPrice = -1;
_skinVariations = getArray(missionConfigFile >> "CfgVehicleCustoms" >> _vehicleParentClass >> "skins");
{
_availableSkinTexture = _x select 3;
if (_availableSkinTexture isEqualTo _skinTextures) exitWith
{
_salesPrice = _x select 1;
};
}
forEach _skinVariations;
if (_salesPrice <= 0) then
{
throw 4;
};
_playerMoney = _playerObject getVariable ["ExileMoney", 0];
if (_playerMoney < _salesPrice) then
{
throw 5;
};
_skinMaterials = getArray(configFile >> "CfgVehicles" >> _skinClassName >> "hiddenSelectionsMaterials");
{
_vehicleObject setObjectTextureGlobal [_forEachIndex, _skinTextures select _forEachIndex];
}
forEach _skinTextures;
{
_vehicleObject setObjectMaterial [_forEachIndex, _x];
}
forEach _skinMaterials;
_vehicleID = _vehicleObject getVariable ["ExileDatabaseID", -1];
format["updateVehicleSkin:%1:%2", _skinTextures, _vehicleID] call ExileServer_system_database_query_fireAndForget;
_playerMoney = _playerMoney - _salesPrice;
_playerObject setVariable ["ExileMoney", _playerMoney, true];
format["setPlayerMoney:%1:%2", _playerMoney, _playerObject getVariable ["ExileDatabaseID", 0]] call ExileServer_system_database_query_fireAndForget;
[_sessionID, "purchaseVehicleSkinResponse", [0, _salesPrice]] call ExileServer_system_network_send_to;
_logging = getNumber(configFile >> "CfgSettings" >> "Logging" >> "traderLogging");
if (_logging isEqualTo 1) then
{
_traderLog = format ["PLAYER: ( %1 ) %2 PURCHASED VEHICLE SKIN %3 (%4) FOR %5 POPTABS | PLAYER TOTAL MONEY: %6",getPlayerUID _playerObject,_playerObject,_skinTextures,_vehicleParentClass,_salesPrice,_playerMoney];
"extDB3" callExtension format["1:TRADING:%1",_traderLog];
};
}
catch
{
_responseCode = _exception;
[_sessionID, "purchaseVehicleSkinResponse", [_responseCode, 0]] call ExileServer_system_network_send_to;
};
if !(isNull _playerObject) then
{
_playerObject setVariable ["ExileMutex", false];
};
true

View File

@ -0,0 +1,133 @@
/**
* ExileServer_system_trading_network_sellItemRequest
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_sessionID","_parameters","_itemClassName","_quantity","_containerType","_containerNetID","_playerObject","_vehicleObject","_sellPrice","_playerMoney","_noRespectItems","_playerRespect","_respectGain","_logging","_playerMoneyString","_traderLog","_responseCode"];
_sessionID = _this select 0;
_parameters = _this select 1;
_itemClassName = _parameters select 0;
_quantity = _parameters select 1;
_containerType = _parameters select 2;
_containerNetID = _parameters select 3;
try
{
_playerObject = _sessionID call ExileServer_system_session_getPlayerObject;
if (isNull _playerObject) then
{
throw 1;
};
if !(alive _playerObject) then
{
throw 2;
};
if(_playerObject getVariable ["ExileMutex",false]) then
{
throw 12;
};
_playerObject setVariable ["ExileMutex",true];
_vehicleObject = objNull;
if !(isClass (missionConfigFile >> "CfgExileArsenal" >> _itemClassName) ) then
{
throw 3;
};
_sellPrice = _itemClassName call ExileClient_util_gear_calculateSellPrice;
if (_containerType isEqualTo 1) then
{
if (_itemClassName isEqualTo (primaryWeapon _playerObject)) then
{
{
{
if !(_x isEqualTo "") then
{
_sellPrice = _sellPrice + (_x call ExileClient_util_gear_calculateSellPrice);
};
}
forEach _x;
}
forEach
[
primaryWeaponItems _playerObject,
primaryWeaponMagazine _playerObject
];
};
if (_itemClassName isEqualTo (handgunWeapon _playerObject)) then
{
{
{
if !(_x isEqualTo "") then
{
_sellPrice = _sellPrice + (_x call ExileClient_util_gear_calculateSellPrice);
};
}
forEach _x;
}
forEach
[
handgunItems _playerObject,
handgunMagazine _playerObject
];
};
};
if (_sellPrice <= 0) then
{
throw 4;
};
_playerMoney = _playerObject getVariable ["ExileMoney", 0];
_playerMoney = _playerMoney + _sellPrice;
_playerObject setVariable ["ExileMoney", _playerMoney, true];
format["setPlayerMoney:%1:%2", _playerMoney, _playerObject getVariable ["ExileDatabaseID", 0]] call ExileServer_system_database_query_fireAndForget;
_noRespectItems =
[
"Exile_Item_FlagStolen1",
"Exile_Item_FlagStolen2",
"Exile_Item_FlagStolen3",
"Exile_Item_FlagStolen4",
"Exile_Item_FlagStolen5",
"Exile_Item_FlagStolen6",
"Exile_Item_FlagStolen7",
"Exile_Item_FlagStolen8",
"Exile_Item_FlagStolen9",
"Exile_Item_FlagStolen10"
];
_playerRespect = _playerObject getVariable ["ExileScore", 0];
if !(_itemClassName in _noRespectItems) then
{
_respectGain = _sellPrice * getNumber (configFile >> "CfgSettings" >> "Respect" >> "tradingRespectFactor");
_playerRespect = floor (_playerRespect + _respectGain);
_playerObject setVariable ["ExileScore", _playerRespect];
format["setAccountScore:%1:%2", _playerRespect, (getPlayerUID _playerObject)] call ExileServer_system_database_query_fireAndForget;
};
[_sessionID, "sellItemResponse", [0, _sellPrice, _itemClassName, 1, _containerType, _containerNetID, str _playerRespect]] call ExileServer_system_network_send_to;
_logging = getNumber(configFile >> "CfgSettings" >> "Logging" >> "traderLogging");
if (_logging isEqualTo 1) then
{
_playerMoneyString = _playerMoney call ExileClient_util_string_exponentToString;
_traderLog = format ["PLAYER: ( %1 ) %2 SOLD ITEM %3 FOR %4 POPTABS AND %5 RESPECT | PLAYER TOTAL MONEY: %6",getPlayerUID _playerObject,_playerObject,_itemClassName,_sellPrice,_respectGain,_playerMoneyString];
"extDB3" callExtension format["1:TRADING:%1",_traderLog];
};
if !(_vehicleObject isEqualTo objNull) then
{
_vehicleObject call ExileServer_object_vehicle_database_update;
}
else
{
_playerObject call ExileServer_object_player_database_update;
};
}
catch
{
_responseCode = _exception;
[_sessionID, "sellItemResponse", [_responseCode, 0, "", 0, 0, "", ""]] call ExileServer_system_network_send_to;
};
if !(isNull _playerObject) then
{
_playerObject setVariable ["ExileMutex", false];
};
true

View File

@ -0,0 +1,85 @@
/**
* ExileServer_system_trading_network_wasteDumpRequest
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_sessionID","_parameters","_vehicleNetID","_mode","_vehicleObject","_vehicleDBID","_playerObject","_cargo","_revenue","_playerMoney","_respectGain","_playerRespect","_logging","_traderLog","_responseCode"];
_sessionID = _this select 0;
_parameters = _this select 1;
_vehicleNetID = _parameters select 0;
_mode = _parameters select 1;
try
{
_vehicleObject = objectFromNetId _vehicleNetID;
_vehicleDBID = _vehicleObject getVariable "ExileDatabaseID";
if (isNull _vehicleObject) then
{
throw 6;
};
if (_vehicleObject getVariable ["ExileMutex", false]) then
{
throw 12;
};
_vehicleObject setVariable ["ExileMutex", true];
_playerObject = _sessionID call ExileServer_system_session_getPlayerObject;
if (isNull _playerObject) then
{
throw 1;
};
if !(alive _playerObject) then
{
throw 2;
};
if !((owner _vehicleObject) isEqualTo (owner _playerObject)) then
{
throw 6;
};
_cargo = _vehicleObject call ExileClient_util_containerCargo_list;
_revenue = _cargo call ExileClient_util_gear_calculateTotalSellPrice;
clearBackpackCargoGlobal _vehicleObject;
clearItemCargoGlobal _vehicleObject;
clearMagazineCargoGlobal _vehicleObject;
clearWeaponCargoGlobal _vehicleObject;
if (_mode isEqualTo 2) then
{
_revenue = _revenue + ([(typeOf _vehicleObject)] call ExileClient_util_gear_calculateTotalSellPrice);
_vehicleObject call ExileServer_object_vehicle_remove;
deleteVehicle _vehicleObject;
}
else
{
_vehicleObject call ExileServer_object_vehicle_database_update;
};
_playerMoney = _playerObject getVariable ["ExileMoney", 0];
_playerMoney = _playerMoney + _revenue;
_playerObject setVariable ["ExileMoney", _playerMoney, true];
format["setPlayerMoney:%1:%2", _playerMoney, _playerObject getVariable ["ExileDatabaseID", 0]] call ExileServer_system_database_query_fireAndForget;
_respectGain = _revenue * getNumber (configFile >> "CfgSettings" >> "Respect" >> "tradingRespectFactor");
_playerRespect = _playerObject getVariable ["ExileScore", 0];
_playerRespect = floor (_playerRespect + _respectGain);
_playerObject setVariable ["ExileScore", _playerRespect];
format["setAccountScore:%1:%2", _playerRespect, (getPlayerUID _playerObject)] call ExileServer_system_database_query_fireAndForget;
[_sessionID, "wasteDumpResponse", [0, _revenue, str _playerRespect]] call ExileServer_system_network_send_to;
_logging = getNumber(configFile >> "CfgSettings" >> "Logging" >> "traderLogging");
if (_logging isEqualTo 1) then
{
_traderLog = format ["PLAYER: ( %1 ) %2 SOLD ITEM: %3 (ID# %4) with Cargo %5 FOR %6 POPTABS AND %7 RESPECT | PLAYER TOTAL MONEY: %8",getPlayerUID _playerObject,_playerObject,typeOf _vehicleObject,_vehicleDBID,_cargo,_revenue,_respectGain,_playerMoney];
"extDB3" callExtension format["1:TRADING:%1",_traderLog];
};
}
catch
{
_responseCode = _exception;
[_sessionID, "wasteDumpResponse", [_responseCode, 0, ""]] call ExileServer_system_network_send_to;
};
if (!isNull _vehicleObject) then
{
_vehicleObject setVariable ["ExileMutex", false];
};
true

View File

@ -0,0 +1,15 @@
/**
* ExileServer_util_time_addTime
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_time1","_time2"];
_time1 = _this select 0;
_time2 = _this select 1;
(parseSimpleArray ("extDB3" callExtension format ["9:TIMEDIFF:MINUTES:%1:%2",_time1,_time2])) select 1

View File

@ -0,0 +1,12 @@
/**
* ExileServer_util_time_currentTime
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
(parseSimpleArray ("extDB3" callExtension "9:LOCAL_TIME")) select 1

View File

@ -0,0 +1,12 @@
/**
* ExileServer_util_time_uptime
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
(parseNumber ("extDB3" callExtension "9:UPTIME:MINUTES"))

View File

@ -0,0 +1,22 @@
/**
* ExileServer_world_initialize
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
enableDynamicSimulationSystem true;
"Initializing game world..." call ExileServer_util_log;
call ExileServer_World_loadAllClans;
call ExileServer_World_loadAllTerritories;
call ExileServer_world_loadAllDatabaseConstructions;
call ExileServer_world_loadAllDatabaseVehicles;
call ExileServer_world_loadAllDatabaseContainers;
call ExileServer_system_xm8_sendProtectionMoneyDue;
call ExileServer_world_spawnSpawnZoneVehicles;
call ExileServer_world_spawnVehicles;
"Game world initialized! Let the fun begin!" call ExileServer_util_log;
true

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,87 @@
///////////////////////////////////////////////////////////////////////////////
// Server Settings - Modify at will
///////////////////////////////////////////////////////////////////////////////
author = "Exile Mod Team";
onLoadName = "Exile Mod";
onLoadMission= "www.exilemod.com";
loadScreen = "exile_assets\texture\mod\logo.paa";
disableChannels[] = {0, 2};
OnLoadIntro = "";
OnLoadIntroTime = false;
OnLoadMissionTime = false;
class Header
{
gameType = Survive; // Do NOT change this
minPlayers = 1;
maxPlayers = 100;
};
///////////////////////////////////////////////////////////////////////////////
// Exile Settings - Do not change these!
///////////////////////////////////////////////////////////////////////////////
forceRotorLibSimulation = 2;
skipLobby = 1;
joinUnassigned = 1;
respawn = "BASE";
respawnDelay = 120;
respawnDialog = 0;
respawnOnStart = 0;
respawnButton = 1;
respawnTemplates[] = {"Exile"};
corpseManagerMode = 0;
corpseLimit = 20;
corpseRemovalMinTime = 1800;
corpseRemovalMaxTime = 3600;
wreckManagerMode = 0;
wreckLimit = 2;
wreckRemovalMinTime = 60;
wreckRemovalMaxTime = 360;
scriptedPlayer = 1;
disabledAI = 1;
enableItemsDropping = 0;
briefing = 0;
debriefing = 0;
allowFunctionsLog = 1;
enableDebugConsole = 0;
allowFunctionsRecompile = 0;
showSquadRadar = 0;
showUAVFeed = 0;
reviveDelay = 6;
reviveForceRespawnDelay = 3;
reviveBleedOutDelay = 120;
showHUD[] =
{
true, // Scripted HUD (same as showHUD command)
true, // Vehicle + soldier info
true, // Vehicle radar
true, // Vehicle compass
true, // Tank direction indicator
false, // Commanding menu
false, // Group Bar
true, // HUD Weapon Cursors
false // Squad Radar
};
#include "config.cpp"
class CfgRemoteExec
{
class Functions
{
mode = 1;
jip = 0;
class ExileServer_system_network_dispatchIncomingMessage
{
allowedTargets = 2;
};
};
class Commands
{
mode = 0;
jip = 0;
};
};

View File

@ -0,0 +1,508 @@
///////////////////////////////////////////////////////////////////////////////
// Static Objects
///////////////////////////////////////////////////////////////////////////////
// Taken away for now
//#include "initServer.sqf"
if (!hasInterface || isServer) exitWith {};
///////////////////////////////////////////////////////////////////////////
// Hardware Trader
///////////////////////////////////////////////////////////////////////////
_workBench = "Land_Workbench_01_F" createVehicleLocal [0,0,0];
_workBench setDir 45.4546;
_workBench setPosATL [14587.8, 16758.7, 0.0938587];
_trader =
[
"Exile_Trader_Hardware",
"Exile_Trader_Hardware",
"WhiteHead_17",
["InBaseMoves_sitHighUp1"],
[0, 0, -0.5],
170,
_workBench
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Fast Food Trader
///////////////////////////////////////////////////////////////////////////
_cashDesk = "Land_CashDesk_F" createVehicleLocal [0,0,0];
_cashDesk setDir 131.818;
_cashDesk setPosATL [14589.8, 16778.2, -0.0701294];
_microwave = "Land_Microwave_01_F" createVehicleLocal [0,0,0];
_cashDesk disableCollisionWith _microwave;
_microwave disableCollisionWith _cashDesk;
_microwave attachTo [_cashDesk, [-0.6, 0.2, 1.1]];
_ketchup = "Land_Ketchup_01_F" createVehicleLocal [0,0,0];
_cashDesk disableCollisionWith _ketchup;
_ketchup disableCollisionWith _cashDesk;
_ketchup attachTo [_cashDesk, [-0.6, 0, 1.1]];
_mustard = "Land_Mustard_01_F" createVehicleLocal [0,0,0];
_cashDesk disableCollisionWith _mustard;
_mustard disableCollisionWith _cashDesk;
_mustard attachTo [_cashDesk, [-0.5, -0.05, 1.1]];
_trader =
[
"Exile_Trader_Food",
"Exile_Trader_Food",
"GreekHead_A3_01",
["InBaseMoves_table1"],
[0.1, 0.5, 0.2],
170,
_cashDesk
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Armory Trader
///////////////////////////////////////////////////////////////////////////
_chair = "Land_CampingChair_V2_F" createVehicleLocal [0,0,0];
_chair setDir 208.182;
_chair setPosATL [14568.1, 16764.3, 0.084837];
_trader =
[
"Exile_Trader_Armory",
"Exile_Trader_Armory",
"PersianHead_A3_02",
["InBaseMoves_SittingRifle1"],
[0, -0.15, -0.45],
180,
_chair
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Equipment Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_Equipment",
"Exile_Trader_Equipment",
"WhiteHead_19",
["InBaseMoves_Lean1"],
[14571.5, 16759.1, 0.126438],
0
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Specops Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_SpecialOperations",
"Exile_Trader_SpecialOperations",
"AfricanHead_02",
["HubStanding_idle1", "HubStanding_idle2", "HubStanding_idle3"],
[14566.3, 16773.2, 0.126438],
140
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Office Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_Office",
"Exile_Trader_Office",
"GreekHead_A3_04",
["HubBriefing_scratch", "HubBriefing_stretch", "HubBriefing_think", "HubBriefing_lookAround1", "HubBriefing_lookAround2"],
[14599.6, 16774.6, 5.12644],
220
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Waste Dump Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_WasteDump",
"Exile_Trader_WasteDump",
"GreekHead_A3_01",
["HubStandingUA_move1", "HubStandingUA_move2", "HubStandingUA_idle1", "HubStandingUA_idle2", "HubStandingUA_idle3"],
[14608.4, 16901.3, 0],
270
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Aircraft Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_Aircraft",
"Exile_Trader_Aircraft",
"WhiteHead_17",
["LHD_krajPaluby"],
[14596.5, 16752.9, 0.12644],
133
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Aircraft Customs Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_AircraftCustoms",
"Exile_Trader_AircraftCustoms",
"GreekHead_A3_07",
["HubStandingUC_idle1", "HubStandingUC_idle2", "HubStandingUC_idle3", "HubStandingUC_move1", "HubStandingUC_move2"],
[14635, 16790.3, 0],
156.294
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Vehicle Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_Vehicle",
"Exile_Trader_Vehicle",
"WhiteHead_11",
["InBaseMoves_repairVehicleKnl", "InBaseMoves_repairVehiclePne"],
[14603.7, 16877.3, 0.00143433],
90
]
call ExileClient_object_trader_create;
_carWreck = "Land_Wreck_CarDismantled_F" createVehicleLocal [0,0,0];
_carWreck setDir 355.455;
_carWreck setPosATL [14605.6, 16877.3, 0.0208359];
///////////////////////////////////////////////////////////////////////////
// Vehicle Customs Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_VehicleCustoms",
"Exile_Trader_VehicleCustoms",
"WhiteHead_11",
["AidlPercMstpSnonWnonDnon_G01", "AidlPercMstpSnonWnonDnon_G02", "AidlPercMstpSnonWnonDnon_G03", "AidlPercMstpSnonWnonDnon_G04", "AidlPercMstpSnonWnonDnon_G05", "AidlPercMstpSnonWnonDnon_G06"],
[14617.2, 16888.4, 0],
269.96
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Guard 01
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Guard_01",
"",
"WhiteHead_17",
["InBaseMoves_patrolling1"],
[14564.9,16923.4,0.00146294],
323.53
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Guard 02
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Guard_02",
"",
"WhiteHead_03",
["InBaseMoves_patrolling2"],
[14626.3,16834.6,4.72644],
326.455
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Guard 03
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Guard_03",
"",
"AfricanHead_03",
["InBaseMoves_patrolling1"],
[14577.1,16793.1,3.75118],
313.349
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Western Guard 01
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Guard_02",
"",
"WhiteHead_03",
["InBaseMoves_patrolling2"],
[2950.52,18195.3,4.93399],
179.092
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Western Boat Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_Boat",
"Exile_Trader_Boat",
"WhiteHead_17",
["AidlPercMstpSnonWnonDnon_G01", "AidlPercMstpSnonWnonDnon_G02", "AidlPercMstpSnonWnonDnon_G03", "AidlPercMstpSnonWnonDnon_G04", "AidlPercMstpSnonWnonDnon_G05", "AidlPercMstpSnonWnonDnon_G06"],
[2914.35,18192.9,8.51858],
88.3346
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Western Vehicle Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_Vehicle",
"Exile_Trader_Vehicle",
"WhiteHead_11",
["InBaseMoves_repairVehicleKnl", "InBaseMoves_repairVehiclePne"],
[2980.19,18146.2,1.06391],
222.352
]
call ExileClient_object_trader_create;
_carWreck = "Land_Wreck_CarDismantled_F" createVehicleLocal [0,0,0];
_carWreck setDir 130.966;
_carWreck setPosATL [2978.76,18144.5,1.13293];
///////////////////////////////////////////////////////////////////////////
// Western Waste Dump Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_WasteDump",
"Exile_Trader_WasteDump",
"GreekHead_A3_01",
["HubStandingUA_move1", "HubStandingUA_move2", "HubStandingUA_idle1", "HubStandingUA_idle2", "HubStandingUA_idle3"],
[2984.05,18133.4,0.00107765],
29.3856
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Western Fast Food Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_Food",
"Exile_Trader_Food",
"GreekHead_A3_01",
["AidlPercMstpSnonWnonDnon_G01", "AidlPercMstpSnonWnonDnon_G02", "AidlPercMstpSnonWnonDnon_G03", "AidlPercMstpSnonWnonDnon_G04", "AidlPercMstpSnonWnonDnon_G05", "AidlPercMstpSnonWnonDnon_G06"],
[2979.87,18184.9,2.55185],
89.2952
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Western Equipment Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_Equipment",
"Exile_Trader_Equipment",
"WhiteHead_19",
["HubStanding_idle1", "HubStanding_idle2", "HubStanding_idle3"],
[2980.7,18192.9,2.49853],
130.535
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Western Armory Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_Armory",
"Exile_Trader_Armory",
"PersianHead_A3_02",
["HubStanding_idle1", "HubStanding_idle2", "HubStanding_idle3"],
[2986.43,18178.5,1.66267],
296.855
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Western Guard 02
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Guard_03",
"",
"AfricanHead_03",
["InBaseMoves_patrolling1"],
[2993.2,18167,0.353821],
109.888
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Eastern Fast Food Trader
///////////////////////////////////////////////////////////////////////////
_cashDesk = "Land_CashDesk_F" createVehicleLocal [0,0,0];
_cashDesk setDir 222.727;
_cashDesk setPosATL [23353.1, 24168, 0.16585];
_microwave = "Land_Microwave_01_F" createVehicleLocal [0,0,0];
_cashDesk disableCollisionWith _microwave;
_microwave disableCollisionWith _cashDesk;
_microwave attachTo [_cashDesk, [-0.6, 0.2, 1.1]];
_ketchup = "Land_Ketchup_01_F" createVehicleLocal [0,0,0];
_cashDesk disableCollisionWith _ketchup;
_ketchup disableCollisionWith _cashDesk;
_ketchup attachTo [_cashDesk, [-0.6, 0, 1.1]];
_mustard = "Land_Mustard_01_F" createVehicleLocal [0,0,0];
_cashDesk disableCollisionWith _mustard;
_mustard disableCollisionWith _cashDesk;
_mustard attachTo [_cashDesk, [-0.5, -0.05, 1.1]];
_trader =
[
"Exile_Trader_Food",
"Exile_Trader_Food",
"GreekHead_A3_01",
["InBaseMoves_table1"],
[0.1, 0.5, 0.2],
170,
_cashDesk
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Eastern Boat Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_Boat",
"Exile_Trader_Boat",
"WhiteHead_17",
["AidlPercMstpSnonWnonDnon_G01", "AidlPercMstpSnonWnonDnon_G02", "AidlPercMstpSnonWnonDnon_G03", "AidlPercMstpSnonWnonDnon_G04", "AidlPercMstpSnonWnonDnon_G05", "AidlPercMstpSnonWnonDnon_G06"],
[23296.6,24189.8,5.61213],
96
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Eastern Vehicle Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_Vehicle",
"Exile_Trader_Vehicle",
"WhiteHead_11",
["InBaseMoves_repairVehicleKnl", "InBaseMoves_repairVehiclePne"],
[23385.6,24191.6,0.00136566],
123
]
call ExileClient_object_trader_create;
_carWreck = "Land_Wreck_CarDismantled_F" createVehicleLocal [0,0,0];
_carWreck setDir 47.2728;
_carWreck setPosATL [23387.3, 24190.3, 0.05];
///////////////////////////////////////////////////////////////////////////
// Eastern Hardware Trader
///////////////////////////////////////////////////////////////////////////
_workBench = "Land_Workbench_01_F" createVehicleLocal [0,0,0];
_workBench setDir 279.545;
_workBench setPosATL [23371.6, 24188, 0.89873];
_trader =
[
"Exile_Trader_Hardware",
"Exile_Trader_Hardware",
"WhiteHead_17",
["InBaseMoves_sitHighUp1"],
[0, 0, -0.5],
170,
_workBench
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Eastern Equipment Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_Equipment",
"Exile_Trader_Equipment",
"WhiteHead_19",
["HubStanding_idle1", "HubStanding_idle2", "HubStanding_idle3"],
[23379.9, 24169.3, 0.199955],
206
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Eastern Armory Trader
///////////////////////////////////////////////////////////////////////////
_chair = "Land_CampingChair_V2_F" createVehicleLocal [0,0,0];
_chair setDir 12.7272;
_chair setPosATL [23379.6, 24169.3, 4.56662];
_trader =
[
"Exile_Trader_Armory",
"Exile_Trader_Armory",
"PersianHead_A3_02",
["InBaseMoves_SittingRifle1"],
[0, -0.15, -0.45],
180,
_chair
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Eastern Waste Dump Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_WasteDump",
"Exile_Trader_WasteDump",
"GreekHead_A3_01",
["HubStandingUA_move1", "HubStandingUA_move2", "HubStandingUA_idle1", "HubStandingUA_idle2", "HubStandingUA_idle3"],
[23336.6,24214.4,0.00115061],
346
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Russian Roulette
///////////////////////////////////////////////////////////////////////////
[
"Exile_Trader_RussianRoulette",
"",
"GreekHead_A3_01",
["HubStandingUA_move1", "HubStandingUA_move2", "HubStandingUA_idle1", "HubStandingUA_idle2", "HubStandingUA_idle3"],
[14622.6, 16820.1, 0.126],
187.428
]
call ExileClient_object_trader_create;

View File

@ -0,0 +1,442 @@
private _objects =
[
["Land_CarService_F", [14618.7,16877.4,18.7724], [[0.750538,-0.660827,0],[0,0,1]], [false, false]],
["Land_cargo_addon02_V2_F", [14563.7,16776.6,19.4699], [[0.723738,-0.690074,0],[0,0,1]], [false, false]],
["Land_cargo_addon02_V1_F", [14619.2,16831.5,19.1926], [[-0.707107,0.707107,0],[0,0,1]], [false, false]],
["Land_ScrapHeap_1_F", [14630.3,16882.7,17.7946], [[-8.74228e-008,-1,0],[0,0,1]], [false, false]],
["Land_ScrapHeap_2_F", [14616,16869,18.1088], [[0.978803,-0.204804,0],[0,0,1]], [false, false]],
["Land_PaperBox_open_full_F", [14569.5,16763.1,17.91], [[0.29692,0.954902,0],[0,0,1]], [false, false]],
["Land_PaperBox_open_empty_F", [14563.8,16770.5,17.91], [[0,1,0],[0,0,1]], [false, false]],
["Land_PaperBox_closed_F", [14563.1,16768.8,17.91], [[0,1,0],[0,0,1]], [false, false]],
["Land_Basket_F", [14583.6,16778.2,17.9318], [[0,1,0],[0,0,1]], [false, false]],
["Land_Cages_F", [14573.2,16797.4,17.9346], [[-0.73996,-0.672651,0],[0,0,1]], [false, false]],
["Land_CratesPlastic_F", [14588.4,16777.7,17.9915], [[0.0713395,0.997452,0],[0,0,1]], [false, false]],
["Land_CratesShabby_F", [14587.2,16789,17.9782], [[-0.701482,-0.712687,0],[0,0,1]], [false, false]],
["Land_CratesWooden_F", [14575.3,16773.2,17.9774], [[0.67851,0.734591,0],[0,0,1]], [false, false]],
["Land_Sack_F", [14583.1,16777.7,17.91], [[0,1,0],[0,0,1]], [false, false]],
["Land_Sacks_goods_F", [14592.5,16779.1,17.91], [[-0.458231,0.888833,0],[0,0,1]], [false, false]],
["Land_Sacks_heap_F", [14590.7,16784.9,17.9559], [[0,1,0],[0,0,1]], [false, false]],
["Land_StallWater_F", [14640.4,16843,17.91], [[0,1,0],[0,0,1]], [false, false]],
["CargoNet_01_barrels_F", [14589.9,16759.6,17.91], [[0,1,0],[0,0,1]], [false, false]],
["Land_Pallet_F", [14594.3,16763.7,18.004], [[-0.96384,0.266481,0],[0,0,1]], [false, false]],
["Land_Pallet_vertical_F", [14581.9,16765.9,17.91], [[0.712694,0.701475,0],[0,0,1]], [false, false]],
["Land_Pallets_F", [14580.6,16768.9,17.9838], [[0,1,0],[0,0,1]], [false, false]],
["Land_Pallets_stack_F", [14581.7,16767.2,17.91], [[0.228042,0.973651,0],[0,0,1]], [false, false]],
["Land_ToolTrolley_02_F", [14586.3,16760.1,17.9957], [[-0.5865,0.80995,0],[0,0,1]], [false, false]],
["Land_WeldingTrolley_01_F", [14587.8,16755.4,17.9847], [[-0.5,0.866025,0],[0,0,1]], [false, false]],
["Land_HBarrier_Big_F", [14581.9,16798.9,16.348], [[-0.707107,-0.707107,0],[0,0,1]], [false, false]],
["Land_HBarrier_Big_F", [14608,16825.5,16.3968], [[-0.506846,-0.862036,0],[0,0,1]], [false, false]],
["Land_HBarrier_Big_F", [14615.5,16772.5,17.91], [[0.7127,-0.701469,0],[0,0,1]], [false, false]],
["Land_HBarrier_Big_F", [14584.1,16880.5,17.8064], [[0.745264,0.666769,0],[0,0,1]], [false, false]],
["Land_HBarrier_Big_F", [14583.7,16745.7,17.8094], [[0.712694,0.701475,0],[0,0,1]], [false, false]],
["Land_HBarrier_Big_F", [14625.5,16880.5,17.8933], [[0.666768,0.745265,0],[0,0,1]], [false, false]],
["Land_HBarrier_3_F", [14574.1,16796.2,17.7873], [[-0.624384,0.781117,0],[0,0,1]], [false, false]],
["Land_HBarrier_3_F", [14601.2,16825.7,17.3493], [[-0.684318,0.729184,0],[0,0,1]], [false, false]],
["Land_HBarrier_5_F", [14647.4,16807.7,17.9078], [[-0.936953,-0.349455,0],[0,0,1]], [false, false]],
["Land_HBarrier_Big_F", [14570.6,16788,16.327], [[0.899488,0.436945,0],[0,0,1]], [false, false]],
["Land_HBarrier_Big_F", [14601.1,16818.8,16.4033], [[0.931287,0.364287,0],[0,0,1]], [false, false]],
["Exile_Sign_Aircraft", [14593.7,16753.7,17.8762], [[-0.690074,-0.723738,0],[0,0,1]], [false, false]],
["Exile_Sign_Armory", [14567,16763.8,17.91], [[-0.690074,-0.723738,0],[0,0,1]], [false, false]],
["Exile_Sign_Equipment", [14573.4,16758.3,17.8331], [[-0.0475771,-0.998868,0],[0,0,1]], [false, false]],
["Exile_Sign_Food", [14591.4,16777.4,17.91], [[0.707107,-0.707107,0],[0,0,1]], [false, false]],
["Exile_Sign_SpecialOperations", [14565.6,16774,17.6937], [[-0.750526,0.660841,0],[0,0,1]], [false, false]],
["Exile_Sign_Hardware", [14588.9,16756.8,17.8212], [[0.984808,-0.173646,0],[0,0,1]], [false, false]],
["Exile_Sign_Vehicles", [14610.1,16872.5,18.1622], [[0.745267,-0.666767,0],[0,0,1]], [false, false]],
["Land_CampingTable_F", [14567.6,16766.2,17.91], [[0.0554972,0.998459,0],[0,0,1]], [false, false]],
["Land_Icebox_F", [14589.6,16776.7,17.91], [[0.660837,0.75053,0],[0,0,1]], [false, false]],
["Land_Metal_rack_Tall_F", [14575.7,16759.5,17.9909], [[0.707107,-0.707107,0],[0,0,1]], [false, false]],
["Land_Metal_rack_F", [14564.1,16772.7,17.9716], [[-0.766044,0.642788,0],[0,0,1]], [false, false]],
["Fridge_01_closed_F", [14588.9,16775,17.9246], [[0.718236,-0.6958,0],[0,0,1]], [false, false]],
["Land_WaterCooler_01_new_F", [14584,16777.7,17.91], [[-0.66084,-0.750526,0],[0,0,1]], [false, false]],
["MapBoard_altis_F", [14569.3,16776.3,17.91], [[0,1,0],[0,0,1]], [false, false]],
["Land_WoodenTable_large_F", [14567.5,16775.3,17.9819], [[-0.750538,-0.660827,0],[0,0,1]], [false, false]],
["Land_ShelvesMetal_F", [14593.7,16780.7,17.91], [[0.701469,-0.7127,0],[0,0,1]], [false, false]],
["Land_ShelvesMetal_F", [14592.3,16782.2,17.91], [[0.701469,-0.7127,0],[0,0,1]], [false, false]],
["Land_Pallet_MilBoxes_F", [14565.7,16767.3,17.91], [[0.605613,-0.795759,0],[0,0,1]], [false, false]],
["Land_OfficeChair_01_F", [14598.3,16776.1,22.9791], [[0.266473,0.963842,0],[0,0,1]], [false, false]],
["Land_OfficeCabinet_01_F", [14600.3,16776.2,22.9749], [[0.660835,0.750531,0],[0,0,1]], [false, false]],
["OfficeTable_01_new_F", [14597.7,16775.2,22.9468], [[-0.678506,-0.734595,0],[0,0,1]], [false, false]],
["MapBoard_seismic_F", [14602.1,16773.7,23.005], [[0.980397,0.197035,0],[0,0,1]], [false, false]],
["Land_Document_01_F", [14597.9,16775,23.8386], [[-0.755751,-0.654859,0],[0,0,1]], [false, false]],
["Land_FlatTV_01_F", [14594,16774,23.9797], [[-0.678506,0.734595,0],[0,0,1]], [false, false]],
["Land_GamingSet_01_controller_F", [14594.1,16773.7,23.9649], [[-0.857984,0.513676,0],[0,0,1]], [false, false]],
["Land_GamingSet_01_console_F", [14594,16773.9,23.6192], [[-0.745267,0.666767,0],[0,0,1]], [false, false]],
["Land_GamingSet_01_camera_F", [14594.2,16774,23.9755], [[-0.701469,0.7127,0],[0,0,1]], [false, false]],
["Land_Laptop_device_F", [14597.4,16775.3,23.8317], [[0.828149,0.560507,0],[0,0,1]], [false, false]],
["Land_ShelvesWooden_F", [14594.1,16773.9,22.9312], [[0.750531,0.660835,0],[0,0,1]], [false, false]],
["Target_PopUp3_Moving_90deg_Acc2_NoPop_F", [14575,16771.4,17.8809], [[0.274112,0.961698,0],[0,0,1]], [false, false]],
["Land_LuggageHeap_04_F", [14573.5,16758.3,17.91], [[-0.65486,-0.755751,0],[0,0,1]], [false, false]],
["Land_LuggageHeap_02_F", [14570.4,16760.9,17.91], [[-0.527223,0.849727,0],[0,0,1]], [false, false]],
["Land_LuggageHeap_03_F", [14576,16760.6,17.91], [[0,1,0],[0,0,1]], [false, false]],
["Land_LuggageHeap_01_F", [14570.7,16762.6,17.91], [[0,1,0],[0,0,1]], [false, false]],
["Land_LuggageHeap_05_F", [14623.8,16912.5,18.1785], [[0,1,0],[0,0,1]], [false, false]],
["Land_DieselGroundPowerUnit_01_F", [14619.6,16885.6,17.8383], [[-0.243463,-0.96991,0],[0,0,1]], [false, false]],
["Land_JetEngineStarter_01_F", [14591.7,16755.2,17.834], [[-0.701469,-0.7127,0],[0,0,1]], [false, false]],
["CargoNet_01_barrels_F", [14612,16875.3,17.8549], [[0,1,0],[0,0,1]], [false, false]],
["Land_Shed_Small_F", [14601.9,16918.3,18.0289], [[0.7127,-0.701469,0],[0,0,1]], [false, false]],
["Land_Factory_Conv1_Main_F", [14615.2,16905.2,18.3696], [[-0.690074,-0.723738,0],[0,0,1]], [false, false]],
["Land_FishingGear_01_F", [14621.9,16912.1,17.9848], [[0,1,0],[0,0,1]], [false, false]],
["Land_FishingGear_02_F", [14622.3,16915.5,18.0652], [[-0.836936,-0.547301,0],[0,0,1]], [false, false]],
["Land_Garbage_square3_F", [14627.8,16914.7,18.1934], [[0,1,0],[0,0,1]], [false, false]],
["Land_GarbageBags_F", [14622.5,16909.9,17.979], [[0,1,0],[0,0,1]], [false, false]],
["Land_GarbagePallet_F", [14625.1,16910.1,18.1012], [[0,1,0],[0,0,1]], [false, false]],
["Land_GarbageWashingMachine_F", [14626.6,16912.8,18.2042], [[0,1,0],[0,0,1]], [false, false]],
["Land_JunkPile_F", [14619.5,16914.1,17.9703], [[-0.243463,-0.96991,0],[0,0,1]], [false, false]],
["Land_Tyres_F", [14625,16914.9,18.1344], [[-0.989821,0.142318,0],[0,0,1]], [false, false]],
["Land_GarbageContainer_open_F", [14611.5,16911.7,17.8476], [[-0.786051,0.618162,0],[0,0,1]], [false, false]],
["Land_GarbageContainer_closed_F", [14607.6,16908.4,17.8081], [[0,1,0],[0,0,1]], [false, false]],
["Land_Wreck_Car3_F", [14626.6,16904.6,18.0411], [[0,1,0],[0,0,1]], [false, false]],
["Land_Wreck_Offroad_F", [14632.2,16918.2,18.0913], [[-0.866025,0.5,0],[0,0,1]], [false, false]],
["Land_Wreck_Hunter_F", [14625,16923.2,18.2756], [[0,1,0],[0,0,1]], [false, false]],
["Land_Cargo_HQ_V2_F", [14531.5,16758.9,18.5278], [[0.6958,-0.718235,0],[0,0,1]], [false, false]],
["Land_Cargo_Patrol_V2_F", [14602.6,16702.8,18.07], [[0.707107,-0.707107,0],[0,0,1]], [false, false]],
["Exile_Sign_WasteDump", [14609.2,16898.9,18.0966], [[0.690079,0.723734,0],[0,0,1]], [false, false]],
["Exile_Sign_Office_Small", [14588.1,16772.5,17.3235], [[0.707107,0.707107,0],[0,0,1]], [false, false]],
["Exile_Sign_Office", [14596.3,16776.3,22.9992], [[-0.672664,0.739948,0],[0,0,1]], [false, false]],
["Exile_Sign_Office_Small", [14592.6,16773.2,21.9835], [[0.707107,-0.707107,0],[0,0,1]], [false, false]],
["Exile_Sign_Aircraft_Small", [14595.9,16765.1,17.303], [[0.745267,-0.666767,0],[0,0,1]], [false, false]],
["Exile_Cosmetic_MG", [14568,16774.8,18.0358], [[-0.999717,0.0238043,0],[0,0,1]], [false, false]],
["Exile_Cosmetic_UAV", [14567.2,16775,18.8145], [[0,1,0],[0,0,1]], [false, false]],
["Land_CampingChair_V2_F", [14567.2,16766.9,17.9948], [[-0.755751,0.654859,0],[0,0,1]], [false, false]],
["CargoNet_01_barrels_F", [14572.6,16773.2,17.91], [[-0.540637,0.841256,0],[0,0,1]], [false, false]],
["Land_PaperBox_closed_F", [14573.8,16772,17.91], [[-0.6958,0.718235,0],[0,0,1]], [false, false]],
["Land_PaperBox_open_full_F", [14579.8,16765.3,17.91], [[-0.776145,0.630554,0],[0,0,1]], [false, false]],
["Land_PaperBox_open_empty_F", [14578.4,16766.9,17.91], [[0,1,0],[0,0,1]], [false, false]],
["Land_CanisterPlastic_F", [14578.4,16765.7,17.91], [[0,1,0],[0,0,1]], [false, false]],
["Land_Suitcase_F", [14570.1,16763.9,18.0041], [[0.228042,0.973651,0],[0,0,1]], [false, false]],
["Land_Bricks_V1_F", [14583.1,16751.1,17.91], [[-0.739948,0.672664,0],[0,0,1]], [false, false]],
["Land_Bricks_V2_F", [14582.1,16752.1,17.91], [[0.666769,0.745264,0],[0,0,1]], [false, false]],
["Land_Bricks_V3_F", [14581.1,16753.2,17.91], [[-0.849727,0.527223,0],[0,0,1]], [false, false]],
["Land_Bricks_V4_F", [14580.1,16754.1,17.91], [[-0.776145,0.630554,0],[0,0,1]], [false, false]],
["Land_Pallets_stack_F", [14583.7,16753,17.91], [[0.436945,0.899488,0],[0,0,1]], [false, false]],
["Land_ToolTrolley_01_F", [14577.9,16756.1,18.0186], [[0.718236,-0.6958,0],[0,0,1]], [false, false]],
["Land_GasTank_02_F", [14579.1,16754.6,17.91], [[0,1,0],[0,0,1]], [false, false]],
["Land_WheelCart_F", [14583.9,16761.7,18.0116], [[0.776145,-0.630554,0],[0,0,1]], [false, false]],
["Land_WoodenBox_F", [14581.8,16754.2,17.91], [[0.624376,0.781124,0],[0,0,1]], [false, false]],
["Land_MobileLandingPlatform_01_F", [14597.3,16744.1,17.91], [[0,1,0],[0,0,1]], [false, false]],
["Land_Tyre_F", [14604.2,16879.2,17.8345], [[0,1,0],[0,0,1]], [false, false]],
["Land_Tyre_F", [14604.3,16875.8,17.8348], [[0,1,0],[0,0,1]], [false, false]],
["Land_Tyre_F", [14607.1,16879,17.8408], [[0.408185,0.912899,0],[0,0,1]], [false, false]],
["Land_Tyre_F", [14607.2,16876.2,17.8425], [[0,1,0],[0,0,1]], [false, false]],
["Land_Tyres_F", [14610.8,16871.7,17.7035], [[0,1,0],[0,0,1]], [false, false]],
["Land_CanisterOil_F", [14604.4,16878.3,17.8351], [[-0.973651,0.228045,0],[0,0,1]], [false, false]],
["Land_CarBattery_02_F", [14603.8,16878.7,17.8335], [[-0.493107,0.869969,0],[0,0,1]], [false, false]],
["Exile_Sign_VehicleCustoms", [14619.4,16888.2,17.7657], [[0.999497,-0.0317282,0],[0,0,1]], [false, false]],
["Oil_Spill_F", [14616.5,16887.6,17.8505], [[0,1,0],[0,0,1]], [false, false]],
["Land_KartTrolly_01_F", [14620.2,16889.6,17.8613], [[0.599278,0.800541,0],[0,0,1]], [false, false]],
["Land_BucketNavy_F", [14619.1,16888.6,18.6619], [[-0.96991,0.243463,0],[0,0,1]], [false, false]],
["Land_Bucket_painted_F", [14619.1,16889.1,18.6544], [[0,1,0],[0,0,1]], [false, false]],
["Land_ButaneCanister_F", [14618.9,16889,18.6736], [[0.971813,-0.235753,0],[0,0,1]], [false, false]],
["Land_CanisterFuel_F", [14616.8,16887.3,17.8632], [[-0.853878,0.520473,0],[0,0,1]], [false, false]],
["Land_CanisterPlastic_F", [14619,16889.5,17.8661], [[0.0950563,0.995472,0],[0,0,1]], [false, false]],
["Land_CarBattery_02_F", [14618.8,16887.6,18.6544], [[-0.513676,0.857984,0],[0,0,1]], [false, false]],
["Land_CarBattery_01_F", [14619.1,16887.7,18.6718], [[0.975431,-0.220306,0],[0,0,1]], [false, false]],
["Land_CampingTable_F", [14618.9,16888.3,17.8579], [[0.997452,-0.071339,0],[0,0,1]], [false, false]],
["Land_CampingChair_V1_folded_F", [14618.8,16886.3,17.8601], [[0.76092,0.648845,0],[0,0,1]], [false, false]],
["Land_CampingChair_V1_F", [14617.8,16886.5,17.8559], [[0.281739,-0.959491,0],[0,0,1]], [false, false]],
["Land_GasTank_01_yellow_F", [14620.2,16889.6,17.9821], [[0,1,0],[0,0,1]], [false, false]],
["Land_Garbage_square5_F", [14607.2,16899.9,17.8199], [[0,1,0],[0,0,1]], [false, false]],
["Land_GarbageBarrel_01_F", [14610,16902.2,17.83], [[0,1,0],[0,0,1]], [false, false]],
["Land_WheelieBin_01_F", [14608.6,16899.1,17.8244], [[0.766044,0.642788,0],[0,0,1]], [false, false]],
["Land_cargo_house_slum_ruins_F", [14629.2,16910.5,18.1699], [[-0.866025,0.5,0],[0,0,1]], [false, false]],
["Exile_Sign_TraderCity", [14554.8,16906.4,17.6393], [[0.739948,-0.672664,0],[0,0,1]], [false, false]],
["Land_FuelStation_Build_F", [14624.3,16894.8,17.8827], [[0.952516,0.304487,0],[0,0,1]], [false, false]],
["Land_FuelStation_Sign_F", [14621.4,16898.1,17.8708], [[0,1,0],[0,0,1]], [false, false]],
["Land_FuelStation_Feed_F", [14619.2,16895.9,17.8569], [[-0.96991,-0.243463,0],[0,0,1]], [false, false]],
["Exile_Sign_SpecialOperations_Small", [14573,16774.7,17.3007], [[-0.729183,-0.684318,0],[0,0,1]], [false, false]],
["Exile_Sign_Equipment_Small", [14579.5,16768.1,17.3113], [[-0.701469,-0.7127,0],[0,0,1]], [false, false]],
["Exile_Sign_Armory_Small", [14576.5,16771.2,17.3145], [[-0.707107,-0.707107,0],[0,0,1]], [false, false]],
["Exile_Sign_Hardware_Small", [14584.4,16763.2,17.3163], [[-0.684318,-0.729184,0],[0,0,1]], [false, false]],
["Land_HBarrier_3_F", [14564.3,16928.2,16.9611], [[-0.0792423,0.996855,0],[0,0,1]], [false, false]],
["Land_HBarrier_5_F", [14569.5,16924.4,17.0527], [[-0.881452,-0.472274,0],[0,0,1]], [false, false]],
["Land_HBarrier_Big_F", [14561.6,16922.1,16.1608], [[0.695799,0.718237,0],[0,0,1]], [false, false]],
["Land_HBarrier_1_F", [14560.4,16927.6,16.7264], [[0.684316,0.729186,0],[0,0,1]], [false, false]],
["Land_BagFence_Round_F", [14567.3,16928,17.4047], [[-0.422618,-0.906308,0],[0,0,1]], [false, false]],
["Land_BagFence_Short_F", [14561.8,16928.2,17.1708], [[0.258819,-0.965926,0],[0,0,1]], [false, false]],
["Land_BagFence_Long_F", [14568.6,16921.7,17.3641], [[0.5473,-0.836936,0],[0,0,1]], [false, false]],
["Land_CampingTable_small_F", [14567.9,16923.5,17.4895], [[0,1,0],[0,0,1]], [false, false]],
["Land_CampingChair_V1_F", [14567.8,16925,17.458], [[0,1,0],[0,0,1]], [false, false]],
["Land_CampingChair_V1_folded_F", [14567.4,16922.3,17.5057], [[0,1,0],[0,0,1]], [false, false]],
["Land_TentDome_F", [14562.4,16925.7,17.279], [[0,1,0],[0,0,1]], [false, false]],
["Land_Sleeping_bag_F", [14566.6,16925.9,17.4279], [[0.444066,0.895994,0],[0,0,1]], [false, false]],
["Land_WoodPile_F", [14562.7,16923.1,17.3408], [[-0.712699,0.701469,0],[0,0,1]], [false, false]],
["Land_Sleeping_bag_folded_F", [14567.1,16926.9,17.414], [[0,1,0],[0,0,1]], [false, false]],
["Exile_Sign_AircraftCustoms", [14634.8,16792.4,17.7303], [[-0.712699,0.701469,0],[0,0,1]], [false, false]],
["Exile_Sign_AircraftCustoms_Small", [14633.2,16800.4,17.2345], [[0.599275,-0.800543,0],[0,0,1]], [false, false]],
["Exile_Sign_AircraftCustoms_Small", [14614.6,16799.5,17.3016], [[0.718238,0.695798,0],[0,0,1]], [false, false]],
["Land_DischargeStick_01_F", [14636,16792.6,18.786], [[0.809949,0.586501,0],[0,0,1]], [false, false]],
["Land_RotorCoversBag_01_F", [14635.5,16792.5,17.9643], [[-0.37902,0.925388,0],[0,0,1]], [false, false]],
["Land_Bucket_clean_F", [14635.3,16792.2,18.8025], [[0.047582,0.998867,0],[0,0,1]], [false, false]],
["Land_Bucket_painted_F", [14635.5,16792.6,18.7872], [[0,1,0],[0,0,1]], [false, false]],
["Land_FireExtinguisher_F", [14634.8,16792,18.0244], [[0,1,0],[0,0,1]], [false, false]],
["Land_FoodContainer_01_F", [14636.3,16793.2,18.0186], [[0,1,0],[0,0,1]], [false, false]],
["Land_SatellitePhone_F", [14636.3,16793.1,18.7921], [[0,1,0],[0,0,1]], [false, false]],
["Land_CampingChair_V1_F", [14634.3,16791.2,18.0009], [[-0.472274,0.881452,0],[0,0,1]], [false, false]],
["Land_CampingTable_F", [14635.8,16792.6,17.9868], [[0.65486,-0.755751,0],[0,0,1]], [false, false]],
["Land_AirIntakePlug_01_F", [14633.9,16790.4,18.015], [[-0.592913,0.805266,0],[0,0,1]], [false, false]],
["Land_CncBarrier_stripes_F", [14576.7,16799.3,17.8796], [[0.707107,-0.707107,0],[0,0,1]], [false, false]],
["Land_CncBarrier_stripes_F", [14570.7,16794.1,17.8947], [[0.750526,-0.66084,0],[0,0,1]], [false, false]],
["Land_HBarrier_5_F", [14643.4,16803.9,17.4603], [[-0.00792382,0.999969,0],[0,0,1]], [false, false]],
["Land_CncBarrier_stripes_F", [14629.2,16793,17.8947], [[0.7127,-0.701469,0],[0,0,1]], [false, false]],
["Land_CncBarrier_stripes_F", [14602.7,16766.3,17.8947], [[0.707107,-0.707107,0],[0,0,1]], [false, false]],
["Land_CncBarrier_stripes_F", [14588.2,16750.6,17.8947], [[0.707107,-0.707107,0],[0,0,1]], [false, false]],
["Land_Pier_Box_F", [14673.6,16798.4,22.6626], [[0.707107,-0.707107,0],[0,0,1]], [false, false]],
["Land_Pier_Box_F", [14577.1,16723.9,22.6626], [[-0.707107,-0.707107,0],[0,0,1]], [false, false]],
["Land_Bunker_F", [14665.2,16788.9,18.5132], [[0.707107,0.707107,0],[0,0,1]], [false, false]],
["Land_Cargo40_military_green_F", [14584.4,16715.4,17.8215], [[-0.701469,0.7127,0],[0,0,1]], [false, false]],
["Land_Cargo20_grey_F", [14582.7,16707.1,17.8627], [[0,1,0],[0,0,1]], [false, false]],
["Land_Cargo10_grey_F", [14576,16704.8,17.8678], [[-0.952518,0.304482,0],[0,0,1]], [false, false]],
["Land_CampingTable_F", [2987.45,18180.5,1.21957], [[0.909632,0.415416,0],[0,0,1]], [false, false]],
["Land_ToolTrolley_01_F", [2980.77,18144.4,1.13856], [[-0.781129,0.62437,0],[0,0,1]], [false, false]],
["CargoNet_01_barrels_F", [2987.87,18182.6,1.26298], [[0,1,0],[0,0,1]], [false, false]],
["Land_ShelvesMetal_F", [2979.66,18187.6,1.2162], [[-0.997987,-0.0634173,0],[0,0,1]], [false, false]],
["Land_FishingGear_02_F", [2980.34,18124.5,1.2076], [[0,1,0],[0,0,1]], [false, false]],
["Land_Basket_F", [2979.97,18184,1.26116], [[0,1,0],[0,0,1]], [false, false]],
["Land_CratesWooden_F", [2992.38,18156.2,1.11772], [[-0.371659,0.928369,0],[0,0,1]], [false, false]],
["Land_Sacks_goods_F", [2979.18,18186,1.15971], [[0.999213,-0.0396557,0],[0,0,1]], [false, false]],
["Land_Sacks_heap_F", [2985.09,18169.8,1.16568], [[-0.055508,0.998458,0],[0,0,1]], [false, false]],
["Land_Cages_F", [2989.92,18190.5,1.14397], [[-0.0634176,0.997987,0],[0,0,1]], [false, false]],
["Land_GarbageContainer_closed_F", [2997.02,18195.1,1.12749], [[-0.999477,0.0323354,0],[0,0,1]], [false, false]],
["Land_CratesPlastic_F", [2979.2,18176.3,1.27247], [[0.690079,0.723734,0],[0,0,1]], [false, false]],
["Land_LuggageHeap_04_F", [2980.07,18194.2,1.24447], [[-0.65486,-0.755751,0],[0,0,1]], [false, false]],
["Land_LuggageHeap_02_F", [2979.48,18192.2,1.35571], [[-0.527223,0.849727,0],[0,0,1]], [false, false]],
["Land_GarbagePallet_F", [2978.46,18135.3,1.14171], [[0.356886,0.934148,0],[0,0,1]], [false, false]],
["Land_Cargo10_orange_F", [2997.76,18202,1.13367], [[0.356886,0.934148,0],[0,0,1]], [false, false]],
["Land_LampHarbour_F", [2972.09,18193.3,1.14308], [[0.997987,-0.0634245,0],[0,0,1]], [false, false]],
["MapBoard_altis_F", [2988.21,18186.6,1.23654], [[0.869969,-0.493107,0],[0,0,1]], [false, false]],
["Land_GarbageContainer_closed_F", [2980.93,18135.9,1.13155], [[0.996195,0.0871558,0],[0,0,1]], [false, false]],
["Land_Tyres_F", [2982.2,18127.5,1.54287], [[0.805271,0.592907,0],[0,0,1]], [false, false]],
["Land_JunkPile_F", [2994.1,18132.6,2.20519], [[-0.0317247,-0.999497,0],[0,0,1]], [false, false]],
["Land_GarbageWashingMachine_F", [2988.89,18127,2.03828], [[0,1,0],[0,0,1]], [false, false]],
["Land_Wreck_Car_F", [2987.36,18132.2,1.48652], [[0.998458,-0.0555043,0],[0,0,1]], [false, false]],
["Land_Pier_F", [2993.46,18185.8,-1.13638], [[0.999641,-0.0267981,0],[0,0,1]], [false, false]],
["Land_Pier_F", [2994.03,18144.2,-1.15465], [[0.999641,-0.0267981,0],[0,0,1]], [false, false]],
["Land_Pier_wall_F", [2952.43,18207.7,-1.17864], [[0.00793015,0.999969,0],[0,0,1]], [false, false]],
["Land_i_Shed_Ind_F", [2987.11,18179.7,1.23635], [[-0.999968,-0.00794115,0],[0,0,1]], [false, false]],
["Land_Pier_F", [2980.88,18182.9,-1.1319], [[0.999641,-0.0267981,0],[0,0,1]], [false, false]],
["Land_Pier_F", [2979.73,18141.3,-1.14254], [[0.999641,-0.0267981,0],[0,0,1]], [false, false]],
["Land_CncBarrier_F", [2981.36,18148.3,1.14752], [[0.047593,0.998867,0],[0,0,1]], [false, false]],
["Land_ToolTrolley_02_F", [2983.3,18147.4,1.12305], [[-0.936947,0.349472,0],[0,0,1]], [false, false]],
["Land_Box_AmmoOld_F", [2988.01,18178.4,1.22718], [[0.479248,0.87768,0],[0,0,1]], [false, false]],
["Land_Cargo20_red_F", [2985.06,18150.5,1.04326], [[-0.916104,0.400941,0],[0,0,1]], [false, false]],
["Land_ShelvesMetal_F", [2979.71,18182.9,1.24149], [[-0.999968,0.0079407,0],[0,0,1]], [false, false]],
["Land_WaterCooler_01_new_F", [2979.31,18177.4,1.27611], [[-0.999497,0.0317244,0],[0,0,1]], [false, false]],
["Land_CrabCages_F", [2981.58,18197.4,1.18942], [[0.023804,-0.999717,0],[0,0,1]], [false, false]],
["Land_FishingGear_01_F", [2973.53,18184.7,1.18309], [[0,1,0],[0,0,1]], [false, false]],
["Land_FishingGear_02_F", [2981.87,18133,1.12165], [[-0.965926,0.258819,0],[0,0,1]], [false, false]],
["Land_CratesShabby_F", [2986.12,18166.7,1.16942], [[0.479243,-0.877682,0],[0,0,1]], [false, false]],
["Land_PaperBox_open_full_F", [2988.17,18176.8,1.2596], [[0,1,0],[0,0,1]], [false, false]],
["Land_Pallet_MilBoxes_F", [2986.39,18176.6,1.24124], [[0,1,0],[0,0,1]], [false, false]],
["Land_CratesWooden_F", [2990,18166.8,1.09873], [[-0.922356,-0.386341,0],[0,0,1]], [false, false]],
["Land_FishingGear_01_F", [2959.63,18196.6,1.11124], [[0.928369,-0.371659,0],[0,0,1]], [false, false]],
["Land_Sack_F", [2980.24,18186.9,1.13722], [[0,1,0],[0,0,1]], [false, false]],
["Land_CratesShabby_F", [2979.79,18181.2,1.07005], [[0.624375,0.781125,0],[0,0,1]], [false, false]],
["Land_Sacks_heap_F", [2979.31,18178.9,1.26949], [[-0.6958,0.718235,0],[0,0,1]], [false, false]],
["Land_GarbageBarrel_01_F", [2983.95,18128.1,1.58736], [[0.729186,0.684316,0],[0,0,1]], [false, false]],
["Land_LuggageHeap_03_F", [2982.09,18194.6,1.21513], [[0.922356,-0.386341,0],[0,0,1]], [false, false]],
["Land_LampHarbour_F", [2989.9,18173.4,1.20945], [[0.999213,0.0396556,0],[0,0,1]], [false, false]],
["Land_LampHarbour_F", [2971.13,18156.8,1.29263], [[0.999969,-0.00793239,0],[0,0,1]], [false, false]],
["Land_LampHarbour_F", [2994.19,18129,2.5332], [[-0.0396613,0.999213,0],[0,0,1]], [false, false]],
["Land_LampHalogen_F", [2984.64,18196.4,1.03341], [[0.999213,-0.0396574,0],[0,0,1]], [false, false]],
["Land_Metal_wooden_rack_F", [2987.86,18188.8,1.19516], [[-0.999874,0.0158642,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [2986.77,18185.7,1.21864], [[-0.899489,0.436943,0],[0,0,1]], [false, false]],
["Land_Wreck_Car_F", [23338.3,24207.2,3.82129], [[-0.888833,-0.458231,0],[0,0,1]], [false, false]],
["Land_GarbageContainer_closed_F", [23340.2,24212.2,4.38752], [[-0.989821,0.142318,0],[0,0,1]], [false, false]],
["Land_Tyres_F", [23335.2,24203.3,4.14816], [[0.999717,-0.0237988,0],[0,0,1]], [false, false]],
["Land_JunkPile_F", [23338.1,24210.1,4.12724], [[-0.995471,0.0950635,0],[0,0,1]], [false, false]],
["Land_PortableLight_single_F", [23374.3,24181.1,4.86591], [[0.928369,-0.371659,0],[0,0,1]], [false, false]],
["Land_WeldingTrolley_01_F", [23380.5,24185.4,4.86897], [[-0.988662,0.150156,0],[0,0,1]], [false, false]],
["Land_Workbench_01_F", [23375.1,24185.9,4.84018], [[0.983398,-0.181463,0],[0,0,1]], [false, false]],
["Land_i_Shop_01_V1_F", [23377.8,24167.7,3.79129], [[0.885175,-0.465259,0],[0,0,1]], [false, false]],
["Land_City_4m_F", [23362.5,24196,4.09203], [[-0.479243,-0.877682,0],[0,0,1]], [false, false]],
["Land_City_4m_F", [23369.7,24192.3,3.98921], [[0.465264,0.885172,0],[0,0,1]], [false, false]],
["Land_City_Gate_F", [23366.1,24194.1,4.07551], [[0.453482,0.891266,0],[0,0,1]], [false, false]],
["Land_City_8m_F", [23378.9,24175.8,3.83947], [[0.936953,-0.349455,0],[0,0,1]], [false, false]],
["Land_Kiosk_redburger_F", [23353.2,24168.5,4.4989], [[0.666767,0.745267,0],[0,0,1]], [false, false]],
["Land_RattanTable_01_F", [23345.2,24166.1,4.31775], [[-0.134453,0.99092,0],[0,0,1]], [false, false]],
["Land_RattanTable_01_F", [23358.7,24163.5,4.26188], [[0.654861,0.755749,0],[0,0,1]], [false, false]],
["Land_RattanTable_01_F", [23345.9,24160.5,4.37509], [[0.654861,0.755749,0],[0,0,1]], [false, false]],
["Land_RattanTable_01_F", [23350.9,24161.3,4.46815], [[0.444066,0.895994,0],[0,0,1]], [false, false]],
["Land_RattanTable_01_F", [23353.3,24157.2,4.54655], [[0.197035,0.980397,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23343.4,24158.5,4.24294], [[0,1,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23360.9,24162.5,4.01765], [[0,1,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23357.6,24163.8,4.33318], [[0.415416,0.909632,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23345.1,24161.3,4.33882], [[0.371663,0.928368,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23346.4,24166.2,4.35115], [[0.181463,-0.983398,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23346.7,24159.8,4.4097], [[-0.553915,-0.832573,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23354.3,24158.9,4.57206], [[0.729184,-0.684318,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23349.9,24161.8,4.44282], [[0.319561,0.947566,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23350.5,24158.9,4.39606], [[-0.922356,0.386341,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23353,24156.2,4.46134], [[-0.999968,0.0079407,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23344.2,24166.5,4.30126], [[0.349463,0.93695,0],[0,0,1]], [false, false]],
["Land_Sunshade_04_F", [23345.3,24165.6,4.30477], [[0,1,0],[0,0,1]], [false, false]],
["Land_Sunshade_04_F", [23354.2,24157.4,4.57845], [[-0,1,0],[0,0,1]], [false, false]],
["Land_Sunshade_04_F", [23345.2,24160.1,4.36116], [[0,1,0],[0,0,1]], [false, false]],
["Land_CarService_F", [23376.2,24188.7,4.36585], [[-0.165822,-0.986156,0],[0,0,1]], [false, false]],
["Land_RattanTable_01_F", [23366.3,24170.3,4.11357], [[0.654861,0.755749,0],[0,0,1]], [false, false]],
["Land_RattanTable_01_F", [23362,24173.5,4.2566], [[0.654861,0.755749,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23364.9,24168.6,3.98596], [[0.415416,0.909632,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23362.8,24173.7,4.08876], [[0.415416,0.909632,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23361,24173.6,4.28424], [[0.415416,0.909632,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23367.3,24169.5,4.07351], [[-0.895991,-0.444072,0],[0,0,1]], [false, false]],
["Land_LampStreet_small_F", [23368,24174.1,4.19138], [[-0.952359,0.30498,0],[0,0,1]], [false, false]],
["Land_LampStreet_small_F", [23342.6,24215.3,4.57967], [[0.800849,0.598866,0],[0,0,1]], [false, false]],
["Land_LampStreet_small_F", [23382.2,24190.8,4.00731], [[0.259315,0.965793,0],[0,0,1]], [false, false]],
["Land_LampStreet_small_F", [23341.3,24184.7,4.59291], [[0.000515055,1,0],[0,0,1]], [false, false]],
["Land_LampStreet_small_F", [23361.5,24197.5,4.18664], [[0.750871,0.660449,0],[0,0,1]], [false, false]],
["Land_LampStreet_small_F", [23306.9,24188.8,2.65756], [[0.0718536,0.997415,0],[0,0,1]], [false, false]],
["Land_LampStreet_small_F", [23396.1,24199.9,5.02106], [[-0.50641,0.862293,0],[0,0,1]], [false, false]],
["Land_LampStreet_small_F", [23320.3,24187,2.64213], [[0.0243121,0.999704,0],[0,0,1]], [false, false]],
["Land_Wreck_Offroad2_F", [23368.4,24185.1,3.95543], [[-0.220306,-0.975431,0],[0,0,1]], [false, false]],
["Land_WoodenCart_F", [23342.5,24200.2,4.45953], [[0.0475834,0.998867,0],[0,0,1]], [false, false]],
["Land_FieldToilet_F", [23341.8,24174.2,4.34077], [[-0.64885,0.760916,0],[0,0,1]], [false, false]],
["Land_ToolTrolley_02_F", [23379.4,24180.5,4.85657], [[0.892443,0.451161,0],[0,0,1]], [false, false]],
["Land_Pallet_MilBoxes_F", [23378.9,24166.1,7.93425], [[0.605609,0.795762,0],[0,0,1]], [false, false]],
["Land_PaperBox_open_full_F", [23376.9,24167.2,7.94106], [[0.547297,0.836938,0],[0,0,1]], [false, false]],
["Land_CncBarrier_F", [23369.5,24192,3.95235], [[0.458228,0.888835,0],[0,0,1]], [false, false]],
["Land_CncBarrier_F", [23365.1,24192.5,4.03231], [[0.479248,0.87768,0],[0,0,1]], [false, false]],
["Land_CncBarrier_F", [23362.8,24195.4,4.0013], [[0.486197,0.873849,0],[0,0,1]], [false, false]],
["Land_CncBarrier_F", [23378.9,24177.3,3.77195], [[0.939693,-0.34202,0],[0,0,1]], [false, false]],
["Land_CncBarrier_F", [23377.8,24174.1,3.79705], [[0.934148,-0.356885,0],[0,0,1]], [false, false]],
["Land_WaterCooler_01_new_F", [23356,24169.5,4.60965], [[-0.642788,-0.766044,0],[0,0,1]], [false, false]],
["Land_LuggageHeap_03_F", [23378.9,24165.8,4.03437], [[-0.486198,0.873849,0],[0,0,1]], [false, false]],
["Land_LuggageHeap_04_F", [23380.8,24165.3,4.05406], [[-0.65486,-0.755751,0],[0,0,1]], [false, false]],
["Land_LuggageHeap_02_F", [23378,24171.1,4.04114], [[-0.472274,0.881452,0],[0,0,1]], [false, false]],
["Land_Cargo20_military_green_F", [23347.6,24199.7,4.29847], [[0.0158654,0.999874,0],[0,0,1]], [false, false]],
["Exile_Sign_TraderCity", [2989.89,18177.6,2.61365], [[-0.999874,-0.0158642,0],[0,0,1]], [false, false]],
["Land_Factory_Conv1_Main_F", [2986.77,18130.1,2.21669], [[0.999874,0.0158662,0],[0,0,1]], [false, false]],
["Land_cmp_Shed_F", [2974.8,18129.5,1.13956], [[0.998867,-0.0475825,0],[0,0,1]], [false, false]],
["Land_cmp_Hopper_F", [2963.39,18129.7,0.0900025], [[0.0237981,0.999717,0],[0,0,1]], [false, false]],
["Land_Tank_rust_F", [2976.74,18173.8,1.16096], [[-0.999717,0.0238043,0],[0,0,1]], [false, false]],
["Land_Wreck_Traw_F", [2888.95,18107.6,-6.03909], [[-0.723738,-0.690074,0],[0,0,1]], [false, false]],
["Land_Wreck_Traw2_F", [2912.17,18124,-4.86378], [[-0.981929,-0.189249,0],[0,0,1]], [false, false]],
["Land_Cargo40_grey_F", [2999.03,18191.5,1.14093], [[0.999969,0.00793242,0],[0,0,1]], [false, false]],
["Land_Cargo40_military_green_F", [2999.4,18179.2,1.1606], [[0.997987,-0.0634245,0],[0,0,1]], [false, false]],
["Land_Cargo40_white_F", [2989.6,18163,1.04851], [[0.909632,0.415416,0],[0,0,1]], [false, false]],
["Land_Cargo20_grey_F", [2994.85,18186.4,1.14158], [[-0.952518,0.304482,0],[0,0,1]], [false, false]],
["Land_Cargo20_military_green_F", [2990.53,18177.6,1.07952], [[-0.999968,-0.00794115,0],[0,0,1]], [false, false]],
["Land_Cargo20_red_F", [2986.75,18155.3,1.11224], [[-0.00794125,-0.999968,0],[0,0,1]], [false, false]],
["Land_Cargo10_grey_F", [2997.12,18187.6,3.70366], [[0.173648,0.984808,0],[0,0,1]], [false, false]],
["Land_Pier_Box_F", [2921.94,18197.2,1.15006], [[0.0158659,0.999874,0],[0,0,1]], [false, false]],
["Land_Sea_Wall_F", [2989.66,18207.7,-1.04307], [[0.0158643,-0.999874,0],[0,0,1]], [false, false]],
["Land_PierLadder_F", [2969.61,18152.9,-1.73874], [[0.998867,0.0475807,0],[0,0,1]], [false, false]],
["Exile_Sign_WasteDump", [2983.77,18132.1,1.31246], [[-0.197041,-0.980395,0],[0,0,1]], [false, false]],
["Exile_Sign_Vehicles", [2981.34,18148.4,1.77985], [[0.0475819,0.998867,0],[0,0,1]], [false, false]],
["Land_Lighthouse_small_F", [2916.05,18200.4,1.12379], [[-0.999874,0.0158642,0],[0,0,1]], [false, false]],
["Exile_Sign_Boat", [2912.81,18194.8,0.945447], [[-0.999717,0.0238043,0],[0,0,1]], [false, false]],
["Exile_Sign_Boat_Small", [2971.94,18194.1,0.204013], [[-0.936953,-0.349455,0],[0,0,1]], [false, false]],
["Exile_Sign_Armory", [2988.82,18179.1,1.02696], [[0.999717,-0.0237971,0],[0,0,1]], [false, false]],
["Exile_Sign_Equipment", [2980.48,18195.6,0.997162], [[0,1,0],[0,0,1]], [false, false]],
["Exile_Sign_Food", [2978.52,18178.6,1.16662], [[-1,1.19249e-008,0],[0,0,1]], [false, false]],
["Land_CncBarrier_F", [2977.99,18148.5,1.14459], [[0.047593,0.998867,0],[0,0,1]], [false, false]],
["Land_CncBarrier_F", [2974.63,18148.7,1.14333], [[0.047593,0.998867,0],[0,0,1]], [false, false]],
["Land_CncBarrier_F", [2971.26,18148.8,1.14587], [[0.047593,0.998867,0],[0,0,1]], [false, false]],
["Land_BagFence_Round_F", [2994.5,18166,1.1572], [[-0.877682,0.479243,0],[0,0,1]], [false, false]],
["Land_HBarrier_1_F", [2992.75,18164.9,1.06276], [[0.980397,0.197035,0],[0,0,1]], [false, false]],
["Land_HBarrier_1_F", [2995.03,18167.9,1.06746], [[0,1,0],[0,0,1]], [false, false]],
["Land_HBarrier_3_F", [2998.5,18169.9,1.13225], [[-0.931285,0.364292,0],[0,0,1]], [false, false]],
["Land_LifeguardTower_01_F", [23338.1,24153.7,4.49763], [[-0.165822,0.986156,0],[0,0,1]], [false, false]],
["Land_i_Addon_04_V1_F", [23376.6,24160.4,2.46928], [[0.436945,0.899488,0],[0,0,1]], [false, false]],
["Land_Pier_small_F", [23389,24147.6,-0.137567], [[-0.251141,0.967951,0],[0,0,1]], [false, false]],
["Land_GH_House_2_F", [23333.5,24196.3,3.91706], [[0.998867,-0.0475825,0],[0,0,1]], [false, false]],
["Exile_Sign_TraderCity", [23329.3,24201.1,3.09842], [[-0.0475771,-0.998868,0],[0,0,1]], [false, false]],
["Exile_Sign_Equipment", [23381.4,24170,3.95674], [[0.47925,0.877679,0],[0,0,1]], [false, false]],
["Exile_Sign_Armory", [23378.2,24165.2,8.24169], [[-0.458231,-0.888833,0],[0,0,1]], [false, false]],
["Exile_Sign_Armory_Small", [23373.2,24165,3.11934], [[0.895991,-0.444072,0],[0,0,1]], [false, false]],
["Exile_Sign_Equipment_Small", [23376.4,24172.4,3.04409], [[0.997452,-0.071339,0],[0,0,1]], [false, false]],
["Exile_Sign_Hardware_Small", [23370.2,24180.7,3.57548], [[0.158002,0.987439,0],[0,0,1]], [false, false]],
["Exile_Sign_Hardware", [23370.9,24187.1,4.57432], [[-0.987439,0.158003,0],[0,0,1]], [false, false]],
["Exile_Sign_Vehicles", [23389.4,24185.3,4.46844], [[-0.312037,-0.95007,0],[0,0,1]], [false, false]],
["Exile_Sign_WasteDump", [23340.4,24209.8,4.49615], [[0.997987,-0.0634245,0],[0,0,1]], [false, false]],
["Exile_Sign_WasteDump_Small", [23341.3,24194.2,4.44642], [[-0.5,0.866025,0],[0,0,1]], [false, false]],
["Exile_Sign_Food_Small", [23353.6,24171.1,3.37786], [[-0.678506,-0.734595,0],[0,0,1]], [false, false]],
["Exile_Sign_Boat_Small", [23333.4,24189.1,3.19471], [[-0.916111,0.400924,0],[0,0,1]], [false, false]],
["Exile_Locker", [14618.4,16804.2,17.9974], [[0.69225,-0.721658,0],[0,0,1]], [false, false]],
["Exile_Sign_Locker", [14620,16805.8,17.91], [[0.711919,-0.702261,0],[0,0,1]], [false, false]],
["Exile_Locker", [23328.7,24200.8,4.52368], [[0,1,0],[0,0,1]], [false, false]],
["Exile_Sign_Locker", [23336.1,24199.7,4.37551], [[-1,1.19249e-008,0],[0,0,1]], [false, false]],
["Exile_Locker",[2988.82,18173.9,1.35244],[[0.999929,0.011945,0],[0,0,1]],[false,false]],
["Exile_Sign_Locker",[2984.21,18173.6,1.35244],[[0.999929,0.0118953,0],[0,0,1]],[false,false]]
];
{
private _object = (_x select 0) createVehicle [0,0,0];
_object setPosASL (_x select 1);
_object setVectorDirAndUp (_x select 2);
_object enableSimulationGlobal ((_x select 3) select 0);
_object allowDamage ((_x select 3) select 1);
} forEach _objects;
///////////////////////////////////////////////////////////////////////////////////////////////////
// Russian Roulette
///////////////////////////////////////////////////////////////////////////////////////////////////
_objects =
[
["Land_WoodenTable_large_F", [14628.171,16826.014,18.467293], 0, false],
["Exile_Sign_RussianRoulette", [14623.898,16820.336, 18.950966], 0.77240193, false],
["Land_HumanSkull_F", [14621.056, 16821.572, 18.476805], 2.0025947, false],
["Land_WheelCart_F", [14621.334,16821.477, 18.355867], 4.9935374, false],
["Land_Camping_Light_F", [14628.075,16825.77, 19.00408], 0, true]
//["Land_SportGround_fence_F", [14625.692, 16818.945, 18.791378], 0.79693103, false],
//["Land_SportGround_fence_F", [14633.911, 16816.904, 17.9177], 5.4953084, false],
//["Land_CargoBox_V1_F", [14619.726, 16823.613, 18.75972], 5.4931207, false],
];
{
private ["_object"];
_object = (_x select 0) createVehicle [0,0,0];
_object setDir (deg (_x select 2));
_object setPosWorld (_x select 1);
_object allowDamage false;
_object enableSimulation (_x select 3);
_object enableSimulationGlobal (_x select 3);; // :)
}
forEach _objects;
ExileRouletteChairs = [];
ExileRouletteChairPositions =
[
[[14627.052, 16826.611, 18.004343], 4.9010592],
[[14629.161, 16826.707, 18.004343], 1.3332222],
[[14628.180, 16824.557, 18.004343], 3.1448042],
[[14628.123, 16827.488, 18.004343], 0],
[[14629.184, 16825.537, 18.034342], 1.7944603],
[[14627.175, 16825.453, 18.004343], 4.4050193]
];
{
private ["_chair"];
_chair = "Exile_RussianRouletteChair" createVehicle [0, 0, 0];
_chair setDir (deg (_x select 1));
_chair setPosWorld (_x select 0);
_chair allowDamage false;
_chair enableSimulationGlobal true;
ExileRouletteChairs pushBack _chair;
}
forEach ExileRouletteChairPositions;
///////////////////////////////////////////////////////////////////////////////////////////////////
// Concrete Mixers
///////////////////////////////////////////////////////////////////////////////////////////////////
_concreteMixers =
[
[[14354.0, 18960.1, 36.9597], 35], // athira
[[18309.4, 15575.0, 48.8194], 90], // charkia
[[11391.2, 14259.5, 21.2141], -40] // alikampos
];
{
_concreteMixer = "Exile_ConcreteMixer" createVehicle (_x select 0);
_concreteMixer setDir (_x select 1);
_concreteMixer setPosASL (_x select 0);
_concreteMixer allowDamage false;
_concreteMixer enableSimulationGlobal true;
}
forEach _concreteMixers;

View File

@ -0,0 +1,245 @@
/**
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private ["_objectStorage", "_staticObjectTemplates"];
/*
// Preload camery settings
waitUntil { preloadCamera [29549.7,1508.77,189.029] };
// Remember what we have instanciated, so we can clean up a bit
_objectStorage = [];
// Static objects for the scene
_staticObjectTemplates =
[
["Land_Pier_F",[29566.7,1512.72,186.76],182.273,0,0,false],
["Land_Pier_wall_F",[29566.6,1560.03,186.705],1.36361,0,0,false],
["Land_Pier_Box_F",[29539.6,1550.11,192.115],0,0,0,false],
["Land_Pier_F",[29596.6,1533.61,186.95],91.8181,0,0,false],
["Land_Bunker_F",[29580.4,1509.79,189.09],95.4545,0,0,false],
["Land_MilOffices_V1_F",[29600.1,1534.35,189.543],90.909,0,0,false],
["Land_Pier_Box_F",[29591.6,1507.34,200.259],95.0001,0,0,false],
["Land_Pier_F",[29562.8,1502.29,186.759],2.27276,0,0,false],
["Land_Airport_Tower_F",[29540.2,1549.9,192.079],0,0,0,false],
["Land_JetEngineStarter_01_F",[29579.3,1496.5,189.031],18.6364,0,0,false],
["Land_Radar_F",[29598.7,1561.89,191.255],8.18185,0,0,false],
["Exile_Sign_TraderCity",[29546.8,1517.4,189.039],272,0,0,false],
["Land_TTowerBig_1_F",[29592,1507.42,201.014],3.18181,0,0,false],
["Submarine_01_F",[29524.1,1476.42,176.398],147.273,0,0,false],
["C_Boat_Civil_04_F",[29562.7,1535.25,179.236],271.364,0,0,false]
];
{
private ["_staticObject"];
_staticObject = (_x select 0) createVehicleLocal [0,0,0];
_staticObject setDir (_x select 2);
_staticObject setPosATL (_x select 1);
_staticObject enableSimulation false;
_objectStorage pushBack _staticObject;
}
forEach _staticObjectTemplates;
// Create the chopper and close all doors
_chopper = "O_Heli_Transport_04_covered_F" createVehicleLocal [0,0,0];
_chopper setDir 326.364;
_chopper setPosATL [29549.7,1508.77,189.029];
_chopper enableSimulation true;
_chopper animateDoor ['Door_1_source', 0, true];
_chopper animateDoor ['Door_2_source', 0, true];
_chopper animateDoor ['Door_3_source', 0, true];
_chopper animateDoor ['Door_4_source', 0, true];
_chopper animateDoor ['Door_5_source', 0, true];
_chopper animateDoor ['Door_6_source', 0, true];
_objectStorage pushBack _chopper;
// Prisoner 1
_prisoner01 =
[
"Exile_Cutscene_Prisoner01",
"AfricanHead_01",
["Acts_AidlPsitMstpSsurWnonDnon01"],
[29552.5,1510.03,189.027],
341.323
]
call ExileClient_object_trader_create;
_objectStorage pushBack _prisoner01;
// Prisoner 2
_prisoner02 =
[
"Exile_Cutscene_Prisoner02",
"WhiteHead_03",
["InBaseMoves_HandsBehindBack1"],
[29550.4,1509.77,189.026],
45.1028
]
call ExileClient_object_trader_create;
_objectStorage pushBack _prisoner02;
// Pilot, just statnding there
_pilot =
[
"Exile_Cutscene_Pilot",
"PersianHead_A3_02",
["passendger_flatground_1_Idle_Unarmed"],
[29549.5,1512.48,189.031],
82.2734
]
call ExileClient_object_trader_create;
_objectStorage pushBack _pilot;
// Boss, treating us
_boss =
[
"Exile_Cutscene_Police01",
"GreekHead_A3_08",
["Acts_Abuse_abusing"],
[29556.3,1513.86,189.033],
88.0126
]
call ExileClient_object_trader_create;
_objectStorage pushBack _boss;
// Guard 1
_police01 =
[
"Exile_Cutscene_Police02",
"GreekHead_A3_08",
["HubStanding_idle1", "HubStanding_idle2", "HubStanding_idle3"],
[29549.4,1518,189.04],
139.341
]
call ExileClient_object_trader_create;
_objectStorage pushBack _police01;
// Guard 2
_police02 =
[
"Exile_Cutscene_Police01",
"GreekHead_A3_08",
["InBaseMoves_patrolling1"],
[29555.1,1516.7,189.038],
205.865
]
call ExileClient_object_trader_create;
_objectStorage pushBack _police02;
// And our small player fale
_player =
[
"Exile_Cutscene_Player",
"WhiteHead_01",
["Acts_Abuse_abuser"],
[29556.3,1513.86,189.033],
88.0126
]
call ExileClient_object_trader_create;
_objectStorage pushBack _player;
_player allowDamage false; // It can bleed thou
*/
// End the loading screen
endLoadingScreen;
/*
// Fade in sound
3 fadeSound 1;
cutText ["", "BLACK IN", 3];
// GOGO ! :)
_camera = "camera" camCreate (_player modelToWorld [0, 0, 10]);
_camera camSetTarget _player;
_camera cameraEffect ["EXTERNAL", "BACK TOP"];
_camera camSetRelPos [0, 0.7, 1.5];
_camera camCommand "inertia on";
_camera camCommit 1;
uiSleep 1;
_boss say ["ExileIntro01", 5];
uiSleep 3;
_boss say ["ExileIntro02", 5];
uiSleep 5;
[300] call BIS_fnc_bloodEffect;
_player setdamage 0.5;
_player setBleedingRemaining 3;
_player say ["ExileIntro10", 5];
uiSleep 1;
_boss say ["ExileIntro03", 5];
uiSleep 3;
_boss say ["ExileIntro04", 5];
uisleep 6;
_boss say ["ExileIntro05", 5];
uisleep 5;
_boss say ["ExileIntro07", 5];
_chopper engineOn true;
uisleep 3;
_boss say ["ExileIntro08", 5];
_chopper animateDoor ['Door_1_source', 1, false];
_chopper animateDoor ['Door_2_source', 1, false];
uiSleep 10;
_boss say ["ExileIntro09", 5];
// Open chopper doors
_chopper animateDoor ['Door_3_source', 1, false];
_chopper animateDoor ['Door_4_source', 1, false];
_chopper animateDoor ['Door_5_source', 1, false];
_chopper animateDoor ['Door_6_source', 1, false];
uisleep 15;
// Fade out sound and screen to black/silent
5 fadeSound 0;
titleText ["", "BLACK OUT", 5];
// Cleanup after 5 seconds
uiSleep 5;
_camera cameraEffect ["terminate","back"];
camDestroy _camera;
{
deleteVehicle _x;
}
forEach _objectStorage;
*/
ExileClientIntroIsPlaying = false;
true

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,13 @@
<html>
<head>
<title>Server</title>
</head>
<body>
<h1>Dem Server Rulz</h1>
<p>Do not talk about Exile.</p>
<p>Do not talk about Exile.</p>
<p>Do not kill dem bambies.</p>
<p>Do not be a dickhead.</p>
<p>Teamspeak blah</p>
</body>
</html>

View File

@ -0,0 +1,48 @@
@echo off
::TURN OFF FIREWALL RULE TO PREVENT NETWORK TRAFFIC
echo Disabling firewall rules for this server
netsh advfirewall firewall delete rule name="ExileAltis" program="C:\ExileServers\ExileAltis\arma3server_x64.exe"
timeout 3
::MAKE SURE ALL TASKS ARE REALLY STOPPED
echo Making sure all instances of this server have stopped
taskkill /f /fi "status eq not responding" /im servermonitor.exe
taskkill /f /im servermonitor.exe
taskkill /f /fi "status eq not responding" /im bec.exe
taskkill /f /im bec.exe
taskkill /f /fi "status eq not responding" /im arma3server_x64.exe
taskkill /f /im arma3server_x64.exe
timeout 5
::RESTARTING THE ARMA 3 SERVER
echo Starting ARMA 3 Server...
C:\Windows\System32\cmd.exe /C start "arma3" "C:\ExileServers\ExileAltis\arma3server_x64.exe" "-mod=@exile;" "-servermod=@extdb3;@Exileserver;" -config=C:\ExileServers\ExileAltis\DonkeyPunch\config.cfg -port=2302 -profiles=DonkeyPunch -cfg=C:\ExileServers\ExileAltis\DonkeyPunch\basic.cfg -name=DonkeyPunch -BEPath=C:\ExileServers\ExileAltis\battleye -autoINIT -Loadmissiontomemory
echo ARMA 3 Server is started
timeout 25
::RESTARTING BATTLEYE
echo Start BEC
set bec="C:\ExileServers\ExileAltis\battleye\BEC"
cd /d %bec%
start "" /min "bec.exe" --dsc config.cfg
echo Battleye has started..
timeout 15
:: THIS RUNS THE SERVER MONITOR FOR YOU SO YOU DON'T FORGET
echo Starting Server Monitor Loop
set ServerMonitorPath="C:\ExileServers\ExileAltis"
cd /d %ServerMonitorPath%
start "" "servermonitor.bat"
echo Server Monitor has started. Have Fun
timeout 10
::OPEN UP FIREWALL FOR NETWORK TRAFFIC
echo Turning on Firewall Rule to allow server network traffic
netsh advfirewall firewall add rule name="ExileAltis" dir=in action=allow program="C:\ExileServers\ExileAltis\arma3server_x64.exe" enable=yes
echo Firewall is on and players can join
::FINISHED
timeout 2
@exit

View File

@ -0,0 +1,23 @@
@echo off
::IMPORTANT TO NAME IT SO WE CAN KILL IT
title servermonitor.bat
:start
C:\Windows\System32\tasklist /FI "IMAGENAME eq arma3server_x64.exe" 2>NUL | C:\Windows\System32\find /I /N "arma3server_x64.exe">NUL
if "%ERRORLEVEL%"=="0" goto loop
echo Server is not running, will be started now
start "" /min /wait "C:\ExileServers\ExileAltis\restartserver.bat - Shortcut"
timeout 30
echo Server started succesfully
exit
goto started
:loop
cls
echo Server is already running, running monitoring loop
:started
::THE 80 REFERS TO SECONDS AND HOW OFTEN IT WILL CHECK,YOU CAN SET IT TO WHATEVER YOU WANT. I JUST DONT WANT MY SERVER DOWN FOR MUCH LONGER THAN THAT!
::New error fault kill, will check for err fault and clear it and hopefully restart, a little more promise but no guarantee :)
taskkill /f /im WerFault.exe /fi "WINDOWTITLE eq Arma 3"
C:\Windows\System32\timeout /t 150
C:\Windows\System32\tasklist /FI "IMAGENAME eq arma3server_x64.exe" 2>NUL | C:\Windows\System32\find /I /N "arma3server_x64.exe">NUL
if "%ERRORLEVEL%"=="0" goto loop
goto start

Binary file not shown.

Binary file not shown.

14
license.txt Normal file
View File

@ -0,0 +1,14 @@
Exile Mod 64bit Base Server Layout
This github repo is for use by new and even experienced server hosts / community owners.
You are free to download, fork, edit and put up on your server to enjoy 64bit arma 3 and exile / eXpoch or any exile variant.
This repo is licensed under APL-SA and is free to use / modify / redistribute
Please pay attention and read any included licensing files for the respective addon its with.
This repo includes files licensed outside the scope of APL-SA.
You must follow the licensing included within the packages,
This includes Exile / extDB3 / BattlEye / BEC
Please refer to the Floss Exception for concerns with extDB3 licensing.
Arma Public License Share Alike https://www.bistudio.com/community/licenses/arma-public-license-share-alike

75
readme.md Normal file
View File

@ -0,0 +1,75 @@
# Exile 1.0.2 + 64-bit and Dynamic Simulation
This repo is licensed under APL-SA and is free to use / modify / redistribute
Please pay attention and read any included licensing files for the respective addon its with.
This repo includes files licensed outside the scope of APL-SA.
You must follow the licensing included within the packages,
This includes Exile / extDB3 / BattlEye / BEC
Please refer to the Floss Exception for concerns with extDB3 licensing.
## Details
1. Provides base for server hosts to get started and started properly
2. RestartServer.bat file included
- Handles all aspects of restart
- Turns off firewall rule (no network = no players connected to server)
- Makes sure everything has in fact been shut down / stopped
- Starts back up Arma 3 server using startupParameters
- Starts back up Battleye Extended Controls
- Turns back on firewall rule
3. BattlEye and BEC setup and configured
- BattlEye bans.txt and BEServer.cfg with database
- Config setup and ready
- Scheduler setup and working
4. 64-bit extDB3 and Server plus Dynamic Simulation
- Thanks to @CloudHax and @Torndeco for their public release of their work
## Installation
NOTES:
This repo is only for file structure
This repo does not include any EXILE client or server pbo's
1. Copy this repo to your C: drive
2. Copy the Arma 3 Server files from steam into your C: >> ExileServers >> ExileAltis folder
3. Add your full @Exile client addon and your @ExileServer server addons
- Modify as needed C: >> ExileServers >> ExileAltis >> @ExileServer >> exile_server_config >> config.cpp
- PBO up the exile_server_config folder
4. Setup your server name and other settings in the DonkeyPunch >> config.cfg
5. Add your MYSQL user and pw to the C: >> ExileServers >> ExileAltis >> @extDB3 >> extdb3-conf.ini
6. Right Click and Create Shortcut for C: >> ExileServers >> ExileAltis >> restartserver.bat
- Right Click new shortcut >> click advanced >> click Run as Administrator
OPTIONAL:
7. Add your purchased infiStar antihack and configure it for your needs
- Locate your passwords in C: >> ExileServers >> ExileAltis >> DonkeyPunch >> config.cfg
You now have a server setup on your Dedicated or PC environment.
You should already have knowledge setting up MySql and the exile database.
There are plenty of resources on the web and at exilemod.com for you to read.
I will not provide support on setting up mysql servers, read above comment for more info.
## Credits
- ExileMod Development Team
- BIS Development Team
- Torndeco
- CloudHax
- DPCG Contributors
- and anyone else I might not have listed here!
## TROUBLESHOOTING
If you have issues with BEC connecting to your server, edit the IP address for your server in these files below
1. C: >> ExileServers >> ExileAltis >> battleye >> beserver_x64.cfg
2. C: >> ExileServers >> ExileAltis >> battleye >> BEC >> Config >> config.cfg