import es import gamethread import playerlib import psyco import time ################################################################################ # # # Redie PY Config # # # ################################################################################ pluginType = 'est' # 'spe' or 'est' ghostSpeed = 1.0 # 1.0 == 100% advertType = 'death' # 'death' or 'start' canJump = 1 # 1 can jump as ghost 0 cant jump as ghost forceScout = 0 #requires extended events giveC4 = 0 # Give C4 to redie players (CT) ################################################################################ # # # End Config # # # ################################################################################ psyco.full() if pluginType == 'spe': import spe info = es.AddonInfo() info.name = 'Redie PY' info.version = '2.0' info.basename = 'rediepy' info.url = 'www.thefactoidvoid.com' info.author = 'Largo Usagi' #Thanks to Fearts for asking for this and figuring out why the #flas bangs where still there/model not working at 1st info.description = 'A python only recode of the redie script' rediepyUsers = {} d_cmdlimit = {} canRedie = 0 es.ServerVar('RediPYVersion',info.version,'Current Redie PY Version').makepublic() def load(): if not es.exists('saycommand', '!redie'): es.regsaycmd('!redie', 'rediepy/redieCMD') if not es.exists('saycommand', '!spec'): es.regsaycmd('!spec', 'rediepy/specCMD') es.regclientcmd('spectate', 'rediepy/specblock') es.server.queuecmd('extendedevents_load player_drop') es.addons.registerClientCommandFilter(dropFilter) es.dbgmsg(0,'Loaded RediePY') def unload(): es.addons.unregisterClientCommandFilter(dropFilter) es.unregclientcmd('spectate') def player_activate(ev): rediepyUsers[int(ev['userid'])] = 0 def player_disconnect(ev): if int(ev['userid']) in rediepyUsers: del rediepyUsers[int(ev['userid'])] def round_start(ev): roundStart(ev) def round_end(ev): roundEnd(ev) def player_spawn(ev): playerSpawn(ev) def player_death(ev): playerDeath(ev) def player_activeweapon(ev): eeweapon(ev) def item_pickup(ev): pickup(ev) def player_blind(ev): blind(ev) def bomb_begindefuse(ev): beginDefuse(ev) def es_map_start(ev): d_cmdlimit.clear() ################################################################################ # # # Redie PY functions # # # ################################################################################ def eeweapon(ev): if forceScout == 1: weaponChange(ev) def playerDeath(ev): if advertType == 'death': es.tell(int(ev['userid']), "#multi", "#lightgreen[Redie] #defaultType #green!redie #defaultin chat to play as a Ghost!") def beginDefuse(ev): userid = int(ev['userid']) if rediepyUsers[userid] == 1: rediePlayer(userid) es.tell(int(ev['userid']), "#green", "You cant defuse as a ghost") def toggleRedie(value): global canRedie canRedie = value def playerSpawn(ev): userid = int(ev['userid']) player = playerlib.getPlayer(userid) if not player.isbot: try: if rediepyUsers[userid] == 0: godMode(userid, 0) visable(userid) else: if canRedie == 1: player = playerlib.getPlayer(userid) player.speed = ghostSpeed es.tell(int(ev['userid']), "#multi", "#lightgreen[Redie] #defaultYou are now a Ghost! Type #green!spec #defaultto return to regular dead mode.") except: pass def blind(ev): userid = int(ev['userid']) if rediepyUsers[userid] == 1: es.setplayerprop(userid,'CCSPlayer.m_flFlashMaxAlpha',0) es.setplayerprop(userid,'CCSPlayer.m_flFlashDuration',0) def roundEnd(ev): toggleRedie(0) for key in rediepyUsers: if rediepyUsers[key] == 1: strip(key) gamethread.delayed(3,respec,key) es.setplayerprop(key, 'CBasePlayer.m_iHealth',999999999999) rediepyUsers[key] = 0 gamethread.delayed(4.25,spawn,key) def pickup(ev): userid = int(ev['userid']) player = playerlib.getPlayer(userid) if not player.isbot: if userid in rediepyUsers and rediepyUsers[userid] == 1: player = playerlib.getPlayer(userid) if player.primary: player.setPrimaryClip(0) player.setPrimaryAmmo(0) if player.secondary: player.setSecondaryClip(0) player.setSecondaryAmmo(0) player.setWeaponColor(0,0,0,0) def roundStart(ev): toggleRedie(1) for key in rediepyUsers: rediepyUsers[key] = 0 if advertType == 'start': es.msg("#multi", "#greenThis server is running Redie PY version #lightgreen" + str(info.version) + "#green say #lightgreen!redie #greento become a ghost") def cmdlimit(userid): global d_cmdlimit if userid in d_cmdlimit: t = time.time() if t > d_cmdlimit[userid]: d_cmdlimit[userid] = t + 1 return True else: return False else: d_cmdlimit[userid] = time.time() + 1 return True def specblock(): userid = int(es.getcmduserid()) if userid in rediepyUsers and rediepyUsers[userid]: es.tell(userid, '#green', 'You cannot use the spectate command while in redie') else: es.changeteam(userid, 1) es.msg('%s has joined the spectators'%es.getplayername(userid)) def redieCMD(): userid = int(es.getcmduserid()) if not cmdlimit(userid): return False if playerlib.getPlayer(userid).isdead: if canRedie == 1: if es.getplayerteam(userid) in (2,3): rediePlayer(userid) else: es.tell(userid, '#green', 'You must be on a team to redie') else: es.tell(userid, "#green", "You cant do this at this time") else: es.tell(userid, "#green", "You need to be dead to do this") def specCMD(): userid = int(es.getcmduserid()) if not cmdlimit(userid): return False if rediepyUsers[userid] == 1: respec(userid) else: es.tell(userid, "#green", "You need to be a ghost to do this") def respec(userid): global rediepyUsers player = playerlib.getPlayer(userid) team = int(player.team) strip(userid) if pluginType == 'spe': spe.switchTeam(userid,1) spe.switchTeam(userid,team) elif pluginType == 'est': es.server.queuecmd('est_team %s 1' %userid) es.server.queuecmd('est_team %s %s' %(userid,team)) rediepyUsers[int(userid)] = 0 def spawn(userid): if pluginType == 'spe': spe.respawn(userid) elif pluginType == 'est': es.server.queuecmd('est_spawn %s' %userid) def dropFilter(userid, args): if userid in rediepyUsers and rediepyUsers[userid] == 1: if args[0] in ['drop', 'lastinv', 'slot1', 'slot2', 'slot3', 'slot4', 'slot5', 'jointeam']: es.sexec(userid, "use weapon_scout") return False return True def strip(userid): try: if pluginType == 'spe': weps = spe.getWeaponDict(userid) if not weps: es.dbgmsg(0,'Couldnt Find Player or Player Had no Weapons') return for weapon in weps: if weapon == "weapon_knife": continue spe.removeEntityByInstance(weps[weapon]['instance']) elif pluginType == 'est': es.server.queuecmd('est_stripplayer %s' %userid) except: pass def equipt(userid): player = playerlib.getPlayer(userid) es.server.cmd('es_xgive %s %s' %(userid,'weapon_scout')) es.server.cmd('es_xgive %s %s' %(userid,'weapon_glock')) es.server.queuecmd('es_xgive %s weapon_hegrenade' %userid) es.server.queuecmd('es_xgive %s weapon_smokegrenade' %userid) es.server.queuecmd('es_xgive %s weapon_flashbang' %userid) if giveC4 and int(playerlib.getPlayer(userid).team) == 3: es.server.queuecmd('es_xgive %s %s' %(userid,'weapon_c4')) es.server.queuecmd('es_xgive %s weapon_knife' %userid) player.setHE(5) player.setFB(5) player.setSG(5) def noCollide(userid): es.setplayerprop(userid, 'CCSPlayer.baseclass.baseclass.baseclass.baseclass.baseclass.baseclass.m_CollisionGroup', 2) def deadflag(userid): if canJump == 0: es.setplayerprop(userid,'CBasePlayer.pl.deadflag',1) #dissalows Jumping es.setplayerprop(userid,'CBasePlayer.m_lifeState',1) def weaponChange(ev): try: userid = int(ev['userid']) if rediepyUsers[userid] == 1: player = playerlib.getPlayer(userid) player.setWeaponColor(0,0,0,0) es.sexec(userid, "use weapon_scout") except: pass def rediePlayer(userid): rediepyUsers[userid] = 1 if pluginType == 'spe': spawn(userid) strip(userid) godMode(userid,1) model(userid) equipt(userid) noCollide(userid) invis(userid) deadflag(userid) gotoGuns(userid) elif pluginType == 'est': spawn(userid) gamethread.delayed(.05,strip,userid) gamethread.delayed(.1,godMode,userid) gamethread.delayed(.2,model,userid) gamethread.delayed(.3,equipt,userid) gamethread.delayed(.4,noCollide,userid) gamethread.delayed(.5,invis,userid) gamethread.delayed(.6,deadflag,userid) gamethread.delayed(.7,gotoGuns,userid) def gotoGuns(userid): gamethread.delayed(.05,es.sexec,(userid, "use weapon_glock")) gamethread.delayed(.1,es.sexec,(userid, "use weapon_hegrenade")) gamethread.delayed(.2,es.sexec,(userid, "use weapon_smokegrenade")) gamethread.delayed(.3,es.sexec,(userid, "use weapon_flashbang")) gamethread.delayed(.4,es.sexec,(userid, "use weapon_c4")) gamethread.delayed(.5,es.sexec,(userid, "use weapon_knife")) gamethread.delayed(.6,es.sexec,(userid, "use weapon_scout")) def model(userid): player = playerlib.getPlayer(userid) player.setModel('seagull') def godMode(userid, state): playerlib.getPlayer(userid).godMode = state def invis(userid): try: player = playerlib.getPlayer(userid) player.setColor(0,0,0,0) player.setWeaponColor(0,0,0,0) if pluginType == 'est': es.server.queuecmd('est_setplayercolor %s 0 0 0 0 1' %userid) except: pass def visable(userid): if pluginType == 'est': es.server.queuecmd('est_setplayercolor %s 255 255 255 255' %userid) else: player = playerlib.getPlayer(userid) player.setColor(255,255,255,255) player.setWeaponColor(255,255,255,255) ################################################################################ # # # EOF # # # ################################################################################