Fixed: AIS crash if variable not initialized (a big thanks to depyraken to finding it)

This commit is contained in:
kervala 2016-01-30 18:01:27 +01:00
parent 976ebabf74
commit 7ab17400e7

View file

@ -376,17 +376,16 @@ inline
float CStateInstance::getNelVar(std::string const& varId) float CStateInstance::getNelVar(std::string const& varId)
{ {
TNelVarList::iterator it = _NelVar.find(varId); TNelVarList::iterator it = _NelVar.find(varId);
if (it==_NelVar.end()) if (it != _NelVar.end()) return it->second->get()
if (NLMISC::CVariable<float>::exists(varId))
{ {
if (NLMISC::CVariable<float>::exists(varId)) nlwarning("Nel variable \"%s\" exists outside of this state instance", varId.c_str());
{ return 0.f;
nlwarning("Nel variable \"%s\" exists outside of this state instance", varId.c_str());
return 0.f;
}
_NelVar[varId] = new NLMISC::CVariable<float>("StateInstance", varId.c_str(), "", 0.f);
_NelVar[varId]->get();
} }
return it->second->get();
_NelVar[varId] = new NLMISC::CVariable<float>("StateInstance", varId.c_str(), "", 0.f);
return _NelVar[varId]->get();
} }
inline inline
@ -424,17 +423,16 @@ inline
std::string CStateInstance::getStrNelVar(std::string const& varId) std::string CStateInstance::getStrNelVar(std::string const& varId)
{ {
TStrNelVarList::iterator it = _StrNelVar.find(varId); TStrNelVarList::iterator it = _StrNelVar.find(varId);
if (it==_StrNelVar.end()) if (it!=_StrNelVar.end()) return it->second->get();
if (NLMISC::CVariable<float>::exists(varId))
{ {
if (NLMISC::CVariable<float>::exists(varId)) nlwarning("Nel variable \"%s\" exists outside of this state instance", varId.c_str());
{ return "";
nlwarning("Nel variable \"%s\" exists outside of this state instance", varId.c_str());
return "";
}
_StrNelVar[varId] = new NLMISC::CVariable<std::string>("StateInstanceVar", varId.c_str(), "", std::string());
_NelVar[varId]->get();
} }
return it->second->get();
_StrNelVar[varId] = new NLMISC::CVariable<std::string>("StateInstanceVar", varId.c_str(), "", std::string());
return _NelVar[varId]->get();
} }
inline inline