├── .gitattributes ├── .gitignore ├── Dockerfile ├── README.md ├── README_Linux.md ├── acServerManager.bat ├── frontend ├── advanced.html ├── app │ ├── angular-toggle-switch.js │ ├── app.js │ ├── controllers.js │ └── services.js ├── cars.html ├── content │ ├── templates │ │ └── c7dcd596-2c3c-4598-b20d-97f7a34dae84 │ │ │ ├── config.json │ │ │ ├── entry_list.ini │ │ │ └── server_cfg.ini │ └── tracks │ │ ├── drift │ │ └── ui │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ ├── imola │ │ └── ui │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ ├── ks_barcelona │ │ └── ui │ │ │ ├── layout_gp │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ │ └── layout_moto │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ ├── ks_black_cat_county │ │ └── ui │ │ │ ├── layout_int │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ │ ├── layout_long │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ │ └── layout_short │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ ├── ks_brands_hatch │ │ └── ui │ │ │ ├── gp │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ │ └── indy │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ ├── ks_drag │ │ └── ui │ │ │ ├── drag1000 │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ │ ├── drag200 │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ │ ├── drag2000 │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ │ ├── drag400 │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ │ └── drag500 │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ ├── ks_highlands │ │ └── ui │ │ │ ├── layout_drift │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ │ ├── layout_int │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ │ ├── layout_long │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ │ └── layout_short │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ ├── ks_laguna_seca │ │ └── ui │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ ├── ks_monza66 │ │ └── ui │ │ │ ├── full │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ │ ├── junior │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ │ ├── people_stand.dds │ │ │ └── road │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ ├── ks_nordschleife │ │ └── ui │ │ │ ├── endurance │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ │ ├── endurance_cup │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ │ ├── nordschleife │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ │ └── touristenfahrten │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ ├── ks_nurburgring │ │ └── ui │ │ │ ├── layout_gp_a │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ │ ├── layout_gp_b │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ │ ├── layout_sprint_a │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ │ └── layout_sprint_b │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ ├── ks_red_bull_ring │ │ └── ui │ │ │ ├── layout_gp │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ │ └── layout_national │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ ├── ks_silverstone │ │ └── ui │ │ │ ├── gp │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ │ ├── international │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ │ └── national │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ ├── ks_silverstone1967 │ │ └── ui │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ ├── ks_vallelunga │ │ └── ui │ │ │ ├── classic_circuit │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ │ ├── club_circuit │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ │ └── extended_circuit │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ ├── ks_zandvoort │ │ └── ui │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ ├── magione │ │ └── ui │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ ├── monza │ │ └── ui │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ ├── mugello │ │ └── ui │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ ├── spa │ │ └── ui │ │ │ ├── preview.png │ │ │ └── ui_track.json │ │ └── trento-bondone │ │ └── ui │ │ ├── preview.png │ │ └── ui_track.json ├── css │ ├── angular-toggle-switch-bootstrap-3.css │ ├── animate.min.css │ ├── bootstrap.min.css │ ├── light-bootstrap-dashboard.css │ ├── pe-icon-7-stroke.css │ └── style.css ├── entrylist.html ├── fonts │ ├── Pe-icon-7-stroke.eot │ ├── Pe-icon-7-stroke.svg │ ├── Pe-icon-7-stroke.ttf │ ├── Pe-icon-7-stroke.woff │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ └── glyphicons-halflings-regular.woff2 ├── help.html ├── img │ ├── ajax-loader.gif │ ├── favicon.ico │ ├── sidebar-1.jpg │ ├── sidebar-2.jpg │ ├── sidebar-3.jpg │ ├── sidebar-4.jpg │ ├── sidebar-5.jpg │ └── sidebar-6.jpg ├── index.html ├── js │ ├── FileAPI.min.js │ ├── angular │ │ ├── angular-resource.min.js │ │ ├── angular.min.js │ │ ├── show-errors.min.js │ │ └── ui-bootstrap-tpls-2.5.0.min.js │ ├── bootstrap-checkbox-radio-switch.js │ ├── bootstrap-notify.js │ ├── bootstrap.min.js │ ├── jquery-1.12.4.min.js │ ├── light-bootstrap-dashboard.js │ ├── lodash.min.js │ ├── ng-file-upload-all.min.js │ ├── ng-file-upload-shim.min.js │ └── ng-file-upload.min.js ├── rules.html ├── sass │ ├── lbd │ │ ├── _alerts.scss │ │ ├── _buttons.scss │ │ ├── _cards.scss │ │ ├── _chartist.scss │ │ ├── _checkbox-radio-switch.scss │ │ ├── _dropdown.scss │ │ ├── _footers.scss │ │ ├── _inputs.scss │ │ ├── _misc.scss │ │ ├── _mixins.scss │ │ ├── _navbars.scss │ │ ├── _responsive.scss │ │ ├── _sidebar-and-main-panel.scss │ │ ├── _tables.scss │ │ ├── _typography.scss │ │ ├── _variables.scss │ │ └── mixins │ │ │ ├── _buttons.scss │ │ │ ├── _cards.scss │ │ │ ├── _chartist.scss │ │ │ ├── _icons.scss │ │ │ ├── _inputs.scss │ │ │ ├── _labels.scss │ │ │ ├── _morphing-buttons.scss │ │ │ ├── _navbars.scss │ │ │ ├── _social-buttons.scss │ │ │ ├── _tabs.scss │ │ │ ├── _transparency.scss │ │ │ └── _vendor-prefixes.scss │ └── light-bootstrap-dashboard.scss ├── server.html ├── templates.html └── tracks.html ├── generate-frontend-content.sh ├── logs └── readme.txt ├── package-lock.json ├── package.json ├── server.js ├── settings.js └── start.bat /.gitattributes: -------------------------------------------------------------------------------- 1 | # Set the default behavior, in case people don't have core.autocrlf set. 2 | * text=auto 3 | 4 | # Declare files that will always have CRLF line endings on checkout. 5 | *.html text eol=crlf 6 | *.js text eol=crlf 7 | *.css text eol=crlf 8 | 9 | # Denote all files that are truly binary and should not be modified. 10 | *.png binary 11 | *.jpg binary 12 | *.ico binary 13 | *.gif binary 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:xenial 2 | 3 | MAINTAINER John Walsh 4 | 5 | ENV DEBIAN_FRONTEND=noninteractive 6 | 7 | # Install System Updates & Packages 8 | RUN groupadd -r gsa && useradd -r -d /home/gsa -g gsa gsa 9 | RUN apt-get update \ 10 | && apt-get install -y curl \ 11 | && apt-get install -y lib32gcc1 \ 12 | && apt-get install -y python-software-properties \ 13 | && apt-get -y autoclean 14 | 15 | # Args & Env Vars 16 | ARG ACMANAGER_PORT=42555 17 | ENV ACMANAGER_PORT=${ACMANAGER_PORT} 18 | 19 | # Args & Meta 20 | ARG VCS_REF 21 | LABEL org.label-schema.vcs-ref=$VCS_REF \ 22 | org.label-schema.vcs-url="https://github.com/Pringlez/ACServerManager" 23 | 24 | # Install NodeJS, NPM & PM2 25 | RUN apt-get install python-software-properties 26 | RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - 27 | RUN apt-get install nodejs 28 | RUN npm install pm2 -g 29 | 30 | # Install ACManager Files & Dependencies 31 | RUN mkdir -p /home/gsa/server /home/gsa/acmanager 32 | WORKDIR /home/gsa/acmanager 33 | COPY . /home/gsa/acmanager 34 | RUN npm install 35 | RUN ./generate-frontend-content.sh 36 | RUN chown -R gsa:gsa /home/gsa 37 | RUN chmod -R 777 /home/gsa/acmanager 38 | 39 | # Volumes & Ports 40 | VOLUME /home/gsa/server 41 | EXPOSE ${ACMANAGER_PORT} 42 | 43 | # Starts ACServerManager 44 | USER gsa 45 | CMD ["pm2-runtime", "server.js"] 46 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ACServerManager 2 | ![ac-logo](https://www.assettocorsa.net/wp-content/themes/AssettoCorsa/00-Style-Dev/ico/mstile-150x150.png) 3 | 4 | Web based server manager for Assetto Corsa Server, that directly manipulating the ini files on the server as an alternative to the windows app and having to copy files to your server. 5 | 6 | Start and stop the server, and stracker directly from the application, meaning you can make changes to the server configuration and restart the server directly from your browser or mobile phone. 7 | 8 | Docker image available, see details below. 9 | 10 | ## ACServerManager on Windows 11 | This is the installation guide for a Windows machine, to review the Linux installation guide go [here](https://github.com/jo3stevens/ACServerManager/blob/master/README_Linux.md). 12 | 13 | ## Updates 14 | 01/05/2018 15 | * Dockerized! - Adding Docker build file to allow ACServerManager run in a container. 16 | 17 | 25/12/2017 18 | * Add support for uploading tracks (both single and multi-layout) and cars 19 | * Add support for removing existing tracks and cars 20 | * Bumping version of ACManager to 1.0.0! 21 | 22 | 21/12/2017 23 | * Update for 1.16 AC patch 24 | * Added local car / skins generation script for v1.16 AC original + DLC content 25 | 26 | 24/05/2017 27 | * Update for 1.14 AC patch 28 | * Fixed a number of saving issues 29 | * Added local car & track content option 30 | 31 | 27/01/2017: 32 | * Update to UI layout 33 | * Added restart feature for ACServer & sTracker server 34 | 35 | 17/10/2015: 36 | * Bug fix when switching between two tracks with multiple track configs 37 | * Added Max Ballast and UDP Plugin fields to Advanced page 38 | * Added new setting for contentPath allowing server and content folders to be seperated (this happens when using a manager package from the kunos tool). If this setting it left empty it will assume the content folder is inside the server folder 39 | 40 | 22/08/2015: 41 | * Finished adding all the new settings from 1.2 including tyres and weather 42 | 43 | ## Installation Details 44 | Note, if you've been using the new windows server manager that came with 1.2 then you may not need this step as when you package the server files it does the same thing. 45 | 46 | The application needs some additional files added to the server/content/tracks and server/content/cars folders to be able to choose track configurations and car skins. 47 | 48 | Copy acServerManager.bat to your root aessettocorsa folder and run it to copy the required folders into server/content/*. You'll then need to copy the content folder to your server. 49 | 50 | For tracks it will copy the ui folder which will contain sub folders when there are multiple track configurations. It will also copy the contents of these directories which contains additional track information which is displayed when choosing a track. 51 | 52 | For cars it will copy the skins/* folder structure but not the files; this is just to be able to choose the skin when setting up the entry list. 53 | 54 | ## Install Node.js 55 | To install Node.js, follow the installation guide on its home page [here](https://nodejs.org). 56 | 57 | I recommend using node version **v8.5.0** or newer, because of the upload content feature. Please see [comment](https://github.com/jo3stevens/ACServerManager/pull/36#issuecomment-393233010) for more information. 58 | 59 | ## Install ACServerManager 60 | Create a directory called 'acmanager', go into that directory and click [here](https://github.com/jo3stevens/ACServerManager/archive/master.zip) to download the latest version. Extract 61 | the contents of the zip file into the directory. 62 | 63 | ## ACServerManager Configuration 64 | To configure your manager's settings, open the 'settings.js' file. You'll see a number of variables, point the 'serverPath' 65 | to your Assetto Corsa Server directory. You can configure your username, password & port settings for ACServerManager, also 66 | if you use sTracker, point the 'sTrackerPath' variable to your installation. 67 | 68 | * serverPath: The path to your Assetto Corsa server directory 69 | * contentPath: The path to your Assetto Corsa content directory, use this if hosting on the same machine for gaming. Leave blank if hosting on Linux. 70 | * useLocalContent: If set to true, then ACServerManager will look for local car / track content 71 | * sTrackerPath: The path to your sTracker directory that contains stracker.exe (If you don't run stracker just leave this as an empty string ('') to disable it 72 | * username/password: Set these values if you want basic authentication on the application 73 | * port: The port that the application will listen on (Be sure to open up this port on your firewall) 74 | 75 | **Note:** The Assetto Corsa Server installation directory is set to '../server', change if necessary. 76 | 77 | ## Firewall 78 | If your machine has a firewall enabled (i.e) windows firewall, you'll need to open / allow the ACServerManager port defined in your settings.js file. 79 | 80 | ## Running ACServerManager 81 | You first need to make sure you have the necessary Node.js dependencies, run the following command in the command prompt in the same directory as the 'server.js' file: 82 | ``` 83 | npm install 84 | ``` 85 | To run ACServerManager, execute the 'start.bat' file. If you see no errors, ACServerManager should now be running. 86 | 87 | ## Docker Image 88 | You can use the docker image easily run the entire ACServerManager inside a container. The build currently grabs the latest version of steamcmd & installs all the necessary files, dependencies & executables on top of a ubuntu:xenial (16.04) image. 89 | 90 | [![](https://images.microbadger.com/badges/image/pringlez/acserver-manager.svg)](https://microbadger.com/images/pringlez/acserver-manager "Get your own image badge on microbadger.com") [![](https://images.microbadger.com/badges/version/pringlez/acserver-manager.svg)](https://microbadger.com/images/pringlez/acserver-manager "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/commit/pringlez/acserver-manager.svg)](https://microbadger.com/images/pringlez/acserver-manager "Get your own commit badge on microbadger.com") 91 | 92 | Pull the latest image: 93 | ``` 94 | docker pull pringlez/acserver-manager 95 | ``` 96 | To run the container: 97 | ``` 98 | sudo docker run -d --name acserver-manager --restart unless-stopped --net=host -e PUID= -e PGID= -e TZ= -v :/home/gsa/server pringlez/acserver-manager 99 | ``` 100 | 101 | Then just visit your server's address + ACServerManager port in your browser! 102 | 103 | **Note:** If you want to change the port number the application runs on, you can build your own local image using the example below & pass in the desired port number in the parameter. 104 | 105 | If you need to login to the running docker container: 106 | ``` 107 | docker exec -it acserver-manager /bin/bash 108 | ``` 109 | 110 | ### Parameters 111 | The parameters you need to include are the following: 112 | 113 | * --net=host - Shares host networking with container, required. 114 | * --restart unless-stopped - This will restart your container if it crashes 115 | * -v /home/gsa/server - Volume mount the ACServer installation directory (Required) 116 | * -e PGID for for GroupID - see below for explanation 117 | * -e PUID for for UserID - see below for explanation 118 | * -e TZ for timezone information, Europe/London 119 | 120 | ### User / Group Identifiers 121 | Sometimes when using data volumes (-v flags) permissions issues can arise between the host OS and the container. We avoid this issue by allowing you to specify the user PUID and group PGID. Ensure the data volume directory on the host is owned by the same user you specify and it will "just work" TM. 122 | 123 | In this instance PUID=1001 and PGID=1001. To find yours use id user as below: 124 | ``` 125 | $ id 126 | uid=1001(dockeruser) gid=1001(dockergroup) groups=1001(dockergroup) 127 | ``` 128 | 129 | #### Config Saving Issues 130 | If you have issues saving the configuration settings in ACServerManager application, while it's running in the docker container. Try 'chmod 777' your ACServer directory. This should allow the application inside the container access the mounted ACServer volume. 131 | 132 | ### Building an Image 133 | You can however build a local image if want to include any new changes to ACServerManager. 134 | 135 | You need to specify the ports you'll be using for the ACServerManager. The docker build will expose the ports you specify. 136 | 137 | Build a local docker image by: 138 | ``` 139 | docker build --build-arg ACMANAGER_PORT=42555 --build-arg VCS_REF=`git rev-parse --short HEAD` -t pringlez/acserver-manager . 140 | ``` 141 | 142 | ## Using ACServerManager 143 | * Browse to the application using your servers IP and the chosen port (or any DNS configured) 144 | * Click the 'Start' button under Assetto Corsa Server section 145 | * If using sTracker wait until the ACServer has started and then click 'Start' in the sTracker Server section 146 | 147 | The server should now be running. You'll be able to see any server output in the command window and it will be logged to a file in the 'ACServerManager/log' folder. 148 | 149 | You can change any of settings and it will be applied directly to server_cfg.ini and entry_list.ini on the server. After making a change just stop and start the server from the Server Status page to apply the changes to Assetto Corsa Server. 150 | 151 | **Note:** The server may fail to start in some cases if the Assetto Corsa Server cannot connect to the master server. Make sure you portforward / open 152 | the necessary ports for the server to function correctly. 153 | 154 | ## Screenshots 155 | ### Server Status 156 | ![Server Status](http://deltahosting.dyndns.org:8080/acmanager/screen-cap-1.jpg) 157 | 158 | ### Server Configuration 159 | ![Server Config](http://deltahosting.dyndns.org:8080/acmanager/screen-cap-2.jpg) 160 | 161 | ### Entry List 162 | ![Entry List](http://deltahosting.dyndns.org:8080/acmanager/screen-cap-3.jpg) 163 | 164 | ### Rules 165 | ![Rules](http://deltahosting.dyndns.org:8080/acmanager/screen-cap-4.jpg) 166 | 167 | ### Advanced 168 | ![Advanced](http://deltahosting.dyndns.org:8080/acmanager/screen-cap-5.jpg) 169 | 170 | ### Templates 171 | ![Templates](http://deltahosting.dyndns.org:8080/acmanager/screen-cap-6.jpg) 172 | 173 | ### Tracks 174 | ![Tracks](http://deltahosting.dyndns.org:8080/acmanager/screen-cap-7.jpg) 175 | 176 | ### Cars 177 | ![Cars](http://deltahosting.dyndns.org:8080/acmanager/screen-cap-8.jpg) 178 | 179 | ### Help 180 | ![Help](http://deltahosting.dyndns.org:8080/acmanager/screen-cap-9.jpg) 181 | -------------------------------------------------------------------------------- /README_Linux.md: -------------------------------------------------------------------------------- 1 | # ACServerManager 2 | ![ac-logo](https://www.assettocorsa.net/wp-content/themes/AssettoCorsa/00-Style-Dev/ico/mstile-150x150.png) 3 | 4 | Web based server manager for Assetto Corsa Server, that directly manipulating the ini files on the server as an alternative to the windows app and having to copy files to your server. 5 | 6 | Start and stop the server, and stracker directly from the application, meaning you can make changes to the server configuration and restart the server directly from your browser or mobile phone. 7 | 8 | Docker image available, see details below. 9 | 10 | ## ACServerManager on Linux 11 | This is the installation guide for a Linux machine, to review the Windows installation guide go [here](https://github.com/jo3stevens/ACServerManager/blob/master/README.md). 12 | 13 | ## Updates 14 | 01/05/2018 15 | * Dockerized! - Adding Docker build file to allow ACServerManager run in a container. 16 | 17 | 25/12/2017 18 | * Add support for uploading tracks (both single and multi-layout) and cars 19 | * Add support for removing existing tracks and cars 20 | * Bumping version of ACServerManager to 1.0.0! 21 | 22 | 21/12/2017 23 | * Update for 1.16 AC patch 24 | * Added local car / skins generation script for v1.16 AC original + DLC content 25 | 26 | 24/05/2017 27 | * Update for 1.14 AC patch 28 | * Fixed a number of saving issues 29 | * Added local car & track content option 30 | 31 | 27/01/2017: 32 | * Update to UI layout 33 | * Added restart feature for ACServer & sTracker server 34 | 35 | 17/10/2015: 36 | * Bug fix when switching between two tracks with multiple track configs 37 | * Added Max Ballast and UDP Plugin fields to Advanced page 38 | * Added new setting for contentPath allowing server and content folders to be seperated (this happens when using a manager package from the kunos tool). If this setting it left empty it will assume the content folder is inside the server folder 39 | 40 | 22/08/2015: 41 | * Finished adding all the new settings from 1.2 including tyres and weather 42 | 43 | ## Installation Details 44 | First you'll need to install Node.js on your machine. It's best to use an application 45 | like [NVM](https://github.com/creationix/nvm) to manage the installation of Node.js on Linux based machines. 46 | After installing Node.js, install [PM2](https://github.com/Unitech/pm2) when using this 47 | version of Manager, it's basically Node.js application management tool with tons of features 48 | for production use. PM2 will make sure your web application stays online and, auto restarts if it crashes. 49 | 50 | ## Install NVM 51 | To install NVM, follow the installation guide on its GitHub page [here](https://github.com/creationix/nvm). Please install NVM on the same account you run your Assetto Corsa Server. 52 | 53 | ## Install Node.js 54 | Using NVM, run the following command to install the latest version: 55 | ``` 56 | nvm install node 57 | ``` 58 | If you would like to install a specific version using NVM then run something like this: 59 | ``` 60 | nvm install 8.5.0 61 | ``` 62 | I recommend using node version **v8.5.0** or newer, because of the upload content feature. Please see [comment](https://github.com/jo3stevens/ACServerManager/pull/36#issuecomment-393233010) for more information. 63 | 64 | ## Install PM2 65 | To install PM2, follow the installation guide on its GitHub page [here](https://github.com/Unitech/pm2). Please install PM2 on the same account you run your Assetto Corsa Server. 66 | 67 | ## Install ACServerManager 68 | Create a directory called 'acmanager', cd into that directory and run this command to download the latest version: 69 | ``` 70 | wget https://github.com/jo3stevens/ACServerManager/archive/master.zip 71 | ``` 72 | Unzip the file & clean up, by running: 73 | ``` 74 | unzip master.zip; mv ACServerManager-master/* .; rm -R ACServerManager-master; rm master.zip 75 | ``` 76 | You'll need to first configure your manager's settings before you can run the application. 77 | ## ACServerManager Configuration 78 | To configure your manager's settings, open the 'settings.js' file. You'll see a number of variables, point the 'serverPath' 79 | to your Assetto Corsa Server directory. You can configure your username, password & port settings for ACServerManager, also 80 | if you use sTracker, point the 'sTrackerPath' variable to your installation. 81 | 82 | * serverPath: The path to your Assetto Corsa server directory 83 | * contentPath: The path to your Assetto Corsa content directory, use this if hosting on the same machine for gaming. Leave blank if hosting on Linux. 84 | * useLocalContent: If set to true, then ACServerManager will look for local car / track content 85 | * sTrackerPath: The path to your sTracker directory that contains stracker.exe (If you don't run stracker just leave this as an empty string ('') to disable it 86 | * username/password: Set these values if you want basic authentication on the application 87 | * port: The port that the application will listen on (Be sure to open up this port on your firewall) 88 | 89 | **Note:** The Assetto Corsa Server installation directory is set to '../server', change if necessary. 90 | 91 | ## Generating Local Content 92 | On a remote Linux host machine, use the included script to generate empty folders of Assetto Corsa content, the ACServerManager web UI will use these folders. 93 | 94 | Generate folders run: 95 | ``` 96 | ./generate-frontend-content.sh 97 | ``` 98 | These folders are not included since git repositories do not support empty directories. 99 | 100 | ## Firewall 101 | If your machine has a firewall enabled (i.e) iptables, you'll need to open / allow the ACServerManager port defined in your settings.js file. 102 | 103 | ## Running ACServerManager 104 | You first need to make sure you have the necessary Node.js dependencies, run: 105 | ``` 106 | npm install 107 | ``` 108 | To run ACServerManager using PM2 run the following command: 109 | ``` 110 | pm2 start server.js 111 | ``` 112 | To monitor applications running with PM2 run: 113 | ``` 114 | pm2 list 115 | ``` 116 | There many useful commands to manage applications using PM2, reference their GitHub page. 117 | 118 | ## Docker Image 119 | You can use the docker image easily run the entire ACServerManager inside a container. The build currently grabs the latest version of steamcmd & installs all the necessary files, dependencies & executables on top of a ubuntu:xenial (16.04) image. 120 | 121 | [![](https://images.microbadger.com/badges/image/pringlez/acserver-manager.svg)](https://microbadger.com/images/pringlez/acserver-manager "Get your own image badge on microbadger.com") [![](https://images.microbadger.com/badges/version/pringlez/acserver-manager.svg)](https://microbadger.com/images/pringlez/acserver-manager "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/commit/pringlez/acserver-manager.svg)](https://microbadger.com/images/pringlez/acserver-manager "Get your own commit badge on microbadger.com") 122 | 123 | Pull the latest image: 124 | ``` 125 | docker pull pringlez/acserver-manager 126 | ``` 127 | To run the container: 128 | ``` 129 | sudo docker run -d --name acserver-manager --restart unless-stopped --net=host -e PUID= -e PGID= -e TZ= -v :/home/gsa/server pringlez/acserver-manager 130 | ``` 131 | 132 | Then just visit your server's address + ACServerManager port in your browser! 133 | 134 | **Note:** If you want to change the port number the application runs on, you can build your own local image using the example below & pass in the desired port number in the parameter. 135 | 136 | If you need to login to the running docker container: 137 | ``` 138 | docker exec -it acserver-manager /bin/bash 139 | ``` 140 | 141 | ### Parameters 142 | The parameters you need to include are the following: 143 | 144 | * --net=host - Shares host networking with container, required. 145 | * --restart unless-stopped - This will restart your container if it crashes 146 | * -v /home/gsa/server - Volume mount the ACServer installation directory (Required) 147 | * -e PGID for for GroupID - see below for explanation 148 | * -e PUID for for UserID - see below for explanation 149 | * -e TZ for timezone information, Europe/London 150 | 151 | ### User / Group Identifiers 152 | Sometimes when using data volumes (-v flags) permissions issues can arise between the host OS and the container. We avoid this issue by allowing you to specify the user PUID and group PGID. Ensure the data volume directory on the host is owned by the same user you specify and it will "just work" TM. 153 | 154 | In this instance PUID=1001 and PGID=1001. To find yours use id user as below: 155 | ``` 156 | $ id 157 | uid=1001(dockeruser) gid=1001(dockergroup) groups=1001(dockergroup) 158 | ``` 159 | 160 | #### Config Saving Issues 161 | If you have issues saving the configuration settings in ACServerManager application, while it's running in the docker container. Try 'chmod 777' your ACServer directory. This should allow the application inside the container access the mounted ACServer volume. 162 | 163 | ### Building an Image 164 | You can however build a local image if want to include any new changes to ACServerManager. 165 | 166 | You need to specify the ports you'll be using for the ACServerManager. The docker build will expose the ports you specify. 167 | 168 | Build a local docker image by: 169 | ``` 170 | docker build --build-arg ACMANAGER_PORT=42555 --build-arg VCS_REF=`git rev-parse --short HEAD` -t pringlez/acserver-manager . 171 | ``` 172 | 173 | ## Using ACServerManager 174 | * Browse to the application using your servers IP and the chosen port (or any DNS configured) 175 | * Click the 'Start' button under Assetto Corsa Server section 176 | * If using sTracker wait until the ACServer has started and then click 'Start' in the sTracker Server section 177 | 178 | The server should now be running. You'll be able to see any server output in the command window and it will be logged to a file in the 'ACServerManager/log' folder. 179 | 180 | You can change any of settings and it will be applied directly to server_cfg.ini and entry_list.ini on the server. After making a change just stop and start the server from the Server Status page to apply the changes to Assetto Corsa Server. 181 | 182 | **Note:** The server may fail to start in some cases if the Assetto Corsa Server cannot connect to the master server. Make sure you portforward / open 183 | the necessary ports for the server to function correctly. 184 | 185 | ## Screenshots 186 | ### Server Status 187 | ![Server Status](http://deltahosting.dyndns.org:8080/acmanager/screen-cap-1.jpg) 188 | 189 | ### Server Configuration 190 | ![Server Config](http://deltahosting.dyndns.org:8080/acmanager/screen-cap-2.jpg) 191 | 192 | ### Entry List 193 | ![Entry List](http://deltahosting.dyndns.org:8080/acmanager/screen-cap-3.jpg) 194 | 195 | ### Rules 196 | ![Rules](http://deltahosting.dyndns.org:8080/acmanager/screen-cap-4.jpg) 197 | 198 | ### Advanced 199 | ![Advanced](http://deltahosting.dyndns.org:8080/acmanager/screen-cap-5.jpg) 200 | 201 | ### Templates 202 | ![Templates](http://deltahosting.dyndns.org:8080/acmanager/screen-cap-6.jpg) 203 | 204 | ### Tracks 205 | ![Tracks](http://deltahosting.dyndns.org:8080/acmanager/screen-cap-7.jpg) 206 | 207 | ### Cars 208 | ![Cars](http://deltahosting.dyndns.org:8080/acmanager/screen-cap-8.jpg) 209 | 210 | ### Help 211 | ![Help](http://deltahosting.dyndns.org:8080/acmanager/screen-cap-9.jpg) 212 | -------------------------------------------------------------------------------- /acServerManager.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | cls 3 | cd content/tracks 4 | FOR /D %%G in (*) DO ( 5 | echo Removing existing ui folder for %%G 6 | rmdir "%~dp0server\content\tracks\%%G\ui\" /s /q 7 | echo Creating ui folder for %%G 8 | mkdir "%~dp0server\content\tracks\%%G\ui" 9 | echo Copying ui folder for %%G 10 | xcopy /s /e /y %%G\ui "%~dp0server\content\tracks\%%G\ui" 11 | ) 12 | cd ../cars 13 | FOR /D %%G in (*) DO ( 14 | echo Removing skins folder for %%G 15 | rmdir "%~dp0server\content\cars\%%G\skins\" /s /q 16 | echo Creating skins folder for %%G 17 | mkdir "%~dp0server\content\cars\%%G\skins" 18 | echo Copying skins directory structure for %%G 19 | xcopy /t /e /y %%G\skins "%~dp0server\content\cars\%%G\skins" 20 | ) -------------------------------------------------------------------------------- /frontend/advanced.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Assetto Corsa Server Manager 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 27 | 28 | 29 | 30 | 31 |
32 | 97 | 98 |
99 | 115 | 116 |
117 |
118 |
119 | {{alert.msg}} 120 |
121 | 122 |
123 | Advanced Rules 124 |
125 |
126 |
127 | 128 | 129 |
130 |
131 | 132 |
133 |
134 | 135 | 136 |
137 |
138 | 139 |
140 |
141 | 142 | 143 |
144 |
145 |
146 | 147 |
148 |
149 |
150 | 151 | 156 |
157 |
158 | 159 |
160 |
161 | 162 | 163 |
164 |
165 | 166 |
167 |
168 | 169 | 170 |
171 |
172 |
173 | 174 |
175 |
176 |
177 | 178 | 179 |
180 |
181 | 182 |
183 |
184 | 185 | 186 |
187 |
188 |
189 | 190 |
191 | Plugin 192 |
193 |
194 |
195 | 196 | 197 |
198 |
199 | 200 |
201 |
202 | 203 | 204 |
205 |
206 | 207 |
208 |
209 | 210 | 211 |
212 |
213 |
214 |
215 | 216 |
217 |
218 | 219 |
220 |
221 |
222 |
223 |
224 | 225 | 251 |
252 |
253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | -------------------------------------------------------------------------------- /frontend/app/angular-toggle-switch.js: -------------------------------------------------------------------------------- 1 | angular.module('toggle-switch', ['ng']).directive('toggleSwitch', ['$compile', function($compile) { 2 | return { 3 | restrict: 'EA', 4 | replace: true, 5 | require:'ngModel', 6 | scope: { 7 | isDisabled: '=', 8 | onLabel: '@', 9 | offLabel: '@', 10 | knobLabel: '@', 11 | html: '=', 12 | onChange: '&' 13 | }, 14 | template: 15 | '
' + 16 | '
' + 17 | '' + 18 | '' + 19 | '' + 20 | '
' + 21 | '
', 22 | compile: function(element, attrs) { 23 | if (angular.isUndefined(attrs.onLabel)) { 24 | attrs.onLabel = 'Yes'; 25 | } 26 | if (angular.isUndefined(attrs.offLabel)) { 27 | attrs.offLabel = 'No'; 28 | } 29 | if (angular.isUndefined(attrs.knobLabel)) { 30 | attrs.knobLabel = '\u00a0'; 31 | } 32 | if (angular.isUndefined(attrs.isDisabled)) { 33 | attrs.isDisabled = false; 34 | } 35 | if (angular.isUndefined(attrs.html)) { 36 | attrs.html = false; 37 | } 38 | if (angular.isUndefined(attrs.tabindex)) { 39 | attrs.tabindex = 0; 40 | } 41 | 42 | return function postLink(scope, iElement, iAttrs, ngModel) { 43 | iElement.attr('tabindex', attrs.tabindex); 44 | 45 | scope.toggle = function toggle() { 46 | if (!scope.isDisabled) { 47 | scope.model = !scope.model; 48 | ngModel.$setViewValue(scope.model); 49 | scope.onChange(); 50 | } 51 | }; 52 | 53 | var spaceCharCode = 32; 54 | scope.onKeyPress = function onKeyPress($event) { 55 | if ($event.charCode == spaceCharCode && !$event.altKey && !$event.ctrlKey && !$event.metaKey) { 56 | scope.toggle(); 57 | $event.preventDefault(); 58 | } 59 | }; 60 | 61 | ngModel.$formatters.push(function(modelValue) { 62 | return modelValue; 63 | }); 64 | 65 | ngModel.$parsers.push(function(viewValue) { 66 | return viewValue; 67 | }); 68 | 69 | ngModel.$viewChangeListeners.push(function() { 70 | scope.$eval(attrs.ngChange); 71 | }); 72 | 73 | ngModel.$render = function() { 74 | scope.model = ngModel.$viewValue; 75 | }; 76 | 77 | var bindSpan = function(span, html) { 78 | span = angular.element(span); 79 | var bindAttributeName = (html === true) ? 'ng-bind-html' : 'ng-bind'; 80 | 81 | // remove old ng-bind attributes 82 | span.removeAttr('ng-bind-html'); 83 | span.removeAttr('ng-bind'); 84 | 85 | if (angular.element(span).hasClass("switch-left")) 86 | span.attr(bindAttributeName, 'onLabel'); 87 | if (span.hasClass("knob")) 88 | span.attr(bindAttributeName, 'knobLabel'); 89 | if (span.hasClass("switch-right")) 90 | span.attr(bindAttributeName, 'offLabel'); 91 | 92 | $compile(span)(scope, function(cloned, scope) { 93 | span.replaceWith(cloned); 94 | }); 95 | }; 96 | 97 | // add ng-bind attribute to each span element. 98 | // NOTE: you need angular-sanitize to use ng-bind-html 99 | var bindSwitch = function(iElement, html) { 100 | angular.forEach(iElement[0].children[0].children, function(span, index) { 101 | bindSpan(span, html); 102 | }); 103 | }; 104 | 105 | scope.$watch('html', function(newValue) { 106 | bindSwitch(iElement, newValue); 107 | }); 108 | }; 109 | } 110 | }; 111 | }]); 112 | -------------------------------------------------------------------------------- /frontend/app/app.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular 4 | .module('acServerManager', ['acServerManager.services', 'ui.bootstrap', 'ui.bootstrap.showErrors', 'toggle-switch']) 5 | // Use lodash in controllers 6 | .constant('_', window._) 7 | .directive('stringToNumber', function() { 8 | return { 9 | require: 'ngModel', 10 | link: function(scope, element, attrs, ngModel) { 11 | ngModel.$parsers.push(function(value) { 12 | return '' + value; 13 | }); 14 | ngModel.$formatters.push(function(value) { 15 | return parseFloat(value, 10); 16 | }); 17 | } 18 | }; 19 | }); 20 | -------------------------------------------------------------------------------- /frontend/content/templates/c7dcd596-2c3c-4598-b20d-97f7a34dae84/config.json: -------------------------------------------------------------------------------- 1 | {"name":"Default Configuration","description":"Assetto Corsa Dedicated Server Default Configuration"} 2 | -------------------------------------------------------------------------------- /frontend/content/templates/c7dcd596-2c3c-4598-b20d-97f7a34dae84/entry_list.ini: -------------------------------------------------------------------------------- 1 | [CAR_0] 2 | MODEL=bmw_m3_e30 3 | SKIN=alpine_white_I 4 | SPECTATOR_MODE=0 5 | DRIVERNAME= 6 | TEAM= 7 | GUID= 8 | BALLAST= 9 | 10 | [CAR_1] 11 | MODEL=bmw_m3_e30 12 | SKIN=Brilliant_red 13 | SPECTATOR_MODE=0 14 | DRIVERNAME= 15 | TEAM= 16 | GUID= 17 | BALLAST=0 18 | 19 | [CAR_2] 20 | MODEL=bmw_m3_e30 21 | SKIN=Cinnabar_red 22 | SPECTATOR_MODE=0 23 | DRIVERNAME= 24 | TEAM= 25 | GUID= 26 | BALLAST=0 27 | 28 | [CAR_3] 29 | MODEL=bmw_m3_e30 30 | SKIN=0_Diamond_Black_metallic 31 | SPECTATOR_MODE=0 32 | DRIVERNAME= 33 | TEAM= 34 | GUID= 35 | BALLAST=0 36 | 37 | [CAR_4] 38 | MODEL=bmw_m3_e30 39 | SKIN=Henna_Red 40 | SPECTATOR_MODE=0 41 | DRIVERNAME= 42 | TEAM= 43 | GUID= 44 | BALLAST=0 45 | 46 | [CAR_5] 47 | MODEL=bmw_m3_e30 48 | SKIN=Jet_Black 49 | SPECTATOR_MODE=0 50 | DRIVERNAME= 51 | TEAM= 52 | GUID= 53 | BALLAST=0 54 | 55 | [CAR_6] 56 | MODEL=bmw_m3_e30 57 | SKIN=Macau_Blue_Metallic 58 | SPECTATOR_MODE=0 59 | DRIVERNAME= 60 | TEAM= 61 | GUID= 62 | BALLAST=0 63 | 64 | [CAR_7] 65 | MODEL=bmw_m3_e30 66 | SKIN=Misano_red 67 | SPECTATOR_MODE=0 68 | DRIVERNAME= 69 | TEAM= 70 | GUID= 71 | BALLAST=0 72 | 73 | [CAR_8] 74 | MODEL=bmw_m3_e30 75 | SKIN=Nogaro_Silver_metallic 76 | SPECTATOR_MODE=0 77 | DRIVERNAME= 78 | TEAM= 79 | GUID= 80 | BALLAST=0 81 | 82 | [CAR_9] 83 | MODEL=bmw_m3_e30 84 | SKIN=Salmon_Silver_metallic 85 | SPECTATOR_MODE=0 86 | DRIVERNAME= 87 | TEAM= 88 | GUID= 89 | BALLAST=0 90 | 91 | [CAR_10] 92 | MODEL=bmw_m3_e30 93 | SKIN=Sterling_Silver_metallic 94 | SPECTATOR_MODE=0 95 | DRIVERNAME= 96 | TEAM= 97 | GUID= 98 | BALLAST=0 99 | 100 | [CAR_11] 101 | MODEL=bmw_m3_e30 102 | SKIN=alpine_white_I 103 | SPECTATOR_MODE=0 104 | DRIVERNAME= 105 | TEAM= 106 | GUID= 107 | BALLAST=0 108 | 109 | [CAR_12] 110 | MODEL=bmw_m3_e30 111 | SKIN=Brilliant_red 112 | SPECTATOR_MODE=0 113 | DRIVERNAME= 114 | TEAM= 115 | GUID= 116 | BALLAST=0 117 | 118 | [CAR_13] 119 | MODEL=bmw_m3_e30 120 | SKIN=Cinnabar_red 121 | SPECTATOR_MODE=0 122 | DRIVERNAME= 123 | TEAM= 124 | GUID= 125 | BALLAST=0 126 | 127 | [CAR_14] 128 | MODEL=bmw_m3_e30 129 | SKIN=0_Diamond_Black_metallic 130 | SPECTATOR_MODE=0 131 | DRIVERNAME= 132 | TEAM= 133 | GUID= 134 | BALLAST=0 135 | 136 | [CAR_15] 137 | MODEL=bmw_m3_e30 138 | SKIN=Henna_Red 139 | SPECTATOR_MODE=0 140 | DRIVERNAME= 141 | TEAM= 142 | GUID= 143 | BALLAST=0 144 | 145 | [CAR_16] 146 | MODEL=bmw_m3_e30 147 | SKIN=Jet_Black 148 | SPECTATOR_MODE=0 149 | DRIVERNAME= 150 | TEAM= 151 | GUID= 152 | BALLAST=0 153 | 154 | [CAR_17] 155 | MODEL=bmw_m3_e30 156 | SKIN=Macau_Blue_Metallic 157 | SPECTATOR_MODE=0 158 | DRIVERNAME= 159 | TEAM= 160 | GUID= 161 | BALLAST=0 162 | 163 | [CAR_18] 164 | MODEL=bmw_m3_e30 165 | SKIN=Misano_red 166 | SPECTATOR_MODE=0 167 | DRIVERNAME= 168 | TEAM= 169 | GUID= 170 | BALLAST=0 171 | 172 | [CAR_19] 173 | MODEL=bmw_m3_e30 174 | SKIN=Nogaro_Silver_metallic 175 | SPECTATOR_MODE=0 176 | DRIVERNAME= 177 | TEAM= 178 | GUID= 179 | BALLAST=0 180 | 181 | [CAR_20] 182 | MODEL=bmw_m3_e30 183 | SKIN=Salmon_Silver_metallic 184 | SPECTATOR_MODE=0 185 | DRIVERNAME= 186 | TEAM= 187 | GUID= 188 | BALLAST=0 189 | 190 | [CAR_21] 191 | MODEL=bmw_m3_e30 192 | SKIN=Sterling_Silver_metallic 193 | SPECTATOR_MODE=0 194 | DRIVERNAME= 195 | TEAM= 196 | GUID= 197 | BALLAST=0 198 | -------------------------------------------------------------------------------- /frontend/content/templates/c7dcd596-2c3c-4598-b20d-97f7a34dae84/server_cfg.ini: -------------------------------------------------------------------------------- 1 | [SERVER] 2 | NAME=AC_Server 3 | CARS=bmw_m3_e30 4 | CONFIG_TRACK= 5 | TRACK=magione 6 | SUN_ANGLE=48 7 | PASSWORD= 8 | ADMIN_PASSWORD=mypassword 9 | UDP_PORT=9600 10 | TCP_PORT=9600 11 | HTTP_PORT=8081 12 | PICKUP_MODE_ENABLED=1 13 | LOOP_MODE=1 14 | SLEEP_TIME=1 15 | CLIENT_SEND_INTERVAL_HZ=18 16 | SEND_BUFFER_SIZE=0 17 | RECV_BUFFER_SIZE=0 18 | RACE_OVER_TIME=180 19 | KICK_QUORUM=85 20 | VOTING_QUORUM=80 21 | VOTE_DURATION=20 22 | BLACKLIST_MODE=1 23 | FUEL_RATE=100 24 | DAMAGE_MULTIPLIER=100 25 | TYRE_WEAR_RATE=100 26 | ALLOWED_TYRES_OUT=2 27 | ABS_ALLOWED=1 28 | TC_ALLOWED=1 29 | STABILITY_ALLOWED=0 30 | AUTOCLUTCH_ALLOWED=0 31 | TYRE_BLANKETS_ALLOWED=0 32 | FORCE_VIRTUAL_MIRROR=1 33 | REGISTER_TO_LOBBY=1 34 | MAX_CLIENTS=18 35 | UDP_PLUGIN_LOCAL_PORT=0 36 | UDP_PLUGIN_ADDRESS= 37 | AUTH_PLUGIN_ADDRESS= 38 | LEGAL_TYRES=SV 39 | 40 | [PRACTICE] 41 | NAME=Practice 42 | TIME=10 43 | IS_OPEN=1 44 | 45 | [QUALIFY] 46 | NAME=Qualify 47 | TIME=10 48 | IS_OPEN=1 49 | 50 | [RACE] 51 | NAME=Race 52 | LAPS=5 53 | WAIT_TIME=60 54 | IS_OPEN=1 55 | 56 | [DYNAMIC_TRACK] 57 | SESSION_START=89 58 | RANDOMNESS=3 59 | SESSION_TRANSFER=80 60 | LAP_GAIN=50 61 | 62 | [WEATHER_0] 63 | GRAPHICS=3_clear 64 | BASE_TEMPERATURE_AMBIENT=18 65 | BASE_TEMPERATURE_ROAD=6 66 | VARIATION_AMBIENT=1 67 | VARIATION_ROAD=1 68 | 69 | [WEATHER_1] 70 | GRAPHICS=7_heavy_clouds 71 | BASE_TEMPERATURE_AMBIENT=15 72 | BASE_TEMPERATURE_ROAD=-1 73 | VARIATION_AMBIENT=1 74 | VARIATION_ROAD=1 75 | -------------------------------------------------------------------------------- /frontend/content/tracks/drift/ui/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/drift/ui/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/drift/ui/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Drift", 3 | "description": "Drift Track", 4 | "tags" : ["#drift","drift","test track","circuit","original","Japan"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Japan", 7 | "city": "Tokyo", 8 | "length": "905", 9 | "width": "15", 10 | "pitboxes": "18", 11 | "run": "DRIFT" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/imola/ui/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/imola/ui/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/imola/ui/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Imola", 3 | "description": "Autodromo Enzo e Dino Ferrari", 4 | "tags" : ["circuit","original","Italy"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Italy", 7 | "city": "Imola", 8 | "length": "4909", 9 | "width": "15", 10 | "pitboxes": "24", 11 | "run": "anti-clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_barcelona/ui/layout_gp/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_barcelona/ui/layout_gp/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_barcelona/ui/layout_gp/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Barcelona - GP", 3 | "description": "Circuit de Barcelona", 4 | "tags" : ["circuit","original","drift","Spain"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Spain", 7 | "city": "Montmelo'", 8 | "length": "4655", 9 | "width": "11", 10 | "pitboxes": "24", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_barcelona/ui/layout_moto/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_barcelona/ui/layout_moto/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_barcelona/ui/layout_moto/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Barcelona - Moto", 3 | "description": "Circuit de Barcelona", 4 | "tags" : ["circuit","original","drift","Spain"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Spain", 7 | "city": "Montmelo'", 8 | "length": "4727", 9 | "width": "11", 10 | "pitboxes": "24", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_black_cat_county/ui/layout_int/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_black_cat_county/ui/layout_int/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_black_cat_county/ui/layout_int/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Black Cat County", 3 | "description": "Fictional U.S.A. Road", 4 | "tags" : ["circuit","drift","original","usa"], 5 | "geotags": ["lat", "lon"], 6 | "country": "U.S.A.", 7 | "city": "Los Angeles", 8 | "length": "6478", 9 | "width": "15", 10 | "pitboxes": "24", 11 | "run": "anti-clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_black_cat_county/ui/layout_long/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_black_cat_county/ui/layout_long/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_black_cat_county/ui/layout_long/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Black Cat County - Long", 3 | "description": "Fictional U.S.A. Road", 4 | "tags" : ["circuit","drift","original","usa"], 5 | "geotags": ["lat", "lon"], 6 | "country": "U.S.A.", 7 | "city": "Los Angeles", 8 | "length": "11244", 9 | "width": "15", 10 | "pitboxes": "24", 11 | "run": "anti-clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_black_cat_county/ui/layout_short/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_black_cat_county/ui/layout_short/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_black_cat_county/ui/layout_short/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Black Cat County - Short", 3 | "description": "Fictional U.S.A. Road", 4 | "tags" : ["circuit","drift","original","usa"], 5 | "geotags": ["lat", "lon"], 6 | "country": "U.S.A.", 7 | "city": "Los Angeles", 8 | "length": "6542", 9 | "width": "15", 10 | "pitboxes": "24", 11 | "run": "anti-clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_brands_hatch/ui/gp/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_brands_hatch/ui/gp/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_brands_hatch/ui/gp/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Brands Hatch - GP", 3 | "description": "Brands Hatch Circuit", 4 | "tags" : ["circuit","original","drift","Great Britain"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Great Britain", 7 | "city": "Fawkham", 8 | "length": "3908", 9 | "width": "11", 10 | "pitboxes": "24", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_brands_hatch/ui/indy/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_brands_hatch/ui/indy/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_brands_hatch/ui/indy/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Brands Hatch - Indy", 3 | "description": "Brands Hatch Circuit", 4 | "tags" : ["circuit","original","drift","Great Britain"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Great Britain", 7 | "city": "Fawkham", 8 | "length": "1929", 9 | "width": "11", 10 | "pitboxes": "24", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_drag/ui/drag1000/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_drag/ui/drag1000/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_drag/ui/drag1000/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Drag 1000m", 3 | "description": "fast&furious", 4 | "tags" : ["drag","original"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Italy", 7 | "city": "Imola", 8 | "length": "1000", 9 | "width": "15", 10 | "pitboxes": "2", 11 | "run": "dragstrip" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_drag/ui/drag200/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_drag/ui/drag200/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_drag/ui/drag200/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Drag 200m", 3 | "description": "fast&furious", 4 | "tags" : ["drag","original"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Italy", 7 | "city": "Imola", 8 | "length": "200", 9 | "width": "15", 10 | "pitboxes": "2", 11 | "run": "dragstrip" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_drag/ui/drag2000/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_drag/ui/drag2000/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_drag/ui/drag2000/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Drag 2000m", 3 | "description": "fast&furious", 4 | "tags" : ["drag","original"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Italy", 7 | "city": "Imola", 8 | "length": "2000", 9 | "width": "15", 10 | "pitboxes": "2", 11 | "run": "dragstrip" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_drag/ui/drag400/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_drag/ui/drag400/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_drag/ui/drag400/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Drag 400m", 3 | "description": "fast&furious", 4 | "tags" : ["drag","original"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Italy", 7 | "city": "Imola", 8 | "length": "400", 9 | "width": "15", 10 | "pitboxes": "2", 11 | "run": "dragstrip" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_drag/ui/drag500/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_drag/ui/drag500/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_drag/ui/drag500/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Drag 500m", 3 | "description": "fast&furious", 4 | "tags" : ["drag","original"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Italy", 7 | "city": "Imola", 8 | "length": "500", 9 | "width": "15", 10 | "pitboxes": "2", 11 | "run": "dragstrip" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_highlands/ui/layout_drift/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_highlands/ui/layout_drift/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_highlands/ui/layout_drift/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Highlands Drift", 3 | "description": "Highlands drift layout", 4 | "tags" : ["circuit","original","drift","Scotland"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Scotland", 7 | "city": "Fantasy", 8 | "length": "5167", 9 | "width": "10", 10 | "pitboxes": "24", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_highlands/ui/layout_int/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_highlands/ui/layout_int/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_highlands/ui/layout_int/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Highlands", 3 | "description": "Highlands original layout", 4 | "tags" : ["circuit","original","Scotland"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Scotland", 7 | "city": "Fantasy", 8 | "length": "8152", 9 | "width": "10", 10 | "pitboxes": "24", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_highlands/ui/layout_long/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_highlands/ui/layout_long/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_highlands/ui/layout_long/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Highlands Long", 3 | "description": "Highlands long layout", 4 | "tags" : ["circuit","original","Scotland"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Scotland", 7 | "city": "Fantasy", 8 | "length": "12191", 9 | "width": "10", 10 | "pitboxes": "24", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_highlands/ui/layout_short/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_highlands/ui/layout_short/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_highlands/ui/layout_short/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Highlands Short", 3 | "description": "Highlands short layout", 4 | "tags" : ["circuit","original","drift","Scotland"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Scotland", 7 | "city": "Fantasy", 8 | "length": "1714", 9 | "width": "10", 10 | "pitboxes": "24", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_laguna_seca/ui/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_laguna_seca/ui/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_laguna_seca/ui/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Laguna Seca", 3 | "description": "Mazda Raceway Laguna Seca", 4 | "tags" : ["circuit","original","drift","Usa"], 5 | "geotags": ["lat", "lon"], 6 | "country": "California, Usa", 7 | "city": "Monterey", 8 | "length": "3.602", 9 | "width": "11", 10 | "pitboxes": "24", 11 | "run": "anti-clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_monza66/ui/full/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_monza66/ui/full/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_monza66/ui/full/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Monza 1966 - Full Course", 3 | "description": "Autodromo di Monza", 4 | "tags" : ["circuit","original","historic","Italy"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Italy", 7 | "city": "Monza (MI)", 8 | "length": "10000", 9 | "width": "12", 10 | "pitboxes": "25", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_monza66/ui/junior/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_monza66/ui/junior/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_monza66/ui/junior/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Monza 1966 - Junior Course", 3 | "description": "Autodromo di Monza", 4 | "tags" : ["circuit","original","historic","Italy"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Italy", 7 | "city": "Monza (MI)", 8 | "length": "2405", 9 | "width": "12", 10 | "pitboxes": "25", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_monza66/ui/people_stand.dds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_monza66/ui/people_stand.dds -------------------------------------------------------------------------------- /frontend/content/tracks/ks_monza66/ui/road/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_monza66/ui/road/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_monza66/ui/road/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Monza 1966 - Road Course", 3 | "description": "Autodromo di Monza", 4 | "tags" : ["circuit","original","historic","Italy"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Italy", 7 | "city": "Monza (MI)", 8 | "length": "5793", 9 | "width": "12", 10 | "pitboxes": "25", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_nordschleife/ui/endurance/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_nordschleife/ui/endurance/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_nordschleife/ui/endurance/ui_track.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_nordschleife/ui/endurance/ui_track.json -------------------------------------------------------------------------------- /frontend/content/tracks/ks_nordschleife/ui/endurance_cup/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_nordschleife/ui/endurance_cup/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_nordschleife/ui/endurance_cup/ui_track.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_nordschleife/ui/endurance_cup/ui_track.json -------------------------------------------------------------------------------- /frontend/content/tracks/ks_nordschleife/ui/nordschleife/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_nordschleife/ui/nordschleife/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_nordschleife/ui/nordschleife/ui_track.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_nordschleife/ui/nordschleife/ui_track.json -------------------------------------------------------------------------------- /frontend/content/tracks/ks_nordschleife/ui/touristenfahrten/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_nordschleife/ui/touristenfahrten/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_nordschleife/ui/touristenfahrten/ui_track.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_nordschleife/ui/touristenfahrten/ui_track.json -------------------------------------------------------------------------------- /frontend/content/tracks/ks_nurburgring/ui/layout_gp_a/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_nurburgring/ui/layout_gp_a/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_nurburgring/ui/layout_gp_a/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Nurburgring - GP", 3 | "description": "Nuerburgring", 4 | "tags" : ["original","circuit","Germany"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Germany", 7 | "city": "Nurburg", 8 | "length": "5148", 9 | "width": "14", 10 | "pitboxes": "24", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_nurburgring/ui/layout_gp_b/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_nurburgring/ui/layout_gp_b/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_nurburgring/ui/layout_gp_b/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Nurburgring - GP (GT)", 3 | "description": "Nuerburgring", 4 | "tags" : ["original","circuit","Germany"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Germany", 7 | "city": "Nurburg", 8 | "length": "5137", 9 | "width": "14", 10 | "pitboxes": "24", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_nurburgring/ui/layout_sprint_a/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_nurburgring/ui/layout_sprint_a/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_nurburgring/ui/layout_sprint_a/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Nurburgring - Sprint", 3 | "description": "Nuerburgring", 4 | "tags" : ["original","circuit","Germany"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Germany", 7 | "city": "Nurburg", 8 | "length": "3629", 9 | "width": "14", 10 | "pitboxes": "24", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_nurburgring/ui/layout_sprint_b/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_nurburgring/ui/layout_sprint_b/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_nurburgring/ui/layout_sprint_b/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Nurburgring - Sprint (GT)", 3 | "description": "Nuerburgring", 4 | "tags" : ["original","circuit","Germany"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Germany", 7 | "city": "Nurburg", 8 | "length": "3618", 9 | "width": "14", 10 | "pitboxes": "24", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_red_bull_ring/ui/layout_gp/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_red_bull_ring/ui/layout_gp/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_red_bull_ring/ui/layout_gp/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Red Bull Ring GP", 3 | "description": "Red Bull Ring Grand Prix Cricuit", 4 | "tags" : ["circuit","original","drift","Austria"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Austria", 7 | "city": "Spielberg", 8 | "length": "4326", 9 | "width": "12", 10 | "pitboxes": "24", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_red_bull_ring/ui/layout_national/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_red_bull_ring/ui/layout_national/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_red_bull_ring/ui/layout_national/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Red Bull Ring National", 3 | "description": "Red Bull Ring Südschleife National Circuit", 4 | "tags" : ["circuit","original","drift","Austria"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Austria", 7 | "city": "Spielberg", 8 | "length": "2336", 9 | "width": "12", 10 | "pitboxes": "24", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_silverstone/ui/gp/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_silverstone/ui/gp/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_silverstone/ui/gp/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Silverstone GP", 3 | "description": "Circuit of Silverstone", 4 | "tags" : ["circuit","original","Great Britain"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Great Britain", 7 | "city": "Silverstone", 8 | "length": "5901", 9 | "width": "14", 10 | "pitboxes": "24", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_silverstone/ui/international/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_silverstone/ui/international/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_silverstone/ui/international/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Silverstone - International", 3 | "description": "Circuit of Silverstone", 4 | "tags" : ["circuit","original","drift","Great Britain"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Great Britain", 7 | "city": "Silverstone", 8 | "length": "3619", 9 | "width": "14", 10 | "pitboxes": "24", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_silverstone/ui/national/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_silverstone/ui/national/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_silverstone/ui/national/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Silverstone - National", 3 | "description": "Circuit of Silverstone", 4 | "tags" : ["circuit","original","Great Britain"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Great Britain", 7 | "city": "Silverstone", 8 | "length": "2638", 9 | "width": "14", 10 | "pitboxes": "24", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_silverstone1967/ui/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_silverstone1967/ui/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_silverstone1967/ui/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Silverstone 1967", 3 | "description": "Historic Circuit of Silverstone", 4 | "tags" : ["circuit","original","historic","Great Britain"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Great Britain", 7 | "city": "Silverstone", 8 | "length": "4710", 9 | "width": "14", 10 | "pitboxes": "20", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_vallelunga/ui/classic_circuit/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_vallelunga/ui/classic_circuit/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_vallelunga/ui/classic_circuit/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Vallelunga - Classic", 3 | "description": "Autodromo Piero Taruffi", 4 | "tags" : ["circuit","original","drift","Italy"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Italy", 7 | "city": "Rome", 8 | "length": "3222", 9 | "width": "14", 10 | "pitboxes": "24", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_vallelunga/ui/club_circuit/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_vallelunga/ui/club_circuit/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_vallelunga/ui/club_circuit/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Vallelunga - Club", 3 | "description": "Autodromo Piero Taruffi", 4 | "tags" : ["circuit","original","drift","Italy"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Italy", 7 | "city": "Rome", 8 | "length": "1746", 9 | "width": "14", 10 | "pitboxes": "24", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_vallelunga/ui/extended_circuit/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_vallelunga/ui/extended_circuit/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_vallelunga/ui/extended_circuit/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Vallelunga", 3 | "description": "Autodromo Piero Taruffi", 4 | "tags" : ["circuit","original","drift","Italy"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Italy", 7 | "city": "Rome", 8 | "length": "4085", 9 | "width": "14", 10 | "pitboxes": "24", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/ks_zandvoort/ui/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/ks_zandvoort/ui/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/ks_zandvoort/ui/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Zandvoort", 3 | "description": "Zandvoort Circuit Park", 4 | "tags" : ["circuit","original","Netherlands"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Netherlands", 7 | "city": "Zandvoort", 8 | "length": "4307", 9 | "width": "13", 10 | "pitboxes": "18", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/magione/ui/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/magione/ui/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/magione/ui/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Magione", 3 | "description": "Autodromo di Umbria", 4 | "tags" : ["circuit","original","drift","Italy"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Italy", 7 | "city": "Magione", 8 | "length": "2507", 9 | "width": "11", 10 | "pitboxes": "18", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/monza/ui/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/monza/ui/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/monza/ui/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Monza", 3 | "description": "Autodromo di Monza", 4 | "tags" : ["circuit","original","Italy"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Italy", 7 | "city": "Monza (MI)", 8 | "length": "5793", 9 | "width": "12", 10 | "pitboxes": "26", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/mugello/ui/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/mugello/ui/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/mugello/ui/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Mugello", 3 | "description": "Autodromo del Mugello", 4 | "tags" : ["circuit","original","Italy"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Italy", 7 | "city": "Scarperia", 8 | "length": "5245", 9 | "width": "14", 10 | "pitboxes": "24", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/spa/ui/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/spa/ui/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/spa/ui/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Spa", 3 | "description": "Spa-Francorchamps", 4 | "tags" : ["circuit","original","Belgium"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Belgium", 7 | "city": "Francorchamps", 8 | "length": "7004", 9 | "width": "15", 10 | "pitboxes": "24", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/content/tracks/trento-bondone/ui/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/content/tracks/trento-bondone/ui/preview.png -------------------------------------------------------------------------------- /frontend/content/tracks/trento-bondone/ui/ui_track.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Trento-Bondone", 3 | "description": "Hillclimb course", 4 | "tags" : ["A2B","Hillclimb","touge","original","Italy"], 5 | "geotags": ["lat", "lon"], 6 | "country": "Italy", 7 | "city": "Trento", 8 | "length": "17619", 9 | "width": "8", 10 | "pitboxes": "4", 11 | "run": "clockwise" 12 | } -------------------------------------------------------------------------------- /frontend/css/angular-toggle-switch-bootstrap-3.css: -------------------------------------------------------------------------------- 1 | .ats-switch { 2 | border: 1px solid; 3 | cursor: pointer; 4 | display: inline-block; 5 | text-align: left; 6 | overflow: hidden; 7 | line-height: 8px; 8 | min-width: 100px; 9 | } 10 | .ats-switch.disabled { 11 | opacity: 0.5; 12 | filter: alpha(opacity=50); 13 | cursor: default !important; 14 | } 15 | .ats-switch.disabled .switch-left, 16 | .ats-switch.disabled .switch-right, 17 | .ats-switch.disabled .knob { 18 | cursor: default !important; 19 | } 20 | .ats-switch span { 21 | cursor: pointer; 22 | display: inline-block; 23 | float: left; 24 | height: 100%; 25 | line-height: 20px; 26 | padding: 4px; 27 | text-align: center; 28 | width: 33%; 29 | white-space: nowrap; 30 | box-sizing: border-box; 31 | -o-box-sizing: border-box; 32 | -moz-box-sizing: border-box; 33 | -webkit-box-sizing: border-box; 34 | } 35 | .ats-switch > div { 36 | position: relative; 37 | width: 150%; 38 | } 39 | .ats-switch .knob { 40 | background: red; 41 | border-left: 1px solid #ccc; 42 | border-right: 1px solid #ccc; 43 | background-color: #f5f5f5; 44 | width: 34%; 45 | z-index: 100; 46 | } 47 | .ats-switch .switch-on { 48 | left: 0%; 49 | } 50 | .ats-switch .switch-off { 51 | left: -50%; 52 | } 53 | .ats-switch .swtich-left, 54 | .ats-switch .switch-right { 55 | z-index: 1; 56 | } 57 | .ats-switch .switch-left { 58 | color: #fff; 59 | background: #005fcc; 60 | } 61 | .ats-switch .switch-right { 62 | color: #333; 63 | background: #f0f0f0; 64 | } 65 | .ats-switch .switch-animate { 66 | transition: left 0.5s; 67 | -o-transition: left 0.5s; 68 | -moz-transition: left 0.5s; 69 | -webkit-transition: left 0.5s; 70 | } 71 | .ats-switch { 72 | display: inline-block; 73 | cursor: pointer; 74 | border-radius: 4px; 75 | border: 1px solid; 76 | border-color: #ccc; 77 | position: relative; 78 | text-align: left; 79 | overflow: hidden; 80 | line-height: 8px; 81 | -webkit-user-select: none; 82 | -moz-user-select: none; 83 | -ms-user-select: none; 84 | -o-user-select: none; 85 | user-select: none; 86 | vertical-align: middle; 87 | min-width: 100px; 88 | -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; 89 | transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; 90 | } 91 | .ats-switch:hover { 92 | border-color: #66afe9; 93 | outline: 0; 94 | -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); 95 | box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); 96 | } 97 | .ats-switch.disabled:hover { 98 | border-color: #ccc; 99 | -webkit-box-shadow: inset 0 0 0 rgba(0,0,0,0), 0 0 0 rgba(0,0,0,0); 100 | box-shadow: inset 0 0 0 rgba(0,0,0,0), 0 0 0 rgba(0,0,0,0); 101 | } 102 | .ats-switch .knob { 103 | border-right: none; 104 | border-left: none; 105 | text-align: center; 106 | margin-top: -1px; 107 | margin-bottom: -1px; 108 | z-index: 100; 109 | background: #fff; 110 | } 111 | .ats-switch .knob i { 112 | color: #000; 113 | text-shadow: 0 1px 0 #fff; 114 | line-height: 18px; 115 | pointer-events: none; 116 | } 117 | .ats-switch .switch-left, 118 | .ats-switch .switch-right, 119 | .ats-switch .knob { 120 | min-height: 28px; 121 | } 122 | .ats-switch.switch-mini { 123 | min-width: 72px; 124 | } 125 | .ats-switch.switch-mini .switch-left, 126 | .ats-switch.switch-mini .switch-right, 127 | .ats-switch.switch-mini .knob { 128 | padding-bottom: 4px; 129 | padding-top: 4px; 130 | font-size: 10px; 131 | line-height: 9px; 132 | min-height: 18px; 133 | } 134 | .ats-switch.switch-mini i.switch-mini-icons { 135 | height: 1.20em; 136 | line-height: 9px; 137 | vertical-align: text-top; 138 | text-align: center; 139 | transform: scale(0.6); 140 | margin-top: -1px; 141 | margin-bottom: -1px; 142 | } 143 | .ats-switch.switch-small { 144 | min-width: 80px; 145 | } 146 | .ats-switch.switch-small .switch-left, 147 | .ats-switch.switch-small .switch-right, 148 | .ats-switch.switch-small .knob { 149 | padding-bottom: 3px; 150 | padding-top: 3px; 151 | font-size: 12px; 152 | line-height: 18px; 153 | min-height: 24px; 154 | } 155 | .ats-switch.switch-large { 156 | min-width: 120px; 157 | } 158 | .ats-switch.switch-large .switch-left, 159 | .ats-switch.switch-large .switch-right, 160 | .ats-switch.switch-large .knob { 161 | padding-bottom: 9px; 162 | padding-top: 9px; 163 | font-size: 16px; 164 | line-height: normal; 165 | min-height: 34px; 166 | } 167 | .ats-switch span.switch-left { 168 | color: #fff; 169 | background: #428bca; 170 | } 171 | .ats-switch span.switch-right { 172 | color: #000; 173 | background: #eeeeee; 174 | } 175 | .ats-switch.switch-primary span.switch-left { 176 | color: #fff; 177 | background: #428bca; 178 | } 179 | .ats-switch.switch-info span.switch-left { 180 | color: #fff; 181 | background: #5bc0de; 182 | } 183 | .ats-switch.switch-success span.switch-left { 184 | color: #fff; 185 | background: #5cb85c; 186 | } 187 | .ats-switch.switch-warning span.switch-left { 188 | background: #f0ad4e; 189 | color: #fff; 190 | } 191 | .ats-switch.switch-danger span.switch-left { 192 | color: #fff; 193 | background: #d9534f; 194 | } 195 | .ats-switch.switch-default span.switch-left { 196 | color: #000; 197 | background: #eeeeee; 198 | } 199 | -------------------------------------------------------------------------------- /frontend/css/style.css: -------------------------------------------------------------------------------- 1 | body { padding-top: 0px;} 2 | 3 | .starter-template { padding: 40px 15px; } 4 | 5 | .top5 { margin-top:5px; } 6 | .top7 { margin-top:7px; } 7 | .top10 { margin-top:10px; } 8 | .top15 { margin-top:15px; } 9 | .top17 { margin-top:17px; } 10 | .top30 { margin-top:30px; } 11 | 12 | .bottom5 { margin-bottom:5px; } 13 | .bottom7 { margin-bottom:7px; } 14 | .bottom10 { margin-bottom:10px; } 15 | .bottom15 { margin-bottom:15px; } 16 | .bottom17 { margin-bottom:17px; } 17 | .bottom30 { margin-bottom:30px; } 18 | 19 | .left {float: left;} 20 | .right {float: right;} 21 | 22 | .alerts { 23 | top: 51px; 24 | left: 0px; 25 | position: fixed; 26 | width: 100%; 27 | z-index: 1; 28 | } 29 | 30 | [ng\:cloak], [ng-cloak], .ng-cloak { 31 | display: none !important; 32 | } 33 | 34 | .all-icons [class*="pe-"]{ 35 | font-size: 40px; 36 | } 37 | .all-icons input{ 38 | border: 0; 39 | } 40 | .all-icons .font-icon-detail{ 41 | text-align: center; 42 | padding: 45px 0px 30px; 43 | border: 1px solid #e5e5e5; 44 | border-radius: 6px; 45 | margin: 15px 0; 46 | } 47 | .all-icons .font-icon-detail input{ 48 | margin: 25px auto 0; 49 | width: 100%; 50 | text-align: center; 51 | display: block; 52 | color: #aaa; 53 | font-size: 13px; 54 | } 55 | 56 | @media (min-width: 992px){ 57 | .typo-line{ 58 | padding-left: 140px; 59 | margin-bottom: 40px; 60 | position: relative; 61 | } 62 | 63 | .typo-line .category{ 64 | transform: translateY(-50%); 65 | top: 50%; 66 | left: 0px; 67 | position: absolute; 68 | } 69 | } 70 | 71 | .places-buttons .btn{ 72 | margin-bottom: 30px 73 | } 74 | .sidebar .nav > li.active-pro{ 75 | position: absolute; 76 | width: 100%; 77 | bottom: 10px; 78 | } 79 | .sidebar .nav > li.active-pro a{ 80 | background: rgba(255, 255, 255, 0.14); 81 | opacity: 1; 82 | color: #FFFFFF; 83 | } 84 | 85 | .table-upgrade td:nth-child(2), 86 | .table-upgrade td:nth-child(3){ 87 | text-align: center; 88 | } 89 | 90 | td.toggle-switch label { 91 | font-weight: normal; 92 | } 93 | 94 | .checkbox, .checkbox label { 95 | padding-left: 0px; !important 96 | } 97 | 98 | .checkbox { 99 | margin-top: 0px; !important 100 | } 101 | 102 | .checkbox input { 103 | display: block; !important 104 | } 105 | .drop-box { 106 | background: #F8F8F8; 107 | border: 5px dashed #DDD; 108 | width: 15em; 109 | height: 6em; 110 | text-align: center; 111 | padding: 0; 112 | margin: 10px; 113 | } 114 | .drop-box > span { 115 | height: 2em; 116 | width: 100%; 117 | padding: 1em 1em; 118 | display: block; 119 | } 120 | .dragover { 121 | border: 5px dashed rgb(255,74,85); 122 | } 123 | span.skinName { 124 | display: inline-block; 125 | margin: 2px; 126 | } 127 | pre { 128 | max-height: 50em; 129 | display: flex; 130 | flex-direction: column-reverse; 131 | } 132 | -------------------------------------------------------------------------------- /frontend/fonts/Pe-icon-7-stroke.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/fonts/Pe-icon-7-stroke.eot -------------------------------------------------------------------------------- /frontend/fonts/Pe-icon-7-stroke.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/fonts/Pe-icon-7-stroke.ttf -------------------------------------------------------------------------------- /frontend/fonts/Pe-icon-7-stroke.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/fonts/Pe-icon-7-stroke.woff -------------------------------------------------------------------------------- /frontend/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /frontend/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /frontend/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /frontend/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /frontend/img/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/img/ajax-loader.gif -------------------------------------------------------------------------------- /frontend/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/img/favicon.ico -------------------------------------------------------------------------------- /frontend/img/sidebar-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/img/sidebar-1.jpg -------------------------------------------------------------------------------- /frontend/img/sidebar-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/img/sidebar-2.jpg -------------------------------------------------------------------------------- /frontend/img/sidebar-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/img/sidebar-3.jpg -------------------------------------------------------------------------------- /frontend/img/sidebar-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/img/sidebar-4.jpg -------------------------------------------------------------------------------- /frontend/img/sidebar-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/img/sidebar-5.jpg -------------------------------------------------------------------------------- /frontend/img/sidebar-6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pringlez/ACServerManager/12ac5a8b973fe7aeb0b3113212593a7fc4313f5b/frontend/img/sidebar-6.jpg -------------------------------------------------------------------------------- /frontend/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Assetto Corsa Server Manager 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 26 | 27 | 28 | 29 | 30 |
31 | 96 | 97 |
98 | 114 | 115 |
116 |
117 |
118 | {{alert.msg}} 119 |
120 | 121 |
122 |
123 | Assetto Corsa Server 124 |
125 |
126 |

{{acServerStatus === 1 ? 'Running' : acServerStatus === 0 ? 'Stopped' : 'Loading...'}}

127 |
128 | 129 |
130 | 133 | 134 |
135 | 138 | 139 | 142 |
143 | Loading 144 |
145 |
146 |
147 | 148 |
149 | sTracker Server 150 |
151 |
152 |

{{sTrackerServerStatus === 1 ? 'Running' : acServerStatus === 0 ? 'Stopped' : 'Loading...'}}

153 |
154 | 155 |
156 | 159 | 160 |
161 | 164 | 165 | 168 |
169 | Loading 170 |
171 |
172 |
173 | 174 |
175 | Server Status 176 |
177 |
178 |

Current Session: {{serverStatus.session}}

179 |
180 |
181 |
182 | 183 |
184 |
185 |
186 |

Server log (last 2000 lines):

187 |
{{serverStatus.log}}
188 |
189 |
190 |
191 |
192 |
193 |
194 | 195 | 221 |
222 |
223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | -------------------------------------------------------------------------------- /frontend/js/angular/angular-resource.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.6.4 3 | (c) 2010-2017 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(W,b){'use strict';function K(q,g){g=g||{};b.forEach(g,function(b,h){delete g[h]});for(var h in q)!q.hasOwnProperty(h)||"$"===h.charAt(0)&&"$"===h.charAt(1)||(g[h]=q[h]);return g}var B=b.$$minErr("$resource"),Q=/^(\.[a-zA-Z_$@][0-9a-zA-Z_$@]*)+$/;b.module("ngResource",["ng"]).info({angularVersion:"1.6.4"}).provider("$resource",function(){var q=/^https?:\/\/\[[^\]]*][^/]*/,g=this;this.defaults={stripTrailingSlashes:!0,cancellable:!1,actions:{get:{method:"GET"},save:{method:"POST"},query:{method:"GET", 7 | isArray:!0},remove:{method:"DELETE"},"delete":{method:"DELETE"}}};this.$get=["$http","$log","$q","$timeout",function(h,P,L,M){function C(b,e){this.template=b;this.defaults=p({},g.defaults,e);this.urlParams={}}function x(D,e,u,m){function c(a,d){var c={};d=p({},e,d);t(d,function(d,l){y(d)&&(d=d(a));var f;if(d&&d.charAt&&"@"===d.charAt(0)){f=a;var k=d.substr(1);if(null==k||""===k||"hasOwnProperty"===k||!Q.test("."+k))throw B("badmember",k);for(var k=k.split("."),e=0,g=k.length;e').parent().bootstrapSwitch(); 46 | } 47 | 48 | $('.form-control').on("focus", function(){ 49 | $(this).parent('.input-group').addClass("input-group-focus"); 50 | }).on("blur", function(){ 51 | $(this).parent(".input-group").removeClass("input-group-focus"); 52 | }); 53 | 54 | // Fixes sub-nav not working as expected on IOS 55 | $('body').on('touchstart.dropdown', '.dropdown-menu', function (e) { e.stopPropagation(); }); 56 | }); 57 | 58 | // activate collapse right menu when the windows is resized 59 | $(window).resize(function(){ 60 | if($(window).width() <= 991){ 61 | lbd.initRightMenu(); 62 | } 63 | }); 64 | 65 | lbd = { 66 | misc:{ 67 | navbar_menu_visible: 0 68 | }, 69 | 70 | checkSidebarImage: function(){ 71 | $sidebar = $('.sidebar'); 72 | image_src = $sidebar.data('image'); 73 | 74 | if(image_src !== undefined){ 75 | sidebar_container = '