import es, random, gamethread, cPickle, os, popuplib, playerlib, cfglib, math, effectlib info = es.AddonInfo() info.name = Zelda RPG info.version = '1.0' info.basename = 'zelda_rpg' info.url = 'http://addons.eventscripts.com/addons/view/' + info.basename info.author = 'Spoonman184' es.ServerVar('zelda_version',info.version,'Zelda RPG By: Devin Pariseau').makepublic() config = cfglib.AddonCFG(es.getAddonPath("zelda_rpg") + "/zelda_rpg.cfg") config.text("******************************") config.text(" Zelda SETTINGS") config.text("*****************************") config.text("XP is used to determine whether a player is eligible for that dungeon's item yet") config.text("A player has a chance to get an item at each of these events") config.text("*****************************") killxp = config.cvar("killxp", 20, "Amount of XP Gained for each kill") roundxp = config.cvar("roundxp", 30, "Amount of XP Gained for winning the round") bombplantedxp = config.cvar("bombplantedxp", 10, "Amount of xp Gained for planting the bomb") bombexplodedxp = config.cvar("bombexplodedxp", 20, "Amount of xp Gained for the bomb exploding") bombdefusedxp = config.cvar("bombdefusedxp", 15, "Amount of xp Gained for defusing the bomb") hostagerescuedxp = config.cvar("hostagerescuedxp", 4,"Amount of xp Gained for rescuing a hostage") hostagerescuedallxp = config.cvar("hostagerescuedallxp", 14, "Amount of xp Gained for rescuing all hostages") config.write() dungeons = ['Great Deku Tree', 'Death Mountain', 'Jabu Jabu', 'Forest Temple', 'Fire Temple', 'Water Temple', 'Shadow Temple', 'Spirit Temple'] item_list = ["Kokiri Sword & Deku Shield", "Deku Stick", "Deku Nut", "Sling Shot", "Bomb Bag", "Boomerang", "Ocarina", "Din's Fire", "Farore's Wind", "Nayru's Love", "Master Sword & Hyrulian Shield", "Bow & Quiver", "Megaton Hammer", "Hookshot", "Lens Of Truth", "Mirror Shield", "Fire Arrow", "Ice Arrow", "Light Arrow", #"Giant's Knife", "Biggoron's Sword" ] adult_items = ["Bow & Quiver","Megaton Hammer","Hookshot","Mirror Shield","Fire Arrow","Ice Arrow","Light Arrow", "Biggoron's Sword"] child_items = ["Deku Stick","Sling Shot","Boomerang","Deku Nut","Biggoron's Sword"] ammo_items = ["Bow & Quiver", "Fire Arrow", "Ice Arrow", "Light Arrow", "Sling Shot", "Deku Stick", "Deku Nut", "Bomb Bag"] mp_items = ["Din's Fire", "Farore's Wind", "Nayru's Love", "Fire Arrow", "Ice Arrow", "Light Arrow", "Lens Of Truth"] item_dict = {} item_dict['Deku Stick'] = {'Description':'Does extra damage\nConsumable\nChild Only\nEquip with "equip Deku Stick"'} item_dict['Deku Nut'] = {'Description':'Blinds enemies\nConsumable\nEquip with "equip Deku Nut'} item_dict['Kokiri Sword & Deku Shield'] = {'Description':'Allows you to do full damage\nChild Only\nAutomatically Equipped'} item_dict['Sling Shot'] = {'Description':'Increases the damage of high damage attacks\nRequires Deku Seeds\nChild Only\nEquip with "equip Sling Shot"\nFound only in the Great Deku Tree'} item_dict['Bomb Bag'] = {'Description':'Bomb Bag do Extra Damage\nUsed on attack\nEquip with "equip Bomb Bag"\nFound only in Death Mountain'} item_dict['Boomerang'] = {'Description':'Allows you to stun your opponent\nChild Only\nEquip with "equip Boomerang"\nFound only in Jabu-Jabu'} item_dict['Ocarina'] = {'Description':'Allows you to become an adult or child\nEquiping this item uses it\n1 use per round\nEquip with "equip Ocarina"'} item_dict["Din's Fire"] = {'Description':'Cast to damage all enemies near you\nEquiping this item uses it\nRequires MP\nEquip with "equip Din\'s Fire"'} item_dict["Farore's Wind"] = {'Description':'Cast to return to your spawn\nEquiping this item uses it\nRequires MP\nEquip with "equip Farore\'s Wind"'} item_dict["Nayru's Love"] = {'Description':'Cast to become immune to damage for 3 seconds\nEquiping this item uses it\nRequires MP\nMP becomes 0\nEquip with "equip Nayru\'s Love"'} item_dict['Master Sword & Hyrulian Shield'] = {'Description':'Allows you to do full damage\nGives you kevlar and a chance to dodge attacks\nAdult Only\nAutomaticall Equipped'} item_dict['Bow & Quiver'] = {'Description':'Increases the damage of high damage attacks\nRequires Arrows\nAdult Only\nEquip with "equip Bow & Quiver"\nFound only in the Forest Temple'} item_dict['Megaton Hammer'] = {'Description':"Does extra damage, but you can't use your shield\nAdult Only\nEquip with \"equip Megaton Hammer\"\nFound only in the Fire Temple"} item_dict['Hookshot'] = {'Description':"Pulls your enemies torwards you\nAdult Only\nEquip with \"equip Hookshot\"\nFound only in the Water Temple"} item_dict['Lens Of Truth'] = {'Description':"Reveals your enemies positions for a time\nEquiping this item uses it\nRequires MP\nAdult Only\nEquip with \"equip Lens Of Truth\"\nFound only in the Shadow Temple"} item_dict['Mirror Shield'] = {'Description':"Chance to block attacks\nGives kevlar and if attack was blocked, reflects some damage to attacker\nIgnores Fire & Ice Arrows\nAdult Only\nAutomatically Equipped\nFound only in the Spirit Temple"} item_dict['Fire Arrow'] = {'Description':"Burns your opponent on attack\nRequires MP and Bow & Arrows\nAdult Only"} item_dict['Ice Arrow'] = {'Description':"Freezes your opponent on attack\nRequires MP and Bow & Arrows\nAdult Only"} item_dict['Light Arrow'] = {'Description':"Ignores your opponents shield\nRequires MP and Bow & Arrows\nAdult Only"} item_dict["Biggoron's Sword"] = {'Description':"Your next attack is sure to kill the target!\nAdult Only"} player_information = {} player_information['Equipped'] = 0 player_information['Adult'] = 0 player_information['Total MP'] = 0 player_information['MP'] = 0 player_information['Ocarina Rounds'] = 0 player_information['dungeons'] = {} for dungeon in dungeons: player_information['dungeons'][dungeon] = {'XP':0} player_information['items'] = {} for item in item_list: player_information['items'][item] = {'Acquired':0, 'Uses':0} player_stats = {} player_stats['Dungeon'] = 0 debug = 0 limitteams = 0 teamswitch = 0 def zelda_debug(message): if debug == 1: es.msg(message) def zeldaMsg(messages=[]): message = '' x = 0 for k in messages: message += ' %s'%messages[x] x += 1 es.msg('#multi', '#green', 'Zelda RPG:', '#default', message) def zeldaTell(userid, messages=[]): message = '' x = 0 for k in messages: message += ' %s'%messages[x] x += 1 es.tell(userid, '#multi', '#green', 'Zelda RPG:', '#default', message) def centerTell(userid, message): es.usermsg('create', 'centermsg', 'TextMsg') es.usermsg('write', 'byte', 'centermsg', 4) es.usermsg('write', 'string', 'centermsg', message) es.usermsg('send', 'centermsg', userid) es.usermsg('delete', 'centermsg') def player_say(ev): text = ev['text'] if text == 'help' or text == 'menu': main_menu.send(ev['userid']) def load(): global player_stats, main_menu str_path = es.getAddonPath('zelda_rpg') + '/database.db' if os.path.isfile(str_path): file_users = open(str_path) player_stats = cPickle.load(file_users) file_users.close() main_menu = popuplib.create('main_menu') main_menu.addline('The Legend Of Zelda RPG') main_menu.addline('-> 1. What is this mod?') main_menu.addline('-> 2. How do I play?') main_menu.addline('-> 3. How do I find items?') main_menu.addline('-> 4. How do I equip items?') main_menu.addline('-> 5. How do I use "Adult Items"?') main_menu.addline('----------------------------------') main_menu.addline('-> 6. Items Acquired') main_menu.addline('-> 7. All Items') main_menu.addline('-> 8. Current Dungeon') main_menu.addline('-> 0. Exit') main_menu.submenu(1, 'help_1') main_menu.submenu(2, 'help_2') main_menu.submenu(3, 'item_help') main_menu.submenu(4, 'equip_help') main_menu.submenu(5, 'adult_help') main_menu.menuselect = main_selection help_1 = popuplib.create('help_1') help_1.addline('The Legend Of Zelda RPG') help_1.addline('This mod allows players to') help_1.addline('acquire "items" to assist') help_1.addline('them in playing CS:S. As') help_1.addline('you play, you may "gain"') help_1.addline('an item to be able to use.') help_1.addline('You may "equip" that item.') help_1.addline('-> 8. Main Menu') help_1.addline('-> 0. Exit') help_1.submenu(8, 'main_menu') help_2 = popuplib.create('help_2') help_2.addline('The Legend Of Zelda RPG') help_2.addline('You play this nearly exactly') help_2.addline('like any other game of CS:S') help_2.addline('with the exception of the') help_2.addline('items. You equip one, and') help_2.addline('then you gain its effects') help_2.addline('-> 8. Main Menu') help_2.addline('-> 0. Exit') help_2.submenu(8, 'main_menu') item_help = popuplib.create('item_help') item_help.addline('The Legend Of Zelda RPG') item_help.addline('You find items by getting') item_help.addline('kills, planting the bomb,') item_help.addline('rescuing hostages, and some') item_help.addline('other hidden things ;). You') item_help.addline('may find some items only in') item_help.addline('their respective Temple or') item_help.addline('Dungeon.') item_help.addline('-> 8. Main Menu') item_help.addline('0. Exit.') item_help.submenu(8, 'main_menu') equip_help = popuplib.create('equip_help') equip_help.addline('The Legend Of Zelda RPG') equip_help.addline('To equip an item, you need') equip_help.addline('only know that items name.') equip_help.addline('Type: "equip Deku Stick" to') equip_help.addline('equip a Deku Stick. You may') equip_help.addline('also enter it into the console.') equip_help.addline('If the item is consumable, you') equip_help.addline('need to requip another item') equip_help.addline('after its use.') equip_help.addline('-> 8. Main Menu') equip_help.addline('-> 0. Exit') equip_help.submenu(8, 'main_menu') adult_help = popuplib.create('adult_help') adult_help.addline('The Legend Of Zelda RPG') adult_help.addline('To become an adult, you') adult_help.addline('need to have the Ocarina.') adult_help.addline('Once you have it, you need') adult_help.addline('to equip it. You are then') adult_help.addline('an adult. You may only use') adult_help.addline('it once per round.') adult_help.addline('-> 8. Main Menu') adult_help.addline('-> 0. Exit') adult_help.submenu(8, 'main_menu') es.unregclientcmd('equip') es.regclientcmd('equip', 'zelda_rpg/equip') es.unregsaycmd('equip') es.regsaycmd('equip', 'zelda_rpg/equip') #es.unregclientcmd('giveitem') #es.regclientcmd('giveitem', 'zelda_rpg/giveitem') es.ServerVar('est_enable_PerUserKeyEvents').set('1') es.server.queuecmd('est_RegEventBlock player_hurt "es_xdoblock zelda_rpg/prepHurt"') def unload(): #es.server.queuecmd('mp_restartgame 1') es.server.queuecmd('est_unRegEventBlock player_hurt "es_xdoblock zelda_rpg/prepHurt"') gamethread.cancelDelayed('lensLoop') gamethread.cancelDelayed('zeldaHUD') def main_selection(userid, choice, popupid): if choice == 6: item_choice = popuplib.easymenu('My Items', '_popup_choice', item_select) for item in item_list: if player_stats[playerlib.uniqueid(userid)]['items'][item]['Acquired']: item_choice.addoption(item, '%s'%item) item_choice.send(userid) if choice == 7: item_choice = popuplib.easymenu('Items I Can Find', '_popup_choice', item_select) for item in item_list: item_choice.addoption(item, '%s'%item) item_choice.send(userid) if choice == 8: zeldaMsg(['Current Dungeon: %s'%player_stats['Dungeon']]) def item_select(userid, choice, popupid): tempmenu = popuplib.create('tempmenu') if choice not in ammo_items: tempmenu.addline('The Legend Of Zelda RPG\n %s\n%s'%(choice,item_dict[choice]['Description'])) else: tempmenu.addline('The Legend Of Zelda RPG\n %s\nUses: %s\n%s'%(choice,player_stats[playerlib.uniqueid(userid)]['items'][choice]['Uses'], item_dict[choice]['Description'])) tempmenu.send(userid) def es_map_start(ev): global player_stats try: current_dungeon = player_stats['Dungeon'] xx = 0 for x in range(len(dungeons)-1): if current_dungeon == dungeons[x]: xx = x + 1 if xx == len(dungeons): xx = 0 player_stats['Dungeon'] = dungeons[xx] except: player_stats['Dungeon'] = dungeons[0] def player_spawn(ev): global player_stats if playerlib.uniqueid(ev['userid']) not in player_stats: player_stats[playerlib.uniqueid(ev['userid'])] = {} player_stats[playerlib.uniqueid(ev['userid'])]['Equipped'] = 0 player_stats[playerlib.uniqueid(ev['userid'])]['Adult'] = 0 player_stats[playerlib.uniqueid(ev['userid'])]['Total MP'] = 0 player_stats[playerlib.uniqueid(ev['userid'])]['MP'] = 0 player_stats[playerlib.uniqueid(ev['userid'])]['Ocarina Rounds'] = 0 player_stats[playerlib.uniqueid(ev['userid'])]['dungeons'] = {} for dungeon in dungeons: player_stats[playerlib.uniqueid(ev['userid'])]['dungeons'][dungeon] = {'XP':0} player_stats[playerlib.uniqueid(ev['userid'])]['items'] = {} for item in item_list: player_stats[playerlib.uniqueid(ev['userid'])]['items'][item] = {'Acquired':0, 'Uses':0} player_stats[playerlib.uniqueid(ev['userid'])]['spawn'] = es.getplayerlocation(ev['userid']) if player_stats[playerlib.uniqueid(ev['userid'])]['Total MP'] > 40: player_stats[playerlib.uniqueid(ev['userid'])]['MP'] = 40 player_stats[playerlib.uniqueid(ev['userid'])]['Total MP'] = 40 if player_stats[playerlib.uniqueid(ev['userid'])]['items']['Ocarina']["Acquired"]: player_stats[playerlib.uniqueid(ev['userid'])]['items']['Ocarina']['Uses'] = 1 player_stats[playerlib.uniqueid(ev['userid'])]['Equipped'] = None def round_start(ev): if int(es.ServerVar('boss')) > 0: es.ServerVar('limitteams').set(limitteams) es.ServerVar('mp_autoteambalance').set(teamswitch) es.ServerVar('boss').set(0) global player_stats if not player_stats['Dungeon']: player_stats['Dungeon'] = 'Great Deku Tree' zeldaMsg(['Current Dungeon: %s'%player_stats['Dungeon']]) zeldaHUD() gamethread.cancelDelayed('lensLoop') gamethread.cancelDelayed('zeldaLoop') for userid in es.getUseridList(): if player_stats[playerlib.uniqueid(userid)]['items']['Ocarina']["Acquired"]: player_stats[playerlib.uniqueid(userid)]['items']['Ocarina']['Uses'] = 1 if random.randint(1,100) == 1: boss() def equip(): global player_stats userid = es.getcmduserid() if not es.getplayerprop(userid, 'CBasePlayer.pl.deadflag'): count = es.getargc() item = '' for x in range(1, count + 1): item += ' %s'%es.getargv(x) item = item.lstrip(' ').rstrip(' s') for x in range(1, len(item_list)): if item.lower() == item_list[x].lower(): item = item_list[x] if 'bigg' not in item.lower() and 'sword' in item.lower() or 'shield' in item.lower(): zeldaTell(userid, ['You don\'t need to equip those items!']) return 0 if 'din' in item.lower(): item = 'Din\'s Fire' if 'farore' in item.lower(): item = 'Farore\'s Wind' if 'nayru' in item.lower(): item = 'Nayru\'s Love' if "bigg" in item.lower(): item = "Biggoron's Sword" zelda_debug(item) if item in item_list: zelda_debug('item found') if player_stats[playerlib.uniqueid(userid)]['items'][item]['Acquired']: zelda_debug('has item') if item in adult_items: if player_stats[playerlib.uniqueid(userid)]['Adult']: if item not in mp_items: if item not in ammo_items: player_stats[playerlib.uniqueid(userid)]['Equipped'] = item zeldaTell(userid, ['You equipped the#lightgreen', item]) else: if player_stats[playerlib.uniqueid(userid)]['items'][item]['Uses']: player_stats[playerlib.uniqueid(userid)]['Equipped'] = item zeldaTell(userid, ['You equipped the#lightgreen', '%s'%item]) else: zeldaTell(userid, ["You don't have any more of that item!"]) return 0 else: if 'Arrow' in item: if player_stats[playerlib.uniqueid(userid)]['items']['Bow & Quiver']['Uses']: if 'Fire' in item and player_stats[playerlib.uniqueid(userid)]['MP'] >= 2: player_stats[playerlib.uniqueid(userid)]['Equipped'] = item zeldaTell(userid, ['You equipped the#lightgreen', '%s'%item]) if 'Ice' in item and player_stats[playerlib.uniqueid(userid)]['MP'] >= 2: player_stats[playerlib.uniqueid(userid)]['Equipped'] = item zeldaTell(userid, ['You equipped the#lightgreen', '%s'%item]) if 'Light' in item and player_stats[playerlib.uniqueid(userid)]['MP'] >= 4: player_stats[playerlib.uniqueid(userid)]['Equipped'] = item zeldaTell(userid, ['You equipped the#lightgreen', '%s'%item]) else: zeldaTell(userid, ["You don't have any more of that item!"]) return 0 else: zeldaTell(userid, ["You must be an adult to use that item!"]) return 0 if item in child_items: zelda_debug('child item') if not player_stats[playerlib.uniqueid(userid)]['Adult']: zelda_debug('is child') if item not in mp_items: zelda_debug('not a magic item') if item not in ammo_items: zelda_debug('not an ammo item') player_stats[playerlib.uniqueid(userid)]['Equipped'] = item zeldaTell(userid, ['You equipped the#lightgreen', '%s'%item]) else: zelda_debug('ammo item') if player_stats[playerlib.uniqueid(userid)]['items'][item]['Uses']: zelda_debug('has uses') player_stats[playerlib.uniqueid(userid)]['Equipped'] = item zeldaTell(userid, ['You equipped the#lightgreen', '%s'%item]) else: zelda_debug('no uses') zeldaTell(userid, ["You don't have any more of that item!"]) return 0 else: zelda_debug('magic item') else: zeldaTell(userid, ["You must be a child to use that item!"]) return 0 if 'Lens' in item: if player_stats[playerlib.uniqueid(userid)]['Equipped'] != 'Lens Of Truth': if player_stats[playerlib.uniqueid(userid)]['MP'] >= 2: player_stats[playerlib.uniqueid(userid)]['MP'] -= 2 player_stats[playerlib.uniqueid(userid)]['Equipped'] = item zeldaTell(userid, ['You equipped the#lightgreen', '%s'%item]) lensLoop(userid) else: zeldaTell(userid, ["You don't have enough MP to use that item!"]) return 0 else: zeldaTell(userid, ["You have unequipped the#lightgreenLens Of Truth"]) player_stats[playerlib.uniqueid(userid)]['Equipped'] = None gamethread.cancelDelayed('lensLoop') return 0 if item in mp_items: if int(userid) != int(es.ServerVar('boss')): if item == "Din's Fire": if player_stats[playerlib.uniqueid(userid)]['MP'] >= 6: player_stats[playerlib.uniqueid(userid)]['MP'] -= 6 zeldaTell(userid, ['You have used#lightgreen', item]) location = es.getplayerlocation(userid) Freeze(userid, 1) es.server.queuecmd('est_playplayer %s ambient/fire/ignite.wav 1'%userid) for x in range(1,10): x = float(x) gamethread.delayed(x/10, effectlib.drawCircle, (location, 50*x, 12, (1,0,0), (0,1,0), None, "materials/sprites/laser.vmt", "materials/sprites/halo01.vmt", .1, 100, 100, 255, 0, 0, 255, .1, 0, 0, 0, 0)) for victim in es.getUseridList(): if es.getplayerteam(victim) != es.getplayerteam(userid): x,y,z = es.getplayerlocation(userid) x1, y1, z1 = es.getplayerlocation(victim) if (math.sqrt(math.pow((x-x1), 2) + math.pow((y-y1), 2) + math.pow((z-z1), 2))) < 700: Damage(victim, userid, math.sqrt(math.pow((x-x1), 2) + math.pow((y-y1), 2) + math.pow((z-z1), 2)) / 35) es.server.queuecmd('est_burn %s 1.5'%victim) if item == "Farore's Wind": if player_stats[playerlib.uniqueid(userid)]['MP'] >= 6: es.server.queuecmd('est_playplayer %s "ambient/wind/wind_hit2.wav" 1'%userid) player_stats[playerlib.uniqueid(userid)]['MP'] -= 6 location = es.getplayerlocation(userid) Freeze(userid, 2) for x in range(1,3): x = float(x) gamethread.delayed(x/10, effectlib.drawCircle, (location, 50*x, 12, (1,0,0), (0,1,0), None, "materials/sprites/laser.vmt", "materials/sprites/halo01.vmt", .1, 100, 100, 0, 255, 150, 255, .1, 0, 0, 0, 0)) x = list(player_stats[playerlib.uniqueid(userid)]['spawn'])[0] y = list(player_stats[playerlib.uniqueid(userid)]['spawn'])[1] z = list(player_stats[playerlib.uniqueid(userid)]['spawn'])[2] gamethread.delayedname(1.5, 'zeldaLoop', es.server.queuecmd, ('est_teleport %s %s %s %s'%(userid, x,y,z))) zeldaTell(userid, ['You have used#lightgreen', item]) if item == "Nayru's Love": if player_stats[playerlib.uniqueid(userid)]['MP'] >= 12: es.server.queuecmd('est_playplayer %s "HL1/ambience/particle_suck1.wav" 1'%userid) player_stats[playerlib.uniqueid(userid)]['MP'] = 0 zeldaTell(userid, ['You have activated#lightgreen', item]) nayruGraphics(userid) es.setplayerprop(userid, "CBasePlayer.m_lifeState", '0') gamethread.delayed(3, es.setplayerprop, (userid, "CBasePlayer.m_ilifeState", '512')) gamethread.delayedname(3, zeldaTell, (['#lightgreen', item, 'is no longer active'])) else: zeldaTell(userid, ['Fairies don\'t lend evil creatures magic!']) return 0 if item == "Ocarina": if player_stats[playerlib.uniqueid(userid)]['items']['Ocarina']['Acquired'] == 1: if player_stats[playerlib.uniqueid(userid)]['items']['Ocarina']['Uses'] >= 1: if player_stats[playerlib.uniqueid(userid)]['Adult'] == 1: zeldaTell(userid, ['You have used the#lightgreen', item, '#defaultand are now a child']) player_stats[playerlib.uniqueid(userid)]['items']['Ocarina']['Uses'] = 0 player_stats[playerlib.uniqueid(userid)]['Adult'] = 0 return 0 if player_stats[playerlib.uniqueid(userid)]['Adult'] == 0: zeldaTell(userid, ['You have used the#lightgreen', item, '#defaultand are now an adult']) player_stats[playerlib.uniqueid(userid)]['items']['Ocarina']['Uses'] = 0 player_stats[playerlib.uniqueid(userid)]['Adult'] = 1 return 0 else: zeldaTell(userid, ['You can only use the#lightgreen', item, '#defaultonce per round!']) return 0 else: zeldaTell(userid, ["You haven't yet acquired the#lightgreen", '%s'%item]) return 0 else: zeldaTell(userid, ["That item doesn't exist! Check the All Items Menu "]) return 0 def lensLoop(userid): global player_stats see_thru_walls_sprite = "effects/strider_bulge_dudv_dx60.vmt" if player_stats[playerlib.uniqueid(userid)]['Equipped'] == 'Lens Of Truth' and player_stats[playerlib.uniqueid(userid)]['MP']: if not es.getplayerprop(userid, 'CBasePlayer.pl.deadflag'): allowed = 100000 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))) player_stats[playerlib.uniqueid(userid)]['MP'] -= 1 gamethread.delayedname(1, 'lensLoop', lensLoop, userid) else: zeldaTell(userid, ['#lightgreenThe Lens Of Truth #defaultis no longer active']) player_stats[playerlib.uniqueid(userid)]['Equipped'] = None def nayruGraphics(userid, time=0): if time < 3 and not es.getplayerprop(userid, 'CBasePlayer.pl.deadflag'): location = es.getplayerlocation(userid) effectlib.drawCircle(location, 50*x, 12,(1,0,0),(0,1,0),None,"materials/sprites/laser.vmt","materials/sprites/halo01.vmt",.1,100,100,0,0,255,255,.1,0,0,0,0) gamethread.delayedname(.1, 'zeldaLoop', nayruGraphics, (userid,time+.1)) def zeldaHUD(): for userid in es.getUseridList(): equipped = None if player_stats[playerlib.uniqueid(userid)]['Equipped']: equipped = player_stats[playerlib.uniqueid(userid)]['Equipped'] age = 'Adult' if not player_stats[playerlib.uniqueid(userid)]['Adult']: age = 'Child' mp = player_stats[playerlib.uniqueid(userid)]['MP'] es.usermsg('create', '%s_hud'%userid, 'HintText') es.usermsg('write', 'byte', '%s_hud'%userid, -1) es.usermsg('write', 'string', '%s_hud'%userid, "Equipped: %s \n Age: %s \n MP: %s\n "%(equipped, age, mp)) es.usermsg('send', '%s_hud'%userid, userid) es.usermsg('delete', '%s_hud'%userid) es.usermsg('delete', '%s_hud'%userid) es.usermsg('delete', '%s_hud'%userid) gamethread.delayedname(5, 'zeldaHUD', zeldaHUD) def round_end(ev): global player_stats str_path = open(es.getAddonPath('zelda_rpg') + '/database.db', 'w') cPickle.dump(player_stats, str_path) str_path.close() gamethread.cancelDelayed('zeldaHUD') gamethread.cancelDelayed('lensLoop') gamethread.cancelDelayed('zeldaLoop') winner = int(ev['winner']) for userid in es.getUseridList(): if winner > 1: if es.getplayerteam(userid) == winner: player_stats[playerlib.uniqueid(userid)]['dungeons'][player_stats['Dungeon']]['XP'] += es.ServerVar('roundxp') roll(userid) def bomb_planted(ev): player_stats[playerlib.uniqueid(ev['userid'])]['dungeons'][player_stats['Dungeon']]['XP'] += es.ServerVar('bombplantedxp') roll(ev['userid']) def bomb_exploded(ev): player_stats[playerlib.uniqueid(ev['userid'])]['dungeons'][player_stats['Dungeon']]['XP'] += es.ServerVar('bombexplodedxp') roll(ev['userid']) def bomb_defused(ev): player_stats[playerlib.uniqueid(ev['userid'])]['dungeons'][player_stats['Dungeon']]['XP'] += es.ServerVar('bombdefusedxp') roll(ev['userid']) def hostage_rescued(ev): player_stats[playerlib.uniqueid(ev['userid'])]['dungeons'][player_stats['Dungeon']]['XP'] += es.ServerVar('hostagerescuedxp') roll(ev['userid']) def hostage_rescued_all(ev): player_stats[playerlib.uniqueid(ev['userid'])]['dungeons'][player_stats['Dungeon']]['XP'] += es.ServerVar('hostagerescuedallxp') roll(ev['userid']) 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 zelda_temp %s'%variable) try: return int(es.ServerVar('zelda_temp')) except: return str(es.ServerVar('zelda_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(): global player_stats userid = ReturnEV('userid') attacker = ReturnEV('attacker') if attacker != 0 and attacker != '0': damage = ReturnEV('dmg_health') health = es.getplayerprop(userid, 'CBasePlayer.m_iHealth') if random.randint(1,100) < 4: if player_stats['Dungeon'] == 'Fire Temple': es.server.queuecmd('est_burn %s 1'%userid) if player_stats['Dungeon'] == 'Water Temple': es.setplayerprop(userid, 'CBasePlayer.m_iHealth', es.getplayerprop(userid, 'CBasePlayer.m_iHealth') + damage) SetEV('dmg_health', 0) if player_stats['Dungeon'] == 'Shadow Temple': es.server.queuecmd('est_setplayercolor %s 255 255 255 0 0'%attacker) if not player_stats[playerlib.uniqueid(attacker)]['items']['Kokiri Sword & Deku Shield']['Acquired'] and not player_stats[playerlib.uniqueid(attacker)]['Adult']: damage = damage / 2 SetEV('dmg_health', damage) es.setplayerprop(userid, 'CBasePlayer.m_iHealth', int(playerlib.getPlayer(userid).get('health')) + damage) if not player_stats[playerlib.uniqueid(attacker)]['items']['Master Sword & Hyrulian Shield']['Acquired'] and player_stats[playerlib.uniqueid(attacker)]['Adult']: damage = damage / 2 SetEV('dmg_health', damage) es.setplayerprop(userid, 'CBasePlayer.m_iHealth', int(playerlib.getPlayer(userid).get('health')) + damage) if player_stats[playerlib.uniqueid(attacker)]['Equipped'] == "Biggoron's Sword": player_stats[playerlib.uniqueid(attacker)]['items']["Biggoron's Sword"]['Uses'] = 0 es.setplayerprop(userid, "CBasePlayer.m_iHealth", 0) return 0 if player_stats[playerlib.uniqueid(userid)]['items']['Kokiri Sword & Deku Shield']['Acquired'] or player_stats[playerlib.uniqueid(userid)]['items']['Master Sword & Hyrulian Shield']['Acquired'] or player_stats[playerlib.uniqueid(userid)]['items']['Mirror Shield']['Acquired']: if player_stats[playerlib.uniqueid(userid)]['Equipped'] != 'Megaton Hammer' and player_stats[playerlib.uniqueid(userid)]['Equipped'] != "Biggoron's Sword": if random.randint(1,2) == 1 and player_stats[playerlib.uniqueid(attacker)]['Equipped'] != 'Light Arrow' and int(userid) != int(es.ServerVar('boss')): SetEV('dmg_health', 0) es.setplayerprop(userid, 'CBasePlayer.m_iHealth', es.getplayerprop(userid, 'CBasePlayer.m_iHealth') + damage) zeldaTell(userid, ['You blocked an attack!']) if player_stats[playerlib.uniqueid(userid)]['items']['Mirror Shield']['Acquired']: Damage(attacker, userid, damage * .1) else: if player_stats[playerlib.uniqueid(attacker)]['Equipped']: equipped_item = player_stats[playerlib.uniqueid(attacker)]['Equipped'] if equipped_item == 'Deku Stick': player_stats[playerlib.uniqueid(attacker)]['items']['Deku Stick']['Uses'] -= 1 damage *= .05 player_stats[playerlib.uniqueid(attacker)]['Equipped'] = None zeldaTell(attacker, ['%s is no longer equipped'%equipped_item]) es.server.queuecmd('est_playplayer %s physics/wood/wood_plank_break%s.wav'%(userid, random.randint(1,4))) es.server.queuecmd('est_playplayer %s physics/wood/wood_plank_break%s.wav'%(attacker, random.randint(1,4))) if equipped_item == 'Deku Nut': player_stats[playerlib.uniqueid(attacker)]['items']['Deku Nut']['Uses'] -= 1 es.setplayerprop(userid, "CCSPlayer.m_flFlashMaxAlpha", 255) es.setplayerprop(userid, "CCSPlayer.m_flFlashDuration", 1) player_stats[playerlib.uniqueid(attacker)]['Equipped'] = None zeldaTell(attacker, ['%s is no longer equipped'%equipped_item]) es.server.queuecmd('est_playplayer %s physics/concrete/concrete_impact_bullet%s.wav 1'%(userid, random.randint(1,4))) es.server.queuecmd('est_playplayer %s physics/concrete/concrete_impact_bullet%s.wav 1'%(attacker, random.randint(1,4))) if equipped_item == 'Sling Shot': player_stats[playerlib.uniqueid(attacker)]['items']['Sling Shot']['Uses'] -= 1 if damage >= 40: damage * .5 SetEV('dmg_health', damage * 2) Damage(userid, attacker, damage) zeldaTell(attacker, ['Your seed hit for massive damage!']) es.server.queuecmd('est_playplayer %s physics/plastic/plastic_box_break2.wav 1'%userid) es.server.queuecmd('est_playplayer %s physics/plastic/plastic_box_break2.wav 1'%attacker) if not player_stats[playerlib.uniqueid(attacker)]['items']['Sling Shot']['Uses']: player_stats[playerlib.uniqueid(attacker)]['Equipped'] = None zeldaTell(attacker, ['%s is no longer equipped'%equipped_item]) if equipped_item == 'Bomb Bag': player_stats[playerlib.uniqueid(attacker)]['items']['Bomb Bag']['Uses'] -= 1 damage *= .25 SetEV('dmg_health', damage) Damage(userid, attacker, damage * .25) es.server.queuecmd('est_playplayer %s weapons/hegrenade/explode%s.wav'%(userid, random.randint(3,5))) es.server.queuecmd('est_playplayer %s weapons/hegrenade/explode%s.wav'%(attacker, random.randint(3,5))) if not player_stats[playerlib.uniqueid(attacker)]['items']['Bomb Bag']['Uses']: player_stats[playerlib.uniqueid(attacker)]['Equipped'] = None zeldaTell(attacker, ['%s is no longer equipped'%equipped_item]) if equipped_item == 'Bow & Quiver': player_stats[playerlib.uniqueid(attacker)]['items']['Bow & Quiver']['Uses'] -= 1 if damage >= 40: damage * 1.5 SetEV('dmg_health', damage) Damage(userid, attacker, damage / 3) zeldaTell(attacker, ['Your arrow hit for massive damage!']) es.server.queuecmd('est_playplayer %s physics/plastic/plastic_box_break2.wav 1'%userid) es.server.queuecmd('est_playplayer %s physics/plastic/plastic_box_break2.wav 1'%attacker) if not player_stats[playerlib.uniqueid(attacker)]['items']['Bow & Quiver']['Uses']: player_stats[playerlib.uniqueid(attacker)]['Equipped'] = None zeldaTell(attacker, ['%s is no longer equipped'%equipped_item]) if equipped_item == 'Megaton Hammer': es.server.queuecmd('est_playplayer %s physics/metal/metal_barrel_impact_hard5.wav 1'%userid) es.server.queuecmd('est_playplayer %s physics/metal/metal_barrel_impact_hard5.wav 1'%attacker) damage *= .15 SetEV('dmg_health', damage) Damage(userid, attacker, damage * .15) es.usermsg('create', 'shake', 'Shake') es.usermsg('write', 'byte', 'shake', 0) es.usermsg('write', 'float', 'shake', 200) es.usermsg('write', 'float', 'shake', 1.0) es.usermsg('write', 'float', 'shake', 1.5) es.usermsg('send', 'shake', userid) es.usermsg('delete', 'shake') if equipped_item == 'Hookshot': es.server.queuecmd('est_playplayer %s physics/metal/chain_scrape_rough_loop1.wav 1'%userid) es.server.queuecmd('est_playplayer %s physics/metal/chain_scrape_rough_loop1.wav 1'%attacker) x, y, z = playerlib.getPlayer(attacker).get('viewvector') es.setplayerprop(userid, 'CBasePlayer.localdata.m_vecBaseVelocity', '%s,%s,%s'%(x * -400, y * -400, z * -400)) if equipped_item == 'Boomerang': es.server.queuecmd('est_playplayer %s physics/wood/wood_crate_impact_hard%s.wav 1'%(userid, random.randint(1,5))) es.server.queuecmd('est_playplayer %s physics/wood/wood_crate_impact_hard%s.wav 1'%(attacker, random.randint(1,5))) Stun(userid, 1) if equipped_item == 'Fire Arrow': player_stats[playerlib.uniqueid(attacker)]['items']['Bow & Quiver']['Uses'] -= 1 player_stats[playerlib.uniqueid(attacker)]['MP'] -= 2 es.server.queuecmd('est_burn %s 1'%userid) es.server.queuecmd('est_playplayer %s ambient/fire/gascan_ignite1.wav 1'%userid) es.server.queuecmd('est_playplayer %s ambient/fire/gascan_ignite1.wav 1'%attacker) location = list(es.getplayerlocation(attacker)) location[2] += 50 location2 = list(es.getplayerlocation(userid)) location2[2] += 65 effectlib.drawLine((location[0],location[1],location[2]), (location2[0],location2[1],location2[2]), model="materials/sprites/laser.vmt", halo="materials/sprites/halo01.vmt", seconds=.1, width=1, endwidth=10, red=255, green=0, blue=0, brightness=255, speed=10, fadelength=0, noise=0, framestart=0, framerate=0) if player_stats[playerlib.uniqueid(attacker)]['items']['Bow & Quiver']['Uses'] <= 0 or player_stats[playerlib.uniqueid(attacker)]['MP'] <= 0: player_stats[playerlib.uniqueid(attacker)]['Equipped'] = None zeldaTell(attacker, ['%s is no longer equipped'%equipped_item]) if equipped_item == 'Ice Arrow': es.server.queuecmd('est_playplayer %s npc/vort/attack_shoot.wav 1'%userid) player_stats[playerlib.uniqueid(attacker)]['items']['Bow & Quiver']['Uses'] -= 1 player_stats[playerlib.uniqueid(attacker)]['MP'] -= 2 Freeze(userid, 1) location = list(es.getplayerlocation(attacker)) location[2] += 50 location2 = list(es.getplayerlocation(userid)) location2[2] += 65 effectlib.drawLine((location[0],location[1],location[2]), (location2[0],location2[1],location2[2]), model="materials/sprites/laser.vmt", halo="materials/sprites/halo01.vmt", seconds=.1, width=1, endwidth=10, red=0, green=0, blue=255, brightness=255, speed=10, fadelength=0, noise=0, framestart=0, framerate=0) if player_stats[playerlib.uniqueid(attacker)]['items']['Bow & Quiver']['Uses'] <= 0 or player_stats[playerlib.uniqueid(attacker)]['MP'] <= 0: player_stats[playerlib.uniqueid(attacker)]['Equipped'] = None zeldaTell(attacker, ['%s is no longer equipped'%equipped_item]) if equipped_item == 'Light Arrow': es.server.queuecmd('est_playplayer %s npc/assassin/ball_zap1.wav 1'%userid) player_stats[playerlib.uniqueid(attacker)]['items']['Bow & Quiver']['Uses'] -= 1 player_stats[playerlib.uniqueid(attacker)]['MP'] -= 2 location = list(es.getplayerlocation(attacker)) location[2] += 50 location2 = list(es.getplayerlocation(userid)) location2[2] += 65 effectlib.drawLine((location[0],location[1],location[2]), (location2[0],location2[1],location2[2]), model="materials/sprites/laser.vmt", halo="materials/sprites/halo01.vmt", seconds=.1, width=1, endwidth=10, red=255, green=255, blue=0, brightness=255, speed=10, fadelength=0, noise=0, framestart=0, framerate=0) if player_stats[playerlib.uniqueid(attacker)]['items']['Bow & Quiver']['Uses'] <= 0 or player_stats[playerlib.uniqueid(attacker)]['MP'] <= 0: player_stats[playerlib.uniqueid(attacker)]['Equipped'] = None zeldaTell(attacker, ['%s is no longer equipped'%equipped_item]) centerTell(attacker, '%s damage!'%(damage)) 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 Stun(userid, duration=None): es.setplayerprop(userid, "CBaseEntity.movetype", 0) gamethread.cancelDelayed('%s_stun'%userid) if duration: gamethread.delayedname(duration, '%s_stun'%userid, Unstun, userid) def Unstun(userid): if es.exists('userid', userid): es.setplayerprop(userid, "CBaseEntity.movetype", 2) def Freeze(userid, duration=None): es.setplayerprop(userid, "CBasePlayer.m_fFlags", 32.0) gamethread.cancelDelayed('%s_freeze'%userid) if duration: gamethread.delayedname(duration, '%s_freeze'%userid, Unfreeze, userid) def Unfreeze(userid): if es.exists('userid', userid): es.setplayerprop(userid, "CBasePlayer.m_fFlags", 1) def player_death(ev): attacker = ev['attacker'] userid = ev['userid'] if attacker: if es.getplayerteam(userid) != es.getplayerteam(attacker): roll(attacker) player_stats[playerlib.uniqueid(attacker)]['dungeons'][player_stats['Dungeon']]['XP'] += int(es.ServerVar('killxp')) if int(ev['userid']) == int(es.ServerVar('boss')): zeldaMsg(['Congratulations! The boss has been slain!']) def roll(userid): x = random.randint(1,100) if not player_stats[playerlib.uniqueid(userid)]['Adult']: if not player_stats[playerlib.uniqueid(userid)]['items']['Kokiri Sword & Deku Shield']['Acquired']: player_stats[playerlib.uniqueid(userid)]['items']['Kokiri Sword & Deku Shield']['Acquired'] = 1 tempmenu = popuplib.create('tempmenu') tempmenu.addline('You have acquired the %s!\n%s'%('Kokiri Sword & Deku Shield',item_dict['Kokiri Sword & Deku Shield']['Description'])) tempmenu.send(userid) playFound(userid) zeldaMsg(['%s has acquired the#lightgreen Kokiri Sword & Deku Shield!'%es.getplayername(userid)]) return 0 else: if x in range(1,6): if player_stats['Dungeon'] == 'Great Deku Tree' and not player_stats[playerlib.uniqueid(userid)]['items']['Sling Shot']['Acquired']: if player_stats[playerlib.uniqueid(userid)]['dungeons'][player_stats['Dungeon']]['XP'] >= 1200: if player_stats[playerlib.uniqueid(userid)]['items']['Kokiri Sword & Deku Shield']['Acquired']: player_stats[playerlib.uniqueid(userid)]['items']['Sling Shot']['Acquired'] = 1 player_stats[playerlib.uniqueid(userid)]['items']['Sling Shot']['Uses'] = 30 tempmenu = popuplib.create('tempmenu') tempmenu.addline('You have acquired the %s!\n%s'%('Sling Shot',item_dict['Sling Shot']['Description'])) tempmenu.send(userid) playFound(userid) zeldaMsg(['%s has acquired the#lightgreen Sling Shot!'%es.getplayername(userid)]) return 0 if player_stats['Dungeon'] == 'Death Mountain' and not player_stats[playerlib.uniqueid(userid)]['items']['Bomb Bag']['Acquired']: if player_stats[playerlib.uniqueid(userid)]['dungeons'][player_stats['Dungeon']]['XP'] >= 2400: if player_stats[playerlib.uniqueid(userid)]['items']['Sling Shot']['Acquired']: player_stats[playerlib.uniqueid(userid)]['items']['Bomb Bag']['Acquired'] = 1 player_stats[playerlib.uniqueid(userid)]['items']['Bomb Bag']['Uses'] = 20 tempmenu = popuplib.create('tempmenu') tempmenu.addline('You have acquired %s!\n%s'%('Bomb Bag',item_dict['Bomb Bag']['Description'])) tempmenu.send(userid) playFound(userid) zeldaMsg(['%s has acquired the#lightgreen Bomb Bag!'%es.getplayername(userid)]) return 0 if player_stats['Dungeon'] == 'Jabu Jabu' and not player_stats[playerlib.uniqueid(userid)]['items']['Boomerang']['Acquired']: if player_stats[playerlib.uniqueid(userid)]['dungeons'][player_stats['Dungeon']]['XP'] >= 3600: if player_stats[playerlib.uniqueid(userid)]['items']['Bomb Bag']['Acquired']: player_stats[playerlib.uniqueid(userid)]['items']['Boomerang']['Acquired'] = 1 tempmenu = popuplib.create('tempmenu') tempmenu.addline('You have acquired %s!\n%s'%('Boomerang',item_dict['Boomerang']['Description'])) tempmenu.send(userid) playFound(userid) zeldaMsg(['%s has acquired the#lightgreen Boomerang!'%es.getplayername(userid)]) return 0 if player_stats[playerlib.uniqueid(userid)]['items']['Boomerang']['Acquired']: if not player_stats[playerlib.uniqueid(userid)]['items']["Ocarina"]['Acquired']: player_stats[playerlib.uniqueid(userid)]['items']["Ocarina"]['Acquired'] = 1 tempmenu = popuplib.create('tempmenu') tempmenu.addline('You have acquired the %s!\n%s'%("Ocarina",item_dict["Ocarina"]['Description'])) tempmenu.send(userid) playFound(userid) zeldaMsg(['%s has acquired the#lightgreen Ocarina!'%es.getplayername(userid)]) return 0 else: if not player_stats[playerlib.uniqueid(userid)]['items']['Master Sword & Hyrulian Shield']['Acquired']: player_stats[playerlib.uniqueid(userid)]['items']['Master Sword & Hyrulian Shield']['Acquired'] = 1 tempmenu = popuplib.create('tempmenu') tempmenu.addline('You have acquired the %s!\n%s'%('Master Sword & Hyrulian Shield',item_dict['Master Sword & Hyrulian Shield']['Description'])) tempmenu.send(userid) playFound(userid) zeldaMsg(['%s has acquired the#lightgreen Master Sword & Hyrulian Shield!'%es.getplayername(userid)]) return 0 else: if x in range(1,6): if player_stats['Dungeon'] == 'Forest Temple' and not player_stats[playerlib.uniqueid(userid)]['items']['Bow & Quiver']['Acquired']: if player_stats[playerlib.uniqueid(userid)]['dungeons'][player_stats['Dungeon']]['XP'] >= 4800: player_stats[playerlib.uniqueid(userid)]['items']['Bow & Quiver']['Acquired'] = 1 player_stats[playerlib.uniqueid(userid)]['items']['Bow & Quiver']['Uses'] = 30 tempmenu = popuplib.create('tempmenu') tempmenu.addline('You have acquired the %s!\n%s'%('Bow & Quiver',item_dict['Bow & Quiver']['Description'])) tempmenu.send(userid) playFound(userid) zeldaMsg(['%s has acquired the#lightgreen Bow & Quiver!'%es.getplayername(userid)]) return 0 if player_stats['Dungeon'] == 'Fire Temple' and not player_stats[playerlib.uniqueid(userid)]['items']['Megaton Hammer']['Acquired']: if player_stats[playerlib.uniqueid(userid)]['dungeons'][player_stats['Dungeon']]['XP'] >= 6000: if player_stats[playerlib.uniqueid(userid)]['items']['Bow & Quiver']['Acquired']: player_stats[playerlib.uniqueid(userid)]['items']['Megaton Hammer']['Acquired'] = 1 tempmenu = popuplib.create('tempmenu') tempmenu.addline('You have acquired the %s!\n%s'%('Megaton Hammer',item_dict['Megaton Hammer']['Description'])) tempmenu.send(userid) playFound(userid) zeldaMsg(['%s has acquired the#lightgreen Megaton Hammer!'%es.getplayername(userid)]) return 0 if player_stats['Dungeon'] == 'Water Temple' and not player_stats[playerlib.uniqueid(userid)]['items']['Hookshot']['Acquired']: if player_stats[playerlib.uniqueid(userid)]['dungeons'][player_stats['Dungeon']]['XP'] >= 7200: if player_stats[playerlib.uniqueid(userid)]['items']['Megaton Hammer']['Acquired']: player_stats[playerlib.uniqueid(userid)]['items']['Hookshot']['Acquired'] = 1 tempmenu = popuplib.create('tempmenu') tempmenu.addline('You have acquired %s!\n%s'%('Hookshot',item_dict['Hookshot']['Description'])) tempmenu.send(userid) playFound(userid) zeldaMsg(['%s has acquired the#lightgreen Hookshot!'%es.getplayername(userid)]) return 0 if player_stats['Dungeon'] == 'Shadow Temple' and not player_stats[playerlib.uniqueid(userid)]['items']['Lens Of Truth']['Acquired']: if player_stats[playerlib.uniqueid(userid)]['dungeons'][player_stats['Dungeon']]['XP'] >= 7200: if player_stats[playerlib.uniqueid(userid)]['items']['Hookshot']['Acquired']: player_stats[playerlib.uniqueid(userid)]['items']['Lens Of Truth']['Acquired'] = 1 tempmenu = popuplib.create('tempmenu') tempmenu.addline('You have acquired %s!\n%s'%('Lens Of Truth',item_dict['Lens Of Truth']['Description'])) tempmenu.send(userid) playFound(userid) zeldaMsg(['%s has acquired the#lightgreen Lens Of Truth!'%es.getplayername(userid)]) return 0 if player_stats['Dungeon'] == 'Spirit Temple' and not player_stats[playerlib.uniqueid(userid)]['items']['Mirror Shield']['Acquired']: if player_stats[playerlib.uniqueid(userid)]['dungeons'][player_stats['Dungeon']]['XP'] >= 7200: if player_stats[playerlib.uniqueid(userid)]['items']['Lens Of Truth']['Acquired']: player_stats[playerlib.uniqueid(userid)]['items']['Mirror Shield']['Acquired'] = 1 tempmenu = popuplib.create('tempmenu') tempmenu.addline('You have acquired %s!\n%s'%('Mirror Shield',item_dict['Mirror Shield']['Description'])) tempmenu.send(userid) playFound(userid) zeldaMsg(['%s has acquired the#lightgreen Mirror Shield!'%es.getplayername(userid)]) return 0 if x == 7: if not player_stats[playerlib.uniqueid(userid)]['items']['Biggoron\'s Sword']['Acquired'] and not player_stats[playerlib.uniqueid(userid)]['items']['Biggoron\'s Sword']['Uses']: player_stats[playerlib.uniqueid(userid)]['items']['Biggoron\'s Sword']['Uses'] = 1 player_stats[playerlib.uniqueid(userid)]['items']['Biggoron\'s Sword']['Acquired'] = 1 tempmenu = popuplib.create('tempmenu') tempmenu.addline('You have acquired %s!\n%s'%('Biggoron\'s Sword',item_dict['Biggoron\'s Sword']['Description'])) tempmenu.send(userid) playFound(userid) zeldaMsg(['%s has acquired the#lightgreen Biggoron\'s Sword!'%es.getplayername(userid)]) return 0 elif player_stats[playerlib.uniqueid(userid)]['items']['Biggoron\'s Sword']['Acquired'] and not player_stats[playerlib.uniqueid(userid)]['items']['Biggoron\'s Sword']['Uses']: player_stats[playerlib.uniqueid(userid)]['items']['Biggoron\'s Sword']['Uses'] = 1 zeldaTell(userid, ['You found the#lightgreen', 'Biggoron\'s Sword']) if x in range(1,3): if not player_stats[playerlib.uniqueid(userid)]['items']["Din's Fire"]['Acquired']: player_stats[playerlib.uniqueid(userid)]['items']["Din's Fire"]['Acquired'] = 1 player_stats[playerlib.uniqueid(userid)]['Total MP'] = 10 player_stats[playerlib.uniqueid(userid)]['MP'] = player_stats[playerlib.uniqueid(userid)]['Total MP'] tempmenu = popuplib.create('tempmenu') tempmenu.addline('You have acquired %s!\n%s'%("Din's Fire",item_dict["Din's Fire"]['Description'])) tempmenu.send(userid) playFound(userid) zeldaMsg(['%s has acquired#lightgreen Din\'s Fire!'%es.getplayername(userid)]) return 0 else: if not player_stats[playerlib.uniqueid(userid)]['items']["Farore's Wind"]['Acquired']: player_stats[playerlib.uniqueid(userid)]['items']["Farore's Wind"]['Acquired'] = 1 player_stats[playerlib.uniqueid(userid)]['Total MP'] += 10 player_stats[playerlib.uniqueid(userid)]['MP'] = player_stats[playerlib.uniqueid(userid)]['Total MP'] tempmenu = popuplib.create('tempmenu') tempmenu.addline('You have acquired %s!\n%s'%("Farore's Wind",item_dict["Farore's Wind"]['Description'])) tempmenu.send(userid) playFound(userid) zeldaMsg(['%s has acquired#lightgreen Farore\'s Wind!'%es.getplayername(userid)]) return 0 else: if not player_stats[playerlib.uniqueid(userid)]['items']["Nayru's Love"]['Acquired']: player_stats[playerlib.uniqueid(userid)]['items']["Nayru's Love"]['Acquired'] = 1 player_stats[playerlib.uniqueid(userid)]['Total MP'] += 10 player_stats[playerlib.uniqueid(userid)]['MP'] = player_stats[playerlib.uniqueid(userid)]['Total MP'] tempmenu = popuplib.create('tempmenu') tempmenu.addline('You have acquired %s!\n%s'%("Nayru's Love",item_dict["Nayru's Love"]['Description'])) tempmenu.send(userid) playFound(userid) zeldaMsg(['%s has acquired#lightgreen Nayru\'s Love!'%es.getplayername(userid)]) return 0 else: player_stats[playerlib.uniqueid(userid)]['Total MP'] += 2 tempmenu = popuplib.create('tempmenu') tempmenu.addline('Your MP total has been increased by 2!') tempmenu.send(userid) playFound(userid) if x in range(6, 11): if not player_stats[playerlib.uniqueid(userid)]['items']['Fire Arrow']['Acquired']: player_stats[playerlib.uniqueid(userid)]['items']['Fire Arrow']['Acquired'] = 1 tempmenu = popuplib.create('tempmenu') tempmenu.addline('You have acquired the %s!\n%s'%('Fire Arrow',item_dict['Fire Arrow']['Description'])) tempmenu.send(userid) playFound(userid) zeldaMsg(['%s has acquired#lightgreen Fire Arrows!'%es.getplayername(userid)]) return 0 if not player_stats[playerlib.uniqueid(userid)]['items']['Ice Arrow']['Acquired']: player_stats[playerlib.uniqueid(userid)]['items']['Ice Arrow']['Acquired'] = 1 tempmenu = popuplib.create('tempmenu') tempmenu.addline('You have acquired the %s!\n%s'%('Ice Arrow',item_dict['Ice Arrow']['Description'])) tempmenu.send(userid) playFound(userid) zeldaMsg(['%s has acquired#lightgreen Ice Arrows!'%es.getplayername(userid)]) return 0 if not player_stats[playerlib.uniqueid(userid)]['items']['Light Arrow']['Acquired']: player_stats[playerlib.uniqueid(userid)]['items']['Light Arrow']['Acquired'] = 1 tempmenu = popuplib.create('tempmenu') tempmenu.addline('You have acquired the %s!\n%s'%('Light Arrow',item_dict['Light Arrow']['Description'])) tempmenu.send(userid) playFound(userid) zeldaMsg(['%s has acquired#lightgreen Light Arrows!'%es.getplayername(userid)]) return 0 if x in range(1,101): random_item = random.choice(['Deku Nut', 'Deku Stick', 'MP', 'HP', 'Seed', 'Arrow', 'Cash', 'Bomb']) if random_item == 'Deku Nut': if not player_stats[playerlib.uniqueid(userid)]['items']['Deku Nut']['Acquired']: player_stats[playerlib.uniqueid(userid)]['items']['Deku Nut']['Acquired'] = 1 player_stats[playerlib.uniqueid(userid)]['items']['Deku Nut']['Uses'] = 5 tempmenu = popuplib.create('tempmenu') tempmenu.addline('You have acquired the %s!\n%s'%(random_item,item_dict[random_item]['Description'])) tempmenu.send(userid) playFound(userid) else: player_stats[playerlib.uniqueid(userid)]['items']['Deku Nut']['Uses'] += 3 zeldaTell(userid, ['You found some#lightgreen', '%ss'%random_item]) if random_item == 'Deku Stick': if not player_stats[playerlib.uniqueid(userid)]['items']['Deku Stick']['Acquired']: player_stats[playerlib.uniqueid(userid)]['items']['Deku Stick']['Acquired'] = 1 player_stats[playerlib.uniqueid(userid)]['items']['Deku Stick']['Uses'] = 5 tempmenu = popuplib.create('tempmenu') tempmenu.addline('You have acquired the %s!\n%s'%(random_item,item_dict[random_item]['Description'])) tempmenu.send(userid) playFound(userid) else: player_stats[playerlib.uniqueid(userid)]['items']['Deku Stick']['Uses'] += 1 zeldaTell(userid, ['You found some#lightgreen', '%ss'%random_item]) if random_item == 'MP': if not player_stats[playerlib.uniqueid(userid)]['Total MP']: return 0 else: player_stats[playerlib.uniqueid(userid)]['MP'] += random.randint(1,10) if player_stats[playerlib.uniqueid(userid)]['MP'] < player_stats[playerlib.uniqueid(userid)]['Total MP']: player_stats[playerlib.uniqueid(userid)]['MP'] = player_stats[playerlib.uniqueid(userid)]['Total MP'] zeldaTell(userid, ['You found some#lightgreen', '%s'%random_item]) if random_item == 'Seed': if not player_stats[playerlib.uniqueid(userid)]['items']['Sling Shot']['Acquired']: return 0 else: player_stats[playerlib.uniqueid(userid)]['items']['Sling Shot']['Uses'] += random.randint(1,10) zeldaTell(userid, ['You found some#lightgreen', 'Deku %ss'%random_item]) if random_item == 'Arrow': if not player_stats[playerlib.uniqueid(userid)]['items']['Bow & Quiver']['Acquired']: return 0 else: player_stats[playerlib.uniqueid(userid)]['items']['Bow & Quiver']['Uses'] += random.randint(1,10) zeldaTell(userid, ['You found some#lightgreen', '%ss'%random_item]) if random_item == 'Bomb': if not player_stats[playerlib.uniqueid(userid)]['items']['Bomb Bag']['Acquired']: return 0 else: player_stats[playerlib.uniqueid(userid)]['items']['Bomb Bag']['Uses'] += random.randint(1,2) zeldaTell(userid, ['You found some#lightgreen', '%ss'%random_item]) if random_item == 'HP': if es.getplayerprop(userid, 'CBasePlayer.m_iHealth') >= 100: return 0 else: es.setplayerprop(userid, 'CBasePlayer.m_iHealth', int(es.getplayerprop(userid, 'CBasePlayer.m_iHealth')) + random.randint(1,10)) if es.setplayerprop(userid, 'CBasePlayer.m_iHealth') > 100: es.setplayerprop(userid, 'CBasePlayer.m_iHealth', 100) zeldaTell(userid, ['You found some#lightgreen', 'Hearts']) if random_item == 'Cash': es.server.queuecmd('est_cash %s + %s'%(userid, random.randint(100,1000))) zeldaTell(userid, ['You found some#lightgreen', 'Rupees']) def playFound(userid): es.server.queuecmd('es_playsound %s "ambient/energy/whiteflash.wav" 1'%userid) def giveitem(): global player_stats userid = es.getcmduserid() count = es.getargc() item = '' for x in range(1, count + 1): item += ' %s'%es.getargv(x) item = item.lstrip(' ').rstrip(' s') for x in range(1, len(item_list)): if item.lower() == item_list[x].lower(): item = item_list[x] if item.lower() == 'magic': player_stats[playerlib.uniqueid(userid)]['MP'] = 50 if item.lower() == 'adult': player_stats[playerlib.uniqueid(userid)]['Adult'] = 1 if item.lower() == 'child': player_stats[playerlib.uniqueid(userid)]['Adult'] = 0 if 'bigg' not in item.lower() and 'sword' in item.lower() or 'shield' in item.lower(): zeldaTell(userid, ['You don\'t need to equip those items!']) return 0 if 'Din' in item: item = 'Din\'s Fire' if 'Farore' in item: item = 'Farore\'s Wind' if 'Nayru' in item: item = 'Nayru\'s Love' if "Bigg" in item: item = "Biggoron's Sword" if item in item_list: player_stats[playerlib.uniqueid(userid)]['items'][item]['Acquired'] = 1 player_stats[playerlib.uniqueid(userid)]['items'][item]['Uses'] = 50 def item_pickup(ev): item = ev['item'] if 'm3' in item or 'xm' in item: zeldaTell(ev['userid'], ['Shotguns can waste a LOT of MP! Careful!']) def boss(): global limitteams, teamswitch bossmenu = popuplib.create('bossmenu') bossmenu.addline('The Legend Of Zelda RPG') bossmenu.addline('BOSS FIGHT:') bossmenu.addline('A player is chosen at random to be the boss.') bossmenu.addline('They respawn after 15 seconds. Everyones\'') bossmenu.addline('job is to kill the boss. The boss gets unique') bossmenu.addline('features depending on the dungeon you are') bossmenu.addline('currently in. Sick together to eliminate the') bossmenu.addline('boss, because this is no easy task!!!') limitteams = es.ServerVar('mp_limitteams') teamswitch = es.ServerVar('mp_autoteambalance') es.ServerVar('mp_limitteams').set(0) es.ServerVar('mp_autoteambalance').set(0) for userid in es.getUseridList(): if not es.getplayerprop(userid, 'CBasePlayer.pl.deadflag'): es.server.queuecmd('est_team %s 3'%userid) es.server.queuecmd('est_spawn %s 1'%userid) gamethread.delayed(3, bossmenu.send, userid) gamethread.delayed(17, boss_choose) gamethread.delayed(2, zeldaMsg, (['Prepare for a #greenBOSS FIGHT: 15 sec'])) gamethread.delayed(7, zeldaMsg, (['Prepare for a #greenBOSS FIGHT: 10 sec'])) gamethread.delayed(12, zeldaMsg, (['Prepare for a #greenBOSS FIGHT: 5 sec'])) gamethread.delayed(14, zeldaMsg, (['Prepare for a #greenBOSS FIGHT: 3 sec'])) gamethread.delayed(15, zeldaMsg, (['Prepare for a #greenBOSS FIGHT: 2 sec'])) gamethread.delayed(16, zeldaMsg, (['Prepare for a #greenBOSS FIGHT: 1 sec'])) def boss_choose(): global player_stats eligible = [] for userid in es.getUseridList(): if not es.getplayerprop(userid, 'CBasePlayer.pl.deadflag'): eligible.append(userid) boss = random.choice(eligible) zeldaMsg(['%s is the boss!'%es.getplayername(boss)]) if 'Deku' in player_stats['Dungeon']: effect = 'spawn a bot after 5 sec' add_bots() if 'Death' in player_stats['Dungeon']: effect = 'burn players on attack' if 'Jabu' in player_stats['Dungeon']: effect = 'stun players on attack' if 'Forest' in player_stats['Dungeon']: effect = 'have a charge attack' if 'Fire' in player_stats['Dungeon']: effect = 'burn players on attack' if 'Water' in player_stats['Dungeon']: effect = 'freeze players on attack' if 'Shadow' in player_stats['Dungeon']: effect = 'are almost completely invisible' gamethread.delayed(2, es.server.queuecmd, ('est_setplayercolor %s 255 255 255 10 1'%boss)) if 'spirit' in player_stats['Dungeon']: effect = 'burn or freeze players on attack' zeldaTell(boss, ['You are the boss! You have 10000 HP, 100 MP, and %s!'%effect]) es.server.queuecmd('est_team %s %s'%(boss,random.randint(2,3))) es.server.queuecmd('est_spawn %s 1'%boss) es.server.queuecmd('est_team %s 2'%(boss)) x = 0 for userid in es.getUseridList(): if not es.getplayerprop(userid, "CBasePlayer.pl.deadflag"): x += 1 gamethread.delayed(1, es.setplayerprop, (boss, 'CBasePlayer.m_iHealth', 500 * x)) player_stats[playerlib.uniqueid(boss)]['MP'] = 100 es.ServerVar('boss').set(boss) boss_health() def boss_health(): gamethread.delayed(1, zeldaMsg, (['The boss has %s health left!'%es.getplayerprop(es.ServerVar('boss'), "CBasePlayer.m_iHealth")])) gamethread.delayedname(5, 'zeldaLoop', boss_health) def add_bots(): es.server.queuecmd('bot_add_t') gamethread.delayed(.1, es.server.queuecmd, ('est_teleport #bot %s'%es.ServerVar('boss'))) gamethread.delayedname(5, 'zeldaLoop', add_bots) def player_hurt(ev): if player_stats[playerlib.uniqueid(ev['attacker'])]['Equipped'] == "Biggoron's Sword" and player_stats[playerlib.uniqueid(ev['attacker'])]['items']['Biggoron\'s Sword']['Uses']: if not int(es.getplayerprop(ev['userid'], 'CBasePlayer.pl.deadflag')): Damage(ev['userid'], ev['attacker'], 1) if int(es.getplayerprop(ev['userid'], 'CBasePlayer.pl.deadflag')): player_stats[playerlib.uniqueid(ev['attacker'])]['Equipped'] == 0 zeldaTell(attacker, ['You have used the#lightgreen Biggoron\'s Sword!']) else: if player_stats[playerlib.uniqueid(ev['attacker'])]['Equipped'] == "Biggoron's Sword" and player_stats[playerlib.uniqueid(ev['attacker'])]['items']['Biggoron\'s Sword']['Uses'] == 0: player_stats[playerlib.uniqueid(ev['attacker'])]['Equipped'] = 0 if int(ev['attacker']) == int(es.ServerVar('boss')): if 'Death' in player_stats['Dungeon']: es.server.queuecmd('est_burn %s 1'%ev['userid']) if 'Jabu' in player_stats['Dungeon']: Stun(ev['userid'], 1) if 'Forest' in player_stats['Dungeon']: x, y, z = playerlib.getPlayer(ev['attacker']).get('viewvector') es.setplayerprop(ev['userid'], 'CBasePlayer.localdata.m_vecBaseVelocity', '%s,%s,%s'%(x * 800, y * 800, z * 800)) if 'Fire' in player_stats['Dungeon']: es.server.queuecmd('est_burn %s 2'%ev['userid']) if 'Water' in player_stats['Dungeon']: Freeze(ev['userid'], 1) if 'spirit' in player_stats['Dungeon']: if random.randint(1,2) == 1: Freeze(ev['userid'], 1.5) else: es.server.queuecmd('est_burn %s 2'%ev['userid']) def break_prop(ev): roll(ev['userid'])