Ejemplo n.º 1
0
void handle_player_discover_item(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data,
								 std::vector<void*> *extra_pointers) {
	const Item_Struct *item = database.GetItem(extra_data);
	if(item) {
		Lua_Item l_item(item);
		luabind::adl::object l_item_o = luabind::adl::object(L, l_item);
		l_item_o.push(L);
		lua_setfield(L, -2, "item");
	} else {
		Lua_Item l_item(nullptr);
		luabind::adl::object l_item_o = luabind::adl::object(L, l_item);
		l_item_o.push(L);
		lua_setfield(L, -2, "item");
	}
}
Ejemplo n.º 2
0
void handle_player_pick_up(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data,
						   std::vector<void*> *extra_pointers) {
	Lua_ItemInst l_item(reinterpret_cast<ItemInst*>(extra_pointers->at(0)));
	luabind::adl::object l_item_o = luabind::adl::object(L, l_item);
	l_item_o.push(L);
	lua_setfield(L, -2, "item");
}
Ejemplo n.º 3
0
/**
 * Fill "Slaves" grid 
 * 
 * \param p_device - fill slaves grid with slaves of this device.
 */
void TFormDevInfo::fillSlaves(TDevice* p_device)
{
	
	if(p_device->getSlaves()->length()==0){
		ui.slaveList->setVisible(false);
	} else {
		ui.noSlaveLabel->setVisible(false);
		QStandardItemModel          *l_model=new QStandardItemModel(p_device->getSlaves()->count(),1,this);
		QListIterator<TDeviceBase *> l_item(*p_device->getSlaves());
		TDeviceBase                 *l_device;
		int l_cnt=0;
		l_model->setHorizontalHeaderItem(0,new  QStandardItem(i18n("Slave name")));
		while(l_item.hasNext()){
			l_device=l_item.next();
			l_model->setItem(l_cnt,new QStandardItem(l_device->getName()));
			l_cnt++;
		}
		ui.slaveList->setModel(l_model);
	}
}
Ejemplo n.º 4
0
int LuaParser::_EventItem(std::string package_name, QuestEventID evt, Client *client, ItemInst *item, Mob *mob,
						  std::string data, uint32 extra_data, std::vector<void*> *extra_pointers, luabind::adl::object *l_func) {
	const char *sub_name = LuaEvents[evt];

	int start = lua_gettop(L);

	try {
		int npop = 1;
		if(l_func != nullptr) {
			l_func->push(L);
		} else {
			lua_getfield(L, LUA_REGISTRYINDEX, package_name.c_str());
			lua_getfield(L, -1, sub_name);
		}
		
		lua_createtable(L, 0, 0);
		//always push self
		Lua_ItemInst l_item(item);
		luabind::adl::object l_item_o = luabind::adl::object(L, l_item);
		l_item_o.push(L);
		lua_setfield(L, -2, "self");

		Lua_Client l_client(client);
		luabind::adl::object l_client_o = luabind::adl::object(L, l_client);
		l_client_o.push(L);
		lua_setfield(L, -2, "owner");

		//redo this arg function
		auto arg_function = ItemArgumentDispatch[evt];
		arg_function(this, L, client, item, mob, data, extra_data, extra_pointers);
		
		quest_manager.StartQuest(client, client, item);
		if(lua_pcall(L, 1, 1, 0)) {
			std::string error = lua_tostring(L, -1);
			AddError(error);
			quest_manager.EndQuest();
			return 0;
		}
		quest_manager.EndQuest();
		
		if(lua_isnumber(L, -1)) {
			int ret = static_cast<int>(lua_tointeger(L, -1));
			lua_pop(L, npop);
			return ret;
		}
		
		lua_pop(L, npop);
	} catch(std::exception &ex) {
		std::string error = "Lua Exception: ";
		error += std::string(ex.what());
		AddError(error);

		//Restore our stack to the best of our ability
		int end = lua_gettop(L);
		int n = end - start;
		if(n > 0) {
			lua_pop(L, n);
		}
	}

	return 0;
}