void CPlayer::Disconnect() { ingame = false; initialized = false; authorized = false; teamIdsInitialized = false; if (newmenu != -1) { Menu *pMenu = g_NewMenus[newmenu]; if (pMenu) { //prevent recursion newmenu = -1; menu = 0; executeForwards(pMenu->func, static_cast<cell>(ENTINDEX(pEdict)), static_cast<cell>(pMenu->thisId), static_cast<cell>(MENU_EXIT)); } } List<ClientCvarQuery_Info *>::iterator iter, end=queries.end(); for (iter=queries.begin(); iter!=end; iter++) { unregisterSPForward((*iter)->resultFwd); delete [] (*iter)->params; delete (*iter); } queries.clear(); menu = 0; newmenu = -1; }
Menu::~Menu() { for (size_t i = 0; i < m_Items.length(); i++) { delete m_Items[i]; } unregisterSPForward(this->func); m_Items.clear(); }
// native ArraySort(Array:array, const comparefunc[], data[]="", data_size=0); static cell AMX_NATIVE_CALL ArraySort(AMX* amx, cell* params) { cell handle = params[1]; CellArray* vec = ArrayHandles.lookup(handle); if (!vec) { LogError(amx, AMX_ERR_NATIVE, "Invalid array handle provided (%d)", handle); return 0; } int len; char* funcName = get_amxstring(amx, params[2], 0, len); // MySortFunc(Array:array, item1, item2, const data[], data_size) int func = registerSPForwardByName(amx, funcName, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_DONE); if (func < 0) { LogError(amx, AMX_ERR_NATIVE, "The public function \"%s\" was not found.", funcName); return 0; } size_t arraysize = vec->size(); size_t blocksize = vec->blocksize(); cell *array = vec->base(); ArraySort_s oldinfo = SortInfo; SortInfo.func = func; SortInfo.array_base = array; SortInfo.array_bsize = static_cast<cell>(blocksize); SortInfo.array_hndl = handle; SortInfo.data = params[3]; SortInfo.size = params[4]; qsort(array, arraysize, blocksize * sizeof(cell), SortArrayList); SortInfo = oldinfo; unregisterSPForward(func); return 1; }
void CPlayer::Disconnect() { ingame = false; initialized = false; authorized = false; teamIdsInitialized = false; if (Menu *pMenu = get_menu_by_id(newmenu)) pMenu->Close(index); List<ClientCvarQuery_Info *>::iterator iter, end=queries.end(); for (iter=queries.begin(); iter!=end; iter++) { unregisterSPForward((*iter)->resultFwd); delete [] (*iter)->params; delete (*iter); } queries.clear(); menu = 0; newmenu = -1; }
bool CPlayer::Connect(const char* connectname, const char* ipaddress) { name.assign(connectname); ip.assign(ipaddress); time = gpGlobals->time; death_killer = 0; menu = 0; newmenu = -1; memset(flags, 0, sizeof(flags)); memset(weapons, 0, sizeof(weapons)); initialized = true; authorized = false; for (int i=0; i<=4; i++) { channels[i] = 0.0f; hudmap[i] = 0; } List<ClientCvarQuery_Info *>::iterator iter, end=queries.end(); for (iter=queries.begin(); iter!=end; iter++) { unregisterSPForward((*iter)->resultFwd); delete [] (*iter)->params; delete (*iter); } queries.clear(); const char* authid = GETPLAYERAUTHID(pEdict); if ((authid == 0) || (*authid == 0) || (strcmp(authid, "STEAM_ID_PENDING") == 0)) return true; return false; }
// native ArraySortEx(Array:array, const comparefunc[], data[]="", data_size=0); static cell AMX_NATIVE_CALL ArraySortEx(AMX* amx, cell* params) { CellArray* vec = ArrayHandles.lookup(params[1]); if (!vec) { LogError(amx, AMX_ERR_NATIVE, "Invalid array handle provided (%d)", params[1]); return 0; } int len; char* funcName = get_amxstring(amx, params[2], 0, len); int func = registerSPForwardByName(amx, funcName, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_DONE); if (!func) { LogError(amx, AMX_ERR_NATIVE, "The public function \"%s\" was not found.", funcName); return 0; } size_t arraysize = vec->size(); size_t blocksize = vec->blocksize(); cell *array = vec->base(); cell amx_addr1 = 0, amx_addr2 = 0, *phys_addr = NULL; if (blocksize > 1) { int err; if ((err = amx_Allot(amx, blocksize, &amx_addr1, &phys_addr)) != AMX_ERR_NONE || ( err = amx_Allot(amx, blocksize, &amx_addr2, &phys_addr)) != AMX_ERR_NONE) { LogError(amx, err, "Ran out of memory"); return 0; } } ArraySort_s oldinfo = SortInfo; SortInfo.func = func; SortInfo.array_base = array; SortInfo.array_bsize = static_cast<cell>(blocksize); SortInfo.array_hndl = params[1]; SortInfo.data = params[3]; SortInfo.size = params[4]; SortInfo.amx = amx; SortInfo.addr1 = amx_addr1; SortInfo.addr2 = amx_addr2; qsort(array, arraysize, blocksize * sizeof(cell), blocksize > 1 ? SortArrayListExArray : SortArrayListExCell); SortInfo = oldinfo; if (blocksize > 1) { amx_Release(amx, amx_addr1); amx_Release(amx, amx_addr2); } unregisterSPForward(func); return 1; }