import es, popuplib, playerlib, gamethread, usermsg, random # Whether or not weapon upgrades are enabled zbuy_enable_weapon_upgrades = 1 # Enable/Disable sell zbuy_enable_sell = 1 # Whether or not you have to be in a buy zone to buy zbuy_buy_only_in_buyzone = 0 # The amount of time you can buy for, float(es.ServerVar('mp_buytime')) is default for your server 0 == infinate zbuy_buytime = float(es.ServerVar('mp_buytime')) * 60 # Remove weapons after buy remove_weapons = 0 # Sometimes, doing damage with the mod stops knockback, this will just set the persons health lower rather than damage (unless the damage would kill) stop_knockback_bug = 0 ### Start Config ### guns = { 'Pistols': { 'glock': { 'Sellprice': 150, 'Cost': 300, 'Ammo': '9mm' }, 'usp': { 'Sellprice': 150, 'Cost': 300, 'Ammo': '.45' }, 'p228': { 'Sellprice': 300, 'Cost': 600, 'Ammo': '.357' }, 'deagle': { 'Sellprice': 375, 'Cost': 750, 'Ammo': '.50' }, 'fiveseven': { 'Sellprice': 400, 'Cost': 800, 'Ammo': '5.7' }, 'elite': { 'Sellprice': 400, 'Cost': 800, 'Ammo': '9mm' } }, 'Items': { 'nvgs': { 'Cost': 1250 }, 'primary': { 'Cost': 1250 }, 'secondary': { 'Cost': 750 }, 'assault suit': { 'Cost': 1000 }, 'hegrenade': { 'Cost': 3500 }, 'flashbang': { 'Cost': 8000 } }, 'Smgs': { 'mac10': { 'Sellprice': 625, 'Cost': 1250, 'Ammo': '.45' }, 'tmp': { 'Sellprice': 700, 'Cost': 1400, 'Ammo': '9mm' }, 'mp5navy': { 'Sellprice': 750, 'Cost': 1500, 'Ammo': '9mm' }, 'p90': { 'Sellprice': 1175, 'Cost': 2350, 'Ammo': '5.7' }, 'ump45': { 'Sellprice': 850, 'Cost': 1700, 'Ammo': '.45' } }, 'Shotguns': { 'm3': { 'Sellprice': 850, 'Cost': 1700, 'Ammo': 'buckshot' }, 'xm1014': { 'Sellprice': 1500, 'Cost': 3000, 'Ammo': 'buckshot' } }, 'Rifles': { 'ak47': { 'Sellprice': 1250, 'Cost': 2500, 'Ammo': '7.62' }, 'm4a1': { 'Sellprice': 1550, 'Cost': 3100, 'Ammo': '5.56' }, 'famas': { 'Sellprice': 1250, 'Cost': 2500, 'Ammo': '5.56' }, 'galil': { 'Sellprice': 1000, 'Cost': 2000, 'Ammo': '5.56' }, 'sg552': { 'Sellprice': 1750, 'Cost': 3500, 'Ammo': '5.56' }, 'aug': { 'Sellprice': 1750, 'Cost': 3500, 'Ammo': '7.62' } }, 'Snipers': { 'scout': { 'Sellprice': 1375, 'Cost': 2750, 'Ammo': '7.62' } } } damage = { '5.56': 0.05, '5.7': 0.1, '9mm': 0.075, 'buckshot': 0.04, '.45': 0.025, '.357': 0.025, '.50': 0.075 } upgrade_cost = { '5.56': 11500, '5.7': 8500, '9mm': 10000, 'buckshot': 12500, '.45': 8500, '.357': 8500, '.50': 11000 } ### End Config ### info = es.AddonInfo() info['name'] = "ZBuy" info['version'] = "2.0" info['author'] = "Bonbon AKA: Bonbon367" info['url'] = "http://addons.eventscripts.com/addons/view/zbuy" info['description'] = "A Zombie buy" es.ServerVar('zbuy_version', info['version'], 'ZBuy made by Bonbon AKA Bonbon367').makepublic() weapon_damage = {'5.56': 0, '5.7': 0, '9mm': 0, 'buckshot': 0, '.45': 0, '.357': 0, '.50': 0} upgrademenu = None time_left_to_buy = 1 def load2(): global upgrademenu mmenu = popuplib.easymenu('Bonbon Buy', '_popup_choice', mm_select) pmenu = popuplib.easymenu('Pistols', '_popup_choice', p_select) imenu = popuplib.easymenu('Items', '_popup_choice', i_select) smgmenu = popuplib.easymenu('Smgs', '_popup_choice', smg_select) smenu = popuplib.easymenu('Shotguns', '_popup_choice', s_select) rmenu = popuplib.easymenu('Rifles', '_popup_choice', r_select) snipmenu = popuplib.easymenu('Snipers', '_popup_choice', snip_select) specmenu = popuplib.easymenu('Special', '_popup_choice', spec_select) weapmenu = popuplib.easymenu('Weapons', '_popup_choice', weap_select) upgrademenu = popuplib.easymenu('Upgrades', '_popup_choice', upgrade_select) mmenu.addoption('Weapons', 'Weapons') if not es.exists('saycommand', '!buy'): es.regsaycmd('!buy', 'zbuy/do_buy') if not es.exists('clientcommand', '!buy'): es.regclientcmd('!buy', 'zbuy/do_buy') if not es.exists('saycommand', '!sell'): es.regsaycmd('!sell', 'zbuy/sell') if not es.exists('clientcommand', '!sell'): es.regclientcmd('!sell', 'zbuy/sell') for a in guns: if a in ('Pistols', 'Shotguns', 'Smgs', 'Rifles', 'Snipers'): weapmenu.addoption(a, a) else: mmenu.addoption(a, a) for b in guns['Pistols']: pmenu.addoption(b, '%s$%s'%(b[0].capitalize() + b[1:].ljust(15), guns['Pistols'][b]['Cost'])) for c in guns['Smgs']: smgmenu.addoption(c, '%s$%s'%(c[0].capitalize() + c[1:].ljust(15), guns['Smgs'][c]['Cost'])) for d in guns['Items']: imenu.addoption(d, '%s$%s'%(d[0].capitalize() + d[1:].ljust(15), str(guns['Items'][d]['Cost']))) for e in guns['Shotguns']: smenu.addoption(e, '%s$%s'%(e[0].capitalize() + e[1:].ljust(15), str(guns['Shotguns'][e]['Cost']))) for f in guns['Rifles']: rmenu.addoption(f, '%s$%s'%(f[0].capitalize() + f[1:].ljust(15), str(guns['Rifles'][f]['Cost']))) for g in guns['Snipers']: snipmenu.addoption(g, '%s$%s'%(g[0].capitalize() + g[1:].ljust(15), str(guns['Snipers'][g]['Cost']))) mmenu.addoption('Special', 'Special') specmenu.addoption('Steroids', 'Steroids $10000') for a in (pmenu, smgmenu, smenu, rmenu, snipmenu): a.submenu(0, 'Weapons') for b in (imenu, specmenu, upgrademenu, weapmenu): b.submenu(0, 'Bonbon Buy') if zbuy_enable_weapon_upgrades: mmenu.addoption('Upgrades', 'Upgrades') for h in upgrade_cost: upgrademenu.addoption(h, '%s$%s'%(h.ljust(15), str(upgrade_cost[h]))) def unload(): if es.exists('saycommand', '!buy'): es.unregsaycmd('!buy') if es.exists('clientcommand', '!buy'): es.unregclientcmd('!buy') if es.exists('clientcommand', '!sell'): es.unregclientcmd('!sell') if es.exists('saycommand', '!sell'): es.unregsaycmd('!sell') for a in ('Pistols', 'Items', 'Smgs', 'Shotguns', 'Rifles', 'Snipers', 'Special'): popuplib.delete(a) def mm_select(userid, choice, popupid): popuplib.send(choice, userid) es.cexec(userid, 'play buttons/button14') def p_select(userid, choice, poupid): # Pistols menu(userid).buy(choice, 1) def i_select(userid, choice, popupid): # Items menu(userid).buy(choice, 1) def smg_select(userid, choice, popupid): # Smgs menu(userid).buy(choice, 1) def s_select(userid, choice, popupid): # Shotguns menu(userid).buy(choice, 1) def r_select(userid, choice, popupid): # Rifles menu(userid).buy(choice, 1) def snip_select(userid, choice, popupid): # Snipers menu(userid).buy(choice, 1) def spec_select(userid, choice, popupid): # Specials menu(userid).buy(choice, 1) def weap_select(userid, choice, poupid): # Weapon menu popuplib.send(choice, userid) es.cexec(userid, 'play buttons/button14') def do_buy(): userid = es.getcmduserid() if es.getargc() == 1: popuplib.send('Bonbon Buy', userid) else: menu(userid).buy(es.getargv(1).lower(), 0) def upgrade_select(userid, choice, popupid): if playerlib.getPlayer(userid).get('cash') >= upgrade_cost[choice]: if not weapon_damage[choice]: es.msg('#multi', '#green[#lightgreenzbuy#green]: #lightgreen%s #greenhas upgraded #lightgreen%s#green! Everyone thank him and/or her'%(playerlib.getPlayer(userid).get('name'), choice)) global weapon_damage weapon_damage[choice] = damage[choice] playerlib.getPlayer(userid).set('cash', playerlib.getPlayer(userid).get('cash') - upgrade_cost[choice]) upgrademenu.setoption(choice, '%s -- Done'%choice) else: es.tell(userid, '#multi', '#green[#lightgreenzbuy#green]: Sorry, #lightgreen%s#green is already upgraded'%choice) else: es.tell(userid, '#multi', '#green[#lightgreenzbuy#green]: You do not have enough money to buy #lightgreen%s#green!'%upgrade_cost[choice]) def sell(): menu(es.getcmduserid()).sell() class menu: def __init__(self, userid): self.userid = userid def buy(self, weapon, from_menu): if self.return_class(weapon): weapon_class = self.return_class(weapon) if not playerlib.getPlayer(self.userid).get('isdead'): if es.getplayerprop(self.userid, 'CCSPlayer.m_bInBuyZone') or not zbuy_buy_only_in_buyzone: if playerlib.getPlayer(self.userid).get('cash') >= guns[weapon_class][weapon]['Cost']: if time_left_to_buy: if not playerlib.getPlayer(self.userid).get(self.weaponslot(weapon)) == '0' and not weapon in ['nvgs', 'hegrenade', 'flashbang', 'primary', 'secondary']: if from_menu: es.cexec(self.userid, 'play buttons/button14') for entity_index in es.createentitylist('weapon_%s'%playerlib.getPlayer(self.userid).get(self.weaponslot(weapon))): if int(es.getplayerhandle(self.userid)) == int(es.getindexprop(entity_index, "CBaseEntity.m_hOwnerEntity")): es.sexec(self.userid, 'use weapon_%s'%playerlib.getPlayer(self.userid).get(self.weaponslot(weapon))) es.server.queuecmd('es_xremove %s'%entity_index) break if not remove_weapons: gamethread.delayed(0.5, es.server.queuecmd, 'es_xgive %s weapon_%s'%(self.userid, playerlib.getPlayer(self.userid).get(self.weaponslot(weapon)))) es.tell(self.userid, '#multi', '#green[#lightgreenzbuy#green]: You have purchased a #lightgreen%s!'%weapon) playerlib.getPlayer(self.userid).set('cash', playerlib.getPlayer(self.userid).get('cash') - guns[weapon_class][weapon]['Cost']) if weapon == 'primary': playerlib.getPlayer(self.userid).set('ammo', [1, 2000]) playerlib.getPlayer(self.userid).set('clip', [1, playerlib.getPlayer(self.userid).get('clip', 1) * 2]) elif weapon == 'secondary': playerlib.getPlayer(self.userid).set('ammo', [2, 2000]) playerlib.getPlayer(self.userid).set('clip', [2, playerlib.getPlayer(self.userid).get('clip', 2) * 2]) else: gamethread.delayed(0.1, playerlib.getPlayer(self.userid).set, ('ammo', ['weapon_%s'%weapon, 1000])) es.server.queuecmd('es_xgive %s %s'%(self.userid, self.return_weapon(weapon))) if advanced_weapon_checker: gamethread.delayed(0.05, check_weapon, (self.userid, weapon, self.weaponslot(weapon))) if not weapon == 'nvgs': if not playerlib.getPlayer(self.userid).get('primary') == '0': es.server.queuecmd('playerset ammo %s 1 1000'%(self.userid)) gamethread.delayed(1, es.server.queuecmd, 'playerset ammo %s 1 1000'%self.userid) if not playerlib.getPlayer(self.userid).get('secondary') == '0': es.server.queuecmd('playerset ammo %s 2 1000'%(self.userid)) gamethread.delayed(1, es.server.queuecmd, 'playerset ammo %s 2 1000'%self.userid) else: es.cexec(self.userid, 'play buttons/weapon_cant_buy') es.centertell(self.userid, '%s seconds have passed, you cannot buy anything'%zbuy_buytime) else: es.cexec(self.userid, 'play buttons/weapon_cant_buy') es.tell(self.userid, '#multi', '#green[#lightgreenzbuy#green]: You need #lightgreen%s #green for a #lightgreen%s'%(guns[weapon_class][weapon]['Cost'], weapon)) else: es.cexec(self.userid, 'play buttons/weapon_cant_buy') es.tell(self.userid, '#multi', '#green[#lightgreenzbuy#green]: You must be in a buy zone to use this feature!') else: es.cexec(self.userid, 'play buttons/weapon_cant_buy') es.tell(self.userid, '#multi', '#green[#lightgreenzbuy#green]: You must be alive to use this feature!') elif weapon.lower() == 'steroids': if not playerlib.getPlayer(self.userid).get('isdead'): if playerlib.getPlayer(self.userid).get('cash') >= 10000: es.tell(self.userid, '#multi', '#green[#lightgreenzbuy#green]: Purchased #lightgreenSteroids!') playerlib.getPlayer(self.userid).set('speed', 1.3) playerlib.getPlayer(self.userid).set('health', playerlib.getPlayer(self.userid).get('health') + 50) playerlib.getPlayer(self.userid).set('cash', playerlib.getPlayer(self.userid).get('cash') - 10000) playerlib.getPlayer(self.userid).set('color', [255, 0, 0, 255]) usermsg.fade(self.userid, 0, 9000, 9000, 255, 0, 0, 70) gamethread.delayedname(35, 'roid_%s'%self.userid, unroid, self.userid) else: es.tell(self.userid, '#multi', '#green[#lightgreenzbuy#green]: You need #lightgreen10000 #greenfor #lightgreenSteroids!') es.cexec(self.userid, 'play buttons/weapon_cant_buy') else: es.tell(self.userid, '#multi', '#green[#lightgreenzbuy#green]: You must be alive to use this feature!') es.cexec(self.userid, 'play buttons/weapon_cant_buy') else: es.tell(self.userid, '#multi', '#green[#lightgreenzbuy#green]: Sorry, #lightgreen%s#green was not found in the menu!'%weapon) es.cexec(self.userid, 'play buttons/weapon_cant_buy') def return_class(self, weapon): for a in guns: if weapon in guns[a]: return a return None def return_weapon(self, weapon): if weapon in ['nvgs', 'assaultsuit']: return 'item_%s'%weapon return 'weapon_%s'%weapon def weaponslot(self, weapon): if weapon.lower() in ['glock', 'usp', 'p228', 'deagle', 'fiveseven', 'elite']: return 'secondary' return 'primary' def sell(self): if zbuy_enable_sell: if not playerlib.getPlayer(self.userid).get('isdead'): es.ServerVar('gun').set(0) es.server.queuecmd('est_getgun gun %s'%self.userid) gamethread.delayed(0.05, sell2, self.userid) def sell2(userid): if not str(es.ServerVar('gun')) == '0': if not playerlib.getPlayer(userid).get('isdead'): if menu(userid).return_class(str(es.ServerVar('gun')).replace('weapon_', '')) and not menu(userid).return_class(str(es.ServerVar('gun')).replace('weapon_', '')) == 'Items': playerlib.getPlayer(userid).set('cash', playerlib.getPlayer(userid).get('cash') + guns[menu(userid).return_class(str(es.ServerVar('gun')).replace('weapon_', ''))][str(es.ServerVar('gun')).replace('weapon_', '')]['Sellprice']) es.tell(userid, '#multi', '#green[#lightgreenzbuy#green]: You have sold your weapon for #lightgreen%s'%guns[menu(userid).return_class(str(es.ServerVar('gun')).replace('weapon_', ''))][str(es.ServerVar('gun')).replace('weapon_', '')]['Sellprice']) es.server.queuecmd('est_removeweapon %s %s'%(userid, es.ServerVar('gun'))) es.ServerVar('gun').set(0) def unroid(userid): if not playerlib.getPlayer(userid).get('isdead'): playerlib.getPlayer(userid).set('speed', 1) playerlib.getPlayer(userid).set('color', [255, 255, 255, 255]) es.tell(userid, '#multi', '#green[#lightgreenzbuy#green]: Steroids ended') def round_end(ev): for userid in playerlib.getUseridList('#all'): gamethread.cancelDelayed('roid_%s'%userid) gamethread.cancelDelayed('restrict_buy') def round_start(ev): global time_left_to_buy time_left_to_buy = 1 if zbuy_buytime: gamethread.delayedname(zbuy_buytime, 'restrict_buy', restrict_buys0rz) es.msg('#multi', '#green[#lightgreenzbuy#green]: Type #lightgreen!buy#green to access the buy menu or #lightgreen!buy #green for a shortcut') def restrict_buys0rz(): global time_left_to_buy time_left_to_buy = 0 def es_map_start(ev): global weapon_damage for a in weapon_damage: weapon_damage[a] = 0 def player_hurt(ev): if zbuy_enable_weapon_upgrades: try: if menu(ev['userid']).return_class(str(ev['weapon']).replace('weapon_', '')): multiplier = weapon_damage[guns[menu(ev['userid']).return_class(ev['weapon'].replace('weapon_', ''))][ev['weapon'].replace('weapon_', '')]['Ammo']] damage = int(ev['dmg_health']) * float(multiplier) if menu(ev['userid']).return_class(ev['weapon'].replace('weapon_', '')) and not ev['weapon'] == 'point_hurt': if float(multiplier) > 0: if stop_knockback_bug and not playerlib.getPlayer(ev['userid']).get('health') <= damage: playerlib.getPlayer(ev['userid']).set('health', playerlib.getPlayer(ev['userid']).get('health') - damage) else: es.server.queuecmd('damage %s %s 32 %s'%(ev['userid'], damage, ev['attacker'])) except: pass gamethread.delayed(0, load2)