コード例 #1
0
void Player_Monster::floating_skill_trigger(const Skill_Config& cfg) {
    if (Skill_Type::TYPE_FLOAT_SKILL != cfg.skill_type) return;

    Hero *hero = find_hero();
    if (0 == hero) return;
    Talent_Map::const_iterator find_it = hero->fighter_detail().talent_map.find(hero->fighter_detail().cur_used_talent_);
    if (find_it == hero->fighter_detail().talent_map.end()) return;
    for (Skill_DB_Info_Map::const_iterator it = find_it->second.skill_db_info_map.begin();
            it != find_it->second.skill_db_info_map.end(); ++it) {
        const Skill_Config *cfg = CONFIG_CACHE_FIGHTER->skill_config_cache(it->second.skill_id);
        if (0 == cfg) continue;
        if (Skill_Type::TYPE_ADD_SKILL != cfg->skill_type) continue;
        hero->use_skill(cfg->skill_id);
        return;
    }
}
コード例 #2
0
ファイル: ai.cpp プロジェクト: svloyso/DevDaysRoguelike
void SkeletonAI::act(MonsterPtr monster) {
    HeroPtr hero = find_hero(monster);
    TilePtr tile = monster->get_pos();
    Coord coord  = tile->get_coord();
    if (hero) {
        TilePtr hero_tile = hero->get_pos();
        Coord hero_coord  = hero_tile->get_coord();
        if (can_atack(coord, hero_coord)) {
            atack(monster, hero);
        } else {
            Coord coord_to = small_path_search(coord, hero_coord);
            TilePtr tile_to = main_core->get_tile(coord_to);
            MovePtr move = Move::make_Ptr(monster, tile_to);
            main_core->do_action(move);
        }
    } else {
        make_move(monster);
    }
}