solidity pokedex inicial

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

contract Pokemon {

    // Cualidades para cada pokemon
    struct cualidades {
        string name;
        string tipo_pokemon;
        string ataque;
    }

    // Listado de pokemon que tenemos
    cualidades [] pokedex;

    // Añadir un nuevo pokemon a la pokedex
    function capturar_nuevo_pokemon(string memory _name, string memory _tipo_pokemon, string memory _ataque) internal {
        pokedex.push(cualidades(_name, _tipo_pokemon, _ataque));
    }
}

contract Entrador_pokemon is Pokemon {
    
    // Quien es el propietario de este entrenador pokemon
    address public owner;

    // Asignamos el valor al entrenador Pokemon
    constructor () {
        owner = msg.sender;
    }

    // Conseguimos un pokemon para nuestra pokedex
    function lanzar_pokeball(string memory _nombrePokemon, string memory _tipo_pokemon, string memory _ataque) external {
        require (keccak256(bytes(_nombrePokemon)) != keccak256(bytes(" ")), "Debes poner el nombre al pokemon");
        capturar_nuevo_pokemon(_nombrePokemon, _tipo_pokemon, _ataque);
    }

    // Modifer para poner algún filtro. Solo permitimos conseguir pokemon al owner
    modifier onlyOwner() {
        require(owner == msg.sender, "No tienes permisos para capturar estos pokemon para esta Pokedex");
        _;
    }

    // Obtenemos el listado de pokemon de la pokedex. En el caso de que el owner sea diferente, no le dejaremos ver el resultado
    function getPokedex() public view onlyOwner returns (cualidades [] memory) {
        return pokedex;
    }
}