''' Necromancer WCS:Python Race Coded By: J3ff Hoogland ''' import wcs, es, random, playerlib from wcs import wcs #Our Race's Name - This is not needed I just feel it makes things look cleaner RaceName = 'Necromancer' wcs.Race(RaceName).registerSkill('Necromancer Training', 2, 4, 'Unlock new skills to use.') wcs.Race(RaceName).registerSkill('Raise Dead', 3, 3, 'Bring a dead ally near you back to life as a zombie.') wcs.Race(RaceName).registerSkill('Unholy Frenzy', 5, 1, 'Take and deal increased damage.', 1, 'Necromancer Training') wcs.Race(RaceName).registerSkill('Cripple', 4, 2, 'Your attack may cause a player to be slowed drasticly.', 2, 'Necromancer Training') #wcs.Race(RaceName).registerUltimate('', , , , '') wcs.Race(RaceName).registerMinLevel(30) wcs.Race(RaceName).registerWeaponRestriction('allow only', ('knife','usp','glock','p228','hegrenade')) #The are the things that register skills for our zombie wcs.Race('Zombie').registerSkill('Health Increase', 5, 1, 'Each rank increases health and decreases speed.') wcs.Race('Zombie').registerSkill('Speed Increase', 5, 1, 'Each rank increases speed and decreases health.') wcs.Race('Zombie').registerMaxLevel(6) wcs.Race('Zombie').registerWeaponRestriction('allow only', ('knife')) def player_spawn(event_var): userid = int(event_var['userid']) wcs.Command(userid).UpdateDict('death location', (0,0,0)) if wcs.GetRace(userid) == 'Zombie': wcs.Command(userid).Color(red=40,green=40,blue=40) wcs.Command(userid).HealthAdd(200) wcs.Command(userid).SpeedAdd(-.15) speed = wcs.GetLevel(userid, 'Zombie', 'Speed Increase') if speed: wcs.Command(userid).HealthAdd(-(30*speed)) wcs.Command(userid).SpeedAdd(speed*.15) health = wcs.GetLevel(userid, 'Zombie', 'Health Increase') if health: wcs.Command(userid).HealthAdd(40*health) wcs.Command(userid).SpeedAdd(-(health*.03)) def player_hurt(event_var): userid = int(event_var['userid']) attacker = int(event_var['attacker']) damage = int(event_var['dmg_health']) unholy = wcs.GetLevel(userid, RaceName, 'Unholy Frenzy') if unholy: wcs.Command(userid).Damage(damage*unholy*.1,32,attacker) unholy = wcs.GetLevel(attacker, RaceName, 'Unholy Frenzy') if unholy: wcs.Command(userid).Damage(damage*unholy*.2,32,userid) cripple = wcs.GetLevel(attacker, RaceName, 'Cripple') if cripple and not wcs.Command(attacker).GetCoolDown('Cripple'): wcs.Effect().Beam1(attacker,userid,1.5,40,200,40) cm = wcs.Command(userid) speed = cm.ReturnDict('Speed')*.75 cm.SpeedAdd(-(speed)) wcs.Command(userid).Delayed(7,cm.SpeedAdd,(speed)) cm.SetCoolDown('Cripple',5*cripple) def player_death(event_var): userid = int(event_var['userid']) attacker = int(event_var['attacker']) wcs.Command(userid).UpdateDict('death location', es.getplayerlocation(userid)) raiser = wcs.Command(attacker).ReturnDict('raiser') if raiser: wcs.Command(raiser).GiveXp(wcs.killxp/2, 'your zombie scoring a kill') def round_end(ev): for userid in playerlib.getUseridList('#all'): if wcs.GetRace(userid) == 'Zombie': if wcs.Command(userid).ReturnDict('old race'): race = wcs.Command(userid).ReturnDict('old race') else: race = wcs.race_list[0] wcs.getSteam(userid)['race'] = race wcs.Command(userid).UpdateDict('old race', 0) wcs.Command(userid).UpdateDict('raiser', 0) def player_ability_on(event_var): userid = int(event_var['userid']) dead = wcs.GetLevel(userid, RaceName, 'Raise Dead') if dead: if not wcs.Command(userid).GetCoolDown('Raise Dead'): team = int(es.getplayerteam(userid)) if team == 2: filter = '#t' elif team == 3: filter = '#ct' deadlist = deadnearlist(userid, filter) if not len(deadlist): es.tell(userid, '#multi', '#lightgreenRaise Dead #default- #greenThere are no dead teamates close enough to raise back to life.') else: raisedead(random.choice(deadlist), userid) def raisedead(player, raiser): qx,qy,qz = wcs.Command(player).ReturnDict('death location') wcs.Command(player).UpdateDict('old race', wcs.getSteam(player)['race']) wcs.Command(player).UpdateDict('raiser', raiser) wcs.getSteam(player)['race'] = 'Zombie' wcs.checkRace(player, 'Zombie') es.server.queuecmd('est_Spawn %s 1'%player) es.server.queuecmd('playerset moveto %s %s'%(player,raiser)) wcs.Effect().Misc5(player,2,1) wcs.Effect().Beam2(raiser, player, 1.5, 50, 200, 50) es.tell(player, '#multi', '#lightgreenRaise Dead #default- #green%s has raised you as a zombie.'%es.getplayername(raiser)) def deadnearlist(userid, filter): deadlist = [] x, y, z = es.getplayerlocation(userid) for player in playerlib.getPlayerList(filter+',#dead'): if int(player) != userid: qx,qy,qz = wcs.Command(player).ReturnDict('death location') if qx or qy or qz: qx -= x qy -= y qz -= z if abs(qx) <= 360 and abs(qy) <= 360 and abs(qz) <= 360: if wcs.GetRace(player) != 'Zombie': deadlist.append(int(player)) return deadlist