base init
This commit is contained in:
169
src/game/questlua_building.cpp
Normal file
169
src/game/questlua_building.cpp
Normal file
@@ -0,0 +1,169 @@
|
||||
#include "stdafx.h"
|
||||
#include "config.h"
|
||||
#include "questmanager.h"
|
||||
#include "sectree_manager.h"
|
||||
#include "char.h"
|
||||
#include "guild.h"
|
||||
#include "db.h"
|
||||
#include "building.h"
|
||||
|
||||
namespace quest
|
||||
{
|
||||
//
|
||||
// "building" Lua functions
|
||||
//
|
||||
int building_get_land_id(lua_State * L)
|
||||
{
|
||||
using namespace building;
|
||||
|
||||
if (!lua_isnumber(L, 1) || !lua_isnumber(L, 2) || !lua_isnumber(L, 3))
|
||||
{
|
||||
sys_err("invalid argument");
|
||||
lua_pushnumber(L, 0);
|
||||
return 1;
|
||||
}
|
||||
|
||||
CLand * pkLand = CManager::instance().FindLand((int) lua_tonumber(L, 1), (int) lua_tonumber(L, 2), (int) lua_tonumber(L, 3));
|
||||
lua_pushnumber(L, pkLand ? pkLand->GetID() : 0);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int building_get_land_info(lua_State * L)
|
||||
{
|
||||
int price = 1000000000;
|
||||
int owner = 1000000000;
|
||||
int level_limit = 1000000000;
|
||||
|
||||
if (lua_isnumber(L, 1))
|
||||
{
|
||||
using namespace building;
|
||||
|
||||
CLand * pkLand = CManager::instance().FindLand((DWORD) lua_tonumber(L, 1));
|
||||
|
||||
if (pkLand)
|
||||
{
|
||||
const TLand & t = pkLand->GetData();
|
||||
|
||||
price = t.dwPrice;
|
||||
owner = t.dwGuildID;
|
||||
level_limit = t.bGuildLevelLimit;
|
||||
}
|
||||
}
|
||||
else
|
||||
sys_err("invalid argument");
|
||||
|
||||
lua_pushnumber(L, price);
|
||||
lua_pushnumber(L, owner);
|
||||
lua_pushnumber(L, level_limit);
|
||||
return 3;
|
||||
}
|
||||
|
||||
int building_set_land_owner(lua_State * L)
|
||||
{
|
||||
if (!lua_isnumber(L, 1) || !lua_isnumber(L, 2))
|
||||
{
|
||||
sys_err("invalid argument");
|
||||
return 0;
|
||||
}
|
||||
|
||||
using namespace building;
|
||||
|
||||
CLand * pkLand = CManager::instance().FindLand((DWORD) lua_tonumber(L, 1));
|
||||
|
||||
if (pkLand)
|
||||
{
|
||||
if (pkLand->GetData().dwGuildID == 0)
|
||||
pkLand->SetOwner((DWORD) lua_tonumber(L, 2));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int building_has_land(lua_State * L)
|
||||
{
|
||||
using namespace building;
|
||||
|
||||
if (!lua_isnumber(L, 1))
|
||||
{
|
||||
sys_err("invalid argument");
|
||||
lua_pushboolean(L, true);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
if (CManager::instance().FindLandByGuild((DWORD) lua_tonumber(L, 1)))
|
||||
lua_pushboolean(L, true);
|
||||
else
|
||||
lua_pushboolean(L, false);
|
||||
*/
|
||||
|
||||
std::unique_ptr<SQLMsg> pmsg(DBManager::instance().DirectQuery("SELECT COUNT(*) FROM land%s WHERE guild_id = %d", get_table_postfix(), (DWORD)lua_tonumber(L,1)));
|
||||
|
||||
if ( pmsg->Get()->uiNumRows > 0 )
|
||||
{
|
||||
MYSQL_ROW row = mysql_fetch_row(pmsg->Get()->pSQLResult);
|
||||
|
||||
int count = 0;
|
||||
str_to_number(count, row[0]);
|
||||
|
||||
if (count == 0)
|
||||
{
|
||||
lua_pushboolean(L, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
lua_pushboolean(L, true);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
lua_pushboolean(L, true);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int building_reconstruct(lua_State* L)
|
||||
{
|
||||
using namespace building;
|
||||
|
||||
DWORD dwNewBuilding = (DWORD)lua_tonumber(L, 1);
|
||||
|
||||
CQuestManager& q = CQuestManager::instance();
|
||||
|
||||
LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();
|
||||
if (!npc)
|
||||
return 0;
|
||||
|
||||
CGuild* pGuild = npc->GetGuild();
|
||||
if (!pGuild)
|
||||
return 0;
|
||||
|
||||
CLand* pLand = CManager::instance().FindLandByGuild(pGuild->GetID());
|
||||
if (!pLand)
|
||||
return 0;
|
||||
|
||||
LPOBJECT pObject = pLand->FindObjectByNPC(npc);
|
||||
if (!pObject)
|
||||
return 0;
|
||||
|
||||
pObject->Reconstruct(dwNewBuilding);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void RegisterBuildingFunctionTable()
|
||||
{
|
||||
luaL_reg functions[] =
|
||||
{
|
||||
{ "get_land_id", building_get_land_id },
|
||||
{ "get_land_info", building_get_land_info },
|
||||
{ "set_land_owner", building_set_land_owner },
|
||||
{ "has_land", building_has_land },
|
||||
{ "reconstruct", building_reconstruct },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
CQuestManager::instance().AddLuaFunctionTable("building", functions);
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user