base init
This commit is contained in:
205
src/game/questlua_game.cpp
Normal file
205
src/game/questlua_game.cpp
Normal file
@@ -0,0 +1,205 @@
|
||||
#include "stdafx.h"
|
||||
#include "questlua.h"
|
||||
#include "questmanager.h"
|
||||
#include "desc_client.h"
|
||||
#include "char.h"
|
||||
#include "item_manager.h"
|
||||
#include "item.h"
|
||||
#include "cmd.h"
|
||||
#include "packet.h"
|
||||
|
||||
#undef sys_err
|
||||
#ifndef __WIN32__
|
||||
#define sys_err(fmt, args...) quest::CQuestManager::instance().QuestError(__FUNCTION__, __LINE__, fmt, ##args)
|
||||
#else
|
||||
#define sys_err(fmt, ...) quest::CQuestManager::instance().QuestError(__FUNCTION__, __LINE__, fmt, __VA_ARGS__)
|
||||
#endif
|
||||
|
||||
extern ACMD(do_in_game_mall);
|
||||
|
||||
namespace quest
|
||||
{
|
||||
int game_set_event_flag(lua_State* L)
|
||||
{
|
||||
CQuestManager & q = CQuestManager::instance();
|
||||
|
||||
if (lua_isstring(L,1) && lua_isnumber(L, 2))
|
||||
q.RequestSetEventFlag(lua_tostring(L,1), (int)lua_tonumber(L,2));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int game_get_event_flag(lua_State* L)
|
||||
{
|
||||
CQuestManager& q = CQuestManager::instance();
|
||||
|
||||
if (lua_isstring(L,1))
|
||||
lua_pushnumber(L, q.GetEventFlag(lua_tostring(L,1)));
|
||||
else
|
||||
lua_pushnumber(L, 0);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int game_request_make_guild(lua_State* L)
|
||||
{
|
||||
CQuestManager& q = CQuestManager::instance();
|
||||
LPDESC d = q.GetCurrentCharacterPtr()->GetDesc();
|
||||
if (d)
|
||||
{
|
||||
BYTE header = HEADER_GC_REQUEST_MAKE_GUILD;
|
||||
d->Packet(&header, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int game_get_safebox_level(lua_State* L)
|
||||
{
|
||||
CQuestManager& q = CQuestManager::instance();
|
||||
lua_pushnumber(L, q.GetCurrentCharacterPtr()->GetSafeboxSize()/SAFEBOX_PAGE_SIZE);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int game_set_safebox_level(lua_State* L)
|
||||
{
|
||||
CQuestManager& q = CQuestManager::instance();
|
||||
|
||||
//q.GetCurrentCharacterPtr()->ChangeSafeboxSize(3*(int)lua_tonumber(L,-1));
|
||||
TSafeboxChangeSizePacket p;
|
||||
p.dwID = q.GetCurrentCharacterPtr()->GetDesc()->GetAccountTable().id;
|
||||
p.bSize = (int)lua_tonumber(L,-1);
|
||||
db_clientdesc->DBPacket(HEADER_GD_SAFEBOX_CHANGE_SIZE, q.GetCurrentCharacterPtr()->GetDesc()->GetHandle(), &p, sizeof(p));
|
||||
|
||||
q.GetCurrentCharacterPtr()->SetSafeboxSize(SAFEBOX_PAGE_SIZE * (int)lua_tonumber(L,-1));
|
||||
return 0;
|
||||
}
|
||||
|
||||
int game_open_safebox(lua_State* /*L*/)
|
||||
{
|
||||
CQuestManager& q = CQuestManager::instance();
|
||||
LPCHARACTER ch = q.GetCurrentCharacterPtr();
|
||||
ch->SetSafeboxOpenPosition();
|
||||
ch->ChatPacket(CHAT_TYPE_COMMAND, "ShowMeSafeboxPassword");
|
||||
return 0;
|
||||
}
|
||||
|
||||
int game_open_mall(lua_State* /*L*/)
|
||||
{
|
||||
CQuestManager& q = CQuestManager::instance();
|
||||
LPCHARACTER ch = q.GetCurrentCharacterPtr();
|
||||
ch->SetSafeboxOpenPosition();
|
||||
ch->ChatPacket(CHAT_TYPE_COMMAND, "ShowMeMallPassword");
|
||||
return 0;
|
||||
}
|
||||
|
||||
int game_drop_item(lua_State* L)
|
||||
{
|
||||
//
|
||||
// Syntax: game.drop_item(50050, 1)
|
||||
//
|
||||
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
|
||||
|
||||
DWORD item_vnum = (DWORD) lua_tonumber(L, 1);
|
||||
int count = (int) lua_tonumber(L, 2);
|
||||
long x = ch->GetX();
|
||||
long y = ch->GetY();
|
||||
|
||||
LPITEM item = ITEM_MANAGER::instance().CreateItem(item_vnum, count);
|
||||
|
||||
if (!item)
|
||||
{
|
||||
sys_err("cannot create item vnum %d count %d", item_vnum, count);
|
||||
return 0;
|
||||
}
|
||||
|
||||
PIXEL_POSITION pos;
|
||||
pos.x = x + number(-200, 200);
|
||||
pos.y = y + number(-200, 200);
|
||||
|
||||
item->AddToGround(ch->GetMapIndex(), pos);
|
||||
item->StartDestroyEvent();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int game_drop_item_with_ownership(lua_State* L)
|
||||
{
|
||||
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
|
||||
|
||||
LPITEM item = NULL;
|
||||
switch (lua_gettop(L))
|
||||
{
|
||||
case 1:
|
||||
item = ITEM_MANAGER::instance().CreateItem((DWORD) lua_tonumber(L, 1));
|
||||
break;
|
||||
case 2:
|
||||
case 3:
|
||||
item = ITEM_MANAGER::instance().CreateItem((DWORD) lua_tonumber(L, 1), (int) lua_tonumber(L, 2));
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ( item == NULL )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (lua_isnumber(L, 3))
|
||||
{
|
||||
int sec = (int) lua_tonumber(L, 3);
|
||||
if (sec <= 0)
|
||||
{
|
||||
item->SetOwnership( ch );
|
||||
}
|
||||
else
|
||||
{
|
||||
item->SetOwnership( ch, sec );
|
||||
}
|
||||
}
|
||||
else
|
||||
item->SetOwnership( ch );
|
||||
|
||||
PIXEL_POSITION pos;
|
||||
pos.x = ch->GetX() + number(-200, 200);
|
||||
pos.y = ch->GetY() + number(-200, 200);
|
||||
|
||||
item->AddToGround(ch->GetMapIndex(), pos);
|
||||
item->StartDestroyEvent();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int game_web_mall(lua_State* L)
|
||||
{
|
||||
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
|
||||
|
||||
if ( ch != NULL )
|
||||
{
|
||||
do_in_game_mall(ch, const_cast<char*>(""), 0, 0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void RegisterGameFunctionTable()
|
||||
{
|
||||
luaL_reg game_functions[] =
|
||||
{
|
||||
{ "get_safebox_level", game_get_safebox_level },
|
||||
{ "request_make_guild", game_request_make_guild },
|
||||
{ "set_safebox_level", game_set_safebox_level },
|
||||
{ "open_safebox", game_open_safebox },
|
||||
{ "open_mall", game_open_mall },
|
||||
{ "get_event_flag", game_get_event_flag },
|
||||
{ "set_event_flag", game_set_event_flag },
|
||||
{ "drop_item", game_drop_item },
|
||||
{ "drop_item_with_ownership", game_drop_item_with_ownership },
|
||||
{ "open_web_mall", game_web_mall },
|
||||
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
CQuestManager::instance().AddLuaFunctionTable("game", game_functions);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user