(Tuturial)Como fazer transformice Pirata 01.06.12 16:26
Aqui esta a fonte(Source) do transformice que todos queriam.
Fonte
# Por Kyl3 (Edi472)
# Transformice Privado Servidor 0,55 Fonte
# Copyright eSBody 2011
# A cópia de fonte é liberado
# Manuteno
# Link Censurado por TheSilence!
import random
tomada de importação, asyncore, asynchat
fio de importação, threading
tempo de importação
importação tipos de
importação re
importação base64, binascii, hashlib
importação de registro de importação SimpleXMLRPCServer SimpleXMLRPCServer, SimpleXMLRPCRequestHandler logging.basicConfig (filename = 'Archives.html', level = logging.INFO, format = "% (asctime) s -% (levelname) s - % (message) s ") = False VERBOSE VERSION = "0,55" ADMIN_NAME = "Admin" ADMIN_NAMES frozenset = (['Admin', 'admin', 'Fênix', 'Tigrounette', 'Melibellule', 'Jonathan', ' Modogeek ',' Mododivin ',' Modoplouf ',' Modotruc ']) ADMIN_HASH = "5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62 a11ef721d1542d8" LEVEL_LIST = range (0, 100 +1) + intervalo (901, 910 1) # 0 a 100 são mapas normais, 901 a 910 são substituídos por mapas nightmode. # 901 1006 # 902 1007 (Não Shaman) # 903 1015 # 904 1027 # 905 1040 # 906 1062 # 907 1067 # 908 1087 (somente em Shaman nightmode) # 909 1088 (somente em Shaman nightmode ) # 910 1092 (somente em Shaman nightmode) TransformiceServer classe (asyncore.dispatcher): def __init__ (HOST self, ='', PORT = 1111): self.HOST = HOST PORT = self.PORT asyncore.dispatcher.__init__ self ( ) self.create_socket (socket.AF_INET, socket.SOCK_STREAM) # tentar re-utilizar uma porta do servidor, se possível self.set_reuse_addr () self.bind ((self.HOST, self.PORT)) self.listen (5) de registro . info ("running") # self.clients = [] self.rooms = {} def handle_accept (self): socket, addr = self.accept () TransformiceClientHandler (self, socket, addr) def autenticar (username auto, PasswordHash): # autenticação se username.strip () inferior a () em ADMIN_NAMES:. PasswordHash se = ADMIN_HASH: return -1 # inválida retorno de 10 # Admin return 1 # normal Jogador : def createAccount (self, nome de usuário, PasswordHash) pass def sendPrivMsg (self, fromUsername, toUsername mensagem,): = False encontrados para quarto no self.rooms.itervalues (): para o jogador em room.clients.itervalues (): se player.username.lower () == toUsername.lower ( ): player.sendRecievePrivMsg (mensagem fromUsername) encontrado = True retorno encontrado def addClientToRoom (cliente de auto, roomname): roomname = str (roomname) se self.rooms.has_key (roomname): . self.rooms [roomname] AddClient ( cliente) else: self.rooms [roomname] = TransformiceRoomHandler (self, roomname) self.rooms [roomname] AddClient (cliente). self.rooms # return [roomname] def closeRoom (quarto self): se self.rooms.has_key (room.name): room.close () del self.rooms [room.name] def getConnectedPlayerCount (self): return 1 def generatePlayerCode (self): random.randrange retorno (1, 10 milhões) : def recommendRoom (self) de retorno 1 min retornar #. (self.rooms.itervalues (), key = lambda quarto: abs (len (room.clients) - 20)) O nome da classe TransformiceStateRecorder (object): def __init__ (quarto self): self.room = sala de self.reset () redefinir def (self): self.sateLog = [] self.lastPhysicsStateEvent = None self.anchors = [] def log (self, eventTokens, valores): self.sateLog.append ((eventTokens, valores) ) def logMessage (messageFunction auto, args): self.sateLog.append ((messageFunction, args)) def setPhyscisState (self, eventTokens, valores): self.lastPhysicsStateEvent = (eventTokens, valores) def addAnchor (self, valores): self.anchors.extend (valores) def sendToClient (cliente self): se self.lastPhysicsStateEvent: valor, eventTokens = self.lastPhysicsStateEvent client.sendData (eventTokens, valor) para sendThing, o valor de self.sateLog: se o tipo (sendThing) == types.FunctionType: sendThing (cliente, * valor) else: client.sendData (sendThing, value) if len (self.anchors)> 0: client.sendSetAnchors (self.anchors) TransformiceRoomHandler classe (object): def __init__ ( self, servidor de nomes): self.server = servidor = self.name name.strip () self.clients = {} = self.stateRecorder TransformiceStateRecorder (self) self.currentShamanCode = None self.currentSyncroniserCode = None self.isSandbox = False self.isBootcamp = False self.specificMap = False self.properNoShamanMaps = True # self.currentWorld = random.choice (LEVEL_LIST) runthismap = random.choice (LEVEL_LIST) se runthismap == 901: runthismap = 1006 se runthismap == 902: runthismap = 1007 se runthismap == 903: runthismap = 1015 se runthismap == 904: runthismap = 1027 se runthismap == 905: runthismap = 1040 se runthismap == 906: runthismap = 1062 se runthismap == 907: runthismap = 1067 = se runthismap = 908: runthismap = 1087 se runthismap == 909: runthismap = 1088 se runthismap == 910: runthismap = 1092 = self.currentWorld runthismap se self.name.startswith ("sandbox_") ou self.name.startswith ("play_" ) ou self.name.startswith ("bootcamp_"): try: . runthismap = int (re.search (r "([0-9 ]+)$", self.name) grupo (0)) se runthismap == 901: runthismap = 11006 se runthismap == 902: runthismap = 11007 se runthismap == 903: runthismap = 11015 se runthismap == 904: runthismap = 11027 se runthismap == 905: runthismap = 11040 se runthismap == 906: runthismap = 11062 se runthismap == 907: runthismap = 11067 se runthismap == 908: runthismap = 11087 se runthismap == 909: runthismap = 11088 se runthismap == 910: runthismap = 11092 self.currentWorld = runthismap exceto (ValueError, AttributeError): passar mais : self.specificMap = True se self.name.startswith ("sandbox_"): self.isSandbox = True se self.name.startswith ("bootcamp_"): = True self.isBootcamp self.everybodyIsShaman = self.isSandbox self.nobodyIsShaman = self.isBootcamp self.worldChangeTimer = None se não self.isSandbox: self.worldChangeTimer threading.Timer = (120, self.worldChange) self.worldChangeTimer.start () = self.gameStartTime time.time () self.numCompleted = 0 def close (self): se self.worldChangeTimer: self.worldChangeTimer.cancel () worldChange def (self): self.stateRecorder.reset () self.currentSyncroniserCode = None se self.clients.has_key (self.currentShamanCode): currentShaman = self.clients [self.currentShamanCode] para playerCode, cliente em self.clients.iteritems (): try: # ser cauteloso, threads quebrar as coisas, mas nós não queremos que ele morra client.sendShamanPerformance (currentShaman.usernam e, self. numCompleted) , exceto: passar self.currentShamanCode = None para playerCode, cliente em self.clients.iteritems (): client.resetPlay () se não self.specificMap: runthismap = random.choice (LEVEL_LIST) # if runthismap == 901: # runthismap = random.choice (LEVEL_LIST) # if runthismap == 902: # runthismap = random.choice (LEVEL_LIST) # if runthismap == 903: # runthismap = random.choice (LEVEL_LIST) # if runthismap == 904: # runthismap = random.choice (LEVEL_LIST) se runthismap == 901: runthismap = 1006 se runthismap == 902: runthismap = 1007 se runthismap == 903: runthismap = 1015 se runthismap == 904: runthismap = 1027 se runthismap == 905: runthismap = 1040 se runthismap == 906: runthismap = 1062 se runthismap == 907: runthismap = 1067 se runthismap == 908: runthismap = 1087 se runthismap == 909: runthismap = 1088 se runthismap == 910: runthismap = 1092 se runthismap == self.currentWorld: runthismap = random.choice (LEVEL_LIST) self.currentWorld = runthismap # print self.currentWorld, self.specificMap para playerCode, cliente em self.clients.iteritems (): client.startPlay () self.worldChangeTimer = threading. temporizador (120, self.worldChange) self.worldChangeTimer.start () = self.gameStartTime time.time () self.numCompleted = 0 def worldChangeSpecific (self, mapnumber): # self.stateRecorder.reset () # self.currentSyncroniserCode = Nenhum # if self.clients.has_key (self.currentShamanCode): # currentShaman = self.clients [self.currentShamanCode] # para playerCode, cliente em self.clients.iteritems (): # try: # ser cauteloso, threads quebrar as coisas, mas nós não queremos que ele morra # client.sendShamanPerformance (currentShaman.usernam e, self.numCompleted) # exceto: # pass # self.currentShamanCode = None # para playerCode, cliente em self.clients.iteritems (): # cliente. resetPlay () # se não self.specificMap: self.currentWorld = mapnumber # print self.currentWorld, self.specificMap para playerCode, cliente em self.clients.iteritems (): client.startPlay () # self.worldChangeTimer = threading.Timer (120, self.worldChange) # self.worldChangeTimer.start () # self.gameStartTime = time.time () # self.numCompleted = 0 def checkShouldChangeWorld (self): se não self.isSandbox: se todos (client.isDead para cliente em self.clients.itervalues ()): self.worldChangeTimer.cancel () self.worldChange () def resetSandbox (self): se self.isSandbox: para o cliente playerCode, em self.clients.iteritems (): resetpscore = 0 self.informAll (TransformiceClientHandler.sendPlaye rDied, [playerCode, resetpscore]) client.isDead = True se todos (client.isDead para o cliente em self.clients.itervalues ()): # self.worldChangeTimer.cancel () # self.worldChange () para playerCode, cliente em self.clients.iteritems (): client.resetPlay () = self.currentWorld self.currentWorld para playerCode, cliente em self.clients.iteritems (): client.startPlay () else: pass def AddClient (self, newClient): self.clients [newClient.playerCode] = newClient self.informAllOthers (newClient, TransformiceClientHandler.sendNewPlayer, [newClient.getPlayerData ()]) # h = newClient.room auto newClient.startPlay () self.stateRecorder. sendToClient (newClient) def RemoverCliente (self, RemoverCliente): se self.clients.has_key (removeClient.playerCode): self.clients del [removeClient.playerCode] se self.getPlayerCount () == 0: self.server.closeRoom (self ) retorno self.informAll (TransformiceClientHandler.sendPlaye rDisconnect, [removeClient.playerCode]) se self.currentSyncroniserCode == removeClient.playerCode: newSyncroniser = random.choice (self.clients.values ()) = True newSyncroniser.isSyncroniser self.currentSyncroniserCode = newSyncroniser.playerCode self.informAll (TransformiceClientHandler.sendSynch roniser, [newSyncroniser.playerCode]) self.checkShouldChangeWorld () def playMusic (caminho self): self.informAll (usic TransformiceClientHandler.sendPlayM, [caminho]) def informAll (self, clientFunction , args): para o cliente playerCode, em self.clients.iteritems (): clientFunction (cliente, * args) def informAllOthers (self, senderClient, clientFunction, args): para o cliente playerCode, em self.clients.iteritems (): se playerCode = senderClient.playerCode: clientFunction (cliente, * args) def SendAll (self, eventTokens, dados = None): para o cliente playerCode, em self.clients.iteritems (): client.sendData (eventTokens, dados) def sendAllOthers ( self, senderClient, eventTokens, dados): para o cliente playerCode, em self.clients.iteritems (): se client.playerCode = senderClient.playerCode: client.sendData (eventTokens, dados) def killall (self): para playerCode cliente, em self.clients.iteritems (): resetpscore = 0 self.informAll (TransformiceClientHandler.sendPlaye rDied, [playerCode, resetpscore]) = True client.isDead self.checkShouldChangeWorld () def getPlayerCount (self): return len (self.clients) def getPlayerList (self): para o cliente playerCode, em self.clients.iteritems (): rendimento client.getPlayerData () def getShamanCode (self): se é self.currentShamanCode None: self.currentShamanCode = random.choice (self.clients. keys ()) retorno self.currentShamanCode def getSyncroniserCode (self): se é self.currentSyncroniserCode None: self.currentSyncroniserCode = random.choice (self.clients.keys ()) retorno self.currentSyncroniserCode classe TransformiceClientHandler (asynchat.async_ de bate-papo ): def __init__ (self, servidor, meias, endereço): self.server = servidor self.address = Endereço asynchat.async_chat.__init__ (self, sock = meia) self.buffer = "" self.set_terminator ("\ x00") auto- . validatingVersion = True self.username = "" self.playerCode = -1 self.privilegeLevel = 0 # 0 - "Convidar" - Guest? # 1 - jogador normal # 5 - "Modo"? # 10 - Admin self.room = Nenhum self.isShaman = False self.isDead = False self.isSyncroniser = False self.score = 0 = 0 self.titleNumber self.Tellfirsttime = 0 def collect_incoming_data (self, dados): self.buffer + = dados def found_terminator (self) : se self.validatingVersion: se self.buffer == "<policy-file-request/>": se VERBOSE: logging.debug ("solicitação de arquivo Política") self.push (r """<? versão xml = " 1.0 "?> <cross-domain-policy> <allow-access-from domain="*" to-ports="%d"/> </ cross-domain-policy> ""% "(self.server.PORT ) + "\ x00") self.close_when_done () else: versão, bytesLoaded1, bytesLoaded2 = self.buffer.split ("\ x01") se a versão == VERSÃO: self.sendCorrectVersion () else: self.close_when_done () auto- . validatingVersion = False else: self.parseData (self.buffer) self.buffer = "" def parseData (self, dados): MDT_stuff = data [: 4] dados = dados [4]: valores = data.split ("\ x01 ") se VERBOSE: pass # logging.debug (repr (MDT_stuff), valores) = eventTokens values.pop (0) eventToken1, eventToken2 = eventTokens se eventToken1 == "\ X1A": se eventToken2 == "\ x02": temporizador # acordado unknownTime, = valores unknownTime = int (unknownTime) elif eventToken2 == "\ x03": # Criar uma conta ou nome de usuário, PasswordHash = valores username = username.replace ("<","") self.server.createAccount (username , PasswordHash) self. logon (nome de usuário, PasswordHash) elif eventToken2 == "\ x04": # login username, PasswordHash, showTarget = valores showTarget = bool (int (showTarget)) username = username.replace ("<","" ) self.login (username, PasswordHash) else: logging.warning ("Unimplemented% r" eventTokens%) # elevar NotImplementedError, eventTokens elif eventToken1 == "\ x04": se eventToken2 == "\ x03": # update física do mundo # CodePartieEnCours = values.pop (0) # para ObjectData em valores: # if ObjectData == 'x': # continua # objectType, x, y, dx, dy, rotação, angularVelocity, isSolid objectData.split = (',' ) se self.isSyncroniser: self.room.sendAllOthers (self, eventTokens, valores) self.room.stateRecorder.setPhyscisState (eventToken s, valores) elif eventToken2 == "\ x04": # update posição # isMovingRight, isMovingLeft, x, y, dx, dy, isJumping, jumpAnimation = valores self.room.sendAllOthers (self, eventTokens, valores + [self.playerCode]) elif eventToken2 == "\ X05": # jogador saiu dos limites self.isDead = True # merda pontuação # self.score = self.score-1 # if self.score <0: # self.score = 0 end # self.room.informAll (TransformiceClientHandler.send PlayerDied, [self.playerCode, self.score]) auto- . room.checkShouldChangeWorld () elif eventToken2 == "\ x06": # "Demande_Giclage" # objectcode, = valores self.room.sendAll (eventTokens, valores) elif eventToken2 == "\ X08": ? # conjouring animação # direção, = valores # direction = int (direção) self.room.sendAllOthers (self, eventTokens, [self.playerCode] + valores) elif eventToken2 == "\ X09": # begin / end crouch crouching, = valores agachado = bool (int (agachado)) se agachado: self.room.sendAllOthers (self, eventTokens, [self.playerCode] + valores) else: self.room.sendAllOthers (self, eventTokens, [self.playerCode]) elif eventToken2 == "\ x12 ": # começar grappin x, y = valores self.room.sendAllOthers (self, eventTokens, [self.playerCode] + valores) # pass elif eventToken2 == "\ x13": # end grappin self.room.sendAllOthers (self, eventTokens, [self.playerCode]) # pass elif eventToken2 == "\ x14": logging.debug ("PONG'd") else: logging.warning ("Unimplemented% r" eventTokens%) # elevar NotImplementedError, eventTokens elif eventToken1 == "\ x06": se eventToken2 == "\ x06": # enviado conversar mensagem mensagem = valores message = message.replace ("<","") mensagem # = message.replace ("#","" ) logging.info "s% ((% s:% r)"% (self.room.name, mensagem self.username,)) self.room.sendAll (eventTokens, [self.playerCode, self.username, mensagem. strip ()]) elif eventToken2 == "\ X1A": comando # enviado evento, = valores event_raw = event.strip () evento = event_raw.lower () logging.info ("(% s) [c]% s: % r "% (self.room.name, self.username, event)) se event.startswith ("sala") ou event.startswith ("salão"): # vestiário roomname # = evento [5]: = roomname event.split ("", 1) [1] self.enterRoom (roomname) elif event.startswith ("c") ou event.startswith ("w"): _, nome de usuário, message = event_raw.split ("", 2) se não self.server.sendPrivMsg (self.username, nome, mensagem): # se a falha self.sendPlayerNotFound () else: self.sendSentPrivMsg (username, mensagem) elif evento ("dança", "danse", " profil "): self.room.informAll (PlayerAction TransformiceClientHandler.send, [self.playerCode, 1]) elif evento ("rir", "rire"): self.room.informAll (PlayerAction TransformiceClientHandler.send, [self. playerCode, 2]) elif evento ("chorar", "pleurer"): self.room.informAll (TransformiceClientHandler.send PlayerAction, [self.playerCode, 3]) elif evento ("deconnecter"): self.room. informAll (TransformiceClientHandler.send PlayerDisconnect, [self.playerCode]) self.close () elif evento ("kill", "suicídio", "bolhas", "morrer"): = True self.isDead self.room.informAll ( TransformiceClientHandler.send PlayerDied, [self.playerCode, self.score]) self.room.checkShouldChangeWorld () elif event.startswith ("title") ou event.startswith ("título"): titlenumber event.split = ("", 1) [1] = self.titleNumber titlenumber elif event.startswith ("profil"): self.sendPlayerNotFound () elif event.startswith ("ban"): banname event.split = ("", 1) [1] # não fez elif event.startswith ("annonce") ou event.startswith ("um"): # modsendmessage event.split = ("", 1) [1] se self.username == "Admin": modsendmessage evento =. split ("", 1) [1] # para quarto no self.server.rooms.itervalues (): self.room.informAll (TransformiceClientHandler.send ModMessage, ["Admin ~", modsendmessage]) elif event.startswith (" informação ") ou event.startswith (" info "): # modsendmessage event.split = ("", 1) [1] se self.username == "Admin": modsendmessage event.split = ("", 1) [ 1] # para quarto no self.server.rooms.itervalues (): self.room.informAll (TransformiceClientHandler.send ModMessage, ["~ da Informação", modsendmessage]) elif event.startswith ("all") ou event.startswith ( "tous"): # modsendmessage event.split = ("", 1) [1] se self.username == "Admin": modsendmessage event.split = ("", 1) [1] # para quarto no self. server.rooms.itervalues (): self.room.informAll (TransformiceClientHandler.send ModMessage, ["", modsendmessage]) elif event.startswith ("def"): se self.username == "Admin": tellfirstm evento =. split ("", 1) [1] se tellfirstm == "arret": modsendmessage = "Arret du serveur" self.room.informAll (TransformiceClientHandler.send ModMessage, ["~ da Informação", modsendmessage]) elif tellfirstm == " infos ": modsendmessage = "TransforEmu V 0,55 por Phoenix ~ ~ Para FUNKYCHEAT.FR" self.room.informAll (TransformiceClientHandler.send ModMessage, ["~ da Informação", modsendmessage]) elif tellfirstm == "assessor": modsendmessage = "Liste des commandes dans le local . Pour obtenir de l'aide de la parte d'un administrateur '/ c Administração TONMESSAGE " self.room.informAll (TransformiceClientHandler.send ModMessage, ["Informações ~", modsendmessage]) elif tellfirstm == " maj ": modsendmessage = "Relancez la página et le videz cache" self.room.informAll (TransformiceClientHandler.send ModMessage, ["~ Mise A Jour", modsendmessage]) elif tellfirstm == "reboot": modsendmessage = "Reboot (Redemmarage ) du serveur iminente " self.room.informAll (TransformiceClientHandler.send ModMessage, ["~ da Informação", modsendmessage]) elif tellfirstm == "commandes": modsendmessage = "<b> <u> Commandes </ u> </ b > Joueurs Normaux </ br> </ br> <b> <u> Touche ALT + Clic sur la carte </ u> </ b> Teletransporte </ br> </ br> </ br> <b> <u > Clic sur la carte </ u> </ b> Active / Bouge le Grappin </ br> <b> <u> Clic sur soi </ u> </ b> Desativa le Grappin </ br> <b> < u> / salão X </ u> </ b> Alterar salão de </ br> <b> <u> / salão sandbox_X </ u> </ b> Va dans un salon Sandbox (Pas de temps Limite de, tout le monde chaman) (X = ID de carte) </ br> <b> <u> / salão play_X </ u> </ b> Va dans un salon OU une carte soros joue en boucle (X = ID de carte) </ br> <b> <u> / salão bootcamp_X </ u> </ b> Va dans un salon sans chaman (X = ID de carte) </ br> <b> <u> / rire </ u> </ b> Rigoler </ br> <b> <u> / pleurer </ u> </ b> Pleurer </ br> <b> <u> / danse </ u> </ b> Danser </ br > <b> <u> / deconnecter </ u> </ b> Sé deconnecter </ br> <b> <u> suicídio / </ u> </ b> Sé tuer (de la partie) </ br> <b> <u> / título X </ u> </ b> Mudança de título </ br> <b> <u> / c XY </ u> </ b> Parler um quelqun (X = destinataire, Y = Message) " self.room.informAll (TransformiceClientHandler.send ModMessage, ["~ da Informação", modsendmessage]) elif event.startswith ("primeiro") ou event.startswith ("premier"): se self.username == " Admin ": tellfirstm event.split = ("", 1) [1] se tellfirstm == "oui": modsendmessage = "Publicação des primeira dans le chat" self.room.informAll (TransformiceClientHandler.send ModMessage, ["Informações ~ ", modsendmessage]) self.Tellfirsttime = 1 elif tellfirstm == "não": modsendmessage = "Arret de la publicação des dans le primeiro chat" self.room.informAll (TransformiceClientHandler.send ModMessage, ["Informações ~", modsendmessage] ) self.Tellfirsttime = 0 else: modsendmessage = ". Invalide" self.room.informAll (TransformiceClientHandler.send ModMessage, ["~ Erreur", modsendmessage]) = 0 self.Tellfirsttime elif evento event.startswith ("mapa") ou . startswith ("carte"): # Este comando é muito glitchy. Evitar o uso. self.username se == "Admin": mapnumber event.split = ("", 1) [1] = True self.isDead self.room.informAll (TransformiceClientHandler.send PlayerDied, [self.playerCode, self. pontuação]) self.room.worldChangeSpecific (mapnumber) modsendmessage = "Changement de carte" self.room.informAll (TransformiceClientHandler.send ModMessage, ["~ da Informação", modsendmessage]) elif event.startswith ("chamanfake") ou evento. startswith ("fake"): se self.username == "Admin": _, hname, hsaves event_raw.split = ("", 2) self.room. informAll (TransformiceClientHandler.send ShamanPerformance, [hname, hsaves]) elif evento ("killall") ou event.startswith ("tuercarte"): se self.username == "Admin": self.room.killAll () = modsendmessage "Joueurs de la carte ter" self.room.informAll (TransformiceClientHandler.send ModMessage, ["Informações ~", modsendmessage]) elif evento ("clear") ou event.startswith ("nettoyer"): se self.username = = "Admin": self.room.resetSandbox () modsendmessage = "Relancement de la carte" self.room.informAll (TransformiceClientHandler.send ModMessage, ["Informações ~", modsendmessage]) elif evento em evento ("online") ou . startswith ("joueursco"): # modsendmessage event.split = ("", 1) [1] se self.username == "Admin": # modsendmessage self.room.getPlayerCount = () = playercountm self.room.getPlayerCount () modsendmessage = 'Il ya% Connéctés d Joueurs. % Playercountm self.room.informAll (TransformiceClientHandler.send ModMessage, ["Informações ~", modsendmessage]) elif evento ("mapid") ou event.startswith ("idcarte"): # modsendmessage event.split = ("", 1) [1] se self.username == "Admin": currentmapme = self.room.currentWorld modsendmessage = 'Nous sommes sur la carte% d.' % Currentmapme self.room.informAll (TransformiceClientHandler.send ModMessage, ["Informações ~", modsendmessage]) elif evento ("cartere") ou event.startswith ("replay"): # modsendmessage event.split = ("", 1) [1] se self.username == "Admin": currentmapme = self.room.currentWorld self.isDead = True
self.room.informAll (TransformiceClientHandler.send PlayerDied, [self.playerCode, self.score])
self.room.worldChangeSpecific (currentmapme)
modsendmessage = 'Relancement de la carte% d. " % Currentmapme
self.room.informAll (TransformiceClientHandler.send ModMessage, ["~ da Informação", modsendmessage]) elif event.startswith ("buraco") ou event.startswith ("troufake"): se self.username == "Admin" : _, hscore, HColoque, htime event_raw.split = ("", 3) self.isDead = True # self.room.informAll (TransformiceClientHandler.sen dPlayerDied, [self.playerCode, self.score]) self.room.informAll (TransformiceClientHandler.send PlayerGotCheese, [self.playerCode, hscore, HColoque, htime]) self.room.checkShouldChangeWorld () elif event.startswith ("libre") ou event.startswith ("free"): se self.username == "Admin": _, hscore, htime event_raw.split = ("", 2) self.room.informAll (TransformiceClientHandler.send ModMessage, [""]) elif event.startswith ("música") ou event.startswith ( "musique"): se self.username == "Admin": musicmessage event.split = ("", 1) [1] self.room.informAll (TransformiceClientHandler.send PlayMusic, [musicmessage]) modsendmessage = "On conheceu le ! filho " self.room.informAll (TransformiceClientHandler.send ModMessage, ["~ Musique", modsendmessage]) elif event.startswith ("musicoff") ou event.startswith ("musiqueoff"): se self.username == "Admin": musicmessage = event.split ("off", 1) [1] self.room.informAll (TransformiceClientHandler.send PlayMusic, [musicmessage]) modsendmessage = "Et em coupe le filho!" self.room. informAll (TransformiceClientHandler.send ModMessage, ["~ Musique", modsendmessage]) else: logging.warning ("Unimplemented% r" evento%) # elevar NotImplementedError, evento mais: logging.warning ("Unimplemented% r" eventTokens%) # levantar NotImplementedError, eventTokens elif eventToken1 == "\ X05": se eventToken2 == "\ x07": # coisa Anchor # jointType, object1, o1x, o1y, o1r, object2, o2x, o2y, O2R = valores self.room.stateRecorder . addAnchor (valores) self.room.sendAllOthers (self, eventTokens, valores) # self.room.sendAll (eventTokens, valores) elif eventToken2 == "\ X08": # objeto começar conjouring # objectcode, x, y, rotação = valores self.room.sendAllOthers (self, eventTokens, [self.playerCode] + valores) elif eventToken2 == "\ X09": ? # conjouring final self.room.sendAllOthers (self, eventTokens, [self.playerCode]) elif eventToken2 == "\ x0E": # "Demande_Creation_Clou" # pass self.room.sendAll (eventTokens, valores) elif eventToken2 == "\ x0F": # "Demande_Creation_Sol" # pass self.room.sendAll (eventTokens, valores) elif eventToken2 == "\ x10": # "Demande_Deplacement_Fromage" # x, y = valores self.room.sendAll (eventTokens, valores) elif eventToken2 == "\ x11": # "Demande_Explosion" # pass self.room.sendAll (eventTokens, valores) elif eventToken2 == "\ x12": ! # rato tem o queijo no buraco objectID, = valores self.isDead = True self.room.numCompleted + = 1 lugar = self.room.numCompleted timeTaken = int ((time.time () - self.room.gameStartTime) * 10) # merda Pontuação playerscorep = self.score se lugar == 1: playerscorep = playerscorep 16 elif lugar == 2: playerscorep = playerscorep 14 elif lugar == 3: playerscorep = playerscorep 12 else: playerscorep = 10 playerscorep se self.isShaman == True: playerscorep = 0 = self.score playerscorep end # se self.room.numCompleted == 1: se self.Tellfirsttime == 1: modsendmessage = 'Primeiro en% d dixiemes de segundos '% (timeTaken) self.room.informAll (TransformiceClientHandler.send ModMessage, ["~ First", modsendmessage]) self.room.informAll (TransformiceClientHandler.send PlayerGotCheese, [self.playerCode, self.score , lugar timeTaken]) # h self.room.stateRecorder.logMessage (TransformiceCli entHandler.sendPlayerGotCheese, [self.playerCode, self.score, lugar timeTaken]) self.room.checkShouldChangeWorld () elif eventToken2 == "\ x13" : # cliente acha que ele tem de queijo # pass # SendAll vai confirmar para o cliente: / self.room.sendAll (eventTokens, [self.playerCode]) self.room.stateRecorder.log (eventTokens, [self.playerCode]) elif eventToken2 == "\ x14": # objeto finalizar conjouring # objectcode, x, y, rotação, unkn1, unkn2, isSolid = valores self.room.sendAllOthers (self, eventTokens, [self.playerCode] + valores) elif eventToken2 == "\ x15": # "Creation_Objet_Monde" - mundo objeto de criação # objectcode, x, y, unkn1, unkn2, unkn3, unkn4 = valores # if self.isSyncroniser: self.room.sendAllOthers (self, eventToken1 + "\ x14", valores) elif eventToken2 == "\ x16": # "Demande_Changement_Gravite" # gx, gy = valores # if self.isSyncroniser: self.room.sendAll (eventTokens, valores) else: logging.warning ("r% Unimplemented"% eventTokens ) # elevar NotImplementedError, eventTokens elif eventToken1 == "\ x14": se eventToken2 == "\ x14": shop # open # fazer alguma coisa aqui passar elif eventToken1 == "\ x18": se eventToken2 == "\ x0F": # fóruns abertos # fazer alguma coisa aqui pass else: logging.warning ("r% Unimplemented" eventTokens%) # elevar NotImplementedError, eventTokens elif eventToken1 == "\ X08": se eventToken2 == "\ x0d": amigos # abrir passagem elif eventToken2 == "\ x10": # anexar baloon para o jogador # playerCode, = valores self.room.sendAll (eventTokens, valores) elif eventToken2 == "\ x11": # baloon destacado self.room.sendAllOthers (self, "\ X08 \ x10 ", [self.playerCode," 0 "]) # desconhecidos? mais: logging.warning ("Unimplemented% r" eventTokens%) # elevar NotImplementedError, eventTokens elif eventToken1 == "\ x19": se eventToken2 = = "\ x03": desenho # Limpar self.room.sendAllOthers (self, eventTokens, valores) elif eventToken2 == "\ x04": # Comece a desenhar # x, y = valores self.room.sendAllOthers (self, eventTokens, valores ) elif eventToken2 == "\ X05": # Desenha o ponto # x, y = valores self.room.sendAllOthers (self, eventTokens, valores) else: logging.warning ("r% Unimplemented" eventTokens%) else: logging.warning ("Unimplemented% r" eventTokens%) # elevar NotImplementedError, eventTokens def handle_close (self): se self.room: self.room.removeClient (self) self.close () def getLook (self): return "0,0" def sendData (self, eventCodes, dados = None): se VERBOSE: logging.debug ("Envie% r% r"% (eventCodes, dados)) se os dados: self.push ('\ x01' join (map (str. [eventCodes] + dados)) + "\ x00") else: self.push (eventCodes + "\ x00") def sendCorrectVersion (self): self.sendData ("\ X1A" + "\ X1B", str [( self.server.getConnectedPlayerCount ()), "0123456789", "0"] # MDT, CMDTEC ) def sendTitleList (self): self.sendData ("\ X08" + "\ x0F", ["0"] ) def sendPlayerLoginData (self): self.sendData ("\ X1A" + "\ X08", [self.username, str (self.playerCode), str (self.privilegeLevel)] ) def sendEnterRoom (self, roomname): self.sendData ( "\ X05" + "\ x15", [str (roomname)] ) def sendNewParty (self): self.sendData ("\ X05" + "\ X05", [self.room.currentWorld, self.room.getPlayerCount ( ), 1] # tempo restante? ) def sendPlayerList (self): self.sendData ("\ X08" + "\ X09", lista (self.room.getPlayerList ()) ) def sendNewPlayer (self, playerData): self. sendData ("\ X08" + "\ X08", [playerData] ) def sendPlayerDisconnect (self, playerCode): self.sendData ("\ X08" + "\ x07", [playerCode] ) def pontuação sendPlayerDied (self, playerCode, ): pontuação = escore-1 se o resultado <0: pontuação = 0 = self.score pontuação self.sendData ("\ X08" + "\ X05", [playerCode, 0, pontuação] # unkn (esquerda números?) pontuação, ) def sendPlayerGotCheese (self, playerCode, pontuação, lugar timeTaken): self.sendData ("\ X08" + "\ x06", ? [playerCode, 0, pontuação, lugar timeTaken] # unkn (à esquerda num) pontuação, tempo, lugar ) def sendShamanCode (self, shamanPlayerCode): self.sendData ("\ X08" + "\ x14", [shamanPlayerCode] ) def sendSynchroniser (self, playerCode): self.sendData ("\ X08" + "\ x15 " [playerCode] ) sendSetAnchors def (self, âncoras): self.sendData ("\ X05" + "\ x07", âncoras ) def sendATEC (self): self.sendData ("\ X1A" + "\ X1A") def sendPING (self): self.sendData ("\ x04" + "\ x14") def sendShamanPerformance (shamanName auto, numGathered): # Irá exibir "Info_Fromage_Chamane" no bate-papo # - "Merci um <V>% 1 <BL >, qui nous um fait 2% Gagner fromages "! self.sendData ("\ X08" + "\ x11", [shamanName, numGathered] ) sendPlayerAction def (self, playerCode, ação): self.sendData ("\ X08" + "\ x16", [playerCode, ação] ) def sendModMessage (self, nome, mensagem): self.sendData ("\ X1A" + "\ X05", [nome, mensagem] ) def sendServerMessage (mensagem self): self.room.sendWholeServer (self, "\ X1A \ x04", ["[~ Mensagem serveur]", mensagem]) def sendPlayMusic (caminho self): self.sendData ("\ X1A" + "\ x0C", [ path] ) def sendSentPrivMsg (self, nome, mensagem): self.sendData ("\ x06" + "\ x07", [mensagem, nome de usuário] ) def sendRecievePrivMsg (self, nome, mensagem): self.sendData ("\ x06 "+" \ x07 ", [mensagem, nome de usuário "x"] ) def sendPlayerNotFound (self): self.sendData ("\ x06" + "\ x07") def getPlayerData (self): . return '#' join ( map (str, tem queijo # # avatar? [self.username, self.playerCode, int (self.isDead), self.score, 0, self.titleNumber, 0, self.getLook ()] )) def enterRoom (self , roomname): se self.room: self.room.removeClient (self) self.resetPlay () = 0 self.score self.sendEnterRoom (roomname) # self.room = self.server.addClientToRoom (self, roomname) def resetPlay (self): self.isShaman = False self.isDead = False self.isSyncroniser = False def startPlay (self): self.resetPlay () self.sendNewParty () self.sendPlayerList () = shamanCode self.room.getShamanCode () se self.room.everybodyIsShaman: self.sendShamanCode (self.playerCode) self.room.nobodyIsShaman elif: self.sendShamanCode (0) elif self.room.properNoShamanMaps: se self.room.currentWorld == 7: self.sendShamanCode (0) elif self.room.currentWorld == 8: self.sendShamanCode (0) elif self.room.currentWorld == 54: self.sendShamanCode (0) elif self.room.currentWorld == 55: self.sendShamanCode (0) auto elif . room.currentWorld == 57: self.sendShamanCode (0) elif self.room.currentWorld == 70: self.sendShamanCode (0) elif self.room.currentWorld == 77: self.sendShamanCode (0) elif self.room . currentWorld == 78: self.sendShamanCode (0) elif self.room.currentWorld == 87: self.sendShamanCode (0) elif self.room.currentWorld == 88: self.sendShamanCode (0) elif self.room.currentWorld == 89: self.sendShamanCode (0) elif self.room.currentWorld == 92: self.sendShamanCode (0) elif self.room.currentWorld == 99: self.sendShamanCode (0) elif shamanCode == self.playerCode: self.isShaman = True syncroniserCode = self.room.getSyncroniserCode () self.sendSynchroniser (syncroniserCode) se syncroniserCode == self.playerCode: self.isSyncroniser = True se self.username == "cronometrista": self.isDead = True self.room.informAll (TransformiceClientHandler.send PlayerDied, [self.playerCode, self.score]) def login (self, nome de usuário, PasswordHash): se o nome == "": username = "Souris" se o nome == "Nickname": username = "Souris" se o nome == "Yellow": username = "[~ ~ Amarelo]" se o nome == "Melibellule": username = "[~ ~ Melibellule]" nome de usuário, se == " Tigrounette ": username = "[~ ~ Tigrounette]" se o nome == "Modogeek": username = "[~ ~ Modogeek]" se o nome == "Jonathan": username = "[~ ~ Jonathan]" se o nome == "Tigrounette": username = "[~ ~ Tigrounette]" logging.info ("Authenticate% s -% s% s"% (self.address, username, PasswordHash)) priv = self.server.authenticate (username, PasswordHash) se priv == -1: # retornar False self.close () else: self.username = username = self.playerCode self.server.generatePlayerCode () = self.privilegeLevel priv # self.titleNumber = 0 se self.username == "Phoenix": self.titleNumber = 440 elif self.username == "Admin": self.titleNumber = 440 elif self.username == "Yellow": self.titleNumber = 444 else: self.titleNumber = 102 self.sendTitleList ( ) self.sendPlayerLoginData () self.enterRoom (self.server.recommendRoom ()) retornará True TransformiceAdminTools classe (object): def __init__ (self, servidor): self.server = servidor def sendModMessage (mensagem self): para a sala em self.server.rooms.itervalues (): room.informAll (TransformiceClientHandler.sendModMe ssage, [ADMIN_NAME, mensagem]) def playMusicInRoom (self, roomname caminho): roomname = str (roomname) se self.server.rooms.has_key ( roomname): self.server.rooms [roomname] playMusic (caminho). # de autenticação HTTP básica com XMLRPC em Python classe VerifyingXMLRPCServer (SimpleXMLRPCServer): def __init__ (self, * args, ** kargs): # usamos uma classe interna para que possamos chamar para o método authenticate # VerifyingRequestHandler classe (SimpleXMLRPCRequestHandler): # este é o método que deve substituir def parse_request (eu mesmo): # primeiro, chamar a implementação original que retorna # True se todos os OK até agora se SimpleXMLRPCRequestHandler. parse_request (eu mesmo): # seguinte, autenticar se self.authenticate (myself.headers): retornar True else: # se a autenticação falhar, diga o cliente myself.send_error (401, 'Falha na autenticação') return False # e intialise a superclasse com acima SimpleXMLRPCServer.__init__ (self, RequestHandler = VerifyingRequestHandler, * args, ** kargs) def autenticar (self, headers): . básica, _, codificado = headers.get ("Autorização") partição ('') afirmam básica = = 'Básico', 'Somente a autenticação básica suportada' nome de usuário, _, password = base64.b64decode (codificados). partição (':') hexdigest username.lower return () em ADMIN_NAMES e hashlib.sha256 (password). () = = ADMIN_HASH se __name__ == "__main__": TESTE = False server = TransformiceServer () admintools = TransformiceAdminTools (servidor) = rpcServer VerifyingXMLRPCServer (('', 1110), allow_none = True) rpcServer.register_introspection_functions () rpcServer.register_instance (admintools, True) thread.start_new_thread (rpcServer.serve_forever, ()) asyncore.loop ()
FIM DA FONTE
1 - Quando VOCÊ tiver uma fonte los *. py - Voce tera Que transforma-la los UMA db, não poderia Caso serviços:
. Ex: Transformice.py.db
Algo ASSIM, e parágrafo transforma-la los db Preciso fazer e SQLite, ASSIM Que pegar uma db, VOCÊ ira baixar o vertrigo (para Acessar o phpmyadmin).
2 - Que ASSIM baixar o vertrigo, VOCÊ ira abri-lo e clicar em "Iniciar Host" DEPOIS voce vai em: phpmyadmin (Como si fossa Entrar los hum site).
3 - Voce ira CRIAR UM Novo Banco de Dados com ESSE nome:
Transformice DB
4 - O site da ira redirecionar VOCÊ parágrafo UMA outra page Nele VOCÊ ira nd aba "Importar" e colocará um db Que não criamos Caso: Transformice. py.db
5 - Ira CRIAR muitas, muitas, muitas Tabelas VOCÊ ira em "Ip Host," e ali VOCÊ colocará o IP Seu eA Porta do Servidor (Recomenda-SE UMA TCP).
6 - DEPOIS VOCÊ Entra nenhum site com Seu numero . ip de
Ex:. [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
7 - Logo VOCÊ SE registo, e Volta no phpmyadmin, dai VOCÊ Procura uma Tabela "Usuários" OU "Usuarios" OU "Registros" e ali VOCÊ ira Acar hum "Registro "com Seu usuario (Que voce cadastrou nenhuma transformice, nenhum site do ip Seu). Dai voce Clica los hum "lapizinho" e Procura "rank" e VOCÊ poema o numero 5 ali.
Pronto Você e Seu Fundador do Servidor de transformice. ~ ~ ~ ~ RANKS: 1-Usuario 2-Moderador 3-Administrador aprendiz 4-Administrador 5-Fundador 8 - dar Pará Queijos VOCÊ Procura uma Tabela "infos" OU "Queijos" camarilha e não "lapizinho" do Lado do Nome de Quem Quer dar VOCÊ Queijos e adquirir "Stats" ali VOCÊ poema o numero de Queijos Que VOCÊ Quer dar um parágrafo Pessoa. ATENÇÃO: SE para dar queijo parágrafo TODO servidor Entra nd Tabela "all" e faca ISSO. Tutorial: Caio
[/code]
Créditos: Transformice bobba Brasil.
Fonte
# Por Kyl3 (Edi472)
# Transformice Privado Servidor 0,55 Fonte
# Copyright eSBody 2011
# A cópia de fonte é liberado
# Manuteno
# Link Censurado por TheSilence!
import random
tomada de importação, asyncore, asynchat
fio de importação, threading
tempo de importação
importação tipos de
importação re
importação base64, binascii, hashlib
importação de registro de importação SimpleXMLRPCServer SimpleXMLRPCServer, SimpleXMLRPCRequestHandler logging.basicConfig (filename = 'Archives.html', level = logging.INFO, format = "% (asctime) s -% (levelname) s - % (message) s ") = False VERBOSE VERSION = "0,55" ADMIN_NAME = "Admin" ADMIN_NAMES frozenset = (['Admin', 'admin', 'Fênix', 'Tigrounette', 'Melibellule', 'Jonathan', ' Modogeek ',' Mododivin ',' Modoplouf ',' Modotruc ']) ADMIN_HASH = "5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62 a11ef721d1542d8" LEVEL_LIST = range (0, 100 +1) + intervalo (901, 910 1) # 0 a 100 são mapas normais, 901 a 910 são substituídos por mapas nightmode. # 901 1006 # 902 1007 (Não Shaman) # 903 1015 # 904 1027 # 905 1040 # 906 1062 # 907 1067 # 908 1087 (somente em Shaman nightmode) # 909 1088 (somente em Shaman nightmode ) # 910 1092 (somente em Shaman nightmode) TransformiceServer classe (asyncore.dispatcher): def __init__ (HOST self, ='', PORT = 1111): self.HOST = HOST PORT = self.PORT asyncore.dispatcher.__init__ self ( ) self.create_socket (socket.AF_INET, socket.SOCK_STREAM) # tentar re-utilizar uma porta do servidor, se possível self.set_reuse_addr () self.bind ((self.HOST, self.PORT)) self.listen (5) de registro . info ("running") # self.clients = [] self.rooms = {} def handle_accept (self): socket, addr = self.accept () TransformiceClientHandler (self, socket, addr) def autenticar (username auto, PasswordHash): # autenticação se username.strip () inferior a () em ADMIN_NAMES:. PasswordHash se = ADMIN_HASH: return -1 # inválida retorno de 10 # Admin return 1 # normal Jogador : def createAccount (self, nome de usuário, PasswordHash) pass def sendPrivMsg (self, fromUsername, toUsername mensagem,): = False encontrados para quarto no self.rooms.itervalues (): para o jogador em room.clients.itervalues (): se player.username.lower () == toUsername.lower ( ): player.sendRecievePrivMsg (mensagem fromUsername) encontrado = True retorno encontrado def addClientToRoom (cliente de auto, roomname): roomname = str (roomname) se self.rooms.has_key (roomname): . self.rooms [roomname] AddClient ( cliente) else: self.rooms [roomname] = TransformiceRoomHandler (self, roomname) self.rooms [roomname] AddClient (cliente). self.rooms # return [roomname] def closeRoom (quarto self): se self.rooms.has_key (room.name): room.close () del self.rooms [room.name] def getConnectedPlayerCount (self): return 1 def generatePlayerCode (self): random.randrange retorno (1, 10 milhões) : def recommendRoom (self) de retorno 1 min retornar #. (self.rooms.itervalues (), key = lambda quarto: abs (len (room.clients) - 20)) O nome da classe TransformiceStateRecorder (object): def __init__ (quarto self): self.room = sala de self.reset () redefinir def (self): self.sateLog = [] self.lastPhysicsStateEvent = None self.anchors = [] def log (self, eventTokens, valores): self.sateLog.append ((eventTokens, valores) ) def logMessage (messageFunction auto, args): self.sateLog.append ((messageFunction, args)) def setPhyscisState (self, eventTokens, valores): self.lastPhysicsStateEvent = (eventTokens, valores) def addAnchor (self, valores): self.anchors.extend (valores) def sendToClient (cliente self): se self.lastPhysicsStateEvent: valor, eventTokens = self.lastPhysicsStateEvent client.sendData (eventTokens, valor) para sendThing, o valor de self.sateLog: se o tipo (sendThing) == types.FunctionType: sendThing (cliente, * valor) else: client.sendData (sendThing, value) if len (self.anchors)> 0: client.sendSetAnchors (self.anchors) TransformiceRoomHandler classe (object): def __init__ ( self, servidor de nomes): self.server = servidor = self.name name.strip () self.clients = {} = self.stateRecorder TransformiceStateRecorder (self) self.currentShamanCode = None self.currentSyncroniserCode = None self.isSandbox = False self.isBootcamp = False self.specificMap = False self.properNoShamanMaps = True # self.currentWorld = random.choice (LEVEL_LIST) runthismap = random.choice (LEVEL_LIST) se runthismap == 901: runthismap = 1006 se runthismap == 902: runthismap = 1007 se runthismap == 903: runthismap = 1015 se runthismap == 904: runthismap = 1027 se runthismap == 905: runthismap = 1040 se runthismap == 906: runthismap = 1062 se runthismap == 907: runthismap = 1067 = se runthismap = 908: runthismap = 1087 se runthismap == 909: runthismap = 1088 se runthismap == 910: runthismap = 1092 = self.currentWorld runthismap se self.name.startswith ("sandbox_") ou self.name.startswith ("play_" ) ou self.name.startswith ("bootcamp_"): try: . runthismap = int (re.search (r "([0-9 ]+)$", self.name) grupo (0)) se runthismap == 901: runthismap = 11006 se runthismap == 902: runthismap = 11007 se runthismap == 903: runthismap = 11015 se runthismap == 904: runthismap = 11027 se runthismap == 905: runthismap = 11040 se runthismap == 906: runthismap = 11062 se runthismap == 907: runthismap = 11067 se runthismap == 908: runthismap = 11087 se runthismap == 909: runthismap = 11088 se runthismap == 910: runthismap = 11092 self.currentWorld = runthismap exceto (ValueError, AttributeError): passar mais : self.specificMap = True se self.name.startswith ("sandbox_"): self.isSandbox = True se self.name.startswith ("bootcamp_"): = True self.isBootcamp self.everybodyIsShaman = self.isSandbox self.nobodyIsShaman = self.isBootcamp self.worldChangeTimer = None se não self.isSandbox: self.worldChangeTimer threading.Timer = (120, self.worldChange) self.worldChangeTimer.start () = self.gameStartTime time.time () self.numCompleted = 0 def close (self): se self.worldChangeTimer: self.worldChangeTimer.cancel () worldChange def (self): self.stateRecorder.reset () self.currentSyncroniserCode = None se self.clients.has_key (self.currentShamanCode): currentShaman = self.clients [self.currentShamanCode] para playerCode, cliente em self.clients.iteritems (): try: # ser cauteloso, threads quebrar as coisas, mas nós não queremos que ele morra client.sendShamanPerformance (currentShaman.usernam e, self. numCompleted) , exceto: passar self.currentShamanCode = None para playerCode, cliente em self.clients.iteritems (): client.resetPlay () se não self.specificMap: runthismap = random.choice (LEVEL_LIST) # if runthismap == 901: # runthismap = random.choice (LEVEL_LIST) # if runthismap == 902: # runthismap = random.choice (LEVEL_LIST) # if runthismap == 903: # runthismap = random.choice (LEVEL_LIST) # if runthismap == 904: # runthismap = random.choice (LEVEL_LIST) se runthismap == 901: runthismap = 1006 se runthismap == 902: runthismap = 1007 se runthismap == 903: runthismap = 1015 se runthismap == 904: runthismap = 1027 se runthismap == 905: runthismap = 1040 se runthismap == 906: runthismap = 1062 se runthismap == 907: runthismap = 1067 se runthismap == 908: runthismap = 1087 se runthismap == 909: runthismap = 1088 se runthismap == 910: runthismap = 1092 se runthismap == self.currentWorld: runthismap = random.choice (LEVEL_LIST) self.currentWorld = runthismap # print self.currentWorld, self.specificMap para playerCode, cliente em self.clients.iteritems (): client.startPlay () self.worldChangeTimer = threading. temporizador (120, self.worldChange) self.worldChangeTimer.start () = self.gameStartTime time.time () self.numCompleted = 0 def worldChangeSpecific (self, mapnumber): # self.stateRecorder.reset () # self.currentSyncroniserCode = Nenhum # if self.clients.has_key (self.currentShamanCode): # currentShaman = self.clients [self.currentShamanCode] # para playerCode, cliente em self.clients.iteritems (): # try: # ser cauteloso, threads quebrar as coisas, mas nós não queremos que ele morra # client.sendShamanPerformance (currentShaman.usernam e, self.numCompleted) # exceto: # pass # self.currentShamanCode = None # para playerCode, cliente em self.clients.iteritems (): # cliente. resetPlay () # se não self.specificMap: self.currentWorld = mapnumber # print self.currentWorld, self.specificMap para playerCode, cliente em self.clients.iteritems (): client.startPlay () # self.worldChangeTimer = threading.Timer (120, self.worldChange) # self.worldChangeTimer.start () # self.gameStartTime = time.time () # self.numCompleted = 0 def checkShouldChangeWorld (self): se não self.isSandbox: se todos (client.isDead para cliente em self.clients.itervalues ()): self.worldChangeTimer.cancel () self.worldChange () def resetSandbox (self): se self.isSandbox: para o cliente playerCode, em self.clients.iteritems (): resetpscore = 0 self.informAll (TransformiceClientHandler.sendPlaye rDied, [playerCode, resetpscore]) client.isDead = True se todos (client.isDead para o cliente em self.clients.itervalues ()): # self.worldChangeTimer.cancel () # self.worldChange () para playerCode, cliente em self.clients.iteritems (): client.resetPlay () = self.currentWorld self.currentWorld para playerCode, cliente em self.clients.iteritems (): client.startPlay () else: pass def AddClient (self, newClient): self.clients [newClient.playerCode] = newClient self.informAllOthers (newClient, TransformiceClientHandler.sendNewPlayer, [newClient.getPlayerData ()]) # h = newClient.room auto newClient.startPlay () self.stateRecorder. sendToClient (newClient) def RemoverCliente (self, RemoverCliente): se self.clients.has_key (removeClient.playerCode): self.clients del [removeClient.playerCode] se self.getPlayerCount () == 0: self.server.closeRoom (self ) retorno self.informAll (TransformiceClientHandler.sendPlaye rDisconnect, [removeClient.playerCode]) se self.currentSyncroniserCode == removeClient.playerCode: newSyncroniser = random.choice (self.clients.values ()) = True newSyncroniser.isSyncroniser self.currentSyncroniserCode = newSyncroniser.playerCode self.informAll (TransformiceClientHandler.sendSynch roniser, [newSyncroniser.playerCode]) self.checkShouldChangeWorld () def playMusic (caminho self): self.informAll (usic TransformiceClientHandler.sendPlayM, [caminho]) def informAll (self, clientFunction , args): para o cliente playerCode, em self.clients.iteritems (): clientFunction (cliente, * args) def informAllOthers (self, senderClient, clientFunction, args): para o cliente playerCode, em self.clients.iteritems (): se playerCode = senderClient.playerCode: clientFunction (cliente, * args) def SendAll (self, eventTokens, dados = None): para o cliente playerCode, em self.clients.iteritems (): client.sendData (eventTokens, dados) def sendAllOthers ( self, senderClient, eventTokens, dados): para o cliente playerCode, em self.clients.iteritems (): se client.playerCode = senderClient.playerCode: client.sendData (eventTokens, dados) def killall (self): para playerCode cliente, em self.clients.iteritems (): resetpscore = 0 self.informAll (TransformiceClientHandler.sendPlaye rDied, [playerCode, resetpscore]) = True client.isDead self.checkShouldChangeWorld () def getPlayerCount (self): return len (self.clients) def getPlayerList (self): para o cliente playerCode, em self.clients.iteritems (): rendimento client.getPlayerData () def getShamanCode (self): se é self.currentShamanCode None: self.currentShamanCode = random.choice (self.clients. keys ()) retorno self.currentShamanCode def getSyncroniserCode (self): se é self.currentSyncroniserCode None: self.currentSyncroniserCode = random.choice (self.clients.keys ()) retorno self.currentSyncroniserCode classe TransformiceClientHandler (asynchat.async_ de bate-papo ): def __init__ (self, servidor, meias, endereço): self.server = servidor self.address = Endereço asynchat.async_chat.__init__ (self, sock = meia) self.buffer = "" self.set_terminator ("\ x00") auto- . validatingVersion = True self.username = "" self.playerCode = -1 self.privilegeLevel = 0 # 0 - "Convidar" - Guest? # 1 - jogador normal # 5 - "Modo"? # 10 - Admin self.room = Nenhum self.isShaman = False self.isDead = False self.isSyncroniser = False self.score = 0 = 0 self.titleNumber self.Tellfirsttime = 0 def collect_incoming_data (self, dados): self.buffer + = dados def found_terminator (self) : se self.validatingVersion: se self.buffer == "<policy-file-request/>": se VERBOSE: logging.debug ("solicitação de arquivo Política") self.push (r """<? versão xml = " 1.0 "?> <cross-domain-policy> <allow-access-from domain="*" to-ports="%d"/> </ cross-domain-policy> ""% "(self.server.PORT ) + "\ x00") self.close_when_done () else: versão, bytesLoaded1, bytesLoaded2 = self.buffer.split ("\ x01") se a versão == VERSÃO: self.sendCorrectVersion () else: self.close_when_done () auto- . validatingVersion = False else: self.parseData (self.buffer) self.buffer = "" def parseData (self, dados): MDT_stuff = data [: 4] dados = dados [4]: valores = data.split ("\ x01 ") se VERBOSE: pass # logging.debug (repr (MDT_stuff), valores) = eventTokens values.pop (0) eventToken1, eventToken2 = eventTokens se eventToken1 == "\ X1A": se eventToken2 == "\ x02": temporizador # acordado unknownTime, = valores unknownTime = int (unknownTime) elif eventToken2 == "\ x03": # Criar uma conta ou nome de usuário, PasswordHash = valores username = username.replace ("<","") self.server.createAccount (username , PasswordHash) self. logon (nome de usuário, PasswordHash) elif eventToken2 == "\ x04": # login username, PasswordHash, showTarget = valores showTarget = bool (int (showTarget)) username = username.replace ("<","" ) self.login (username, PasswordHash) else: logging.warning ("Unimplemented% r" eventTokens%) # elevar NotImplementedError, eventTokens elif eventToken1 == "\ x04": se eventToken2 == "\ x03": # update física do mundo # CodePartieEnCours = values.pop (0) # para ObjectData em valores: # if ObjectData == 'x': # continua # objectType, x, y, dx, dy, rotação, angularVelocity, isSolid objectData.split = (',' ) se self.isSyncroniser: self.room.sendAllOthers (self, eventTokens, valores) self.room.stateRecorder.setPhyscisState (eventToken s, valores) elif eventToken2 == "\ x04": # update posição # isMovingRight, isMovingLeft, x, y, dx, dy, isJumping, jumpAnimation = valores self.room.sendAllOthers (self, eventTokens, valores + [self.playerCode]) elif eventToken2 == "\ X05": # jogador saiu dos limites self.isDead = True # merda pontuação # self.score = self.score-1 # if self.score <0: # self.score = 0 end # self.room.informAll (TransformiceClientHandler.send PlayerDied, [self.playerCode, self.score]) auto- . room.checkShouldChangeWorld () elif eventToken2 == "\ x06": # "Demande_Giclage" # objectcode, = valores self.room.sendAll (eventTokens, valores) elif eventToken2 == "\ X08": ? # conjouring animação # direção, = valores # direction = int (direção) self.room.sendAllOthers (self, eventTokens, [self.playerCode] + valores) elif eventToken2 == "\ X09": # begin / end crouch crouching, = valores agachado = bool (int (agachado)) se agachado: self.room.sendAllOthers (self, eventTokens, [self.playerCode] + valores) else: self.room.sendAllOthers (self, eventTokens, [self.playerCode]) elif eventToken2 == "\ x12 ": # começar grappin x, y = valores self.room.sendAllOthers (self, eventTokens, [self.playerCode] + valores) # pass elif eventToken2 == "\ x13": # end grappin self.room.sendAllOthers (self, eventTokens, [self.playerCode]) # pass elif eventToken2 == "\ x14": logging.debug ("PONG'd") else: logging.warning ("Unimplemented% r" eventTokens%) # elevar NotImplementedError, eventTokens elif eventToken1 == "\ x06": se eventToken2 == "\ x06": # enviado conversar mensagem mensagem = valores message = message.replace ("<","") mensagem # = message.replace ("#","" ) logging.info "s% ((% s:% r)"% (self.room.name, mensagem self.username,)) self.room.sendAll (eventTokens, [self.playerCode, self.username, mensagem. strip ()]) elif eventToken2 == "\ X1A": comando # enviado evento, = valores event_raw = event.strip () evento = event_raw.lower () logging.info ("(% s) [c]% s: % r "% (self.room.name, self.username, event)) se event.startswith ("sala") ou event.startswith ("salão"): # vestiário roomname # = evento [5]: = roomname event.split ("", 1) [1] self.enterRoom (roomname) elif event.startswith ("c") ou event.startswith ("w"): _, nome de usuário, message = event_raw.split ("", 2) se não self.server.sendPrivMsg (self.username, nome, mensagem): # se a falha self.sendPlayerNotFound () else: self.sendSentPrivMsg (username, mensagem) elif evento ("dança", "danse", " profil "): self.room.informAll (PlayerAction TransformiceClientHandler.send, [self.playerCode, 1]) elif evento ("rir", "rire"): self.room.informAll (PlayerAction TransformiceClientHandler.send, [self. playerCode, 2]) elif evento ("chorar", "pleurer"): self.room.informAll (TransformiceClientHandler.send PlayerAction, [self.playerCode, 3]) elif evento ("deconnecter"): self.room. informAll (TransformiceClientHandler.send PlayerDisconnect, [self.playerCode]) self.close () elif evento ("kill", "suicídio", "bolhas", "morrer"): = True self.isDead self.room.informAll ( TransformiceClientHandler.send PlayerDied, [self.playerCode, self.score]) self.room.checkShouldChangeWorld () elif event.startswith ("title") ou event.startswith ("título"): titlenumber event.split = ("", 1) [1] = self.titleNumber titlenumber elif event.startswith ("profil"): self.sendPlayerNotFound () elif event.startswith ("ban"): banname event.split = ("", 1) [1] # não fez elif event.startswith ("annonce") ou event.startswith ("um"): # modsendmessage event.split = ("", 1) [1] se self.username == "Admin": modsendmessage evento =. split ("", 1) [1] # para quarto no self.server.rooms.itervalues (): self.room.informAll (TransformiceClientHandler.send ModMessage, ["Admin ~", modsendmessage]) elif event.startswith (" informação ") ou event.startswith (" info "): # modsendmessage event.split = ("", 1) [1] se self.username == "Admin": modsendmessage event.split = ("", 1) [ 1] # para quarto no self.server.rooms.itervalues (): self.room.informAll (TransformiceClientHandler.send ModMessage, ["~ da Informação", modsendmessage]) elif event.startswith ("all") ou event.startswith ( "tous"): # modsendmessage event.split = ("", 1) [1] se self.username == "Admin": modsendmessage event.split = ("", 1) [1] # para quarto no self. server.rooms.itervalues (): self.room.informAll (TransformiceClientHandler.send ModMessage, ["", modsendmessage]) elif event.startswith ("def"): se self.username == "Admin": tellfirstm evento =. split ("", 1) [1] se tellfirstm == "arret": modsendmessage = "Arret du serveur" self.room.informAll (TransformiceClientHandler.send ModMessage, ["~ da Informação", modsendmessage]) elif tellfirstm == " infos ": modsendmessage = "TransforEmu V 0,55 por Phoenix ~ ~ Para FUNKYCHEAT.FR" self.room.informAll (TransformiceClientHandler.send ModMessage, ["~ da Informação", modsendmessage]) elif tellfirstm == "assessor": modsendmessage = "Liste des commandes dans le local . Pour obtenir de l'aide de la parte d'un administrateur '/ c Administração TONMESSAGE " self.room.informAll (TransformiceClientHandler.send ModMessage, ["Informações ~", modsendmessage]) elif tellfirstm == " maj ": modsendmessage = "Relancez la página et le videz cache" self.room.informAll (TransformiceClientHandler.send ModMessage, ["~ Mise A Jour", modsendmessage]) elif tellfirstm == "reboot": modsendmessage = "Reboot (Redemmarage ) du serveur iminente " self.room.informAll (TransformiceClientHandler.send ModMessage, ["~ da Informação", modsendmessage]) elif tellfirstm == "commandes": modsendmessage = "<b> <u> Commandes </ u> </ b > Joueurs Normaux </ br> </ br> <b> <u> Touche ALT + Clic sur la carte </ u> </ b> Teletransporte </ br> </ br> </ br> <b> <u > Clic sur la carte </ u> </ b> Active / Bouge le Grappin </ br> <b> <u> Clic sur soi </ u> </ b> Desativa le Grappin </ br> <b> < u> / salão X </ u> </ b> Alterar salão de </ br> <b> <u> / salão sandbox_X </ u> </ b> Va dans un salon Sandbox (Pas de temps Limite de, tout le monde chaman) (X = ID de carte) </ br> <b> <u> / salão play_X </ u> </ b> Va dans un salon OU une carte soros joue en boucle (X = ID de carte) </ br> <b> <u> / salão bootcamp_X </ u> </ b> Va dans un salon sans chaman (X = ID de carte) </ br> <b> <u> / rire </ u> </ b> Rigoler </ br> <b> <u> / pleurer </ u> </ b> Pleurer </ br> <b> <u> / danse </ u> </ b> Danser </ br > <b> <u> / deconnecter </ u> </ b> Sé deconnecter </ br> <b> <u> suicídio / </ u> </ b> Sé tuer (de la partie) </ br> <b> <u> / título X </ u> </ b> Mudança de título </ br> <b> <u> / c XY </ u> </ b> Parler um quelqun (X = destinataire, Y = Message) " self.room.informAll (TransformiceClientHandler.send ModMessage, ["~ da Informação", modsendmessage]) elif event.startswith ("primeiro") ou event.startswith ("premier"): se self.username == " Admin ": tellfirstm event.split = ("", 1) [1] se tellfirstm == "oui": modsendmessage = "Publicação des primeira dans le chat" self.room.informAll (TransformiceClientHandler.send ModMessage, ["Informações ~ ", modsendmessage]) self.Tellfirsttime = 1 elif tellfirstm == "não": modsendmessage = "Arret de la publicação des dans le primeiro chat" self.room.informAll (TransformiceClientHandler.send ModMessage, ["Informações ~", modsendmessage] ) self.Tellfirsttime = 0 else: modsendmessage = ". Invalide" self.room.informAll (TransformiceClientHandler.send ModMessage, ["~ Erreur", modsendmessage]) = 0 self.Tellfirsttime elif evento event.startswith ("mapa") ou . startswith ("carte"): # Este comando é muito glitchy. Evitar o uso. self.username se == "Admin": mapnumber event.split = ("", 1) [1] = True self.isDead self.room.informAll (TransformiceClientHandler.send PlayerDied, [self.playerCode, self. pontuação]) self.room.worldChangeSpecific (mapnumber) modsendmessage = "Changement de carte" self.room.informAll (TransformiceClientHandler.send ModMessage, ["~ da Informação", modsendmessage]) elif event.startswith ("chamanfake") ou evento. startswith ("fake"): se self.username == "Admin": _, hname, hsaves event_raw.split = ("", 2) self.room. informAll (TransformiceClientHandler.send ShamanPerformance, [hname, hsaves]) elif evento ("killall") ou event.startswith ("tuercarte"): se self.username == "Admin": self.room.killAll () = modsendmessage "Joueurs de la carte ter" self.room.informAll (TransformiceClientHandler.send ModMessage, ["Informações ~", modsendmessage]) elif evento ("clear") ou event.startswith ("nettoyer"): se self.username = = "Admin": self.room.resetSandbox () modsendmessage = "Relancement de la carte" self.room.informAll (TransformiceClientHandler.send ModMessage, ["Informações ~", modsendmessage]) elif evento em evento ("online") ou . startswith ("joueursco"): # modsendmessage event.split = ("", 1) [1] se self.username == "Admin": # modsendmessage self.room.getPlayerCount = () = playercountm self.room.getPlayerCount () modsendmessage = 'Il ya% Connéctés d Joueurs. % Playercountm self.room.informAll (TransformiceClientHandler.send ModMessage, ["Informações ~", modsendmessage]) elif evento ("mapid") ou event.startswith ("idcarte"): # modsendmessage event.split = ("", 1) [1] se self.username == "Admin": currentmapme = self.room.currentWorld modsendmessage = 'Nous sommes sur la carte% d.' % Currentmapme self.room.informAll (TransformiceClientHandler.send ModMessage, ["Informações ~", modsendmessage]) elif evento ("cartere") ou event.startswith ("replay"): # modsendmessage event.split = ("", 1) [1] se self.username == "Admin": currentmapme = self.room.currentWorld self.isDead = True
self.room.informAll (TransformiceClientHandler.send PlayerDied, [self.playerCode, self.score])
self.room.worldChangeSpecific (currentmapme)
modsendmessage = 'Relancement de la carte% d. " % Currentmapme
self.room.informAll (TransformiceClientHandler.send ModMessage, ["~ da Informação", modsendmessage]) elif event.startswith ("buraco") ou event.startswith ("troufake"): se self.username == "Admin" : _, hscore, HColoque, htime event_raw.split = ("", 3) self.isDead = True # self.room.informAll (TransformiceClientHandler.sen dPlayerDied, [self.playerCode, self.score]) self.room.informAll (TransformiceClientHandler.send PlayerGotCheese, [self.playerCode, hscore, HColoque, htime]) self.room.checkShouldChangeWorld () elif event.startswith ("libre") ou event.startswith ("free"): se self.username == "Admin": _, hscore, htime event_raw.split = ("", 2) self.room.informAll (TransformiceClientHandler.send ModMessage, [""]) elif event.startswith ("música") ou event.startswith ( "musique"): se self.username == "Admin": musicmessage event.split = ("", 1) [1] self.room.informAll (TransformiceClientHandler.send PlayMusic, [musicmessage]) modsendmessage = "On conheceu le ! filho " self.room.informAll (TransformiceClientHandler.send ModMessage, ["~ Musique", modsendmessage]) elif event.startswith ("musicoff") ou event.startswith ("musiqueoff"): se self.username == "Admin": musicmessage = event.split ("off", 1) [1] self.room.informAll (TransformiceClientHandler.send PlayMusic, [musicmessage]) modsendmessage = "Et em coupe le filho!" self.room. informAll (TransformiceClientHandler.send ModMessage, ["~ Musique", modsendmessage]) else: logging.warning ("Unimplemented% r" evento%) # elevar NotImplementedError, evento mais: logging.warning ("Unimplemented% r" eventTokens%) # levantar NotImplementedError, eventTokens elif eventToken1 == "\ X05": se eventToken2 == "\ x07": # coisa Anchor # jointType, object1, o1x, o1y, o1r, object2, o2x, o2y, O2R = valores self.room.stateRecorder . addAnchor (valores) self.room.sendAllOthers (self, eventTokens, valores) # self.room.sendAll (eventTokens, valores) elif eventToken2 == "\ X08": # objeto começar conjouring # objectcode, x, y, rotação = valores self.room.sendAllOthers (self, eventTokens, [self.playerCode] + valores) elif eventToken2 == "\ X09": ? # conjouring final self.room.sendAllOthers (self, eventTokens, [self.playerCode]) elif eventToken2 == "\ x0E": # "Demande_Creation_Clou" # pass self.room.sendAll (eventTokens, valores) elif eventToken2 == "\ x0F": # "Demande_Creation_Sol" # pass self.room.sendAll (eventTokens, valores) elif eventToken2 == "\ x10": # "Demande_Deplacement_Fromage" # x, y = valores self.room.sendAll (eventTokens, valores) elif eventToken2 == "\ x11": # "Demande_Explosion" # pass self.room.sendAll (eventTokens, valores) elif eventToken2 == "\ x12": ! # rato tem o queijo no buraco objectID, = valores self.isDead = True self.room.numCompleted + = 1 lugar = self.room.numCompleted timeTaken = int ((time.time () - self.room.gameStartTime) * 10) # merda Pontuação playerscorep = self.score se lugar == 1: playerscorep = playerscorep 16 elif lugar == 2: playerscorep = playerscorep 14 elif lugar == 3: playerscorep = playerscorep 12 else: playerscorep = 10 playerscorep se self.isShaman == True: playerscorep = 0 = self.score playerscorep end # se self.room.numCompleted == 1: se self.Tellfirsttime == 1: modsendmessage = 'Primeiro en% d dixiemes de segundos '% (timeTaken) self.room.informAll (TransformiceClientHandler.send ModMessage, ["~ First", modsendmessage]) self.room.informAll (TransformiceClientHandler.send PlayerGotCheese, [self.playerCode, self.score , lugar timeTaken]) # h self.room.stateRecorder.logMessage (TransformiceCli entHandler.sendPlayerGotCheese, [self.playerCode, self.score, lugar timeTaken]) self.room.checkShouldChangeWorld () elif eventToken2 == "\ x13" : # cliente acha que ele tem de queijo # pass # SendAll vai confirmar para o cliente: / self.room.sendAll (eventTokens, [self.playerCode]) self.room.stateRecorder.log (eventTokens, [self.playerCode]) elif eventToken2 == "\ x14": # objeto finalizar conjouring # objectcode, x, y, rotação, unkn1, unkn2, isSolid = valores self.room.sendAllOthers (self, eventTokens, [self.playerCode] + valores) elif eventToken2 == "\ x15": # "Creation_Objet_Monde" - mundo objeto de criação # objectcode, x, y, unkn1, unkn2, unkn3, unkn4 = valores # if self.isSyncroniser: self.room.sendAllOthers (self, eventToken1 + "\ x14", valores) elif eventToken2 == "\ x16": # "Demande_Changement_Gravite" # gx, gy = valores # if self.isSyncroniser: self.room.sendAll (eventTokens, valores) else: logging.warning ("r% Unimplemented"% eventTokens ) # elevar NotImplementedError, eventTokens elif eventToken1 == "\ x14": se eventToken2 == "\ x14": shop # open # fazer alguma coisa aqui passar elif eventToken1 == "\ x18": se eventToken2 == "\ x0F": # fóruns abertos # fazer alguma coisa aqui pass else: logging.warning ("r% Unimplemented" eventTokens%) # elevar NotImplementedError, eventTokens elif eventToken1 == "\ X08": se eventToken2 == "\ x0d": amigos # abrir passagem elif eventToken2 == "\ x10": # anexar baloon para o jogador # playerCode, = valores self.room.sendAll (eventTokens, valores) elif eventToken2 == "\ x11": # baloon destacado self.room.sendAllOthers (self, "\ X08 \ x10 ", [self.playerCode," 0 "]) # desconhecidos? mais: logging.warning ("Unimplemented% r" eventTokens%) # elevar NotImplementedError, eventTokens elif eventToken1 == "\ x19": se eventToken2 = = "\ x03": desenho # Limpar self.room.sendAllOthers (self, eventTokens, valores) elif eventToken2 == "\ x04": # Comece a desenhar # x, y = valores self.room.sendAllOthers (self, eventTokens, valores ) elif eventToken2 == "\ X05": # Desenha o ponto # x, y = valores self.room.sendAllOthers (self, eventTokens, valores) else: logging.warning ("r% Unimplemented" eventTokens%) else: logging.warning ("Unimplemented% r" eventTokens%) # elevar NotImplementedError, eventTokens def handle_close (self): se self.room: self.room.removeClient (self) self.close () def getLook (self): return "0,0" def sendData (self, eventCodes, dados = None): se VERBOSE: logging.debug ("Envie% r% r"% (eventCodes, dados)) se os dados: self.push ('\ x01' join (map (str. [eventCodes] + dados)) + "\ x00") else: self.push (eventCodes + "\ x00") def sendCorrectVersion (self): self.sendData ("\ X1A" + "\ X1B", str [( self.server.getConnectedPlayerCount ()), "0123456789", "0"] # MDT, CMDTEC ) def sendTitleList (self): self.sendData ("\ X08" + "\ x0F", ["0"] ) def sendPlayerLoginData (self): self.sendData ("\ X1A" + "\ X08", [self.username, str (self.playerCode), str (self.privilegeLevel)] ) def sendEnterRoom (self, roomname): self.sendData ( "\ X05" + "\ x15", [str (roomname)] ) def sendNewParty (self): self.sendData ("\ X05" + "\ X05", [self.room.currentWorld, self.room.getPlayerCount ( ), 1] # tempo restante? ) def sendPlayerList (self): self.sendData ("\ X08" + "\ X09", lista (self.room.getPlayerList ()) ) def sendNewPlayer (self, playerData): self. sendData ("\ X08" + "\ X08", [playerData] ) def sendPlayerDisconnect (self, playerCode): self.sendData ("\ X08" + "\ x07", [playerCode] ) def pontuação sendPlayerDied (self, playerCode, ): pontuação = escore-1 se o resultado <0: pontuação = 0 = self.score pontuação self.sendData ("\ X08" + "\ X05", [playerCode, 0, pontuação] # unkn (esquerda números?) pontuação, ) def sendPlayerGotCheese (self, playerCode, pontuação, lugar timeTaken): self.sendData ("\ X08" + "\ x06", ? [playerCode, 0, pontuação, lugar timeTaken] # unkn (à esquerda num) pontuação, tempo, lugar ) def sendShamanCode (self, shamanPlayerCode): self.sendData ("\ X08" + "\ x14", [shamanPlayerCode] ) def sendSynchroniser (self, playerCode): self.sendData ("\ X08" + "\ x15 " [playerCode] ) sendSetAnchors def (self, âncoras): self.sendData ("\ X05" + "\ x07", âncoras ) def sendATEC (self): self.sendData ("\ X1A" + "\ X1A") def sendPING (self): self.sendData ("\ x04" + "\ x14") def sendShamanPerformance (shamanName auto, numGathered): # Irá exibir "Info_Fromage_Chamane" no bate-papo # - "Merci um <V>% 1 <BL >, qui nous um fait 2% Gagner fromages "! self.sendData ("\ X08" + "\ x11", [shamanName, numGathered] ) sendPlayerAction def (self, playerCode, ação): self.sendData ("\ X08" + "\ x16", [playerCode, ação] ) def sendModMessage (self, nome, mensagem): self.sendData ("\ X1A" + "\ X05", [nome, mensagem] ) def sendServerMessage (mensagem self): self.room.sendWholeServer (self, "\ X1A \ x04", ["[~ Mensagem serveur]", mensagem]) def sendPlayMusic (caminho self): self.sendData ("\ X1A" + "\ x0C", [ path] ) def sendSentPrivMsg (self, nome, mensagem): self.sendData ("\ x06" + "\ x07", [mensagem, nome de usuário] ) def sendRecievePrivMsg (self, nome, mensagem): self.sendData ("\ x06 "+" \ x07 ", [mensagem, nome de usuário "x"] ) def sendPlayerNotFound (self): self.sendData ("\ x06" + "\ x07") def getPlayerData (self): . return '#' join ( map (str, tem queijo # # avatar? [self.username, self.playerCode, int (self.isDead), self.score, 0, self.titleNumber, 0, self.getLook ()] )) def enterRoom (self , roomname): se self.room: self.room.removeClient (self) self.resetPlay () = 0 self.score self.sendEnterRoom (roomname) # self.room = self.server.addClientToRoom (self, roomname) def resetPlay (self): self.isShaman = False self.isDead = False self.isSyncroniser = False def startPlay (self): self.resetPlay () self.sendNewParty () self.sendPlayerList () = shamanCode self.room.getShamanCode () se self.room.everybodyIsShaman: self.sendShamanCode (self.playerCode) self.room.nobodyIsShaman elif: self.sendShamanCode (0) elif self.room.properNoShamanMaps: se self.room.currentWorld == 7: self.sendShamanCode (0) elif self.room.currentWorld == 8: self.sendShamanCode (0) elif self.room.currentWorld == 54: self.sendShamanCode (0) elif self.room.currentWorld == 55: self.sendShamanCode (0) auto elif . room.currentWorld == 57: self.sendShamanCode (0) elif self.room.currentWorld == 70: self.sendShamanCode (0) elif self.room.currentWorld == 77: self.sendShamanCode (0) elif self.room . currentWorld == 78: self.sendShamanCode (0) elif self.room.currentWorld == 87: self.sendShamanCode (0) elif self.room.currentWorld == 88: self.sendShamanCode (0) elif self.room.currentWorld == 89: self.sendShamanCode (0) elif self.room.currentWorld == 92: self.sendShamanCode (0) elif self.room.currentWorld == 99: self.sendShamanCode (0) elif shamanCode == self.playerCode: self.isShaman = True syncroniserCode = self.room.getSyncroniserCode () self.sendSynchroniser (syncroniserCode) se syncroniserCode == self.playerCode: self.isSyncroniser = True se self.username == "cronometrista": self.isDead = True self.room.informAll (TransformiceClientHandler.send PlayerDied, [self.playerCode, self.score]) def login (self, nome de usuário, PasswordHash): se o nome == "": username = "Souris" se o nome == "Nickname": username = "Souris" se o nome == "Yellow": username = "[~ ~ Amarelo]" se o nome == "Melibellule": username = "[~ ~ Melibellule]" nome de usuário, se == " Tigrounette ": username = "[~ ~ Tigrounette]" se o nome == "Modogeek": username = "[~ ~ Modogeek]" se o nome == "Jonathan": username = "[~ ~ Jonathan]" se o nome == "Tigrounette": username = "[~ ~ Tigrounette]" logging.info ("Authenticate% s -% s% s"% (self.address, username, PasswordHash)) priv = self.server.authenticate (username, PasswordHash) se priv == -1: # retornar False self.close () else: self.username = username = self.playerCode self.server.generatePlayerCode () = self.privilegeLevel priv # self.titleNumber = 0 se self.username == "Phoenix": self.titleNumber = 440 elif self.username == "Admin": self.titleNumber = 440 elif self.username == "Yellow": self.titleNumber = 444 else: self.titleNumber = 102 self.sendTitleList ( ) self.sendPlayerLoginData () self.enterRoom (self.server.recommendRoom ()) retornará True TransformiceAdminTools classe (object): def __init__ (self, servidor): self.server = servidor def sendModMessage (mensagem self): para a sala em self.server.rooms.itervalues (): room.informAll (TransformiceClientHandler.sendModMe ssage, [ADMIN_NAME, mensagem]) def playMusicInRoom (self, roomname caminho): roomname = str (roomname) se self.server.rooms.has_key ( roomname): self.server.rooms [roomname] playMusic (caminho). # de autenticação HTTP básica com XMLRPC em Python classe VerifyingXMLRPCServer (SimpleXMLRPCServer): def __init__ (self, * args, ** kargs): # usamos uma classe interna para que possamos chamar para o método authenticate # VerifyingRequestHandler classe (SimpleXMLRPCRequestHandler): # este é o método que deve substituir def parse_request (eu mesmo): # primeiro, chamar a implementação original que retorna # True se todos os OK até agora se SimpleXMLRPCRequestHandler. parse_request (eu mesmo): # seguinte, autenticar se self.authenticate (myself.headers): retornar True else: # se a autenticação falhar, diga o cliente myself.send_error (401, 'Falha na autenticação') return False # e intialise a superclasse com acima SimpleXMLRPCServer.__init__ (self, RequestHandler = VerifyingRequestHandler, * args, ** kargs) def autenticar (self, headers): . básica, _, codificado = headers.get ("Autorização") partição ('') afirmam básica = = 'Básico', 'Somente a autenticação básica suportada' nome de usuário, _, password = base64.b64decode (codificados). partição (':') hexdigest username.lower return () em ADMIN_NAMES e hashlib.sha256 (password). () = = ADMIN_HASH se __name__ == "__main__": TESTE = False server = TransformiceServer () admintools = TransformiceAdminTools (servidor) = rpcServer VerifyingXMLRPCServer (('', 1110), allow_none = True) rpcServer.register_introspection_functions () rpcServer.register_instance (admintools, True) thread.start_new_thread (rpcServer.serve_forever, ()) asyncore.loop ()
FIM DA FONTE
1 - Quando VOCÊ tiver uma fonte los *. py - Voce tera Que transforma-la los UMA db, não poderia Caso serviços:
. Ex: Transformice.py.db
Algo ASSIM, e parágrafo transforma-la los db Preciso fazer e SQLite, ASSIM Que pegar uma db, VOCÊ ira baixar o vertrigo (para Acessar o phpmyadmin).
2 - Que ASSIM baixar o vertrigo, VOCÊ ira abri-lo e clicar em "Iniciar Host" DEPOIS voce vai em: phpmyadmin (Como si fossa Entrar los hum site).
3 - Voce ira CRIAR UM Novo Banco de Dados com ESSE nome:
Transformice DB
4 - O site da ira redirecionar VOCÊ parágrafo UMA outra page Nele VOCÊ ira nd aba "Importar" e colocará um db Que não criamos Caso: Transformice. py.db
5 - Ira CRIAR muitas, muitas, muitas Tabelas VOCÊ ira em "Ip Host," e ali VOCÊ colocará o IP Seu eA Porta do Servidor (Recomenda-SE UMA TCP).
6 - DEPOIS VOCÊ Entra nenhum site com Seu numero . ip de
Ex:. [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
7 - Logo VOCÊ SE registo, e Volta no phpmyadmin, dai VOCÊ Procura uma Tabela "Usuários" OU "Usuarios" OU "Registros" e ali VOCÊ ira Acar hum "Registro "com Seu usuario (Que voce cadastrou nenhuma transformice, nenhum site do ip Seu). Dai voce Clica los hum "lapizinho" e Procura "rank" e VOCÊ poema o numero 5 ali.
Pronto Você e Seu Fundador do Servidor de transformice. ~ ~ ~ ~ RANKS: 1-Usuario 2-Moderador 3-Administrador aprendiz 4-Administrador 5-Fundador 8 - dar Pará Queijos VOCÊ Procura uma Tabela "infos" OU "Queijos" camarilha e não "lapizinho" do Lado do Nome de Quem Quer dar VOCÊ Queijos e adquirir "Stats" ali VOCÊ poema o numero de Queijos Que VOCÊ Quer dar um parágrafo Pessoa. ATENÇÃO: SE para dar queijo parágrafo TODO servidor Entra nd Tabela "all" e faca ISSO. Tutorial: Caio
[/code]
Créditos: Transformice bobba Brasil.