diff options
Diffstat (limited to 'pokemod/MapTrainerPokemon.cpp')
| -rw-r--r-- | pokemod/MapTrainerPokemon.cpp | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/pokemod/MapTrainerPokemon.cpp b/pokemod/MapTrainerPokemon.cpp new file mode 100644 index 00000000..1acb6dcd --- /dev/null +++ b/pokemod/MapTrainerPokemon.cpp @@ -0,0 +1,184 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: pokemod/MapTrainerPokemon.cpp +// Purpose: Define a Pokémon on a trainer's team +// Author: Ben Boeckel +// Modified by: Ben Boeckel +// Created: Tue Mar 20 19:20:21 2007 +// Copyright: ©2007 Ben Boeckel and Nerdy Productions +// Licence: +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program. If not, see <http://www.gnu.org/licenses/>. +///////////////////////////////////////////////////////////////////////////// + +#include "MapTrainerPokemon.h" + +PokeGen::PokeMod::MapTrainerPokemon::MapTrainerPokemon(const Pokemod* par, const unsigned _id) : + Object(_id, par), + species(UINT_MAX), + level(1) +{ +} + +PokeGen::PokeMod::MapTrainerPokemon::MapTrainerPokemon(const Pokemod* par, Ini& ini, const unsigned _id) : + Object(_id, par) +{ + ImportIni(ini, _id); +} + +bool PokeGen::PokeMod::MapTrainerPokemon::Validate() +{ + pokemod->ValidationMsg(QString("---------Pokémon with id %1---").arg(id), Pokemod::V_Msg); + if (pokemod->GetPokemonByID(species) == UINT_MAX) + { + pokemod->ValidationMsg("Invalid species"); + isValid = false; + } + if (pokemod->GetMaxLevel() <= level) + { + pokemod->ValidationMsg("Invalid level"); + isValid = false; + } + if (GetItemCount() <= pokemod->GetHoldItems()) + { + QMap<unsigned, unsigned> idChecker; + QMap<QString, unsigned> itemChecker; + for (QList<unsigned>::ConstIterator i = items.begin(); i != items.end(); ++i) + { + if (pokemod->GetItemByID(*i) == UINT_MAX) + { + pokemod->ValidationMsg("Invalid item"); + isValid = false; + } + ++idChecker[*i]; + ++itemChecker[pokemod->GetItem(*i)->GetName()]; + } + for (QMap<unsigned, unsigned>::ConstIterator i = idChecker.begin(); i != idChecker.end(); ++i) + { + if (1 < i.value()) + { + pokemod->ValidationMsg(QString("There are %1 items with id %2").arg(i.value()).arg(i.key())); + isValid = false; + } + } + for (QMap<QString, unsigned>::ConstIterator i = itemChecker.begin(); i != itemChecker.end(); ++i) + { + if (1 < i.value()) + { + pokemod->ValidationMsg(QString("There are %1 items with the name \"%2\"").arg(i.value()).arg(i.key())); + isValid = false; + } + } + } + else if (GetItemCount()) + { + pokemod->ValidationMsg("Too many held items"); + isValid = false; + } + else + pokemod->ValidationMsg("There are no items", Pokemod::V_Warn); + return isValid; +} + +void PokeGen::PokeMod::MapTrainerPokemon::ImportIni(Ini& ini, const unsigned _id) +{ + if (_id == UINT_MAX) + ini.GetValue("id", id); + else + id = _id; + unsigned i; + unsigned j; + items.clear(); + ini.GetValue("species", species); + ini.GetValue("level", level, 1); + ini.GetValue("numItems", i, 0); + for (unsigned k = 0; k < i; ++k) + { + ini.GetValue(QString("item-%1").arg(k), j); + if (k != UINT_MAX) + items.append(j); + } +} + +void PokeGen::PokeMod::MapTrainerPokemon::ExportIni(QFile& fout, const QString& map, const unsigned trainerId) const +{ + Ini exMapTrainerPokemon(QString("mapTrainerPokemon %1 ").arg(trainerId) + map); + exMapTrainerPokemon.AddField("id", id); + exMapTrainerPokemon.AddField("species", species); + exMapTrainerPokemon.AddField("level", level); + exMapTrainerPokemon.AddField("numItems", GetItemCount()); + for (unsigned i = 0; i < GetItemCount(); ++i) + exMapTrainerPokemon.AddField(QString("item-%1").arg(i), items[i]); + exMapTrainerPokemon.Export(fout); +} + +bool PokeGen::PokeMod::MapTrainerPokemon::SetSpecies(const unsigned s) +{ + if (pokemod->GetPokemonByID(s) != UINT_MAX) + species = s; + return (species == s); +} + +bool PokeGen::PokeMod::MapTrainerPokemon::SetLevel(const unsigned l) +{ + if (l <= pokemod->GetMaxLevel()) + level = l; + return (level == l); +} + +unsigned PokeGen::PokeMod::MapTrainerPokemon::GetSpecies() const +{ + return species; +} + +unsigned PokeGen::PokeMod::MapTrainerPokemon::GetLevel() const +{ + return level; +} + +unsigned PokeGen::PokeMod::MapTrainerPokemon::GetItem(const unsigned i) const +{ + if (i < GetItemCount()) + return items[i]; + return UINT_MAX; +} + +unsigned PokeGen::PokeMod::MapTrainerPokemon::GetItemByID(const unsigned _id) const +{ + for (unsigned i = 0; i < GetItemCount(); ++i) + { + if (items[i] == _id) + return i; + } + return UINT_MAX; +} + +unsigned PokeGen::PokeMod::MapTrainerPokemon::GetItemCount() const +{ + return items.size(); +} + +void PokeGen::PokeMod::MapTrainerPokemon::NewItem(const unsigned i) +{ + if ((GetItemCount() < pokemod->GetHoldItems()) && pokemod->GetItem(i)) + items.append(i); +} + +bool PokeGen::PokeMod::MapTrainerPokemon::DeleteItem(const unsigned i) +{ + if (i < GetItemCount()) + { + items.erase(items.begin() + i); + return true; + } + return false; +} |
