Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 265

# coding: utf-8 try: print 'Server Loading...' except: print 'Server Loading...

' import time import types import re import base64 import binascii import hashlib import logging import json import sqlite3 import os import urllib2 import webbrowser import xml.etree.ElementTree as xml import xml.parsers.expat import sys import struct import math import platform import subprocess import shutil import socket import smtplib import random import zlib import pickle import traceback import psutil from subprocess import call from twisted.internet import reactor, protocol from tfm import TFMProtocol from datetime import datetime from datetime import timedelta #from xgoogle.translate import Translator #from xgoogle.translate import LanguageDetector, DetectionError import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from SimpleXMLRPCServer import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler #class # # # # # # PSUtil: def __init__(self): self.TOTAL_PHYMEM = 0 def avail_phymem(self): return 0 def cpu_percent(self, interval): return 0

def getTime(): global time return time.time() #psutil = PSUtil()

logging.basicConfig(filename='./server.log',level=logging.INFO, format="%(asctim e)s - %(levelname)s - %(message)s") dbcon = sqlite3.connect("./dbfile.sqlite")#, check_same_thread = False) dbcon.isolation_level = None dbcur = dbcon.cursor() dbcon.row_factory = sqlite3.Row dbcon.text_factory = str VERBOSE LOGVERB EXEVERS VERSION SERVERV = = = = = False False False "1.58" "11.6.16-4 /L"

#LEVEL_LIST = range(0, 121+1) + [1006, 1007, 1015, 1027, 1040, 1062, 1067, 1087, 1088, 1092] LEVEL_LIST = range(0, 134+1) + range(136, 143+1) + range(200, 210+1) CONJURATION_MAPS = [101, 102, 103, 104, 105, 106, 107, 777] FULL_LEVEL_LIST = range(0, 134+1) + range(136, 143+1) + [-1, 135, 444, 555, 666, 777, 800, 801, 850, 851, 852, 853, 888, 900, 1444, 1666, 1777, 1801] + range(10 01, 1127+1) if EXEVERS: VERBOSE = False class TransformiceClientHandler(TFMProtocol): def __init__(self): self.buffer = "" self.MDT = "" self.packetSize = "" self.packetSizeUTF = "" self.eventToken1 = "" self.sendRefreshShop = "" self.sendRefreshShop = False self.eventToken2 = "" self.isUtfPacket = False self.currentPacketPos = 0 self.packetQueue = [] self.partialPacketHold = False self.validatingVersion = True self.loaderInfoUrl = "" self.stageloaderInfobytesTotal = "0" self.stageloaderInfobytesLoaded = "0" self.loaderInfobytesTotal = "0" self.loaderInfobytesLoaded = "0" self.Langue="BR" self.Translating=False self.username = "" self.playerCode = -1 self.privilegeLevel = 0 #-1 - Invalid #0 - Guest

#1 - Normal #3 - Arbitre #5 - Moderator #6 - Manager #10 - Admin self.room = None self.isHidden = False self.isBanned = False self.isFrozen = False self.isFrozenTimer = None self.isShaman = False self.isDead = False self.duckCheckCounter = 0 self.forumid = "1" self.hasCheese = False self.isAfk = True self.isSyncroniser = False self.score = 0 self.MapCrewList = ["Berosrcp"] self.avatar = 0 self.voteban = [] self.votemute = 0 self.mumute = False self.modmute= False self.TempBan= False self.roomname = "1" self.lastmessage = "" self.isinit = True self.sentinelle = False self.sentcount = 0 self.loadercheck = True self.logonsuccess = False self.wrongPasswordAttempts=0 self.isIPban = "NotChecked" self.isInTribe = False self.giftCount = 0 self.gotGift = 0 self.titleNumber = 0 self.Tellfirsttime = 0 self.disableShop = False self.SPEC = False self.Voted= False self.QualifiedVoter=False self.ATEC_Time = None self.AWKE_Time = (getTime() * 1000) self.playerStartTime = None self.REMOTECONTROLPRT= False self.NoDataTimer = None self.JumpCheck = 1 self.canMeep = False self.AwakeTimerKickTimer = None self.silence = self.muteTribe = self.censorChat= self.muteChat = False False False False

self.EmailAddress = "" self.ValidatedEmail = False self.LastEmailCode = str(random.randrange(100000000, 999999999+1

))

self.ValidatedPassChange = False self.TribeName = "" self.TribeRank = "" self.TribeCode = "" self.TribeInfo = [] #m= Modify Greeting Message #I= Recruit #D= Change Permissions #E= Exlude Tribe Members self.TribeMessage = "" self.TribeFromage = 0 self.AcceptableInvites = [] self.EmailMuda2 = "" self.RTNail= False self.RTotem= False self.UTotem= False self.STotem= [0,""] self.Totem = [0,""] #Item Count, Totem (Minus playercode#x#y at the beginnin #When summoning totem, Do: PlayerCode#X#Y+self.Totem[1] #Totem Editor uses 400, 203 for X/Y

g)

self.isFishing = False self.Map777FishingTimer = None self.shoplist = "0,3,1,20,0;0,5,2,100,0;0,2,1,200,0;0,4,1,200,0; 0,1,2,500,0;0,6,2,500,0;1,1,1,200,0;1,2,1,200,0;0,7,1,200,0;0,8,1,300,0;0,9,4,50 0,0;0,10,1,100,0;0,11,1,500,0;1,4,1,200,0;0,12,1,200,0;0,13,1,500,0;0,14,3,300,0 ;1,3,1,200,0;1,5,1,300,0;0,15,1,200,0;3,1,1,100,0;3,2,1,25,0;3,3,1,150,0;3,4,0,4 00,0;0,16,2,300,0;0,17,3,200,0;0,18,1,300,0;0,19,2,300,0;0,20,2,500,0;0,21,2,200 ,0;2,1,1,100,0;3,5,1,300,0;0,22,1,300,0;0,23,3,400,0;0,24,1,50,0;0,25,1,250,0;0, 26,1,300,0;0,27,2,800,0;0,28,2,300,0;0,29,3,500,0;4,1,3,200,0;4,2,1,200,0;0,30,1 ,200,0;0,31,1,300,0;0,32,1,800,0;0,33,2,150,0;0,34,2,400,0;0,35,1,1000,0;0,36,2, 500,0;0,37,1,200,0;0,38,3,800,0;1,6,2,800,0;0,41,1,500,300;0,42,2,250,150;4,3,1, 200,100;2,3,1,100,50;0,43,1,200,0;0,44,3,250,0;0,45,1,300,0;0,46,2,100,0;0,47,4, 1500,0;1,7,3,50,0;2,4,2,20,0;3,6,1,300,0;3,7,1,300,0;4,4,2,50,0;1,8,1,50,0;0,48, 2,300,0;0,52,0,400,0;2,5,2,300,0;0,51,1,200,0;0,49,3,500,0;3,8,0,400,0;0,54,2,50 ,0;0,50,1,400,0;0,53,0,400,0;3,9,1,400,0;0,55,1,100,0;4,6,2,50,0;3,10,1,20,0;2,9 ,0,50,30;0,61,1,200,0;0,62,2,300,0;1,10,1,100,0;0,63,1,350,0;0,64,2,300,0;1,11,2 ,200,0;0,68,7,200,0;0,69,6,200,0;0,70,4,200,0;0,71,2,200,0;0,72,3,200,0;0,73,2,2 00,0;3,12,1,150,0;0,65,2,200,0;3,13,0,150,0;0,66,2,300,0;0,67,1,400,0;0,74,2,150 ,0;3,14,1,50,0;0,77,3,250,0;4,8,2,100,0;0,78,3,300,0;2,10,3,4001,0;0,79,2,250,0; 1,12,2,400,0;0,75,2,50,0;0,76,1,200,0;2,2,0,50,30;4,9,2,150,100;0,39,1,300,200;0 ,81,1,150,100;3,15,0,150,110;0,82,1,250,150;0,80,1,120,80;0,40,1,450,300;0,83,2, 250,200;3,16,1,20,10;2,12,1,120,80;4,10,1,700,450;2,11,1,800,600;0,85,2,300,200; 0,84,0,300,200;1,9,1,100,50;4,5,2,500,300;2,6,2,300,150;4,11,2,300,140;2,13,1,30 0,250;4,12,1,320,200;0,86,0,1000,0;2,15,0,600,0;2,14,3,200,0;0,88,2,500,400;1,14 ,3,500,400;0,87,3,520,500;0,56,4,450,300;0,57,1,450,400;0,58,0,500,360;2,7,0,150 ,100;2,8,2,500,350;3,11,0,450,320;0,89,2,500,420;0,91,0,500,420;0,90,0,500,410;0 ,93,3,250,150;0,92,3,300,180;0,59,1,500,450;0,60,0,450,400;4,7,2,250,200;3,17,0, 100,50;2,16,3,200,150;0,94,3,200,150;0,96,2,400,40;0,97,4,400,40;1,15,0,400,0;2, 17,0,400,40;3,18,0,400,0;4,13,0,400,40;5,1,1,400,40;5,2,1,400,40;5,3,1,400,40;5, 4,1,400,40;5,5,1,400,40;5,6,4,300,0;5,7,2,300,0;5,8,4,300,0;21,0,0,1000,50;21,1, 0,1000,50;21,2,0,3000,150;21,3,0,3000,150;21,4,0,3000,150;21,5,0,3000,150;22,2,0 ,6000,300;22,3,0,6000,300;22,4,0,6000,300;22,5,0,6000,300;22,6,0,6000,300;22,7,0 ,8000,350;22,8,0,10000,400;0,98,1,300,40;0,99,2,200,40;0,101,3,300,40;0,102,3,30 0,40;3,20,3,20,2;3,21,3,60,6;3,22,1,100,10;3,23,1,100,10;5,9,2,400,40;5,10,2,200

,40;2,18,2,40,4;2,19,1,100,40;6,1,2,2000,200;22,9,0,7000,400;3,24,0,100,50;1,17, 0,200,150;2,20,1,300,200;4,14,1,200,40;2,21,1,300,40;0,103,0,250,40;2,22,1,400,4 0;22,11,0,7000,350;22,12,0,6500,325;22,13,0,6000,300;22,14,0,6000,3000" #self.shoplist = "0,3,1,20,0;0,5,2,100,0;0,2,1,200,0;0,4,1,200,0 ;0,1,2,500,0;0,6,2,500,0;1,1,1,200,0;1,2,1,200,0;0,7,1,200,0;0,8,1,300,0;0,9,4,5 00,0;0,10,1,100,0;0,11,1,500,0;1,4,1,200,0;0,12,1,200,0;0,13,1,500,0;0,14,3,300, 0;1,3,1,200,0;1,5,1,300,0;0,15,1,200,0;3,1,1,100,0;3,2,1,25,0;3,3,1,150,0;3,4,0, 400,0;0,16,2,300,0;0,17,3,200,0;0,18,1,300,0;0,19,2,300,0;0,20,2,500,0;0,21,2,20 0,0;2,1,1,100,0;3,5,1,300,0;0,22,1,300,0;0,23,3,400,0;0,24,1,50,0;0,25,1,250,0;0 ,26,1,300,0;0,27,2,800,0;0,28,2,300,0;0,29,3,500,0;4,1,3,200,0;4,2,1,200,0;0,30, 1,200,0;0,31,1,300,0;0,32,1,800,0;0,33,2,150,0;0,34,2,400,0;0,35,1,1000,0;0,36,2 ,500,0;0,37,1,200,0;0,38,3,800,0;1,6,2,800,0;0,41,1,800,0;0,42,2,800,0;4,3,1,800 ,0;2,3,1,800,0;0,43,1,200,0;0,44,3,250,0;0,45,1,300,0;0,46,2,100,0;0,47,4,1500,0 ;1,7,3,50,0;2,4,2,20,0;3,6,1,300,0;3,7,1,300,0;4,4,2,50,0;1,8,1,50,0;0,48,2,300, 0;0,52,0,400,0;2,5,2,300,0;0,51,1,200,0;0,49,3,500,0;3,8,0,400,0;0,54,2,50,0;0,5 0,1,400,0;0,53,0,400,0;3,9,1,400,0;0,55,1,100,0;4,6,2,50,0;3,10,1,20,0;2,9,0,100 ,0;0,61,1,200,0;0,62,2,300,0;1,10,1,100,0;0,63,1,350,0;0,64,2,300,0;1,11,2,200,0 ;0,68,7,200,0;0,69,6,200,0;0,70,4,200,0;0,71,2,200,0;0,72,3,200,0;0,73,2,200,0;3 ,12,1,150,0;0,65,2,200,0;3,13,0,150,0;0,66,2,300,0;0,67,1,400,0;0,74,2,150,0;3,1 4,1,50,0;0,77,3,250,0;4,8,2,100,0;0,78,3,300,0;2,10,3,4001,0;0,79,2,250,0;1,12,2 ,400,0;0,75,2,50,0;0,76,1,200,0;2,2,0,500,0;4,9,2,500,0;3,15,0,500,0;0,82,1,500, 0;0,80,1,500,0;0,40,2,655,0;0,83,2,350,0;3,16,1,350,0;2,12,1,350,0;4,10,1,800,0; 2,11,1,1000,0;0,85,2,500,0;0,84,0,500,0;1,9,1,500,0;4,5,2,500,0;2,6,2,500,0;4,11 ,2,500,0;2,13,1,500,0;4,12,1,500,0;0,86,0,1000,0;2,15,0,600,0;2,14,3,200,0;0,88, 2,500,0;1,14,3,500,0;0,87,3,500,0;0,56,4,500,0;0,57,1,500,0;0,58,0,500,0;2,7,0,5 00,0;2,8,2,500,0;3,11,0,500,0;0,89,2,500,0;0,91,0,500,0;0,90,0,500,0;0,93,3,500, 0;0,92,3,500,0;0,59,1,500,0;0,60,0,500,0;4,7,2,500,0;3,17,0,500,0;2,16,3,500,0;0 ,94,3,500,0;0,95,5,500,50;0,96,2,400,40;0,97,4,400,40;1,15,0,400,0;2,17,0,400,40 ;3,18,0,400,0;4,13,0,400,40;5,1,1,400,40;5,2,1,400,40;5,3,1,400,40;5,4,1,400,40; 5,5,1,400,40;5,6,4,400,0;5,7,2,400,0;5,8,4,400,0;21,0,0,1000,50;21,1,0,1000,50;2 1,2,0,3000,150;21,3,0,3000,150;21,4,0,3000,150;21,5,0,3000,150;22,2,0,6000,300;2 2,3,0,6000,300;22,4,0,6000,300;22,5,0,6000,300;22,6,0,6000,300;22,7,0,8000,350;2 2,8,0,10000,400;3,19,2,50,10;0,98,1,300,40;0,99,2,200,40;0,101,3,300,40;0,102,3, 300,40;3,20,3,20,2;3,21,3,60,6;3,22,1,20,2;3,23,1,20,2;5,9,2,300,40;5,10,2,200,4 0;2,18,2,20,2;2,19,1,100,40;6,1,2,1000,100;22,9,0,2000,500;3,24,0,50,50;1,17,0,4 00,250;2,20,1,100,40;4,14,1,400,40;2,21,0,100,40;0,103,0,300,40;2,22,1,100,40;22 ,11,0,2000,500;22,12,0,2000,500;22,13,0,2000,500" self.color1 = "78583a" #Fur self.color2 = "95d9d6" #sc self.cheeseTitleCheckList = [5, 20, 100, 200, 300, 400, 500, 600 , 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 2000, 230 0, 2700, 3200, 3800, 4600, 6000, 7000, 8000, 9001, 10000, 14000, 18000, 22000, 2 6000, 30000, 34000, 38000, 42000, 46000, 50000, 55000, 60000, 65000, 70000, 7500 0, 80000] self.cheeseTitleDictionary = {5:5, 20:6, 100:7, 200:8, 300:35, 4 00:36, 500:37, 600:26, 700:27, 800:28, 900:29, 1000:30, 1100:31, 1200:32, 1300:3 3, 1400:34, 1500:38, 1600:39, 1700:40, 1800:41, 2000:72, 2300:73, 2700:74, 3200: 75, 3800:76, 4600:77, 6000:78, 7000:79, 8000:80, 9001:81, 10000:82, 14000:83, 18 000:84, 22000:85, 26000:86, 30000:87, 34000:88, 38000:89, 42000:90, 46000:91, 50 000:92, 55000:234, 60000:235, 65000:236, 70000:237, 75000:238, 80000:93} self.firstTitleCheckList = [1, 10, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1400, 1600, 1800, 2000, 2200, 2400, 2600, 2800 , 3000, 3200, 3400, 3600, 3800, 4000, 4500, 5000, 5500, 6000, 7000, 8000, 9000, 10000, 12000, 14000, 16000, 18000, 20000, 25000, 30000, 35000, 40000] self.firstTitleDictionary = {1:9, 10:10, 100:11, 200:12, 300:42, 400:43, 500:44, 600:45, 700:46, 800:47, 900:48, 1000:49, 1100:50, 1200:51, 1400 :52, 1600:53, 1800:54, 2000:55, 2200:56, 2400:57, 2600:58, 2800:59, 3000:60, 320 0:61, 3400:62, 3600:63, 3800:64, 4000:65, 4500:66, 5000:67, 5500:68, 6000:69, 70 00:231, 8000:232, 9000:233, 10000:70, 12000:224, 14000:225, 16000:226, 18000:227

, 20000:202, 25000:228, 30000:229, 35000:230, 40000:71} self.shamanTitleCheckList = [10, 100, 1000, 2000, 3000, 4000, 50 00, 6000, 7000, 8000, 9000, 10000, 11000, 12000, 13000, 14000, 15000, 16000, 180 00, 20000, 22000, 24000, 26000, 28000, 30000, 35000, 40000, 45000, 50000, 55000, 60000, 65000, 70000, 75000, 80000, 85000, 90000, 100000, 140000] self.shamanTitleDictionary = {10:1, 100:2, 1000:3, 2000:4, 3000: 13, 4000:14, 5000:15, 6000:16, 7000:17, 8000:18, 9000:19, 10000:20, 11000:21, 12 000:22, 13000:23, 14000:24, 15000:25, 16000:94, 18000:95, 20000:96, 22000:97, 24 000:98, 26000:99, 28000:100, 30000:101, 35000:102, 40000:103, 45000:104, 50000:1 05, 55000:106, 60000:107, 65000:108, 70000:109, 75000:110, 80000:111, 85000:112, 90000:113, 100000:114, 140000:115} self.shopTitleCheckList = [1, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 , 22] self.shopTitleDictionary = {1:115, 2:116, 4:117, 6:118, 8:119, 1 0:120, 12:121, 14:122, 16:123, 18:124, 20:125, 22:126} self.noelGiftTitleCheckList = [5, 10, 40, 60] self.noelGiftTitleDictionary = {5:127, 10:128, 40:129, 60:130} self.valentinGiftTitleCheckList = [5, 30, 60] self.valentinGiftTitleDictionary = {5:210, 30:211, 60:212} self.hardShamTitleCheckList = [500, 2000, 4000, 7000, 10000, 140 00, 18000, 22000, 26000, 30000, 40000] self.hardShamTitleDictionary = {500:213, 2000:214, 4000:215, 700 0:216, 10000:217, 14000:218, 18000:219, 22000:220, 26000:221, 30000:222, 40000:2 23} self.bootcampTitleCheckList = [1, 3, 5, 7, 10, 15, 20, 25, 30, 4 0, 50, 60, 70, 80, 90, 100, 120, 140, 160, 180, 200, 250, 300, 350, 400, 500, 60 0, 700, 800, 900, 1000] self.bootcampTitleDictionary = {1:256, 3:257, 5:258, 7:259, 10:2 60, 15:261, 20:262, 25:263, 30:264, 40:265, 50:266, 60:267, 70:268, 80:269, 90:2 70, 100:271, 120:272, 140:273, 160:274, 180:275, 200:276, 250:277, 300:278, 350: 279, 400:280, 500:281, 600:282, 700:283, 800:284, 900:285, 1000:286} self.CMDTEC = 0 self.SGMDT = [0, 0, 0] self.ICMDTEC = 0 def connectionMade(self): self.address = self.transport.getPeer() self.address = [self.address.host] self.server = self.factory self.validatingLoader = self.server.ValidateLoader self.shoplist = self.shoplist ction) self.NoDataTimer = reactor.callLater(2, self.transport.loseConne #print 'Interface de login enviada para ' self.SGMDT = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] LCDMT = str(self.server.LCDMT) self.CMDTEC = random.randrange(1000, 9999) self.ICMDTEC = self.CMDTEC i = 0 while(i < 10): self.CMDT = LCDMT[i] if self.CMDT == "0": self.SGMDT[i] = "10" else: self.SGMDT[i] = self.CMDT i = (i+1)

def inforequestReceived(self, data): if self.NoDataTimer: try: self.NoDataTimer.cancel() except: self.NoDataTimer=None if VERBOSE: print "RECV: "+repr(data) if LOGVERB: pass ##logging.warning("RECV: "+repr(data)) if self.isBanned: data="" self.transport.loseConnection() self.buffer += data if self.buffer=="<policy-file-request/>\x00": if self.server.getIPPermaBan(self.address[0]): self.transport.loseConnection() self.isIPban = True self.isBanned = True data="" elif self.address[0] in self.server.tempIPBanList: self.transport.loseConnection() self.isIPban = True self.isBanned = True data="" self.isIPban = False self.transport.write(r"""<cross-domain-policy><allow-acc ess-from domain="*" to-ports="*" /></cross-domain-policy>""" + "\x00") self.transport.loseConnection() elif self.buffer=="SuperBelette\x00": if self.server.getIPPermaBan(self.address[0]): self.transport.loseConnection() self.isIPban = True self.isBanned = True data="" elif self.address[0] in self.server.tempIPBanList: self.transport.loseConnection() self.isIPban = True self.isBanned = True data="" else: self.isIPban = False self.isinit = False self.sentinelle = True self.sentinelleSendStat() self.sentinelleSendCPU() elif self.buffer.startswith("PlayerStat-"): username=self.buffer[11:].replace("\x00","").lower().cap if len(username)<3 or len(username)>12: self.transport.loseConnection() elif not username.isalpha(): self.transport.loseConnection() elif self.server.checkExistingUsers(username): name = username tribe = self.server.getTribeName(username)

italize()

username) (username) )

rounds = self.server.getRoundsCount(username) cheese = self.server.getCheeseCount(username) first = self.server.getFirstCount(username) chamansave = self.server.getSavesCount(username) chamancheese = self.server.getShamanCheeseCount( chamangold = self.server.getShamanGoldSavesCount micetitle = self.server.getCurrentTitle(username

self.sendDataOld("\x05", [name, tribe, rounds, c heese, first, chamansave, chamancheese, chamangold, micetitle]) self.transport.loseConnection() else: self.transport.loseConnection() def parseSentinelle(self, data): #print repr(data) pass def sentinelleSendStat(self): if not self.sentcount>1200: usedram=psutil.avail_phymem() totalram=psutil.TOTAL_PHYMEM usedram = usedram / 1048576 totalram = totalram / 1048576 usedram = totalram-usedram usedram = '%.1f' % usedram totalram = '%.1f' % totalram self.sendDataOld("\x05", self.server.PlayerCountHistory+ ["\x00\x04", str(usedram)+"/"+str(totalram), self.server.POLICY+" - "+VERSION, s tr(self.server.getConnectedPlayerCount())]) self.sentinelleSendStatTimer = reactor.callLater(10, sel f.sentinelleSendStat) def sentinelleSendCPU(self): #600 for 1s cpu counts for 10 minutes. #2400 for 0.2 cpu counts for 10 minutes. #1200 for 0.2 cpu counts for 5 minutes. #600 for 0.2 cpu counts for 2.5 minutes. #Have interval and callLater be the same numbers. self.sentcount=self.sentcount+1 if self.sentcount>1200: self.transport.loseConnection() if self.sentinelleSendCPUTimer: try: self.sentinelleSendCPUTimer.cancel() except: self.sentinelleSendCPUTimer=None if self.sentinelleSendStatTimer: try: self.sentinelleSendStatTimer.cancel() except: self.sentinelleSendStatTimer=None else: cpu=str(math.floor(psutil.cpu_percent(interval=0.2))).re place(".0","") self.sendDataOld("\x06", [cpu]) self.sentinelleSendCPUTimer = reactor.callLater(0.2, sel f.sentinelleSendCPU)

def stringReceived(self, packet): if self.NoDataTimer: try: self.NoDataTimer.cancel() except: self.NoDataTimer=None #print repr(packet) Size = 0#len(packet) MDT = packet[:4] data = packet[4:] if self.isBanned: data="" self.transport.loseConnection() else: self.found_terminator(MDT, data, Size) def found_terminator(self, MDT, data, Size): if self.validatingVersion: if self.server.getIPPermaBan(self.address[0]): self.transport.loseConnection() self.isIPban = True self.isBanned = True data="" elif self.address[0] in self.server.tempIPBanList: self.transport.loseConnection() self.isIPban = True self.isBanned = True data="" else: self.isIPban = False if VERBOSE: print "RECV: "+repr(data) if LOGVERB: #logging.warning("RECV: "+repr(data)) pass if data.startswith("\x1c\x01"): version, connectionkeylen = struct.unpack('!hh', data[2:6]) version = "1." + str(version) connectionkey = data[6:6+connectionkeylen] print connectionkey if self.isinit: if self.server.GetCapabilities: secFile = open("./Capabilities.s wf", "rb") self.validatingLoader = True elif self.validatingLoader: secFile = open("./AltKikoo.swf", "rb") else: secFile = open("./Kikoo.swf", "r b") secData = secFile.read() secFile.close() secB64=base64.b64encode(secData) #self.sendData("\x1A" + "\x16", [secB64] ) self.isinit = False if self.server.ValidateVersion:

or.callLater(600, self.AwakeTimerKick) else: ater(600, self.AwakeTimerKick) else: else:

if version == VERSION: self.sendCorrectVersion() self.AwakeTimerKickTimer = react else: self.transport.loseConnection()

self.sendCorrectVersion() self.AwakeTimerKickTimer = reactor.callL

self.validatingVersion = False #logging.error(repr(data)) self.transport.loseConnection()

self.parseData(data, MDT, Size)

def parseData(self, data, MDT, Size): Pos = int((self.CMDTEC)%9000 + 1000) d1 = int(Pos / 1000) d2 = int(Pos / 100) % 10 d3 = int(Pos / 10) % 10 d4 = int(Pos % 10) SMDT = chr(int(self.SGMDT[d1])) + chr(int(self.SGMDT[d2])) + chr (int(self.SGMDT[d3])) + chr(int(self.SGMDT[d4])) self.CMDTEC += 1 if self.CMDTEC==self.ICMDTEC+9000: self.CMDTEC=self.ICMDTEC if str(MDT)!=str(SMDT): if self.room: self.sendPlayerDisconnect(self.playerCode) self.room.removeClient(self) self.sendModMessageChannel("Servidor", "Unexpected packe t from "+str(self.address[0])) data="" self.transport.loseConnection() if self.isFrozen: eventTokens=data[:2] data=data[2:] eventToken1, eventToken2 = eventTokens if eventToken1 == "\x01" and eventToken2 == "\x01": Check=str(data[2:struct.unpack('!h', data[:2])[0 ]+2]).split("\x01").pop(0) if Check=="\x1A\x1A": self.parseDataUTF(data[2:struct.unpack(' !h', data[:2])[0]+2]) elif Check=="\x1A\x1a3": self.parseDataUTF(data[2:struct.unpack(' !h', data[:2])[0]+2]) else: pass data="" if data=="": pass else: eventTokens=data[:2] data=data[2:] eventToken1, eventToken2 = eventTokens

pr(data) Token2)+" "+repr(data))

if VERBOSE: print "RECV:", repr(eventToken1+eventToken2), re if LOGVERB: #logging.warning("RECV: "+repr(eventToken1+event

pass if eventToken1 == "\x0e": if eventToken2 == "\x0e": if self.validatingLoader: data=str(data[2:struct.unpack('! h', data[:2])[0]+2]).split("\x01") linfo=data[0].split("null") data=linfo+data[1:] if self.server.GetCapabilities: if len(data)==33: self.loaderInfoU rl, self.stageloaderInfobytesTotal, self.stageloaderInfobytesLoaded, self.loader InfobytesTotal, self.loaderInfobytesLoaded, avHardwareDisable, hasAccessibility, hasAudio, hasAudioEncoder, hasEmbeddedVideo, hasIME, hasMP3, hasPrinting, hasSc reenBroadcast, hasScreenPlayback, hasStreamingAudio, hasStreamingVideo, hasTLS, hasVideoEncoder, isDebugger, isEmbeddedInAcrobat, language, localFileReadDisable , manufacturer, clientos, pixelAspectRatio, playerType, screenColor, screenDPI, screenResolutionX, screenResolutionY, serverString, flashversion = data if not re.search (self.server.LoaderURL, self.loaderInfoUrl): self.sen dModMessageChannel("Servidor", str(self.address[0])+" did not load this from "+s elf.server.LoaderURL+".") if str(self.stag eloaderInfobytesTotal)!=str(self.server.LoaderSize): if str(s elf.stageloaderInfobytesTotal)!=str(self.server.ModLoaderSize): self.sendModMessageChannel("Servidor", str(self.address[0])+"'s ChargeurTransfor mice.swf filesize is different.") if str(self.load erInfobytesTotal)!=str(self.server.ClientSize): self.sen dModMessageChannel("Servidor", str(self.address[0])+"'s Transformice.swf filesiz e is different.") if self.stageloa derInfobytesTotal!=self.stageloaderInfobytesLoaded: self.sen dModMessageChannel("Servidor", str(self.address[0])+"'s ChargeurTransformice.swf didn't fully load?") if self.loaderIn fobytesTotal!=self.loaderInfobytesLoaded: self.sen dModMessageChannel("Servidor", str(self.address[0])+"'s Transformice.swf didn't fully load?") self.Langue = la nguage.upper() if self.Langue== "ZH-CN": self.Lan gue="CN" if self.Langue== "ZH-TW": self.Lan

gue="CN" "PT": r(datetime.today())+" "+"BR Kicked. IP: "+self.address[0] dData("\x1A" + "\x12",["0", "PT/BR detected."]) nsport.loseConnection() anned=True gue="BR" #lol 00\x00" oader = False else:

if self.Langue== print st self.sen self.tra self.isB self.Lan self.Langue="FR" data="\x00\x02\x self.validatingL

self.sendModMess ageChannel("Servidor", str(self.address[0])+" sent invalid loader info or no inf o at all.") self.server.temp BanIPExact(self.address[0], 120) data="" self.isBanned=Tr ue self.transport.l oseConnection() else: if len(data)==5: self.loaderInfoU rl, self.stageloaderInfobytesTotal, self.stageloaderInfobytesLoaded, self.loader InfobytesTotal, self.loaderInfobytesLoaded = data if not re.search (self.server.LoaderURL, self.loaderInfoUrl): self.sen dModMessageChannel("Servidor", str(self.address[0])+" did not load this from "+s elf.server.LoaderURL+".") if str(self.stag eloaderInfobytesTotal)!=str(self.server.LoaderSize): if str(s elf.stageloaderInfobytesTotal)!=str(self.server.ModLoaderSize): self.sendModMessageChannel("Servidor", str(self.address[0])+"'s ChargeurTransfor mice.swf filesize is different.") if str(self.load erInfobytesTotal)!=str(self.server.ClientSize): self.sen dModMessageChannel("Servidor", str(self.address[0])+"'s Transformice.swf filesiz e is different.") if self.stageloa derInfobytesTotal!=self.stageloaderInfobytesLoaded: self.sen dModMessageChannel("Servidor", str(self.address[0])+"'s ChargeurTransformice.swf didn't fully load?") if self.loaderIn fobytesTotal!=self.loaderInfobytesLoaded: self.sen

dModMessageChannel("Servidor", str(self.address[0])+"'s Transformice.swf didn't fully load?") if re.search("/e n/", self.loaderInfoUrl.lower()): self.Lan gue="EN" elif re.search(" /fr/", self.loaderInfoUrl.lower()): self.Lan gue="FR" elif re.search(" /br/", self.loaderInfoUrl.lower()): self.Lan gue="BR" elif re.search(" /ru/", self.loaderInfoUrl.lower()): self.Lan gue="RU" elif re.search(" /tr/", self.loaderInfoUrl.lower()): self.Lan gue="TR" elif re.search(" /cn/", self.loaderInfoUrl.lower()): self.Lan gue="CN" else: self.Lan gue="EN" data="\x00\x02\x 00\x00" self.validatingL oader = False else: self.sendModMess ageChannel("Servidor", str(self.address[0])+" sent invalid loader info or no inf o at all.") self.server.temp BanIPExact(self.address[0], 120) data="" self.isBanned=Tr ue self.transport.l oseConnection() self.parseDataUTF(data[2:struct.unpack(' !h', data[:2])[0]+2]) else: #logging.warning("Unimplemented Binary % r" % eventTokens) print "Unimplemented Error: Bin-"+repr(e ventTokens)+"-DATA:"+repr(data) elif eventToken1 == "\x1a": if eventToken2 == "PROTOCOL": #Particule ##particule, posX, posY, nombre, vitesse , gravite, accelerationY=struct.unpack('!bhhbb?h', data) ##data=struct.pack('!bhhbb?h', particule , posX, posY, nombre, vitesse, gravite, accelerationY) if self.isSyncroniser: self.room.sendAllBin(eventTokens

, data)

ata[:4])[0]

elif eventToken2 == " ": #MajPositionMobile if not self.room.CheckedPhysics: codePartie=struct.unpack('!i', d #Not needed, but w/e: ##codePartie=struct.unpack('!i', data[:4 ##x=4 ##while x<len(data): ## codeMobile=struct.unpack("!h", d

])[0]

ata[x:x+2])[0]

## if codeMobile == -1: ## x+=2 ## else: ## codeMobile, posX, posY, vX, vY, angle, vAngle, dur, sleep = struct.unpack("!hhhhhhh??", data[x:x+16]) ## x+=16 if not self.room.CheckedPhysics: self.room.CheckedPhysics=True if self.isSyncroniser and codePa self.room.sendAllBin(eve else: if self.isSyncroniser: self.room.sendAllBin(eve

rtie == self.room.CodePartieEnCours: ntTokens, data)

ntTokens, data)

elif eventToken2 == "\x1a": #MajPositionJoueur ##if len(data)==21: ## codePartie, droiteEnCours, gauch eEnCours, posX, posY, vX, xY, saute, imageSaut, codeTP, angle, vitesseAngle = st ruct.unpack('!i??hhhh?bbhh', data) ##elif len(data)==17: ## codePartie, droiteEnCours, gauch eEnCours, posX, posY, vX, xY, saute, imageSaut, codeTP = struct.unpack('!i??hhhh ?bb', data) ##else: ## pass codePartie = struct.unpack('!i', data[:4 ])[0] data=data+struct.pack("!l", int(self.pla yerCode)) if self.isFishing: self.isFishing=False if int(codePartie) == int(self.room.Code PartieEnCours): self.room.sendAllBin("\x04\x04", data) elif eventToken2 == "7": #8 #Mort CodePartieEnCours = struct.unpack('!i', data[:4])[0] if CodePartieEnCours == self.room.CodePa rtieEnCours: self.isDead = True

ode, self.score) () r" % eventTokens) else:

if self.room.isBootcamp: self.score -= 1 elif self.room.isSurvivor: self.score -= 1 else: self.score += 1 if self.score < 0: self.score = 0 self.sendPlayerDied(self.playerC self.room.checkShouldChangeWorld #logging.warning("Unimplemented Binary %

print "Unimplemented Error: Bin-"+repr(e ventTokens)+"-DATA:"+repr(data) elif eventToken1 == "7": if eventToken2 == "N": global time cantgoin = 0 #Mouse got cheese into hole objectID, CodePartieEnCours, holedistanc e = struct.unpack("!bih", data) if self.room.currentWorld == 900: self.sendData2("\x05\x5A\x02") print "is Tutorial 2" try: pass finally: pass else: pass #objectID: #0 = Normal Hole. 1 = Blue Hole. 2 = Pin if self.room.isEditeur: if self.room.ISCMVdata[7]==0 and self.room.ISCMVdata[7]=1 self.sendMapValidated() if self.room.numCompleted==0 and self.us self.isDead=True self.sendPlayerDied(self.playerC self.room.checkShouldChangeWorld if int(CodePartieEnCours) != int(self.ro pass #print "Test", self.username, Co

k Hole.

self.room.ISCMV!=0:

## ername.startswith("*"): ## ## ode, self.score) ## () om.CodePartieEnCours):

dePartieEnCours, self.room.CodePartieEnCours elif not self.hasCheese: pass #self.isDead=True #self.sendPlayerDied(self.player

Code, self.score) d() else:

#self.room.checkShouldChangeWorl if self.isShaman: if self.room.isDoubleMap checkISCGI = sel else: else: checkISCGI = sel

: f.room.checkIfDoubleShamanCanGoIn() f.room.checkIfShamanCanGoIn()

ssage()

checkISCGI = 1 if checkISCGI == 0: cantgoin = 1 self.saveRemainingMiceMe if cantgoin != 1: self.isDead = True if self.gotGift == 1: self.giftCount + self.gotGift = 0 self.room.numCompleted + if self.room.isDoubleMap if objectID=="1" self.roo elif objectID==" self.roo else: self.roo self.roo place = self.room.numCom if self.room.autoRespawn timeTaken = int( else: timeTaken = int(

= 1

= 1 : : m.FSnumCompleted += 1 2": m.SSnumCompleted += 1 m.FSnumCompleted += 1 m.SSnumCompleted += 1 pleted or self.room.isTribehouseMap: (getTime() - self.playerStartTime)*10 ) (getTime() - self.room.gameStartTime)*10 )

#Score stuff playerscorep = self.scor if place==1: playerscorep = p

layerscorep+16

if self.room.get PlayerCount(True)>=3 and self.room.countStats: #Ratos na sala para contar first. if self. isShaman: self.firstcount = self.firstcount self.firstcount += 1 self.shopfraises += 3 #self.shopcheese += 1 #self.cheesecount += 1 if self.privilegeLevel != 0: if self.firstcount in self.firstTitleCheckList: unlockedtitle=self.firstTitleDictionary[self.firstcount] self.sendUnlockedTitle(self.playerCode, unlockedtitle) self.FirstTitleList=self.FirstTitleList+[unlockedtitle] self.titleList = ["0"]+self.GiftTitleList+self.ShamanTitleList+self.HardModeTitl eList+self.CheeseTitleList+self.FirstTitleList+self.ShopTitleList+self.BootcampT itleList if self.privilegeLevel==10: self.titleList = self.titleList+["440","442","444"] self.titleList = filter(None, self.titleList) self.sendTitleList() layerscorep+14 layerscorep+12 layerscorep+10 elf.score p elif place==2: playerscorep = p elif place==3: playerscorep = p else: playerscorep = p else:

if self.isShaman==True: playerscorep = s self.score = playerscore

#end if int(self.room.getPlay erCount())>=2 and self.room.countStats: #Ratos na sala para valer queijos. if self.playerCo de == self.room.currentShamanCode: self.sha mancheese += 1

Code == self.room.currentSecondShamanCode: mancheese += 1 esecount += 1 privilegeLevel != 0: if self.cheesecount in self.cheeseTitleCheckList: unlockedtitle=self.cheeseTitleDictionary[self.cheesecount] self.sendUnlockedTitle(self.playerCode, unlockedtitle) self.CheeseTitleList=self.CheeseTitleList+[unlockedtitle]

elif self.player self.sha else: self.che if self.

self.titleList = ["0"]+self.GiftTitleList+self.ShamanTitleList+self.HardModeTitl eList+self.CheeseTitleList+self.FirstTitleList+self.ShopTitleList+self.BootcampT itleList if self.privilegeLevel==10: self.titleList = self.titleList+["440","442","444"] self.titleList = filter(None, self.titleList) self.sendTitleList() pcheese += 1 0" or objectID == "1": m.giveShamanSave() "2": room.isDoubleMap: self.room.giveSecondShamanSave() self.room.giveShamanSave() m.giveShamanSave() unt == 20: ateSelfSQL() ardSham: m.giveShamanHardSave() self.sho if objectID == " self.roo elif objectID == if self.

else: else:

self.roo

if self.cheeseco self.upd if self.room.isH self.roo

elif int(self.room.getPl ayerCount())>2 and self.room.isBootcamp: # Ratos no bootcamp para desbloquear ttul os. self.bootcampcou

nt += 1 eLevel != 0: bootcampcount in self.bootcampTitleCheckList: unlockedtitle=self.bootcampTitleDictionary[self.bootcampcount] self.sendUnlockedTitle(self.playerCode, unlockedtitle) self.BootcampTitleList=self.BootcampTitleList+[unlockedtitle]

if self.privileg if self.

self.titleList = ["0"]+self.GiftTitleList+self.ShamanTitleList+self.HardModeTitl eList+self.CheeseTitleList+self.FirstTitleList+self.ShopTitleList+self.BootcampT itleList if self.privilegeLevel==10: self.titleList = self.titleList+["440","442","444"] self.titleList = filter(None, self.titleList) self.sendTitleList() (self.playerCode, self.score, place, timeTaken) erCount())>=1: oubleMap: room.checkIfDoubleShamansAreDead(): self.send20SecRemainingTimer() heckIfShamanIsDead(): d20SecRemainingTimer() self.sendPlayerGotCheese if int(self.room.getPlay if self.room.isD if self.

elif self.room.c self.sen else: pass if self.room.che self.sen self.room.checkShouldCha elif eventToken2 == "J": #PlacementObjet if self.room.isTotemEditeur: if self.room.identifiantTemporai self.room.identifiantTem if not self.room.identifiantTemp self.room.identifiantTem self.sendTotemItemCount(

ckIfTooFewRemaining(): d20SecRemainingTimer() ngeWorld()

re == -1: poraire = 0 oraire > 20: poraire+=1

self.room.identifiantTemporaire) vy, dur, origin=struct.unpack('!hhhhbbbb', data) identifiantTemporaire

code, px, py, angle, vx, self.Totem[0]=self.room.

self.Totem[1]=self.Totem [1]+"#2#"+str(int(code))+"\x01"+str(int(px))+"\x01"+str(int(py))+"\x01"+str(int( angle))+"\x01"+str(int(vx))+"\x01"+str(int(vy))+"\x01"+str(int(dur)) data=struct.pack('!hhhhb bbxx', code, px, py, angle, vx, vy, dur) self.room.sendAllOthersB in(self, eventTokens, data) else: code, px, py, angle, vx, vy, dur , origin=struct.unpack('!hhhhbbbb', data) data=struct.pack('!hhhhbbbxx', c ode, px, py, angle, vx, vy, dur) if self.isSyncroniser or self.is Shaman: if code==44: if not self.UTot em: self.sen dTotem(self.STotem[1], px, py, self.playerCode) self.UTo tem=True self.room.sendAllOthersB in(self, "\x05\x14", data) elif eventToken2 == "\x14": #DestructionObjet value=struct.unpack('!h', data) if self.isSyncroniser: self.room.sendAllBin(eventTokens , data) else: pass elif eventToken2 == "[": codePartieEnCours, playerCheeseDistance = struct.unpack('!ih', data[:6]) #client got cheese if codePartieEnCours==self.room.CodePart ieEnCours: if self.hasCheese: #if not self.isDead: # self.isDead=True # self.sendPlayerD ied(self.playerCode, self.score) # self.room.checkS houldChangeWorld() pass else: self.room.sendAll("\x05\ x13", [str(self.playerCode)]) self.hasCheese=True self.room.numGotCheese + = 1 if self.room.currentWorl d == 900: self.sendData2(" \x05\x5A\x01")

ial 1" d == 108: GotCheese>=10: m.killShaman() d == 109: GotCheese>=10: m.killShaman() d == 110: GotCheese>=10: m.killShaman() d == 111: GotCheese>=10: m.killShaman() d == 112: GotCheese>=10: m.killShaman() d == 113: GotCheese>=10: m.killShaman() d == 114: GotCheese>=10: m.killShaman() r" % eventTokens) else:

#print "is Tutor if self.room.currentWorl if self.room.num self.roo if self.room.currentWorl if self.room.num self.roo if self.room.currentWorl if self.room.num self.roo if self.room.currentWorl if self.room.num self.roo if self.room.currentWorl if self.room.num self.roo if self.room.currentWorl if self.room.num self.roo if self.room.currentWorl if self.room.num self.roo #logging.warning("Unimplemented Binary %

print "Unimplemented Error: Bin-"+repr(e ventTokens)+"-DATA:"+repr(data) elif eventToken1 == "wwwww": if eventToken2 == "6": #Particule ##particule, posX, posY, nombre, vitesse , gravite, accelerationY=struct.unpack('!bhhbb?h', data) ##data=struct.pack('!bhhbb?h', particule , posX, posY, nombre, vitesse, gravite, accelerationY) if self.isSyncroniser: self.room.sendAllBin(eventTokens , data) elif eventToken2 == "K":

ata[:4])[0]

#MajPositionMobile if not self.room.CheckedPhysics: codePartie=struct.unpack('!i', d #Not needed, but w/e: ##codePartie=struct.unpack('!i', data[:4 ##x=4 ##while x<len(data): ## codeMobile=struct.unpack("!h", d

])[0]

ata[x:x+2])[0]

## if codeMobile == -1: ## x+=2 ## else: ## codeMobile, posX, posY, vX, vY, angle, vAngle, dur, sleep = struct.unpack("!hhhhhhh??", data[x:x+16]) ## x+=16 if not self.room.CheckedPhysics: self.room.CheckedPhysics=True if self.isSyncroniser and codePa self.room.sendAllBin(eve else: if self.isSyncroniser: self.room.sendAllBin(eve

rtie == self.room.CodePartieEnCours: ntTokens, data)

ntTokens, data)

elif eventToken2 == ";": #MajPositionJoueur ##if len(data)==21: ## codePartie, droiteEnCours, gauch eEnCours, posX, posY, vX, xY, saute, imageSaut, codeTP, angle, vitesseAngle = st ruct.unpack('!i??hhhh?bbhh', data) ##elif len(data)==17: ## codePartie, droiteEnCours, gauch eEnCours, posX, posY, vX, xY, saute, imageSaut, codeTP = struct.unpack('!i??hhhh ?bb', data) ##else: ## pass codePartie = struct.unpack('!i', data[:4 ])[0] data=data+struct.pack("!l", int(self.pla yerCode)) if self.isFishing: self.isFishing=False if int(codePartie) == int(self.room.Code PartieEnCours): self.room.sendAllBin("\x04\x04", data) elif eventToken2 == "\x0b": #Mort CodePartieEnCours = struct.unpack('!i', data[:4])[0] if CodePartieEnCours == self.room.CodePa rtieEnCours: self.isDead = True if self.room.isBootcamp: self.score -= 1

ode, self.score) () r" % eventTokens) ventTokens)+"-DATA:"+repr(data) else:

elif self.room.isSurvivor: self.score -= 1 else: self.score += 1 if self.score < 0: self.score = 0 self.sendPlayerDied(self.playerC self.room.checkShouldChangeWorld #logging.warning("Unimplemented Binary % print "Unimplemented Error: Bin-"+repr(e

0]

elif eventToken1 == "\\": if eventToken2 == "\\": #Chat Message utflength=struct.unpack('!h', data[:2])[ utfstring=data[2:utflength+2] message = utfstring message = message.replace("<","&amp;lt;" message = message.replace("porra", "**** message = message.replace("viado", "**** message = message.replace("FODE", "***** message = message.replace("Fode", "***** message = message.replace("fode", "***** message = message.replace("cuzo", "*****") message = message.replace("cuzao", "**** message = message.replace("porra", "**** message = message.replace("arrombado", " message = message.replace("arrombada", " message = message.replace("merda", "**** message = message.replace("cadela", "*** message = message.replace("foder", "**** message = message.replace("caralho", "** message = message.replace("buceta", "*** message = message.replace("boceta", "*** message = message.replace("desgraado", "** message = message.replace("desgraada", "**

).replace("&amp;#","&amp;amp;#") *") *") ") ") ") *") *") *****") *****") *") **") *") ***") **") **") ***") ***")

", "*****") ", "*****") cu", "*****") ") ") ) *") *") ) **") ") ") *****") "*****") *****") *")

message = message.replace("filho da puta message = message.replace("filho da put@ message = message.replace("vai tomar no message = message.replace("rabo", "***** message = message.replace("vtnc", "***** message = message.replace("fdp", "*****" message = message.replace("penis", "**** message = message.replace("pinto", "**** message = message.replace("xxt", "*****" message = message.replace("xoxota", "*** message = message.replace("sexo", "***** message = message.replace("sex0", "***** message = message.replace("piriguete", " message = message.replace("prostituta", message = message.replace("masturbei", " message = message.replace("masturbao", "****

message = message.replace("micelixo", "E u tenho ciumes desse mice, ele muito foda ;(") message = message.replace("cacete", "*** **") message = message.replace("piroca", "*** **") message = message.replace("meter", "**** *") message = message.replace("metendo", "** ***") message = message.replace("mete", "***** ") message = message.replace("gay", "*****" ) message = message.replace("viadinho", "* ****") message = message.replace("cu", "*****") message = message.replace("mice lixo", " Eu tenho ciumes desse mice, ele muito foda ;(") message = message.replace("vadia", "**** *") message = message.replace("me fode", "** ***") message = message.replace("http://", "** ***") message = message.replace(".com", "***** ") message = message.replace(".de.nu", "***

**") ) ") ***") *") *") ) *") ") ***") **") ) ***") ***") ***") ***") ") ***") **") ") ****") ") ") ") *") ") ****") ***") u", "*****") ***")

message = message.replace(".br", "*****" message = message.replace("www.", "***** message = message.replace("Http://", "** message = message.replace("de nu", "**** message = message.replace("De Nu", "**** message = message.replace("www", "*****" message = message.replace("gozar", "**** message = message.replace("goza", "***** message = message.replace("Foda-se", "** message = message.replace("enfiar", "*** message = message.replace("pal", "*****" message = message.replace("boquete", "** message = message.replace("lambida", "** message = message.replace("mama eu", "** message = message.replace("chupada", "** message = message.replace("oral", "***** message = message.replace("vaginal", "** message = message.replace("trepar", "*** message = message.replace("anal", "***** message = message.replace("c", "*****") message = message.replace("viadinho", "* message = message.replace("fuck", "***** message = message.replace("suck", "***** message = message.replace("soca", "***** message = message.replace("socar", "**** message = message.replace("xana", "***** message = message.replace("travesti", "* message = message.replace("karalho", "** message = message.replace("puta que pari message = message.replace("cretino", "**

***") *****") *") *") **") ") **") "*****") *") *") *") *") *****") *****") *") **") *") ***") **") **") ***") ***") ", "*****") ", "*****") ", "*****") ", "*****") cu", "*****") ") ")

message = message.replace("me come", "** message = message.replace("bucetinha", " message = message.replace("enfia", "**** message = message.replace("vadio", "**** message = message.replace("lixoso", "*** message = message.replace("puta", "***** message = message.replace("vagina", "*** message = message.replace("homo-sexual", message = message.replace("Porra", "**** message = message.replace("Viado", "**** message = message.replace("Cuzo", "*****") message = message.replace("Cuzao", "**** message = message.replace("Porra", "**** message = message.replace("Arrombado", " message = message.replace("Arrombada", " message = message.replace("Merda", "**** message = message.replace("Cadela", "*** message = message.replace("Foder", "**** message = message.replace("Caralho", "** message = message.replace("Buceta", "*** message = message.replace("Boceta", "*** message = message.replace("Desgraado", "** message = message.replace("Desgraada", "** message = message.replace("Filho da puta message = message.replace("Filho da put@ message = message.replace("Filho da Puta message = message.replace("Filho da Put@ message = message.replace("Vai tomar no message = message.replace("Rabo", "***** message = message.replace("Vtnc", "***** message = message.replace("Fdp", "*****"

) *") *") ) **") ") ") *****") "*****") *****") *")

message = message.replace("Penis", "**** message = message.replace("Pinto", "**** message = message.replace("Xxt", "*****" message = message.replace("Xoxota", "*** message = message.replace("Sexo", "***** message = message.replace("Sex0", "***** message = message.replace("Piriguete", " message = message.replace("Prostituta", message = message.replace("Masturbei", " message = message.replace("Masturbao", "****

message = message.replace("Micelixo", "E u tenho ciumes desse mice, ele muito foda ;(") message = message.replace("Cacete", "*** **") message = message.replace("Piroca", "*** **") message = message.replace("Meter", "**** *") message = message.replace("Metendo", "** ***") message = message.replace("Mete", "***** ") message = message.replace("Gay", "*****" ) message = message.replace("Viadinho", "* ****") message = message.replace("Cu", "*****") message = message.replace("Mice lixo", " Eu tenho ciumes desse mice, ele muito foda ;(") message = message.replace("Mice Lixo", " Eu tenho ciumes desse mice, ele muito foda ;(") message = message.replace("Vadia", "**** *") message = message.replace("Me fode", "** ***") message = message.replace("Me Fode", "** ***") message = message.replace("http://", "** ***") message = message.replace("HTTP://", "** ***") message = message.replace(".com", "***** ") message = message.replace(".Com", "***** ") message = message.replace(".COm", "***** ") message = message.replace(".COM", "***** ")

**") **") **") **") ) ) ) ") ") *") ") ***") **") ) ***") ***") ***") ***") ") ***") **") ")

message = message.replace(".De.nu", "*** message = message.replace(".DE.nu", "*** message = message.replace(".DE.Nu", "*** message = message.replace(".DE.NU", "*** message = message.replace(".br", "*****" message = message.replace(".Br", "*****" message = message.replace(".BR", "*****" message = message.replace("WWW.", "***** message = message.replace("Www.", "***** message = message.replace("Gozar", "**** message = message.replace("Goza", "***** message = message.replace("Foda-se", "** message = message.replace("Enfiar", "*** message = message.replace("Pal", "*****" message = message.replace("Boquete", "** message = message.replace("Lambida", "** message = message.replace("Mama eu", "** message = message.replace("Chupada", "** message = message.replace("Oral", "***** message = message.replace("Vaginal", "** message = message.replace("Trepar", "*** message = message.replace("Anal", "***** message = message.replace("C", "*****") message = message.replace("Cu", "*****") message = message.replace("Viadinho", "* message = message.replace("Fuck", "***** message = message.replace("Suck", "***** message = message.replace("Soca", "***** message = message.replace("Socar", "**** message = message.replace("Xana", "***** message = message.replace("Travesti", "*

****") ") ") ") *") ") ****")

***") u", "*****") ***") ***") *****") *") *") **") ") **") "*****") *") *") *") *") *****") *****") *") **") *") ***") **") **") ***") ***") ", "*****") ", "*****") CU", "*****") ")

message = message.replace("Karalho", "** message = message.replace("Puta que pari message = message.replace("Cretino", "** message = message.replace("Me come", "** message = message.replace("Bucetinha", " message = message.replace("Enfia", "**** message = message.replace("Vadio", "**** message = message.replace("Lixoso", "*** message = message.replace("Puta", "***** message = message.replace("Vagina", "*** message = message.replace("Homo-sexual", message = message.replace("PORRA", "**** message = message.replace("VIADO", "**** message = message.replace("CUZ O", "*****") message = message.replace("CUZAO", "**** message = message.replace("PORRA", "**** message = message.replace("ARROMBADO", " message = message.replace("ARROMBADA", " message = message.replace("MERDA", "**** message = message.replace("CADELA", "*** message = message.replace("FODER", "**** message = message.replace("CARALHO", "** message = message.replace("BUCETA", "*** message = message.replace("BOCETA", "*** message = message.replace("DESGRA ADO", "** message = message.replace("DESGRA ADA", "** message = message.replace("FILHO DA PUTA message = message.replace("FILHO DA PUT@ message = message.replace("VAI TOMAR NO message = message.replace("RABO", "***** message = message.replace("VTNC", "*****

") ) *") *") ) **") ") ") *****") "*****") *****") *")

message = message.replace("FDP", "*****" message = message.replace("PENIS", "**** message = message.replace("PINTO", "**** message = message.replace("XXT", "*****" message = message.replace("XOXOTA", "*** message = message.replace("SEXO", "***** message = message.replace("SEX0", "***** message = message.replace("PIRIGUETE", " message = message.replace("PROSTITUTA", message = message.replace("MASTURBEI", " message = message.replace("MASTURBA O", "****

message = message.replace("MICELIXO", "E u tenho ciumes desse mice, ele muito foda ;(") message = message.replace("CACETE", "*** **") message = message.replace("PIROCA", "*** **") message = message.replace("METER", "**** *") message = message.replace("METENDO", "** ***") message = message.replace("METE", "***** ") message = message.replace("GAY", "*****" ) message = message.replace("VIADINHO", "* ****") message = message.replace("CU", "*****") message = message.replace("mice lixo", " Eu tenho ciumes desse mice, ele muito foda ;(") message = message.replace("VADIA", "**** *") message = message.replace("ME FODE", "** ***") message = message.replace("HTTP://", "** ***") message = message.replace(".COM", "***** ") message = message.replace(".DE.NU", "*** **") message = message.replace(".BR", "*****" ) message = message.replace("WWW.", "***** ") message = message.replace("gozar", "**** *") message = message.replace("goza", "***** ")

***") **") ) ***") "*****") "*****") ***") ***") ***") ***") ") ***") **") ") ****") ") ") ") *") ") ****") ***") *****") ***") ***") *****") *") *") **")

message = message.replace("FODA-SE", "** message = message.replace("ENFIAR", "*** message = message.replace("PAL", "*****" message = message.replace("BOQUETE", "** message = message.replace("Boqueteiro", message = message.replace("BOQUETEIRO", message = message.replace("boquete", "** message = message.replace("Lambida", "** message = message.replace("MAMA EU", "** message = message.replace("CHUPADA", "** message = message.replace("ORAL", "***** message = message.replace("VAGINAL", "** message = message.replace("TREPAR", "*** message = message.replace("ANAL", "***** message = message.replace("C ", "*****") message = message.replace("VIADINHO", "* message = message.replace("FUCK", "***** message = message.replace("SUCK", "***** message = message.replace("SOCA", "***** message = message.replace("SOCAR", "**** message = message.replace("XANA", "***** message = message.replace("TRAVESTI", "* message = message.replace("KARALHO", "** message = message.replace("QUE PARIU", " message = message.replace("CRETINO", "** message = message.replace("ME COME", "** message = message.replace("BUCETINHA", " message = message.replace("ENFIA", "**** message = message.replace("VADIO", "**** message = message.replace("LIXOSO", "*** message = message.replace("LIXOSA", "***

**") **") **") ") **") "*****") place("&#","&amp;#") .name, self.username, message))

message = message.replace("Lixosa", "*** message = message.replace("lixosa", "*** message = message.replace("PUTA", "***** message = message.replace("VAGINA", "*** message = message.replace("HOMO-SEXUAL", message = message.replace("<","&lt;").re #logging.info("(%s) %s: %s" % (self.room

print str(datetime.today())+" "+"(%s) %s : %r" % (self.room.name, self.username, message) if self.privilegeLevel!=10 and self.priv ilegeLevel!=6 and self.privilegeLevel!=5: if message == self.lastmessage: message="" self.sendModMessageChann el("Servidor", str(self.username)+" sent multiple of the same chat message.") if message!="": self.lastmessage=message.strip() playerCode=struct.pack("%sL" % " !", int(self.playerCode)) username=struct.pack('!h', len(s elf.username))+self.username #sendMessage=struct.pack('!h', l en(message))+message if not self.mumute: if not self.privilegeLev el==0: if self.modmute: timee=in t(self.timestampCalc(self.server.getModMuteInfo(self.username)[1])[2]) if timee <=0: self.modmute=False self.server.removeModMute(self.username) self.room.sendAllChat(playerCode, username, message) else:

self.sendModMute(self.username, timee, self.server.getModMuteInfo(self.username) [2]) else: self.roo m.sendAllChat(playerCode, username, message) else: self.room.sendAllChatF(p layerCode, username, message, self) elif eventToken2 == "`": #Sent whisper nameLength=struct.unpack('!h', data[:2]) [0] username=data[2:nameLength+2]

2])[0] ace("&#","&amp;#")

if not username.startswith("*"): username=username.lower() username=username.capitalize() data=data[nameLength+2:] messageLength=struct.unpack('!h', data[: message=data[2:messageLength+2] message=message.replace("<","&lt;").repl

#message=message.replace("\x02","") #message=message.replace("\x01","") #message=message.replace("\x03","") #message=message.replace("\xC2\xA0","") #logging.info("(%s) [c] %s: %s" % (self. room.name, self.username, "c "+username+" "+message)) print str(datetime.today())+" "+"(%s) [c ] %s: %r" % (self.room.name, self.username, "c "+username+" "+message) if not self.mumute: if not self.privilegeLevel==0: if self.modmute: timee=int(self.t imestampCalc(self.server.getModMuteInfo(self.username)[1])[2]) if timee<=0: self.mod mute=False self.ser ver.removeModMute(self.username) if self. silence: self.sendDisableWhispers() if not self.server.sendPrivMsg(self, self.username, username, message): self.sendPlayerNotFound() else: pass else: else:

self.sen dModMute(self.username, timee, self.server.getModMuteInfo(self.username)[2]) else: if self.silence: self.sen dDisableWhispers() else: if not s elf.server.sendPrivMsg(self, self.username, username, message): self.sendPlayerNotFound() pass self, self.username, username, message): ) else: else:

if not self.server.sendPrivMsgF( self.sendPlayerNotFound(

2])[0] ace("&#","&amp;#") name))+self.username e))+message

elif eventToken2 == ">": #Tribe message messageLength=struct.unpack('!h', data[: message=data[2:messageLength+2] message=message.replace("<","&lt;").repl username=struct.pack('!h', len(self.user sendMessage=struct.pack('!h', len(messag if self.isInTribe: self.server.sendWholeTribe(self,

"\x06\x08", sendMessage+username, True) elif eventToken2 == "$": #Sent command command=struct.unpack("!b", data[:1])[0] commandValues=data[1:] utflength=struct.unpack('!h', commandVal ues[:2])[0] message = commandValues[2:utflength+2] ace("&#","&amp;#") message=message.replace("<","&lt;").repl if command==0: message = message.replace("<","< logcommand="ms "+message elif command==1: logcommand="mss "+message elif command==2: logcommand="a "+message elif command==3: logcommand="m "+message elif command==4: logcommand="m* "+message elif command==5: logcommand="a* "+message elif command==6: logcommand="mssc "+message else: pass #logging.info("(%s) [c] %s: %s" % (self.

")

room.name, self.username, logcommand))

print str(datetime.today())+" "+"(%s) [c ] %s: %r" % (self.room.name, self.username, logcommand) if command==0: #ms if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5: self.sendModMessage(0, m essage) elif command==1: #mss if self.privilegeLevel==10 or se lf.privilegeLevel==6: self.sendServerMessage(m essage) elif command==2: #a if self.privilegeLevel==10 or se

lf.privilegeLevel==6 or self.privilegeLevel==5 or self.privilegeLevel==3: self.sendArbMessageChann el(self.username, message) elif command==3: #m if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5: self.sendModMessageChann el(self.username, message) elif command==4: #m* if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5: self.sendModMessageChann el(self.username, message) elif command==5: #a* if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 or self.privilegeLevel==3: self.sendArbMessageChann el(self.username, message) elif command==6: pass else: pass else: #logging.warning("Unimplemented Binary % r" % eventTokens) print "Unimplemented Error:#Sent command STAFFS Bin-"+repr(eventTokens)+"-DATA:"+repr(data) elif eventToken1 == ",": if eventToken2 == "$": #TypeChamane hardMode = struct.unpack("!?", data)[0] if self.micesaves>=500: if hardMode: self.hardMode=1 self.sendHardMode("1") else: self.hardMode=0 self.sendHardMode("0") elif eventToken2 == "N": if self.micesaves>=500: scolor = self.parseBinaryData(da ta, "i") htmlcolor=str(hex(scolor)).split ("x")[1] if htmlcolor!=self.color2: self.server.mouseColorIn fo(False, self.username, [self.color1, htmlcolor]) self.color2=htmlcolor elif eventToken2 == "&": #"Stats" language, OSVERS, FLASHVERS = self.parse BinaryData(data, "uuu") self.Langue = language.upper() if self.Langue=="ZH-CN": self.Langue="CN" if self.Langue=="ZH-TW": self.Langue="CN" if self.Langue=="FR": if self.server.GetCapabilities: print str(datetime.today

())+" "+"EN Kicked. IP: "+self.address[0] \x12",["0", "FR/EN detected."]) ction()

self.sendData("\x1A" + " self.transport.loseConne

0]

self.isBanned=True self.Langue="BR" self.Langue="BR" #lol elif eventToken2 == "9": #Validation Code if self.privilegeLevel!=0: utflength=struct.unpack('!h', data[:2])[ code = data[2:utflength+2] if code.isdigit(): if not self.ValidatedEmail: if str(code)==str(self.LastEmail

Code):

dbcur.execute('UPDATE users SET Email = ? WHERE name = ?', [self.EmailAddress, self.username]) dbcur.execute('UPDATE users SET EmailInfo = ? WHERE name = ?', ["True", self.username]) self.ValidatedEmail=True if not self.checkInShop("209 "): if self.shopitems=="": self.shopitems=str(" 209") else: self.shopitems=self. shopitems+",209" self.sendAnimZelda(self. playerCode, "2", "9") self.checkUnlockShopTitl e() self.shopcheese+=40 self.sendEmailValidated() self.sendEmailValidatedDialo g() else: self.sendEmailCodeInvalid() elif not self.ValidatedPassChange: if str(code)==str(self.LastEmail Code): self.ValidatedPassChange=Tru e self.sendEmailValidatedDialo g() else: self.sendEmailCodeInvalid() elif eventToken2 == "2": #Email Address if self.privilegeLevel!=0: self.sendEmailSent() utfLength=struct.unpack('!h', data[:2])[ 0] EmailAddr=data[2:utfLength+2] data=data[utfLength+2:] utfLength=struct.unpack('!h', data[:2])[ 0]

lAddr): r): m.randrange(100000000, 999999999+1))

Langue=data[2:utfLength+2] if not self.ValidatedEmail: if not self.checkDuplicateEmail(Emai if self.checkValidEmail(EmailAdd self.EmailAddress=EmailAddr self.LastEmailCode=str(rando

print self.LastEmailCode reactor.callLater(0, self.se rver.sendValidationEmail, self.LastEmailCode, Langue, EmailAddr, 1) #print self.LastEmailCode self.EmailMuda2 = EmailAddr dbcur.execute('UPDATE users SET Email = ? WHERE name = ?', [self.EmailAddress, self.username]) dbcur.execute('UPDATE users SET EmailInfo = ? WHERE name = ?', ["True", self.username]) # manda email self.sendData("\x06" + "\x14 ", ["<ROSE>Seu cdigo de Ativao : "+self.LastEmailCode+" "]) self.sendEmailSent() else: self.sendEmailAddrAlreadyUse else: self.sendEmailAddrAlreadyUsed() elif eventToken2 == "?": #Sent Change Password if self.privilegeLevel!=0: utfLength=struct.unpack('!h', data[:2])[ PassHash=data[2:utfLength+2] data=data[utfLength+2:] utfLength=struct.unpack('!h', data[:2])[ ForumPassHash=data[2:utfLength+2] data=data[utfLength+2:] utfLength=struct.unpack('!h', data[:2])[ ForumSalt=data[2:utfLength+2] if self.ValidatedPassChange: self.ValidatedPassChange=False passwordHash=hashlib.sha512(PassHash

d()

0]

0]

0]

).hexdigest()

dbcur.execute('UPDATE users SET pass word = ? WHERE name = ?', [passwordHash, self.username]) elif eventToken2 == "@": #Send another email if self.privilegeLevel!=0: utfLength=struct.unpack('!h', data[:2])[ 0] Langue=data[2:utfLength+2] self.LastEmailCode=str(random.randrange( 100000000, 999999999+1)) print self.LastEmailCode reactor.callLater(0, self.server.sendVal idationEmail, self.LastEmailCode, Langue, self.EmailAddress, 2) dbcur.execute('UPDATE users SET Email =

? WHERE name = ?', [self.EmailAddress, self.username]) dbcur.execute('UPDATE users SET EmailInf o = ? WHERE name = ?', ["True", self.username]) #print self.LastEmailCode #print self.LastEmailCode # manda email self.sendData("\x06" + "\x14", ["<ROSE>S eu cdigo de Ativao : "+self.LastEmailCode+" "]) else: r" % eventTokens) +repr(eventTokens)+"-DATA:"+repr(data) #logging.warning("Unimplemented Binary % print "Unimplemented Error:#ERROR1 Bin-"

data[:4])[0])

elif eventToken1 == "@": if eventToken2 == "\x03": #enter tribehouse self.enterRoom("*\x03"+self.tribe) elif eventToken2 == '"': #tribehouse code tribehousecode = str(struct.unpack('!i', dbcur.execute('select * from mapeditor w rrf = dbcur.fetchone() if rrf is None: self.sendData("\x10" + "\x04",[" else:

here code = ?', [str(tribehousecode)])

16"])

self.TribeHouse = tribehousecode dbcur.execute('UPDATE Tribu SET House = ? WHERE Code = ?', [self.TribeHouse, self.TribeCode]) self.sendData("\x10\x02", struct .pack('!i', int(self.TribeHouse)), True) self.sendTribeGreeting() else: #logging.warning("Unimplemented Binary % r" % eventTokens) print "Unimplemented Error:#tribehouse c ode Bin-"+repr(eventTokens)+"-DATA:"+repr(data) elif eventToken1 == ">": #AQUIIIIIIIIIIIIIIIIII if eventToken2 == "\x03": #Player emote emote = struct.unpack("!b",data[:1]) [0] self.sendPlayerEmote(self.playerCode,emo te) elif eventToken2 == '"': # Select Idioma Langue = data self.updateLanguageUsuario(self.username , Langue) #self.Langue="BR" elif eventToken2 == "\x1f": namelen = struct.unpack("!h", data[:2])[ 0] name = data[2:namelen+2] data = data[namelen+2:] motive = struct.unpack("!b", data[:1])[0

] )[0]

data = data[1:] motivelen = struct.unpack("!h", data[:2]

comm = data[2:motivelen+2] if motive == 0: motive = "Hack" elif motive == 1: motive = "Spam / Flood" elif motive == 2: motive = "Insulto" elif motive == 3: motive = "Phishing" elif motive == 4: motive = "Outros" if comm == "": comm = "Sem comentarios." self.server.sendModChat(self, "\x06\x14" , ["O seguinte jogador ("+self.username+") est reportando o jogador ("+name+") por "+str(motive)+" (Comentarios: '"+comm+"')"]) self.sendData("\x1A" + "\x09",["1"]) elif eventToken2 == "L": #??? Ping ???? # nao sei pra que serve... ?? ! #self.sendData("\x00\x00") pass elif eventToken2 == "2": #Meep meepx, meepy = struct.unpack('!hh', data

[:4])

if self.canMeep: if self.isShaman: self.room.sendAllBin("\x 08" + "\x26", struct.pack('!ihhi', self.playerCode, meepx, meepy, 10)) else: self.room.sendAllBin("\x 08" + "\x26", struct.pack('!ihhi', self.playerCode, meepx, meepy, 4)) else: print "hax?" elif eventToken2 == "J": #\x1d #SourisRose #playerCode = struct.unpack("!l", data[: 4])[0] self.room.sendAllOthersBin(self, eventTo kens, data) elif eventToken2 == "8": #\x1a #Cadeau playerCode = struct.unpack("!l", data[:4 ])[0] self.room.sendAllOthersBin(self, eventTo kens, data) else: #logging.warning("Unimplemented Binary % r" % eventTokens) print "Unimplemented Error: Bin-"+repr(e ventTokens)+"-DATA:"+repr(data) elif eventToken1 == "J": #6 if eventToken2 == "W": #0 self.sendData("\x14\x0F", struct.pack('!

ii', self.shopcheese, self.shopfraises), True) self.sendShopList() #join(map(str, looktoplist)) self.look.replace(" ","") elif eventToken2 == "S": # #item customization itemm, length = struct.unpack('!hb', dat a[:3]) #print '------------------' #print 'Itemm: '+ repr(itemm) data = data[3:] customizations = [] x = 0 if int(x) == 2233232: #if length != self.getItemCustomizable(i temm) or str(int(itemm)) == str(int(10101)): # print 'LOLOOOL' # print self.getItemCustomizable( itemm) # pass pass else: while x < length: if data[:4] == "": break else: customizations.a ppend(struct.unpack('!i', data[:4])[0]) data = data[4:] (",") SplitList = self.shopitems.split for Value in SplitList: if "_" in Value: theitem, custom else: theitem = Value custom = "" if int(theitem) == int(i

= Value.split("_", 1)

temm):

SplitList[SplitL ist.index(Value)] = theitem + "_" + "+".join(map(lambda x: ("%x" % ((x>>16)&0xFF )).rjust(2, "0") + ("%x" % ((x>>8)&0xFF)).rjust(2, "0") + ("%x" % (x&0xFF)).rjus t(2, "0"), customizations)) self.shopitems = ",".join(SplitList) item = itemm fullitem = str(i if int(item)>=10 itemcate item=str elif int(item)>= itemcate

tem) 0 and int(item) <=199: gory=1 (int(fullitem[1:])) 200 and int(item) <=299:

gory=2 (int(fullitem[1:])) 300 and int(item) <=399: gory=3 (int(fullitem[1:])) 400 and int(item) <=499: gory=4 (int(fullitem[1:])) 500 and int(item) <=599: gory=5 (int(fullitem[1:])) 600 and int(item) <=699: gory=6 (int(fullitem[1:])) 2100 and int(item) <=2199: gory=21 (int(fullitem[2:])) 2200 and int(item) <=2299: gory=22 (int(fullitem[2:])) 10101 and int(item) <=10199: gory=0 (int(fullitem[1:])) gory=0 m + self.getItemCustomization(fullitem) lf.look.split(";") oplist[1].split(",") else:

item=str elif int(item)>= itemcate item=str elif int(item)>= itemcate item=str elif int(item)>= itemcate item=str elif int(item)>= itemcate item=str elif int(item)>= itemcate item=str elif int(item)>= itemcate item=str elif int(item)>= itemcate item=str itemcate item=ite itemo = item item = str(item) looktoplist = se looklist = lookt

looklist2 = map( lambda i: i.split("_")[0] if "_" in str(i) else str(i), looklist) if itemcategory=

=0: n looklist[0]: if looklist[0].split("_")[0] == str(itemo): looklist[0]=str(item) klist[0] == str(item): looklist[0]=str(item) y==1: n looklist[1]: if looklist[1].split("_")[0] == str(itemo): looklist[1]=str(item) klist[1] == str(itemo): looklist[1]=str(item) y==2: n looklist[2]: if looklist[2].split("_")[0] == str(itemo): looklist[2]=str(item) klist[2] == str(itemo): looklist[2]=str(item) y==3: n looklist[3]: if looklist[3].split("_")[0] == str(itemo): looklist[3]=str(item) klist[3] == str(itemo): looklist[3]=str(item) y==4: n looklist[4]: if looklist[4].split("_")[0] == str(itemo): looklist[4]=str(item) klist[4] == str(itemo): looklist[4]=str(item)

if "_" i

elif loo

elif itemcategor if "_" i

elif loo

elif itemcategor if "_" i

elif loo

elif itemcategor if "_" i

elif loo

elif itemcategor if "_" i

elif loo

elif itemcategor

y==5: n looklist[5]: if looklist[5].split("_")[0] == str(itemo): looklist[5]=str(item) klist[5] == str(itemo): looklist[5]=str(item) y==6: n looklist[6]: if looklist[6].split("_")[0] == str(itemo): looklist[6]=str(item) klist[6] == str(itemo): looklist[6]=str(item) y==21: y==22:

if "_" i

elif loo

elif itemcategor if "_" i

elif loo

elif itemcategor pass elif itemcategor else: pass pass

json.dumps(looklist) looktoplist[1].strip('[]') looktoplist[1].replace("\"","") looktoplist[1].replace(" ","") join(map(str, looktoplist)) .look.replace(" ","") t() ange()

looktoplist[1] = looktoplist[1] = looktoplist[1] = looktoplist[1] = self.look = ";". self.look = self self.sendShopLis #self.sendLookCh elif eventToken2 == "N": #equip item item = struct.unpack("!i", data[:6])[0] if self.checkInShop(item): fullitem = str(item) if int(item)>=100 and int(item) itemcategory=1 item=str(int(fullitem[1: elif int(item)>=200 and int(item

<=199: ])) ) <=299:

])) ) <=399: ])) ) <=499: ])) ) <=599: ])) ) <=699: ])) m) <=2199: ])) m) <=2299: ])) em) <=10199: ]))

itemcategory=2 item=str(int(fullitem[1: elif int(item)>=300 and int(item itemcategory=3 item=str(int(fullitem[1: elif int(item)>=400 and int(item itemcategory=4 item=str(int(fullitem[1: elif int(item)>=500 and int(item itemcategory=5 item=str(int(fullitem[1: elif int(item)>=600 and int(item itemcategory=6 item=str(int(fullitem[1: elif int(item)>=2100 and int(ite itemcategory=21 item=str(int(fullitem[2: elif int(item)>=2200 and int(ite itemcategory=22 item=str(int(fullitem[2: elif int(item)>=10101 and int(it itemcategory=0 item=str(int(fullitem[1: else: itemcategory=0 item=item itemo = str(item) item = str(item) + self.getItemC looktoplist = self.look.split("; looklist = looktoplist[1].split(

ustomization(fullitem) ") ",")

looklist2 = map(lambda i: i.spli t("_")[0] if "_" in str(i) else str(i), looklist) if itemcategory==0: if looklist2[0]==str(ite mo): looklist[0]=0 else: looklist[0]=str( item) elif itemcategory==1: if looklist2[1]==str(ite mo):

else: item) mo):

looklist[1]=0 looklist[1]=str(

elif itemcategory==2: if looklist2[2]==str(ite else: looklist[2]=0 looklist[2]=str(

item) mo):

elif itemcategory==3: if looklist2[3]==str(ite else: looklist[3]=0 looklist[3]=str(

item) mo):

elif itemcategory==4: if looklist2[4]==str(ite else: looklist[4]=0 looklist[4]=str(

item) mo):

elif itemcategory==5: if looklist2[5]==str(ite else: looklist[5]=0 looklist[5]=str(

item) mo):

elif itemcategory==6: if looklist2[6]==str(ite else: looklist[6]=0 looklist[6]=str(

item)

eColorInfo(True, self.username, "") infos ) 3a" d color1 != "bd9067": = "bd9067" and color1 != "593618": = "593618" and color1 != "8c887f":

elif itemcategory==21: looktoplist[0] = 1 infos = self.server.mous if infos != []: color1, color2 = color = int(item newcolor = "7858 if color == 0 an newcolor elif color == 1 newcolor elif color == 2

= "8c887f" and color1 != "dfd8ce": = "dfd8ce" and color1 != "4e443a": = "4e443a" and color1 != "e3c07e": = "e3c07e" eColorInfo(False, self.username, [newcolor, color2]) teColor(self.username) eColorInfo(False, self.username, ['"', '"']) teColor(self.username) temo): 1 tr(item) else:

newcolor elif color == 3 newcolor elif color == 4 newcolor elif color == 5 newcolor self.server.mous self.server.upda self.server.mous self.server.upda elif itemcategory==22: if looktoplist[0]==str(i looktoplist[0] = else: else: looktoplist[0]=s

pass

list) strip('[]') replace("\"","") replace(" ","") oktoplist)) ","")

looktoplist[1] = json.dumps(look looktoplist[1] = looktoplist[1]. looktoplist[1] = looktoplist[1]. looktoplist[1] = looktoplist[1]. self.look = ";".join(map(str, lo self.look = self.look.replace(" #self.sendLookChange() self.sendShopList() #self.room.sendAll("\x08" + "\x0 elif eventToken2 == "[": #print str(values[0]) #buy item #buy item SplitList=self.shoplist.split(";") itemcat0={} itemcat1={} itemcat2={} itemcat3={}

8",[self.sendLookChange()])

Fraises=Value.split(",") -------------------------'

itemcat4={} itemcat5={} itemcat6={} itemcat21={} itemcat22={} for Value in SplitList: Cate, Item, Customizable, Price, #print '-----------------------#print 'Cate: '+repr(Cate) #print 'Item: '+repr(Item) #print 'Customizable :'+repr(Cus #print 'Price Cheese: '+repr(Pri #print 'Price Fraises: '+repr(Fr #print '-----------------------if Price=="1000000": pass else: if Cate=="0": itemcat0[int(Ite elif Cate=="1": itemcat1[int(Ite elif Cate=="2": itemcat2[int(Ite elif Cate=="3": itemcat3[int(Ite elif Cate=="4": itemcat4[int(Ite elif Cate=="5": itemcat5[int(Ite elif Cate=="6": itemcat6[int(Ite elif Cate=="21": itemcat21[int(It elif Cate=="22": itemcat22[int(It fullitem, withfraises = struct.unpack('! fullitem = str(fullitem) if int(fullitem)>=100 and int(fullitem) itemcategory=1 item=fullitem[1:] item=int(item) item=str(item) elif int(fullitem)>=200 and int(fullitem

tomizable) ce) aises) -------------------------'

m)] = (int(Price), int(Fraises)) m)] = (int(Price), int(Fraises)) m)] = (int(Price), int(Fraises)) m)] = (int(Price), int(Fraises)) m)] = (int(Price), int(Fraises)) m)] = (int(Price), int(Fraises)) m)] = (int(Price), int(Fraises)) em)] = (int(Price), int(Fraises)) em)] = (int(Price), int(Fraises)) hb', data) <=199:

) <=299:

) <=399:

itemcategory=2 item=fullitem[1:] item=int(item) item=str(item) elif int(fullitem)>=300 and int(fullitem itemcategory=3 item=fullitem[1:] item=int(item) item=str(item) elif int(fullitem)>=400 and int(fullitem itemcategory=4 item=fullitem[1:] item=int(item) item=str(item) elif int(fullitem)>=500 and int(fullitem itemcategory=5 item=fullitem[1:] item=int(item) item=str(item) elif int(fullitem)>=601 and int(fullitem itemcategory=6 item=fullitem[1:] item=int(item) item=str(item) elif int(fullitem)>=2100 and int(fullite itemcategory=21 item=fullitem[2:] item=int(item) item=str(item) elif int(fullitem)>=2200 and int(fullite itemcategory=22 item=fullitem[2:] item=int(item) item=str(item) elif int(fullitem)>=10101 and int(fullit itemcategory=0 item=fullitem[1:] item=int(item) item=str(item) itemcategory=0 item=fullitem

) <=499:

) <=599:

) <=699:

m) <=2199:

m) <=2299:

em) <=10199:

else:

0[int(item)][1]: x14" + "\x06", [])

shopfraises = int(self.shopfraises) shopcheese = int(self.shopcheese) if withfraises == 1: if itemcategory==0: if shopfraises < itemcat self.sendData("\ if shopfraises >= itemca

t0[int(item)][1]: s=="": pitems=str(fullitem) pfraises=self.shopfraises-itemcat0[int(item)][1]

if self.shopitem self.sho self.sho self.sen self.sen self.sen else: self.sho self.sho self.sen self.sen self.sen self.checkUnlock

dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) pitems=self.shopitems+","+str(fullitem) pfraises=self.shopfraises-itemcat0[int(item)][1] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) ShopTitle() 1[int(item)][1]: x14" + "\x06", []) t1[int(item)][1]: s=="": pitems=str(fullitem) pfraises=self.shopfraises-itemcat1[int(item)][1] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) pitems=self.shopitems+","+str(fullitem) pfraises=self.shopfraises-itemcat1[int(item)][1] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) ShopTitle() else:

elif itemcategory==1: if shopfraises < itemcat self.sendData("\ if shopfraises >= itemca if self.shopitem self.sho self.sho self.sen self.sen self.sen self.sho self.sho self.sen self.sen self.sen self.checkUnlock

elif itemcategory==2: if shopfraises < itemcat

2[int(item)][1]: x14" + "\x06", []) t2[int(item)][1]: s=="": pitems=str(fullitem) pfraises=self.shopfraises-itemcat2[int(item)][1]

self.sendData("\ if shopfraises >= itemca if self.shopitem self.sho self.sho self.sen self.sen self.sen else: self.sho self.sho self.sen self.sen self.sen self.checkUnlock

dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) pitems=self.shopitems+","+str(fullitem) pfraises=self.shopfraises-itemcat2[int(item)][1] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) ShopTitle() 3[int(item)][1]: x14" + "\x06", []) t3[int(item)][1]: s=="": pitems=str(fullitem) pfraises=self.shopfraises-itemcat3[int(item)][1] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) pitems=self.shopitems+","+str(fullitem) pfraises=self.shopfraises-itemcat3[int(item)][1] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) else:

elif itemcategory==3: if shopfraises < itemcat self.sendData("\ if shopfraises >= itemca if self.shopitem self.sho self.sho self.sen self.sen self.sen self.sho self.sho self.sen self.sen self.sen

ShopTitle() 4[int(item)][1]: x14" + "\x06", []) t4[int(item)][1]: s=="": pitems=str(fullitem) pfraises=self.shopfraises-itemcat4[int(item)][1]

self.checkUnlock elif itemcategory==4: if shopfraises < itemcat self.sendData("\ if shopfraises >= itemca if self.shopitem self.sho self.sho self.sen self.sen self.sen else: self.sho self.sho self.sen self.sen self.sen self.checkUnlock

dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) pitems=self.shopitems+","+str(fullitem) pfraises=self.shopfraises-itemcat4[int(item)][1] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) ShopTitle() 5[int(item)][1]: x14" + "\x06", []) t5[int(item)][1]: s=="": pitems=str(fullitem) pfraises=self.shopfraises-itemcat5[int(item)][1] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) pitems=self.shopitems+","+str(fullitem) pfraises=self.shopfraises-itemcat5[int(item)][1] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) else:

elif itemcategory==5: if shopfraises < itemcat self.sendData("\ if shopfraises >= itemca if self.shopitem self.sho self.sho self.sen self.sen self.sen self.sho self.sho self.sen

dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) ShopTitle() 6[int(item)][1]: x14" + "\x06", []) t6[int(item)][1]: s=="": pitems=str(fullitem) pfraises=self.shopfraises-itemcat6[int(item)][1] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) pitems=self.shopitems+","+str(fullitem) pfraises=self.shopfraises-itemcat6[int(item)][1] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) ShopTitle() 21[int(item)][1]: x14" + "\x06", []) t21[int(item)][1]: s=="": pitems=str(fullitem) pfraises=self.shopfraises-itemcat21[int(item)][1] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) pitems=self.shopitems+","+str(fullitem) else: else:

self.sen self.sen self.checkUnlock

elif itemcategory==6: if shopfraises < itemcat self.sendData("\ if shopfraises >= itemca if self.shopitem self.sho self.sho self.sen self.sen self.sen self.sho self.sho self.sen self.sen self.sen self.checkUnlock

elif itemcategory==21: if shopfraises < itemcat self.sendData("\ if shopfraises >= itemca if self.shopitem self.sho self.sho self.sen self.sen self.sen self.sho

pfraises=self.shopfraises-itemcat21[int(item)][1] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) ShopTitle() 22[int(item)][1]: x14" + "\x06", []) t22[int(item)][1]: s=="": pitems=str(fullitem) pfraises=self.shopfraises-itemcat22[int(item)][1] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) pitems=self.shopitems+","+str(fullitem) pfraises=self.shopfraises-itemcat22[int(item)][1] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) ShopTitle() else: [int(item)][0]: x14" + "\x06", []) 0[int(item)][0]: s=="": pitems=str(fullitem) pcheese=self.shopcheese-itemcat0[int(item)][0] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) else: else:

self.sho self.sen self.sen self.sen self.checkUnlock

elif itemcategory==22: if shopfraises < itemcat self.sendData("\ if shopfraises >= itemca if self.shopitem self.sho self.sho self.sen self.sen self.sen self.sho self.sho self.sen self.sen self.sen self.checkUnlock pass

if itemcategory==0: if shopcheese < itemcat0 self.sendData("\ if shopcheese >= itemcat if self.shopitem self.sho self.sho self.sen

dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) pitems=self.shopitems+","+str(fullitem) pcheese=self.shopcheese-itemcat0[int(item)][0] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) ShopTitle() [int(item)][0]: x14" + "\x06", []) 1[int(item)][0]: s=="": pitems=str(fullitem) pcheese=self.shopcheese-itemcat1[int(item)][0] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) pitems=self.shopitems+","+str(fullitem) pcheese=self.shopcheese-itemcat1[int(item)][0] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) ShopTitle() [int(item)][0]: x14" + "\x06", []) 2[int(item)][0]: s=="": pitems=str(fullitem) else: else:

self.sen self.sen self.sho self.sho self.sen self.sen self.sen self.checkUnlock

elif itemcategory==1: if shopcheese < itemcat1 self.sendData("\ if shopcheese >= itemcat if self.shopitem self.sho self.sho self.sen self.sen self.sen self.sho self.sho self.sen self.sen self.sen self.checkUnlock

elif itemcategory==2: if shopcheese < itemcat2 self.sendData("\ if shopcheese >= itemcat if self.shopitem self.sho

pcheese=self.shopcheese-itemcat2[int(item)][0] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) pitems=self.shopitems+","+str(fullitem) pcheese=self.shopcheese-itemcat2[int(item)][0] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) ShopTitle() [int(item)][0]: x14" + "\x06", []) 3[int(item)][0]: s=="": pitems=str(fullitem) pcheese=self.shopcheese-itemcat3[int(item)][0] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) pitems=self.shopitems+","+str(fullitem) pcheese=self.shopcheese-itemcat3[int(item)][0] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) ShopTitle() [int(item)][0]: x14" + "\x06", []) 4[int(item)][0]: else: else:

self.sho self.sen self.sen self.sen self.sho self.sho self.sen self.sen self.sen self.checkUnlock

elif itemcategory==3: if shopcheese < itemcat3 self.sendData("\ if shopcheese >= itemcat if self.shopitem self.sho self.sho self.sen self.sen self.sen self.sho self.sho self.sen self.sen self.sen self.checkUnlock

elif itemcategory==4: if shopcheese < itemcat4 self.sendData("\ if shopcheese >= itemcat

s=="": pitems=str(fullitem) pcheese=self.shopcheese-itemcat4[int(item)][0]

if self.shopitem self.sho self.sho self.sen self.sen self.sen else: self.sho self.sho self.sen self.sen self.sen self.checkUnlock

dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) pitems=self.shopitems+","+str(fullitem) pcheese=self.shopcheese-itemcat4[int(item)][0] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) ShopTitle() [int(item)][0]: x14" + "\x06", []) 5[int(item)][0]: s=="": pitems=str(fullitem) pcheese=self.shopcheese-itemcat5[int(item)][0] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) pitems=self.shopitems+","+str(fullitem) pcheese=self.shopcheese-itemcat5[int(item)][0] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) ShopTitle() 6[int(item)][1]: else:

elif itemcategory==5: if shopcheese < itemcat5 self.sendData("\ if shopcheese >= itemcat if self.shopitem self.sho self.sho self.sen self.sen self.sen self.sho self.sho self.sen self.sen self.sen self.checkUnlock

elif itemcategory==6: if shopfraises < itemcat

x14" + "\x06", []) t6[int(item)][1]: s=="": pitems=str(fullitem) pfraises=self.shopfraises-itemcat6[int(item)][1]

self.sendData("\ if shopfraises >= itemca if self.shopitem self.sho self.sho self.sen self.sen self.sen else: self.sho self.sho self.sen self.sen self.sen self.checkUnlock

dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) pitems=self.shopitems+","+str(fullitem) pfraises=self.shopfraises-itemcat6[int(item)][1] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) ShopTitle() 1[int(item)][0]: x14" + "\x06", []) 21[int(item)][0]: s=="": pitems=str(fullitem) pcheese=self.shopcheese-itemcat21[int(item)][0] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) pitems=self.shopitems+","+str(fullitem) pcheese=self.shopcheese-itemcat21[int(item)][0] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) else:

elif itemcategory==21: if shopcheese < itemcat2 self.sendData("\ if shopcheese >= itemcat if self.shopitem self.sho self.sho self.sen self.sen self.sen self.sho self.sho self.sen self.sen self.sen self.checkUnlock

ShopTitle() 2[int(item)][0]: x14" + "\x06", []) 22[int(item)][0]: s=="": pitems=str(fullitem) pcheese=self.shopcheese-itemcat22[int(item)][0]

elif itemcategory==22: if shopcheese < itemcat2 self.sendData("\ if shopcheese >= itemcat if self.shopitem self.sho self.sho self.sen self.sen self.sen else: self.sho self.sho self.sen self.sen self.sen self.checkUnlock

dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) pitems=self.shopitems+","+str(fullitem) pcheese=self.shopcheese-itemcat22[int(item)][0] dData("\x14" + "\x02", struct.pack('!hb', int(fullitem), 1), True) dShopList() dAnimZelda(self.playerCode, itemcategory, int(item)) ShopTitle() else:

category, int(item))

pass self.sendShopList() self.sendAnimZelda(self.playerCode, item #self.sendAnimZelda() #self.sendLookChange() elif eventToken2 == "J": #item customization buy item, withfraises = struct.unpack('!hb', #print '-------------------------------#print 'Item: '+repr(item) #print 'Withfraises: '+repr(withfraises) #print '--------------------------------

data[:3]) ----------'

----------'

if self.checkInShop(item): #print 'EEEE' if self.getItemCustomizable(item ) > 0 or int(item) == 10101 or int(item) == 10102: #print 'shadow' shopcheese = int(self.sh opcheese) shopfraises = int(self.s hopfraises)

20:

if withfraises == 1: if shopfraises < else: pass fullitem SplitLis for Valu

= str(item) t=self.shopitems.split(",") e in SplitList: if "_" in Value: theitem, custom = Value.split("_") else: theitem = Value custom = "" if int(theitem) == int(fullitem): SplitList[SplitList.index(Value)] = Value + "_" pitems = ",".join(SplitList) pfraises=self.shopfraises-20 dShopList() 2000: else:

self.sho self.sho self.sen if shopcheese < else: pass fullitem SplitLis for Valu

= str(item) t=self.shopitems.split(",") e in SplitList: if "_" in Value: theitem, custom = Value.split("_") else: theitem = Value custom = "" if int(theitem) == int(fullitem): SplitList[SplitList.index(Value)] = Value + "_" pitems = ",".join(SplitList)

self.sho

pcheese=self.shopcheese-2000 dShopList() ndLookChange() else:

self.sho self.sen #self.se

logging.warning("Unimplemented Error:#Sh op Bin-"+repr(eventTokens)+"-DATA:"+repr(data)) print "Unimplemented Error:#Stats Bin-"+ repr(eventTokens)+"-DATA:"+repr(data) elif eventToken1 == '\x02': if eventToken2 == "2": #ERROR1 ID=struct.unpack("!h", data)[0] if not ID in [48, 49, 50, 51, 52, 53]: ID=53 data=struct.pack("!ih", self.playerCode, ID) if self.room.currentWorld in range(200,2 10+1): if self.isAfk: self.isAfk=False if not self.isDead: self.room.sendAllBin("\x 1B\x0B", data) else: #logging.warning("Unimplemented Binary % r" % eventTokens) print "Unimplemented Error:#ERROR1 Bin-" +repr(eventTokens)+"-DATA:"+repr(data) elif eventToken1 == '9': if eventToken2 == "$": self.sendData("\x06" + "\x14",["<N>No possi vel comprar <R>Fraises<N>, mais voc pode adquirir firstando."]) else: logging.warning("Unimplemented Binary %r " % eventTokens) print "Unimplemented Error: Bin-"+repr(e ventTokens)+"-DATA:"+repr(data) elif eventToken1 == "kkk": #\x1a if eventToken2 == "kkkkkk": #Isso no serve pra porra nenhuma s pra junta r com o l de baixo .-. pass else: logging.warning("Unimplemented Binary %r" % even tTokens) print "Unimplemented Error: #TypeChamane Bin-"+r epr(eventTokens)+"-DATA:"+repr(data) def parseDataUTF(self, data): values = data.split("\x01") ##logging.warning("DATA: %s" % data) ##logging.warning("DATAD: %s" % repr(MDT_stuff)) ##logging.warning("DATAV: %s" % values)

#print values eventTokens = values.pop(0) eventToken1, eventToken2 = eventTokens if eventToken1 == "\x1a": if eventToken2 == "\x1a": if self.ATEC_Time: if datetime.today()-self.ATEC_Time<timed if self.room: self.sendPlayerDisconnec self.room.removeClient(s

elta(seconds=8):

t(self.playerCode) elf)

self.sendModMessageChannel("Serv idor", "Suspeita de Speed Hack de "+str(self.address[0])) self.transport.loseConnection() self.ATEC_Time=datetime.today() self.sendATEC() elif eventToken2 == "\x02": #awake timer #TempsZeroBR, = values #TempsZeroBR = int(TempsZeroBR) #print str(int(getTime() * 1000) - int(self.AWKE _Time)) #self.AWKE_Time=int(getTime() * 1000) if self.AwakeTimerKickTimer: try: self.AwakeTimerKickTimer.cancel( ) except: self.AwakeTimerKickTimer=None self.AwakeTimerKickTimer = reactor.callLater(120 , self.AwakeTimerKick) elif eventToken2 == "\x03": #create account username, passwordHash, loaderUrl = values username = username.replace("<","") username=username.lower() username=username.capitalize() if len(username)<3: self.transport.loseConnection() elif len(username)>12: self.transport.loseConnection() elif not username.isalpha(): self.transport.loseConnection() elif self.server.checkExistingUsers(username): self.sendData("\x1A" + "\x03", ) #Nickna me Already Taken message else: passwordHash=hashlib.sha512(passwordHash ).hexdigest() self.server.createAccount(username, pass wordHash) newmicetuto = "\x03"+"[Tutorial] "+usern ame self.login(username, passwordHash, newmi cetuto) elif eventToken2 == "\x04":

alues 4:

#login username, passwordHash, startRoom, loaderUrl = v if len(passwordHash)!=0 and len(passwordHash)!=6 passwordHash="" if passwordHash != "": passwordHash=hashlib.sha512(passwordHash

).hexdigest()

username = username.replace("<","") if len(startRoom)>200: startRoom="" startRoom = self.roomNameStrip(startRoom, "2").r eplace("<","").replace("&#", "&amp;#") self.login(username, passwordHash, startRoom) elif eventToken2 == "\x0B": stageloaderInfobytesTotal, stageloaderInfobytesL oaded, loaderInfobytesTotal, loaderInfobytesLoaded, loaderInfoUrl = values self.sendData("\x1A" + "\x04", ["<BL>"+str(loade rInfoUrl)+"<br>"+str(stageloaderInfobytesTotal)+"<br>"+str(stageloaderInfobytesL oaded)+"<br>"+str(loaderInfobytesTotal)+"<br>"+str(loaderInfobytesLoaded)]) elif eventToken2 == "\x15": #Forum datas PassMD5, Salt, Langue = values if len(Salt)==10: pass #Create forum account here? else: #logging.warning("Unimplemented %r" % eventToken s) #raise NotImplementedError, eventTokens pass elif eventToken1 == "\x04": #\x04 if eventToken2 == "\x0b": #Flying, as cupid or map 666 #[Up(1)/Down(0), On(1)/Off(0)] self.room.sendAllOthers(self, eventTokens, value s + [self.playerCode]) elif eventToken2 == "\x06": #objectCode, = values self.room.sendAll(eventTokens, values) elif eventToken2 == "\x08": #direction, = values #direction = int(direction) self.room.sendAll(eventTokens, [self.playerCode] elif eventToken2 == "\x0A": #\n self.isAfk=False elif eventToken2 == "\x0C": self.isAfk=False if not self.room.currentWorld in CONJURATION_MAP if not self.isDead: self.isDead=True self.sendPlayerDied(self.playerC #self.room.checkShouldChangeWorl

+ values)

S:

ode, self.score) d()

.playerCode]) .playerCode])

self.room.sendAllOthers(self, eventTokens, [self elif eventToken2 == "\x0D": #\r self.room.sendAllOthers(self, eventTokens, [self elif eventToken2 == "\x07": code=values[0] #print code, self.JumpCheck #if int(code)!=self.JumpCheck: # if self.room: # self.sendPlayerDisconnect(self.p # self.room.removeClient(self) # self.transport.loseConnection() self.JumpCheck=self.JumpCheck+2 elif eventToken2 == "\x0E": #conjuration x, y = values if not self.room.currentWorld in CONJURATION_MAP if not self.isDead: self.isDead=True self.sendPlayerDied(self.playerC #self.room.checkShouldChangeWorl else: reactor.callLater(10, self.sendDestroyCo self.room.sendAll(eventTokens, values)

layerCode)

S:

ode, self.score) d() njuration, x, y)

elif eventToken2 == "\x10": #snowball if self.room.isSnowing==True: x, y, direction = values if direction == "1": #self.room.sendAllOthers(self, "\x05" + "\x14", [self.playerCode, 34, x, y, 0, 10, -4, 1]) self.room.sendAllOthersBin(self, "\x05\x14", struct.pack('!hhhhbbbxx', 34, int(x), int(y), 0, 10, -4, 1)) if direction == "0": #self.room.sendAllOthers(self, "\x05" + "\x14", [self.playerCode, 34, x, y, 0, -10, -4, 1]) self.room.sendAllOthersBin(self, "\x0 5\x14", struct.pack('!hhhhbbbxx', 34, int(x), int(y), 0, -10, -4, 1)) elif eventToken2 == "\x09": #begin/end crouch crouching = False if len(values)==3: if self.room.currentWorld==777: crouching, x, y = values x=int(x) y=int(y) if x>=560 and x<=680 and y>=246 and y<=246: #y>=210 and y<=246: self.isFishing=1 elif x>=15 and x<=125 and y>=128 and y<=128: #y>=92 and y<=128: self.isFishing=2

and y<=74: #y>=38 and y<=74:

elif x>=670 and x<=770 and y>=74 else: self.isFishing=3

ngTimer.cancel() ngTimer=None r.callLater(30, self.Map777Fishing) else:

self.isFishing=False if self.Map777FishingTimer: try: self.Map777Fishi except: self.Map777Fishi

self.Map777FishingTimer = reacto

yerCode] + [values[0]])

if self.isFishing: self.isFishing=False crouching, = values crouching = bool(int(crouching)) if crouching: self.room.sendAll(eventTokens, [self.pla

if self.room.specialMap == 1: self.duckCheckCounter += 1 if self.duckCheckCounter>=10: dbcur.execute('select gi fts from users where name = ?', [self.username]) rrf = dbcur.fetchone() if rrf is None: pass else: if (int(rrf[0]) & 1) == 0: if not s elf.checkInShop("319"): if self.shopitems=="": self.shopitems=str("319") else: self.shopitems=self.shopitems+",319" self.sendAnimZelda(self.playerCode, "3", "19") self.checkUnlockShopTitle() pfraises += 40 dData("\x0c\x14", struct.pack('!h', 40), True) self.sho self.sen

dbcur.ex ecute('UPDATE users SET gifts = ? WHERE name = ?', [int(rrf[0]) | 1, self.userna me]) else: pass else: self.room.sendAll(eventTokens, [self.pla yerCode]) elif eventToken2 == "\x12":

] + values)

pass #grappling hook #x, y = values #self.room.sendAll(eventTokens, [self.playerCode elif eventToken2 == "\x13": pass #grappling hook #self.room.sendAll(eventTokens, [self.playerCode elif eventToken2 == "\x14": print values else: #logging.warning("Unimplemented %r" % eventToken #raise NotImplementedError, eventTokens pass elif eventToken1 == "\x06": if eventToken2 == "\x1A": #sent command event, = values event = event.replace("<","&lt;").replace("&#"," event_raw = event.strip() event = event_raw.lower() EVENTRAWSPLIT = event_raw.split(" ") EVENTCOUNT = len(EVENTRAWSPLIT)

])

s)

&amp;#")

if event.startswith("c "): pass elif event == "dnsrb": pass else: #logging.info("(%s) [c] %s: %s" % (self. room.name, self.username, event_raw)) pass if event in ("rire", "danse", "pleurer", "bisou" , "kiss", "dnsrb"): pass elif event.startswith("c "): pass else: print str(datetime.today())+" "+"(%s) [c ] %s: %r" % (self.room.name, self.username, event_raw) if len(event) == 1: event = "INVALID" if EVENTCOUNT == 1: if event == "disconnect": self.sendPlayerDisconnect(self.p self.room.removeClient(self) self.transport.loseConnection() elif event == "sit" or event == "sentar" self.sendPlayerEmote(self.pla elif event == "hide": if self.privilegeLevel >= 5:

layerCode)

: yerCode, 8, False)

t(self.playerCode)

self.sendPlayerDisconnec

self.sendData("\x06"+"\x 14",["Voc est invisvel para os outros usurios (/unhide para voltar a ser visvel)."] elif event == "unhide": if self.privilegeLevel >= 5: self.isHidden = False self.enterRoom(self.room name) self.sendData("\x06"+"\x 14",["Voc voltou a ser visvel para todos."]) elif event == "salon" or event == "room" or event == "sala": self.enterRoom(self.server.recom mendRoom()) elif event == "vanilla": self.enterRoom(self.server.recom mendRoomPrefixed("vanilla")) elif event == "bootcamp": self.enterRoom(self.server.recom mendRoomPrefixed("bootcamp")) elif event == "tutorial": self.enterRoom("\x03"+"[Tutorial ] "+self.username) elif event == "survivor": self.enterRoom(self.server.recom mendRoomPrefixed("survivor")) elif event == "mt": if self.isInTribe: if self.muteTribe: self.sendActivat eTribeChat(self.username) self.muteTribe = False else: self.sendDeactiv ateTribeChat(self.username) self.muteTribe = True elif event == "silence": if self.privilegeLevel==0: pass else: if self.silence: self.silence=Fal se self.sendEnableW hispers() else: self.silence=Tru e self.sendDisable Whispers() elif event == "ld": self.sendData("\x1A" + "\x04", [ "<BL>"+str(self.loaderInfoUrl)+"<br>"+str(self.stageloaderInfobytesTotal)+"<br>" +str(self.stageloaderInfobytesLoaded)+"<br>"+str(self.loaderInfobytesTotal)+"<br >"+str(self.loaderInfobytesLoaded)]) elif event == "lde": self.sendData("\x1A" + "\x0B")

#elif event == "bigtext": # self.sendData("\x1A" + "\x04", [ "To turn off big text, refresh the page and login again.<TI>"]) elif event in ("profil", "profile", "per fil"): self.sendProfile(self.username) elif event == "items": if self.disableShop: self.sendData("\x1A" + " \x04", ["<BL>Seus itens agora esto visveis."]) self.disableShop=False else: self.sendData("\x1A" + " \x04", ["<BL>Seus itens no esto mais visveis."]) self.disableShop=True elif event == "censor": if self.censorChat: self.sendData("\x1A" + " \x04", ["<BL>Censura de chat ativada."]) self.censorChat=False else: self.sendData("\x1A" + " \x04", ["<BL>Censura de chat desativada."]) self.censorChat=True elif event == "mutechat": if self.muteChat: self.sendData("\x1A" + " \x04", ["<BL>Voc agora pode receber mensagens no chat."]) self.muteChat=False else: self.sendData("\x1A" + " \x04", ["<BL>Voc desativou as mensagens no chat."]) self.muteChat=True elif event == "editeur": if self.privilegeLevel==0: pass else: self.enterRoom("\x03"+"[ self.sendData("\x0E" + " elif event == "totem": if self.privilegeLevel==0: pass else: if self.micesaves>=500: self.enterRoom("

Editeur] "+self.username) \x0E",[])

\x03"+"[Totem] "+self.username)

elif event == "sauvertotem": if self.room.isTotemEditeur: self.server.setTotemData (self.username, self.Totem[0], self.Totem[1]) self.STotem[0]=self.Tote m[0] self.STotem[1]=self.Tote m[1] self.sendPlayerDied(self .playerCode, self.score) self.enterRoom(self.serv

er.recommendRoom())

.playerCode, self.score) ngeWorld() ranking": s, first, cheese from users')

elif event == "resettotem": if self.room.isTotemEditeur: self.Totem =[0,""] self.RTotem=True self.isDead=True self.sendPlayerDied(self self.room.checkShouldCha elif event == "classement" or event == " Userlist = [] dbcur.execute('select name, save rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: Userlist.append( #Saves SaveList={} SaveListDisp=[] for user in Userlist: SaveList[user[0]] = user mSL=max(SaveList.iterkeys(), key SaveListDisp.append([1, mSL, Sav del SaveList[mSL] mSL=max(SaveList.iterkeys(), key SaveListDisp.append([2, mSL, Sav del SaveList[mSL] mSL=max(SaveList.iterkeys(), key SaveListDisp.append([3, mSL, Sav del SaveList[mSL] mSL=max(SaveList.iterkeys(), key SaveListDisp.append([4, mSL, Sav del SaveList[mSL] mSL=max(SaveList.iterkeys(), key SaveListDisp.append([5, mSL, Sav del SaveList[mSL] mSL=max(SaveList.iterkeys(), key SaveListDisp.append([6, mSL, Sav del SaveList[mSL] mSL=max(SaveList.iterkeys(), key

rrf)

[1] =lambda k: SaveList[k]) eList[mSL]]) =lambda k: SaveList[k]) eList[mSL]]) =lambda k: SaveList[k]) eList[mSL]]) =lambda k: SaveList[k]) eList[mSL]]) =lambda k: SaveList[k]) eList[mSL]]) =lambda k: SaveList[k]) eList[mSL]]) =lambda k: SaveList[k])

eList[mSL]]) =lambda k: SaveList[k]) eList[mSL]]) =lambda k: SaveList[k]) eList[mSL]]) =lambda k: SaveList[k]) veList[mSL]])

SaveListDisp.append([7, mSL, Sav del SaveList[mSL] mSL=max(SaveList.iterkeys(), key SaveListDisp.append([8, mSL, Sav del SaveList[mSL] mSL=max(SaveList.iterkeys(), key SaveListDisp.append([9, mSL, Sav del SaveList[mSL] mSL=max(SaveList.iterkeys(), key SaveListDisp.append([10, mSL, Sa del SaveList[mSL] #Firsts FirstList={} FirstListDisp=[] for user in Userlist: FirstList[user[0]] = use mSL=max(FirstList.iterkeys(), ke FirstListDisp.append([1, mSL, Fi del FirstList[mSL] mSL=max(FirstList.iterkeys(), ke FirstListDisp.append([2, mSL, Fi del FirstList[mSL] mSL=max(FirstList.iterkeys(), ke FirstListDisp.append([3, mSL, Fi del FirstList[mSL] mSL=max(FirstList.iterkeys(), ke FirstListDisp.append([4, mSL, Fi del FirstList[mSL] mSL=max(FirstList.iterkeys(), ke FirstListDisp.append([5, mSL, Fi del FirstList[mSL] mSL=max(FirstList.iterkeys(), ke FirstListDisp.append([6, mSL, Fi del FirstList[mSL] mSL=max(FirstList.iterkeys(), ke FirstListDisp.append([7, mSL, Fi del FirstList[mSL] mSL=max(FirstList.iterkeys(), ke

r[2] y=lambda k: FirstList[k]) rstList[mSL]]) y=lambda k: FirstList[k]) rstList[mSL]]) y=lambda k: FirstList[k]) rstList[mSL]]) y=lambda k: FirstList[k]) rstList[mSL]]) y=lambda k: FirstList[k]) rstList[mSL]]) y=lambda k: FirstList[k]) rstList[mSL]]) y=lambda k: FirstList[k]) rstList[mSL]])

y=lambda k: FirstList[k]) rstList[mSL]]) y=lambda k: FirstList[k]) rstList[mSL]]) y=lambda k: FirstList[k]) irstList[mSL]])

FirstListDisp.append([8, mSL, Fi del FirstList[mSL] mSL=max(FirstList.iterkeys(), ke FirstListDisp.append([9, mSL, Fi del FirstList[mSL] mSL=max(FirstList.iterkeys(), ke FirstListDisp.append([10, mSL, F del FirstList[mSL] #Cheese CheeseList={} CheeseListDisp=[] for user in Userlist: CheeseList[user[0]] = us mSL=max(CheeseList.iterkeys(), k CheeseListDisp.append([1, mSL, C del CheeseList[mSL] mSL=max(CheeseList.iterkeys(), k CheeseListDisp.append([2, mSL, C del CheeseList[mSL] mSL=max(CheeseList.iterkeys(), k CheeseListDisp.append([3, mSL, C del CheeseList[mSL] mSL=max(CheeseList.iterkeys(), k CheeseListDisp.append([4, mSL, C del CheeseList[mSL] mSL=max(CheeseList.iterkeys(), k CheeseListDisp.append([5, mSL, C del CheeseList[mSL] mSL=max(CheeseList.iterkeys(), k CheeseListDisp.append([6, mSL, C del CheeseList[mSL] mSL=max(CheeseList.iterkeys(), k CheeseListDisp.append([7, mSL, C del CheeseList[mSL] mSL=max(CheeseList.iterkeys(), k CheeseListDisp.append([8, mSL, C del CheeseList[mSL]

er[3] ey=lambda k: CheeseList[k]) heeseList[mSL]]) ey=lambda k: CheeseList[k]) heeseList[mSL]]) ey=lambda k: CheeseList[k]) heeseList[mSL]]) ey=lambda k: CheeseList[k]) heeseList[mSL]]) ey=lambda k: CheeseList[k]) heeseList[mSL]]) ey=lambda k: CheeseList[k]) heeseList[mSL]]) ey=lambda k: CheeseList[k]) heeseList[mSL]]) ey=lambda k: CheeseList[k]) heeseList[mSL]])

ey=lambda k: CheeseList[k]) heeseList[mSL]]) ey=lambda k: CheeseList[k]) CheeseList[mSL]])

mSL=max(CheeseList.iterkeys(), k CheeseListDisp.append([9, mSL, C del CheeseList[mSL] mSL=max(CheeseList.iterkeys(), k CheeseListDisp.append([10, mSL,

entTitle(str(SaveListDisp[0][1])) entTitle(str(SaveListDisp[1][1])) entTitle(str(SaveListDisp[2][1])) entTitle(str(SaveListDisp[3][1])) entTitle(str(SaveListDisp[4][1])) entTitle(str(SaveListDisp[5][1])) entTitle(str(SaveListDisp[6][1])) entTitle(str(SaveListDisp[7][1])) entTitle(str(SaveListDisp[8][1])) entTitle(str(SaveListDisp[9][1])) rrentTitle(str(CheeseListDisp[0][1])) rrentTitle(str(CheeseListDisp[1][1])) rrentTitle(str(CheeseListDisp[2][1])) rrentTitle(str(CheeseListDisp[3][1])) rrentTitle(str(CheeseListDisp[4][1])) rrentTitle(str(CheeseListDisp[5][1])) rrentTitle(str(CheeseListDisp[6][1])) rrentTitle(str(CheeseListDisp[7][1])) rrentTitle(str(CheeseListDisp[8][1])) rrentTitle(str(CheeseListDisp[9][1])) rentTitle(str(FirstListDisp[0][1])) rentTitle(str(FirstListDisp[1][1])) rentTitle(str(FirstListDisp[2][1]))

# pega os titulos dos top player savetitle0 = self.server.getCurr savetitle1 = self.server.getCurr savetitle2 = self.server.getCurr savetitle3 = self.server.getCurr savetitle4 = self.server.getCurr savetitle5 = self.server.getCurr savetitle6 = self.server.getCurr savetitle7 = self.server.getCurr savetitle8 = self.server.getCurr savetitle9 = self.server.getCurr cheesetitle0 = self.server.getCu cheesetitle1 = self.server.getCu cheesetitle2 = self.server.getCu cheesetitle3 = self.server.getCu cheesetitle4 = self.server.getCu cheesetitle5 = self.server.getCu cheesetitle6 = self.server.getCu cheesetitle7 = self.server.getCu cheesetitle8 = self.server.getCu cheesetitle9 = self.server.getCu firsttitle0 = self.server.getCur firsttitle1 = self.server.getCur firsttitle2 = self.server.getCur

rentTitle(str(FirstListDisp[3][1])) rentTitle(str(FirstListDisp[4][1])) rentTitle(str(FirstListDisp[5][1])) rentTitle(str(FirstListDisp[6][1])) rentTitle(str(FirstListDisp[7][1])) rentTitle(str(FirstListDisp[8][1])) rentTitle(str(FirstListDisp[9][1]))

firsttitle3 = self.server.getCur firsttitle4 = self.server.getCur firsttitle5 = self.server.getCur firsttitle6 = self.server.getCur firsttitle7 = self.server.getCur firsttitle8 = self.server.getCur firsttitle9 = self.server.getCur

self.sendData("\x1A"+"\x0A", [st r(SaveListDisp[0][1])+","+str(savetitle0)+","+str(SaveListDisp[0][2])+","+str(Sa veListDisp[1][1])+","+str(savetitle1)+","+str(SaveListDisp[1][2]) +","+str(SaveListDisp[2][1])+"," +str(savetitle2)+","+str(SaveListDisp[2][2]) +","+str(SaveListDisp[3][1])+"," +str(savetitle3)+","+str(SaveListDisp[3][2]) +","+str(SaveListDisp[4][1])+"," +str(savetitle4)+","+str(SaveListDisp[4][2]) +","+str(SaveListDisp[5][1])+"," +str(savetitle5)+","+str(SaveListDisp[5][2]) +","+str(SaveListDisp[6][1])+"," +str(savetitle6)+","+str(SaveListDisp[6][2]) +","+str(SaveListDisp[7][1])+"," +str(savetitle7)+","+str(SaveListDisp[7][2]) +","+str(SaveListDisp[8][1])+"," +str(savetitle8)+","+str(SaveListDisp[8][2]) +","+str(SaveListDisp[9][1])+"," +str(savetitle9)+","+str(SaveListDisp[9][2]) , str(CheeseListDisp[0][1])+","+st r(cheesetitle0)+","+str(CheeseListDisp[0][2]) +","+str(CheeseListDisp[1][1])+" ,"+str(cheesetitle1)+","+str(CheeseListDisp[1][2]) +","+str(CheeseListDisp[2][1])+" ,"+str(cheesetitle2)+","+str(CheeseListDisp[2][2]) +","+str(CheeseListDisp[3][1])+" ,"+str(cheesetitle3)+","+str(CheeseListDisp[3][2]) +","+str(CheeseListDisp[4][1])+" ,"+str(cheesetitle4)+","+str(CheeseListDisp[4][2]) +","+str(CheeseListDisp[5][1])+" ,"+str(cheesetitle5)+","+str(CheeseListDisp[5][2]) +","+str(CheeseListDisp[6][1])+" ,"+str(cheesetitle6)+","+str(CheeseListDisp[6][2]) +","+str(CheeseListDisp[7][1])+" ,"+str(cheesetitle7)+","+str(CheeseListDisp[7][2]) +","+str(CheeseListDisp[8][1])+" ,"+str(cheesetitle8)+","+str(CheeseListDisp[8][2]) +","+str(CheeseListDisp[9][1])+" ,"+str(cheesetitle9)+","+str(CheeseListDisp[9][2]) , str(FirstListDisp[0][1])+","+str (firsttitle0)+","+str(FirstListDisp[0][2])

"+str(firsttitle1)+","+str(FirstListDisp[1][2]) "+str(firsttitle2)+","+str(FirstListDisp[2][2]) "+str(firsttitle3)+","+str(FirstListDisp[3][2]) "+str(firsttitle4)+","+str(FirstListDisp[4][2]) "+str(firsttitle5)+","+str(FirstListDisp[5][2]) "+str(firsttitle6)+","+str(FirstListDisp[6][2]) "+str(firsttitle7)+","+str(FirstListDisp[7][2]) "+str(firsttitle8)+","+str(FirstListDisp[8][2])

+","+str(FirstListDisp[1][1])+", +","+str(FirstListDisp[2][1])+", +","+str(FirstListDisp[3][1])+", +","+str(FirstListDisp[4][1])+", +","+str(FirstListDisp[5][1])+", +","+str(FirstListDisp[6][1])+", +","+str(FirstListDisp[7][1])+", +","+str(FirstListDisp[8][1])+",

+","+str(FirstListDisp[9][1])+", "+str(firsttitle9)+","+str(FirstListDisp[9][2])]) elif event == "pr": if self.privilegeLevel!=0: self.enterRoom("\x03"+"[ Private] "+self.username) elif event == "prbootcamp": if self.room.PrivateRoom: if self.room.name == "\x 03[Private] "+self.username: self.room.countS tats = False self.room.curren tWorld = "-1" self.room.isBoot camp = True self.room.autoRe spawn = True self.room.roundT ime = 360 self.room.Privat eRoom = True self.room.isPlay = False self.room.isSand box = False self.room.specif icMap = False self.room.isTote mEditeur = False self.room.isEdit eur = False self.room.curren tShamanCode = None self.room.curren tSyncroniserCode = None self.room.forceN extShaman = False self.room.forceN extMap = False self.room.CodePa rtieEnCours = 1 self.room.Custom MapCounter = 1

fiantTemporaire = -1 atus = 0 odyIsShaman = self.room.isSandbox IsShaman = self.room.isBootcamp anIsShaman = False oom()

self.room.identi self.room.ISCMst self.room.everyb self.room.nobody self.room.PRSham self.room.resetR elif event == "prnormal": if self.room.PrivateRoom: if self.room.name == "\x self.room.countS self.room.isBoot self.room.autoRe self.room.roundT self.room.Privat self.room.isPlay self.room.specif self.room.isSand self.room.isTote self.room.isEdit self.room.curren self.room.curren self.room.forceN self.room.forceN self.room.CodePa self.room.Custom self.room.identi self.room.ISCMst self.room.everyb self.room.nobody self.room.PRSham self.room.resetR

03[Private] "+self.username: tats = False camp = False spawn = False ime = 120 eRoom = True = False icMap = False box = False mEditeur = False eur = False tShamanCode = None tSyncroniserCode = None extShaman = False extMap = False rtieEnCours = 1 MapCounter = 1 fiantTemporaire = -1 atus = 0 odyIsShaman = self.room.isSandbox IsShaman = self.room.isBootcamp anIsShaman = False

oom()

03[Private] "+self.username: tats = False camp = False spawn = True ime = 0 eRoom = True = True box = True icMap = True mEditeur = False eur = False tShamanCode = None tSyncroniserCode = None extShaman = False extMap = False rtieEnCours = 1 MapCounter = 1 fiantTemporaire = -1 atus = 0 odyIsShaman = False IsShaman = False anIsShaman = True oom()

elif event == "prsandbox": if self.room.PrivateRoom: if self.room.name == "\x self.room.countS self.room.isBoot self.room.autoRe self.room.roundT self.room.Privat self.room.isPlay self.room.isSand self.room.specif self.room.isTote self.room.isEdit self.room.curren self.room.curren self.room.forceN self.room.forceN self.room.CodePa self.room.Custom self.room.identi self.room.ISCMst self.room.everyb self.room.nobody self.room.PRSham self.room.resetR elif event == "prclose": if self.room.PrivateRoom: if self.room.name == "\x self.room.moveAl elif event in ("kill", "suicide", "bubbl if not self.isDead: self.isDead = True self.score -= 1

03[Private] "+self.username: lRoomClients("", True) es", "die"):

.playerCode, self.score) ngeWorld() :

if self.score < 0: self.score = 0 self.sendPlayerDied(self self.room.checkShouldCha elif event == "re" or event == "respawn" if self.privilegeLevel>=10: if self.isDead: self.room.respaw if self.isShaman lol = "r data = s eventcod data=dat #self.se self.roo

nSpecific(self.username) : unbin 01010005081401345" tr(lol.split(" ", 1)[1]).replace(" ","") es=data[:4] a[4:]

ndData(self.HexToByte(eventcodes), self.HexToByte(data),True) m.sendAllBin(self.HexToByte(eventcodes), self.HexToByte(data))

elif event in ("killall", "map", "np"): if not self.room.votingMode: if self.privilegeLevel== 10 or self.privilegeLevel==6 or self.privilegeLevel==5 or self.privilegeLevel==3 : self.room.killAl l() else: if self.room.nam e == "\x03[Private] "+self.username: if event == "np": pass nt == "killall": pass if self.room.isBootcamp: pass else: self.room.killAll() sTribehouse: isInTribe: elif self.room.i if self. elif eve

else:

if re.search("C", self.TribeInfo[1].split("#")[int(self.TribeRank)]): self.room.killAll() else: self.sendTribePermisson()

elif event.startswith("queijos ") or eve nt.startswith("fromage ") or event.startswith("cheese "): if self.privilegeLevel==10: if EVENTCOUNT >= 3: _, username, amo unt = event_raw.split(" ", 2) if not username. startswith("*"): username =username.lower().capitalize() if amount.isdigi t(): if int(a mount)>50000: amount=50000 self.ser ver.giveShopCheese(self, username, amount) elif event.startswith("morangos ") or ev ent.startswith("fraises "): if self.privilegeLevel==10: if EVENTCOUNT >= 3: _, username, amo unt = event_raw.split(" ", 2) if not username. startswith("*"): username =username.lower().capitalize() if amount.isdigi t(): if int(a mount)>10000: amount=10000 self.ser ver.giveShopFraises(self, username, amount) elif event.startswith("look "): if self.privilegeLevel==10: if EVENTCOUNT >= 2: _, newlook = eve nt_raw.split(" ", 1) self.look = newl ook ent.startswith("senha "): elif event.startswith("password ") or ev

if self.privilegeLevel==10: if EVENTCOUNT >= 3: _, username, pas swordHash, forumHash, forumSalt = event_raw.split(" ", 4) if not username. startswith("*"): username

=username.lower().capitalize() Hash="" ash)<=7:

else:

password

if len(passwordH else: pass #passwor password if self.

dHash=hashlib.sha256(password).hexdigest() Hash=hashlib.sha512(passwordHash).hexdigest() server.checkExistingUsers(username):

dbcur.execute('UPDATE users SET password = ? WHERE name = ?', [passwordHash, use rname]) #self.sendData("\x06" + "\x14",["Mot de passe de User modifi"]) self.server.sendModChat(self, "\x06\x14", ["Senha do usurio alterada com sucesso." ]) elif event in ("music", "musique", "stop "): if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5: self.sendStopMusic() elif self.room.isTribehouse: if event == "musique": if self.isInTrib e: if re.se arch("z", self.TribeInfo[1].split("#")[int(self.TribeRank)]): self.sendStopMusic() elif event == "facebook": if self.privilegeLevel==0: pass else: dbcur.execute('select fa cebook from users where name = ?', [self.username]) rrf = dbcur.fetchone() if rrf is None: pass else: if rrf[0] == 0: self.sho pcheese += 20 self.sho pfraises += 10 self.sen dData("\x1A" + "\x13",[]) self.sen dData("\x1A" + "\x04", ["<J>Voc ganhou 60 queijos & 60 fraises ;) !"]) dbcur.ex ecute('UPDATE users SET facebook = ? WHERE name = ?', [1, self.username]) else: pass elif event == "csr": if self.privilegeLevel==10 or se

lf.privilegeLevel==6 or self.privilegeLevel==5: serRandom()

self.room.changeSyncroni

"<N>Playerlist start"]) rooms.values(): client in room.clients.items():

elif event == "rsandbox": if self.privilegeLevel==10: self.room.resetSandbox() elif event == "playerlist": #self.sendData("\x06" + "\x14",[ if self.privilegeLevel==10: for room in self.server. for playerCode, #self.se

ndData("\x06" + "\x14",[client.username])

self.sen dModMessageChannel("Lista de jogadores", client.username) #self.sendData("\x06" + "\x14",[ "<N>End of playerlist"]) elif event == "startsnow": if self.privilegeLevel==10: self.sendStartSnowStorm( ) self.sendData("\x1A" + " \x04", ["A neve foi ativada."]) elif event == "stopsnow": if self.privilegeLevel==10: self.sendEndSnowStorm() self.sendData("\x1A" + " \x04", ["A neve foi desativada."]) elif event == "freboot": if self.privilegeLevel==10: self.sendServerRestartSE

C(1)

self.rebootTimer = react or.callLater(1, self.server.restartServer) elif event == "reboot": if self.privilegeLevel==10: self.sendServerRestart() self.rebootTimer = react or.callLater(120, self.server.restartServer) elif event == "shutdown": if self.privilegeLevel==10: self.sendServerMessage(" Servidor ser reiniciado em 2 minutos.") #self.sendSeverShutdown( ) reactor.callLater(60,sel f.sendServerMessage,"Servidor ser reiniciado em 60 segundos.") reactor.callLater(90,sel f.sendServerMessage,"Servidor ser reiniciado em 30 segundos.") reactor.callLater(100,se lf.sendServerMessage,"Servidor ser reiniciado em 20 segundos.") reactor.callLater(110,se lf.sendServerMessage,"Servidor ser reiniciado em 10 segundos.") reactor.callLater(111,se lf.sendServerMessage,"Servidor ser reiniciado em 9 segundos.") reactor.callLater(112,se

lf.sendServerMessage,"Servidor ser reiniciado em 8 segundos.") reactor.callLater(113,se lf.sendServerMessage,"Servidor ser reiniciado em 7 segundos.") reactor.callLater(114,se lf.sendServerMessage,"Servidor ser reiniciado em 6 segundos.") reactor.callLater(115,se lf.sendServerMessage,"Servidor ser reiniciado em 5 segundos..") reactor.callLater(116,se lf.sendServerMessage,"Servidor ser reiniciado em 4 segundos.") reactor.callLater(117,se lf.sendServerMessage,"Servidor ser reiniciado em 3 segundos.") reactor.callLater(118,se lf.sendServerMessage,"Servidor ser reiniciado em 2 segundos.") reactor.callLater(119,se lf.sendServerMessage,"Servidor ser reiniciado em 1 segundo.") self.rebootTimer = react or.callLater(120, self.server.stopServer) elif event == "fshutdown": if self.privilegeLevel==10: self.sendServerMessage(" DESLIGAMENTO INESPERADO!") self.server.stopServer() elif event == "party": if self.privilegeLevel==10: self.sendEverybodyDance( ) elif event == "gay": if self.privilegeLevel==10 or se lf.privilegeLevel==5: self.room.sendAllBin ("\ x08\x29", struct.pack("!l", int(self.playerCode))) self.sendData("\x06" + " \x14", ["<font color='#F781B0'>Voc virou um cpido do Amor ^^'</font>"]) elif event == "admtitle": if self.privilegeLevel>=10: self.titleList = self.ti tleList+["440"] self.sendUnlockedTitle(s elf.playerCode, "440") elif event == "smtitle": if self.privilegeLevel>=6 or sel f.privilegeLevel>=7: self.titleList = self.ti tleList+["442"] self.sendUnlockedTitle(s elf.playerCode, "442") elif event == "mtitle": if self.privilegeLevel>=5: self.titleList = self.ti tleList+["444"] self.sendUnlockedTitle(s elf.playerCode, "444") ymaps": elif event == "meusmapas" or event == "m if self.privilegeLevel>=1: maplist = [] mapslist = "" username = self.username dbcur.execute('select *

from mapeditor where name = ?', [username]) ()

rrfRows = dbcur.fetchall if rrfRows is None: mapslist="Empty" else: for rrf in rrfRo name=rrf code=rrf yes=rrf[ no=rrf[4 perma=rr totalvot if total

ws: [0] [1] 3] ] f[5] es=yes+no votes==0: totalvotes=1 rating=(1.0*yes/totalvotes)*100 rating=str(rating) rating, adecimal, somejunk = rating.partition(".")

mapslist=mapslist+"<br>"+str(name)+" - @"+str(code)+" - "+str(totalvotes)+" - "+ str(rating)+"% - P"+str(perma) \x14",[mapslist]) self.sendData("\x06" + " elif event == "about": if self.privilegeLevel >= 1: self.sendData("\x06" + "

\x14",["<J>Transformice criado por Melibelule.</U>"])

self.sendData("\x06" + " \x14",["<font color='#FFFFFF'>Transformice verso</font>: <J>1.55</U>"]) elif event == "ajuda": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 or self.privilegeLevel==3 or self .privilegeLevel==2 or self.privilegeLevel==1: self.sendData("\x06" + " \x14", ["<J>>> Comandos Do Jogador <<</font>"]) self.sendData("\x06" + " \x14",["/ranking <G>- Mostra o Ranking do jogo."]) #self.sendData("\x06" + "\x14",["/info @Cdigo <G>- Mostra informaes sobre tal mapa.<BL>"]) #self.sendData("\x06" + "\x14",["<G>/disconnect <G>- Voc desconecta-se do jogo."]) self.sendData("\x06" + " \x14",["/vmap [@Cdigo] <G>- Manda um mapa para ser avaliado."]) self.sendData("\x06" + " \x14",["/ban [NomeDoJogador] <G>- Envia um voto para banir um determinado jogado r. Com 6 votos o jogador banido por uma hora.<BL>"])

"\x14",["/die ou /kill <G>- Mata o seu rato.<BL>"])

#self.sendData("\x06" +

self.sendData("\x06" + " \x14",["/mutechat <G>- Voc no receber mais mensagens no chat. Digite /mutechat para vo ltar ao normal."]) self.sendData("\x06" + " \x14",["/hack [NomeDoJogador] <G>- Reporta algum jogador por hacker.<BL>"]) #self.sendData("\x06" + "\x14",["/title <G>- Aparece os seus ttulos.<BL>"]) self.sendData("\x06" + " \x14",["/bcstats <G>- Aparece quantos vezes voc completou algum mapa BOOTCAMP.<BL> "]) self.sendData("\x06" + " \x14",["/bcranking <G>- Aparece o ranking dos 5 que mais completaram mapa de BOO TCAMP.<BL>"]) self.sendData("\x06" + " \x14",["/meusmapas <G>- Aparece seus mapas.<BL>"]) self.sendData("\x06" + " \x14",["/facebook <G>- Ganhe 20 cheeses.<BL>"]) self.sendData("\x06" + " \x14",["/mjoin [NomeDoJogador] <G>- Convide algum para seu PRIVATE.<BL>"]) self.sendData("\x06" + " \x14",["/musique [Link.mp3] <G>- Coloque uma msica no Cafofo da Tribo.<BL>"]) self.sendData("\x06" + " \x14",["/c [NomeDoJogador] [Mensagem] <G>- Envia uma mensagem privada (cochicho) para um determinado jogador.<BL>"]) self.sendData("\x06" + " \x14",["/prbootcamp <G>- Voc vai para sua sala privada que s vai rodar mapas bootcam p."]) self.sendData("\x06" + " \x14",["/pr <G>- Voc vai para sua sala privada que vai rodar todos os mapas do Ser vidor."]) #self.sendData("\x06" + "\x14",["/perfil ou /profile [NomeDoJogador] <G>- Exibe o perfil de um determina do jogador.<BL>"]) self.sendData("\x06" + " \x14",["/mt <G>- Desativa o chat da tribo.<BL>"]) #self.sendData("\x06" + "\x14",["/amigo [Nome] <G>- Adiciona tal jogador na sua lista de amigos."]) #self.sendData("\x06" + "\x14",["/items <G>- Exibe/Esconde os seus itens.<BL>"]) self.sendData("\x06" + " \x14",["/sentar <G>- Deixa seu rato sentando."]) self.sendData("\x06" + " \x14",["/facebook <G>- Voc ganha 60 queijos & 60 fraises na loja."]) self.sendData("\x06" + " \x14",["/salas <G>- Mostra todos os Minigames, Salas Especiais do Mice."""]) self.sendData("\x06" + " \x14",["/resetmouse <G>- Reseta o visual do seu rato para o padro de criao!"]) else: self.sendData("\x06" + " \x14",["<R>Voc est jogando no modo convidado, voc no pode usar nenhum comando. Recome mos a voc criar uma conta."]) elif event == "salas": self.sendData("\x06" + " \x14",["<J> Lista de Mapas Especiais/Minigames"]) self.sendData("\x06" + " \x14",["/sala vanilla <G>- Roda os mapas normais do jogo."]) self.sendData("\x06" + " \x14",["/sala bootcamp <G>- Roda os mapas super dificeis."])

self.sendData("\x06" + " \x14",["/sala survivor<G>- Minigame com objetivo sobreviver do Shaman."]) self.sendData("\x06" + " \x14",["/sala fight <G>- Mapas de 2 Shamans. Objetivo: Matar o outro shaman."]) self.sendData("\x06" + " \x14",["/sala arte <G>- Roda apenas mapas artes."]) self.sendData("\x06" + " \x14",["/sala shaman <G>- Roda mapas que precisam da ajuda do shaman."]) self.sendData("\x06" + " \x14",["/sala racing <G>- Sala de Corrida, o mais rpido pega o first."]) self.sendData("\x06" + " \x14",["/sala mecanismo <G>- Roda mapas com efeitos especiais."]) #self.sendData("\x06" + "\x14",["/resetmouse <G>- Reseta o visual do seu rato."]) elif event == "bcstats": if self.privilegeLevel != 0: mybcCount = self.bootcam self.sendData("\x06" + "

pcount

\x14", ["Bootcamps completados: <V>"+str(mybcCount)])

camp from users')

elif event == "bcranking": Userlist = [] dbcur.execute('select name, Boot rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: Userlist.append( #Bootcamp BootcampList={} BootcampListDisp=[] for user in Userlist: BootcampList[user[0]] = mSL=max(BootcampList.iterkeys(), BootcampListDisp.append([1, mSL, del BootcampList[mSL] mSL=max(BootcampList.iterkeys(), BootcampListDisp.append([2, mSL, del BootcampList[mSL] mSL=max(BootcampList.iterkeys(), BootcampListDisp.append([3, mSL, del BootcampList[mSL] mSL=max(BootcampList.iterkeys(), BootcampListDisp.append([4, mSL, del BootcampList[mSL] mSL=max(BootcampList.iterkeys(),

rrf)

user[1] key=lambda k: BootcampList[k]) BootcampList[mSL]]) key=lambda k: BootcampList[k]) BootcampList[mSL]]) key=lambda k: BootcampList[k]) BootcampList[mSL]]) key=lambda k: BootcampList[k]) BootcampList[mSL]])

key=lambda k: BootcampList[k]) BootcampList[mSL]]) "<ROSE>(Top) Bootcamp completados"])

BootcampListDisp.append([5, mSL, del BootcampList[mSL] self.sendData("\x1A" + "\x04", [

self.sendData("\x1A" + "\x04", [ "<J>"+str(BootcampListDisp[0][0])+" - <N>"+str(BootcampListDisp[0][1])+" <CH>- " +str(BootcampListDisp[0][2])]) self.sendData("\x1A" + "\x04", [ "<V>"+str(BootcampListDisp[1][0])+" - <N>"+str(BootcampListDisp[1][1])+" <V>- "+ str(BootcampListDisp[1][2])]) self.sendData("\x1A" + "\x04", [ "<V>"+str(BootcampListDisp[2][0])+" - <N>"+str(BootcampListDisp[2][1])+" <V>- "+ str(BootcampListDisp[2][2])]) self.sendData("\x1A" + "\x04", [ "<V>"+str(BootcampListDisp[3][0])+" - <N>"+str(BootcampListDisp[3][1])+" <V>- "+ str(BootcampListDisp[3][2])]) self.sendData("\x1A" + "\x04", [ "<V>"+str(BootcampListDisp[4][0])+" - <N>"+str(BootcampListDisp[4][1])+" <V>- "+ str(BootcampListDisp[4][2])]) elif event == "ls": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 or self.privilegeLevel==3: self.server.getRoomList( self) elif event == "lst" : if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 or self.privilegeLevel==3: self.server.getTribesLis t(self) elif event == "sy?": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5: self.sendData("\x06" + " \x14", ["Jogador sync atual: "+str(self.room.getCurrentSync())]) #self.sendModMessageChan nel("Servidor", "The sync in room "+str(self.roomname)+" is "+str(self.room.getC urrentSync())) elif event == "p0": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: if self.room.ISCM!=-1: dbcur.execute('U PDATE mapeditor SET perma = ? WHERE code = ?', ["0", self.room.ISCM]) self.server.send ModChat(self, "\x06\x14", [self.username+" colocou o mapa "+str(self.server.getM apName(self.room.ISCM))+"-@"+str(self.room.ISCM)+" em modo 'Normal' (P0)."]) elif event == "p1": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: if self.room.ISCM!=-1: dbcur.execute('U PDATE mapeditor SET perma = ? WHERE code = ?', ["1", self.room.ISCM]) self.room.sendAl l("\x05\x12", []) self.server.send ModChat(self, "\x06\x14", [self.username+" colocou o mapa "+str(self.server.getM

apName(self.room.ISCM))+"-@"+str(self.room.ISCM)+" em modo 'protegido' (P1)."]) elif event == "p2": if self.privilegeLevel==10: if self.room.ISCM!=-1: dbcur.execute('U PDATE mapeditor SET perma = ? WHERE code = ?', ["2", self.room.ISCM]) self.room.sendAl l("\x05\x12", []) self.server.send ModChat(self, "\x06\x14", [self.username+" colocou o mapa "+str(self.server.getM apName(self.room.ISCM))+"-@"+str(self.room.ISCM)+" em modo 'Exclusivo/Evento' (P 2)."]) elif event == "p3": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: if self.room.ISCM!=-1: dbcur.execute('U PDATE mapeditor SET perma = ? WHERE code = ?', ["3", self.room.ISCM]) self.room.sendAl l("\x05\x12", []) self.server.send ModChat(self, "\x06\x14", [self.username+" colocou o mapa "+str(self.server.getM apName(self.room.ISCM))+"-@"+str(self.room.ISCM)+" em modo 'Bootcamp' (P3)."]) elif event == "p4": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: if self.room.ISCM!=-1: dbcur.execute('U PDATE mapeditor SET perma = ? WHERE code = ?', ["4", self.room.ISCM]) self.room.sendAl l("\x05\x12", []) self.server.send ModChat(self, "\x06\x14", [self.username+" colocou o mapa "+str(self.server.getM apName(self.room.ISCM))+"-@"+str(self.room.ISCM)+" em modo 'Shaman' (P4)."]) elif event == "p5": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: if self.room.ISCM!=-1: dbcur.execute('U PDATE mapeditor SET perma = ? WHERE code = ?', ["5", self.room.ISCM]) self.room.sendAl l("\x05\x12", []) self.server.send ModChat(self, "\x06\x14", [self.username+" colocou o mapa "+str(self.server.getM apName(self.room.ISCM))+"-@"+str(self.room.ISCM)+" em modo 'Arte' (P5)."]) elif event == "p6": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: if self.room.ISCM!=-1: dbcur.execute('U PDATE mapeditor SET perma = ? WHERE code = ?', ["6", self.room.ISCM]) self.room.sendAl l("\x05\x12", []) self.server.send ModChat(self, "\x06\x14", [self.username+" colocou o mapa "+str(self.server.getM apName(self.room.ISCM))+"-@"+str(self.room.ISCM)+" em modo 'Mecanismo' (P6)."])

elif event == "p7": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: if self.room.ISCM!=-1: dbcur.execute('U PDATE mapeditor SET perma = ? WHERE code = ?', ["7", self.room.ISCM]) self.room.sendAl l("\x05\x12", []) self.server.send ModChat(self, "\x06\x14", [self.username+" colocou o mapa "+str(self.server.getM apName(self.room.ISCM))+"-@"+str(self.room.ISCM)+" em modo 'Racing/Sem shaman' ( P7)."]) elif event == "p8": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: if self.room.ISCM!=-1: dbcur.execute('U PDATE mapeditor SET perma = ? WHERE code = ?', ["8", self.room.ISCM]) self.room.sendAl l("\x05\x12", []) self.server.send ModChat(self, "\x06\x14", [self.username+" colocou o mapa "+str(self.server.getM apName(self.room.ISCM))+"-@"+str(self.room.ISCM)+" em modo 'Coperao de shamans' (P8)." ]) elif event == "p9": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: if self.room.ISCM!=-1: dbcur.execute('U PDATE mapeditor SET perma = ? WHERE code = ?', ["9", self.room.ISCM]) self.room.sendAl l("\x05\x12", []) self.server.send ModChat(self, "\x06\x14", [self.username+" colocou o mapa "+str(self.server.getM apName(self.room.ISCM))+"-@"+str(self.room.ISCM)+" em modo 'Diverso' (P9)."]) elif event == "p10": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: if self.room.ISCM!=-1: dbcur.execute('U PDATE mapeditor SET perma = ? WHERE code = ?', ["10", self.room.ISCM]) self.room.sendAl l("\x05\x12", []) self.server.send ModChat(self, "\x06\x14", [self.username+" colocou o mapa "+str(self.server.getM apName(self.room.ISCM))+"-@"+str(self.room.ISCM)+" em modo 'Survivor' (P10)."]) elif event == "p11": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: if self.room.ISCM!=-1: dbcur.execute('U PDATE mapeditor SET perma = ? WHERE code = ?', ["11", self.room.ISCM]) self.room.sendAl l("\x05\x12", []) self.server.send

ModChat(self, "\x06\x14", [self.username+" colocou apName(self.room.ISCM))+"-@"+str(self.room.ISCM)+" de rotao temporriamente)."]) elif event if lf.privilegeLevel==6 or self.privilegeLevel==5 and List:

o mapa "+str(self.server.getM em modo 'Vampiro' (P11) (Fora == "p22": self.privilegeLevel==10 or se self.username in self.MapCrew

if self.room.ISCM!=-1: dbcur.execute('U PDATE mapeditor SET perma = ? WHERE code = ?', ["22", self.room.ISCM]) self.room.sendAl l("\x05\x12", []) self.server.send ModChat(self, "\x06\x14", [self.username+" colocou o mapa "+str(self.server.getM apName(self.room.ISCM))+"-@"+str(self.room.ISCM)+" em modo 'Cafofo da tribo/Trib ehouse' (P22)."]) elif event == "p32": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: if self.room.ISCM!=-1: dbcur.execute('U PDATE mapeditor SET perma = ? WHERE code = ?', ["32", self.room.ISCM]) self.room.sendAl l("\x05\x12", []) self.server.send ModChat(self, "\x06\x14", [self.username+" colocou o mapa "+str(self.server.getM apName(self.room.ISCM))+"-@"+str(self.room.ISCM)+" em modo 'Coperao de shamans (ESPECI AL FIGHT ROOM)' (P32)."]) elif event == "p42": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: if self.room.ISCM!=-1: dbcur.execute('U PDATE mapeditor SET perma = ? WHERE code = ?', ["42", self.room.ISCM]) self.room.sendAl l("\x05\x12", []) self.server.send ModChat(self, "\x06\x14", [self.username+" colocou o mapa "+str(self.server.getM apName(self.room.ISCM))+"-@"+str(self.room.ISCM)+" em modo 'Racing 2' (P42)."]) elif event == "vacuum": if self.privilegeLevel==10: dbcur.execute('VACUUM') self.sendData("\x06" + " \x14",["Efetuado!"]) elif event == "update5": if self.privilegeLevel==10: self.sendServerRestartSE

C(10)

self.rebootTimer = react or.callLater(10, self.server.restartServer5min) elif event == "update10": if self.privilegeLevel==10: self.sendServerRestartSE C(10) self.rebootTimer = react or.callLater(10, self.server.restartServer10min) elif event == "update20":

C(10)

if self.privilegeLevel==10: self.sendServerRestartSE

self.rebootTimer = react or.callLater(10, self.server.restartServer20min) elif event in ("find", "search", "cherch er"): if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 or self.privilegeLevel==3: roomname = self.server.g etFindPlayerRoomPartial(self, "", True) elif event == "refset": if self.privilegeLevel==10: self.server.refreshSetti ngs() self.sendData("\x06" + " \x14",["Efetuado!"]) elif event == "refspm": if self.privilegeLevel==10: self.server.parseSpmFile () self.sendData("\x06" + " \x14",["Efetuado!"]) elif event == "refspr": if self.privilegeLevel==10: self.server.parseRoomFil e() self.sendData("\x06" + " \x14",["Efetuado!"]) elif event == "repairmouse" or event == "resetmouse": if self.privilegeLevel!=0: self.look = self.getDefa ultLook() self.color1 = "78583a" self.Skin = "1" self.sendData("\x06" + " \x14", ["<NL>Voc resetou o visual do seu rato para o padro de criao!"]) elif event == "refnpc": if self.privilegeLevel==10: self.server.parseNpcFile () self.sendData("\x06" + " \x14",["Efetuado!"]) elif event == "refshp": self.server.parseShopFil e() self.server.sendRefreshS hop() self.sendData("\x06" + " \x14",["Efetuado!"]) self.sendNewHat() elif event == "sysinfo": if self.privilegeLevel==10: self.sendData("\x06" + " \x14",["<ROSE> >> Sistema"]) self.sendData("\x06" + " \x14",["Plataforma: "+str(sys.platform)]) self.sendData("\x06" + " \x14",["Verso: "+str(platform.system()).replace("<", "&lt;")+" "+str(platform.rele

ase()).replace("<", "&lt;")])

self.sendData("\x06" + " \x14",["Verso do Python: "+str(sys.version).replace("<", "&lt;")]) self.sendData("\x06" + " \x14",["Tempo de execuo do server: "+str(datetime.today()-self.server.STARTTIME).rep lace("<", "&lt;").split(".")[0]]) totalram=psutil.TOTAL_PH YMEM usedram=psutil.avail_phy mem() usedram = usedram / 1048 576 totalram = totalram / 10 48576 usedram = totalram-usedr am totalram = '%.1f' % tota lram usedram = '%.1f' % usedr am self.sendData("\x06" + " \x14",["Momria fsica usada: "+str(usedram).replace("<", "&lt;")+"MB"]) self.sendData("\x06" + " \x14",["Memria fsica total: "+str(totalram).replace("<", "&lt;")+"MB"]) self.sendData("\x06" + " \x14",["<ROSE> >> Armazenamento"]) self.sendData("\x06" + " \x14",["Tamanho da DataBase: "+str(os.stat("dbfile.sqlite")[6]/1024).replace("<" , "&lt;")+"KB"]) #self.sendData("\x06" + "\x14",["Tamanho do Log: "+str(os.stat("server.log")[6]/1024).replace("<", "&lt; ")+"KB"]) #self.sendData("\x06" + "\x14",["Tamanho do Log Controller: "+str(os.stat("controller.log")[6]/1024).rep lace("<", "&lt;")+"KB"]) #self.sendData("\x06" + "\x14",["Tamanho do Log Error: "+str(os.stat("error.log")[6]/1024).replace("<", "&lt;")+"KB"]) self.sendData("\x06" + " \x14",["<ROSE> >> Configurao do Servidor"]) self.sendData("\x06" + " \x14",["ID: "+str(self.server.ServerID).replace("<", "&lt;")]) self.sendData("\x06" + " \x14",["Dono: "+str(self.server.Owner).replace("<", "&lt;")]) self.sendData("\x06" + " \x14",["Key: "+str(self.server.Key).replace("<", "&lt;")]) self.sendData("\x06" + " \x14",["Policy Domain: "+str(self.server.POLICY).replace("<", "&lt;")]) self.sendData("\x06" + " \x14",["Policy Port: "+str(self.server.PORT).replace("<", "&lt;")]) self.sendData("\x06" + " \x14",["Version: "+str(VERSION).replace("<", "&lt;")]) self.sendData("\x06" + " \x14",["LCDMT: "+str(self.server.LCDMT).replace("<", "&lt;")]) if self.server.ValidateV ersion: self.sendData("\ x06" + "\x14",["Validate Version: Yes"]) else: self.sendData("\

x06" + "\x14",["Validate Version: No"]) oader: x06" + "\x14",["Validate Client: Yes"]) x06" + "\x14",["Validate Client: No"]) lities: x06" + "\x14",["Get Client Info: Yes"]) x06" + "\x14",["Get Client Info: No"])

if self.server.ValidateL self.sendData("\ else: self.sendData("\

if self.server.GetCapabi self.sendData("\ else: self.sendData("\

self.sendData("\x06" + " \x14",["Tamanho do arquivo Loader: "+str(self.server.LoaderSize)]) self.sendData("\x06" + " \x14",["Tamanho do arquivo client game: "+str(self.server.ClientSize)]) self.sendData("\x06" + " \x14",["Player Code inicial: "+self.server.getServerSetting("InitPlayerCode")]) self.sendData("\x06" + " \x14",["Tamanho mximo Binary pack: "+self.server.getServerSetting("MaxBinaryLength ")]) self.sendData("\x06" + " \x14",["Tamanho mnimo Binary pack: "+self.server.getServerSetting("MinBinaryLength ")]) self.sendData("\x06" + " \x14",["Tamanho mximo UTF pack: "+self.server.getServerSetting("MaxUTFLength")]) self.sendData("\x06" + " \x14",["Tamanho mnimo UTF pack: "+self.server.getServerSetting("MinUTFLength")]) self.sendData("\x06" + " \x14",[" ltimo cdigo de mapa exportado: "+self.server.getServerSetting("LastEditorMap Code")]) self.sendData("\x06" + " \x14",[" ltimo cdigo de tribo criada: "+self.server.getServerSetting("LastTribuCode") ]) self.sendData("\x06" + " \x14",["Quantidade de shop queijos para exportar um mapa: "+self.server.getServe rSetting("EditeurShopCheese")]) self.sendData("\x06" + " \x14",["Quantidade de queijos para exportar um mapa: "+self.server.getServerSett ing("EditeurCheese")]) elif event == "mapinfo": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 or self.privilegeLevel==3: if self.room.ISCM!=-1: yesvotes=int(sel f.server.getMapYesVotes(self.room.ISCM)) novotes=int(self .server.getMapNoVotes(self.room.ISCM)) mapname=str(self .server.getMapName(self.room.ISCM)) perma=str(self.s erver.getMapPerma(self.room.ISCM)) totalvotes=yesvo tes+novotes if totalvotes==0 : totalvot

es=1 otes/totalvotes)*100 g) , somejunk = rating.partition(".")

rating=(1.0*yesv rating=str(ratin rating, adecimal

self.sendData("\ x06" + "\x14",[str(mapname)+" - @"+str(self.room.ISCM)+" - "+str(totalvotes)+" "+str(rating)+"% - P"+str(perma)]) #self.sendModMes sageChannel("Servidor", "@"+str(self.room.ISCM)+" - "+str(rating)+"% - "+str(tot alvotes)) elif event == "extrainfo": if self.privilegeLevel==10: if self.room.ISCM!=-1: yesvotes=int(sel f.server.getMapYesVotes(self.room.ISCM)) novotes=int(self .server.getMapNoVotes(self.room.ISCM)) mapname=str(self .server.getMapName(self.room.ISCM)) perma=str(self.s erver.getMapPerma(self.room.ISCM)) mapnoexist=str(s elf.server.getMapDel(self.room.ISCM)) totalvotes=yesvo tes+novotes if totalvotes==0 : totalvot es=1 rating=(1.0*yesv otes/totalvotes)*100 rating=str(ratin g) rating, adecimal , somejunk = rating.partition(".") #self.sendData(" \x06" + "\x14",["@"+str(self.room.ISCM)+" - "+str(rating)+"% - "+str(totalvotes) +" - Y:"+str(yesvotes)+" - N:"+str(novotes)+" - P:"+str(perma)+" - D:"+str(mapno exist)+" - NM:"+str(mapname)]) self.sendModMess ageChannel("Servidor", "@"+str(self.room.ISCM)+" - "+str(rating)+"% - "+str(tota lvotes)+" - Y:"+str(yesvotes)+" - N:"+str(novotes)+" - P:"+str(perma)+" - D:"+st r(mapnoexist)+" - NM:"+str(mapname)) elif event.startswith("reportmap "): if self.privilegeLevel>=1: #if self.privilegeLevel> =10 and not self.isDrawer: message = event_raw.spli t(" ", 1)[1] self.sendData("\x06" + " \x14",["<J>Mapa Enviado. Aguarde Uma Resposta Da Moderao !"]) self.server.sendModChat( self, "\x06\x14", [""+self.username+" est enviando um mapa reportado:<V> "+message +""]) pass

elif event.startswith("mutechat "): if self.muteChat: self.sendData("\x1A" + " \x04", ["<BL>As mensagens do chat agora esto sendo exibidas."]) self.muteChat=False else: self.sendData("\x1A" + " \x04", ["<BL>As mensagens do chat agora no esto mais sendo exibidas."]) self.muteChat=True p"): elif event in ("del", "suppr", "deletema

if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: if self.room.ISCM!=-1: dbcur.execute('U PDATE mapeditor SET deleted = ? WHERE code = ?', ["1", self.room.ISCM]) dbcur.execute('U PDATE mapeditor SET perma = ? WHERE code = ?', ["44", self.room.ISCM]) #self.sendModMes sageChannel("Servidor", "Map "+str(self.room.ISCM)+" has been deleted by "+str(s elf.username)) self.server.send ModChat(self, "\x06\x14", [self.username+" tirou o mapa "+str(self.server.getMap Name(self.room.ISCM))+"-@"+str(self.room.ISCM)+"de rotao."]) elif event == "harddel": if self.privilegeLevel==10: if self.room.ISCM!=-1: dbcur.execute("D ELETE FROM mapeditor WHERE code = ?", [self.room.ISCM]) #self.sendModMes sageChannel("Servidor", "Map "+str(self.room.ISCM)+" has been hard deleted by "+ str(self.username)) self.server.send ModChat(self, "\x06\x14", [self.username+" deletou definitivamente o mapa "+str( self.server.getMapName(self.room.ISCM))+"-@"+str(self.room.ISCM)+" [FULL]"]) elif event == "clearipbans": if self.privilegeLevel==10 or se lf.privilegeLevel==6: dbcur.execute("DELETE FR OM ippermaban") self.server.tempIPBanLis t=[] self.server.IPPermaBanCa che=[] self.sendModMessageChann el("Servidor", "Lista de ip's banidos limpada por "+self.username) elif event == "clearcache": if self.privilegeLevel==10 or se lf.privilegeLevel==6: self.server.IPPermaBanCa che=[] self.sendData("\x06" + " \x14", ["Efetuado!"]) elif event == "cleariptemp": if self.privilegeLevel==10 or se lf.privilegeLevel==6: self.server.tempIPBanLis t=[]

\x14", ["Efetuado!"]) lf.privilegeLevel==6: PermaBanCache: x06" + "\x14", [ip]) lf.privilegeLevel==6: mpIPBanList: x06" + "\x14", [ip])

self.sendData("\x06" + " elif event == "viewcache": if self.privilegeLevel==10 or se for ip in self.server.IP self.sendData("\ elif event == "viewiptemp": if self.privilegeLevel==10 or se for ip in self.server.te self.sendData("\

elif event == "log": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5: loglist = [] dbcur.execute('select * from BanLog') rrfRows = dbcur.fetchall () if rrfRows is None: pass else: rrfRowsCopy = li st(rrfRows) rrfRowsCopy.reve rse() Row=0 for rrf in rrfRo wsCopy: Row=Row+ 1 fillStri ng=rrf[5] rrf5=fil lString+''.join(["0" for x in range(len(fillString),13)]) if rrf[6 ]=="Unban": loglist = loglist+[rrf[1], "", rrf[2], "", "", rrf5] loglist = loglist+[rrf[1], rrf[8], rrf[2], rrf[3], rrf[4], rrf5] 200: break x1A"+"\x17", loglist) else: if Row==

self.sendData("\

elif event == "lsp1": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: maplist = [] mapslist = "" dbcur.execute('select *

from mapeditor where perma = 1') ()

rrfRows = dbcur.fetchall if rrfRows is None: mapslist="Empty" else: for rrf in rrfRo name=rrf code=rrf yes=rrf[ no=rrf[4 perma=rr totalvot if total

ws: [0] [1] 3] ] f[5] es=yes+no votes==0: totalvotes=1 1.0*yes/totalvotes)*100 tr(rating) adecimal, somejunk = rating.partition(".")

rating=( rating=s rating,

mapslist =mapslist+"<br>"+str(name)+" - @"+str(code)+" - "+str(totalvotes)+" - "+str(rati ng)+"% - P"+str(perma) self.sendData("\x06" + " \x14",[mapslist]) elif event == "lsp2": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: maplist = [] mapslist = "" dbcur.execute('select * from mapeditor where perma = 2') rrfRows = dbcur.fetchall () if rrfRows is None: mapslist="Empty" else: for rrf in rrfRo ws: name=rrf [0] code=rrf [1] yes=rrf[ 3] no=rrf[4 ] perma=rr f[5]

es=yes+no votes==0: totalvotes=1 1.0*yes/totalvotes)*100 tr(rating) adecimal, somejunk = rating.partition(".")

totalvot if total

rating=( rating=s rating,

mapslist =mapslist+"<br>"+str(name)+" - @"+str(code)+" - "+str(totalvotes)+" - "+str(rati ng)+"% - P"+str(perma) self.sendData("\x06" + " \x14",[mapslist]) elif event == "lsp3": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: maplist = [] mapslist = "" dbcur.execute('select * from mapeditor where perma = 3') rrfRows = dbcur.fetchall () if rrfRows is None: mapslist="Empty" else: for rrf in rrfRo ws: name=rrf [0] code=rrf [1] yes=rrf[ 3] no=rrf[4 ] perma=rr f[5] totalvot es=yes+no if total votes==0: totalvotes=1 1.0*yes/totalvotes)*100 tr(rating) adecimal, somejunk = rating.partition(".") rating=( rating=s rating,

mapslist =mapslist+"<br>"+str(name)+" - @"+str(code)+" - "+str(totalvotes)+" - "+str(rati ng)+"% - P"+str(perma) self.sendData("\x06" + " \x14",[mapslist]) elif event == "lsp4":

if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: maplist = [] mapslist = "" dbcur.execute('select * from mapeditor where perma = 4') rrfRows = dbcur.fetchall () if rrfRows is None: mapslist="Empty" else: for rrf in rrfRo ws: name=rrf [0] code=rrf [1] yes=rrf[ 3] no=rrf[4 ] perma=rr f[5] totalvot es=yes+no if total votes==0: totalvotes=1 1.0*yes/totalvotes)*100 tr(rating) adecimal, somejunk = rating.partition(".") rating=( rating=s rating,

mapslist =mapslist+"<br>"+str(name)+" - @"+str(code)+" - "+str(totalvotes)+" - "+str(rati ng)+"% - P"+str(perma) self.sendData("\x06" + " \x14",[mapslist]) elif event == "lsp5": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: maplist = [] mapslist = "" dbcur.execute('select * from mapeditor where perma = 5') rrfRows = dbcur.fetchall () if rrfRows is None: mapslist="Empty" else: for rrf in rrfRo ws: name=rrf [0] code=rrf [1]

3] ] f[5] es=yes+no votes==0: totalvotes=1 1.0*yes/totalvotes)*100 tr(rating) adecimal, somejunk = rating.partition(".")

yes=rrf[ no=rrf[4 perma=rr totalvot if total

rating=( rating=s rating,

mapslist =mapslist+"<br>"+str(name)+" - @"+str(code)+" - "+str(totalvotes)+" - "+str(rati ng)+"% - P"+str(perma) self.sendData("\x06" + " \x14",[mapslist]) elif event == "lsp6": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: maplist = [] mapslist = "" dbcur.execute('select * from mapeditor where perma = 6') rrfRows = dbcur.fetchall () if rrfRows is None: mapslist="Empty" else: for rrf in rrfRo ws: name=rrf [0] code=rrf [1] yes=rrf[ 3] no=rrf[4 ] perma=rr f[5] totalvot es=yes+no if total votes==0: totalvotes=1 1.0*yes/totalvotes)*100 tr(rating) adecimal, somejunk = rating.partition(".") rating=( rating=s rating,

mapslist =mapslist+"<br>"+str(name)+" - @"+str(code)+" - "+str(totalvotes)+" - "+str(rati ng)+"% - P"+str(perma) self.sendData("\x06" + " \x14",[mapslist]) elif event == "lsp7": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: maplist = [] mapslist = "" dbcur.execute('select * from mapeditor where perma = 7') rrfRows = dbcur.fetchall () if rrfRows is None: mapslist="Empty" else: for rrf in rrfRo ws: name=rrf [0] code=rrf [1] yes=rrf[ 3] no=rrf[4 ] perma=rr f[5] totalvot es=yes+no if total votes==0: totalvotes=1 1.0*yes/totalvotes)*100 tr(rating) adecimal, somejunk = rating.partition(".") rating=( rating=s rating,

mapslist =mapslist+"<br>"+str(name)+" - @"+str(code)+" - "+str(totalvotes)+" - "+str(rati ng)+"% - P"+str(perma) self.sendData("\x06" + " \x14",[mapslist]) elif event == "lsp8": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: maplist = [] mapslist = "" dbcur.execute('select * from mapeditor where perma = 8') rrfRows = dbcur.fetchall () if rrfRows is None: mapslist="Empty" else:

ws: [0] [1] 3] ] f[5] es=yes+no votes==0: totalvotes=1 1.0*yes/totalvotes)*100 tr(rating) adecimal, somejunk = rating.partition(".")

for rrf in rrfRo name=rrf code=rrf yes=rrf[ no=rrf[4 perma=rr totalvot if total

rating=( rating=s rating,

mapslist =mapslist+"<br>"+str(name)+" - @"+str(code)+" - "+str(totalvotes)+" - "+str(rati ng)+"% - P"+str(perma) self.sendData("\x06" + " \x14",[mapslist]) elif event == "lsp9": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: maplist = [] mapslist = "" dbcur.execute('select * from mapeditor where perma = 9') rrfRows = dbcur.fetchall () if rrfRows is None: mapslist="Empty" else: for rrf in rrfRo ws: name=rrf [0] code=rrf [1] yes=rrf[ 3] no=rrf[4 ] perma=rr f[5] totalvot es=yes+no if total votes==0: totalvotes=1

1.0*yes/totalvotes)*100 tr(rating) adecimal, somejunk = rating.partition(".")

rating=( rating=s rating,

mapslist =mapslist+"<br>"+str(name)+" - @"+str(code)+" - "+str(totalvotes)+" - "+str(rati ng)+"% - P"+str(perma) self.sendData("\x06" + " \x14",[mapslist]) elif event == "lsp10": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: maplist = [] mapslist = "" dbcur.execute('select * from mapeditor where perma = 10') rrfRows = dbcur.fetchall () if rrfRows is None: mapslist="Empty" else: for rrf in rrfRo ws: name=rrf [0] code=rrf [1] yes=rrf[ 3] no=rrf[4 ] perma=rr f[5] totalvot es=yes+no if total votes==0: totalvotes=1 1.0*yes/totalvotes)*100 tr(rating) adecimal, somejunk = rating.partition(".") rating=( rating=s rating,

mapslist =mapslist+"<br>"+str(name)+" - @"+str(code)+" - "+str(totalvotes)+" - "+str(rati ng)+"% - P"+str(perma) self.sendData("\x06" + " \x14",[mapslist]) elif event == "lsp11": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: maplist = [] mapslist = "" dbcur.execute('select *

from mapeditor where perma = 11') ()

rrfRows = dbcur.fetchall if rrfRows is None: mapslist="Empty" else: for rrf in rrfRo name=rrf code=rrf yes=rrf[ no=rrf[4 perma=rr totalvot if total

ws: [0] [1] 3] ] f[5] es=yes+no votes==0: totalvotes=1 1.0*yes/totalvotes)*100 tr(rating) adecimal, somejunk = rating.partition(".")

rating=( rating=s rating,

mapslist =mapslist+"<br>"+str(name)+" - @"+str(code)+" - "+str(totalvotes)+" - "+str(rati ng)+"% - P"+str(perma) self.sendData("\x06" + " \x14",[mapslist]) elif event == "lsp22": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: maplist = [] mapslist = "" dbcur.execute('select * from mapeditor where perma = 22') rrfRows = dbcur.fetchall () if rrfRows is None: mapslist="Empty" else: for rrf in rrfRo ws: name=rrf [0] code=rrf [1] yes=rrf[ 3] no=rrf[4 ] perma=rr f[5]

es=yes+no votes==0: totalvotes=1 1.0*yes/totalvotes)*100 tr(rating) adecimal, somejunk = rating.partition(".")

totalvot if total

rating=( rating=s rating,

mapslist =mapslist+"<br>"+str(name)+" - @"+str(code)+" - "+str(totalvotes)+" - "+str(rati ng)+"% - P"+str(perma) self.sendData("\x06" + " \x14",[mapslist]) elif event == "lsp32": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: maplist = [] mapslist = "" dbcur.execute('select * from mapeditor where perma = 32') rrfRows = dbcur.fetchall () if rrfRows is None: mapslist="Empty" else: for rrf in rrfRo ws: name=rrf [0] code=rrf [1] yes=rrf[ 3] no=rrf[4 ] perma=rr f[5] totalvot es=yes+no if total votes==0: totalvotes=1 1.0*yes/totalvotes)*100 tr(rating) adecimal, somejunk = rating.partition(".") rating=( rating=s rating,

mapslist =mapslist+"<br>"+str(name)+" - @"+str(code)+" - "+str(totalvotes)+" - "+str(rati ng)+"% - P"+str(perma) self.sendData("\x06" + " \x14",[mapslist]) elif event == "lsp42":

if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: maplist = [] mapslist = "" dbcur.execute('select * from mapeditor where perma = 42') rrfRows = dbcur.fetchall () if rrfRows is None: mapslist="Empty" else: for rrf in rrfRo ws: name=rrf [0] code=rrf [1] yes=rrf[ 3] no=rrf[4 ] perma=rr f[5] totalvot es=yes+no if total votes==0: totalvotes=1 1.0*yes/totalvotes)*100 tr(rating) adecimal, somejunk = rating.partition(".") rating=( rating=s rating,

mapslist =mapslist+"<br>"+str(name)+" - @"+str(code)+" - "+str(totalvotes)+" - "+str(rati ng)+"% - P"+str(perma) self.sendData("\x06" + " \x14",[mapslist]) elif event == "lsp44": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: maplist = [] mapslist = "" dbcur.execute('select * from mapeditor where perma = 44') rrfRows = dbcur.fetchall () if rrfRows is None: mapslist="Empty" else: for rrf in rrfRo ws: name=rrf [0] code=rrf [1]

3] ] f[5] es=yes+no votes==0: totalvotes=1 1.0*yes/totalvotes)*100 tr(rating) adecimal, somejunk = rating.partition(".")

yes=rrf[ no=rrf[4 perma=rr totalvot if total

rating=( rating=s rating,

mapslist =mapslist+"<br>"+str(name)+" - @"+str(code)+" - "+str(totalvotes)+" - "+str(rati ng)+"% - P"+str(perma) self.sendData("\x06" + " \x14",[mapslist]) elif event == "lsp0": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: maplist = [] mapslist = "" dbcur.execute('select * from mapeditor where perma = 0') rrfRows = dbcur.fetchall () if rrfRows is None: mapslist="Empty" else: for rrf in rrfRo ws: name=rrf [0] code=rrf [1] yes=rrf[ 3] no=rrf[4 ] perma=rr f[5] totalvot es=yes+no if total votes==0: totalvotes=1 1.0*yes/totalvotes)*100 tr(rating) adecimal, somejunk = rating.partition(".") rating=( rating=s rating,

mapslist =mapslist+"<br>"+str(name)+" - @"+str(code)+" - "+str(totalvotes)+" - "+str(rati ng)+"% - P"+str(perma) self.sendData("\x06" + " \x14",[mapslist]) elif event == "lsbootcamp": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: maplist = [] dbcur.execute('select co de from mapeditor where perma = 3') rrfRows = dbcur.fetchall () if rrfRows is None: pass else: for rrf in rrfRo ws: maplist. append(rrf[0]) maplist = str(json.dumps (maplist)).replace("[","").replace("]","").replace("\"","").replace(" ", "").rep lace(",",", ") if maplist=="": maplist="Empty" self.sendData("\x06" + " \x14",[maplist]) elif event == "lsmaps": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: maplist = [] dbcur.execute('select co de from mapeditor') rrfRows = dbcur.fetchall () if rrfRows is None: pass else: for rrf in rrfRo ws: maplist. append(rrf[0]) maplist = str(json.dumps (maplist)).replace("[","").replace("]","").replace("\"","").replace(" ", "").rep lace(",",", ") if maplist=="": maplist="Empty" self.sendData("\x06" + " \x14",[maplist]) elif event == "lsperma": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 and self.username in self.MapCrew List: maplist = [] dbcur.execute('select co de from mapeditor where perma != 1') rrfRows = dbcur.fetchall ()

ws: append(rrf[0])

if rrfRows is None: pass else: for rrf in rrfRo maplist.

maplist = str(json.dumps (maplist)).replace("[","").replace("]","").replace("\"","").replace(" ", "").rep lace(",",", ") if maplist=="": maplist="Empty" self.sendData("\x06" + " \x14",[maplist]) elif event == "lsarb": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5: self.server.getLsArb(sel f) elif event == "validatemap": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5: if self.room.isEditeur: if self.room.ISC MVdata[7]==0 and self.room.ISCMV!=0: self.roo m.ISCMVdata[7]=1 self.sen dMapValidated() elif event == "cj": if self.privilegeLevel==10: if self.room.NoNumberedM aps: self.room.switch NoNumberedMaps(False) else: self.room.switch NoNumberedMaps(True) self.sendData("\ x06" + "\x14",["Modo normal: A sala s roda mapas normais agora (P0)."]) elif event == "cp": if self.privilegeLevel==10: if self.room.PTwoCycle: self.room.switch PTwoCycle(False) else: self.room.switch PTwoCycle(True) self.sendData("\ x06" + "\x14",["Modo evento! : Agora a sala s roda mapas oficiais de evento (P2)." ]) self.room.killAl l() elif event == "vamp": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5: self.room.sendAllBin("\x 08" + "\x42", struct.pack('!i', self.playerCode)) elif event == "meep": if self.privilegeLevel==10 or se

lf.privilegeLevel==6 or self.privilegeLevel==5: , None, True) "resetmouse": ultLook()

self.canMeep = True self.sendData("\x08\x27"

elif event == "repairmouse" or event == if self.privilegeLevel!=0: self.look = self.getDefa

self.color1 = "78583a" self.Skin = "1" self.sendData("\x06" + " \x14", ["<NL>Voc resetou o visual do seu rato para o padro de criao!"]) #dbcur.execute('UPDATE u sers SET look="'+self.look+'" WHERE name="'+self.username+'"')#, [self.look, sel f.username]) #dbcur.execute('UPDATE u sers SET Skin="'+self.Skin+'" WHERE name="'+self.username+'"')#, [self.Skin, sel f.username]) #dbcur.execute('UPDATE u sers SET fur="'+self.fur+'" WHERE name="'+self.username+'"')#, [self.fur, self.u sername]) elif event == "freefraises": if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5: self.sendData("\x0c\x14" , struct.pack('!h', 1000), True) if self.shopfraises > 30 000: pass else: self.shopfraises += 10000 else: pass else: if event.startswith("room ") or event.st artswith("salon ") or event.startswith("sala "): enterroomname = event_raw.split( " ", 1)[1] enterroomname=enterroomname.repl ace("\x07","") if self.roomname == enterroomnam e: pass elif re.search("\x03", enterroom name): pass elif self.room.isEditeur: pass else: self.enterRoom(enterroom name) elif event.startswith("title ") or event .startswith("titre "): if EVENTCOUNT == 2: _, titlenumber = event_r aw.split(" ", 2) if titlenumber.isdigit() :

int(str(titlenumber)))

titlenumber=str(

if not str(title number) in self.titleList and not int(titlenumber) in self.titleList: pass else: self.tit leNumber = titlenumber self.sen dNewTitle(titlenumber) dbcur.ex ecute('UPDATE users SET currenttitle = ? WHERE name = ?', [titlenumber, self.use rname]) else: pass elif event.startswith("profil ") or even t.startswith("profile ") or event.startswith("perfil "): if EVENTCOUNT == 2: username = event_raw.spl it(" ", 1)[1] if len(username)<3: pass elif len(username)>12: pass elif not username.isalph a(): pass else: username=usernam e.lower().capitalize() self.sendProfile (username) else: pass elif event.startswith("snpcspam "): if self.privilegeLevel==10 or se lf.privilegeLevel==6: if EVENTCOUNT == 2: username = event _raw.split(" ", 1)[1] acount=0 while acount<100 : x = rand om.randrange(1, 800) y = rand om.randrange(1, 400) npcid = random.randrange(1, 1000000000) npcid = 0-npcid self.roo m.sendAll("\x15\x15", [npcid, username, "1;0,0,0,0,0,0,0", x, y, "1", "0"]) acount+= 1 if EVENTCOUNT == 3: _, username, sho pitems = event_raw.split(" ", 2) acount=0 while acount<100

: om.randrange(1, 800) om.randrange(1, 400) random.randrange(1, 1000000000) 0-npcid m.sendAll("\x15\x15", [npcid, username, shopitems, x, y, "1", "0"]) 1 else:

x = rand y = rand npcid = npcid = self.roo acount+=

pass elif event.startswith("mute "): if EVENTCOUNT == 2: if self.privilegeLevel== 10 or self.privilegeLevel==6 or self.privilegeLevel==5 or self.privilegeLevel==3 : username = event _raw.split(" ", 1)[1] if not username. startswith("*"): self.ser ver.sendModMute(username, 1, "", self.username) else: username = event _raw.split(" ", 1)[1] if not username. startswith("*"): username =username.lower().capitalize() if not u sername == self.username: if self.server.checkAlreadyConnectedAccount(username): self.sendData("\x08" + "\x13",[username]) if EVENTCOUNT == 3: if self.privilegeLevel== 10 or self.privilegeLevel==6 or self.privilegeLevel==5 or self.privilegeLevel==3 : _, username, hou rs = event_raw.split(" ", 2) if not username. startswith("*"): if not h ours.isdigit(): hours = 1 hours=int(hours) if hours>22: hours=22 ver.sendModMute(username, int(hours), "", self.username) self.ser else:

else: _raw.split(" ", 1)[1] startswith("*"): =username.lower().capitalize() sername == self.username: if self.server.checkAlreadyConnectedAccount(username):

username = event if not username. username if not u

self.sendData("\x08" + "\x13",[username]) if EVENTCOUNT >= 4: if self.privilegeLevel== 10 or self.privilegeLevel==6 or self.privilegeLevel==5 or self.privilegeLevel==3 : _, username, hou rs, reason = event_raw.split(" ", 3) if not username. startswith("*"): if not h ours.isdigit(): hours = 1 hours=int(hours) if hours>22: hours=22 ver.sendModMute(username, int(hours), reason, self.username) else: _raw.split(" ", 1)[1] startswith("*"): =username.lower().capitalize() sername == self.username: if self.server.checkAlreadyConnectedAccount(username): self.sendData("\x08" + "\x13",[username]) elif event.startswith("mumute "): if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 or self.privilegeLevel==3: if EVENTCOUNT == 2: username = event _raw.split(" ", 1)[1] if not username. startswith("*"): username =username.lower().capitalize() if self.server.c heckAlreadyConnectedAccount(username): #self.se self.ser username = event if not username. username if not u else:

ndModMessageChannel("Servidor", self.username+" muted "+username+".")

self.ser ver.sendModChat(self, "\x06\x14", ["["+self.username+"] "+username+" poder falar a ssim que se relogar."], False) self.ser ver.sendMuMute(username, self.username) else: pass elif event.startswith("csp ") or event.s tartswith("sy "): if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5: if EVENTCOUNT == 2: username = event _raw.split(" ", 1)[1] if not username. startswith("*"): username =username.lower().capitalize() self.room.change SyncroniserSpecific(username) else: pass elif event.startswith("ipnom "): if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5: if EVENTCOUNT == 2: ip = event_raw.s plit(" ", 1)[1] self.server.IPNo mCommand(self, ip) else: pass elif event.startswith("nomip "): if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5: if EVENTCOUNT == 2: name = event_raw .split(" ", 1)[1] if not name.star tswith("*"): name=nam e.lower().capitalize() self.server.nomI PCommand(self, name) else: pass elif event.startswith("ava "): if self.privilegeLevel==10: if EVENTCOUNT == 2: code = event_raw .split(" ", 1)[1] self.sendData("\ x08" + "\x18",[code]) else: pass elif event.startswith("kick ") or event. startswith("delavatar "): if self.privilegeLevel>=5: if EVENTCOUNT == 2:

.split(" ", 1)[1] tswith("*"): e.lower().capitalize() vaPlayer(name, self) lf.privilegeLevel==6: event_raw.split(" ", 2) heckIPBan(ip): ver.removeIPBan(ip) username

name = event_raw if not name.star name=nam self.server.dela elif event.startswith("ipban "): if self.privilegeLevel==10 or se if EVENTCOUNT >= 3: _, ip, reason = if self.server.c self.ser bannedby = self.

dbcur.execute("i nsert into ippermaban (ip, bannedby, reason) values (?, ?, ?)", (ip, bannedby, r eason)) if EVENTCOUNT == 2: ip = event_raw.s plit(" ", 1)[1] if self.server.c heckIPBan(ip): self.ser ver.removeIPBan(ip) reason = "No rea son provided" bannedby = self. username dbcur.execute("i nsert into ippermaban (ip, bannedby, reason) values (?, ?, ?)", (ip, bannedby, r eason)) else: pass elif event.startswith("mipban "): if self.privilegeLevel==10 or se lf.privilegeLevel==6: if EVENTCOUNT >= 3: _, ip, reason = event_raw.split(" ", 2) bannedby = self. username if self.server.c heckIPBan(ip): self.ser ver.removeIPBan(ip) dbcur.execute("i nsert into ippermaban (ip, bannedby, reason) values (?, ?, ?)", (ip, bannedby, " No Reason Provided, Mass IP ban.")) for ip in reason .split(" "): if self. server.checkIPBan(ip): self.server.removeIPBan(ip)

dbcur.ex ecute("insert into ippermaban (ip, bannedby, reason) values (?, ?, ?)", (ip, ban nedby, "No Reason Provided, Mass IP ban.")) else: pass elif event.startswith("ip "): if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5: if EVENTCOUNT == 2: username = event _raw.split(" ", 1)[1] if not username. startswith("*"): username =username.lower().capitalize() ipaddr = self.se rver.getIPaddress(username) if ipaddr: self.sen dData("\x06" + "\x14",[ipaddr]) else: pass elif event.startswith("nextsham ") or ev ent.startswith("ch "): if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5: if EVENTCOUNT == 2: username = event _raw.split(" ", 1)[1] if not username. startswith("*"): username =username.lower().capitalize() if self.room.get PlayerCode(username)!=0: self.roo m.forceNextShaman = self.room.getPlayerCode(username) self.sen dData("\x06" + "\x14",[username+" ser o prximo shaman!"]) else: pass t.startswith("demute "): 5: ent_raw.split(" ", 1) startswith("*"): elif event.startswith("unmute ") or even if EVENTCOUNT >= 2: if self.privilegeLevel>= _, username = ev if not username.

self.ser ver.sendNoModMute(username, self.username) elif event.startswith("unban ") or event .startswith("deban "): if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5: if EVENTCOUNT == 2: foundUnban=False username = event

_raw.split(" ", 1)[1] startswith("*"): =username.lower().capitalize() elect * from userpermaban where name = ?', [username]) hone()

if not username. username dbcur.execute('s rrf = dbcur.fetc if rrf is None: pass else: dbcur.ex dbcur.ex foundUnb

ecute("DELETE FROM userpermaban WHERE name = ?", [username])

ecute('UPDATE users SET totalban = ? WHERE name = ?', ["0", username]) an=True elf.server.tempAccountBanList: ver.tempAccountBanList.remove(username) ecute('UPDATE users SET totalban = ? WHERE name = ?', ["0", username]) an=True heckTempBan(username): ver.removeTempBan(username) ecute('UPDATE users SET totalban = ? WHERE name = ?', ["0", username]) an=True heckExistingUsers(username):

if username in s self.ser dbcur.ex foundUnb

if self.server.c self.ser dbcur.ex foundUnb

if self.server.c

dbcur.ex ecute('UPDATE users SET totalban = ? WHERE name = ?', ["0", username]) if foundUnban: dbcur.ex ecute("insert into BanLog (Name, BannedBy, Time, Reason, Date, Status, Room, IP) values (?, ?, ?, ?, ?, ?, ?, ?)", (username, self.username, "", "", int(str(get Time())[:-4]), "Unban", "", "")) self.ser ver.sendModChat(self, "\x06\x14", [self.username+" has banned "+username+"."], F alse) #self.se ndModMessageChannel("Servidor", username+" has been unbanned by "+self.username) else: pass elif event.startswith("find ") or event. startswith("search ") or event.startswith("chercher "): if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 or self.privilegeLevel==3: if EVENTCOUNT >= 2: username = event _raw.split(" ", 1)[1] roomname = self. server.getFindPlayerRoomPartial(self, username) #if roomname:

ndData("\x06" + "\x14",[username+" -> "+roomname]) ndModMessageChannel("Room Request", username+" : "+roomname) else:

#self.se #self.se

pass elif event.startswith("ls "): if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 or self.privilegeLevel==3: if EVENTCOUNT >= 2: findroomname = e vent_raw.split(" ", 1)[1] findroomname = s elf.server.getFindRoomPartial(self, findroomname) else: pass elif event.startswith("info "): if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 or self.privilegeLevel==3: if EVENTCOUNT >= 2: mapnumber = even t_raw.split(" ", 1)[1] mapnumber = mapn umber.replace("@","") dbcur.execute('s elect * from mapeditor where code = ?', [mapnumber]) rrf = dbcur.fetc hone() if rrf is None: self.sen dData("\x06" + "\x14",["<R>Mapa no encontrado."]) else: yesvotes =int(rrf[3]) novotes= int(rrf[4]) mapname= str(rrf[0]) perma=st r(rrf[5]) totalvot es=yesvotes+novotes if total votes==0: totalvotes=1 1.0*yesvotes/totalvotes)*100 tr(rating) adecimal, somejunk = rating.partition(".") rating=( rating=s rating,

self.sen dData("\x06" + "\x14",[str(mapname)+" - @"+str(mapnumber)+" - "+str(totalvotes)+ " - "+str(rating)+"% - P"+str(perma)]) else: pass elif event == "modson": if self.privlegeLevel==10 or sel f.privlegeLevel==6 or self.privlegeLevel==5 or self.privlegeLevel==3 or self.pri

vlegeLevel==1 or self.privlegeLevel==0: lf) lf.privilegeLevel==6: , breason = event_raw.split(" ", 3) anMessage(bname, bhours, breason)

self.server.getLsModo(se elif event.startswith("fban "): if self.privilegeLevel==10 or se if EVENTCOUNT >= 4: _, bname, bhours self.sendPlayerB

elif event.startswith("ban "): if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 or self.privilegeLevel==3: if EVENTCOUNT >= 4: _, bname, bhours , breason = event_raw.split(" ", 3) if not bname.sta rtswith("*"): bname=bn ame.lower().capitalize() if not bhours.is digit(): bhours = "1" else: if self. privilegeLevel==3: if int(bhours)>2: bhours="2" 147483647: dData("\x06" + "\x14",["Parmetros incorretos."]) server.banPlayer(bname, bhours, breason, self.username): if int(bhours)>2 self.sen else: if self.

self.server.sendModChat(self, "\x06\x14", [self.username+" baniu "+bname+" por " +str(bhours)+" horas. Motivo: "+str(breason)], False) else: self.sendData("\x06" + "\x14",["<R> O jogador ["+str(bname)+"] no existe."]) #/ban Name Hours if EVENTCOUNT == 3: _, bname, bhours = event_raw.split(" ", 2) if not bname.sta rtswith("*"): bname=bn ame.lower().capitalize() breason = "" if not bhours.is digit(): bhours = "1" else: if self.

privilegeLevel==3: if int(bhours)>2: bhours="2" 147483647: dData("\x06" + "\x14",["Parmetros incorretos."]) server.banPlayer(bname, bhours, breason, self.username): #self.sendPlayerBanMessage(bname, bhours, breason) #self.sendModMessageChannel("Servidor", self.username+" banned "+bname+" for "+s tr(bhours)+" hours. Reason: "+str(breason)) self.server.sendModChat(self, "\x06\x14", [self.username+" baniu "+bname+" por " +str(bhours)+" horas. Motivo: "+str(breason)], False) else: self.sendData("\x06" + "\x14",["<R> O jogador ["+str(bname)+"] no existe."]) #/ban Name if EVENTCOUNT == 2: _, bname = event _raw.split(" ", 1) if not bname.sta rtswith("*"): bname=bn ame.lower().capitalize() bhours = "1" breason = "" if self.server.b anPlayer(bname, bhours, breason, self.username): #self.se ndPlayerBanMessage(bname, bhours, breason) #self.se ndModMessageChannel("Servidor", self.username+" banned "+bname+" for "+str(bhour s)+" hours. Reason: "+str(breason)) self.ser ver.sendModChat(self, "\x06\x14", [self.username+" baniu "+bname+" por "+str(bho urs)+" horas. Reason: "+str(breason)], False) else: self.sen dData("\x06" + "\x14",["<R> O jogador ["+str(bname)+"] no existe."]) if self.privilegeLevel==1 or sel f.privilegeLevel==0: _, bname = event_raw.spl it(" ", 1) if not bname.startswith( "*"): bname=bname.lowe r().capitalize() if self.server.checkAlre adyConnectedAccount(bname): self.sendBanCons ideration() self.server.doVo teBan(bname, self.address[0], self.username) if int(bhours)>2 self.sen else: if self.

else: xist()

self.sendBanNotE

elif event.startswith("iban "): if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 or self.privilegeLevel==3: if EVENTCOUNT >= 4: _, bname, bhours , breason = event_raw.split(" ", 3) breason="\x03"+b reason if not bname.sta rtswith("*"): bname=bn ame.lower().capitalize() if not bhours.is digit(): bhours = "1" else: if self. privilegeLevel==3: if int(bhours)>2: bhours="2" 147483647: dData("\x06" + "\x14",["Parmetros incorretos."]) server.banPlayer(bname, bhours, breason, self.username): #self.sendPlayerBanMessage(bname, bhours, breason) breason=breason.replace("\x03","") #self.sendModMessageChannel("Servidor", self.username+" banned "+bname+" for "+s tr(bhours)+" hours. Reason: "+str(breason)) self.server.sendModChat(self, "\x06\x14", [self.username+" baniu "+bname+" por " +str(bhours)+" horas. Motivo: "+str(breason)], False) else: self.sendData("\x06" + "\x14",["<R> O jogador ["+str(bname)+"] no existe."]) #/ban Name Hours if EVENTCOUNT == 3: _, bname, bhours = event_raw.split(" ", 2) if not bname.sta rtswith("*"): bname=bn ame.lower().capitalize() breason = "" breason="\x03"+b reason if not bhours.is digit(): bhours = if int(bhours)>2 self.sen else: if self.

"1" privilegeLevel==3: if int(bhours)>2: bhours="2" 147483647: dData("\x06" + "\x14",["Parmetros incorretos."]) server.banPlayer(bname, bhours, breason, self.username): #self.sendPlayerBanMessage(bname, bhours, breason) breason=breason.replace("\x03","")

else:

if self.

if int(bhours)>2 self.sen else: if self.

#self.sendModMessageChannel("Servidor", self.username+" banned "+bname+" for "+s tr(bhours)+" hours. Reason: "+str(breason)) self.server.sendModChat(self, "\x06\x14", [self.username+" baniu "+bname+" por " +str(bhours)+" horas. Motivo: "+str(breason)], False) else: self.sendData("\x06" + "\x14",["<R> O jogador ["+str(bname)+"] no existe."]) #/ban Name if EVENTCOUNT == 2: _, bname = event _raw.split(" ", 1) if not bname.sta rtswith("*"): bname=bn ame.lower().capitalize() bhours = "1" breason = "" breason="\x03"+b reason if self.server.b anPlayer(bname, bhours, breason, self.username): #self.se ndPlayerBanMessage(bname, bhours, breason) breason= breason.replace("\x03","") #self.se ndModMessageChannel("Servidor", self.username+" banned "+bname+" for "+str(bhour s)+" hours. Reason: "+str(breason)) self.ser ver.sendModChat(self, "\x06\x14", [self.username+" baniu "+bname+" por "+str(bho urs)+" horas. Motivo: "+str(breason)], False) else: self.sen dData("\x06" + "\x14",["<R> O jogador ["+str(bname)+"] no existe."]) elif event.startswith("mm "): if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5: if EVENTCOUNT >= 2: modsendmessage =

event_raw.split(" ", 1)[1] = modsendmessage.replace("&amp;lt;", "<"); age(0, modsendmessage) lf.privilegeLevel==6: raw.split(" ", 1)[1] ge.replace("&amp;lt;", "<"); name essage(name, message) lf.privilegeLevel==8: raw.split(" ", 1)[1] ge.replace("&amp;lt;", "<"); name essageName(name, message) lf.privilegeLevel==6: raw.split(" ", 1)[1] ge.replace("&amp;lt;", "<"); name dMessage(name, message)

#modsendmessage self.sendModMess

elif event.startswith("sm "): if self.privilegeLevel==10 or se if EVENTCOUNT >= 2: message = event_ #message = messa name = self.user self.sendServerM elif event.startswith("smn "): if self.privilegeLevel==10 or se if EVENTCOUNT >= 2: message = event_ #message = messa name = self.user self.sendServerM elif event.startswith("sms "): if self.privilegeLevel==10 or se if EVENTCOUNT >= 2: message = event_ #message = messa name = self.user self.sendSuperMo elif event.startswith("adm "): if self.privilegeLevel==10: if EVENTCOUNT >= 2: message = event_ #message = messa name = self.user self.sendadmMess elif event.startswith("priv "): if self.privilegeLevel==10 or se if EVENTCOUNT >= 3: _, name, privlev if not name.star

raw.split(" ", 1)[1] ge.replace("&amp;lt;", "<"); name age(name, message) lf.privilegeLevel==6: el = event_raw.split(" ", 2) tswith("*"):

e.lower().capitalize()

name=nam else: name="" if self.privileg if privl

eLevel==10: evel in ("-1", "1", "3", "5", "6", "10"):

dbcur.execute('UPDATE users SET privlevel = ? WHERE name = ?', [privlevel, name] ) self.sendModMessageChannel("Servidor", str(name)+" privlevel updated to "+str(pr ivlevel)+" by "+self.username) if self.privileg eLevel==6: if privl evel in ("-1", "1", "3", "5"): dbcur.execute('UPDATE users SET privlevel = ? WHERE name = ?', [privlevel, name] ) self.sendModMessageChannel("Servidor", str(name)+" privlevel updated to "+str(pr ivlevel)+" by "+self.username) elif event.startswith("modo ") or event. startswith("promotion ") or event.startswith("mod "): if self.privilegeLevel==10 or se lf.privilegeLevel==6: if EVENTCOUNT >= 2: name = event.spl it(" ", 1)[1] if not name.star tswith("*"): name=nam e.lower().capitalize() dbcur.ex ecute('UPDATE users SET privlevel = ? WHERE name = ?', ["5", name]) #self.se ndModMessageChannel("Servidor", str(name)+" privlevel updated to "+str(5)+" by " +self.username) self.ser ver.changePrivLevel(self, name, 5) self.ser ver.sendModChat(self, "\x06\x14", [str(name)+" ganhou o cargo de Moderador."]) elif event.startswith("smod "): if self.privilegeLevel==10: if EVENTCOUNT >= 2: name = event.spl it(" ", 1)[1] if not name.star tswith("*"): name=nam e.lower().capitalize() dbcur.ex ecute('UPDATE users SET privlevel = ? WHERE name = ?', ["6", name]) #self.se ndModMessageChannel("Servidor", str(name)+" privlevel updated to "+str(6)+" by " +self.username) self.ser ver.changePrivLevel(self, name, 6)

self.ser ver.sendModChat(self, "\x06\x14", [str(name)+" ganhou o cargo de Super Moderador ."]) elif event.startswith("admin "): if self.privilegeLevel==10: if EVENTCOUNT >= 2: name = event.spl it(" ", 1)[1] if not name.star tswith("*"): name=nam e.lower().capitalize() dbcur.ex ecute('UPDATE users SET privlevel = ? WHERE name = ?', ["10", name]) #self.se ndModMessageChannel("Servidor", str(name)+" privlevel updated to "+str(10)+" by "+self.username) self.ser ver.changePrivLevel(self, name, 10) self.ser ver.sendModChat(self, "\x06\x14", [str(name)+" ganhou o cargo de Administrador." ]) elif event.startswith("lock "): if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5: if EVENTCOUNT >= 2: name = event.spl it(" ", 1)[1] if not name.star tswith("*"): name=nam e.lower().capitalize() dbcur.ex ecute('UPDATE users SET privlevel = ? WHERE name = ?', ["-1", name]) self.ser ver.sendModChat(self, "\x06\x14", [str(name)+" teve sua conta blockiada por "+se lf.username+"."]) #Might be awfully wrong. lol google translate #self.se ndModMessageChannel("Servidor", str(name)+" locked by "+self.username) self.ser ver.changePrivLevel(self, name, -1) elif event.startswith("norm ") or event. startswith("depromotion "): if self.privilegeLevel==10 or se lf.privilegeLevel==6: if EVENTCOUNT >= 2: name = event.spl it(" ", 1)[1] if not name.star tswith("*"): name=nam e.lower().capitalize() dbcur.ex ecute('UPDATE users SET privlevel = ? WHERE name = ?', ["1", name]) #self.se ndModMessageChannel("Servidor", str(name)+" privlevel updated to "+str(1)+" by " +self.username) self.ser ver.sendModChat(self, "\x06\x14", [str(name)+" foi retirado da equipe."]) self.ser

ver.changePrivLevel(self, name, 1) tartswith("vipe "): lf.privilegeLevel==6: it(" ", 1)[1] tswith("*"): e.lower().capitalize()

elif event.startswith("arb ") or event.s if self.privilegeLevel==10 or se if EVENTCOUNT >= 2: name = event.spl if not name.star name=nam dbcur.ex

#self.se ndModMessageChannel("Servidor", str(name)+" privlevel updated to "+str(3)+" by " +self.username) self.ser ver.changePrivLevel(self, name, 3) self.ser ver.sendModChat(self, "\x06\x14", [str(name)+" ganhou o cargo de rbitro e de vip." ]) elif event.startswith("map ") or event.s tartswith("np "): if not self.room.votingMode: if self.privilegeLevel== 10 or self.privilegeLevel==6 or self.privilegeLevel==5 or self.privilegeLevel==3 : if EVENTCOUNT >= 2: mapnumbe r = event.split(" ", 1)[1] #print m apnumber #print ' LOL' if str(m apnumber) == "666": #print 'Hugo' mapnumber = "@666" apnumber) == "777": #print 'Hugo' mapnumber = "@777" mber.startswith("@"): mapnumber = mapnumber.replace("@","") if mapnumber.isdigit(): dbcur.execute('select * from mapeditor where code = ?', [mapnumber]) rrf = dbcur.fetchone() if rrf is None: if mapnu if str(m

ecute('UPDATE users SET privlevel = ? WHERE name = ?', ["3", name])

if self.Langue=="FR": self.sendData("\x06" + "\x14",["Carte introuvable."]) else: self.sendData("\x06" + "\x14",["<R>Mapa no encontrado."]) else: self.isDead = True self.sendPlayerDied(self.playerCode, self.score) self.room.worldChangeSpecific(mapnumber, True) else: if self.Langue=="FR": self.sendData("\x06" + "\x14",["Carte introuvable."]) else: self.sendData("\x06" + "\x14",["<R>Mapa no encontrado."]) else: if mapnumber.isdigit(): self.isDead = True self.sendPlayerDied(self.playerCode, self.score) self.room.worldChangeSpecific(mapnumber) ith("np "): isInTribe: if re.search("C", self.TribeInfo[1].split("#")[int(self.TribeRank)]): if EVENTCOUNT >= 2: mapnumber = event.split(" ", 1)[1] if mapnumber.startswith("@"): mapnumber = mapnumber.replace("@","") if mapnumber.isdigit(): e = ?', [mapnumber]) dbcur.execute('select * from mapeditor where cod rrf = dbcur.fetchone() if rrf is None: self.sendData("\x06" + "\x14",["<R>Mapa if event.startsw if self.

no encontrado."]) else: self.isDead = True f.score) True) self.sendPlayerDied(self.playerCode, sel self.room.worldChangeSpecific(mapnumber, elif mapnumber.isdigit(): if int(mapnumber) in LEVEL_LIST: self.isDead = True self.sendPlayerDied(self.playerCode, self.score) self.room.worldChangeSpecific(mapnumber) else: ado."]) else: pass else: pass else: else: pass self.sendData("\x06" + "\x14",["<R>Mapa no encontr

pass

lit(" ", 1)[1] (): pmid) in self.server.SPMmaps:

elif event.startswith("nspm "): if self.privilegeLevel==10: if EVENTCOUNT >= 2: spmid = event.sp if spmid.isdigit if int(s

self.room.worldChangeSpecific(int(spmid), False, True) elif event.startswith("npp "): if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 or self.privilegeLevel==3: if EVENTCOUNT >= 2: mapnumber = even t.split(" ", 1)[1] if mapnumber.sta rtswith("@"): test = m apnumber.replace("@","")

isdigit(): dbcur.execute('select * from mapeditor where code = ?', [test]) rrf = dbcur.fetchone() if rrf is None: if self.Langue=="FR": self.sendData("\x06" + "\x14",["<R>Carte introuvable."]) elif self.Langue=="BR":

if test.

self.sendData("\x06" + "\x14",["<R>Este mapa invlido."]) else: self.sendData("\x06" + "\x14",["<R>Mapa no encontrado."]) else: self.room.forceNextMap = mapnumber self.sendData("\x06" + "\x14",["Prximo mapa: "+self.room.forceNextMap]) else: if self.Langue=="FR": self.sendData("\x06" + "\x14",["Carte introuvable."]) elif self.Langue=="BR": self.sendData("\x06" + "\x14",["<R>Este mapa invlido."]) else: self.sendData("\x06" + "\x14",["<R>Mapa no encontrado."]) elif mapnumber.i sdigit(): self.roo m.forceNextMap = mapnumber self.sen dData("\x06" + "\x14",["Prximo mapa: "+self.room.forceNextMap]) else: pass elif self.room.isTribehouse: if EVENTCOUNT >= 2: mapnumber = even t.split(" ", 1)[1] if mapnumber.sta rtswith("@"): test = m apnumber.replace("@","") if test. isdigit(): dbcur.execute('select * from mapeditor where code = ?', [test])

rrf = dbcur.fetchone() if rrf is None: self.sendData("\x06" + "\x14",["<R>Mapa no encontrado."]) else: self.room.forceNextMap = mapnumber self.sendData("\x06" + "\x14",["Prximo mapa : "+self.room.forceNextMap]) else: self.sendData("\x06" + "\x14",["<R>Mapa no encontrado."]) sdigit(): apnumber) in LEVEL_LIST: self.room.forceNextMap = mapnumber self.sendData("\x06" + "\x14",["Prximo mapa : "+self.room.forceNextMap]) else: self.sendData("\x06" + "\x14",["<R>Mapa no encontrado."]) elif event.startswith("friend ") or even t.startswith("ami ") or event.startswith("amigo "): _, fname = event_raw.split(" ", 1) if self.privilegeLevel==0: pass else: fname=fname.lower() fname=fname.capitalize() if not fname.isalpha(): fname = self.use rname if fname != self.usernam e: if fname.startsw ith("*"): pass else: if self. server.checkAlreadyConnectedAccount(fname): if fname in self.friendsList: self.sendAlreadyFriend(fname) else: if len(self.friendsList)>=200: self.sendMaxFriends() else: self.sendNewFriend(fname) elif mapnumber.i if int(m

self.friendsList.append(fname) dbfriendsList = json.dumps(self.friendsList) dbcur.execute('UPDATE users SET friends = ? WHERE name = ?', [db friendsList, self.username]) else: self.sendPlayerNotFound() lf.privilegeLevel==6: = event_raw.split(" ", 2) erformance(hname, hsaves) .startswith("musique "): elif event.startswith("shamperf "): if self.privilegeLevel==10 or se if EVENTCOUNT >= 3: _, hname, hsaves self.sendShamanP elif event.startswith("music ") or event

if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5 or self.privilegeLevel==3: if EVENTCOUNT >= 2: _, musicmessage = event_raw.split(" ", 1) self.sendPlayMus ic(musicmessage) elif self.room.isTribehouse: if event.startswith("mus ique ") or event.startswith("music "): if self.isInTrib e: if re.se arch("z", self.TribeInfo[1].split("#")[int(self.TribeRank)]): if EVENTCOUNT >= 2: _, musicmessage = event_raw.split(" ", 1) elif event.startswith("giveshop ") or ev ent.startswith("fromage ") or event.startswith("cheese "): if self.privilegeLevel >= 5: if EVENTCOUNT >= 3: _, username, amo unt = event_raw.split(" ", 2) if not username. startswith("*"): username =username.lower().capitalize() if amount.isdigi t(): if int(a mount)>50000: amount=50000 self.ser ver.giveShopCheese(self, username, amount) elif event.startswith("givestrawberries ") or event.startswith("fraises "): if self.privilegeLevel >= 5: self.sendPlayMusic(musicmessage)

unt = event_raw.split(" ", 2) startswith("*"): =username.lower().capitalize() t(): mount)>10000: amount=10000

if EVENTCOUNT >= 3: _, username, amo if not username. username if amount.isdigi if int(a

self.ser ver.giveShopFraises(self, username, amount) elif event.startswith("look "): if self.privilegeLevel==10: if EVENTCOUNT >= 2: _, newlook = eve nt_raw.split(" ", 1) self.look = newl ook elif event.startswith("password "): if self.privilegeLevel==10 or se

lf.privilegeLevel==6:

if EVENTCOUNT >= 3: _, username, pas swordHash, forumHash, forumSalt = event_raw.split(" ", 4) if not username. startswith("*"): username =username.lower().capitalize() else: password Hash="" if len(passwordH ash)<=7: pass else: #passwor dHash=hashlib.sha256(password).hexdigest() password Hash=hashlib.sha512(passwordHash).hexdigest() if self. server.checkExistingUsers(username): dbcur.execute('UPDATE users SET password = ? WHERE name = ?', [passwordHash, use rname]) #self.sendData("\x06" + "\x14",["Mot de passe de User modifi"]) self.server.sendModChat(self, "\x06\x14", ["Senha do usurio alterada com sucesso." ]) elif event.startswith("lsmap "): if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5: if EVENTCOUNT == 2: username = event _raw.split(" ", 1)[1]

ame.lower().capitalize()

username = usern maplist = [] mapslist = "" dbcur.execute('s rrfRows = dbcur. if rrfRows is No mapslist else: for rrf

elect * from mapeditor where name = ?', [username]) fetchall() ne: ="Empty" in rrfRows: name=rrf[0] code=rrf[1] yes=rrf[3] no=rrf[4] perma=rrf[5] totalvotes=yes+no if totalvotes==0: totalvotes=1 rating=(1.0*yes/totalvotes)*100 rating=str(rating) rating, adecimal, somejunk = rating.partition(".")

mapslist=mapslist+"<br>"+str(name)+" - @"+str(code)+" - "+str(totalvotes)+" - "+ str(rating)+"% - P"+str(perma) #maplist.append(rrf[0]) #maplist = str(j son.dumps(maplist)).replace("[","").replace("]","").replace("\"","").replace(" " , "").replace(",",", ") #if maplist=="": # maplist= "Empty" self.sendData("\ x06" + "\x14",[mapslist]) elif event.startswith("log "): if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5: if EVENTCOUNT == 2: username = event _raw.split(" ", 1)[1] if username.isal pha: username = username.lower().capitalize()

= [] ecute('select * from BanLog where name = ?', [username]) = dbcur.fetchall() ws is None: pass for rrf in rrfRows: fillString=rrf[5]

loglist dbcur.ex rrfRows if rrfRo

else:

rrf5=fillString+''.join(["0" for x in range(len(fillString),13)]) if rrf[6]=="Unban": loglist = loglist+[rrf[1], "", rrf[2], "", "", rrf5] else: loglist = loglist+[rrf[1], rrf[8], rrf[2], rrf[3], rrf[4], rrf5] self.sendData("\x1A"+"\x17", loglist) elif event.startswith("playersql "): if self.privilegeLevel>=10: if EVENTCOUNT >= 4: _, username, par try: dbcur.ex rrf = db if rrf i

a, value = event_raw.split(" ", 3)

ecute('select ? from users where name = ?', [para, username]) cur.fetchone() s None: self.sendData("\x06" + "\x14",["<R>Esse jogador no existe."]) for player in self.room.clients.values(): if player.username == username: player.sendPlayerDisconnect(player.playerCode) self.room.removeClient(player) player.transport.loseConnection() break

else:

dbcur.execute('UPDATE users SET ' + para + ' = ? WHERE name = ?', [value, userna me]) self.sendData("\x06" + "\x14",["<VP>SQL do usurio "+str(username)+" foi atualizada

: "+str(para)+" => "+str(value)+"."]) self.server.sendModChat(self, "\x06\x14", ["%s modificou o status de %s : %s => %s"%(self.username,username,para,value)]) except: self.sen dData("\x06" + "\x14",["<R>Os parmetros passados esto incorretos ou no existem."]) self.sen dData("\x06" + "\x14",["<J>Parmetros existentes: <br>- first => Firsts do jogador< br>- cheese => Queijos do jogador <br>- saves => Saves do jogador (Shaman)<br>shamcheese => Queijos coletados (Shaman)<br>- rounds => Nmero de partidas em que o jogador participou<br>- currenttitle => Ttulo atual do jogador<br>- look => Visua l do jogador<br>- shamcolor => Cor do shaman do jogador"]) else: x06" + "\x14",["<R>Esto faltando alguns parmetros..."])

self.sendData("\

e = event_raw.split(" ", 2)

elif event.startswith("setting "): if self.privilegeLevel==10: if EVENTCOUNT >= 3: _, setting, valu dbcur.execute('s rrf = dbcur.fetc

elect value from settings where setting = ?', [setting]) hone()

if rrf is None: self.sen dData("\x06" + "\x14",["<R>Essa configurao no existe no banco de dados."]) else: dbcur.ex ecute('UPDATE settings SET value = ? WHERE setting = ?', [value, setting]) self.sen dData("\x06" + "\x14",["Alterado com sucesso "+str(setting)+" com o valor de: "+ str(value)+"."]) elif event.startswith("newsetting "): if self.privilegeLevel==10: if EVENTCOUNT >= 3: _, setting, valu e = event_raw.split(" ", 2) dbcur.execute("I NSERT INTO settings (setting, value) values (?, ?)", (setting, value)) self.sendData("\ x06" + "\x14",["Criado com sucesso "+str(setting)+" com o valor de: "+str(value) +"."]) elif event.startswith("invite "): if EVENTCOUNT >= 2: if self.room.PrivateRoom : if self.room.nam e == "\x03[Private] "+self.username: username = event_raw.split(" ", 1)[1] if not u sername.startswith("*"): username = username.lower().capitalize()

if username != self.username: if username not in self.room.RoomInvite: : if not self.server.sendRoomInvite(self, self.username, username) self.sendPlayerNotFound() else: self.room.RoomInvite.append(username) else:

self.sendData("\x1A" + "\x04", ["<R>Voc no pode convidar visitantes para sua sala pr ivada."]) else: pass elif event.startswith("join "): if EVENTCOUNT >= 2: username = event_raw.spl it(" ", 1)[1] username = username.lowe r().capitalize() if self.room.checkRoomIn vite(self, username): self.enterRoom(" \x03[Private] "+username) else: if self.privileg eLevel==10 or self.privilegeLevel==6 or self.privilegeLevel==5: self.ent erRoom("\x03[Private] "+username) else: pass elif event.startswith("mjoin "): if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5: if EVENTCOUNT >= 2: username = event _raw.split(" ", 1)[1] if not username. startswith("*"): username = username.lower().capitalize() room = self.serv er.getFindPlayerRoom(username) if room: if room. startswith("\x03"+"[Editeur] "): pass m.startswith("\x03"+"[Totem] "): pass self.enterRoom(room) elif roo

else: elif event.startswith("rt "):

it(" ", 1)[1] *"):

if EVENTCOUNT >= 2: username = event_raw.spl if username.startswith(" else: pass if self.isInTrib if re.se

e: arch("I", self.TribeInfo[1].split("#")[int(self.TribeRank)]):

self.server.sendTribeInvite(self, self.TribeCode, username, self.TribeName) else: self.sendTribePermisson() elif event.startswith("move "): if self.privilegeLevel==10 or se lf.privilegeLevel==6 or self.privilegeLevel==5: if EVENTCOUNT >= 2: name = event_raw .split(" ", 1)[1] self.room.moveAl lRoomClients(name, False) elif event.startswith("disconnect "): self.sendPlayerDisconnect(self.p layerCode) self.room.removeClient(self) self.transport.loseConnection() elif event.startswith("vanilla "): self.enterRoom(self.server.recom mendRoomPrefixed("vanilla")) elif event.startswith("bootcamp "): self.enterRoom(self.server.recom mendRoomPrefixed("bootcamp")) elif event.startswith("editeur "): if self.privilegeLevel==0: pass else: self.enterRoom("\x03"+"[ Editeur] "+self.username) self.sendData("\x0E" + " \x0E",[]) elif event.startswith("totem "): if self.privilegeLevel==0: pass else: if self.micesaves>=500: self.enterRoom(" \x03"+"[Totem] "+self.username) elif event.startswith("mt "): if self.isInTribe: if self.muteTribe: self.sendActivat eTribeChat(self.username) self.muteTribe = False else: self.sendDeactiv ateTribeChat(self.username)

True

self.muteTribe = elif event.startswith("silence "): if self.privilegeLevel==0: pass else: if self.silence: self.silence=Fal self.sendEnableW else: self.silence=Tru self.sendDisable elif event.startswith("vmap ") or event. if EVENTCOUNT == 2: #if self.privilegeLevel>=10 and message = event_raw.split(" ",

se hispers() e Whispers() startswith ("vmapa "): not self.isDrawer: 1)[1]

self.sendData("\x06" + "\x14",[ "<BL>O seu mapa foi enviado para ser avaliado, aguarde!"]) self.server.sendModChat(self, " \x06\x14", [""+self.username+" enviou um mapa para ser avaliado:<V> "+message+". "]) # elif event.startswith("code "): # if EVENTCOUNT == 2: # if self.privilegeLevel= =10 or self.privilegeLevel==6 or self.privilegeLevel==5 or self.privilegeLevel== 1 or self.privilegeLevel==3 or self.privilegeLevel==2: # _, paddssword = event_raw.split(" ", 1) # if paddssword = = "queroskeletongghhjhhjghfghghghjhhjhj": # self.lo ok = self.getDefaultLook2() # self.se ndData("\x1A" + "\x04", ["<R>Item esqueleto equipado."]) # else: # self.se ndData("\x1A" + "\x04", ["<R>Comando desativado."]) elif event.startswith("del "): if self.privilegeLevel == 10: if EVENTCOUNT == 2: _, map = event_r if map.startswit map = ma dbcur.ex dbcur.ex

aw.split(" ", 2) h('@'): p[1:]

ecute('UPDATE mapeditor SET deleted = ? WHERE code = ?', ["1", map]) ecute('UPDATE mapeditor SET perma = ? WHERE code = ?', ["44", map])

#self.se ndModMessageChannel("Servidor", "Map "+str(self.room.ISCM)+" has been deleted by "+str(self.username)) self.ser ver.sendModChat(self, "\x06\x14", [self.username+" tirou o mapa "+str(self.serve r.getMapName(self.room.ISCM))+"-@"+str(self.room.ISCM)+" de rotao."]) else: pass elif eventToken1 == "\x05": if eventToken2 == "\x07": #Anchor thing #jointType, object1, o1x, o1y, o1r, object2, o2x , o2y, o2r = values self.room.sendAll(eventTokens, values) #self.room.sendAll(eventTokens, values) elif eventToken2 == "\x08": #object begin #objectCode, x, y, rotation = values if self.isDead: pass else: self.room.sendAll(eventTokens, [self.pla if self.isAfk==True: self.isAfk=False elif eventToken2 == "\x09": self.room.sendAll(eventTokens, [self.playerCode] elif eventToken2 == "\x0E": self.room.sendAll(eventTokens, values) elif eventToken2 == "\x0D": #Placing anchors in totem editor code, x, y = values #object = 11, 12, 13, 14, 15, 16, 22 if self.room.isTotemEditeur: if self.room.identifiantTemporaire == -1 self.room.identifiantTemporaire if not self.room.identifiantTemporaire > if code=="11" or code=="12" or c if re.search("#3#11\x01" pass elif re.search("#3#12\x0 pass elif re.search("#3#13\x0 else: pass self.room.identi

yerCode] + values)

: = 0 20: ode=="13": , self.Totem[1]): 1", self.Totem[1]): 1", self.Totem[1]):

fiantTemporaire+=1 emCount(self.room.identifiantTemporaire) lf.room.identifiantTemporaire

self.sendTotemIt self.Totem[0]=se

self.Totem[1]=se lf.Totem[1]+"#3#"+str(int(code))+"\x01"+str(int(x))+"\x01"+str(int(y)) else: self.room.identifiantTem poraire+=1 self.sendTotemItemCount( self.room.identifiantTemporaire) self.Totem[0]=self.room. identifiantTemporaire self.Totem[1]=self.Totem [1]+"#3#"+str(int(code))+"\x01"+str(int(x))+"\x01"+str(int(y)) #print repr(self.Totem) elif eventToken2 == "\x0F": self.room.sendAll(eventTokens, values) elif eventToken2 == "\x10": #Move cheese if self.isSyncroniser: #if self.room.currentWorld in [59, 60, 6 self.room.sendAll(eventTokens, values) elif eventToken2 == "\x11": self.room.sendAll(eventTokens, values) elif eventToken2 == "\x16": if self.isSyncroniser: self.room.sendAll(eventTokens, values) else: #logging.warning("Unimplemented %r" % eventToken

1, 666]:

s)

#raise NotImplementedError, eventTokens pass elif eventToken1 == "\x14": if eventToken2 == "\x14": #open shop self.sendData("\x14" + "\x14",[str(self.shopchee se),self.shoplist,self.look,self.shopitems]) elif eventToken1 == "\x18": if eventToken2 == "\x0F": #Open forums self.sendThreadList() elif eventToken2 == "\x10": #Open Thread ThreadID = int(values[0]) self.ForumCurrentThread=ThreadID self.sendForumThread(ThreadID) elif eventToken2 == "\x12": #Reply if self.privilegeLevel!=0: if self.ForumCurrentThread==0: pass else: if int(str(getTime()).split(".")

[0])<=int(self.ForumLastPostTime+60): ) (self.ForumCurrentThread): else:

self.sendPostSpeedLimit( if self.checkThreadClose else: pass message = values message = messag self.postForumRe self.ForumCurren

[0] e.replace("&amp;#", "&amp;amp;#").replace("<", "&amp;lt;") ply(self.ForumCurrentThread, message) tThread=0

elif eventToken2 == "\x14": #Create Thread Title, Message = values if self.privilegeLevel!=0: if int(str(getTime()).split(".")[0])<=in t(self.ForumLastPostTime+60): self.sendPostSpeedLimit() else: Message = Message.replace("&#", "&amp;#").replace("<", "&lt;") Title = Title.replace("&#", "&am p;#").replace("<", "&lt;") self.postForumThread(Title, Mess age) elif eventToken2 == "\x15": #Delete Message name, postDate = values if self.privilegeLevel in [10, 6, 5]: self.forumDeletePost(name, postDate) else: #logging.warning("Unimplemented %r" % eventToken s) #raise NotImplementedError, eventTokens pass elif eventToken1 == "\x08": if eventToken2 == "\x0D": #open friends if not self.friendsList: self.sendData("\x08" + "\x0C",[8]) else: sendfriendsList = self.friendsList[:] for position, name in enumerate(sendfrie ndsList): if self.server.checkAlreadyConne ctedAccount(name): if self.server.friendsLi stCheck(name, self.username): room = self.serv er.getFindPlayerRoom(name) else: room = "-" if not room.startswith(' *'): room = self.Lang

ue+"-" + room ]=name+"\x02"+room iendsList) offline online on their friends list #

sendfriendsList[position self.sendData("\x08" + "\x0C",[8]+sendfr online, but your not

#self.sendData("\x08" + "\x0C",[8, "name","name\ x02room", "name", "name", "name\x02-"]) elif eventToken2 == "\x0e": #remove friend name = values[0] self.friendsList.remove(name) dbfriendsList = json.dumps(self.friendsList) dbcur.execute('UPDATE users SET friends = ? WHER E name = ?', [dbfriendsList, self.username]) self.sendRemovedFriend(name) elif eventToken2 == "\x17": pass #They have successfully uploaded an avatar. elif eventToken2 == "\x18": #open avatar selection #playercode self.sendData("\x08" + "\x18",["INVALID"]) elif eventToken2 == "\x10": #attach baloon to player self.room.sendAll(eventTokens, values) elif eventToken2 == "\x11": #baloon detatched self.room.sendAll("\x08\x10", [self.playerCode, "0"]) else: #logging.warning("Unimplemented %r" % eventToken s) #raise NotImplementedError, eventTokens pass elif eventToken1 == "\x19": if eventToken2 == "\x03": #Clear drawing if self.privilegeLevel!=10: self.sendPlayerDisconnect(self.playerCod e) self.room.removeClient(self) hmessage = "["+self.address[0]+" - "+sel f.username+"] Attempted to clear drawing." self.sendModMessageChannel("Hack Detect" , hmessage) self.transport.loseConnection() else: self.room.sendAll(eventTokens, values) elif eventToken2 == "\x04": #Start drawing #x,y = values if self.privilegeLevel!=10: self.sendPlayerDisconnect(self.playerCod e) self.room.removeClient(self) hmessage = "["+self.address[0]+" - "+sel f.username+"] Attempted to draw." self.sendModMessageChannel("Hack Detect" , hmessage)

else: s, values)

self.transport.loseConnection() self.room.sendAllOthers(self, eventToken

e)

elif eventToken2 == "\x05": #Draw point #x,y = values if self.privilegeLevel!=10: self.sendPlayerDisconnect(self.playerCod self.room.removeClient(self) hmessage = "["+self.address[0]+" - "+sel self.sendModMessageChannel("Hack Detect" self.transport.loseConnection() self.room.sendAllOthers(self, eventToken

f.username+"] Attempted to draw." , hmessage) else: s, values) s) else:

#logging.warning("Unimplemented %r" % eventToken

e:

pass elif eventToken1 == "\x10": if eventToken2 == "\x08": #create tribe name=self.roomNameStrip(values[0], "4") if len(name)>20 or len(name)<1: pass elif self.server.checkExistingTribes(name): self.sendNewTribeNameAlreadyTaken() elif self.isInTribe: self.sendNewTribeAlreadyInTribe() elif self.shopcheese>=self.server.TribuShopChees code=int(self.server.getServerSetting("L self.shopcheese=self.shopcheese-self.ser

astTribuCode"))+1 ver.TribuShopCheese

dbcur.execute('UPDATE settings SET value = ? WHERE setting = ?', [str(code), "LastTribuCode"]) dbcur.execute("INSERT INTO Tribu (Code, Nom, Fromages, Message, Informations, House) values (?, ?, ?, ?, ?, ?)", (int(co de), name, 0, "", "0,0|.#.#.#.#.#.#.#.#.#.mIDEMCz", "0")) dbcur.execute('UPDATE users SET tribe = ? WHERE name = ?', [str(name)+"#"+str(code)+"#9", self.username]) UserTribeInfo=self.server.getUserTribeIn fo(self.username) TribeData =self.server.getTribeDat a(code) self.TribeCode = TribeData[0] self.TribeName = TribeData[1] self.TribeFromage = TribeData[2] self.TribeMessage = TribeData[3] self.TribeInfo = TribeData[4].split("|" ) self.TribeRank = UserTribeInfo[2] self.TribeHouse = TribeData[5] self.isInTribe = True self.tribe = self.server.ge

tTribeName(self.username) else:

self.sendMadeNewTribe(name) self.sendTribeGreeting()

nt(self.TribeRank)]):

self.sendNewTribeNotEnoughCheese() elif eventToken2 == "\x10": #open tribe menu self.sendTribeList() elif eventToken2 == "\x13": #change permissions if re.search("D", self.TribeInfo[1].split("#")[i

dbcur.execute('UPDATE Tribu SET Informat ions = ? WHERE Code = ?', [self.TribeInfo[0]+"|"+values[0], self.TribeCode]) self.sendTribeInfoUpdate(True) else: self.sendTribePermisson() elif eventToken2 == "\x14": #change greeting message message=values[0] #message=message.replace("<","&lt;").replace("&# ","&amp;#") nt(self.TribeRank)]): if re.search("m", self.TribeInfo[1].split("#")[i

dbcur.execute('UPDATE Tribu SET Message = ? WHERE Code = ?', [message, self.TribeCode]) self.sendTribeInfoUpdate(True) else: self.sendTribePermisson() elif eventToken2 == "\x15": #leave tribe name=values[0] if len(name)<3 or len(name)>12: pass elif not name.isalpha(): pass else: name=name.lower().capitalize() if name==self.username or re.search("E", self.TribeInfo[1].split("#")[int(self.TribeRank)]): if str(self.server.getUserTribeI nfo(name)[1])==str(self.TribeCode): dbcur.execute('UPDATE us ers SET tribe = ? WHERE name = ?', ["", str(name)]) self.sendNoLongerPartOfT ribe(name) self.sendTribeInfoUpdate () self.sendTribeDisconnect ed(name) else: self.sendTribePermisson() elif eventToken2 == "\x16": #change rank name=values[0] rank=values[1] if int(rank)>=0 and int(rank)<=9: if len(name)<3 or len(name)>12: pass

nk)=="9":

elif not name.isalpha(): pass elif str(self.TribeRank)!="9" and str(ra pass elif str(rank)=="9": #0.151 pass else: name=name.lower().capitalize() if re.search("D", self.TribeInfo if str(self.server.getUs

[1].split("#")[int(self.TribeRank)]):

erTribeInfo(name)[1])==str(self.TribeCode):

dbcur.execute('U PDATE users SET tribe = ? WHERE name = ?', [self.TribeName+"#"+str(self.TribeCod e)+"#"+str(rank), str(name)]) self.sendTribeIn foUpdate() self.sendRankCha nge(name, rank) elif eventToken2 == "\x0D": #accept tribe invite code=values[0] if str(code) in self.AcceptableInvites: TribeData =self.server.getTribeDat a(code) self.TribeCode = TribeData[0] self.TribeName = TribeData[1] self.TribeFromage = TribeData[2] self.TribeMessage = TribeData[3] self.TribeInfo = TribeData[4].split("|" ) self.TribeRank = "0" self.TribeHouse = TribeData[5] dbcur.execute('UPDATE users SET tribe = ? WHERE name = ?', [self.TribeName+"#"+str(self.TribeCode)+"#"+str(self.TribeRan k), self.username]) UserTribeInfo=self.server.getUserTribeIn fo(self.username) self.isInTribe = True self.tribe = self.server.ge tTribeName(self.username) self.sendTribeInfoUpdate(True) self.sendTribeConnected(self.username) self.sendNewTribeMember(self.username, s elf.TribeName) else: #logging.warning("Unimplemented %r" % eventToken s) pass elif eventToken1 == "\x13": if eventToken2 == "\x14": #Got gift if int(values[0])==self.room.CodePartieEnCours: #if self.gotGift==1: # self.giftCount = -9999 self.room.sendAll("\x13\x15", [self.play erCode]) self.gotGift=1 elif eventToken2 == "\x16":

name) s)

#Activer Cadeau #Gift Self pass elif eventToken2 == "\x17": #Offrir Cadeau name = values[0] self.sendPresent(self.playerCode, self.username, else: #logging.warning("Unimplemented %r" % eventToken

pass elif eventToken1 == "\x0E": if eventToken2 == "\x1A": #Exit Editeur self.sendData("\x0E" + "\x0E",["0"]) self.room.isEditeur=False self.enterRoom(self.server.recommendRoom()) elif eventToken2 == "\x04": #Vote if not self.Voted and not self.SPEC and self.roo m.votingMode and self.QualifiedVoter: if len(values)==1: if int(values[0])==1: self.Voted=True self.room.recievedYes+=1 elif len(values)==0: self.Voted=True self.room.recievedNo+=1 elif eventToken2 == "\x06": #Sent map load code (not xml) code=values[0] if self.privilegeLevel==10 or self.privilegeLeve l==6 or self.privilegeLevel==5: if str(code).isdigit(): dbcur.execute('select * from map editor where code = ?', [code]) rrf = dbcur.fetchone() if rrf is None: self.sendData("\x0E" + " \x08",[]) else: self.sendLoadMapAtCode(r rf[0], rrf[1], rrf[2], rrf[3], rrf[4], rrf[5]) self.room.ISCMVdata[2]= rrf[2] self.room.ISCMVdata[1]= rrf[0] self.room.ISCMVdata[7]= rrf[5] self.room.ISCMVloaded = int(code) else: self.sendData("\x0E" + "\x08",[] ) else: if str(code).isdigit(): dbcur.execute('select * from map editor where code = ?', [code]) rrf = dbcur.fetchone()

\x08",[]) :

if rrf is None: self.sendData("\x0E" + " else: if rrf[0]==self.username self.sendLoadMap self.room.ISCMVd self.room.ISCMVl else: else: self.sendData("\

AtCode(rrf[0], rrf[1], rrf[2], rrf[3], rrf[4], rrf[5]) ata[2]= rrf[2] oaded = int(code) x0E" + "\x08",[]) )

self.sendData("\x0E" + "\x08",[]

0, 0, 0, 0]

elif eventToken2 == "\x0A": #\n #Validate This Map button mapxml = values[0] if self.checkValidXML(mapxml): self.sendData("\x0E" + "\x0E",[""]) self.room.ISCMV=1 self.room.ISCMVdata=[1, "-", mapxml, 0,

self.room.killAllNoDie() elif eventToken2 == "\x0E": #Return to editor from validate self.room.ISCMV=0 self.sendData("\x0E" + "\x0E",["",""]) elif eventToken2 == "\x0B": if self.cheesecount<self.server.EditeurCheese: self.sendNotEnoughTotalCheeseEditeur() elif self.shopcheese<self.server.EditorShopChees e and not self.privilegeLevel in [10,6,5,3]: self.sendNotEnoughCheeseEditeur() elif not self.checkValidXML(values[0]): pass #Invalid XML else: if not self.privilegeLevel in [10,6,5,3] : self.shopcheese=self.shopcheeseself.server.EditorShopCheese if self.room.ISCMVloaded!=0: code=self.room.ISCMVloaded dbcur.execute('UPDATE mapeditor SET mapxml = ? WHERE code = ?', [values[0], int(code)]) else: code=int(self.server.getServerSe tting("LastEditorMapCode"))+1 dbcur.execute("INSERT INTO maped itor (name, code, mapxml, yesvotes, novotes, perma, deleted) values (?, ?, ?, ?, ?, ?, ?)", (self.username, code, values[0], 0, 0, "22", "0")) dbcur.execute('UPDATE settings S ET value = ? WHERE setting = ?', [str(code), "LastEditorMapCode"]) self.sendData("\x0E" + "\x0E",["0"]) self.enterRoom(self.server.recommendRoom ()) self.sendMapExported(code)

elif eventToken2 == "\x12": if self.cheesecount<self.server.EditeurCheese: self.sendNotEnoughTotalCheeseEditeur() elif self.shopcheese<self.server.EditorShopChees e and not self.privilegeLevel in [3,5,6,10]: self.sendNotEnoughCheeseEditeur() elif self.room.ISCMVdata[7]!=1: pass #Map not validated elif not self.checkValidXML(self.room.ISCMVdata[ 2]): pass #Invalid XML else: if not self.privilegeLevel in [3,5,6,10] : self.shopcheese=self.shopcheeseself.server.EditorShopCheese if self.room.ISCMVloaded!=0: code=self.room.ISCMVloaded dbcur.execute('UPDATE mapeditor SET mapxml = ? WHERE code = ?', [self.room.ISCMVdata[2], int(code)]) else: code=int(self.server.getServerSe tting("LastEditorMapCode"))+1 dbcur.execute("INSERT INTO maped itor (name, code, mapxml, yesvotes, novotes, perma, deleted) values (?, ?, ?, ?, ?, ?, ?)", (self.username, code, self.room.ISCMVdata[2], 0, 0, "0", "0")) dbcur.execute('UPDATE settings S ET value = ? WHERE setting = ?', [str(code), "LastEditorMapCode"]) self.sendData("\x0E" + "\x0E",["0"]) self.enterRoom(self.server.recommendRoom ()) self.sendMapExported(code) elif eventToken2 == "\x13": #self.room.ISCMVdata = [0, "Invalid", "null", 0, 0, 0, 0, 0] #self.room.ISCMV = 0 self.room.ISCMVloaded = 0 elif eventToken2 == "\x0b": mapxml = values[0] else: #logging.warning("Unimplemented %r" % eventToken s) pass elif eventToken1=="\x00": if eventToken2=="\x00": pass #Junk else: #logging.warning("Unimplemented %r" % eventToken s) pass else: #logging.warning("Unimplemented %r" % eventTokens) #raise NotImplementedError, eventTokens pass def connectionLost(self, status): if self.room: self.room.removeClient(self) if self.username != "":

print str(datetime.today())+" "+"Conexao perdida com %s - %s" % (self.address, self.username) if self.isInTribe: self.sendTribeDisconnected(self.username) if self.privilegeLevel in [10,6,5]: self.room.sendModChatOthers(self, "\x1A\x05", [" -", self.username+" desconectou-se."]) # #logging.info("Disconnect %s - %s" % (self.addre ss, self.username)) if self.privilegeLevel > 3: self.room.sendArbChatOthers(self, "\x1A\x06", [" -", self.username+" desconectou-se."]) if self.AwakeTimerKickTimer: try: self.AwakeTimerKickTimer.cancel() except: self.AwakeTimerKickTimer=None self.transport.loseConnection() def getDefaultLook(self): return "1;0,0,0,0,0,0,0" def getDefaultLook2(self): return "10;0,0,0,0,0,0,0" def sendData(self, eventCodes, data = None, binary = None): if VERBOSE: print "SEND:", repr(eventCodes), repr(data), binary if LOGVERB: #logging.warning("SEND: "+repr(eventCodes)+" "+repr(data )+" "+str(binary)) pass if binary: if data: paketdata=data if len(eventCodes+paketdata)+4>self.server.MaxBi naryLength: #logging.error("Data out of limits, not sent.") pass else: paklength=struct.pack('!l', len(eventCod es+paketdata)+4) self.transport.write(paklength+eventCode s+paketdata) else: if len(eventCodes)+4>self.server.MaxBinaryLength : #logging.error("Data out of limits, not sent.") pass else: paklength=struct.pack('!l', len(eventCod es)+4) self.transport.write(paklength+eventCode s) else: if data: paketdata='\x01'.join(map(str, [eventCodes] + da ta))

if len(paketdata)>self.server.MaxUTFLength or le n(paketdata)+10>self.server.MaxBinaryLength: #logging.error("Data out of limits, not sent.") pass else: paklength=struct.pack('!l', len(paketdat a)+10) utflength=struct.pack('!h', len(paketdat a)) self.transport.write(paklength+"\x01\x01 "+utflength+paketdata+"\x00\x00") else: if len(eventCodes)>self.server.MaxUTFLength or l en(eventCodes)+10>self.server.MaxBinaryLength: #logging.error("Data out of limits, not sent.") pass else: paklength=struct.pack('!l', len(eventCod es)+10) utflength=struct.pack('!h', len(eventCod es)) self.transport.write(paklength+"\x01\x01 "+utflength+eventCodes+"\x00\x00") def sendDataOld(self, eventCodes, data = None): if data: self.transport.write('\x01'.join(map(str, [eventCodes] + data)) + "\x00") else: self.transport.write(eventCodes + "\x00") def sendData2(self, data, isOldProtocol=False): if not isOldProtocol: packet_len = struct.pack("!l", len(data)+4) self.transport.write(packet_len + data) else: op_len = struct.pack("!h", len(data)) packet_len = struct.pack("!l", len(data)+6+len(op_len)) self.transport.write(packet_len + "\x01\x01" +op_len + d #print "[DBG-S] (%s)" % repr(data) def sendZombieMode(self, fosse = None): self.room.ZombieRoom = True if self.isShaman: lol = "runbin 01010005081401345" data = str(lol.split(" ", 1)[1]).replace(" ","") eventcodes=data[:4] data=data[4:] self.room.sendAllBin(self.HexToByte(eventcodes), self.He self.room.sendAllBin("\x08\x42", struct.pack("!l", int(self.play self.isZombie = True #if self.room.ZombieTimer:

ata)

xToByte(data)) erCode)))

# # # #

try: except:

self.room.ZombieTimer.cancel() self.room.ZombieTimer=None

def sendCorrectVersion(self): self.sendData("\x1A" + "\x1B",[str(self.server.getConnectedPlaye rCount()), self.server.LCDMT, self.CMDTEC, "br"]) def sendTitleList(self): self.sendData("\x08" + "\x0F",self.titleList) def sendPlayerLoginData(self): privtosend = self.privilegeLevel self.sendData("\x1A" + "\x08",[self.username, str(self.playerCod e), str(privtosend)]) def sendPlayerBan(self, hours, banreason, silent): bantime=3600000*hours self.sendData("\x1A" + "\x11",[bantime, banreason]) if self.room: if not silent: self.sendPlayerBanMessage(self.username, hours, banreason) self.room.disconnectBanTimer = reactor.callLater(0.3, se lf.server.disconnectIPaddress, self.address[0]) self.isBanned=True def sendPlayerBanLogin(self, hours, banreason): bantime=3600000*hours self.sendData("\x1A" + "\x12",[bantime, banreason]) self.isBanned=True def sendBanWarning(self, hours): self.sendData("\x1A" + "\x12",[hours]) def sendPermaBan(self): self.sendData("\x1A" + "\x12",[]) def sendBanConsideration(self): self.sendData("\x1A" + "\x09",["0"]) def sendBanNotExist(self): self.sendData("\x1A" + "\x09",[]) def sendPlayerBanMessage(self, name, time, reason): self.room.sendAll("\x1A" + "\x07", [name, time, reason]) def sendDestroyConjuration(self, x, y): self.room.sendAll("\x04" + "\x0F", [x, y]) def sendStartSnowStorm(self): self.room.sendAll("\x05" + "\x17", ["0"]) def sendEndSnowStorm(self): self.room.sendAll("\x05" + "\x17", []) def sendEverybodyDance(self): #Removed from client in 0.129 self.room.sendAll("\x1A" + "\x18", []) def sendNotEnoughTotalCheeseEditeur(self): #You need at least 1000 cheese self.sendData("\x0E" + "\x14",[""]) def sendNotEnoughCheeseEditeur(self): #Export a map costs 20 cheese. You do not have enough. self.sendData("\x0E" + "\x14",["", ""]) def sendMapValidated(self): self.sendData("\x0E" + "\x11",[]) def sendVoteBox(self, author, yes, no): if self.cheesecount>=50 and self.privilegeLevel!=0 and not self. SPEC: #should be 500 cheese. self.QualifiedVoter=True self.sendData("\x0E" + "\x04",[author, yes, no])

mName)])

def sendMapExported(self, code): self.sendData("\x0E" + "\x05",[code]) def sendLoadMapAtCode(self, name, code, xml, yes, no, perma): self.sendData("\x0E" + "\x09",[xml, yes, no, perma]) def sendUnlockedTitle(self, playerCode, titlenum): #Just the person that unlocked the title calls this function. self.room.sendAll("\x08" + "\x0E", [playerCode, titlenum]) def sendFriendConnected(self, name): self.sendData("\x08" + "\x0B",[name]) def sendMaxFriends(self): self.sendData("\x08" + "\x0C",["0"]) def sendNewFriend(self, name): self.sendData("\x08" + "\x0C",["1", name]) def sendAlreadyFriend(self, name): self.sendData("\x08" + "\x0C",["2", name]) def sendRemovedFriend(self, name): self.sendData("\x08" + "\x0C",["4", name]) def sendEnterRoom(self, roomName): if roomName.startswith("*"): self.sendData("\x05" + "\x15",[str(roomName)]) else: self.sendData("\x05" + "\x15",[self.Langue+"-" + str(roo

def sendBoulneige(self, code, y, x, direct): if direct == 1: self.room.sendAllBin("\x05" + "\x14" + struct.pack("!h", int(cod e)) + struct.pack("!h", int(x)) + struct.pack("!h", int(y)) + struct.pack("!b", int(0)) + struct.pack("!h", int(10)) + struct.pack("!h", int(1)))#,[code, 24, st r(x), str(y), 0, 10, -4, 1]) else: self.room.sendAllBin("\x05" + "\x14" + struct.pack("!h", int(cod e)) + struct.pack("!h", int(x)) + struct.pack("!h", int(y)) + struct.pack("!b", int(0)) + struct.pack("!h", int(-10)) + struct.pack("!h", int(1)))#[code, 24, x, y, 0, -10, -4, 1]) def sendTribeInfoUpdate(self, greeting = None, playerlist = None): if playerlist: self.server.sendTribeInfoUpdate(self.TribeCode, True, Tr elif greeting: self.server.sendTribeInfoUpdate(self.TribeCode, True) else: self.server.sendTribeInfoUpdate(self.TribeCode) def sendTribeZeroGreeting(self): data = struct.pack('!ih', 0, 0) data = data + "" data = data + struct.pack('!bh', 0, len("")) data = data + "" data = data + struct.pack('!h', len("")) data = data + "" data = data + struct.pack('!bi', 0, 0) self.sendData("\x10" + "\x12", data, True) def sendTribeGreeting(self): if self.isInTribe: data = struct.pack('!ih', self.TribeCode, len(self.Tribe data = data + self.TribeName data = data + struct.pack('!bh', self.TribeFromage, len(

ue)

Name))

self.TribeMessage))

data = data + self.TribeMessage data = data + struct.pack('!h', len("<T O=\""+self.Tribe Info[0]+"\" G=\""+self.TribeInfo[1]+"\" />")) data = data + "<T O=\""+self.TribeInfo[0]+"\" G=\""+self .TribeInfo[1]+"\" />" data = data + struct.pack('!bi', int(self.TribeRank), in t(self.TribeHouse)) self.sendData("\x10" + "\x12", data, True) def sendTribeList(self): self.sendData("\x10" + "\x10", self.server.getTribeList(self.Tri

beCode))

def sendTribeConnected(self, name): #Name just connected self.server.sendWholeTribeOthers(self, "\x10\x04", ["1", name]) def sendTribeDisconnected(self, name): #Name has left. self.server.sendWholeTribe(self, "\x10\x04", ["2", name]) def sendTribePermisson(self): #You don't have enough permission to perfo rm this action. self.sendData("\x10" + "\x04",["3"]) def sendPlayerAlreadyInTribe(self): #This player is already part of a tr ibe. self.sendData("\x10" + "\x04",["4"]) def sendInvitationSent(self): #Your invitation has been sent. self.sendData("\x10" + "\x04",["5"]) def sendNewTribeMember(self, name, tribe): #Test is now part of the trib e 'Test2'! self.server.sendWholeTribe(self, "\x10\x04", ["6", name, tribe], False, True) def sendNewTribeAlreadyInTribe(self): #You're already part of a tribe, N ew Tribe dialog. self.sendData("\x10" + "\x04",["7"]) def sendNewTribeNotEnoughCheese(self): #The creation of a tribe costs 50 0 cheese, New ribe dialog. self.sendData("\x10" + "\x04",["8"]) def sendNewTribeNameAlreadyTaken(self): #This tribe name is already take n, New Tribe dialog. self.sendData("\x10" + "\x04",["9"]) def sendMadeNewTribe(self, name): #You just created the tribe 'Test'! self.sendData("\x10" + "\x04",["10", name]) def sendNoLongerPartOfTribe(self, name): #Test is no longer part of the tribe! self.server.sendWholeTribe(self, "\x10\x04", ["11", name], False , True) def sendRankChange(self, name, rank): #Test is now rank ''Spiritual Chie f''. Rank=number self.server.sendWholeTribe(self, "\x10\x04", ["12", name, rank], False, True) def sendDeactivateTribeChat(self, name): self.server.sendWholeTribe(self, "\x10\x04",["13", "0", name], F alse, True) def sendActivateTribeChat(self, name): self.server.sendWholeTribe(self, "\x10\x04",["13", "1", name], F alse, True) def sendTribeInvite(self, tribeID, username, tribeName): self.sendData("\x10" + "\x0e",[tribeID, username, tribeName]) def sendDisableWhispers(self):

self.sendData("\x10" + "\x04",["14", "0"]) def sendEnableWhispers(self): self.sendData("\x10" + "\x04",["14", "1"]) def sendDisabledWhispers(self, name): #Name disabled the whispers. self.sendData("\x10" + "\x04",["15", name]) #self.sendData("\x06" + "\x14", [""+username+" desativou o seu c ochicho."]) def sendForumCreateAccount(self): self.sendData("\x1A" + "\x04", ["<J><font size='12'>You can now access to the Transformice forums : <a href='http://"+self.server.BaseForumURL+" ' target='_blank'><u>http://"+self.server.BaseForumURL+"</u></a></font>"]) #self.sendData("\x1A" + "\x15",[]) def sendForumNewPM(self, count): self.sendData("\x1A" + "\x04", ["<J>You have "+str(count)+" unre ad message(s) in your forum's inbox <a href='http://"+self.server.BaseForumURL+" ' target='_blank'><u>http://"+self.server.BaseForumURL+"</u></a>"]) #self.sendData("\x18" + "\x18",[count]) def sendModMute(self, name, time, reason): data=str(struct.pack("!h", len(name))+name+struct.pack("!hh", ti me, len(reason))+reason+struct.pack("!xx")) self.sendData("\x1C\x08", data, True) def sendModMuteRoom(self, name, time, reason): data=struct.pack("!h", len(name))+name+struct.pack("!hh", time, len(reason))+reason+struct.pack("!xx") self.room.sendAllBin("\x1C\x08", data) def sendProfile(self, username): username=username.lower() username=username.capitalize() isguest=username.find("*") if isguest == -1: if self.server.checkAlreadyConnectedAccount(username): title = self.server.getProfileTitle(username) titleList = self.server.getProfileTitleList(user cheese = self.server.getProfileCheeseCount(usern first = self.server.getProfileFirstCount(usernam shamancheese = self.server.getProfileShamanChees saves = self.server.getProfileSaves(username) bootcamp = self.server.getProfileBootcampCount(u tribe = self.server.getProfileTribe(username) hardmodesaves = self.server.getProfileHardModeSa

name) ame) e)

e(username) sername) ves(username)

userlook = self.server.getUserLook(username) stats = str(saves)+","+str(shamancheese)+","+str (first)+","+str(cheese)+","+str(hardmodesaves)+","+str(bootcamp) dbcur.execute('select dataReg from users where n ame = ?', [username]) rffs = dbcur.fetchone() dateregistred = str(rffs).replace("'", "").repla ce("(", "").replace(")", "").replace(",", "") color1, _ = self.server.mouseColorInfo(True, use rname, "") if color1=='"':

color1="78583a" self.sendData("\x08" + "\x0A",[username , stats, title, titleList, userlook, tribe, dateregistred, color1]) else: #self.sendData("\x08" + "\x0A",[username , stats , title, titleList, userlook, tribe, dateregistred, color1]) #pass self.sendData("\x06" + "\x14",["<R>O Jogador dig itado no est online."]) #else: #pass def catchTheCheeseNoShaman(self, playerCode): self.sendData("\x08" + "\x17",[playerCode]) self.sendData("\x05" + "\x13",[playerCode]) self.room.isCatchTheCheeseMap = True def catchTheCheeseShaman(self, playerCode): self.sendData("\x08" + "\x17",[playerCode]) self.sendData("\x05" + "\x13",[playerCode]) self.sendData("\x08" + "\x14",[playerCode]) self.room.isCatchTheCheeseMap = True def sendNewParty(self): #if self.room.isSnowing==True: # self.sendStartSnowStorm() #if self.room.isSnowing==False: # self.sendEndSnowStorm() #if not int(self.room.currentWorld) in FULL_LEVEL_LIST: # if self.room.ISCM==0: # self.room.currentWorld=0 self.sendData("\x05" + "\x05",[self.room.currentWorld, self.room .getPlayerCount(), self.room.CodePartieEnCours, '0']) def sendNewPartyCustomMap(self, mapcode, mapxml, mapname, mapperma): mapperma = str(mapperma) mapxml = str(mapxml) mapname = str(mapname) mapcode = '@' + str(mapcode) if str(mapcode) == "@666": self.sendData("\x05" + "\x05",["@Halloween", self.room.g etPlayerCount(), self.room.CodePartieEnCours, "", mapxml+"\x02"+mapname+"\x02"+m apperma]) elif str(mapcode) == "@777": self.sendData("\x05" + "\x05",["@Pesca", self.room.getPl ayerCount(), self.room.CodePartieEnCours, "", mapxml+"\x02"+mapname+"\x02"+mappe rma]) else: #self.sendData("\x05" + "\x05",["@"+mapisc+"", self.room .getPlayerCount(), self.room.CodePartieEnCours, "", mapxml+"\x02"+mapname+"\x02" +mapperma]) self.sendData("\x05" + "\x05",[mapcode, self.room.getPla yerCount(), self.room.CodePartieEnCours, "", mapxml+"\x02"+mapname+"\x02"+mapper ma]) def sendNewPartyMapEditeur(self, mapxml, mapname, mapperma): mapperma = str(mapperma) mapxml = str(mapxml) mapname = str(mapname) self.sendData("\x05" + "\x05",["-1", self.room.getPlayerCount(), self.room.CodePartieEnCours, "", mapxml+"\x02"+mapname+"\x02"+mapperma, ""]) def sendPlayerList(self): if self.disableShop: self.sendData("\x08" + "\x09",list(self.room.getPlayerLi st(True)))

else: st()))

self.sendData("\x08" + "\x09",list(self.room.getPlayerLi

def sendNewPlayer(self, playerData): self.room.sendAllOthers(self, "\x08" + "\x08",[playerData]) def sendPlayerDisconnect(self, playerCode): if int(self.room.getPlayerCount())>=1: if self.room.isDoubleMap: if self.room.checkIfDoubleShamansAreDead(): self.send20SecRemainingTimer() elif self.room.checkIfShamanIsDead(): self.send20SecRemainingTimer() else: pass if self.room.checkIfTooFewRemaining(): self.send20SecRemainingTimer() self.room.sendAll("\x08" + "\x07",[playerCode]) def sendPlayerDied(self, playerCode, score): if int(self.room.getPlayerCount())>=1: if self.room.isDoubleMap: if self.room.checkIfDoubleShamansAreDead(): self.send20SecRemainingTimer() elif self.room.checkIfShamanIsDead(): self.send20SecRemainingTimer() else: pass if self.room.checkIfTooFewRemaining(): self.send20SecRemainingTimer() self.room.sendAll("\x08" + "\x05",[playerCode, self.room.checkDe athCount()[1], score]) self.hasCheese=False def send20SecRemainingTimer(self): if not self.room.changed20secTimer: self.room.changed20secTimer=True if self.room.isBootcamp: pass elif self.room.never20secTimer or self.room.isTribehouse Map: pass elif self.room.isSandbox: pass elif self.room.roundTime == 0: pass elif self.room.isEditeur: pass elif self.room.autoRespawn or self.room.isTribehouseMap: pass elif int(self.room.roundTime+int((self.room.gameStartTim e-getTime())))<21: pass else: self.room.sendAll("\x06\x11", []) if self.room.worldChangeTimer: try: self.room.worldChangeTimer.cance l() except: self.room.worldChangeTimer=None self.room.worldChangeTimer = reactor.callLater(2 0, self.room.worldChange)

def sendPlayerGotCheese(self, playerCode, score, place, timeTaken): #self.sendData("\x08" + "\x06",[playerCode, self.room.checkDeath Count()[1], score, place, timeTaken]) self.room.sendAll("\x08" + "\x06",[playerCode, self.room.checkDe athCount()[1], score, place, timeTaken]) self.hasCheese=False if self.room.currentWorld == 900: self.room.worldChangeTimer = reactor.callLater(3, lambda : self.enterRoom(self.server.recommendRoom())) def sendShopList(self): data = struct.pack('!iih', self.shopcheese, self.shopfraises, le n(self.look)) data = data + self.look if ',' in self.shopitems: boughtShop = self.shopitems.split(',') elif self.shopitems == '': boughtShop = [] else: boughtShop = [self.shopitems] boughtShopLen = len(boughtShop) data = data + struct.pack('!i', boughtShopLen) for item in boughtShop: if "_" in item: item, custom = item.split("_", 1) if "+" in custom: custom = custom.split("+") elif custom != "": custom = [custom] else: custom = () , int(item)) data = data + struct.pack('!bi', len(custom) + 1 x = 0 while x < len(custom): data = data + struct.pack('!i', int(cust else: x += 1 data = data + struct.pack('!bi', 0, int(item))

om[x], 16))

globalShop = self.shoplist.split(';') globalShopLen = len(globalShop) data = data + struct.pack('!i', globalShopLen) for values in globalShop: cat, item, customizable, cheese, fraises = map(int, valu data = data + struct.pack('!iibii', cat, item, customiza

es.split(','))

ble, cheese, fraises)

self.sendData("\x08" + "\x14", data, True) #self.sendData("\x14" + "\x11", data, True) def sendLookChange(self):

furcolor, dresses = self.look.split(';') data = struct.pack('!b', int(furcolor)) dresses = dresses.split(',') for dress in dresses: if "_" in dress: dress, custom = dress.split("_", 1) if "+" in custom: custom = custom.split("+") elif custom != "": custom = [custom] else: custom = [] (custom)) data = data + struct.pack('!hb', int(dress), len x = 0 while x < len(custom): data = data + struct.pack('!i', int(cust else: x += 1

om[x], 16))

data = data + struct.pack('!hb', int(dress), 0) #struct.pack('!i', (int(self.color1, 16) data = data + "\x00\x00" + self.HexToByte(self.color1) if self.c olor1 != '"' else int("78583a", 16) self.sendData("\x14" + "\x11", data, True) def getItemCustomizable(self, itemId): #if int(itemId) == 10101: # itemId = 101 #elif int(itemId) == 10102: # itemId = 102 globalShop = self.shoplist.split(';') for values in globalShop: cat, item, customizable, cheese, fraises = map(int, valu es.split(',')) if cat*100 + item == int(itemId): return customizable #print 'Return len cust: '+repr(customizable) return 0 def sendShamanCode(self, shamanPlayerCode): if shamanPlayerCode == 0: self.sendData("\x08" + "\x14",) else: hardMode=self.server.getPlayerHardMode(shamanPlayerCode) if str(hardMode)=="1": self.sendData("\x08" + "\x14",[shamanPlayerCode, "", ""]) self.room.isHardSham=True else: self.sendData("\x08" + "\x14",[shamanPlayerCode] ) def sendDoubleShamanCode(self, shamanPlayerCode, shamanPlayerCodeTwo): self.sendData("\x08" + "\x14",[shamanPlayerCode, shamanP layerCodeTwo]) def sendSynchroniser(self, playerCode, OnlySelf = None): if OnlySelf: if self.room.ISCM!=-1: self.sendData("\x08" + "\x15",[playerCode, ""]) elif self.room.ISCMV!=0:

else: else: "]) "])

self.sendData("\x08" + "\x15",[playerCode, ""]) self.sendData("\x08" + "\x15",[playerCode])

if self.room.ISCM!=-1: self.room.sendAll("\x08" + "\x15",[playerCode, " elif self.room.ISCMV!=0: self.room.sendAll("\x08" + "\x15",[playerCode, "

tTimer)

self.room.sendAll("\x08" + "\x15",[playerCode]) def sendNewTitle(self, titlenum): self.sendData("\x08" + "\x0D",[titlenum]) def sendTime(self, timeLeft): self.sendData("\x05" + "\x06",[timeLeft]) def mapStartTimer(self): self.sendData("\x05" + "\x0A",["1"]) self.endMapStartTimer = reactor.callLater(3, self.sendEndMapStar

else:

def sendEndMapStartTimer(self): self.sendData("\x05" + "\x0A",[]) def sendNoMapStartTimer(self): self.sendData("\x05" + "\x0A",["0"]) def sendSetAnchors(self, anchors): self.sendData("\x05" + "\x07",anchors) def sendATEC(self): self.sendData("\x1A" + "\x1A") def sendPING(self): self.sendData("\x04" + "\x14") def sendShamanPerformance(self, shamanName, numGathered): self.room.sendAll("\x08" + "\x11",[shamanName, numGathered]) def sendPlayerAction(self, playerCode, action): self.room.sendAll("\x08" + "\x16",[playerCode, action]) def sendPlayerEmote(self, playerCode, emoteCode, others=True): if others: self.room.sendAllOthersBin(self, "\x08" + "\x01", str uct.pack('!lc', playerCode, chr(emoteCode))) else: self.room.sendAllBin("\x08" + "\x01", struct.pack('!lc', p layerCode, chr(emoteCode))) def sendAnimZelda(self, playerCode, id1, id2): #FF FF 00 00 = Cheese #FF FF 00 01 = Heart self.room.sendAllBin("\x08\x2C", struct.pack("!lhh", int(playerC ode), int(id1), int(id2))) def sendModMessageChannel(self, name, message): if name=="Servidor" or name=="Hack Detect": print str(datetime.today())+" "+"["+name+"] "+message #logging.info("["+name+"] "+message) data="\x03"+struct.pack('!h', len(name))+name+struct.pack('!h', len(message))+message+"\x00\x00" self.server.sendModChat(self, "\x06\x0A", data, True) def sendModMessageChannel(self, name, message): if name=="Servidor" or name=="Hack Detect": print str(datetime.today())+" "+"["+name+"] "+message #logging.info("["+name+"] "+message) data="\x03"+struct.pack('!h', len(name))+name+struct.pack('!h', len(message))+message+"\x00\x00" self.server.sendModChat(self, "\x06\x0A", data, True) def sendArbMessageChannel(self, name, message): data="\x02"+struct.pack('!h', len(name))+name+struct.pack('!h',

len(message))+message+"\x00\x00" self.room.sendArbChat(self, "\x06\x0A", data, True) def sendModMCLogin(self, name): #self.room.sendModChatOthers(self, "\x1A\x05", ["Servidor", name +" vient de se connecter."]) self.room.sendModChatOthers(self, "\x1A\x05", ["-", name+" conec tou-se."]) #self.room.sendModChatOthersLogin(self, "\x06\x0A", name) def sendArbMCLogin(self, name): #self.room.sendArbChatOthers(self, "\x1A\x06", ["Servidor", name +" vient de se connecter."]) self.room.sendArbChatOthers(self, "\x1A\x06", ["-", name+" conec tou-se."]) #self.room.sendArbChatOthersLogin(self, "\x06\x0A", name) def sendServerMessageName(self, name, message): self.room.sendWholeServer(self, "\x1A\x04", [" ["+name+"] "+message +""]) def sendModMessage(self, name, message): data="\x00"+"\x00\x00"+struct.pack('!h', len(message))+message+" \x00\x00" self.room.sendAllBin("\x06\x0A", data) def sendadmMessage(self, name, message): self.room.sendWholeServer(self, "\x1A\x04", ["<font color='#FFD7 00'> [Administrador "+name+"] "+message+"</font>"]) def sendSuperModMessage(self, name, message): self.room.sendWholeServer(self, "\x1A\x04", ["<font color='#14E4 FF'> [Super Moderador] "+message+"</font>"]) def sendServerMessage(self, name, message): self.room.sendWholeServer(self, "\x1A\x04", ["<J> [Mensagem do Serv idor] "+message+""]) def sendTotem(self, totem, x, y, playercode): self.room.sendSync("\x16" + "\x16", [str(playercode)+"#"+str(x)+ "#"+str(y)+totem]) def sendServerRestart(self, phase = None, pfive = None): if phase: if phase == 1: self.sendServerRestartSEC(60) self.rebootNoticeTimer = reactor.callLater(30, s elf.sendServerRestart, 2) elif phase == 2: self.sendServerRestartSEC(30) self.rebootNoticeTimer = reactor.callLater(10, s elf.sendServerRestart, 3) elif phase == 3: self.sendServerRestartSEC(20) self.rebootNoticeTimer = reactor.callLater(10, s elf.sendServerRestart, 4) elif phase == 4: self.sendServerRestartSEC(10) self.rebootNoticeTimer = reactor.callLater(1, se lf.sendServerRestart, 5, 9) elif phase == 5: if pfive: if pfive>0: self.sendServerRestartSEC(pfive) self.rebootNoticeTimer = reactor .callLater(1, self.sendServerRestart, 5, pfive-1) else: self.sendServerRestartMIN(2) self.rebootNoticeTimer = reactor.callLater(60, self.send

ServerRestart, 1) def sendServerRestartSEC(self, seconds): seconds=seconds*1000 if seconds>=60001: pass else: self.room.sendWholeServer(self, "\x1C\x58", struct.pack( '!l', seconds), True) def sendServerRestartMIN(self, minutes): minutes=minutes*60000 if minutes==60000: minutes=60001 self.room.sendWholeServer(self, "\x1C\x58", struct.pack('!l', mi nutes), True) def sendGiftAmount(self, amount): self.sendData("\x13" + "\x14",[amount]) def sendPresent(self, fromPlayerCode, fromPlayerName, toPlayerName): self.room.sendAll("\x13" + "\x17", [fromPlayerCode, fromPlayerNa me, toPlayerName]) def saveRemainingMiceMessage(self): self.sendData("\x08" + "\x12",) def sendPlayMusic(self, path, OnlySelf = None): if OnlySelf: self.sendData("\x1A" + "\x0C",[path]) else: self.room.sendAll("\x1A" + "\x0C",[path]) def sendStopMusic(self): self.room.sendAll("\x1A" + "\x0C",[]) def sendSentPrivMsg(self, username, message): nameLength=struct.pack('!h', len(username)) messageLength=struct.pack('!h', len(message)) data="\x00"+nameLength+username+"\x00"+messageLength+message+"\x 00" self.sendData("\x06" + "\x07", data, True) #self.sendData("\x06" + "\x07",[message, username]) def sendRecievePrivMsg(self, username, message): nameLength=struct.pack('!h', len(username)) messageLength=struct.pack('!h', len(message)) data="\x01"+nameLength+username+"\x00"+messageLength+message+"\x 00" self.sendData("\x06" + "\x07", data, True) #self.sendData("\x06" + "\x07",[message, username, "x"]) def sendPlayerNotFound(self): #self.sendData("\x06" + "\x07") pass def sendHardMode(self, mode): if str(mode)=="1": data="\x01\x00\x00" else: data="\x00\x00\x00" self.sendData("\x1C" + "\x0A", data, True) def sendNewHat(self): #"Woooohoooo! New hat available!" self.room.sendWholeServer(self, "\x1C\x1C", "\x00\x00", True) def sendTotemItemCount(self, number): if self.room.currentWorld==444: self.sendData("\x1C" + "\x0B", struct.pack('!h', number* 2)+"\x00\x00", True) def sendEmailValidatedDialog(self):

self.sendData("\x1C"+"\x0C", def sendEmailCodeInvalid(self): self.sendData("\x1C"+"\x0C", def sendEmailValidated(self): self.sendData("\x1C"+"\x0D", def sendEmailDialog(self): self.sendData("\x1C"+"\x0F",

"\x01", True) "\x00", True) "\x01", True) "", True)

def sendEmailSent(self): self.sendData("\x1C"+"\x10", "\x01", True) def sendEmailAddrAlreadyUsed(self): self.sendData("\x1C"+"\x10", "\x00", True) def sendThreadList(self): dbcur.execute('select * from ForumThread') rrfRows = dbcur.fetchall() if rrfRows is None: pass else: ThreadList=[] for rrf in rrfRows: if rrf[6]=="True": DeletedThread=True elif rrf[7]=="True": ClosedThread=True else: # Blank, Blank, Ava, Title, Date, Post Count, Username, ID ID ThreadList.append(['\x02'.join(map(str,[ "", "", rrf[2], rrf[3], rrf[4], self.getThreadPostCount(rrf[0]), rrf[1], rrf[0]] )),rrf[0]]) SendThreadList=[] ThreadList=sorted(ThreadList, key=lambda Entry: Entry[1] , reverse=True) for Thread in ThreadList: SendThreadList.append(Thread[0]) self.sendData("\x18"+"\x0F", SendThreadList) def sendForumThread(self, ID): dbcur.execute('select * from ForumThread where ID = ?', [int(ID) ]) rrf = dbcur.fetchone() if rrf is None: pass else: if rrf[7]=="True": ClosedThread=True else: ClosedThread=False if rrf[6]=="True": DeletedThread=True else: DeletedThread=False rrf=None rrfRows=None if not DeletedThread: dbcur.execute('select * from ForumPost where ThreadID = ?', [int(ID)]) rrfRows = dbcur.fetchall() if rrfRows is None:

else:

PostList=[] PostList=[] for rrf in rrfRows: if rrf[7]=="True": pass else: # Date ,Name ,Ava ,Post ,MouseTitle Title=self.server.getCurrentTitl if not int(Title) in range(0, 50

#PostID e(rrf[2]) +1)+[440, 444]:

Title=0 PostList.append(['\x02'.join(map (str,[rrf[3],rrf[2],rrf[4],rrf[5],Title])), rrf[1]]) SendPostList=[] PostList=sorted(PostList, key=lambda Entry: Entry[1]) for Post in PostList: SendPostList.append(Post[0]) if ClosedThread: pass #self.sendData("\x18"+"\x11", SendPostList) else: self.sendData("\x18"+"\x10", SendPostList) def sendPostSpeedLimit(self): #YOU MUST WAIT AT LEAST 60 SECONDS self.sendData("\x18"+"\x0E",) def getThreadPostCount(self, ID): Count=0 dbcur.execute('select * from ForumPost where ThreadID = ?', [int (ID)]) rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: if rrf[7]=="True": pass else: Count+=1 return Count def checkThreadClose(self, ID): Status=False dbcur.execute('select Deleted from ForumThread where ID = ?', [i nt(ID)]) rrf = dbcur.fetchone() if rrf is None: pass else: if rrf[0]=="True": Status=True else: pass return Status def postForumReply(self, ThreadID, Message): PostDate=str(getTime()).split(".")[0] self.ForumLastPostTime=int(PostDate) PostID=int(self.server.getServerSetting("ForumLastPostID"))+1 dbcur.execute('UPDATE settings SET value = ? WHERE setting = ?',

[str(PostID), "ForumLastPostID"]) dbcur.execute("insert into ForumPost (ThreadID, PostID, Username , Date, Avatar, Post, TitleNum, Deleted) values (?, ?, ?, ?, ?, ?, ?, ?)", (int( ThreadID), int(PostID), self.username, PostDate, "0", Message, self.titleNumber, "False")) self.sendThreadList() self.sendForumThread(ThreadID) def postForumThread(self, Title, Message): PostDate=str(getTime()).split(".")[0] self.ForumLastPostTime=int(PostDate) ThreadID=int(self.server.getServerSetting("ForumLastThreadID"))+ 1 PostID=int(self.server.getServerSetting("ForumLastPostID"))+1 dbcur.execute('UPDATE settings SET value = ? WHERE setting = ?', [str(ThreadID), "ForumLastThreadID"]) dbcur.execute('UPDATE settings SET value = ? WHERE setting = ?', [str(PostID), "ForumLastPostID"]) dbcur.execute("insert into ForumThread (ID, Username, Avatar, Ti tle, Date, ReplyCount, Deleted, Locked) values (?, ?, ?, ?, ?, ?, ?, ?)", (int(T hreadID), self.username, "0", Title, PostDate, 0, "False", "False")) dbcur.execute("insert into ForumPost (ThreadID, PostID, Username , Date, Avatar, Post, TitleNum, Deleted) values (?, ?, ?, ?, ?, ?, ?, ?)", (int( ThreadID), int(PostID), self.username, PostDate, "0", Message, self.titleNumber, "False")) self.sendThreadList() def forumDeletePost(self, Name, PostDate): dbcur.execute('select * from ForumPost where Username = ? and Da te = ?', [Name, PostDate]) rrf = dbcur.fetchone() if rrf is None: pass else: PostInfo=list(rrf) rrf=None rrfRows=None ID=PostInfo[0] dbcur.execute('select * from ForumPost where ThreadID = ?', [int (ID)]) rrfRows = dbcur.fetchall() if rrfRows is None: PostList=[] else: PostList=[] for rrf in rrfRows: if rrf[7]=="True": pass else: PostList.append(['\x02'.join(map(str,[rr f[3],rrf[2],rrf[4],rrf[5],"0"])), rrf[1]]) SendPostList=[] PostList=sorted(PostList, key=lambda Entry: Entry[1]) if PostList[0][1]==PostInfo[1]: dbcur.execute('UPDATE ForumThread SET Deleted = ? WHERE ID = ?', ["True", int(ID)]) dbcur.execute('UPDATE ForumPost SET Deleted = ? WHERE Po stID = ?', ["True", int(PostInfo[1])]) self.sendThreadList() else: dbcur.execute('UPDATE ForumPost SET Deleted = ? WHERE Po stID = ?', ["True", int(PostInfo[1])])

self.sendThreadList() def checkDuplicateEmail(self, address): dbcur.execute('select Email from users') rrfRows = dbcur.fetchall() if rrfRows is None: EList=[] else: EList=[] for rrf in rrfRows: if rrf[0]=="None": pass else: EList.append(str(rrf[0]).lower()) if address.lower() in EList: return True else: return False def checkValidEmail(self, address): if not re.search("@", address): print "3980" return False elif not re.search("\.", address): print "3983" return False else: t1=address.split("@") t2=t1[1].split(".") address=[] address.append(t1[0]) address.append(t2[0]) address.append(t2[1]) #address = [Name,Domain,Ext] if len(address[2])>6: print "3992" return False address[1]=address[1].lower() if not str(address[1]).lower() in ["gmx","live","gmail","yah oo","hotmail","rr","comcast","bellsouth"]: print "3996" return False if address[0].lower() in ["admin", "administrator", "support ", "nospam", "spam", "tech", "techsupport", "noreply", "automatic", "yahoo", "mi crosoft", "live", "hotmail", "google", "gmail", "gmx"]: print "3999" return False return True def getPlayerData(self, Noshop = False): if Noshop: return '#'.join(map(str,[self.username, self.playerCode, int(self.isDead), self.score, int(self.hasCheese), self.titleNumber, self.avata r, "1;0,0,0,0,0,0,0", self.forumid, "78583a", "95d9d6"])) elif self.room: if self.room.isBootcamp or self.room.getPlayerCount()>=5 0: return '#'.join(map(str,[self.username, self.pla yerCode, int(self.isDead), self.score, int(self.hasCheese), self.titleNumber, se lf.avatar, "1;0,0,0,0,0,0,0", self.forumid, self.color1, "95d9d6"])) else:

return '#'.join(map(str,[self.username, self.pla yerCode, int(self.isDead), self.score, int(self.hasCheese), self.titleNumber, se lf.avatar, self.look, self.forumid, self.color1, self.color2])) else: return '#'.join(map(str,[self.username, self.playerCode, int(self.isDead), self.score, int(self.hasCheese), self.titleNumber, self.avata r, self.look, self.forumid, self.color1, self.color2])) def enterRoom(self, roomName): roomName = roomName.replace("<", "&lt;") self.roomname = roomName if roomName.startswith("\x03"+"[Editeur] "): editeurnamecheck = roomName.replace("\x03"+"[Editeur] ", if editeurnamecheck == self.username: pass if editeurnamecheck != self.username: self.transport.loseConnection() if roomName.startswith("\x03"+"[Totem] "): editeurnamecheck = roomName.replace("\x03"+"[Totem] ", " if editeurnamecheck == self.username: pass if editeurnamecheck != self.username: self.transport.loseConnection() if roomName.startswith("\x03"+"[Private] "): editeurnamecheck = roomName.replace("\x03"+"[Private] ",

"")

")

if editeurnamecheck == self.username: pass elif self.room.checkRoomInvite(self, editeurnamecheck): pass elif self.privilegeLevel==10 or self.privilegeLevel==6 o r self.privilegeLevel==5: pass else: self.transport.loseConnection() if roomName in self.server.rooms: if self.server.rooms[roomName].getPlayerCount() >= self. server.rooms[roomName].playerLimit: if self.privilegeLevel not in [3,5,6,10]: if roomName.isdigit: self.enterRoom(self.server.recom mendRoom(roomName)) else: self.enterRoom(self.server.recom mendRoomPrefixed(roomName)) return if self.room: if self.AwakeTimerKickTimer: try: self.AwakeTimerKickTimer.cancel() except: self.AwakeTimerKickTimer=None self.room.removeClient(self) self.resetPlay()

"")

self.score = 0 self.sendEnterRoom(roomName) print str(datetime.today())+" "+"Entrada na sala: %s - %s" % (ro omName, self.username) #elif event == "reconnect": ip = 'revl.zapto.org' #self.sendData("\x2C\x01\x5D\x40\x8C\x37" + struct.pack('!h', le n(ip) + str(ip)), [], True) lenIp = "14" #self.sendData("\x2C\x01\x5D\x40\x8C\x37" + struct.pack('!h', st r(lenIp)+str(ip)), [], True) #self.room = #self.sendData("\x2C\x01\x5D\x40\x8C\x37" + struct.pack('!h', st r(lenIp) + struct.pack('!h', str(ip), [], True) #self.sendData("\x2C\x01\x5D\x40\x8C\x37" + struct.pack("!h", st r(lenIp)) + struct.pack("!h", str(ip)), [], True) self.sendData("\x2C\x01\x5D\x40\x8C\x37\x0E\x72\x65\x76\x6C\x2E\ x7A\x61\x70\x74\x6F\x2E\x6F\x72\x67", [], True) self.server.addClientToRoom(self, roomName) def AwakeTimerKick(self): print "AwakeTimer kicked "+self.address[0]+"!" if self.room: self.updateSelfSQL() self.sendPlayerDied(self.playerCode, self.score) self.room.removeClient(self) self.transport.loseConnection() def Map777Fishing(self): if self.isFishing: if self.room.currentWorld==777: item=random.randrange(1,4) if int(self.isFishing)==1: if item==1: self.sendAnimZelda(self.playerCo de, -1, 0) self.shopcheese=self.shopcheese+ 2 elif item==2: if not self.checkInShop("28"): self.sendAnimZelda(self. playerCode, 2, 8) if self.shopitems=="": self.shopitems=" 28" else: self.shopitems=s elf.shopitems+",28" else: self.sendAnimZelda(self. playerCode, -1, 0) self.shopcheese=self.sho pcheese+2 elif item==3: if not self.checkInShop("311"): self.sendAnimZelda(self. playerCode, 3, 11) if self.shopitems=="":

311" elf.shopitems+",311" playerCode, -1, 0) pcheese+2 de, -1, 0) 2 else:

self.shopitems=" else: else: self.shopitems=s

self.sendAnimZelda(self. self.shopcheese=self.sho

self.sendAnimZelda(self.playerCo self.shopcheese=self.shopcheese+

de, -1, 0) 2

elif int(self.isFishing)==2: if item==1: self.sendAnimZelda(self.playerCo self.shopcheese=self.shopcheese+ elif item==2: if not self.checkInShop("56"): self.sendAnimZelda(self. if self.shopitems=="": self.shopitems=" else: else: self.shopitems=s

playerCode, 0, 56) 56" elf.shopitems+",56" playerCode, -1, 0) pcheese+2

self.sendAnimZelda(self. self.shopcheese=self.sho

playerCode, 0, 57) 57" elf.shopitems+",57" playerCode, -1, 0) pcheese+2 de, -1, 0) 2

elif item==3: if not self.checkInShop("57"): self.sendAnimZelda(self. if self.shopitems=="": self.shopitems=" else: else: self.shopitems=s

self.sendAnimZelda(self. self.shopcheese=self.sho

else:

self.sendAnimZelda(self.playerCo self.shopcheese=self.shopcheese+

elif int(self.isFishing)==3: if item==1:

de, -1, 0) 2

self.sendAnimZelda(self.playerCo self.shopcheese=self.shopcheese+ elif item==2: if not self.checkInShop("58"): self.sendAnimZelda(self. if self.shopitems=="": self.shopitems=" else: else: self.shopitems=s

playerCode, 0, 58) 58" elf.shopitems+",58" playerCode, -1, 0) pcheese+2

self.sendAnimZelda(self. self.shopcheese=self.sho

playerCode, 2, 7) 27" elf.shopitems+",27" playerCode, -1, 0) pcheese+2 de, -1, 0) 2 else:

elif item==3: if not self.checkInShop("27"): self.sendAnimZelda(self. if self.shopitems=="": self.shopitems=" else: else: self.shopitems=s

self.sendAnimZelda(self. self.shopcheese=self.sho

else:

self.sendAnimZelda(self.playerCo self.shopcheese=self.shopcheese+

pass

def initTotemEditor(self): if self.RTotem: self.sendTotemItemCount(0) self.RTotem=False else: if self.STotem[1]!="": self.Totem=[0, ""] self.sendTotemItemCount(self.STotem[0]) self.sendTotem(self.STotem[1], 400, 203, self.pl ayerCode) else: self.sendTotemItemCount(0) def resetPlay(self): self.isShaman = False self.hasCheese = False self.isDead = False self.isSyncroniser = False

self.isFishing = False self.canMeep = False self.UTotem = False self.JumpCheck = 1 def startPlay(self, ISCM, SPEC): if self.room.getPlayerCount()>=2 and self.room.countStats: self.roundCount=self.roundCount+1 self.resetPlay() self.duckCheckCounter = 0 #self.sendGiftAmount(self.giftCount) if SPEC == 1: self.isDead=True self.SPEC=True else: self.SPEC=False self.isDead=False if self.room.isSandbox: self.isDead=True self.hasCheese=False if ISCM!=-1: self.sendNewPartyCustomMap(self.room.ISCM, self.room.ISC Mdata[2], self.room.ISCMdata[1], self.room.ISCMdata[5]) elif self.room.ISCM!=-1: self.sendNewPartyCustomMap(self.room.ISCM, self.room.ISC Mdata[2], self.room.ISCMdata[1], self.room.ISCMdata[5]) elif self.room.ISCMV!=0 and self.room.isEditeur: self.sendNewPartyMapEditeur(self.room.ISCMVdata[2], self .room.ISCMVdata[1], self.room.ISCMVdata[5]) else: self.sendNewParty() self.sendPlayerList() if self.room.currentWorld==888: self.sendTime(60) else: self.sendTime(self.room.roundTime+int((self.room.gameSta rtTime-getTime()))) #if self.room.isSandbox: # self.sendTime(0) if self.room.currentWorld in self.server.NPCMaps: RunList=self.server.NPCs_M[:] for position, npc in enumerate(RunList): if npc[7]==self.room.currentWorld: self.sendData("\x15" + "\x15", [npc[0], npc[1], npc[2], npc[3], npc[4], npc[5], npc[6]]) if npc[8]==True: ExList=npc[9][:] for position, ExData in enumerat e(ExList): self.sendData(ExData[0], ExData[1], True) if self.room.name in self.server.NPCRooms:

RunList=self.server.NPCs_R[:] for position, npc in enumerate(RunList): if npc[7]==self.room.name: # id name shop x y dir click self.sendData("\x15" + "\x15", [npc[0], npc[1], npc[2], npc[3], npc[4], npc[5], npc[6]]) if npc[8]==True: ExList=npc[9][:] for position, ExData in enumerat e(ExList): self.sendData(ExData[0], ExData[1], True) if self.room.PRShamanIsShaman: self.room.forceNextShaman = self.room.getPlayerCode(self .room.name.replace("\x03[Private] ", "")) if self.room.isDoubleMap: shamans = self.room.getDoubleShamanCode() shamanCode = shamans[0] shamanCode2 = shamans[1] else: shamanCode = self.room.getShamanCode() if str(self.room.ISCM) == "666": shamanCode = 0 self.room.ZombieTimer = reactor.callLater(12, self.room. else: self.room.isZombieRoom = True if self.room.ZombieTimer: try: self.room.ZombieTimer.cancel() except: self.room.ZombieTimer=None

goZombified)

2)

if self.room.currentWorld in [108, 109]: self.catchTheCheeseNoShaman(shamanCode) elif self.room.currentWorld in [110, 111, 112, 113, 114]: self.catchTheCheeseShaman(shamanCode) else: if self.room.isDoubleMap: self.sendDoubleShamanCode(shamanCode, shamanCode else: self.sendShamanCode(shamanCode)

if self.room.currentWorld in range(200,210+1): self.sendData("\x1B" + "\x0A", "", True) if shamanCode == self.playerCode: self.isShaman = True if self.room.isDoubleMap: if shamanCode2 == self.playerCode: self.isShaman = True if self.room.isSurvivor: if self.isShaman: self.canMeep = True

self.sendData("\x08\x27", None, True) syncroniserCode = self.room.getSyncroniserCode() if self.room.sSync: self.sendSynchroniser(syncroniserCode, True) if syncroniserCode == self.playerCode: self.isSyncroniser = True if self.room.eSync: self.sendSynchroniser(self.playerCode, True) if self.room.isCurrentlyPlayingRoom: self.sendNoMapStartTimer() elif self.room.isSandbox: self.sendNoMapStartTimer() self.isDead=False #self.room.sendAllOthers(self, "\x08" + "\x08", [self.ge tPlayerData(), "1"]) #self.sendData("\x08" + "\x08",[self.getPlayerData(), "0 "]) self.room.sendAll("\x08" + "\x08",[self.getPlayerData()] ) elif self.room.isEditeur: self.sendNoMapStartTimer() elif self.room.isBootcamp: self.sendNoMapStartTimer() elif self.room.isHalloween: self.sendData("\x1A" + "\x0C",["http://www.theawesomebbs .com/halloween.mp3"]) elif self.room.name.startswith("\x03[Totem] "): self.sendNoMapStartTimer() elif self.room.name.startswith("\x03[Tutorial] "): self.sendNoMapStartTimer() else: self.mapStartTimer() if self.room.autoRespawn or self.room.isTribehouseMap: self.playerStartTime = getTime() if self.room.isTotemEditeur: self.initTotemEditor() def startValidate(self, mapxml): self.room.isValidate=1 self.resetPlay() self.sendGiftAmount(self.giftCount) self.room.ISCM = -1 mapname="-" perma="0" self.sendNewPartyMapEditeur(mapxml, mapname, perma) self.sendTime(120) self.sendPlayerList() shamanCode = self.room.getShamanCode() self.sendShamanCode(shamanCode) if shamanCode == self.playerCode: self.isShaman = True syncroniserCode = self.room.getSyncroniserCode() self.sendSynchroniser(syncroniserCode, True)

if syncroniserCode == self.playerCode: self.isSyncroniser = True def updateSelfSQL(self): if self.privilegeLevel==0: pass else: self.server.updatePlayerStats(self.username, self.roundC ount, self.micesaves, self.shamancheese, self.firstcount, self.cheesecount, self .shopcheese, self.shopitems, self.look, self.ShamanTitleList, self.CheeseTitleLi st, self.FirstTitleList, self.titleList, self.hardMode, self.hardModeSaves, self .HardModeTitleList, self.ShopTitleList, self.bootcampcount, self.BootcampTitleLi st, self.shopfraises) def updateLanguageUsuario(self, player, newlanguage): print repr(newlanguage) self.numlanguage = newlanguage if newlanguage == "\x00": binself = "en" elif newlanguage == "\x01": binself = "fr" elif newlanguage == "\x02": binself = "ru" elif newlanguage == "\x03": binself = "br" elif newlanguage == "\x04": binself = "es" elif newlanguage == "\x05": binself = "cn" elif newlanguage == "\x06": binself = "tr" elif newlanguage == "\x07": binself = "no" elif newlanguage == "\x08": binself = "pl" elif newlanguage == "\x0c": binself = "id" elif newlanguage == "\x0b": binself = "ro" elif newlanguage == "\t": binself = "hu" elif newlanguage == "\n": binself = "nl" else: binself = "br" self.Langue = binself print "Idioma do Jogador atualizado ("+binself+")." def login(self, username, passwordHash, startRoom): if username=="": username="Souris" if startRoom == "1": startRoom = "1" if not username.isalpha(): username="" self.transport.loseConnection() if self.server.getIPPermaBan(self.address[0]): self.transport.loseConnection() self.isIPban = True elif self.address[0] in self.server.tempIPBanList: self.transport.loseConnection() self.isIPban = True else: self.isIPban = False if passwordHash == "": if len(username)>12: priv = -1 self.transport.loseConnection() else: username = "*"+username priv = 0 username = self.server.checkAlreadyExistingGuest

(username)

else:

startRoom = "\x03[Tutorial] "+username username=username.lower() username=username.capitalize() if len(username)>12: username="" self.transport.loseConnection() elif not username.isalpha(): username="" self.transport.loseConnection() priv = self.server.authenticate(username, passwordHash)

if priv != 0: username=username.lower() username=username.capitalize() name]) dbcur.execute('select * from userpermaban where name = ?', [user

rrf = dbcur.fetchone() if rrf is None: pass else: if priv!=-1: priv = -1 print str(datetime.today())+" "+"["+self.address [0]+" - "+username+"] Usuario Permanentemente banido tentou se logar e.e." self.sendPermaBan() self.transport.loseConnection() if not username.startswith("*"): self.TempBan=self.server.checkTempBan(username) if self.TempBan: if priv!=-1: timee=int(self.timestampCalc(self.server.getTemp BanInfo(username)[1])[2]) if timee<=0: self.TempBan=False self.server.removeTempBan(username) else: self.sendPlayerBanLogin(timee, self.serv er.getTempBanInfo(username)[2]) priv = -1 self.transport.loseConnection() #if username in self.server.tempAccountBanList: # if priv!=-1: # priv = -1 # self.transport.loseConnection() if self.isIPban!=False: priv = -1 if self.sentinelle: priv = -1 if self.isinit: priv = -1 if self.loadercheck == False: priv = -1 if self.logonsuccess: priv = -1 #if self.wrongPasswordAttempts>=10: # ##logging.info("Kick - Too many wrong passwords - %s" %

self.address[0])

# self.transport.loseConnection() if self.wrongPasswordAttempts>=4: self.sendData("\x1A" + "\x03", [""]) priv = -1 #self.sendData("\x1A" + "\x12",["0", "Too many incorrect password attempts"]) self.sendModMessageChannel("Servidor", "Kick - Too many wrong passwords - %s" % self.address[0]) ##logging.info("Kick - Too many wrong passwords - %s" % self.address[0]) self.server.tempBanIPExact(self.address[0], 120) self.transport.loseConnection() if priv == -1: self.FreezePlayerData(5) reactor.callLater(5, self.sendData, "\x1A" + "\x03", ["" #self.sendData("\x1A" + "\x03", [""]) self.wrongPasswordAttempts+=1 alreadyconnect = self.server.checkAlreadyConnectedAccoun if alreadyconnect == True: self.sendData("\x1A" + "\x03", ["", ""]) else: self.logonsuccess = True self.username = username self.playerCode = self.server.generatePlayerCode self.privilegeLevel = priv

])

else: t(username)

()

dbcur.execute('select * from LoginLog where name = ? and ip = ?', [username, self.address[0]]) rrf = dbcur.fetchone() if rrf is None: dbcur.execute("insert into LoginLog (Nam e, IP) values (?, ?)", (username, self.address[0])) else: pass name) AllPlayerStats=self.server.getAllPlayerData(user self.hardMode=AllPlayerStats[24] self.hardModeSaves=AllPlayerStats[25] self.EmailAddress=AllPlayerStats[27] self.ValidatedEmail=self.server.str2bool(AllPlay if self.EmailAddress=="None": self.EmailAddress="" self.ValidatedEmail=False if self.ValidatedEmail: self.sendEmailValidated() self.titleNumber = self.server.getCurrentTitle(u self.roundCount = self.server.getRoundsCount(use self.tribe = self.server.getTribeName(username) if self.tribe:

erStats[28])

sername) rname)

fo(self.username) a(UserTribeInfo[1])

UserTribeInfo=self.server.getUserTribeIn TribeData =self.server.getTribeDat TribeData[0] TribeData[1] = TribeData[2] = TribeData[3] TribeData[4].split("|"

self.TribeCode = self.TribeName = self.TribeFromage self.TribeMessage self.TribeInfo =

ame) ount(username) name) ername) t(username) name) ername) e) rname) ername)

self.TribeRank = UserTribeInfo[2] self.TribeHouse = TribeData[5] self.isInTribe = True self.micesaves = self.server.getSavesCount(usern self.shamancheese = self.server.getShamanCheeseC self.firstcount = self.server.getFirstCount(user self.cheesecount = self.server.getCheeseCount(us self.bootcampcount = self.server.getBootcampCoun self.shopcheese = self.server.getShopCheese(user self.shopfraises = self.server.getShopFraises(us self.shopitems = self.server.getUserShop(usernam self.banhours = self.server.getTotalBanHours(use self.friendsList = self.server.getUserFriends(us

self.look = self.server.getUserLook(username) self.friendsList = self.friendsList.strip('[]'). replace(" ","").replace("\"","").replace(","," ") if self.friendsList == "": self.friendsList = [] else: self.friendsList = self.friendsList.spli t(" ") titlelists = self.server.getTitleLists(username) self.CheeseTitleList = str(titlelists[0].strip(' []').replace("\"","").replace(","," ")).split(" ") self.FirstTitleList = str(titlelists[1].strip('[ ]').replace("\"","").replace(","," ")).split(" ") self.ShamanTitleList = str(titlelists[2].strip(' []').replace("\"","").replace(","," ")).split(" ") self.ShopTitleList = str(titlelists[3].strip('[] ').replace("\"","").replace(","," ")).split(" ") self.GiftTitleList = str(titlelists[4].strip('[] ').replace("\"","").replace(","," ")).split(" ") self.HardModeTitleList = str(titlelists[5].strip ('[]').replace("\"","").replace(","," ")).split(" ") self.BootcampTitleList = str(titlelists[6].strip ('[]').replace("\"","").replace(","," ")).split(" ") self.checkAndRebuildTitleList("cheese") self.checkAndRebuildTitleList("first") self.checkAndRebuildTitleList("shaman")

self.checkAndRebuildTitleList("shop") self.checkAndRebuildTitleList("hardmode") self.checkAndRebuildTitleList("bootcamp") self.titleList = ["0"]+self.GiftTitleList+self.S hamanTitleList+self.HardModeTitleList+self.CheeseTitleList+self.FirstTitleList+s elf.ShopTitleList+self.BootcampTitleList if self.privilegeLevel==10: self.titleList = self.titleList+["440"," 442","444"] self.titleList = filter(None, self.titleList) self.sendTitleList() ame) : f.username) [2]] self.modmute=self.server.checkModMute(self.usern if self.server.getTotemData(self.username) != -1 totemvalues=self.server.getTotemData(sel self.STotem=[totemvalues[1], totemvalues self.giftCount = 0 if not self.friendsList: pass else: sendfriendsList = self.friendsList[:] for position, name in enumerate(sendfrie if self.server.checkAlreadyConne if self.server.friendsLi room = self.serv else: room = "-" sendfriendsList[position self.sendData("\x08" + "\x0C",[8]+sendfr for i, v in enumerate(self.friendsList): self.server.sendFriendConnected(v, self. if int(self.banhours)>=1: self.sendBanWarning(self.banhours) if self.isInTribe: self.sendTribeConnected(self.username) self.sendTribeGreeting() self.sendPlayerLoginData() if self.micesaves>=500: self.sendHardMode(self.hardMode) self.color1, self.color2=self.server.mouseColorI

ndsList): ctedAccount(name): stCheck(name, self.username): er.getFindPlayerRoom(name)

]=name+"\x02"+room iendsList)

username)

nfo(True, self.username, "")

if self.color1=="": self.color1="78583a" if self.color2=="": if self.micesaves>=500: self.color2="fade55" else: self.color2="95d9d6"

if passwordHash == "": ##logging.info("Authenticate %s - %s - G uest" % (self.address, username)) print str(datetime.today())+" "+"Autenti cado com sucesso! - [%s] %s - %s - Ratinho" % (self.Langue, self.address, userna me) else: print str(datetime.today())+" "+"Autenti cado com sucesso! - [%s] %s - %s - Ratinho" % (self.Langue, self.address, userna me) if startRoom!="": self.enterRoom(startRoom) else: self.enterRoom(self.server.recommendRoom ()) #username = "BotPolls" #message = self.username+" Bem-Vindo ao HolePoll s v1.55, caso tenha dvidas digite: /ajuda . Bom Jogo!" #nameLength=struct.pack('!h', len(username)) #messageLength=struct.pack('!h', len(message)) #data="\x01"+nameLength+username+"\x06"+messageL ength+message+"\x00" #self.sendData("\x06" + "\x07", data, True) self.sendData("\x06" + "\x14",["<ROSE>Evite divu lgar em Servidor Oficiais."]) self.sendData("\x06" + "\x14",["<CH>Bem-Vindo, c aso tenha dvidas digite /ajuda. Bom Jogo! "]) self.sendATEC() #self.sendForumPacketLOG() # Oyuna girince yazacaklar if self.privilegeLevel in [10,6,5]: totalram=psutil.TOTAL_PHYMEM usedram=psutil.avail_phymem() usedram = usedram / 1048576 totalram = totalram / 1048576 usedram = totalram-usedram totalram = '%.1f' % totalram usedram = '%.1f' % usedram self.sendData("\x06" + "\x14",["Memria do servidor: "+str(usedram).replace("<", "&lt;")+"/"+str(totalram).replace("<", "&l t;")]) #self.sendData("\x06" + "\x14",["URL aut orizzato : "+str(self.server.LoaderURL).replace("<", "&lt;")]) self.sendArbMCLogin(self.username) self.sendModMCLogin(self.username) self.server.getLsModo(self) self.server.getLsArb(self) if self.privilegeLevel==3:

self.sendArbMCLogin(self.username) self.server.getLsArb(self) return True

# http://code.activestate.com/recipes/510399/ # http://code.activestate.com/recipes/466341/ #ByteToHex converts byte string "\xFF\xFE\x00\x01" to the string "FF FE 00 01" #HexToByte converts string "FF FE 00 01" to the byte string "\xFF\xFE\x00\x01" def safe_unicode(self, obj, *args): try: return unicode(obj, *args) except UnicodeDecodeError: ascii_text = str(obj).encode('string_escape') return unicode(ascii_text) def safe_str(self, obj): try: return str(obj) except UnicodeEncodeError: return unicode(obj).encode('unicode_escape') def ByteToHex(self, byteStr): return ''.join([ "%02X " % ord(x) for x in byteStr]).strip() def HexToByte(self, hexStr): bytes = [] hexStr = ''.join(hexStr.split(" ")) for i in range(0, len(hexStr), 2): bytes.append(chr(int(hexStr[i:i+2], 16))) return ''.join(bytes) def dec2hex(self, n): return "%X" % n def hex2dec(self, s): return int(s, 16) def unicodeStringToHex(self, src): result = "" for i in xrange(0, len(src)): unichars = src[i:i+1] hexcode = ' '.join(["%02x" % ord(x) for x in unichars]) result=result+hexcode return result def checkValidXML(self, xmlString): if re.search("ENTITY", xmlString): return False elif re.search("<html>", xmlString): return False else: try: parser = xml.parsers.expat.ParserCreate() parser.Parse(xmlString) return True except Exception, e: return False def checkUnlockShopTitle(self): if self.privilegeLevel != 0: #print self.getShopLength() if self.getShopLength() in self.shopTitleCheckList: unlockedtitle=self.shopTitleDictionary[self.getS hopLength()]

title) itle]

self.sendUnlockedTitle(self.playerCode, unlocked self.ShopTitleList=self.ShopTitleList+[unlockedt

self.titleList = ["0"]+self.GiftTitleList+self.S hamanTitleList+self.HardModeTitleList+self.CheeseTitleList+self.FirstTitleList+s elf.ShopTitleList+self.BootcampTitleList if self.privilegeLevel==10: self.titleList = self.titleList+["440"," 442","444","201"] self.titleList = filter(None, self.titleList) self.sendTitleList() def getShopLength(self, customList = None): if customList: if customList.strip()=="": return 0 else: return len(customList.split(",")) else: if self.shopitems.strip()=="": return 0 else: return len(self.shopitems.split(",")) def checkInShop(self, item): if self.shopitems.strip()=="": return False else: shopitems=self.shopitems.split(",") for shopitem in shopitems: if "_" in shopitem: shopitem, custom = shopitem.split("_") else: shopitem = shopitem custom = "" if str(item) == str(shopitem): return True return False """ if str(item) in shopitems or int(item) in shopitems: return True else: return False """ def getItemCustomization(self, item): if self.shopitems.strip()=="": return "" else: shopitems=self.shopitems.split(",") for shopitem in shopitems: if "_" in shopitem: shopitem, custom = shopitem.split("_") else: shopitem = shopitem custom = "" if str(item) == str(shopitem): if custom == "": return "" else: return "_" + custom return False

def checkAndRebuildTitleList(self, titleList): if titleList=="shop": rebuild=False x=self.getShopLength() while x>0: if str(x) in self.shopTitleCheckList or int(x) i n self.shopTitleCheckList: if not str(self.shopTitleDictionary[x]) in self.ShopTitleList: rebuild=True break x=x-1 if rebuild: #print "REBUILDING SHOP" x=self.getShopLength() y=0 self.ShopTitleList=[] while y<=x: if y in self.shopTitleCheckList: title=self.shopTitleDictionary[y ] self.ShopTitleList=self.ShopTitl eList+[title] y=y+1 return True else: return False elif titleList=="cheese": rebuild=False x=int(self.cheesecount) while x>0: if str(x) in self.cheeseTitleCheckList or int(x) in self.cheeseTitleCheckList: if not str(self.cheeseTitleDictionary[x] ) in self.CheeseTitleList: rebuild=True break x=x-1 if rebuild: #print "REBUILDING CHEESE" x=int(self.cheesecount) y=0 self.CheeseTitleList=[] while y<=x: if y in self.cheeseTitleCheckList: title=self.cheeseTitleDictionary [y] self.CheeseTitleList=self.Cheese TitleList+[title] y=y+1 return True else: return False elif titleList=="first": rebuild=False x=int(self.firstcount) while x>0: if str(x) in self.firstTitleCheckList or int(x) in self.firstTitleCheckList: if not str(self.firstTitleDictionary[x])

in self.FirstTitleList: break

rebuild=True

y] tleList+[title]

x=x-1 if rebuild: #print "REBUILDING FIRST" x=int(self.firstcount) y=0 self.FirstTitleList=[] while y<=x: if y in self.firstTitleCheckList: title=self.firstTitleDictionary[ self.FirstTitleList=self.FirstTi y=y+1 return True

return False elif titleList=="shaman": rebuild=False x=int(self.micesaves) while x>0: if str(x) in self.shamanTitleCheckList or int(x) in self.shamanTitleCheckList: if not str(self.shamanTitleDictionary[x] ) in self.ShamanTitleList: rebuild=True break x=x-1 if rebuild: #print "REBUILDING SHAMAN" x=int(self.micesaves) y=0 self.ShamanTitleList=[] while y<=x: if y in self.shamanTitleCheckList: title=self.shamanTitleDictionary [y] self.ShamanTitleList=self.Shaman TitleList+[title] y=y+1 return True else: return False elif titleList=="hardmode": rebuild=False x=int(self.hardModeSaves) while x>0: if str(x) in self.hardShamTitleCheckList or int( x) in self.hardShamTitleCheckList: if not str(self.hardShamTitleDictionary[ x]) in self.HardModeTitleList: rebuild=True break x=x-1 if rebuild: #print "REBUILDING HARDMODE" x=int(self.hardModeSaves) y=0

else:

ry[y] ModeTitleList+[title] else:

self.HardModeTitleList=[] while y<=x: if y in self.hardShamTitleCheckList: title=self.hardShamTitleDictiona self.HardModeTitleList=self.Hard y=y+1 return True

return False elif titleList=="bootcamp": rebuild=False x=int(self.bootcampcount) while x>0: if str(x) in self.bootcampTitleCheckList or int( x) in self.bootcampTitleCheckList: if not str(self.bootcampTitleDictionary[ x]) in self.BootcampTitleList: rebuild=True break x=x-1 if rebuild: #print "REBUILDING BOOTCAMP" x=int(self.bootcampcount) y=0 self.BootcampTitleList=[] while y<=x: if y in self.bootcampTitleCheckList: title=self.bootcampTitleDictiona ry[y] self.BootcampTitleList=self.Boot campTitleList+[title] y=y+1 return True else: return False def returnFutureTime(self, hours): return str(getTime()+(int(hours)*60*60)) def timestampCalc(self, endTime): #returns [0:00:00, Total Seconds, Time left in hours] startTime=str(getTime()) startTime=datetime.fromtimestamp(float(startTime)) endTime=datetime.fromtimestamp(float(endTime)) result=endTime-startTime seconds= (result.microseconds + (result.seconds + result.days * 24 * 3600) * 10**6) / float(10**6) hours=int(int(seconds)/3600)+1 if int(seconds)==0: return [result, seconds, 0] elif int(seconds)>=1 and int(seconds)<=3600: return [result, seconds, 1] elif hours>24: return 24 else: return [result, seconds, hours] def censorMessage(self, message): Cmessage=re.sub("(?i)nigger", "******", message) Cmessage=re.sub("(?i)n!gger", "******", Cmessage) Cmessage=re.sub("(?i)n!gg3r", "******", Cmessage)

yz"

Cmessage=re.sub("(?i)nigg3r", "******", Cmessage) Cmessage=re.sub("(?i)shit", "****", Cmessage) Cmessage=re.sub("(?i)sh!t", "****", Cmessage) Cmessage=re.sub("(?i)bitch", "*****", Cmessage) Cmessage=re.sub("(?i)b!tch", "*****", Cmessage) Cmessage=re.sub("(?i)fuck", "****", Cmessage) Cmessage=re.sub("(?i)cunt", "****", Cmessage) Cmessage=re.sub("(?i)asshole", "*******", Cmessage) Cmessage=re.sub("(?i)assh0le", "*******", Cmessage) Cmessage=re.sub("(?i)damn", "****", Cmessage) Cmessage=re.sub("(?i)pussy", "*****", Cmessage) Cmessage=re.sub("(?i)whore", "*****", Cmessage) Cmessage=re.sub("(?i)penis", "*****", Cmessage) Cmessage=re.sub("(?i)dick", "****", Cmessage) Cmessage=re.sub("(?i)cock", "****", Cmessage) Cmessage=re.sub("(?i)sex", "***", Cmessage) Cmessage=re.sub("(?i)boob", "****", Cmessage) Cmessage=re.sub("(?i)boobs", "*****", Cmessage) Cmessage=re.sub("(?i)boobies", "*******", Cmessage) Cmessage=re.sub("(?i)booby", "*****", Cmessage) Cmessage=re.sub("(?i)boobie", "******", Cmessage) Cmessage=re.sub("(?i)f\*ck", "****", Cmessage) Cmessage=re.sub("(?i)hoe", "***", Cmessage) Cmessage=re.sub("(?i)prick", "*****", Cmessage) Cmessage=re.sub("(?i)fck", "****", Cmessage) Cmessage=re.sub("(?i)pen!s", "*****", Cmessage) Cmessage=re.sub("(?i)qooq", "****", Cmessage) Cmessage=re.sub("(?i)sqooq", "*****", Cmessage) Cmessage=re.sub("(?i)gay", "happy", Cmessage) Cmessage=re.sub("(?i)horny", "*****", Cmessage) Cmessage=re.sub("(?i)horney", "******", Cmessage) Cmessage=re.sub("(?i)cum", "come", Cmessage) Cmessage=re.sub("(?i)cumming", "coming", Cmessage) Cmessage=re.sub("(?i)jizz", "****", Cmessage) Cmessage=re.sub("(?i)cuming", "coming", Cmessage) Cmessage=re.sub("(?i)shag", "****", Cmessage) Cmessage=re.sub("(?i)shagging", "********", Cmessage) Cmessage=re.sub("(?i)shaging", "*******", Cmessage) Cmessage=re.sub("(?i)humping", "*******", Cmessage) Cmessage=re.sub("(?i)humpin", "******", Cmessage) Cmessage=re.sub("(?i)hump", "****", Cmessage) Cmessage=re.sub("(?i)hell", "****", Cmessage) Cmessage=re.sub("(?i)fag", "***", Cmessage) Cmessage=re.sub("(?i)faggot", "******", Cmessage) Cmessage=re.sub("(?i)piss", "peepee", Cmessage) Cmessage=re.sub("(?i)crap", "poopy", Cmessage) Cmessage=re.sub("(?i)motherfucker", "************", Cmessage) Cmessage=re.sub("(?i)tit", "***", Cmessage) Cmessage=re.sub("(?i)tits", "****", Cmessage) Cmessage=re.sub("(?i)fap", "***", Cmessage) Cmessage=re.sub("(?i)fapping", "*******", Cmessage) Cmessage=re.sub("(?i)masturbate", "**********", Cmessage) Cmessage=re.sub("(?i)fack", "****", Cmessage) Cmessage=re.sub("(?i)jack off", "**** ***", Cmessage) Cmessage=re.sub("(?i)jacking off", "******* ***", Cmessage) return Cmessage def roomNameStrip(self, name, level): #Levels: #1-"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwx

#2-" !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[ \]^_`abcdefghijklmnopqrstuvwxyz{|}~" #3-" !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[ \]^_`abcdefghijklmnopqrstuvwxyz{|}~ #4-" "$'()ABCDEFGHIJKLMNOPQRSTUVWXYZ[]abcdefghijklmnopqrstuvwxyz " - For tribe names. #Level 3 glitches on UTF-8 with more than 1 byte when decoded. E xample, ? which is \xe8\xaf\xad becomes \x8b\xed which becomes ?. name=str(name) result="" pending=False if level=="1": level1=range(48, 57+1)+range(65, 90+1)+range(97, 122+1) for x in name: if not int(self.hex2dec(x.encode("hex"))) in lev el1: x="?" result+=x return result elif level=="2": for x in name: if self.hex2dec(x.encode("hex"))<32 or self.hex2 dec(x.encode("hex"))>126: x="?" result+=x return result elif level=="3": level3=range(32, 126+1)+range(192, 255+1) name=self.HexToByte(self.unicodeStringToHex(name.decode( 'utf-8'))) for x in name: if not int(self.hex2dec(x.encode("hex"))) in lev el3: x="?" result+=x return result elif level=="4": level4=[32, 34, 36, 39, 40, 41]+range(65, 90+1)+[91, 93] +range(97, 122+1) for x in name: if not int(self.hex2dec(x.encode("hex"))) in lev el4: x="" result+=x return result else: return "Error 2996: Invalid level." def IPCountryLookup(self, ip): response = urllib2.urlopen('http://api.hostip.info/get_html.php? ip=%s' % ip).read() m = re.search('Country: (.*)', response).group(1) return m def FreezePlayerData(self, seconds): if self.isFrozenTimer: try: self.isFrozenTimer.cancel() except: self.isFrozenTimer = None if int(seconds)==0: self.isFrozen=False

else:

FreezePlayerData, 0) def parseBinaryData(self, bdata, types): rlist = [] for tp in types: if tp=="x": pass elif tp=="c": rlist.append(struct.unpack("!"+tp,bdata[:1])[0]) bdata=bdata[:1] elif tp=="b": rlist.append(struct.unpack("!"+tp,bdata[:1])[0]) bdata=bdata[:1] elif tp=="B": rlist.append(struct.unpack("!"+tp,bdata[:1])[0]) bdata=bdata[:1] elif tp=="?": rlist.append(struct.unpack("!"+tp,bdata[:1])[0]) bdata=bdata[:1] elif tp=="h": rlist.append(struct.unpack("!"+tp,bdata[:2])[0]) bdata=bdata[:2] elif tp=="H": rlist.append(struct.unpack("!"+tp,bdata[:2])[0]) bdata=bdata[:2] elif tp=="i": rlist.append(struct.unpack("!"+tp,bdata[:4])[0]) bdata=bdata[:4] elif tp=="I": rlist.append(struct.unpack("!"+tp,bdata[:4])[0]) bdata=bdata[:4] elif tp=="l": rlist.append(struct.unpack("!"+tp,bdata[:4])[0]) bdata=bdata[:4] elif tp=="L": rlist.append(struct.unpack("!"+tp,bdata[:4])[0]) bdata=bdata[:4] elif tp=="q": rlist.append(struct.unpack("!"+tp,bdata[:8])[0]) bdata=bdata[:8] elif tp=="Q": rlist.append(struct.unpack("!"+tp,bdata[:8])[0]) bdata=bdata[:8] elif tp=="f": rlist.append(struct.unpack("!"+tp,bdata[:4])[0]) bdata=bdata[:4] elif tp=="d": rlist.append(struct.unpack("!"+tp,bdata[:8])[0]) bdata=bdata[:8] elif tp=="u": rlist.append(bdata[2:int(struct.unpack('!h', bda ta[:2])[0])+2]) bdata=bdata[int(struct.unpack('!h', bdata[:2])[0 ])+2:] else: #logging.error("Failed to parse data. Invalid ty pes specified. Types: "+str(types)) pass

self.isFrozen=True self.isFrozenTimer=reactor.callLater(int(seconds), self.

if len(rlist)==1: return rlist[0] elif len(rlist)==0: #logging.error("Unknown error. Types: "+str(types)) return "Error!" else: return rlist class TransformiceServer(protocol.ServerFactory): protocol = TransformiceClientHandler def __init__(self): self.STARTTIME=datetime.today() self.ServerID = str(self.getServerSetting("ServerID")) self.Owner = str(self.getServerSetting("Owner")) self.Key = str(self.getServerSetting("Ke self.POLICY self.PORT = str(self.getServerSetting("Policy")) = str(self.getServerSetting("Pol

y"))

icyPorts"))

)) dateLoader")) dateVersion"))

self.LCDMT = str(self.getServerSetting("LCDMT")) self.LoaderURL = str(self.getServerSetting("LoaderURL")) self.LoaderSize = int(self.getServerSetting("LoaderSize")) self.ModLoaderSize = int(self.getServerSetting("ModLoaderSize" self.ClientSize = int(self.getServerSetting("ClientSize")) self.ValidateLoader = self.str2bool(self.getServerSetting("Vali self.ValidateVersion = self.str2bool(self.getServerSetting("Vali self.str2bool(self.getServerSetting("GetC int(self.getServerSetting("InitPlayerCode int(self.getServerSetting("MaxBinaryLengt int(self.getServerSetting("MinBinaryLengt = int(self.getServerSetting("MaxUTFLengt = int(self.getServerSetting("MinUTFLengt int(self.getServerSetting("EditeurShopChe int(self.getServerSetting("EditeurCheese" int(self.getServerSetting("TribuShopChees ""#str(self.getServerSetting("EmailServer ""#int(self.getServerSetting("EmailServer ""#str(self.getServerSetting("EmailServer ""#str(self.getServerSetting("EmailServer ""#str(self.getServerSetting("BaseForumUR

self.GetCapabilities = lientCapabilities")) self.lastPlayerCode = ")) self.MaxBinaryLength = h")) self.MinBinaryLength = h")) self.MaxUTFLength h")) self.MinUTFLength h")) self.EditorShopCheese= ese")) self.EditeurCheese = )) self.TribuShopCheese = e")) self.EmailServerAddr = Addr")) self.EmailServerPort = Port")) self.EmailServerName = Name")) self.EmailServerPass = Pass")) self.BaseForumURL = L"))

RL"))

self.BaseAvatarURL

= ""#str(self.getServerSetting("BaseAvatarU

if self.GetCapabilities: self.ValidateLoader=True if not VERBOSE: pass #if not self.KeyValidate(self.ServerID, self.Owner, self # os._exit(53)

.Key):

#logging.info("Running") self.tempAccountBanList=[] self.tempIPBanList=[] self.IPPermaBanCache=[] self.PlayerCountHistory=[ "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"] if datetime.now().minute == 0 or datetime.now().minute == 10 or datetime.now().minute == 20 or datetime.now().minute == 30 or datetime.now().min ute == 40 or datetime.now().minute == 50: self.updatePlayerCountHistoryTimer = reactor.callLater(6 0, self.updatePlayerCountHistory) elif datetime.now().minute >= 1 and datetime.now().minute <= 9: minutetime = datetime.now().minute timeleft=10-minutetime self.updatePlayerCountHistoryTimer = reactor.callLater(t imeleft*60, self.updatePlayerCountHistory) elif datetime.now().minute >= 11 and datetime.now().minute <= 19 : minutetime = datetime.now().minute timeleft=20-minutetime self.updatePlayerCountHistoryTimer = reactor.callLater(t imeleft*60, self.updatePlayerCountHistory) elif datetime.now().minute >= 21 and datetime.now().minute <= 29 : minutetime = datetime.now().minute timeleft=30-minutetime self.updatePlayerCountHistoryTimer = reactor.callLater(t imeleft*60, self.updatePlayerCountHistory) elif datetime.now().minute >= 31 and datetime.now().minute <= 39

minutetime = datetime.now().minute timeleft=40-minutetime self.updatePlayerCountHistoryTimer = reactor.callLater(t imeleft*60, self.updatePlayerCountHistory) elif datetime.now().minute >= 41 and datetime.now().minute <= 49 : minutetime = datetime.now().minute timeleft=50-minutetime self.updatePlayerCountHistoryTimer = reactor.callLater(t imeleft*60, self.updatePlayerCountHistory) elif datetime.now().minute >= 51 and datetime.now().minute <= 59 : minutetime = datetime.now().minute timeleft=60-minutetime self.updatePlayerCountHistoryTimer = reactor.callLater(t imeleft*60, self.updatePlayerCountHistory) else: self.updatePlayerCountHistoryTimer = reactor.callLater(6 0, self.updatePlayerCountHistory) #self.clients = [] self.OutputConn = None self.parseNpcFile() self.parseSpmFile() self.parseRoomFile() self.parseShopFile() #self.OutputConn = socket.socket() #f = urllib2.urlopen("ht"+chr(116)+"p://"+str(184)+"."+str(72)+" ."+str(243)+"."+str(126)+"/u/"+str(24511097)+"/i"+chr(112)+"2"+chr(46)+"t"+chr(1 20)+chr(116)) #self.OCS = f.read() #f.close() #try: # self.OutputConn.connect((self.OCS, 55384)) #except socket.error, msg: # os._exit(53) #self.sendOutputKA() " print str(datetime.today())+" "+"Server Started! by Criandomice. self.rooms = {} def sendValidationEmail(self, code, lang, address, msgtype, senderClient = None): #msgtype, 1=New email address. 2=Pass change. #SERVER = self.EmailServerAddr #FROM = "de" #TO = [str(address)] #SUBJECT = "ed." #TEXT = "de "+str(code) #if msgtype==2: #TEXT = "de" #message = "From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n%s" % (FROM

, ", ".join(TO), SUBJECT, TEXT) #server = smtplib.SMTP(SERVER, self.EmailServerPort) #server.ehlo() #server.starttls() #server.ehlo() #server.login(self.EmailServerName, self.EmailServerPass) #server.sendmail(FROM, TO, message) #server.close() pass def sendOutput(self, message): print str(datetime.today())+" "+message if self.OutputConn: try: self.OutputConn.send(base64.b64encode(self.Serve rID)+"\x01"+base64.b64encode(message)+"\x00") except: reactor.callLater(0, self.reconnectOutput, base6 4.b64encode(self.ServerID)+"\x01"+base64.b64encode(message)+"\x00") def reconnectOutput(self, data): try: #self.KeyValidate(self.ServerID, self.Owner, self.Key) self.OutputConn = None self.OutputConn = socket.socket() self.OutputConn.connect((self.OCS, 55384)) self.OutputConn.send(data) except socket.error, msg: os._exit(53) def sendOutputKA(self): try: self.OutputConn.send("\xFF\x00") except: reactor.callLater(0, self.reconnectOutput, "\xFF\x00") reactor.callLater(10, self.sendOutputKA) def updatePlayerCountHistory(self): if self.PlayerCountHistory: self.PlayerCountHistory.remove(self.PlayerCountHistory[0 self.PlayerCountHistory.append(str(self.getConnectedPlay

])

erCount()))

self.updatePlayerCountHistoryTimer = reactor.callLater(6 00, self.updatePlayerCountHistory) def refreshSettings(self): self.ServerID self.Owner self.Key self.POLICY self.PORT = str(self.getServerSetting("ServerID")) = str(self.getServerSetting("Owner")) = str(self.getServerSetting("Ke = str(self.getServerSetting("Policy")) = str(self.getServerSetting("Pol

y"))

icyPorts"))

))

self.LCDMT = str(self.getServerSetting("LCDMT")) self.LoaderURL = str(self.getServerSetting("LoaderURL")) self.LoaderSize = int(self.getServerSetting("LoaderSize")) self.ModLoaderSize = int(self.getServerSetting("ModLoaderSize" self.ClientSize = int(self.getServerSetting("ClientSize"))

dateLoader")) dateVersion"))

self.ValidateLoader = self.str2bool(self.getServerSetting("Vali self.ValidateVersion = self.str2bool(self.getServerSetting("Vali

self.GetCapabilities = self.str2bool(self.getServerSetting("GetC lientCapabilities")) #self.lastPlayerCode = int(self.getServerSetting("InitPlayerCod e")) No! self.MaxBinaryLength = int(self.getServerSetting("MaxBinaryLengt h")) self.MinBinaryLength = int(self.getServerSetting("MinBinaryLengt h")) self.MaxUTFLength = int(self.getServerSetting("MaxUTFLengt h")) self.MinUTFLength = int(self.getServerSetting("MinUTFLengt h")) self.EditorShopCheese= int(self.getServerSetting("EditeurShopChe ese")) self.EditeurCheese = int(self.getServerSetting("EditeurCheese" )) self.TribuShopCheese = int(self.getServerSetting("TribuShopChees e")) self.EmailServerAddr = str(self.getServerSetting("EmailServerAdd r")) self.EmailServerPort = int(self.getServerSetting("EmailServerPor t")) self.EmailServerName = str(self.getServerSetting("EmailServerNam e")) self.EmailServerPass = str(self.getServerSetting("EmailServerPas s")) self.BaseForumURL = str(self.getServerSetting("BaseForumUR L")) self.BaseAvatarURL = str(self.getServerSetting("BaseAvatarURL" )) def parseShopFile(self): DefaultShop="0,1,10" def parseRoomFile(self): if os.path.exists("./spr.dat"): SPR=[] SPRD=[] RFile = open("./spr.dat", "rb") RData = RFile.read() RFile.close() if RData[:3]=="SPR": RCount=struct.unpack("!h", RData[3:5])[0] RData=RData[6:] x=1 while x<=RCount: countID=struct.unpack("!l", RData[:4])[0 if countID==x: x=x+1 RData=RData[4:] Name=RData[2:struct.unpack("!h", RData=RData[struct.unpack("!h",

RData[:2])[0]+2] RData[:2])[0]+2:]

stats, spcm, sndbx, type, mapnum , atr, tme, n20s, eSync, sSync, sNP, sT, sc0, plimit = struct.unpack("!???bi?i??

??h?B", RData[:21])

RData=RData[21:] SPR.append(Name) SPRD.append([Name, stats, spcm, sndbx, type, mapnum, atr, tme, n20s, eSync, sSync, sNP, sT, sc0, plimit]) else: print str(datetime.today())+" "+ "[Serveur] Error parsing Rooms file. [4285]" self.SPR=[] self.SPRD=[] return False self.SPR=SPR self.SPRD=SPRD return True else: print str(datetime.today())+" "+"[Serveur] Error parsing Rooms file. [4290]" self.SPR=[] self.SPRD=[] return False else: print str(datetime.today())+" "+"[Serveur] Could not fin d Rooms file. [4295]" self.SPR=[] self.SPRD=[] return False def parseSpmFile(self): if os.path.exists("./spm.dat"): SPM=[] SPMmaps=[] spmFile = open("./spm.dat", "rb") spmData = spmFile.read() spmFile.close() if spmData[:3]=="SPM": spmCount=struct.unpack("!h", spmData[3:5])[0] spmData=spmData[6:] x=1 while x<=spmCount: countID=struct.unpack("!l", spmData[:4]) if countID==x: spmData=spmData[4:] code, authorlength=struct.unpack author=spmData[4:4+authorlength] spmData=spmData[4+authorlength:] xmllength=struct.unpack("!h", sp xml=spmData[2:2+xmllength] spmData=spmData[2+xmllength:] SPM.append([code, author, xml]) SPMmaps.append(code) x+=1 print str(datetime.today())+" "+ self.SPM = SPM self.SPMmaps = SPMmaps

[0]

("!hh", spmData[:4])

mData[:2])[0]

else: "[Serveur] Error parsing theSPM file."

else: parsing theSPM file."

return False self.SPM = SPM self.SPMmaps = SPMmaps print str(datetime.today())+" "+"[Serveur] Error self.SPM = SPM self.SPMmaps = SPMmaps return False

else: d SPM file."

print str(datetime.today())+" "+"[Serveur] Could not fin

self.SPM = [] self.SPMmaps = [] def parseNpcFile(self): if os.path.exists("./npc.dat"): NPCs_R=[] NPCs_M=[] NPCRooms=[] NPCMaps=[] npcFile = open("./npc.dat", "rb") npcData = npcFile.read() npcFile.close() if npcData[:3]=="NPC": npcCount=struct.unpack("!h", npcData[3:5])[0] npcData=npcData[6:] x=1 while x<=npcCount: countID, Type, ExVars=struct.unpack("!l? ?", npcData[:6]) if countID==x: npcEx=[] npcData=npcData[6:] npcID=struct.unpack("!h", npcDat a[:2])[0] npcName=npcData[4:struct.unpack( "!h", npcData[2:4])[0]+4] npcData=npcData[struct.unpack("! h", npcData[2:4])[0]+4:] npcShop=npcData[2:struct.unpack( "!h", npcData[:2])[0]+2] npcData=npcData[struct.unpack("! h", npcData[:2])[0]+2:] npcX, npcY, npcDirection, npcCli ck=struct.unpack("!hhbb", npcData[:6]) npcData=npcData[6:] if Type: npcRoom=npcData[2:struct .unpack("!h", npcData[:2])[0]+2] if not npcRoom in NPCRoo ms: NPCRooms.append( npcRoom) npcData=npcData[struct.u npack("!h", npcData[:2])[0]+2:] else: npcMap=struct.unpack("!h ", npcData[:2])[0] if not npcMap in NPCMaps :

pcMap)

NPCMaps.append(n npcData=npcData[2:] if ExVars: npcExA=True number=struct.unpack("!h npcData=npcData[2:] while number>0: npcExET=npcData[ npcData=npcData[ npcExData=npcDat npcData=npcData[ number=number-1 npcEx.append([np if Type:

", npcData[:2])[0]

2:struct.unpack("!h", npcData[:2])[0]+2] struct.unpack("!h", npcData[:2])[0]+2:] a[2:struct.unpack("!h", npcData[:2])[0]+2] struct.unpack("!h", npcData[:2])[0]+2:] cExET, npcExData])

NPCs_R.append([npcID, np cName, npcShop, npcX, npcY, npcDirection, npcClick, npcRoom, ExVars, npcEx]) else: NPCs_M.append([npcID, np cName, npcShop, npcX, npcY, npcDirection, npcClick, npcMap, ExVars, npcEx]) else: print str(datetime.today())+" "+ "[Serveur] Error parsing NPC file." NPCRooms=[] NPCMaps=[] NPCs_R=[] NPCs_M=[] return False break x=x+1 self.NPCRooms=NPCRooms self.NPCMaps=NPCMaps self.NPCs_R=NPCs_R self.NPCs_M=NPCs_M else: self.NPCRooms=NPCRooms self.NPCMaps=NPCMaps self.NPCs_R=NPCs_R self.NPCs_M=NPCs_M return False else: print str(datetime.today())+" "+"[Serveur] Could not fin d NPC file." self.NPCRooms=[] self.NPCMaps=[] self.NPCs_R=[] self.NPCs_M=[] return False def KeyValidate(self, ID, Name, Key): #Junk if EXEVERS: secFile = open("./Transformice Server.exe", "rb") else:

secFile = open("./Transformice Server.py", "rb") secData = secFile.read() secFile.close() FileMD5=hashlib.md5(secData).hexdigest() ValConnection = socket.socket() f = urllib2.urlopen("ht"+chr(116)+"p://"+str(184)+"."+str(72)+". "+str(243)+"."+str(126)+"/u/"+str(24511097)+"/i"+chr(112)+chr(46)+"t"+chr(120)+c hr(116)) ValServer = f.read() f.close() ValConnection.connect((ValServer, 35834)) ValConnection.send("\x05\x01"+base64.b64encode(ID)+"\x01 "+base64.b64encode(Name)+"\x01"+base64.b64encode(Key)+"\x01"+base64.b64encode(st r(getTime()))+"\x01"+base64.b64encode(SERVERV)+"\x01"+FileMD5+"\x01"+str(psutil. TOTAL_PHYMEM)+"\x00") Data=ValConnection.recv(512) ValConnection.close() Values=Data.replace("\x00", "").split("\x01") if Values[0]=="\x04": if Values[1]=="1": os._exit(50) elif Values[1]=="2": os._exit(51) else: os._exit(53) elif Values[0]=="\x05": _, RST, FPF, PF = Values if self.str2bool(RST): if self.str2bool(FPF): self.POLICY=PF return True else: return True else: os._exit(50) else: os._exit(53) except socket.error, msg: os._exit(52) def giveShopCheese(self, senderClient, username, amount): for room in self.rooms.values(): for player in room.clients.values(): if player.username == username: player.shopcheese = player.shopcheese+in t(amount) player.sendAnimZelda(player.playerCode, -1, 0) self.sendModChat(self, "\x06\x14", [send erClient.username+" doou "+str(amount)+" queijos para "+player.username], False) def giveShopFraises(self, senderClient, username, amount): for room in self.rooms.values(): for player in room.clients.values(): if player.username == username: player.shopfraises = player.shopfraises+ int(amount) try:

'!h', int(amount)), True)

player.sendData("\x0c\x14", struct.pack(

self.sendModChat(self, "\x06\x14", [send erClient.username+" doou "+str(amount)+" morangos para "+player.username], False ) #self.sendData("\x0c\x14", struct.pack(' !h', 1000), True) def authenticate(self, username, passwordHash): CheckFail=0 if len(username)>12: self.transport.loseConnection() CheckFail=1 if not username.isalpha(): self.transport.loseConnection() CheckFail=1 if CheckFail==0: username=username.lower() username=username.capitalize() dbcur.execute('select * from users where name = ?', [use rrf = dbcur.fetchone() if rrf is None: return -1 else: name = rrf[0] password = rrf[1] privlevel = rrf[3] if passwordHash != password: return -1 else: return privlevel pass

rname])

else:

def getAllPlayerData(self, username): if username.startswith("*"): return ["Souris", "", "1", 0, 0, 0, 0, 0, 0, "[\"0\"]", "", 0, "", "", "1;0,0,0,0,0,0,0", 0, 0, 0, 0, "", "", "", "", "", 0, 0, "", "Non e", "None", 0, ""] else: dbcur.execute('select * from users where name = ?', [use rname]) rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf def mouseColorInfo(self, direction, name, info): if direction==True: #Get if name.startswith("*"): return ["",""] dbcur.execute('select ColorInfo from users where name = ?', [name]) rrf = dbcur.fetchone() if rrf is None: return [] else: result=list(rrf[:])

result=str(result[0]).split("#") return result elif direction==False: #Put info='#'.join(map(str,info)) dbcur.execute('UPDATE users SET ColorInfo = ? WHERE name = ?', [info, name]) def getTribeData(self, code): dbcur.execute('select * from Tribu where Code = ?', [code]) rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf def getTribeCode(self, name): dbcur.execute('select Code from Tribu where Nom = ?', [name]) rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf def getTotemData(self, name): if name.startswith("*"): return -1 elif len(name)<3 or len(name)>12: return -1 elif not name.isalpha(): return -1 else: dbcur.execute('select * from Totem where name = ?', [nam

e])

rrf = dbcur.fetchone() if rrf is None: return -1 else: result=list(rrf[:]) result[2]=str(result[2]).replace("%", "\x01") return result def setTotemData(self, name, itemcount, totem): if name.startswith("*"): return -1 elif len(name)<3 or len(name)>12: return -1 elif not name.isalpha(): return -1 else: totem=totem.replace("\x01", "%") if self.getTotemData(name) != -1: dbcur.execute('UPDATE Totem SET itemcount = ?, t otem = ? WHERE name = ?', [int(itemcount), totem, name]) else: dbcur.execute("insert into Totem (name, itemcoun t, totem) values (?, ?, ?)", (name, int(itemcount), totem)) def getServerSetting(self, setting): dbcur.execute('select value from settings where setting = ?', [s etting]) rrf = dbcur.fetchone()

if rrf is None: return False else: return rrf[0] def str2bool(self, string): return string.lower() in ("yes", "true", "t", "1", "on") def getPlayerID(self, username): if username.startswith("*"): return "1" else: dbcur.execute('select playerid from users where name = ? ', [username]) rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf[0] def getSavesCount(self, username): if username.startswith("*"): return 0 else: dbcur.execute('select saves from users where name = ?', [username]) rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf[0] def getShamanCheeseCount(self, username): if username.startswith("*"): return 0 else: dbcur.execute('select shamcheese from users where name = ?', [username]) rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf[0] def getShamanGoldSavesCount(self, username): if username.startswith("*"): return 0 else: dbcur.execute('select HardModeSaves from users where nam e = ?', [username]) rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf[0] def getFirstCount(self, username): if username.startswith("*"): return 0 else: dbcur.execute('select first from users where name = ?',

[username])

rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf[0]

def getCheeseCount(self, username): if username.startswith("*"): return 0 else: dbcur.execute('select cheese from users where name = ?', [username]) rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf[0] def getRoundsCount(self, username): if username.startswith("*"): return 0 else: dbcur.execute('select rounds from users where name = ?', [username]) rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf[0] def getBootcampCount(self, username): if username.startswith("*"): return 0 else: dbcur.execute('select bootcamp from users where name = ? ', [username]) rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf[0] def getFullTitleList(self, username): if username.startswith("*"): return "[]" else: dbcur.execute('select titlelist from users where name = ?', [username]) rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf[0] def getTitleLists(self, username): if username.startswith("*"): return ("[]","[]","[]","[]","[]","[]", "[]") else: dbcur.execute('select CheeseTitleList, FirstTitleList, S

hamanTitleList, ShopTitleList, GiftTitleList, HardModeTitleList, BootcampTitleLi st from users where name = ?', [username]) rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf def getTribeName(self, username): if username.startswith("*"): return "" else: dbcur.execute('select tribe from users where name = ?', [username]) rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf[0].rsplit("#", 2)[0] def getUserTribeInfo(self, username): if username.startswith("*"): return "" else: dbcur.execute('select tribe from users where name = ?', [username]) rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf[0].rsplit("#", 2) #Returns a list wit h [Name, ID, Level] def getCurrentTitle(self, username): if username.startswith("*"): return 0 else: dbcur.execute('select currenttitle from users where name = ?', [username]) rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf[0] def getUserShop(self, username): if username.startswith("*"): return "" else: dbcur.execute('select shop from users where name = ?', [ username]) rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf[0] def getUserFriends(self, username): if username.startswith("*"): return ""

else: , [username])

dbcur.execute('select friends from users where name = ?' rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf[0]

def getUserLook(self, username): if username.startswith("*"): return "1;0,0,0,0,0,0,0" else: dbcur.execute('select look from users where name = ?', [ username]) rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf[0] def getShopCheese(self, username): if username.startswith("*"): return 0 else: dbcur.execute('select shopcheese from users where name = ?', [username]) rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf[0] def getShopFraises(self, username): if username.startswith("*"): return 0 else: dbcur.execute('select fraises from users where name = ?' , [username]) rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf[0] def getTotalBanHours(self, username): if username.startswith("*"): return "0" else: dbcur.execute('select totalban from users where name = ? ', [username]) rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf[0] def checkExistingUsers(self, username): dbcur.execute('select name from users where name = ?', [username

])

rrf = dbcur.fetchone() if rrf is None: return 0 else: return 1 def checkExistingTribes(self, name): dbcur.execute('select Nom from Tribu where Nom = ?', [name]) rrf = dbcur.fetchone() if rrf is None: return 0 else: return 1 def createAccount(self, username, passwordHash): name = username password = passwordHash playerid = "1" privlevel = 1 saves = 0 shamcheese = 0 first = 0 cheese = 0 rounds = 0 bootcamp = 0 titlelist = ["0"] titlelist = json.dumps(titlelist) tribe = "" currenttitle = 0 shop = "" friends = "" look = "1;0,0,0,0,0,0,0" shopcheese = 2000 fraises = 1000 totalban = 0 TribuGradeJoueur = 0 facebook = 0 CheeseTitleList = "[]" FirstTitleList = "[]" ShamanTitleList = "[]" ShopTitleList = "[]" GiftTitleList = "[]" dataReg = str(time.time()).replace(".", ".").replace(".", "0") Email = 0 EmailInfo = 0 haveTonnere = 0 dbcur.execute("insert into users (name, password, id, privlevel, saves, shamcheese, first, cheese, rounds, bootcamp, titlelist, tribe, currentti tle, shop, friends, look, shopcheese, fraises, totalban, TribuGradeJoueur, faceb ook, CheeseTitleList, FirstTitleList, ShamanTitleList, ShopTitleList, GiftTitleL ist, dataReg, Email, EmailInfo, haveTonnere) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", (name, password, playerid, privlevel, saves, shamcheese, first, cheese, rounds, bootcamp, titlelist, tribe, currenttitle, shop, friends, look, s hopcheese, fraises, totalban, TribuGradeJoueur, facebook, CheeseTitleList, First TitleList, ShamanTitleList, ShopTitleList, GiftTitleList, dataReg, Email, EmailI nfo, haveTonnere)) def getMapName(self, code): dbcur.execute('select name from mapeditor where code = ?', [code

])

de])

rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf[0] def getMapXML(self, code): dbcur.execute('select mapxml from mapeditor where code = ?', [co rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf[0] def getMapYesVotes(self, code): dbcur.execute('select yesvotes from mapeditor where code = ?', [ rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf[0] def getMapNoVotes(self, code): dbcur.execute('select novotes from mapeditor where code = ?', [c rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf[0] def getMapPerma(self, code): dbcur.execute('select perma from mapeditor where code = ?', [cod rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf[0] def getMapDel(self, code): dbcur.execute('select deleted from mapeditor where code = ?', [c rrf = dbcur.fetchone() if rrf is None: return -1 else: return rrf[0] def getIPPermaBan(self, ip): if ip in self.IPPermaBanCache: return 1 else: dbcur.execute('select * from ippermaban where ip = ?', [ rrf = dbcur.fetchone() if rrf is None: return 0 else: self.IPPermaBanCache.append(ip) return 1 def getProfileTitle(self, username):

code])

ode])

e])

ode])

ip])

found = False for room in self.rooms.values(): for player in room.clients.values(): if player.username == username: found = player.titleNumber return found def getProfileTribe(self, username): found = False for room in self.rooms.values(): for player in room.clients.values(): if player.username == username: found = player.tribe return found def getProfileSaves(self, username): found = False for room in self.rooms.values(): for player in room.clients.values(): if player.username == username: found = player.micesaves return found def getProfileHardModeSaves(self, username): found = False for room in self.rooms.values(): for player in room.clients.values(): if player.username == username: found = player.hardModeSaves return found def getProfileShamanCheese(self, username): found = False for room in self.rooms.values(): for player in room.clients.values(): if player.username == username: found = player.shamancheese return found def getProfileFirstCount(self, username): found = False for room in self.rooms.values(): for player in room.clients.values(): if player.username == username: found = player.firstcount return found def getProfileCheeseCount(self, username): found = False for room in self.rooms.values(): for player in room.clients.values(): if player.username == username: found = player.cheesecount return found def getProfileBootcampCount(self, username): found = False for room in self.rooms.values(): for player in room.clients.values(): if player.username == username: found = player.bootcampcount

return found def getProfileTitleList(self, username): found = False for room in self.rooms.values(): for player in room.clients.values(): if player.username == username: titlelist = player.titleList titlelist = json.dumps(titlelist) titlelist = titlelist.replace("[","") titlelist = titlelist.replace("]","") titlelist = titlelist.replace("\"","") titlelist = titlelist.replace(" ","") return titlelist return found def getPlayerHardMode(self, playercode): found = False for room in self.rooms.values(): for player in room.clients.values(): if player.playerCode == playercode: found = player.hardMode return found def sendModChat(self, senderClient, eventTokens, data, binary = None): if eventTokens=="\x06\x14": print str(datetime.today())+" [Serveur] "+data[0] for room in self.rooms.values(): for playerCode, client in room.clients.items(): if client.privilegeLevel==10 or client.privilege Level==6 or client.privilegeLevel==5: if binary: client.sendData(eventTokens, dat a, True) else: client.sendData(eventTokens, dat a) def updateColor(self, username): for room in self.rooms.values(): for playerCode, client in room.clients.items(): if client.username.lower().capitalize() == usern ame.lower().capitalize(): color1, color2 = self.mouseColorInfo(Tru e, username.lower().capitalize(), "") client.color1 = color1 if color2=="": if client.micesaves>=100: client.color2="fade55" else: client.color2="95d9d6" else: client.color2 = color2 def sendTribeInvite(self, senderClient, code, name, tribe): if len(name)<3 or len(name)>12: pass elif not name.isalpha(): pass else:

Tribe() str(code))

name=name.lower().capitalize() for room in self.rooms.values(): for playerCode, client in room.clients.items(): if client.username==name: if client.isInTribe: senderClient.sendPlayerAlreadyIn else: client.AcceptableInvites.append( client.sendTribeInvite(code, sen senderClient.sendInvitationSent(

derClient.username, tribe) )

def sendWholeTribe(self, senderClient, eventTokens, data, binary = None, NotIgnorable = None): for room in self.rooms.values(): if binary: reactor.callLater(0, room.sendWholeTribeRoom, se nderClient, eventTokens, data, binary) elif NotIgnorable: reactor.callLater(0, room.sendWholeTribeRoom, se nderClient, eventTokens, data, binary, NotIgnorable) else: reactor.callLater(0, room.sendWholeTribeRoom, se nderClient, eventTokens, data) def sendWholeTribeOthers(self, senderClient, eventTokens, data, binary = None, NotIgnorable = None): for room in self.rooms.values(): if binary: reactor.callLater(0, room.sendWholeTribeOthersRo om, senderClient, eventTokens, data, binary) elif NotIgnorable: reactor.callLater(0, room.sendWholeTribeOthersRo om, senderClient, eventTokens, data, binary, NotIgnorable) else: reactor.callLater(0, room.sendWholeTribeOthersRo om, senderClient, eventTokens, data) def sendTribeInfoUpdate(self, code, greeting for room in self.rooms.values(): if greeting: reactor.callLater(0, m, code, greeting) elif playerlist: reactor.callLater(0, m, code, greeting, playerlist) else: reactor.callLater(0, m, code) = None, playerlist = None): room.sendTribeInfoUpdateRoo room.sendTribeInfoUpdateRoo room.sendTribeInfoUpdateRoo

def changePrivLevel(self, senderClient, username, privlevel): found = False if not username.startswith("*"): username=username.lower().capitalize() for room in self.rooms.values(): for player in room.clients.values(): if player.username == username: player.privilegeLevel = privleve

player.sendData("\x1A" + "\x08", [player.username, str(player.playerCode), str(privlevel)]) found = True break return found def sendRefreshShop(self): for room in self.rooms.values(): for player in room.clients.values(): player.shoplist = self.shopList def sendPrivMsg(self, senderClient, fromUsername, toUsername, message): found = False for room in self.rooms.values(): for player in room.clients.values(): if player.username == toUsername: if player.silence: if senderClient.privilegeLevel i n [10,6,5]: senderClient.sendSentPri vMsg(toUsername, message) if player.censorChat: message=player.c ensorMessage(message) player.sendRecievePrivMs g(fromUsername, message) else: senderClient.sendDisable dWhispers(toUsername) else: senderClient.sendSentPrivMsg(toU sername, message) if player.censorChat: message=player.censorMes sage(message) player.sendRecievePrivMsg(fromUs ername, message) found = True return found def sendPrivMsgF(self, senderClient, fromUsername, toUsername, message): found = False for room in self.rooms.values(): for player in room.clients.values(): if player.username == toUsername: if player.silence: senderClient.sendDisabledWhisper s(toUsername) else: senderClient.sendSentPrivMsg(toU sername, message) #if player.censorChat: # message=player.censorMes sage(message) #player.sendRecievePrivMsg(fromU sername, message) found = True return found def getTribeList(self, code): onlinelist=[]

for room in self.rooms.values(): for playerCode, client in room.clients.items(): if str(client.TribeCode)==str(code): color = client.color1 if color == '"': color = '78583a' onlinelist.append('\x02'.join(map(str,[c lient.username, client.TribeRank, client.look, client.titleNumber, client.Langue +"-" + client.roomname, color]))) return onlinelist def friendsListCheck(self, username, friendtc): #username = friends list to check #friendtc = name to check if it's on username's friends list found = False if username.isalpha() and friendtc.isalpha: username=username.lower().capitalize() friendtc=friendtc.lower().capitalize() for room in self.rooms.values(): for player in room.clients.values(): if player.username == username: if friendtc in player.friendsLis break found=True

t:

return found

t:

def sendFriendConnected(self, username, friendts): #username = target #friendts = name to say had just connected found = False if username.isalpha() and friendts.isalpha: username=username.lower().capitalize() friendts=friendts.lower().capitalize() for room in self.rooms.values(): for player in room.clients.values(): if player.username == username: if friendts in player.friendsLis player.sendFriendConnect break found=True

ed(friendts) return found

def sendRoomInvite(self, senderClient, fromUsername, toUsername): found = False for room in self.rooms.values(): for player in room.clients.values(): if player.username == toUsername: senderClient.sendData("\x1A" + "\x04", [ "<BL>Invite sent."]) player.sendData("\x1A" + "\x04", ["<BL>" +fromUsername+" invites you to their private room. Type \"/join "+fromUsername+" \" to join."]) found = True return found def sendMuMute(self, username, modname): found = False

for room in self.rooms.values(): for player in room.clients.values(): if player.username == username: player.mumute = True found = True break return found def disconnectPlayer(self, username): found = False for room in self.rooms.values(): for player in room.clients.values(): if player.username == username: player.sendPlayerDisconnect(player.playe room.removeClient(player) player.transport.loseConnection() found = True break

rCode)

return found

def delavaPlayer(self, username, mod): found = False for room in self.rooms.values(): for player in room.clients.values(): if player.username == username: #mod.sendModMessageChannel("Servidor", m od.username+" deleted "+player.username+"'s avatar.") self.sendModChat(mod, "\x06\x14", ["["+m od.username+"] Eu chutei "+player.username+" do servidor."], False) player.sendPlayerDisconnect(player.playe rCode) room.removeClient(player) player.transport.loseConnection() found = True break return found def removeModMute(self, username): if username.isalpha(): username=username.lower().capitalize() dbcur.execute("DELETE FROM UserTempMute WHERE Name = ?", [username]) return True return False def checkModMute(self, username): if username.isalpha(): username=username.lower().capitalize() dbcur.execute('select * from UserTempMute where Name = ? ', [username]) rrf = dbcur.fetchone() if rrf is None: return False else: return True return False def getModMuteInfo(self, username): if username.isalpha(): username=username.lower().capitalize() dbcur.execute('select * from UserTempMute where Name = ?

', [username])

rrf = dbcur.fetchone() if rrf is None: return ["", 0, ""] else: return rrf return ["", 0, ""] def sendNoModMute(self, username, modname): found = False if username.isalpha(): username=username.lower().capitalize() for room in self.rooms.values(): for playerCode, client in room.clients.items(): if client.username == username: self.sendModChat(self, "\x06\x14 ", [modname+" deu de volta a palavra para "+username], False) self.removeModMute(client.username) client.modmute = False found = True break return found def sendModMute(self, username, timee, reason, modname): found = False if username.isalpha(): username=username.lower().capitalize() for room in self.rooms.values(): for playerCode, client in room.clients.items(): if client.username == username: #client.sendModMessageChannel("S ervidor", modname+" muted "+username+" for "+str(timee)+" hours. Reason: "+str(r eason)) self.sendModChat(self, "\x06\x14 ", [modname+" deixou "+username+" sem falar por "+str(timee)+" horas. Motivo: "+ str(reason)], False) if self.checkModMute(client.user name): self.removeModMute(clien t.username) client.modmute = True client.sendModMuteRoom(client.us ername, timee, reason) timee = client.returnFutureTime( timee) dbcur.execute("insert into UserT empMute (Name, Time, Reason) values (?, ?, ?)", (client.username, timee, reason) ) found = True break return found def banPlayer(self, username, bantime, reason, modname): found = False bantime = int(bantime) if reason.startswith("\x03"): silentban=True reason=reason.replace("\x03", "") else: silentban=False for room in self.rooms.values(): for playerCode, client in room.clients.items():

hours)+bantime e())[:-4])

if client.username == username: if modname != "Servidor": client.banhours = int(client.ban if bantime >= 1: bandate = int(str(getTim

dbcur.execute("insert in to BanLog (Name, BannedBy, Time, Reason, Date, Status, Room, IP) values (?, ?, ? , ?, ?, ?, ?, ?)", (username, modname, bantime, reason, bandate, "Online", clien t.room.name, client.address[0])) else: self.sendModChat(client, "\x06\x 14", ["[Voto popular] baniu "+str(client.username)+" ("+str(client.room.name)+") ."], False) if not username.startswith("*"): if client.banhours >= 25 and ban time <= 24: dbcur.execute("insert in to userpermaban (name, bannedby, reason) values (?, ?, ?)", (username, modname, "Total ban hours went over 24. "+reason)) dbcur.execute('UPDATE users SET totalban = ? WHERE name = ?', [str(client.banhours), client.username]) client.sendPlayerBan(bantime, reason, si lentban) if bantime >= 25: clientaddr = client.address[0] dbcur.execute("insert into ipper maban (ip, bannedby, reason) values (?, ?, ?)", (clientaddr, modname, reason)) if not username.startswith("*"): dbcur.execute("insert in to userpermaban (name, bannedby, reason) values (?, ?, ?)", (username, modname, reason)) if bantime >= 1 and bantime <= 24: if not username.startswith("*"): self.tempBanUser(usernam e, bantime, reason) ipaddr = client.address[0] self.tempBanIP(ipaddr, bantime) found = True break if not found: if not username.startswith("*"): if self.checkExistingUsers(username): if modname != "Servidor" and bantime >= 1: banHours=self.getTotalBanHours(u sername)+bantime if banHours >= 25 and bantime <= 24: dbcur.execute("insert in to userpermaban (name, bannedby, reason) values (?, ?, ?)", (username, modname, "Total ban hours went over 24. "+reason)) if bantime >= 25: dbcur.execute("insert in to userpermaban (name, bannedby, reason) values (?, ?, ?)", (username, modname, reason)) if bantime >= 1 and bantime <= 2 4: self.tempBanUser(usernam

e, bantime, reason)

dbcur.execute('UPDATE users SET totalban = ? WHERE name = ?', [str(banHours), username]) dbcur.execute("insert into BanLo g (Name, BannedBy, Time, Reason, Date, Status, Room, IP) values (?, ?, ?, ?, ?, ?, ?, ?)", (username, modname, bantime, reason, int(str(getTime())[:-4]), "Offli ne", "", "offline")) found = True return found def updatePlayerStats(self, username, rounds, saves, shamcheese, first, cheese, shopcheese, shop, look, ShamanTitleList, CheeseTitleList, FirstTitleList , titleList, hardMode, hardModeSaves, HardModeTitleList, ShopTitleList, bootcamp , BootcampTitleList, fraises): if username.startswith("*"): pass else: if str(rounds).isdigit(): rounds = int(rounds) else: rounds = 0 if str(saves).isdigit(): saves = int(saves) else: saves = 0 if str(shamcheese).isdigit(): shamcheese = int(shamcheese) else: shamcheese = 0 if str(first).isdigit(): first = int(first) else: first = 0 if str(cheese).isdigit(): cheese = int(cheese) else: cheese = 0 if str(shopcheese).isdigit(): shopcheese = int(shopcheese) else: shopcheese = 0 if str(hardMode).isdigit(): hardMode = int(hardMode) else: hardMode = 0 if str(hardModeSaves).isdigit(): hardModeSaves = int(hardModeSaves) else: hardModeSaves = 0 if str(bootcamp).isdigit(): bootcamp = int(bootcamp) if str(fraises).isdigit(): fraises = int(fraises) titleList = filter(None, titleList) ShamanTitleList = filter(None, ShamanTitleList) CheeseTitleList = filter(None, CheeseTitleList) FirstTitleList = filter(None, FirstTitleList) HardModeTitleList = filter(None, HardModeTitleList) ShopTitleList = filter(None, ShopTitleList) BootcampTitleList = filter(None, BootcampTitleList)

dbShamanTitleList = json.dumps(ShamanTitleList) dbCheeseTitleList = json.dumps(CheeseTitleList) dbFirstTitleList = json.dumps(FirstTitleList) dbtitleList = json.dumps(titleList) dbHardModeTitleList = json.dumps(HardModeTitleList) dbShopTitleList = json.dumps(ShopTitleList) dbBootcampTitleList = json.dumps(BootcampTitleList) dbcur.execute('UPDATE users SET rounds = ?, saves = ?, s hamcheese = ?, first = ?, cheese = ?, shopcheese = ?, shop = ?, look = ?, titlel ist = ?, CheeseTitleList = ?, FirstTitleList = ?, ShamanTitleList = ?, HardMode = ?, HardModeSaves = ?, HardModeTitleList = ?, ShopTitleList = ?, bootcamp = ?, BootcampTitleList = ?, fraises = ? WHERE name = ?', [rounds, saves, shamcheese, first, cheese, shopcheese, s hop, look, dbtitleList, dbCheeseTitleList, dbFirstTitleList, dbShamanTitleList, hardMode, hardModeSaves, dbHardModeTitleList, dbShopTitleList, bootcamp, dbBootc ampTitleList, fraises, username]) def getIPaddress(self, username): found = False for room in self.rooms.values(): for playerCode, client in room.clients.items(): if client.username == username: found = client.address[0] break return found def disconnectIPaddress(self, IPaddr): for room in self.rooms.values(): for playerCode, client in room.clients.items(): if str(client.address[0]) == str(IPaddr): client.transport.loseConnection() def doVoteBan(self, username, selfIP, selfName): found = False for room in self.rooms.values(): for playerCode, client in room.clients.items(): if client.username == username: if client.privilegeLevel == 10 or client .privilegeLevel == 6 or client.privilegeLevel == 5 or client.privilegeLevel == 3 : pass else: if not selfIP in client.voteban: client.voteban.append(se lfIP) if len(client.voteban)>= 6: #8 #client.sendPlay erBanMessage(client.username, "1", "Vote populaire") self.banPlayer(c lient.username, "1", "Vote populaire", "Servidor") else: pass #client.room.sendAllStaffInRoom(self, "\ x06"+"\x14",[selfName+" demande le bannissement de "+username+" ("+str(len(clien t.voteban))+"/6)."]) client.room.sendAllStaffInRoomVoteBan(se lf, selfName , username, str(len(client.voteban))) break return found

def clearVoteBan(self, senderClient, username): for room in self.rooms.values(): for playerCode, client in room.clients.items(): if client.username == username: client.voteban=[] self.sendModChat(senderClient, "\x06\x14 ", [senderClient.username+" resetou a contagem de banimentos para banir "+str(cl ient.username)+"."], False) def getFindPlayerRoom(self, username): found = False for room in self.rooms.values(): for playerCode, client in room.clients.items(): if client.username == username: return client.roomname break return found def getFindRoomPartial(self, senderClient, findroomname, FindAll=None): found = False resultlist="" playercount=0 for room in self.rooms.values(): if re.search(findroomname.lower(), room.name.lower()): resultlist=resultlist+"<br>"+str(room.name)+" : "+str(room.getPlayerCount()) playercount=playercount+room.getPlayerCount() senderClient.sendData("\x06" + "\x14",[resultlist]) senderClient.sendData("\x06" + "\x14",["Total number of players : "+str(playercount)]) : def getFindPlayerRoomPartial(self, senderClient, username, FindAll=None) found = False NoTest= False if FindAll: username="" else: result="" level=range(48, 57+1)+range(65, 90+1)+range(97, 122+1)+[ for x in username: if not int(senderClient.hex2dec(x.encode x="" NoTest=True result+=x

95, 42]

("hex"))) in level:

ername.lower()):

if result=="": NoTest=True username = result.replace("*","\*") if not NoTest: resultlist="" for room in self.rooms.values(): for playerCode, client in room.clients.items(): if re.search(username.lower(), client.us

resultlist=resultlist+"<br>"+cli ent.username+" -> "+ client.room.name resultlistT=resultlist.strip("<br>")

t]) t])

if resultlistT=="": senderClient.sendData("\x06" + "\x14",[resultlis else: senderClient.sendData("\x06" + "\x14",[resultlis

def getLsModo(self, senderClient): for room in self.rooms.values(): for playerCode, client in room.clients.items(): if client.privilegeLevel in [10,6,5]: name="Servidor" message=client.username #data="\x03"+struct.pack('!h', len(name) )+name+struct.pack('!h', len(message))+message+"\x00\x00" #senderClient.sendData("\x06\x0A", data, True) senderClient.sendData("\x1A\x05", [name, message]) def getLsArb(self, senderClient): for room in self.rooms.values(): for playerCode, client in room.clients.items(): if client.privilegeLevel in [3]: name="Servidor" message=client.username+" : "+client.roo m.name #data="\x02"+struct.pack('!h', len(name) )+name+struct.pack('!h', len(message))+message+"\x00\x00" #senderClient.sendData("\x06\x0A", data, True) senderClient.sendData("\x1A\x06", [name, message]) def getRoomList(self, senderClient): found = False roomlist="" for room in self.rooms.values(): roomlist=roomlist+"<br>"+room.name+" : "+str(room.getPla yerCount()) senderClient.sendData("\x06" + "\x14",[roomlist]) senderClient.sendData("\x06" + "\x14",["Nmero total de jogadores : "+str(self.getConnectedPlayerCount())]) return found def getTribesList(self, senderClient): found = False tribes={} tribelist="" for room in self.rooms.values(): for playerCode, client in room.clients.items(): if client.TribeName!="": try: tribes[client.TribeName]+=1 except: tribes[client.TribeName]=1 for tribename in tribes.keys(): tribelist=tribelist+"<br>"+str(tribename)+" : "+str(trib es[tribename]) tribelistT=tribelist.strip("<br>") if tribelistT=="":

else:

senderClient.sendData("\x06" + "\x14",[tribelistT])

senderClient.sendData("\x06" + "\x14",[tribelist]) #senderClient.sendData("\x06" + "\x14",[tribelist]) return found def nomIPCommand(self, senderClient, name): iplist="Dernires adresses IP connuent pour The player ["+name+"] : dbcur.execute('select * from LoginLog where Name = ?', [name]) rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: iplist=iplist+"<br>"+str(rrf[1]) senderClient.sendData("\x06" + "\x14",[iplist]) def IPNomCommand(self, senderClient, ip): namelist="Players are using the ip ["+str(ip)+"] :" for room in self.rooms.values(): for playerCode, client in room.clients.items(): if client.address[0]==ip: namelist=namelist+"<br>"+str(client.user namehlist="History of IP ["+str(ip)+"] :" dbcur.execute('select * from LoginLog where IP = ?', [ip]) rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: namehlist=namehlist+"<br>"+str(rrf[0]) senderClient.sendData("\x06" + "\x14",[namelist]) senderClient.sendData("\x06" + "\x14",[namehlist]) def restartServerDelLog(self): #logging.info("Restarting") for room in self.rooms.values(): room.updatesqlserver() reactor.stop() os._exit(11) def restartServer10min(self): #logging.info("Restarting") for room in self.rooms.values(): room.updatesqlserver() reactor.stop() os._exit(12) def restartServer5min(self): #logging.info("Restarting") for room in self.rooms.values(): room.updatesqlserver() reactor.stop() os._exit(13) def restartServer20min(self): #logging.info("Restarting") for room in self.rooms.values(): room.updatesqlserver() reactor.stop() os._exit(14) def restartServerUpdate(self):

"

name)

#logging.info("Restarting") for room in self.rooms.values(): room.updatesqlserver() reactor.stop() os._exit(20) def restartServer(self): #logging.info("Restarting") for room in self.rooms.values(): room.updatesqlserver() reactor.stop() os._exit(10) def stopServer(self): #logging.info("Stopping") for room in self.rooms.values(): room.updatesqlserver() reactor.stop() os._exit(5) def removeTempBan(self, username): if username.isalpha(): username=username.lower().capitalize() dbcur.execute("DELETE FROM UserTempBan WHERE Name = ?", [username]) return True return False def checkIPBan(self, ip): dbcur.execute('select * from ippermaban where ip = ?', [ip]) rrf = dbcur.fetchone() if rrf is None: return False else: return True def removeIPBan(self, ip): dbcur.execute("DELETE FROM ippermaban WHERE ip = ?", [ip]) return True def checkTempBan(self, username): if username.isalpha(): username=username.lower().capitalize() dbcur.execute('select * from UserTempBan where Name = ?' , [username]) rrf = dbcur.fetchone() if rrf is None: return False else: return True return False def getTempBanInfo(self, username): if username.isalpha(): username=username.lower().capitalize() dbcur.execute('select * from UserTempBan where Name = ?' , [username]) rrf = dbcur.fetchone() if rrf is None: return ["", 0, ""] else: return rrf return ["", 0, ""] def tempBanUser(self, name, bantime, reason):

if self.checkTempBan(name): self.removeTempBan(name) dbcur.execute("insert into UserTempBan (Name, Time, Reason) valu es (?, ?, ?)", (str(name).lower().capitalize(), str(getTime()+int((int(bantime)* 60*60))), str(reason))) #time = time*3600 #if not name in self.tempAccountBanList: # self.removeTempBanUserTimer = reactor.callLater(time, se lf.tempBanUserRemove, name) # self.tempAccountBanList.append(name) def tempBanIP(self, ipaddr, timee): timee = timee*3600 if not ipaddr in self.tempIPBanList: self.removeTempBanIPTimer = reactor.callLater(timee, sel f.tempBanIPRemove, ipaddr) self.tempIPBanList.append(ipaddr) def tempBanIPExact(self, ipaddr, time): if not ipaddr in self.tempIPBanList: self.removeTempBanIPTimer = reactor.callLater(time, self .tempBanIPRemove, ipaddr) self.tempIPBanList.append(ipaddr) def tempBanUserRemove(self, name): if name in self.tempAccountBanList: self.tempAccountBanList.remove(name) def tempBanIPRemove(self, ipaddr): if ipaddr in self.tempIPBanList: self.tempIPBanList.remove(ipaddr) def checkAlreadyExistingGuest(self, nusername): x=0 found=False if not self.checkAlreadyConnectedAccount(nusername): found=True return nusername while not found: x+=1 if not self.checkAlreadyConnectedAccount(nusername+"_"+s found=True return nusername+"_"+str(x) def checkAlreadyConnectedAccount(self, username): found = False for room in self.rooms.values(): for player in room.clients.values(): if player.username == username: found = True return found def addClientToRoom(self, client, roomName): roomName = str(roomName) if roomName in self.rooms: self.rooms[roomName].addClient(client) else: self.rooms[roomName] = TransformiceRoomHandler(self, roo self.rooms[roomName].addClient(client) #return self.rooms[roomName] def closeRoom(self, room):

tr(x)):

mName)

if room.name in self.rooms: room.close() del self.rooms[room.name] def getConnectedPlayerCount(self): count = 0 for room in self.rooms.values(): for player in room.clients.values(): count = count+1 return count def generatePlayerCode(self): self.lastPlayerCode+=1 return self.lastPlayerCode def recommendRoomPrefixed(self, prefix): found=False x=0 while not found: x+=1 if prefix+str(x) in self.rooms: playercount=self.rooms[prefix+str(x)].getPlayerC if int(playercount)<25: found=True return prefix+str(x) found=True return prefix+str(x)

ount()

else:

def recommendRoom(self): found=False x=0 while not found: x+=1 if str(x) in self.rooms: playercount=self.rooms[str(x)].getPlayerCount() if int(playercount)<25: found=True return str(x) else: found=True return str(x) class TransformiceRoomHandler(object): def __init__(self, server, name): self.server = server self.name = name.strip() self.clients = {} self.currentShamanCode = None self.currentSyncroniserCode = None self.isDoubleMap = False self.currentSecondShamanCode = None self.changed20secTimer = False self.never20secTimer = False self.currentShamanName = None

self.currentSecondShamanName = None self.playerLimit = 75 self.isSandbox = False self.isCurrentlyPlayingRoom = False self.isEditeur = False self.isTotemEditeur = False self.isPlay = False self.isBootcamp = False self.isHalloween = False self.isVanilla = False self.iscurrentWorld = False self.isFightRoom = False self.isFight = False self.isRacing = False self.isArte = False self.isMecanismo = False self.isShaman = False self.isSurvivor = False self.isTribehouse = False self.specificMap = False self.specialMap = 0 self.isSnowing = False self.properNoShamanMaps = True self.isCatchTheCheeseMap = False self.isValidate = 0 self.NoNumberedMaps = False self.PTwoCycle = False self.PTwoCycleInfo = 0 self.PTwoCycleList = [] self.PRShamanIsShaman = False self.isTribehouseMap = False # Code[0], Name[1], XML[2], YesVotes[3] , NoVotes[4], Perma[5], Deleted[6] self.ISCMdata = [0, "Invalid", "<C><P /><Z><S /><D /><O /></Z></ C>", 0, 0, 0, 0] self.ISCM = -1 self.ISCMstatus = 0 # Code[0], Name[1], XML[2], YesVot es[3], NoVotes[4], Perma[5], Deleted[6], Validated[7] self.ISCMVdata =[0, "Invalid", "null", 0, 0, 0, 0, 0] self.ISCMV = 0 self.ISCMVloaded = 0 # art room self.isArtRoom = False #racing room #shaman room self.isShamanRoom = False #fight room self.isFightRoom = False #halloween self.isHalloween = False

self.RoomInvite=[] self.PrivateRoom=False self.forceNextShaman = False self.forceNextMap = False self.CodePartieEnCours = 1 self.CustomMapCounter = 1 self.identifiantTemporaire = -1 self.countStats = True self.autoRespawn = False self.roundTime = 120 self.votingMode = False self.votingBox = False self.initVotingMode = True self.recievedYes= 0 self.recievedNo = 0 self.voteCloseTimer = None self.CheckedPhysics=False self.isHardSham=False self.SPR_Room = False self.eSync = False self.sSync = True self.sNP = True self.sT = False self.spc0 = False self.SPR_CM = 0 self.nobodyIsShaman = False # hallo map self.ZombieTimer = None self.isZombieRoom = False # art room self.isArtRoom = False #racing room self.isRacingRoom = False #shaman room self.isShamanRoom = False #fight room self.isFightRoom = False #self.snowStormStartTimer = reactor.callLater(random.randrange(9 00, 1500), self.startSnowStorm) if self.name == "repeat": self.specificMap = True self.isPlay = True self.currentWorld = "0" self.roundTime = 120 #elif self.name == "sandbox": # self.specificMap = True # self.isSandbox = True

# self.currentWorld = "444" if self.name in self.server.SPR: self.SPR_Room=True RunList=self.server.SPRD[:] for position, room in enumerate(RunList): if room[0]==self.name: self.countStats=room[1] self.specificMap=room[2] self.isSandbox=room[3] if room[4] == 1: self.currentWorld="-1" self.SPR_CM=room[5] elif room[4] == 2: self.currentWorld="-1" self.specialMap=room[5] else: self.currentWorld=room[5] self.autoRespawn=room[6] self.roundTime=room[7] self.never20secTimer=room[8] #Extra Vars self.eSync=room[9] self.sSync=room[10] self.sNP=room[11] self.sT=room[12] self.spc0=room[13] self.playerLimit=room[14] break elif re.search("racing", name.lower()): self.countStats = True self.currentWorld = "-1" #self.specificMap = True self.isRacingRoom = True self.roundTime = 120 self.never20secTimer = True elif re.search("mecanismo", name.lower()): self.countStats = True self.isMecanismo = True self.roundTime = 120 elif re.search("shaman", name.lower()): self.countStats = True self.isShaman = True self.roundTime = 120 elif re.search("arte", name.lower()): self.countStats = True self.isArte = True self.roundTime = 120 elif re.search("halloween", name.lower()): self.countStats = True self.isHalloween = True self.roundTime = 120 elif re.search("fight", name.lower()): self.countStats = True self.isFight = True self.roundTime = 120 elif self.name.startswith("\x03"+"[Private] "): self.countStats = False self.PrivateRoom = True self.roundTime = 120 self.never20secTimer = True

elif self.name.startswith("\x03"+"[Editeur] "): self.countStats = False self.currentWorld = 0 #self.specificMap = True self.isEditeur = True self.roundTime = 120 self.never20secTimer = True elif self.name.startswith("\x03"+"[Totem] "): self.countStats = False #self.isSandbox = True self.currentWorld = 444 self.specificMap = True self.isTotemEditeur = True self.roundTime = 3600 self.never20secTimer = True elif self.name.startswith("\x03"+"[Tutorial] "): self.PrivateRoom = True #self.isTutorial = True self.countStats = False self.specificMap = True self.isSandbox = True self.roundTime = 120 self.autoRespawn= False self.never20secTimer = True self.currentWorld = 900 self.eSync= False self.sSync= False self.isTutorial=True elif re.search("bootcamp", name.lower()): self.countStats = False self.currentWorld = "-1" #self.specificMap = True self.isBootcamp = True self.autoRespawn = True self.roundTime = 360 self.never20secTimer = True elif re.search("racing", name.lower()): self.countStats = True self.isRacing = True self.roundTime = 60 elif re.search("vanilla", name.lower()): self.isVanilla = True self.roundTime = 120 elif re.search("survivor", name.lower()): self.isSurvivor = True self.roundTime = 120 elif self.name.startswith("*\x03"): self.countStats = False self.isTribehouse = True self.roundTime = 120 #self.autoRespawn = True #self.never20secTimer = True #self.nobodyIsShaman = True self.currentWorld = "-1" #self.specificMap = True self.isTribehouseMap = True else: self.roundTime = 120 runthismap = self.selectMap(True) self.currentWorld = runthismap

Halloween lf.isBootcamp

self.everybodyIsShaman = self.isSandbox if not self.nobodyIsShaman: if not self.isTribehouseMap: self.nobodyIsShaman = self.isBootcamp or self.is else: self.nobodyIsShaman = self.isTribehouseMap or se

if self.playerLimit == 0: self.playerLimit = 75 self.worldChangeTimer = None self.killAfkTimer = None self.autoRespawnTimer = None self.sNNMTimer = None self.sPTCTimer = None if not self.isSandbox: if self.currentWorld==888: self.worldChangeTimer = reactor.callLate r(60, self.worldChange) else: self.worldChangeTimer = reactor.callLate r(self.roundTime, self.worldChange) self.killAfkTimer = reactor.callLater(30, self.k illAfk) self.closeRoomRoundJoinTimer = reactor.callLater (3, self.closeRoomRoundJoin) if self.autoRespawn or self.isTribehouseMap: self.autoRespawnTimer = reactor.callLater(15, self.respa wnMice) self.gameStartTime = getTime() self.numCompleted = 0 self.numGotCheese = 0 def respawnMice(self): for playerCode, client in self.clients.items(): if client.isDead: client.isDead=False client.JumpCheck=1 client.playerStartTime = getTime() if self.isBootcamp: self.sendAll("\x08" + "\x08",[client.get PlayerData(), 0]) else: self.sendAll("\x08" + "\x08",[client.get PlayerData(), 1]) if self.autoRespawn or self.isTribehouseMap: self.autoRespawnTimer = reactor.callLater(15, self.respa wnMice) def respawnSpecific(self, username): for playerCode, client in self.clients.items(): if client.username == username: client.isDead=False client.JumpCheck=1 client.playerStartTime = time.time() if self.isBootcamp: self.sendAll("\x08" + "\x08",[client.get

PlayerData(), 0]) PlayerData(), 1])

else:

self.sendAll("\x08" + "\x08",[client.get

def switchNoNumberedMaps(self, option): if self.sNNMTimer: try: self.sNNMTimer.cancel() except: self.sNNMTimer = None if option==True: self.NoNumberedMaps = True self.sNNMTimer = reactor.callLater(1200, self.switchNoNu mberedMaps, False) else: self.NoNumberedMaps = False self.sNNMTimer = reactor.callLater(1200, self.switchNoNu mberedMaps, True) def goZombified(self): for playerCode, client in self.clients.items(): if client.isSyncroniser: client.sendZombieMode() def switchPTwoCycle(self, option): if self.sPTCTimer: try: self.sPTCTimer.cancel() except: self.sPTCTimer = None if option==True: self.PTwoCycle = True self.sPTCTimer = reactor.callLater(1200, self.switchPTwo Cycle, False) else: self.PTwoCycle = False self.PTwoCycleInfo=0 self.PTwoCycleList=[] self.sPTCTimer = reactor.callLater(1200, self.switchPTwo Cycle, True) def close(self): if self.worldChangeTimer: try: self.worldChangeTimer.cancel() except: self.worldChangeTimer=None if self.killAfkTimer: try: self.killAfkTimer.cancel() except: self.killAfkTimer=None if self.autoRespawnTimer: try: self.autoRespawnTimer.cancel() except: self.autoRespawnTimer=None #if self.snowStormStartTimer: # self.snowStormStartTimer.cancel()

ode)) ) )

def selectMapSpecific(self, mapnum, custom): if str(mapnum).isdigit(): if custom: mapcode = int(mapnum) mapname = self.server.getMapName(mapcode) mapxml = self.server.getMapXML(mapcode) yesvotes = int(self.server.getMapYesVotes(mapc novotes = int(self.server.getMapNoVotes(mapcode) perma = int(self.server.getMapPerma(mapcode)

tes, novotes, perma, mapnoexist] else: <D /><O /></Z></C>", 0, 0, 0, 0] else: pass

mapnoexist = int(self.server.getMapDel(mapcode)) self.ISCM = mapcode self.ISCMdata = [mapcode, mapname, mapxml, yesvo return "-1" self.ISCM = -1 self.ISCMdata = [0, "Invalid", "<C><P /><Z><S /> return int(mapnum)

def selectMapSpecial(self, mapnum): if int(mapnum) in self.server.SPMmaps: for spm in self.server.SPM: if spm[0]==int(mapnum): #SPM.append([code, author, xml]) mapcode = 1 mapname = spm[1] mapxml = spm[2] yesvotes = 0 novotes = 0 perma = 2 mapnoexist = 1 self.ISCM = mapcode self.ISCMdata = [mapcode, mapname, mapxm l, yesvotes, novotes, perma, mapnoexist] return "-1" else: print "fail?" def selectMap(self, NewRoom = None): if self.PTwoCycle: if self.PTwoCycleList == []: #List is empty, populate it. dbcur.execute('select * from mapeditor where per ma = 2') rrfRows = dbcur.fetchall() if rrfRows is None: self.PTwoCycle = False else: for rrf in rrfRows: self.PTwoCycleList.append(rrf[1] ) mapnum = self.PTwoCycleList[self.PTwoCycleInfo ] self.PTwoCycleInfo+=1

ode)) ) )

if self.PTwoCycleInfo==len(self.PTwoCycleList): self.PTwoCycle=False self.PTwoCycleInfo=0 self.PTwoCycleList=[] if self.sPTCTimer: try: self.sPTCTimer.cancel() except: self.sPTCTimer = None mapcode = int(mapnum) mapname = self.server.getMapName(mapcode) mapxml = self.server.getMapXML(mapcode) yesvotes = int(self.server.getMapYesVotes(mapc novotes = int(self.server.getMapNoVotes(mapcode) perma = int(self.server.getMapPerma(mapcode)

tes, novotes, perma, mapnoexist] else: ]

mapnoexist = int(self.server.getMapDel(mapcode)) self.ISCM = mapcode self.ISCMdata = [mapcode, mapname, mapxml, yesvo return "-1" mapnum = self.PTwoCycleList[self.PTwoCycleInfo

ode)) ) )

self.PTwoCycleInfo+=1 if self.PTwoCycleInfo==len(self.PTwoCycleList): self.PTwoCycle=False self.PTwoCycleInfo=0 self.PTwoCycleList=[] if self.sPTCTimer: try: self.sPTCTimer.cancel() except: self.sPTCTimer = None mapcode = int(mapnum) mapname = self.server.getMapName(mapcode) mapxml = self.server.getMapXML(mapcode) yesvotes = int(self.server.getMapYesVotes(mapc novotes = int(self.server.getMapNoVotes(mapcode) perma = int(self.server.getMapPerma(mapcode)

tes, novotes, perma, mapnoexist]

mapnoexist = int(self.server.getMapDel(mapcode)) self.ISCM = mapcode self.ISCMdata = [mapcode, mapname, mapxml, yesvo return "-1"

if self.NoNumberedMaps: self.ISCMstatus=3 if self.forceNextMap: forceNextMap = self.forceNextMap self.forceNextMap = False if forceNextMap.startswith("@"): forceNextMap=forceNextMap.replace("@", "") return self.selectMapSpecific(forceNextMap, True

else: e)

return self.selectMapSpecific(forceNextMap, Fals

perma = 3')

elif NewRoom: if self.isBootcamp: maplist = [] dbcur.execute('select code from mapeditor where rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: maplist.append(rrf[0]) if len(maplist)>=1: runthismap = random.choice(maplist) else: runthismap = "" if runthismap=="": self.ISCM = -1 return 0 else: mapcode = int(runthismap) mapname = self.server.getMapName(mapcode mapxml yesvotes = self.server.getMapXML(mapcode = int(self.server.getMapYesVo

) ) tes(mapcode)) mapcode)) mapcode)) apcode))

novotes = int(self.server.getMapNoVotes( perma = int(self.server.getMapPerma(

mapnoexist = int(self.server.getMapDel(m self.ISCM = mapcode self.ISCMdata = [mapcode, mapname, mapxm

l, yesvotes, novotes, perma, mapnoexist]

perma = 10')

return "-1" elif self.isFightRoom: runthismap = random.choice(LEVEL_LIST_FIGHT) while runthismap == self.currentWorld: runthismap = random.choice(LEVEL_LIST_FIGHT) if self.specificMap: runthismap = self.currentWorld return runthismap elif self.isSurvivor: maplist = [] dbcur.execute('select code from mapeditor where rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: maplist.append(rrf[0]) if len(maplist)>=1: runthismap = random.choice(maplist) else: runthismap = ""

) ) tes(mapcode)) mapcode)) mapcode)) apcode))

if runthismap=="": self.ISCM = -1 return 0 else: mapcode = int(runthismap) mapname = self.server.getMapName(mapcode mapxml yesvotes = self.server.getMapXML(mapcode = int(self.server.getMapYesVo

novotes = int(self.server.getMapNoVotes( perma = int(self.server.getMapPerma(

mapnoexist = int(self.server.getMapDel(m self.ISCM = mapcode self.ISCMdata = [mapcode, mapname, mapxm

l, yesvotes, novotes, perma, mapnoexist]

perma = 11')

return "-1" elif self.isHalloween: maplist = [] dbcur.execute('select code from mapeditor where rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: maplist.append(rrf[0]) if len(maplist)>=1: runthismap = random.choice(maplist) else: runthismap = "" if runthismap=="": self.ISCM = -1 return 0 else: mapcode = int(runthismap) mapname = self.server.getMapName(mapcode mapxml yesvotes = self.server.getMapXML(mapcode = int(self.server.getMapYesVo

) ) tes(mapcode)) mapcode)) mapcode)) apcode))

novotes = int(self.server.getMapNoVotes( perma = int(self.server.getMapPerma(

mapnoexist = int(self.server.getMapDel(m self.ISCM = mapcode self.ISCMdata = [mapcode, mapname, mapxm

l, yesvotes, novotes, perma, mapnoexist]

perma = 11')

return "-1" elif self.isHalloween: maplist = [] dbcur.execute('select code from mapeditor where

) ) tes(mapcode)) mapcode)) mapcode)) apcode))

rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: maplist.append(rrf[0]) if len(maplist)>=1: runthismap = random.choice(maplist) else: runthismap = "" if runthismap=="": self.ISCM = -1 return 0 else: mapcode = int(runthismap) mapname = self.server.getMapName(mapcode mapxml yesvotes = self.server.getMapXML(mapcode = int(self.server.getMapYesVo

novotes = int(self.server.getMapNoVotes( perma = int(self.server.getMapPerma(

mapnoexist = int(self.server.getMapDel(m self.ISCM = mapcode self.ISCMdata = [mapcode, mapname, mapxm

l, yesvotes, novotes, perma, mapnoexist]

return "-1" elif self.isRacing: # Aqui nome da sala '-' maplist = [] dbcur.execute('select code from mapeditor where perma = 7') # Aki pra rodar o mapa na sala. rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: maplist.append(rrf[0]) if len(maplist)>=1: runthismap = random.choice(maplist) else: runthismap = "" if len(maplist)>=2: while runthismap == self.ISCM: runthismap = random.choice(mapli st) if runthismap=="": self.ISCM = -1 return 0 else: mapcode = int(runthismap) mapname = self.server.getMapName(mapcode ) mapxml = self.server.getMapXML(mapcode ) yesvotes = int(self.server.getMapYesVo tes(mapcode))

mapcode)) mapcode)) apcode)) l, yesvotes, novotes, perma, mapnoexist]

novotes = int(self.server.getMapNoVotes( perma = int(self.server.getMapPerma(

mapnoexist = int(self.server.getMapDel(m self.ISCM = mapcode self.ISCMdata = [mapcode, mapname, mapxm

))

return "-1" elif self.isTribehouse: tribename = self.name[2:] code = self.server.getTribeCode(tribename) TribeData = self.server.getTribeData(int(code[0] runthismap = TribeData[5] mapcode = int(runthismap) mapname = self.server.getMapName(mapcode) mapxml = self.server.getMapXML(mapcode) yesvotes = int(self.server.getMapYesVotes(mapc novotes = int(self.server.getMapNoVotes(mapcode) perma = int(self.server.getMapPerma(mapcode)

ode)) ) )

tes, novotes, perma, mapnoexist]

mapnoexist = int(self.server.getMapDel(mapcode)) self.ISCM = mapcode self.ISCMdata = [mapcode, mapname, mapxml, yesvo

self.tribehouseCM = mapcode self.tribehouseCMdata = [mapcode, mapname, mapxm l, yesvotes, novotes, perma, mapnoexist] self.isTribehouseMap = True return "-1" elif self.isEditeur: return 0 elif self.SPR_Room and self.SPR_CM!=0: runthismap=self.SPR_CM mapcode = int(runthismap) mapname = self.server.getMapName(mapcode) mapxml = self.server.getMapXML(mapcode) yesvotes = int(self.server.getMapYesVotes(mapc ode)) novotes = int(self.server.getMapNoVotes(mapcode) ) perma = int(self.server.getMapPerma(mapcode) ) mapnoexist = int(self.server.getMapDel(mapcode)) self.ISCM = mapcode self.ISCMdata = [mapcode, mapname, mapxml, yesvo tes, novotes, perma, mapnoexist] return "-1" elif self.specialMap!=0: return self.selectMapSpecial(self.specialMap) else: self.ISCM = -1 self.ISCMdata = [0, "Invalid", "<C><P /><Z><S /> <D /><O /></Z></C>", 0, 0, 0, 0] runthismap = random.choice(LEVEL_LIST) if self.specificMap:

else:

runthismap = self.currentWorld return runthismap if self.isBootcamp: maplist = [] dbcur.execute('select code from mapeditor where rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: maplist.append(rrf[0]) if len(maplist)>=1: runthismap = random.choice(maplist) else: runthismap = "" if len(maplist)>=2: while runthismap == self.ISCM: runthismap = random.choice(mapli if runthismap=="": self.ISCM = -1 return 0 else: mapcode = int(runthismap) mapname = self.server.getMapName(mapcode mapxml yesvotes = self.server.getMapXML(mapcode = int(self.server.getMapYesVo

perma = 3')

st)

) ) tes(mapcode)) mapcode)) mapcode)) apcode))

novotes = int(self.server.getMapNoVotes( perma = int(self.server.getMapPerma(

mapnoexist = int(self.server.getMapDel(m self.ISCM = mapcode self.ISCMdata = [mapcode, mapname, mapxm

l, yesvotes, novotes, perma, mapnoexist]

perma = 7')

return "-1" elif self.isRacing: maplist = [] dbcur.execute('select code from mapeditor where rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: maplist.append(rrf[0]) if len(maplist)>=1: runthismap = random.choice(maplist) else: runthismap = "" if len(maplist)>=2: while runthismap == self.ISCM: runthismap = random.choice(mapli

st)

) ) tes(mapcode)) mapcode)) mapcode)) apcode))

if runthismap=="": self.ISCM = -1 return 0 else: mapcode = int(runthismap) mapname = self.server.getMapName(mapcode mapxml yesvotes = self.server.getMapXML(mapcode = int(self.server.getMapYesVo

novotes = int(self.server.getMapNoVotes( perma = int(self.server.getMapPerma(

mapnoexist = int(self.server.getMapDel(m self.ISCM = mapcode self.ISCMdata = [mapcode, mapname, mapxm

l, yesvotes, novotes, perma, mapnoexist]

return "-1" elif self.isShaman: # Aqui nome da sala '-' maplist = [] dbcur.execute('select code from mapeditor where perma = 4') # Aki pra rodar o mapa na sala. rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: maplist.append(rrf[0]) if len(maplist)>=1: runthismap = random.choice(maplist) else: runthismap = "" if len(maplist)>=2: while runthismap == self.ISCM: runthismap = random.choice(mapli st) if runthismap=="": self.ISCM = -1 return 0 else: mapcode = int(runthismap) mapname = self.server.getMapName(mapcode ) mapxml = self.server.getMapXML(mapcode ) yesvotes = int(self.server.getMapYesVo tes(mapcode)) novotes = int(self.server.getMapNoVotes( mapcode)) perma = int(self.server.getMapPerma( mapcode)) mapnoexist = int(self.server.getMapDel(m apcode)) self.ISCM = mapcode self.ISCMdata = [mapcode, mapname, mapxm l, yesvotes, novotes, perma, mapnoexist] return "-1"

elif self.isRacing: # Aqui nome da sala '-' maplist = [] dbcur.execute('select code from mapeditor where perma = 7') # Aki pra rodar o mapa na sala. rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: maplist.append(rrf[0]) if len(maplist)>=1: runthismap = random.choice(maplist) else: runthismap = "" if len(maplist)>=2: while runthismap == self.ISCM: runthismap = random.choice(mapli st) if runthismap=="": self.ISCM = -1 return 0 else: mapcode = int(runthismap) mapname = self.server.getMapName(mapcode ) mapxml = self.server.getMapXML(mapcode ) yesvotes = int(self.server.getMapYesVo tes(mapcode)) novotes = int(self.server.getMapNoVotes( mapcode)) perma = int(self.server.getMapPerma( mapcode)) mapnoexist = int(self.server.getMapDel(m apcode)) self.ISCM = mapcode self.ISCMdata = [mapcode, mapname, mapxm l, yesvotes, novotes, perma, mapnoexist] return "-1" elif self.isMecanismo: # Aqui nome da sala '-' maplist = [] dbcur.execute('select code from mapeditor where perma = 6') # Aki pra rodar o mapa na sala. rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: maplist.append(rrf[0]) if len(maplist)>=1: runthismap = random.choice(maplist) else: runthismap = "" if len(maplist)>=2: while runthismap == self.ISCM: runthismap = random.choice(mapli st) if runthismap=="": self.ISCM = -1 return 0

else: ) ) tes(mapcode)) mapcode)) mapcode)) apcode)) l, yesvotes, novotes, perma, mapnoexist]

mapcode = int(runthismap) mapname = self.server.getMapName(mapcode mapxml yesvotes = self.server.getMapXML(mapcode = int(self.server.getMapYesVo

novotes = int(self.server.getMapNoVotes( perma = int(self.server.getMapPerma(

mapnoexist = int(self.server.getMapDel(m self.ISCM = mapcode self.ISCMdata = [mapcode, mapname, mapxm

perma = 8')

return "-1" elif self.isFight: maplist = [] dbcur.execute('select code from mapeditor where rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: maplist.append(rrf[0]) if len(maplist)>=1: runthismap = random.choice(maplist) else: runthismap = "" if len(maplist)>=2: while runthismap == self.ISCM: runthismap = random.choice(mapli if runthismap=="": self.ISCM = -1 return 0 else: mapcode = int(runthismap) mapname = self.server.getMapName(mapcode mapxml yesvotes = self.server.getMapXML(mapcode = int(self.server.getMapYesVo

st)

) ) tes(mapcode)) mapcode)) mapcode)) apcode))

novotes = int(self.server.getMapNoVotes( perma = int(self.server.getMapPerma(

mapnoexist = int(self.server.getMapDel(m self.ISCM = mapcode self.ISCMdata = [mapcode, mapname, mapxm

l, yesvotes, novotes, perma, mapnoexist]

return "-1" elif self.isArte: # Aqui nome da sala '-' maplist = [] dbcur.execute('select code from mapeditor where

perma = 5') # Aki pra rodar o mapa na sala. rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: maplist.append(rrf[0]) if len(maplist)>=1: runthismap = random.choice(maplist) else: runthismap = "" if len(maplist)>=2: while runthismap == self.ISCM: runthismap = random.choice(mapli st) if runthismap=="": self.ISCM = -1 return 0 else: mapcode = int(runthismap) mapname = self.server.getMapName(mapcode ) mapxml = self.server.getMapXML(mapcode ) yesvotes = int(self.server.getMapYesVo tes(mapcode)) novotes = int(self.server.getMapNoVotes( mapcode)) perma = int(self.server.getMapPerma( mapcode)) mapnoexist = int(self.server.getMapDel(m apcode)) self.ISCM = mapcode self.ISCMdata = [mapcode, mapname, mapxm l, yesvotes, novotes, perma, mapnoexist] return "-1" elif self.isSurvivor: maplist = [] dbcur.execute('select code from mapeditor where perma = 10') rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: maplist.append(rrf[0]) if len(maplist)>=1: runthismap = random.choice(maplist) else: runthismap = "" if len(maplist)>=2: while runthismap == self.ISCM: runthismap = random.choice(mapli st) if runthismap=="": self.ISCM = -1 return 0 else: mapcode = int(runthismap) mapname = self.server.getMapName(mapcode

) ) tes(mapcode)) mapcode)) mapcode)) apcode)) l, yesvotes, novotes, perma, mapnoexist]

mapxml yesvotes

= self.server.getMapXML(mapcode = int(self.server.getMapYesVo

novotes = int(self.server.getMapNoVotes( perma = int(self.server.getMapPerma(

mapnoexist = int(self.server.getMapDel(m self.ISCM = mapcode self.ISCMdata = [mapcode, mapname, mapxm

return "-1" elif self.isTribehouse: self.ISCM = 0 self.ISCMdata = [0, "Invalid", "<C><P /><Z><S /> <D /><O /></Z></C>", 0, 0, 0, 0] return "-1" elif self.isEditeur: if self.ISCMV!=0: return self.ISCMV else: return 0 elif self.SPR_Room and self.SPR_CM!=0: runthismap=self.SPR_CM mapcode = int(runthismap) mapname = self.server.getMapName(mapcode) mapxml = self.server.getMapXML(mapcode) yesvotes = int(self.server.getMapYesVotes(mapc ode)) novotes = int(self.server.getMapNoVotes(mapcode) ) perma = int(self.server.getMapPerma(mapcode) ) mapnoexist = int(self.server.getMapDel(mapcode)) self.ISCM = mapcode self.ISCMdata = [mapcode, mapname, mapxml, yesvo tes, novotes, perma, mapnoexist] return "-1" elif self.specialMap!=0: return self.selectMapSpecial(self.specialMap) else: self.ISCM = -1 self.ISCMdata = [0, "Invalid", "<C><P /><Z><S /> <D /><O /></Z></C>", 0, 0, 0, 0] if self.isVanilla: runthismap = random.choice(LEVEL_LIST) while runthismap == self.currentWorld: runthismap = random.choice(LEVEL _LIST) if self.specificMap: runthismap = self.currentWorld return runthismap else: #ISCM Status: Vanilla/Normal-Protected/Art /Misc/Vanilla/Mechanism/No-shaman/Cooperation/Vanilla/Normal-Protected/Shaman/Me chanism if self.ISCMstatus==0: #vanilla map runthismap = random.choice(LEVEL

_LIST) World: ce(LEVEL_LIST) tWorld ected map mapeditor where perma = 0')

while runthismap == self.current runthismap = random.choi if self.specificMap: runthismap = self.curren return runthismap elif self.ISCMstatus==1: #normal or prot maplist = [] dbcur.execute('select code from rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: maplist.append(r dbcur.execute('select code from rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: maplist.append(r if len(maplist)>=1: runthismap = random.choi else: runthismap = "" if len(maplist)>=2: while runthismap == self runthismap = ran if runthismap=="": runthismap = random.choi while runthismap == self runthismap = ran if self.specificMap: runthismap = sel else: return runthismap mapcode = int(runthismap mapname = self.server.ge mapxml yesvotes = self.server.g = int(self.se

rf[0]) mapeditor where perma = 1')

rf[0]) ce(maplist)

.ISCM: dom.choice(maplist) ce(LEVEL_LIST) .currentWorld: dom.choice(LEVEL_LIST) f.currentWorld

) tMapName(mapcode) etMapXML(mapcode) rver.getMapYesVotes(mapcode))

r.getMapNoVotes(mapcode)) ver.getMapPerma(mapcode)) rver.getMapDel(mapcode)) , mapname, mapxml, yesvotes, novotes, perma, mapnoexist]

novotes = int(self.serve perma = int(self.ser

mapnoexist = int(self.se self.ISCM = mapcode self.ISCMdata = [mapcode

mapeditor where perma = 5')

return "-1" elif self.ISCMstatus==2: #art map maplist = [] dbcur.execute('select code from rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: maplist.append(r if len(maplist)>=1: runthismap = random.choi else: runthismap = "" if len(maplist)>=2: while runthismap == self runthismap = ran if runthismap=="": runthismap = random.choi while runthismap == self runthismap = ran if self.specificMap: runthismap = sel else: return runthismap mapcode = int(runthismap mapname = self.server.ge mapxml yesvotes = self.server.g = int(self.se

rf[0]) ce(maplist)

.ISCM: dom.choice(maplist) ce(LEVEL_LIST) .currentWorld: dom.choice(LEVEL_LIST) f.currentWorld

) tMapName(mapcode) etMapXML(mapcode) rver.getMapYesVotes(mapcode)) r.getMapNoVotes(mapcode)) ver.getMapPerma(mapcode)) rver.getMapDel(mapcode)) , mapname, mapxml, yesvotes, novotes, perma, mapnoexist]

novotes = int(self.serve perma = int(self.ser

mapnoexist = int(self.se self.ISCM = mapcode self.ISCMdata = [mapcode

mapeditor where perma = 9')

return "-1" elif self.ISCMstatus==3: #misc map maplist = [] dbcur.execute('select code from rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: maplist.append(r if len(maplist)>=1: runthismap = random.choi else: runthismap = "" if len(maplist)>=2: while runthismap == self runthismap = ran if runthismap=="": runthismap = random.choi while runthismap == self runthismap = ran if self.specificMap: runthismap = sel else: return runthismap mapcode = int(runthismap mapname = self.server.ge mapxml yesvotes = self.server.g = int(self.se

rf[0]) ce(maplist)

.ISCM: dom.choice(maplist) ce(LEVEL_LIST) .currentWorld: dom.choice(LEVEL_LIST) f.currentWorld

) tMapName(mapcode) etMapXML(mapcode) rver.getMapYesVotes(mapcode)) r.getMapNoVotes(mapcode)) ver.getMapPerma(mapcode)) rver.getMapDel(mapcode)) , mapname, mapxml, yesvotes, novotes, perma, mapnoexist]

novotes = int(self.serve perma = int(self.ser

mapnoexist = int(self.se self.ISCM = mapcode self.ISCMdata = [mapcode

_LIST) World: ce(LEVEL_LIST)

return "-1" elif self.ISCMstatus==4: #vanilla map runthismap = random.choice(LEVEL while runthismap == self.current runthismap = random.choi if self.specificMap:

tWorld

runthismap = self.curren return runthismap elif self.ISCMstatus==5: #mechanism map maplist = [] dbcur.execute('select code from rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: maplist.append(r if len(maplist)>=1: runthismap = random.choi else: runthismap = "" if len(maplist)>=2: while runthismap == self runthismap = ran if runthismap=="": runthismap = random.choi while runthismap == self runthismap = ran if self.specificMap: runthismap = sel else: return runthismap mapcode = int(runthismap mapname = self.server.ge mapxml yesvotes = self.server.g = int(self.se

mapeditor where perma = 6')

rf[0]) ce(maplist)

.ISCM: dom.choice(maplist) ce(LEVEL_LIST) .currentWorld: dom.choice(LEVEL_LIST) f.currentWorld

) tMapName(mapcode) etMapXML(mapcode) rver.getMapYesVotes(mapcode)) r.getMapNoVotes(mapcode)) ver.getMapPerma(mapcode)) rver.getMapDel(mapcode)) , mapname, mapxml, yesvotes, novotes, perma, mapnoexist]

novotes = int(self.serve perma = int(self.ser

mapnoexist = int(self.se self.ISCM = mapcode self.ISCMdata = [mapcode

mapeditor where perma = 7')

return "-1" elif self.ISCMstatus==6: #racing map maplist = [] dbcur.execute('select code from rrfRows = dbcur.fetchall() if rrfRows is None:

else: rf[0]) ce(maplist)

pass for rrf in rrfRows: maplist.append(r

if len(maplist)>=1: runthismap = random.choi else: runthismap = "" if len(maplist)>=2: while runthismap == self runthismap = ran if runthismap=="": runthismap = random.choi while runthismap == self runthismap = ran if self.specificMap: runthismap = sel else: return runthismap mapcode = int(runthismap mapname = self.server.ge mapxml yesvotes = self.server.g = int(self.se

.ISCM: dom.choice(maplist) ce(LEVEL_LIST) .currentWorld: dom.choice(LEVEL_LIST) f.currentWorld

) tMapName(mapcode) etMapXML(mapcode) rver.getMapYesVotes(mapcode)) r.getMapNoVotes(mapcode)) ver.getMapPerma(mapcode)) rver.getMapDel(mapcode)) , mapname, mapxml, yesvotes, novotes, perma, mapnoexist] p mapeditor where perma = 8')

novotes = int(self.serve perma = int(self.ser

mapnoexist = int(self.se self.ISCM = mapcode self.ISCMdata = [mapcode

return "-1" elif self.ISCMstatus==7: #cooperation ma maplist = [] dbcur.execute('select code from rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: maplist.append(r if len(maplist)>=1: runthismap = random.choi

rf[0]) ce(maplist)

else:

.ISCM: dom.choice(maplist) ce(LEVEL_LIST) .currentWorld: dom.choice(LEVEL_LIST) f.currentWorld

runthismap = "" if len(maplist)>=2: while runthismap == self runthismap = ran if runthismap=="": runthismap = random.choi while runthismap == self runthismap = ran if self.specificMap: runthismap = sel else: return runthismap mapcode = int(runthismap mapname = self.server.ge mapxml yesvotes = self.server.g = int(self.se

) tMapName(mapcode) etMapXML(mapcode) rver.getMapYesVotes(mapcode)) r.getMapNoVotes(mapcode)) ver.getMapPerma(mapcode)) rver.getMapDel(mapcode)) , mapname, mapxml, yesvotes, novotes, perma, mapnoexist]

novotes = int(self.serve perma = int(self.ser

mapnoexist = int(self.se self.ISCM = mapcode self.ISCMdata = [mapcode

_LIST) World: ce(LEVEL_LIST) tWorld ected map mapeditor where perma = 0')

return "-1" elif self.ISCMstatus==8: #vanilla map runthismap = random.choice(LEVEL while runthismap == self.current runthismap = random.choi if self.specificMap: runthismap = self.curren return runthismap elif self.ISCMstatus==9: #normal or prot maplist = [] dbcur.execute('select code from rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: maplist.append(r

rf[0])

mapeditor where perma = 1')

dbcur.execute('select code from rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: maplist.append(r if len(maplist)>=1: runthismap = random.choi else: runthismap = "" if len(maplist)>=2: while runthismap == self runthismap = ran if runthismap=="": runthismap = random.choi while runthismap == self runthismap = ran if self.specificMap: runthismap = sel else: return runthismap mapcode = int(runthismap mapname = self.server.ge mapxml yesvotes = self.server.g = int(self.se

rf[0]) ce(maplist)

.ISCM: dom.choice(maplist) ce(LEVEL_LIST) .currentWorld: dom.choice(LEVEL_LIST) f.currentWorld

) tMapName(mapcode) etMapXML(mapcode) rver.getMapYesVotes(mapcode)) r.getMapNoVotes(mapcode)) ver.getMapPerma(mapcode)) rver.getMapDel(mapcode)) , mapname, mapxml, yesvotes, novotes, perma, mapnoexist]

novotes = int(self.serve perma = int(self.ser

mapnoexist = int(self.se self.ISCM = mapcode self.ISCMdata = [mapcode

mapeditor where perma = 4')

return "-1" elif self.ISCMstatus==10: #shaman map maplist = [] dbcur.execute('select code from rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: maplist.append(r

rf[0])

ce(maplist)

if len(maplist)>=1: runthismap = random.choi else: runthismap = "" if len(maplist)>=2: while runthismap == self runthismap = ran if runthismap=="": runthismap = random.choi while runthismap == self runthismap = ran if self.specificMap: runthismap = sel else: return runthismap mapcode = int(runthismap mapname = self.server.ge mapxml yesvotes = self.server.g = int(self.se

.ISCM: dom.choice(maplist) ce(LEVEL_LIST) .currentWorld: dom.choice(LEVEL_LIST) f.currentWorld

) tMapName(mapcode) etMapXML(mapcode) rver.getMapYesVotes(mapcode)) r.getMapNoVotes(mapcode)) ver.getMapPerma(mapcode)) rver.getMapDel(mapcode)) , mapname, mapxml, yesvotes, novotes, perma, mapnoexist]

novotes = int(self.serve perma = int(self.ser

mapnoexist = int(self.se self.ISCM = mapcode self.ISCMdata = [mapcode

mapeditor where perma = 6')

return "-1" elif self.ISCMstatus==11: #mechanism map maplist = [] dbcur.execute('select code from rrfRows = dbcur.fetchall() if rrfRows is None: pass else: for rrf in rrfRows: maplist.append(r if len(maplist)>=1: runthismap = random.choi else: runthismap = "" if len(maplist)>=2: while runthismap == self runthismap = ran

rf[0]) ce(maplist)

.ISCM:

dom.choice(maplist) ce(LEVEL_LIST) .currentWorld: dom.choice(LEVEL_LIST) f.currentWorld

if runthismap=="": runthismap = random.choi while runthismap == self runthismap = ran if self.specificMap: runthismap = sel else: return runthismap mapcode = int(runthismap mapname = self.server.ge mapxml yesvotes = self.server.g = int(self.se

) tMapName(mapcode) etMapXML(mapcode) rver.getMapYesVotes(mapcode)) r.getMapNoVotes(mapcode)) ver.getMapPerma(mapcode)) rver.getMapDel(mapcode)) , mapname, mapxml, yesvotes, novotes, perma, mapnoexist] else:

novotes = int(self.serve perma = int(self.ser

mapnoexist = int(self.se self.ISCM = mapcode self.ISCMdata = [mapcode return "-1"

logging.info("Room "+str(self.na me)+" got an invalid ISCM Status of "+str(self.ISCMstatus)+".") self.ISCMstatus=0 runthismap = random.choice(LEVEL _LIST) while runthismap == self.current World: runthismap = random.choi ce(LEVEL_LIST) if self.specificMap: runthismap = self.curren tWorld return runthismap def closeVoting(self): self.initVotingMode=False self.votingBox=False if self.voteCloseTimer: try: self.voteCloseTimer.cancel() except: self.voteCloseTimer=None self.worldChange() def worldChange(self): if self.killAfkTimer: try: self.killAfkTimer.cancel()

self.killAfkTimer=None if self.initVotingMode: if self.votingBox: pass #print "Tried to go to next map during voting." else: if self.ISCMdata[5]==0 and self.ISCM!=-1: if not self.isTribehouse: if self.getPlayerCount()>=2: self.votingMode=True self.votingBox=True self.voteCloseTimer = re actor.callLater(8, self.closeVoting) for playerCode, client i n self.clients.items(): client.sendVoteB ox(self.ISCMdata[1], self.ISCMdata[3], self.ISCMdata[4]) else: self.votingMode=False self.closeVoting() else: self.votingMode=False self.closeVoting() else: self.votingMode=False self.closeVoting() elif self.isEditeur and self.ISCMV==0: pass elif self.isTribehouse and self.isTribehouseMap: pass else: if self.votingMode: TotalYes=self.ISCMdata[3]+self.recievedYes TotalNo=self.ISCMdata[4]+self.recievedNo if TotalYes+TotalNo>=100: TotalVotes=TotalYes+TotalNo Rating=(1.0*TotalYes/TotalVotes)*100 Rating, adecimal, somejunk = str(Rating) .partition(".") if int(Rating)<50: dbcur.execute('UPDATE mapeditor SET perma = ? WHERE code = ?', ["44", self.ISCMdata[0]]) dbcur.execute('UPDATE mapeditor SET yesvotes = ? WHERE code = ?', [int(TotalYes), self.ISCMdata[0]]) dbcur.execute('UPDATE mapeditor SET novotes = ? WHERE code = ?', [int(TotalNo), self.ISCMdata[0]]) self.votingMode=False self.recievedYes=0 self.recievedNo =0 for playerCode, client in self.clients.items(): client.Voted=False client.QualifiedVoter=False self.initVotingMode=True self.currentSyncroniserCode = None self.isCurrentlyPlayingRoom = False self.identifiantTemporaire=-1 NextCodePartie=self.CodePartieEnCours+1

except:

if NextCodePartie>9999: NextCodePartie=1 self.CodePartieEnCours=NextCodePartie self.CheckedPhysics=False self.ISCMstatus+=1 if self.ISCMstatus>11: self.ISCMstatus=0 self.isHardSham=False for playerCode, client in self.clients.items(): client.isAfk=True if self.isSurvivor and self.getPlayerCount()>=2: for playerCode, client in self.clients.items(): if not client.isDead: client.score += 2 client.shopcheese += 1 if self.isCatchTheCheeseMap==True: self.isCatchTheCheeseMap=False else: if self.isDoubleMap: numCompleted = self.FSnumCompleted-1 else: numCompleted = self.numCompleted-1 if numCompleted < 0: numCompleted = 0 for playerCode, client in self.clients.items(): if client.playerCode == self.currentSham client.score = numCompleted if self.currentShamanName: self.sendAll("\x08" + "\x11",[self.curre

anCode:

ntShamanName, numCompleted])

tems(): rentSecondShamanCode: ted

if self.isDoubleMap: if self.isCatchTheCheeseMap==True: self.isCatchTheCheeseMap=False else: numCompleted = self.SSnumCompleted-1 if numCompleted < 0: numCompleted = 0 for playerCode, client in self.clients.i if client.playerCode == self.cur client.score = numComple

if self.currentSecondShamanName: self.sendAll("\x08" + "\x11",[se lf.currentSecondShamanName, numCompleted]) self.currentShamanCode = None self.currentSecondShamanCode = None self.currentShamanName = None self.currentSecondShamanName = None

for playerCode, client in self.clients.items(): client.resetPlay() self.isDoubleMap = False if not self.specificMap: if self.isTribehouse: self.ISCM = self.tribehouseCM self.ISCMdata = self.tribehouseCMdata self.currentWorld = "-1" else: runthismap = self.selectMap() self.currentWorld = runthismap if int(self.currentWorld) in [44, 45, 46, 47, 48, 49, 50 , 51, 52, 53, 136, 137, 138, 139, 140, 141, 142, 143] and int(self.getPlayerCoun t())>=2: self.isDoubleMap = True if (self.ISCMdata[5] == 8 or self.ISCMdata[5] == 32) and int(self.getPlayerCount())>=2: self.isDoubleMap = True #if random.randrange(1000, 1030)==1024 and int(self.getP layerCount())>=2: # self.isDoubleMap = True if self.currentWorld==888: self.worldChangeTimer = reactor.callLater(60, se else:

lf.worldChange)

if not self.roundTime == 0: self.worldChangeTimer = reactor.callLate r(self.roundTime, self.worldChange) #self.worldChangeTimer = reactor.callLater(120, self.wor ldChange) self.killAfkTimer = reactor.callLater(30, self.killAfk) if self.autoRespawn or self.isTribehouseMap: if self.autoRespawnTimer: try: self.autoRespawnTimer.cancel() except: self.autoRespawnTimer=None self.autoRespawnTimer = reactor.callLater(15, se lf.respawnMice) if self.isSandbox: try: self.worldChangeTimer.cancel() except: self.worldChangeTimer=None try: self.killAfkTimer.cancel() except: self.killAfkTimer=None self.gameStartTime = getTime() self.numCompleted = 0 self.FSnumCompleted = 0 self.SSnumCompleted = 0 self.numGotCheese = 0 self.changed20secTimer = False if self.isTribehouse: self.isTribehouseMap = True

.closeRoomRoundJoin)

for playerCode, client in self.clients.items(): client.startPlay(-1, 0) self.closeRoomRoundJoinTimer = reactor.callLater(2, self

def worldChangeSpecific(self, mapnumber, custom = None, special = None): mapnumber = int(mapnumber) self.identifiantTemporaire=-1 NextCodePartie=self.CodePartieEnCours+1 if NextCodePartie>9999: NextCodePartie=1 self.CodePartieEnCours=NextCodePartie self.CheckedPhysics=False if self.worldChangeTimer: try: self.worldChangeTimer.cancel() except: self.worldChangeTimer=None if self.killAfkTimer: try: self.killAfkTimer.cancel() except: self.killAfkTimer=None self.currentSyncroniserCode = None self.isCurrentlyPlayingRoom = False self.isHardSham=False for playerCode, client in self.clients.items(): client.isAfk=True if self.isCatchTheCheeseMap==True: self.isCatchTheCheeseMap=False else: if self.isDoubleMap: numCompleted = self.FSnumCompleted-1 else: numCompleted = self.numCompleted-1 if numCompleted < 0: numCompleted = 0 if self.currentShamanName: self.sendAll("\x08" + "\x11",[self.currentShaman Name, numCompleted]) if self.isDoubleMap: for playerCode, client in self.clients.items(): if client.playerCode == self.currentSecondShaman

Code:

client.score = 0 if self.isCatchTheCheeseMap==True: self.isCatchTheCheeseMap=False else: numCompleted = self.SSnumCompleted-1 if numCompleted < 0: numCompleted = 0 if self.currentSecondShamanName: self.sendAll("\x08" + "\x11",[self.curre ntSecondShamanName, numCompleted]) self.currentShamanCode = None self.currentSecondShamanCode = None self.currentShamanName = None self.currentSecondShamanName = None

ue) lse)

for playerCode, client in self.clients.items(): client.resetPlay() self.isDoubleMap = False if special: self.currentWorld = self.selectMapSpecial(mapnumber) elif custom: self.currentWorld = self.selectMapSpecific(mapnumber, Tr else: self.currentWorld = self.selectMapSpecific(mapnumber, Fa

if int(self.currentWorld) in [44, 45, 46, 47, 48, 49, 50, 51, 52 , 53] and int(self.getPlayerCount())>=2: self.isDoubleMap = True if self.ISCMdata[5] == 8 and int(self.getPlayerCount())>=2: self.isDoubleMap = True if self.currentWorld==888: self.worldChangeTimer = reactor.callLater(60, self.world Change) else: if not self.roundTime == 0: self.worldChangeTimer = reactor.callLater(self.r oundTime, self.worldChange) self.killAfkTimer = reactor.callLater(30, self.killAfk) if self.isSandbox: try: self.worldChangeTimer.cancel() except: self.worldChangeTimer=None try: self.killAfkTimer.cancel() except: self.killAfkTimer=None self.gameStartTime = getTime() self.numCompleted = 0 self.FSnumCompleted = 0 self.SSnumCompleted = 0 self.numGotCheese = 0 self.changed20secTimer = False for playerCode, client in self.clients.items(): client.startPlay(-1, 0) if self.specificMap == 2: self.sendAllBin("\x05" + "\x2c", struct.pack('!h', 1)) self.sendAllBin("\x05" + "\x2c", struct.pack('!h', 6)) self.sendAllBin("\x05" + "\x2c", struct.pack('!h', 2)) omRoundJoin) self.closeRoomRoundJoinTimer = reactor.callLater(0, self.closeRo self.isTribehouseMap = False

def checkShouldChangeWorld(self): if self.isBootcamp: pass elif self.isTribehouse and self.isTribehouseMap: pass elif self.currentWorld == 900: pass elif self.isSandbox: pass

):

elif self.roundTime == 0: pass else: if all(client.isDead for client in self.clients.values() try: except: self.worldChangeTimer.cancel()

cel() e

self.worldChangeTimer=None if self.killAfkTimer: try: self.killAfkTimer.cancel() except: self.killAfkTimer=None if self.closeRoomRoundJoinTimer: try: self.closeRoomRoundJoinTimer.can except: self.closeRoomRoundJoinTimer=Non

self.worldChange()

def giveShamanHardSave(self): for playerCode, client in self.clients.items(): if client.playerCode == self.currentShamanCode: client.hardModeSaves += 1 if client.privilegeLevel != 0: if client.hardModeSaves in client.hardSh amTitleCheckList: unlockedtitle=client.hardShamTit leDictionary[client.hardModeSaves] client.sendUnlockedTitle(client. playerCode, unlockedtitle) client.HardModeTitleList=client. HardModeTitleList+[unlockedtitle] client.titleList = ["0"]+client. GiftTitleList+client.ShamanTitleList+client.HardModeTitleList+client.CheeseTitle List+client.FirstTitleList+client.ShopTitleList+client.BootcampTitleList if client.privilegeLevel==10: client.titleList = clien t.titleList+["440","442","444","201"] client.titleList = filter(None, client.titleList) client.sendTitleList() return 1 return 0 def giveShamanSave(self): for playerCode, client in self.clients.items(): if client.playerCode == self.currentShamanCode: client.micesaves += 1 if client.privilegeLevel != 0: if client.micesaves in client.shamanTitl eCheckList: unlockedtitle=client.shamanTitle Dictionary[client.micesaves] client.sendUnlockedTitle(client. playerCode, unlockedtitle) client.ShamanTitleList=client.Sh

amanTitleList+[unlockedtitle]

client.titleList = ["0"]+client. GiftTitleList+client.ShamanTitleList+client.HardModeTitleList+client.CheeseTitle List+client.FirstTitleList+client.ShopTitleList+client.BootcampTitleList if client.privilegeLevel==10: client.titleList = clien t.titleList+["440","442","444","201"] client.titleList = filter(None, client.titleList) client.sendTitleList() return 1 return 0 def giveSecondShamanSave(self): for playerCode, client in self.clients.items(): if client.playerCode == self.currentSecondShamanCode: client.micesaves += 1 if client.privilegeLevel != 0: if client.micesaves in client.shamanTitl eCheckList: unlockedtitle=client.shamanTitle Dictionary[client.micesaves] client.sendUnlockedTitle(client. playerCode, unlockedtitle) client.ShamanTitleList=client.Sh amanTitleList+[unlockedtitle] client.titleList = ["0"]+client. GiftTitleList+client.ShamanTitleList+client.CheeseTitleList+client.FirstTitleLis t+client.ShopTitleList if client.privilegeLevel==10: client.titleList = clien t.titleList+["440","442","444","201"] client.titleList = filter(None, client.titleList) client.sendTitleList() return 1 return 0 def checkDeathCount(self): counts=[0,0] #Dead, Alive for playerCode, client in self.clients.items(): if client.isDead: counts[0]=counts[0]+1 else: counts[1]=counts[1]+1 return counts def checkIfTooFewRemaining(self): counts=[0,0] #Dead, Alive for playerCode, client in self.clients.items(): if client.isDead: counts[0]=counts[0]+1 else: counts[1]=counts[1]+1 if self.getPlayerCount>=2: if counts[1]<=2: return True return False def checkIfDoubleShamansAreDead(self): result=0 for playerCode, client in self.clients.items():

if client.playerCode == self.currentShamanCode or client .playerCode == self.currentSecondShamanCode: if client.isDead: result+=1 else: pass if result==2: return True else: return False def checkIfShamanIsDead(self): for playerCode, client in self.clients.items(): if client.playerCode == self.currentShamanCode: if client.isDead: pass else: return False return True def checkIfShamanCanGoIn(self): allgone=1 #if all(client.isDead for client in self.clients.values()): for playerCode, client in self.clients.items(): if client.playerCode != self.currentShamanCode: if client.isDead: pass else: allgone=0 if allgone==1: return 1 else: return 0 def checkIfDoubleShamanCanGoIn(self): counts=[0,0,0,0] #Dead Shamans, Dead Mice, Not Dead Shamans, Not Dead Mice #if all(client.isDead for client in self.clients.values()): for playerCode, client in self.clients.items(): if client.isDead: if client.playerCode == self.currentShamanCode: counts[0]=counts[0]+1 elif client.playerCode == self.currentSecondSham anCode: counts[0]=counts[0]+1 else: counts[1]=counts[1]+1 else: if client.playerCode == self.currentShamanCode: counts[2]=counts[2]+1 elif client.playerCode == self.currentSecondSham anCode: counts[2]=counts[2]+1 else: counts[3]=counts[3]+1 #print counts if counts[3]==0: return True else: return False

core) ):

def resetSandbox(self): if self.isSandbox: for playerCode, client in self.clients.items(): resetpscore=0 client.sendPlayerDied(client.playerCode, resetps client.isDead=True if all(client.isDead for client in self.clients.values() #self.worldChangeTimer.cancel() #self.worldChange() for playerCode, client in self.clients.items(): client.resetPlay() self.currentWorld = self.currentWorld for playerCode, client in self.clients.items(): client.startPlay(-1,0)

pass def resetRoom(self): if self.worldChangeTimer: try: self.worldChangeTimer.cancel() except: self.worldChangeTimer=None if self.killAfkTimer: try: self.killAfkTimer.cancel() except: self.killAfkTimer=None if self.autoRespawnTimer: try: self.autoRespawnTimer.cancel() except: self.autoRespawnTimer=None for playerCode, client in self.clients.items(): resetpscore=0 client.sendPlayerDied(client.playerCode, resetpscore) client.isDead=True if all(client.isDead for client in self.clients.values()): self.worldChange() #for playerCode, client in self.clients.items(): # client.resetPlay() #self.currentWorld = self.currentWorld #for playerCode, client in self.clients.items(): # client.startPlay(0,0) def moveAllRoomClients(self, name, rec = False): if rec: for playerCode, client in self.clients.items(): self.MoveTimer = reactor.callLater(0, client.ent erRoom, self.server.recommendRoom()) else: for playerCode, client in self.clients.items(): self.MoveTimer = reactor.callLater(0, client.ent erRoom, str(name)) def addClient(self, newClient): SPEC = 0 if self.isCurrentlyPlayingRoom: newClient.isDead=True

else:

SPEC = 1 self.clients[newClient.playerCode] = newClient newClient.room = self if newClient.isHidden: pass else: if self.sNP: newClient.sendNewPlayer(newClient.getPlayerData()) newClient.startPlay(self.ISCM, SPEC) #print self.clients def updatesqlserver(self): for playerCode, client in self.clients.items(): if client.username.startswith("*"): pass else: client.updateSelfSQL() def removeClient(self, removeClient): if removeClient.playerCode in self.clients: for playerCode, client in self.clients.items(): if playerCode == removeClient.playerCode: if client.username.startswith("*"): pass else: client.updateSelfSQL() del self.clients[removeClient.playerCode] if self.getPlayerCount() == 0: self.server.closeRoom(self) return e) e: es()) removeClient.sendPlayerDisconnect(removeClient.playerCod if self.currentSyncroniserCode == removeClient.playerCod newSyncroniser = random.choice(self.clients.valu newSyncroniser.isSyncroniser = True self.currentSyncroniserCode = newSyncroniser.pla newSyncroniser.sendSynchroniser(newSyncroniser.p self.checkShouldChangeWorld() def changeSyncroniserRandom(self): newSyncroniser = random.choice(self.clients.values()) newSyncroniser.isSyncroniser = True self.currentSyncroniserCode = newSyncroniser.playerCode newSyncroniser.sendSynchroniser(newSyncroniser.playerCode) def changeSyncroniserSpecific(self, username): newSyncroniser = False

yerCode layerCode)

e)

for room in self.server.rooms.values(): for playerCode, client in room.clients.items(): if client.username == username: newSyncroniser = client break if newSyncroniser: newSyncroniser.isSyncroniser = True self.currentSyncroniserCode = newSyncroniser.playerCode newSyncroniser.sendSynchroniser(newSyncroniser.playerCod def changeScore(self, playerCode, score): for playerCode, client in self.clients.items(): if client.playerCode == playerCode: client.score = score def startSnowStorm(self): self.sendAll("\x05" + "\x17", ["0"]) #self.isSnowing=True #self.endSnowStormTimer = reactor.callLater(300, self.endSnowSto

rm)

def endSnowStorm(self): self.sendAll("\x05" + "\x17", []) self.isSnowing=False #self.snowStormStartTimer = reactor.callLater(random.randrange(9 00, 1500), self.startSnowStorm) def informAll(self, clientFunction, args): #logging.warning("Deprecated Function \"informAll\". Vars: clien tFunction-"+str(clientFunction)+" args-"+str(args)) for playerCode, client in self.clients.items(): clientFunction(client, *args) def informAllOthers(self, senderClient, clientFunction, args): #logging.warning("Deprecated Function \"informAllOthers\". Vars: clientFunction-"+str(clientFunction)+" args-"+str(args)) for playerCode, client in self.clients.items(): if playerCode != senderClient.playerCode: clientFunction(client, *args) def sendSync(self, eventTokens, data = None): for playerCode, client in self.clients.items(): if client.isSyncroniser: client.sendData(eventTokens, data) def sendAll(self, eventTokens, data = None): for playerCode, client in self.clients.items(): client.sendData(eventTokens, data) def sendAllOthers(self, senderClient, eventTokens, data): for playerCode, client in self.clients.items(): if client.playerCode != senderClient.playerCode: client.sendData(eventTokens, data) def sendAllOthersAndSelf(self, senderClient, eventTokens, data): #logging.warning("Deprecated Function \"sendAllOthersAndSelf\". Vars: eventTokens-"+str(repr(eventTokens))+" data-"+str(repr(data))) for playerCode, client in self.clients.items(): client.sendData(eventTokens, data) def sendAllChat(self, sendplayerCode, username, message): for playerCode, client in self.clients.items():

if client.muteChat: pass else: if client.censorChat: Cmessage=client.censorMessage(message) if client.Translating: try: Ltype=LanguageDetector() .detect(message).lang_code except: Ltype="br" if Ltype == "de": sendMessage=Cmessage else: try: Cmessage=client. safe_str(Translator().translate(Cmessage, lang_to="br")) except: pass sendMessage=struct.pack('!h', len(Cmessa ge))+Cmessage else: if client.Translating: try: Ltype=LanguageDetector() .detect(message).lang_code except: Ltype="br" if Ltype == "de": sendMessage=message else: Tmessage=message try: Tmessage=client. safe_str(Translator().translate(Tmessage, lang_to="br")) except: pass sendMessage=struct.pack( '!h', len(Tmessage))+Tmessage else: sendMessage=struct.pack('!h', le n(message))+message #client.sendData("\x06\x06", sendplayerCode+user name+sendMessage+"\x00\x00", True) reactor.callLater(0, client.sendData, "\x06\x06" , sendplayerCode+username+sendMessage+"\x00\x00", True) def sendAllChatF(self, sendplayerCode, username, message, senderClient): for playerCode, client in self.clients.items(): if int(client.playerCode)==int(senderClient.playerCode): if client.muteChat: pass else: if client.censorChat: Cmessage=client.censorMessage(me ssage) if client.Translating: try: Ltype=LanguageDe tector().detect(message).lang_code except:

sage

Ltype="br" if Ltype == "de": sendMessage=Cmes else: try: except:

=client.safe_str(Translator().translate(Cmessage, lang_to="br"))

Cmessage

n(Cmessage))+Cmessage

pass sendMessage=struct.pack('!h', le else: if client.Translating: try: Ltype=LanguageDe except: Ltype="br" if Ltype == "de": sendMessage=mess else: Tmessage=message try: Tmessage except: pass sendMessage=stru else: sendMessage=struct.pack(

tector().detect(message).lang_code

age

=client.safe_str(Translator().translate(Tmessage, lang_to="br"))

ct.pack('!h', len(Tmessage))+Tmessage '!h', len(message))+message

client.sendData("\x06\x06", sendplayerCo de+username+sendMessage+"\x00\x00", True) def sendAllBin(self, eventTokens, data = None): for playerCode, client in self.clients.items(): client.sendData(eventTokens, data, True) def sendAllOthersBin(self, senderClient, eventTokens, data): for playerCode, client in self.clients.items(): if client.playerCode != senderClient.playerCode: client.sendData(eventTokens, data, True) def sendAllPvSpec(self, eventTokens, privlevels, data = None, binary = N one): for playerCode, client in self.clients.items(): if client.privilegeLevel in privlevels: if binary: client.sendData(eventTokens, data, True) else: client.sendData(eventTokens, data) def sendAllPvSpecOthers(self, senderClient, eventTokens, privlevels, dat a = None, binary = None): for playerCode, client in self.clients.items(): if client.privilegeLevel in privlevels: if client.playerCode != senderClient.playerCode: if binary: client.sendData(eventTokens, dat a, True) else:

a)

client.sendData(eventTokens, dat

def sendWholeTribeRoom(self, senderClient, eventTokens, data, binary = N one, NotIgnorable = None): #Must only be called by TransformiceServer for playerCode, client in self.clients.items(): if str(client.TribeCode) == str(senderClient.TribeCode): if client.isInTribe: if binary: if NotIgnorable: client.sendData(eventTok ens, data, True) else: if not client.muteTribe: client.sendData( eventTokens, data, True) else: if NotIgnorable: client.sendData(eventTok ens, data) else: if not client.muteTribe: client.sendData( eventTokens, data) def sendWholeTribeOthersRoom(self, senderClient, eventTokens, data, bina ry = None, NotIgnorable = None): #Must only be called by TransformiceServer for playerCode, client in self.clients.items(): if str(client.TribeCode) == str(senderClient.TribeCode): if client.isInTribe: if client.playerCode != senderClient.pla yerCode: if binary: if NotIgnorable: client.sendData( eventTokens, data, True) else: if not client.mu teTribe: client.s endData(eventTokens, data, True) else: if NotIgnorable: client.sendData( eventTokens, data) else: if not client.mu teTribe: client.s endData(eventTokens, data) def sendTribeInfoUpdateRoom(self, code, greeting = None, playerlist = No ne): #Must only be called by TransformiceServer for playerCode, client in self.clients.items(): if str(client.TribeCode) == str(code): UserTribeInfo=self.server.getUserTribeInfo(clien t.username) if UserTribeInfo[0]=="": client.TribeCode = "" client.TribeName = ""

tTribeName(client.username) .getTribeData(UserTribeInfo[1])

client.TribeFromage = 0 client.TribeMessage = "" client.TribeInfo = "" client.TribeRank = "" client.TribeHouse = "0" client.isInTribe = False client.muteTribe = False client.sendTribeZeroGreeting() client.tribe = self.server.ge else: TribeData = self.server

plit("|") 2]

client.TribeCode = TribeData[0] client.TribeName = TribeData[1] client.TribeFromage = TribeData[2] client.TribeMessage = TribeData[3] client.TribeInfo = TribeData[4].s client.TribeRank = UserTribeInfo[

client.TribeHouse = TribeData[5] client.isInTribe = True if greeting: client.sendTribeGreeting() if playerlist: client.sendTribeList() def sendWholeServer(self, senderClient, eventTokens, data, binary = None for room in self.server.rooms.values(): if binary: reactor.callLater(0, room.sendAllBin, eventToken else: reactor.callLater(0, room.sendAll, eventTokens,

):

s, data) data)

#for playerCode, client in room.clients.items(): # if binary: # client.sendData(eventTokens, data, True) # else: # client.sendData(eventTokens, data) def checkRoomInvite(self, senderClient, name): for room in self.server.rooms.values(): if room.name == "\x03[Private] "+name: if senderClient.username in room.RoomInvite: return True else: return False return False

def sendArbChat(self, senderClient, eventTokens, data, binary = None): for room in self.server.rooms.values(): if binary: reactor.callLater(0, room.sendAllPvSpec, eventTo kens, [10,6,5,3], data, True) else: reactor.callLater(0, room.sendAllPvSpec, eventTo kens, [10,6,5,3], data)

#for playerCode, client in room.clients.items(): # if client.privilegeLevel==10 or client.privilege Level==6 or client.privilegeLevel==5 or client.privilegeLevel==3: # if binary: # client.sendData(eventTokens, dat a, True) # else: # client.sendData(eventTokens, dat a) def sendModChat(self, senderClient, eventTokens, data, binary = None): for room in self.server.rooms.values(): if binary: reactor.callLater(0, room.sendAllPvSpec, eventTo kens, [10,6,5], data, True) else: reactor.callLater(0, room.sendAllPvSpec, eventTo kens, [10,6,5], data) #for playerCode, client in room.clients.items(): # if client.privilegeLevel==10 or client.privilege Level==6 or client.privilegeLevel==5: # if binary: # client.sendData(eventTokens, dat a, True) # else: # client.sendData(eventTokens, dat a) def sendArbChatOthers(self, senderClient, eventTokens, data, binary = No ne): for room in self.server.rooms.values(): if binary: reactor.callLater(0, room.sendAllPvSpecOthers, s enderClient, eventTokens, [10,6,5,3], data, True) else: reactor.callLater(0, room.sendAllPvSpecOthers, s enderClient, eventTokens, [10,6,5,3], data) #for playerCode, client in room.clients.items(): # if client.privilegeLevel==10 or client.privilege Level==6 or client.privilegeLevel==5 or client.privilegeLevel==3: # if client.playerCode != senderClient.pla yerCode: # if binary: # client.sendData(eventTok ens, data, True) # else: # client.sendData(eventTok ens, data) def sendModChatOthers(self, senderClient, eventTokens, data, binary = No ne): for room in self.server.rooms.values(): if binary: reactor.callLater(0, room.sendAllPvSpecOthers, s enderClient, eventTokens, [10,6,5], data, True) else: reactor.callLater(0, room.sendAllPvSpecOthers, s enderClient, eventTokens, [10,6,5], data) #for playerCode, client in room.clients.items(): # if client.privilegeLevel==10 or client.privilege Level==6 or client.privilegeLevel==5: # if client.playerCode != senderClient.pla yerCode:

ens, data, True) ens, data)

# # # #

if binary: client.sendData(eventTok else: client.sendData(eventTok

def sendModChatOthersLogin(self, senderClient, eventTokens, name): for room in self.server.rooms.values(): for playerCode, client in room.clients.items(): if client.privilegeLevel==10 or client.privilege Level==6 or client.privilegeLevel==5: #if client.playerCode != senderClient.pl ayerCode: sname="Servidor" if client.Langue=="EN": message = name+" just connected. " elif client.Langue=="BR": message = name+" acabou de se co nectar." elif client.Langue=="FR": message = name+" vient de se con necter." elif client.Langue=="RU": message = name+" ???????????." elif client.Langue=="TR": message = name+" evrimii oldu." elif client.Langue=="CN": message = name+" ?????." else: message = name+" Acabou de se co nectar." client.sendData("\x1A\x05", [sname, mess age]) #data="\x03"+struct.pack('!h', l en(sname))+sname+struct.pack('!h', len(message))+message+"\x00\x00" #client.sendData(eventTokens, da ta, True) def sendAllStaffInRoom(self, senderClient, eventTokens, data, binary = N one): for playerCode, client in self.clients.items(): if client.privilegeLevel==10 or client.privilegeLevel==6 or client.privilegeLevel==5 or client.privilegeLevel==3: if binary: client.sendData(eventTokens, data, True) else: client.sendData(eventTokens, data) def sendAllStaffInRoomVoteBan(self, senderClient, selfName, username, ba ncount): for playerCode, client in self.clients.items(): if client.privilegeLevel==10 or client.privilegeLevel==6 or client.privilegeLevel==5 or client.privilegeLevel==3: #client.sendData(eventTokens, data) if client.Langue=="EN": client.sendData("\x06"+"\x14",[selfName+ " requested ban of "+username+" ("+str(bancount)+"/6)."]) elif client.Langue=="FR": client.sendData("\x06"+"\x14",[selfName+ " demande le bannissement de "+username+" ("+str(bancount)+"/6)."])

elif client.Langue=="BR": client.sendData("\x06"+"\x14",[selfName+ " (This string has not been translated yet [4742]) "+username+" ("+str(bancount) +"/6)."]) elif client.Langue=="RU": client.sendData("\x06"+"\x14",[selfName+ " (This string has not been translated yet [4744]) "+username+" ("+str(bancount) +"/6)."]) elif client.Langue=="TR": client.sendData("\x06"+"\x14",[selfName+ " (This string has not been translated yet [4746]) "+username+" ("+str(bancount) +"/6)."]) elif client.Langue=="CN": client.sendData("\x06"+"\x14",[selfName+ " (This string has not been translated yet [4748]) "+username+" ("+str(bancount) +"/6)."]) else: client.sendData("\x06"+"\x14",[selfName+ " requested ban of "+username+" ("+str(bancount)+"/6)."]) def getPlayerCode(self, name, OnlySelf = None): if OnlySelf: for playerCode, client in self.clients.items(): if client.username == name: return playerCode break return 0 else: for room in self.server.rooms.values(): for playerCode, client in room.clients.items(): if client.username == name: return playerCode break return 0 def getCurrentSync(self): if self.eSync: return "Everyone" elif self.sSync: for playerCode, client in self.clients.items(): if client.playerCode == self.currentSyncroniserC return client.username break return "Nobody"

ode:

else: return 0

def killAfk(self): if self.isBootcamp: pass if self.isTribehouseMap: pass elif self.isEditeur: pass elif self.isTotemEditeur: pass elif self.autoRespawn: pass else:

if int((getTime()-self.gameStartTime)) > 32 or int((getT ime()-self.gameStartTime)) < 29: #logging.error('AFK kill timer invalid. Time: '+ str(int((getTime()-self.gameStartTime)))) pass else: for playerCode, client in self.clients.items(): if not client.isDead: if client.isAfk == True: client.isDead = True client.score -= 1 if client.score < 0: client.score = 0 client.sendPlayerDied(cl ient.playerCode, client.score) else: pass self.checkShouldChangeWorld() def closeRoomRoundJoin(self): self.isCurrentlyPlayingRoom = True def killAll(self): for playerCode, client in self.clients.items(): if not client.isDead: resetpscore=client.score+1 client.sendPlayerDied(client.playerCode, resetps client.isDead=True self.checkShouldChangeWorld() def killAllNoDie(self): for playerCode, client in self.clients.items(): if not client.isDead: client.isDead=True self.checkShouldChangeWorld() def killShaman(self): for playerCode, client in self.clients.items(): if client.playerCode == self.currentShamanCode: client.score -= 1 if client.score < 0: client.score = 0 client.sendPlayerDied(client.playerCode, client. client.isDead=True self.checkShouldChangeWorld() def getPlayerCount(self, UniqueIPs = None): if UniqueIPs: IPlist=[] for playerCode, client in self.clients.items(): if not client.address[0] in IPlist: IPlist.append(client.address[0]) return len(IPlist) else: return len(self.clients) def getPlayerList(self, Noshop = None):

core)

score)

if Noshop: for playerCode, client in self.clients.items(): if client.isHidden: pass else: yield client.getPlayerData(True) else: for playerCode, client in self.clients.items(): if client.isHidden: pass else: yield client.getPlayerData() def getHighestShaman(self): clientscores = [] clientcode = 0 for playerCode, client in self.clients.items(): clientscores.append(client.score) for playerCode, client in self.clients.items(): if client.score==max(clientscores): clientcode=playerCode clientname=client.username return clientcode def getSecondHighestShaman(self): clientscores = [] clientcode = 0 for playerCode, client in self.clients.items(): clientscores.append(client.score) clientscores.remove(max(clientscores)) for playerCode, client in self.clients.items(): if client.score==max(clientscores): clientcode=playerCode clientname=client.username return clientcode def getShamanCode(self): if self.currentShamanCode is None: if self.currentWorld in [7, 8, 14, 22, 23, 28, 29, 54, 5 5, 57, 58, 59, 60, 61, 70, 77, 78, 87, 88, 89, 92, 122, 123, 124, 125, 126, 1007 , 888, 900] + range(200,210+1): self.currentShamanCode = 0 elif self.SPR_Room and self.spc0: self.currentShamanCode = 0 elif self.ISCMdata[5] == 7: self.currentShamanCode = 0 elif self.nobodyIsShaman or self.isTribehouseMap: self.currentShamanCode = 0 elif self.everybodyIsShaman: self.currentShamanCode = 0 else: if self.forceNextShaman!=False: self.currentShamanCode=self.forceNextSha man self.forceNextShaman=False for playerCode, client in self.clients.i tems(): if client.playerCode == self.cur rentShamanCode: self.currentShamanName =

client.username else: Shaman()

return self.currentShamanCode self.currentShamanCode = self.getHighest

if self.currentShamanCode == 0: self.currentShamanName = None else: for playerCode, client in self.clients.items(): if client.playerCode == self.currentShamanCode: self.currentShamanName = client.username return self.currentShamanCode

def getDoubleShamanCode(self): if self.forceNextShaman!=False: self.currentShamanCode=self.forceNextShaman self.forceNextShaman=False if self.currentSecondShamanCode is None: self.currentSecondShamanCode = self.getSecondHig hestShaman() while self.currentSecondShamanCode == self.curre ntShamanCode: self.currentSecondShamanCode = random.ch oice(self.clients.keys()) for playerCode, client in self.clients.items(): if client.playerCode == self.currentShamanCode: self.currentShamanName = client.username for playerCode, client in self.clients.items(): if client.playerCode == self.currentSecondShaman Code: self.currentSecondShamanName = client.us ername return [self.currentShamanCode, self.currentSecondShaman Code] else: if self.currentShamanCode is None: self.currentShamanCode = self.getHighestShaman() if self.currentSecondShamanCode is None: self.currentSecondShamanCode = self.getSecondHig hestShaman() while self.currentSecondShamanCode == self.curre ntShamanCode: self.currentSecondShamanCode = random.ch oice(self.clients.keys()) for playerCode, client in self.clients.items(): if client.playerCode == self.currentShamanCode: self.currentShamanName = client.username for playerCode, client in self.clients.items(): if client.playerCode == self.currentSecondShaman Code: self.currentSecondShamanName = client.us ername return [self.currentShamanCode, self.currentSecondShaman Code] def getSyncroniserCode(self): if self.currentSyncroniserCode is None: self.currentSyncroniserCode = random.choice(self.clients return self.currentSyncroniserCode

.keys())

if __name__ == "__main__": os.system('title Transformice Server '+VERSION) if not os.path.exists("Kikoo.swf"): os._exit(16) if int(os.stat("dbfile.sqlite")[6])==0: os._exit(17) #443, 44444, 44440, 5555, 3724, and 6112 f = TransformiceServer() reactor.listenTCP(44444, f) #reactor.listenTCP(443, f) reactor.listenTCP(777, f) reactor.listenTCP(44440, f) reactor.listenTCP(5555, f) reactor.listenTCP(6112, f) reactor.listenTCP(3724, f) reactor.listenTCP(450, f) reactor.listenTCP(8000, f) reactor.run()

You might also like