Разработчик
Проверенный
Участник
Пользователь
- Сообщения
- 207
- Реакции
- 420
- Помог
- 10 раз(а)
Тема для готовых функций на SourcePawn, которые можно просто вставить в свой код и использовать.
Делитесь своими стоками. Будем собирать.
- Передача прав на указатель (Handle)
Трюк основан на функцияхCloneHandle()
иCloseHandle()
. Сначала клонируется нужный указатель, потом удаляется старый.
C++:stock void ChangeHandleOwner(Handle &hPointer, Handle hNewOwner = null) { Handle hDummy = CloneHandle(hPointer, hNewOwner); CloseHandle(hPointer); hPointer = hDummy; }
- Вызов форвардов с клоном указателя
Ещё один полезный, по-моему мнению, сток. Позволяет вызвать некий "форвард". Но в отличие от обычного форварда, передаётся на каждый плагин не оригинальный указатель, а его клон.
C++:stock void CallEventWithClonedHandle(const char[] szFunctionName, Handle hPointer) { Handle hClone; Function ptrFunc; Handle hPlugin; Handle hPlugIter = GetPluginIterator(); Handle hCoreHandle = GetMyHandle(); while (MorePlugins(hPlugIter)) { hPlugin = ReadPlugin(hPlugIter); if (hPlugin == hCoreHandle || GetPluginStatus(hPlugin) != Plugin_Running) continue; ptrFunc = GetFunctionByName(hPlugin, szFunctionName); if (ptrFunc == INVALID_FUNCTION) continue; hClone = CloneHandle(hPointer, hPlugin); Call_StartFunction(hPlugin, ptrFunc); Call_PushCell(hClone); Call_Finish(); } CloseHandle(hPlugIter); }
- Перевод IP-адреса из строкового представления в бинарное (двоичное)
Перегоняет айпишник из строкового представления - в двоичное. Позволяет сэкономить память, если он где-то впоследствии хранится, т.к. IP-адрес в бинарном представлении занимает фиксированно 4 байта.
C++:stock int IP2Bin(const char[] szAddress) { char szAddr[16]; strcopy(szAddr, sizeof(szAddr), szAddress); int iPos = 0; int iResult; for (int iDotId = 0; iDotId < 4; ++iDotId) { iPos = FindCharInString(szAddr, '.', true); iResult |= StringToInt(szAddr[iPos+1]) << (iDotId * 8); if (iPos != -1) szAddr[iPos] = 0; } return iResult; }
Делитесь своими стоками. Будем собирать.