Update bf2.py script for a more viable ACL structure

This commit is contained in:
Stefan Hacker
2010-12-31 15:05:18 +01:00
parent 852549c44c
commit 60081ec154

View File

@@ -43,7 +43,6 @@ try:
except ImportError: # Fallback for python < 2.6 except ImportError: # Fallback for python < 2.6
import simplejson as json import simplejson as json
class bf2(MumoModule): class bf2(MumoModule):
default_config = {'bf2':( default_config = {'bf2':(
('gamecount', int, 1), ('gamecount', int, 1),
@@ -56,6 +55,7 @@ class bf2(MumoModule):
('base', int, 0), ('base', int, 0),
('left', int, -1), ('left', int, -1),
('blufor', int, -1),
('blufor_commander', int, -1), ('blufor_commander', int, -1),
('blufor_no_squad', int, -1), ('blufor_no_squad', int, -1),
('blufor_alpha_squad', int, -1), ('blufor_alpha_squad', int, -1),
@@ -77,6 +77,7 @@ class bf2(MumoModule):
('blufor_india_squad', int, -1), ('blufor_india_squad', int, -1),
('blufor_india_squad_leader', int, -1), ('blufor_india_squad_leader', int, -1),
('opfor', int, -1),
('opfor_commander', int, -1), ('opfor_commander', int, -1),
('opfor_no_squad', int, -1), ('opfor_no_squad', int, -1),
('opfor_alpha_squad', int, -1), ('opfor_alpha_squad', int, -1),
@@ -115,8 +116,8 @@ class bf2(MumoModule):
servers = set() servers = set()
for i in range(cfg.bf2.gamecount): for i in range(cfg.bf2.gamecount):
try: try:
servers.add(getattr(cfg, "g%d" % i).mumble_server) servers.add(cfg["g%d" % i].mumble_server)
except AttributeError: except KeyError:
log.error("Invalid configuration. Game configuration for 'g%d' not found.", i) log.error("Invalid configuration. Game configuration for 'g%d' not found.", i)
return return
@@ -175,51 +176,71 @@ class bf2(MumoModule):
log.debug("User '%s' (%d|%d) on server %d now linked", newstate.name, newstate.session, newstate.userid, sid) log.debug("User '%s' (%d|%d) on server %d now linked", newstate.name, newstate.session, newstate.userid, sid)
server.addUserToGroup(0, session, "bf2_linked") server.addUserToGroup(0, session, "bf2_linked")
if (opi != npi or opc != opi) and opi and opc: if opi and opc:
log.debug("Removing user '%s' (%d|%d) on server %d from groups of game %s", newstate.name, newstate.session, newstate.userid, sid, og or ogcfgname) log.debug("Removing user '%s' (%d|%d) on server %d from groups of game %s", newstate.name, newstate.session, newstate.userid, sid, og or ogcfgname)
server.removeUserFromGroup(ogcfg.base, session, "bf2%s_%s_commander" % (og, opi["team"])) server.removeUserFromGroup(ogcfg["base"], session, "bf2_%s_game" % (og or ogcfgname))
server.removeUserFromGroup(ogcfg.base, session, "bf2%s_%s_%s_squad_leader" % (og, opi["team"], self.id_to_squad_name[opi["squad"]]))
server.removeUserFromGroup(ogcfg.base, session, "bf2%s_%s_%s_squad" % (og, opi["team"], self.id_to_squad_name[opi["squad"]]))
server.removeUserFromGroup(ogcfg.base, session, "bf2%s_%s" % (og, opi["team"]))
squadname = self.id_to_squad_name[opi["squad"]]
if opi["squad"] != 0:
server.removeUserFromGroup(ogcfg["%s_commander" % opi["team"]], session, "bf2_commander")
server.removeUserFromGroup(ogcfg["%s_%s_squad_leader" % (opi["team"], squadname)], session, "bf2_squad_leader")
server.removeUserFromGroup(ogcfg["%s_%s_squad_leader" % (opi["team"], squadname)], session, "bf2_%s_squad_leader" % squadname)
server.removeUserFromGroup(ogcfg["%s_%s_squad" % (opi["team"], squadname)], session, "bf2_%s_squad_member" % squadname)
server.removeUserFromGroup(ogcfg[opi["team"]], session, "bf2_team")
channame = "left" channame = "left"
newstate.channel = ogcfg.left newstate.channel = ogcfg["left"]
if npc and npi: if npc and npi:
log.debug("Updating user '%s' (%d|%d) on server %d in game %s: %s", newstate.name, newstate.session, newstate.userid, sid, ng or ngcfgname, str(npi)) log.debug("Updating user '%s' (%d|%d) on server %d in game %s: %s", newstate.name, newstate.session, newstate.userid, sid, ng or ngcfgname, str(npi))
# First add to team group squadname = self.id_to_squad_name[npi["squad"]]
group = "bf2%s_%s" % (ng, npi["team"])
server.addUserToGroup(ngcfg.base, session, group) # Add to game group
log.debug("Added '%s' @ %s to group %s", newstate.name, ng or ngcfgname, group) location = "base"
group = "bf2_%s_game" % (ng or ngcfgname)
server.addUserToGroup(ngcfg[location], session, group)
log.debug("Added '%s' @ %s to group %s in %s", newstate.name, ng or ngcfgname, group, location)
# Then add to team group
location = npi["team"]
group = "bf2_team"
server.addUserToGroup(ngcfg[location], session, group)
log.debug("Added '%s' @ %s to group %s in %s", newstate.name, ng or ngcfgname, group, location)
# Then add to squad group # Then add to squad group
group = "bf2%s_%s_%s_squad" % (ng, npi["team"], self.id_to_squad_name[npi["squad"]]) location = "%s_%s_squad" % (npi["team"], squadname)
server.addUserToGroup(ngcfg.base, session, group) group = "bf2_%s_squad_member" % squadname
log.debug("Added '%s' @ %s to group %s", newstate.name, ng or ngcfgname, group) server.addUserToGroup(ngcfg[location], session, group)
log.debug("Added '%s' @ %s to group %s in %s", newstate.name, ng or ngcfgname, group, location)
channame = "%s_%s_squad" % (npi["team"], self.id_to_squad_name[npi["squad"]]) channame = "%s_%s_squad" % (npi["team"], self.id_to_squad_name[npi["squad"]])
newstate.channel = getattr(ngcfg, channame) newstate.channel = ngcfg[channame]
if npi["squad_leader"]: if npi["squad_leader"]:
# In case the leader flag is set add to leader group # In case the leader flag is set add to leader group
group = "bf2%s_%s_%s_squad_leader" % (ng, npi["team"], self.id_to_squad_name[npi["squad"]]) location = "%s_%s_squad_leader" % (npi["team"], squadname)
server.addUserToGroup(ngcfg.base, session, group) group = "bf2_%s_squad_leader" % squadname
log.debug("Added '%s' @ %s to group %s", newstate.name, ng or ngcfgname, group) server.addUserToGroup(ngcfg[location], session, group)
log.debug("Added '%s' @ %s to group %s in %s", newstate.name, ng or ngcfgname, group, location)
group = "bf2_squad_leader"
server.addUserToGroup(ngcfg[location], session, group)
log.debug("Added '%s' @ %s to group %s in %s", newstate.name, ng or ngcfgname, group, location)
# Override previous moves # Override previous moves
channame = "%s_%s_squad_leader" % (npi["team"], self.id_to_squad_name[npi["squad"]]) channame = "%s_%s_squad_leader" % (npi["team"], self.id_to_squad_name[npi["squad"]])
newstate.channel = getattr(ngcfg, channame) newstate.channel = ngcfg[channame]
if npi["commander"]: if npi["commander"]:
group = "bf2%s_%s_commander" % (ng, npi["team"]) location = "%s_commander" % npi["team"]
server.addUserToGroup(ngcfg.base, session, group) group = "bf2_commander"
log.debug("Added '%s' @ %s to group %s", newstate.name, ng or ngcfgname, group) server.addUserToGroup(ngcfg[location], session, group)
log.debug("Added '%s' @ %s to group %s in %s", newstate.name, ng or ngcfgname, group, location)
# Override previous moves # Override previous moves
channame = "%s_commander" % npi["team"] channame = "%s_commander" % npi["team"]
newstate.channel = getattr(ngcfg, channame) newstate.channel = ngcfg[channame]
if oli and not nli: if oli and not nli:
log.debug("User '%s' (%d|%d) on server %d no longer linked", newstate.name, newstate.session, newstate.userid, sid) log.debug("User '%s' (%d|%d) on server %d no longer linked", newstate.name, newstate.session, newstate.userid, sid)
@@ -256,8 +277,10 @@ class bf2(MumoModule):
state.context != self.sessions[sid][state.session].context: state.context != self.sessions[sid][state.session].context:
# identity or context changed => update # identity or context changed => update
update = True update = True
else: else: # id and context didn't change hence the old data must still be valid
state.is_linked = self.sessions[sid][state.session].is_linked state.is_linked = self.sessions[sid][state.session].is_linked
state.parsedcontext = self.sessions[sid][state.session].parsedcontext
state.parsedidentity = self.sessions[sid][state.session].parsedidentity
else: else:
if state.identity or state.context: if state.identity or state.context:
# New user with engaged plugin => update # New user with engaged plugin => update