void CLuaHandle::ProjectileDestroyed(const CProjectile* projectile) { LUA_CALL_IN_CHECK(L); lua_checkstack(L, 4); static const LuaHashString cmdStr("ProjectileDestroyed"); if (!cmdStr.GetGlobalFunc(L)) { return; // the call is not defined } lua_pushnumber(L, projectile->id); // call the routine RunCallIn(cmdStr, 1, 0); return; }
void CLuaHandle::PlayerChanged(int playerID) { LUA_CALL_IN_CHECK(L); lua_checkstack(L, 3); static const LuaHashString cmdStr("PlayerChanged"); if (!cmdStr.GetGlobalFunc(L)) { return; // the call is not defined } lua_pushnumber(L, playerID); // call the routine RunCallIn(cmdStr, 1, 0); return; }
void CLuaIntro::LoadProgress(const std::string& msg, const bool replace_lastline) { LUA_CALL_IN_CHECK(L); luaL_checkstack(L, 4, __FUNCTION__); static const LuaHashString cmdStr("LoadProgress"); if (!cmdStr.GetGlobalFunc(L)) { return; } lua_pushsstring(L, msg); lua_pushboolean(L, replace_lastline); // call the routine RunCallIn(L, cmdStr, 2, 0); }
void CLuaHandle::FeatureDestroyed(const CFeature* feature) { LUA_CALL_IN_CHECK(L); lua_checkstack(L, 4); static const LuaHashString cmdStr("FeatureDestroyed"); if (!cmdStr.GetGlobalFunc(L)) { return; // the call is not defined } lua_pushnumber(L, feature->id); lua_pushnumber(L, feature->allyteam); // call the routine RunCallIn(cmdStr, 2, 0); return; }
bool CLuaHandleSynced::GotChatMsg(const string& msg, int playerID) { LUA_CALL_IN_CHECK(L); lua_checkstack(L, 4); static const LuaHashString cmdStr("GotChatMsg"); if (!cmdStr.GetGlobalFunc(L)) { return true; // the call is not defined } lua_pushstring(L, msg.c_str()); lua_pushnumber(L, playerID); // call the routine RunCallIn(cmdStr, 2, 0); return true; }
inline void CLuaHandle::UnitCallIn(const LuaHashString& hs, const CUnit* unit) { LUA_CALL_IN_CHECK(L); lua_checkstack(L, 5); if (!hs.GetGlobalFunc(L)) { return; // the call is not defined } lua_pushnumber(L, unit->id); lua_pushnumber(L, unit->unitDef->id); lua_pushnumber(L, unit->team); // call the routine RunCallIn(hs, 3, 0); return; }
void CUnsyncedLuaHandle::RecvFromSynced(lua_State* srcState, int args) { if (!IsValid()) return; LUA_CALL_IN_CHECK(L); luaL_checkstack(L, 2 + args, __FUNCTION__); static const LuaHashString cmdStr("RecvFromSynced"); if (!cmdStr.GetGlobalFunc(L)) return; // the call is not defined LuaUtils::CopyData(L, srcState, args); // call the routine RunCallIn(L, cmdStr, args, 0); }
void CLuaHandle::UnitGiven(const CUnit* unit, int oldTeam) { LUA_CALL_IN_CHECK(L); lua_checkstack(L, 6); static const LuaHashString cmdStr("UnitGiven"); if (!cmdStr.GetGlobalFunc(L)) { return; // the call is not defined } lua_pushnumber(L, unit->id); lua_pushnumber(L, unit->unitDef->id); lua_pushnumber(L, unit->team); lua_pushnumber(L, oldTeam); // call the routine RunCallIn(cmdStr, 4, 0); return; }
void CLuaHandle::ProjectileCreated(const CProjectile* projectile) { LUA_CALL_IN_CHECK(L); lua_checkstack(L, 4); static const LuaHashString cmdStr("ProjectileCreated"); if (!cmdStr.GetGlobalFunc(L)) { return; // the call is not defined } const bool b = (projectile->owner != 0x0); lua_pushnumber(L, projectile->id); lua_pushnumber(L, b ? projectile->owner->id : -1); // call the routine RunCallIn(cmdStr, 2, 0); return; }
void CLuaHandleSynced::SendCallbacks() { LUA_CALL_IN_CHECK(L); lua_checkstack(L, 5); const int count = (int)cobCallbackEntries.size(); for (int cb = 0; cb < count; cb++) { static const LuaHashString cmdStr("CobCallback"); if (!cmdStr.GetGlobalFunc(L)) { return; } const CobCallbackData& cbd = cobCallbackEntries[cb]; lua_pushnumber(L, cbd.retCode); lua_pushnumber(L, cbd.unitID); lua_pushnumber(L, cbd.floatData); // call the routine RunCallIn(cmdStr, 3, 0); } cobCallbackEntries.clear(); }
void CLuaHandle::UnitUnloaded(const CUnit* unit, const CUnit* transport) { LUA_CALL_IN_CHECK(L); lua_checkstack(L, 7); static const LuaHashString cmdStr("UnitUnloaded"); if (!cmdStr.GetGlobalFunc(L)) { return; // the call is not defined } lua_pushnumber(L, unit->id); lua_pushnumber(L, unit->unitDef->id); lua_pushnumber(L, unit->team); lua_pushnumber(L, transport->id); lua_pushnumber(L, transport->team); // call the routine RunCallIn(cmdStr, 5, 0); return; }
void CLuaIntro::DrawLoadScreen() { LUA_CALL_IN_CHECK(L); luaL_checkstack(L, 2, __FUNCTION__); static const LuaHashString cmdStr("DrawLoadScreen"); if (!cmdStr.GetGlobalFunc(L)) { //LuaOpenGL::DisableCommon(LuaOpenGL::DRAW_SCREEN); return; // the call is not defined } LuaOpenGL::SetDrawingEnabled(L, true); LuaOpenGL::EnableCommon(LuaOpenGL::DRAW_SCREEN); // call the routine RunCallIn(L, cmdStr, 0, 0); LuaOpenGL::DisableCommon(LuaOpenGL::DRAW_SCREEN); LuaOpenGL::SetDrawingEnabled(L, false); }
void CLuaHandle::UnitCmdDone(const CUnit* unit, int cmdID, int cmdTag) { LUA_CALL_IN_CHECK(L); lua_checkstack(L, 7); static const LuaHashString cmdStr("UnitCmdDone"); if (!cmdStr.GetGlobalFunc(L)) { return; // the call is not defined } lua_pushnumber(L, unit->id); lua_pushnumber(L, unit->unitDef->id); lua_pushnumber(L, unit->team); lua_pushnumber(L, cmdID); lua_pushnumber(L, cmdTag); // call the routine RunCallIn(cmdStr, 5, 0); return; }
void CLuaHandle::UnitExperience(const CUnit* unit, float oldExperience) { LUA_CALL_IN_CHECK(L); lua_checkstack(L, 7); static const LuaHashString cmdStr("UnitExperience"); if (!cmdStr.GetGlobalFunc(L)) { return; // the call is not defined } lua_pushnumber(L, unit->id); lua_pushnumber(L, unit->unitDef->id); lua_pushnumber(L, unit->team); lua_pushnumber(L, unit->experience); lua_pushnumber(L, oldExperience); // call the routine RunCallIn(cmdStr, 5, 0); return; }
bool CSyncedLuaHandle::CommandFallback(const CUnit* unit, const Command& cmd) { LUA_CALL_IN_CHECK(L, true); luaL_checkstack(L, 9, __FUNCTION__); static const LuaHashString cmdStr(__FUNCTION__); if (!cmdStr.GetGlobalFunc(L)) return true; // the call is not defined PushUnitAndCommand(L, unit, cmd); // call the function if (!RunCallIn(L, cmdStr, 7, 1)) return true; const bool retval = luaL_optboolean(L, -1, true); lua_pop(L, 1); return retval; // return 'true' to remove the command }
void CLuaHandleSynced::RecvFromSynced(int args) { //LUA_CALL_IN_CHECK(L); -- not valid here static const LuaHashString cmdStr("RecvFromSynced"); if (!cmdStr.GetRegistryFunc(L)) { return; // the call is not defined } lua_insert(L, 1); // place the function // call the routine allowChanges = false; synced = false; RunCallIn(cmdStr, args, 0); synced = true; allowChanges = true; return; }
void CLuaHandle::LosCallIn(const LuaHashString& hs, const CUnit* unit, int allyTeam) { LUA_CALL_IN_CHECK(L); lua_checkstack(L, 6); if (!hs.GetGlobalFunc(L)) { return; // the call is not defined } lua_pushnumber(L, unit->id); lua_pushnumber(L, unit->team); if (fullRead) { lua_pushnumber(L, allyTeam); lua_pushnumber(L, unit->unitDef->id); } // call the routine RunCallIn(hs, fullRead ? 4 : 2, 0); return; }
void CLuaHandle::UnitCreated(const CUnit* unit, const CUnit* builder) { LUA_CALL_IN_CHECK(L); lua_checkstack(L, 6); static const LuaHashString cmdStr("UnitCreated"); if (!cmdStr.GetGlobalFunc(L)) { return; // the call is not defined } lua_pushnumber(L, unit->id); lua_pushnumber(L, unit->unitDef->id); lua_pushnumber(L, unit->team); if (builder != NULL) { lua_pushnumber(L, builder->id); } // call the routine RunCallIn(cmdStr, (builder != NULL) ? 4 : 3, 0); return; }
bool CLuaRules::TerraformComplete(const CUnit* unit, const CUnit* build) { if (!haveTerraformComplete) { return false; // the call is not defined } LUA_CALL_IN_CHECK(L); lua_checkstack(L, 8); static const LuaHashString cmdStr("TerraformComplete"); if (!cmdStr.GetGlobalFunc(L)) { return false; // the call is not defined } // push the unit info lua_pushnumber(L, unit->id); lua_pushnumber(L, unit->unitDef->id); lua_pushnumber(L, unit->team); // push the construction info lua_pushnumber(L, build->id); lua_pushnumber(L, build->unitDef->id); lua_pushnumber(L, build->team); // call the function if (!RunCallIn(cmdStr, 6, 1)) { return false; } // get the results if (!lua_isboolean(L, -1)) { logOutput.Print("%s() bad return value\n", cmdStr.GetString().c_str()); lua_pop(L, 1); return false; } const bool retval = !!lua_toboolean(L, -1); lua_pop(L, 1); // return 'true' to remove the command return retval; }
const char* CLuaRules::AICallIn(const char* data, int inSize, int* outSize) { if (!haveAICallIn) { return NULL; } LUA_CALL_IN_CHECK(L); lua_checkstack(L, 3); static const LuaHashString cmdStr("AICallIn"); if (!cmdStr.GetRegistryFunc(L)) { return NULL; } int argCount = 0; if (data != NULL) { if (inSize < 0) { inSize = strlen(data); } lua_pushlstring(L, data, inSize); argCount = 1; } if (!RunCallIn(cmdStr, argCount, 1)) { return NULL; } if (!lua_isstring(L, -1)) { lua_pop(L, 1); return NULL; } size_t len; const char* outData = lua_tolstring(L, -1, &len); if (outSize != NULL) { *outSize = len; } lua_pop(L, 1); return outData; }
void CLuaHandle::UnitFromFactory(const CUnit* unit, const CUnit* factory, bool userOrders) { LUA_CALL_IN_CHECK(L); lua_checkstack(L, 8); static const LuaHashString cmdStr("UnitFromFactory"); if (!cmdStr.GetGlobalFunc(L)) { return; // the call is not defined } lua_pushnumber(L, unit->id); lua_pushnumber(L, unit->unitDef->id); lua_pushnumber(L, unit->team); lua_pushnumber(L, factory->id); lua_pushnumber(L, factory->unitDef->id); lua_pushboolean(L, userOrders); // call the routine RunCallIn(cmdStr, 6, 0); return; }
bool CLuaRules::AllowUnitCreation(const UnitDef* unitDef, const CUnit* builder, const float3* pos) { if (!haveAllowUnitCreation) { return true; // the call is not defined } lua_settop(L, 0); static const LuaHashString cmdStr("AllowUnitCreation"); if (!cmdStr.GetGlobalFunc(L)) { lua_settop(L, 0); return true; // the call is not defined } lua_pushnumber(L, unitDef->id); lua_pushnumber(L, builder->id); lua_pushnumber(L, builder->team); if (pos) { lua_pushnumber(L, pos->x); lua_pushnumber(L, pos->y); lua_pushnumber(L, pos->z); } // call the function if (!RunCallIn(cmdStr, pos ? 6 : 4, 1)) { return true; } // get the results const int args = lua_gettop(L); if ((args != 1) || !lua_isboolean(L, -1)) { logOutput.Print("%s() bad return value (%i)\n", cmdStr.GetString().c_str(), args); lua_settop(L, 0); return true; } return !!lua_toboolean(L, -1); }
bool CSyncedLuaHandle::AllowCommand(const CUnit* unit, const Command& cmd, bool fromSynced) { LUA_CALL_IN_CHECK(L, true); luaL_checkstack(L, 10, __FUNCTION__); static const LuaHashString cmdStr(__FUNCTION__); if (!cmdStr.GetGlobalFunc(L)) return true; // the call is not defined PushUnitAndCommand(L, unit, cmd); lua_pushboolean(L, fromSynced); // call the function if (!RunCallIn(L, cmdStr, 8, 1)) return true; // get the results const bool retval = luaL_optboolean(L, -1, true); lua_pop(L, 1); return retval; }
bool CSyncedLuaHandle::AllowResourceLevel(int teamID, const string& type, float level) { LUA_CALL_IN_CHECK(L, true); luaL_checkstack(L, 5, __FUNCTION__); static const LuaHashString cmdStr(__FUNCTION__); if (!cmdStr.GetGlobalFunc(L)) return true; // the call is not defined lua_pushnumber(L, teamID); lua_pushsstring(L, type); lua_pushnumber(L, level); // call the function if (!RunCallIn(L, cmdStr, 3, 1)) return true; // get the results const bool retval = luaL_optboolean(L, -1, true); lua_pop(L, 1); return retval; }
void CLuaHandle::StockpileChanged(const CUnit* unit, const CWeapon* weapon, int oldCount) { LUA_CALL_IN_CHECK(L); lua_checkstack(L, 8); static const LuaHashString cmdStr("StockpileChanged"); if (!cmdStr.GetGlobalFunc(L)) { return; } lua_pushnumber(L, unit->id); lua_pushnumber(L, unit->unitDef->id); lua_pushnumber(L, unit->team); lua_pushnumber(L, weapon->weaponNum); lua_pushnumber(L, oldCount); lua_pushnumber(L, weapon->numStockpiled); // call the routine RunCallIn(cmdStr, 6, 0); return; }
bool CLuaHandle::AddConsoleLine(const string& msg, int zone) { if (!CheckModUICtrl()) { return true; // FIXME? } LUA_CALL_IN_CHECK(L); lua_checkstack(L, 4); static const LuaHashString cmdStr("AddConsoleLine"); if (!PushUnsyncedCallIn(cmdStr)) { return true; // the call is not defined } lua_pushstring(L, msg.c_str()); lua_pushnumber(L, zone); // call the function if (!RunCallIn(cmdStr, 2, 0)) { return false; } return true; }
bool CLuaHandle::Explosion(int weaponID, const float3& pos, const CUnit* owner) { if ((weaponID >= (int)watchWeapons.size()) || (weaponID < 0)) { return false; } if (!watchWeapons[weaponID]) { return false; } LUA_CALL_IN_CHECK(L); lua_checkstack(L, 7); static const LuaHashString cmdStr("Explosion"); if (!cmdStr.GetGlobalFunc(L)) { return false; // the call is not defined } lua_pushnumber(L, weaponID); lua_pushnumber(L, pos.x); lua_pushnumber(L, pos.y); lua_pushnumber(L, pos.z); if (owner != NULL) { lua_pushnumber(L, owner->id); } // call the routine RunCallIn(cmdStr, (owner == NULL) ? 4 : 5, 1); // get the results if (!lua_isboolean(L, -1)) { logOutput.Print("%s() bad return value\n", cmdStr.GetString().c_str()); lua_pop(L, 1); return false; } const bool retval = !!lua_toboolean(L, -1); lua_pop(L, 1); return retval; }
bool CLuaRules::AllowUnitCreation(const UnitDef* unitDef, const CUnit* builder, const float3* pos) { if (!haveAllowUnitCreation) { return true; // the call is not defined } LUA_CALL_IN_CHECK(L); lua_checkstack(L, 8); static const LuaHashString cmdStr("AllowUnitCreation"); if (!cmdStr.GetGlobalFunc(L)) { return true; // the call is not defined } lua_pushnumber(L, unitDef->id); lua_pushnumber(L, builder->id); lua_pushnumber(L, builder->team); if (pos) { lua_pushnumber(L, pos->x); lua_pushnumber(L, pos->y); lua_pushnumber(L, pos->z); } // call the function if (!RunCallIn(cmdStr, pos ? 6 : 3, 1)) { return true; } // get the results if (!lua_isboolean(L, -1)) { logOutput.Print("%s() bad return value\n", cmdStr.GetString().c_str()); lua_pop(L, 1); return true; } const bool retval = !!lua_toboolean(L, -1); lua_pop(L, 1); return retval; }
bool CSyncedLuaHandle::AllowDirectUnitControl(int playerID, const CUnit* unit) { LUA_CALL_IN_CHECK(L, true); luaL_checkstack(L, 6, __FUNCTION__); static const LuaHashString cmdStr(__FUNCTION__); if (!cmdStr.GetGlobalFunc(L)) return true; // the call is not defined lua_pushnumber(L, unit->id); lua_pushnumber(L, unit->unitDef->id); lua_pushnumber(L, unit->team); lua_pushnumber(L, playerID); // call the function if (!RunCallIn(L, cmdStr, 4, 1)) return true; // get the results const bool retval = luaL_optboolean(L, -1, true); lua_pop(L, 1); return retval; }
bool CLuaHandle::AddConsoleLine(const string& msg, const CLogSubsystem& /**/) { if (!CheckModUICtrl()) { return true; // FIXME? } LUA_CALL_IN_CHECK(L); lua_checkstack(L, 4); static const LuaHashString cmdStr("AddConsoleLine"); if (!PushUnsyncedCallIn(cmdStr)) { return true; // the call is not defined } lua_pushstring(L, msg.c_str()); // FIXME: makes no sense now, but *gets might expect this lua_pushnumber(L, 0); // call the function if (!RunCallIn(cmdStr, 2, 0)) { return false; } return true; }