static cell_t TeleportEntity(IPluginContext *pContext, const cell_t *params) { static ValveCall *pCall = NULL; if (!pCall) { ValvePassInfo pass[3]; InitPass(pass[0], Valve_Vector, PassType_Basic, PASSFLAG_BYVAL, VDECODE_FLAG_ALLOWNULL); InitPass(pass[1], Valve_QAngle, PassType_Basic, PASSFLAG_BYVAL, VDECODE_FLAG_ALLOWNULL); InitPass(pass[2], Valve_Vector, PassType_Basic, PASSFLAG_BYVAL, VDECODE_FLAG_ALLOWNULL); if (!CreateBaseCall("Teleport", ValveCall_Entity, NULL, pass, 3, &pCall)) { return pContext->ThrowNativeError("\"Teleport\" not supported by this mod"); } else if (!pCall) { return pContext->ThrowNativeError("\"Teleport\" wrapper failed to initialized"); } } START_CALL(); DECODE_VALVE_PARAM(1, thisinfo, 0); DECODE_VALVE_PARAM(2, vparams, 0); DECODE_VALVE_PARAM(3, vparams, 1); DECODE_VALVE_PARAM(4, vparams, 2); FINISH_CALL_SIMPLE(NULL); return 1; }
static cell_t GetPlayerWeaponSlot(IPluginContext *pContext, const cell_t *params) { static ValveCall *pCall = NULL; if (!pCall) { ValvePassInfo pass[2]; InitPass(pass[0], Valve_POD, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[1], Valve_CBaseEntity, PassType_Basic, PASSFLAG_BYVAL); if (!CreateBaseCall("Weapon_GetSlot", ValveCall_Player, &pass[1], pass, 1, &pCall)) { return pContext->ThrowNativeError("\"Weapon_GetSlot\" not supported by this mod"); } else if (!pCall) { return pContext->ThrowNativeError("\"Weapon_GetSlot\" wrapper failed to initialized"); } } CBaseEntity *pEntity; START_CALL(); DECODE_VALVE_PARAM(1, thisinfo, 0); DECODE_VALVE_PARAM(2, vparams, 0); FINISH_CALL_SIMPLE(&pEntity); if (pEntity == NULL) { return -1; } edict_t *pEdict = gameents->BaseEntityToEdict(pEntity); if (!pEdict) { return -1; } return IndexOfEdict(pEdict); }
static cell_t GiveNamedItem(IPluginContext *pContext, const cell_t *params) { static ValveCall *pCall = NULL; if (!pCall) { ValvePassInfo pass[3]; InitPass(pass[0], Valve_String, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[1], Valve_POD, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[2], Valve_CBaseEntity, PassType_Basic, PASSFLAG_BYVAL); if (!CreateBaseCall("GiveNamedItem", ValveCall_Player, &pass[2], pass, 2, &pCall)) { return pContext->ThrowNativeError("\"GiveNamedItem\" not supported by this mod"); } else if (!pCall) { return pContext->ThrowNativeError("\"GiveNamedItem\" wrapper failed to initialize"); } } CBaseEntity *pEntity = NULL; START_CALL(); DECODE_VALVE_PARAM(1, thisinfo, 0); DECODE_VALVE_PARAM(2, vparams, 0); DECODE_VALVE_PARAM(3, vparams, 1); FINISH_CALL_SIMPLE(&pEntity); return gamehelpers->EntityToBCompatRef(pEntity); }
static cell_t CreateEntityByName(IPluginContext *pContext, const cell_t *params) { if (!g_pSM->IsMapRunning()) { return pContext->ThrowNativeError("Cannot create new entity when no map is running"); } static ValveCall *pCall = NULL; if (!pCall) { ValvePassInfo pass[3]; InitPass(pass[0], Valve_String, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[1], Valve_POD, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[2], Valve_CBaseEntity, PassType_Basic, PASSFLAG_BYVAL); if (!CreateBaseCall("CreateEntityByName", ValveCall_Static, &pass[2], pass, 2, &pCall)) { return pContext->ThrowNativeError("\"CreateEntityByName\" not supported by this mod"); } else if (!pCall) { return pContext->ThrowNativeError("\"CreateEntityByName\" wrapper failed to initialize"); } } CBaseEntity *pEntity = NULL; START_CALL(); DECODE_VALVE_PARAM(1, vparams, 0); DECODE_VALVE_PARAM(2, vparams, 1); FINISH_CALL_SIMPLE(&pEntity); return gamehelpers->EntityToBCompatRef(pEntity); }
static cell_t IgniteEntity(IPluginContext *pContext, const cell_t *params) { static ValveCall *pCall = NULL; if (!pCall) { ValvePassInfo pass[4]; InitPass(pass[0], Valve_Float, PassType_Float, PASSFLAG_BYVAL); InitPass(pass[1], Valve_Bool, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[2], Valve_Float, PassType_Float, PASSFLAG_BYVAL); InitPass(pass[3], Valve_Bool, PassType_Basic, PASSFLAG_BYVAL); if (!CreateBaseCall("Ignite", ValveCall_Entity, NULL, pass, 4, &pCall)) { return pContext->ThrowNativeError("\"Ignite\" not supported by this mod"); } else if (!pCall) { return pContext->ThrowNativeError("\"Ignite\" wrapper failed to initialize"); } } START_CALL(); DECODE_VALVE_PARAM(1, thisinfo, 0); DECODE_VALVE_PARAM(2, vparams, 0); DECODE_VALVE_PARAM(3, vparams, 1); DECODE_VALVE_PARAM(4, vparams, 2); DECODE_VALVE_PARAM(5, vparams, 3); FINISH_CALL_SIMPLE(NULL); return 1; }
static cell_t DispatchKeyValueFloat(IPluginContext *pContext, const cell_t *params) { static ValveCall *pCall = NULL; if (!pCall) { ValvePassInfo pass[3]; InitPass(pass[0], Valve_String, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[1], Valve_Float, PassType_Float, PASSFLAG_BYVAL); InitPass(pass[2], Valve_Bool, PassType_Basic, PASSFLAG_BYVAL); if (!CreateBaseCall("DispatchKeyValueFloat", ValveCall_Entity, &pass[2], pass, 2, &pCall)) { return pContext->ThrowNativeError("\"DispatchKeyValueFloat\" not supported by this mod"); } else if (!pCall) { return pContext->ThrowNativeError("\"DispatchKeyValueFloat\" wrapper failed to initialized"); } } bool ret; START_CALL(); DECODE_VALVE_PARAM(1, thisinfo, 0); DECODE_VALVE_PARAM(2, vparams, 0); DECODE_VALVE_PARAM(3, vparams, 1); FINISH_CALL_SIMPLE(&ret); return (ret) ? 1 : 0; }
static cell_t DispatchKeyValueVector(IPluginContext *pContext, const cell_t *params) { static ValveCall *pCall = NULL; if (!pCall) { ValvePassInfo pass[3]; InitPass(pass[0], Valve_String, PassType_Basic, PASSFLAG_BYVAL); #if SOURCE_ENGINE >= SE_ORANGEBOX InitPass(pass[1], Valve_Vector, PassType_Basic, PASSFLAG_BYVAL); #else InitPass(pass[1], Valve_Vector, PassType_Object, PASSFLAG_BYVAL|PASSFLAG_OCTOR|PASSFLAG_OASSIGNOP); #endif InitPass(pass[2], Valve_Bool, PassType_Basic, PASSFLAG_BYVAL); if (!CreateBaseCall("DispatchKeyValueVector", ValveCall_Entity, &pass[2], pass, 2, &pCall)) { return pContext->ThrowNativeError("\"DispatchKeyValueVector\" not supported by this mod"); } else if (!pCall) { return pContext->ThrowNativeError("\"DispatchKeyValueVector\" wrapper failed to initialized"); } } bool ret; START_CALL(); DECODE_VALVE_PARAM(1, thisinfo, 0); DECODE_VALVE_PARAM(2, vparams, 0); DECODE_VALVE_PARAM(3, vparams, 1); FINISH_CALL_SIMPLE(&ret); return (ret) ? 1 : 0; }
static cell_t IgniteEntity(IPluginContext *pContext, const cell_t *params) { static ValveCall *pCall = NULL; if (!pCall) { #if SOURCE_ENGINE == SE_SDK2013 if (!strcmp(g_pSM->GetGameFolderName(), "nmrih")) { ValvePassInfo pass[6]; InitPass(pass[0], Valve_Float, PassType_Float, PASSFLAG_BYVAL); InitPass(pass[1], Valve_Bool, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[2], Valve_Float, PassType_Float, PASSFLAG_BYVAL); InitPass(pass[3], Valve_Bool, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[4], Valve_POD, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[5], Valve_POD, PassType_Basic, PASSFLAG_BYVAL); if (!CreateBaseCall("Ignite", ValveCall_Entity, NULL, pass, 6, &pCall)) { return pContext->ThrowNativeError("\"Ignite\" not supported by this mod"); } else if (!pCall) { return pContext->ThrowNativeError("\"Ignite\" wrapper failed to initialize"); } } else #endif // SDK2013 { ValvePassInfo pass[4]; InitPass(pass[0], Valve_Float, PassType_Float, PASSFLAG_BYVAL); InitPass(pass[1], Valve_Bool, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[2], Valve_Float, PassType_Float, PASSFLAG_BYVAL); InitPass(pass[3], Valve_Bool, PassType_Basic, PASSFLAG_BYVAL); if (!CreateBaseCall("Ignite", ValveCall_Entity, NULL, pass, 4, &pCall)) { return pContext->ThrowNativeError("\"Ignite\" not supported by this mod"); } else if (!pCall) { return pContext->ThrowNativeError("\"Ignite\" wrapper failed to initialize"); } } } START_CALL(); DECODE_VALVE_PARAM(1, thisinfo, 0); DECODE_VALVE_PARAM(2, vparams, 0); DECODE_VALVE_PARAM(3, vparams, 1); DECODE_VALVE_PARAM(4, vparams, 2); DECODE_VALVE_PARAM(5, vparams, 3); #if SOURCE_ENGINE == SE_SDK2013 if (!strcmp(g_pSM->GetGameFolderName(), "nmrih")) { *(int *) (vptr + 14) = 0; *(int *) (vptr + 18) = 0; } #endif // SDK2013 FINISH_CALL_SIMPLE(NULL); return 1; }
static cell_t GivePlayerAmmo(IPluginContext *pContext, const cell_t *params) { static ValveCall *pCall = NULL; if (!pCall) { ValvePassInfo pass[3]; InitPass(pass[0], Valve_POD, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[1], Valve_POD, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[2], Valve_Bool, PassType_Basic, PASSFLAG_BYVAL); if (!CreateBaseCall("GiveAmmo", ValveCall_Player, &pass[0], pass, 3, &pCall)) { return pContext->ThrowNativeError("\"GiveAmmo\" not supported by this mod"); } else if (!pCall) { return pContext->ThrowNativeError("\"GiveAmmo\" wrapper failed to initialize"); } } int ammoGiven; START_CALL(); DECODE_VALVE_PARAM(1, thisinfo, 0); DECODE_VALVE_PARAM(2, vparams, 0); DECODE_VALVE_PARAM(3, vparams, 1); DECODE_VALVE_PARAM(4, vparams, 2); FINISH_CALL_SIMPLE(&ammoGiven); return ammoGiven; }
/* :TODO: This is Team Fortress 2 specific */ static cell_t ForcePlayerSuicide(IPluginContext *pContext, const cell_t *params) { static ValveCall *pCall = NULL; if (!pCall) { ValvePassInfo pass[2]; InitPass(pass[0], Valve_Bool, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[1], Valve_Bool, PassType_Basic, PASSFLAG_BYVAL); if (!CreateBaseCall("CommitSuicide", ValveCall_Player, NULL, pass, 2, &pCall)) { return pContext->ThrowNativeError("\"CommitSuicide\" not supported by this mod"); } else if (!pCall) { return pContext->ThrowNativeError("\"CommitSuicide\" wrapper failed to initialized"); } } START_CALL(); DECODE_VALVE_PARAM(1, thisinfo, 0); *(bool *)(vptr + 4) = false; *(bool *)(vptr + 5) = false; FINISH_CALL_SIMPLE(NULL); return 1; }
static cell_t FindEntityByClassname(IPluginContext *pContext, const cell_t *params) { static ValveCall *pCall = NULL; static bool bProbablyNoFEBC = false; #if SOURCE_ENGINE >= SE_ORANGEBOX if (bProbablyNoFEBC) { return NativeFindEntityByClassname(pContext, params); } #endif if (!pCall) { ValvePassInfo pass[3]; InitPass(pass[0], Valve_CBaseEntity, PassType_Basic, PASSFLAG_BYVAL, VDECODE_FLAG_ALLOWNULL|VDECODE_FLAG_ALLOWWORLD); InitPass(pass[1], Valve_String, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[2], Valve_CBaseEntity, PassType_Basic, PASSFLAG_BYVAL); char error[256]; error[0] = '\0'; if (!CreateBaseCall("FindEntityByClassname", ValveCall_EntityList, &pass[2], pass, 2, &pCall)) { g_pSM->Format(error, sizeof(error), "\"FindEntityByClassname\" not supported by this mod"); } else if (!pCall) { g_pSM->Format(error, sizeof(error), "\"FindEntityByClassname\" wrapper failed to initialize"); } if (error[0] != '\0') { #if SOURCE_ENGINE >= SE_ORANGEBOX if (!bProbablyNoFEBC) { bProbablyNoFEBC = true; g_pSM->LogError(myself, "%s, falling back to IServerTools method.", error); } return NativeFindEntityByClassname(pContext, params); #else return pContext->ThrowNativeError("%s", error); #endif } } CBaseEntity *pEntity; START_CALL(); *(void **)vptr = g_EntList; DECODE_VALVE_PARAM(1, vparams, 0); DECODE_VALVE_PARAM(2, vparams, 1); FINISH_CALL_SIMPLE(&pEntity); return gamehelpers->EntityToBCompatRef(pEntity); }
static cell_t GiveNamedItem(IPluginContext *pContext, const cell_t *params) { if (g_SdkTools.ShouldFollowCSGOServerGuidelines()) { char *pWeaponName; pContext->LocalToString(params[2], &pWeaponName); // Don't allow knives other than weapon_knife, weapon_knifegg, and wewapon_knife_t. // Others follow pattern weapon_knife_* size_t len = strlen(pWeaponName); if (len >= 14 && strnicmp(pWeaponName, "weapon_knife_", 13) == 0 && !(pWeaponName[13] == 't' && pWeaponName[14] == '\0')) { return pContext->ThrowNativeError("Blocked giving of %s due to core.cfg option FollowCSGOServerGuidelines", pWeaponName); } } static ValveCall *pCall = NULL; if (!pCall) { ValvePassInfo pass[5]; InitPass(pass[0], Valve_String, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[1], Valve_POD, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[2], Valve_POD, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[3], Valve_Bool, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[4], Valve_CBaseEntity, PassType_Basic, PASSFLAG_BYVAL); if (!CreateBaseCall("GiveNamedItem", ValveCall_Player, &pass[4], pass, 4, &pCall)) { return pContext->ThrowNativeError("\"GiveNamedItem\" not supported by this mod"); } else if (!pCall) { return pContext->ThrowNativeError("\"GiveNamedItem\" wrapper failed to initialize"); } } CBaseEntity *pEntity = NULL; START_CALL(); DECODE_VALVE_PARAM(1, thisinfo, 0); DECODE_VALVE_PARAM(2, vparams, 0); DECODE_VALVE_PARAM(3, vparams, 1); *(CEconItemView **)(vptr + 12) = NULL; *(bool *)(vptr + 16) = false; FINISH_CALL_SIMPLE(&pEntity); return gamehelpers->EntityToBCompatRef(pEntity); }
/* Dark Messiah specific version */ static cell_t IgniteEntity(IPluginContext *pContext, const cell_t *params) { static ValveCall *pCall = NULL; if (!pCall) { ValvePassInfo pass[6]; InitPass(pass[0], Valve_Float, PassType_Float, PASSFLAG_BYVAL); InitPass(pass[1], Valve_Bool, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[2], Valve_Float, PassType_Float, PASSFLAG_BYVAL); InitPass(pass[3], Valve_Bool, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[4], Valve_POD, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[5], Valve_POD, PassType_Basic, PASSFLAG_BYVAL); if (!CreateBaseCall("Ignite", ValveCall_Entity, NULL, pass, 6, &pCall)) { return pContext->ThrowNativeError("\"Ignite\" not supported by this mod"); } else if (!pCall) { return pContext->ThrowNativeError("\"Ignite\" wrapper failed to initialized"); } } START_CALL(); DECODE_VALVE_PARAM(1, thisinfo, 0); DECODE_VALVE_PARAM(2, vparams, 0); DECODE_VALVE_PARAM(3, vparams, 1); DECODE_VALVE_PARAM(4, vparams, 2); DECODE_VALVE_PARAM(5, vparams, 3); /* Not sure what these params do, but they appear to be the default values */ *(int *)(vptr + 14) = 3; *(int *)(vptr + 18) = 0; FINISH_CALL_SIMPLE(NULL); return 1; }
static cell_t CreateEntityByName(IPluginContext *pContext, const cell_t *params) { static ValveCall *pCall = NULL; if (!pCall) { ValvePassInfo pass[4]; InitPass(pass[0], Valve_String, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[1], Valve_POD, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[2], Valve_Bool, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[3], Valve_CBaseEntity, PassType_Basic, PASSFLAG_BYVAL); if (!CreateBaseCall("CreateEntityByName", ValveCall_Static, &pass[3], pass, 3, &pCall)) { return pContext->ThrowNativeError("\"CreateEntityByName\" not supported by this mod"); } else if (!pCall) { return pContext->ThrowNativeError("\"CreateEntityByName\" wrapper failed to initialized"); } } CBaseEntity *pEntity = NULL; START_CALL(); DECODE_VALVE_PARAM(1, vparams, 0); DECODE_VALVE_PARAM(2, vparams, 1); *(bool *)(vptr + 8) = true; FINISH_CALL_SIMPLE(&pEntity); if (pEntity == NULL) { return -1; } edict_t *pEdict = gameents->BaseEntityToEdict(pEntity); if (!pEdict) { return -1; } return IndexOfEdict(pEdict); }
static cell_t RemovePlayerItem(IPluginContext *pContext, const cell_t *params) { static ValveCall *pCall = NULL; if (!pCall) { ValvePassInfo pass[2]; InitPass(pass[0], Valve_CBaseEntity, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[1], Valve_Bool, PassType_Basic, PASSFLAG_BYVAL); if (!CreateBaseCall("RemovePlayerItem", ValveCall_Player, &pass[1], pass, 1, &pCall)) { return pContext->ThrowNativeError("\"RemovePlayerItem\" not supported by this mod"); } else if (!pCall) { return pContext->ThrowNativeError("\"RemovePlayerItem\" wrapper failed to initialized"); } } bool ret; START_CALL(); DECODE_VALVE_PARAM(1, thisinfo, 0); DECODE_VALVE_PARAM(2, vparams, 0); FINISH_CALL_SIMPLE(&ret); return ret ? 1 : 0; }
static cell_t DispatchSpawn(IPluginContext *pContext, const cell_t *params) { static ValveCall *pCall = NULL; if (!pCall) { ValvePassInfo pass[2]; InitPass(pass[0], Valve_CBaseEntity, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[1], Valve_POD, PassType_Basic, PASSFLAG_BYVAL); if (!CreateBaseCall("DispatchSpawn", ValveCall_Static, &pass[1], pass, 1, &pCall)) { return pContext->ThrowNativeError("\"DispatchSpawn\" not supported by this mod"); } else if (!pCall) { return pContext->ThrowNativeError("\"DispatchSpawn\" wrapper failed to initialized"); } } int ret; START_CALL(); DECODE_VALVE_PARAM(1, vparams, 0); FINISH_CALL_SIMPLE(&ret); return (ret == -1) ? 0 : 1; }
static cell_t SetClientName(IPluginContext *pContext, const cell_t *params) { if (iserver == NULL) { return pContext->ThrowNativeError("IServer interface not supported, file a bug report."); } IGamePlayer *player = playerhelpers->GetGamePlayer(params[1]); IClient *pClient = iserver->GetClient(params[1] - 1); if (player == NULL || pClient == NULL) { return pContext->ThrowNativeError("Invalid client index %d", params[1]); } if (!player->IsConnected()) { return pContext->ThrowNativeError("Client %d is not connected", params[1]); } static ValveCall *pCall = NULL; if (!pCall) { ValvePassInfo params[1]; InitPass(params[0], Valve_String, PassType_Basic, PASSFLAG_BYVAL); if (!CreateBaseCall("SetClientName", ValveCall_Entity, NULL, params, 1, &pCall)) { return pContext->ThrowNativeError("\"SetClientName\" not supported by this mod"); } else if (!pCall) { return pContext->ThrowNativeError("\"SetClientName\" wrapper failed to initialize"); } } // The IClient vtable is +4 from the CBaseClient vtable due to multiple inheritance. void *pGameClient = (void *)((intptr_t)pClient - 4); // Change the name in the engine. START_CALL(); void **ebuf = (void **)vptr; *ebuf = pGameClient; DECODE_VALVE_PARAM(2, vparams, 0); FINISH_CALL_SIMPLE(NULL); // Notify the server of the change. serverClients->ClientSettingsChanged(player->GetEdict()); return 1; }
static cell_t FindEntityByClassname(IPluginContext *pContext, const cell_t *params) { static ValveCall *pCall = NULL; if (!pCall) { ValvePassInfo pass[3]; InitPass(pass[0], Valve_CBaseEntity, PassType_Basic, PASSFLAG_BYVAL, VDECODE_FLAG_ALLOWNULL|VDECODE_FLAG_ALLOWWORLD); InitPass(pass[1], Valve_String, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[2], Valve_CBaseEntity, PassType_Basic, PASSFLAG_BYVAL); if (!CreateBaseCall("FindEntityByClassname", ValveCall_EntityList, &pass[2], pass, 2, &pCall)) { return pContext->ThrowNativeError("\"FindEntityByClassname\" not supported by this mod"); } else if (!pCall) { return pContext->ThrowNativeError("\"FindEntityByClassname\" wrapper failed to initialized"); } } CBaseEntity *pEntity; START_CALL(); *(void **)vptr = g_EntList; DECODE_VALVE_PARAM(1, vparams, 0); DECODE_VALVE_PARAM(2, vparams, 1); FINISH_CALL_SIMPLE(&pEntity); if (pEntity == NULL) { return -1; } edict_t *pEdict = gameents->BaseEntityToEdict(pEntity); if (!pEdict) { return -1; } return IndexOfEdict(pEdict); }
static cell_t WeaponEquip(IPluginContext *pContext, const cell_t *params) { static ValveCall *pCall = NULL; if (!pCall) { ValvePassInfo pass[1]; InitPass(pass[0], Valve_CBaseEntity, PassType_Basic, PASSFLAG_BYVAL); if (!CreateBaseCall("WeaponEquip", ValveCall_Player, NULL, pass, 1, &pCall)) { return pContext->ThrowNativeError("\"WeaponEquip\" not supported by this mod"); } else if (!pCall) { return pContext->ThrowNativeError("\"WeaponEquip\" wrapper failed to initialized"); } } START_CALL(); DECODE_VALVE_PARAM(1, thisinfo, 0); DECODE_VALVE_PARAM(2, vparams, 0); FINISH_CALL_SIMPLE(NULL); return 1; }
static cell_t SetClientInfo(IPluginContext *pContext, const cell_t *params) { if (iserver == NULL) { return pContext->ThrowNativeError("IServer interface not supported, file a bug report."); } IGamePlayer *player = playerhelpers->GetGamePlayer(params[1]); IClient *pClient = iserver->GetClient(params[1] - 1); if (player == NULL || pClient == NULL) { return pContext->ThrowNativeError("Invalid client index %d", params[1]); } if (!player->IsConnected()) { return pContext->ThrowNativeError("Client %d is not connected", params[1]); } static ValveCall *pCall = NULL; if (!pCall) { ValvePassInfo params[2]; InitPass(params[0], Valve_String, PassType_Basic, PASSFLAG_BYVAL); InitPass(params[1], Valve_String, PassType_Basic, PASSFLAG_BYVAL); if (!CreateBaseCall("SetUserCvar", ValveCall_Entity, NULL, params, 2, &pCall)) { return pContext->ThrowNativeError("\"SetUserCvar\" not supported by this mod"); } else if (!pCall) { return pContext->ThrowNativeError("\"SetUserCvar\" wrapper failed to initialized"); } } /* TODO: Use UpdateUserSettings function for all engines */ #if SOURCE_ENGINE == SE_DARKMESSIAH static ValveCall *pUpdateSettings = NULL; if (!pUpdateSettings) { if (!CreateBaseCall("UpdateUserSettings", ValveCall_Entity, NULL, NULL, 0, &pUpdateSettings)) { return pContext->ThrowNativeError("\"SetUserCvar\" not supported by this mod"); } else if (!pUpdateSettings) { return pContext->ThrowNativeError("\"SetUserCvar\" wrapper failed to initialized"); } } #else static int changedOffset = -1; if (changedOffset == -1) { if (!g_pGameConf->GetOffset("InfoChanged", &changedOffset)) { return pContext->ThrowNativeError("\"SetUserCvar\" not supported by this mod"); } } #endif unsigned char *CGameClient = (unsigned char *)pClient - 4; START_CALL(); /* Not really a CBaseEntity* but this works */ CBaseEntity **ebuf = (CBaseEntity **)vptr; *ebuf = (CBaseEntity *)CGameClient; DECODE_VALVE_PARAM(2, vparams, 0); DECODE_VALVE_PARAM(3, vparams, 1); FINISH_CALL_SIMPLE(NULL); #if SOURCE_ENGINE == SE_DARKMESSIAH unsigned char *args = pUpdateSettings->stk_get(); *(void **)args = CGameClient; pUpdateSettings->call->Execute(args, NULL); pUpdateSettings->stk_put(args); #else uint8_t* changed = (uint8_t *)(CGameClient + changedOffset); *changed = 1; #endif return 1; }
void CapASM::Compile(const char * filename) { std::cout << "&Compilation of " << string(filename).c_str() << endl ; char buf[MAX_PATH]; int base_encoding; /* added */ char* p; int i = 1; CleanUP(); // init LUA LUA = lua_open(); lua_atpanic(LUA, (lua_CFunction)LuaFatalError); luaL_openlibs(LUA); luaopen_pack(LUA); tolua_sjasm_open(LUA); // init vars Options::DestionationFName[0] = 0; STRCPY( Options::ListingFName, LINEMAX, "/tmp/caprice.lst"); //TODO generate file name Options::UnrealLabelListFName[0] = 0; STRCPY( Options::SymbolListFName, LINEMAX, "/tmp/caprice.sym"); Options::ExportFName[0] = 0; Options::RAWFName[0] = 0; Options::NoDestinationFile = true; // not *.out files by default // start counter long dwStart; dwStart = GetTickCount(); // get current directory GetCurrentDirectory(MAX_PATH, buf); CurrentDirectory = buf; STRCPY(SourceFNames[SourceFNamesCount++], LINEMAX, filename); if (!SourceFNames[0][0]) { _COUT "No inputfile(s)" _ENDL; return; } if (!Options::DestionationFName[0]) { STRCPY(Options::DestionationFName, LINEMAX, SourceFNames[0]); if (!(p = strchr(Options::DestionationFName, '.'))) { p = Options::DestionationFName; } else { *p = 0; } STRCAT(p, LINEMAX-(p-Options::DestionationFName), ".out"); } // init some vars InitCPU(); // if memory type != none base_encoding = ConvertEncoding; // init first pass InitPass(1); // open lists OpenList(); // open source filenames for (i = 0; i < SourceFNamesCount; i++) { OpenFile(SourceFNames[i]); } _COUT "Pass 1 complete (" _CMDL ErrorCount _CMDL " errors)" _ENDL; ConvertEncoding = base_encoding; do { pass++; InitPass(pass); if (pass == LASTPASS) { OpenDest(); } for (i = 0; i < SourceFNamesCount; i++) { OpenFile(SourceFNames[i]); } if (PseudoORG) { CurAddress = adrdisp; PseudoORG = 0; } if (pass != LASTPASS) { _COUT "Pass " _CMDL pass _CMDL " complete (" _CMDL ErrorCount _CMDL " errors)" _ENDL; } else { _COUT "Pass 3 complete" _ENDL; } } while (pass < 3);//MAXPASSES); pass = 9999; /* added for detect end of compiling */ if (Options::AddLabelListing) { LabelTable.Dump(); } Close(); if (Options::UnrealLabelListFName[0]) { LabelTable.DumpForUnreal(); } if (Options::SymbolListFName[0]) { LabelTable.DumpSymbols(); } _COUT "Errors: " _CMDL ErrorCount _CMDL ", warnings: " _CMDL WarningCount _CMDL ", compiled: " _CMDL CompiledCurrentLine _CMDL " lines" _END; double dwCount; dwCount = GetTickCount() - dwStart; if (dwCount < 0) { dwCount = 0; } printf(", work time: %.3f seconds", dwCount / 1000); _COUT "" _ENDL; #ifndef UNDER_CE cout << flush; #endif // free RAM delete Devices; Devices = 0; // close Lua lua_close(LUA); //return (ErrorCount != 0); }
static cell_t FindEntityByClassname(IPluginContext *pContext, const cell_t *params) { #if SOURCE_ENGINE == SE_TF2 \ || SOURCE_ENGINE == SE_DODS \ || SOURCE_ENGINE == SE_HL2DM \ || SOURCE_ENGINE == SE_CSS \ || SOURCE_ENGINE == SE_BMS \ || SOURCE_ENGINE == SE_SDK2013 \ || SOURCE_ENGINE == SE_NUCLEARDAWN static bool bHasServerTools3 = !!g_SMAPI->GetServerFactory(false)("VSERVERTOOLS003", nullptr); if (bHasServerTools3) { CBaseEntity *pStartEnt = NULL; if (params[1] != -1) { pStartEnt = gamehelpers->ReferenceToEntity(params[1]); if (!pStartEnt) { return pContext->ThrowNativeError("Entity %d (%d) is invalid", gamehelpers->ReferenceToIndex(params[1]), params[1]); } } char *searchname; pContext->LocalToString(params[2], &searchname); CBaseEntity *pEntity = servertools->FindEntityByClassname(pStartEnt, searchname); return gamehelpers->EntityToBCompatRef(pEntity); } #endif static ValveCall *pCall = NULL; static bool bProbablyNoFEBC = false; #if SOURCE_ENGINE >= SE_ORANGEBOX if (bProbablyNoFEBC) { return NativeFindEntityByClassname(pContext, params); } #endif // >= SE_ORANGEBOX if (!pCall) { ValvePassInfo pass[3]; InitPass(pass[0], Valve_CBaseEntity, PassType_Basic, PASSFLAG_BYVAL, VDECODE_FLAG_ALLOWNULL|VDECODE_FLAG_ALLOWWORLD); InitPass(pass[1], Valve_String, PassType_Basic, PASSFLAG_BYVAL); InitPass(pass[2], Valve_CBaseEntity, PassType_Basic, PASSFLAG_BYVAL); char error[256]; error[0] = '\0'; if (!CreateBaseCall("FindEntityByClassname", ValveCall_EntityList, &pass[2], pass, 2, &pCall)) { g_pSM->Format(error, sizeof(error), "\"FindEntityByClassname\" not supported by this mod"); } else if (!pCall) { g_pSM->Format(error, sizeof(error), "\"FindEntityByClassname\" wrapper failed to initialize"); } if (error[0] != '\0') { #if SOURCE_ENGINE >= SE_ORANGEBOX if (!bProbablyNoFEBC) { bProbablyNoFEBC = true; // CreateBaseCall above abstracts all of the gamedata logic, but we need to know if the key was even found. // We don't want to log an error if key isn't present (knowing falling back to native method), only throw // error if signature/symbol was not found. void *dummy; if (g_pGameConf->GetMemSig("FindEntityByClassname", &dummy)) { g_pSM->LogError(myself, "%s, falling back to IServerTools method.", error); } } return NativeFindEntityByClassname(pContext, params); #else return pContext->ThrowNativeError("%s", error); #endif // >= ORANGEBOX } } CBaseEntity *pEntity; START_CALL(); *(void **)vptr = g_EntList; DECODE_VALVE_PARAM(1, vparams, 0); DECODE_VALVE_PARAM(2, vparams, 1); FINISH_CALL_SIMPLE(&pEntity); return gamehelpers->EntityToBCompatRef(pEntity); }
int main(int argc, char* argv[]) { char buf[MAX_PATH]; int base_encoding; /* added */ char* p; char* logo = "SjASMPlus Z80 Cross-Assembler v1.08 (build 07-04-2016)"; int i = 1; if (argc == 1) { _COUT logo _ENDL; _COUT "based on code of SjASM by Sjoerd Mastijn / http://www.xl2s.tk /" _ENDL; _COUT "Copyright 2004-2008 by Aprisobal / http://sjasmplus.sf.net / [email protected] /" _ENDL; _COUT "Modified 2016 AntonioVillena" _ENDL; _COUT "\nUsage:\nsjasmplus [options] sourcefile(s)" _ENDL; _COUT "\nOption flags as follows:" _ENDL; _COUT " --help Help information (you see it)" _ENDL; _COUT " -i<path> or -I<path> or --inc=<path>" _ENDL; _COUT " Include path" _ENDL; _COUT " --lst=<filename> Save listing to <filename>" _ENDL; _COUT " --lstlab Enable label table in listing" _ENDL; _COUT " --sym=<filename> Save symbols list to <filename>" _ENDL; _COUT " --exp=<filename> Save exports to <filename> (see EXPORT pseudo-op)" _ENDL; _COUT " --raw=<filename> Save all output to <filename> ignoring OUTPUT pseudo-ops" _ENDL; _COUT " Logging:" _ENDL; _COUT " --nologo Do not show startup message" _ENDL; _COUT " --msg=error Show only error messages" _ENDL; _COUT " --msg=all Show all messages (by default)" _ENDL; _COUT " --fullpath Show full path to error file" _ENDL; _COUT " Other:" _ENDL; _COUT " --reversepop Enable reverse POP order (as in base SjASM version)" _ENDL; _COUT " --dirbol Enable processing directives from the beginning of line" _ENDL; _COUT " --dos866 Encode from Windows codepage to DOS 866 (Cyrillic)" _ENDL; exit(1); } // init vars Options::DestionationFName[0] = 0; Options::ListingFName[0] = 0; Options::UnrealLabelListFName[0] = 0; Options::SymbolListFName[0] = 0; Options::ExportFName[0] = 0; Options::RAWFName[0] = 0; Options::NoDestinationFile = true; // not *.out files by default // start counter long dwStart; dwStart = GetTickCount(); // get current directory GetCurrentDirectory(MAX_PATH, buf); CurrentDirectory = buf; // get arguments Options::IncludeDirsList = new CStringsList(".", Options::IncludeDirsList); while (argv[i]) { Options::GetOptions(argv, i); if (argv[i]) { STRCPY(SourceFNames[SourceFNamesCount++], LINEMAX, argv[i++]); } } if (!Options::HideLogo) { _COUT logo _ENDL; } if (!SourceFNames[0][0]) { _COUT "No inputfile(s)" _ENDL; exit(1); } if (!Options::DestionationFName[0]) { STRCPY(Options::DestionationFName, LINEMAX, SourceFNames[0]); if (!(p = strchr(Options::DestionationFName, '.'))) { p = Options::DestionationFName; } else { *p = 0; } STRCAT(p, LINEMAX-(p-Options::DestionationFName), ".out"); } // init some vars InitCPU(); // if memory type != none base_encoding = ConvertEncoding; // init first pass InitPass(1); // open lists OpenList(); // open source filenames for (i = 0; i < SourceFNamesCount; i++) { OpenFile(SourceFNames[i]); } _COUT "Pass 1 complete (" _CMDL ErrorCount _CMDL " errors)" _ENDL; ConvertEncoding = base_encoding; do { pass++; InitPass(pass); if (pass == LASTPASS) { OpenDest(); } for (i = 0; i < SourceFNamesCount; i++) { OpenFile(SourceFNames[i]); } if (PseudoORG) { CurAddress = adrdisp; PseudoORG = 0; } if (pass != LASTPASS) { _COUT "Pass " _CMDL pass _CMDL " complete (" _CMDL ErrorCount _CMDL " errors)" _ENDL; } else { _COUT "Pass 3 complete" _ENDL; } } while (pass < 3);//MAXPASSES); pass = 9999; /* added for detect end of compiling */ if (Options::AddLabelListing) { LabelTable.Dump(); } Close(); if (Options::UnrealLabelListFName[0]) { LabelTable.DumpForUnreal(); } if (Options::SymbolListFName[0]) { LabelTable.DumpSymbols(); } _COUT "Errors: " _CMDL ErrorCount _CMDL ", warnings: " _CMDL WarningCount _CMDL ", compiled: " _CMDL CompiledCurrentLine _CMDL " lines" _END; double dwCount; dwCount = GetTickCount() - dwStart; if (dwCount < 0) { dwCount = 0; } printf(", work time: %.3f seconds", dwCount / 1000); _COUT "" _ENDL; cout << flush; // free RAM if (Devices) { delete Devices; } return (ErrorCount != 0); }