def do_bash(peer, args, target, success): combat.start_combat_block() if success: peer.account.player.send( "You send %s flying with a powerful bash!?!?!?\n\r" % target.get_name(peer.account.player)) target.send("%s sends you flying with a powerful bash!\n\r" % peer.account.player.get_name()) _.send_to_room_except( "%s sends %s flying with a powerful bash!\n\r" % (peer.account.player.get_name(), target.get_name()), peer.account.player.get_room(), [peer, target.peer]) temp_damage = random.randint(2, 12) combat.do_damage(peer.account.player, target, temp_damage, "bash", False) combat.start_combat(peer.account.player, target) else: peer.account.player.send("You fall flat on your face!\n\r") target.send("%s falls flat on their face!\n\r" % peer.account.player.get_name()) _.send_to_room_except( "%s falls flat on their face!\n\r" % peer.account.player.get_name(), peer.account.player.get_room(), [peer, target.peer]) combat.end_combat_block()
def do_flag(hitter, victim, element): if not victim: return if random.randint(0, 10) > 5: return if "flaming" in element: victim.send("You are burned by " + hitter.get_name() + "'s flames.\n\r") hitter.send(victim.get_name() + " is burned by your flames.\n\r") _.send_to_room_except( victim.get_name() + "is burned by " + hitter.get_name() + "'s flames.\n\r", hitter.get_room(), [victim.peer, hitter.peer]) victim.damage(2) _.affect_list["blind"].apply_affect(victim, 1) if "shocking" in element: hitter.send( "You shock them with your weapon, but it doesn't seem to have any effect.\n\r" ) if "demon" in element: victim.send("You are stricken by the damnation of " + hitter.get_name() + ".\n\r") hitter.send(victim.get_name() + " is struck down by hellfire.\n\r") _.send_to_room_except( victim.get_name() + "is struck down by the damnation of " + hitter.get_name() + ".\n\r", hitter.get_room(), [victim.peer, hitter.peer]) victim.damage(2) _.affect_list["curse"].apply_affect(victim, 1)
def remove_affect(self): if self.remove_string_self != "": self.target.send(self.remove_string_self) if self.remove_string_others != "": _.send_to_room_except(self.remove_string_others % self.target.get_name(), self.target.get_room(), \ [self.target.peer,]) self.target.affects.remove(self)
def lost_concentration(self, char): import combat char.player.add_lag(self.lag) _.send_to_char(char, "You lost your concentration.\n\r") _.send_to_room_except("%s utters the words, '%s'.\n\r" % (char.player.get_name(), self.words), \ char.player.get_room(), [char,]) combat.end_combat_block()
def handle_death(self, villain): self.remove_from_combat() self.send("You have been KILLED!!\n\r", False) _.send_to_room_except("%s is DEAD!!\n\r" % self.get_name(), self.get_room(), [ self.peer, ]) if villain.has_peer(): for obj in self.inventory: villain.send("You get " + obj.get_name() + " from the corpse of " + self.get_name(villain) + "\n\r") villain.add_inventory(obj) print(self.stats) coins = int(self.stats["wealth"]) villain.change_wealth(coins) villain.send("You get " + str(coins % 100) + " silver coins and " + str(int(coins / 100)) + " gold coins from the corpse of " + self.get_name(villain) + "\n\r") part = self.stats["parts"][random.randint( 0, len(self.stats["parts"]) - 1)] villain.send( self.get_name(villain) + self.get_parts_string(part)) if villain.has_peer() and self.has_peer(): _.send_to_all("%s suffers defeat at the hands of %s.\n\r" % (self.get_name(), villain.get_name())) if self.has_peer(): self.set_position(_.POS_RESTING) self.stats["room"] = _.START_ROOM self.stats["hp"] = self.stats["max_hp"] else: _.mobiles.remove(self)
def parse_class(peer, input_string): import commands try: input_string = input_string.split()[0] except IndexError: peer.peer_send("\n\rThat's not a valid class. Choose from the following classes:\n\r" + str(_.class_list) + " ", False, True) return for c in _.class_list: if len(input_string) > 0 and input_string == c[:min(len(c), len(input_string))]: peer.account.player.stats["class"] = c peer.peer_send("\n\rWelcome to Redemption!\n\rPlease don't feed the mobiles.\n\r\n\r", False, True) # Save new character peer.account.player.peer = peer peer.account.players.append(peer.account.player.stats["name"]) print(str(peer.account.players)) peer.account.player.save() peer.account.save() peer.game_state = _.STATE_ONLINE _.mobiles.append(peer.account.player) _.send_to_room_except("%s has entered the game.\n\r" % peer.account.player.get_name(), peer.account.player.get_room(), [peer,]) commands.do_look(peer, "") break else: peer.peer_send("\n\rThat's not a valid class. Choose from the following classes:\n\r" + str(_.class_list) + " ", False, True)
def do_move(char, direction): temp_new_room_vnum = char.player.get_room().exits[direction] if temp_new_room_vnum is None: _.send_to_char(char, "You can't go that way.\n\r") return elif temp_new_room_vnum not in [x.vnum for x in _.rooms]: _.send_to_char(char, "Illegal room. Contact an immortal.\n\r") return dir_string = _.get_dir_string(direction) if "sneak" not in char.player.get_skills(): _.send_to_room_except( "%s leaves %s.\n\r" % (char.player.stats["name"], dir_string), char.player.get_room(), [ char, ]) char.player.stats["room"] = temp_new_room_vnum do_look(char, "") if "sneak" not in char.player.get_skills(): _.send_to_room_except( "%s has arrived.\n\r" % char.player.stats["name"], char.player.get_room(), [ char, ]) return
def do_wake(peer, args): import mobile temp_target = peer.account.player if len(args.split()) > 0: temp_target = mobile.get_mobile_in_room(args.split()[0], peer.account.player.get_room()) if temp_target is None: peer.account.player.send("They aren't here.\n\r") return temp_position = temp_target.get_position() if temp_target.affected_by(_.affect_list["sap"]): if temp_target is peer.account.player: peer.account.player.send("You can't wake up!\n\r") else: peer.account.player.send("They won't wake up!\n\r") return temp_vector = temp_target.peer if temp_position == _.POS_SLEEPING: temp_vector.peer_send("You wake and stand up.\n\r", False) _.send_to_room_except("%s wakes and stands up.\n\r" % temp_target.get_name(), temp_target.get_room(), [temp_vector,]) temp_target.set_position(_.POS_STANDING) do_look(temp_vector, "") elif temp_position == _.POS_RESTING and temp_target is peer.account.player: temp_vector.peer_send("You stand up.\n\r") _.send_to_room_except("%s stands up.\n\r" % temp_target.get_name(), temp_target.get_room(), [temp_vector,]) temp_target.set_position(_.POS_STANDING) else: if temp_target is peer.account.player: peer.account.player.send("You aren't sleeping.\n\r") else: peer.account.player.send("They aren't sleeping.\n\r")
def lost_concentration(self, peer): import combat peer.account.player.add_lag(self.lag) peer.account.player.send("You lost your concentration.\n\r") _.send_to_room_except("%s utters the words, '%s'.\n\r" % (peer.account.player.get_name(), self.words), \ peer.account.player.get_room(), [peer,]) combat.end_combat_block()
def spell_gate(peer, args, target): import commands try: target = mobile.get_mobile(args.split()[0]) except IndexError: peer.account.player.send( "You must provide a target for that spell.\n\r") return if target is None: peer.account.player.send("You can't find them.\n\r") return if target == peer.account.player: peer.account.player.send("You can't gate to yourself.\n\r") return peer.account.player.remove_from_combat() _.send_to_room_except( "%s steps through a gate and vanishes.\n\r" % peer.account.player.get_name(), peer.account.player.get_room(), [ peer, ]) peer.account.player.send("You step through a gate and vanish.\n\r") peer.account.player.stats["room"] = target.get_room().vnum _.send_to_room_except( "%s has arrived through a gate.\n\r" % peer.account.player.get_name(), peer.account.player.get_room(), [ peer, ]) commands.do_look(peer, "")
def do_hunt(peer, rgs, target, success): _.send_to_room_except(peer.account.player.get_name() + " sniffs the air.", peer.account.player.get_room(), [peer]) myroom = peer.account.player.get_room() destroom = target.get_room() if myroom == destroom: peer.account.player.send(target.get_name() + " is HERE!") return fringe = [] for i, j in myroom.exits.items(): if not j is None: fringe.append((get_room_by_vnum(j), i)) visited = [myroom] for room in fringe: if room[0] is None: #print("NONE") pass elif room[0] in visited: #print("VISITED") pass elif room[0] is destroom: #print("DESTINATION FOUND: ", _.get_dir_string(room[1])) peer.account.player.send(target.get_name() + " is " + _.get_dir_string(room[1]) + " of you.") return else: for i, j in room[0].exits.items(): if not j is None and not get_room_by_vnum(j) in visited: fringe.append((get_room_by_vnum(j), room[1])) visited.append(room[0])
def execute_spell(self, peer, args): # Check in_combat if peer.account.player.fighting is not None and not self.in_combat: peer.account.player.send( "You can't cast that spell in combat.\n\r") return # Find target if self.target_state == _.TARGET_SELF_ONLY: target = peer.account.player elif self.target_state == _.TARGET_PREFER_SELF: try: target = mobile.get_mobile_in_room( args.split()[0], peer.account.player.get_room()) if target == None: peer.account.player.send("They aren't here.\n\r") return except IndexError: target = peer.account.player elif self.target_state == _.TARGET_PREFER_FIGHTING: try: target = mobile.get_mobile_in_room( args.split()[0], peer.account.player.get_room()) if target == None: peer.account.player.send("They aren't here.\n\r") return except IndexError: if peer.account.player.fighting is None: peer.account.player.send("You aren't fighting anyone.\n\r") return else: target = peer.account.player.fighting elif self.target_state == _.TARGET_TARGET_ONLY: try: target = mobile.get_mobile_in_room( args.split()[0], peer.account.player.get_room()) if target == None: peer.account.player.send("They aren't here.\n\r") return except IndexError: peer.account.player.send("You must provide a target.\n\r") return else: target = None combat.start_combat_block() if self.aggro: combat.start_combat(peer.account.player, target) if random.randint( 0, 1 ) == 5: # -Rework- right now there's no chance of losing concentration self.lost_concentration(peer) return _.send_to_room_except("%s utters the words, '%s'.\n\r" % (peer.account.player.get_name(), self.words), \ peer.account.player.get_room(), [peer,]) self.function(peer, args, target) combat.end_combat_block() peer.account.player.add_lag(self.lag)
def apply_affect(self, target, duration): new_affect = copy.deepcopy(self) new_affect.target = target new_affect.duration = duration target.affects.append(new_affect) if self.apply_function is not None: self.apply_function(new_affect) target.send(self.apply_string_self) _.send_to_room_except(self.apply_string_others % target.get_name(), target.get_room(), [target.peer,])
def do_sleep(char, args): temp_position = char.player.get_position() if temp_position == _.POS_SLEEPING: _.send_to_char(char, "You're already asleep!\n\r") elif temp_position == _.POS_RESTING or temp_position == _.POS_STANDING: _.send_to_char(char, "You go to sleep.\n\r") _.send_to_room_except("%s goes to sleep.\n\r" % char.player.get_name(), char.player.get_room(), [char,]) char.player.set_position(_.POS_SLEEPING) elif temp_position == _.POS_FIGHTING: _.send_to_char(char, "You are still fighting!\n\r")
def do_sleep(peer, args): temp_position = peer.account.player.get_position() if temp_position == _.POS_SLEEPING: peer.account.player.send("You're already asleep!\n\r") elif temp_position == _.POS_RESTING or temp_position == _.POS_STANDING: peer.account.player.send("You go to sleep.\n\r") _.send_to_room_except("%s goes to sleep.\n\r" % peer.account.player.get_name(), peer.account.player.get_room(), [peer,]) peer.account.player.set_position(_.POS_SLEEPING) elif temp_position == _.POS_FIGHTING: peer.account.player.send("You are still fighting!\n\r")
def do_say(char, args): if args == "": _.send_to_char(char, "What do you want to say?\n\r") return _.send_to_char(char, "You say '%s'\n\r" % args) _.send_to_room_except( "%s says '%s'\n\r" % (char.player.stats["name"], args), char.player.get_room(), [ char, ])
def do_stand(peer, args): temp_position = peer.account.player.get_position() if temp_position == _.POS_SLEEPING: peer.account.player.send("You wake and stand up.\n\r") _.send_to_room_except("%s wakes and stands up.\n\r" % peer.account.player.get_name(), peer.account.player.get_room(), [peer,]) peer.account.player.set_position(_.POS_STANDING) elif temp_position == _.POS_RESTING: peer.account.player.send("You stand up.\n\r") _.send_to_room_except("%s stands up.\n\r" % peer.account.player.get_name(), peer.account.player.get_room(), [peer,]) peer.account.player.set_position(_.POS_STANDING) elif temp_position == _.POS_FIGHTING or temp_position == _.POS_STANDING: peer.account.player.send("You are already standing.\n\r")
def handle_death(self, villain): self.remove_from_combat() _.send_to_char(self.get_peer(), "You have been KILLED!!\n\r", False) _.send_to_room_except("%s is DEAD!!\n\r" % self.get_name(), self.get_room(), [self.get_peer(),]) if villain.has_peer() and self.has_peer(): _.send_to_all("%s suffers defeat at the hands of %s.\n\r" % (self.get_name(), villain.get_name())) if self.has_peer(): self.set_position(_.POS_RESTING) self.stats["room"] = _.START_ROOM self.stats["hp"] = self.stats["max_hp"] else: _.mobiles.remove(self)
def do_stand(char, args): temp_position = char.player.get_position() if temp_position == _.POS_SLEEPING: _.send_to_char(char, "You wake and stand up.\n\r") _.send_to_room_except("%s wakes and stands up.\n\r" % char.player.get_name(), char.player.get_room(), [char,]) char.player.set_position(_.POS_STANDING) elif temp_position == _.POS_RESTING: _.send_to_char(char, "You stand up.\n\r") _.send_to_room_except("%s stands up.\n\r" % char.player.get_name(), char.player.get_room(), [char,]) char.player.set_position(_.POS_STANDING) elif temp_position == _.POS_FIGHTING or temp_position == _.POS_STANDING: _.send_to_char(char, "You are already standing.\n\r")
def execute_spell(self, peer, args): # Check in_combat if peer.account.player.fighting is not None and not self.in_combat: peer.account.player.send("You can't cast that spell in combat.\n\r") return # Find target if self.target_state == _.TARGET_SELF_ONLY: target = peer.account.player elif self.target_state == _.TARGET_PREFER_SELF: try: target = mobile.get_mobile_in_room(args.split()[0], peer.account.player.get_room()) if target == None: peer.account.player.send("They aren't here.\n\r") return except IndexError: target = peer.account.player elif self.target_state == _.TARGET_PREFER_FIGHTING: try: target = mobile.get_mobile_in_room(args.split()[0], peer.account.player.get_room()) if target == None: peer.account.player.send("They aren't here.\n\r") return except IndexError: if peer.account.player.fighting is None: peer.account.player.send("You aren't fighting anyone.\n\r") return else: target = peer.account.player.fighting elif self.target_state == _.TARGET_TARGET_ONLY: try: target = mobile.get_mobile_in_room(args.split()[0], peer.account.player.get_room()) if target == None: peer.account.player.send("They aren't here.\n\r") return except IndexError: peer.account.player.send("You must provide a target.\n\r") return else: target = None combat.start_combat_block() if self.aggro: combat.start_combat(peer.account.player, target) if random.randint(0,1) == 5: # -Rework- right now there's no chance of losing concentration self.lost_concentration(peer) return _.send_to_room_except("%s utters the words, '%s'.\n\r" % (peer.account.player.get_name(), self.words), \ peer.account.player.get_room(), [peer,]) self.function(peer, args, target) combat.end_combat_block() peer.account.player.add_lag(self.lag)
def do_sleep(char, args): temp_position = char.player.get_position() if temp_position == _.POS_SLEEPING: _.send_to_char(char, "You're already asleep!\n\r") elif temp_position == _.POS_RESTING or temp_position == _.POS_STANDING: _.send_to_char(char, "You go to sleep.\n\r") _.send_to_room_except("%s goes to sleep.\n\r" % char.player.get_name(), char.player.get_room(), [ char, ]) char.player.set_position(_.POS_SLEEPING) elif temp_position == _.POS_FIGHTING: _.send_to_char(char, "You are still fighting!\n\r")
def do_flee(char, args): import combat if char.player.fighting is None: _.send_to_char(char, "You aren't fighting anyone.\n\r") return if char.player.get_room().random_exit() is None or random.randint(0,4) == 0: _.send_to_char(char, "PANIC! You couldn't escape!\n\r") return else: combat.start_combat_block() _.send_to_char(char, "You flee from combat!\n\r") # -Rework- to make you flee out of the room _.send_to_room_except("%s has fled!\n\r" % char.player.get_name(), char.player.get_room(), [char,]) char.player.remove_from_combat() do_move(char, char.player.get_room().random_exit()) combat.end_combat_block()
def do_wake(char, args): temp_position = char.player.get_position() if char.player.affected_by(_.affect_list["sap"]): _.send_to_char(char, "You can't wake up!\n\r") return if temp_position == _.POS_SLEEPING: _.send_to_char(char, "You wake and stand up.\n\r") _.send_to_room_except("%s wakes and stands up.\n\r" % char.player.get_name(), char.player.get_room(), [char,]) char.player.set_position(_.POS_STANDING) elif temp_position == _.POS_RESTING: _.send_to_char(char, "You stand up.\n\r") _.send_to_room_except("%s stands up.\n\r" % char.player.get_name(), char.player.get_room(), [char,]) char.player.set_position(_.POS_STANDING) else: _.send_to_char(char, "You aren't sleeping.\n\r")
def do_flee(peer, args): import combat if peer.account.player.fighting is None: peer.account.player.send("You aren't fighting anyone.\n\r") return if peer.account.player.get_room().random_exit() is None or random.randint(0,4) == 0: peer.account.player.send("PANIC! You couldn't escape!\n\r") return else: combat.start_combat_block() peer.account.player.send("You flee from combat!\n\r") # -Rework- to make you flee out of the room _.send_to_room_except("%s has fled!\n\r" % peer.account.player.get_name(), peer.account.player.get_room(), [peer,]) peer.account.player.remove_from_combat() do_move(peer, peer.account.player.get_room().random_exit()) combat.end_combat_block()
def do_drop(char, args): import item try: target = args.split()[0] except IndexError: _.send_to_char(char, "Drop what?\n\r") return try: temp_item = item.get_item_in_inventory(char, target) _.send_to_char(char, "You drop %s.\n\r" % temp_item.get_name()) _.send_to_room_except("%s drops %s.\n\r" % (char.player.get_name(), temp_item.get_name()), char.player.get_room(), [char,]) char.player.get_room().add_item(temp_item) char.player.remove_item(temp_item) except AttributeError: _.send_to_char(char, "You're not carrying that.\n\r")
def do_rest(char, args): temp_position = char.player.get_position() if temp_position == _.POS_SLEEPING: _.send_to_char(char, "You wake up and start resting.\n\r") _.send_to_room_except("%s wakes up and starts resting.\n\r" % char.player.get_name(), char.player.get_room(), [char,]) char.player.set_position(_.POS_RESTING) elif temp_position == _.POS_RESTING: _.send_to_char(char, "You are already resting.\n\r") elif temp_position == _.POS_STANDING: _.send_to_char(char, "You rest.\n\r") _.send_to_room_except("%s rests.\n\r" % char.player.get_name(), char.player.get_room(), [char,]) char.player.set_position(_.POS_RESTING) elif temp_position == _.POS_STANDING: _.send_to_char(char, "You are still fighting!\n\r")
def do_drop(peer, args): import item try: target = args.split()[0] except IndexError: peer.account.player.send("Drop what?\n\r") return try: temp_item = item.get_item_in_inventory(peer, target) peer.account.player.send("You drop %s.\n\r" % temp_item.get_name()) _.send_to_room_except("%s drops %s.\n\r" % (peer.account.player.get_name(), temp_item.get_name()), peer.account.player.get_room(), [peer,]) peer.account.player.get_room().add_item(temp_item) peer.account.player.remove_item(temp_item) except AttributeError: peer.account.player.send("You're not carrying that.\n\r")
def do_remove(peer, args): import item try: target = args.split()[0] except IndexError: peer.account.player.send("Remove what?\n\r") return try: temp_slot = item.get_item_slot_in_equipment(peer, target) peer.account.player.send("You stop using %s.\n\r" % peer.account.player.equipment[temp_slot].get_name()) _.send_to_room_except("%s stops using %s.\n\r" % (peer.account.player.get_name(), peer.account.player.equipment[temp_slot].get_name()), \ peer.account.player.get_room(), [peer,]) peer.account.player.add_item(peer.account.player.equipment[temp_slot]) peer.account.player.equipment[temp_slot] = None except KeyError: peer.account.player.send("You're not wearing that.\n\r")
def do_damage(hitter, victim, damage, noun, magical): dam_adjective, dam_verb, dam_tag = get_damage_string(damage, magical) _.send_to_char(hitter.get_peer(), "Your %s%s %s %%s%s (%s)\n\r" % (dam_adjective, noun, dam_verb, dam_tag, damage), True, False, [victim, ]) try: _.send_to_char(hitter.fighting.get_peer(), "%s's %s%s %s you%s (%s)\n\r" % (hitter.get_name(victim).capitalize(), dam_adjective, noun, dam_verb, dam_tag, damage)) except AttributeError: pass _.send_to_room_except("%%s's %s%s %s %%s%s (%s)\n\r" % (dam_adjective, noun, dam_verb, dam_tag, damage) , hitter.get_room(), [hitter.get_peer(), victim.get_peer()], [hitter, victim]) victim.damage(damage) # -Debug- only, should be victim.damage(damage) if victim.is_dead(): victim.handle_death(hitter) hitter.handle_kill(victim)
def do_rest(peer, args): temp_position = peer.account.player.get_position() if temp_position == _.POS_SLEEPING: peer.account.player.send("You wake up and start resting.\n\r", False) _.send_to_room_except("%s wakes up and starts resting.\n\r" % peer.account.player.get_name(), peer.account.player.get_room(), [peer,]) peer.account.player.set_position(_.POS_RESTING) do_look(peer, "") elif temp_position == _.POS_RESTING: peer.account.player.send("You are already resting.\n\r") elif temp_position == _.POS_STANDING: peer.account.player.send("You rest.\n\r") _.send_to_room_except("%s rests.\n\r" % peer.account.player.get_name(), peer.account.player.get_room(), [peer,]) peer.account.player.set_position(_.POS_RESTING) elif temp_position == _.POS_STANDING: peer.account.player.send("You are still fighting!\n\r")
def do_remove(char, args): import item try: target = args.split()[0] except IndexError: _.send_to_char(char, "Remove what?\n\r") return try: temp_slot = item.get_item_slot_in_equipment(char, target) _.send_to_char(char, "You stop using %s.\n\r" % char.player.equipment[temp_slot].get_name()) _.send_to_room_except("%s stops using %s.\n\r" % (char.player.get_name(), char.player.equipment[temp_slot].get_name()), \ char.player.get_room(), [char,]) char.player.add_item(char.player.equipment[temp_slot]) char.player.equipment[temp_slot] = None except KeyError: _.send_to_char(char, "You're not wearing that.\n\r")
def do_move(char, direction): temp_new_room_vnum = char.player.get_room().exits[direction] if temp_new_room_vnum is None: _.send_to_char(char, "You can't go that way.\n\r") return elif temp_new_room_vnum not in [x.vnum for x in _.rooms]: _.send_to_char(char, "Illegal room. Contact an immortal.\n\r") return dir_string = _.get_dir_string(direction) if "sneak" not in char.player.get_skills(): _.send_to_room_except("%s leaves %s.\n\r" % (char.player.stats["name"], dir_string), char.player.get_room(), [char,]) char.player.stats["room"] = temp_new_room_vnum do_look(char, "") if "sneak" not in char.player.get_skills(): _.send_to_room_except("%s has arrived.\n\r" % char.player.stats["name"], char.player.get_room(), [char,]) return
def do_remove(char, args): import item try: target = args.split()[0] except IndexError: _.send_to_char(char, "Remove what?\n\r") return try: temp_slot = item.get_item_slot_in_equipment(char, target) _.send_to_char( char, "You stop using %s.\n\r" % char.player.equipment[temp_slot].get_name()) _.send_to_room_except("%s stops using %s.\n\r" % (char.player.get_name(), char.player.equipment[temp_slot].get_name()), \ char.player.get_room(), [char,]) char.player.add_item(char.player.equipment[temp_slot]) char.player.equipment[temp_slot] = None except KeyError: _.send_to_char(char, "You're not wearing that.\n\r")
def do_stand(char, args): temp_position = char.player.get_position() if temp_position == _.POS_SLEEPING: _.send_to_char(char, "You wake and stand up.\n\r") _.send_to_room_except( "%s wakes and stands up.\n\r" % char.player.get_name(), char.player.get_room(), [ char, ]) char.player.set_position(_.POS_STANDING) elif temp_position == _.POS_RESTING: _.send_to_char(char, "You stand up.\n\r") _.send_to_room_except("%s stands up.\n\r" % char.player.get_name(), char.player.get_room(), [ char, ]) char.player.set_position(_.POS_STANDING) elif temp_position == _.POS_FIGHTING or temp_position == _.POS_STANDING: _.send_to_char(char, "You are already standing.\n\r")
def do_elemental(hitter, victim, element): if not victim: return if random.randint(0,10) > 5: return if "fire" in element: _.send_to_char(victim.get_peer(), "You are burned by " + hitter.get_name() + "'s flames.\n\r") _.send_to_char(hitter.get_peer(), victim.get_name() + " is burned by your flames.\n\r") _.send_to_room_except(victim.get_name() + "is burned by " + hitter.get_name() + "'s flames.\n\r",hitter.get_room(),[victim.get_peer(), hitter.get_peer()]) victim.damage(2) _.affect_list["blind"].apply_affect(victim,1) if "shocking" in element: _.send_to_char(hitter.get_peer(), "You shock them with your weapon, but it doesn't seem to have any effect.\n\r") if "demon" in element: _.send_to_char(victim.get_peer(), "You are stricken by the damnation of " + hitter.get_name() + ".\n\r") _.send_to_char(hitter.get_peer(), victim.get_name() + " is struck down by hellfire.\n\r") _.send_to_room_except(victim.get_name() + "is struck down by the damnation of " + hitter.get_name() + ".\n\r",hitter.get_room(),[victim.get_peer(), hitter.get_peer()]) victim.damage(2) _.affect_list["curse"].apply_affect(victim,1)
def do_get(peer, args): import item temp_room = peer.account.player.get_room() try: target = args.split()[0] except IndexError: peer.account.player.send("Get what?\n\r") return if len(peer.account.player.inventory) >= _.MAX_CARRY: peer.account.player.send("You can't carry any more.\n\r") return temp_item = item.get_item_in_room(temp_room, target) if temp_item is None: peer.account.player.send("You don't see that here.\n\r") return peer.account.player.send("You get %s.\n\r" % temp_item.get_name()) _.send_to_room_except("%s gets %s.\n\r" % (peer.account.player.get_name(), temp_item.get_name()), peer.account.player.get_room(), [peer,]) temp_room.remove_item(temp_item) peer.account.player.add_item(temp_item)
def do_get(char, args): import item temp_room = char.player.get_room() try: target = args.split()[0] except IndexError: _.send_to_char(char, "Get what?\n\r") return if len(char.player.inventory) >= _.MAX_CARRY: _.send_to_char(char, "You can't carry any more.\n\r") return temp_item = item.get_item_in_room(temp_room, target) if temp_item is None: _.send_to_char(char, "You don't see that here.\n\r") return _.send_to_char(char, "You get %s.\n\r" % temp_item.get_name()) _.send_to_room_except("%s gets %s.\n\r" % (char.player.get_name(), temp_item.get_name()), char.player.get_room(), [char,]) temp_room.remove_item(temp_item) char.player.add_item(temp_item)
def do_damage(hitter, victim, damage, noun, magical): dam_adjective, dam_verb, dam_tag = get_damage_string(damage, magical) hitter.send( "Your %s%s %s %%s%s (%s)\n\r" % (dam_adjective, noun, dam_verb, dam_tag, damage), True, False, [ victim, ]) try: hitter.fighting.send("%s's %s%s %s you%s (%s)\n\r" % (hitter.get_name(victim).capitalize(), dam_adjective, noun, dam_verb, dam_tag, damage)) except AttributeError: pass _.send_to_room_except( "%%s's %s%s %s %%s%s (%s)\n\r" % (dam_adjective, noun, dam_verb, dam_tag, damage), hitter.get_room(), [hitter.peer, victim.peer], [hitter, victim]) victim.damage(damage) # -Debug- only, should be victim.damage(damage) if victim.is_dead(): victim.handle_death(hitter) hitter.handle_kill(victim)
def do_rest(char, args): temp_position = char.player.get_position() if temp_position == _.POS_SLEEPING: _.send_to_char(char, "You wake up and start resting.\n\r") _.send_to_room_except( "%s wakes up and starts resting.\n\r" % char.player.get_name(), char.player.get_room(), [ char, ]) char.player.set_position(_.POS_RESTING) elif temp_position == _.POS_RESTING: _.send_to_char(char, "You are already resting.\n\r") elif temp_position == _.POS_STANDING: _.send_to_char(char, "You rest.\n\r") _.send_to_room_except("%s rests.\n\r" % char.player.get_name(), char.player.get_room(), [ char, ]) char.player.set_position(_.POS_RESTING) elif temp_position == _.POS_STANDING: _.send_to_char(char, "You are still fighting!\n\r")
def do_wake(char, args): temp_position = char.player.get_position() if char.player.affected_by(_.affect_list["sap"]): _.send_to_char(char, "You can't wake up!\n\r") return if temp_position == _.POS_SLEEPING: _.send_to_char(char, "You wake and stand up.\n\r") _.send_to_room_except( "%s wakes and stands up.\n\r" % char.player.get_name(), char.player.get_room(), [ char, ]) char.player.set_position(_.POS_STANDING) elif temp_position == _.POS_RESTING: _.send_to_char(char, "You stand up.\n\r") _.send_to_room_except("%s stands up.\n\r" % char.player.get_name(), char.player.get_room(), [ char, ]) char.player.set_position(_.POS_STANDING) else: _.send_to_char(char, "You aren't sleeping.\n\r")
def spell_gate(peer, args, target): import commands try: target = mobile.get_mobile(args.split()[0]) except IndexError: peer.account.player.send("You must provide a target for that spell.\n\r") return if target is None: peer.account.player.send("You can't find them.\n\r") return if target == peer.account.player: peer.account.player.send("You can't gate to yourself.\n\r") return peer.account.player.remove_from_combat() _.send_to_room_except("%s steps through a gate and vanishes.\n\r" % peer.account.player.get_name(), peer.account.player.get_room(), [peer,]) peer.account.player.send("You step through a gate and vanish.\n\r") peer.account.player.stats["room"] = target.get_room().vnum _.send_to_room_except("%s has arrived through a gate.\n\r" % peer.account.player.get_name(), peer.account.player.get_room(), [peer,]) commands.do_look(peer, "")
def handle_death(self, villain): self.remove_from_combat() self.send("You have been KILLED!!\n\r", False) _.send_to_room_except("%s is DEAD!!\n\r" % self.get_name(), self.get_room(), [self.peer,]) if villain.has_peer(): for obj in self.inventory: villain.send("You get " + obj.get_name() + " from the corpse of " + self.get_name(villain) + "\n\r") villain.add_inventory(obj) print(self.stats) coins = int(self.stats["wealth"]) villain.change_wealth(coins) villain.send("You get " + str(coins % 100) + " silver coins and " + str(int(coins / 100)) + " gold coins from the corpse of " + self.get_name(villain) + "\n\r") part = self.stats["parts"][random.randint(0,len(self.stats["parts"]) - 1)] villain.send(self.get_name(villain) + self.get_parts_string(part)) if villain.has_peer() and self.has_peer(): _.send_to_all("%s suffers defeat at the hands of %s.\n\r" % (self.get_name(), villain.get_name())) if self.has_peer(): self.set_position(_.POS_RESTING) self.stats["room"] = _.START_ROOM self.stats["hp"] = self.stats["max_hp"] else: _.mobiles.remove(self)
def parse_class(peer, input_string): import commands try: input_string = input_string.split()[0] except IndexError: peer.peer_send( "\n\rThat's not a valid class. Choose from the following classes:\n\r" + str(_.class_list) + " ", False, True) return for c in _.class_list: if len(input_string ) > 0 and input_string == c[:min(len(c), len(input_string))]: peer.account.player.stats["class"] = c peer.peer_send( "\n\rWelcome to Redemption!\n\rPlease don't feed the mobiles.\n\r\n\r", False, True) # Save new character peer.account.player.peer = peer peer.account.players.append(peer.account.player.stats["name"]) print(str(peer.account.players)) peer.account.player.save() peer.account.save() peer.game_state = _.STATE_ONLINE _.mobiles.append(peer.account.player) _.send_to_room_except( "%s has entered the game.\n\r" % peer.account.player.get_name(), peer.account.player.get_room(), [ peer, ]) commands.do_look(peer, "") break else: peer.peer_send( "\n\rThat's not a valid class. Choose from the following classes:\n\r" + str(_.class_list) + " ", False, True)
def wield_weapon(self, weapon): # -Rework- for brevity peer = self.peer if self.equipment[_.WEAR_WEAPON] is None: # Easy, just remove from inventory and equip to that slot self.equipment[_.WEAR_WEAPON] = weapon self.inventory.remove(weapon) # Eventually we will add messages better tailored to the slot being used peer.account.player.send("You wield %s.\n\r" % weapon.get_name()) _.send_to_room_except("%s wields %s.\n\r" % (self.get_name(), weapon.get_name()), \ self.get_room(), [peer,]) # No luck, so we just remove the item at the given slot and add the new item # Easy, just remove from inventory and equip to that slot else: self.inventory.append(self.equipment[_.WEAR_WEAPON]) peer.account.player.send("You stop using %s.\n\r" % self.equipment[_.WEAR_WEAPON].get_name()) _.send_to_room_except("%s stops using %s.\n\r" % (self.get_name(), self.equipment[_.WEAR_WEAPON].get_name()), \ self.get_room(), [peer,]) self.equipment[_.WEAR_WEAPON] = weapon self.inventory.remove(weapon) peer.account.player.send("You wield %s.\n\r" % weapon.get_name()) _.send_to_room_except("%s wields %s.\n\r" % (self.get_name(), weapon.get_name()), \ self.get_room(), [peer,])
def do_say(peer, args): if args == "": peer.account.player.send("What do you want to say?\n\r") return peer.account.player.send("{yYou say '%s'{x\n\r" % args) _.send_to_room_except("{y%s says '%s'{x\n\r" % (peer.account.player.stats["name"], args), peer.account.player.get_room(),[peer,])
def wear_armor(self, armor): # -Rework- for brevity # Presumes an item in your inventory peer = self.peer if len(armor.wear_loc) <= 0: self.send("You cannot wear this item.\n\r") return for w in armor.wear_loc: temp_loc = int(w) if temp_loc == _.WEAR_WEAPON: self.wield_weapon(armor) return # Check if there's an open slot if self.equipment[temp_loc] is None: # Easy, just remove from inventory and equip to that slot self.equipment[temp_loc] = armor self.inventory.remove(armor) # Eventually we will add messages better tailored to the slot being used peer.account.player.send("You wear %s on your %s.\n\r" % (armor.get_name(), armor.wear_loc_string())) _.send_to_room_except("%s wears %s on their %s.\n\r" % (self.get_name(), armor.get_name(), armor.wear_loc_string()), \ self.get_room(), [peer,]) return # For a few items, check for a second open slot as well if temp_loc == _.WEAR_WRIST: if self.equipment[_.WEAR_WRIST2] is None: # Easy, just remove from inventory and equip to that slot self.equipment[_.WEAR_WRIST2] = armor self.inventory.remove(armor) # Eventually we will add messages better tailored to the slot being used peer.account.player.send("You wear %s on your %s.\n\r" % (armor.get_name(), armor.wear_loc_string())) _.send_to_room_except("%s wears %s on their %s.\n\r" % (self.get_name(), armor.get_name(), armor.wear_loc_string()), \ self.get_room(), [peer,]) return if temp_loc == _.WEAR_FLOAT: if self.equipment[_.WEAR_FLOAT2] is None: # Easy, just remove from inventory and equip to that slot self.equipment[_.WEAR_FLOAT2] = armor self.inventory.remove(armor) # Eventually we will add messages better tailored to the slot being used peer.account.player.send("You wear %s on your %s.\n\r" % (armor.get_name(), armor.wear_loc_string())) _.send_to_room_except("%s wears %s on their %s.\n\r" % (self.get_name(), armor.get_name(), armor.wear_loc_string()), \ self.get_room(), [peer,]) return if temp_loc == _.WEAR_FINGER: if self.equipment[_.WEAR_FINGER2] is None: # Easy, just remove from inventory and equip to that slot self.equipment[_.WEAR_FINGER2] = armor self.inventory.remove(armor) # Eventually we will add messages better tailored to the slot being used peer.account.player.send("You wear %s on your %s.\n\r" % (armor.get_name(), armor.wear_loc_string())) _.send_to_room_except("%s wears %s on their %s.\n\r" % (self.get_name(), armor.get_name(), armor.wear_loc_string()), \ self.get_room(), [peer,]) return if temp_loc == _.WEAR_NECK: if self.equipment[_.WEAR_NECK2] is None: # Easy, just remove from inventory and equip to that slot self.equipment[_.WEAR_NECK2] = armor self.inventory.remove(armor) # Eventually we will add messages better tailored to the slot being used peer.account.player.send("You wear %s on your %s.\n\r" % (armor.get_name(), armor.wear_loc_string())) _.send_to_room_except("%s wears %s on their %s.\n\r" % (self.get_name(), armor.get_name(), armor.wear_loc_string()), \ self.get_room(), [peer,]) return # No luck, so we just remove the item at the given slot and add the new item # Easy, just remove from inventory and equip to that slot self.inventory.append(self.equipment[temp_loc]) peer.account.player.send("You stop using %s.\n\r" % self.equipment[temp_loc].get_name()) _.send_to_room_except("%s stops using %s.\n\r" % (self.get_name(), self.equipment[temp_loc].get_name()), \ self.get_room(), [peer,]) self.equipment[temp_loc] = armor self.inventory.remove(armor) # Eventually we will add messages better tailored to the slot being used peer.account.player.send("You wear %s on your %s.\n\r" % (armor.get_name(), armor.wear_loc_string())) _.send_to_room_except("%s wears %s on their %s.\n\r" % (self.get_name(), armor.get_name(), armor.wear_loc_string()), \ self.get_room(), [peer,])
def do_say(char, args): if args == "": _.send_to_char(char, "What do you want to say?\n\r") return _.send_to_char(char, "You say '%s'\n\r" % args) _.send_to_room_except("%s says '%s'\n\r" % (char.player.stats["name"], args), char.player.get_room(),[char,])