def gain_condition(ch, value): if value == 0 or ch.is_npc() or not ch.is_vampire(): return condition = ch.blood ch.blood = state_checks.urange(0, condition + value, 48) if ch.blood == 0: ch.send("You are DYING from lack of blood!\n") handler_game.act("$n gets a hungry look in $s eyes.", ch, None, None, merc.TO_ROOM) ch.hit -= game_utils.number_range(2, 5) if game_utils.number_percent() <= ch.beast and ch.beast > 0: ch.vamp_rage() if not ch.vampaff.is_set(merc.VAM_FANGS): ch.cmd_fangs("") elif ch.blood < 10: ch.send("You crave blood.\n") if game_utils.number_range(1, 1000) <= ch.beast and ch.beast > 0: ch.vamp_rage() if game_utils.number_percent( ) > ch.blood + 75 and not ch.vampaff.is_set(merc.VAM_FANGS): ch.cmd_fangs("")
def cmd_sacrifice(ch, argument): argument, arg = game_utils.read_word(argument) if not arg: ch.send("Sacrifice what?\n") return item = ch.get_item_list(arg, ch.in_room.items) if not item: ch.send("You can't find it.\n") return if not item.flags.take or item.item_type in [merc.ITEM_QUEST, merc.ITEM_MONEY, merc.ITEM_TREASURE, merc.ITEM_QUESTCARD] or \ item.flags.artifact or item.questowner and not game_utils.str_cmp(ch.name, item.questowner): handler_game.act("You are unable to drain any energy from $p.", ch, item, None, merc.TO_CHAR) return elif item.chobj and not item.chobj.is_npc() and item.chobj.obj_vnum != 0: handler_game.act("You are unable to drain any energy from $p.", ch, item, None, merc.TO_CHAR) return expgain = item.cost // 100 expgain = state_checks.urange(1, expgain, 50) ch.exp += expgain handler_game.act("You drain {} exp of energy from $p.".format(expgain), ch, item, None, merc.TO_CHAR) handler_game.act("$p disintegrates into a fine powder.", ch, item, None, merc.TO_CHAR) handler_game.act("$n drains the energy from $p.", ch, item, None, merc.TO_ROOM) handler_game.act("$p disintegrates into a fine powder.", ch, item, None, merc.TO_ROOM) if item.points > 0 and not ch.is_npc() and item.item_type != merc.ITEM_PAGE: handler_game.act("You receive a refund of {} quest points from $p.".format(item.points), ch, item, None, merc.TO_CHAR) ch.quest += item.points item.extract()
def saves_spell(level, victim): if not victim.is_npc(): tsave = sum([victim.spl[0], victim.spl[1], victim.spl[2], victim.spl[3], victim.spl[4]]) * 0.05 save = 50 + (tsave - level - victim.saving_throw) * 5 else: save = 50 + (victim.level - level - victim.saving_throw) * 5 save = state_checks.urange(15, save, 85) return game_utils.number_percent() < save
def m_reset(preset, last, level, npc): if preset.arg1 not in instance.npc_templates.keys(): comm.notify("m_reset: 'M': bad vnum {}".format(preset.arg1), merc.CONSOLE_WARNING) return last, level, npc else: npc_template = instance.npc_templates[preset.arg1] if preset.arg3 not in instance.room_templates.keys(): comm.notify("reset_area: 'R': bad vnum {}".format(preset.arg3), merc.CONSOLE_WARNING) return last, level, npc else: room_instance_id = instance.instances_by_room[preset.arg3][0] room_instance = instance.global_instances[room_instance_id] level = state_checks.urange(0, npc_template.level - 2, merc.LEVEL_HERO) if npc_template.count >= preset.arg2: last = False return last, level, npc npc = object_creator.create_mobile(npc_template) # Check for pet shop. if room_instance.vnum - 1 in instance.room_templates.keys(): prev_room_instance_id = instance.instances_by_room[room_instance.vnum - 1][0] prev_room_instance = instance.global_instances[prev_room_instance_id] if prev_room_instance.room_flags.is_set(merc.ROOM_PET_SHOP): npc.act.set_bit(merc.ACT_PET) if room_instance.is_dark(): npc.affected_by.set_bit(merc.AFF_INFRARED) # set area npc.area = room_instance.area room_instance.put(npc) level = state_checks.urange(0, npc.level - 2, merc.LEVEL_HERO) last = True return last, level, npc
def cmd_press(ch, argument): argument, arg1 = game_utils.read_word(argument) argument, arg2 = game_utils.read_word(argument) if not arg1: ch.send("Which item do you wish to press?\n") return item = ch.get_item_wear(arg1) if not item: item = ch.get_item_here(arg1) if not item: ch.send("You can't find that item.\n") return # You should only be able to use nontake items on floor if item.flags.take: ch.send("But you are not wearing it!\n") return if not item.spectype.is_set(merc.SITEM_PRESS): ch.send("There is nothing on this item to press.\n") return if item.spectype.is_set(merc.SITEM_TARGET) and not arg2: ch.send("Who do you wish to use it on?\n") return if item.spectype.is_set(merc.SITEM_TARGET): victim = ch.get_char_room(arg2) if not victim: ch.not_here(arg2) return else: victim = ch if item.chpoweruse: handler_game.kavitem(item.chpoweruse, ch, item, None, merc.TO_CHAR) if item.victpoweruse: handler_game.kavitem(item.victpoweruse, ch, item, None, merc.TO_ROOM) if item.spectype.is_set(merc.SITEM_SPELL): castlevel = state_checks.urange(1, item.level, 60) handler_magic.obj_cast_spell(item.specpower, castlevel, ch, victim, None) ch.wait_state(merc.PULSE_VIOLENCE // 2) if item.spectype.is_set(merc.SITEM_DELAY1): ch.wait_state(merc.PULSE_VIOLENCE // 2) if item.spectype.is_set(merc.SITEM_DELAY2): ch.wait_state(merc.PULSE_VIOLENCE) return if item.spectype.is_set(merc.SITEM_TRANSPORTER): if item.chpoweron: handler_game.kavitem(item.chpoweron, ch, item, None, merc.TO_CHAR) if item.victpoweron: handler_game.kavitem(item.victpoweron, ch, item, None, merc.TO_ROOM) proomindex = instance.rooms[item.specpower] item.specpower = ch.in_room.vnum if not proomindex: return ch.in_room.get(ch) proomindex.put(ch) ch.cmd_look("auto") if item.chpoweroff: handler_game.kavitem(item.chpoweroff, ch, item, None, merc.TO_CHAR) if item.victpoweroff: handler_game.kavitem(item.victpoweroff, ch, item, None, merc.TO_ROOM) if not item.flags.artifact and ch.in_room.room_flags.is_set( merc.ROOM_NO_TELEPORT) and item.flags.take: ch.send("A powerful force hurls you from the room.\n") handler_game.act("$n is hurled from the room by a powerful force.", ch, None, None, merc.TO_ROOM) ch.position = merc.POS_STUNNED ch.in_room.get(ch) room_id = instance.instances_by_room[merc.ROOM_VNUM_TEMPLE][0] instance.rooms[room_id].put(ch) handler_game.act( "$n appears in the room, and falls to the ground stunned.", ch, None, None, merc.TO_ROOM) mount = ch.mount if mount: mount.in_room.get(mount) ch.in_room.put(mount) mount.cmd_look("auto") elif item.spectype.is_set(merc.SITEM_TELEPORTER): if item.chpoweron: handler_game.kavitem(item.chpoweron, ch, item, None, merc.TO_CHAR) if item.victpoweron: handler_game.kavitem(item.victpoweron, ch, item, None, merc.TO_ROOM) proomindex = instance.rooms[item.specpower] if not proomindex: return ch.in_room.get(ch) proomindex.put(ch) ch.cmd_look("auto") if item.chpoweroff: handler_game.kavitem(item.chpoweroff, ch, item, None, merc.TO_CHAR) if item.victpoweroff: handler_game.kavitem(item.victpoweroff, ch, item, None, merc.TO_ROOM) if not item.flags.artifact and ch.in_room.room_flags.is_set( merc.ROOM_NO_TELEPORT) and item.flags.take: ch.send("A powerful force hurls you from the room.\n") handler_game.act("$n is hurled from the room by a powerful force.", ch, None, None, merc.TO_ROOM) ch.position = merc.POS_STUNNED ch.in_room.get(ch) room_id = instance.instances_by_room[merc.ROOM_VNUM_TEMPLE][0] instance.rooms[room_id].put(ch) handler_game.act( "$n appears in the room, and falls to the ground stunned.", ch, None, None, merc.TO_ROOM) mount = ch.mount if mount: mount.in_room.get(mount) ch.in_room.put(mount) mount.cmd_look("auto") elif item.spectype.is_set(merc.SITEM_OBJECT): obj_index = instance.item_templates[item.specpower] if not obj_index: return item = object_creator.create_item(obj_index, ch.level) if item.flags.take: ch.put(item) else: ch.in_room.put(item) elif item.spectype.is_set(merc.SITEM_MOBILE): mob_index = instance.npc_templates[item.specpower] if not mob_index: return npc = object_creator.create_mobile(mob_index) ch.in_room.put(npc) elif item.spectype.is_set(merc.SITEM_ACTION): ch.interpret(item.victpoweron) if item.victpoweroff: for vch_id in ch.in_room.people[:]: vch = instance.characters[vch_id] if ch == vch: continue vch.interpret(item.victpoweroff) continue
def cmd_recharge(ch, argument): argument, arg1 = game_utils.read_word(argument) argument, arg2 = game_utils.read_word(argument) if not arg1 or not arg2: ch.send("Syntax: recharge <quest card> <quest machine>\n") return card = ch.get_item_carry(arg1) if not card: ch.send("You are not carrying that object.\n") return if card.item_type != merc.ITEM_QUESTCARD: ch.send("That is not a quest card.\n") return machine = ch.get_item_here(arg2) if not machine: ch.send("There is nothing for you to recharge it with.\n") return if machine.item_type != merc.ITEM_QUESTMACHINE: ch.send("That is not a quest machine.\n") return count = 0 for i in range(4): if card.value[i] == -1: count += 1 if count == 4: card.quest_object() else: ch.send("You have not yet completed the current quest.\n") return handler_game.act("You place $p into a small slot in $P.", ch, card, machine, merc.TO_CHAR) handler_game.act("$n places $p into a small slot in $P.", ch, card, machine, merc.TO_ROOM) handler_game.act("$P makes a few clicks and returns $p.", ch, card, machine, merc.TO_CHAR) handler_game.act("$P makes a few clicks and returns $p.", ch, card, machine, merc.TO_ROOM) value = state_checks.urange(1, card.level, 50) item = object_creator.create_item( instance.item_templates[merc.OBJ_VNUM_PROTOPLASM], 0) item.name = "quest token" item.short_descr = "a {} point quest token".format(value) item.description = "A {} point quest token lies on the floor.".format( value) item.value[0] = value item.level = value item.cost = value * 1000 item.item_type = merc.ITEM_QUEST item.questmaker = ch.name ch.put(item) handler_game.act("You take $p from $P.", ch, item, machine, merc.TO_CHAR) handler_game.act("$n takes $p from $P.", ch, item, machine, merc.TO_ROOM) if not ch.is_npc(): ch.score[merc.SCORE_NUM_QUEST] += 1 ch.score[merc.SCORE_QUEST] += value comm.info("{} has completed a quest!".format( ch.name if not ch.is_npc() else ch.short_descr)) ch.save(force=True)
def cmd_oset(ch, argument): argument, arg1 = game_utils.read_word(argument) argument, arg2 = game_utils.read_word(argument) arg3 = argument if ch.is_npc(): return if not arg1 or not arg2 or not arg3: ch.send("Syntax: oset <object> <field> <value>\n" "or: oset <object> <string> <value>\n" "or: oset <object> <affect> <value>\n\n" "Field being one of:\n" " value0 value1 value2 value3\n" " level weight cost timer morph\n\n" "String being one of:\n" " name short long ed type extra wear owner\n\n" "Affect being one of:\n" " str dex int wis con\n" " hit dam ac hp mana move\n") return obj = ch.get_item_world(arg1) if not obj: ch.send("Nothing like that in heaven or earth.\n") return if obj.carried_by and not obj.carried_by.is_npc() and obj.carried_by.act.is_set(merc.PLR_GODLESS) and ch.trust < merc.NO_GODLESS and \ not ch.extra.is_set(merc.EXTRA_ANTI_GODLESS): ch.send("You failed.\n") return if not ch.is_judge() and (not obj.questmaker or not game_utils.str_cmp(ch.name, obj.questmaker)): ch.send("You don't have permission to change that item.\n") return # Snarf the value (which need not be numeric). value = int(arg3) if arg3.isdigit else -1 # Set something. if game_utils.str_cmp(arg2, ["value0", "v0"]): if obj.item_type == merc.ITEM_WEAPON and not ch.is_judge(): ch.send("You are not authorised to create spell weapons.\n") return elif obj.item_type == merc.ITEM_QUEST: ch.send("You cannot change a quest tokens value with oset.\n") return elif obj.item_type == merc.ITEM_ARMOR and value > 15: obj.value[0] = 15 else: obj.value[0] = value ch.send("Ok.\n") obj.questmaker = ch.name return if game_utils.str_cmp(arg2, ["value1", "v1"]): if obj.item_type == merc.ITEM_WEAPON and value > 10: obj.value[1] = 10 else: obj.value[1] = value ch.send("Ok.\n") obj.questmaker = ch.name return if game_utils.str_cmp(arg2, ["value2", "v2"]): if obj.item_type == merc.ITEM_WEAPON and value > 20: obj.value[2] = 20 else: obj.value[2] = value ch.send("Ok.\n") obj.questmaker = ch.name return if game_utils.str_cmp(arg2, ["value3", "v3"]): if obj.item_type == merc.ITEM_ARMOR and not ch.is_judge(): ch.send("You are not authorised to create spell armour.\n") else: obj.value[3] = value ch.send("Ok.\n") obj.questmaker = ch.name return if game_utils.str_cmp(arg2, "level"): value = state_checks.urange(1, value, 50) if not ch.is_judge(): ch.send("You are not authorised to change an items level.\n") else: obj.level = value ch.send("Ok.\n") obj.questmaker = ch.name return if game_utils.str_cmp(arg2, "weight"): obj.weight = value ch.send("Ok.\n") obj.questmaker = ch.name return if game_utils.str_cmp(arg2, "cost"): if value > 100000 and not ch.is_judge(): ch.send("Don't be so damn greedy!\n") else: obj.cost = value ch.send("Ok.\n") obj.questmaker = ch.name return if game_utils.str_cmp(arg2, "timer"): obj.timer = value ch.send("Ok.\n") obj.questmaker = ch.name return if game_utils.str_cmp(arg2, ["hitroll", "hit"]): ch.oset_affect(obj, value, merc.APPLY_HITROLL, False) return elif game_utils.str_cmp(arg2, ["damroll", "dam"]): ch.oset_affect(obj, value, merc.APPLY_DAMROLL, False) return elif game_utils.str_cmp(arg2, ["armor", "ac"]): ch.oset_affect(obj, value, merc.APPLY_AC, False) return elif game_utils.str_cmp(arg2, ["hitpoints", "hp"]): ch.oset_affect(obj, value, merc.APPLY_HIT, False) return elif game_utils.str_cmp(arg2, "mana"): ch.oset_affect(obj, value, merc.APPLY_MANA, False) return elif game_utils.str_cmp(arg2, ["move", "movement"]): ch.oset_affect(obj, value, merc.APPLY_MOVE, False) return elif game_utils.str_cmp(arg2, ["str", "strength"]): ch.oset_affect(obj, value, merc.APPLY_STR, False) return elif game_utils.str_cmp(arg2, ["dex", "dexterity"]): ch.oset_affect(obj, value, merc.APPLY_DEX, False) return elif game_utils.str_cmp(arg2, ["int", "intelligence"]): ch.oset_affect(obj, value, merc.APPLY_INT, False) return elif game_utils.str_cmp(arg2, ["wis", "wisdom"]): ch.oset_affect(obj, value, merc.APPLY_WIS, False) return elif game_utils.str_cmp(arg2, ["con", "constitution"]): ch.oset_affect(obj, value, merc.APPLY_CON, False) return if game_utils.str_cmp(arg2, "type"): if not ch.is_judge(): ch.send("You are not authorised to change an item type.\n") return item_list = [("light", merc.ITEM_LIGHT), ("scroll", merc.ITEM_SCROLL), ("wand", merc.ITEM_WAND), ("staff", merc.ITEM_STAFF), ("weapon", merc.ITEM_WEAPON), ("treasure", merc.ITEM_TREASURE), (["armor", "armour"], merc.ITEM_ARMOR), ("potion", merc.ITEM_POTION), ("furniture", merc.ITEM_FURNITURE), ("trash", merc.ITEM_TRASH), ("container", merc.ITEM_CONTAINER), ("drink", merc.ITEM_DRINK_CON), ("key", merc.ITEM_KEY), ("food", merc.ITEM_FOOD), ("money", merc.ITEM_MONEY), ("boat", merc.ITEM_BOAT), ("corpse", merc.ITEM_CORPSE_NPC), ("fountain", merc.ITEM_FOUNTAIN), ("pill", merc.ITEM_PILL), ("portal", merc.ITEM_PORTAL), ("stake", merc.ITEM_STAKE)] for (aa, bb) in item_list: if game_utils.str_cmp(arg3, aa): obj.item_type = bb break else: ch.send( "Type can be one of: Light, Scroll, Wand, Staff, Weapon, Treasure, Armor,\n" "Potion, Furniture, Trash, Container, Drink, Key, Food, Money, Boat, Corpse,\n" "Fountain, Pill, Portal, Stake.\n") return ch.send("Ok.\n") obj.questmaker = ch.name return if game_utils.str_cmp(arg2, "owner"): if ch.is_npc(): ch.send("Not while switched.\n") return if not ch.is_judge() and (not obj.questmaker or not game_utils.str_cmp( ch.name, obj.questmaker)): ch.send("Someone else has already changed this item.\n") return victim = ch.get_char_world(arg3) if not victim: ch.not_here(arg3) return if victim.is_npc(): ch.not_npc() return obj.questmaker = ch.name obj.questowner = victim.name ch.send("Ok.\n") return if game_utils.str_cmp(arg2, "name"): obj.name = arg3 ch.send("Ok.\n") obj.questmaker = ch.name return if game_utils.str_cmp(arg2, "short"): obj.short_descr = arg3 ch.send("Ok.\n") obj.questmaker = ch.name return if game_utils.str_cmp(arg2, "long"): obj.description = arg3 ch.send("Ok.\n") obj.questmaker = ch.name return if game_utils.str_cmp(arg2, "ed"): argument, arg3 = game_utils.read_word(argument) if not argument: ch.send("Syntax: oset <object> ed <keyword> <string>\n") return edd = world_classes.ExtraDescrData(keyword=arg3, description=argument) obj.extra_descr.append(edd) ch.send("Ok.\n") obj.questmaker = ch.name return # Generate usage message. ch.cmd_oset("")