def waveDelay(self): bs.playSound(bs.getSound('gong')) globals = bs.getSharedObject('globals') tint = globals.tint bsUtils.animateArray(bs.getSharedObject('globals'),"tint",3,{0:tint,1000:(0.2,0.2,0.2),2500:(1.2,1.2,1.2),4000:(1.3,1.3,1.3),5000:tint}) bs.Powerup(powerupType = random.choice(['health','shield','punch','impactBombs','curse']),position = self.getRandomPosV(),expire = False).autoRetain() if random.random() > 0.3: bs.gameTimer(200,bs.Call(bs.Powerup,powerupType = random.choice(['health','shield','punch','impactBombs']),position = self.getRandomPosV(),expire = False)) bs.Powerup(powerupType = random.choice(['health','shield','punch','impactBombs','curse']),position = self.getRandomPosV(),expire = False).autoRetain() if random.random() > 0.6: bs.gameTimer(400,bs.Call(bs.Powerup,powerupType = random.choice(['health','shield','punch','impactBombs']),position = self.getRandomPosV(),expire = False)) bs.gameTimer(5000,bs.Call(self.startNextWave,self.num))
def _dropPowerup(self, index, powerupType=None): if powerupType is None: powerupType = bs.Powerup.getFactory().getRandomPowerupType( excludeTypes=self._excludePowerups) bs.Powerup( position=self.getMap().powerupSpawnPoints[index], powerupType=powerupType).autoRetain()
def _dropPowerups(self, standardPoints=False, forceFirst=None): """ Generic powerup drop """ # if its been a minute since our last wave finished emerging, stop # giving out land-mine powerups. (prevents players from waiting # around for them on purpose and filling the map up) if bs.getGameTime() - self._lastWaveEndTime > 60000: extraExcludes = ['landMines'] else: extraExcludes = [] if standardPoints: pts = self.getMap().powerupSpawnPoints for i, pt in enumerate(pts): bs.gameTimer( 1000 + i * 500, bs.Call(self._dropPowerup, i, forceFirst if i == 0 else None)) else: pt = (self._powerupCenter[0] + random.uniform( -1.0 * self._powerupSpread[0], 1.0 * self._powerupSpread[0]), self._powerupCenter[1], self._powerupCenter[2] + random.uniform( -self._powerupSpread[1], self._powerupSpread[1])) # drop one random one somewhere.. bs.Powerup( position=pt, powerupType=bs.Powerup.getFactory().getRandomPowerupType( excludeTypes=self._excludePowerups + extraExcludes)).autoRetain()
def makeHealthBox(self, position=(0, 3, 0)): if position == (0, 3, 0): position = (random.randint(-6, 6), 6, random.randint(-6, 4)) elif position == (0, 0, 0): position = random.choice( ((-7, 6, -5), (7, 6, -5), (-7, 6, 1), (7, 6, 1))) self.healthBox = bs.Powerup(position=position, powerupType='health').autoRetain()
def dropPowerup(self): self._powerupMaterial = bs.Material() self._powerupMaterial.addActions(conditions=("theyHaveMaterial",bs.getSharedObject('playerMaterial')), actions=(("modifyPartCollision","collide",True), ("modifyPartCollision","physical",True), ("call","atConnect",self.powerupAccepted))) bs.playSound(bs.getSound('dingSmallHigh')) self.p = bs.Powerup(powerupType = 'health',position = self.pos1,expire = False).autoRetain() self.p.node.materials = [self._powerupMaterial]
def _dropPowerups(self,standardPoints=False,powerupType=None): """ Generic powerup drop """ if standardPoints: pts = self.getMap().powerupSpawnPoints for i,pt in enumerate(pts): bs.gameTimer(1000+i*500,bs.WeakCall(self._dropPowerup,i,powerupType if i == 0 else None)) else: pt = (self._powerupCenter[0]+random.uniform(-1.0*self._powerupSpread[0],1.0*self._powerupSpread[0]), self._powerupCenter[1],self._powerupCenter[2]+random.uniform(-self._powerupSpread[1],self._powerupSpread[1])) # drop one random one somewhere.. bs.Powerup(position=pt,powerupType=bs.Powerup.getFactory().getRandomPowerupType(excludeTypes=self._excludePowerups)).autoRetain()
def dropShield(self): print '\n' print '[QUAKE DEBUG] run dropShield()' p = bs.Powerup(powerupType='shield', position=(random.uniform(-10, 10), 6, random.uniform(-5, 5))).autoRetain() bs.playSound(bs.getSound('dingSmall')) pLight = bs.newNode('light', attrs={ 'position': (0, 0, 0), 'color': (0.3, 0.0, 0.4), 'radius': 0.3, 'intensity': 2, 'volumeIntensityScale': 10.0 }) p.node.connectAttr('position', pLight, 'position') bs.animate(pLight, 'intensity', {0: 2, 8000: 0}) def checkExists(): if p is None or p.node.exists() == False: print '[QUAKE DEBUG] powerup does not exists anymore!' deletepLight() delChecker() self._checker = bs.Timer(100, bs.Call(checkExists), repeat=True) def delChecker(): if self._checker is not None: print '[QUAKE DEBUG] pLight checker deleted' self._checker = None def deletepLight(): if pLight.exists(): pLight.delete() print '[QUAKE DEBUG] pLight deleted' bs.gameTimer(6900, bs.Call(delChecker)) bs.gameTimer(7000, bs.Call(deletepLight))
def dropPowerup(self, position): powerupType = random.choice(["punch", "tripleBombs", "health"]) bs.Powerup(position=position, powerupType=powerupType, expire=False).autoRetain()
def handleMessage(self, msg): self._handleMessageSanityCheck() if isinstance(msg, PowerupAcceptMessage): factory = self.getFactory() if self.powerupType == 'health': bs.playSound(factory.healthPowerupSound, 3, position=self.node.position) bs.playSound(factory.powerupSound, 3, position=self.node.position) self._powersGiven = True self.handleMessage(bs.DieMessage()) if self.powerupType == 'blast': radius = random.choice([0.5, 1.0, 1.5, 2.0]) type = random.choice(['ice', 'normal', 'sticky', 'tnt']) pos = self.node.position bs.Blast(position=pos, blastRadius=radius, blastType=type).autoRetain() self._blast = True if self._blast == True: if type == 'ice': bs.screenMessage("Type: Ice", color=(3.5, 0, 0)) if type == 'normal': bs.screenMessage("Type: Normal", color=(3.5, 0, 0)) if type == 'sticky': bs.screenMessage("Type: Sticky", color=(3.5, 0, 0)) if type == 'tnt': bs.screenMessage("Type: Tnt", color=(3.5, 0, 0)) if radius == 0.5: bs.screenMessage("Radius: 0.5", color=(0, 0, 3.5)) if radius == 1.0: bs.screenMessage("Radius: 1.0", color=(0, 0, 3.5)) if radius == 1.5: bs.screenMessage("Radius: 1.5", color=(0, 0, 3.5)) if radius == 2.0: bs.screenMessage("Radius: 2.0", color=(0, 0, 3.5)) if self.powerupType == 'mix': pow = random.choice([ 'tripleBombs', 'iceBombs', 'punch', 'impactBombs', 'landMines', 'stickyBombs', 'shield', 'health', 'curse' ]) pos = self.node.position bs.Powerup(position=pos, powerupType=pow).autoRetain() bs.emitBGDynamics(position=self.node.position, velocity=self.node.velocity, count=int(14.0 + random.random() * 70), scale=1.4, spread=3.5, chunkType='spark') self._mix = True if self._mix == True: if pow == 'tripleBombs': bs.screenMessage("Triple Bombs", color=(1, 1, 0)) if pow == 'iceBombs': bs.screenMessage("Ice Bombs", color=(0, 0.2, 1)) if pow == 'punch': bs.screenMessage("Boxing Gloves", color=(1, 0.3, 0.3)) if pow == 'impactBombs': bs.screenMessage("Impact Bombs", color=(0.3, 0.3, 0.3)) if pow == 'landMines': bs.screenMessage("Land Mines", color=(0.1, 0.7, 0)) if pow == 'stickyBombs': bs.screenMessage("Sticky Bombs", color=(0, 1, 0)) if pow == 'shield': bs.screenMessage("Energy Shield", color=(0.7, 0.5, 1)) if pow == 'health': bs.screenMessage("Health Kit", color=(1, 1, 1)) if pow == 'curse': bs.screenMessage("Curse", color=(0.1, 0.1, 0.1)) self._light = True if self._light == True: color = random.choice([(5.0, 0.2, 0.2), (0.2, 5.0, 0.2), (0.2, 0.2, 5.0)]) self.light = bs.newNode('light', attrs={ 'position': self.node.position, 'color': color, 'volumeIntensityScale': 0.35 }) bs.animate(self.light, 'intensity', { 0: 0, 70: 0.5, 350: 0 }, loop=False) bs.gameTimer(500, self.light.delete) elif isinstance(msg, _TouchedMessage): if not self._powersGiven: node = bs.getCollisionInfo("opposingNode") if node is not None and node.exists(): node.handleMessage( PowerupMessage(self.powerupType, sourceNode=self.node)) elif isinstance(msg, bs.DieMessage): if self.node.exists(): if (msg.immediate): self.node.delete() else: curve = bs.animate(self.node, "modelScale", {0: 1, 100: 0}) bs.gameTimer(100, self.node.delete) elif isinstance(msg, bs.OutOfBoundsMessage): self.handleMessage(bs.DieMessage()) elif isinstance(msg, bs.HitMessage): if msg.hitType != 'punch': self.handleMessage(bs.DieMessage()) else: bs.Actor.handleMessage(self, msg)
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)