• Eichi

    37 comments · 13792 views

    Welcome to the Community is King phase!

    It has been very quiet in here during the summer break, which is now finally coming to an end. And we are very excited to present our latest decisions and plans for the future of Exile to you!

    As some of you probably remember, we have set up a roadmap more than a year ago. It has been very hard to stick with that plan for such a long time since we really had no clue what to expect once we publish. The bounty system, unfortunately, did not fit well into Exile, but we have added many more features, mostly based on community wishes and polls.

    Roadmap.jpg.a5f44e73ceafa9af13c72544cb1f

    We released the first public version of Exile almost a year ago, on the 21st of August 2015, so we are very close to our first anniversary! After almost one year of hard work, we have managed to get out of the Alpha phase. Yep, Exile has been in Alpha so far. Now that we have reached the first Beta state with version one, we would like to continue following our roadmap - and enter the "Community is King" phase.

    Exile has become a solid framework for creating a cool server, but creating a mod on top of Exile was not possible so far. We wanted to at least implement all the features we had in our vision before allowing to modify it. Now that we have completed this, we would like to allow you to create your own modification using Exile as a foundation - if you stick with some guidelines.

    Using Exile as a foundation means you can build on top of Exile by creating an additional mod that overrides or edits current Exile code. You cannot edit and redistribute Exile itself. We will provide other benefits including things like a separate sub forum on our website, use of the Exile name and/or logo for sub-branding, and advertising on Twitch, Twitter, and Facebook.

    While we plan to maintain the core Exile mod, we hope this will provide our community with a more clear variety of Exile game modes. Currently, a player has to search through over 1000+ Exile servers that do not have a clear distinction in game mode. We are aware some players want hardcore experiences, some want extreme survival, some want an apocalypse, some want Roleplay, and some want PvE only. We hope this new sub-branding structure will provide a better experience for all of our players.

    If you would like to create your own modification on top of Exile, we require you to:

    • Have "Exile" as the first word of your mod name
    • Use the logo we give to you
    • Use our corporate branding
    • Comply with all involved licences
    • Comply with Bohemia's monetization rules
    • Not modify any files in @Exile
    • Let us review your project before you publish
    • Not mix Exile with existing mods

    What you will get from us:

    • Permission to do this
    • Your logo
    • Personal support from us whenever needed
    • Possible custom notifications in the Exile XM8 mobile app
    • Your own channels in our Teamspeak, so we can work together closely
    • A sub-forum on exilemod.com
    • Twitch Hosts, Tweets, etc.

    To apply, please answer the following questions and send your appliance to howdy@exilemod.com. After review, we will arrange a Teamspeak meeting with you to kickoff your project.

    • What is the name of your project?
    • Please give us a short briefing of your project:
    • Who is involved in your project?
    • Will this project be open source?
    • Will you publish the server files?
    • Who is going to host this?
    • Do you have any time plans already?
    • Are you planning to monetize this project?

    Let's do this together!


    26 people like this


    User Feedback




    @Eichi Not really, but knowing the public points of the api and the network communication schema will establish a standard.

    - I am mildly curious about providing the django solution; I know from experience that updating a production database is far easier and reliable when you have a migration framework managing it for you.

    - once the django thing is done, anyone can use the django ecosystem to add their own external  features (notifications, offline map notes, forums, etc).

    Share this comment


    Link to comment
    Share on other sites

    There is no need for a standard. And also not for Django, as we consider the database final.

    Share this comment


    Link to comment
    Share on other sites
    4 hours ago, airtonix said:

    @Eichi Not really, but knowing the public points of the api and the network communication schema will establish a standard.

    - I am mildly curious about providing the django solution; I know from experience that updating a production database is far easier and reliable when you have a migration framework managing it for you.

    - once the django thing is done, anyone can use the django ecosystem to add their own external  features (notifications, offline map notes, forums, etc).

    Dude... Wtf the only thing you do in this forum is complaint about arma is not node and that exile don't have an coding standard like an Fortune 500 company

    all the things you want php and MySQL can do it as easily 

    Share this comment


    Link to comment
    Share on other sites
    18 hours ago, Eichi said:

    There is no need for a standard. And also not for Django, as we consider the database final.

    It's a shame you feel that way, because upgrading an existing Exile database is a nightmare.

    And I'm not sure how you expect people to make extensions for Exile without established points of interface.

    13 hours ago, itsatrap said:

    Dude... Wtf the only thing you do in this forum is complaint about arma is not node and that exile don't have an coding standard like an Fortune 500 company

    all the things you want php and MySQL can do it as easily 

    Actually fortune 500 companies have the worst coding standards. And no, php is just a language, mysql doesn't provide a robust migration framework.

    I'm interested to hear your detailed solutions. :)

    Edited by airtonix

    Share this comment


    Link to comment
    Share on other sites

    "points of interface" what intarface do you want access to ?

    You can overwrite almost every exile function with CfgExileCustomCode?

    just use git diff merge when a new update comes out

    Share this comment


    Link to comment
    Share on other sites
    On 22/08/2016 at 6:55 PM, itsatrap said:

    "points of interface" what intarface do you want access to ?

    You can overwrite almost every exile function with CfgExileCustomCode?

    just use git diff merge when a new update comes out

    @itsatrap Migrating a live production database with git.

    I find this idea both intriguing and hilarious in your misunderstanding of the problems faced when running production applications.

    But if you mean to assume that any extensions/addons I would write for exile would actually go in the same directory... wow. I have no words.

     

    Anyway for lulz, I fired up my docker setup of exile server, using the incredibly simple to use tool "docker-compose":

    version: '2'
    services:
      db:
        image: mariadb
        env_file:
          - ./env/exile.mysql.env
    
      web:
        image: python:2.7
        env_file:
          - ./env/exile.mysql.env
          - ./env/exile.web.env
        volumes:
          - './web:/app'
    
      server:
        image: houki/arma3
        env_file:
          - ./env/exile.mysql.env
          - ./env/exile.server.env
        volumes:
          - './game/arma3:/arma3'
        command:
          - './arma3server'
          - '-port=2302'
          - '-servermods=@exileserver,@exile,@extdb2'

    So first off I just imported your mysql file manually, then I shelled into the web container and ran it's inspectdb command to generate all the required django models:

    docker exec -it exile_web_1 ./manage.py inspectdb > ./web/exile/models.py

    This generated a nice file with all the correct models factored apart from reverse naming conflicts with :
     

    'Account.clan' <> 'Clan.leader_uid'
    'Territory.stolen_by' <> 'Account.uid'

    These just require me to annotate those fields with an appropriate reverse name, so :
     

    class Account(models.Model):
    	...
    	clan = models.ForeignKey('Clan', primary_key=true, models.DO_NOTHING, related_name='members', blank=true, null=true)
    	...
    
    class Territory(models.Model):
    	...
    	stolen_by = models.ForeignKey('Account', primary_key=true, models.DO_NOTHING, related_name='stolen_flags', blank=true, null=true)
    	...

     

    It's worth noting that initially these models are marked as unmanaged by Django, so we'll just delete those declarations.

    After that, we add the new exile module to installed_apps and run the command to generate a migration (because the models already exist in the database). Because this is the first migration, it'll only create necessary database tables and/or columns.

    docker exec -it exile_web_1 ./manage.py makeschemamigrations exile

    This creates a migration file in ./web/exile/migrations/* which can be part of version control.

    Then run the migration

    docker exec -it exile_web_1 ./manage.py migrate exile

    So from now on, any changes to the schema should be done via the web/exile/models.py.

    So @Eichi, on reflection, having declared that you won't be changing the database is good, because it means any future changes to the databse can be safely done through migrations.

    Edited by airtonix

    Share this comment


    Link to comment
    Share on other sites
    11 hours ago, airtonix said:

    So @Eichi, on reflection, having declared that you won't be changing the database is good, because it means any future changes to the databse can be safely done through migrations.

    We do not plan it, but I cannot guarantee it since it depends on third party entities (Bohemia etc.). If something in Arma changes, we might need to adjust.

    New tables and fields should not be a big problem anyways.

    Share this comment


    Link to comment
    Share on other sites

    This is the new generated code for enabled Revive in MP, the ReviveTemplate isn't how you do it.

     

    I don't know if this works in Exile, I would guess no.

     

    Spoiler
    
    class CustomAttributes
    {
    	class Category0
    	{
    		name="Multiplayer";
    		class Attribute0
    		{
    			property="RespawnTemplates";
    			expression="true";
    			class Value
    			{
    				class data
    				{
    					class type
    					{
    						type[]=
    						{
    							"ARRAY"
    						};
    					};
    					class value
    					{
    						items=1;
    						class Item0
    						{
    							class data
    							{
    								class type
    								{
    									type[]=
    									{
    										"STRING"
    									};
    								};
    								value="Exile";
    							};
    						};
    					};
    				};
    			};
    		};
    		class Attribute1
    		{
    			property="ReviveRequiredTrait";
    			expression="false";
    			class Value
    			{
    				class data
    				{
    					class type
    					{
    						type[]=
    						{
    							"SCALAR"
    						};
    					};
    					value=0;
    				};
    			};
    		};
    		class Attribute2
    		{
    			property="ReviveMode";
    			expression="false";
    			class Value
    			{
    				class data
    				{
    					class type
    					{
    						type[]=
    						{
    							"SCALAR"
    						};
    					};
    					value=1;
    				};
    			};
    		};
    		class Attribute3
    		{
    			property="ReviveRequiredItemsFakConsumed";
    			expression="false";
    			class Value
    			{
    				class data
    				{
    					class type
    					{
    						type[]=
    						{
    							"BOOL"
    						};
    					};
    					value=1;
    				};
    			};
    		};
    		class Attribute4
    		{
    			property="SharedObjectives";
    			expression="if (isMultiplayer) then {[_value] spawn bis_fnc_sharedObjectives;};";
    			class Value
    			{
    				class data
    				{
    					class type
    					{
    						type[]=
    						{
    							"SCALAR"
    						};
    					};
    					value=0;
    				};
    			};
    		};
    		class Attribute5
    		{
    			property="ReviveMedicSpeedMultiplier";
    			expression="false";
    			class Value
    			{
    				class data
    				{
    					class type
    					{
    						type[]=
    						{
    							"SCALAR"
    						};
    					};
    					value=1;
    				};
    			};
    		};
    		class Attribute6
    		{
    			property="RespawnButton";
    			expression="true";
    			class Value
    			{
    				class data
    				{
    					class type
    					{
    						type[]=
    						{
    							"SCALAR"
    						};
    					};
    					value=1;
    				};
    			};
    		};
    		class Attribute7
    		{
    			property="ReviveForceRespawnDelay";
    			expression="false";
    			class Value
    			{
    				class data
    				{
    					class type
    					{
    						type[]=
    						{
    							"SCALAR"
    						};
    					};
    					value=5;
    				};
    			};
    		};
    		class Attribute8
    		{
    			property="ReviveBleedOutDelay";
    			expression="false";
    			class Value
    			{
    				class data
    				{
    					class type
    					{
    						type[]=
    						{
    							"SCALAR"
    						};
    					};
    					value=180;
    				};
    			};
    		};
    		class Attribute9
    		{
    			property="ReviveDelay";
    			expression="false";
    			class Value
    			{
    				class data
    				{
    					class type
    					{
    						type[]=
    						{
    							"SCALAR"
    						};
    					};
    					value=15.000001;
    				};
    			};
    		};
    		class Attribute10
    		{
    			property="ReviveUnconsciousStateMode";
    			expression="false";
    			class Value
    			{
    				class data
    				{
    					class type
    					{
    						type[]=
    						{
    							"SCALAR"
    						};
    					};
    					value=0;
    				};
    			};
    		};
    		class Attribute11
    		{
    			property="ReviveRequiredItems";
    			expression="false";
    			class Value
    			{
    				class data
    				{
    					class type
    					{
    						type[]=
    						{
    							"SCALAR"
    						};
    					};
    					value=1;
    				};
    			};
    		};
    		nAttributes=12;
    	};
    };

     

     

    Edited by Thrash

    Share this comment


    Link to comment
    Share on other sites

    Eichi hello i was wondering if i could get a few minutes of your time as i have a great idea for the next great arma 3 Game mode and i want to bring it to life Now as far as the amount that would go into making it actually wouldnt be much as its a sort of survival game thats basically this: you spawn into a country thats been invaded, Most of the Country Evacuated Except the Few residents who refuse to run. Now a refugee of the War you Can Either Survive or Parish. Two Great superpowers are at war over the land you are standing on. As a part of the resistance you must kill to find gear as you will search the old houses for minimal guns but the best way to gear up is to kill your enemies (Players) and (AI) Now there are small arms dealers on the black market that can get you the Bare essentials to build FOB's,Civilian vehicles, civilian weapons,survival gear, Basically anything you can obtain as a citizen but to get any military vehicles,Military weapons,Military Base parts (Sandbags,Bunkers,Pill boxes,Mortars,Stationary Rocket Launchers,Military Cargo containers) you have to Raid Military outposts not marked on the maps unless by players , or get close to a radio tower to intercept Missions on your radio but remember you will encounter both fighting forces who will in cases be fighting each other, and your missions will be holding facilities, Taking Down Convoys,Stealing Jets,helis, Search and Destroy ,ect you know Guerilla Warfair in the event you take a key miltary base you can hold it for income to use at the Black Market But Ai will attempt to take it back periodically.Now you can also build a rep with a favored faction by eliminating there enemies each enemy killed gets you 1 pt towards your alliance (each Faction has a colored pt 1 blue or red pt)  essentially you will end up NOT being Attacked by the Ally faction , to Ally with a Faction you personally (not your group needs to reach 3000 red or blue pts) you will Become allied with that faction Locking you temporarily as an ally and increasing pts from 1 pt per kill to 5 pts per kill and -100 pts  per Ally killed But Watch your progression Because  once you reach 10000 pts with your faction your pts Reset and  they look at you as a threat as you know too much and will remove your alliance leaving you once again in the sights of both factions. This Gives the Players the chance to ultimately Try Each Faction to  use different Vehicles by the Different Factions and getting access to Faction markets once factioned a ally must stay allied until reaching the 10000 pts . now this all sounds very Pve but players will be pitted against each other through the whole time playing as the ultimate goal is  build your base up and progress your group to obtain as much protection as possible and utilize the tools obtained to ultimately  Survive. I call this Game Mode  NATION . I believe the easy parts are creating the triggered missions that are triggered when gotten too close to the mission . also creating the factions point system. and exile already has markets but the faction ally system would be the most difficult but not too difficult as everything is already there for you and theres not alot of outside interference. I hope you would work with me to make this a reality as ive enjoyed your work already .

    Share this comment


    Link to comment
    Share on other sites

    @Skorpa Unfortunately, I will not have the time to work on another modification. I like the idea, but I fear the technical foundation is too weak to feature both NPC and player fights in multiplayer :( 

    Share this comment


    Link to comment
    Share on other sites



    Create an account or sign in to comment

    You need to be a member in order to leave a comment

    Create an account

    Sign up for a new account in our community. It's easy!


    Register a new account

    Sign in

    Already have an account? Sign in here.


    Sign In Now