Skip to content

Commit

Permalink
Revert "Merge branch 'were_engineers_not_salt_miners' into 'master'"
Browse files Browse the repository at this point in the history
This reverts merge request !4178
  • Loading branch information
psi29a committed Jun 25, 2024
1 parent 8471cfb commit 6754b8d
Show file tree
Hide file tree
Showing 13 changed files with 55 additions and 123 deletions.
1 change: 0 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,6 @@
Feature #7964: Add Lua read access to MW Dialogue records
Feature #7971: Make save's Time Played value display hours instead of days
Feature #7985: Support dark mode on Windows
Feature #8028: Lua Engine Handler for MWScript `startscript` functionality.
Task #5896: Do not use deprecated MyGUI properties
Task #6085: Replace boost::filesystem with std::filesystem
Task #6149: Dehardcode Lua API_REVISION
Expand Down
3 changes: 0 additions & 3 deletions apps/openmw/mwbase/luamanager.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -150,9 +150,6 @@ namespace MWBase
= 0;

virtual std::string formatResourceUsageStats() const = 0;

virtual void globalMWScriptCalled(const ESM::RefId& scriptName, const MWWorld::Ptr& target, const bool started)
= 0;
};

}
Expand Down
8 changes: 0 additions & 8 deletions apps/openmw/mwlua/engineevents.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -113,14 +113,6 @@ namespace MWLua
scripts->onSkillLevelUp(event.mSkill, event.mSource);
}

void operator()(const OnGlobalScriptRequested& event) const
{
sol::optional<GObject> target;
if (event.mTarget.isSet())
target = GObject(event.mTarget);
mGlobalScripts.onGlobalScriptRequested(MWScriptRef{ event.mScript, {} }, event.mStarted, target);
}

private:
MWWorld::Ptr getPtr(ESM::RefNum id) const
{
Expand Down
8 changes: 1 addition & 7 deletions apps/openmw/mwlua/engineevents.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,14 +70,8 @@ namespace MWLua
std::string mSkill;
std::string mSource;
};
struct OnGlobalScriptRequested
{
ESM::RefId mScript;
ESM::RefNum mTarget;
bool mStarted;
};
using Event = std::variant<OnActive, OnInactive, OnConsume, OnActivate, OnUseItem, OnNewExterior, OnTeleported,
OnAnimationTextKey, OnSkillUse, OnSkillLevelUp, OnGlobalScriptRequested>;
OnAnimationTextKey, OnSkillUse, OnSkillLevelUp>;

void clear() { mQueue.clear(); }
void addToQueue(Event e) { mQueue.push_back(std::move(e)); }
Expand Down
7 changes: 0 additions & 7 deletions apps/openmw/mwlua/globalscripts.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
#include <components/lua/luastate.hpp>
#include <components/lua/scriptscontainer.hpp>

#include "mwscriptref.hpp"
#include "object.hpp"

namespace MWLua
Expand All @@ -25,7 +24,6 @@ namespace MWLua
&mOnActivateHandlers,
&mOnUseItemHandlers,
&mOnNewExteriorHandlers,
&mOnGlobalScriptRequestedHandlers,
});
}

Expand All @@ -43,10 +41,6 @@ namespace MWLua
callEngineHandlers(mOnUseItemHandlers, obj, actor, force);
}
void onNewExterior(const GCell& cell) { callEngineHandlers(mOnNewExteriorHandlers, cell); }
void onGlobalScriptRequested(const MWScriptRef& scriptRef, const bool started, sol::optional<GObject> target)
{
callEngineHandlers(mOnGlobalScriptRequestedHandlers, scriptRef, started, target);
}

private:
EngineHandlerList mObjectActiveHandlers{ "onObjectActive" };
Expand All @@ -57,7 +51,6 @@ namespace MWLua
EngineHandlerList mOnActivateHandlers{ "onActivate" };
EngineHandlerList mOnUseItemHandlers{ "_onUseItem" };
EngineHandlerList mOnNewExteriorHandlers{ "onNewExterior" };
EngineHandlerList mOnGlobalScriptRequestedHandlers{ "onGlobalScriptRequested" };
};

}
Expand Down
11 changes: 0 additions & 11 deletions apps/openmw/mwlua/luamanagerimp.cpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
#include "luamanagerimp.hpp"

#include <apps/openmw/mwlua/mwscriptref.hpp>
#include <apps/openmw/mwlua/object.hpp>
#include <components/misc/strings/lower.hpp>
#include <filesystem>

#include <MyGUI_InputManager.h>
Expand Down Expand Up @@ -604,14 +601,6 @@ namespace MWLua
mGlobalScriptsStarted = true;
}

void LuaManager::globalMWScriptCalled(const ESM::RefId& scriptName, const MWWorld::Ptr& target, const bool started)
{
ESM::RefNum targetId;
if (!target.isEmpty())
targetId = getId(target);
mEngineEvents.addToQueue(EngineEvents::OnGlobalScriptRequested{ scriptName, targetId, started });
}

void LuaManager::saveLocalScripts(const MWWorld::Ptr& ptr, ESM::LuaScripts& data)
{
if (ptr.getRefData().getLuaScripts())
Expand Down
3 changes: 0 additions & 3 deletions apps/openmw/mwlua/luamanagerimp.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -156,9 +156,6 @@ namespace MWLua
void reportStats(unsigned int frameNumber, osg::Stats& stats) const;
std::string formatResourceUsageStats() const override;

void globalMWScriptCalled(
const ESM::RefId& scriptName, const MWWorld::Ptr& target, const bool started) override;

LuaUtil::InputAction::Registry& inputActions() { return mInputActions; }
LuaUtil::InputTrigger::Registry& inputTriggers() { return mInputTriggers; }

Expand Down
52 changes: 51 additions & 1 deletion apps/openmw/mwlua/mwscriptbindings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,64 @@
#include <components/lua/util.hpp>
#include <components/misc/strings/lower.hpp>

#include "../mwbase/environment.hpp"
#include "../mwbase/scriptmanager.hpp"
#include "../mwbase/world.hpp"
#include "../mwscript/globalscripts.hpp"
#include "../mwworld/esmstore.hpp"
#include "../mwworld/worldimp.hpp"

#include "mwscriptref.hpp"
#include "object.hpp"

#include <stdexcept>

namespace MWLua
{
struct MWScriptRef
{
ESM::RefId mId;
sol::optional<GObject> mObj;

MWScript::Locals& getLocals()
{
if (mObj)
return mObj->ptr().getRefData().getLocals();
else
return MWBase::Environment::get().getScriptManager()->getGlobalScripts().getLocals(mId);
}
bool isRunning() const
{
if (mObj.has_value()) // local script
{
MWWorld::LocalScripts& localScripts = MWBase::Environment::get().getWorld()->getLocalScripts();
return localScripts.isRunning(mId, mObj->ptr());
}

return MWBase::Environment::get().getScriptManager()->getGlobalScripts().isRunning(mId);
}
};
struct MWScriptVariables
{
MWScriptRef mRef;
};
}

namespace sol
{
template <>
struct is_automagical<MWLua::MWScriptRef> : std::false_type
{
};
template <>
struct is_automagical<MWLua::MWScriptVariables> : std::false_type
{
};
template <>
struct is_automagical<ESM::Global> : std::false_type
{
};
}

namespace MWLua
{

Expand Down
62 changes: 0 additions & 62 deletions apps/openmw/mwlua/mwscriptref.hpp

This file was deleted.

1 change: 0 additions & 1 deletion apps/openmw/mwlua/object.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
#include <sol/sol.hpp>

#include <components/esm3/cellref.hpp>
#include <components/esm3/loadglob.hpp>

#include "../mwworld/ptr.hpp"

Expand Down
10 changes: 2 additions & 8 deletions apps/openmw/mwscript/globalscripts.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@
#include "../mwbase/world.hpp"
#include "../mwworld/worldmodel.hpp"

#include "../mwbase/luamanager.hpp"

#include "interpretercontext.hpp"

namespace
Expand Down Expand Up @@ -130,7 +128,6 @@ namespace MWScript
void GlobalScripts::addScript(const ESM::RefId& name, const MWWorld::Ptr& target)
{
const auto iter = mScripts.find(name);
bool started = false;

if (iter == mScripts.end())
{
Expand All @@ -139,24 +136,21 @@ namespace MWScript
auto desc = std::make_shared<GlobalScriptDesc>();
MWWorld::Ptr ptr = target;
desc->mTarget = ptr;
started = desc->mRunning = true;
desc->mRunning = true;
desc->mLocals.configure(*script);
mScripts.insert(std::make_pair(name, desc));
}
else
{
Log(Debug::Error) << "Failed to add global script " << name << ": script record not found";
return;
}
}
else if (!iter->second->mRunning)
{
started = iter->second->mRunning = true;
iter->second->mRunning = true;
MWWorld::Ptr ptr = target;
iter->second->mTarget = ptr;
}

MWBase::Environment::get().getLuaManager()->globalMWScriptCalled(name, target, started);
}

void GlobalScripts::removeScript(const ESM::RefId& name)
Expand Down
2 changes: 1 addition & 1 deletion components/lua/scriptscontainer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ namespace LuaUtil

// Calls given handlers in direct order.
template <typename... Args>
void callEngineHandlers(EngineHandlerList& handlers, Args&&... args)
void callEngineHandlers(EngineHandlerList& handlers, const Args&... args)
{
for (Handler& handler : handlers.mList)
{
Expand Down
10 changes: 0 additions & 10 deletions docs/source/reference/lua-scripting/engine_handlers.rst
Original file line number Diff line number Diff line change
Expand Up @@ -58,16 +58,6 @@ Engine handler is a function defined by a script, that can be called by the engi
- Object is activated by an actor.
* - onNewExterior(cell)
- A new exterior cell not defined by a content file has been generated.
* - onGlobalScriptRequested(script, started, target)
- | A `StartScript` was called.
| Note that this affects `Start Scripts` defined by content files, as well as calls to the MWScript function `StartScript`.
| This does not necessarily indicate the script in question is actually being started, as there may (presently)
| only be a single instance of a global script at a time.
| This can potentially be used to override vanilla functionality, such as:
| ``if script.recordId == 'dbattackscript' then script.variables.sleeponce = 1 end``
| The `target` and `script.object` fields may be different.
| If `started` is true then refer to `script.object`, otherwise the `target`, if present, represents what the `startscript` call is actually targeted at. For example:
| ``if started and script.object then print(script.object.recordId) elseif target then print(target.recordId) end``

**Only for local scripts**

Expand Down

0 comments on commit 6754b8d

Please sign in to comment.