import es, playerlib, popuplib, gamethread, random, usermsg, effectlib, time # import sm_config # from sm_config import * info = es.AddonInfo() info['name'] = "SuperMods" info['version'] = "4.8b" info['author'] = "Bonbon AKA: Bonbon367" info['url'] = "http://www.notimplementedyet.com" info['description'] = "An admin punish menu/abuse menu with lots of features" ### Start Config # Admins here admins = ('STEAM_0:0:11228704', 'STEAM_0:0:15965938', 'STEAM_ID_LAN', 'STEAM_0:0:11089864', 'STEAM_0:1:5774407', 'STEAM_0:1:12114951') # How long the blackhole will last sm_blackhole_time = 5 # The intensity of the shake sm_shake_velocity = 75 # How long shake lasts sm_shake_time = 5 # How long drug lasts sm_drug_time = 10 # How long burn lasts sm_burn_time = 10 # How much damage the mine does sm_mine_damage = 300 # How far the mine's radius is sm_mine_radius = 225 # Strenght of the push sm_push_strength = 75 # How long the super slap lasts sm_superslap_time = 5 # How fast the prop spinner makes props spin sm_prop_spin_intensity = 75 # How long props spin for sm_prop_spin_time = 5 # How long drunk lasts for sm_drunk_time = 5 # How long flash lasts sm_flash_time = 3 # How much to set the player's speed for slow sm_slow_speed = 0.2 # How long High Grav last for sm_highgrav_time = 5 # How long blind lasts (in game frams) sm_blind_time = 2000 # The alpha of the blind sm_blind_alpha = 255 # How long the bombs lasts sm_bomb_time = 10 # How far the bombs reach bomb_range = 1000 # Fake radio commands to do on players sm_fake_radio_commands = ['I\'m gay!', 'Fire in my hole!', 'I like men', 'Bonbon Wins', 'I LIKE COWS', 'STFU', 'Step into my van'] # Log admin commands sm_log_commands = 1 # How long float lasts for sm_float_time = 10 # Excluded admins that don't get logged sm_unlogged_admins = ['STEAM_0:0:0000000', 'STEAM_0:1:1111111'] # Commands that usually are executed more than once (ie, slap) so they only get logged once every 5 uses, or so multiple_commands = ['Push', 'Slap'] # How long the fog lasts sm_fog_time = 20 # How long smoke lasts sm_smoke_time = 22 # The minimum amount of players before commands are logged sm_minimum_players_log = 3 # Tell the victim to commands that they've had something done to them sm_tell_target_actions = 0 # Show the person's name to the victim (if sm_tell_target_actions is enabled) sm_show_executer_name = 0 ### End Config ### all_of_the_menus = ('Black Hole', 'Rocket', 'Strip Player', 'Plant', 'Shake', 'Drug', 'Explosion', 'Burn', 'Freeze', 'Mine', 'Slap', 'Entity Explosion', 'Player Explosion', 'Push Player', 'Super Slap', 'Destroy All Props', 'Lightning Strike', 'Beacon Menu', 'Prop Spinner', 'Drunk', 'Bury', 'Step Sizes', 'Flash Player', 'Slow Player', 'High Grav', 'Slay Player', 'Unlimited Smoke', 'Unlimited Flash', 'Unlimited HE', 'Blind', 'Fire Bomb', 'Freeze Bomb', 'Time Bomb', 'Prop Destroy', 'Fake Time Bomb', 'Fake Radio', 'No Ammo', 'Zombify', 'Fog', 'Smoke' ) uhg = [] usg = [] ufb = [] class commands: def nearcoord(self, x_origin, y_origin, z_origin, x_range, y_range, z_range, block, team, initiator): for userid in playerlib.getUseridList(team): loc = es.getplayerlocation(userid) if abs(loc[0] - x_origin) <= x_range and abs(loc[1] - y_origin) <= y_range and abs(loc[2] - z_origin) <= z_range: block(userid, initiator) def lightning(self, x_origin, y_origin, z_origin, lightning_range, lightning_time, attacker, team): loc = (x_origin, y_origin, z_origin) effect_time = 0 effect_loop(loc, lightning_time, lightning_range, attacker, effect_time, team) def effect_loop(loc, lightning_time, lightning_range, userid, effect_time, team): if effect_time <= lightning_time: random1 = random.randint(lightning_range * -1, lightning_range) random2 = random.randint(lightning_range * -1, lightning_range) es.server.queuecmd('est_effect 3 #all 0 sprites/lgtning.vmt %s %s %s %s %s %s 1 10 20 40 250 255 255'%(loc[0] + random1, loc[1] + random2, loc[2], loc[0] + random1, loc[1] + random2, loc[2] + 120)) effect_time += 0.03 commands().nearcoord(loc[0] + random1, loc[1] + random2, loc[2], 45, 45, 45, lightning_damage, team, userid) gamethread.delayedname(0.03, 'effect_%s'%userid, effect_loop, args=(loc, lightning_time, lightning_range, userid, effect_time, team)) def lightning_damage(userid, attacker): random_number = (random.randint(1, 6) * random.randint(1, 6)) - random.randint(1, 10) random_number2 = (random.randint(1, 7) * random.randint(1, 7)) - random.randint(1, 10) random_number3 = (random.randint(1, 7) * random.randint(1, 7)) - random.randint(1, 10) if random_number > 0: es.server.queuecmd('damage %s %s 32 %s'%(userid, random_number3, attacker)) es.tell(attacker, '#multi', '#greenYou have dealt #lightgreen%s #greendamage to #lightgreen%s'%(random_number, playerlib.getPlayer(userid).attributes['name'])) else: if random_number2 > 0: es.server.queuecmd('damage %s %s 32 %s'%(userid, random_number3, attacker)) es.tell(attacker, '#multi', '#greenYou have dealt #lightgreen%s #greendamage to #lightgreen%s'%(random_number2, playerlib.getPlayer(userid).attributes['name'])) else: es.server.queuecmd('damage %s %s 32 %s'%(userid, random_number3, attacker)) es.tell(attacker, '#multi', '#greenYou have dealt #lightgreen%s #greendamage to #lightgreen%s'%(random_number3, playerlib.getPlayer(userid).attributes['name'])) es.ServerVar('sm_version', info['version'], 'SuperMods made by Bonbon AKA Bonbon367').makepublic() def load2(): if not es.exists('saycommand', '!sm'): es.regsaycmd('!sm', 'sm/showmenu', 'I\'m too lazy') if not es.exists('clientcommand', 'smenu'): es.regclientcmd('smenu', 'sm/show_told_menu', 'Easy menu choices') smmm = popuplib.easymenu('Main Menu', '_popup_choice', smmm_menuselect) bhm = popuplib.easymenu('Black Hole', '_popup_choice', bhm_menuselect) rm = popuplib.easymenu('Rocket', '_popup_choice', rm_menuselect) swm = popuplib.easymenu('Strip Player', '_popup_choice', swm_menuselect) pm = popuplib.easymenu('Plant', '_popup_choice', pm_menuselect) sm = popuplib.easymenu('Shake', '_popup_choice', sm_menuselect) dm = popuplib.easymenu('Drug', '_popup_choice', dm_menuselect) em = popuplib.easymenu('Explosion', '_popup_choice', em_menuselect) bm = popuplib.easymenu('Burn', '_popup_choice', bm_menuselect) fm = popuplib.easymenu('Freeze', '_popup_choice', fm_menuselect) mm = popuplib.easymenu('Mine', '_popup_choice', mm_menuselect) slm = popuplib.easymenu('Slap', '_popup_choice', slm_menuselect) eem = popuplib.easymenu('Entity Explosion', '_popup_choice', eem_menuselect) pem = popuplib.easymenu('Player Explosion', '_popup_choice', pem_menuselect) pum = popuplib.easymenu('Push Player', '_popup_choice', pum_menuselect) pdm = popuplib.easymenu('Prop Destroy', '_popup_choice', pdm_menuselect) ssm = popuplib.easymenu('Super Slap', '_popup_choice', ss_menuselect) dp = popuplib.easymenu('Destroy All Props', '_popup_choice', dp_menuselect) lm = popuplib.easymenu('Lightning Strike', '_popup_choice', lightning) beacon = popuplib.easymenu('Beacon Menu', '_popup_choice', beacon_select) propspin = popuplib.easymenu('Prop Spinner', '_popup_choice', prop_spinner) drunk = popuplib.easymenu('Drunk', '_popup_choice', drunk2) burym = popuplib.easymenu('Bury', '_popup_choice', bury) step = popuplib.easymenu('Step Sizes', '_popup_choice', big_steps) flash = popuplib.easymenu('Flash Player', '_popup_choice', flash_player) slow = popuplib.easymenu('Slow Player', '_popup_choice', slow_player) grav = popuplib.easymenu('High Grav', '_popup_choice', high_grav) slay = popuplib.easymenu('Slay Player', '_popup_choice', slay_player) smoke = popuplib.easymenu('Unlimited Smoke', '_popup_choice', smoke_player) flash = popuplib.easymenu('Unlimited Flash', '_popup_choice', flashbang_player) he = popuplib.easymenu('Unlimited HE', '_popup_choice', hegrenade_player) blind = popuplib.easymenu('Blind', '_popup_choice', blind_player) firebomb = popuplib.easymenu('Fire Bomb', '_popup_choice', firebomb_player) freezebomb = popuplib.easymenu('Freeze Bomb', '_popup_choice', freezebomb_player) timebomb = popuplib.easymenu('Time Bomb', '_popup_choice', timebomb_player) ftb = popuplib.easymenu('Fake Time Bomb', '_popup_choice', ftb_player) fradio = popuplib.easymenu('Fake Radio', '_popup_choice', fradio_player) nammo = popuplib.easymenu('No Ammo', '_popup_choice', nammo_player) flp = popuplib.easymenu('Zombify', '_popup_choice', zombie_player) csmoke = popuplib.easymenu('Fog', '_popup_choice', smoke_player2) csmoke2 = popuplib.easymenu('Smoke', '_popup_choice', smoke_player3) colors = {'Red': [255, 0, 0], 'Green': [0, 255, 0], 'Blue': [0, 0, 255], 'Cyan': [40, 240, 255], 'Grey': [100, 100, 100], 'Purple': [255, 0, 255], 'Yellow': [255, 255, 0]} for color in colors: csmoke.addoption(colors[color], color) for cow_go_moo in all_of_the_menus: smmm.addoption(cow_go_moo, cow_go_moo) for submenus in [em, mm, eem, dp, pdm, propspin, csmoke]: submenus.submenu(0, 'Main Menu') em.addoption('point', 'Point and Boom') em.addoption('loc', 'Boom at your feet') mm.addoption('mine', 'Create a mine') eem.addoption('point', 'Point and Boom') eem.addoption('loc', 'Boom at your feet') dp.addoption('continue', 'Destroy All Props') pdm.addoption('destroy', 'Point and Destroy') propspin.addoption('x', 'x') propspin.addoption('y', 'y') propspin.addoption('z', 'z') def unload(): if es.exists('saycommand', '!sm'): es.unregsaycmd('!sm') if es.exists('clientcommand', 'smenu'): es.unregclientcmd('smenu') for a in all_of_the_menus: popuplib.delete(a) def show_told_menu(): if es.getargv(1) in all_of_the_menus: popuplib.send(es.getargv(1), es.getcmduserid()) else: es.cexec(es.getcmduserid(), 'echo Invalid menu valid menus are:') for b in all_of_the_menus: es.cexec(es.getcmduserid(), 'echo %s'%b) def showmenu(): userid = es.getcmduserid() if playerlib.getPlayer(userid).attributes['steamid'] in admins or playerlib.getPlayer(userid).get('ip') in admins: popuplib.send('Main Menu', userid) else: es.tell(userid, '#multi', '#green[SuperMods]:#default Sorry, you are not authorized to run this command!') def smmm_menuselect(userid, choice, popupid): bhm = popuplib.easymenu('Black Hole', '_popup_choice', bhm_menuselect) rm = popuplib.easymenu('Rocket', '_popup_choice', rm_menuselect) swm = popuplib.easymenu('Strip Player', '_popup_choice', swm_menuselect) pm = popuplib.easymenu('Plant', '_popup_choice', pm_menuselect) sm = popuplib.easymenu('Shake', '_popup_choice', sm_menuselect) dm = popuplib.easymenu('Drug', '_popup_choice', dm_menuselect) bm = popuplib.easymenu('Burn', '_popup_choice', bm_menuselect) fm = popuplib.easymenu('Freeze', '_popup_choice', fm_menuselect) slm = popuplib.easymenu('Slap', '_popup_choice', slm_menuselect) pum = popuplib.easymenu('Push Player', '_popup_choice', pum_menuselect) pem = popuplib.easymenu('Player Explosion', '_popup_choice', pem_menuselect) ssm = popuplib.easymenu('Super Slap', '_popup_choice', ss_menuselect) lm = popuplib.easymenu('Lightning Strike', '_popup_choice', lightning) beacon = popuplib.easymenu('Beacon Menu', '_popup_choice', beacon_select) drunk = popuplib.easymenu('Drunk', '_popup_choice', drunk2) burym = popuplib.easymenu('Bury', '_popup_choice', bury) step = popuplib.easymenu('Step Sizes', '_popup_choice', big_steps) flashp = popuplib.easymenu('Flash Player', '_popup_choice', flash_player) slow = popuplib.easymenu('Slow Player', '_popup_choice', slow_player) grav = popuplib.easymenu('High Grav', '_popup_choice', high_grav) slay = popuplib.easymenu('Slay Player', '_popup_choice', slay_player) smoke = popuplib.easymenu('Unlimited Smoke', '_popup_choice', smoke_player) flash = popuplib.easymenu('Unlimited Flash', '_popup_choice', flashbang_player) he = popuplib.easymenu('Unlimited HE', '_popup_choice', hegrenade_player) blind = popuplib.easymenu('Blind', '_popup_choice', blind_player) firebomb = popuplib.easymenu('Fire Bomb', '_popup_choice', firebomb_player) freezebomb = popuplib.easymenu('Freeze Bomb', '_popup_choice', freezebomb_player) timebomb = popuplib.easymenu('Time Bomb', '_popup_choice', timebomb_player) ftb = popuplib.easymenu('Fake Time Bomb', '_popup_choice', ftb_player) fradio = popuplib.easymenu('Fake Radio', '_popup_choice', fradio_player) nammo = popuplib.easymenu('No Ammo', '_popup_choice', nammo_player) flp = popuplib.easymenu('Zombify', '_popup_choice', zombie_player) csmoke2 = popuplib.easymenu('Smoke', '_popup_choice', smoke_player3) for x in (ftb, bhm, rm, swm, pm, sm, dm, bm, fm, slm, pum, pem, ssm, lm, beacon, drunk, burym, step, flash, slow, grav, slay, smoke, flashp, he, blind, firebomb, freezebomb, timebomb, fradio, nammo, flp, csmoke2): x.submenu(0, 'Main Menu') for player in playerlib.getPlayerList(): p_userid = int(player) p_name = player.get('name') for xyzzy in (ftb, bhm, rm, swm, pm, sm, dm, bm, fm, slm, pum, pem, ssm, lm, beacon, drunk, burym, step, flashp, slow, grav, slay, smoke, flash, he, blind, firebomb, freezebomb, timebomb, fradio, nammo, flp, csmoke2): xyzzy.addoption(p_userid, p_name) popuplib.send(choice, userid) def bhm_menuselect(userid, choice, popupid): (x, y, z) = es.getplayerlocation(choice) es.server.queuecmd('est_blackhole %s %s %s %s'%(x, y, z, sm_blackhole_time)) stuff(userid, 'Black Hole', 'You have turned %s into a blackhole!'%playerlib.getPlayer(choice).get('name'), 'Black Hole', choice) def rm_menuselect(userid, choice, popupid): es.server.queuecmd('est_rocket %s'%choice) stuff(userid, 'Rocket', 'You have rocketed %s'%playerlib.getPlayer(choice).get('name'), 'Rocket', choice) def swm_menuselect(userid, choice, popupid): es.server.queuecmd('es_give %s player_weaponstrip'%choice) es.server.queuecmd('es_xfire %s player_weaponstrip StripWeaponsAndSuit'%choice) stuff(userid, 'Strip Player', 'You have stripped %s\'s weapons!'%playerlib.getPlayer(choice).get('name'), 'Strip', choice) def pm_menuselect(userid, choice, popupid): player = playerlib.getPlayer(choice) if player.get('freeze') == '0': player.set('model', 'props/cs_office/plant01') es.server.queuecmd('es_give %s player_weaponstrip'%choice) es.server.queuecmd('es_xfire %s player_weaponstrip StripWeaponsAndSuit'%choice) es.tell(userid, '#multi', '#green[SuperMods]:#default You have plantified %s'%playerlib.getPlayer(choice).get('name')) player.set('freeze', '1') else: player.set('noclip', '0') es.server.queuecmd('es_xgive %s weapon_m4a1'%choice) es.server.queuecmd('es_xgive %s weapon_knife'%choice) es.tell(userid, '#multi', '#green[SuperMods]:#default You have un-plantified %s'%playerlib.getPlayer(choice).get('name')) popuplib.send('Plant', userid) def sm_menuselect(userid, choice, popupid): usermsg.shake(choice, sm_shake_velocity, sm_shake_time) stuff(userid, 'Shake', 'You have shook %s\'s screen'%playerlib.getPlayer(choice).get('name'), 'Shake', choice) def dm_menuselect(userid, choice, popupid): es.cexec(choice, 'r_screenoverlay effects/tp_eyefx/tp_eyefx.vmt') gamethread.delayed(sm_drug_time, es.cexec, args=(choice, 'r_screenoverlay ""')) stuff(userid, 'Drug', 'You have drugged %s'%playerlib.getPlayer(choice).get('name'), 'Drug', choice) def em_menuselect(userid, choice, popupid): es.tell(userid, '#multi', '#green[SuperMods]:#default You have created an explosion!') if choice == 'point': es.server.queuecmd('es_entcreate %s env_explosion'%userid) gamethread.delayed(0.1, explode, args=(userid)) elif choice == 'loc': es.server.queuecmd('es_give %s env_explosion'%userid) gamethread.delayed(0.1, explode, args=(userid)) popuplib.send('Explosion', userid) def explode(userid): waffles = es.createentitylist('env_explosion') for syrup in waffles: es.setindexprop(syrup, "CBaseEntity.m_hOwnerEntity", es.getplayerhandle(userid)) es.server.queuecmd('es_xfire %s env_explosion addoutput "iMagnitude 400"'%userid) es.server.queuecmd('es_xfire %s env_explosion addoutput "iRadiusoverride 500"'%userid) es.server.queuecmd('es_xfire %s env_explosion explode'%userid) fire_in_the_hole(userid) def fire_in_the_hole(userid): team = '#t' if int(playerlib.getPlayer(userid).get('teamid')) == 2 else '#ct' for userid2 in playerlib.getUseridList(team): usermsg.saytext2(userid2, playerlib.getPlayer(userid).get('index'), '\3%s \1(RADIO): Fire in the hole!'%playerlib.getPlayer(userid).get('name')) def bm_menuselect(userid, choice, popupid): es.server.queuecmd('es_fire %s !self ignite'%choice) es.cexec(choice, 'r_screenoverlay effects/tp_refract.vmt') gamethread.delayed(sm_burn_time, extinguish, (choice)) gamethread.delayed(sm_burn_time, es.cexec, args=(choice, 'r_screenoverlay ""')) stuff(userid, 'Burn', 'You have burned %s'%playerlib.getPlayer(choice).get('name'), 'Burn', choice) def extinguish(userid): # Thanks, Freddukes napalmlist = es.createentitylist('entityflame') handle = es.getplayerhandle(userid) for flame_entity in napalmlist: string = es.getindexprop(flame_entity, 'CEntityFlame.m_hEntAttached') if string == handle: es.setindexprop(flame_entity, 'CEntityFlame.m_flLifetime', 0) es.cexec(userid, 'r_screenoverlay ""') es.server.queuecmd('es_xfire %s !self DispatchEffect WaterSurfaceExplosion'%userid) break def fm_menuselect(userid, choice, popupid): if playerlib.getPlayer(choice).get('freeze'): es.tell(userid, '#multi', '#green[SuperMods]:#default You have unfrozen %s'%playerlib.getPlayer(choice).get('name')) playerlib.getPlayer(choice).set('noclip', '0') else: es.tell(userid, '#multi', '#green[SuperMods]:#default You have frozen %s'%playerlib.getPlayer(choice).get('name')) playerlib.getPlayer(choice).set('freeze', '1') popuplib.send('Freeze', userid) def mm_menuselect(userid, choice, popupid): es.tell(userid, '#multi', '#green[SuperMods]:#default You have made a mine! Better move fast!') es.server.queuecmd('es_give %s env_explosion'%userid) es.server.queuecmd('es_xfire %s env_explosion addoutput "iMagnitude %s"'%(userid, sm_mine_damage)) es.server.queuecmd('es_xfire %s env_explosion addoutput "iRadiusoverride %s"'%(userid, sm_mine_radius)) es.server.queuecmd('es_prop_dynamic_create %s roller_spikes'%userid) gamethread.delayed(0, mine_placement, userid) es.ServerVar('exploded').set(0) es.ServerVar('notneeded').set(0) popuplib.send('Mine', userid) def mine_placement(userid): (x, y, z) = es.getplayerlocation(userid) loc = es.getplayerlocation(userid) index = int(es.ServerVar('eventscripts_lastgive')) es.setindexprop(int(es.ServerVar('eventscripts_lastgive')), 'CBaseEntity.m_vecOrigin', '%s,%s,%s'%(loc[0], loc[1], loc[2] - 100)) gamethread.delayed(5, es.setindexprop, (index, 'CBaseEntity.m_vecOrigin', '%s,%s,%s'%(loc[0], loc[1], loc[2]))) gamethread.delayed(5, mine_explode, args=(userid, x, y, z, index)) def slm_menuselect(userid, choice, popupid): es.setplayerprop(choice, 'CCSPlayer.baseclass.localdata.m_vecBaseVelocity', '%s,%s,%s'%(random.randint(-255, 255), random.randint(-255, 255), random.randint(-100, 255))) stuff(userid, 'Slap', 'You have slapped %s'%playerlib.getPlayer(choice).get('name'), 'Slap', choice) def mine_explode(userid, x, y, z, index): if es.ServerVar('exploded') == 0: es.server.queuecmd('nearcoord notneeded #all %s %s %s 100 100 100 "es_fire %s env_explosion explode;es_xset exploded 1;damage %s %s 32 %s"'%(x, y, z, userid, userid, random.randint(1, 100), userid)) gamethread.delayed(0.1, mine_explode, args=(userid, x, y, z, index)) else: for a in es.createentitylist(): if index == a and not es.createentitylist()[a]['classname'] == 'worldspawn': es.server.queuecmd('es_xremove %s'%index) def eem_menuselect(userid, choice, popupid): if choice == 'point': es.server.queuecmd('es_entcreate %s env_physexplosion'%userid) es.server.queuecmd('es_fire %s env_physexplosion addoutput "magnitude 100"'%userid) es.server.queuecmd('es_fire %s env_physexplosion addoutput "radius 100"'%userid) es.server.queuecmd('es_fire %s env_physexplosion explode'%userid) elif choice == 'loc': es.server.queuecmd('es_give %s env_physexplosion'%userid) es.server.queuecmd('es_fire %s env_physexplosion addoutput "magnitude 100"'%userid) es.server.queuecmd('es_fire %s env_physexplosion addoutput "radius 100"'%userid) es.server.queuecmd('es_fire %s env_physexplosion explode'%userid) popuplib.send('Entity Explosion', userid) def pem_menuselect(userid, choice, popupid): es.server.queuecmd('es_give %s env_explosion'%choice) es.server.queuecmd('es_xfire %s env_explosion setparent !activator'%choice) es.server.queuecmd('es_xfire %s env_explosion addoutput "iMagnitude 400"'%choice) es.server.queuecmd('es_xfire %s env_explosion addoutput "iRadiusoverride 200"'%choice) es.server.queuecmd('es_xfire %s env_explosion explode'%choice) stuff(userid, 'Player Explosion', 'You have exploded %s'%playerlib.getPlayer(choice).get('name'), 'Explode Player', choice) def pum_menuselect(userid, choice, popupid): x = 10 * sm_push_strength * playerlib.getPlayer(choice).get('viewvector')[0] y = 10 * sm_push_strength * playerlib.getPlayer(choice).get('viewvector')[1] z = 10 * sm_push_strength * playerlib.getPlayer(choice).get('viewvector')[2] es.setplayerprop(choice, 'CCSPlayer.baseclass.localdata.m_vecBaseVelocity', '%s,%s,%s'%(x, y, z)) stuff(userid, 'Push Player', 'You have pushed %s'%playerlib.getPlayer(choice).get('name'), 'Push', choice) def pdm_menuselect(userid, choice, popupid): es.tell(userid, '#multi', '#green[SuperMods]: #defaultPlease, be very careful with this command, as it has crashed many servers') es.tell(userid, '#multi', '#green[SuperMods]: #defaultonly use it on moving objects such as boats!') es.ServerVar('prop').set(0) es.server.queuecmd('est_getviewprop %s prop'%userid) gamethread.delayed(0, prop_destroy_moo, (userid)) def prop_destroy_moo(userid): prop = es.ServerVar('prop') for a in es.createentitylist(): if prop == a and not es.createentitylist()[a]['classname'] == 'worldspawn': es.server.queuecmd('es_remove %s'%prop) popuplib.send('Prop Destroy', userid) def ss_menuselect(userid, choice, popupid): slap_time = 0 gamethread.delayedname(0.1, 'mega_slap_%s'%choice, mega_slap_loop, args=(choice, slap_time)) stuff(userid, 'Super Slap', 'You have Super Slapped %s'%playerlib.getPlayer(userid).get('name'), 'Super Slap', choice) def mega_slap_loop(choice, slap_time): if slap_time <= sm_superslap_time: es.setplayerprop(choice, 'CBasePlayer.localdata.m_vecBaseVelocity', '%s,%s,%s'%(random.randint(-155, 155), random.randint(-155, 155), random.randint(0, 200))) slap_time += 0.1 gamethread.delayedname(0.1, 'mega_slap_%s'%choice, mega_slap_loop, args=(choice, slap_time)) def dp_menuselect(userid, choice, popupid): for a in es.createentitylist('prop_physics_multiplayer'): if a: es.server.queuecmd('es_xremove %s'%a) def es_client_command(event_var): if event_var['command'] == '!supermod': if event_var['es_steamid'] in admins: popuplib.send('Main Menu', event_var['userid']) def lightning(userid, choice, popupid): loc = es.getplayerlocation(choice) if playerlib.getPlayer(userid).attributes['teamid'] == 2: commands().lightning(loc[0], loc[1], loc[2], 300, 3, userid, '#ct,#alive') elif playerlib.getPlayer(userid).attributes['teamid'] == 3: commands().lightning(loc[0], loc[1], loc[2], 300, 3, userid, '#t,#alive') popuplib.send('Lightning Strike', userid) def beacon_select(userid, choice, popupid): beacon_loop(userid, choice) stuff(userid, 'Beacon Menu', 'You have beaconed %s'%playerlib.getPlayer(choice).get('name'), 'Beacon', choice) def beacon_loop(userid, userid2): if not playerlib.getPlayer(userid2).get('isdead'): 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)) 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)) gamethread.delayedname(1, 'beacon_%s'%userid2, beacon_loop, args=(userid, userid2)) prop_index = None def get_view_prop(userid): global prop_index prop_index = int(es.ServerVar('prop')) def prop_spinner(userid, choice, popupid): popuplib.send('Prop Spinner', userid) es.ServerVar('prop').set(0) es.server.queuecmd('est_getviewprop %s prop'%userid) gamethread.delayed(0, get_view_prop, (userid)) gamethread.delayed(0.1, prop_spin_loop, (choice, prop_index, sm_prop_spin_time, None)) def prop_spin_loop(choice, index, time, angs): if time == sm_prop_spin_time: index = prop_index angs = es.getindexprop(index, 'CPhysicsPropMultiplayer.baseclass.baseclass.baseclass.baseclass.m_angRotation') if time >= 0: time -= 0.1 x, y, z = es.getindexprop(index, 'CPhysicsPropMultiplayer.baseclass.baseclass.baseclass.baseclass.m_angRotation').split(',') if choice == 'x': x = int(float(x)) + sm_prop_spin_intensity elif choice == 'y': y = int(float(y)) + sm_prop_spin_intensity elif choice == 'z': z = int(float(z)) + sm_prop_spin_intensity es.setindexprop(index, 'CPhysicsPropMultiplayer.baseclass.baseclass.baseclass.baseclass.m_angRotation', '%s,%s,%s'%(x, y, z)) gamethread.delayedname(0.1, 'spin_%s'%index, prop_spin_loop, (choice, index, time, angs)) else: es.setindexprop(index, 'CPhysicsPropMultiplayer.baseclass.baseclass.baseclass.baseclass.m_angRotation', angs) def drunk2(userid, choice, popupid): angs = playerlib.getPlayer(choice).get('viewangle') es.server.queuecmd('es_xsetang %s %s %s %s'%(choice, angs[0], angs[1], random.randint(-60, 60))) dtime = sm_drunk_time gamethread.delayed(0.5, drunk_loop, args=(choice, dtime)) stuff(userid, 'Drunk', 'You have Drunked %s'%playerlib.getPlayer(choice).get('name'), 'Drunk', choice) def drunk_loop(userid, dtime): angs = playerlib.getPlayer(userid).get('viewangle') if dtime >= 0: dtime -= 0.5 es.server.queuecmd('es_xsetang %s %s %s %s'%(userid, angs[0], angs[1], random.randint(-66, 66))) gamethread.delayedname(0.5, 'drunk_loop_%s'%userid, drunk_loop, args=(userid, dtime)) else: es.server.queuecmd('es_xsetang %s %s %s %s'%(userid, angs[0], angs[1], 0)) def bury(userid, choice, popupid): es.server.queuecmd('es_xsetpos %s %s %s %s'%(choice, es.getplayerlocation(choice)[0], es.getplayerlocation(choice)[1], int(es.getplayerlocation(choice)[2]) - 60)) stuff(userid, 'Bury', 'You have burried %s'%playerlib.getPlayer(choice).get('name'), 'Bury', choice) def big_steps(userid, choice, popupid): menu2 = popuplib.easymenu('Chose Amount', '_popup_choice', big_steps2) for a in (18, 50, 100, 150, 200, 300, 400, 500, 700, 800, 1000, 1200, 1400, 1600, 1800, 2000, 2250, 2500, 2750, 3000, 3500, 4000, 5000, 7000, 10000): menu2.addoption((choice, a), a) menu2.submenu(0, 'Step Sizes') popuplib.send('Chose Amount', userid) def big_steps2(userid, choice, popupid): es.setplayerprop(choice[0], 'CCSPlayer.baseclass.localdata.m_Local.m_flStepSize', choice[1]) stuff(userid, 'Step Sizes', 'You have Changed %s\'s step sizes to %s'%(playerlib.getPlayer(choice[0]).get('name'), choice[1]), 'Step Size', choice) def flash_player(userid, choice, popupid): gamethread.delayed(0.5, es.server.queuecmd, 'playerset flash %s 255 %s'%(choice, sm_flash_time)) fire_in_the_hole(userid) stuff(userid, 'Flash Player', 'You have flashed %s'%playerlib.getPlayer(choice).get('name'), 'Flash', choice) es.fadevolume(choice, 90, 1, 1, 1) def slow_player(userid, choice, popupid): if playerlib.getPlayer(choice).get('speed') < 1: playerlib.getPlayer(choice).set('speed', '1') es.tell(userid, '#multi', '#green[SuperMods]:#default You have un-slown %s'%playerlib.getPlayer(choice).get('name')) else: playerlib.getPlayer(choice).set('speed', sm_slow_speed) es.tell(userid, '#multi', '#green[SuperMods]:#default You have slown %s'%playerlib.getPlayer(choice).get('name')) popuplib.send('Slow Player', userid) def high_grav(userid, choice, popupid): es.server.queuecmd('es_xfire %s !self addoutput "gravity 99999"'%choice) stuff(userid, 'High Grav', 'You have made %s\'s gravity really high!'%playerlib.getPlayer(choice).get('name'), 'High Gravity', choice) gamethread.delayed(sm_highgrav_time, es.server.queuecmd, 'es_xfire %s !self addoutput "gravity 1"'%choice) def slay_player(userid, choice, popupid): playerlib.getPlayer(choice).set('health', '1') es.server.queuecmd('damage %s 1 32 %s'%(choice, choice)) es.server.queuecmd('es_xfire %s !self ignite'%choice) stuff(userid, 'Slay Player', 'You have slayed %s'%playerlib.getPlayer(choice).get('name'), 'Slay', choice) def player_disconnect(ev): gamethread.cancelDelayed('beacon_%s'%ev['userid']) def smoke_player(userid, choice, popupid): es.server.queuecmd('es_xgive %s weapon_smokegrenade'%choice) global usg if not choice in usg: usg.append(str(choice)) stuff(userid, 'Unlimited Smoke', 'You have given %s unlimited Smoke Grenades!'%playerlib.getPlayer(choice).get('name'), 'Unlimited Smoke Grendes', choice) def hegrenade_player(userid, choice, popupid): es.server.queuecmd('es_xgive %s weapon_hegrenade'%choice) global uhg if not choice in uhg: uhg.append(str(choice)) stuff(userid, 'Unlimited HE', 'You have given %s unlimited HE Grenades!'%playerlib.getPlayer(choice).get('name'), 'Unlimited HE', choice) def flashbang_player(userid, choice, popupid): es.server.queuecmd('es_xgive %s weapon_flashbang'%choice) global ufb if not choice in ufb: ufb.append(str(choice)) stuff(userid, 'Unlimited Flash', 'You have given %s unlimited Flash Bangs!'%playerlib.getPlayer(choice).get('name'), 'Unlimited Flash', choice) def round_start(ev): global uhg, usg, ufb ufb = [] uhg = [] usg = [] def hegrenade_detonate(ev): if ev['userid'] in uhg: es.server.queuecmd('es_xgive %s weapon_hegrenade'%ev['userid']) def flashbang_detonate(ev): if ev['userid'] in ufb: es.server.queuecmd('es_xgive %s weapon_flashbang'%ev['userid']) def smokegrenade_detonate(ev): if ev['userid'] in usg: es.server.queuecmd('es_xgive %s weapon_smokegrenade'%ev['userid']) def blind_player(userid, choice, popupid): usermsg.fade(choice, 0, sm_blind_time / 2.0, sm_blind_time / 2.0, 0, 0, 0, sm_blind_alpha) stuff(userid, 'Blind', 'You have blinded %s!'%playerlib.getPlayer(choice).get('name'), 'Blind', choice) def timebomb_player(userid, choice, popupid): bomb_loop(choice, 'Time Bomb', sm_bomb_time) stuff(userid, 'Time Bomb', 'You have turned %s into a Time Bomb!'%playerlib.getPlayer(choice).get('name'), 'Time Bomb', choice) def freezebomb_player(userid, choice, popupid): bomb_loop(choice, 'Freeze Bomb', sm_bomb_time) stuff(userid, 'Freeze Bomb', 'You have turned %s into a Time Bomb!'%playerlib.getPlayer(choice).get('name'), 'Freeze Bomb', choice) def firebomb_player(userid, choice, popupid): bomb_loop(choice, 'Fire Bomb', sm_bomb_time) stuff(userid, 'Fire Bomb', 'You have turned %s into a Time Bomb!'%playerlib.getPlayer(choice).get('name'), 'Fire Bomb', choice) bomb_colors = {'Fire Bomb': {'1': '255 0 0', '2': '255 150 150'}, 'Freeze Bomb': {'1': '0 0 255', '2': '40 240 255'}, 'Time Bomb': {'1': '255 0 0', '2': '0 0 255'}, 'Fake': {'1': '255 0 0', '2': '0 0 255'}} def bomb_loop(userid, type, time): x, y, z = es.getplayerlocation(userid) if time == sm_bomb_time: es.centermsg(time) time -= 1 gamethread.delayedname(1, '%s_%s'%(type.replace(' Bomb', ''), userid), bomb_loop, (userid, type, time)) if type == 'Fake': type = 'Time Bomb' es.tell(userid, '#green', 'You have been turned into a %s!'%type) elif time >= 0: es.centermsg(time) time -= 1 gamethread.delayedname(1, '%s_%s'%(type.replace(' Bomb', ''), userid), bomb_loop, (userid, type, time)) es.server.queuecmd('est_effect 10 #a 0 "sprites/lgtning.vmt" %s %s %s 20 300 0.2 20 10 0 %s 255 30'%(x, y, z, bomb_colors[type]['1'])) es.server.queuecmd('est_effect 10 #a 0.1 "sprites/lgtning.vmt" %s %s %s 20 300 0.3 15 10 0 %s 255 30'%(x, y, z, bomb_colors[type]['2'])) es.emitsound('player', userid, 'buttons/blip2.wav', 1.0, 0.5) else: es.emitsound('player', userid, 'ambient/energy/zap6.wav', 1.0, 0.5) if not type == 'Time Bomb': for userid2 in playerlib.getUseridList('#all'): loc = es.getplayerlocation(userid2) if abs(loc[0] - x) <= bomb_range and abs(loc[1] - y) <= bomb_range and abs(loc[2] - z) <= bomb_range: bomb_explode(userid2, type) else: es.server.queuecmd('es_give %s env_explosion'%userid) es.server.queuecmd('es_xfire %s env_explosion addoutput "iMagnitude 400"'%userid) es.server.queuecmd('es_xfire %s env_explosion addoutput "iRadiusoverride %s"'%(userid, bomb_range)) es.server.queuecmd('es_xfire %s env_explosion explode'%userid) playerlib.getPlayer(userid).set('health', '1') es.server.queuecmd('damage %s 1 32 %s'%(userid, userid)) es.server.queuecmd('es_xfire %s !self ignite'%userid) def bomb_explode(userid, type): x, y, z = es.getplayerlocation(userid) if type == 'Freeze Bomb': playerlib.getPlayer(userid).set('freeze', '1') effectlib.drawLine([x, y, z], [x, y, z + 150], "materials/sprites/laser.vmt", "materials/sprites/halo01.vmt", 5, 20, 30, 40, 240, 255, 255, 10, 10, 0, 0, 0) elif type == 'Fire Bomb': effectlib.drawLine([x, y, z], [x, y, z + 150], "materials/sprites/laser.vmt", "materials/sprites/halo01.vmt", 5, 20, 30, 255, 0, 0, 255, 10, 10, 0, 0, 0) es.server.queuecmd('es_xfire %s !self ignite'%userid) elif type == 'Fake': effectlib.drawLine([x, y, z], [x, y, z + 150], "materials/sprites/laser.vmt", "materials/sprites/halo01.vmt", 5, 20, 30, 0, 255, 0, 255, 10, 10, 0, 0, 0) es.server.queuecmd('es_give %s env_explosion'%userid) es.server.queuecmd('es_xfire %s env_explosion addoutput "iMagnitude 1"'%userid) es.server.queuecmd('es_xfire %s env_explosion addoutput "iRadiusoverride 100"'%userid) es.server.queuecmd('es_xfire %s env_explosion explode'%userid) gamethread.delayed(2, es.tell, (userid, '#green', 'Haha, it was a fake')) def ftb_player(userid, choice, popupid): bomb_loop(choice, 'Fake', sm_bomb_time) stuff(userid, 'Fake Time Bomb', 'You have turned %s into a Fake Time Bomb!'%playerlib.getPlayer(choice).get('name'), 'Fake Time Bomb', choice) def fradio_player(userid, choice, popupid): fradio2 = popuplib.easymenu('Chose a Radio', '_popup_choice', fradio2_select) for command in sm_fake_radio_commands: fradio2.addoption([choice, command], command) fradio2.submenu(0, 'Fake Radio') popuplib.send('Chose a Radio', userid) def fradio2_select(userid, choice, popupid): fake_radio(choice[0], choice[1]) stuff(userid, 'Chose a Radio', 'You have made a %s radio %s'%(playerlib.getPlayer(choice[0]).get('name'), choice[1]), 'Fake Radio', choice) def fake_radio(userid, message): team = '#t' if int(playerlib.getPlayer(userid).get('teamid')) == 2 else '#ct' for userid2 in playerlib.getUseridList(team): usermsg.saytext2(userid2, playerlib.getPlayer(userid).get('index'), '\3%s \1(RADIO): %s!'%(playerlib.getPlayer(userid).get('name'), message)) def nammo_player(userid, choice, popupid): playerlib.getPlayer(choice).set('ammo', [1, 0]) playerlib.getPlayer(choice).set('ammo', [2, 0]) playerlib.getPlayer(choice).set('clip', [1, 0]) playerlib.getPlayer(choice).set('clip', [2, 0]) stuff(userid, 'No Ammo', 'You taken away %s\'s ammo!'%playerlib.getPlayer(choice).get('name'), 'No Ammo', choice) def zombie_player(userid, choice, popupid): stuff(userid, 'Zombify', 'You have fake zombiefied %s'%playerlib.getPlayer(choice).get('name'), 'Zombify', choice) es.cexec(choice, 'play %s'%random.choice(['ambient/creatures/town_zombie_call1.wav', 'ambient/creatures/town_moan1', 'npc/zombie/zombie_die1', 'npc/zombie/zombie_die2', 'npc/zombie/zombie_die3'])) es.tell(choice, '#multi', '#lightgreen[Zombie] #defaultYou are now a Zombie eat some brains!') es.sexec(choice, 'use weapon_knife') es.server.queuecmd('es_give %s env_explosion'%choice) es.server.queuecmd('es_xfire %s env_explosion addoutput "iMagnitude 1"'%choice) es.server.queuecmd('es_xfire %s env_explosion explode'%choice) def smoke_player2(userid, choice, popupid): # Stolen from TeamFog :) es.server.queuecmd('es_xgive %s env_fog_controller'%userid) es.server.queuecmd('es_xfire %s env_fog_controller addoutput \"fogdir %s %s %s\"'%(userid, 0, 0, 0)) es.server.queuecmd('es_xfire %s env_fog_controller addoutput \"fogstart %s\"'%(userid, 50)) es.server.queuecmd('es_xfire %s env_fog_controller addoutput \"fogend %s\"'%(userid, 1000)) es.server.queuecmd('es_xfire %s env_fog_controller addoutput \"fogblend 1"'%userid) es.server.queuecmd('es_xfire %s env_fog_controller addoutput \"fogcolor %s %s %s\"'%(userid, choice[0], choice[1], choice[2])) es.server.queuecmd('es_xfire %s env_fog_controller addoutput \"fogcolor2 %s %s %s\"'%(userid, choice[0], choice[2], choice[2])) es.server.queuecmd('es_xfire %s env_fog_controller turnon'%userid) gamethread.delayed(sm_fog_time, es.server.queuecmd, 'es_xfire %s env_fog_controller turnoff'%userid) gamethread.delayed(sm_fog_time, es.server.queuecmd, 'es_xfire %s env_fog_controller kill'%userid) stuff(userid, 'Fog', 'You have Fogged up the place!', 'Fog', userid) def smoke_player3(userid, choice, popupid): smoke_effect_loop(choice, sm_smoke_time, es.getplayerlocation(choice), 100, 0) stuff(userid, 'Smoke', 'You have smoked %s'%playerlib.getPlayer(choice).get('name'), 'Smoke', choice) def smoke_effect_loop(userid, stime, loc, size, decent): if stime >= 0: if size <= 300 and not decent: size += (200.0 / (sm_smoke_time * 5)) else: size -= (200.0 / (sm_smoke_time * 5)) decent = 1 stime -= 0.1 es.effect('smoke', '%s,%s,%s'%(loc[0], loc[1], loc[2]), es.precachemodel('sprites/smoke.vmt'), size, 7) gamethread.delayed(0.1, smoke_effect_loop, (userid, stime, loc, size, decent)) def stuff(userid, menu, message, command, target): es.tell(userid, '#multi', '#green[Supermods]: #default%s'%message) popuplib.send(menu, userid) if len(es.getUseridList()) > sm_minimum_players_log: if sm_log_commands and not playerlib.getPlayer(userid).get('steamid') in sm_unlogged_admins: if (command in multiple_commands and random.randint(1, 7) == 7) or not command in multiple_commands: a = open(es.getAddonPath('sm') + '/logs.txt', 'a') a.writelines('%s %s executed %s on %s with current name %s with %s people on the server\n'%(time.asctime(), playerlib.getPlayer(userid).get('steamid'), command, playerlib.getPlayer(target).get('steamid'), playerlib.getPlayer(target).get('name'), len(es.getUseridList()))) a.close() if sm_tell_target_actions: es.tell(target, '#multi', '#green[SuperMods]:#defaultYou have had %s executed on you %s'%(command, 'by %s'%playerlib.getPlayer(userid).get('name') if sm_show_executer_name else '')) def popup_select(ev): if str(ev['popup_name']) in all_of_the_menus: es.cexec(ev['userid'], 'play buttons/button14') gamethread.delayed(0, load2, ())