News:

Use the "Forum Search"
It may help you to find anything in the forum ;).

Add sysop-style features in multiplayer

Started by sdog, March 16, 2011, 07:41:27 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

sdog

Seems we have an abusive player on the game. H-Trans (Player 5) is fencing of cities and actively blocking ways of lorries. While working away around those blockades, i suddenly got locked out of my company. I usually do not set passwords to let others play with my game, but after a little argument with H-Trans a password for my company was set and i was locked out of it. My company was then driven bankrupt by buying assets.

Please note:
This topic was split from this thread:
http://forum.simutrans.com/index.php?topic=6548.35

The described behaviour occured on Timothy's 128.simutrans.entropy.me.uk server.

Ashley

Hm, not sure what I can do about this. I'm not sure I can easily find out which player and which IP address they are and the game itself doesn't have functionality to ban people... I'd recommend to people that they set passwords on their player in-game.

If he persists let me know and I'll see what I can do.
Use Firefox? Interested in IPv6? Try SixOrNot the IPv6 status indicator for Firefox.
Why not try playing Simutrans online? See the Game Servers board for details.

sdog

I'm not so much worried about this, it was quite interesting however, since he went at great lenghts to sabotage my transport. (He insisted some areas belonged to him, and noone must interfere)

At one point he just deleted a lot of his lines and bulldozed large parts of 'his' city, to deny me it's use. Looking at the map, he must have done this before.

Perhaps we should have a look at it again, so we can report the methods. Perhaps for some it is possible to prevent this.

I'm also thinking about suggesting an extension request, to give players some way to prevent such blocking. Not so many good ideas yet, but perhaps a brainstorming could be enough.

ps.: could you save the game at the recent state? That chap was so creative in finding new ways of abuse, we could learn a bit from it.

Ashley

#3
I think that some kind of extension to provide basic administrator functionality will inevitably be required. Simple stuff like being able to find the IP address of players in the game by their name and block IPs from connecting (though the blocking part can be done by outside methods ofc...)

I'll take a look at the game and see what's going on :)


Edit: Wow, what a mess. I'll probably restart the server fairly soon with a new map. Think I'll make all the maps quite a bit bigger next time.
Use Firefox? Interested in IPv6? Try SixOrNot the IPv6 status indicator for Firefox.
Why not try playing Simutrans online? See the Game Servers board for details.

IgorEliezer

Simutrans' network mode should have something like administration functions that a chat channel has.

Instead of creating tons and tons of dialogs and a crowded GUI, a server could be managed by the use of a command line console. You, as admin, can type a command in and it will execute an action.


Ashley

I've split this discussion off into an extension request to discuss what features we can add to the game in order to allow for dealing with abusive players.

I think at a bare minimum some kind of IP blocklist (preferably a flat-file which can be passed as a command-line parameter) and a way to identify the IP address of players in game (again, ideally this function should be available only to the server administrator) would suffice.

Maybe make these features available only to the public service player (which becomes like an admin account in multiplayer).

Also it'd be great if the logging could include the source IP address of players joining/leaving the game so that it's easier to identify connections when analysing the log file.
Use Firefox? Interested in IPv6? Try SixOrNot the IPv6 status indicator for Firefox.
Why not try playing Simutrans online? See the Game Servers board for details.

sdog

Looking at the abuse of said player, two distinct approaches can be identified: Preventive destruction of infrastructure and blocking of ways -- and direct sabotage of other players' operations.

Some methods he used to prevent others to play:
- destruction of most inter-city roads
- encircling cities by his own rail
- encircling cities by station extension buildings
- enveloping other players ways with rail, to prevent breaking out
- replacing city road with player road

Direct action against players:
- cutting off citie roads where player roads interfaced with them
- replacing citie roads with player roads at those positions and setting up one way signs
- putting trafic lights on public roads, seting them to blocking one way
- cutting off public 'bus-stops from the public roads, protecting the cuts with rail
- bulldozing whole cities other players serviced

- loging into an other players company (not protected by password) while other player was playing; bankrupting that company

On another note, Timothy: it seems he also had access to the public service player. Cities were rebuilt with buidings sorted by type. Roads by other players were cut to allow his station extensions to pass.


Suggestions for a preventive approach
Not many ideas here, however some things could work quite well preventing the first type of disruptive play:
- rails not used by trains/not connected to stations/ depots should dissapear after a while or become public player owned.
- limiting bulldozing of city buildings to a few per year
- same for city roads adjacent to other players stations or stops
- limiting the size or number of station extension buildings
- all roads in cities become public

against direct action:
- allow players to change/remove signs on public roads
- some way for players to flag another player as disruptive

Direct action against other players is hard to come by however, i think it will need active server administration. A possibility to give admin rights to trusted players in a irc like manner would be quite good.

This also leads me to the question, would it perhaps the simplest approach to write an actual IRC bot capable of managing a to be written server CLI interface. This would take the whole user and privileges management out of the code, using something that is already very reliable and platform independent.



jamespetts

There is much to be said for additional administrator functions, including IP bans. Practically, in-game, players should always protect their accounts with the password, and administrators should always password protect public service players.

I don't like the idea of anti-griefing devices that also are capable of interfering with legitimate play, and I think that some of the suggestions in SDog's list do that (such as limiting the size/number of station extensions, limiting bulldozing of city buildings, removal of abandoned railways which players might want to re-use in future). I'd prefer to have a trusted environment with greater freedom and for abusive players to be excluded from that environment. One possible way of enforcing that is an optional global password required before any player is allowed to switch to a new company, which would be given out to people who appear to be sensible and withdrawn (by changing the password and not telling those from whom it is withdrawn) from those who are abusive.
Download Simutrans-Extended.

Want to help with development? See here for things to do for coding, and here for information on how to make graphics/objects.

Follow Simutrans-Extended on Facebook.

Lmallet

Quote from: jamespetts on March 18, 2011, 12:58:30 AM
There is much to be said for additional administrator functions, including IP bans. Practically, in-game, players should always protect their accounts with the password, and administrators should always password protect public service players.

I don't like the idea of anti-griefing devices that also are capable of interfering with legitimate play, and I think that some of the suggestions in SDog's list do that (such as limiting the size/number of station extensions, limiting bulldozing of city buildings, removal of abandoned railways which players might want to re-use in future). I'd prefer to have a trusted environment with greater freedom and for abusive players to be excluded from that environment. One possible way of enforcing that is an optional global password required before any player is allowed to switch to a new company, which would be given out to people who appear to be sensible and withdrawn (by changing the password and not telling those from whom it is withdrawn) from those who are abusive.
Global password is a good idea, I've seen it used in other games.  I am not a fan of list-based IP bans myself, most of the 'net gets dynamic IPs and is simple to change.  Maybe a basic "kick" function which bans the IP for an hour would suffice, difficult players are usually not that patient.  :)

sdog

A first step could be server rules the community agrees upon. This will actually define abusive behaviour. It might help for some type of players. (The chap yesterday was, i think, deeply convinced what he was doing was legitimate reaction on players interfering with him. Perhaps had some type of neurotic disorder)

QuoteSDog's list do that [interfering with legitimate play] (such as limiting the size/number of station extensions, limiting bulldozing of city buildings, removal of abandoned railways which players might want to re-use in future)
Yes to a certain degree, but i think it is not going too far. Also, regardless of abusive play, having lots of old rail lying around, will interfere with play. Just one scenario, you think you might connect a city in a while, leave some rail for a years, but one of your competitors wants to use exactly that approach to the city and has go through great lengths to do that.

Some reasonable thresholds could prevent interfering with ones play:
- Only remove track if it is away further than n tiles from an active line (one train every k months)
- Do not remove unused tracks if they are o percent of a players total track

The station abuse i was refering to is this:

Employing wayfinder it should be detectable how long such a chain is, restricting it to say 10 or 15 tiles will hardly ever interfere with legitimate game-play.

I see one difficulty with actively administrating simutrans games, we are a relatively small community and games run over a long time. Administration workload has to be reduced before active administration starts.

Furthermore i'm not so sure if locking out players from a game would be so wise, the worst that could happen, is a very common effect from online games: Public servers are full of punks and a horrible experience while all experienced players are in restricted servers (viz clans). As the experienced have a nice playground noone actualy works to make the public servers a nicer spot.

Some modified way could work though, restrict common players and allow trusted players to have unrestricted play. (perhaps also some admin powers)

sdog

Quote from: IgorEliezer on March 17, 2011, 01:09:52 AM
Simutrans' network mode should have something like administration functions that a chat channel has.

Instead of creating tons and tons of dialogs and a crowded GUI, a server could be managed by the use of a command line console. You, as admin, can type a command in and it will execute an action.
This has a lot of potential, the OS' comand line interface (cli) should suffice however, no need to actually build it ingame. We can write (or rather adopt) tools to manage that server then externally from clients, webinterfaces, or irc (my favourite). So no user authentification and user management has to be built into the game.

Most serious game servers will run on 'NIX OSs in the longer run, where this is not difficult.


double post, as the post addresses a quite different topic

Ashley

I would strongly support functionality which can be employed from a command line outside the game. I don't have a lot of time to actually play Simutrans these days so running the server is one of the things I can do for the community. Being able to administer the game in progress without needing to log into it would be a great thing. Command-line tools you can use from the OS's shell also permit scripting and interaction with web-based management interfaces.

I agree that IP-based ban lists are a crude tool. They work very effectively for the vast majority of circumstances however (just look at how effective they have been for the forum).

What I'd like to see having thought about this a bit:

A command line tool (or interface to the game) which allows you to query:

1. The names and IP addresses of all currently logged on players
2. Specific detail on individual players, e.g. time connected, total time played, statistics on their company from the game etc. (for stats purposes rather than anything else)
3. Get a list of all the chat which has gone on in the game, chat messages should be returned with timestamps indicating when they were posted.
4. Any other suggestions?

The same tool could be used to send commands to the game to:

1. Post a message to the in-game chat (with the tag "Server Administrator: ..." - this would be great for informing players of a need to restart the server or provide more info etc.
2. Add players to an IP-based blocklist
3. Remove players from the IP-based blocklist
4. Any other suggestions?

If the functionality could be implemented in-game to do these things and exposed via the network interface then I (or others) could easily write utilities to actually send the commands to the game (probably in a similar way to the network-based communication which already exists). If such commands were accepted only from processes operating on localhost (e.g. coming from IP address 127.0.0.1) this would be fairly secure from outside interference.
Use Firefox? Interested in IPv6? Try SixOrNot the IPv6 status indicator for Firefox.
Why not try playing Simutrans online? See the Game Servers board for details.

prissi

An adminstrator could always reset any password he/she likes and then build a city as the offending player: Pop, he is gone ...

Ashley

Oh? How does one reset the password of another player?
Use Firefox? Interested in IPv6? Try SixOrNot the IPv6 status indicator for Firefox.
Why not try playing Simutrans online? See the Game Servers board for details.

prissi

The public player can click on any red boxes and set an new password and can then change to a new player.

ӔO

couldn't you just dig underneath all that stuff on top?

This would be more feasible if you add in something like 'leader penalty', where the game will automatically reduce total revenue of the leading player(s) and increase income for the players lagging behind.
My Sketchup open project sources
various projects rolled up: http://dl.dropbox.com/u/17111233/Roll_up.rar

Colour safe chart:

Ashley

Quote from: prissi on March 18, 2011, 10:38:57 PM
The public player can click on any red boxes and set an new password and can then change to a new player.

I had no idea you could do this!

I think I'd still like to have a way of linking player names to IP addresses though. Even if the log file revealed the IP address of players joining the game it'd be enough.
Use Firefox? Interested in IPv6? Try SixOrNot the IPv6 status indicator for Firefox.
Why not try playing Simutrans online? See the Game Servers board for details.

rsdworker

#17
i have suggestions

1: lock company or bankupt after ip ban causing the things tha player left behind would be wiped off with prompt - like you want wipe this company or merge with public company - with options - wipe company  and Merge with it
2: player's friend lists - for example you know the company well and want let friend's trains on the owned lines (simllar to public player - so its based on Second life system where abouts you can't edit objects when friend isn't added and have rights set so for example you try demlish the tracks owning to other players and you will get message - you can't demlish this track
so after adding friend a speical set of rights will appear on friends list - clicking on rights menu after ticking rights on = tickbox

top row - vehciles rights - player can edit or sell or move or add the vehclies - the default settings would be just player edit and add trains
midde row - tracks/roads rights - players can edit or remove or add tracks - so the default setting would be just add tracks
bottom row - company rights - players can merge and split from or close down company and set HQ and etc - so the default is None

if player becomes abusing the rights - so player can easily revoke those by unticking rights box or removing him means he will lose all access to track and trains and etc means the player trains on other players track will be returned back to depot

the land rights - if the entire world is not permited to edit terrain or change city and any such then players have to buy the land - using land buy symbol - this works well in TTD so player needs is place sign on land and chose the size - the default is 1x1 tile
once its bought - the land will have sign on it demoting who owns this - the lands without sign means no players can't edit land or lbuild the tracks so when player sets the land out after buying the land then he can set the access lists for example you deny the other players to lay the tracks next to players track so its will be applied across land and also its has abitly to ban players from accessing land for example other player tries to fority the city that player has set bus routes inside - if public player has set the land for city so player can click on city and go to ban list and add the offending player - and click apply to this city or all cities but can't be removed from ban list at cities but on players owned - the access and ban lists will be like on second life
allow anyone
allow speific company if he or she added company to friend list

on ban list - you can ban companies and players and ablity to remove them from ban list

once that banned company is on ban list - he will get message when he tries to build something on land that he is banned - sorry you have banned from city of London
different message would appear when he tries to build on - Sorry you are banned from building on land that owned to express trains company

but if all players ban one company through ban vote then he will get banned from entire world and company will be removed

and also IP of players would be shown if players finds player abusing it
to report the player - he has to click on city and click ban and click report this company or other method - click on offending company and click report this company - then server will send messagel to server owner who matains the server or mod on duty
but if no admin or mod or both not on - then player can click on Ban vote if its appears (can be set by admin) but if not appears - then player can click Mute player - they can't mute admin

the public player would used by admin so the other player can't gain access to that

what you think of my idea?

sdog

In-game methods for administrating a game a are nice and dandy. While the way to kick a player should be quite helpful for the time being, it's still a workaround. In the longer run something along the lines Timothy and Igor suggested would be more practical, especially if the game becomes more popular.

Being Op of a game server should ideally be done concurrently to other tasks, as it only rarely requires intervention. To be effective it requires relatively quick responses though. In the long run passing administrative commands from the shell to a server would be very helpful.

prissi

The IP system and the game engine are on very different levels. I see no problem in implementing a kicking feature, but I find it very difficult to avoid joining again (especially since getting a different IP is not very hard.)

An coomand line for the public player would be certainly helpful for administration. Anyone who wants to program this?

VS

Thinking about this, a desperate troll could even DOS by reconnecting often :P

My projects... Tools for messing with Simutrans graphics. Graphic archive - templates and some other stuff for painters. Development logs for most recent information on what is going on. And of course pak128!

sdog

IP can be blocked on the server, is there a need to implement it in the game? Could the ip be indirectly found by kicking the player?

Ashley

#22
Quote from: sdog on March 20, 2011, 01:51:08 AM
IP can be blocked on the server, is there a need to implement it in the game? Could the ip be indirectly found by kicking the player?

There needs to be a way of finding out what the IP of a particular player is at least.

Quote from: prissi on March 19, 2011, 11:06:44 PM
The IP system and the game engine are on very different levels. I see no problem in implementing a kicking feature, but I find it very difficult to avoid joining again (especially since getting a different IP is not very hard.)

If it was possible to find the IP of a player easily then blocking it is trivial using a firewall. Maybe a simple change would be for the game to log the IP address/player name for all actions, e.g. instead of:

Warning: nwc_tool_t::rdwr:#011rdwr id=6 client=3 plnr=9 pos=157,239,2 wkzid=8218 defpar=b,403,57,-2,162 init=1 exec=1 flags=0

You get:

Warning: nwc_tool_t::rdwr:#011rdwr id=6 client=3 clientname=H-Trans ipaddr=12.34.56.78 plnr=9 pos=157,239,2 wkzid=8218 defpar=b,403,57,-2,162 init=1 exec=1 flags=0

Using logging filters it'd then be possible to easily identify which actions are attributable to which players, build up a mapping of player/IP address combinations etc. This would hopefully be a simple change?

Quote from: prissi on March 19, 2011, 11:06:44 PM
An coomand line for the public player would be certainly helpful for administration. Anyone who wants to program this?

I'd be happy to produce a command-line tool to talk to the game (already have one which can query the gameinfo for example). If someone else could expose public-player commands via the network interface...
Use Firefox? Interested in IPv6? Try SixOrNot the IPv6 status indicator for Firefox.
Why not try playing Simutrans online? See the Game Servers board for details.

Dwachs

Quote from: prissi on March 19, 2011, 11:06:44 PM
An coomand line for the public player would be certainly helpful for administration. Anyone who wants to program this?

I started to write a command line tool similar to makeobj, which reuses the network code. Its a non-trivial task to reduce dependencies such that the resulting program does not need the whole game engine compiled in.

Already implemented: send command to server, such that the servers sends gameinfo to his master server.
Parsley, sage, rosemary, and maggikraut.

Ashley

Sounds good Dwachs :)

One other thing I'd love to see, could we have a dialog which opens up when you connect to the server for the first time and displays some text loaded from a text-file specified on the command line? This could allow the admin to give information to new players and allow us to post server rules etc.
Use Firefox? Interested in IPv6? Try SixOrNot the IPv6 status indicator for Firefox.
Why not try playing Simutrans online? See the Game Servers board for details.

IgorEliezer

When I had suggested a command line console, I was trying to mean something like this:



Some multiplayer games I've seen use the same "chat window" to support command input.

Ashley

Good interface that would be.

Then you could administer the server from the command line by using a simple network program to send chat messages in to the server. Obviously these would only work if they were coming from the admin player (properly authenticated).

I wonder how much effort would be involved in writing a client which can set up session with the server. You could then just send arbitrary commands...
Use Firefox? Interested in IPv6? Try SixOrNot the IPv6 status indicator for Firefox.
Why not try playing Simutrans online? See the Game Servers board for details.

Dwachs

#27
First iteration of such a tool is now committed to trunk. You will find it in trunk/nettool with its own makefile.

It is a command-line tool.  In order to be able to use it, the server must have a server password set:

  • simuconf.tab: Parameter server_admin_pw, ie write server_admin_pw=my_secret_password in tab file
  • command-line option for simutrans server: -server_admin_pw my_secret_password

Currently implemented features:

      Usage:

         NetTool <server-url> announce
            Tell the server to call back to its masterserver

         NetTool <server-url> <passwd> clients
            Receive list of playing clients from server

         NetTool <server-url> <passwd> kick-client <client-number>
         NetTool <server-url> <passwd> ban-client  <client-number>
            Kick / ban client

         NetTool <server-url> <passwd> ban   <ip-range>
         NetTool <server-url> <passwd> unban <ip-range>
            Ban / unban ip-range

         NetTool <server-url> <passwd> say <message>
            Send admin message to all clients

         with QUIET as first arg copyright message will be omitted

I could only test for linux/gcc and windows/visual studio compiler. These versions should compile and run. There might be issues with different systems/compilers. Please drop a bug report in this case.
Parsley, sage, rosemary, and maggikraut.

Ashley

That sounds great Dwachs, all the features I was looking for :) I'll see if I can compile it this weekend to test.
Use Firefox? Interested in IPv6? Try SixOrNot the IPv6 status indicator for Firefox.
Why not try playing Simutrans online? See the Game Servers board for details.

prissi

So far the code explicity assumes IPv4 addresses. I think there is some extension needed for you ...

Ashley

#30
Well all my servers run dual-stack, so this should still work. No good reason not to make it IP-version-agnostic though. Using the modern C calls it's exactly as hard.


Edit - one more feature request for this, can we have a command which instructs the server to save the current game out to a specified filename? This would make automated map rotation a bit easier since I want to always save the currently running game before starting a new map. I could just grab the network autosave as I do now but that seems like it could be unreliable in practice.
Use Firefox? Interested in IPv6? Try SixOrNot the IPv6 status indicator for Firefox.
Why not try playing Simutrans online? See the Game Servers board for details.

prissi

Just joining will save it on the server ... but such a command will inevitely desync all players, resp. they have to do the same saving/reloading.

Ashley

Does the game get saved if you send a kill signal to the server to shut it down? If so then I can just shut the server down and then copy the save file over. I'd only want to save the game like this when shutting down the server so I can keep an archive copy of the game to make available to those who might want to keep playing it so desyncing/disconnecting the active players wouldn't be an issue since the server would be shut down anyway.
Use Firefox? Interested in IPv6? Try SixOrNot the IPv6 status indicator for Firefox.
Why not try playing Simutrans online? See the Game Servers board for details.

prissi

No, since signal handling is not very consistent among platforms. Furthermore some will give you only a limited amount of time when killed, other will not allow any OS calls during signal handling. Some will have no signals at all. But of course one could make a "server shutdown command" which tells everybody server goes down in xxx minutes/seconds and then also save the game.

Ashley

A shutdown server command sounds good to me, preferably one could give it a parameter with a path to save the game to. In terms of warning players of the shutdown/sending messages this could be done via a script which sends messages and then does the shutdown command itself. I hope Dwachs would consider adding this feature :) (Then I'll stop asking for the moon on a stick, I promise!)
Use Firefox? Interested in IPv6? Try SixOrNot the IPv6 status indicator for Firefox.
Why not try playing Simutrans online? See the Game Servers board for details.