Distinguish bots from humans.
Players column now have three integers - first is real humans count, second - bots count, and third - maximum players allowed on this server. Also, sidebar will show bots count as well.
This commit is contained in:
parent
32c6297765
commit
280c65f116
7
cache/cache_servers.go
vendored
7
cache/cache_servers.go
vendored
@ -55,6 +55,7 @@ func (c *Cache) FlushServers(data map[string]string) {
|
||||
new_servers[mapping_item_name].Port = s.Server.Port
|
||||
new_servers[mapping_item_name].Name = s.Server.Name
|
||||
new_servers[mapping_item_name].Players = s.Server.Players
|
||||
new_servers[mapping_item_name].Bots = s.Server.Bots
|
||||
new_servers[mapping_item_name].Maxplayers = s.Server.Maxplayers
|
||||
new_servers[mapping_item_name].Ping = s.Server.Ping
|
||||
new_servers[mapping_item_name].Map = s.Server.Map
|
||||
@ -71,6 +72,7 @@ func (c *Cache) FlushServers(data map[string]string) {
|
||||
cached_servers[mapping_item_name].Port = s.Server.Port
|
||||
cached_servers[mapping_item_name].Name = s.Server.Name
|
||||
cached_servers[mapping_item_name].Players = s.Server.Players
|
||||
cached_servers[mapping_item_name].Bots = s.Server.Bots
|
||||
cached_servers[mapping_item_name].Maxplayers = s.Server.Maxplayers
|
||||
cached_servers[mapping_item_name].Ping = s.Server.Ping
|
||||
cached_servers[mapping_item_name].Map = s.Server.Map
|
||||
@ -90,12 +92,12 @@ func (c *Cache) FlushServers(data map[string]string) {
|
||||
fmt.Println("Adding new servers...")
|
||||
if len(new_servers) > 0 {
|
||||
for _, srv := range new_servers {
|
||||
tx.NamedExec("INSERT INTO servers (ip, port, name, ping, players, maxplayers, gamemode, map, version, extended_config, players_info, is_private, favorite, profile_to_use) VALUES (:ip, :port, :name, :ping, :players, :maxplayers, :gamemode, :map, :version, :extended_config, :players_info, :is_private, :favorite, :profile_to_use)", srv)
|
||||
tx.NamedExec("INSERT INTO servers (ip, port, name, ping, players, maxplayers, gamemode, map, version, extended_config, players_info, is_private, favorite, profile_to_use, bots) VALUES (:ip, :port, :name, :ping, :players, :maxplayers, :gamemode, :map, :version, :extended_config, :players_info, :is_private, :favorite, :profile_to_use, :bots)", srv)
|
||||
}
|
||||
}
|
||||
fmt.Println("Updating cached servers...")
|
||||
for _, srv := range cached_servers {
|
||||
_, err := tx.NamedExec("UPDATE servers SET name=:name, players=:players, maxplayers=:maxplayers, gamemode=:gamemode, map=:map, ping=:ping, version=:version, extended_config=:extended_config, favorite=:favorite, password=:password, players_info=:players_info, is_private=:is_private, profile_to_use=:profile_to_use WHERE ip=:ip AND port=:port", &srv)
|
||||
_, err := tx.NamedExec("UPDATE servers SET name=:name, players=:players, maxplayers=:maxplayers, gamemode=:gamemode, map=:map, ping=:ping, version=:version, extended_config=:extended_config, favorite=:favorite, password=:password, players_info=:players_info, is_private=:is_private, profile_to_use=:profile_to_use, bots=:bots WHERE ip=:ip AND port=:port", &srv)
|
||||
if err != nil {
|
||||
fmt.Println(err.Error())
|
||||
}
|
||||
@ -125,6 +127,7 @@ func (c *Cache) LoadServers(data map[string]string) {
|
||||
c.Servers[key].Server.Ip = server.Ip
|
||||
c.Servers[key].Server.Port = server.Port
|
||||
c.Servers[key].Server.Players = server.Players
|
||||
c.Servers[key].Server.Bots = server.Bots
|
||||
c.Servers[key].Server.Maxplayers = server.Maxplayers
|
||||
c.Servers[key].Server.Ping = server.Ping
|
||||
c.Servers[key].Server.Gamemode = server.Gamemode
|
||||
|
@ -48,6 +48,7 @@ func migrate_full(db *Database, version int) {
|
||||
if version == 6 {six_to_seven(db); version = 7}
|
||||
if version == 7 {seven_to_eight(db); version = 8}
|
||||
if version == 8 {eight_to_nine(db); version = 9}
|
||||
if version == 9 {nine_to_ten(db); version = 10}
|
||||
}
|
||||
|
||||
// Initial database structure.
|
||||
@ -115,3 +116,10 @@ func eight_to_nine(db *Database) {
|
||||
db.Db.MustExec("ALTER TABLE servers ADD is_private VARCHAR(1) NOT NULL DEFAULT '0'")
|
||||
db.Db.MustExec("UPDATE database SET version=9")
|
||||
}
|
||||
|
||||
// Bots count.
|
||||
func nine_to_ten(db *Database) {
|
||||
fmt.Println("Upgrading database from 9 to 10...")
|
||||
db.Db.MustExec("ALTER TABLE servers ADD bots VARCHAR(2) NOT NULL DEFAULT '0'")
|
||||
db.Db.MustExec("UPDATE database SET version=10")
|
||||
}
|
||||
|
@ -18,6 +18,8 @@ type Server struct {
|
||||
Name string `db:"name"`
|
||||
// Current players count
|
||||
Players string `db:"players"`
|
||||
// Bots count
|
||||
Bots string `db:"bots"`
|
||||
// Maximum players
|
||||
Maxplayers string `db:"maxplayers"`
|
||||
// Ping
|
||||
|
@ -234,13 +234,34 @@ func (p *Pooler) UpdateSpecificServer(server *datamodels.Server) error {
|
||||
if len(received_lines) >= 2 {
|
||||
// Here we go, players information.
|
||||
players := received_lines[2:]
|
||||
var real_players int = 0
|
||||
var bots int = 0
|
||||
// Calculate players!
|
||||
if len(players) == 1 && len(players[0]) > 255 {
|
||||
server.Players = "0"
|
||||
server.Bots = "0"
|
||||
} else {
|
||||
// Looks like we have last element to be empty, due to
|
||||
// strings.Split() call before.
|
||||
server.Players = strconv.Itoa(len(players) - 1)
|
||||
for i := range players {
|
||||
// Get slice with data for bots-humans parsing.
|
||||
player_data := strings.Split(string(players[i]), " ")
|
||||
// If slice length isn't equal 3 - this is not what
|
||||
// we want.
|
||||
if len(player_data) != 3 {
|
||||
continue
|
||||
}
|
||||
|
||||
if player_data[1] == "0" {
|
||||
bots++
|
||||
} else {
|
||||
real_players++
|
||||
}
|
||||
}
|
||||
//server.Players = strconv.Itoa(len(players) - 1)
|
||||
server.Players = strconv.Itoa(real_players)
|
||||
server.Bots = strconv.Itoa(bots)
|
||||
fmt.Println(server.Players, server.Bots)
|
||||
}
|
||||
server.PlayersInfo = strings.Join(received_lines[2:], "\\")
|
||||
}
|
||||
|
@ -409,7 +409,7 @@ func (m *MainWindow) loadAllServers(data map[string]string) {
|
||||
m.all_servers_store.SetValue(iter, m.column_pos["Servers"]["Name"], server_name)
|
||||
m.all_servers_store.SetValue(iter, m.column_pos["Servers"]["Mode"], m.getGameModeName(server.Server.Gamemode))
|
||||
m.all_servers_store.SetValue(iter, m.column_pos["Servers"]["Map"], server.Server.Map)
|
||||
m.all_servers_store.SetValue(iter, m.column_pos["Servers"]["Players"], server.Server.Players + "/" + server.Server.Maxplayers)
|
||||
m.all_servers_store.SetValue(iter, m.column_pos["Servers"]["Players"], server.Server.Players + "/" + server.Server.Bots + "/" + server.Server.Maxplayers)
|
||||
m.all_servers_store.SetValue(iter, m.column_pos["Servers"]["Ping"], server.Server.Ping)
|
||||
m.all_servers_store.SetValue(iter, m.column_pos["Servers"]["Version"], server.Server.Version)
|
||||
m.all_servers_store.SetValue(iter, m.column_pos["Servers"]["IP"], server.Server.Ip + ":" + server.Server.Port)
|
||||
@ -482,7 +482,7 @@ func (m *MainWindow) loadFavoriteServers(data map[string]string) {
|
||||
m.fav_servers_store.SetValue(iter, m.column_pos["Favorites"]["Name"], server_name)
|
||||
m.fav_servers_store.SetValue(iter, m.column_pos["Favorites"]["Mode"], m.getGameModeName(server.Server.Gamemode))
|
||||
m.fav_servers_store.SetValue(iter, m.column_pos["Favorites"]["Map"], server.Server.Map)
|
||||
m.fav_servers_store.SetValue(iter, m.column_pos["Favorites"]["Players"], server.Server.Players + "/" + server.Server.Maxplayers)
|
||||
m.fav_servers_store.SetValue(iter, m.column_pos["Favorites"]["Players"], server.Server.Players + "/" + server.Server.Bots + "/" + server.Server.Maxplayers)
|
||||
m.fav_servers_store.SetValue(iter, m.column_pos["Favorites"]["Ping"], server.Server.Ping)
|
||||
m.fav_servers_store.SetValue(iter, m.column_pos["Favorites"]["Version"], server.Server.Version)
|
||||
m.fav_servers_store.SetValue(iter, m.column_pos["Favorites"]["IP"], server.Server.Ip + ":" + server.Server.Port)
|
||||
@ -611,7 +611,7 @@ func (m *MainWindow) showShortServerInformation() {
|
||||
iter = new(gtk.TreeIter)
|
||||
m.server_info_store.Append(iter)
|
||||
m.server_info_store.SetValue(iter, 0, "Players")
|
||||
m.server_info_store.SetValue(iter, 1, server_info.Players + " of " + parsed_general_data["sv_maxclients"])
|
||||
m.server_info_store.SetValue(iter, 1, server_info.Players + " of " + parsed_general_data["sv_maxclients"] + " (" + server_info.Bots + " bots)")
|
||||
delete(parsed_general_data, "sv_maxclients")
|
||||
|
||||
// Ping
|
||||
|
Reference in New Issue
Block a user