comparison orpg/networking/gsclient.py @ 28:ff154cf3350c ornery-orc

Traipse 'OpenRPG' {100203-00} Traipse is a distribution of OpenRPG that is designed to be easy to setup and go. Traipse also makes it easy for developers to work on code without fear of sacrifice. 'Ornery-Orc' continues the trend of 'Grumpy' and adds fixes to the code. 'Ornery-Orc's main goal is to offer more advanced features and enhance the productivity of the user. Update Summary (Stable) New Features: New Bookmarks Feature New 'boot' command to remote admin New confirmation window for sent nodes Miniatures Layer pop up box allows users to turn off Mini labels, from FlexiRPG New Zoom Mouse plugin added New Images added to Plugin UI Switching to Element Tree New Map efficiency, from FlexiRPG New Status Bar to Update Manager New TrueDebug Class in orpg_log (See documentation for usage) New Portable Mercurial New Tip of the Day, from Core and community New Reference Syntax added for custom PC sheets New Child Reference for gametree New Parent Reference for gametree New Gametree Recursion method, mapping, context sensitivity, and effeciency.. New Features node with bonus nodes and Node Referencing help added New Dieroller structure from Core New DieRoller portability for odd Dice New 7th Sea die roller; ie [7k3] = [7d10.takeHighest(3).open(10)] New 'Mythos' System die roller added New vs. die roller method for WoD; ie [3v3] = [3d10.vs(3)]. Included for Mythos roller also New Warhammer FRPG Die Roller (Special thanks to Puu-san for the support) New EZ_Tree Reference system. Push a button, Traipse the tree, get a reference (Beta!) New Grids act more like Spreadsheets in Use mode, with Auto Calc Fixes: Fix to allow for portability to an OpenSUSE linux OS Fix to mplay_client for Fedora and OpenSUSE Fix to Text based Server Fix to Remote Admin Commands Fix to Pretty Print, from Core Fix to Splitter Nodes not being created Fix to massive amounts of images loading, from Core Fix to Map from gametree not showing to all clients Fix to gametree about menus Fix to Password Manager check on startup Fix to PC Sheets from tool nodes. They now use the tabber_panel Fix to Whiteboard ID to prevent random line or text deleting. Fixes to Server, Remote Server, and Server GUI Fix to Update Manager; cleaner clode for saved repositories Fixes made to Settings Panel and now reactive settings when Ok is pressed Fixes to Alternity roller's attack roll. Uses a simple Tuple instead of a Splice Fix to Use panel of Forms and Tabbers. Now longer enters design mode Fix made Image Fetching. New fetching image and new failed image Fix to whiteboard ID's to prevent non updated clients from ruining the fix. default_manifest.xml renamed to default_upmana.xml
author sirebral
date Wed, 03 Feb 2010 22:16:49 -0600
parents 97265586402b
children d02e9197c066
comparison
equal deleted inserted replaced
27:51428d30c59e 28:ff154cf3350c
19 # 19 #
20 # File: gsclient.py 20 # File: gsclient.py
21 # Author: Chris Davis 21 # Author: Chris Davis
22 # Maintainer: 22 # Maintainer:
23 # Version: 23 # Version:
24 # $Id: gsclient.py,v 1.53 2007/10/25 21:49:34 digitalxero Exp $ 24 # $Id: gsclient.py,v Traipse 'Ornery-Orc' prof.ebral Exp $
25 # 25 #
26 # Description: The file contains code for the game server browser 26 # Description: The file contains code for the game server browser
27 # 27 #
28 28
29 __version__ = "$Id: gsclient.py,v 1.53 2007/10/25 21:49:34 digitalxero Exp $" 29 from __future__ import with_statement
30 __version__ = "$Id: gsclient.py,v Traipse 'Ornery-Orc' prof.ebral Exp $"
31
32 import meta_server_lib
33 import orpg.tools.rgbhex
34 import traceback
30 35
31 from orpg.dirpath import dir_struct 36 from orpg.dirpath import dir_struct
32 from orpg.orpg_windows import * 37 from orpg.orpg_windows import *
33 import meta_server_lib 38 from orpg.tools.validate import validate
34 import orpg.tools.orpg_settings 39 from orpg.orpgCore import component
35 from orpg.tools.orpg_settings import settings 40 from orpg.tools.orpg_settings import settings
36 import orpg.tools.rgbhex 41 from orpg.tools.orpg_log import debug
37 from orpg.orpgCore import component 42
38 import traceback 43 from xml.etree.ElementTree import ElementTree, Element
44 from xml.etree.ElementTree import fromstring, tostring
39 45
40 gs_host = 1 46 gs_host = 1
41 gs_join = 2 47 gs_join = 2
42 # constants 48 # constants
43
44 LIST_SERVER = wx.NewId()
45 LIST_ROOM = wx.NewId()
46 ADDRESS = wx.NewId()
47 GS_CONNECT = wx.NewId()
48 GS_DISCONNECT = wx.NewId()
49 GS_SERVER_REFRESH = wx.NewId()
50 GS_JOIN = wx.NewId()
51 GS_JOINLOBBY = wx.NewId()
52 GS_CREATE_ROOM = wx.NewId()
53 GS_PWD = wx.NewId()
54 GS_CLOSE = wx.NewId()
55 OR_CLOSE = wx.NewId()
56 49
57 class server_instance: 50 class server_instance:
58 def __init__(self, id, name="[Unknown]", users="0", address="127.0.0.1", port="9557"): 51 def __init__(self, id, name="[Unknown]", users="0", address="127.0.0.1", port="9557"):
59 self.id = id 52 self.id = id
60 self.name = name 53 self.name = name
63 self.port = port 56 self.port = port
64 57
65 def server_instance_compare(x,y): 58 def server_instance_compare(x,y):
66 """compares server insances for list sort""" 59 """compares server insances for list sort"""
67 DEV_SERVER = "OpenRPG DEV" 60 DEV_SERVER = "OpenRPG DEV"
68 xuser = 0 61 xname = x.name
69 yuser = 0 62 xuser = int(x.user)
70 try: xuser = int(x.user) 63 yname = y.name
71 except: pass 64 yuser = int(y.user)
72 try: yuser = int(y.user) 65
73 except: pass 66 who_name = cmp(yname, xname)
67 who_user = cmp(yuser, xuser)
68
74 if x.name.startswith(DEV_SERVER): 69 if x.name.startswith(DEV_SERVER):
75 if y.name.startswith(DEV_SERVER): 70 if y.name.startswith(DEV_SERVER):
76 if x.name > y.name: return 1 71 if not who_name: return who_user
77 elif x.name == y.name: 72 else: return who_name
78 if xuser < yuser: return 1
79 elif xuser > yuser: return -1
80 else: return 0
81 else: return -1
82 else: return -1 73 else: return -1
74
83 elif y.name.startswith(DEV_SERVER): return 1 75 elif y.name.startswith(DEV_SERVER): return 1
84 elif xuser < yuser: return 1 76 elif not who_user: return who_name
85 elif xuser == yuser: 77 else: return who_user
86 if x.name > y.name: return 1
87 elif x.name == y.name: return 0
88 else: return -1
89 else: return -1
90 78
91 def roomCmp(room1, room2): 79 def roomCmp(room1, room2):
92 if int(room1) > int(room2): 80 if int(room1) > int(room2): return 1
93 return 1 81 elif int(room1) < int(room2): return -1
94 elif int(room1) < int(room2):
95 return -1
96 return 0 82 return 0
97 83
98 class game_server_panel(wx.Panel): 84 class game_server_panel(wx.Panel):
99 def __init__(self,parent): 85 def __init__(self,parent):
100 wx.Panel.__init__(self, parent, -1) 86 wx.Panel.__init__(self, parent, -1)
101 self.parent = parent 87 self.parent = parent
102 self.password_manager = component.get('password_manager') # passtool --SD 8/03 88 self.password_manager = component.get('password_manager')
103 self.frame = component.get('frame') 89 self.frame = component.get('frame')
104 self.session = component.get('session') 90 self.session = component.get('session')
105 self.xml = component.get('xml') #Not used??
106 self.serverNameSet = 0 91 self.serverNameSet = 0
107 self.last_motd = "" 92 self.last_motd = ""
108 self.buttons = {} 93 self.buttons = {}
109 self.texts = {} 94 self.texts = {}
110 self.svrList = [] 95 self.svrList = []
111 self.build_ctrls() 96 self.build_ctrls()
97 self.bookmarks()
112 self.refresh_server_list() 98 self.refresh_server_list()
113 self.refresh_room_list() 99 self.refresh_room_list()
114 100 self.build_bookmark_menu()
115 #--------------------------------------------------------- 101
116 # [START] Snowdog: Updated Game Server Window 12/02
117 #---------------------------------------------------------
118 def build_ctrls(self): 102 def build_ctrls(self):
119 ## Section Sizers (with frame edges and text captions) 103 ## Section Sizers (with frame edges and text captions)
120 self.box_sizers = {} 104 self.box_sizers = {}
121 self.box_sizers["server"] = wx.StaticBox(self, -1, "Server") 105 self.box_sizers["server"] = wx.StaticBox(self, -1, "Server")
122 self.box_sizers["window"] = wx.StaticBox(self, -1, "Exit" ) 106 self.box_sizers["window"] = wx.StaticBox(self, -1, "Exit" )
131 self.sizers["close"] = wx.StaticBoxSizer(self.box_sizers["window"], wx.HORIZONTAL) 115 self.sizers["close"] = wx.StaticBoxSizer(self.box_sizers["window"], wx.HORIZONTAL)
132 self.sizers["c_room"] = wx.StaticBoxSizer(self.box_sizers["c_room"], wx.VERTICAL) 116 self.sizers["c_room"] = wx.StaticBoxSizer(self.box_sizers["c_room"], wx.VERTICAL)
133 117
134 #Build Server Sizer 118 #Build Server Sizer
135 adder = wx.StaticText(self, -1, "Address:") 119 adder = wx.StaticText(self, -1, "Address:")
136 self.texts["address"] = wx.TextCtrl(self, ADDRESS) 120 self.texts["address"] = wx.TextCtrl(self, wx.ID_ANY)
137 servers = wx.StaticText(self, -1, "Servers:") 121 servers = wx.StaticText(self, -1, "Servers:")
138 self.server_list = wx.ListCtrl(self, LIST_SERVER, style=wx.LC_REPORT | wx.SUNKEN_BORDER ) 122 self.server_list = wx.ListCtrl(self, wx.ID_ANY, style=wx.LC_REPORT | wx.SUNKEN_BORDER )
139 self.server_list.InsertColumn(0, "Players", wx.LIST_FORMAT_LEFT, 0) 123 self.server_list.InsertColumn(0, '', wx.LIST_FORMAT_LEFT, 0)
140 self.server_list.InsertColumn(1, "Name", wx.LIST_FORMAT_LEFT, 0) 124 self.server_list.InsertColumn(1, "Players", wx.LIST_FORMAT_LEFT, 0)
141 self.buttons[GS_CONNECT] = wx.Button(self, GS_CONNECT, "Connect") 125 self.server_list.InsertColumn(2, "Name", wx.LIST_FORMAT_LEFT, 0)
142 self.buttons[GS_SERVER_REFRESH] = wx.Button(self, GS_SERVER_REFRESH, "Refresh") 126 self.buttons['gs_connect'] = wx.Button(self, wx.ID_ANY, "Connect")
143 self.buttons[GS_DISCONNECT] = wx.Button(self, GS_DISCONNECT, "Disconnect") 127 self.buttons['gs_refresh'] = wx.Button(self, wx.ID_ANY, "Refresh")
128 self.buttons['gs_disconnect'] = wx.Button(self, wx.ID_ANY, "Disconnect")
144 self.sizers["svrbtns"] = wx.BoxSizer(wx.HORIZONTAL) 129 self.sizers["svrbtns"] = wx.BoxSizer(wx.HORIZONTAL)
145 self.sizers["svrbtns"].Add(self.buttons[GS_CONNECT], 0, wx.EXPAND) 130 self.sizers["svrbtns"].Add(self.buttons['gs_connect'], 0, wx.EXPAND)
146 self.sizers["svrbtns"].Add(self.buttons[GS_SERVER_REFRESH], 0, wx.EXPAND) 131 self.sizers["svrbtns"].Add(self.buttons['gs_refresh'], 0, wx.EXPAND)
147 self.sizers["svrbtns"].Add(self.buttons[GS_DISCONNECT], 0, wx.EXPAND) 132 self.sizers["svrbtns"].Add(self.buttons['gs_disconnect'], 0, wx.EXPAND)
148 self.sizers["server"].Add(adder, 0, wx.EXPAND) 133 self.sizers["server"].Add(adder, 0, wx.EXPAND)
149 self.sizers["server"].Add(self.texts["address"], 0, wx.EXPAND) 134 self.sizers["server"].Add(self.texts["address"], 0, wx.EXPAND)
150 self.sizers["server"].Add(servers, 0, wx.EXPAND) 135 self.sizers["server"].Add(servers, 0, wx.EXPAND)
151 self.sizers["server"].Add(self.server_list, 1, wx.EXPAND) 136 self.sizers["server"].Add(self.server_list, 1, wx.EXPAND)
152 self.sizers["server"].Add(self.sizers["svrbtns"], 0, wx.EXPAND) 137 self.sizers["server"].Add(self.sizers["svrbtns"], 0, wx.EXPAND)
153 138
154 #Build Rooms Sizer 139 #Build Rooms Sizer
155 self.room_list = wx.ListCtrl(self, LIST_ROOM, style=wx.LC_REPORT | wx.SUNKEN_BORDER) 140 self.room_list = wx.ListCtrl(self, wx.ID_ANY, style=wx.LC_REPORT | wx.SUNKEN_BORDER)
156 self.room_list.InsertColumn(0,"Game", wx.LIST_FORMAT_LEFT,-1) 141 self.room_list.InsertColumn(0,"Game", wx.LIST_FORMAT_LEFT,-1)
157 self.room_list.InsertColumn(1,"Players", wx.LIST_FORMAT_LEFT,-1) 142 self.room_list.InsertColumn(1,"Players", wx.LIST_FORMAT_LEFT,-1)
158 self.room_list.InsertColumn(2,"PW", wx.LIST_FORMAT_LEFT,-1) 143 self.room_list.InsertColumn(2,"PW", wx.LIST_FORMAT_LEFT,-1)
159 self.buttons[GS_JOIN] = wx.Button(self, GS_JOIN, "Join Room") 144 self.buttons['gs_join_room'] = wx.Button(self, wx.ID_ANY, "Join Room")
160 self.buttons[GS_JOINLOBBY] = wx.Button(self, GS_JOINLOBBY, "Lobby") 145 self.buttons['gs_join_lobby'] = wx.Button(self, wx.ID_ANY, "Lobby")
161 self.sizers["roombtns"] = wx.BoxSizer(wx.HORIZONTAL) 146 self.sizers["roombtns"] = wx.BoxSizer(wx.HORIZONTAL)
162 self.sizers["roombtns"].Add(self.buttons[GS_JOIN], 0, wx.EXPAND) 147 self.sizers["roombtns"].Add(self.buttons['gs_join_room'], 0, wx.EXPAND)
163 self.sizers["roombtns"].Add(self.buttons[GS_JOINLOBBY], 0, wx.EXPAND) 148 self.sizers["roombtns"].Add(self.buttons['gs_join_lobby'], 0, wx.EXPAND)
164 self.sizers["rooms"].Add(self.room_list, 1, wx.EXPAND) 149 self.sizers["rooms"].Add(self.room_list, 1, wx.EXPAND)
165 self.sizers["rooms"].Add(self.sizers["roombtns"], 0, wx.EXPAND) 150 self.sizers["rooms"].Add(self.sizers["roombtns"], 0, wx.EXPAND)
166 151
167 #Build Close Sizer 152 #Build Close Sizer
168 self.buttons[OR_CLOSE] = wx.Button(self, OR_CLOSE,"Exit OpenRPG") 153 self.buttons['close_orpg'] = wx.Button(self, wx.ID_ANY,"Exit OpenRPG")
169 self.buttons[GS_CLOSE] = wx.Button(self, GS_CLOSE,"Close Window") 154 self.buttons['gs_close'] = wx.Button(self, wx.ID_ANY,"Close Window")
170 self.sizers["close"].Add(self.buttons[OR_CLOSE], 1, wx.ALIGN_CENTER_VERTICAL) 155 self.sizers["close"].Add(self.buttons['close_orpg'], 1, wx.ALIGN_CENTER_VERTICAL)
171 self.sizers["close"].Add(self.buttons[GS_CLOSE], 1, wx.ALIGN_CENTER_VERTICAL) 156 self.sizers["close"].Add(self.buttons['gs_close'], 1, wx.ALIGN_CENTER_VERTICAL)
172 157
173 #Build Create Room Sizer 158 #Build Create Room Sizer
174 rname = wx.StaticText(self,-1, "Room Name:") 159 rname = wx.StaticText(self,-1, "Room Name:")
175 self.texts["room_name"] = wx.TextCtrl(self, -1) 160 self.texts["room_name"] = wx.TextCtrl(self, -1)
176 rpass = wx.StaticText(self,-1, "Password:") 161 rpass = wx.StaticText(self,-1, "Password:")
177 self.buttons[GS_PWD] = wx.CheckBox(self, GS_PWD, "") 162 self.buttons['gs_pwd'] = wx.CheckBox(self, wx.ID_ANY, "")
178 self.texts["room_pwd"] = wx.TextCtrl(self, -1) 163 self.texts["room_pwd"] = wx.TextCtrl(self, -1)
179 self.texts["room_pwd"].Enable(0) 164 self.texts["room_pwd"].Enable(0)
180 pwsizer = wx.BoxSizer(wx.HORIZONTAL) 165 pwsizer = wx.BoxSizer(wx.HORIZONTAL)
181 pwsizer.Add(self.buttons[GS_PWD],0,0) 166 pwsizer.Add(self.buttons['gs_pwd'],0,0)
182 pwsizer.Add(self.texts["room_pwd"], 1, wx.EXPAND) 167 pwsizer.Add(self.texts["room_pwd"], 1, wx.EXPAND)
183 apass = wx.StaticText(self,-1, "Admin Password:") 168 apass = wx.StaticText(self,-1, "Admin Password:")
184 self.texts["room_boot_pwd"] = wx.TextCtrl(self, -1) 169 self.texts["room_boot_pwd"] = wx.TextCtrl(self, -1)
185 minver = wx.StaticText(self,-1, "Minimum Version:") 170 minver = wx.StaticText(self,-1, "Minimum Version:")
186 self.texts["room_min_version"] = wx.TextCtrl(self, -1) 171 self.texts["room_min_version"] = wx.TextCtrl(self, -1)
192 self.sizers["c_room_layout"].Add(apass, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ALL) 177 self.sizers["c_room_layout"].Add(apass, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ALL)
193 self.sizers["c_room_layout"].Add(self.texts["room_boot_pwd"], 0, wx.EXPAND) 178 self.sizers["c_room_layout"].Add(self.texts["room_boot_pwd"], 0, wx.EXPAND)
194 self.sizers["c_room_layout"].Add(minver, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ALL) 179 self.sizers["c_room_layout"].Add(minver, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ALL)
195 self.sizers["c_room_layout"].Add(self.texts["room_min_version"], 0, wx.EXPAND) 180 self.sizers["c_room_layout"].Add(self.texts["room_min_version"], 0, wx.EXPAND)
196 self.sizers["c_room_layout"].AddGrowableCol(1) 181 self.sizers["c_room_layout"].AddGrowableCol(1)
197 self.buttons[GS_CREATE_ROOM] = wx.Button(self, GS_CREATE_ROOM, "Create Room") 182 self.buttons['gs_create_room'] = wx.Button(self, wx.ID_ANY, "Create Room")
198 self.sizers["c_room"].Add(self.sizers["c_room_layout"], 1, wx.EXPAND) 183 self.sizers["c_room"].Add(self.sizers["c_room_layout"], 1, wx.EXPAND)
199 self.sizers["c_room"].Add(self.buttons[GS_CREATE_ROOM], 0, wx.EXPAND) 184 self.sizers["c_room"].Add(self.buttons['gs_create_room'], 0, wx.EXPAND)
200 185
201 #Build Main Sizer 186 #Build Main Sizer
202 self.sizers["main"].Add(self.sizers["server"], (0,0), span=(2,1), flag=wx.EXPAND) 187 self.sizers["main"].Add(self.sizers["server"], (0,0), span=(2,1), flag=wx.EXPAND)
203 self.sizers["main"].Add(self.sizers["rooms"], (0,1), flag=wx.EXPAND) 188 self.sizers["main"].Add(self.sizers["rooms"], (0,1), flag=wx.EXPAND)
204 self.sizers["main"].Add(self.sizers["close"], (2,0), flag=wx.EXPAND) 189 self.sizers["main"].Add(self.sizers["close"], (2,0), flag=wx.EXPAND)
209 self.SetSizer(self.sizers["main"]) 194 self.SetSizer(self.sizers["main"])
210 self.SetAutoLayout(True) 195 self.SetAutoLayout(True)
211 self.Fit() 196 self.Fit()
212 197
213 ## Event Handlers 198 ## Event Handlers
214 self.Bind(wx.EVT_BUTTON, self.on_button, id=GS_CONNECT) 199 self.Bind(wx.EVT_BUTTON, self.gs_connect, self.buttons['gs_connect'])
215 self.Bind(wx.EVT_BUTTON, self.on_button, id=GS_DISCONNECT) 200 self.Bind(wx.EVT_BUTTON, self.gs_disconnect, self.buttons['gs_disconnect'])
216 self.Bind(wx.EVT_BUTTON, self.on_button, id=GS_CREATE_ROOM) 201 self.Bind(wx.EVT_BUTTON, self.gs_create_room, self.buttons['gs_create_room'])
217 self.Bind(wx.EVT_BUTTON, self.on_button, id=GS_JOIN) 202 self.Bind(wx.EVT_BUTTON, self.gs_join, self.buttons['gs_join_room'])
218 self.Bind(wx.EVT_BUTTON, self.on_button, id=GS_JOINLOBBY) 203 self.Bind(wx.EVT_BUTTON, self.gs_join_lobby, self.buttons['gs_join_lobby'])
219 self.Bind(wx.EVT_BUTTON, self.on_button, id=GS_SERVER_REFRESH) 204 self.Bind(wx.EVT_BUTTON, self.gs_server_refresh, self.buttons['gs_refresh'])
220 self.Bind(wx.EVT_BUTTON, self.on_button, id=GS_CLOSE) 205 self.Bind(wx.EVT_BUTTON, self.gs_close, self.buttons['gs_close'])
221 self.Bind(wx.EVT_BUTTON, self.on_button, id=OR_CLOSE) 206 self.Bind(wx.EVT_BUTTON, self.close_orpg, self.buttons['close_orpg'])
222 self.Bind(wx.EVT_CHECKBOX, self.on_button, id=GS_PWD) 207 self.Bind(wx.EVT_CHECKBOX, self.gs_pwd, self.buttons['gs_pwd'])
223 208
224 # Added double click handlers 5/05 -- Snowdog 209 # Added double click handlers 5/05 -- Snowdog
225 self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.on_server_dbclick, id=LIST_SERVER) 210 self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.on_server_dbclick, self.server_list)
226 self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.on_room_dbclick, id=LIST_ROOM) 211 self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.on_room_dbclick, self.room_list)
227 self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.on_select, id=LIST_ROOM) 212 self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.on_room_select, self.room_list)
228 self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.on_select, id=LIST_SERVER) 213 self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.on_server_select, self.server_list)
229 self.texts['address'].Bind(wx.EVT_SET_FOCUS, self.on_text) 214 self.texts['address'].Bind(wx.EVT_SET_FOCUS, self.on_text)
230 self.set_connected(self.session.is_connected()) 215 self.set_connected(self.session.is_connected())
231 self.cur_room_index = -1 216 self.cur_room_index = -1
232 self.cur_server_index = -1 217 self.cur_server_index = -1
233 self.rmList = {} 218 self.rmList = {}
234 219
235 #--------------------------------------------------------- 220 # Create Book Mark Image List
236 # [END] Snowdog: Updated Game Server Window 12/02 221 self.server_list.Bind(wx.EVT_LEFT_DOWN, self.on_hit)
237 #--------------------------------------------------------- 222 self._imageList = wx.ImageList( 16, 16, False )
238 223 img = wx.Image(dir_struct["icon"]+"add.png", wx.BITMAP_TYPE_PNG).ConvertToBitmap()
239 #----------------------------------------------------- 224 self._imageList.Add( img )
240 # on_server_dbclick() 225 img = wx.Image(dir_struct["icon"]+"star.png", wx.BITMAP_TYPE_PNG).ConvertToBitmap()
241 # support for double click selection of server. 226 self._imageList.Add( img )
242 # 5/16/05 -- Snowdog 227 self.server_list.SetImageList( self._imageList, wx.IMAGE_LIST_SMALL )
243 #----------------------------------------------------- 228
229 def bookmarks(self):
230 validate.config_file('server_bookmarks.xml',
231 'default_server_bookmarks.xml')
232 self.bookmarks = ElementTree()
233 self.bookmarks.parse(dir_struct['user'] + 'server_bookmarks.xml')
234
235 def build_bookmark_menu(self):
236 gsm = self.frame.mainmenu.GetMenu(
237 self.frame.mainmenu.FindMenu('Game Server'))
238 self.bookmarks_menu = wx.Menu()
239 x = 0
240 for server in self.bookmarks.findall('server'):
241 for svr in self.svrList:
242 address = svr.addy
243 if server.get('address') == address: self.server_list.SetItemImage(x, 1)
244 x += 1
245 item = wx.MenuItem(self.bookmarks_menu, wx.ID_ANY,
246 server.get('name'), server.get('name'))
247 open_rpg.get_component('frame').Bind(wx.EVT_MENU,
248 self.on_bookmarks_menu, item)
249 self.bookmarks_menu.AppendItem(item)
250 gsm.AppendSubMenu(self.bookmarks_menu, "Bookmarks")
251
252 def on_bookmarks_menu(self, evt):
253 id = evt.GetId()
254 menu = self.bookmarks_menu.FindItemById(id)
255 for server in self.bookmarks.findall('server'):
256 if server.get('name') == menu.GetLabel():
257 address = server.get('address')
258 self.cur_server_index = 999
259 self.name = server.get('name')
260 self.texts["address"].SetValue(address)
261 if self.session.is_connected():
262 if self.session.host_server == address : return
263 else: self.frame.kill_mplay_session()
264 self.do_connect(address)
265 break
266
267 def bookmark(self, item, flag):
268 name = self.svrList[item].name
269 address = self.svrList[item].addy
270 port = self.svrList[item].port
271 self.server_list.SetItemImage(item, 1)
272 for server in self.bookmarks.findall('server'):
273 if server.get('name') == name:
274 self.bookmarks_menu.Remove(
275 self.bookmarks_menu.FindItem(server.get('name')))
276 self.bookmarks.getroot().remove(server)
277 self.server_list.SetItemImage(item, 0)
278 break
279 else:
280 server = Element('server')
281 server.set('name', name)
282 server.set('address', address + ':' + port)
283 self.bookmarks.getroot().append(server)
284 item = wx.MenuItem(self.bookmarks_menu, wx.ID_ANY, name, name)
285 open_rpg.get_component('frame').Bind(wx.EVT_MENU,
286 self.on_bookmarks_menu, item)
287 self.bookmarks_menu.AppendItem(item)
288 self.save_bookmarks()
289
290 def save_bookmarks(self):
291 with open(dir_struct['user'] + 'server_bookmarks.xml', 'w') as f:
292 self.bookmarks.write(f)
293
244 def on_server_dbclick(self, evt=None): 294 def on_server_dbclick(self, evt=None):
245 #make sure address is updated just in case list select wasn't done 295 #make sure address is updated just in case list select wasn't done
246 try: 296 try: self.on_select(evt)
247 self.on_select(evt) 297 except: pass
248 except:
249 pass
250 address = self.texts["address"].GetValue() 298 address = self.texts["address"].GetValue()
251 if self.session.is_connected(): 299 if self.session.is_connected():
252 if self.session.host_server == address : 300 if self.session.host_server == address : return
253 #currently connected to address. Do nothing. 301 else: self.frame.kill_mplay_session()
254 return
255 else:
256 #address differs, disconnect.
257 self.frame.kill_mplay_session()
258 self.do_connect(address) 302 self.do_connect(address)
259
260
261 #-----------------------------------------------------
262 # on_room_dbclick()
263 # support for double click selection of server.
264 # 5/16/05 -- Snowdog
265 #-----------------------------------------------------
266 303
267 def on_room_dbclick(self, evt=None): 304 def on_room_dbclick(self, evt=None):
268 #make sure address is updated just in case list select wasn't done 305 #make sure address is updated just in case list select wasn't done
269 try: 306 try: self.on_select(evt)
270 self.on_select(evt) 307 except: pass
271 except:
272 pass
273 group_id = str(self.room_list.GetItemData(self.cur_room_index)) 308 group_id = str(self.room_list.GetItemData(self.cur_room_index))
274
275 if self.NoGroups: 309 if self.NoGroups:
276 self.NoGroups = False 310 self.NoGroups = False
277 self.session.group_id = group_id 311 self.session.group_id = group_id
278 self.on_server_dbclick() 312 self.on_server_dbclick()
279 return 313 return
280
281 if self.cur_room_index >= 0: 314 if self.cur_room_index >= 0:
282 if self.cur_room_index != 0: 315 if self.cur_room_index != 0: self.set_lobbybutton(1);
283 self.set_lobbybutton(1); 316 else: self.set_lobbybutton(0);
284 else:
285 self.set_lobbybutton(0);
286 group = self.session.get_group_info(group_id) 317 group = self.session.get_group_info(group_id)
287 pwd = "" 318 pwd = ""
288 if (group[2] == "True") or (group[2] == "1"): 319 if (group[2] == "True") or (group[2] == "1"):
289 pwd = self.password_manager.GetPassword("room", group_id) 320 pwd = self.password_manager.GetPassword("room", group_id)
290 else: 321 else: pwd = ""
291 pwd = ""
292 self.session.send_join_group(group_id, pwd) 322 self.session.send_join_group(group_id, pwd)
293 323
294 324 def on_room_select(self,evt):
295 def on_select(self,evt): 325 self.cur_room_index = evt.m_itemIndex
326
327 def on_hit(self, evt):
328 pos = wx.Point( evt.GetX(), evt.GetY() )
329 (item, flag) = self.server_list.HitTest( pos )
330 ## Item == list[server], flag == (32 = 0 colum, 128 = else) ##
331 if flag == 32: self.bookmark(item, flag)
332 evt.Skip()
333
334 def on_server_select(self,evt):
335 self.cur_server_index = evt.m_itemIndex
336 self.name = self.svrList[self.cur_server_index].name
337 address = self.svrList[self.cur_server_index].addy
338 port = self.svrList[self.cur_server_index].port
339 self.texts["address"].SetValue(address + ":" + str(port))
340 self.refresh_room_list()
341
342 def on_text(self, evt):
296 id = evt.GetId() 343 id = evt.GetId()
297 if id == LIST_ROOM: 344 if (id == self.texts["address"].GetValue()) and (self.cur_server_index >= 0):
298 self.cur_room_index = evt.m_itemIndex
299 elif id==LIST_SERVER:
300 self.cur_server_index = evt.m_itemIndex
301 self.name = self.svrList[self.cur_server_index].name
302 address = self.svrList[self.cur_server_index].addy
303 port = self.svrList[self.cur_server_index].port
304 self.texts["address"].SetValue(address+":"+str(port))
305 self.refresh_room_list()
306
307 def on_text(self,evt):
308 id = evt.GetId()
309 if (id == ADDRESS) and (self.cur_server_index >= 0):
310 #print "ADDRESS id = ", id, "index = ", self.cur_server_index
311 self.cur_server_index = -1 345 self.cur_server_index = -1
312 evt.Skip() 346 evt.Skip()
313 347
314 def add_room(self,data): 348 def add_room(self, data):
315 i = self.room_list.GetItemCount() 349 i = self.room_list.GetItemCount()
316 if (data[2]=="1") or (data[2]=="True"): pwd="yes" 350 if (data[2]=="1") or (data[2]=="True"): pwd="yes"
317 else: pwd="no" 351 else: pwd="no"
318 self.room_list.InsertStringItem(i,data[1]) 352 self.room_list.InsertStringItem(i,data[1])
319 self.room_list.SetStringItem(i,1,data[3]) 353 self.room_list.SetStringItem(i,1,data[3])
324 def del_room(self, data): 358 def del_room(self, data):
325 i = self.room_list.FindItemData(-1, int(data[0])) 359 i = self.room_list.FindItemData(-1, int(data[0]))
326 self.room_list.DeleteItem(i) 360 self.room_list.DeleteItem(i)
327 self.refresh_room_list() 361 self.refresh_room_list()
328 362
329 #--------------------------------------------------------- 363 def update_room(self, data):
330 # [START] Snowdog Password/Room Name altering code 12/02
331 #---------------------------------------------------------
332
333 def update_room(self,data):
334
335 #-------------------------------------------------------
336 # Udated 12/02 by Snowdog
337 # allows refresh of all room data not just player counts
338 #-------------------------------------------------------
339 i = self.room_list.FindItemData(-1,int(data[0])) 364 i = self.room_list.FindItemData(-1,int(data[0]))
340 if data[2]=="1" : pwd="yes" 365 if data[2]=="1" : pwd="yes"
341 else: pwd="no" 366 else: pwd="no"
342 self.room_list.SetStringItem(i,0,data[1]) 367 self.room_list.SetStringItem(i,0,data[1])
343 self.room_list.SetStringItem(i,1,data[3]) 368 self.room_list.SetStringItem(i,1,data[3])
344 self.room_list.SetStringItem(i,2,pwd) 369 self.room_list.SetStringItem(i,2,pwd)
345 self.refresh_room_list() 370 self.refresh_room_list()
346 371
347 #--------------------------------------------------------- 372 def set_cur_room_text(self, name):
348 # [END] Snowdog Password/Room Name altering code 12/02
349 #---------------------------------------------------------
350
351 def set_cur_room_text(self,name):
352 pass 373 pass
353 #self.texts["cur_room"].SetLabel(name) 374 #self.texts["cur_room"].SetLabel(name)
354 #self.sizers["room"].Layout() 375 #self.sizers["room"].Layout()
355 376
356 def set_lobbybutton(self,allow): 377 def set_lobbybutton(self, allow):
357 self.buttons[GS_JOINLOBBY].Enable(allow) 378 self.buttons['gs_join_lobby'].Enable(allow)
358 379
359 def set_connected(self,connected): 380 def set_connected(self, connected):
360 self.buttons[GS_CONNECT].Enable(not connected) 381 self.buttons['gs_connect'].Enable(not connected)
361 self.buttons[GS_DISCONNECT].Enable(connected) 382 self.buttons['gs_disconnect'].Enable(connected)
362 self.buttons[GS_JOIN].Enable(connected) 383 self.buttons['gs_join_room'].Enable(connected)
363 self.buttons[GS_CREATE_ROOM].Enable(connected) 384 self.buttons['gs_create_room'].Enable(connected)
364 if not connected: 385 if not connected:
365 self.buttons[GS_JOINLOBBY].Enable(connected) 386 self.buttons['gs_join_lobby'].Enable(connected)
366 self.room_list.DeleteAllItems() 387 self.room_list.DeleteAllItems()
367 self.set_cur_room_text("Not Connected!") 388 self.set_cur_room_text("Not Connected!")
368 self.cur_room_index = -1 389 self.cur_room_index = -1
369 self.frame.status.set_connect_status("Not Connected") 390 self.frame.status.set_connect_status("Not Connected")
370 else: 391 else:
371 #data = self.session.get_my_group()
372 self.frame.status.set_connect_status(self.name) 392 self.frame.status.set_connect_status(self.name)
373 self.set_cur_room_text("Lobby") 393 self.set_cur_room_text("Lobby")
374 394
375 def on_button(self,evt): 395 def gs_connect(self, evt):
376 id = evt.GetId() 396 address = self.texts['address'].GetValue()
377 if id == GS_CONNECT: 397 try: dummy = self.name
378 address = self.texts["address"].GetValue() 398 except: self.name = `address`
379 ### check to see if this is a manual entry vs. list entry. 399 self.do_connect(address)
380 try: 400
381 dummy = self.name 401 def gs_disconnect(self, evt):
382 except: 402 self.frame.kill_mplay_session()
383 self.name = `address` 403
384 self.do_connect(address) 404 def gs_create_room(self, evt):
385 elif id == GS_DISCONNECT: self.frame.kill_mplay_session() 405 self.do_create_group()
386 elif id == GS_CREATE_ROOM: self.do_create_group() 406
387 elif id == GS_JOIN: self.do_join_group() 407 def gs_join(self, evt):
388 elif id == GS_JOINLOBBY: self.do_join_lobby() 408 self.do_join_group()
389 elif id == GS_SERVER_REFRESH: self.refresh_server_list() 409
390 elif id == GS_PWD: self.texts["room_pwd"].Enable(evt.Checked()) 410 def gs_join_lobby(self, evt):
391 elif id == OR_CLOSE: 411 self.do_join_lobby()
392 dlg = wx.MessageDialog(self,"Quit OpenRPG?","OpenRPG",wx.YES_NO) 412
393 if dlg.ShowModal() == wx.ID_YES: 413 def gs_server_refresh(self, evt):
394 dlg.Destroy() 414 self.refresh_server_list()
395 self.frame.kill_mplay_session() 415
396 self.frame.closed_confirmed() 416 def gs_pwd(self, evt):
397 elif id == GS_CLOSE: 417 self.texts['room_pwd'].Enable(evt.Checked())
398 self.parent.OnMB_GameServerBrowseServers() 418
399 419 def close_orpg(self, evt):
420 dlg = wx.MessageDialog(self, 'Quit OpenRPG?', "OpenRPG", wx.YES_NO)
421 if dlg.ShowModal() == wx.ID_YES:
422 dlg.Destroy()
423 self.frame.kill_mplay_session()
424 self.frame.closed_confirmed()
425
426 def gs_close(self, evt):
427 self.parent.OnMB_GameServerBrowseServers()
428
400 def refresh_room_list(self): 429 def refresh_room_list(self):
401 self.room_list.DeleteAllItems() 430 self.room_list.DeleteAllItems()
402 address = self.texts["address"].GetValue() 431 address = self.texts["address"].GetValue()
403 try: 432 try: cadder = self.session.host_server
404 cadder = self.session.host_server 433 except: cadder = ''
405 except:
406 cadder = ''
407 if self.rmList.has_key(address) and len(self.rmList[address]) > 0 and cadder != address: 434 if self.rmList.has_key(address) and len(self.rmList[address]) > 0 and cadder != address:
408 groups = self.rmList[address] 435 groups = self.rmList[address]
409 self.NoGroups = True 436 self.NoGroups = True
410 else: 437 else:
411 self.NoGroups = False 438 self.NoGroups = False
431 458
432 def refresh_server_list(self): 459 def refresh_server_list(self):
433 try: 460 try:
434 self.svrList = [] 461 self.svrList = []
435 self.server_list.DeleteAllItems() 462 self.server_list.DeleteAllItems()
436 xml_dom = meta_server_lib.get_server_list(["2"]); 463 etreeEl = meta_server_lib.get_server_list(["2"]);
437 node_list = xml_dom.getElementsByTagName('server') 464 node_list = etreeEl.findall('server')
438 hex = orpg.tools.rgbhex.RGBHex() 465 hex = orpg.tools.rgbhex.RGBHex()
439 color1 = settings.get_setting("RoomColor_Active") 466 color1 = settings.get("RoomColor_Active")
440 color2 = settings.get_setting("RoomColor_Locked") 467 color2 = settings.get("RoomColor_Locked")
441 color3 = settings.get_setting("RoomColor_Empty") 468 color3 = settings.get("RoomColor_Empty")
442 color4 = settings.get_setting("RoomColor_Lobby") 469 color4 = settings.get("RoomColor_Lobby")
443 470
444 if len(node_list): 471 if len(node_list):
445 length = len(node_list) 472 length = len(node_list)
446 part = 0 473 part = 0
447 partLength = 1.0/length 474 partLength = 1.0/length
448 for n in node_list: 475 for n in node_list:
449 if n.hasAttribute('id') and n.hasAttribute('name') and n.hasAttribute('num_users') and n.hasAttribute('address') and n.hasAttribute('port'): 476 self.svrList.append(server_instance(n.get('id'), n.get('name'),
450 self.svrList.append(server_instance(n.getAttribute('id'), n.getAttribute('name'), 477 n.get('num_users'), n.get('address'),
451 n.getAttribute('num_users'), n.getAttribute('address'), 478 n.get('port')))
452 n.getAttribute('port'))) 479 address = n.get('address') + ':' + n.get('port')
453 address = n.getAttribute('address') + ':' + n.getAttribute('port') 480 self.rmList[address] = []
454 self.rmList[address] = [] 481 rooms = n.findall('room')
455 rooms = n.getElementsByTagName('room') 482
456 483 for room in rooms:
457 for room in rooms: 484 self.rmList[address].append((room.get("id"), room.get("name"),
458 pwd = room.getAttribute("pwd") 485 room.get("pwd"), room.get("num_users")))
459 id = room.getAttribute("id")
460 name = room.getAttribute("name")
461 nump = room.getAttribute("num_users")
462 self.rmList[address].append((id, name, pwd, nump))
463 self.svrList.sort(server_instance_compare) 486 self.svrList.sort(server_instance_compare)
464 487
465 for n in self.svrList: 488 for n in self.svrList:
466 i = self.server_list.GetItemCount() 489 i = self.server_list.GetItemCount()
467 name = n.name 490 name = n.name
468 players = n.user 491 players = n.user
469 self.server_list.InsertStringItem(i,players) 492 self.server_list.InsertImageStringItem(i, '', 0)
470 self.server_list.SetStringItem(i,1,name) 493 for server in self.bookmarks.findall('server'):
494 if server.get('name') == name: self.server_list.SetItemImage(i, 1)
495 self.server_list.SetStringItem(i,1,players)
496 self.server_list.SetStringItem(i,2,name)
471 r,g,b = hex.rgb_tuple(color1) 497 r,g,b = hex.rgb_tuple(color1)
472 svrcolor = wx.Colour(red=r,green=g,blue=b) 498 svrcolor = wx.Colour(red=r,green=g,blue=b)
473 499
474 if players == "0": 500 if players == "0":
475 r,g,b = hex.rgb_tuple(color3) 501 r,g,b = hex.rgb_tuple(color3)
486 self.servers = node_list 512 self.servers = node_list
487 513
488 # No server is currently selected!!! Versus the broken and random 0! 514 # No server is currently selected!!! Versus the broken and random 0!
489 self.cur_server_index = -1 515 self.cur_server_index = -1
490 self.server_list.SetColumnWidth(0, wx.LIST_AUTOSIZE) 516 self.server_list.SetColumnWidth(0, wx.LIST_AUTOSIZE)
491 if self.server_list.GetColumnWidth(0) < 70: self.server_list.SetColumnWidth(0, 70)
492 self.server_list.SetColumnWidth(1, wx.LIST_AUTOSIZE) 517 self.server_list.SetColumnWidth(1, wx.LIST_AUTOSIZE)
518 if self.server_list.GetColumnWidth(1) < 70: self.server_list.SetColumnWidth(1, 70)
519 self.server_list.SetColumnWidth(2, wx.LIST_AUTOSIZE)
493 520
494 if self.serverNameSet == 0: 521 if self.serverNameSet == 0:
495 # Pointless to constantly set the address field to random
496 # server. This way, at least, if someone has their own local
497 # server it can now easily be connected with. Nor do we want
498 # to reset this every time as it would wipe any previously
499 # entered data or even the previously selected server data!
500 # Localhost should probably be used but some systems are ultra/lame
501 # broken about localhost use.
502 self.texts["address"].SetValue("127.0.0.1:6774") 522 self.texts["address"].SetValue("127.0.0.1:6774")
503 self.serverNameSet = 1 523 self.serverNameSet = 1
504 else: 524 else: pass
505 pass
506
507 # Allow xml_dom to be collected
508 try:
509 xml_dom.unlink()
510 except:
511 pass
512 except Exception, e: 525 except Exception, e:
513 print "Server List not available." 526 print "Server List not available."
514 traceback.print_exc() 527 traceback.print_exc()
515 528
516 def failed_connection(self): 529 def failed_connection(self):
517 if(self.cur_server_index >= 0): 530 if(self.cur_server_index >= 0):
518 id = self.servers[self.cur_server_index].getAttribute('id') 531 server_index = self.servers[self.cur_server_index]
519 meta = self.servers[self.cur_server_index].getAttribute('meta') 532 if(meta_server_lib.post_failed_connection(server_index.get('id'),
520 address = self.servers[self.cur_server_index].getAttribute('address') 533 meta=server_index.get('meta'), address=server_index.get('address'),
521 port = self.servers[self.cur_server_index].getAttribute('port') 534 port=server_index.get('port'))):
522 # post_failed_connection will return a non-zero if the server
523 # was removed. If it was, refresh the display
524 if(meta_server_lib.post_failed_connection(id,meta=meta,address=address,port=port)):
525 self.refresh_server_list() 535 self.refresh_server_list()
526 536
527 def do_connect(self, address): 537 def do_connect(self, address):
528 chat = component.get('chat') 538 chat = component.get('chat')
529 chat.InfoPost("Locating server at " + address + "...") 539 chat.InfoPost("Locating server at " + address + "...")
530 if self.session.connect(address): 540 if self.session.connect(address): self.frame.start_timer()
531 self.frame.start_timer()
532 else: 541 else:
533 chat.SystemPost("Failed to connect to game server...") 542 chat.SystemPost("Failed to connect to game server...")
534 self.failed_connection() 543 self.failed_connection()
535 544
536 def do_join_lobby(self): 545 def do_join_lobby(self):
537 self.cur_room_index = 0 546 self.cur_room_index = 0
538 self.session.send_join_group("0","") 547 self.session.send_join_group("0", "")
539 self.set_lobbybutton(0); 548 self.set_lobbybutton(0);
540 549
541 def do_join_group(self): 550 def do_join_group(self):
542 if self.cur_room_index >= 0: 551 if self.cur_room_index >= 0:
543 if self.cur_room_index != 0: 552 if self.cur_room_index != 0: self.set_lobbybutton(1);
544 self.set_lobbybutton(1); 553 else: self.set_lobbybutton(0);
545 else:
546 self.set_lobbybutton(0);
547 group_id = str(self.room_list.GetItemData(self.cur_room_index)) 554 group_id = str(self.room_list.GetItemData(self.cur_room_index))
548 group = self.session.get_group_info(group_id) 555 group = self.session.get_group_info(group_id)
549 pwd = "" 556 pwd = ""
550 if (group[2] == "True") or (group[2] == "1"): 557 if (group[2] == "True") or (group[2] == "1"):
551 pwd = self.password_manager.GetPassword("room", group_id) 558 pwd = self.password_manager.GetPassword("room", group_id)
552 #dlg = wx.TextEntryDialog(self,"Password?","Join Private Room") 559 #dlg = wx.TextEntryDialog(self,"Password?","Join Private Room")
553 #if dlg.ShowModal() == wx.ID_OK: 560 #if dlg.ShowModal() == wx.ID_OK:
554 # pwd = dlg.GetValue() 561 # pwd = dlg.GetValue()
555 #dlg.Destroy() 562 #dlg.Destroy()
556 else: 563 else: pwd = ""
557 pwd = "" 564 if pwd != None: #pwd == None means the user clicked "Cancel"
558 if pwd != None: #pwd==None means the user clicked "Cancel" 565 self.session.send_join_group(group_id, pwd)
559 self.session.send_join_group(group_id,pwd)
560 566
561 def do_create_group(self): 567 def do_create_group(self):
562 name = self.texts["room_name"].GetValue() 568 name = self.texts["room_name"].GetValue()
563 boot_pwd = self.texts["room_boot_pwd"].GetValue() 569 boot_pwd = self.texts["room_boot_pwd"].GetValue()
564 minversion = self.texts["room_min_version"].GetValue() 570 minversion = self.texts["room_min_version"].GetValue()
590 if loc > -1: 596 if loc > -1:
591 b = name[:loc] 597 b = name[:loc]
592 e = name[loc+1:] 598 e = name[loc+1:]
593 name = b + "&#39;" + e 599 name = b + "&#39;" + e
594 oldloc = loc+1 600 oldloc = loc+1
595 if self.buttons[GS_PWD].GetValue(): 601 if self.buttons['gs_pwd'].GetValue(): pwd = self.texts["room_pwd"].GetValue()
596 pwd = self.texts["room_pwd"].GetValue() 602 else: pwd = ""
597 else: 603 if name == "": wx.MessageBox("Invalid Name","Error");
598 pwd = ""
599 if name == "":
600 wx.MessageBox("Invalid Name","Error");
601 else: 604 else:
602 msg = "%s is creating room \'%s.\'" % (self.session.name, name) 605 msg = "%s is creating room \'%s.\'" % (self.session.name, name)
603 self.session.send( msg ) 606 self.session.send(msg)
604 self.session.send_create_group(name,pwd,boot_pwd,minversion) 607 self.session.send_create_group(name, pwd, boot_pwd, minversion)
605 self.set_lobbybutton(1); #enable the Lobby quickbutton 608 self.set_lobbybutton(1);
606 609
607 610 def on_size(self, evt):
608 #---------------------------------------------------------
609 # [START] Snowdog: Updated Game Server Window 12/02
610 #---------------------------------------------------------
611
612 def on_size(self,evt):
613 # set column widths for room list
614
615
616 # set column widths for server list
617 pass 611 pass
618
619
620
621 #---------------------------------------------------------
622 # [END] Snowdog: Updated Game Server Window 12/02
623 #---------------------------------------------------------
624
625 612
626 def colorize_group_list(self, groups): 613 def colorize_group_list(self, groups):
627 try: 614 try:
628 hex = orpg.tools.rgbhex.RGBHex() 615 hex = orpg.tools.rgbhex.RGBHex()
629
630 for gr in groups: 616 for gr in groups:
631 item_list_location = self.room_list.FindItemData(-1,int(gr[0])) 617 item_list_location = self.room_list.FindItemData(-1,int(gr[0]))
632 if item_list_location != -1: 618 if item_list_location != -1:
633 item = self.room_list.GetItem(item_list_location) 619 item = self.room_list.GetItem(item_list_location)
634 if gr[0] == "0": 620 if gr[0] == "0": r,g,b = hex.rgb_tuple(settings.get("RoomColor_Lobby"))
635
636 r,g,b = hex.rgb_tuple(settings.get_setting("RoomColor_Lobby"))
637 elif gr[3] <> "0": 621 elif gr[3] <> "0":
638
639 if gr[2] == "True" or gr[2] == "1": 622 if gr[2] == "True" or gr[2] == "1":
640 623 r,g,b = hex.rgb_tuple(settings.get("RoomColor_Locked"))
641 r,g,b = hex.rgb_tuple(settings.get_setting("RoomColor_Locked")) 624 else: r,g,b = hex.rgb_tuple(settings.get("RoomColor_Active"))
642 else: 625 else: r,g,b = hex.rgb_tuple(settings.get("RoomColor_Empty"))
643
644 r,g,b = hex.rgb_tuple(settings.get_setting("RoomColor_Active"))
645 else:
646
647 r,g,b = hex.rgb_tuple(settings.get_setting("RoomColor_Empty"))
648
649
650 color = wx.Colour(red=r,green=g,blue=b) 626 color = wx.Colour(red=r,green=g,blue=b)
651 item.SetTextColour(color) 627 item.SetTextColour(color)
652 self.room_list.SetItem(item) 628 self.room_list.SetItem(item)
653 except: 629 except: traceback.print_exc()
654 traceback.print_exc()