static cell_t sm_CallStartFunction(IPluginContext *pContext, const cell_t *params) { Handle_t hndl; HandleError err; IPlugin *pPlugin; ResetCall(); hndl = static_cast<Handle_t>(params[1]); if (hndl == 0) { pPlugin = g_PluginSys.FindPluginByContext(pContext->GetContext()); } else { pPlugin = g_PluginSys.PluginFromHandle(hndl, &err); if (!pPlugin) { return pContext->ThrowNativeError("Plugin handle %x is invalid (error %d)", hndl, err); } } s_pFunction = pPlugin->GetBaseContext()->GetFunctionById(params[2]); if (!s_pFunction) { return pContext->ThrowNativeError("Invalid function id (%X)", params[2]); } s_pCallable = static_cast<ICallable *>(s_pFunction); s_CallStarted = true; return 1; }
static cell_t sm_RemoveFromForward(IPluginContext *pContext, const cell_t *params) { Handle_t fwdHandle = static_cast<Handle_t>(params[1]); Handle_t plHandle = static_cast<Handle_t>(params[2]); HandleError err; IChangeableForward *pForward; IPlugin *pPlugin; if ((err=g_HandleSys.ReadHandle(fwdHandle, g_PrivateFwdType, NULL, (void **)&pForward)) != HandleError_None) { return pContext->ThrowNativeError("Invalid private forward handle %x (error %d)", fwdHandle, err); } if (plHandle == 0) { pPlugin = g_PluginSys.FindPluginByContext(pContext->GetContext()); } else { pPlugin = g_PluginSys.PluginFromHandle(plHandle, &err); if (!pPlugin) { return pContext->ThrowNativeError("Plugin handle %x is invalid (error %d)", plHandle, err); } } IPluginFunction *pFunction = pPlugin->GetBaseContext()->GetFunctionById(params[3]); if (!pFunction) { return pContext->ThrowNativeError("Invalid function id (%X)", params[3]); } return pForward->RemoveFunction(pFunction); }
static cell_t sm_GetFunctionByName(IPluginContext *pContext, const cell_t *params) { Handle_t hndl = static_cast<Handle_t>(params[1]); HandleError err; char *name; uint32_t idx; IPlugin *pPlugin; if (hndl == 0) { pPlugin = g_PluginSys.FindPluginByContext(pContext->GetContext()); } else { pPlugin = g_PluginSys.PluginFromHandle(hndl, &err); if (!pPlugin) { return pContext->ThrowNativeError("Plugin handle %x is invalid (error %d)", hndl, err); } } pContext->LocalToString(params[2], &name); /* Get public function index */ if (pPlugin->GetBaseContext()->FindPublicByName(name, &idx) == SP_ERROR_NOT_FOUND) { /* Return INVALID_FUNCTION if not found */ return -1; } /* Return function ID */ return PublicIndexToFuncId(idx); }
void SM_ConfigsExecuted_Plugin(unsigned int serial) { IPluginIterator *iter = scripts->GetPluginIterator(); while (iter->MorePlugins()) { IPlugin *plugin = iter->GetPlugin(); if (plugin->GetSerial() == serial) { SM_DoSingleExecFwds(plugin->GetBaseContext()); break; } iter->NextPlugin(); } iter->Release(); }
static cell_t sm_AddFrameAction(IPluginContext *pContext, const cell_t *params) { IPlugin *pPlugin = pluginsys->FindPluginByContext(pContext->GetContext()); IPluginFunction *pFunction = pPlugin->GetBaseContext()->GetFunctionById(params[1]); if (!pFunction) { return pContext->ThrowNativeError("Invalid function id (%X)", params[1]); } IChangeableForward *pForward = forwardsys->CreateForwardEx(NULL, ET_Ignore, 1, NULL, Param_Cell); IdentityToken_t *pIdentity = pContext->GetIdentity(); Handle_t Handle = handlesys->CreateHandle(g_PrivateFwdType, pForward, pIdentity, g_pCoreIdent, NULL); if (Handle == BAD_HANDLE) { forwardsys->ReleaseForward(pForward); return 0; } pForward->AddFunction(pFunction); SMFrameActionData *pData = new SMFrameActionData(Handle, pPlugin->GetMyHandle(), params[2]); g_pSM->AddFrameAction(PawnFrameAction, pData); return 1; }
static cell_t sm_AddToForward(IPluginContext *pContext, const cell_t *params) { Handle_t fwdHandle = static_cast<Handle_t>(params[1]); Handle_t plHandle = static_cast<Handle_t>(params[2]); HandleError err; IChangeableForward *pForward; IPlugin *pPlugin; HandleSecurity sec(pContext->GetIdentity(), g_pCoreIdent); if ((err=handlesys->ReadHandle(fwdHandle, g_PrivateFwdType, &sec, (void **)&pForward)) != HandleError_None) { return pContext->ThrowNativeError("Invalid private forward handle %x (error %d)", fwdHandle, err); } if (plHandle == 0) { pPlugin = pluginsys->FindPluginByContext(pContext->GetContext()); } else { pPlugin = pluginsys->PluginFromHandle(plHandle, &err); if (!pPlugin) { return pContext->ThrowNativeError("Plugin handle %x is invalid (error %d)", plHandle, err); } } IPluginFunction *pFunction = pPlugin->GetBaseContext()->GetFunctionById(params[3]); if (!pFunction) { return pContext->ThrowNativeError("Invalid function id (%X)", params[3]); } return pForward->AddFunction(pFunction); }