def load_npcs(area, parea): area, w = game_utils.read_word(area, False) w = w[1:] # strip the pound while w != "0": vnum = int(w) if vnum in instance.npc_templates: comm.notify("load_npcs: vnum {} duplicated.".format(vnum), merc.CONSOLE_CRITICAL) sys.exit(1) npc = handler_npc.Npc() npc.vnum = vnum instance.npc_templates[npc.vnum] = npc npc.area = parea.name area, npc.name = game_utils.read_string(area) npc.name = npc.name.lower() area, npc.short_descr = game_utils.read_string(area) area, npc.long_descr = game_utils.read_string(area) npc.long_descr = miniboa.terminal.escape(npc.long_descr, "ANSI") area, npc.description = game_utils.read_string(area) npc.description = miniboa.terminal.escape(npc.description, "ANSI") area, act = game_utils.read_int(area) npc.act.bits = act | merc.ACT_IS_NPC area, affected_by = game_utils.read_int(area) npc.affected_by.bits = affected_by area, npc.alignment = game_utils.read_int(area) area, letter = game_utils.read_letter(area) area, level = game_utils.read_int(area) npc.level = game_utils.number_fuzzy(level) area, npc.hitroll = game_utils.read_int(area) area, npc.armor = game_utils.read_word(area) area, dummy = game_utils.read_int(area) area = game_utils.read_forward(area) area, dummy = game_utils.read_int(area) area = game_utils.read_forward(area) area, dummy = game_utils.read_int(area) area, dummy = game_utils.read_int(area) area = game_utils.read_forward(area) area, dummy = game_utils.read_int(area) area = game_utils.read_forward(area) area, dummy = game_utils.read_int(area) area, npc.gold = game_utils.read_int(area) area, dummy = game_utils.read_int(area) area, dummy = game_utils.read_int(area) area, dummy = game_utils.read_int(area) area, npc.sex = game_utils.read_int(area) area, w = game_utils.read_word(area, False) w = w[1:] # strip the pound return area
def create_mobile(npc_template): if not npc_template: comm.notify("create_mobile: no npc_template", merc.CONSOLE_CRITICAL) sys.exit(1) npc = handler_npc.Npc(npc_template) npc.id = game_utils.get_mob_id(npc=True) npc.level = max(1, game_utils.number_fuzzy(npc_template.level)) npc.armor = game_utils.interpolate(npc.level, 100, -100) if npc_template.spec_fun: npc.spec_fun = special.spec_table[npc_template.spec_fun] tempvalue = min( 30000, npc.level * 8 + game_utils.number_range( npc.level * npc.level // 4, npc.level * npc.level)) npc.max_hit = tempvalue npc.hit = npc.max_hit npc.hitroll = npc.level npc.damroll = npc.level # link the mob to the world list npc_template.count += 1 return npc
def load_npcs(area, pArea): area, w = game_utils.read_word(area, False) w = w[1:] # strip the pound while w != '0': npc = handler_npc.Npc() npc.vnum = int(w) instance.npc_templates[npc.vnum] = npc npc.area = pArea.name area, npc.name = game_utils.read_string(area) npc.name = npc.name.lower() area, npc.short_descr = game_utils.read_string(area) area, npc.long_descr = game_utils.read_string(area) npc.long_descr = miniboa.terminal.escape(npc.long_descr, 'pyom') area, npc.description = game_utils.read_string(area) npc.description = miniboa.terminal.escape(npc.description, 'pyom') area, npc.race = game_utils.read_string(area) area = npc.act.read_bits(area, default=merc.ACT_IS_NPC | npc.race.act) area = npc.affected_by.read_bits(area, default=npc.race.aff) area, npc.alignment = game_utils.read_int(area) area, npc.group = game_utils.read_int(area) area, npc.level = game_utils.read_int(area) area, npc.hitroll = game_utils.read_int(area) area, npc.hit_dice[0] = game_utils.read_int(area) area = game_utils.read_forward(area) area, npc.hit_dice[1] = game_utils.read_int(area) area = game_utils.read_forward(area) area, npc.hit_dice[2] = game_utils.read_int(area) area, npc.mana_dice[0] = game_utils.read_int(area) area = game_utils.read_forward(area) area, npc.mana_dice[1] = game_utils.read_int(area) area = game_utils.read_forward(area) area, npc.mana_dice[2] = game_utils.read_int(area) area, npc.dam_dice[0] = game_utils.read_int(area) area = game_utils.read_forward(area) area, npc.dam_dice[1] = game_utils.read_int(area) area = game_utils.read_forward(area) area, npc.dam_dice[2] = game_utils.read_int(area) area, npc.dam_type = game_utils.read_word(area, False) npc.dam_type = state_checks.name_lookup(const.attack_table, npc.dam_type) area, npc.armor[0] = game_utils.read_int(area) area, npc.armor[1] = game_utils.read_int(area) area, npc.armor[2] = game_utils.read_int(area) area, npc.armor[3] = game_utils.read_int(area) area = npc.off_flags.read_bits(area, default=npc.race.off) area = npc.imm_flags.read_bits(area, default=npc.race.imm) area = npc.res_flags.read_bits(area, default=npc.race.res) area = npc.vuln_flags.read_bits(area, default=npc.race.vuln) area, npc.start_pos = game_utils.read_word(area, False) area, npc.default_pos = game_utils.read_word(area, False) npc.start_pos = state_checks.name_lookup(tables.position_table, npc.start_pos, 'short_name') npc.default_pos = state_checks.name_lookup(tables.position_table, npc.default_pos, 'short_name') area, sex = game_utils.read_word(area, False) npc.sex = state_checks.value_lookup(tables.sex_table, sex) area, npc.wealth = game_utils.read_int(area) area = npc.form.read_bits(area, default=npc.race.form) area = npc.parts.read_bits(area, default=npc.race.parts) area, npc.size = game_utils.read_word(area, False) area, npc.material = game_utils.read_word(area, False) area, w = game_utils.read_word(area, False) npc.size = tables.size_table.index(npc.size) while w == 'F': area, word = game_utils.read_word(area, False) area, vector = game_utils.read_flags(area) area, w = game_utils.read_word(area, False) w = w[1:] # strip the pound return area
def create_mobile(npc_template): if npc_template is None: logger.critical("Create_mobile: None pMobIndex.") sys.exit(1) npc = handler_npc.Npc(npc_template) npc.id = game_utils.get_mob_id() if npc_template.spec_fun: npc.spec_fun = special.spec_table[npc_template.spec_fun] npc.prompt = None if npc_template.wealth == 0: npc.silver = 0 npc.gold = 0 else: wealth = random.randint(npc_template.wealth // 2, 3 * npc_template.wealth // 2) npc.gold = random.randint(wealth // 200, wealth // 100) npc.silver = wealth - (npc.gold * 100) if npc_template.new_format: # load in new style */ # read from prototype */ #npc.group = npc_template.group #npc.act.bits = npc_template.act.bits npc.comm.set_bit(merc.COMM_NOCHANNELS | merc.COMM_NOSHOUT | merc.COMM_NOTELL) #npc.affected_by.bits = npc_template.affected_by.bits #npc.alignment = npc_template.alignment #npc.level = npc_template.level #npc.hitroll = npc_template.hitroll #npc.damroll = npc_template.dam_dice[merc.DICE_BONUS] npc.max_hit = game_utils.dice( npc_template.hit_dice[merc.DICE_NUMBER], npc_template.hit_dice[ merc.DICE_TYPE]) + npc_template.hit_dice[merc.DICE_BONUS] npc.hit = npc.max_hit npc.max_mana = game_utils.dice( npc_template.mana_dice[merc.DICE_NUMBER], npc_template.mana_dice[ merc.DICE_TYPE]) + npc_template.mana_dice[merc.DICE_BONUS] npc.mana = npc.max_mana npc.damage[merc.DICE_NUMBER] = npc_template.dam_dice[merc.DICE_NUMBER] npc.damage[merc.DICE_TYPE] = npc_template.dam_dice[merc.DICE_TYPE] #npc.dam_type = npc_template.dam_type if npc.dam_type == 0: num = random.randint(1, 3) if num == 1: npc.dam_type = 3 # slash */ elif num == 2: npc.dam_type = 7 # pound */ elif num == 3: npc.dam_type = 11 # pierce */ for i in range(4): npc.armor[i] = npc_template.armor[i] #npc.off_flags.bits = npc_template.off_flags.bits #npc.imm_flags.bits = npc_template.imm_flags.bits #npc.res_flags.bits = npc_template.res_flags.bits #npc.vuln_flags.bits = npc_template.vuln_flags.bits #npc.start_pos = npc_template.start_pos #npc.default_pos = npc_template.default_pos #npc.sex = npc_template.sex if type(npc_template.sex) != int or npc.sex == 3: # random sex */ npc.sex = random.randint(1, 2) #npc.race = npc_template.race #npc.form.bits = npc_template.form.bits #npc.parts.bits = npc_template.parts.bits #npc.size = int(npc_template.size) #npc.material = npc_template.material # computed on the spot */ for i in range(merc.MAX_STATS): npc.perm_stat[i] = min(25, 11 + npc.level // 4) if npc.act.is_set(merc.ACT_WARRIOR): npc.perm_stat[merc.STAT_STR] += 3 npc.perm_stat[merc.STAT_INT] -= 1 npc.perm_stat[merc.STAT_CON] += 2 if npc.act.is_set(merc.ACT_THIEF): npc.perm_stat[merc.STAT_DEX] += 3 npc.perm_stat[merc.STAT_INT] += 1 npc.perm_stat[merc.STAT_WIS] -= 1 if npc.act.is_set(merc.ACT_CLERIC): npc.perm_stat[merc.STAT_WIS] += 3 npc.perm_stat[merc.STAT_DEX] -= 1 npc.perm_stat[merc.STAT_STR] += 1 if npc.act.is_set(merc.ACT_MAGE): npc.perm_stat[merc.STAT_INT] += 3 npc.perm_stat[merc.STAT_STR] -= 1 npc.perm_stat[merc.STAT_DEX] += 1 if npc.is_npc() and npc.off_flags.is_set(merc.OFF_FAST): npc.perm_stat[merc.STAT_DEX] += 2 npc.perm_stat[merc.STAT_STR] += npc.size - merc.SIZE_MEDIUM npc.perm_stat[merc.STAT_CON] += (npc.size - merc.SIZE_MEDIUM) // 2 af = handler_game.AFFECT_DATA() # let's get some spell action */ if npc.is_affected(merc.AFF_SANCTUARY): af.where = merc.TO_AFFECTS af.type = "sanctuary" af.level = npc.level af.duration = -1 af.location = merc.APPLY_NONE af.modifier = 0 af.bitvector = merc.AFF_SANCTUARY npc.affect_add(af) if npc.is_affected(merc.AFF_HASTE): af.where = merc.TO_AFFECTS af.type = "haste" af.level = npc.level af.duration = -1 af.location = merc.APPLY_DEX af.modifier = 1 + (npc.level >= 18) + (npc.level >= 25) + (npc.level >= 32) af.bitvector = merc.AFF_HASTE npc.affect_add(af) if npc.is_affected(merc.AFF_PROTECT_EVIL): af.where = merc.TO_AFFECTS af.type = "protection evil" af.level = npc.level af.duration = -1 af.location = merc.APPLY_SAVES af.modifier = -1 af.bitvector = merc.AFF_PROTECT_EVIL npc.affect_add(af) if npc.is_affected(merc.AFF_PROTECT_GOOD): af.where = merc.TO_AFFECTS af.type = "protection good" af.level = npc.level af.duration = -1 af.location = merc.APPLY_SAVES af.modifier = -1 af.bitvector = merc.AFF_PROTECT_GOOD npc.affect_add(af) else: # read in old format and convert */ #npc.act.bits = npc_template.act.bits #npc.affected_by.bits = npc_template.affected_by.bits #npc.alignment = npc_template.alignment #npc.level = npc_template.level #npc.hitroll = npc_template.hitroll npc.damroll = 0 npc.max_hit = npc.level * 8 + random.randint( npc.level * npc.level // 4, npc.level * npc.level) npc.max_hit *= .9 npc.hit = npc.max_hit npc.max_mana = 100 + game_utils.dice(npc.level, 10) npc.mana = npc.max_mana num = random.randint(1, 3) if num == 1: npc.dam_type = 3 # slash */ elif num == 2: npc.dam_type = 7 # pound */ elif num == 3: npc.dam_type = 11 # pierce */ for i in range(3): npc.armor[i] = game_utils.interpolate(npc.level, 100, -100) npc.armor[3] = game_utils.interpolate(npc.level, 100, 0) #npc.race = npc_template.race #npc.off_flags.bits = npc_template.off_flags.bits #npc.imm_flags.bits = npc_template.imm_flags.bits #npc.res_flags.bits = npc_template.res_flags.bits #npc.vuln_flags.bits = npc_template.vuln_flags.bits #npc.start_pos = npc_template.start_pos #npc.default_pos = npc_template.default_pos #npc.sex = npc_template.sex #npc.form.bits = npc_template.form.bits #npc.parts.bits = npc_template.parts.bits npc.size = merc.SIZE_MEDIUM npc.material = "" for i in merc.MAX_STATS: npc.perm_stat[i] = 11 + npc.level // 4 npc.position = npc.start_pos # link the mob to the world list */ return npc