Exemplo n.º 1
0
/*
====================
ProcessClientCommands
====================
*/
static void ProcessClientCommands( void ) {
	t_int i;

	for ( i = 0; i < connection_count; ++i ) {
		t_byteStream_t *const byteStream = connection_streams[i];

		while ( T_BSCanRead( byteStream ) ) {
			HandleClientCommand( T_BSReadByte( byteStream ), i );
		}
		T_BSReset( byteStream );
	}
}
Exemplo n.º 2
0
void PythonScriptInterface::HandleEvent(int event_id, void *user, void *extra) {
	ClientInfoTable *tbl = findClient(user, true);
	mp_current_info_table = tbl;
	PyObject* sys_mod_dict = PyImport_GetModuleDict();
	PyObject* main_mod = PyMapping_GetItemString(sys_mod_dict, "__main__");
	switch(event_id) {
		case CHCGS_ClientConnectEvent: {
			tbl->connection_object = PyObject_CallMethod(main_mod, mp_connection_handler->tp_name, "");
			PyErr_Print();
			printf("Client connect %p | %p (%s)\n", tbl->connection_object, mp_connection_handler, mp_connection_handler->tp_name);
			break;
		}
		case CHCGS_ClientDisconnectEvent: {
			Py_XDECREF(tbl->connection_object);
			printf("Client disconnect\n");
			break;
		}
		case CHCGS_EnterWorld: {
			if(tbl->entity)
				PyObject_CallMethod(tbl->entity, "OnEnterWorld", "");
			break;
		}
		case CHCGS_ClientCommand: {
			HandleClientCommand(user, (const char *)extra);
			break;
		}
		case CHCGS_DialogResponse: {
			DialogEvent *devent = (DialogEvent *)extra;
			if(tbl->last_dialog_callback) {
				PyObject *arglist = Py_BuildValue("iis",(int)devent->list_index, (int)devent->button_id,devent->input);
				PyObject *ret = PyObject_CallObject(tbl->last_dialog_callback, arglist);
				Py_DECREF(tbl->last_dialog_callback);
				tbl->last_dialog_callback = NULL;
				PyErr_Print();
				Py_XDECREF(arglist);
				Py_XDECREF(ret);
			}
			break;
		}
		case CHCGS_SpawnSelect: {
			if(tbl->entity) {
				PyObject_CallMethod(tbl->connection_object, "OnSpawnSelect", "i", extra);
			}
			break;
		}
		case CHCGS_ChatMessage: {
			PyObject_CallMethod(tbl->connection_object, "OnChatMessage", "s", extra);
			break;
		}
		case CHCGS_UIClick: {
			if(tbl->mouse_callback) {
				PyObject *arglist;
				if(extra == (void *)-1) {
					arglist = Py_BuildValue("Os", tbl->connection_object, NULL);
				} else {
					arglist = Py_BuildValue("Oi", tbl->connection_object,extra);
				}
				PyObject *ret = PyObject_CallObject(tbl->mouse_callback, arglist);
				PyErr_Print();
				Py_XDECREF(arglist);
				Py_XDECREF(ret);
			}
			break;
		}
		case CHCGS_PlayerDeath: {
			SAMPDeathInfo *death_info = (SAMPDeathInfo *)extra;
			SAMPDriver *driver = this->getGameServer()->getSAMPDriver();
			printf("Send death: %d  %d\n", ((SAMPPlayer *)user)->GetPlayerID(), death_info->killer_id);
			driver->BroadcastDeath((SAMPPlayer *)user, (SAMPPlayer *)driver->findPlayerByID(death_info->killer_id), 0);
			break;
		}
	}
}