Arma 3 players are mongs and lazy, which means they dont know how to install a mod or use google, or read a game name.
You could have a server name like
"EPOCH MOD DOWNLOAD HERE (LINK) AIATP (DOWNLOAD HERE (LINK) FOLLOW THESE INSTRUCTIONS TO INSTALL MOD"
And they would still get it wrong.
They probably have not got epoch installed.
Edit in before the hulk smash offended crew cruise in and get all bent out of shape from my comments. Relax brosef's, I'm not meaning to offend your sensative side. You know it's true ;)
As there is not a great deal of option when it comes to managing your redis data (Hence why we are building a custom database management panel - as well as a few other people) I'm going to show you how to both get information from your redis database and manipulate it.
This will be helpful for those who wish to build a unique managment system for their servers. Be that very simple or very complex.
I will also be taking request and offering help to people who wish to get certain results from their queries.
===================================
Requirments:
PHP capable enviroment (I suggest MAMP/Xampp/Wamp to create a local web server)
Redis PHP Client (I will be using TinyRedisClient as it is very lightweight)
General knowledge of PHP language as well as good arithmetic
Redis Database
===================================
Example One - Get the total amount of players
function uniqueUsers() {
$client = new TinyRedisClient( 'YourIP:YourPort' );
$value = $client->GET( 'PLAYERS:YourPort' );
$object = json_decode($value, true);
$number = count($object);
return $number;
}
Breakdown
Declare a fucntion and name it uniqueUsers
function uniqueUsers() {
}
Connect to Redis Database
function uniqueUsers() {
$client = new TinyRedisClient( 'YourIP:YourPort' );
}
Perform a GET request for the Key Called YourIP:Port
function uniqueUsers() {
$client = new TinyRedisClient( 'YourIP:YourPort' );
$value = $client->GET( 'PLAYERS:YourPort' );
}
This will return a JSON string. We now need to decode this using the json_decode() function like so
function uniqueUsers() {
$client = new TinyRedisClient( 'YourIP:YourPort' );
$value = $client->GET( 'PLAYERS:YourPort' );
$object = json_decode($value, true);
}
This will seperate the JSON string into an array called $object. Now we count how many items are in the $objects array to get the total amount of players
function uniqueUsers() {
$client = new TinyRedisClient( 'YourIP:YourPort' );
$value = $client->GET( 'PLAYERS:YourPort' );
$object = json_decode($value, true);
$number = count($object);
}
Now all that is left to do is return the value of $number to a variable that we stored the returned value from the function in.
function uniqueUsers() {
$client = new TinyRedisClient( 'YourIP:YourPort' );
$value = $client->GET( 'PLAYERS:YourPort' );
$object = json_decode($value, true);
$number = count($object);
return $number;
}
NOTE: To assign the returned value to a variable you must declare the variable and call the function like so:
$uniquePlayers = uniqueUsers();
===================================
Example Two - Get Most Common Vehicle (Class Name)
function mostPopularVehicle () {
$client = new TinyRedisClient( 'YourIP:YourPort' );
$value = $client->KEYS( 'Vehicle:YourPort*' );
$number = count($value);
for ($x = 0; $x <= $number; $x++) {
$value = $client->GET( 'Vehicle:YourPort:'.$x );
if ($value != '') {
$vehicle = json_decode($value, true);
if (isset($vehicle[0])) {
$vehicles[$x] = $vehicle[0];
}
}
}
$counted = array_count_values($vehicles);
arsort($counted);
return(key($counted));
}
Breakdown
Declare mostPopularVehicle function
function mostPopularVehicle () {
}
Connect to Redis database
function mostPopularVehicle () {
$client = new TinyRedisClient( 'YourIP:YourPort' );
}
Get all KEYS that match the pattern "Vehicle:YourPort:"
function mostPopularVehicle () {
$client = new TinyRedisClient( 'YourIP:YourPort' );
$value = $client->KEYS( 'Vehicle:YourPort*' );
}
Count the result to get the total amount of vehicles
function mostPopularVehicle () {
$client = new TinyRedisClient( 'YourIP:YourPort' );
$value = $client->KEYS( 'Vehicle:YourPort*' );
$number = count($value);
}
Loop for the number of vehicles
function mostPopularVehicle () {
$client = new TinyRedisClient( 'YourIP:YourPort' );
$value = $client->KEYS( 'Vehicle:YourPort*' );
$number = count($value);
for ($x = 0; $x <= $number; $x++) {
}
}
GET the vehicle number $x (For each number in the total number of cars)
function mostPopularVehicle () {
$client = new TinyRedisClient( 'YourIP:YourPort' );
$value = $client->KEYS( 'Vehicle:YourPort*' );
$number = count($value);
for ($x = 0; $x <= $number; $x++) {
$value = $client->GET( 'Vehicle:YourPort:'.$x );
}
}
Check if the car value is not blank
function mostPopularVehicle () {
$client = new TinyRedisClient( 'YourIP:YourPort' );
$value = $client->KEYS( 'Vehicle:YourPort*' );
$number = count($value);
for ($x = 0; $x <= $number; $x++) {
$value = $client->GET( 'Vehicle:YourPort:'.$x );
if ($value != '') {
}
}
}
Decode the JSON string
function mostPopularVehicle () {
$client = new TinyRedisClient( 'YourIP:YourPort' );
$value = $client->KEYS( 'Vehicle:YourPort*' );
$number = count($value);
for ($x = 0; $x <= $number; $x++) {
$value = $client->GET( 'Vehicle:YourPort:'.$x );
if ($value != '') {
$vehicle = json_decode($value, true);
}
}
}
Check if the decoded JSON string Index 0 is set
function mostPopularVehicle () {
$client = new TinyRedisClient( 'YourIP:YourPort' );
$value = $client->KEYS( 'Vehicle:YourPort*' );
$number = count($value);
for ($x = 0; $x <= $number; $x++) {
$value = $client->GET( 'Vehicle:YourPort:'.$x );
if ($value != '') {
$vehicle = json_decode($value, true);
if (isset($vehicle[0])) {
}
}
}
}
If the index is set, vehicles index of $x variables (Each car for the total of cars) = the vehicle class name (Index 0 of the JSON string)
function mostPopularVehicle () {
$client = new TinyRedisClient( 'YourIP:YourPort' );
$value = $client->KEYS( 'Vehicle:YourPort*' );
$number = count($value);
for ($x = 0; $x <= $number; $x++) {
$value = $client->GET( 'Vehicle:YourPort:'.$x );
if ($value != '') {
$vehicle = json_decode($value, true);
if (isset($vehicle[0])) {
$vehicles[$x] = $vehicle[0];
}
}
}
}
Count all the values in the $vehicles array
function mostPopularVehicle () {
$client = new TinyRedisClient( 'YourIP:YourPort' );
$value = $client->KEYS( 'Vehicle:YourPort*' );
$number = count($value);
for ($x = 0; $x <= $number; $x++) {
$value = $client->GET( 'Vehicle:YourPort:'.$x );
if ($value != '') {
$vehicle = json_decode($value, true);
if (isset($vehicle[0])) {
$vehicles[$x] = $vehicle[0];
}
}
}
$counted = array_count_values($vehicles);
}
Sort the counted array but maintain index association
function mostPopularVehicle () {
$client = new TinyRedisClient( 'YourIP:YourPort' );
$value = $client->KEYS( 'Vehicle:YourPort*' );
$number = count($value);
for ($x = 0; $x <= $number; $x++) {
$value = $client->GET( 'Vehicle:YourPort:'.$x );
if ($value != '') {
$vehicle = json_decode($value, true);
if (isset($vehicle[0])) {
$vehicles[$x] = $vehicle[0];
}
}
}
$counted = array_count_values($vehicles);
arsort($counted);
}
Return the value, in this case is the most frequent occurring vehicle in the databse
function mostPopularVehicle () {
$client = new TinyRedisClient( 'YourIP:YourPort' );
$value = $client->KEYS( 'Vehicle:YourPort*' );
$number = count($value);
for ($x = 0; $x <= $number; $x++) {
$value = $client->GET( 'Vehicle:YourPort:'.$x );
if ($value != '') {
$vehicle = json_decode($value, true);
if (isset($vehicle[0])) {
$vehicles[$x] = $vehicle[0];
}
}
}
$counted = array_count_values($vehicles);
arsort($counted);
return(key($counted));
}
===================================
Altis is new and something people just need to get used to IMO. Although large, you can have a different adventure in different parts of Altis each time you log on. Chernarus is over-played and predictable but who knows what Chernarus+ would bring to the table? I can't wait for more vehicles as well, as I'm sure people would feel better about the experience they are having if they had a faster way of getting around the map. I personally don't mind running through the fields but that's just me maybe? :)
ARMA is ARMA.. Epoch has already raised the health which I don´t like.
I hit a guy with the Vannad and jumped out shot him twice with a 6.5 then He turned around and one shot killed Me with a .50. ARMA is not fair and I dont think it ever will be : /
As the title sais. I think alowing players to build without first making their jammer is not good.
Players should only be able to build tents / shelvs / campfire and not every noob with an axe can fill the server limit trying to learn how to build. In Arma 2 epoch you needed a plote pole down before you started building and it workend out great.
Like this you always have to wait for other people's shit to despawn or go destroy all the useless walls and floors everywhere.
That is another problem on it's own. My group and I tryed to blow up some walls found by placeing them next to a gas station and blowing it up. After restart the walls where still there even though they blew up before. We have to waste our own explosives or cars to make room on the server to build our bases. It's not fun.. at all :( ( Edit* walls blown up with cars come back after restart :( )
I know it's hard to build a jammer because scrap metal is so rare but this will prevent a lot of server lag and keep the build limit in check better.
Pls dont throw out statements like that. This is a working system for Arma 3. Some screens from 5 secs ago on the skaronator server. Nearly 66 player. Same fps with 80. Pls dont leed this thread into a hardware bashing.
Fps with my favorite pvp graphics
I can see this being akin to first person/third person and that many servers will have to have the bambi mode to be popular, which is a shame. BIS should never have made it optional.
Default limit is currently 1000. I raised up to 2500 on my server but with the next patch come a maintain system which delete old/non maintained bases.
We can confirm that BI fixed this issue for the upcoming 1.32 patch, which should hit stable early next week.
Thanks to everyone that upvoted the issue on the feedback tracker.