/* ==================== 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 ); } }
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; } } }