summaryrefslogtreecommitdiffstats
path: root/pokemod/MapTrainerTeam.cpp
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2007-07-03 04:20:36 +0000
committerBen Boeckel <MathStuf@gmail.com>2007-07-03 04:20:36 +0000
commit65cc463f1d91fe99acf1c4dd9bce7e0038593022 (patch)
tree95644c3c42a4a23db50dc42722cdeb4489427e14 /pokemod/MapTrainerTeam.cpp
parent9102febc37475af113681eaaee02ecc2ea04b4da (diff)
downloadsigen-65cc463f1d91fe99acf1c4dd9bce7e0038593022.tar.gz
sigen-65cc463f1d91fe99acf1c4dd9bce7e0038593022.tar.xz
sigen-65cc463f1d91fe99acf1c4dd9bce7e0038593022.zip
Fixed Logging, minor fixes, got rid of NatureEffect, and started migration from wxGTK to Qt
git-svn-id: https://pokegen.svn.sourceforge.net/svnroot/pokegen/trunk@22 6ecfd1a5-f3ed-3746-8530-beee90d26b22
Diffstat (limited to 'pokemod/MapTrainerTeam.cpp')
-rw-r--r--pokemod/MapTrainerTeam.cpp183
1 files changed, 118 insertions, 65 deletions
diff --git a/pokemod/MapTrainerTeam.cpp b/pokemod/MapTrainerTeam.cpp
index 6cdd8e03..2c9d42c4 100644
--- a/pokemod/MapTrainerTeam.cpp
+++ b/pokemod/MapTrainerTeam.cpp
@@ -25,8 +25,7 @@
PokeGen::PokeMod::MapTrainerTeam::MapTrainerTeam(const Pokemod *par, const unsigned _id) :
species(UINT_MAX),
- level(1),
- item(UINT_MAX)
+ level(1)
{
LogCtor("MapTrainerTeam", _id);
id = _id;
@@ -60,39 +59,46 @@ void PokeGen::PokeMod::MapTrainerTeam::Validate()
LogOutOfRange("MapTrainerTeam", id, "level", level, GetSpeciesString());
isValid = false;
}
- if (!pokemod->GetItem(item))
- {
- LogVarNotValid("MapTrainerTeam", id, "item");
- isValid = false;
- }
- LogValidateOver("MapTrainerTeam", id, isValid, GetSpeciesString());
-}
-
-#ifdef PG_DEBUG_WINDOW
-void PokeGen::PokeMod::MapTrainerTeam::Validate(const wxListBox &output)
-{
- LogValidateStart("MapTrainerTeam", id);
- if (!pokemod->GetPokemon(species))
- {
- LogVarNotValid("MapTrainerTeam", id, "species", species);
- output.Append(ConsoleLogVarNotValid("MapTrainerTeam", id, "species", species));
- isValid = false;
- }
- if (pokemod->GetMaxLevel() <= level)
- {
- LogVarOutOfRange("MapTrainerTeam", id, "level", level, GetSpeciesString());
- output.Append(ConsoleLogVarOutOfRange("MapTrainerTeam", id, "level", level, GetSpeciesString()));
- isValid = false;
- }
- if (!pokemod->GetItem(item))
- {
- LogVarNotValid("MapTrainerTeam", id, "item", item);
- output.Append(ConsoleLogVarNotValid("MapTrainerTeam", id, "item", item));
- isValid = false;
- }
+ if (GetItemCount() <= pokemod->GetHoldItems())
+ {
+ std::map<unsigned, unsigned> idChecker;
+ std::map<String, unsigned> itemChecker;
+ for (std::vector<unsigned>::const_iterator i = items.begin(); i != items.end(); ++i)
+ {
+ if (!pokemod->GetItem(*i))
+ {
+ LogVarNotValid("MapTrainerTeam", id, "item");
+ isValid = false;
+ }
+ ++idChecker[*i];
+ ++itemChecker[pokemod->GetItem(*i)->GetName()];
+ }
+ for (std::map<unsigned, unsigned>::const_iterator i = idChecker.begin(); i != idChecker.end(); ++i)
+ {
+ if (1 < i->second)
+ {
+ LogDuplicateId("MapTrainerTeam", id, "item", i->first);
+ isValid = false;
+ }
+ }
+ for (std::map<String, unsigned>::const_iterator i = itemChecker.begin(); i != itemChecker.end(); ++i)
+ {
+ if (1 < i->second)
+ {
+ LogDuplicateSubmodule("MapTrainerTeam", id, "item", i->first);
+ isValid = false;
+ }
+ }
+ }
+ else if (GetItemCount())
+ {
+ Log::Write(String("MapTrainerTeam Validation: Too many held items in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
+ isValid = false;
+ }
+ else
+ LogSubmoduleEmpty("MapTrainerTeam", id, "item");
LogValidateOver("MapTrainerTeam", id, isValid, GetSpeciesString());
}
-#endif
void PokeGen::PokeMod::MapTrainerTeam::ImportIni(Ini &ini, const unsigned _id)
{
@@ -104,10 +110,19 @@ void PokeGen::PokeMod::MapTrainerTeam::ImportIni(Ini &ini, const unsigned _id)
LogIdNotFound("MapTrainerTeam");
}
else
- id = _id;
+ id = _id;
+ unsigned i;
+ unsigned j;
+ items.clear();
ini.GetValue("species", species);
- ini.GetValue("level", level, 1);
- ini.GetValue("item", item);
+ ini.GetValue("level", level, 1);
+ ini.GetValue("numItems", i, 0);
+ for (unsigned k = 0; k < i; ++k)
+ {
+ ini.GetValue(String("item-%u", k), j);
+ if (k != UINT_MAX)
+ items.push_back(j);
+ }
LogImportOver("MapTrainerTeam", id);
}
@@ -117,8 +132,10 @@ void PokeGen::PokeMod::MapTrainerTeam::ExportIni(std::ofstream &fout, const Stri
Ini exMapTrainerTeam(String("MapTrainerTeam %u ", trainerId) + map);
exMapTrainerTeam.AddField("id", id);
exMapTrainerTeam.AddField("species", species);
- exMapTrainerTeam.AddField("level", level);
- exMapTrainerTeam.AddField("item", item);
+ exMapTrainerTeam.AddField("level", level);
+ exMapTrainerTeam.AddField("numItems", GetItemCount());
+ for (unsigned i = 0; i < GetItemCount(); ++i)
+ exMapTrainerTeam.AddField(String("item-%u", i), items[i]);
exMapTrainerTeam.Export(fout);
LogExportOver("MapTrainerTeam", id);
}
@@ -144,20 +161,6 @@ void PokeGen::PokeMod::MapTrainerTeam::SetLevel(const unsigned l)
level = l;
}
-void PokeGen::PokeMod::MapTrainerTeam::SetItem(const unsigned i)
-{
- LogSetVar("MapTrainerTeam", id, "item", i, GetSpeciesString());
- if (pokemod->GetItem(i))
- item = i;
-}
-
-void PokeGen::PokeMod::MapTrainerTeam::SetItem(const String &i)
-{
- LogSetVar("MapTrainerTeam", id, "item string", i, GetSpeciesString());
- if (const Item *temp = pokemod->GetItem(i))
- item = temp->GetId();
-}
-
unsigned PokeGen::PokeMod::MapTrainerTeam::GetSpecies() const
{
LogFetchVar("MapTrainerTeam", id, "speceis", species);
@@ -178,16 +181,66 @@ unsigned PokeGen::PokeMod::MapTrainerTeam::GetLevel() const
return level;
}
-unsigned PokeGen::PokeMod::MapTrainerTeam::GetItem() const
-{
- LogFetchVar("MapTrainerTeam", id, "item", item, GetSpeciesString());
- return item;
-}
-
-PokeGen::PokeMod::String PokeGen::PokeMod::MapTrainerTeam::GetItemString() const
-{
- LogFetchVar("MapTrainerTeam", id, "item string", item, GetSpeciesString());
- if (const Item *i = pokemod->GetItem(item))
- i->GetName();
- return "";
-}
+unsigned PokeGen::PokeMod::MapTrainerTeam::GetItem(const unsigned i) const
+{
+ LogSubmoduleFetch("MapTrainerTeam", id, "item", i);
+ if (i < GetItemCount() <= i)
+ return items[i];
+ LogSubmoduleFetchFail("MapTrainerTeam", id, "item", i);
+ return UINT_MAX;
+}
+
+unsigned PokeGen::PokeMod::MapTrainerTeam::GetItemCount() const
+{
+ LogSubmoduleCount("MapTrainerTeam", id, "item");
+ return items.size();
+}
+
+void PokeGen::PokeMod::MapTrainerTeam::NewItem(const unsigned i)
+{
+ LogSubmoduleNew("MapTrainerTeam", id, "item", i);
+ if ((GetItemCount() < pokemod->GetHoldItems()) && pokemod->GetItem(i))
+ items.push_back(i);
+}
+
+void PokeGen::PokeMod::MapTrainerTeam::NewItem(const String &n)
+{
+ LogSubmoduleNew("MapTrainerTeam", id, "item", n);
+ if (GetItemCount() < pokemod->GetHoldItems())
+ {
+ if (const Item *i = pokemod->GetItem(n))
+ items.push_back(i->GetId());
+ }
+}
+
+void PokeGen::PokeMod::MapTrainerTeam::DeleteItem(const unsigned i)
+{
+ LogSubmoduleRemoveStart("MapTrainerTeam", id, "item", i);
+ if (i < GetItemCount())
+ DeleteItemByID(items[i]);
+ else
+ LogSubmoduleRemoveFail("MapTrainerTeam", id, "item", i);
+}
+
+void PokeGen::PokeMod::MapTrainerTeam::DeleteItem(const String &n)
+{
+ LogSubmoduleRemoveStart("MapTrainerTeam", id, "item", n);
+ if (const Item *i = pokemod->GetItem(n))
+ DeleteItemByID(i->GetId());
+ else
+ LogSubmoduleRemoveFail("MapTrainerTeam", id, "item", n);
+}
+
+void PokeGen::PokeMod::MapTrainerTeam::DeleteItemByID(const unsigned _id)
+{
+ LogSubmoduleRemoveStart("MapTrainerTeam", id, "item", _id);
+ for (std::vector<unsigned>::iterator i = items.begin(); i != items.end(); ++i)
+ {
+ if (*i == _id)
+ {
+ LogSubmoduleRemoved("MapTrainerTeam", id, "item", _id);
+ items.erase(i);
+ }
+ }
+ LogSubmoduleRemoveFail("MapTrainerTeam", id, "item", _id);
+}