Beispiel #1
0
void plLoad(U32 objId)
{
    FILE *fh = NULL;
    ubyte ret;

    if (objId == Building_Starford_Kaserne)
	while ((ret =
		plOpen(objId, PLANING_OPEN_READ_PLAN, &fh)) != PLANING_OPEN_OK);
    else
	ret = plOpen(objId, PLANING_OPEN_READ_PLAN, &fh);

    if (ret == PLANING_OPEN_OK) {
	if (GamePlayMode & GP_GUARD_DESIGN)
	    grdDo(fh, plSys, PersonsList, BurglarsNr, PersonsNr,
		  GUARDS_DO_LOAD);
	else {
	    LIST *l = NULL;
	    ubyte i;
	    ubyte goon = 1;

	    if ((l = LoadSystem(fh, plSys))) {
		inpTurnESC(0);
		Bubble(l, 0, NULL, 0L);
		inpTurnESC(1);
		RemoveList(l);

		goon = 0;
		l = NULL;
	    }

	    if ((l = plLoadTools(fh))) {
		inpTurnESC(0);
		Bubble(l, 0, NULL, 0L);
		inpTurnESC(1);
		RemoveList(l);

		goon = 0;
	    }

	    if (goon) {
		for (i = 0; i < BurglarsNr; i++)
		    LoadHandler(fh, plSys, OL_NR(GetNthNode(PersonsList, i)));
	    }
	}

	dskClose(fh);
    } else {
	if (ret == PLANING_OPEN_ERR_NO_PLAN)
	    plMessage("NO_PLAN", PLANING_MSG_REFRESH | PLANING_MSG_WAIT);
    }
}
Beispiel #2
0
bool CPythonHandler::Init(
		CPythonEngine *engine,
		const char *factory, const char *nameinit, const char *namedo,
		const char *nameterm)
{
	if (!engine->InitMainInterp())
		return false;
	m_nameinit = nameinit;
	m_namedo = namedo;
	m_nameterm = nameterm;
	m_namefactory = factory;
	m_engine = engine;
	return LoadHandler(false);
}
Beispiel #3
0
PyObject *CPythonHandler::Callback(
	HANDLER_TYPE typ,
	const char *format /* = NULL */,
	...
	)
{
	va_list va;
	PyObject *args;
	PyObject *ret = NULL;

	if (format && *format) {
		va_start(va, format);
		args = Py_VaBuildValue((char *)format, va);
		va_end(va);
	}
	else
		args = PyTuple_New(0);

	if (args == NULL)
		return NULL;

	if (!PyTuple_Check(args)) {
		PyObject *a;

		a = PyTuple_New(1);
		if (a == NULL)
			goto done;
		if (PyTuple_SET_ITEM(a, 0, args) < 0) {
			Py_DECREF(a);
			goto done;
		}
		// 'args' ref consumed by _SET_ITEM.
		args = a;
	}

	ret = DoCallback(typ, args);
	if (!ret) {
		if (m_engine->m_reload_exception &&
			PyErr_ExceptionMatches(m_engine->m_reload_exception)) {
			PyErr_Clear();
			// Need to call term first
			PyObject *temp_args = Py_BuildValue("(i)", 0);
			ret = DoCallback(HANDLER_TERM, temp_args);
			Py_XDECREF(temp_args);
			if (!ret) {
				ExtensionError(NULL, "Terminating for reload failed");
				PyErr_Clear();
			}
			Py_XDECREF(ret);
			// Now force the reload and refresh of all callbacks.
			if (!LoadHandler(true))
				goto done;
			Py_XDECREF(m_callback_init);
			m_callback_init = NULL;
			Py_XDECREF(m_callback_do);
			m_callback_do = NULL;
			Py_XDECREF(m_callback_term);
			m_callback_term = NULL;
			// call init again
			temp_args = Py_BuildValue("(z)", NULL);
			ret = DoCallback(HANDLER_INIT, temp_args);
			Py_XDECREF(temp_args);
			if (!ret) {
				ExtensionError(NULL, "Reinitializing after import failed");
				PyErr_Clear();
			}
			Py_XDECREF(ret);
			// And make the original call again.
			ret = DoCallback(typ, args);			
		}
	}
done:
	Py_DECREF(args);
	return ret;
}