def func(self): if (self.caller.db.conscious == 1): self.caller.db.target = self.caller.search(self.args) self.caller.db.target.db.target = self.caller self.caller.msg("|/|rYou try to attack %s" % (self.caller.db.target)) self.caller.db.target.msg("|/|r%s tries to attack you" % (self.caller)) init_a = self.caller.db.dexterity + self.caller.db.wits init_b = self.caller.db.target.db.dexterity + self.caller.db.target.db.wits init_a = init_a + roll_dice(1, 10) init_b = init_b + roll_dice(1, 10) if (init_a > init_b): self.caller.msg("|/|yYou get the jump on %s." % (self.caller.db.target)) self.caller.db.target.msg("|/|y%s gets the jump on you." % (self.caller)) EvMenu(self.caller, "typeclasses.menu", startnode="attack_node", cmd_on_exit=None) else: self.caller.db.target.msg("|/|yYou get the jump on %s." % (self.caller)) self.caller.msg("|/|y%s gets the jump on you." % (self.caller.db.target)) EvMenu(self.caller.db.target, "typeclasses.menu", startnode="attack_node", cmd_on_exit=None) else: self.caller.msg("You can't do that while unconscious.")
def mercy(caller): caller.db.start_time = 99999999999999999999999 init_a = caller.db.dexterity + caller.db.wits + caller.db.blessed + caller.db.charisma caller.db.target.msg("|/|y%s doesn't want to fight." % caller) init_b = caller.db.target.db.dexterity + caller.db.target.db.wits init_a = init_a + roll_dice(1,10) init_b = init_b + roll_dice(1,10) if(init_a > init_b): caller.msg("|/|yYou beg %s for mercy!|/|/" % caller.db.target) caller.db.target.msg("|/|y%s cries for mercy!|/|/" % caller) players = [con for con in caller.location.contents if con.has_player] caller.db.target.ndb._menutree.close_menu() caller.ndb._menutree.close_menu() caller.ndb.end_combat = 0 caller.db.target.ndb.end_combat = 0 else: caller.msg("|yYour cries for mercy go unheard.") caller.db.target.msg("|y%s's cries for mercy go unheard" % caller) if(caller.db.target.db.weapon == 1): caller.msg("|/|g%s causes %i points of lethal damage." % (caller.db.target, damage)) caller.msg("|/|gYou lose a total of %i health points." % (damage)) caller.db.lethal = caller.db.lethal + damage caller.db.target.msg("|/|gYou deal %i points of lethal damage with your attack." % (damage)) caller.db.target.msg("|/|g%s loses a total of %i hit points." % (caller, damaga)) if(caller.db.target.db.weapon == 0): caller.msg("|/|g%s causes %i points of bashing damage to you." % (caller.db.target, damage)) caller.msg("|/|gYou lose a total of %i health points." % (damage)) caller.db.bashing = caller.db.bashing + damage caller.db.target.msg("|/|gYou deal %i points of bashing damage with your attack." % (damage)) caller.db.target.msg("|/|g%s loses a total of %i hit points." % (caller, damage)) EvMenu(caller, "typeclasses.menu", startnode="attack_node", auto_quit=False, cmd_on_exit=None) text = "" options = () return text, options
def test_roll_dice(self, mocked_randint): # we must import dice here for the mocked randint to apply correctly. from evennia.contrib import dice self.assertEqual(dice.roll_dice(6, 6, modifier=('+', 4)), mocked_randint() * 6 + 4) self.assertEqual(dice.roll_dice(6, 6, conditional=('<', 35)), True) self.assertEqual(dice.roll_dice(6, 6, conditional=('>', 33)), False)
def mercy_attack(caller): caller.db.start_time = 99999999999999999999999 if caller.db.attack_not: init_a = caller.db.dexterity + caller.db.wits + caller.db.blessed + caller.db.charisma caller.db.target.msg("|/|y%s doesn't want to fight." % caller) else: init_a = caller.db.dexterity + caller.db.wits + caller.db.blessed init_b = caller.db.target.db.dexterity + caller.db.target.db.wits init_a = init_a + roll_dice(1,10) init_b = init_b + roll_dice(1,10) if(init_a > init_b): caller.msg("|/|yYou beg %s for mercy|/|/" % caller.db.target) caller.db.target.msg("|/|y%s begs for mercy!|/|/" % caller) if(caller.ndb._menutree): caller.ndb._menutree.close_menu() if(caller.db.target.ndb._menutree): caller.db.target.ndb._menutree.close_menu() caller.ndb.end_combat = 0 caller.db.target.ndb.end_combat = 0 else: caller.msg("|/|yYou're cries for mercy go unheard.") caller.db.target.msg("|/|yYou ignore %s's cries for mercy " % caller) EvMenu(caller.db.target, "typeclasses.menu", startnode="attack_node", auto_quit=False, cmd_on_exit=None) text = "" options = ({"key": "skip", "goto": "skip_attack"}) return text, options text = "" options = () return text, options
def func(self): self.caller.db.target = self.caller.search(self.args) self.caller.db.target.db.target = self.caller if self.caller.db.invis: self.caller.msg("You have become visibile.") self.caller.db.invis = 0 if self.caller.db.target.db.invis: self.caller.msg("You have become visibile.") self.caller.db.target.db.invis = 0 if not self.caller.db.target.ndb.end_combat and self.caller.db.target.db.alive and self.caller.db.alive: self.caller.ndb.end_combat = 1 self.caller.db.target.ndb.end_combat = 1 if (self.caller.db.conscious == 1): self.caller.msg("|/|rYou try to attack %s" % (self.caller.db.target)) self.caller.db.target.msg("|/|r%s tries to attack you" % (self.caller)) init_a = self.caller.db.dexterity + self.caller.db.wits init_b = self.caller.db.target.db.dexterity + self.caller.db.target.db.wits self.caller.msg(init_a) self.caller.msg(init_b) init_a = init_a + roll_dice(1, 10) + 2 init_b = init_b + roll_dice(1, 10) self.caller.msg(init_a) self.caller.msg(init_b) if (init_a > init_b): self.caller.db.attacking = 1 self.caller.db.target.db.attacking = 0 self.caller.msg("|/|yYou get the jump on %s." % (self.caller.db.target)) self.caller.db.target.msg("|/|y%s gets the jump on you." % (self.caller)) EvMenu(self.caller, "typeclasses.menu", startnode="attack_node", cmd_on_exit=None) else: self.caller.db.attacking = 0 self.caller.db.target.db.attacking = 1 self.caller.db.target.msg("|/|yYou get the jump on %s." % (self.caller)) self.caller.msg("|/|y%s gets the jump on you." % (self.caller.db.target)) EvMenu(self.caller.db.target, "typeclasses.menu", startnode="attack_node", cmd_on_exit=None) else: self.caller.msg("You can't do that while unconscious.") else: if self.caller.db.target.ndb.end_combat: self.caller.msg("They are already in a fight.") if self.caller.db.target.db.alive == 0: self.caller.msg("They are already dead.") else: self.caller.msg("You have to be alive to do that.") return
def katana(caller): caller.db.weapon = 1 test = caller.db.dexterity + caller.db.melee counter = 0 attackpoints = 0 while (counter < test): counter = counter + 1 roll = roll_dice(1, 10) if (roll >= 6): attackpoints = attackpoints + 1 global damage damage = attackpoints hit = caller.db.strength + 3 counter = 0 attackpoints2 = 0 while (counter < hit): counter = counter + 1 roll = roll_dice(1, 10) if (roll >= 6): attackpoints2 = attackpoints2 + 1 global damage2 damage2 = attackpoints2 caller.db.start_time = 99999999999999999999999 if (attackpoints > 0): caller.msg("|/|gYou strike %s with %i success rolls. " % (caller.db.target, attackpoints)) caller.db.target.msg( "|/|g%s attempts to strike you with %i succesful rolls." % (caller, attackpoints)) EvMenu(caller.db.target, "typeclasses.menu", startnode="defend_node", auto_quit=False, cmd_on_exit=None) else: caller.msg("|/|gYou miss %s." % caller.db.target) caller.db.target.msg("|/|g%s strikes, but misses you." % caller) EvMenu(caller.db.target, "typeclasses.menu", startnode="attack_node", auto_quit=False, cmd_on_exit=None) text = "" options = ({"key": "skip", "goto": "skip_attack"}) return text, options
def katana(caller): caller.db.attack_not = 0 caller.db.weapon = 1 test = caller.db.dexterity + caller.db.melee + caller.db.blessed counter = 0 attackpoints = 0 while(counter < test): counter = counter + 1 roll = roll_dice(1,10) if(roll >= 6): attackpoints = attackpoints + 1 global damage damage = attackpoints hit = caller.db.strength+3 counter = 0 attackpoints2 = 0 while (counter < hit): counter = counter + 1 roll = roll_dice(1, 10) if (roll >= 6): attackpoints2 = attackpoints2 + 1 global damage2 damage2 = attackpoints2 + caller.db.blessed + caller.db.target.db.cursed caller.db.target.db.cursed = 0 caller.db.start_time = 99999999999999999999999 if (attackpoints > 0): caller.msg("|/|gYou strike %s with %i success rolls. " % (caller.db.target, attackpoints)) caller.db.target.msg("|/|g%s attempts to strike you with %i succesful rolls." % (caller, attackpoints)) EvMenu(caller.db.target, "typeclasses.menu", startnode="defend_node", auto_quit=False, cmd_on_exit=None) players = [con for con in caller.location.contents if con.has_player] for player in players: if not player.ndb.end_combat: player.msg("%s attacks %s with his katana." % (caller, caller.db.target)) else: caller.msg("|/|gYou miss %s." % caller.db.target) caller.db.target.msg("|/|g%s strikes, but misses you." % caller) players = [con for con in caller.location.contents if con.has_player] for player in players: if not player.ndb.end_combat: player.msg("%s misses %s with his katana." % (caller, caller.db.target)) EvMenu(caller.db.target, "typeclasses.menu", startnode="attack_node", auto_quit=False, cmd_on_exit=None) text = "" options = ({"key": "skip", "goto": "skip_attack"}) return text, options
def func(self): if(self.caller.db.conscious == 1): self.caller.db.target = self.caller.search(self.args) self.caller.db.target.db.target = self.caller self.caller.msg("|/|rYou try to attack %s" % (self.caller.db.target)) self.caller.db.target.msg("|/|r%s tries to attack you" % (self.caller)) init_a = self.caller.db.dexterity + self.caller.db.wits init_b = self.caller.db.target.db.dexterity + self.caller.db.target.db.wits init_a = init_a + roll_dice(1,10) init_b = init_b + roll_dice(1,10) if(init_a > init_b): self.caller.msg("|/|yYou get the jump on %s."% (self.caller.db.target)) self.caller.db.target.msg("|/|y%s gets the jump on you." % (self.caller)) EvMenu(self.caller, "typeclasses.menu", startnode="attack_node", cmd_on_exit=None) else: self.caller.db.target.msg("|/|yYou get the jump on %s." % (self.caller)) self.caller.msg("|/|y%s gets the jump on you." % (self.caller.db.target)) EvMenu(self.caller.db.target, "typeclasses.menu", startnode="attack_node", cmd_on_exit=None) else: self.caller.msg("You can't do that while unconscious.")
def flee(caller): caller.db.start_time = 99999999999999999999999 if caller.db.attack_not: init_a = caller.db.dexterity + caller.db.wits + caller.db.blessed + caller.db.charisma caller.db.target.msg("|/|y%s doesn't want to fight." % caller) else: init_a = caller.db.dexterity + caller.db.wits + caller.db.blessed init_b = caller.db.target.db.dexterity + caller.db.target.db.wits init_a = init_a + roll_dice(1,10) init_b = init_b + roll_dice(1,10) if(init_a > init_b or caller.db.target.db.conscious == 0 or caller.db.target.db.alive == 0): caller.msg("|/|yYou flee from combat!|/|/") caller.db.target.msg("|/|y%s flees from combat!|/|/" % caller) players = [con for con in caller.location.contents if con.has_player] for player in players: if not player.ndb.end_combat: player.msg("%s flees from combat." % caller.name) caller.db.target.ndb._menutree.close_menu() caller.ndb._menutree.close_menu() caller.ndb.end_combat = 0 caller.db.target.ndb.end_combat = 0 else: caller.msg("|yYou fail to flee from combat") caller.db.target.msg("|y%s fails to flee from combat" % caller) if(caller.db.target.db.weapon == 1): caller.msg("|/|g%s causes %i points of lethal damage to you." % (caller.db.target, damage)) caller.msg("|/|gYou lose a total of %i health points." % (damage)) caller.db.lethal = caller.db.lethal + damage caller.db.target.msg("|/|gYou deal %i points of lethal damage with your attack." % (damage)) caller.db.target.msg("|/|g%s loses a total of %i hit points." % (caller, damaga)) if(caller.db.target.db.weapon == 0): caller.msg("|/|g%s causes %i points of bashing damage to you." % (caller.db.target, damage)) caller.msg("|/|gYou lose a total of %i health points." % (damage)) caller.db.bashing = caller.db.bashing + damage caller.db.target.msg("|/|gYou deal %i points of bashing damage with your attack." % (damage)) caller.db.target.msg("|/|g%s loses a total of %i hit points." % (caller, damage)) EvMenu(caller, "typeclasses.menu", startnode="attack_node", auto_quit=False, cmd_on_exit=None) text = "" options = () return text, options
def katana(caller): caller.db.weapon = 1 test = caller.db.dexterity + caller.db.melee counter = 0 attackpoints = 0 while(counter < test): counter = counter + 1 roll = roll_dice(1,10) if(roll >= 6): attackpoints = attackpoints + 1 global damage damage = attackpoints hit = caller.db.strength+3 counter = 0 attackpoints2 = 0 while (counter < hit): counter = counter + 1 roll = roll_dice(1, 10) if (roll >= 6): attackpoints2 = attackpoints2 + 1 global damage2 damage2 = attackpoints2 caller.db.start_time = 99999999999999999999999 if (attackpoints > 0): caller.msg("|/|gYou strike %s with %i success rolls. " % (caller.db.target, attackpoints)) caller.db.target.msg("|/|g%s attempts to strike you with %i succesful rolls." % (caller, attackpoints)) EvMenu(caller.db.target, "typeclasses.menu", startnode="defend_node", auto_quit=False, cmd_on_exit=None) else: caller.msg("|/|gYou miss %s." % caller.db.target) caller.db.target.msg("|/|g%s strikes, but misses you." % caller) EvMenu(caller.db.target, "typeclasses.menu", startnode="attack_node", auto_quit=False, cmd_on_exit=None) text = "" options = ({"key": "skip", "goto": "skip_attack"}) return text, options
def gen_characteristics_3(caller, **kwargs): stats = copy.deepcopy(get_race(kwargs['race']).stats) stat_keys = dict({x.short: x.base for x in stats}) for _ in range(7): k1 = random.choice(list(stat_keys.keys())) k2 = random.choice(list(stat_keys.keys())) _, _, _, (roll1, roll2) = roll_dice(2, 10, return_tuple=True) stat_keys[k1] += roll1 stat_keys[k2] += roll2 race_base = dict({x.short: x.base for x in stats}) text = "Roll for stats (enter for reroll)\n\n" lck = roll_dice(2, 10, ('+', 30)) if lck > 50: lck = 50 stat_keys['lck'] = lck k = kwargs.copy() k['stats'] = stat_keys.copy() _max = max(stat_keys.keys(), key=(lambda key: stat_keys[key])) _min = min(stat_keys.keys(), key=(lambda key: stat_keys[key])) stat_keys[_max] = f"|g{stat_keys[_max]}|n" stat_keys[_min] = f"|r{stat_keys[_min]}|n" for name, base in race_base.items(): text += f"{name.capitalize():>3}: {stat_keys[name]} ({base})\n" options = ({ 'key': 'accept', 'goto': ('determine_birthsign', k) }, { 'key': '_default', 'goto': ('gen_characteristics_3', k) }) return text, options
def flee_attack(caller): caller.db.start_time = 99999999999999999999999 if caller.db.attack_not: init_a = caller.db.dexterity + caller.db.wits + caller.db.blessed + caller.db.charisma caller.db.target.msg("|/|y%s doesn't want to fight." % caller) else: init_a = caller.db.dexterity + caller.db.wits + caller.db.blessed init_b = caller.db.target.db.dexterity + caller.db.target.db.wits init_a = init_a + roll_dice(1,10) init_b = init_b + roll_dice(1,10) if(init_a > init_b): caller.msg("|/|yYou flee from combat!|/|/") caller.db.target.msg("|/|y%s flees from combat!|/|/" % caller) players = [con for con in caller.location.contents if con.has_player] for player in players: if not player.ndb.end_combat: player.msg("%s flees from combat." % caller.name) caller.ndb._menutree.close_menu() if(caller.db.target.ndb._menutree): caller.db.target.ndb._menutree.close_menu() caller.ndb.end_combat = 0 caller.db.target.ndb.end_combat = 0 caller.execute_cmd('look') caller.db.target.execute_cmd('look') else: caller.msg("|/|yYou couldn't flee") caller.db.target.msg("|/|y%s couldn't flee" % caller) EvMenu(caller.db.target, "typeclasses.menu", startnode="attack_node", auto_quit=False, cmd_on_exit=None) text = "" options = ({"key": "skip", "goto": "skip_attack"}) return text, options text = "" options = () return text, options
def block(caller): attack_roll = roll_dice(3, 6) #caller.db.target.start_time = timer() caller.db.start_time = 99999999999999999999999 if (attack_roll <= caller.db.dexterity): caller.msg("|/|gYou block %s's attack." % caller.db.target) caller.db.target.msg("|/|g%s blocks your attack." % caller) else: caller.msg("|/|rYou have been hit by %s." % caller.db.target) caller.db.target.msg("|/|r%s fails to block your attack." % caller) EvMenu(caller, "typeclasses.menu", startnode="attack_node",auto_quit=False, cmd_on_exit=None) text = "" options = ({"key": "skip", "goto": "skip_attack"}) return text, options
def wod_dice(dice, difficulty=8): results = { 'Dice': dice, 'Difficulty': difficulty, 'Successes': 0, 'Results': [] } while dice: result, outcome, diff, rolls = roll_dice(dice, 10, return_tuple=True) dielist = [] for die in list(rolls): dielist.append(die) if die >= difficulty: results['Successes'] += 1 if die < 10: dice -= 1 results['Results'].append(dielist) return results
def block(caller): attack_roll = roll_dice(3, 6) #caller.db.target.start_time = timer() caller.db.start_time = 99999999999999999999999 if (attack_roll <= caller.db.dexterity): caller.msg("|/|gYou block %s's attack." % caller.db.target) caller.db.target.msg("|/|g%s blocks your attack." % caller) else: caller.msg("|/|rYou have been hit by %s." % caller.db.target) caller.db.target.msg("|/|r%s fails to block your attack." % caller) EvMenu(caller, "typeclasses.menu", startnode="attack_node", auto_quit=False, cmd_on_exit=None) text = "" options = ({"key": "skip", "goto": "skip_attack"}) return text, options
def finish(caller, **kwargs): # set base stats for stat, base in kwargs['stats'].items(): _s = caller.stats.get(stat) _s.base = base caller.stats.set(stat, _s) # calc_birthsign and assign is_cursed = False idx = None while 1: idx = roll_dice(1, 5) - 1 if idx < 4: break is_cursed = True warrior_signs = [WarriorSign, LadySign, SteedSign, LordSign] mage_signs = [MageSign, ApprenticeSign, AtronachSign, RitualSign] thief_signs = [ThiefSign, LoverSign, ShadowSign, TowerSign] if kwargs['birthsign']['name'] == 'warrior': kwargs['birthsign']['sign'] = warrior_signs[idx](is_cursed) elif kwargs['birthsign']['name'] == 'mage': kwargs['birthsign']['sign'] = mage_signs[idx](is_cursed) elif kwargs['birthsign']['name'] == 'thief': kwargs['birthsign']['sign'] = thief_signs[idx](is_cursed) # change birthsign change_birthsign(caller, kwargs['birthsign']['sign']) # set race race = copy.deepcopy(get_race(kwargs['race'])) change_race(caller, race) # set gender caller.attrs.gender = Attribute('gender', kwargs['gender']) caller.msg(kwargs) caller.attrs.update() caller.full_restore() return None, None
def block(caller): test = caller.db.dexterity + caller.db.brawl soak = caller.db.stamina counter = 0 defendpoints = 0 while (counter < test): counter = counter + 1 roll = roll_dice(1, 10) if (roll >= 6): defendpoints = defendpoints + 1 counter = 0 soakpoints = 0 while (counter < soak): counter = counter + 1 roll = roll_dice(1, 10) if (roll >= 6): soakpoints = soakpoints + 1 caller.db.start_time = 99999999999999999999999 if (defendpoints > 0): tst = damage2 dmg2 = damage dmg = damage cnt2 = 0 while (cnt2 < tst): cnt2 = cnt2 + 1 roll = roll_dice(1, 10) if (roll >= 6): dmg = dmg + 1 reduced = dmg - defendpoints if (reduced < 0): reduced = 0 if (defendpoints >= dmg2): defendpoints = dmg2 reduced = 0 if (caller.db.target.db.weapon == 0): caller.msg("|/|gYou block %i out of %i of %s's attack points." % (defendpoints, dmg2, caller.db.target)) caller.msg("|/|g%s causes %i points of damage to you." % (caller.db.target, reduced)) if (soakpoints > 0): caller.msg( "|/|gYou soak %i out of %i points of bashing damage." % (soakpoints, reduced)) if (reduced - soakpoints > 0): caller.msg("|/|gYou lose a total of %i health points." % (reduced - soakpoints)) caller.db.bashing = caller.db.bashing + (reduced - soakpoints) caller.db.target.msg("|/|g%s blocks %i points of your attack." % (caller, defendpoints)) caller.db.target.msg( "|/|gYou deal %i points of damage with your attack." % (reduced)) if (soakpoints > 0): caller.db.target.msg( "|/|g%s soaks %i points of damage from your punch." % (caller, soakpoints)) if (reduced - soakpoints > 0): caller.db.target.msg("|/|g%s loses a total of %i hit points." % (caller, reduced - soakpoints)) if (caller.db.target.db.weapon == 1): caller.msg("|/|gYou cannot block %s's attack points." % (caller.db.target)) caller.msg("|/|g%s causes %i points of lethal damage to you." % (caller.db.target, dmg2)) caller.db.lethal = caller.db.lethal + dmg2 caller.db.target.msg("|/|g%s can't block your attack." % (caller, defendpoints)) caller.db.target.msg("|/|gYou deal %i points of lethal damage." % (dmg2)) else: caller.msg("|/|rYou have been hit by %s." % caller.db.target) caller.db.target.msg("|/|r%s fails to dodge your attack." % caller) EvMenu(caller, "typeclasses.menu", startnode="attack_node", auto_quit=False, cmd_on_exit=None) text = "" options = ({"key": "skip", "goto": "skip_attack"}) return text, options
def do_attack(char1, char2): char1.msg(dice.roll_dice(1, 6)) char2.msg(dice.roll_dice(1, 6))
def test_roll_dice(self, mocked_randint): # we must import dice here for the mocked randint to apply correctly. from evennia.contrib import dice self.assertEqual(dice.roll_dice(6, 6, modifier=('+', 4)), mocked_randint()*6 + 4) self.assertEqual(dice.roll_dice(6, 6, conditional=('<', 35)), True) self.assertEqual(dice.roll_dice(6, 6, conditional=('>', 33)), False)
def attack_node(caller): healthbar = "|X|[wHealth:" total = caller.db.lethal + caller.db.bashing for i in range(0,8): if i < caller.db.lethal: healthbar += " X" elif i < total: healthbar += " /" else: healthbar += " 0" caller.msg(prompt=healthbar) caller.db.start_time = timer() attack_script = create_script("typeclasses.attackwait.AttackTime", obj=caller) attack_script.attacker(caller) attack_script.target(caller.db.target) text = "" options = ({"key": "|ypunch", "desc": "Punch %s" % caller.db.target, "goto": "wait", "exec": "punch"}, {"key": "|ykick", "desc": "Kick %s" % caller.db.target, "goto": "wait", "exec": "kick"}, {"key": "|ywield", "desc": "Wield a weapon", "goto": "wield", "exec": "wield"}, {"key": "|yskip", "desc": "Do nothing", "goto": "skip_attack"},) if caller.db.attack_not: caller.db.mercy = 1 options += ({"key": "|ymercy", "desc": "Beg for mercy", "goto": "wait", "exec": "mercy_attack"},) else: options += ({"key": "|yflee", "desc": "Flee from combat.", "goto": "wait", "exec": "flee_attack"},) for each in caller.contents: if(each.key == caller.db.selected_weapon): if(each.db.weapon == 1): options += ({"key": "|y" + each.key, "desc": "An axe.", "goto": "wait", "exec": "axe"},) if(each.db.weapon == 2): options += ({"key": "|y" + each.key, "desc": "A knife.", "goto": "wait", "exec": "knife"},) if(each.db.weapon == 3): options += ({"key": "|y" + each.key, "desc": "A baseball bat.", "goto": "wait", "exec": "bat"},) if(each.db.weapon == 4): options += ({"key": "|y" + each.key, "desc": "A staff.", "goto": "wait", "exec": "staff"},) if(each.db.weapon == 5): options += ({"key": "|y" + each.key, "desc": "A sword.", "goto": "wait", "exec": "katana"},) if(caller.db.conscious == 0 and caller.db.alive == 1): options = ({"key": "_default", "goto": "skip_attack"}) if(caller.db.move_speed == "freeze" and caller.db.alive == 1): options = ({"key": "_default", "goto": "skip_attack"}) if(caller.db.attacking == 0): init_a = caller.db.wits + caller.db.intimidation init_b = caller.db.target.db.manipulation + caller.db.target.db.intimidation init_a = init_a + roll_dice(1,10) init_b = init_b + roll_dice(1,10) if(init_a < init_b and caller.db.conscious and caller.db.target.db.conscious): caller.db.target.msg("|/|r%s is too afraid to fight" % caller.name) players = [con for con in caller.location.contents if con.has_player] for player in players: if not player.ndb.end_combat: player.msg("%s is too afraid to fight." % caller.name) text = ("|rYou are too afraid to fight") caller.db.intimidated = 1 options = ({"key": "_default", "goto": "skip_attack"}) return text, options
def block(caller): test = caller.db.dexterity + caller.db.brawl soak = caller.db.stamina counter = 0 defendpoints = 0 while (counter < test): counter = counter + 1 roll = roll_dice(1, 10) if (roll >= 6): defendpoints = defendpoints + 1 counter = 0 soakpoints = 0 while (counter < soak): counter = counter + 1 roll = roll_dice(1,10) if (roll >= 6): soakpoints = soakpoints + 1 caller.db.start_time = 99999999999999999999999 if (defendpoints > 0): tst = damage2 dmg2 = damage dmg = damage cnt2 = 0 while (cnt2 < tst): cnt2 = cnt2 + 1 roll = roll_dice(1, 10) if (roll >= 6): dmg = dmg + 1 reduced = dmg - defendpoints if(reduced < 0): reduced = 0 if(defendpoints >= dmg2): defendpoints = dmg2 reduced = 0 if(caller.db.target.db.weapon == 0): caller.msg("|/|gYou block %i out of %i of %s's attack points." % (defendpoints, dmg2, caller.db.target)) caller.msg("|/|g%s causes %i points of damage to you." % (caller.db.target, reduced)) if (soakpoints > 0): caller.msg("|/|gYou soak %i out of %i points of bashing damage." % (soakpoints, reduced)) if (reduced - soakpoints > 0): caller.msg("|/|gYou lose a total of %i health points." % (reduced - soakpoints)) caller.db.bashing = caller.db.bashing + (reduced - soakpoints) caller.db.target.msg("|/|g%s blocks %i points of your attack." % (caller, defendpoints)) caller.db.target.msg("|/|gYou deal %i points of damage with your attack." % (reduced)) if(soakpoints>0): caller.db.target.msg("|/|g%s soaks %i points of damage from your punch." % (caller, soakpoints)) if(reduced-soakpoints > 0): caller.db.target.msg("|/|g%s loses a total of %i hit points." % (caller, reduced - soakpoints)) if(caller.db.target.db.weapon == 1): caller.msg("|/|gYou cannot block %s's attack points." % (caller.db.target)) caller.msg("|/|g%s causes %i points of lethal damage to you." % (caller.db.target, dmg2)) caller.db.lethal = caller.db.lethal + dmg2 caller.db.target.msg("|/|g%s can't block your attack." % (caller, defendpoints)) caller.db.target.msg("|/|gYou deal %i points of lethal damage." % (dmg2)) else: caller.msg("|/|rYou have been hit by %s." % caller.db.target) caller.db.target.msg("|/|r%s fails to dodge your attack." % caller) EvMenu(caller, "typeclasses.menu", startnode="attack_node", auto_quit=False, cmd_on_exit=None) text = "" options = ({"key": "skip", "goto": "skip_attack"}) return text, options
def block(caller): test = caller.db.dexterity + caller.db.brawl + caller.db.blessed soak = caller.db.stamina + caller.db.blessed counter = 0 defendpoints = 0 while (counter < test): counter = counter + 1 roll = roll_dice(1, 10) if (roll >= 6): defendpoints = defendpoints + 1 counter = 0 soakpoints = 0 while (counter < soak): counter = counter + 1 roll = roll_dice(1,10) if (roll >= 6): soakpoints = soakpoints + 1 dmg = damage caller.db.start_time = 99999999999999999999999 if (defendpoints > 0): tst = damage2 dmg2 = damage cnt2 = 0 while (cnt2 < tst): cnt2 = cnt2 + 1 roll = roll_dice(1, 10) if (roll >= 6): dmg = dmg + 1 reduced = dmg - defendpoints if(reduced < 0): reduced = 0 if(defendpoints >= dmg2): defendpoints = dmg2 reduced = 0 if(caller.db.target.db.weapon == 0 and caller.db.target.db.kinetic == 0): caller.msg("|/|gYou block %i out of %i of %s's attack points." % (defendpoints, dmg2, caller.db.target)) caller.msg("|/|g%s causes %i points of damage to you." % (caller.db.target, reduced)) if (soakpoints > reduced): soakpoints = reduced if (soakpoints > 0): caller.msg("|/|gYou soak %i out of %i points of bashing damage." % (soakpoints, reduced)) if (reduced - soakpoints > 0): caller.msg("|/|gYou lose a total of %i health points." % (reduced - soakpoints)) caller.db.bashing = caller.db.bashing + (reduced - soakpoints) caller.db.target.msg("|/|g%s blocks %i points of your attack." % (caller, defendpoints)) caller.db.target.msg("|/|gYou deal %i points of damage with your attack." % (reduced)) if(soakpoints>0): caller.db.target.msg("|/|g%s soaks %i points of damage from your attack." % (caller, soakpoints)) if(reduced-soakpoints > 0): caller.db.target.msg("|/|g%s loses a total of %i hit points." % (caller, reduced - soakpoints)) if(caller.db.target.db.weapon == 1 or caller.db.target.db.kinetic == 1): caller.msg("|/|gYou can't block %s's attack points." % (caller.db.target)) caller.msg("|/|g%s causes %i points of lethal damage to you." % (caller.db.target, dmg)) caller.db.lethal = caller.db.lethal + dmg caller.db.target.msg("|/|g%s fails to block your attack." % (caller)) caller.db.target.msg("|/|gYou deal %i points of lethal damage." % (dmg)) else: caller.msg("|/|rYou have been hit by %s." % caller.db.target) caller.db.target.msg("|/|r%s fails to block your attack." % caller) if(caller.db.target.db.weapon == 0 and caller.db.target.db.kinetic == 0): caller.msg("|/|g%s causes %i points of damage to you." % (caller.db.target, dmg)) caller.msg("|/|gYou soak %i out of %i points of bashing damage." % (soakpoints, dmg)) caller.msg("|/|gYou lose a total of %i health points." % (dmg - soakpoints)) caller.db.bashing = caller.db.bashing + (dmg - soakpoints) caller.db.target.msg("|/|gYou deal %i points of damage with your punch." % (dmg)) caller.db.target.msg("|/|g%s soaks %i points of damage from your punch." % (caller, soakpoints)) caller.db.target.msg("|/|g%s loses a total of %i hit points." % (caller, dmg - soakpoints)) if(caller.db.target.db.weapon == 1 or caller.db.target.db.kinetic == 1): caller.msg("|/|g%s causes %i points of lethal damage to you." % (caller.db.target, dmg)) caller.msg("|/|gYou lose a total of %i health points." % (dmg)) caller.db.lethal = caller.db.lethal + dmg caller.db.target.msg("|/|gYou deal %i points of lethal damage with your attack." % (dmg)) caller.db.target.msg("|/|g%s loses a total of %i hit points." % (caller, dmg)) EvMenu(caller, "typeclasses.menu", startnode="attack_node", auto_quit=False, cmd_on_exit=None) text = "" options = ({"key": "skip", "goto": "skip_attack"}) if(caller.db.alive == 0 or caller.db.target.db.alive == 0): caller.ndb.end_combat = 0 caller.db.target.ndb.end_combat = 0 caller.db.conscious = 1 caller.db.target.db.conscious = 1 caller.msg("|rYou are dead!") caller.db.target.msg("|r%s is dead!" % caller) players = [con for con in caller.location.contents if con.has_player] for player in players: if not player.ndb.end_combat: player.msg("%s is dead." % caller.name) caller.db.target.ndb._menutree.close_menu() caller.ndb._menutree.close_menu() text = "" options = () return text, options