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; } }
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); } }