''' Start with 70 DNA DNA Gain = .01 every damage dealt ''' import es, gamethread, os.path, cPickle, math, popuplib, weaponlib debug = 0 sporeinfo = es.AddonInfo() sporeinfo.name = 'Spore' sporeinfo.version = 'Beta' sporeinfo.url = 'http://addons.eventscripts.com/addons/view/spore' sporeinfo.basename = 'Spore' sporeinfo.author = 'Devin Pariseau' es.ServerVar('spore_version',sporeinfo.version,'Spore By: Devin Pariseau').makepublic() players = {} skills = { 'Sight':0, 'Hearing':0, 'Smell':0, 'Herbivore':0, 'Carnivore':0, 'Omnivore':0, 'Arm':0, 'Leg':0, 'Strike':0, 'Bite':0, 'Poison':0, 'Size':0, 'Natural Armor':0, 'Camouflage':0, 'Intelligent':0 } def deBug(message): if debug: es.msg('#multi', '#green', ':SPORE ERROR:', '#default', message) def sporeTell(userid, message): es.tell(userid, '#multi', '#green', ':SPORE:', '#default', message) def load(): global players str_path = es.getAddonPath('spore') + '/database.db' if os.path.isfile(str_path): file_users = open(str_path) players = cPickle.load(file_users) file_users.close() es.server.queuecmd('est_RegEventBlock player_hurt "es_xdoblock spore/prepHurt"') global main, skillmenu, skillmenu2, info for k,v in skills.iteritems(): global tempitem tempitem = k.lower() tempitem = popuplib.create(k.lower()) main = popuplib.create('main') main.addline(':*SPORE* Main Menu:') main.addline(':::::::::::::::::::') main.addline('-> 1. Evolve') main.addline('-> 2. My Stats') main.addline('-> 3. Help') main.addline('-> 9. Reset Feeding Skill') main.addline('0. Exit') main.submenu(1, 'skillmenu') main.submenu(3, 'info') main.menuselect = mainSelection info = popuplib.create('info') info.addline(':*SPORE* Help Menu:') info.addline(':::::::::::::::::::') info.addline('This mod allows you to gain skills') info.addline('and abilities to enhance the game') info.addline('of CS:S. As you deal damage, you') info.addline('will gain "DNA". You use DNA to') info.addline('purchase new abilities. You may only') info.addline('select "Sight" and "Hearing" for your') info.addline('first abilities. Type "menu" to reopen') info.addline('the menu.') skillmenu = popuplib.create('skillmenu') skillmenu.addline(':*SPORE* EVOL Menu:') skillmenu.addline(':::::::::::::::::::') skillmenu.addline('-> 1. Sight') skillmenu.addline('-> 2. Hearing') skillmenu.addline('-> 3. Smell') skillmenu.addline('-> 4. Herbivore') skillmenu.addline('-> 5. Carnivore') skillmenu.addline('-> 6. Omnivore') skillmenu.addline('-> 7. Arm') skillmenu.addline('-> 8. Leg') skillmenu.addline('-> 9. More Abilities') skillmenu.addline('0. Exit') skillmenu.submenu(9, 'skillmenu2') skillmenu.menuselect = skillmenuSelection skillmenu2 = popuplib.create('skillmenu2') skillmenu2.addline(':*SPORE* EVOL Menu:') skillmenu2.addline(':::::::::::::::::::') skillmenu2.addline('-> 1. Strike') skillmenu2.addline('-> 2. Bite') skillmenu2.addline('-> 3. Poison') skillmenu2.addline('-> 4. Size') skillmenu2.addline('-> 5. Natural Armor') skillmenu2.addline('-> 6. Intelligent') skillmenu2.addline('-> 7. Camouflage') skillmenu2.addline('-> 8. Previous Abilities') skillmenu2.addline('-> 9. Main Menu') skillmenu2.addline('0. Exit') skillmenu2.submenu(8, 'skillmenu') skillmenu2.submenu(9, 'main') skillmenu2.menuselect = skillmenu2Selection es.unregsaycmd('menu') es.regsaycmd('menu', 'spore/sendMain') es.unregclientcmd('resetfood') es.regclientcmd('resetfood', 'spore/resetfood') def sendMain(): global main main.send(es.getcmduserid()) def mainSelection(userid, choice, popupid): if choice == 2: tempstats = players[str(es.getplayersteamid(userid))] statmenu1 = popuplib.create('stat1menu') statmenu1.addline(':*SPORE* Stat Menu:') statmenu1.addline(':::::::::::::::::::') statmenu1.addline(':%s\'s Stats:'%es.getplayername(userid)) statmenu1.addline('DNA - %s'%str(float(tempstats['DNA'])).partition('.')[0]) statmenu1.addline('Sight - %s/1 * Hearing - %s/1 * Smell - %s/3'%(tempstats['Sight'], tempstats['Hearing'], tempstats['Smell'])) if tempstats['Herbivore']: statmenu1.addline('Herbivore - %s/3'%tempstats['Herbivore']) if tempstats['Carnivore']: statmenu1.addline('Carnivore - %s/3'%tempstats['Carnivore']) if tempstats['Omnivore']: statmenu1.addline('Omnivore - %s/3'%tempstats['Omnivore']) statmenu1.addline('Arm - %s/4 * Leg - %s/4'%(tempstats['Arm'], tempstats['Leg'])) statmenu1.addline('Strike - %s/4 * Bite - %s/4 * Poison - %s/4'%(tempstats['Strike'], tempstats['Bite'], tempstats['Poison'])) statmenu1.addline('Size - %s/4 * Natural Armor - %s/4'%(tempstats['Size'], tempstats['Natural Armor'])) statmenu1.addline('Intelligent - %s/4 * Camouflage - %s/4'%(tempstats['Intelligent'],tempstats['Camouflage'])) statmenu1.addline('-> 0. Exit') statmenu1.send(userid) if choice == 9: tempstats = players[str(es.getplayersteamid(userid))] if not tempstats['Herbivore'] and not tempstats['Carnivore'] and not tempstats['Omnivore']: sporeTell(userid, 'You don\'t need to worry about this at the momemnt') return 0 tempmenu = popuplib.create('tempmenu') tempmenu.addline(':*SPORE* Reset Feeding Type Menu:') tempmenu.addline('::::::::::::::::::::') tempmenu.addline('CAUTION: DOING THIS WILL RESET YOUR') tempmenu.addline('FEEDING TYPE. YOU WILL NOT BE') tempmenu.addline('REIMBURSED FOR THE LOST DNA!') tempmenu.addline('ENTER "resetfood" in console"') def skillmenuSelection(userid, choice, popupid): tempstats = players[str(es.getplayersteamid(userid))] tempmenu = popuplib.create('tempmenu') tempmenu.addline(':*SPORE* Info Menu:') tempmenu.addline(':::::::::::::::::::') if choice == 1: tempmenu.addline(':Sight:') tempmenu.addline('Allows you to see (No Blindness)') if not tempstats['Sight']: tempmenu.addline('0/1 - 40 DNA') tempmenu.addline('-> 1. Buy') tempmenu.menuselect = sightBuy if choice == 2: tempmenu.addline(':Hearing:') tempmenu.addline('Allows you to hear (No Deafness)') if not tempstats['Hearing']: tempmenu.addline('0/1 - 40 DNA') tempmenu.addline('-> 1. Buy') tempmenu.menuselect = hearingBuy if choice == 3: tempmenu.addline(':Smell:') tempmenu.addline('Allows you to smell enemies (See through walls)') tempmenu.addline('Level 0 - 0m') tempmenu.addline('Level 1 - 10m - 15 DNA') tempmenu.addline('Level 2 - 17m - 30 DNA') tempmenu.addline('Level 3 - 24m - 50 DNA') tempmenu.addline('%s/3'%tempstats['Smell']) if not tempstats['Smell'] > 2: tempmenu.addline('-> 1. Buy') tempmenu.menuselect = smellBuy if choice == 4: tempmenu.addline(':Herbivore:') tempmenu.addline('Allows you to regenerate') tempmenu.addline('ONLY ONE FEEDING TYPE MAY BE SELECTED') tempmenu.addline('Level 0 - 0hp/s - 10 DNA') tempmenu.addline('Level 1 - 1hp/4s - 25 DNA') tempmenu.addline('Level 2 - 2hp/2s - 40 DNA') tempmenu.addline('Level 3 - 3hp/1s') tempmenu.addline('%s/3'%tempstats['Herbivore']) if not tempstats['Herbivore'] > 2: tempmenu.addline('-> 1. Buy') tempmenu.menuselect = herbivoreBuy if choice == 5: tempmenu.addline(':Carnivore:') tempmenu.addline('Dealing damage heals you') tempmenu.addline('ONLY ONE FEEDING TYPE MAY BE SELECTED') tempmenu.addline('Level 0 - 0%') tempmenu.addline('Level 1 - 10% damage to health - 10 DNA') tempmenu.addline('Level 2 - 25% damage to health - 25 DNA') tempmenu.addline('Level 3 - 50% damage to health - 40 DNA') tempmenu.addline('%s/3'%tempstats['Carnivore']) if not tempstats['Carnivore'] > 2: tempmenu.addline('-> 1. Buy') tempmenu.menuselect = carnivoreBuy if choice == 6: tempmenu.addline(':Omnivore:') tempmenu.addline('Gain traits from both Herbivore and Carnivore') tempmenu.addline('ONLY ONE FEEDING TYPE MAY BE SELECTED') tempmenu.addline('Level 0 - Nothing') tempmenu.addline('Level 1 - 1hp/3s - 15 DNA') tempmenu.addline('Level 2 - 25% damage to health - 30 DNA') tempmenu.addline('Level 3 - 3hp/2s - 40 DNA') tempmenu.addline('%s/3'%tempstats['Carnivore']) if not tempstats['Carnivore'] > 2: tempmenu.addline('-> 1. Buy') tempmenu.menuselect = omnivoreBuy if choice == 7: tempmenu.addline(':Arm:') tempmenu.addline('Allows you to hold more weapons (increases slots)') tempmenu.addline('You may only hold 1 weapon at a time without arms') tempmenu.addline('You can drop the knife and grenade') tempmenu.addline('Smoke Grenades and the Bomb don\'t count') tempmenu.addline('Level 0 - 2 Weapons') tempmenu.addline('Level 1 - 3 Weapons - 5 DNA') tempmenu.addline('Level 2 - 4 Weapons - 10 DNA') tempmenu.addline('Level 3 - 5 Weapons - 15 DNA') tempmenu.addline('Level 4 - 6 Weapons - 20 DNA') tempmenu.addline('%s/4'%tempstats['Arm']) if not tempstats['Arm'] > 3: tempmenu.addline('-> 1. Buy') tempmenu.menuselect = armBuy if choice == 8: tempmenu.addline(':Leg:') tempmenu.addline('Allows you to move more quickly') tempmenu.addline('Level 0 - 90%') tempmenu.addline('Level 1 - 100% - 5 DNA') tempmenu.addline('Level 2 - 104% - 15 DNA') tempmenu.addline('Level 3 - 108% - 25 DNA') tempmenu.addline('Level 4 - 114% - 40 DNA') tempmenu.addline('%s/4'%tempstats['Leg']) if not tempstats['Leg'] > 3: tempmenu.addline('-> 1. Buy') tempmenu.menuselect = legBuy if choice != 9 and choice != 0: tempmenu.addline('-> 9. Main Menu') tempmenu.submenu(9, 'main') tempmenu.addline('0. Exit') tempmenu.send(userid) def skillmenu2Selection(userid, choice, popupid): tempstats = players[str(es.getplayersteamid(userid))] tempmenu = popuplib.create('tempmenu') tempmenu.addline(':*SPORE* Info Menu:') tempmenu.addline(':::::::::::::::::::') if choice == 1: tempmenu.addline(':Strike:') tempmenu.addline('Deals extra damage if you are at least') tempmenu.addline('20m away from your opponent') tempmenu.addline('Level 0 - 0%') tempmenu.addline('Level 1 - 10% - 5 DNA') tempmenu.addline('Level 2 - 15% - 15 DNA') tempmenu.addline('Level 3 - 20% Weapons - 25 DNA') tempmenu.addline('Level 4 - 25% Weapons - 40 DNA') tempmenu.addline('%s/4'%tempstats['Strike']) if not tempstats['Strike'] > 3: tempmenu.addline('-> 1. Buy') tempmenu.menuselect = strikeBuy if choice == 2: tempmenu.addline(':Bite:') tempmenu.addline('Deals extra damage if you are within') tempmenu.addline('20m of your opponent') tempmenu.addline('Level 0 - 0%') tempmenu.addline('Level 1 - 10% - 5 DNA') tempmenu.addline('Level 2 - 15% - 15 DNA') tempmenu.addline('Level 3 - 20% Weapons - 25 DNA') tempmenu.addline('Level 4 - 25% Weapons - 40 DNA') tempmenu.addline('%s/4'%tempstats['Bite']) if not tempstats['Bite'] > 3: tempmenu.addline('-> 1. Buy') tempmenu.menuselect = biteBuy if choice == 3: tempmenu.addline(':Poison:') tempmenu.addline('Deals damage after your initial attack') tempmenu.addline('Damage is a percent of damage initially dealt') tempmenu.addline('Level 0 - 0%') tempmenu.addline('Level 1 - 10%, 2 ticks over 4s - 5 DNA') tempmenu.addline('Level 2 - 15%, 2 ticks over 2s - 15 DNA') tempmenu.addline('Level 3 - 20%, 3 ticks over 3s - 25 DNA') tempmenu.addline('Level 4 - 25%, 4 ticks over 4s - 40 DNA') tempmenu.addline('%s/4'%tempstats['Poison']) if not tempstats['Poison'] > 3: tempmenu.addline('-> 1. Buy') tempmenu.menuselect = poisonBuy if choice == 4: tempmenu.addline(':Size:') tempmenu.addline('Increase in Size increases your health') tempmenu.addline('Does not stack - I.E. level 4 is 140hp') tempmenu.addline('Level 0 - +0hp') tempmenu.addline('Level 1 - +5hp - 5 DNA') tempmenu.addline('Level 2 - +10hp - 15 DNA') tempmenu.addline('Level 3 - +20hp - 25 DNA') tempmenu.addline('Level 4 - +40hp - 40 DNA') tempmenu.addline('%s/4'%tempstats['Size']) if not tempstats['Size'] > 3: tempmenu.addline('-> 1. Buy') tempmenu.menuselect = sizeBuy if choice == 5: tempmenu.addline(':Natural Armor:') tempmenu.addline('Reduces amount of damage taken') tempmenu.addline('Does not stack - I.E. level 4 is 40%') tempmenu.addline('Level 0 - 0%') tempmenu.addline('Level 1 - 10% - 5 DNA') tempmenu.addline('Level 2 - 15% - 10 DNA') tempmenu.addline('Level 3 - 25% - 15 DNA') tempmenu.addline('Level 4 - 40% - 20 DNA') tempmenu.addline('%s/4'%tempstats['Natural Armor']) if not tempstats['Natural Armor'] > 3: tempmenu.addline('-> 1. Buy') tempmenu.menuselect = armorBuy if choice == 6: tempmenu.addline(':Intelligent:') tempmenu.addline('Increases the rate at which you gain DNA') tempmenu.addline('Does not stack - I.E. level 4 is 40%') tempmenu.addline('Level 0 - 0%') tempmenu.addline('Level 1 - 10% - 10 DNA') tempmenu.addline('Level 2 - 25% - 25 DNA') tempmenu.addline('Level 3 - 33% - 40 DNA') tempmenu.addline('Level 4 - 40% - 60 DNA') tempmenu.addline('%s/4'%tempstats['Intelligent']) if not tempstats['Intelligent'] > 3: tempmenu.addline('-> 1. Buy') tempmenu.menuselect = intelligentBuy if choice == 7: tempmenu.addline(':Camouflage:') tempmenu.addline('You appear translucent') tempmenu.addline('Level 0 - 100% Visible') tempmenu.addline('Level 1 - 27% Visible - 10 DNA') tempmenu.addline('Level 2 - 20% Visible - 25 DNA') tempmenu.addline('Level 3 - 14% Visible - 40 DNA') tempmenu.addline('Level 4 - 8% Visible - 60 DNA') tempmenu.addline('%s/4'%tempstats['Camouflage']) if not tempstats['Camouflage'] > 3: tempmenu.addline('-> 1. Buy') tempmenu.menuselect = CamouflageBuy if choice != 9 and choice != 0: tempmenu.addline('-> 9. Main Menu') tempmenu.submenu(9, 'main') tempmenu.addline('0. Exit') tempmenu.send(userid) def sightBuy(userid, choice, popupid): if choice == 1: if not players[str(es.getplayersteamid(userid))]['Sight']: if players[str(es.getplayersteamid(userid))]['DNA'] >= 40: players[str(es.getplayersteamid(userid))]['Sight'] = 1 players[str(es.getplayersteamid(userid))]['DNA'] -= 40 sporeTell(userid, 'You just upgraded your sight for 40 DNA') else: sporeTell(userid, 'You don\'t have enough DNA') else: sporeTell(userid, 'You have already maxed this ability') def hearingBuy(userid, choice, popupid): if choice == 1: if not players[str(es.getplayersteamid(userid))]['Hearing']: if players[str(es.getplayersteamid(userid))]['DNA'] >= 40: players[str(es.getplayersteamid(userid))]['Hearing'] = 1 players[str(es.getplayersteamid(userid))]['DNA'] -= 40 sporeTell(userid, 'You just upgraded your Hearing for 40 DNA') else: sporeTell(userid, 'You don\'t have enough DNA') else: sporeTell(userid, 'You have already maxed this ability') def smellBuy(userid, choice, popupid): if choice == 1: if not players[str(es.getplayersteamid(userid))]['Smell']: cost = 15 if players[str(es.getplayersteamid(userid))]['Smell'] == 1: cost = 30 if players[str(es.getplayersteamid(userid))]['Smell'] == 2: cost = 50 if players[str(es.getplayersteamid(userid))]['Smell'] == 3: sporeTell(userid, 'You have already maxed this ability') return 0 if players[str(es.getplayersteamid(userid))]['DNA'] >= cost: players[str(es.getplayersteamid(userid))]['Smell'] += 1 players[str(es.getplayersteamid(userid))]['DNA'] -= cost sporeTell(userid, 'You have upgraded your Smell') else: sporeTell(userid, 'You don\'t have enough DNA for this ability') def herbivoreBuy(userid, choice, popupid): if choice == 1: if not players[str(es.getplayersteamid(userid))]['Carnivore'] and not players[str(es.getplayersteamid(userid))]['Omnivore']: if not players[str(es.getplayersteamid(userid))]['Herbivore']: cost = 10 if players[str(es.getplayersteamid(userid))]['Herbivore'] == 1: cost = 25 if players[str(es.getplayersteamid(userid))]['Herbivore'] == 2: cost = 40 if players[str(es.getplayersteamid(userid))]['Herbivore'] == 3: sporeTell(userid, 'You have already maxed this ability') return 0 if players[str(es.getplayersteamid(userid))]['DNA'] >= cost: players[str(es.getplayersteamid(userid))]['Herbivore'] += 1 players[str(es.getplayersteamid(userid))]['DNA'] -= cost sporeTell(userid, 'You have upgraded your Herbivore') else: sporeTell(userid, 'You don\'t have enough DNA for this ability') else: sporeTell(userid, 'You already selected a feeding type') def carnivoreBuy(userid, choice, popupid): if choice == 1: if not players[str(es.getplayersteamid(userid))]['Herbivore'] and not players[str(es.getplayersteamid(userid))]['Omnivore']: if not players[str(es.getplayersteamid(userid))]['Carnivore']: cost = 10 if players[str(es.getplayersteamid(userid))]['Carnivore'] == 1: cost = 25 if players[str(es.getplayersteamid(userid))]['Carnivore'] == 2: cost = 40 if players[str(es.getplayersteamid(userid))]['Carnivore'] == 3: sporeTell(userid, 'You have already maxed this ability') return 0 if players[str(es.getplayersteamid(userid))]['DNA'] >= cost: players[str(es.getplayersteamid(userid))]['Carnivore'] += 1 players[str(es.getplayersteamid(userid))]['DNA'] -= cost sporeTell(userid, 'You have upgraded your Carnivore') else: sporeTell(userid, 'You don\'t have enough DNA for this ability') else: sporeTell(userid, 'You already selected a feeding type') def omnivoreBuy(userid, choice, popupid): if choice == 1: if not players[str(es.getplayersteamid(userid))]['Carnivore'] and not players[str(es.getplayersteamid(userid))]['Herbivore']: if not players[str(es.getplayersteamid(userid))]['Omnivore']: cost = 15 if players[str(es.getplayersteamid(userid))]['Omnivore'] == 1: cost = 30 if players[str(es.getplayersteamid(userid))]['Omnivore'] == 2: cost = 50 if players[str(es.getplayersteamid(userid))]['Omnivore'] == 3: sporeTell(userid, 'You have already maxed this ability') return 0 if players[str(es.getplayersteamid(userid))]['DNA'] >= cost: players[str(es.getplayersteamid(userid))]['Omnivore'] += 1 players[str(es.getplayersteamid(userid))]['DNA'] -= cost sporeTell(userid, 'You have upgraded your Omnivore') else: sporeTell(userid, 'You don\'t have enough DNA for this ability') else: sporeTell(userid, 'You already selected a feeding type') def armBuy(userid, choice, popupid): if choice == 1: if not players[str(es.getplayersteamid(userid))]['Arm']: cost = 5 if players[str(es.getplayersteamid(userid))]['Arm'] == 1: cost = 10 if players[str(es.getplayersteamid(userid))]['Arm'] == 2: cost = 15 if players[str(es.getplayersteamid(userid))]['Arm'] == 3: cost = 20 if players[str(es.getplayersteamid(userid))]['Arm'] == 4: sporeTell(userid, 'You have already maxed this ability') return 0 if players[str(es.getplayersteamid(userid))]['DNA'] >= cost: players[str(es.getplayersteamid(userid))]['Arm'] += 1 players[str(es.getplayersteamid(userid))]['DNA'] -= cost sporeTell(userid, 'You have upgraded your Arms') else: sporeTell(userid, 'You don\'t have enough DNA for this ability') def legBuy(userid, choice, popupid): if choice == 1: if not players[str(es.getplayersteamid(userid))]['Leg']: cost = 5 if players[str(es.getplayersteamid(userid))]['Leg'] == 1: cost = 15 if players[str(es.getplayersteamid(userid))]['Leg'] == 2: cost = 25 if players[str(es.getplayersteamid(userid))]['Leg'] == 3: cost = 40 if players[str(es.getplayersteamid(userid))]['Leg'] == 4: sporeTell(userid, 'You have already maxed this ability') return 0 if players[str(es.getplayersteamid(userid))]['DNA'] >= cost: players[str(es.getplayersteamid(userid))]['Leg'] += 1 players[str(es.getplayersteamid(userid))]['DNA'] -= cost sporeTell(userid, 'You have upgraded your Legs') else: sporeTell(userid, 'You don\'t have enough DNA for this ability') def strikeBuy(userid, choice, popupid): if choice == 1: if not players[str(es.getplayersteamid(userid))]['Strike']: cost = 5 if players[str(es.getplayersteamid(userid))]['Strike'] == 1: cost = 15 if players[str(es.getplayersteamid(userid))]['Strike'] == 2: cost = 25 if players[str(es.getplayersteamid(userid))]['Strike'] == 3: cost = 40 if players[str(es.getplayersteamid(userid))]['Strike'] == 4: sporeTell(userid, 'You have already maxed this ability') return 0 if players[str(es.getplayersteamid(userid))]['DNA'] >= cost: players[str(es.getplayersteamid(userid))]['Strike'] += 1 players[str(es.getplayersteamid(userid))]['DNA'] -= cost sporeTell(userid, 'You have upgraded your Strike') else: sporeTell(userid, 'You don\'t have enough DNA for this ability') def biteBuy(userid, choice, popupid): if choice == 1: if not players[str(es.getplayersteamid(userid))]['Bite']: cost = 5 if players[str(es.getplayersteamid(userid))]['Bite'] == 1: cost = 15 if players[str(es.getplayersteamid(userid))]['Bite'] == 2: cost = 25 if players[str(es.getplayersteamid(userid))]['Bite'] == 3: cost = 40 if players[str(es.getplayersteamid(userid))]['Bite'] == 4: sporeTell(userid, 'You have already maxed this ability') return 0 if players[str(es.getplayersteamid(userid))]['DNA'] >= cost: players[str(es.getplayersteamid(userid))]['Bite'] += 1 players[str(es.getplayersteamid(userid))]['DNA'] -= cost sporeTell(userid, 'You have upgraded your Bite') else: sporeTell(userid, 'You don\'t have enough DNA for this ability') def poisonBuy(userid, choice, popupid): if choice == 1: if not players[str(es.getplayersteamid(userid))]['Poison']: cost = 5 if players[str(es.getplayersteamid(userid))]['Poison'] == 1: cost = 15 if players[str(es.getplayersteamid(userid))]['Poison'] == 2: cost = 25 if players[str(es.getplayersteamid(userid))]['Poison'] == 3: cost = 40 if players[str(es.getplayersteamid(userid))]['Poison'] == 4: sporeTell(userid, 'You have already maxed this ability') return 0 if players[str(es.getplayersteamid(userid))]['DNA'] >= cost: players[str(es.getplayersteamid(userid))]['Poison'] += 1 players[str(es.getplayersteamid(userid))]['DNA'] -= cost sporeTell(userid, 'You have upgraded your Poison') else: sporeTell(userid, 'You don\'t have enough DNA for this ability') def armorBuy(userid, choice, popupid): if choice == 1: if not players[str(es.getplayersteamid(userid))]['Natural Armor']: cost = 5 if players[str(es.getplayersteamid(userid))]['Natural Armor'] == 1: cost = 10 if players[str(es.getplayersteamid(userid))]['Natural Armor'] == 2: cost = 15 if players[str(es.getplayersteamid(userid))]['Natural Armor'] == 3: cost = 20 if players[str(es.getplayersteamid(userid))]['Natural Armor'] == 4: sporeTell(userid, 'You have already maxed this ability') return 0 if players[str(es.getplayersteamid(userid))]['DNA'] >= cost: players[str(es.getplayersteamid(userid))]['Natural Armor'] += 1 players[str(es.getplayersteamid(userid))]['DNA'] -= cost sporeTell(userid, 'You have upgraded your Natural Armor') else: sporeTell(userid, 'You don\'t have enough DNA for this ability') def sizeBuy(userid, choice, popupid): if choice == 1: if not players[str(es.getplayersteamid(userid))]['Size']: cost = 5 if players[str(es.getplayersteamid(userid))]['Size'] == 1: cost = 15 if players[str(es.getplayersteamid(userid))]['Size'] == 2: cost = 25 if players[str(es.getplayersteamid(userid))]['Size'] == 3: cost = 40 if players[str(es.getplayersteamid(userid))]['Size'] == 4: sporeTell(userid, 'You have already maxed this ability') return 0 if players[str(es.getplayersteamid(userid))]['DNA'] >= cost: players[str(es.getplayersteamid(userid))]['Size'] += 1 players[str(es.getplayersteamid(userid))]['DNA'] -= cost sporeTell(userid, 'You have upgraded your Size') else: sporeTell(userid, 'You don\'t have enough DNA for this ability') def intelligentBuy(userid, choice, popupid): if choice == 1: if not players[str(es.getplayersteamid(userid))]['Intelligent']: cost = 10 if players[str(es.getplayersteamid(userid))]['Intelligent'] == 1: cost = 25 if players[str(es.getplayersteamid(userid))]['Intelligent'] == 2: cost = 40 if players[str(es.getplayersteamid(userid))]['Intelligent'] == 3: cost = 60 if players[str(es.getplayersteamid(userid))]['Intelligent'] == 4: sporeTell(userid, 'You have already maxed this ability') return 0 if players[str(es.getplayersteamid(userid))]['DNA'] >= cost: players[str(es.getplayersteamid(userid))]['Intelligent'] += 1 players[str(es.getplayersteamid(userid))]['DNA'] -= cost sporeTell(userid, 'You have upgraded your Intelligence') else: sporeTell(userid, 'You don\'t have enough DNA for this ability') def CamouflageBuy(userid, choice, popupid): if choice == 1: if not players[str(es.getplayersteamid(userid))]['Camouflage']: cost = 10 if players[str(es.getplayersteamid(userid))]['Camouflage'] == 1: cost = 25 if players[str(es.getplayersteamid(userid))]['Camouflage'] == 2: cost = 40 if players[str(es.getplayersteamid(userid))]['Camouflage'] == 3: cost = 60 if players[str(es.getplayersteamid(userid))]['Camouflage'] == 4: sporeTell(userid, 'You have already maxed this ability') return 0 if players[str(es.getplayersteamid(userid))]['DNA'] >= cost: players[str(es.getplayersteamid(userid))]['Camouflage'] += 1 players[str(es.getplayersteamid(userid))]['DNA'] -= cost sporeTell(userid, 'You have upgraded your Camouflage') else: sporeTell(userid, 'You don\'t have enough DNA for this ability') def round_start(ev): gamethread.cancelDelayed('spore_loops') smellLoop() blindLoop() regenHerbivoreOne() regenHerbivoreTwo() regenHerbivoreThree() regenOmnivoreOne() regenOmnivoreThree() es.server.queuecmd('est_allowadvanceddrop 1') def item_pickup(ev): handle = es.getplayerhandle(ev['userid']) x = 0 for weapon in weaponlib.getWeaponList('#all'): if weapon != 'weapon_c4' and weapon != 'weapon_smokegrenade': for index in weapon.indexlist: if es.getindexprop(index, 'CBaseEntity.m_hOwnerEntity') == handle: x += 1 break if x > players[str(es.getplayersteamid(ev['userid']))]['Arm'] + 2: es.server.queuecmd('est_dropweapon %s %s'%(ev['userid'], ev['item'])) sporeTell(ev['userid'], 'You don\'t have enough arms to carry that weapon!') def player_spawn(ev): global players userid = int(ev['userid']) try: blank = players[str(es.getplayersteamid(userid))] deBug('Players stats') except KeyError: deBug('Player Not Found: %s (Userid %s)'%(es.getplayername(userid), userid)) deBug('Adding Player') players[str(es.getplayersteamid(userid))] = skills players[str(es.getplayersteamid(userid))]['DNA'] = 100 sporeTell(userid, 'Welcome to Spore! I suggest you take the Sight and Hearing abilities. Open the menu by typing "menu"') if not players[str(es.getplayersteamid(userid))]['Sight']: sporeTell(userid, 'You are partially blind because you did not evolve sight') if not players[str(es.getplayersteamid(userid))]['Hearing']: sporeTell(userid, 'You are partially deaf because you did not evolve hearing') if not players[str(es.getplayersteamid(userid))]['Leg']: sporeTell(userid, 'You are partially slow because you did not evolve legs') if not players[str(es.getplayersteamid(userid))]['Arm']: sporeTell(userid, 'You can\'t hold alot of weapons because you did not evolve arms') sporeTell(userid, 'You have %s DNA to evolve with'%players[str(es.getplayersteamid(userid))]['DNA']) if not players[str(es.getplayersteamid(userid))]['Hearing']: es.server.queuecmd('est_deafen %s %s 75 0 0'%(userid, int(es.ServerVar('mp_roundtime')) * 120)) if not players[str(es.getplayersteamid(userid))]['Leg']: speed = .9 else: if players[str(es.getplayersteamid(userid))]['Leg'] == 1: speed = 1 if players[str(es.getplayersteamid(userid))]['Leg'] == 2: speed = 1.04 if players[str(es.getplayersteamid(userid))]['Leg'] == 3: speed = 1.08 if players[str(es.getplayersteamid(userid))]['Leg'] == 4: speed = 1.14 es.server.queuecmd('est_speed %s %s'%(userid, speed)) if players[str(es.getplayersteamid(userid))]['Camouflage']: level = players[str(es.getplayersteamid(userid))]['Camouflage'] if level == 1: color = 70 if level == 2: color = 50 if level == 3: color = 35 if level == 4: color = 20 es.server.queuecmd('est_setplayercolor %s 255 255 255 %s'%(userid, color)) if players[str(es.getplayersteamid(userid))]['Size'] == 1: es.setplayerprop(userid, "CBasePlayer.m_iHealth", 105) if players[str(es.getplayersteamid(userid))]['Size'] == 2: es.setplayerprop(userid, "CBasePlayer.m_iHealth", 110) if players[str(es.getplayersteamid(userid))]['Size'] == 3: es.setplayerprop(userid, "CBasePlayer.m_iHealth", 120) if players[str(es.getplayersteamid(userid))]['Size'] == 4: es.setplayerprop(userid, "CBasePlayer.m_iHealth", 140) deBug('Test') players[str(es.getplayersteamid(userid))]['DNA Gained'] = 0 def ReturnEV(variable): """ A little wrapper to set the Event Info in a pre event to return the value """ es.ServerVar('wcs_temp').set(0) es.server.cmd('est_geteventinfo wcs_temp %s'%variable) try: return int(es.ServerVar('wcs_temp')) except: return str(es.ServerVar('wcs_temp')) def SetEV(variable, value): """ A little wrapper to set the Event Info in a pre event to hold the value """ es.server.cmd('est_seteventinfo %s %s'%(variable, value)) def prepHurt(): userid = ReturnEV('userid') attacker = ReturnEV('attacker') if attacker and attacker != '0': damage = ReturnEV('dmg_health') health = es.getplayerprop(userid, 'CBasePlayer.m_iHealth') if players[str(es.getplayersteamid(userid))]['Natural Armor']: deBug('Messing with health in prepHurt') if level == 1: damage_reduction = damage * .1 if level == 2: damage_reduction = damage * .15 if level == 3: damage_reduction = damage * .2 if level == 4: damage_reduction = damage * .25 es.setplayerprop(userid, "CBasePlayer.m_iHealth", health + damage_reduction) def player_hurt(ev): global players attacker = ev['attacker'] userid = ev['userid'] dmg = int(ev['dmg_health']) if es.getplayerteam(attacker) != es.getplayerteam(userid): dnaGained = dmg * .005 if players[str(es.getplayersteamid(attacker))]['Intelligent']: level = players[str(es.getplayersteamid(attacker))]['Intelligent'] if level == 1: dnaGained *= .1 if level == 2: dnaGained *= .25 if level == 3: dnaGained *= .33 if level == 4: dnaGained *= .4 players[str(es.getplayersteamid(attacker))]['DNA'] += dnaGained players[str(es.getplayersteamid(attacker))]['DNA Gained'] += dnaGained if players[str(es.getplayersteamid(attacker))]['Bite']: x,y,z = es.getplayerlocation(userid) x1, y1, z1 = es.getplayerlocation(attacker) if math.sqrt(math.pow((x-x1), 2) + math.pow((y-y1), 2) + math.pow((z-z1), 2)) < 600: level = players[str(es.getplayersteamid(attacker))]['Bite'] if level == 1: damage = dmg * .1 if level == 2: damage = dmg * .15 if level == 3: damage = dmg * .2 if level == 4: damage = dmg * .25 deBug('Messing with health with Bite') Damage(userid, attacker, damage) if players[str(es.getplayersteamid(attacker))]['Strike']: x,y,z = es.getplayerlocation(userid) x1, y1, z1 = es.getplayerlocation(attacker) if math.sqrt(math.pow((x-x1), 2) + math.pow((y-y1), 2) + math.pow((z-z1), 2)) >= 600: level = players[str(es.getplayersteamid(attacker))]['Strike'] if level == 1: damage = dmg * .1 if level == 2: damage = dmg * .15 if level == 3: damage = dmg * .2 if level == 4: damage = dmg * .25 Damage(userid, attacker, damage) deBug('Messing with health in Strike') if players[str(es.getplayersteamid(attacker))]['Poison']: if players[str(es.getplayersteamid(attacker))]['Poison'] == 1: gamethread.delayedname(2, 'spore_loops', Damage, (userid, attacker, dmg * .1)) gamethread.delayedname(4, 'spore_loops', Damage, (userid, attacker, dmg * .1)) if players[str(es.getplayersteamid(attacker))]['Poison'] == 2: gamethread.delayedname(1, 'spore_loops', Damage, (userid, attacker, dmg * .15)) gamethread.delayedname(2, 'spore_loops', Damage, (userid, attacker, dmg * .15)) if players[str(es.getplayersteamid(attacker))]['Poison'] == 3: gamethread.delayedname(1, 'spore_loops', Damage, (userid, attacker, dmg * .20)) gamethread.delayedname(2, 'spore_loops', Damage, (userid, attacker, dmg * .20)) gamethread.delayedname(3, 'spore_loops', Damage, (userid, attacker, dmg * .20)) if players[str(es.getplayersteamid(attacker))]['Poison'] == 4: gamethread.delayedname(1, 'spore_loops', Damage, (userid, attacker, dmg * .25)) gamethread.delayedname(2, 'spore_loops', Damage, (userid, attacker, dmg * .25)) gamethread.delayedname(3, 'spore_loops', Damage, (userid, attacker, dmg * .25)) gamethread.delayedname(4, 'spore_loops', Damage, (userid, attacker, dmg * .25)) if players[str(es.getplayersteamid(attacker))]['Carnivore']: if not players[str(es.getplayersteamid(attacker))]['Size']: maxhealth = 100 else: level = players[str(es.getplayersteamid(attacker))]['Size'] if level == 1: maxhealth = 105 if level == 2: maxhealth = 110 if level == 3: maxhealth = 120 if level == 4: maxhealth = 140 level = players[str(es.getplayersteamid(attacker))]['Carnivore'] if level == 1: heal = dmg * .1 if level == 2: heal = dmg * .25 if level == 3: heal = dmg * .5 if int(es.getplayerprop(attacker, "CBasePlayer.m_iHealth")) < maxhealth: es.setplayerprop(attacker, "CBasePlayer.m_iHealth", int(es.getplayerprop(attacker, "CBasePlayer.m_iHealth")) + heal) if int(es.getplayerprop(attacker, "CBasePlayer.m_iHealth")) > maxhealth: es.setplayerprop(attacker, "CBasePlayer.m_iHealth", maxhealth) if players[str(es.getplayersteamid(attacker))]['Omnivore'] >= 2: if not players[str(es.getplayersteamid(attacker))]['Size']: maxhealth = 100 else: level = players[str(es.getplayersteamid(attacker))]['Size'] if level == 1: maxhealth = 105 if level == 2: maxhealth = 110 if level == 3: maxhealth = 120 if level == 4: maxhealth = 140 heal = dmg * .25 if int(es.getplayerprop(attacker, "CBasePlayer.m_iHealth")) < maxhealth: es.setplayerprop(attacker, "CBasePlayer.m_iHealth", int(es.getplayerprop(attacker, "CBasePlayer.m_iHealth")) + heal) if int(es.getplayerprop(attacker, "CBasePlayer.m_iHealth")) > maxhealth: es.setplayerprop(attacker, "CBasePlayer.m_iHealth", maxhealth) def Damage(userid, attacker, damage): if es.getplayerprop(userid, 'CBasePlayer.m_iHealth') <= damage: es.server.queuecmd('damage %s %s 32 %s'%(userid, damage, attacker)) else: es.setplayerprop(userid, 'CBasePlayer.m_iHealth', es.getplayerprop(userid, 'CBasePlayer.m_iHealth')-damage) def round_end(ev): gamethread.cancelDelayed('spore_loops') str_path = open(es.getAddonPath('spore') + '/database.db', 'w') cPickle.dump(players, str_path) str_path.close() for userid in es.getUseridList(): sporeTell(userid, 'You gained %s DNA this round'%players[str(es.getplayersteamid(userid))]['DNA Gained']) def blindLoop(): for userid in es.getUseridList(): if not players[str(es.getplayersteamid(userid))]['Sight']: es.server.queuecmd('est_fade %s 0 1 1 0 0 0 225'%userid) gamethread.delayedname(.5, 'spore_loops', blindLoop) def smellLoop(): see_thru_walls_sprite = "effects/strider_bulge_dudv_dx60.vmt" for userid in es.getUseridList(): if not es.getplayerprop(userid, 'CBasePlayer.pl.deadflag'): if players[str(es.getplayersteamid(userid))]['Smell']: smellLevel = players[str(es.getplayersteamid(userid))]['Smell'] if smellLevel == 1: allowed = 300 if smellLevel == 2: allowed = 500 if smellLevel == 3: allowed = 700 x,y,z = es.getplayerlocation(userid) for id in filter(lambda x:not x == userid and not es.getplayerprop(x, 'CBasePlayer.pl.deadflag'), es.getUseridList()): x1, y1, z1 = es.getplayerlocation(id) distance = math.sqrt(math.pow((x-x1), 2) + math.pow((y-y1), 2) + math.pow((z-z1), 2)) if distance <= allowed and distance >= 20: alpha = 255 es.server.queuecmd('est_effect %s %s %s %s %s %s %s %s %s %s'%(11, userid, 0,see_thru_walls_sprite, x1, y1, z1 + 20, .1, 1, int(alpha))) gamethread.delayedname(.1, 'spore_loops', smellLoop) def regenHerbivoreOne(): for userid in es.getUseridList(): if not es.getplayerprop(userid, 'CBasePlayer.pl.deadflag'): if players[str(es.getplayersteamid(userid))]['Herbivore']: if players[str(es.getplayersteamid(userid))]['Herbivore'] == 1: if not players[str(es.getplayersteamid(userid))]['Size']: maxhealth = 100 else: if players[str(es.getplayersteamid(userid))]['Size'] == 1: maxhealth = 105 if players[str(es.getplayersteamid(userid))]['Size'] == 2: maxhealth = 110 if players[str(es.getplayersteamid(userid))]['Size'] == 3: maxhealth = 120 if players[str(es.getplayersteamid(userid))]['Size'] == 4: maxhealth = 140 if int(es.getplayerprop(userid, "CBasePlayer.m_iHealth")) < maxhealth: es.setplayerprop(userid, "CBasePlayer.m_iHealth", int(es.getplayerprop(userid, "CBasePlayer.m_iHealth")) + 1) gamethread.delayedname(4, 'spore_loops', regenHerbivoreOne) def regenHerbivoreTwo(): for userid in es.getUseridList(): if not es.getplayerprop(userid, 'CBasePlayer.pl.deadflag'): if players[str(es.getplayersteamid(userid))]['Herbivore']: if players[str(es.getplayersteamid(userid))]['Herbivore'] == 2: if not players[str(es.getplayersteamid(userid))]['Size']: maxhealth = 100 else: if players[str(es.getplayersteamid(userid))]['Size'] == 1: maxhealth = 105 if players[str(es.getplayersteamid(userid))]['Size'] == 2: maxhealth = 110 if players[str(es.getplayersteamid(userid))]['Size'] == 3: maxhealth = 120 if players[str(es.getplayersteamid(userid))]['Size'] == 4: maxhealth = 140 if int(es.getplayerprop(userid, "CBasePlayer.m_iHealth")) < maxhealth: es.setplayerprop(userid, "CBasePlayer.m_iHealth", int(es.getplayerprop(userid, "CBasePlayer.m_iHealth")) + 2) gamethread.delayedname(4, 'spore_loops', regenHerbivoreTwo) def regenHerbivoreThree(): for userid in es.getUseridList(): if not es.getplayerprop(userid, 'CBasePlayer.pl.deadflag'): if players[str(es.getplayersteamid(userid))]['Herbivore']: if players[str(es.getplayersteamid(userid))]['Herbivore'] == 3: if not players[str(es.getplayersteamid(userid))]['Size']: maxhealth = 100 else: if players[str(es.getplayersteamid(userid))]['Size'] == 1: maxhealth = 105 if players[str(es.getplayersteamid(userid))]['Size'] == 2: maxhealth = 110 if players[str(es.getplayersteamid(userid))]['Size'] == 3: maxhealth = 120 if players[str(es.getplayersteamid(userid))]['Size'] == 4: maxhealth = 140 if int(es.getplayerprop(userid, "CBasePlayer.m_iHealth")) < maxhealth: es.setplayerprop(userid, "CBasePlayer.m_iHealth", int(es.getplayerprop(userid, "CBasePlayer.m_iHealth")) + 3) if int(es.getplayerprop(userid, "CBasePlayer.m_iHealth")) > maxhealth: es.setplayerprop(userid, "CBasePlayer.m_iHealth", maxhealth) gamethread.delayedname(1, 'spore_loops', regenHerbivoreThree) def regenOmnivoreOne(): for userid in es.getUseridList(): if not es.getplayerprop(userid, 'CBasePlayer.pl.deadflag'): if players[str(es.getplayersteamid(userid))]['Omnivore']: if players[str(es.getplayersteamid(userid))]['Omnivore'] == 1: if not players[str(es.getplayersteamid(userid))]['Size']: maxhealth = 100 else: if players[str(es.getplayersteamid(userid))]['Size'] == 1: maxhealth = 105 if players[str(es.getplayersteamid(userid))]['Size'] == 2: maxhealth = 110 if players[str(es.getplayersteamid(userid))]['Size'] == 3: maxhealth = 120 if players[str(es.getplayersteamid(userid))]['Size'] == 4: maxhealth = 140 if int(es.getplayerprop(userid, "CBasePlayer.m_iHealth")) < maxhealth: es.setplayerprop(userid, "CBasePlayer.m_iHealth", int(es.getplayerprop(userid, "CBasePlayer.m_iHealth")) + 1) if int(es.getplayerprop(userid, "CBasePlayer.m_iHealth")) > maxhealth: es.setplayerprop(userid, "CBasePlayer.m_iHealth", maxhealth) gamethread.delayedname(3, 'spore_loops', regenOmnivoreOne) def regenOmnivoreThree(): for userid in es.getUseridList(): if not es.getplayerprop(userid, 'CBasePlayer.pl.deadflag'): if players[str(es.getplayersteamid(userid))]['Omnivore']: if players[str(es.getplayersteamid(userid))]['Omnivore'] == 3: if not players[str(es.getplayersteamid(userid))]['Size']: maxhealth = 100 else: if players[str(es.getplayersteamid(userid))]['Size'] == 1: maxhealth = 105 if players[str(es.getplayersteamid(userid))]['Size'] == 2: maxhealth = 110 if players[str(es.getplayersteamid(userid))]['Size'] == 3: maxhealth = 120 if players[str(es.getplayersteamid(userid))]['Size'] == 4: maxhealth = 140 if int(es.getplayerprop(userid, "CBasePlayer.m_iHealth")) < maxhealth: es.setplayerprop(userid, "CBasePlayer.m_iHealth", int(es.getplayerprop(userid, "CBasePlayer.m_iHealth")) + 3) if int(es.getplayerprop(userid, "CBasePlayer.m_iHealth")) > maxhealth: es.setplayerprop(userid, "CBasePlayer.m_iHealth", maxhealth) gamethread.delayedname(2, 'spore_loops', regenOmnivoreThree) def resetfood(): global players steam = es.getplayersteamid(es.getcmduserid()) players[steam]['Carnivore'] = 0 players[steam]['Herbivore'] = 0 players[steam]['Omnivore'] = 0 sporeTell(es.getcmduserid(), 'Your feeding type was reset') def unload(): str_path = open(es.getAddonPath('spore') + '/database.db', 'w') cPickle.dump(players, str_path) str_path.close()