from __future__ import division import wcs, playerlib, es, random, gamethread from wcs import wcs w = 'Wicca' race = wcs.Race(w) raceskill = wcs.Race(w).registerSkill raceskill('Book of Spells', 5, 1, "A spell book has tought you how to respawn your teamates on death") raceskill('Deadly Potions', 6, 1, "A chance to become fast, slightly invisible, and have high health +ability to use or consequences") raceskill('Spying Beacon', 1, 3, "Beacon your enemies to always know their locations") raceskill('Healing Spring', 5, 2, "Heal yourself and those around you") race.registerUltimate("Invulnerable Teamates", 4, 4, 5, "Hold down your ultimate to make your teamates within range invulnerable") race.registerMinLevel(125) # est_effect 11 #a 0 sprites/purpleglow1.vmt server_var(wcs_x1) server_var(wcs_y1) server_var(wcs_z1) 1 3.5 150 # est_effect 11 #a 0 sprites/purpleglow1.vmt %s %s %s 4 2 255 beam_userids = [] def player_ultimate_on(ev): userid = int(ev['userid']) if wcs.GetRace(userid) == w: it = wcs.GetLevel(userid, w, 'Invulnerable Teamates') if it: player = playerlib.getPlayer(userid) if player.attributes['teamid'] == 2: wcs.Command(userid).Near(80 + (it * 30), god_mode, '#t,#alive') elif player.attributes['teamid'] == 3: wcs.Command(userid).Near(80 + (it * 30), god_mode, '#ct,#alive') effect_time = 10 + (it * 2) gamethread.delayedname(0.1, 'ultimate_effect_%s'%userid, ultimate_effect_loop, args=(userid, effect_time)) es.server.queuecmd('est_freeze %s 1'%userid) wcs.Effect().Ring2(userid, 50, 1.6, 191, 62, 255) wcs.Effect().Misc1(userid, 1.6) x, y, z = es.getplayerlocation(userid) wcs.Effect().Ring5(x, y, z, 0.5, 40, 240, 255) wcs.Command(userid).SetCoolDown('Invulnerable Teamates', 10) def god_mode(userid, attacker): es.server.queuecmd('est_god %s 1'%userid) gamethread.delayed(0.05 + wcs.GetLevel(attacker, w, 'Invulnerable Teamates') / 100, es.server.queuecmd, 'est_god %s 0'%userid) def appendlist(player, userid): global beam_userids beam_userids.append(player) def ultimate_effect_loop(userid, effect_time): if effect_time >= 0: global beam_userids # effect_time -= 0.1 beam_userids = [] x, y, z = es.getplayerlocation(userid) it = wcs.GetLevel(userid, w, 'Invulnerable Teamates') player = playerlib.getPlayer(userid) if random.randint(1, 3) == 1: player.set('health', float(player.get('health')) - 0.01) if player.attributes['teamid'] == 2: wcs.Command(userid).Near(120 + (it * 30), god_mode, '#t,#alive') wcs.Command(userid).Near((120 + (it * 30)), appendlist, '#t,#alive') elif player.attributes['teamid'] == 3: wcs.Command(userid).Near(120 + (it * 30), god_mode, '#ct,#alive') wcs.Command(userid).Near((120 + (it * 30)), appendlist, '#ct,#alive') for a in beam_userids: x1,y1,z1 = es.getplayerlocation(a) es.server.queuecmd('est_effect 3 #all 0 sprites/lgtning.vmt %s %s %s %s %s %s 0.1 25 1 0 255 0 255'%(x, y, z + 30, x1, y1, z1 + 30)) # Some effects here, not that important es.server.queuecmd('est_effect 3 #all 0 sprites/lgtning.vmt %s %s %s %s %s %s 0.1 10 10 40 240 255 255'%(x, y, z, x, y, z + 100)) # More effects if '.0' in str(effect_time / 1.6) and '6' not in str(effect_time / 1.6): wcs.Effect().Ring2(userid, 50, 1.6, 191, 62, 255) wcs.Effect().Misc1(userid, 1.6) gamethread.delayedname(0.1, 'ultimate_effect_%s'%userid, ultimate_effect_loop, args=(userid, effect_time)) # Do the block again, this is a "Delayed" loop if player.get('health') <= 0: wcs.Command(userid).Damage(1, 32) es.server.queuecmd('est_freeze %s 0'%userid) else: es.cexec(userid, '-Ultimate') def player_ultimate_off(ev): userid = int(ev['userid']) if wcs.GetRace(userid) == 'Wicca': if wcs.GetLevel(userid, w, 'Invulnerable Teamates'): gamethread.cancelDelayed('ultimate_effect_%s'%userid) es.server.queuecmd('est_freeze %s 0'%userid) def player_death(ev): userid = int(ev['userid']) if wcs.GetRace(userid) == 'Wicca': bs = wcs.GetLevel(userid, w, 'Book of Spells') if bs: es.tell(userid, '#green', 'Attempting to revieve a random teammate') if random.randint(1, 100) <= 20 + bs * 5: x2, y2, z2 = es.getplayerlocation(userid) if playerlib.getPlayer(userid).attributes['teamid'] == 2: random_t = random.choice(playerlib.getUseridList('#t,#dead')) x, y, z = es.getplayerlocation(random_t) es.server.queuecmd('est_spawn %s'%random_t) wcs.Effect().Ring5(x, y, z, 0.5, 40, 240, 255) es.server.queuecmd('est_effect 10 #a 0 sprites/scanner.vmt %s %s %s 50 350 2 90 200 0 155 155 155 155 2'%(x, y, z)) es.tell(userid, '#multi', '#greenYou have respawned #lightgreen%s #green with your book of spells!'%playerlib.getPlayer(random_t).attributes['name']) es.tell(random_t, '#multi', '#greenYou have been respawned by #lightgreen%s\'s #green book of spells!'%playerlib.getPlayer(userid).attributes['name']) elif playerlib.getPlayer(userid).attributes['teamid'] == 3: random_ct = random.choice(playerlib.getUseridList('#ct,#dead')) x, y, z = es.getplayerlocation(random_ct) es.server.queuecmd('est_spawn %s'%random_ct) wcs.Effect().Ring5(x, y, z, 0.5, 40, 240, 255) es.server.queuecmd('est_effect 10 #a 0 sprites/scanner.vmt %s %s %s 50 350 2 90 200 0 155 155 155 155 2'%(x, y, z)) es.tell(userid, '#multi', '#greenYou have respawned #lightgreen%s #green with your book of spells!'%playerlib.getPlayer(random_ct).attributes['name']) es.tell(random_ct, '#multi', '#greenYou have been respawned by #lightgreen%s\'s #green book of spells!'%playerlib.getPlayer(userid).attributes['name']) wcs.Effect().Ring5(x2, y2, z2, 0.5, 40, 240, 255) gamethread.cancelDelayed('beacon_%s'%userid) # Cancel the beacon loop since they're dead def player_disconnect(ev): # gamethread.cancelDelayed('beacon_%s'%ev['userid']) def heal(): if bool(es.getplayercount()): for userid in es.getUseridList(): player = playerlib.getPlayer(userid) health = player.attributes['health'] if wcs.GetRace(userid) == 'Wicca': hs = wcs.GetLevel(userid, w, 'Healing Spring') if hs: if playerlib.getPlayer(userid).get('health') < 140: if playerlib.getPlayer(userid).attributes['teamid'] == 2: wcs.Command(userid).Near(100 + hs * 50, heal_teamates, '#t,#alive') elif playerlib.getPlayer(userid).attributes['teamid'] == 3: wcs.Command(userid).Near(100 + hs * 50, heal_teamates, '#ct,#alive') playerlib.getPlayer(userid).set('health', playerlib.getPlayer(userid).get('health') + hs * 0.7) gamethread.delayed(2, heal, args=()) def heal_teamates(userid, attacker): hs = wcs.GetLevel(attacker, w, 'Healing Spring') if playerlib.getPlayer(userid).get('health') <= 127: playerlib.getPlayer(userid).set('health', playerlib.getPlayer(userid).get('health') + (hs / 2.0)) def player_ability_on(ev): userid = int(ev['userid']) if wcs.GetRace(userid) == 'Wicca': dp = wcs.GetLevel(userid, w, 'Deadly Potions') if dp: if not wcs.Command(userid).GetCoolDown('Deadly Potions'): if random.randint(1, 100) <= 40 + dp * 5: player = playerlib.getPlayer(userid) es.server.queuecmd('est_shake %s 2.2 55 55'%(userid)) es.tell(userid, '#green', 'Success!') x, y, z = es.getplayerlocation(userid) wcs.Effect().Ring5(x, y, z, 1.5, 40, 240, 255) es.server.queuecmd('est_effect 11 #a 0 models/effects/splodecard2_sheet.vmt %s %s %s 2 2 255'%(x, y, z)) es.server.queuecmd('est_effect 10 #a 0 models/effects/splodecard2_sheet.vmt %s %s %s 250 190 3 150 100 1 155 115 100 200 3'%(x, y, z)) es.server.queuecmd('est_freeze %s 1'%userid) gamethread.delayed(2.2, es.server.queuecmd, 'est_freeze %s 0'%userid) es.server.queuecmd('es_xfire %s !self addoutput "gravity %s"'%(userid, 1 - dp / 12.0)) if player.get('health') <= 150: player.set('health', player.get('health') + 15 + dp * 3.5) elif player.get('health') <= 200: player.set('health', player.get('health') + 5) if not player.get('speed') > 1.3: player.set('speed', player.get('speed') + dp / 15.0) elif player.get('speed') <= 1.8: player.set('speed', player.get('speed') + dp / 30.0) wcs.Command(userid).Fade((255 - 100) - (dp * 11), 2) for a in ('m3', 'xm1014', 'tmp', 'mp5navy', 'ump45', 'p90', 'mac10', 'm249', 'scout', 'awp', 'sg550', 'g3sg1', 'm4a1', 'ak47', 'famas', 'galil', 'aug', 'sg552'): # Restrict every weapon in this tuple so that it's not too OP es.server.queuecmd('est_restrict %s %s'%(userid, 'weapon_%s'%a)) es.server.queuecmd('est_RemoveWeapon %s 1'%userid) else: random_number = random.randint(1, 6) if random_number == 1: potion = 'Explosive' es.server.queuecmd('es_give %s env_explosion'%userid) es.server.queuecmd('es_xfire %s env_explosion addoutput "iMagnitude 80"'%userid) es.server.queuecmd('es_xfire %s env_explosion addoutput "iRadiusoverride 30"'%userid) es.server.queuecmd('es_xfire %s env_explosion explode'%userid) wcs.Command(userid).Damage(80, 32) elif random_number == 2: potion = 'Poisonous' wcs.Command(userid).Drain(10, 1, 9) time = 0 gamethread.delayedname(1, 'drain_%s'%userid, drain_effect_loop, args=(userid, time)) elif random_number == 3: potion = 'Sleep' es.server.queuecmd('est_stripplayer %s 1'%userid) es.server.queuecmd('est_freeze %s 1'%userid) gamethread.delayed(2, es.server.queuecmd, 'est_stripplayer %s 1'%userid) es.server.queuecmd('es_xgive %s weapon_glock'%userid) elif random_number == 4 or random_number in range(6, 7): potion = 'Morph Potion' playerlib.getPlayer(userid).set('model', 'props/cs_office/plant01') es.server.queuecmd('est_stripplayer %s 1'%userid) es.server.queuecmd('est_freeze %s 1'%userid) elif random_number == 5: potion = 'Bury' player_loc = es.getplayerlocation(userid) es.server.queuecmd('es_xsetpos %s %s %s %s'%(userid, player_loc[0], player_loc[1], player_loc[2] - 60)) es.tell(userid, '#green', 'OH NO! Your potion failed You accidently made a %s potion'%potion) wcs.Command(userid).SetCoolDown('Deadly Potions', 15) else: es.tell(userid, '#multi', '#greenSorry, you have to wait #lightgreen%s #greenseconds to use this again'%wcs.Command(userid).GetCoolDown('Deadly Potions')) # tell them that they have to wait however many seconds to use their ability, again def drain_effect_loop(userid, time): if time <= 8: wcs.Effect().Ring4(userid, 50, 100, 1, 40, 50, 64, 0, 128) es.server.queuecmd('est_fade %s 1 0.2 0.2 0 255 0 100'%userid) time += 1 gamethread.delayedname(1, 'drain_%s'%userid, drain_effect_loop, args=(userid, time)) def player_spawn(ev): userid = int(ev['userid']) es.server.queuecmd('est_UnrestrictAll %s'%userid) if wcs.GetRace(userid) == 'Wicca': bl = wcs.GetLevel(userid, w, 'Spying Beacon') if bl: gamethread.delayedname(1, 'beacon_%s'%userid, beacon_loop, args=(userid)) def beacon_loop(userid): if es.exists('userid', userid): if playerlib.getPlayer(userid).attributes['teamid'] == 2: filter = '#ct' elif playerlib.getPlayer(userid).attributes['teamid'] == 3: filter = '#t' else: filter = 'moo' if not filter == 'moo': for userid2 in playerlib.getUseridList('%s,#alive'%filter): x, y, z = es.getplayerlocation(userid2) es.server.queuecmd('est_effect 10 %s 0 "sprites/lgtning.vmt" %s %s %s 20 300 0.2 20 10 0 255 0 0 255 30'%(userid, x, y, z)) # Make the ring es.server.queuecmd('est_effect 10 %s 0.1 "sprites/lgtning.vmt" %s %s %s 20 300 0.3 15 10 0 255 150 150 255 30'%(userid, x, y, z)) # Make the ring gamethread.delayedname(1, 'beacon_%s'%userid, beacon_loop, args=(userid)) def item_pickup(ev): if wcs.GetRace(ev['userid']) == 'Wicca': if wcs.GetLevel(ev['userid'], w, 'Deadly Potions'): if not ev['item'] in ('glock', 'usp', 'deagle', 'elite', 'p228', 'fiveseven') and playerlib.getPlayer(ev['userid']).get('speed') > 1: # This will execute if the weapon they picked up wasn't a pistol, and they've used thier speed is above 1 (their speed gets increased when they use their ability) es.server.queuecmd('est_removeweapon %s weapon_%s'%(ev['userid'], ev['item'])) es.tell(ev['userid'], '#green', 'You may only have pistols after using your ability!') def prep_hurt(ev): userid = int(ev['userid']) if wcs.GetRace(userid) == 'Wicca': if wcs.GetLevel(userid, w, 'Deadly Potions'): if playerlib.getPlayer(userid).get('speed') > 1: if not ev['weapon'].replace('weapon_', '') in ('glock', 'usp', 'p228', 'deagle', 'point_hurt', 'env_explosion', 'elite', 'fiveseven'): es.server.queuecmd('est_removeweapon %s %s'%(userid, ev['weapon'])) es.tell(userid, '#green', 'Sorry you may only use pistols after your ability!') heal()