''' Necromancer WCS:Python Race Coded By: J3ff Hoogland ''' import wcs, es, random, playerlib, gamethread 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('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.') wcs.Race(RaceName).registerSkill('Cripple', 4, 2, 'Your attack may cause a player to be slowed drasticly.') #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')) delay_list = [] 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)) gamethread.delayedname(7,'%scripple'%userid,cm.SpeedAdd,(speed)) delay_list.append('%scripple') 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.Command(userid).ReturnDict('old race'): if wcs.getSteam(userid)['race'] == 'Zombie': wcs.getSteam(userid)['race'] = wcs.Command(userid).ReturnDict('old race') wcs.Command(userid).UpdateDict('old race', 0) wcs.Command(userid).UpdateDict('raiser', 0) global delay_list for d in delay_list: gamethread.cancelDelayed(d) delay_list = [] 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('es_xsetpos %s %s %s %s'%(player,qx,qy,qz)) 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: deadlist.append(int(player)) return deadlist