def _fetchNews(self): try: launchCount = bs.getConfig()['launchCount'] except Exception: launchCount = None global gLastNewsFetchTime gLastNewsFetchTime = time.time() # UPDATE - we now just pull news from MRVs news = bsInternal._getAccountMiscReadVal('n', None) if news is not None: self._gotNews(news)
def getPowerRankingValue(self): 'Return the power-ranking award value for this achievement' return bsInternal._getAccountMiscReadVal( 'achLeaguePoints.' + self._name, self._award)
def getAwardTicketValue(self, includeProBonus=False): 'Return the ticket award value for this achievement' return bsInternal._getAccountMiscReadVal( 'achAward.' + self._name, self._award) * _getAchMult(includeProBonus)
def _getAchMult(includeProBonus=False): val = bsInternal._getAccountMiscReadVal('achAwardMult', 5) if includeProBonus and bsUtils._havePro(): val *= 2 return val
def _getCustomLogoTexName(self): if bsInternal._getAccountMiscReadVal('easter',False): return 'logoEaster' else: return None
def __init__(self, transition='inRight', originWidget=None): if originWidget is not None: self._transitionOut = 'outScale' scaleOrigin = originWidget.getScreenSpaceCenter() transition = 'inScale' else: self._transitionOut = 'outRight' scaleOrigin = None transition = 'inRight' bgColor = (0.4, 0.4, 0.5) self._width = 540 self._height = 330 baseScale = 2.0 if bsUI.gSmallUI else 1.6 if bsUI.gMedUI else 1.1 self._rootWidget = bs.containerWidget( size=(self._width, self._height), transition=transition, scale=baseScale, scaleOriginStackOffset=scaleOrigin, stackOffset=(0, -10) if bsUI.gSmallUI else (0, 0)) self._cancelButton = bs.buttonWidget(parent=self._rootWidget, position=(50, self._height - 30), size=(50, 50), scale=0.5, label='', color=bgColor, onActivateCall=self._cancel, autoSelect=True, icon=bs.getTexture('crossOut'), iconScale=1.2) bs.textWidget( parent=self._rootWidget, position=(self._width * 0.5, self._height * 0.57), size=(0, 0), text=bs.Lstr( resource='accountSettingsWindow.linkAccountsInstructionsText', subs=[('${COUNT}', str( bsInternal._getAccountMiscReadVal( 'maxLinkAccounts', 5)))]), maxWidth=self._width * 0.9, color=bsUI.gInfoTextColor, maxHeight=self._height * 0.6, hAlign='center', vAlign='center') bs.containerWidget(edit=self._rootWidget, cancelButton=self._cancelButton) bs.buttonWidget( parent=self._rootWidget, position=(40, 30), size=(200, 60), label=bs.Lstr( resource='accountSettingsWindow.linkAccountsGenerateCodeText'), autoSelect=True, onActivateCall=self._generatePress) self._enterCodeButton = bs.buttonWidget( parent=self._rootWidget, position=(self._width - 240, 30), size=(200, 60), label=bs.Lstr( resource='accountSettingsWindow.linkAccountsEnterCodeText'), autoSelect=True, onActivateCall=self._enterCodePress)
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)