Esempio n. 1
0
    def has_illegal_consumable(self):
        entity_data = self.connection.entity_data
        item = entity_data.consumable

        # no consumable equiped
        if item.type == 0:
            return False

        if self.is_item_illegal(item):
            return True

        power_item = get_power(item.level)
        power_char = get_power(entity_data.level)
        if power_item > power_char:
            self.log(
                (
                    "consumable level too high for character "
                    + "item: level:{level1} (power: {power1}) "
                    + "character: level:{level2} (power: {power2})"
                ).format(level1=item.level, power1=power_item, level2=entity_data.level, power2=power_char),
                LOG_LEVEL_VERBOSE,
            )
            return True

        return False
Esempio n. 2
0
def player(script, name):
    player = script.get_player(name)
    entity_data = player.entity_data

    character = NPC_NAMES[entity_data.entity_type]

    class_type = entity_data.class_type
    class_spec = entity_data.specialization
    klass = CLASS_NAMES[class_type]
    spec = CLASS_SPECIALIZATIONS[class_type][class_spec]

    level = entity_data.level
    power = get_power(level)

    hp = entity_data.hp
    max_hp = get_entity_max_health(entity_data)

    info = ["%s" % character,
            "Class: %s (%s)" % (klass, spec),
            "Level: %d (+%d)" % (level, power),
            "Health: %d / %d" % (hp, max_hp)]
    for idx, line in enumerate(info):
        info[idx] = ('[%s] ' + line) % name

    if isinstance(script, ScriptInterface):
        for line in info:
            print line
    else:
        script.connection.send_lines(info)
Esempio n. 3
0
    def has_illegal_consumable(self):
        entity = self.connection.entity
        item = entity.consumable

        # no consumable equiped
        if item.type == 0:
            return False

        if self.is_item_illegal(item):
            return True

        power_item = get_power(item.level)
        power_char = get_power(entity.level)
        if power_item > power_char:
            self.log(("consumable level too high for character " +
                      "item: level:{level1} (power: {power1}) " +
                      "character: level:{level2} (power: {power2})").format(
                          level1=item.level,
                          power1=power_item,
                          level2=entity.level,
                          power2=power_char), LOG_LEVEL_VERBOSE)
            return True

        return False
Esempio n. 4
0
    def is_equipped_illegal(self, item, in_slotindex):
        entity_data = self.connection.entity_data

        power_item = get_power(item.level)
        power_char = get_power(entity_data.level)
        if power_item > power_char:
            self.log(
                (
                    "item level too high for character "
                    + "item: level:{level1} (power: {power1}) "
                    + "character: level:{level2} (power: {power2})"
                ).format(level1=item.level, power1=power_item, level2=entity_data.level, power2=power_char),
                LOG_LEVEL_VERBOSE,
            )
            return True

        if not item.type in LEGAL_ITEMSLOTS:
            self.log(
                "non equipable item slot:"
                + "type={type} subtype={subtype} slot={slot}".format(
                    type=item.type, subtype=item.sub_type, slot=in_slotindex
                ),
                LOG_LEVEL_VERBOSE,
            )
            return True

        if not in_slotindex in LEGAL_ITEMSLOTS[item.type]:
            self.log(
                "item in invalid slot:"
                + "type={type} subtype={subtype} slot={slot}".format(
                    type=item.type, subtype=item.sub_type, slot=in_slotindex
                ),
                LOG_LEVEL_VERBOSE,
            )
            return True

        if in_slotindex == 6 and item.sub_type in TWOHANDED_WEAPONS:
            if self.allow_dual_wield is False and entity_data.equipment[7].type != 0:
                self.log(
                    "dual wield bug"
                    + (" weapon (slot6) = {item1}" + " weapon (slot7) = {item2}").format(
                        item1=item.sub_type, item2=entity_data.equipment[7].sub_type
                    ),
                    LOG_LEVEL_VERBOSE,
                )
                return True
            if entity_data.equipment[7].sub_type in TWOHANDED_WEAPONS:
                self.log(
                    "dual wield two handers"
                    + (" weapon (slot6) = {item1}" + " weapon (slot7) = {item2}").format(
                        item1=entity_data.equipment[6].sub_type, item2=entity_data.equipment[7].sub_type
                    ),
                    LOG_LEVEL_VERBOSE,
                )
                return True

        if in_slotindex == 7 and item.sub_type in TWOHANDED_WEAPONS:
            if self.allow_dual_wield is False and entity_data.equipment[6].type != 0:
                self.log(
                    "dual wield bug"
                    + (" weapon (slot6) = {item1}" + " weapon (slot7) = {item2}").format(
                        item1=entity_data.equipment[6].sub_type, item2=item.sub_type
                    ),
                    LOG_LEVEL_VERBOSE,
                )
                return True

        if item.type == 3 and not item.sub_type in CLASS_WEAPONS[entity_data.class_type]:
            self.log(
                "weapon not allowed for class"
                + " subtype={subtype} class={classid} item={item}".format(
                    subtype=item.sub_type, classid=entity_data.class_type, item=get_item_name(item)
                ),
                LOG_LEVEL_VERBOSE,
            )
            return True

        if item.type in ARMOR_IDS and not item.material in CLASS_ARMOR[entity_data.class_type]:
            self.log(
                "armor not allowed for class "
                + " material={material} class={classid} item={item}".format(
                    material=item.material, classid=entity_data.class_type, item=get_item_name(item)
                ),
                LOG_LEVEL_VERBOSE,
            )
            return True

        return False
Esempio n. 5
0
    def is_equipped_illegal(self, item, in_slotindex):
        entity = self.connection.entity

        power_item = get_power(item.level)
        power_char = get_power(entity.level)
        if power_item > power_char:
            self.log(("item level too high for character "
                      "item: level:{level1} (power: {power1}) "
                      "character: level:{level2} (power: {power2})").format(
                          level1=item.level,
                          power1=power_item,
                          level2=entity.level,
                          power2=power_char), LOG_LEVEL_VERBOSE)
            return True

        if item.type not in LEGAL_ITEMSLOTS:
            self.log(
                "non equipable item slot:" +
                "type={type} subtype={subtype} slot={slot}".format(
                    type=item.type, subtype=item.sub_type, slot=in_slotindex),
                LOG_LEVEL_VERBOSE)
            return True

        if in_slotindex not in LEGAL_ITEMSLOTS[item.type]:
            self.log(
                "item in invalid slot:" +
                "type={type} subtype={subtype} slot={slot}".format(
                    type=item.type, subtype=item.sub_type, slot=in_slotindex),
                LOG_LEVEL_VERBOSE)
            return True

        if in_slotindex == 6 and item.sub_type in TWOHANDED_WEAPONS:
            if (self.allow_dual_wield is False
                    and entity.equipment[7].type != 0):
                self.log(
                    "dual wield bug" +
                    (" weapon (slot6) = {item1}" +
                     " weapon (slot7) = {item2}").format(
                         item1=item.sub_type,
                         item2=entity.equipment[7].sub_type),
                    LOG_LEVEL_VERBOSE)
                return True
            if entity.equipment[7].sub_type in TWOHANDED_WEAPONS:
                self.log(
                    "dual wield two handers" +
                    (" weapon (slot6) = {item1}" +
                     " weapon (slot7) = {item2}").format(
                         item1=entity.equipment[6].sub_type,
                         item2=entity.equipment[7].sub_type),
                    LOG_LEVEL_VERBOSE)
                return True

        if in_slotindex == 7 and item.sub_type in TWOHANDED_WEAPONS:
            if (self.allow_dual_wield is False
                    and entity.equipment[6].type != 0):
                self.log(
                    "dual wield bug" + (" weapon (slot6) = {item1}" +
                                        " weapon (slot7) = {item2}").format(
                                            item1=entity.equipment[6].sub_type,
                                            item2=item.sub_type),
                    LOG_LEVEL_VERBOSE)
                return True

        if (item.type == 3
                and not item.sub_type in CLASS_WEAPONS[entity.class_type]):
            self.log(
                "weapon not allowed for class" +
                " subtype={subtype} class={classid} item={item}".format(
                    subtype=item.sub_type,
                    classid=entity.class_type,
                    item=get_item_name(item)), LOG_LEVEL_VERBOSE)
            return True

        if (item.type in ARMOR_IDS
                and not item.material in CLASS_ARMOR[entity.class_type]):
            self.log(
                "armor not allowed for class " +
                " material={material} class={classid} item={item}".format(
                    material=item.material,
                    classid=entity.class_type,
                    item=get_item_name(item)), LOG_LEVEL_VERBOSE)
            return True

        return False