base init
This commit is contained in:
353
src/game/questlua_marriage.cpp
Normal file
353
src/game/questlua_marriage.cpp
Normal file
@@ -0,0 +1,353 @@
|
||||
#include "stdafx.h"
|
||||
#include "char.h"
|
||||
#include "char_manager.h"
|
||||
#include "wedding.h"
|
||||
#include "questmanager.h"
|
||||
#include "utils.h"
|
||||
#include "config.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 int g_nPortalLimitTime;
|
||||
|
||||
namespace quest
|
||||
{
|
||||
int marriage_engage_to(lua_State* L)
|
||||
{
|
||||
DWORD vid = (DWORD) lua_tonumber(L, 1);
|
||||
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
|
||||
LPCHARACTER ch_you = CHARACTER_MANAGER::instance().Find(vid);
|
||||
if (ch_you)
|
||||
{
|
||||
marriage::CManager::instance().RequestAdd(ch->GetPlayerID(), ch_you->GetPlayerID(), ch->GetName(), ch_you->GetName());
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int marriage_remove(lua_State* L)
|
||||
{
|
||||
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
|
||||
marriage::TMarriage* pMarriage = marriage::CManager::instance().Get(ch->GetPlayerID());
|
||||
if (!pMarriage)
|
||||
{
|
||||
sys_err("pid[%d:%s] is not exist couple", ch->GetPlayerID(), ch->GetName());
|
||||
return 0;
|
||||
}
|
||||
marriage::CManager::instance().RequestRemove(ch->GetPlayerID(), pMarriage->GetOther(ch->GetPlayerID()));
|
||||
return 0;
|
||||
}
|
||||
|
||||
int marriage_set_to_marriage(lua_State* L)
|
||||
{
|
||||
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
|
||||
marriage::TMarriage* pMarriage = marriage::CManager::instance().Get(ch->GetPlayerID());
|
||||
if (!pMarriage)
|
||||
{
|
||||
sys_err("pid[%d:%s] is not exist couple", ch->GetPlayerID(), ch->GetName());
|
||||
return 0;
|
||||
}
|
||||
pMarriage->SetMarried();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int marriage_find_married_vid(lua_State* L)
|
||||
{
|
||||
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
|
||||
marriage::TMarriage* pMarriage = marriage::CManager::instance().Get(ch->GetPlayerID());
|
||||
DWORD vid = 0;
|
||||
if (pMarriage)
|
||||
{
|
||||
LPCHARACTER you = CHARACTER_MANAGER::instance().FindByPID(pMarriage->GetOther(ch->GetPlayerID()));
|
||||
if (you)
|
||||
vid = you->GetVID();
|
||||
}
|
||||
|
||||
lua_pushnumber(L, vid);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
struct FBuildLuaWeddingMapList
|
||||
{
|
||||
lua_State * L;
|
||||
int m_count;
|
||||
FBuildLuaWeddingMapList(lua_State * L) : L(L), m_count(1)
|
||||
{
|
||||
lua_newtable(L);
|
||||
}
|
||||
|
||||
void operator() (marriage::TMarriage* pMarriage)
|
||||
{
|
||||
if (!pMarriage->pWeddingInfo)
|
||||
return;
|
||||
|
||||
lua_newtable(L);
|
||||
lua_pushnumber(L, pMarriage->m_pid1);
|
||||
lua_rawseti(L, -2, 1);
|
||||
lua_pushnumber(L, pMarriage->m_pid2);
|
||||
lua_rawseti(L, -2, 2);
|
||||
lua_pushstring(L, pMarriage->name1.c_str());
|
||||
lua_rawseti(L, -2, 3);
|
||||
lua_pushstring(L, pMarriage->name2.c_str());
|
||||
lua_rawseti(L, -2, 4);
|
||||
lua_rawseti(L, -2, m_count++);
|
||||
}
|
||||
};
|
||||
|
||||
int marriage_get_wedding_list(lua_State* L)
|
||||
{
|
||||
marriage::CManager::instance().for_each_wedding(FBuildLuaWeddingMapList(L));
|
||||
return 1;
|
||||
}
|
||||
|
||||
int marriage_join_wedding(lua_State* L)
|
||||
{
|
||||
if (!lua_isnumber(L, 1) || !lua_isnumber(L, 2))
|
||||
{
|
||||
sys_err("invalid player id for wedding map");
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD pid1 = (DWORD) lua_tonumber(L, 1);
|
||||
DWORD pid2 = (DWORD) lua_tonumber(L, 2);
|
||||
|
||||
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
|
||||
|
||||
marriage::TMarriage* pMarriage = marriage::CManager::instance().Get(pid1);
|
||||
if (!pMarriage)
|
||||
{
|
||||
sys_err("pid[%d:%s] is not exist couple", ch->GetPlayerID(), ch->GetName());
|
||||
return 0;
|
||||
}
|
||||
if (pMarriage->GetOther(pid1) != pid2)
|
||||
{
|
||||
sys_err("not married %u %u", pid1, pid2);
|
||||
return 0;
|
||||
}
|
||||
//PREVENT_HACK
|
||||
if ( ch->IsHack() )
|
||||
return 0;
|
||||
//END_PREVENT_HACK
|
||||
|
||||
pMarriage->WarpToWeddingMap(ch->GetPlayerID());
|
||||
return 0;
|
||||
}
|
||||
|
||||
int marriage_warp_to_my_marriage_map(lua_State* L)
|
||||
{
|
||||
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
|
||||
marriage::TMarriage* pMarriage = marriage::CManager::instance().Get(ch->GetPlayerID());
|
||||
if (!pMarriage)
|
||||
{
|
||||
sys_err("pid[%d:%s] is not exist couple", ch->GetPlayerID(), ch->GetName());
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//PREVENT_HACK
|
||||
if ( ch->IsHack() )
|
||||
return 0;
|
||||
//END_PREVENT_HACK
|
||||
|
||||
pMarriage->WarpToWeddingMap(ch->GetPlayerID());
|
||||
return 0;
|
||||
}
|
||||
|
||||
int marriage_end_wedding(lua_State* L)
|
||||
{
|
||||
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
|
||||
marriage::TMarriage* pMarriage = marriage::CManager::instance().Get(ch->GetPlayerID());
|
||||
if (!pMarriage)
|
||||
{
|
||||
sys_err("pid[%d:%s] is not exist couple", ch->GetPlayerID(), ch->GetName());
|
||||
return 0;
|
||||
}
|
||||
if (pMarriage->pWeddingInfo)
|
||||
{
|
||||
// °áÈ¥½Ä ³¡³»±â ¿äû
|
||||
pMarriage->RequestEndWedding();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int marriage_wedding_dark(lua_State* L)
|
||||
{
|
||||
if (!lua_isboolean(L, 1))
|
||||
{
|
||||
sys_err("invalid argument 1 : must be boolean");
|
||||
return 0;
|
||||
}
|
||||
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
|
||||
marriage::TMarriage* pMarriage = marriage::CManager::instance().Get(ch->GetPlayerID());
|
||||
|
||||
if (!pMarriage)
|
||||
{
|
||||
sys_err("pid[%d:%s] is not exist couple", ch->GetPlayerID(), ch->GetName());
|
||||
return 0;
|
||||
}
|
||||
if (pMarriage->pWeddingInfo)
|
||||
{
|
||||
marriage::WeddingMap* pWedding = marriage::WeddingManager::instance().Find(pMarriage->pWeddingInfo->dwMapIndex);
|
||||
pWedding->SetDark(lua_toboolean(L, 1));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int marriage_wedding_client_command(lua_State* L)
|
||||
{
|
||||
if (!lua_isstring(L, 1))
|
||||
{
|
||||
sys_err("invalid argument 1 : must be string");
|
||||
return 0;
|
||||
}
|
||||
|
||||
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
|
||||
marriage::TMarriage* pMarriage = marriage::CManager::instance().Get(ch->GetPlayerID());
|
||||
if (!pMarriage)
|
||||
{
|
||||
sys_err("pid[%d:%s] is not exist couple", ch->GetPlayerID(), ch->GetName());
|
||||
return 0;
|
||||
}
|
||||
if (pMarriage->pWeddingInfo)
|
||||
{
|
||||
marriage::WeddingMap* pWedding = marriage::WeddingManager::instance().Find(pMarriage->pWeddingInfo->dwMapIndex);
|
||||
pWedding->ShoutInMap(CHAT_TYPE_COMMAND, lua_tostring(L, 1));
|
||||
}
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
int marriage_wedding_is_playing_music(lua_State* L)
|
||||
{
|
||||
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
|
||||
marriage::TMarriage* pMarriage = marriage::CManager::instance().Get(ch->GetPlayerID());
|
||||
if (!pMarriage)
|
||||
{
|
||||
sys_err("pid[%d:%s] is not exist couple", ch->GetPlayerID(), ch->GetName());
|
||||
return 0;
|
||||
}
|
||||
if (pMarriage->pWeddingInfo)
|
||||
{
|
||||
marriage::WeddingMap* pWedding = marriage::WeddingManager::instance().Find(pMarriage->pWeddingInfo->dwMapIndex);
|
||||
if (pWedding)
|
||||
lua_pushboolean(L, pWedding->IsPlayingMusic());
|
||||
else
|
||||
lua_pushboolean(L, false);
|
||||
}
|
||||
|
||||
lua_pushboolean(L, false);
|
||||
return 1;
|
||||
}
|
||||
int marriage_wedding_music(lua_State* L)
|
||||
{
|
||||
if (!lua_isboolean(L, 1))
|
||||
{
|
||||
sys_err("invalid argument 1 : must be boolean");
|
||||
return 0;
|
||||
}
|
||||
if (!lua_isstring(L, 2))
|
||||
{
|
||||
sys_err("invalid argument 2 : must be string");
|
||||
return 0;
|
||||
}
|
||||
|
||||
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
|
||||
marriage::TMarriage* pMarriage = marriage::CManager::instance().Get(ch->GetPlayerID());
|
||||
if (!pMarriage)
|
||||
{
|
||||
sys_err("pid[%d:%s] is not exist couple", ch->GetPlayerID(), ch->GetName());
|
||||
return 0;
|
||||
}
|
||||
if (pMarriage->pWeddingInfo)
|
||||
{
|
||||
marriage::WeddingMap* pWedding = marriage::WeddingManager::instance().Find(pMarriage->pWeddingInfo->dwMapIndex);
|
||||
pWedding->SetMusic(
|
||||
lua_toboolean(L, 1),
|
||||
lua_tostring(L, 2)
|
||||
);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
int marriage_wedding_snow(lua_State* L)
|
||||
{
|
||||
if (!lua_isboolean(L, 1))
|
||||
{
|
||||
sys_err("invalid argument 1 : must be boolean");
|
||||
return 0;
|
||||
}
|
||||
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
|
||||
marriage::TMarriage* pMarriage = marriage::CManager::instance().Get(ch->GetPlayerID());
|
||||
if (!pMarriage)
|
||||
{
|
||||
sys_err("pid[%d:%s] is not exist couple", ch->GetPlayerID(), ch->GetName());
|
||||
return 0;
|
||||
}
|
||||
if (pMarriage->pWeddingInfo)
|
||||
{
|
||||
marriage::WeddingMap* pWedding = marriage::WeddingManager::instance().Find(pMarriage->pWeddingInfo->dwMapIndex);
|
||||
pWedding->SetSnow(lua_toboolean(L, 1));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int marriage_in_my_wedding(lua_State* L)
|
||||
{
|
||||
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
|
||||
marriage::TMarriage* pMarriage = marriage::CManager::instance().Get(ch->GetPlayerID());
|
||||
if (pMarriage->pWeddingInfo)
|
||||
{
|
||||
lua_pushboolean(L, (DWORD)ch->GetMapIndex() == pMarriage->pWeddingInfo->dwMapIndex);
|
||||
}
|
||||
else
|
||||
{
|
||||
lua_pushboolean(L, 0);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int marriage_get_married_time(lua_State* L)
|
||||
{
|
||||
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
|
||||
marriage::TMarriage* pMarriage = marriage::CManager::instance().Get(ch->GetPlayerID());
|
||||
|
||||
if (!pMarriage)
|
||||
{
|
||||
sys_err("trying to get time for not married character");
|
||||
lua_pushnumber(L, 0);
|
||||
return 1;
|
||||
}
|
||||
|
||||
lua_pushnumber(L, get_global_time() - pMarriage->marry_time);
|
||||
return 1;
|
||||
}
|
||||
|
||||
void RegisterMarriageFunctionTable()
|
||||
{
|
||||
luaL_reg marriage_functions[] =
|
||||
{
|
||||
{ "engage_to", marriage_engage_to },
|
||||
{ "remove", marriage_remove },
|
||||
{ "find_married_vid", marriage_find_married_vid },
|
||||
{ "get_wedding_list", marriage_get_wedding_list },
|
||||
{ "join_wedding", marriage_join_wedding },
|
||||
{ "set_to_marriage", marriage_set_to_marriage },
|
||||
{ "end_wedding", marriage_end_wedding },
|
||||
{ "wedding_dark", marriage_wedding_dark },
|
||||
{ "wedding_snow", marriage_wedding_snow },
|
||||
{ "wedding_music", marriage_wedding_music },
|
||||
{ "wedding_is_playing_music", marriage_wedding_is_playing_music },
|
||||
{ "wedding_client_command", marriage_wedding_client_command },
|
||||
{ "in_my_wedding", marriage_in_my_wedding },
|
||||
{ "warp_to_my_marriage_map",marriage_warp_to_my_marriage_map},
|
||||
{ "get_married_time", marriage_get_married_time },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
CQuestManager::instance().AddLuaFunctionTable("marriage", marriage_functions);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user