Skip to content

Commit

Permalink
v1.4.x (nicknames, fixes, feature improvements)
Browse files Browse the repository at this point in the history
config.json : updated with new values
Help for commands updated, Syntax in new line
Bookmarks & Planet Warps merged in Bookmarks plugin
Changed many commands to be more inline with eachother
Implemented original char name, adapted protection, colored names and
bans to work with original player names
Added /protect_all to change global protection on the fly
Added /nick and /nick_set to enable nickname changing
Removed Planet Warps plugin, as it is included in Bookmarks
Added last_seen to player_list and whois
Added /whoami and /whois works for registered users and up, but
displayed limited information if not admin
Uptime plugin will now also display server version
Removed localization
  • Loading branch information
teihoo committed Mar 10, 2014
1 parent c5f9320 commit de22a0d
Show file tree
Hide file tree
Showing 23 changed files with 465 additions and 707 deletions.
24 changes: 17 additions & 7 deletions config/config.json.default
@@ -1,6 +1,6 @@
{
"bind_port": 21025,
"bind_address": "",
"bind_port": 21025,
"chat_prefix": "#",
"chattimestamps": true,
"colors": {
Expand Down Expand Up @@ -36,6 +36,9 @@
"bookmarks_plugin": {
"auto_activate": true
},
"brutus_whisper": {
"auto_activate": true
},
"chat_logger": {
"auto_activate": true
},
Expand All @@ -48,6 +51,9 @@
"emotes_plugin": {
"auto_activate": true
},
"fuelgiver_plugin": {
"auto_activate": true
},
"irc": {
"auto_activate": false,
"bot_nickname": "botname",
Expand Down Expand Up @@ -192,18 +198,12 @@
"planet_visitor_announcer_plugin": {
"auto_activate": true
},
"planet_warps_plugin": {
"auto_activate": true
},
"players_plugin": {
"auto_activate": true
},
"plugin_manager": {
"auto_activate": true
},
"pushover_plugin": {
"auto_activate": false
},
"starbound_config_manager": {
"auto_activate": true
},
Expand All @@ -215,13 +215,23 @@
},
"warpy_plugin": {
"auto_activate": true
},
"web_gui": {
"auto_activate": false,
"cookie_token": "",
"ownerpassword": "!!PUT A PASSWORD HERE",
"port": 8083,
"remember_cookie_token": true,
"restart_script": "",
"serverurl": "localhost"
}
},
"plugin_path": "plugins",
"port_check": true,
"reap_time": 10,
"server_connect_timeout": 5,
"starbound_path": "/opt/starbound/",
"server_name": "--ADD NAME--",
"upstream_hostname": "localhost",
"upstream_port": 21024
}
2 changes: 1 addition & 1 deletion plugins/afk_plugin/afk_plugin.py
Expand Up @@ -35,7 +35,7 @@ def load_config(self):

@permissions(UserLevels.GUEST)
def afk(self, data):
""" Marks a user as AFK (Away From Keyboard) Syntax: /afk"""
"""Marks a user as AFK (Away From Keyboard)\nSyntax: /afk"""
if self.protocol.player.name in self.afk_list:
if self.afk_list[self.protocol.player.name] == True:
self.unset_afk_status(self.protocol.player.name)
Expand Down
4 changes: 2 additions & 2 deletions plugins/announcer_plugin/announcer_plugin.py
Expand Up @@ -17,7 +17,7 @@ def after_connect_response(self, data):
c = connect_response().parse(data.data)
if c.success:
self.factory.broadcast(
self.protocol.player.colored_name(self.config.colors) + " joined.", 0, "", "Announcer")
self.protocol.player.colored_name(self.config.colors) + " logged in.", 0, "", "Announcer")
except AttributeError:
return
except:
Expand All @@ -26,6 +26,6 @@ def after_connect_response(self, data):

def on_client_disconnect(self, data):
if self.protocol.player is not None:
self.factory.broadcast(self.protocol.player.colored_name(self.config.colors) + " left.", 0,
self.factory.broadcast(self.protocol.player.colored_name(self.config.colors) + " logged out.", 0,
"", "Announcer")

146 changes: 126 additions & 20 deletions plugins/bookmarks/bookmarks_plugin.py
@@ -1,27 +1,34 @@
import json
#from twisted.internet import reactor
from base_plugin import SimpleCommandPlugin
from plugins.core.player_manager import permissions, UserLevels
from packets import warp_command_write, Packets
from utility_functions import build_packet, move_ship_to_coords
from utility_functions import build_packet # , move_ship_to_coords


class Bookmarks(SimpleCommandPlugin):
"""
Plugin that allows defining planets as personal bookmarks you can /goto to.
Plugin that allows admins to define Planets of Interest (PoI) any player can /poi to.
"""
name = "bookmarks_plugin"
depends = ['command_dispatcher', 'player_manager']
commands = ["bookmark", "remove", "goto"]
commands = ["bookmark", "remove", "goto", "poi_set", "poi_del", "poi"]
auto_activate = True

def activate(self):
super(Bookmarks, self).activate()
self.player_manager = self.plugins['player_manager'].player_manager
try:
with open("./config/bookmarks/pois.json") as f:
self.pois = json.load(f)
except:
self.pois = []

@permissions(UserLevels.GUEST)
def bookmark(self, name):
"""Bookmarks a planet for fast warp routes. Syntax: /bookmark (name)"""
filename = "./plugins/bookmarks/" + self.protocol.player.uuid + ".json"
"""Bookmarks a planet for fast warp routes.\nSyntax: /bookmark (name)"""
filename = "./config/bookmarks/" + self.protocol.player.uuid + ".json"
try:
with open(filename) as f:
self.bookmarks = json.load(f)
Expand All @@ -41,24 +48,26 @@ def bookmark(self, name):
if warps != "":
warps.append(warp[1])
warpnames = "^green;,^yellow; ".join(warps)
self.protocol.send_chat_message("Please, provide a valid bookmark name!\nBookmarks: ^yellow;" + warpnames )
if warpnames == "": warpnames = "^gray;(none)^green;"
self.protocol.send_chat_message(self.bookmark.__doc__)
self.protocol.send_chat_message("Please, provide a valid bookmark name!\nBookmarks: ^yellow;" + warpnames)
return

for warp in self.bookmarks:
if warp[0] == planet:
self.protocol.send_chat_message("The planet you're on is already bookmarked: ^yellow;" + warp[1] )
self.protocol.send_chat_message("The planet you're on is already bookmarked: ^yellow;" + warp[1])
return
if warp[1] == name:
self.protocol.send_chat_message("Bookmark with that name already exists!")
return
self.bookmarks.append([planet, name])
self.protocol.send_chat_message("Bookmark ^yellow;%s^green; added." % name )
self.save()
self.protocol.send_chat_message("Bookmark ^yellow;%s^green; added." % name)
self.savebms()

@permissions(UserLevels.GUEST)
def remove(self, name):
"""Removes current planet from bookmarks. Syntax: /remove (name)"""
filename = "./plugins/bookmarks/" + self.protocol.player.uuid + ".json"
"""Removes current planet from bookmarks.\nSyntax: /remove (name)"""
filename = "./config/bookmarks/" + self.protocol.player.uuid + ".json"
try:
with open(filename) as f:
self.bookmarks = json.load(f)
Expand All @@ -71,21 +80,23 @@ def remove(self, name):
if warps != "":
warps.append(warp[1])
warpnames = "^green;,^yellow; ".join(warps)
self.protocol.send_chat_message("Please, provide a valid bookmark name!\nBookmarks: ^yellow;" + warpnames )
if warpnames == "": warpnames = "^gray;(none)^green;"
self.protocol.send_chat_message(self.remove.__doc__)
self.protocol.send_chat_message("Please, provide a valid bookmark name!\nBookmarks: ^yellow;" + warpnames)
return

for warp in self.bookmarks:
if warp[1] == name:
self.bookmarks.remove(warp)
self.protocol.send_chat_message("Bookmark ^yellow;%s^green; removed." % name )
self.save()
self.protocol.send_chat_message("Bookmark ^yellow;%s^green; removed." % name)
self.savebms()
return
self.protocol.send_chat_message("There is no bookmark named: ^yellow;%s" % name )
self.protocol.send_chat_message("There is no bookmark named: ^yellow;%s" % name)

@permissions(UserLevels.GUEST)
def goto(self, name):
"""Warps your ship to previously bookmarked planet. Syntax: /goto [name] *omit [name] for a list of bookmarks"""
filename = "./plugins/bookmarks/" + self.protocol.player.uuid + ".json"
"""Warps your ship to a previously bookmarked planet.\nSyntax: /goto [name] *omit name for a list of bookmarks"""
filename = "./config/bookmarks/" + self.protocol.player.uuid + ".json"
try:
with open(filename) as f:
self.bookmarks = json.load(f)
Expand All @@ -98,7 +109,9 @@ def goto(self, name):
if warps != "":
warps.append(warp[1])
warpnames = "^green;,^yellow; ".join(warps)
self.protocol.send_chat_message("Bookmarks: ^yellow;" + warpnames )
if warpnames == "": warpnames = "^gray;(none)^green;"
self.protocol.send_chat_message(self.goto.__doc__)
self.protocol.send_chat_message("Bookmarks: ^yellow;" + warpnames)
return

on_ship = self.protocol.player.on_ship
Expand All @@ -121,13 +134,106 @@ def goto(self, name):
self.protocol.client_protocol.transport.write(warp_packet)
self.protocol.send_chat_message("Warp drive engaged! Warping to ^yellow;%s^green;." % name)
return
self.protocol.send_chat_message("There is no bookmark named: ^yellow;%s" % name )
self.protocol.send_chat_message("There is no bookmark named: ^yellow;%s" % name)

# Commands that allows admins to define Planets of Interest (PoI) any player can /poi to.
@permissions(UserLevels.ADMIN)
def poi_set(self, name):
"""Sets current planet as Planet of Interest (PoI).\nSyntax: /poi_set (name)"""
name = " ".join(name).strip().strip("\t")
if len(name) == 0:
self.protocol.send_chat_message(self.poi_set.__doc__)
return
planet = self.protocol.player.planet
on_ship = self.protocol.player.on_ship
if on_ship:
self.protocol.send_chat_message("You need to be on a planet!")
return
for warp in self.pois:
if warp[0] == planet:
self.protocol.send_chat_message("The planet you're on is already set as a PoI: ^yellow;" + warp[1])
return
if warp[1] == name:
self.protocol.send_chat_message("Planet of Interest named ^yellow;%s^green; already exists." % name)
return
self.pois.append([planet, name])
self.protocol.send_chat_message("Planet of Interest ^yellow;%s^green; added." % name)
self.savepois()

@permissions(UserLevels.ADMIN)
def poi_del(self, name):
"""Removes current planet as Planet of Interest (PoI).\nSyntax: /poi_del (name)"""
name = " ".join(name).strip().strip("\t")
if len(name) == 0:
self.protocol.send_chat_message(self.poi_del.__doc__)
return
for warp in self.pois:
if warp[1] == name:
self.pois.remove(warp)
self.protocol.send_chat_message("Planet of Interest ^yellow;%s^green; removed." % name)
self.savepois()
return
self.protocol.send_chat_message("There is no PoI named: ^yellow;%s^green;." % name)

@permissions(UserLevels.GUEST)
def poi(self, name):
"""Warps your ship to a Planet of Interest (PoI).\nSyntax: /poi [name] *omit name for a list of PoI's"""
name = " ".join(name).strip().strip("\t")
if len(name) == 0:
warps = []
for warp in self.pois:
if warps != "":
warps.append(warp[1])
warpnames = "^green;, ^yellow;".join(warps)
if warpnames == "": warpnames = "^gray;(none)^green;"
self.protocol.send_chat_message(self.poi.__doc__)
self.protocol.send_chat_message("List of PoI's: ^yellow;" + warpnames)
return

on_ship = self.protocol.player.on_ship
if not on_ship:
self.protocol.send_chat_message("You need to be on a ship!")
return

for warp in self.pois:
if warp[1] == name:
sector, x, y, z, planet, satellite = warp[0].split(":")
x, y, z, planet, satellite = map(int, (x, y, z, planet, satellite))
warp_packet = build_packet(Packets.WARP_COMMAND,
warp_command_write(t="MOVE_SHIP",
sector=sector,
x=x,
y=y,
z=z,
planet=planet,
satellite=satellite))
self.protocol.client_protocol.transport.write(warp_packet)
self.protocol.send_chat_message("Warp drive engaged! Warping to ^yellow;%s^green;." % name)
#reactor.callLater(1, self.beam_to_planet, name) # enable this for 1s delayed warping of a player
return
self.protocol.send_chat_message("There is no PoI named ^yellow;%s^green;." % name)

def save(self):
filename = "./plugins/bookmarks/" + self.protocol.player.uuid + ".json"
def savebms(self):
filename = "./config/bookmarks/" + self.protocol.player.uuid + ".json"
try:
with open(filename, "w") as f:
json.dump(self.bookmarks, f)
except:
self.logger.exception("Couldn't save bookmarks.")
raise

def savepois(self):
try:
with open("./config/bookmarks/pois.json", "w") as f:
json.dump(self.pois, f)
except:
self.logger.exception("Couldn't save PoI's.")
raise

def beam_to_planet(self, where):
warp_packet = build_packet(Packets.WARP_COMMAND, warp_command_write(t="WARP_DOWN"))
self.protocol.client_protocol.transport.write(warp_packet)
self.protocol.send_chat_message("Beamed down to ^yellow;%s^green; and your ship will arrive soon." % where)
self.factory.broadcast_planet(
"%s^green; beamed down to the planet" % self.protocol.player.colored_name(self.config.colors),
planet=self.protocol.player.planet)
21 changes: 7 additions & 14 deletions plugins/brutus_whisper/brutus_whisper.py
Expand Up @@ -24,7 +24,7 @@ def activate(self):

@permissions(UserLevels.GUEST)
def whisper(self, data):
"""Sends a message to target player. Syntax: /whisper (player) (msg)"""
"""Sends a message to target player.\nSyntax: /whisper (player) (msg)"""
now = datetime.now()
if self.config.chattimestamps:
timestamp = "^orange;<" + now.strftime("%H:%M") + "> "
Expand All @@ -47,7 +47,7 @@ def whisper(self, data):
self.protocol.send_chat_message(self.whisper.__doc__)

def reply(self, data):
"""Replies to last player who whispered you. Syntax: /r (msg)"""
"""Replies to last player who whispered you.\nSyntax: /r (msg)"""
if len(data) == 0:
self.protocol.send_chat_message(self.reply.__doc__)
return
Expand All @@ -61,12 +61,12 @@ def reply(self, data):

@permissions(UserLevels.GUEST)
def w(self, data):
"""Sends a message to target player. Syntax: /whisper (player) (msg)"""
"""Sends a message to target player.\nSyntax: /whisper (player) (msg)"""
self.whisper(data)

@permissions(UserLevels.GUEST)
def r(self, data):
"""Replies to last player who whispered you. Syntax: /r (msg)"""
"""Replies to last player who whispered you.\nSyntax: /r (msg)"""
self.reply(data)

def sendWhisper(self, target, message):
Expand Down Expand Up @@ -99,27 +99,20 @@ def sendWhisper(self, target, message):
for key, value in self.sspy_enabled_dict.iteritems():
sspy_player = self.player_manager.get_logged_in_by_name(key)
if sspy_player is not None:
if sspy_player.access_level >= UserLevels.ADMIN and value == True:
if sspy_player.access_level >= UserLevels.OWNER and value == True:
protocol = self.factory.protocols[sspy_player.protocol]
protocol.send_chat_message("^red;" + timestamp + "%sSS: ^cyan;<%s ^green;-> %s^cyan;> ^green;%s" % (self.config.colors["admin"], strFrom, strTo, message))

@permissions(UserLevels.ADMIN)
@permissions(UserLevels.OWNER)
def ss(self, data):
"""Toggles viewing of other players whispers. Syntax: /ss""" #[on|off]"""
# if len(data) == 0:
# self.protocol.send_chat_message(self.socialspy.__doc__)
val = " ".join(data)
"""Toggles viewing of other players whispers.\nSyntax: /ss"""
try:
if not self.sspy_enabled_dict[self.protocol.player.name]:
# if val.lower() in ["on", "true"]:
self.sspy_enabled_dict[self.protocol.player.name] = True
self.protocol.send_chat_message("SocialSpy has been ^yellow;enabled^green;!")
else:
# elif val.lower() in ["off", "false"]:
self.sspy_enabled_dict[self.protocol.player.name] = False
self.protocol.send_chat_message("SocialSpy has been ^red;disabled^green;!")
# else:
# self.protocol.send_chat_message("Invalid value! Permitted values are \"on\", \"true\", \"off\", \"false\"")
except:
if len(data) != 0 and " ".join(data).lower() in ["on", "true"]:
self.sspy_enabled_dict[self.protocol.player.name] = True
Expand Down

0 comments on commit de22a0d

Please sign in to comment.