Пример #1
0
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("")
Пример #2
0
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()
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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
Пример #6
0
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)
Пример #7
0
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("")