make following algo:
each map has couple of weights to it:
map_weights[][admin, popular, last]
admin - weight set over by admin for lobpot pick
popular - weight using number played count from 0 to 1, counted from game stats each night at midnight over like 30-60 days back.
last - last time it was played in days_ago also counted at midnight and normalised to 0-1 range. the language used is rubyish, since it will get into sql, (which i dont do) anyway.
and then setup weights for map slots in map clicky thingy, so first one is lobster pot, next are chances of high lobster pot but also popular, 3rd slot is from most played with some chances of popular or lobster pot, and last slot is LEAST played, setting weights for each slot:
weights[admin, popular, last] = {
{ 9, 0, 0 }
{ 4, 9, 2 }
{ 2, 2, 9 }
{ 0, 0, -9 }
}
and map is selected using weighted random, by combining(adding) all weights of map multipled by slot weight selection, with some further tweaks :
slot(n) {
x[] = map_weights[] * weights[n] * random(from 0.9 to 1.0);
for each map: weight[map] = x.admin*scale_admin
+ x.popular^power_popular*scale_popularity
+ x.last>0 ? x.last^power_last*scale_last :
(1-absolute(x.last))^power_last*scale_last ;
return random(weight)
}
maybe on some days do reverse order of scale to do retro maps more favoured on fridays or something... toy around with it. figure it out... :) the minus in setting the weight of the x.last fragment is determinging if the map should be weighted using last or first played order of weights. i guess you could plug it to x.popular as well.
On top of that you might add
!mapw 9 1 1
command to do map random, using own weights instead of those in that 3x4 matrix, so all slots are using same weights for random