2022-03-05 12:44:06 +02:00
# include "stdafx.h"
# include "config.h"
# include "questmanager.h"
# include "sectree_manager.h"
# include "char.h"
# include "char_manager.h"
# include "affect.h"
# include "item.h"
# include "item_manager.h"
# include "guild_manager.h"
# include "war_map.h"
# include "start_position.h"
# include "marriage.h"
# include "mining.h"
# include "p2p.h"
# include "polymorph.h"
# include "desc_client.h"
# include "messenger_manager.h"
# include "log.h"
# include "utils.h"
# include "unique_item.h"
# include "mob_manager.h"
# include <cctype>
# 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 ;
extern LPCLIENT_DESC db_clientdesc ;
const int ITEM_BROKEN_METIN_VNUM = 28960 ;
namespace quest
{
//
// "pc" Lua functions
//
int pc_has_master_skill ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
bool bHasMasterSkill = false ;
for ( int i = 0 ; i < SKILL_MAX_NUM ; i + + )
if ( ch - > GetSkillMasterType ( i ) > = SKILL_MASTER & & ch - > GetSkillLevel ( i ) > = 21 )
{
bHasMasterSkill = true ;
break ;
}
lua_pushboolean ( L , bHasMasterSkill ) ;
return 1 ;
}
int pc_remove_skill_book_no_delay ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
ch - > RemoveAffect ( AFFECT_SKILL_NO_BOOK_DELAY ) ;
return 0 ;
}
int pc_is_skill_book_no_delay ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushboolean ( L , ch - > FindAffect ( AFFECT_SKILL_NO_BOOK_DELAY ) ? true : false ) ;
return 1 ;
}
int pc_learn_grand_master_skill ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( ! lua_isnumber ( L , 1 ) )
{
sys_err ( " wrong skill index " ) ;
return 0 ;
}
2022-03-12 11:39:41 +02:00
lua_pushboolean ( L , ch - > LearnGrandMasterSkill ( ( int ) lua_tonumber ( L , 1 ) ) ) ;
2022-03-05 12:44:06 +02:00
return 1 ;
}
int pc_set_warp_location ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( ! lua_isnumber ( L , 1 ) )
{
sys_err ( " wrong map index " ) ;
return 0 ;
}
if ( ! lua_isnumber ( L , 2 ) | | ! lua_isnumber ( L , 3 ) )
{
sys_err ( " wrong coodinate " ) ;
return 0 ;
}
2022-03-12 11:39:41 +02:00
ch - > SetWarpLocation ( ( int ) lua_tonumber ( L , 1 ) , ( int ) lua_tonumber ( L , 2 ) , ( int ) lua_tonumber ( L , 3 ) ) ;
2022-03-05 12:44:06 +02:00
return 0 ;
}
int pc_set_warp_location_local ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( ! lua_isnumber ( L , 1 ) )
{
sys_err ( " wrong map index " ) ;
return 0 ;
}
if ( ! lua_isnumber ( L , 2 ) | | ! lua_isnumber ( L , 3 ) )
{
sys_err ( " wrong coodinate " ) ;
return 0 ;
}
2022-03-12 11:39:41 +02:00
int lMapIndex = ( int ) lua_tonumber ( L , 1 ) ;
2022-03-05 12:44:06 +02:00
const TMapRegion * region = SECTREE_MANAGER : : instance ( ) . GetMapRegion ( lMapIndex ) ;
if ( ! region )
{
sys_err ( " invalid map index %d " , lMapIndex ) ;
return 0 ;
}
int x = ( int ) lua_tonumber ( L , 2 ) ;
int y = ( int ) lua_tonumber ( L , 3 ) ;
if ( x > region - > ex - region - > sx )
{
sys_err ( " x coordinate overflow max: %d input: %d " , region - > ex - region - > sx , x ) ;
return 0 ;
}
if ( y > region - > ey - region - > sy )
{
sys_err ( " y coordinate overflow max: %d input: %d " , region - > ey - region - > sy , y ) ;
return 0 ;
}
ch - > SetWarpLocation ( lMapIndex , x , y ) ;
return 0 ;
}
int pc_get_start_location ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushnumber ( L , g_start_map [ ch - > GetEmpire ( ) ] ) ;
lua_pushnumber ( L , g_start_position [ ch - > GetEmpire ( ) ] [ 0 ] / 100 ) ;
lua_pushnumber ( L , g_start_position [ ch - > GetEmpire ( ) ] [ 1 ] / 100 ) ;
return 3 ;
}
int pc_warp ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( ! lua_isnumber ( L , 1 ) | | ! lua_isnumber ( L , 2 ) )
{
lua_pushboolean ( L , false ) ;
return 1 ;
}
2022-03-12 11:39:41 +02:00
int map_index = 0 ;
2022-03-05 12:44:06 +02:00
if ( lua_isnumber ( L , 3 ) )
map_index = ( int ) lua_tonumber ( L , 3 ) ;
//PREVENT_HACK
if ( ch - > IsHack ( ) )
{
lua_pushboolean ( L , false ) ;
return 1 ;
}
//END_PREVENT_HACK
if ( test_server )
ch - > ChatPacket ( CHAT_TYPE_INFO , " pc_warp %d %d %d " , ( int ) lua_tonumber ( L , 1 ) ,
( int ) lua_tonumber ( L , 2 ) , map_index ) ;
ch - > WarpSet ( ( int ) lua_tonumber ( L , 1 ) , ( int ) lua_tonumber ( L , 2 ) , map_index ) ;
lua_pushboolean ( L , true ) ;
return 1 ;
}
int pc_warp_local ( lua_State * L )
{
if ( ! lua_isnumber ( L , 1 ) )
{
sys_err ( " no map index argument " ) ;
return 0 ;
}
if ( ! lua_isnumber ( L , 2 ) | | ! lua_isnumber ( L , 3 ) )
{
sys_err ( " no coodinate argument " ) ;
return 0 ;
}
2022-03-12 11:39:41 +02:00
int lMapIndex = ( int ) lua_tonumber ( L , 1 ) ;
2022-03-05 12:44:06 +02:00
const TMapRegion * region = SECTREE_MANAGER : : instance ( ) . GetMapRegion ( lMapIndex ) ;
if ( ! region )
{
sys_err ( " invalid map index %d " , lMapIndex ) ;
return 0 ;
}
int x = ( int ) lua_tonumber ( L , 2 ) ;
int y = ( int ) lua_tonumber ( L , 3 ) ;
if ( x > region - > ex - region - > sx )
{
sys_err ( " x coordinate overflow max: %d input: %d " , region - > ex - region - > sx , x ) ;
return 0 ;
}
if ( y > region - > ey - region - > sy )
{
sys_err ( " y coordinate overflow max: %d input: %d " , region - > ey - region - > sy , y ) ;
return 0 ;
}
/*
int iPulse = thecore_pulse ( ) ;
if ( pkChr - > GetExchange ( ) | | pkChr - > GetMyShop ( ) | | pkChr - > GetShopOwner ( ) | | pkChr - > IsOpenSafebox ( ) )
{
pkChr - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> ŷ<EFBFBD> â,â<> <C3A2> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> ¿<EFBFBD> <C2BF> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٸ<EFBFBD> <D9B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ̵<EFBFBD> <CCB5> Ҽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> " ) ) ;
return ;
}
//PREVENT_PORTAL_AFTER_EXCHANGE
//<2F> <> ȯ <20> <> <20> ð<EFBFBD> üũ
if ( iPulse - pkChr - > GetExchangeTime ( ) < PASSES_PER_SEC ( 60 ) )
{
pkChr - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> ŷ<EFBFBD> <20> <> 1<> <31> <20> ̳<EFBFBD> <CCB3> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٸ<EFBFBD> <D9B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ̵<EFBFBD> <20> <> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> ." ) ) ;
return ;
}
//END_PREVENT_PORTAL_AFTER_EXCHANGE
//PREVENT_ITEM_COPY
{
if ( iPulse - pkChr - > GetMyShopTime ( ) < PASSES_PER_SEC ( 60 ) )
{
pkChr - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> ŷ<EFBFBD> <20> <> 1<> <31> <20> ̳<EFBFBD> <CCB3> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٸ<EFBFBD> <D9B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ̵<EFBFBD> <20> <> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> ." ) ) ;
return ;
}
}
//END_PREVENT_ITEM_COPY
*/
CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > WarpSet ( region - > sx + x , region - > sy + y ) ;
return 0 ;
}
int pc_warp_exit ( lua_State * L )
{
CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > ExitToSavedLocation ( ) ;
return 0 ;
}
int pc_in_dungeon ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushboolean ( L , ch - > GetDungeon ( ) ? 1 : 0 ) ;
return 1 ;
}
int pc_hasguild ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushboolean ( L , ch - > GetGuild ( ) ? 1 : 0 ) ;
return 1 ;
}
int pc_getguild ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushnumber ( L , ch - > GetGuild ( ) ? ch - > GetGuild ( ) - > GetID ( ) : 0 ) ;
return 1 ;
}
int pc_isguildmaster ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
CGuild * g = ch - > GetGuild ( ) ;
if ( g )
lua_pushboolean ( L , ( ch - > GetPlayerID ( ) = = g - > GetMasterPID ( ) ) ) ;
else
lua_pushboolean ( L , 0 ) ;
return 1 ;
}
int pc_destroy_guild ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
CGuild * g = ch - > GetGuild ( ) ;
if ( g )
g - > RequestDisband ( ch - > GetPlayerID ( ) ) ;
return 0 ;
}
int pc_remove_from_guild ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
CGuild * g = ch - > GetGuild ( ) ;
if ( g )
g - > RequestRemoveMember ( ch - > GetPlayerID ( ) ) ;
return 0 ;
}
int pc_give_gold ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( ! lua_isnumber ( L , 1 ) )
{
sys_err ( " QUEST : wrong argument " ) ;
return 0 ;
}
int iAmount = ( int ) lua_tonumber ( L , 1 ) ;
if ( iAmount < = 0 )
{
sys_err ( " QUEST : gold amount less then zero " ) ;
return 0 ;
}
DBManager : : instance ( ) . SendMoneyLog ( MONEY_LOG_QUEST , ch - > GetPlayerID ( ) , iAmount ) ;
ch - > PointChange ( POINT_GOLD , iAmount , true ) ;
return 0 ;
}
int pc_warp_to_guild_war_observer_position ( lua_State * L )
{
luaL_checknumber ( L , 1 ) ;
luaL_checknumber ( L , 2 ) ;
DWORD gid1 = ( DWORD ) lua_tonumber ( L , 1 ) ;
DWORD gid2 = ( DWORD ) lua_tonumber ( L , 2 ) ;
CGuild * g1 = CGuildManager : : instance ( ) . FindGuild ( gid1 ) ;
CGuild * g2 = CGuildManager : : instance ( ) . FindGuild ( gid2 ) ;
if ( ! g1 | | ! g2 )
{
luaL_error ( L , " no such guild with id %d %d " , gid1 , gid2 ) ;
}
PIXEL_POSITION pos ;
DWORD dwMapIndex = g1 - > GetGuildWarMapIndex ( gid2 ) ;
if ( ! CWarMapManager : : instance ( ) . GetStartPosition ( dwMapIndex , 2 , pos ) )
{
luaL_error ( L , " not under warp guild war between guild %d %d " , gid1 , gid2 ) ;
return 0 ;
}
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
//PREVENT_HACK
if ( ch - > IsHack ( ) )
return 0 ;
//END_PREVENT_HACK
ch - > SetQuestFlag ( " war.is_war_member " , 0 ) ;
ch - > SaveExitLocation ( ) ;
ch - > WarpSet ( pos . x , pos . y , dwMapIndex ) ;
return 0 ;
}
int pc_give_item_from_special_item_group ( lua_State * L )
{
luaL_checknumber ( L , 1 ) ;
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
DWORD dwGroupVnum = ( DWORD ) lua_tonumber ( L , 1 ) ;
std : : vector < DWORD > dwVnums ;
std : : vector < DWORD > dwCounts ;
2022-03-12 11:39:41 +02:00
std : : vector < LPITEM > item_gets ;
2022-03-05 12:44:06 +02:00
int count = 0 ;
ch - > GiveItemFromSpecialItemGroup ( dwGroupVnum , dwVnums , dwCounts , item_gets , count ) ;
for ( int i = 0 ; i < count ; i + + )
{
if ( ! item_gets [ i ] )
{
if ( dwVnums [ i ] = = 1 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> %d <20> <> <EFBFBD> <EFBFBD> ȹ<> <C8B9> <EFBFBD> ߽<EFBFBD> <DFBD> ϴ<EFBFBD> ." ) , dwCounts [ i ] ) ;
}
else if ( dwVnums [ i ] = = 2 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ź<EFBFBD> <C5BA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ɴϴ<C9B4> ." ) ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " %d<> <64> <20> <> <EFBFBD> <EFBFBD> ġ<EFBFBD> <C4A1> ȹ<> <C8B9> <EFBFBD> ߽<EFBFBD> <DFBD> ϴ<EFBFBD> . " ) , dwCounts [ i ] ) ;
}
}
}
return 0 ;
}
int pc_enough_inventory ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( ! lua_isnumber ( L , 1 ) )
{
lua_pushboolean ( L , 0 ) ;
return 1 ;
}
DWORD item_vnum = ( DWORD ) lua_tonumber ( L , 1 ) ;
TItemTable * pTable = ITEM_MANAGER : : instance ( ) . GetTable ( item_vnum ) ;
if ( ! pTable )
{
lua_pushboolean ( L , 0 ) ;
return 1 ;
}
bool bEnoughInventoryForItem = ch - > GetEmptyInventory ( pTable - > bSize ) ! = - 1 ;
lua_pushboolean ( L , bEnoughInventoryForItem ) ;
return 1 ;
}
int pc_give_item ( lua_State * L )
{
PC * pPC = CQuestManager : : instance ( ) . GetCurrentPC ( ) ;
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( ! lua_isstring ( L , 1 ) | | ! ( lua_isstring ( L , 2 ) | | lua_isnumber ( L , 2 ) ) )
{
sys_err ( " QUEST : wrong argument " ) ;
return 0 ;
}
DWORD dwVnum ;
if ( lua_isnumber ( L , 2 ) ) // <20> <> ȣ <EFBFBD> ΰ<EFBFBD> <CEB0> <EFBFBD> <20> <> ȣ <EFBFBD> <C8A3> <20> ش<EFBFBD> .
dwVnum = ( int ) lua_tonumber ( L , 2 ) ;
else if ( ! ITEM_MANAGER : : instance ( ) . GetVnum ( lua_tostring ( L , 2 ) , dwVnum ) )
{
sys_err ( " QUEST Make item call error : wrong item name : %s " , lua_tostring ( L , 1 ) ) ;
return 0 ;
}
int icount = 1 ;
if ( lua_isnumber ( L , 3 ) & & lua_tonumber ( L , 3 ) > 0 )
{
icount = ( int ) rint ( lua_tonumber ( L , 3 ) ) ;
if ( icount < = 0 )
{
sys_err ( " QUEST Make item call error : wrong item count : %g " , lua_tonumber ( L , 2 ) ) ;
return 0 ;
}
}
pPC - > GiveItem ( lua_tostring ( L , 1 ) , dwVnum , icount ) ;
LogManager : : instance ( ) . QuestRewardLog ( pPC - > GetCurrentQuestName ( ) . c_str ( ) , ch - > GetPlayerID ( ) , ch - > GetLevel ( ) , dwVnum , icount ) ;
return 0 ;
}
int pc_give_or_drop_item ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( ! lua_isstring ( L , 1 ) & & ! lua_isnumber ( L , 1 ) )
{
sys_err ( " QUEST Make item call error : wrong argument " ) ;
lua_pushnumber ( L , 0 ) ;
return 1 ;
}
DWORD dwVnum ;
if ( lua_isnumber ( L , 1 ) ) // <20> <> ȣ <EFBFBD> ΰ<EFBFBD> <CEB0> <EFBFBD> <20> <> ȣ <EFBFBD> <C8A3> <20> ش<EFBFBD> .
{
dwVnum = ( int ) lua_tonumber ( L , 1 ) ;
}
else if ( ! ITEM_MANAGER : : instance ( ) . GetVnum ( lua_tostring ( L , 1 ) , dwVnum ) )
{
sys_err ( " QUEST Make item call error : wrong item name : %s " , lua_tostring ( L , 1 ) ) ;
lua_pushnumber ( L , 0 ) ;
return 1 ;
}
int icount = 1 ;
if ( lua_isnumber ( L , 2 ) & & lua_tonumber ( L , 2 ) > 0 )
{
icount = ( int ) rint ( lua_tonumber ( L , 2 ) ) ;
if ( icount < = 0 )
{
sys_err ( " QUEST Make item call error : wrong item count : %g " , lua_tonumber ( L , 2 ) ) ;
lua_pushnumber ( L , 0 ) ;
return 1 ;
}
}
sys_log ( 0 , " QUEST [REWARD] item %s to %s " , lua_tostring ( L , 1 ) , ch - > GetName ( ) ) ;
PC * pPC = CQuestManager : : instance ( ) . GetCurrentPC ( ) ;
LogManager : : instance ( ) . QuestRewardLog ( pPC - > GetCurrentQuestName ( ) . c_str ( ) , ch - > GetPlayerID ( ) , ch - > GetLevel ( ) , dwVnum , icount ) ;
LPITEM item = ch - > AutoGiveItem ( dwVnum , icount ) ;
if ( dwVnum > = 80003 & & dwVnum < = 80007 )
{
LogManager : : instance ( ) . GoldBarLog ( ch - > GetPlayerID ( ) , item - > GetID ( ) , QUEST , " quest: give_item2 " ) ;
}
if ( NULL ! = item )
lua_pushnumber ( L , item - > GetID ( ) ) ;
else
lua_pushnumber ( L , 0 ) ;
return 1 ;
}
int pc_give_or_drop_item_and_select ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( ! lua_isstring ( L , 1 ) & & ! lua_isnumber ( L , 1 ) )
{
sys_err ( " QUEST Make item call error : wrong argument " ) ;
return 0 ;
}
DWORD dwVnum ;
if ( lua_isnumber ( L , 1 ) ) // <20> <> ȣ <EFBFBD> ΰ<EFBFBD> <CEB0> <EFBFBD> <20> <> ȣ <EFBFBD> <C8A3> <20> ش<EFBFBD> .
{
dwVnum = ( int ) lua_tonumber ( L , 1 ) ;
}
else if ( ! ITEM_MANAGER : : instance ( ) . GetVnum ( lua_tostring ( L , 1 ) , dwVnum ) )
{
sys_err ( " QUEST Make item call error : wrong item name : %s " , lua_tostring ( L , 1 ) ) ;
return 0 ;
}
int icount = 1 ;
if ( lua_isnumber ( L , 2 ) & & lua_tonumber ( L , 2 ) > 0 )
{
icount = ( int ) rint ( lua_tonumber ( L , 2 ) ) ;
if ( icount < = 0 )
{
sys_err ( " QUEST Make item call error : wrong item count : %g " , lua_tonumber ( L , 2 ) ) ;
return 0 ;
}
}
sys_log ( 0 , " QUEST [REWARD] item %s to %s " , lua_tostring ( L , 1 ) , ch - > GetName ( ) ) ;
PC * pPC = CQuestManager : : instance ( ) . GetCurrentPC ( ) ;
LogManager : : instance ( ) . QuestRewardLog ( pPC - > GetCurrentQuestName ( ) . c_str ( ) , ch - > GetPlayerID ( ) , ch - > GetLevel ( ) , dwVnum , icount ) ;
LPITEM item = ch - > AutoGiveItem ( dwVnum , icount ) ;
if ( NULL ! = item )
CQuestManager : : Instance ( ) . SetCurrentItem ( item ) ;
if ( dwVnum > = 80003 & & dwVnum < = 80007 )
{
LogManager : : instance ( ) . GoldBarLog ( ch - > GetPlayerID ( ) , item - > GetID ( ) , QUEST , " quest: give_item2 " ) ;
}
return 0 ;
}
int pc_get_current_map_index ( lua_State * L )
{
lua_pushnumber ( L , CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetMapIndex ( ) ) ;
return 1 ;
}
int pc_get_x ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushnumber ( L , ch - > GetX ( ) / 100 ) ;
return 1 ;
}
int pc_get_y ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushnumber ( L , ch - > GetY ( ) / 100 ) ;
return 1 ;
}
int pc_get_local_x ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
LPSECTREE_MAP pMap = SECTREE_MANAGER : : instance ( ) . GetMap ( ch - > GetMapIndex ( ) ) ;
if ( pMap )
lua_pushnumber ( L , ( ch - > GetX ( ) - pMap - > m_setting . iBaseX ) / 100 ) ;
else
lua_pushnumber ( L , ch - > GetX ( ) / 100 ) ;
return 1 ;
}
int pc_get_local_y ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
LPSECTREE_MAP pMap = SECTREE_MANAGER : : instance ( ) . GetMap ( ch - > GetMapIndex ( ) ) ;
if ( pMap )
lua_pushnumber ( L , ( ch - > GetY ( ) - pMap - > m_setting . iBaseY ) / 100 ) ;
else
lua_pushnumber ( L , ch - > GetY ( ) / 100 ) ;
return 1 ;
}
int pc_count_item ( lua_State * L )
{
if ( lua_isnumber ( L , - 1 ) )
lua_pushnumber ( L , CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > CountSpecifyItem ( ( DWORD ) lua_tonumber ( L , - 1 ) ) ) ;
else if ( lua_isstring ( L , - 1 ) )
{
DWORD item_vnum ;
if ( ! ITEM_MANAGER : : instance ( ) . GetVnum ( lua_tostring ( L , 1 ) , item_vnum ) )
{
sys_err ( " QUEST count_item call error : wrong item name : %s " , lua_tostring ( L , 1 ) ) ;
lua_pushnumber ( L , 0 ) ;
}
else
{
lua_pushnumber ( L , CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > CountSpecifyItem ( item_vnum ) ) ;
}
}
else
lua_pushnumber ( L , 0 ) ;
return 1 ;
}
int pc_remove_item ( lua_State * L )
{
if ( lua_gettop ( L ) = = 1 )
{
DWORD item_vnum ;
if ( lua_isnumber ( L , 1 ) )
{
item_vnum = ( DWORD ) lua_tonumber ( L , 1 ) ;
}
else if ( lua_isstring ( L , 1 ) )
{
if ( ! ITEM_MANAGER : : instance ( ) . GetVnum ( lua_tostring ( L , 1 ) , item_vnum ) )
{
sys_err ( " QUEST remove_item call error : wrong item name : %s " , lua_tostring ( L , 1 ) ) ;
return 0 ;
}
}
else
{
sys_err ( " QUEST remove_item wrong argument " ) ;
return 0 ;
}
sys_log ( 0 , " QUEST remove a item vnum %d of %s[%d] " , item_vnum , CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetName ( ) , CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetPlayerID ( ) ) ;
CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > RemoveSpecifyItem ( item_vnum ) ;
}
else if ( lua_gettop ( L ) = = 2 )
{
DWORD item_vnum ;
if ( lua_isnumber ( L , 1 ) )
{
item_vnum = ( DWORD ) lua_tonumber ( L , 1 ) ;
}
else if ( lua_isstring ( L , 1 ) )
{
if ( ! ITEM_MANAGER : : instance ( ) . GetVnum ( lua_tostring ( L , 1 ) , item_vnum ) )
{
sys_err ( " QUEST remove_item call error : wrong item name : %s " , lua_tostring ( L , 1 ) ) ;
return 0 ;
}
}
else
{
sys_err ( " QUEST remove_item wrong argument " ) ;
return 0 ;
}
DWORD item_count = ( DWORD ) lua_tonumber ( L , 2 ) ;
sys_log ( 0 , " QUEST remove items(vnum %d) count %d of %s[%d] " ,
item_vnum ,
item_count ,
CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetName ( ) ,
CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetPlayerID ( ) ) ;
CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > RemoveSpecifyItem ( item_vnum , item_count ) ;
}
return 0 ;
}
int pc_get_leadership ( lua_State * L )
{
lua_pushnumber ( L , CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetLeadershipSkillLevel ( ) ) ;
return 1 ;
}
int pc_reset_point ( lua_State * L )
{
CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > ResetPoint ( CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetLevel ( ) ) ;
return 0 ;
}
int pc_get_playtime ( lua_State * L )
{
lua_pushnumber ( L , CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetRealPoint ( POINT_PLAYTIME ) ) ;
return 1 ;
}
int pc_get_vid ( lua_State * L )
{
lua_pushnumber ( L , CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetVID ( ) ) ;
return 1 ;
}
int pc_get_name ( lua_State * L )
{
lua_pushstring ( L , CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetName ( ) ) ;
return 1 ;
}
int pc_get_next_exp ( lua_State * L )
{
lua_pushnumber ( L , CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetNextExp ( ) ) ;
return 1 ;
}
int pc_get_exp ( lua_State * L )
{
lua_pushnumber ( L , CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetExp ( ) ) ;
return 1 ;
}
int pc_get_race ( lua_State * L )
{
lua_pushnumber ( L , CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetRaceNum ( ) ) ;
return 1 ;
}
int pc_change_sex ( lua_State * L )
{
lua_pushnumber ( L , CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > ChangeSex ( ) ) ;
return 1 ;
}
int pc_get_job ( lua_State * L )
{
lua_pushnumber ( L , CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetJob ( ) ) ;
return 1 ;
}
int pc_get_max_sp ( lua_State * L )
{
lua_pushnumber ( L , CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetMaxSP ( ) ) ;
return 1 ;
}
int pc_get_sp ( lua_State * L )
{
lua_pushnumber ( L , CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetSP ( ) ) ;
return 1 ;
}
int pc_change_sp ( lua_State * L )
{
if ( ! lua_isnumber ( L , 1 ) )
{
sys_err ( " invalid argument " ) ;
lua_pushboolean ( L , 0 ) ;
return 1 ;
}
2022-03-12 11:39:41 +02:00
int val = ( int ) lua_tonumber ( L , 1 ) ;
2022-03-05 12:44:06 +02:00
if ( val = = 0 )
{
lua_pushboolean ( L , 0 ) ;
return 1 ;
}
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( val > 0 ) // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ű<EFBFBD> <C5B0> <20> <> <EFBFBD> ̹Ƿ<CCB9> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
ch - > PointChange ( POINT_SP , val ) ;
else if ( val < 0 )
{
if ( ch - > GetSP ( ) < - val )
{
lua_pushboolean ( L , 0 ) ;
return 1 ;
}
ch - > PointChange ( POINT_SP , val ) ;
}
lua_pushboolean ( L , 1 ) ;
return 1 ;
}
int pc_get_max_hp ( lua_State * L )
{
lua_pushnumber ( L , CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetMaxHP ( ) ) ;
return 1 ;
}
int pc_get_hp ( lua_State * L )
{
lua_pushnumber ( L , CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetHP ( ) ) ;
return 1 ;
}
int pc_get_level ( lua_State * L )
{
lua_pushnumber ( L , CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetLevel ( ) ) ;
return 1 ;
}
int pc_set_level ( lua_State * L )
{
if ( ! lua_isnumber ( L , 1 ) )
{
sys_err ( " invalid argument " ) ;
return 0 ;
}
else
{
int newLevel = lua_tonumber ( L , 1 ) ;
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
sys_log ( 0 , " QUEST [LEVEL] %s jumpint to level %d " , ch - > GetName ( ) , ( int ) rint ( lua_tonumber ( L , 1 ) ) ) ;
PC * pPC = CQuestManager : : instance ( ) . GetCurrentPC ( ) ;
LogManager : : instance ( ) . QuestRewardLog ( pPC - > GetCurrentQuestName ( ) . c_str ( ) , ch - > GetPlayerID ( ) , ch - > GetLevel ( ) , newLevel , 0 ) ;
//<2F> <> <EFBFBD> <EFBFBD> Ʈ : <20> <> ų, <20> <> <EFBFBD> 꽺ų, <20> <> <EFBFBD> <EFBFBD>
ch - > PointChange ( POINT_SKILL , newLevel - ch - > GetLevel ( ) ) ;
ch - > PointChange ( POINT_SUB_SKILL , newLevel < 10 ? 0 : newLevel - MAX ( ch - > GetLevel ( ) , 9 ) ) ;
ch - > PointChange ( POINT_STAT , ( ( MINMAX ( 1 , newLevel , 90 ) - ch - > GetLevel ( ) ) * 3 ) + ch - > GetPoint ( POINT_LEVEL_STEP ) ) ;
//<2F> <> <EFBFBD> <EFBFBD>
ch - > PointChange ( POINT_LEVEL , newLevel - ch - > GetLevel ( ) ) ;
//HP, SP
ch - > SetRandomHP ( ( newLevel - 1 ) * number ( JobInitialPoints [ ch - > GetJob ( ) ] . hp_per_lv_begin , JobInitialPoints [ ch - > GetJob ( ) ] . hp_per_lv_end ) ) ;
ch - > SetRandomSP ( ( newLevel - 1 ) * number ( JobInitialPoints [ ch - > GetJob ( ) ] . sp_per_lv_begin , JobInitialPoints [ ch - > GetJob ( ) ] . sp_per_lv_end ) ) ;
// ȸ<> <C8B8>
ch - > PointChange ( POINT_HP , ch - > GetMaxHP ( ) - ch - > GetHP ( ) ) ;
ch - > PointChange ( POINT_SP , ch - > GetMaxSP ( ) - ch - > GetSP ( ) ) ;
ch - > ComputePoints ( ) ;
ch - > PointsPacket ( ) ;
ch - > SkillLevelPacket ( ) ;
return 0 ;
}
}
int pc_get_weapon ( lua_State * L )
{
LPITEM item = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetWear ( WEAR_WEAPON ) ;
if ( ! item )
lua_pushnumber ( L , 0 ) ;
else
lua_pushnumber ( L , item - > GetVnum ( ) ) ;
return 1 ;
}
int pc_get_armor ( lua_State * L )
{
LPITEM item = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetWear ( WEAR_BODY ) ;
if ( ! item )
lua_pushnumber ( L , 0 ) ;
else
lua_pushnumber ( L , item - > GetVnum ( ) ) ;
return 1 ;
}
int pc_get_wear ( lua_State * L )
{
if ( ! lua_isnumber ( L , 1 ) )
{
sys_err ( " QUEST wrong set flag " ) ;
return 0 ;
}
BYTE bCell = ( BYTE ) lua_tonumber ( L , 1 ) ;
LPITEM item = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetWear ( bCell ) ;
if ( ! item )
lua_pushnil ( L ) ;
else
lua_pushnumber ( L , item - > GetVnum ( ) ) ;
return 1 ;
}
int pc_get_money ( lua_State * L )
{
lua_pushnumber ( L , CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetGold ( ) ) ;
return 1 ;
}
// 20050725.myevan.<2E> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȥ<> <C8A5> <20> <> <EFBFBD> ý<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ġ<EFBFBD> <C4A1> <20> ι <EFBFBD> <20> Ҹ<EFBFBD> <D2B8> Ǵ<EFBFBD> <20> <> <EFBFBD> װ<EFBFBD> <20> <EFBFBD> <DFBB> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ġ<EFBFBD> <C4A1> <20> ̿<EFBFBD> <CCBF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ϰ<EFBFBD> <20> Ѵ <EFBFBD> .
int pc_get_real_alignment ( lua_State * L )
{
lua_pushnumber ( L , CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetRealAlignment ( ) / 10 ) ;
return 1 ;
}
int pc_get_alignment ( lua_State * L )
{
lua_pushnumber ( L , CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetAlignment ( ) / 10 ) ;
return 1 ;
}
int pc_change_alignment ( lua_State * L )
{
int alignment = ( int ) ( lua_tonumber ( L , 1 ) * 10 ) ;
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
ch - > UpdateAlignment ( alignment ) ;
return 0 ;
}
int pc_change_money ( lua_State * L )
{
int gold = ( int ) lua_tonumber ( L , - 1 ) ;
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( gold + ch - > GetGold ( ) < 0 )
sys_err ( " QUEST wrong ChangeGold %d (now %d) " , gold , ch - > GetGold ( ) ) ;
else
{
DBManager : : instance ( ) . SendMoneyLog ( MONEY_LOG_QUEST , ch - > GetPlayerID ( ) , gold ) ;
ch - > PointChange ( POINT_GOLD , gold , true ) ;
}
return 0 ;
}
int pc_set_another_quest_flag ( lua_State * L )
{
if ( ! lua_isstring ( L , 1 ) | | ! lua_isstring ( L , 2 ) | | ! lua_isnumber ( L , 3 ) )
{
sys_err ( " QUEST wrong set flag " ) ;
return 0 ;
}
else
{
const char * sz = lua_tostring ( L , 1 ) ;
const char * sz2 = lua_tostring ( L , 2 ) ;
CQuestManager & q = CQuestManager : : Instance ( ) ;
PC * pPC = q . GetCurrentPC ( ) ;
pPC - > SetFlag ( string ( sz ) + " . " + sz2 , int ( rint ( lua_tonumber ( L , 3 ) ) ) ) ;
return 0 ;
}
}
int pc_get_another_quest_flag ( lua_State * L )
{
if ( ! lua_isstring ( L , 1 ) | | ! lua_isstring ( L , 2 ) )
{
sys_err ( " QUEST wrong get flag " ) ;
return 0 ;
}
else
{
const char * sz = lua_tostring ( L , 1 ) ;
const char * sz2 = lua_tostring ( L , 2 ) ;
CQuestManager & q = CQuestManager : : Instance ( ) ;
PC * pPC = q . GetCurrentPC ( ) ;
if ( ! pPC )
{
return 0 ;
}
lua_pushnumber ( L , pPC - > GetFlag ( string ( sz ) + " . " + sz2 ) ) ;
return 1 ;
}
}
int pc_get_flag ( lua_State * L )
{
if ( ! lua_isstring ( L , - 1 ) )
{
sys_err ( " QUEST wrong get flag " ) ;
return 0 ;
}
else
{
const char * sz = lua_tostring ( L , - 1 ) ;
CQuestManager & q = CQuestManager : : Instance ( ) ;
PC * pPC = q . GetCurrentPC ( ) ;
lua_pushnumber ( L , pPC - > GetFlag ( sz ) ) ;
return 1 ;
}
}
int pc_get_quest_flag ( lua_State * L )
{
if ( ! lua_isstring ( L , - 1 ) )
{
sys_err ( " QUEST wrong get flag " ) ;
return 0 ;
}
else
{
const char * sz = lua_tostring ( L , - 1 ) ;
CQuestManager & q = CQuestManager : : Instance ( ) ;
PC * pPC = q . GetCurrentPC ( ) ;
lua_pushnumber ( L , pPC - > GetFlag ( pPC - > GetCurrentQuestName ( ) + " . " + sz ) ) ;
if ( test_server )
sys_log ( 0 , " GetQF ( %s . %s ) " , pPC - > GetCurrentQuestName ( ) . c_str ( ) , sz ) ;
}
return 1 ;
}
int pc_set_flag ( lua_State * L )
{
if ( ! lua_isstring ( L , 1 ) | | ! lua_isnumber ( L , 2 ) )
{
sys_err ( " QUEST wrong set flag " ) ;
}
else
{
const char * sz = lua_tostring ( L , 1 ) ;
CQuestManager & q = CQuestManager : : Instance ( ) ;
PC * pPC = q . GetCurrentPC ( ) ;
pPC - > SetFlag ( sz , int ( rint ( lua_tonumber ( L , 2 ) ) ) ) ;
}
return 0 ;
}
int pc_set_quest_flag ( lua_State * L )
{
if ( ! lua_isstring ( L , 1 ) | | ! lua_isnumber ( L , 2 ) )
{
sys_err ( " QUEST wrong set flag " ) ;
}
else
{
const char * sz = lua_tostring ( L , 1 ) ;
CQuestManager & q = CQuestManager : : Instance ( ) ;
PC * pPC = q . GetCurrentPC ( ) ;
pPC - > SetFlag ( pPC - > GetCurrentQuestName ( ) + " . " + sz , int ( rint ( lua_tonumber ( L , 2 ) ) ) ) ;
}
return 0 ;
}
int pc_del_quest_flag ( lua_State * L )
{
if ( ! lua_isstring ( L , 1 ) )
{
sys_err ( " argument error " ) ;
return 0 ;
}
const char * sz = lua_tostring ( L , 1 ) ;
PC * pPC = CQuestManager : : instance ( ) . GetCurrentPC ( ) ;
pPC - > DeleteFlag ( pPC - > GetCurrentQuestName ( ) + " . " + sz ) ;
return 0 ;
}
int pc_give_exp2 ( lua_State * L )
{
CQuestManager & q = CQuestManager : : instance ( ) ;
LPCHARACTER ch = q . GetCurrentCharacterPtr ( ) ;
if ( ! lua_isnumber ( L , 1 ) )
return 0 ;
sys_log ( 0 , " QUEST [REWARD] %s give exp2 %d " , ch - > GetName ( ) , ( int ) rint ( lua_tonumber ( L , 1 ) ) ) ;
DWORD exp = ( DWORD ) rint ( lua_tonumber ( L , 1 ) ) ;
PC * pPC = CQuestManager : : instance ( ) . GetCurrentPC ( ) ;
LogManager : : instance ( ) . QuestRewardLog ( pPC - > GetCurrentQuestName ( ) . c_str ( ) , ch - > GetPlayerID ( ) , ch - > GetLevel ( ) , exp , 0 ) ;
ch - > PointChange ( POINT_EXP , exp ) ;
return 0 ;
}
int pc_give_exp ( lua_State * L )
{
if ( ! lua_isstring ( L , 1 ) | | ! lua_isnumber ( L , 2 ) )
return 0 ;
CQuestManager & q = CQuestManager : : instance ( ) ;
LPCHARACTER ch = q . GetCurrentCharacterPtr ( ) ;
sys_log ( 0 , " QUEST [REWARD] %s give exp %s %d " , ch - > GetName ( ) , lua_tostring ( L , 1 ) , ( int ) rint ( lua_tonumber ( L , 2 ) ) ) ;
DWORD exp = ( DWORD ) rint ( lua_tonumber ( L , 2 ) ) ;
PC * pPC = CQuestManager : : instance ( ) . GetCurrentPC ( ) ;
LogManager : : instance ( ) . QuestRewardLog ( pPC - > GetCurrentQuestName ( ) . c_str ( ) , ch - > GetPlayerID ( ) , ch - > GetLevel ( ) , exp , 0 ) ;
pPC - > GiveExp ( lua_tostring ( L , 1 ) , exp ) ;
return 0 ;
}
int pc_give_exp_perc ( lua_State * L )
{
CQuestManager & q = CQuestManager : : instance ( ) ;
LPCHARACTER ch = q . GetCurrentCharacterPtr ( ) ;
if ( ! ch | | ! lua_isstring ( L , 1 ) | | ! lua_isnumber ( L , 2 ) | | ! lua_isnumber ( L , 3 ) )
return 0 ;
int lev = ( int ) rint ( lua_tonumber ( L , 2 ) ) ;
double proc = ( lua_tonumber ( L , 3 ) ) ;
sys_log ( 0 , " QUEST [REWARD] %s give exp %s lev %d percent %g%% " , ch - > GetName ( ) , lua_tostring ( L , 1 ) , lev , proc ) ;
DWORD exp = ( DWORD ) ( ( exp_table [ MINMAX ( 0 , lev , PLAYER_EXP_TABLE_MAX ) ] * proc ) / 100 ) ;
PC * pPC = CQuestManager : : instance ( ) . GetCurrentPC ( ) ;
LogManager : : instance ( ) . QuestRewardLog ( pPC - > GetCurrentQuestName ( ) . c_str ( ) , ch - > GetPlayerID ( ) , ch - > GetLevel ( ) , exp , 0 ) ;
pPC - > GiveExp ( lua_tostring ( L , 1 ) , exp ) ;
return 0 ;
}
int pc_get_empire ( lua_State * L )
{
lua_pushnumber ( L , CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetEmpire ( ) ) ;
return 1 ;
}
int pc_get_part ( lua_State * L )
{
CQuestManager & q = CQuestManager : : instance ( ) ;
LPCHARACTER ch = q . GetCurrentCharacterPtr ( ) ;
if ( ! lua_isnumber ( L , 1 ) )
{
lua_pushnumber ( L , 0 ) ;
return 1 ;
}
int part_idx = ( int ) lua_tonumber ( L , 1 ) ;
lua_pushnumber ( L , ch - > GetPart ( part_idx ) ) ;
return 1 ;
}
int pc_set_part ( lua_State * L )
{
CQuestManager & q = CQuestManager : : instance ( ) ;
LPCHARACTER ch = q . GetCurrentCharacterPtr ( ) ;
if ( ! lua_isnumber ( L , 1 ) | | ! lua_isnumber ( L , 2 ) )
{
return 0 ;
}
int part_idx = ( int ) lua_tonumber ( L , 1 ) ;
int part_value = ( int ) lua_tonumber ( L , 2 ) ;
ch - > SetPart ( part_idx , part_value ) ;
ch - > UpdatePacket ( ) ;
return 0 ;
}
int pc_get_skillgroup ( lua_State * L )
{
lua_pushnumber ( L , CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) - > GetSkillGroup ( ) ) ;
return 1 ;
}
int pc_set_skillgroup ( lua_State * L )
{
if ( ! lua_isnumber ( L , 1 ) )
sys_err ( " QUEST wrong skillgroup number " ) ;
else
{
CQuestManager & q = CQuestManager : : Instance ( ) ;
LPCHARACTER ch = q . GetCurrentCharacterPtr ( ) ;
ch - > SetSkillGroup ( ( BYTE ) rint ( lua_tonumber ( L , 1 ) ) ) ;
}
return 0 ;
}
int pc_is_polymorphed ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushboolean ( L , ch - > IsPolymorphed ( ) ) ;
return 1 ;
}
int pc_remove_polymorph ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
ch - > RemoveAffect ( AFFECT_POLYMORPH ) ;
ch - > SetPolymorph ( 0 ) ;
return 0 ;
}
int pc_polymorph ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
DWORD dwVnum = ( DWORD ) lua_tonumber ( L , 1 ) ;
int iDuration = ( int ) lua_tonumber ( L , 2 ) ;
ch - > AddAffect ( AFFECT_POLYMORPH , POINT_POLYMORPH , dwVnum , AFF_POLYMORPH , iDuration , 0 , true ) ;
return 0 ;
}
int pc_is_mount ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushboolean ( L , ch - > GetMountVnum ( ) ) ;
return 1 ;
}
int pc_mount ( lua_State * L )
{
if ( ! lua_isnumber ( L , 1 ) )
return 0 ;
int length = 60 ;
if ( lua_isnumber ( L , 2 ) )
length = ( int ) lua_tonumber ( L , 2 ) ;
DWORD mount_vnum = ( DWORD ) lua_tonumber ( L , 1 ) ;
if ( length < 0 )
length = 60 ;
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
ch - > RemoveAffect ( AFFECT_MOUNT ) ;
ch - > RemoveAffect ( AFFECT_MOUNT_BONUS ) ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> ȯ<EFBFBD> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ٴϴ<D9B4> <20> <> <EFBFBD> ¶<EFBFBD> <C2B6> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
if ( ch - > GetHorse ( ) )
ch - > HorseSummon ( false ) ;
if ( mount_vnum )
{
ch - > AddAffect ( AFFECT_MOUNT , POINT_MOUNT , mount_vnum , AFF_NONE , length , 0 , true ) ;
switch ( mount_vnum )
{
case 20201 :
case 20202 :
case 20203 :
case 20204 :
case 20213 :
case 20216 :
ch - > AddAffect ( AFFECT_MOUNT , POINT_MOV_SPEED , 30 , AFF_NONE , length , 0 , true , true ) ;
break ;
case 20205 :
case 20206 :
case 20207 :
case 20208 :
case 20214 :
case 20217 :
ch - > AddAffect ( AFFECT_MOUNT , POINT_MOV_SPEED , 40 , AFF_NONE , length , 0 , true , true ) ;
break ;
case 20209 :
case 20210 :
case 20211 :
case 20212 :
case 20215 :
case 20218 :
ch - > AddAffect ( AFFECT_MOUNT , POINT_MOV_SPEED , 50 , AFF_NONE , length , 0 , true , true ) ;
break ;
}
}
return 0 ;
}
int pc_mount_bonus ( lua_State * L )
{
BYTE applyOn = static_cast < BYTE > ( lua_tonumber ( L , 1 ) ) ;
2022-03-12 11:39:41 +02:00
int value = static_cast < int > ( lua_tonumber ( L , 2 ) ) ;
int duration = static_cast < int > ( lua_tonumber ( L , 3 ) ) ;
2022-03-05 12:44:06 +02:00
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( NULL ! = ch )
{
ch - > RemoveAffect ( AFFECT_MOUNT_BONUS ) ;
ch - > AddAffect ( AFFECT_MOUNT_BONUS , aApplyInfo [ applyOn ] . bPointType , value , AFF_NONE , duration , 0 , false ) ;
}
return 0 ;
}
int pc_unmount ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
ch - > RemoveAffect ( AFFECT_MOUNT ) ;
ch - > RemoveAffect ( AFFECT_MOUNT_BONUS ) ;
if ( ch - > IsHorseRiding ( ) )
ch - > StopRiding ( ) ;
return 0 ;
}
int pc_get_horse_level ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushnumber ( L , ch - > GetHorseLevel ( ) ) ;
return 1 ;
}
int pc_get_horse_hp ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( ch - > GetHorseLevel ( ) )
lua_pushnumber ( L , ch - > GetHorseHealth ( ) ) ;
else
lua_pushnumber ( L , 0 ) ;
return 1 ;
}
int pc_get_horse_stamina ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( ch - > GetHorseLevel ( ) )
lua_pushnumber ( L , ch - > GetHorseStamina ( ) ) ;
else
lua_pushnumber ( L , 0 ) ;
return 1 ;
}
int pc_is_horse_alive ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushboolean ( L , ch - > GetHorseLevel ( ) > 0 & & ch - > GetHorseHealth ( ) > 0 ) ;
return 1 ;
}
int pc_revive_horse ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
ch - > ReviveHorse ( ) ;
return 0 ;
}
int pc_have_map_scroll ( lua_State * L )
{
if ( ! lua_isstring ( L , 1 ) )
{
lua_pushboolean ( L , 0 ) ;
return 1 ;
}
const char * szMapName = lua_tostring ( L , 1 ) ;
const TMapRegion * region = SECTREE_MANAGER : : instance ( ) . FindRegionByPartialName ( szMapName ) ;
if ( ! region )
{
lua_pushboolean ( L , 0 ) ;
return 1 ;
}
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
bool bFind = false ;
for ( int iCell = 0 ; iCell < INVENTORY_MAX_NUM ; iCell + + )
{
LPITEM item = ch - > GetInventoryItem ( iCell ) ;
if ( ! item )
continue ;
if ( item - > GetType ( ) = = ITEM_USE & &
item - > GetSubType ( ) = = USE_TALISMAN & &
( item - > GetValue ( 0 ) = = 1 | | item - > GetValue ( 0 ) = = 2 ) )
{
int x = item - > GetSocket ( 0 ) ;
int y = item - > GetSocket ( 1 ) ;
//if ((x-item_x)*(x-item_x)+(y-item_y)*(y-item_y)<r*r)
if ( region - > sx < = x & & region - > sy < = y & & x < = region - > ex & & y < = region - > ey )
{
bFind = true ;
break ;
}
}
}
lua_pushboolean ( L , bFind ) ;
return 1 ;
}
int pc_get_war_map ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushnumber ( L , ch - > GetWarMap ( ) ? ch - > GetWarMap ( ) - > GetMapIndex ( ) : 0 ) ;
return 1 ;
}
int pc_have_pos_scroll ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( ! lua_isnumber ( L , 1 ) | | ! lua_isnumber ( L , 2 ) )
{
sys_err ( " invalid x y position " ) ;
lua_pushboolean ( L , 0 ) ;
return 1 ;
}
if ( ! lua_isnumber ( L , 2 ) )
{
sys_err ( " invalid radius " ) ;
lua_pushboolean ( L , 0 ) ;
return 1 ;
}
int x = ( int ) lua_tonumber ( L , 1 ) ;
int y = ( int ) lua_tonumber ( L , 2 ) ;
float r = ( float ) lua_tonumber ( L , 3 ) ;
bool bFind = false ;
for ( int iCell = 0 ; iCell < INVENTORY_MAX_NUM ; iCell + + )
{
LPITEM item = ch - > GetInventoryItem ( iCell ) ;
if ( ! item )
continue ;
if ( item - > GetType ( ) = = ITEM_USE & &
item - > GetSubType ( ) = = USE_TALISMAN & &
( item - > GetValue ( 0 ) = = 1 | | item - > GetValue ( 0 ) = = 2 ) )
{
int item_x = item - > GetSocket ( 0 ) ;
int item_y = item - > GetSocket ( 1 ) ;
if ( ( x - item_x ) * ( x - item_x ) + ( y - item_y ) * ( y - item_y ) < r * r )
{
bFind = true ;
break ;
}
}
}
lua_pushboolean ( L , bFind ) ;
return 1 ;
}
int pc_get_equip_refine_level ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
int cell = ( int ) lua_tonumber ( L , 1 ) ;
if ( cell < 0 | | cell > = WEAR_MAX_NUM )
{
sys_err ( " invalid wear position %d " , cell ) ;
lua_pushnumber ( L , 0 ) ;
return 1 ;
}
LPITEM item = ch - > GetWear ( cell ) ;
if ( ! item )
{
lua_pushnumber ( L , 0 ) ;
return 1 ;
}
lua_pushnumber ( L , item - > GetRefineLevel ( ) ) ;
return 1 ;
}
int pc_refine_equip ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( ! lua_isnumber ( L , 1 ) | | ! lua_isnumber ( L , 2 ) )
{
sys_err ( " invalid argument " ) ;
lua_pushboolean ( L , 0 ) ;
return 1 ;
}
int cell = ( int ) lua_tonumber ( L , 1 ) ;
int level_limit = ( int ) lua_tonumber ( L , 2 ) ;
int pct = lua_isnumber ( L , 3 ) ? ( int ) lua_tonumber ( L , 3 ) : 100 ;
LPITEM item = ch - > GetWear ( cell ) ;
if ( ! item )
{
lua_pushboolean ( L , 0 ) ;
return 1 ;
}
if ( item - > GetRefinedVnum ( ) = = 0 )
{
lua_pushboolean ( L , 0 ) ;
return 1 ;
}
if ( item - > GetRefineLevel ( ) > level_limit )
{
lua_pushboolean ( L , 0 ) ;
return 1 ;
}
if ( pct = = 100 | | number ( 1 , 100 ) < = pct )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
lua_pushboolean ( L , 1 ) ;
LPITEM pkNewItem = ITEM_MANAGER : : instance ( ) . CreateItem ( item - > GetRefinedVnum ( ) , 1 , 0 , false ) ;
if ( pkNewItem )
{
for ( int i = 0 ; i < ITEM_SOCKET_MAX_NUM ; + + i )
if ( ! item - > GetSocket ( i ) )
break ;
else
pkNewItem - > SetSocket ( i , 1 ) ;
int set = 0 ;
for ( int i = 0 ; i < ITEM_SOCKET_MAX_NUM ; i + + )
{
2022-03-12 11:39:41 +02:00
int socket = item - > GetSocket ( i ) ;
2022-03-05 12:44:06 +02:00
if ( socket > 2 & & socket ! = 28960 )
{
pkNewItem - > SetSocket ( set + + , socket ) ;
}
}
item - > CopyAttributeTo ( pkNewItem ) ;
ITEM_MANAGER : : instance ( ) . RemoveItem ( item , " REMOVE (REFINE SUCCESS) " ) ;
// some tuits need here -_- pkNewItem->AddToCharacter(this, bCell);
pkNewItem - > EquipTo ( ch , cell ) ;
ITEM_MANAGER : : instance ( ) . FlushDelayedSave ( pkNewItem ) ;
LogManager : : instance ( ) . ItemLog ( ch , pkNewItem , " REFINE SUCCESS (QUEST) " , pkNewItem - > GetName ( ) ) ;
}
}
else
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
lua_pushboolean ( L , 0 ) ;
}
return 1 ;
}
int pc_get_skill_level ( lua_State * L )
{
if ( ! lua_isnumber ( L , 1 ) )
{
sys_err ( " invalid argument " ) ;
lua_pushnumber ( L , 0 ) ;
return 1 ;
}
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
DWORD dwVnum = ( DWORD ) lua_tonumber ( L , 1 ) ;
lua_pushnumber ( L , ch - > GetSkillLevel ( dwVnum ) ) ;
return 1 ;
}
int pc_give_lotto ( lua_State * L )
{
CQuestManager & q = CQuestManager : : instance ( ) ;
LPCHARACTER ch = q . GetCurrentCharacterPtr ( ) ;
sys_log ( 0 , " TRY GIVE LOTTO TO pid %u " , ch - > GetPlayerID ( ) ) ;
DWORD * pdw = M2_NEW DWORD [ 3 ] ;
pdw [ 0 ] = 50001 ;
pdw [ 1 ] = 1 ;
pdw [ 2 ] = q . GetEventFlag ( " lotto_round " ) ;
// <20> <> ÷<EFBFBD> <C3B7> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD>
DBManager : : instance ( ) . ReturnQuery ( QID_LOTTO , ch - > GetPlayerID ( ) , pdw ,
" INSERT INTO lotto_list VALUES(0, 'server%s', %u, NOW()) " ,
get_table_postfix ( ) , ch - > GetPlayerID ( ) ) ;
return 0 ;
}
int pc_aggregate_monster ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
ch - > AggregateMonster ( ) ;
return 0 ;
}
int pc_forget_my_attacker ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
ch - > ForgetMyAttacker ( ) ;
return 0 ;
}
int pc_attract_ranger ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
ch - > AttractRanger ( ) ;
return 0 ;
}
int pc_select_pid ( lua_State * L )
{
DWORD pid = ( DWORD ) lua_tonumber ( L , 1 ) ;
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
LPCHARACTER new_ch = CHARACTER_MANAGER : : instance ( ) . FindByPID ( pid ) ;
if ( new_ch )
{
CQuestManager : : instance ( ) . GetPC ( new_ch - > GetPlayerID ( ) ) ;
lua_pushnumber ( L , ch - > GetPlayerID ( ) ) ;
}
else
{
lua_pushnumber ( L , 0 ) ;
}
return 1 ;
}
int pc_select_vid ( lua_State * L )
{
DWORD vid = ( DWORD ) lua_tonumber ( L , 1 ) ;
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
LPCHARACTER new_ch = CHARACTER_MANAGER : : instance ( ) . Find ( vid ) ;
if ( new_ch )
{
CQuestManager : : instance ( ) . GetPC ( new_ch - > GetPlayerID ( ) ) ;
lua_pushnumber ( L , ( DWORD ) ch - > GetVID ( ) ) ;
}
else
{
lua_pushnumber ( L , 0 ) ;
}
return 1 ;
}
int pc_get_sex ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushnumber ( L , GET_SEX ( ch ) ) ; /* 0==MALE, 1==FEMALE */
return 1 ;
}
int pc_is_engaged ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushboolean ( L , marriage : : CManager : : instance ( ) . IsEngaged ( ch - > GetPlayerID ( ) ) ) ;
return 1 ;
}
int pc_is_married ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushboolean ( L , marriage : : CManager : : instance ( ) . IsMarried ( ch - > GetPlayerID ( ) ) ) ;
return 1 ;
}
int pc_is_engaged_or_married ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushboolean ( L , marriage : : CManager : : instance ( ) . IsEngagedOrMarried ( ch - > GetPlayerID ( ) ) ) ;
return 1 ;
}
int pc_is_gm ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushboolean ( L , ch - > GetGMLevel ( ) > = GM_HIGH_WIZARD ) ;
return 1 ;
}
int pc_get_gm_level ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushnumber ( L , ch - > GetGMLevel ( ) ) ;
return 1 ;
}
int pc_mining ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
LPCHARACTER npc = CQuestManager : : instance ( ) . GetCurrentNPCCharacterPtr ( ) ;
ch - > mining ( npc ) ;
return 0 ;
}
int pc_diamond_refine ( lua_State * L )
{
if ( ! lua_isnumber ( L , 1 ) )
{
lua_pushboolean ( L , 0 ) ;
return 1 ;
}
int cost = ( int ) lua_tonumber ( L , 1 ) ;
int pct = ( int ) lua_tonumber ( L , 2 ) ;
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
LPCHARACTER npc = CQuestManager : : instance ( ) . GetCurrentNPCCharacterPtr ( ) ;
LPITEM item = CQuestManager : : instance ( ) . GetCurrentItem ( ) ;
if ( item )
lua_pushboolean ( L , mining : : OreRefine ( ch , npc , item , cost , pct , NULL ) ) ;
else
lua_pushboolean ( L , 0 ) ;
return 1 ;
}
int pc_ore_refine ( lua_State * L )
{
if ( ! lua_isnumber ( L , 1 ) )
{
lua_pushboolean ( L , 0 ) ;
return 1 ;
}
int cost = ( int ) lua_tonumber ( L , 1 ) ;
int pct = ( int ) lua_tonumber ( L , 2 ) ;
int metinstone_cell = ( int ) lua_tonumber ( L , 3 ) ;
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
LPCHARACTER npc = CQuestManager : : instance ( ) . GetCurrentNPCCharacterPtr ( ) ;
LPITEM item = CQuestManager : : instance ( ) . GetCurrentItem ( ) ;
LPITEM metinstone_item = ch - > GetInventoryItem ( metinstone_cell ) ;
if ( item & & metinstone_item )
lua_pushboolean ( L , mining : : OreRefine ( ch , npc , item , cost , pct , metinstone_item ) ) ;
else
lua_pushboolean ( L , 0 ) ;
return 1 ;
}
int pc_clear_skill ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( ch = = NULL ) return 0 ;
ch - > ClearSkill ( ) ;
return 0 ;
}
int pc_clear_sub_skill ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( ch = = NULL ) return 0 ;
ch - > ClearSubSkill ( ) ;
return 0 ;
}
int pc_set_skill_point ( lua_State * L )
{
if ( ! lua_isnumber ( L , 1 ) )
{
return 0 ;
}
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
int newPoint = ( int ) lua_tonumber ( L , 1 ) ;
ch - > SetRealPoint ( POINT_SKILL , newPoint ) ;
ch - > SetPoint ( POINT_SKILL , ch - > GetRealPoint ( POINT_SKILL ) ) ;
ch - > PointChange ( POINT_SKILL , 0 ) ;
ch - > ComputePoints ( ) ;
ch - > PointsPacket ( ) ;
return 0 ;
}
// RESET_ONE_SKILL
int pc_clear_one_skill ( lua_State * L )
{
int vnum = ( int ) lua_tonumber ( L , 1 ) ;
sys_log ( 0 , " %d skill clear " , vnum ) ;
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( ch = = NULL )
{
sys_log ( 0 , " skill clear fail " ) ;
lua_pushnumber ( L , 0 ) ;
return 1 ;
}
sys_log ( 0 , " %d skill clear " , vnum ) ;
ch - > ResetOneSkill ( vnum ) ;
return 0 ;
}
// END_RESET_ONE_SKILL
int pc_is_clear_skill_group ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushboolean ( L , ch - > GetQuestFlag ( " skill_group_clear.clear " ) = = 1 ) ;
return 1 ;
}
int pc_save_exit_location ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
ch - > SaveExitLocation ( ) ;
return 0 ;
}
//<2F> ڷ<EFBFBD> <DAB7> <EFBFBD> Ʈ
int pc_teleport ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
int x = 0 , y = 0 ;
if ( lua_isnumber ( L , 1 ) )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
const int TOWN_NUM = 10 ;
struct warp_by_town_name
{
const char * name ;
DWORD x ;
DWORD y ;
} ws [ TOWN_NUM ] =
{
{ " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , 4743 , 9548 } ,
{ " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , 3235 , 9086 } ,
{ " <EFBFBD> ھ <EFBFBD> <EFBFBD> <EFBFBD> " , 3531 , 8829 } ,
{ " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , 638 , 1664 } ,
{ " <EFBFBD> ·<EFBFBD> <EFBFBD> <EFBFBD> " , 1745 , 1909 } ,
{ " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , 1455 , 2400 } ,
{ " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , 9599 , 2692 } ,
{ " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , 8036 , 2984 } ,
{ " <EFBFBD> ڶ<EFBFBD> <EFBFBD> <EFBFBD> " , 8639 , 2460 } ,
{ " <EFBFBD> <EFBFBD> <EFBFBD> ѻ<EFBFBD> " , 4350 , 2143 } ,
} ;
int idx = ( int ) lua_tonumber ( L , 1 ) ;
x = ws [ idx ] . x ;
y = ws [ idx ] . y ;
goto teleport_area ;
}
else
{
const char * arg1 = lua_tostring ( L , 1 ) ;
LPCHARACTER tch = CHARACTER_MANAGER : : instance ( ) . FindPC ( arg1 ) ;
if ( ! tch )
{
const CCI * pkCCI = P2P_MANAGER : : instance ( ) . Find ( arg1 ) ;
if ( pkCCI )
{
if ( pkCCI - > bChannel ! = g_bChannel )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Target is in %d channel (my channel %d) " , pkCCI - > bChannel , g_bChannel ) ;
}
else
{
PIXEL_POSITION pos ;
if ( ! SECTREE_MANAGER : : instance ( ) . GetCenterPositionOfMap ( pkCCI - > lMapIndex , pos ) )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Cannot find map (index %d) " , pkCCI - > lMapIndex ) ;
}
else
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " You warp to ( %d, %d ) " , pos . x , pos . y ) ;
ch - > WarpSet ( pos . x , pos . y ) ;
lua_pushnumber ( L , 1 ) ;
}
}
}
else if ( NULL = = CHARACTER_MANAGER : : instance ( ) . FindPC ( arg1 ) )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " There is no one by that name " ) ;
}
lua_pushnumber ( L , 0 ) ;
return 1 ;
}
else
{
x = tch - > GetX ( ) / 100 ;
y = tch - > GetY ( ) / 100 ;
}
}
teleport_area :
x * = 100 ;
y * = 100 ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " You warp to ( %d, %d ) " , x , y ) ;
ch - > WarpSet ( x , y ) ;
ch - > Stop ( ) ;
lua_pushnumber ( L , 1 ) ;
return 1 ;
}
int pc_set_skill_level ( lua_State * L )
{
DWORD dwVnum = ( DWORD ) lua_tonumber ( L , 1 ) ;
BYTE byLev = ( BYTE ) lua_tonumber ( L , 2 ) ;
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
ch - > SetSkillLevel ( dwVnum , byLev ) ;
ch - > SkillLevelPacket ( ) ;
return 0 ;
}
int pc_give_polymorph_book ( lua_State * L )
{
if ( lua_isnumber ( L , 1 ) ! = true & & lua_isnumber ( L , 2 ) ! = true & & lua_isnumber ( L , 3 ) ! = true & & lua_isnumber ( L , 4 ) ! = true )
{
sys_err ( " Wrong Quest Function Arguments: pc_give_polymorph_book " ) ;
return 0 ;
}
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
CPolymorphUtils : : instance ( ) . GiveBook ( ch , ( DWORD ) lua_tonumber ( L , 1 ) , ( DWORD ) lua_tonumber ( L , 2 ) , ( BYTE ) lua_tonumber ( L , 3 ) , ( BYTE ) lua_tonumber ( L , 4 ) ) ;
return 0 ;
}
int pc_upgrade_polymorph_book ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
LPITEM pItem = CQuestManager : : instance ( ) . GetCurrentItem ( ) ;
bool ret = CPolymorphUtils : : instance ( ) . BookUpgrade ( ch , pItem ) ;
lua_pushboolean ( L , ret ) ;
return 1 ;
}
int pc_get_premium_remain_sec ( lua_State * L )
{
int remain_seconds = 0 ;
int premium_type = 0 ;
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( ! lua_isnumber ( L , 1 ) )
{
sys_err ( " wrong premium index (is not number) " ) ;
return 0 ;
}
premium_type = ( int ) lua_tonumber ( L , 1 ) ;
switch ( premium_type )
{
case PREMIUM_EXP :
case PREMIUM_ITEM :
case PREMIUM_SAFEBOX :
case PREMIUM_AUTOLOOT :
case PREMIUM_FISH_MIND :
case PREMIUM_MARRIAGE_FAST :
case PREMIUM_GOLD :
break ;
default :
sys_err ( " wrong premium index %d " , premium_type ) ;
return 0 ;
}
remain_seconds = ch - > GetPremiumRemainSeconds ( premium_type ) ;
lua_pushnumber ( L , remain_seconds ) ;
return 1 ;
}
int pc_send_block_mode ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
ch - > SetBlockModeForce ( ( BYTE ) lua_tonumber ( L , 1 ) ) ;
return 0 ;
}
int pc_change_empire ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushnumber ( L , ch - > ChangeEmpire ( ( unsigned char ) lua_tonumber ( L , 1 ) ) ) ;
return 1 ;
}
int pc_get_change_empire_count ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushnumber ( L , ch - > GetChangeEmpireCount ( ) ) ;
return 1 ;
}
int pc_set_change_empire_count ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
ch - > SetChangeEmpireCount ( ) ;
return 0 ;
}
int pc_change_name ( lua_State * L )
{
// <20> <> <EFBFBD> ϰ<EFBFBD>
// 0: <20> <> <EFBFBD> ̸<EFBFBD> <CCB8> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> α ƿ<D7BE> <C6BF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// 1: <20> <> ũ<EFBFBD> <C5A9> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ڿ<EFBFBD> <DABF> <EFBFBD> <20> Ѿ<EFBFBD> <D1BE> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʾ <EFBFBD> <CABE> <EFBFBD>
// 2: check_name <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// 3: <20> ̹<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ̸<EFBFBD> <CCB8> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// 4: <20> <> <EFBFBD> <EFBFBD>
// 5: <20> ش<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
if ( LC_IsEurope ( ) )
{
lua_pushnumber ( L , 5 ) ;
return 1 ;
}
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( ch - > GetNewName ( ) . size ( ) ! = 0 )
{
lua_pushnumber ( L , 0 ) ;
return 1 ;
}
if ( lua_isstring ( L , 1 ) ! = true )
{
lua_pushnumber ( L , 1 ) ;
return 1 ;
}
const char * szName = lua_tostring ( L , 1 ) ;
if ( check_name ( szName ) = = false )
{
lua_pushnumber ( L , 2 ) ;
return 1 ;
}
char szQuery [ 1024 ] ;
snprintf ( szQuery , sizeof ( szQuery ) , " SELECT COUNT(*) FROM player%s WHERE name='%s' " , get_table_postfix ( ) , szName ) ;
2022-03-06 00:01:03 +02:00
std : : unique_ptr < SQLMsg > pmsg ( DBManager : : instance ( ) . DirectQuery ( szQuery ) ) ;
2022-03-05 12:44:06 +02:00
if ( pmsg - > Get ( ) - > uiNumRows > 0 )
{
MYSQL_ROW row = mysql_fetch_row ( pmsg - > Get ( ) - > pSQLResult ) ;
int count = 0 ;
str_to_number ( count , row [ 0 ] ) ;
// <20> ̹<EFBFBD> <20> ش<EFBFBD> <20> ̸<EFBFBD> <CCB8> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ij<> <C4B3> <EFBFBD> Ͱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD>
if ( count ! = 0 )
{
lua_pushnumber ( L , 3 ) ;
return 1 ;
}
}
DWORD pid = ch - > GetPlayerID ( ) ;
db_clientdesc - > DBPacketHeader ( HEADER_GD_FLUSH_CACHE , 0 , sizeof ( DWORD ) ) ;
db_clientdesc - > Packet ( & pid , sizeof ( DWORD ) ) ;
/* delete messenger list */
MessengerManager : : instance ( ) . RemoveAllList ( ch - > GetName ( ) ) ;
/* change_name_log */
LogManager : : instance ( ) . ChangeNameLog ( pid , ch - > GetName ( ) , szName , ch - > GetDesc ( ) - > GetHostName ( ) ) ;
snprintf ( szQuery , sizeof ( szQuery ) , " UPDATE player%s SET name='%s' WHERE id=%u " , get_table_postfix ( ) , szName , pid ) ;
SQLMsg * msg = DBManager : : instance ( ) . DirectQuery ( szQuery ) ;
M2_DELETE ( msg ) ;
ch - > SetNewName ( szName ) ;
lua_pushnumber ( L , 4 ) ;
return 1 ;
}
int pc_is_dead ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( ch ! = NULL )
{
lua_pushboolean ( L , ch - > IsDead ( ) ) ;
return 1 ;
}
lua_pushboolean ( L , true ) ;
return 1 ;
}
int pc_reset_status ( lua_State * L )
{
if ( lua_isnumber ( L , 1 ) = = true )
{
int idx = ( int ) lua_tonumber ( L , 1 ) ;
if ( idx > = 0 & & idx < 4 )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
int point = POINT_NONE ;
char buf [ 128 ] ;
switch ( idx )
{
case 0 : point = POINT_HT ; break ;
case 1 : point = POINT_IQ ; break ;
case 2 : point = POINT_ST ; break ;
case 3 : point = POINT_DX ; break ;
default : lua_pushboolean ( L , false ) ; return 1 ;
}
int old_val = ch - > GetRealPoint ( point ) ;
int old_stat = ch - > GetRealPoint ( POINT_STAT ) ;
ch - > SetRealPoint ( point , 1 ) ;
ch - > SetPoint ( point , ch - > GetRealPoint ( point ) ) ;
ch - > PointChange ( POINT_STAT , old_val - 1 ) ;
if ( point = = POINT_HT )
{
BYTE job = ch - > GetJob ( ) ;
ch - > SetRandomHP ( ( ch - > GetLevel ( ) - 1 ) * number ( JobInitialPoints [ job ] . hp_per_lv_begin , JobInitialPoints [ job ] . hp_per_lv_end ) ) ;
}
else if ( point = = POINT_IQ )
{
BYTE job = ch - > GetJob ( ) ;
ch - > SetRandomSP ( ( ch - > GetLevel ( ) - 1 ) * number ( JobInitialPoints [ job ] . sp_per_lv_begin , JobInitialPoints [ job ] . sp_per_lv_end ) ) ;
}
ch - > ComputePoints ( ) ;
ch - > PointsPacket ( ) ;
if ( point = = POINT_HT )
{
ch - > PointChange ( POINT_HP , ch - > GetMaxHP ( ) - ch - > GetHP ( ) ) ;
}
else if ( point = = POINT_IQ )
{
ch - > PointChange ( POINT_SP , ch - > GetMaxSP ( ) - ch - > GetSP ( ) ) ;
}
switch ( idx )
{
case 0 :
snprintf ( buf , sizeof ( buf ) , " reset ht(%d)->1 stat_point(%d)->(%d) " , old_val , old_stat , ch - > GetRealPoint ( POINT_STAT ) ) ;
break ;
case 1 :
snprintf ( buf , sizeof ( buf ) , " reset iq(%d)->1 stat_point(%d)->(%d) " , old_val , old_stat , ch - > GetRealPoint ( POINT_STAT ) ) ;
break ;
case 2 :
snprintf ( buf , sizeof ( buf ) , " reset st(%d)->1 stat_point(%d)->(%d) " , old_val , old_stat , ch - > GetRealPoint ( POINT_STAT ) ) ;
break ;
case 3 :
snprintf ( buf , sizeof ( buf ) , " reset dx(%d)->1 stat_point(%d)->(%d) " , old_val , old_stat , ch - > GetRealPoint ( POINT_STAT ) ) ;
break ;
}
LogManager : : instance ( ) . CharLog ( ch , 0 , " RESET_ONE_STATUS " , buf ) ;
lua_pushboolean ( L , true ) ;
return 1 ;
}
}
lua_pushboolean ( L , false ) ;
return 1 ;
}
int pc_get_ht ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushnumber ( L , ch - > GetRealPoint ( POINT_HT ) ) ;
return 1 ;
}
int pc_set_ht ( lua_State * L )
{
if ( lua_isnumber ( L , 1 ) = = false )
return 1 ;
int newPoint = ( int ) lua_tonumber ( L , 1 ) ;
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
int usedPoint = newPoint - ch - > GetRealPoint ( POINT_HT ) ;
ch - > SetRealPoint ( POINT_HT , newPoint ) ;
ch - > PointChange ( POINT_HT , 0 ) ;
ch - > PointChange ( POINT_STAT , - usedPoint ) ;
ch - > ComputePoints ( ) ;
ch - > PointsPacket ( ) ;
return 1 ;
}
int pc_get_iq ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushnumber ( L , ch - > GetRealPoint ( POINT_IQ ) ) ;
return 1 ;
}
int pc_set_iq ( lua_State * L )
{
if ( lua_isnumber ( L , 1 ) = = false )
return 1 ;
int newPoint = ( int ) lua_tonumber ( L , 1 ) ;
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
int usedPoint = newPoint - ch - > GetRealPoint ( POINT_IQ ) ;
ch - > SetRealPoint ( POINT_IQ , newPoint ) ;
ch - > PointChange ( POINT_IQ , 0 ) ;
ch - > PointChange ( POINT_STAT , - usedPoint ) ;
ch - > ComputePoints ( ) ;
ch - > PointsPacket ( ) ;
return 1 ;
}
int pc_get_st ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushnumber ( L , ch - > GetRealPoint ( POINT_ST ) ) ;
return 1 ;
}
int pc_set_st ( lua_State * L )
{
if ( lua_isnumber ( L , 1 ) = = false )
return 1 ;
int newPoint = ( int ) lua_tonumber ( L , 1 ) ;
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
int usedPoint = newPoint - ch - > GetRealPoint ( POINT_ST ) ;
ch - > SetRealPoint ( POINT_ST , newPoint ) ;
ch - > PointChange ( POINT_ST , 0 ) ;
ch - > PointChange ( POINT_STAT , - usedPoint ) ;
ch - > ComputePoints ( ) ;
ch - > PointsPacket ( ) ;
return 1 ;
}
int pc_get_dx ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_pushnumber ( L , ch - > GetRealPoint ( POINT_DX ) ) ;
return 1 ;
}
int pc_set_dx ( lua_State * L )
{
if ( lua_isnumber ( L , 1 ) = = false )
return 1 ;
int newPoint = ( int ) lua_tonumber ( L , 1 ) ;
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
int usedPoint = newPoint - ch - > GetRealPoint ( POINT_DX ) ;
ch - > SetRealPoint ( POINT_DX , newPoint ) ;
ch - > PointChange ( POINT_DX , 0 ) ;
ch - > PointChange ( POINT_STAT , - usedPoint ) ;
ch - > ComputePoints ( ) ;
ch - > PointsPacket ( ) ;
return 1 ;
}
int pc_is_near_vid ( lua_State * L )
{
if ( lua_isnumber ( L , 1 ) ! = true | | lua_isnumber ( L , 2 ) ! = true )
{
lua_pushboolean ( L , false ) ;
}
else
{
LPCHARACTER pMe = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
LPCHARACTER pOther = CHARACTER_MANAGER : : instance ( ) . Find ( ( DWORD ) lua_tonumber ( L , 1 ) ) ;
if ( pMe ! = NULL & & pOther ! = NULL )
{
lua_pushboolean ( L , ( DISTANCE_APPROX ( pMe - > GetX ( ) - pOther - > GetX ( ) , pMe - > GetY ( ) - pOther - > GetY ( ) ) < ( int ) lua_tonumber ( L , 2 ) * 100 ) ) ;
}
else
{
lua_pushboolean ( L , false ) ;
}
}
return 1 ;
}
int pc_get_socket_items ( lua_State * L )
{
LPCHARACTER pChar = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
lua_newtable ( L ) ;
if ( pChar = = NULL ) return 1 ;
int idx = 1 ;
// <20> <> ȥ<EFBFBD> <C8A5> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> ʿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> .
// <20> <> <20> Լ<EFBFBD> <D4BC> <EFBFBD> Ż<> <C5BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Լ<EFBFBD> <D4BC> <EFBFBD> <20> <> <20> ϴ<EFBFBD> .
for ( int i = 0 ; i < INVENTORY_MAX_NUM + WEAR_MAX_NUM ; i + + )
{
LPITEM pItem = pChar - > GetInventoryItem ( i ) ;
if ( pItem ! = NULL )
{
if ( pItem - > IsEquipped ( ) = = false )
{
int j = 0 ;
for ( ; j < ITEM_SOCKET_MAX_NUM ; j + + )
{
2022-03-12 11:39:41 +02:00
int socket = pItem - > GetSocket ( j ) ;
2022-03-05 12:44:06 +02:00
if ( socket > 2 & & socket ! = ITEM_BROKEN_METIN_VNUM )
{
TItemTable * pItemInfo = ITEM_MANAGER : : instance ( ) . GetTable ( socket ) ;
if ( pItemInfo ! = NULL )
{
if ( pItemInfo - > bType = = ITEM_METIN ) break ;
}
}
}
if ( j > = ITEM_SOCKET_MAX_NUM ) continue ;
lua_newtable ( L ) ;
{
lua_pushstring ( L , pItem - > GetName ( ) ) ;
lua_rawseti ( L , - 2 , 1 ) ;
lua_pushnumber ( L , i ) ;
lua_rawseti ( L , - 2 , 2 ) ;
}
lua_rawseti ( L , - 2 , idx + + ) ;
}
}
}
return 1 ;
}
int pc_get_empty_inventory_count ( lua_State * L )
{
LPCHARACTER pChar = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( pChar ! = NULL )
{
lua_pushnumber ( L , pChar - > CountEmptyInventory ( ) ) ;
}
else
{
lua_pushnumber ( L , 0 ) ;
}
return 1 ;
}
int pc_get_logoff_interval ( lua_State * L )
{
LPCHARACTER pChar = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( pChar ! = NULL )
{
lua_pushnumber ( L , pChar - > GetLogOffInterval ( ) ) ;
}
else
{
lua_pushnumber ( L , 0 ) ;
}
return 1 ;
}
int pc_get_player_id ( lua_State * L )
{
LPCHARACTER pChar = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( pChar ! = NULL )
{
lua_pushnumber ( L , pChar - > GetPlayerID ( ) ) ;
}
else
{
lua_pushnumber ( L , 0 ) ;
}
return 1 ;
}
int pc_get_account_id ( lua_State * L )
{
LPCHARACTER pChar = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( pChar ! = NULL )
{
if ( pChar - > GetDesc ( ) ! = NULL )
{
lua_pushnumber ( L , pChar - > GetDesc ( ) - > GetAccountTable ( ) . id ) ;
return 1 ;
}
}
lua_pushnumber ( L , 0 ) ;
return 1 ;
}
int pc_get_account ( lua_State * L )
{
LPCHARACTER pChar = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( NULL ! = pChar )
{
if ( NULL ! = pChar - > GetDesc ( ) )
{
lua_pushstring ( L , pChar - > GetDesc ( ) - > GetAccountTable ( ) . login ) ;
return 1 ;
}
}
lua_pushstring ( L , " " ) ;
return 1 ;
}
int pc_is_riding ( lua_State * L )
{
LPCHARACTER pChar = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( NULL ! = pChar )
{
bool is_riding = pChar - > IsRiding ( ) ;
lua_pushboolean ( L , is_riding ) ;
return 1 ;
}
lua_pushboolean ( L , false ) ;
return 1 ;
}
int pc_get_special_ride_vnum ( lua_State * L )
{
LPCHARACTER pChar = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( NULL ! = pChar )
{
LPITEM Unique1 = pChar - > GetWear ( WEAR_UNIQUE1 ) ;
LPITEM Unique2 = pChar - > GetWear ( WEAR_UNIQUE2 ) ;
if ( NULL ! = Unique1 )
{
if ( UNIQUE_GROUP_SPECIAL_RIDE = = Unique1 - > GetSpecialGroup ( ) )
{
lua_pushnumber ( L , Unique1 - > GetVnum ( ) ) ;
lua_pushnumber ( L , Unique1 - > GetSocket ( 2 ) ) ;
return 2 ;
}
}
if ( NULL ! = Unique2 )
{
if ( UNIQUE_GROUP_SPECIAL_RIDE = = Unique2 - > GetSpecialGroup ( ) )
{
lua_pushnumber ( L , Unique2 - > GetVnum ( ) ) ;
lua_pushnumber ( L , Unique2 - > GetSocket ( 2 ) ) ;
return 2 ;
}
}
}
lua_pushnumber ( L , 0 ) ;
lua_pushnumber ( L , 0 ) ;
return 2 ;
}
int pc_can_warp ( lua_State * L )
{
LPCHARACTER pChar = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( NULL ! = pChar )
{
lua_pushboolean ( L , pChar - > CanWarp ( ) ) ;
}
else
{
lua_pushboolean ( L , false ) ;
}
return 1 ;
}
int pc_dec_skill_point ( lua_State * L )
{
LPCHARACTER pChar = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( NULL ! = pChar )
{
pChar - > PointChange ( POINT_SKILL , - 1 ) ;
}
return 0 ;
}
int pc_get_skill_point ( lua_State * L )
{
LPCHARACTER pChar = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( NULL ! = pChar )
{
lua_pushnumber ( L , pChar - > GetPoint ( POINT_SKILL ) ) ;
}
else
{
lua_pushnumber ( L , 0 ) ;
}
return 1 ;
}
int pc_get_channel_id ( lua_State * L )
{
lua_pushnumber ( L , g_bChannel ) ;
return 1 ;
}
int pc_give_poly_marble ( lua_State * L )
{
const int dwVnum = lua_tonumber ( L , 1 ) ;
const CMob * MobInfo = CMobManager : : instance ( ) . Get ( dwVnum ) ;
if ( NULL = = MobInfo )
{
lua_pushboolean ( L , false ) ;
return 1 ;
}
if ( 0 = = MobInfo - > m_table . dwPolymorphItemVnum )
{
lua_pushboolean ( L , false ) ;
return 1 ;
}
LPITEM item = ITEM_MANAGER : : instance ( ) . CreateItem ( MobInfo - > m_table . dwPolymorphItemVnum ) ;
if ( NULL = = item )
{
lua_pushboolean ( L , false ) ;
return 1 ;
}
item - > SetSocket ( 0 , dwVnum ) ;
const LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
int iEmptyCell = ch - > GetEmptyInventory ( item - > GetSize ( ) ) ;
if ( - 1 = = iEmptyCell )
{
M2_DESTROY_ITEM ( item ) ;
lua_pushboolean ( L , false ) ;
return 1 ;
}
item - > AddToCharacter ( ch , TItemPos ( INVENTORY , iEmptyCell ) ) ;
const PC * pPC = CQuestManager : : instance ( ) . GetCurrentPC ( ) ;
LogManager : : instance ( ) . QuestRewardLog ( pPC - > GetCurrentQuestName ( ) . c_str ( ) , ch - > GetPlayerID ( ) , ch - > GetLevel ( ) , MobInfo - > m_table . dwPolymorphItemVnum , dwVnum ) ;
lua_pushboolean ( L , true ) ;
return 1 ;
}
int pc_get_sig_items ( lua_State * L )
{
DWORD group_vnum = ( DWORD ) lua_tonumber ( L , 1 ) ;
const LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
int count = 0 ;
for ( int i = 0 ; i < INVENTORY_MAX_NUM ; + + i )
{
if ( ch - > GetInventoryItem ( i ) ! = NULL & & ch - > GetInventoryItem ( i ) - > GetSIGVnum ( ) = = group_vnum )
{
lua_pushnumber ( L , ch - > GetInventoryItem ( i ) - > GetID ( ) ) ;
count + + ;
}
}
return count ;
}
int pc_charge_cash ( lua_State * L )
{
TRequestChargeCash packet ;
int amount = lua_isnumber ( L , 1 ) ? ( int ) lua_tonumber ( L , 1 ) : 0 ;
std : : string strChargeType = lua_isstring ( L , 2 ) ? lua_tostring ( L , 2 ) : " " ;
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( NULL = = ch | | NULL = = ch - > GetDesc ( ) | | 1 > amount | | 50000 < amount )
{
lua_pushboolean ( L , 0 ) ;
return 1 ;
}
packet . dwAID = ch - > GetDesc ( ) - > GetAccountTable ( ) . id ;
packet . dwAmount = ( DWORD ) amount ;
packet . eChargeType = ERequestCharge_Cash ;
if ( 0 < strChargeType . length ( ) )
std : : transform ( strChargeType . begin ( ) , strChargeType . end ( ) , strChargeType . begin ( ) , ( int ( * ) ( int ) ) std : : tolower ) ;
if ( " mileage " = = strChargeType )
packet . eChargeType = ERequestCharge_Mileage ;
db_clientdesc - > DBPacketHeader ( HEADER_GD_REQUEST_CHARGE_CASH , 0 , sizeof ( TRequestChargeCash ) ) ;
db_clientdesc - > Packet ( & packet , sizeof ( packet ) ) ;
lua_pushboolean ( L , 1 ) ;
return 1 ;
}
int pc_give_award ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( ! lua_isnumber ( L , 1 ) | | ! lua_isnumber ( L , 2 ) | | ! lua_isstring ( L , 3 ) )
{
sys_err ( " QUEST give award call error : wrong argument " ) ;
lua_pushnumber ( L , 0 ) ;
return 1 ;
}
DWORD dwVnum = ( int ) lua_tonumber ( L , 1 ) ;
int icount = ( int ) lua_tonumber ( L , 2 ) ;
sys_log ( 0 , " QUEST [award] item %d to login %s " , dwVnum , ch - > GetDesc ( ) - > GetAccountTable ( ) . login ) ;
DBManager : : instance ( ) . Query ( " INSERT INTO item_award (login, vnum, count, given_time, why, mall)select '%s', %d, %d, now(), '%s', 1 from DUAL where not exists (select login, why from item_award where login = '%s' and why = '%s') ; " ,
ch - > GetDesc ( ) - > GetAccountTable ( ) . login ,
dwVnum ,
icount ,
lua_tostring ( L , 3 ) ,
ch - > GetDesc ( ) - > GetAccountTable ( ) . login ,
lua_tostring ( L , 3 ) ) ;
lua_pushnumber ( L , 0 ) ;
return 1 ;
}
int pc_give_award_socket ( lua_State * L )
{
LPCHARACTER ch = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( ! lua_isnumber ( L , 1 ) | | ! lua_isnumber ( L , 2 ) | | ! lua_isstring ( L , 3 ) | | ! lua_isstring ( L , 4 ) | | ! lua_isstring ( L , 5 ) | | ! lua_isstring ( L , 6 ) )
{
sys_err ( " QUEST give award call error : wrong argument " ) ;
lua_pushnumber ( L , 0 ) ;
return 1 ;
}
DWORD dwVnum = ( int ) lua_tonumber ( L , 1 ) ;
int icount = ( int ) lua_tonumber ( L , 2 ) ;
sys_log ( 0 , " QUEST [award] item %d to login %s " , dwVnum , ch - > GetDesc ( ) - > GetAccountTable ( ) . login ) ;
DBManager : : instance ( ) . Query ( " INSERT INTO item_award (login, vnum, count, given_time, why, mall, socket0, socket1, socket2)select '%s', %d, %d, now(), '%s', 1, %s, %s, %s from DUAL where not exists (select login, why from item_award where login = '%s' and why = '%s') ; " ,
ch - > GetDesc ( ) - > GetAccountTable ( ) . login ,
dwVnum ,
icount ,
lua_tostring ( L , 3 ) ,
lua_tostring ( L , 4 ) ,
lua_tostring ( L , 5 ) ,
lua_tostring ( L , 6 ) ,
ch - > GetDesc ( ) - > GetAccountTable ( ) . login ,
lua_tostring ( L , 3 ) ) ;
lua_pushnumber ( L , 0 ) ;
return 1 ;
}
int pc_get_informer_type ( lua_State * L ) //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
{
LPCHARACTER pChar = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( pChar ! = NULL )
{
//sys_err("quest cmd test %s", pChar->GetItemAward_cmd() );
lua_pushstring ( L , pChar - > GetItemAward_cmd ( ) ) ;
}
else
lua_pushstring ( L , " " ) ;
return 1 ;
}
int pc_get_informer_item ( lua_State * L )
{
LPCHARACTER pChar = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
if ( pChar ! = NULL )
{
lua_pushnumber ( L , pChar - > GetItemAward_vnum ( ) ) ;
}
else
lua_pushnumber ( L , 0 ) ;
return 1 ;
}
int pc_get_killee_drop_pct ( lua_State * L )
{
LPCHARACTER pChar = CQuestManager : : instance ( ) . GetCurrentCharacterPtr ( ) ;
LPCHARACTER pKillee = pChar - > GetQuestNPC ( ) ;
int iDeltaPercent , iRandRange ;
if ( NULL = = pKillee | | ! ITEM_MANAGER : : instance ( ) . GetDropPct ( pKillee , pChar , iDeltaPercent , iRandRange ) )
{
sys_err ( " killee is null " ) ;
lua_pushnumber ( L , - 1 ) ;
lua_pushnumber ( L , - 1 ) ;
return 2 ;
}
lua_pushnumber ( L , iDeltaPercent ) ;
lua_pushnumber ( L , iRandRange ) ;
return 2 ;
}
void RegisterPCFunctionTable ( )
{
luaL_reg pc_functions [ ] =
{
{ " get_wear " , pc_get_wear } ,
{ " get_player_id " , pc_get_player_id } ,
{ " get_account_id " , pc_get_account_id } ,
{ " get_account " , pc_get_account } ,
{ " get_level " , pc_get_level } ,
{ " set_level " , pc_set_level } ,
{ " get_next_exp " , pc_get_next_exp } ,
{ " get_exp " , pc_get_exp } ,
{ " get_job " , pc_get_job } ,
{ " get_race " , pc_get_race } ,
{ " change_sex " , pc_change_sex } ,
{ " gethp " , pc_get_hp } ,
{ " get_hp " , pc_get_hp } ,
{ " getmaxhp " , pc_get_max_hp } ,
{ " get_max_hp " , pc_get_max_hp } ,
{ " getsp " , pc_get_sp } ,
{ " get_sp " , pc_get_sp } ,
{ " getmaxsp " , pc_get_max_sp } ,
{ " get_max_sp " , pc_get_max_sp } ,
{ " change_sp " , pc_change_sp } ,
{ " getmoney " , pc_get_money } ,
{ " get_money " , pc_get_money } ,
{ " get_real_alignment " , pc_get_real_alignment } ,
{ " get_alignment " , pc_get_alignment } ,
{ " getweapon " , pc_get_weapon } ,
{ " get_weapon " , pc_get_weapon } ,
{ " getarmor " , pc_get_armor } ,
{ " get_armor " , pc_get_armor } ,
{ " getgold " , pc_get_money } ,
{ " get_gold " , pc_get_money } ,
{ " changegold " , pc_change_money } ,
{ " changemoney " , pc_change_money } ,
{ " changealignment " , pc_change_alignment } ,
{ " change_gold " , pc_change_money } ,
{ " change_money " , pc_change_money } ,
{ " change_alignment " , pc_change_alignment } ,
{ " getname " , pc_get_name } ,
{ " get_name " , pc_get_name } ,
{ " get_vid " , pc_get_vid } ,
{ " getplaytime " , pc_get_playtime } ,
{ " get_playtime " , pc_get_playtime } ,
{ " getleadership " , pc_get_leadership } ,
{ " get_leadership " , pc_get_leadership } ,
{ " getqf " , pc_get_quest_flag } ,
{ " setqf " , pc_set_quest_flag } ,
{ " delqf " , pc_del_quest_flag } ,
{ " getf " , pc_get_another_quest_flag } ,
{ " setf " , pc_set_another_quest_flag } ,
{ " get_x " , pc_get_x } ,
{ " get_y " , pc_get_y } ,
{ " getx " , pc_get_x } ,
{ " gety " , pc_get_y } ,
{ " get_local_x " , pc_get_local_x } ,
{ " get_local_y " , pc_get_local_y } ,
{ " getcurrentmapindex " , pc_get_current_map_index } ,
{ " get_map_index " , pc_get_current_map_index } ,
{ " give_exp " , pc_give_exp } ,
{ " give_exp_perc " , pc_give_exp_perc } ,
{ " give_exp2 " , pc_give_exp2 } ,
{ " give_item " , pc_give_item } ,
{ " give_item2 " , pc_give_or_drop_item } ,
{ " give_item2_select " , pc_give_or_drop_item_and_select } ,
{ " give_gold " , pc_give_gold } ,
{ " count_item " , pc_count_item } ,
{ " remove_item " , pc_remove_item } ,
{ " countitem " , pc_count_item } ,
{ " removeitem " , pc_remove_item } ,
{ " reset_point " , pc_reset_point } ,
{ " has_guild " , pc_hasguild } ,
{ " hasguild " , pc_hasguild } ,
{ " get_guild " , pc_getguild } ,
{ " getguild " , pc_getguild } ,
{ " isguildmaster " , pc_isguildmaster } ,
{ " is_guild_master " , pc_isguildmaster } ,
{ " destroy_guild " , pc_destroy_guild } ,
{ " remove_from_guild " , pc_remove_from_guild } ,
{ " in_dungeon " , pc_in_dungeon } ,
{ " getempire " , pc_get_empire } ,
{ " get_empire " , pc_get_empire } ,
{ " get_skill_group " , pc_get_skillgroup } ,
{ " set_skill_group " , pc_set_skillgroup } ,
{ " warp " , pc_warp } ,
{ " warp_local " , pc_warp_local } ,
{ " warp_exit " , pc_warp_exit } ,
{ " set_warp_location " , pc_set_warp_location } ,
{ " set_warp_location_local " , pc_set_warp_location_local } ,
{ " get_start_location " , pc_get_start_location } ,
{ " has_master_skill " , pc_has_master_skill } ,
{ " set_part " , pc_set_part } ,
{ " get_part " , pc_get_part } ,
{ " is_polymorphed " , pc_is_polymorphed } ,
{ " remove_polymorph " , pc_remove_polymorph } ,
{ " is_mount " , pc_is_mount } ,
{ " polymorph " , pc_polymorph } ,
{ " mount " , pc_mount } ,
{ " mount_bonus " , pc_mount_bonus } ,
{ " unmount " , pc_unmount } ,
{ " warp_to_guild_war_observer_position " , pc_warp_to_guild_war_observer_position } ,
{ " give_item_from_special_item_group " , pc_give_item_from_special_item_group } ,
{ " learn_grand_master_skill " , pc_learn_grand_master_skill } ,
{ " is_skill_book_no_delay " , pc_is_skill_book_no_delay } ,
{ " remove_skill_book_no_delay " , pc_remove_skill_book_no_delay } ,
{ " enough_inventory " , pc_enough_inventory } ,
{ " get_horse_level " , pc_get_horse_level } , // TO BE DELETED XXX
{ " is_horse_alive " , pc_is_horse_alive } , // TO BE DELETED XXX
{ " revive_horse " , pc_revive_horse } , // TO BE DELETED XXX
{ " have_pos_scroll " , pc_have_pos_scroll } ,
{ " have_map_scroll " , pc_have_map_scroll } ,
{ " get_war_map " , pc_get_war_map } ,
{ " get_equip_refine_level " , pc_get_equip_refine_level } ,
{ " refine_equip " , pc_refine_equip } ,
{ " get_skill_level " , pc_get_skill_level } ,
{ " give_lotto " , pc_give_lotto } ,
{ " aggregate_monster " , pc_aggregate_monster } ,
{ " forget_my_attacker " , pc_forget_my_attacker } ,
{ " pc_attract_ranger " , pc_attract_ranger } ,
{ " select " , pc_select_vid } ,
{ " get_sex " , pc_get_sex } ,
{ " is_married " , pc_is_married } ,
{ " is_engaged " , pc_is_engaged } ,
{ " is_engaged_or_married " , pc_is_engaged_or_married } ,
{ " is_gm " , pc_is_gm } ,
{ " get_gm_level " , pc_get_gm_level } ,
{ " mining " , pc_mining } ,
{ " ore_refine " , pc_ore_refine } ,
{ " diamond_refine " , pc_diamond_refine } ,
// RESET_ONE_SKILL
{ " clear_one_skill " , pc_clear_one_skill } ,
// END_RESET_ONE_SKILL
{ " clear_skill " , pc_clear_skill } ,
{ " clear_sub_skill " , pc_clear_sub_skill } ,
{ " set_skill_point " , pc_set_skill_point } ,
{ " is_clear_skill_group " , pc_is_clear_skill_group } ,
{ " save_exit_location " , pc_save_exit_location } ,
{ " teleport " , pc_teleport } ,
{ " set_skill_level " , pc_set_skill_level } ,
{ " give_polymorph_book " , pc_give_polymorph_book } ,
{ " upgrade_polymorph_book " , pc_upgrade_polymorph_book } ,
{ " get_premium_remain_sec " , pc_get_premium_remain_sec } ,
{ " send_block_mode " , pc_send_block_mode } ,
{ " change_empire " , pc_change_empire } ,
{ " get_change_empire_count " , pc_get_change_empire_count } ,
{ " set_change_empire_count " , pc_set_change_empire_count } ,
{ " change_name " , pc_change_name } ,
{ " is_dead " , pc_is_dead } ,
{ " reset_status " , pc_reset_status } ,
{ " get_ht " , pc_get_ht } ,
{ " set_ht " , pc_set_ht } ,
{ " get_iq " , pc_get_iq } ,
{ " set_iq " , pc_set_iq } ,
{ " get_st " , pc_get_st } ,
{ " set_st " , pc_set_st } ,
{ " get_dx " , pc_get_dx } ,
{ " set_dx " , pc_set_dx } ,
{ " is_near_vid " , pc_is_near_vid } ,
{ " get_socket_items " , pc_get_socket_items } ,
{ " get_empty_inventory_count " , pc_get_empty_inventory_count } ,
{ " get_logoff_interval " , pc_get_logoff_interval } ,
{ " is_riding " , pc_is_riding } ,
{ " get_special_ride_vnum " , pc_get_special_ride_vnum } ,
{ " can_warp " , pc_can_warp } ,
{ " dec_skill_point " , pc_dec_skill_point } ,
{ " get_skill_point " , pc_get_skill_point } ,
{ " get_channel_id " , pc_get_channel_id } ,
{ " give_poly_marble " , pc_give_poly_marble } ,
{ " get_sig_items " , pc_get_sig_items } ,
{ " charge_cash " , pc_charge_cash } ,
{ " get_informer_type " , pc_get_informer_type } , //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
{ " get_informer_item " , pc_get_informer_item } ,
{ " give_award " , pc_give_award } , //<2F> Ϻ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ѹ<EFBFBD> <D1B9> <EFBFBD> <20> ݱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD>
{ " give_award_socket " , pc_give_award_socket } , //<2F> <> <20> κ<EFBFBD> <CEBA> 丮<EFBFBD> <E4B8AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> . <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Լ<EFBFBD> .
{ " get_killee_drop_pct " , pc_get_killee_drop_pct } , /* mob_vnum.kill <20> ̺<EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> killee<65> <65> pc<70> <63> <EFBFBD> <EFBFBD> level <20> <> <EFBFBD> <EFBFBD> , pc<70> <63> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̾<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ȯ<> <C8AE> .
* return <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ( <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <EFBFBD> и <EFBFBD> ) .
* ( <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ѵ <EFBFBD> , CreateDropItem <EFBFBD> <EFBFBD> GetDropPct <EFBFBD> <EFBFBD> iDeltaPercent , iRandRange <EFBFBD> <EFBFBD> return <EFBFBD> Ѵ ٰ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> . )
* ( <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ф <EFBFBD> )
* <EFBFBD> <EFBFBD> <EFBFBD> ǻ <EFBFBD> <EFBFBD> <EFBFBD> : kill event <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> !
*/
{ NULL , NULL }
} ;
CQuestManager : : instance ( ) . AddLuaFunctionTable ( " pc " , pc_functions ) ;
}
} ;