#Crysis CSS Pluggin Written By: J3ff Hoogland import es, popuplib, gamethread Version = '0.5.0' #Begin Events def player_hurt(ev): userid = int(ev['userid']) if ev['attacker']: attacker = int(ev['attacker']) else: attacker = 0 damage = int(ev['dmg_health']) idpower = Player(userid).GetPower() atkpower = Player(attacker).GetPower() if idpower == 'Defense': if not int(es.getplayerprop(userid, "CBasePlayer.pl.deadflag")): Player(userid).AddHealth(damage*.4) elif idpower == 'Stealth': Player(userid).Color((255,255,255,90)) gamethread.delayed(1, Player(userid).Color, (255,255,255,0)) if atkpower == 'Strength': if ev['weapon'] == 'knife': Player(userid).Damage(100, attacker) else: Player(userid).Damage(damage*.1, attacker) elif atkpower == 'Stealth': Player(userid).Color((255,255,255,255)) Player(userid).DelayColorUp() def player_spawn(ev): userid = int(ev['userid']) Player(userid).SetArmor(125) Player(userid).SetPower('Strength') def player_jump(ev): #Thank you SD for high jumping codez userid = int(ev['userid']) if Player(userid).GetPower() == 'Strength': es.setplayerprop(userid, 'CBasePlayer.localdata.m_vecBaseVelocity', '%s,%s,%s' % tuple([es.getplayerprop(userid, 'CBasePlayer.localdata.m_vecVelocity[%s]' % x) * 2 for x in range(3)])) #End events #Handle out menu(s) def MenuSend(): mymenu = popuplib.easymenu('crysis', '_popup_choice', MenuSelect) mymenu.settitle('[ Crysis ] - [ Please Select a Power ] - [ Current Power - %s ]'%Player(es.getcmduserid()).GetPower()) for x in ('Strength','Defense','Speed','Stealth'): mymenu.addoption(x,x) mymenu.send(es.getcmduserid()) def MenuSelect(userid, choice, popupid): Player(userid).SetPower(choice) def HelpSend(): help.send(es.getcmduserid()) #Begin load/unload/loop methods def load(): SuitLoop() MsgLoop() global help help = popuplib.create('cry help') help.addline('[ Crysis ] - [ Help Menu ]') help.addline('Command: Use !power to change your active power') help.addline('Powers:') help.addline(' Strength: Jump higher and have stronger attacks (Store)') help.addline(' Defense: Take less damage from attacks (Store)') help.addline(' Speed: Move Quicker (Drain)') help.addline(' Stealth: Become hard to see (Drain)') help.addline('General:') help.addline(' Storing Powers Build Up Armor and Health') help.addline(' Draining Powers are more potent and thus drain armor') help.addline(' Crouching/Standing still causes armor/health to increase more rapidly') if not es.exists('saycommand', '!power'): es.regsaycmd('!power', 'crysis/MenuSend') if not es.exists('saycommand', '!help'): es.regsaycmd('!help', 'crysis/HelpSend') def MsgLoop(): es.msg('#multi', '#green[Crysis] #defaultUse !help to learn how to play.') gamethread.delayedname(30, 'crysis msg', MsgLoop) def SuitLoop(): for id in es.getUseridList(): if not int(es.getplayerprop(id, "CBasePlayer.pl.deadflag")): ducked = int(es.getplayerprop(self.userid, 'CBasePlayer.localdata.m_Local.m_bDucked') % 2) power = Player(id).GetPower() if Player(id).ReturnLastLocation() == es.getplayerlocation(id): lastsame = 1 else: lastsame = 0 Player(id).UpdateLocation() if power == 'Strength' or power == 'Defense': if ducked: Player(id).AddArmor(2) else: Player(id).AddArmor(1) if lastsame: Player(id).AddArmor(1) Player(id).AddHealth(1) Player(id).AddHealth(1) else: if ducked: Player(id).AddArmor(-1) else: Player(id).AddArmor(-2) if power == 'Speed': if Player(id).GetWeapon() == 'knife': Player(id).SetSpeed(3) Player(id).AddArmor(-1) else: Player(id).SetSpeed(2) if power == 'Stealth': if not lastsame: Player(id).AddArmor(-1) gamethread.delayedname(1, 'suit loop',SuitLoop) def unload(): gamethread.cancelDelayed('suit loop') gamethread.cancelDelayed('crysis msg') #End load/unload/loop methods #Our main player class Players = {} class Player: global Players def __init__(self, id): self.id = int(id) if not Players.has_key(self.id): Players[self.id] = {} Players[self.id]['power'] = 'Strength' Players[self.id]['xyz'] = es.getplayerlocation(self.id) Players[self.id]['delay'] = 0 self.key = Players[id] def GetArmor(self): return int(es.getplayerprop(self.id, "CCSPlayer.m_ArmorValue")) def SetArmor(self, value): es.setplayerprop(self.id, "CCSPlayer.m_ArmorValue", value) def AddArmor(self, value): if (self.GetArmor()+value) <= 125: if (self.GetArmor()+value) >= 0: self.SetArmor(self.GetArmor()+value) else: self.SetArmor(0) self.SetPower('Defense') es.tell(self.id, '#multi', '#defaultYour suit has run out of power... #greenReverting to #lightgreenDefense #greenmode.') else: self.SetArmor(125) def AddHealth(self, value): if (int(es.getplayerprop(self.id, "CBasePlayer.m_iHealth"))+value) <= 100: es.setplayerprop(self.id, 'CBasePlayer.m_iHealth', int(es.getplayerprop(self.id, "CBasePlayer.m_iHealth"))+value) else: es.setplayerprop(self.id, 'CBasePlayer.m_iHealth', 100) def Damage(self, amount, attacker): if int(es.getplayerprop(self.id, "CBasePlayer.m_iHealth")) > amount: es.setplayerprop(self.id, "CBasePlayer.m_iHealth", int(es.getplayerprop(self.id, "CBasePlayer.m_iHealth"))-amount) else: es.server.queuecmd('damage %s %s 32 %s'%(self.id, amount, attacker)) def GetPower(self): return self.key['power'] def SetPower(self, choice): self.key['power'] = choice if choice == 'Stealth': self.Color((255,255,255,0)) elif choice == 'Speed': if self.GetWeapon() == 'knife': self.SetSpeed(3) else: self.SetSpeed(2) self.Color((0,255,0,255)) elif choice == 'Strength': self.Color((255,0,0,255)) elif choice == 'Defense': self.Color((0,0,255,255)) def GetWeapon(self): return es.createplayerlist(self.userid)[self.userid]['weapon'] def SetSpeed(self, value): es.setplayerprop(self.id, "CBasePlayer.localdata.m_flLaggedMovementValue", value) def UpdateLocation(self): self.key['xyz'] = es.getplayerlocation(self.id) def ReturnLastLocation(self): return self.key['xyz'] def DelayColorUp(self): self.key['delay'] += 1 self.SetPower('Defense') gamethread.delayed(1, self.DelayColorDown) def DelayColorDown(self): self.key['delay'] -= 1 if not self.key['delay']: self.SetPower('Stealth') #Thank You playerlib def Color(self, value): value = map(int, value) color = value[0] color += value[1] << 8 color += value[2] << 16 if len(value) >= 4: color += value[3] << 24 else: color += self.get("color")[3] << 24 if color >= 2**31: color -= 2**32 oldRenderMode = es.getplayerprop(self.userid, "CBaseEntity.m_nRenderMode") oldRenderFX = es.getplayerprop(self.userid, "CBaseEntity.m_nRenderFX") newRenderMode = oldRenderMode | 1 newRenderFX = oldRenderFX | 256 es.setplayerprop(self.userid, "CBaseEntity.m_nRenderMode", newRenderMode) es.setplayerprop(self.userid, "CBaseEntity.m_nRenderFX", newRenderFX) es.setplayerprop(self.userid, "CBaseEntity.m_clrRender", color)