added player list

This commit is contained in:
cidoku 2025-02-13 17:11:51 -03:00
parent 05044732c2
commit 87c7a522d8
4 changed files with 118 additions and 15 deletions

View File

@ -53,9 +53,9 @@ class gamewindow(QtGui.QMainWindow):
frameGm.moveCenter(centerPoint)
self.move(frameGm.topLeft())
def showGame(self, tcp, charlist, musiclist, background, evidence, areas, features=[], oocjoin=[], hplist=[], webAO_bucket=""):
def showGame(self, tcp, playerlist, charlist, musiclist, background, evidence, areas, features=[], oocjoin=[], hplist=[], webAO_bucket=""):
self.gamewidget.disconnectnow = False
self.gamewidget.startGame(tcp, charlist, musiclist, background, evidence, areas, features, oocjoin, hplist, webAO_bucket)
self.gamewidget.startGame(tcp, playerlist, charlist, musiclist, background, evidence, areas, features, oocjoin, hplist, webAO_bucket)
self.stackwidget.setCurrentWidget(self.gamewidget)
def returnToMenu(self):

View File

@ -21,9 +21,15 @@ self.evidencedelete.move(8, 80)
self.evidencepresent.move((714 - 304 - 22) / 2 - self.evidencepresent.button_off.size().width() / 2, self.evidencedesc.y() - self.evidencepresent.button_off.size().height())
self.msgqueueList.setGeometry(8, 8, 714 - 304 - 22, 180)
self.playerList.setGeometry(8, 8, 714 - 304 - 22, 180)
self.removeQueue.resize(self.removeQueue.sizeHint())
self.removeQueue.move(8, self.msgqueueList.size().height() + 16)
self.playerKick.resize(self.playerKick.sizeHint())
self.playerKick.move(8, self.playerList.size().height() + 16)
self.playerBan.resize(self.playerBan.sizeHint())
self.playerBan.move(16 + self.playerKick.width(), self.playerList.size().height() + 16)
self.notmutedlabel.move(8, 8)
self.unmutedlist.setGeometry(8, 24, 160, 192)
self.mutedlist.setGeometry(238, 24, 160, 192)

View File

@ -785,6 +785,7 @@ class gui(QtGui.QWidget):
self.gametab_mute = QtGui.QWidget() # mute a player
self.gametab_pair = QtGui.QWidget() # AO2 pair
self.gametab_misc = QtGui.QWidget() # ao2xp misc/fun stuff
self.gametab_players = QtGui.QWidget() # client list
self.icLog = ChatLogs(self.gametab_log, 0, self.ooclog.logfile)
self.icLog.setReadOnly(True)
@ -814,6 +815,15 @@ class gui(QtGui.QWidget):
self.removeQueue.setText('Delete')
self.removeQueue.clicked.connect(self.onClicked_removeQueue)
self.playerList = QtGui.QListWidget(self.gametab_players)
self.playerList.itemClicked.connect(self.onClicked_playerList)
self.playerKick = QtGui.QPushButton(self.gametab_players)
self.playerKick.setText('Kick')
self.playerKick.clicked.connect(self.onClicked_playerKick)
self.playerBan = QtGui.QPushButton(self.gametab_players)
self.playerBan.setText('Ban')
self.playerBan.clicked.connect(self.onClicked_playerBan)
self.unmutedlist = QtGui.QListWidget(self.gametab_mute)
self.mutedlist = QtGui.QListWidget(self.gametab_mute)
self.mutebtn = QtGui.QPushButton(self.gametab_mute)
@ -876,11 +886,12 @@ class gui(QtGui.QWidget):
self.misc_layout.addWidget(self.spacebartext)
self.misc_layout.addWidget(self.autocaps)
self.gametabs.addTab(self.gametab_log, 'Game log')
self.gametabs.addTab(self.gametab_log, 'Log')
self.gametabs.addTab(self.gametab_evidence, 'Evidence')
self.gametabs.addTab(self.gametab_msgqueue, 'Message queue')
self.gametabs.addTab(self.gametab_msgqueue, 'Queue')
self.gametabs.addTab(self.gametab_players, 'Players')
self.gametabs.addTab(self.gametab_mute, 'Mute')
self.gametabs.addTab(self.gametab_iniswap, 'Easy IniSwap')
self.gametabs.addTab(self.gametab_iniswap, 'IniSwap')
self.gametabs.addTab(self.gametab_pair, 'Pair')
self.gametabs.addTab(self.gametab_misc, 'Misc')
@ -1054,6 +1065,8 @@ class gui(QtGui.QWidget):
self.evidence = []
self.selectedevi = -1
self.present = False
self.playerlist = {}
self.selectedplayer = -1
self.myflip = 0
self.playsfx = 1
self.loadSwapCharacters()
@ -1438,14 +1451,35 @@ class gui(QtGui.QWidget):
for i in range(len(self.msgqueueList)):
if self.msgqueueList.item(i) == item:
self.selectedmsg = i
def onClicked_playerList(self, item):
for i in range(len(self.playerList)):
sel = self.playerList.item(i)
if sel == item:
s = sel.text()
self.selectedplayer = s[1:s.indexOf("]")]
def onClicked_removeQueue(self):
if self.selectedmsg == -1:
return QtGui.QMessageBox.warning(self, 'nothing selected', 'select a message from the list to remove it')
return QtGui.QMessageBox.warning(self, 'Nothing selected', 'Select a message from the list to remove it.')
if len(self.msgqueueList) == 0:
return QtGui.QMessageBox.warning(self, "can't remove", 'there are no messages in the message queue\nenter a message on the Game chat to add one')
return QtGui.QMessageBox.warning(self, "Can't remove", 'There are no messages in the message queue.\nEnter a message on the Game chat to add one.')
self.msgqueueList.takeItem(self.selectedmsg)
del self.msgqueue[self.selectedmsg]
def onClicked_playerKick(self):
if not self.selectedplayer == -1:
reason, ok = QtGui.QInputDialog.getText(self, "Kick a player", "Please enter the reason.", text="Being annoying")
if reason and ok:
self.tcp.send("MA#%s#0#%s#%%" % (self.selectedplayer, reason))
def onClicked_playerBan(self):
if not self.selectedplayer == -1:
reason, ok = QtGui.QInputDialog.getText(self, "Ban a player", "Please enter the reason.", text="Being annoying")
if reason and ok:
duration, ok = QtGui.QInputDialog.getInt(self, "Ban a player", "Please enter the ban length in minutes.", 60, 1)
if duration and ok:
self.tcp.send("MA#%s#%s#%s#%%" % (self.selectedplayer, duration, reason))
def changeEvidence(self, ind):
if ind < 0:
@ -2470,11 +2504,12 @@ class gui(QtGui.QWidget):
audio.stophandle(self.music)
audio.freehandle(self.music)
def startGame(self, tcp, charlist, musiclist, background, evidence, areas, features=[], oocjoin=[], hplist=[], webAO_bucket=""):
def startGame(self, tcp, playerlist, charlist, musiclist, background, evidence, areas, features=[], oocjoin=[], hplist=[], webAO_bucket=""):
self.willDisconnect = False
self.mychar = -1
self.mychatcolor = 0
self.tcp = tcp
self.playerlist = playerlist
self.charlist = charlist
self.musiclist = musiclist
self.evidence = evidence
@ -2553,6 +2588,7 @@ class gui(QtGui.QWidget):
self.ooclog.append(msg)
for song in musiclist:
song = song.replace("<and>","&")
songitem = QtGui.QListWidgetItem()
songitem.setText(song)
if exists(AOpath + 'sounds/music/' + song):
@ -2560,6 +2596,11 @@ class gui(QtGui.QWidget):
else:
songitem.setBackgroundColor(QtGui.QColor(255, 128, 128))
self.musicitems.addItem(songitem)
for pid in playerlist:
self.updatePlayerList(pid, 0, 0)
for type in range(len(playerlist[pid])):
self.updatePlayerList(pid, 1, type, playerlist[pid][type])
self.musicslider.setValue(ini.read_ini_int("AO2XP.ini", "Audio", "Music volume", 100))
self.soundslider.setValue(ini.read_ini_int("AO2XP.ini", "Audio", "Sound volume", 100))
@ -2575,6 +2616,7 @@ class gui(QtGui.QWidget):
self.tcpthread.charSlots.connect(partial(self.charselect.setCharList, self.charlist))
self.tcpthread.showCharSelect.connect(self.charselect.show)
self.tcpthread.allEvidence.connect(self.allEvidence)
self.tcpthread.updatePlayerList.connect(self.updatePlayerList)
self.tcpthread.rainbowColor.connect(self.text.setStyleSheet)
self.tcpthread.start()
@ -2595,6 +2637,40 @@ class gui(QtGui.QWidget):
self.evidencedesc.setText('.')
else:
self.evidencedropdown.setCurrentIndex(self.selectedevi)
def updatePlayerList(self, id, op, type, data=""):
id = str(id)
if op == 0: # Add or remove player
if type == 0: # Add a player
self.playerList.addItem("[%s]" % id)
if not id in self.playerlist:
self.playerlist[id] = ["", "", "", ""]
if type == 1: # Remove a player
item = self.playerList.findItems("[%s]" % id, QtCore.Qt.MatchStartsWith)
if item:
self.playerList.takeItem(self.playerList.row(item[0]))
if id in self.playerlist:
del self.playerlist[id]
else: # Update a player
if id in self.playerlist:
self.playerlist[id][type] = data
item = self.playerList.findItems("[%s]" % id, QtCore.Qt.MatchStartsWith)
if item:
name = self.playerlist[id][0]
char = self.playerlist[id][1]
charname = self.playerlist[id][2]
text = "[%s]" % id
#4 ['s', 'cornelia (og)', 'Cornelia', '0']
#[4] cornelia (og) (Cornelia) s
if char:
text += " %s" % char
if charname:
text += " (%s)" % charname
if name:
text += " %s" % name
item[0].setText(text)
pass
class PresentButton(QtGui.QLabel):
@ -2790,6 +2866,7 @@ class TCP_Thread(QtCore.QThread):
showCharSelect = QtCore.pyqtSignal()
allEvidence = QtCore.pyqtSignal(list)
rainbowColor = QtCore.pyqtSignal(str)
updatePlayerList = QtCore.pyqtSignal(str, int, int, str)
def __init__(self, parent):
super(TCP_Thread, self).__init__(parent)
@ -2942,10 +3019,20 @@ class TCP_Thread(QtCore.QThread):
status = int(network[1])
statusStrings = ["You have logged out", "Wrong password", "Logged in"]
self.OOC_Log.emit("<b>%s</b>" % (statusStrings[status+1]))
elif header == "CHECK": #ping
pingafter = time.time()
self.parent.gotPing.emit(int((pingafter - pingbefore)*1000))
elif header == 'DONE':
self.showCharSelect.emit()
elif header == 'PR':
del network[0]
#print "(PR) id: %s, type: %d" % (network[0], int(network[1]))
self.updatePlayerList.emit(network[0], 0, int(network[1]), "")
elif header == 'PU':
del network[0]
#print "(PU) id: %s, type: %d, data: %s" % (network[0], int(network[1]), network[2])
self.updatePlayerList.emit(network[0], 1, int(network[1]), network[2])

View File

@ -207,8 +207,8 @@ class lobby(QtGui.QWidget):
self.actual_serverlist.append((ip, port, name, desc, ws_port))
def moveToGame(self, stuff):
tcp, charlist, musiclist, background, evidence, areas, features, joinooc, hplist, webAO_bucket = stuff
self.move_to_game(tcp, charlist, musiclist, background, evidence, areas, features, joinooc, hplist, webAO_bucket)
tcp, playerlist, charlist, musiclist, background, evidence, areas, features, joinooc, hplist, webAO_bucket = stuff
self.move_to_game(tcp, playerlist, charlist, musiclist, background, evidence, areas, features, joinooc, hplist, webAO_bucket)
def onSettingsClicked(self):
self.gamewindow.showSettings()
@ -326,8 +326,8 @@ class lobby(QtGui.QWidget):
self.aoserverinfo.stop()
self.aoserverinfo.start()
def move_to_game(self, tcp, charlist, musiclist, background, evidence, areas, features=[], oocjoin=[], hplist=[], webAO_bucket=""):
self.gamewindow.showGame(tcp, charlist, musiclist, background, evidence, areas, features, oocjoin, hplist, webAO_bucket)
def move_to_game(self, tcp, playerlist, charlist, musiclist, background, evidence, areas, features=[], oocjoin=[], hplist=[], webAO_bucket=""):
self.gamewindow.showGame(tcp, playerlist, charlist, musiclist, background, evidence, areas, features, oocjoin, hplist, webAO_bucket)
def lobby_sendchat(self):
#text = self.lobbychatinput.text().toUtf8()
@ -463,6 +463,7 @@ class AOServerInfo(QtCore.QThread):
areas = [[], [], [], []]
features = []
evidence = []
playerlist = {}
pingtimer = 150
readytick = -1
@ -482,7 +483,7 @@ class AOServerInfo(QtCore.QThread):
if readytick == 0:
readytick = -1
try:
self.moveToGameSignal.emit([self.tcp, charlist, musiclist, background, evidence, areas, features, joinooc, hplist, self.webAO_bucket])
self.moveToGameSignal.emit([self.tcp, playerlist, charlist, musiclist, background, evidence, areas, features, joinooc, hplist, self.webAO_bucket])
except Exception as err:
self.msgbox_signal.emit(0, "Error caught while loading", traceback.format_exc(err))
self.returnToLobby.emit()
@ -620,4 +621,13 @@ class AOServerInfo(QtCore.QThread):
continue
name = network[1].decode("utf-8").replace('<dollar>', '$').replace('<percent>', '%').replace('<and>', '&').replace('<num>', '#').replace('<pound>', '#')
chatmsg = network[2].decode("utf-8").replace('<dollar>', '$').replace('<percent>', '%').replace('<and>', '&').replace('<num>', '#').replace('<pound>', '#')
joinooc.append("%s: %s" % (name, chatmsg))
joinooc.append("%s: %s" % (name, chatmsg))
elif header == 'PU':
del network[0]
pid = network[0]
if not pid in playerlist:
playerlist[pid] = []
playerlist[pid].append(network[2])
#print "(PU) id: %d, type: %d, data: %s" % (int(network[0]), int(network[1]), network[2])