def resetFlags(self): #remake the flags self._flag1 = bs.Flag(position=(0, 3, 1), touchable=True, color=(0, 0, 1)) self._flag2 = bs.Flag(position=(0, 3, -5), touchable=True, color=(1, 0, 0)) self._flag3 = bs.Flag(position=(3, 3, -2), touchable=True, color=(0, 1, 0)) self._flag4 = bs.Flag(position=(-3, 3, -2), touchable=True, color=(1, 1, 1)) self._flag5 = bs.Flag(position=(1.8, 3, .2), touchable=True, color=(0, 1, 1)) self._flag6 = bs.Flag(position=(-1.8, 3, .2), touchable=True, color=(1, 0, 1)) self._flag7 = bs.Flag(position=(1.8, 3, -3.8), touchable=True, color=(1, 1, 0)) self._flag8 = bs.Flag(position=(-1.8, 3, -3.8), touchable=True, color=(0, 0, 0))
def onBegin(self): bs.TeamGameActivity.onBegin(self) self.setupStandardTimeLimit(self.settings['Time Limit']) # self.setupStandardPowerupDrops() #no powerups due to boxing self._flagPos = self.getMap().getFlagPosition(None) bs.gameTimer(1000, self._tick, repeat=True) self._flagState = self.FLAG_NEW self.projectFlagStand(self._flagPos) self._flag = bs.Flag(position=self._flagPos, touchable=False, color=(1, 1, 1)) self._flagLight = bs.newNode('light', attrs={ 'position': self._flagPos, 'intensity': 0.2, 'heightAttenuated': False, 'radius': 0.4, 'color': (0.2, 0.2, 0.2) }) # flag region bs.newNode('region', attrs={ 'position': self._flagPos, 'scale': (1.8, 1.8, 1.8), 'type': 'sphere', 'materials': [ self._flagRegionMaterial, bs.getSharedObject('regionMaterial') ] }) self._updateFlagState()
def onBegin(self): bs.TeamGameActivity.onBegin(self) self.setupStandardTimeLimit(self.settings['Time Limit']) self.setupStandardPowerupDrops() if len(self.teams) > 0: self._scoreToWin = self.settings['Capsules to Collect'] * max(1,max(len(t.players) for t in self.teams)) else: self._scoreToWin = self.settings['Capsules to Collect'] self._updateScoreBoard() self._dingSound = bs.getSound('dingSmall') if isinstance(bs.getActivity().getSession(),bs.FreeForAllSession): self._flagNumber = random.randint(0,1) self._flagPos = self.getMap().getFlagPosition(self._flagNumber) else: self._flagPos = self.getMap().getFlagPosition(None) bs.gameTimer(1000,self._tick,repeat=True) self._flagState = self.FLAG_NEW self.projectFlagStand(self._flagPos) self._flag = bs.Flag(position=self._flagPos, touchable=False, color=(1,1,1)) self._flagLight = bs.newNode('light', attrs={'position':self._flagPos, 'intensity':0.2, 'heightAttenuated':False, 'radius':0.4, 'color':(0.2,0.2,0.2)}) # flag region bs.newNode('region', attrs={'position':self._flagPos, 'scale': (1.8,1.8,1.8), 'type': 'sphere', 'materials':[self._flagRegionMaterial,bs.getSharedObject('regionMaterial')]}) self._updateFlagState()
def makeRound(self): for player in self.players: if player.gameData['survived']: player.gameData['score'] += 10 self.roundNum += 1 self.flags = [] self.spawned = [] angle = random.randint(0, 359) c = 0 for player in self.players: if player.gameData['survived']: c += 1 spacing = 10 for player in self.players: player.gameData['done'] = False if player.gameData['survived']: self.spawnPlayerSpaz(player, (.5, 5, -4)) self.spawned.append(player) try: spacing = 360 // (c) except: self.checkEnd() colors = [(1, 0, 0), (0, 1, 0), (0, 0, 1), (1, 1, 0), (1, 0, 1), (0, 1, 1), (0, 0, 0)] for i in range(c - 1): angle += spacing angle %= 360 x = 6 * sin(degrees(angle)) z = 6 * cos(degrees(angle)) flag = bs.Flag(position=(x + .5, 5, z - 4), color=colors[i]).autoRetain() self.flags.append(flag)
def _spawnFlag(self): bs.playSound(self._swipSound) self._flashFlagSpawn() self._flag = bs.Flag(droppedTimeout=20, position=self._flagSpawnPos) self._flagState = self.FLAG_NEW self._flag.light = bs.newNode('light', owner=self._flag.node, attrs={ 'intensity': 0.2, 'radius': 0.3, 'color': (0.2, 0.2, 0.2) }) self._flag.node.connectAttr('position', self._flag.light, 'position') self._updateFlagState()
def onBegin(self): bs.TeamGameActivity.onBegin(self) self.setupStandardTimeLimit(self.settings['Time Limit']) self.setupStandardPowerupDrops() self._baseRegionMaterials = {} for team in self.teams: m = self._baseRegionMaterials[team.getID()] = bs.Material() m.addActions(conditions=('theyHaveMaterial', bs.getSharedObject('playerMaterial')), actions=(('modifyPartCollision', 'collide', True), ('modifyPartCollision', 'physical', False), ('call', 'atConnect', bs.Call(self._handleBaseCollide, team)))) # create a score region and flag for each team for team in self.teams: team.gameData['basePos'] = self.getMap().getFlagPosition( team.getID()) bs.newNode('light', attrs={ 'position': team.gameData['basePos'], 'intensity': 0.6, 'heightAttenuated': False, 'volumeIntensityScale': 0.1, 'radius': 0.1, 'color': team.color }) self.projectFlagStand(team.gameData['basePos']) team.gameData['flag'] = bs.Flag(touchable=False, position=team.gameData['basePos'], color=team.color) p = team.gameData['basePos'] region = bs.newNode('region', owner=team.gameData['flag'].node, attrs={ 'position': (p[0], p[1] + 0.75, p[2]), 'scale': (0.5, 0.5, 0.5), 'type': 'sphere', 'materials': [self._baseRegionMaterials[team.getID()]] })
def __init__(self, settings): bs.TeamGameActivity.__init__(self, settings) self._puckMaterial = bs.Material() self._puckMaterial.addActions(actions=(("modifyPartCollision", "friction", 100000))) self._puckMaterial.addActions( conditions=("theyHaveMaterial", bs.getSharedObject('pickupMaterial')), actions=(("modifyPartCollision", "collide", False))) self._puckMaterial.addActions( conditions=(("weAreYoungerThan", 100), 'and', ("theyHaveMaterial", bs.getSharedObject('objectMaterial'))), actions=(("modifyNodeCollision", "collide", False))) self.pucks = [] self.flag = bs.Flag(color=(1, 1, 1), position=(0, 1, -2), touchable=True)
def _setChosenOnePlayer(self,player): try: for p in self.players: p.gameData['chosenLight'] = None bs.playSound(self._swipSound) if player is None or not player.exists(): self._flag = bs.Flag(color=(1,0.9,0.2), position=self._flagSpawnPos, touchable=False) self._chosenOnePlayer = None l = bs.newNode('light', owner=self._flag.node, attrs={'position': self._flagSpawnPos, 'intensity':0.6, 'heightAttenuated':False, 'volumeIntensityScale':0.1, 'radius':0.1, 'color': (1.2,1.2,0.4)}) self._flashFlagSpawn() else: if player.actor is not None: self._flag = None self._chosenOnePlayer = player if player.actor.node.exists(): if self.settings['Chosen One Gets Shield']: player.actor.handleMessage(bs.PowerupMessage('shield')) if self.settings['Chosen One Gets Gloves']: player.actor.handleMessage(bs.PowerupMessage('punch')) # use a color that's partway between their team color and white color = [0.3+c*0.7 for c in bs.getNormalizedColor(player.getTeam().color)] l = player.gameData['chosenLight'] = bs.NodeActor(bs.newNode('light', attrs={"intensity":0.6, "heightAttenuated":False, "volumeIntensityScale":0.1, "radius":0.13, "color": color})) bs.animate(l.node,'intensity',{0:1.0, 200:0.4, 400:1.0},loop=True) player.actor.node.connectAttr('position',l.node,'position') except Exception,e: import traceback print 'EXC in _setChosenOnePlayer' traceback.print_exc(e) traceback,print_stack()
def _spawnFlag(self): bs.playSound(self._swipSound) bs.playSound(self._whistleSound) self._flashFlagSpawn() self._flag = bs.Flag(position=self._flagSpawnPos, droppedTimeout=20, color=(1, 1, 0.3)) self._flag.scored = False self._flag.heldCount = 0 self._flag.lastHoldingPlayer = None self._flag.light = bs.newNode("light", owner=self._flag.node, attrs={ "intensity": 0.25, "heightAttenuated": False, "radius": 0.2, "color": (0.9, 0.7, 0.0) }) self._flag.node.connectAttr('position', self._flag.light, 'position')
def _spawnFlag(self): bs.playSound(self._swipSound) bs.playSound(self._whistleSound) self._flashFlagSpawn() self._flag = bs.Flag(position=self._flagSpawnPos, droppedTimeout=20, color=(1, 1, 0.3)) self._flag.node.isAreaOfInterest = True self._flag.respawnTimer = None self._flag.scored = False self._flag.heldCount = 0 self._flag.light = bs.newNode('light', owner=self._flag.node, attrs={ 'intensity': 0.25, 'heightAttenuated': False, 'radius': 0.1, 'color': (0.9, 0.7, 0.0) }) self._flag.node.connectAttr('position', self._flag.light, 'position')
def onBegin(self): bs.TeamGameActivity.onBegin(self) self.setupStandardTimeLimit(self.settings['Time Limit']) # self.setupStandardPowerupDrops() #no powerups due to boxing self._flagPos = self.getMap().getFlagPosition(None) bs.gameTimer(1000, self._tick, repeat=True) self._flagState = self.FLAG_NEW self.projectFlagStand(self._flagPos) self._flag = bs.Flag(position=self._flagPos, touchable=False, color=(1, 1, 1)) self._flagLight = bs.newNode('light', attrs={ 'position': self._flagPos, 'intensity': 0.2, 'heightAttenuated': False, 'radius': 0.4, 'color': (0.2, 0.2, 0.2) }) # flag region bs.newNode('region', attrs={ 'position': self._flagPos, 'scale': (1.8, 1.8, 1.8), 'type': 'sphere', 'materials': [ self._flagRegionMaterial, bs.getSharedObject('regionMaterial') ] }) self._updateFlagState() if self.settings["Change day to night"]: bs.getActivity().autoTint = True tint = bs.getSharedObject('globals').tint c = bs.newNode("combine", attrs={ 'input0': tint[0], 'input1': tint[1], 'input2': tint[2], 'size': 3 }) if self._isSlowMotion == False: bs.animate(c, 'input0', { 0: tint[0], 60000: 0.6, 120000: 0.5 if bs.getEnvironment()['platform'] == 'android' else 0.2, 180000: 0.6, 240000: tint[0] }, loop=True) bs.animate(c, 'input1', { 0: tint[1], 60000: 0.3, 120000: 0.7 if bs.getEnvironment()['platform'] == 'android' else 0.2, 180000: 0.3, 240000: tint[1] }, loop=True) bs.animate(c, 'input2', { 0: tint[2], 60000: 0.3, 120000: 1 if bs.getEnvironment()['platform'] == 'android' else 0.6, 180000: 0.3, 240000: tint[2] }, loop=True) else: bs.animate(c, 'input0', { 0: tint[0], 30000: 0.6, 60000: 0.5 if bs.getEnvironment()['platform'] == 'android' else 0.2, 90000: 0.6, 120000: tint[0] }, loop=True) bs.animate(c, 'input1', { 0: tint[1], 30000: 0.3, 60000: 0.7 if bs.getEnvironment()['platform'] == 'android' else 0.2, 90000: 0.3, 120000: tint[1] }, loop=True) bs.animate(c, 'input2', { 0: tint[2], 30000: 0.3, 60000: 1 if bs.getEnvironment()['platform'] == 'android' else 0.6, 90000: 0.3, 120000: tint[2] }, loop=True) def superkostil(): bs.getActivity().stdTint = bs.getSharedObject('globals').tint if bs.getActivity().autoTint == True: c.connectAttr('output', bs.getSharedObject('globals'), 'tint') self.updateTimer = bs.gameTimer(10, superkostil, repeat=True)
def blueFlag(self): self.green = None self.blue = bs.Flag(position=(0.3, 5, -4.3), touchable=True, color=(0.5, 0.5, 2)) bs.gameTimer(100, self.loopFlag)
def greenFlag(self): self.red = None self.green = bs.Flag(position=(0.3, 5, -4.3), touchable=True, color=(0.5, 2, 0.5)) bs.gameTimer(100, self.blueFlag)
def redFlag(self): self.red = bs.Flag(position=(0.3, 5, -4.3), touchable=True, color=(2, 0.5, 0.5)) bs.gameTimer(100, self.greenFlag)
def opt(self, clientID=None, msg=""): global gEvent, admins, vips, settings global banned, prefixes if gSettingsEnabled: settings = bs.get_settings() admins, vips, banned, prefixes = settings.get("admins", []), settings.get("vips", []), \ settings.get("banned", []), settings.get("prefixes", {}) a = bsInternal._getForegroundHostActivity() roster = bsInternal._getGameRoster() if gEvent is None: gEvent = bsInternal._getAccountMiscReadVal('easter', False) def format_message(msg=''): msg = msg.replace("/", "") mg = msg.split(" ") command = mg[0].lower() if len(mg) > 1: arg = mg[1:] for i in range(len(arg)): key = arg[i] c = is_account(key, True) if c is not None: arg[i] = c else: arg[i] = key.lower() else: arg = [] if self.player is not None and self.player.exists() and command in ['s', 'summon'] and hasattr(self.player.actor.node, 'position'): if ('~' in arg) or ('^' in arg): rng = (2, 5) if len(arg) > 0: if arg[0] in ['f','flag']: rng = (1, 4) for i in range(rng[0], rng[1]): if len(arg) > i and arg[i] in ["~", "^"]: arg[i] = self.player.actor.node.position[i-rng[0]] return msg, command, arg def check_player(): global admins self.is_vip = self.is_admin = self.is_host = False self.player = None host = get_account_string(arg=bsInternal._getAccountDisplayString(True)) if gSettingsEnabled: hosts = bs.get_setting("hosts", []) if host not in hosts: hosts.append(host) bs.set_setting("hosts", hosts) else: hosts = [] if len(roster) > 0: account = None for i in roster: if i['clientID'] == clientID: account = i['displayString'].decode('utf-8') break if account is not None: if account in vips: self.is_vip = True if account in admins: self.is_vip = self.is_admin = True if account == host or (account != host and account in hosts): self.is_host = self.is_admin = self.is_vip = True for i in a.players: if i.exists(): id = i.getInputDevice().getClientID() if id == clientID: self.player = i else: self.is_host = self.is_admin = self.is_vip = True if len(a.players) > 0: self.player = a.players[0] check_player() msg, command, arg = format_message(msg=msg) if a is not None: with bs.Context(a): if command in ["h", "help"] and self.is_vip: commands, num = {1: []}, 1 def add_commands(cmds=[], commands={1: []}, num=1): for i in cmds: if len(commands[num]) < 30: commands[num].append(i) else: num += 1 commands[num] = [] commands[num].append(i) return commands, num commands, num = add_commands(["help - помощь", "time - установить время", \ "skin - изменить облик", "kick - выгнать из игры", \ "end - закончить игру", "sm - замедленный режим игры", \ "rise - возродить", "frozen - заморозить", "shatter - разделить на части"], commands=commands, num=num) if self.is_admin: commands, num = add_commands(['summon - вызвать объект', 'vip - выдать права vip-пользователя', \ 'punch - сила удара', 'hitpoints - очки жизни', 'prefix - выдать префикс', \ 'ban - забанить', 'mp - максимальное кол-во игроков', \ 'pause - остановить/продолжить игру', \ 'sleep - усыпить', 'head - ребят я черешня', \ 'nodes - список всех типов объектов на карте', 'connect - а это че', \ 'curse - проклятие'], commands=commands, num=num) if gEvent: commands, num = add_commands(['flex - хайпово флексить'], commands=commands, num=num) if self.is_admin: commands, num = add_commands(['dance - станцевать брейк', 'dance2 - станцевать лезгинку', 'party - устроить вечеринку'], commands=commands, num=num) if self.is_host: commands, num = add_commands(['default - отобрать права пользователя', \ 'admin - выдать права администратора'], commands=commands, num=num) commands, num = add_commands(['help [номер страницы] - следующий список команд', \ 'команды могут выполняться через спец-символ ;', 'pause;/pause(перед каждой командой /)'], commands=commands, num=num) num = 1 if len(arg) > 0 and bigger_than_zero(arg[0]): num=int(arg[0]) commands = commands.get(num, []) for i in commands: send_message(i) elif command in ["l", "list"] and self.is_vip: if len(roster) > 0: players = [] for i in [[c["id"] for c in k["players"]] for k in roster]: for d in i: players.append(d) players.sort() for i in roster: data = [(", ").join([r["nameFull"] for r in i["players"]]) if len(i["players"]) > 0 else " - ", (", ").join([str(players.index(r)) for r in [c["id"] for c in i["players"]]]) if len(i["players"]) > 0 else " - "] bsInternal._chatMessage(i["displayString"] + " : "+ data[0] + " : " + data[1]) else: if len(a.players) > 0: for i in a.players: bsInternal._chatMessage(i.getInputDevice().getPlayer().getName(True) + " : " + str(a.players.index(i))) else: send_message(" - ") elif command in ['timeset', 'time'] and self.is_vip: if len(arg) > 0: tint = get_tint() self.time.update({"normal": get_normal_tint()}) for i in self.time: if arg[0] == i: bs.getSharedObject("globals").tint = tint = self.time[i] break if arg[0] == 'cycle': bs.getSharedObject('globals').tint = tint = get_normal_tint() set_tint(tint=tint) else: for i in ['time [normal|sunrise|day|noon|sunset|night|cycle]', \ 'timeset cycle - дневной цикл(плавная смена времени)', \ 'timeset noon - середина дня', 'timeset sunset - закат']: send_message(i) elif command in ['summon','s'] and self.is_admin: if len(arg) > 0: if arg[0] in ['bomb','b']: if len(arg) > 1: bombs = [i.lower() for i in gBombs] bombType, pos, count = 'normal', [0, 5, 0], 1 bombType = gBombs[bombs.index(arg[1].lower())] if arg[1].lower() in bombs else 'normal' if len(arg) > 5: count = min(30, int(arg[5])) if bigger_than_zero(arg[5]) else 1 for i in range(2, 5): if len(arg) > i and is_num(arg[i]): pos[i-2] = float(arg[i]) for i in range(count): bs.Bomb(position=tuple(pos), bombType=bombType).autoRetain() else: mg = bs.text_split(words=gBombs) mg += "s bomb [название] [позиция(3 числа)] [кол-во]\ns bomb normal 0 5 0 1" for i in mg.split('\n'): send_message(i) elif arg[0] in ['bot']: if len(arg) > 1: bots = [i.lower() for i in gBots] botType, pos, count = 'BomberBot', [0, 5, 0], 1 botType = gBots[bots.index(arg[1].lower())] if arg[1].lower() in bots else 'BomberBot' if len(arg) > 5: count = min(30, int(arg[5])) if bigger_than_zero(arg[5]) else 1 for i in range(2, 5): if len(arg) > i and is_num(arg[i]): pos[i-2] = float(arg[i]) if hasattr(bsSpaz, botType): bot = eval("bsSpaz."+botType) if not hasattr(self, "_bots") or (hasattr(self, "_bots") and self._bots is None): self._bots = bs.BotSet() for i in range(count): self._bots.spawnBot(bot, pos=tuple(pos), spawnTime=0, onSpawnCall=self._on_spawn) else: mg = bs.text_split(words=gBots, words_count=3) mg += "s bot [название] [позиция(3 числа)] [кол-во]\ns bot BomberBot 0 5 0 1" for i in mg.split('\n'): send_message(i) elif arg[0] in ['flag','f']: if len(arg) > 1: pos, count, time_out, color = [0, 5, 0], 1, 20, [1, 1, 0] if len(arg) > 4: count = min(30, int(arg[4])) if bigger_than_zero(arg[4]) else 1 if len(arg) > 5: time_out = int(arg[5]) if bigger_than_zero(arg[5]) else 20 for i in range(1, 4): if len(arg) > i and is_num(arg[i]): pos[i-1] = float(arg[i]) for i in range(6, 9): if len(arg) > i and is_num(arg[i]): color[i-6] = float(arg[i]) for i in range(count): bs.Flag(position=tuple(pos), droppedTimeout=time_out, color=color).autoRetain() else: for i in ["s flag [позиция(3 числа)] [кол-во] [тайм-аут] [цвет(3 числа)]", \ "s flag 0 5 0", "s flag ~ ~ ~ 10 999 1 0 0"]: send_message(i) elif arg[0] in ['powerup','p']: if len(arg) > 1: powerups = [i.lower() for i in gPowerups] powerupType, pos, count = 'punch', [0, 5, 0], 1 powerupType = gPowerups[powerups.index(arg[1].lower())] if arg[1].lower() in powerups else 'punch' if len(arg) > 5: count = min(30, int(arg[5])) if bigger_than_zero(arg[5]) else 1 for i in range(2, 5): if len(arg) > i and is_num(arg[i]): pos[i-2] = float(arg[i]) for i in range(count): bs.Powerup(position=tuple(pos),powerupType=powerupType).autoRetain() else: mg = bs.text_split(words=gPowerups) mg += "s p [название] [позиция(3 числа)] [кол-во]\ns p punch 0 5 0 1" for i in mg.split('\n'): send_message(i) elif arg[0] in ['box']: if len(arg) > 1: boxTypes = ['s','small','big','b'] boxType, pos, count = 'small', [0, 5, 0], 1 boxType = arg[1].lower() if arg[1].lower() in boxTypes else 'small' if len(arg) > 5: count = min(30, int(arg[5])) if bigger_than_zero(arg[5]) else 1 for i in range(2, 5): if len(arg) > i and is_num(arg[i]): pos[i-2] = float(arg[i]) for i in range(count): Box(pos=tuple(pos), scale=1 if boxType in ["s","small"] else 1.38, owner=None).autoRetain() else: for i in ["s box [small|big] [позиция] [кол-во]", \ "s box small 0 5 0", "s box big ~ ~ ~ 5"]: send_message(i) else: for i in ["summon [bomb|powerup|bot|box|flag]", "bomb - вызвать бомбу.", "powerup - вызвать усилитель.", "bot - вызвать бота.", "box - вызвать коробку."]: send_message(i) elif command in ['skin'] and self.is_vip: if len(arg) > 0: if len(arg) < 2: arg.append(get_account_string(self.player)) if arg[0] in gSkins or arg[0] == 'delete': account = is_account(arg[1], True) if arg[1] == "all": if arg[0] == 'delete': for i in a.players: skins.delete_skin(i) else: skins.change_skin(skin=arg[0], players=[a.players]) elif account is not None: if arg[0] == 'delete': skins.delete_skin(account) else: skins.change_skin(skin=arg[0], players=[account]) elif is_num(arg[1]): if len(a.players) > int(arg[1]) and int(arg[1]) >= 0: if arg[0] == 'delete': skins.delete_skin(int(arg[1])) else: skins.change_skin(skin=arg[0], players=[int(arg[1])]) else: mg = bs.text_split(words=gSkins) mg += "skin [название] [номер игрока]\nskin bunny 0\nskin pixie" for i in mg.split('\n'): send_message(i) elif command in ['ph','punch','hp','hitpoints'] and self.is_admin: if len(arg) > 0 and len(a.players) > 0: if len(arg) < 2: player = [self.player] if len(arg) > 1: if is_num(arg[1]) and len(a.players) > int(arg[1]) and int(arg[1]) >= 0: player = [a.players[int(arg[1])]] elif arg[1] == "all": player = a.players if player is not None: if bigger_than_zero(arg[0]): arg[0] = int(arg[0]) if command in ["punch", "ph"] and arg[0] > 10: arg[0] = 10 for i in player: if i.exists(): if command in ["punch", "ph"]: i.actor._punchPowerScale = arg[0] else: i.actor.hitPointsMax = i.actor.hitPoints = arg[0] else: for i in [command+" [число] [номер игрока | all]", \ command+" 1000 0", command+" 10 all"]: send_message(i) elif (command in ['vip'] and self.is_admin) or (command in ['admin'] and self.is_host): if len(arg) > 0: self.add_admin(True if command == "admin" else False, get_account_string(arg[0])) else: for i in [command+" [номер игрока|имя аккаунта]", \ command+" 0", command+u" \ue030PC123456"]: send_message(i) elif command in ['df','default'] and self.is_host: if len(arg) > 0: self.del_admin(get_account_string(arg[0])) else: for i in [command+" [номер игрока|имя аккаунта]", \ command+" 0", command+u" \ue030PC123456"]: send_message(i) elif command in ['prefix'] and self.is_admin: global prefixes if len(arg) > 0: type = arg[1] if len(arg) > 1 else "spark" prefix = "prefix" if len(arg) < 3 else (" ").join(msg.split(" ")[3:]) if arg[0] == 'delete' and len(arg) > 1: account = get_account_string(arg[1]) elif arg[0] != 'delete': account = get_account_string(arg[0]) else: account = None if arg[0] == 'delete': if account is not None and account in prefixes: prefixes.pop(account) if gSettingsEnabled: bs.set_setting("prefixes", prefixes) else: self.set_prefix(account=account, prefix=prefix, type=type) else: for i in ["prefix [номер игрока | имя аккаунта] [slime|ice|spark|rock|metal] [префикс]", \ "prefix 0 spark клоун сбежал"]: send_message(i) elif command in ['kick'] and self.is_vip: if len(arg) > 0: account = get_account_string(arg[0]) if account is not None and len(roster) > 0: id = None for i in roster: if i['displayString'].decode('utf-8') == account: id = i['clientID'] break if id is not None: bsInternal._disconnectClient(id, 300) else: for i in [command+" [номер игрока|имя аккаунта]", \ command+" 0", command+u" \ue030PC123456"]: send_message(i) elif command in ['ban'] and self.is_admin: if len(arg) > 0: self.ban(account=get_account_string(arg[0])) else: for i in [command+" [номер игрока|имя аккаунта]", \ command+" 0", command+u" \ue030PC123456"]: send_message(i) elif command in ['end'] and self.is_vip: if hasattr(a, "endGame"): a.endGame() else: send_message("Сейчас это недоступно") elif command in ['party','pt'] and self.is_admin: if hasattr(a, 'cameraFlash') and gEvent: time = 1000 def run(time=1000): color = tuple([random.randrange(1,2) for i in range(3)]) a.cameraFlash(duration=time, color=color) if hasattr(a, "_partyFlash") and a._partyFlash is not None: a._partyFlash = None a._cameraFlash = [] else: run(time=time) a._partyFlash = bs.Timer(time, bs.Call(run, time), True) else: send_message("Сейчас это недоступно") elif command in ['sm'] and self.is_vip: bs.getSharedObject("globals").slowMotion = motion = bs.getSharedObject("globals").slowMotion == False set_motion(motion=motion) elif command in ['pause'] and self.is_admin: bs.getSharedObject("globals").paused = bs.getSharedObject("globals").paused == False elif command in ['max_players', 'mp'] and self.is_admin: if bigger_than_zero(arg[0]): bsInternal._setPublicPartyMaxSize(int(arg[0])) else: for i in ["mp [кол-во игроков]", "mp 8", "максимальное кол-во игроков сейчас: "+str(bsInternal._getPublicPartyMaxSize())]: send_message(i) elif command in ['shatter', 'sh'] and self.is_vip: if len(arg) > 0: def shatter(player=None, shatterMultiple=1): if player is not None and player.exists() and player.isAlive(): player.actor.node.shattered = shatterMultiple player.actor.shattered = True if shatterMultiple > 0 else False if bigger_than_zero(arg[0]): if len(arg) > 1: if is_num(arg[1]) and int(arg[1]) < len(a.players): shatter(a.players[int(arg[1])], int(arg[0])) elif arg[1] == "all": for i in a.players: shatter(i, int(arg[0])) elif self.player is not None: shatter(self.player, int(arg[0])) else: for i in [command+" [число] [номер игрока | all]", command+" 2 0", command+" 10"]: send_message(i) elif command in ['frozen', 'fr'] and self.is_vip: if len(arg) > 0: def frozen(player=None): if player is not None and player.exists() and player.isAlive(): player.actor.node.frozen = player.actor.node.frozen == 0 player.actor.frozen = player.actor.frozen == False if is_num(arg[0]) and int(arg[0]) < len(a.players): frozen(a.players[int(arg[0])]) elif arg[0] == "all": for i in a.players: frozen(i) elif self.player is not None: frozen(self.player) else: for i in [command+" [номер игрока | all]", command+" 2", \ command+" me", "введи команду повторно, чтобы её отменить"]: send_message(i) elif command in ['sleep','sl'] and self.is_admin: if len(arg) > 0: def sleep(player=None, sleepTime=5000): def work(player=None, sleepTime=5000): if player is not None and player.exists() and player.isAlive(): player.actor.node.handleMessage('knockout', sleepTime) if not hasattr(player.actor, 'sleepTime') or (hasattr(player.actor, 'sleepTime') and player.actor.sleepTime is None): player.actor.sleepTime = sleepTime else: player.actor.sleepTime -= 500 if player.actor.sleepTime <= 0: player.actor._sleep = player.actor.sleepTime = None if player is not None and player.exists() and player.isAlive(): if sleepTime > 500: if hasattr(player.actor, '_sleep') and player.actor._sleep is not None: player.actor._sleep = None else: player.actor._sleep = bs.Timer(500, bs.Call(work, player, sleepTime), repeat=True) work(player=player, sleepTime=sleepTime) else: work(player=player, sleepTime=sleepTime) if bigger_than_zero(arg[0]): if len(arg) > 1: if is_num(arg[1]) and int(arg[1]) < len(a.players): sleep(a.players[int(arg[1])], int(arg[0])) elif arg[1] == "all": for i in a.players: sleep(i, int(arg[0])) elif self.player is not None: sleep(self.player, int(arg[0])) else: for i in [command+" [число] [номер игрока | all]", command+" 2000 0", \ command+" 5000", "введи команду повторно, чтобы её отменить"]: send_message(i) elif command in ['curse','cr'] and self.is_admin: if len(arg) > 0: def curse(player=None): if player is not None and player.exists() and player.isAlive(): if hasattr(player.actor, 'curse'): player.actor.curse() if is_num(arg[0]) and int(arg[0]) < len(a.players): curse(a.players[int(arg[0])]) elif arg[0] == "all": for i in a.players: curse(i) elif self.player is not None: curse(self.player) else: for i in [command+" [номер игрока | all]", command+" 2", command+" me"]: send_message(i) elif command in ['nodes'] and self.is_admin: if len(arg) > 0: if arg[0] == 'types': nodes = list(set([i.getNodeType() for i in bsInternal.getNodes() if hasattr(i, "getNodeType")])) if arg[0] == 'names': nodes = [i.getName() for i in bsInternal.getNodes() if hasattr(i, 'getName')] if len(arg) > 1: nodes = [i for i in nodes if arg[1].lower() in i.lower()] for i in bs.text_split(words=nodes, stroke_on_end=False).split('\n'): send_message(i) else: for i in [command+' types spaz', command+' types', command+' names']: send_message(i) elif command in ['connect'] and self.is_admin: def connect(node=None, connected_node=None, type='position'): if node is not None and node.exists(): if connected_node is not None and connected_node.exists(): try: node.connectAttr(type, connected_node, type) except: pass if len(arg) > 0: node = [i for i in bsInternal.getNodes() if hasattr(i, 'getName') and i.getName().lower() == arg[0].lower()] if len(node) > 0: node = node[0] if len(arg) < 3: arg[2] = 'position' if is_num(arg[1]) and int(arg[1]) < len(a.players): player = a.players[int(arg[1])] if player.exists(): connect(player.actor.node, node, arg[2]) elif arg[1] == "all": for i in a.players: if i.exists(): connect(i.actor.node, node, arg[2]) elif self.player is not None and self.player.exists(): connect(self.player.actor.node, node, arg[2]) else: for i in [command+' [имя объекта (/nodes names)] [номер игрока | all] [тип присоединения]', \ command+' [email protected]:259 all position']: send_message(i) elif command in ['head'] and self.is_admin: if len(arg) > 0: def head(player=None): if player is not None and player.exists() and player.isAlive(): player.actor.node.holdNode = player.actor.node if is_num(arg[0]) and int(arg[0]) < len(a.players): head(a.players[int(arg[0])]) elif arg[0] == "all": for i in a.players: head(i) elif self.player is not None: head(self.player) else: for i in [command+" [номер игрока | all]", command+" 2", command+" me"]: send_message(i) elif command in ['rise', 'rs'] and self.is_vip: if len(arg) > 0: def respawn(player=None): if player is not None and player.exists() and not player.isAlive(): player.gameData['respawnTimer'] = player.gameData['respawnIcon'] = None with bs.Context(a): a.spawnPlayer(player=player) if is_num(arg[0]) and int(arg[0]) < len(a.players): respawn(a.players[int(arg[0])]) elif arg[0] == "all": for i in a.players: respawn(i) elif self.player is not None: respawn(self.player) else: for i in [command+" [номер игрока | all]", command+" 2", command+" me"]: send_message(i) elif command in ['flex','fl'] and self.is_vip: if not gEvent: send_message("Сейчас это недоступно") return if len(arg) > 0: def flex(actor=None): def work(node=None): if node is not None and node.exists(): node.handleMessage('celebrate', 1000) if actor is not None and actor.exists(): if not hasattr(actor, '_flex') or (hasattr(actor, '_flex') and actor._flex is None): actor._flex = bs.Timer(1000, bs.Call(work, actor.node), repeat=True) work(node=actor.node) else: actor._flex = None if is_num(arg[0]) and int(arg[0]) < len(a.players): flex(a.players[int(arg[0])].actor) elif arg[0] == 'all': for i in find_players_and_bots(): flex(i) elif self.player is not None and self.player.exists(): flex(self.player.actor) else: for i in [command+" [номер игрока|all]", command+" 0", command+" me", "введи команду повторно, чтобы её отменить"]: send_message(i) elif command in ['dn', 'dance'] and self.is_admin: if not gEvent: send_message("Сейчас это недоступно") return if len(arg) > 0: def dance(actor=None): def work(node=None): if node is not None and node.exists(): pos = (node.position[0], node.position[1] + 0.5, node.position[2]) node.handleMessage("impulse", pos[0], pos[1], pos[2], 0, -2, 0, 2000, 0, 1, 0, 0, -2, 0) if actor is not None and actor.exists(): if not hasattr(actor, '_dance') or (hasattr(actor, '_dance') and actor._dance is None): actor._dance = bs.Timer(100, bs.Call(work, actor.node), repeat=True) work(node=actor.node) else: actor._dance = None if is_num(arg[0]) and int(arg[0]) < len(a.players): dance(a.players[int(arg[0])].actor) elif arg[0] == 'all': for i in find_players_and_bots(): dance(i) elif self.player is not None and self.player.exists(): dance(self.player.actor) else: for i in [command+" [номер игрока|all]", command+" 0", command+" me", "введи команду повторно, чтобы её отменить"]: send_message(i) elif command in ['dn2', 'dance2'] and self.is_admin: if not gEvent: send_message("Сейчас это недоступно") return if len(arg) > 0: def dance2(actor=None): def work(node=None): if node is not None and node.exists(): node.jumpPressed = True node.jumpPressed = False if actor is not None and actor.exists(): if not hasattr(actor, '_dance2') or (hasattr(actor, '_dance2') and actor._dance2 is None): actor._dance2 = bs.Timer(500, bs.Call(work, actor.node), repeat=True) work(node=actor.node) else: actor._dance2 = None if is_num(arg[0]) and int(arg[0]) < len(a.players): dance2(a.players[int(arg[0])].actor) elif arg[0] == 'all': for i in find_players_and_bots(): dance2(i) elif self.player is not None and self.player.exists(): dance2(self.player.actor) else: for i in [command+" [номер игрока|all]", command+" 0", command+" me", "введи команду повторно, чтобы её отменить"]: send_message(i)