⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scripthandler.cpp

📁 魔兽世界的私服源程序
💻 CPP
字号:
#include "Common.h"
#include "Core.h"
#include "ScriptHandler.h"
#include "WorldThread.h"
extern "C"
{
#include <lauxlib.h>
#include <lualib.h>
}

void Print(const char *text)
{
	LOG(text);
}
void ClassTestBind(lua_State *L);
LuaScriptHandler::LuaScriptHandler(WorldThread *thread): StopWatch(thread->GetStopWatch())
{
	State = lua_open();
	lua_baselibopen(State);
	luabind::open(State);
	using namespace luabind;
	module(State)
	[
		def("Write",&Print),
		class_<WorldThread>("__Thread")
				.def("PCC",&WorldThread::PCC)
	];
	lua_dostring(State,"function print(a) Write(tostring(a)) end _ALERT = print");
	
	object thrwrap(State,thread);
	get_globals(State)["Thread"] = thrwrap;
	wowPacket::LuaBind(State);
	ClassTestBind(State);
	/*State = LuaState::Create();
	LuaObject globals = State->GetGlobals();
	globals.Register("print",NOP_print);
	globals.RegisterEx("Quit",*this,LuaScriptHandler::QuitWorld);
	globals.RegisterEx("_ALERT",*this,LuaScriptHandler::Alert);
	//globals.RegisterEx("cls",wxGetApp(),NOPServer::ClearConsole);
	globals.RegisterEx("PCC",*thread,WorldThread::PCC);*/
	
	parent = thread;
}

LuaScriptHandler::~LuaScriptHandler(void)
{
	lua_close(State);
}

void LuaScriptHandler::ParseCommand(wxString *command)
{
	lua_dostring(State,command->c_str());
}


void LuaScriptHandler::QuitWorld()
{
	//hack hack hack
	wxGetApp().GetTopWindow()->Close();
}

void LuaScriptHandler::Alert(const char *text)
{
	LOG(text);

}

//test Only!
using namespace luabind;
class base
{
	int member;
public:
	base(int i)
	{
		LOG("base(%i)",i);	
		member = i;
	}
	virtual ~base()
	{
		LOG("~base()");
	}
	virtual void f()
	{
		LOG("called from base");
	}
};

class derived :public base
{
public:
	derived(int i) :base(i)
	{
		LOG("derived(%i)",i);
	}
	~derived()
	{
		LOG("~derived()");
	}
	virtual void f()
	{
		LOG("called from derived");
	}
};

class derived_wrapper : public derived
{
private:
	luabind::object m_l;
public:
	derived_wrapper(luabind::object l,int i): derived(i), m_l(l) {}

	virtual void f() { call_member<void>(m_l, "f"); }
	static void f_static(derived* ptr)
	{
	return ptr->derived::f();
	}
};

void ClassTestBind(lua_State *L)
{
	
	module(L)
	[
		class_<derived, derived_wrapper>("derived")
			.def(constructor<int>())
			.def("f", &derived_wrapper::f_static)
	];

	lua_dostring(L, "class 'script_derived' (derived)\n"
					"function script_derived:__init(a) super(a) end\n"
					"function script_derived:f() print(\"calling from script derived and sending down\") derived.f(self)  end\n");
	lua_dostring(L, "function create_derived(x) return script_derived(x) end");
	derived * b = call_function<derived*>(L,"script_derived",2);
	b->f();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -