Fixed crash when random kart was last used and then trying to play challenges + move error messages to where they belong, no error message should be printed when doing a valid check if a kart exists

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@6858 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
auria 2010-12-05 16:12:35 +00:00
parent c11f275fef
commit 08b33dc2fe
7 changed files with 46 additions and 10 deletions

View File

@ -191,7 +191,7 @@ const int KartPropertiesManager::getKartId(const std::string &ident) const
i != m_karts_properties.end(); ++i)
{
if(UserConfigParams::m_verbosity>=5)
std::cout << " -- " << (*i)->getIdent().c_str() << std::endl;
std::cout << "[KartPropertiesManager] getKartId : " << (*i)->getIdent().c_str() << std::endl;
if ((*i)->getIdent() == ident)
return i-m_karts_properties.begin();
}
@ -211,7 +211,6 @@ const KartProperties* KartPropertiesManager::getKart(const std::string &ident) c
return *i;
}
printf("Could not find a kart named %s\n", ident.c_str());
return NULL;
} // getKart
@ -341,8 +340,15 @@ std::vector<std::string> KartPropertiesManager::getRandomKartList(int count,
std::vector<std::string> all_karts;
for(unsigned int i=0; i<existing_karts.size(); i++)
{
int id=getKartId(existing_karts[i].getKartName());
used[id] = true;
try
{
int id=getKartId(existing_karts[i].getKartName());
used[id] = true;
}
catch (std::runtime_error& ex)
{
std::cerr << "[KartPropertiesManager] getRandomKartList : WARNING, can't find kart '" << existing_karts[i].getKartName() << "'\n";
}
}
// Add karts from the current group

View File

@ -92,6 +92,7 @@ void RaceManager::setPlayerKart(unsigned int player_id, const RemoteKartInfo& ki
void RaceManager::setLocalKartInfo(unsigned int player_id, const std::string& kart)
{
assert(0<=player_id && player_id <m_local_player_karts.size());
assert(kart_properties_manager->getKart(kart) != NULL);
m_local_player_karts[player_id] = RemoteKartInfo(player_id, kart,
StateManager::get()->getActivePlayerProfile(player_id)->getName(),

View File

@ -26,6 +26,7 @@
#include "input/device_manager.hpp"
#include "input/input_manager.hpp"
#include "io/file_manager.hpp"
#include "karts/kart_properties_manager.hpp"
#include "network/network_manager.hpp"
#include "race/race_manager.hpp"
#include "states_screens/state_manager.hpp"
@ -131,6 +132,12 @@ void ChallengesScreen::eventCallback(GUIEngine::Widget* widget, const std::strin
{
//FIXME: simplify and centralize race start sequence!!
// Verify the kart in the config exists
if (kart_properties_manager->getKart(UserConfigParams::m_default_kart) == NULL)
{
UserConfigParams::m_default_kart.revertToDefaults();
}
// Use latest used device
InputDevice* device = input_manager->getDeviceList()->getLatestUsedDevice();

View File

@ -521,11 +521,23 @@ void FeatureUnlockedCutScene::addUnlockedThings(const std::vector<const Challeng
case UNLOCK_KART:
{
const KartProperties* kart = kart_properties_manager->getKart(unlockedFeatures[i].name);
assert(kart != NULL);
// the passed kart will not be modified, that's why I allow myself to use const_cast
addUnlockedKart( const_cast<KartProperties*>(kart),
unlockedFeatures[i].getUnlockedMessage() );
if (kart == NULL)
{
fprintf(stderr, "[KartSelectionScreen] WANRING: could not find a kart named '%s'\n",
unlockedFeatures[i].name.c_str());
video::ITexture* tex = irr_driver->getTexture(file_manager->getGUIDir() + "/main_help.png");
addUnlockedPicture(tex, 1.0f, 0.75f,
L"???" );
}
else
{
// the passed kart will not be modified, that's why I allow myself to use const_cast
addUnlockedKart(const_cast<KartProperties*>(kart),
unlockedFeatures[i].getUnlockedMessage() );
}
break;
}
case UNLOCK_DIFFICULTY:

View File

@ -304,7 +304,11 @@ void GrandPrixLose::setKarts(std::vector<std::string> ident_arg)
kart_model->setAnimation(KartModel::AF_DEFAULT);
float susp[4]={0,0,0,0};
kart_model->update(0.0f, 0.0f, susp);
} // if kart !=NULL
}
else
{
fprintf(stderr, "[GrandPrixLose] WARNING: could not find a kart named '%s'\n", ident_arg[n].c_str());
}// if kart !=NULL
m_kart_node[n] = kart_main_node;
}

View File

@ -433,7 +433,7 @@ void GrandPrixWin::setKarts(const std::string idents_arg[3])
}
else
{
std::cerr << "GrandPrixWin : warning : kart '" << idents[n] << "' not found!\n";
std::cerr << "[GrandPrixWin] WARNING : kart '" << idents[n] << "' not found!\n";
}
m_kart_node[n] = kart_main_node;

View File

@ -310,6 +310,8 @@ public:
const KartProperties* props = kart_properties_manager->getKart(default_kart);
if(!props)
{
fprintf(stderr, "[KartSelectionScreen] WARNING: could not find a kart named '%s'\n", default_kart.c_str());
// If the default kart can't be found (e.g. previously a addon
// kart was used, but the addon package was removed, use the
// first kart as a default. This way we don't have to hardcode
@ -803,6 +805,10 @@ public:
m_parent->m_kart_widgets[playerID].m_kart_name->setText( selectionText.c_str() );
}
else
{
fprintf(stderr, "[KartSelectionScreen] WARNING: could not find a kart named '%s'\n", selectionID.c_str());
}
}
m_parent->m_kart_widgets[playerID].setKartInternalName(selectionID);