Browse Source

Ensure that OnServerInitComplete is always executed

Adam Johnson 12 years ago
parent
commit
1252df83e1
  1. 28
      Sources/Plasma/FeatureLib/pfPython/plPythonFileMod.cpp

28
Sources/Plasma/FeatureLib/pfPython/plPythonFileMod.cpp

@ -852,6 +852,34 @@ void plPythonFileMod::AddTarget(plSceneObject* sobj)
DisplayPythonOutput();
}
// Oversight fix... Sometimes PythonFileMods are loaded after the AgeInitialState is received.
// We should really let the script know about that via OnServerInitComplete anyway because it's
// not good to make assumptions about game state in workarounds for that method not being called
plNetClientApp* na = plNetClientApp::GetInstance();
if (!na->GetFlagsBit(plNetClientApp::kLoadingInitialAgeState) &&
na->GetFlagsBit(plNetClientApp::kPlayingGame))
{
plgDispatch::Dispatch()->UnRegisterForExactType(plInitialAgeStateLoadedMsg::Index(), GetKey());
plProfile_BeginTiming(PythonUpdate);
// call it
PyObject* retVal = PyObject_CallMethod(
fPyFunctionInstances[kfunc_OnServerInitComplete],
(char*)fFunctionNames[kfunc_OnServerInitComplete], nil);
if ( retVal == nil )
{
#ifndef PLASMA_EXTERNAL_RELEASE
// for some reason this function didn't, remember that and not call it again
fPyFunctionInstances[kfunc_OnServerInitComplete] = nil;
#endif //PLASMA_EXTERNAL_RELEASE
// if there was an error make sure that the stderr gets flushed so it can be seen
ReportError();
}
Py_XDECREF(retVal);
plProfile_EndTiming(PythonUpdate);
// display any output (NOTE: this would be disabled in production)
DisplayPythonOutput();
}
// display python output
DisplayPythonOutput();
}

Loading…
Cancel
Save