support GameRulesStateChanged
better tostring