Skip to content

Commit

Permalink
Protection changes and org_name fixes
Browse files Browse the repository at this point in the history
Removed projectile protection for custom planet protection, as it uses
way too much CPU checking planets. It works only for guests when
protect_everything is enabled
Changed protection and claims to always store original name and check by
original name
Added claims to config, also added "bad_packets_mild" which are a mild
version of protection (can interact, open container, loot stuff)
  • Loading branch information
teihoo committed Mar 18, 2014
1 parent f28d6a0 commit 866d032
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 45 deletions.
11 changes: 11 additions & 0 deletions config/config.json.default
Expand Up @@ -42,6 +42,10 @@
"chat_logger": {
"auto_activate": true
},
"claims": {
"auto_activate": true,
"max_claims": 5
},
"colored_names_plugin": {
"auto_activate": true
},
Expand Down Expand Up @@ -108,6 +112,13 @@
"REQUEST_DROP",
"MODIFY_TILE_LIST"
],
"bad_packets_mild": [
"CONNECT_WIRE",
"DISCONNECT_ALL_WIRES",
"DAMAGE_TILE",
"DAMAGE_TILE_GROUP",
"MODIFY_TILE_LIST"
],
"blacklist": [
"bomb",
"bombblockexplosion",
Expand Down
14 changes: 3 additions & 11 deletions plugins/claims/claims_plugin.py
Expand Up @@ -54,25 +54,19 @@ def claim(self, data):
on_ship = self.protocol.player.on_ship
if len(data) == 0:
addplayer = self.protocol.player.org_name
for regex in self.regexes: # Replace problematic chars in client name
addplayer = re.sub(regex, "", addplayer)
first_name_color = self.protocol.player.colored_name(self.config.colors)
else:
addplayer = data[0]
try:
addplayer, rest = extract_name(data)
addplayer = self.player_manager.get_by_name(addplayer).org_name
first_name_color = self.player_manager.get_by_org_name(addplayer).colored_name(self.config.colors)
for regex in self.regexes: # Replace problematic chars in client name
addplayer = re.sub(regex, "", addplayer)
except:
self.protocol.send_chat_message("There's no player named: ^yellow;%s" % str(addplayer))
return

first_name = str(addplayer)
orgplayer = self.protocol.player.org_name
for regex in self.regexes: # Replace problematic chars in client name
orgplayer = re.sub(regex, "", orgplayer)

try:
count = 1
Expand Down Expand Up @@ -144,8 +138,10 @@ def claim_list(self, data):
self.protocol.send_chat_message("Claimed ^cyan;%s^green; of max ^red;%s^green; claimed planets." % (
str(my_storage['claims']), str(self.max_claims)))
self.protocol.send_chat_message("Players registered to this planet: ^yellow;" + '^green;, ^yellow;'.join(
self.player_planets[planet]).replace('[', '').replace(']', '').replace("'", ''))
self.player_planets[planet]).replace('[', '').replace(']', '')) # .replace("'", '')
else:
self.protocol.send_chat_message("Claimed ^cyan;%s^green; of max ^red;%s^green; claimed planets." % (
str(my_storage['claims']), str(self.max_claims)))
self.protocol.send_chat_message("Planet has not been claimed!")

@permissions(UserLevels.GUEST)
Expand All @@ -166,17 +162,13 @@ def unclaim(self, data):
#player_name = self.protocol.player.name
if len(data) == 0:
addplayer = self.protocol.player.org_name
for regex in self.regexes: # Replace problematic chars in client name
addplayer = re.sub(regex, "", addplayer)
first_name_color = self.protocol.player.colored_name(self.config.colors)
else:
addplayer, rest = extract_name(data)
first_name_color = addplayer

first_name = str(addplayer)
orgplayer = self.protocol.player.org_name
for regex in self.regexes: # Replace problematic chars in client name
orgplayer = re.sub(regex, "", orgplayer)

if on_ship:
self.protocol.send_chat_message("Can't claim ships (at the moment)")
Expand Down
8 changes: 4 additions & 4 deletions plugins/core/player_manager/manager.py
Expand Up @@ -255,12 +255,12 @@ def fetch_or_create(self, uuid, name, org_name, ip, protocol=None):
raise Banned
if self.check_bans(org_name):
raise Banned
if (self.get_by_name(name) and not self.get_by_org_name(org_name)) or (self.get_by_name(name).uuid != self.get_by_org_name(org_name).uuid):
while (self.get_by_name(name) and not self.get_by_org_name(org_name)) or (
self.get_by_name(name) and self.get_by_org_name(org_name) and self.get_by_name(
name).uuid != self.get_by_org_name(org_name).uuid):
logger.info("Got a duplicate nickname, affixing _ to name")
name += "_"
#while self.whois(name):
# logger.info("Got a duplicate nickname, affixing _ to name")
# name += "_"

player = session.query(Player).filter_by(uuid=uuid).first()
if player:
if player.name != name:
Expand Down
22 changes: 11 additions & 11 deletions plugins/core/player_manager/plugin.py
Expand Up @@ -34,23 +34,23 @@ def check_logged_in(self):
def on_client_connect(self, data):
client_data = client_connect().parse(data.data)
try:
original_name = client_data.name
changed_name = client_data.name
for regex in self.regexes: # Replace problematic chars in client name
client_data.name = re.sub(regex, "", client_data.name)
changed_name = re.sub(regex, "", changed_name)

if len(client_data.name.strip()) == 0: # If the username is nothing but spaces.
raise NameError("Your name must not be empty!")

if client_data.name != original_name: # Logging changed username
if client_data.name != changed_name: # Logging changed username
self.logger.info("Player tried to log in with name %s, replaced with %s.",
original_name, client_data.name)
client_data.name, changed_name)

#changed_player = self.player_manager.get_by_uuid(client_data.uuid)
#if changed_player is not None and changed_player.org_name != original_name:
# self.logger.info("Got player with changed org_name. Fetching randomized name!")
# original_name = changed_player.org_name
changed_player = self.player_manager.get_by_uuid(client_data.uuid)
if changed_player is not None and changed_player.name != changed_name:
self.logger.info("Got player with changed nickname. Fetching nickname!")
changed_name = changed_player.name

duplicate_player = self.player_manager.get_by_org_name(original_name)
duplicate_player = self.player_manager.get_by_org_name(client_data.name)
if duplicate_player is not None and duplicate_player.uuid != client_data.uuid:
raise NameError(
"The name of this character is already taken on the server!\nPlease, create a new character with a different name or use Starcheat and change the name.")
Expand All @@ -59,6 +59,8 @@ def on_client_connect(self, data):
#original_name += rnd_append
#client_data.name += rnd_append

original_name = client_data.name
client_data.name = changed_name
self.protocol.player = self.player_manager.fetch_or_create(
name=client_data.name,
org_name=original_name,
Expand Down Expand Up @@ -143,8 +145,6 @@ def nick(self, data):
org_name = self.protocol.player.org_name
for regex in self.regexes: # Replace problematic chars in client name
name = re.sub(regex, "", name)
for regex in self.regexes: # Replace problematic chars in client original name
org_name = re.sub(regex, "", org_name)
if self.player_manager.get_by_name(name) or (self.player_manager.get_by_org_name(name) and org_name != name):
self.protocol.send_chat_message("There's already a player by that name.")
else:
Expand Down
27 changes: 8 additions & 19 deletions plugins/planet_protect/planet_protect_plugin.py
Expand Up @@ -34,8 +34,6 @@ def planet_check(self):
return True
elif self.protocol.player.planet in self.protected_planets and self.protocol.player.access_level < UserLevels.ADMIN:
name = self.protocol.player.org_name
for regex in self.regexes: # Replace problematic chars in client name
name = re.sub(regex, "", name)
if name in self.player_planets[self.protocol.player.planet]:
return True
else:
Expand All @@ -51,17 +49,13 @@ def protect(self, data):
on_ship = self.protocol.player.on_ship
if len(data) == 0:
addplayer = self.protocol.player.org_name
for regex in self.regexes: # Replace problematic chars in client name
addplayer = re.sub(regex, "", addplayer)
first_name_color = self.protocol.player.colored_name(self.config.colors)
else:
addplayer = data[0]
try:
addplayer, rest = extract_name(data)
addplayer = self.player_manager.get_by_name(addplayer).org_name
first_name_color = self.player_manager.get_by_org_name(addplayer).colored_name(self.config.colors)
for regex in self.regexes: # Replace problematic chars in client name
addplayer = re.sub(regex, "", addplayer)
except:
self.protocol.send_chat_message("There's no player named: ^yellow;%s" % str(addplayer))
return
Expand Down Expand Up @@ -123,7 +117,7 @@ def protect_list(self, data):
return
if planet in self.player_planets:
self.protocol.send_chat_message("Players registered to this planet: ^yellow;" + '^green;, ^yellow;'.join(
self.player_planets[planet]).replace('[', '').replace(']', '').replace("'", ''))
self.player_planets[planet]).replace('[', '').replace(']', '')) # .replace("'", '')
else:
self.protocol.send_chat_message("Planet is not protected!")

Expand All @@ -134,8 +128,6 @@ def unprotect(self, data):
on_ship = self.protocol.player.on_ship
if len(data) == 0:
addplayer = self.protocol.player.org_name
for regex in self.regexes: # Replace problematic chars in client name
addplayer = re.sub(regex, "", addplayer)
first_name_color = self.protocol.player.colored_name(self.config.colors)
else:
addplayer, rest = extract_name(data)
Expand Down Expand Up @@ -169,26 +161,25 @@ def save(self):
self.config.save() #we want to save permissions just in case

def on_entity_create(self, data):
if self.protocol.player.on_ship:
return True
elif self.protocol.player.planet in self.protected_planets and self.protocol.player.access_level < UserLevels.ADMIN:
entities = entity_create.parse(data.data)
"""Projectile protection check"""
"""
if self.protocol.player.planet in self.protected_planets and self.protocol.player.access_level < UserLevels.ADMIN:
name = self.protocol.player.org_name
for regex in self.regexes: # Replace problematic chars in client name
name = re.sub(regex, "", name)
if name in self.player_planets[self.protocol.player.planet]:
return True
else:
entities = entity_create.parse(data.data)
for entity in entities.entity:
if entity.entity_type == EntityType.PROJECTILE:
if self.block_all: return False
#if self.block_all: return False
p_type = star_string("").parse(entity.entity)
if p_type in self.blacklist:
self.logger.info(
"Player %s attempted to use a prohibited projectile, %s, on a protected planet.",
self.protocol.player.org_name, p_type)
return False
elif self.protect_everything and self.protocol.player.access_level < UserLevels.REGISTERED:
"""
if self.protect_everything and self.protocol.player.access_level < UserLevels.REGISTERED and not self.protocol.player.on_ship:
entities = entity_create.parse(data.data)
for entity in entities.entity:
if entity.entity_type == EntityType.PROJECTILE:
Expand All @@ -199,5 +190,3 @@ def on_entity_create(self, data):
"Player %s attempted to use a prohibited projectile, %s, on a protected planet.",
self.protocol.player.org_name, p_type)
return False
else:
return True

0 comments on commit 866d032

Please sign in to comment.