2022-03-05 12:44:06 +02:00
# include "stdafx.h"
# include "utils.h"
# include "config.h"
# include "desc_client.h"
# include "desc_manager.h"
# include "char.h"
# include "char_manager.h"
# include "item_manager.h"
# include "sectree_manager.h"
# include "mob_manager.h"
# include "packet.h"
# include "cmd.h"
# include "regen.h"
# include "guild.h"
# include "guild_manager.h"
# include "p2p.h"
# include "buffer_manager.h"
# include "fishing.h"
# include "mining.h"
# include "questmanager.h"
# include "vector.h"
# include "affect.h"
# include "db.h"
# include "priv_manager.h"
# include "building.h"
# include "battle.h"
# include "arena.h"
# include "start_position.h"
# include "party.h"
# include "monarch.h"
# include "castle.h"
# include "BattleArena.h"
# include "xmas_event.h"
# include "log.h"
# include "pcbang.h"
# include "threeway_war.h"
# include "unique_item.h"
# include "DragonSoul.h"
extern bool DropEvent_RefineBox_SetValue ( const std : : string & name , int value ) ;
// ADD_COMMAND_SLOW_STUN
enum
{
COMMANDAFFECT_STUN ,
COMMANDAFFECT_SLOW ,
} ;
void Command_ApplyAffect ( LPCHARACTER ch , const char * argument , const char * affectName , int cmdAffect )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
sys_log ( 0 , arg1 ) ;
if ( ! * arg1 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Usage: %s <name> " , affectName ) ;
return ;
}
LPCHARACTER tch = CHARACTER_MANAGER : : instance ( ) . FindPC ( arg1 ) ;
if ( ! tch )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " %s is not in same map " , arg1 ) ;
return ;
}
switch ( cmdAffect )
{
case COMMANDAFFECT_STUN :
SkillAttackAffect ( tch , 1000 , IMMUNE_STUN , AFFECT_STUN , POINT_NONE , 0 , AFF_STUN , 30 , " GM_STUN " ) ;
break ;
case COMMANDAFFECT_SLOW :
SkillAttackAffect ( tch , 1000 , IMMUNE_SLOW , AFFECT_SLOW , POINT_MOV_SPEED , - 30 , AFF_SLOW , 30 , " GM_SLOW " ) ;
break ;
}
sys_log ( 0 , " %s %s " , arg1 , affectName ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " %s %s " , arg1 , affectName ) ;
}
// END_OF_ADD_COMMAND_SLOW_STUN
ACMD ( do_pcbang_update )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
unsigned long PCBangID = 0 ;
if ( * arg1 = = ' \0 ' )
PCBangID = 0 ;
else
str_to_number ( PCBangID , arg1 ) ;
if ( PCBangID = = 0 )
{
CPCBangManager : : instance ( ) . RequestUpdateIPList ( 0 ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " PCBang Info Update For All " ) ;
}
else
{
CPCBangManager : : instance ( ) . RequestUpdateIPList ( PCBangID ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " PCBang Info Update For %u " , PCBangID ) ;
}
TPacketPCBangUpdate packet ;
packet . bHeader = HEADER_GG_PCBANG_UPDATE ;
packet . ulPCBangID = PCBangID ;
P2P_MANAGER : : instance ( ) . Send ( & packet , sizeof ( TPacketPCBangUpdate ) ) ;
}
ACMD ( do_pcbang_check )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( CPCBangManager : : instance ( ) . IsPCBangIP ( arg1 ) = = true )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " %s is a PCBang IP " , arg1 ) ;
}
else
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " %s is not a PCBang IP " , arg1 ) ;
}
}
ACMD ( do_stun )
{
Command_ApplyAffect ( ch , argument , " stun " , COMMANDAFFECT_STUN ) ;
}
ACMD ( do_slow )
{
Command_ApplyAffect ( ch , argument , " slow " , COMMANDAFFECT_SLOW ) ;
}
ACMD ( do_transfer )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( ! * arg1 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Usage: transfer <name> " ) ;
return ;
}
LPCHARACTER tch = CHARACTER_MANAGER : : instance ( ) . FindPC ( arg1 ) ;
if ( ! tch )
{
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 ) ;
return ;
}
TPacketGGTransfer pgg ;
pgg . bHeader = HEADER_GG_TRANSFER ;
2022-03-05 19:59:39 +02:00
strncpy ( pgg . szName , arg1 , sizeof ( pgg . szName ) ) ;
2022-03-05 12:44:06 +02:00
pgg . lX = ch - > GetX ( ) ;
pgg . lY = ch - > GetY ( ) ;
P2P_MANAGER : : instance ( ) . Send ( & pgg , sizeof ( TPacketGGTransfer ) ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " Transfer requested. " ) ;
}
else
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " There is no character(%s) by that name " , arg1 ) ;
sys_log ( 0 , " There is no character(%s) by that name " , arg1 ) ;
}
return ;
}
if ( ch = = tch )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Transfer me?!? " ) ;
return ;
}
//tch->Show(ch->GetMapIndex(), ch->GetX(), ch->GetY(), ch->GetZ());
tch - > WarpSet ( ch - > GetX ( ) , ch - > GetY ( ) , ch - > GetMapIndex ( ) ) ;
}
// LUA_ADD_GOTO_INFO
struct GotoInfo
{
std : : string st_name ;
BYTE empire ;
int mapIndex ;
DWORD x , y ;
GotoInfo ( )
{
st_name = " " ;
empire = 0 ;
mapIndex = 0 ;
x = 0 ;
y = 0 ;
}
GotoInfo ( const GotoInfo & c_src )
{
__copy__ ( c_src ) ;
}
void operator = ( const GotoInfo & c_src )
{
__copy__ ( c_src ) ;
}
void __copy__ ( const GotoInfo & c_src )
{
st_name = c_src . st_name ;
empire = c_src . empire ;
mapIndex = c_src . mapIndex ;
x = c_src . x ;
y = c_src . y ;
}
} ;
static std : : vector < GotoInfo > gs_vec_gotoInfo ;
void CHARACTER_AddGotoInfo ( const std : : string & c_st_name , BYTE empire , int mapIndex , DWORD x , DWORD y )
{
GotoInfo newGotoInfo ;
newGotoInfo . st_name = c_st_name ;
newGotoInfo . empire = empire ;
newGotoInfo . mapIndex = mapIndex ;
newGotoInfo . x = x ;
newGotoInfo . y = y ;
gs_vec_gotoInfo . push_back ( newGotoInfo ) ;
sys_log ( 0 , " AddGotoInfo(name=%s, empire=%d, mapIndex=%d, pos=(%d, %d)) " , c_st_name . c_str ( ) , empire , mapIndex , x , y ) ;
}
bool FindInString ( const char * c_pszFind , const char * c_pszIn )
{
const char * c = c_pszIn ;
const char * p ;
p = strchr ( c , ' | ' ) ;
if ( ! p )
return ( 0 = = strncasecmp ( c_pszFind , c_pszIn , strlen ( c_pszFind ) ) ) ;
else
{
char sz [ 64 + 1 ] ;
do
{
2022-03-05 19:59:39 +02:00
strncpy ( sz , c , MIN ( sizeof ( sz ) , ( p - c ) + 1 ) ) ;
2022-03-05 12:44:06 +02:00
if ( ! strncasecmp ( c_pszFind , sz , strlen ( c_pszFind ) ) )
return true ;
c = p + 1 ;
} while ( ( p = strchr ( c , ' | ' ) ) ) ;
2022-03-05 19:59:39 +02:00
strncpy ( sz , c , sizeof ( sz ) ) ;
2022-03-05 12:44:06 +02:00
if ( ! strncasecmp ( c_pszFind , sz , strlen ( c_pszFind ) ) )
return true ;
}
return false ;
}
bool CHARACTER_GoToName ( LPCHARACTER ch , BYTE empire , int mapIndex , const char * gotoName )
{
std : : vector < GotoInfo > : : iterator i ;
for ( i = gs_vec_gotoInfo . begin ( ) ; i ! = gs_vec_gotoInfo . end ( ) ; + + i )
{
const GotoInfo & c_eachGotoInfo = * i ;
if ( mapIndex ! = 0 )
{
if ( mapIndex ! = c_eachGotoInfo . mapIndex )
continue ;
}
else if ( ! FindInString ( gotoName , c_eachGotoInfo . st_name . c_str ( ) ) )
continue ;
if ( c_eachGotoInfo . empire = = 0 | | c_eachGotoInfo . empire = = empire )
{
int x = c_eachGotoInfo . x * 100 ;
int y = c_eachGotoInfo . y * 100 ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " You warp to ( %d, %d ) " , x , y ) ;
ch - > WarpSet ( x , y ) ;
ch - > Stop ( ) ;
return true ;
}
}
return false ;
}
// END_OF_LUA_ADD_GOTO_INFO
/*
= {
{ " A1|<7C> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , 0 , 1 , 4693 , 9642 } ,
{ " A3|<7C> ھ <EFBFBD> <DABE> <EFBFBD> " , 0 , 3 , 3608 , 8776 } ,
{ " B1|<7C> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , 0 , 21 , 557 , 1579 } ,
{ " B3|<7C> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , 0 , 23 , 1385 , 2349 } ,
{ " C1|<7C> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , 0 , 41 , 9696 , 2784 } ,
{ " C3|<7C> ڶ<EFBFBD> <DAB6> <EFBFBD> " , 0 , 43 , 8731 , 2426 } ,
// Snow
{ " Snow|<7C> <> <EFBFBD> ѻ<EFBFBD> " , 1 , 61 , 4342 , 2906 } ,
{ " Snow|<7C> <> <EFBFBD> ѻ<EFBFBD> " , 2 , 61 , 3752 , 1749 } ,
{ " Snow|<7C> <> <EFBFBD> ѻ<EFBFBD> " , 3 , 61 , 4918 , 1736 } ,
// Flame
{ " Flame|<7C> <> <EFBFBD> <EFBFBD> ȭ<EFBFBD> <C8AD> |ȭ<> <C8AD> " , 1 , 62 , 5994 , 7563 } ,
{ " Flame|<7C> <> <EFBFBD> <EFBFBD> ȭ<EFBFBD> <C8AD> |ȭ<> <C8AD> " , 2 , 62 , 5978 , 6222 } ,
{ " Flame|<7C> <> <EFBFBD> <EFBFBD> ȭ<EFBFBD> <C8AD> |ȭ<> <C8AD> " , 3 , 62 , 7307 , 6898 } ,
// Desert
{ " Desert|<7C> <> <EFBFBD> <EFBFBD> <EFBFBD> 縷|<7C> 縷 " , 1 , 63 , 2178 , 6272 } ,
{ " Desert|<7C> <> <EFBFBD> <EFBFBD> <EFBFBD> 縷|<7C> 縷 " , 2 , 63 , 2219 , 5027 } ,
{ " Desert|<7C> <> <EFBFBD> <EFBFBD> <EFBFBD> 縷|<7C> 縷 " , 3 , 63 , 3440 , 5025 } ,
// Threeway
{ " Three|<7C> ·<EFBFBD> <C2B7> <EFBFBD> " , 1 , 64 , 4021 , 6739 } ,
{ " Three|<7C> ·<EFBFBD> <C2B7> <EFBFBD> " , 2 , 64 , 2704 , 7399 } ,
{ " Three|<7C> ·<EFBFBD> <C2B7> <EFBFBD> " , 3 , 64 , 3213 , 8080 } ,
// <20> б <EFBFBD> <D0B1> <EFBFBD> <EFBFBD> <EFBFBD>
{ " Milgyo|<7C> б <EFBFBD> <D0B1> <EFBFBD> <EFBFBD> <EFBFBD> " , 1 , 65 , 5536 , 1436 } ,
{ " Milgyo|<7C> б <EFBFBD> <D0B1> <EFBFBD> <EFBFBD> <EFBFBD> " , 2 , 65 , 5536 , 1436 } ,
{ " Milgyo|<7C> б <EFBFBD> <D0B1> <EFBFBD> <EFBFBD> <EFBFBD> " , 3 , 65 , 5536 , 1436 } ,
// <20> <> <EFBFBD> <EFBFBD> Ÿ<EFBFBD> <C5B8> <EFBFBD> Ա<EFBFBD>
{ " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ÿ<EFBFBD> <EFBFBD> <EFBFBD> Ա<EFBFBD> " , 1 , 65 , 5905 , 1108 } ,
{ " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ÿ<EFBFBD> <EFBFBD> <EFBFBD> Ա<EFBFBD> " , 2 , 65 , 5905 , 1108 } ,
{ " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ÿ<EFBFBD> <EFBFBD> <EFBFBD> Ա<EFBFBD> " , 3 , 65 , 5905 , 1108 } ,
{ NULL , 0 , 0 , 0 , 0 } ,
} ;
*/
ACMD ( do_goto )
{
char arg1 [ 256 ] , arg2 [ 256 ] ;
int x = 0 , y = 0 , z = 0 ;
two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
if ( ! * arg1 & & ! * arg2 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Usage: goto <x meter> <y meter> " ) ;
return ;
}
2022-03-06 17:36:43 +02:00
if ( isdigit ( * arg1 ) & & isdigit ( * arg2 ) )
2022-03-05 12:44:06 +02:00
{
str_to_number ( x , arg1 ) ;
str_to_number ( y , arg2 ) ;
PIXEL_POSITION p ;
if ( SECTREE_MANAGER : : instance ( ) . GetMapBasePosition ( ch - > GetX ( ) , ch - > GetY ( ) , p ) )
{
x + = p . x / 100 ;
y + = p . y / 100 ;
}
ch - > ChatPacket ( CHAT_TYPE_INFO , " You goto ( %d, %d ) " , x , y ) ;
}
else
{
int mapIndex = 0 ;
BYTE empire = 0 ;
if ( * arg1 = = ' # ' )
str_to_number ( mapIndex , ( arg1 + 1 ) ) ;
2022-03-06 17:36:43 +02:00
if ( * arg2 & & isdigit ( * arg2 ) )
2022-03-05 12:44:06 +02:00
{
str_to_number ( empire , arg2 ) ;
empire = MINMAX ( 1 , empire , 3 ) ;
}
else
empire = ch - > GetEmpire ( ) ;
if ( CHARACTER_GoToName ( ch , empire , mapIndex , arg1 ) )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Cannot find map command syntax: /goto <mapname> [empire] " ) ;
return ;
}
return ;
/*
int iMapIndex = 0 ;
for ( int i = 0 ; aWarpInfo [ i ] . c_pszName ! = NULL ; + + i )
{
if ( iMapIndex ! = 0 )
{
if ( iMapIndex ! = aWarpInfo [ i ] . iMapIndex )
continue ;
}
else if ( ! FindInString ( arg1 , aWarpInfo [ i ] . c_pszName ) )
continue ;
if ( aWarpInfo [ i ] . bEmpire = = 0 | | aWarpInfo [ i ] . bEmpire = = bEmpire )
{
x = aWarpInfo [ i ] . x * 100 ;
y = aWarpInfo [ i ] . y * 100 ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " You warp to ( %d, %d ) " , x , y ) ;
ch - > WarpSet ( x , y ) ;
ch - > Stop ( ) ;
return ;
}
}
*/
}
x * = 100 ;
y * = 100 ;
ch - > Show ( ch - > GetMapIndex ( ) , x , y , z ) ;
ch - > Stop ( ) ;
}
ACMD ( do_warp )
{
char arg1 [ 256 ] , arg2 [ 256 ] ;
two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
if ( ! * arg1 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Usage: warp <character name> | <x meter> <y meter> " ) ;
return ;
}
int x = 0 , y = 0 ;
2022-03-06 17:36:43 +02:00
if ( isdigit ( * arg1 ) & & isdigit ( * arg2 ) )
2022-03-05 12:44:06 +02:00
{
str_to_number ( x , arg1 ) ;
str_to_number ( y , arg2 ) ;
}
else
{
LPCHARACTER tch = CHARACTER_MANAGER : : instance ( ) . FindPC ( arg1 ) ;
if ( NULL = = tch )
{
const CCI * pkCCI = P2P_MANAGER : : instance ( ) . Find ( arg1 ) ;
if ( NULL ! = pkCCI )
{
if ( pkCCI - > bChannel ! = g_bChannel )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Target is in %d channel (my channel %d) " , pkCCI - > bChannel , g_bChannel ) ;
return ;
}
ch - > WarpToPID ( pkCCI - > dwPID ) ;
}
else
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " There is no one by that name " ) ;
}
return ;
}
else
{
x = tch - > GetX ( ) / 100 ;
y = tch - > GetY ( ) / 100 ;
}
}
x * = 100 ;
y * = 100 ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " You warp to ( %d, %d ) " , x , y ) ;
ch - > WarpSet ( x , y ) ;
ch - > Stop ( ) ;
}
ACMD ( do_item )
{
char arg1 [ 256 ] , arg2 [ 256 ] ;
two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
if ( ! * arg1 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Usage: item <item vnum> " ) ;
return ;
}
int iCount = 1 ;
if ( * arg2 )
{
str_to_number ( iCount , arg2 ) ;
iCount = MINMAX ( 1 , iCount , ITEM_MAX_COUNT ) ;
}
DWORD dwVnum ;
2022-03-06 17:36:43 +02:00
if ( isdigit ( * arg1 ) )
2022-03-05 12:44:06 +02:00
str_to_number ( dwVnum , arg1 ) ;
else
{
if ( ! ITEM_MANAGER : : instance ( ) . GetVnum ( arg1 , dwVnum ) )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " #%u item not exist by that vnum. " , dwVnum ) ;
return ;
}
}
LPITEM item = ITEM_MANAGER : : instance ( ) . CreateItem ( dwVnum , iCount , 0 , true ) ;
if ( item )
{
if ( item - > IsDragonSoul ( ) )
{
int iEmptyPos = ch - > GetEmptyDragonSoulInventory ( item ) ;
if ( iEmptyPos ! = - 1 )
{
item - > AddToCharacter ( ch , TItemPos ( DRAGON_SOUL_INVENTORY , iEmptyPos ) ) ;
LogManager : : instance ( ) . ItemLog ( ch , item , " GM " , item - > GetName ( ) ) ;
}
else
{
M2_DESTROY_ITEM ( item ) ;
if ( ! ch - > DragonSoul_IsQualified ( ) )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " <EFBFBD> κ<EFBFBD> <EFBFBD> <EFBFBD> Ȱ<> <C8B0> ȭ <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ." ) ;
}
else
ch - > ChatPacket ( CHAT_TYPE_INFO , " Not enough inventory space. " ) ;
}
}
else
{
int iEmptyPos = ch - > GetEmptyInventory ( item - > GetSize ( ) ) ;
if ( iEmptyPos ! = - 1 )
{
item - > AddToCharacter ( ch , TItemPos ( INVENTORY , iEmptyPos ) ) ;
LogManager : : instance ( ) . ItemLog ( ch , item , " GM " , item - > GetName ( ) ) ;
}
else
{
M2_DESTROY_ITEM ( item ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " Not enough inventory space. " ) ;
}
}
}
else
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " #%u item not exist by that vnum. " , dwVnum ) ;
}
}
ACMD ( do_group_random )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( ! * arg1 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Usage: grrandom <group vnum> " ) ;
return ;
}
DWORD dwVnum = 0 ;
str_to_number ( dwVnum , arg1 ) ;
CHARACTER_MANAGER : : instance ( ) . SpawnGroupGroup ( dwVnum , ch - > GetMapIndex ( ) , ch - > GetX ( ) - 500 , ch - > GetY ( ) - 500 , ch - > GetX ( ) + 500 , ch - > GetY ( ) + 500 ) ;
}
ACMD ( do_group )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( ! * arg1 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Usage: group <group vnum> " ) ;
return ;
}
DWORD dwVnum = 0 ;
str_to_number ( dwVnum , arg1 ) ;
if ( test_server )
sys_log ( 0 , " COMMAND GROUP SPAWN %u at %u %u %u " , dwVnum , ch - > GetMapIndex ( ) , ch - > GetX ( ) , ch - > GetY ( ) ) ;
CHARACTER_MANAGER : : instance ( ) . SpawnGroup ( dwVnum , ch - > GetMapIndex ( ) , ch - > GetX ( ) - 500 , ch - > GetY ( ) - 500 , ch - > GetX ( ) + 500 , ch - > GetY ( ) + 500 ) ;
}
ACMD ( do_mob_coward )
{
char arg1 [ 256 ] , arg2 [ 256 ] ;
DWORD vnum = 0 ;
LPCHARACTER tch ;
two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
if ( ! * arg1 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Usage: mc <vnum> " ) ;
return ;
}
const CMob * pkMob ;
if ( isdigit ( * arg1 ) )
{
str_to_number ( vnum , arg1 ) ;
if ( ( pkMob = CMobManager : : instance ( ) . Get ( vnum ) ) = = NULL )
vnum = 0 ;
}
else
{
pkMob = CMobManager : : Instance ( ) . Get ( arg1 , true ) ;
if ( pkMob )
vnum = pkMob - > m_table . dwVnum ;
}
if ( vnum = = 0 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " No such mob by that vnum " ) ;
return ;
}
int iCount = 0 ;
if ( * arg2 )
str_to_number ( iCount , arg2 ) ;
else
iCount = 1 ;
iCount = MIN ( 20 , iCount ) ;
while ( iCount - - )
{
tch = CHARACTER_MANAGER : : instance ( ) . SpawnMobRange ( vnum ,
ch - > GetMapIndex ( ) ,
ch - > GetX ( ) - number ( 200 , 750 ) ,
ch - > GetY ( ) - number ( 200 , 750 ) ,
ch - > GetX ( ) + number ( 200 , 750 ) ,
ch - > GetY ( ) + number ( 200 , 750 ) ,
true ,
pkMob - > m_table . bType = = CHAR_TYPE_STONE ) ;
if ( tch )
tch - > SetCoward ( ) ;
}
}
ACMD ( do_mob_map )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( ! * arg1 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Syntax: mm <vnum> " ) ;
return ;
}
DWORD vnum = 0 ;
str_to_number ( vnum , arg1 ) ;
LPCHARACTER tch = CHARACTER_MANAGER : : instance ( ) . SpawnMobRandomPosition ( vnum , ch - > GetMapIndex ( ) ) ;
if ( tch )
ch - > ChatPacket ( CHAT_TYPE_INFO , " %s spawned in %dx%d " , tch - > GetName ( ) , tch - > GetX ( ) , tch - > GetY ( ) ) ;
else
ch - > ChatPacket ( CHAT_TYPE_INFO , " Spawn failed. " ) ;
}
ACMD ( do_mob_aggresive )
{
char arg1 [ 256 ] , arg2 [ 256 ] ;
DWORD vnum = 0 ;
LPCHARACTER tch ;
two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
if ( ! * arg1 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Usage: mob <mob vnum> " ) ;
return ;
}
const CMob * pkMob ;
if ( isdigit ( * arg1 ) )
{
str_to_number ( vnum , arg1 ) ;
if ( ( pkMob = CMobManager : : instance ( ) . Get ( vnum ) ) = = NULL )
vnum = 0 ;
}
else
{
pkMob = CMobManager : : Instance ( ) . Get ( arg1 , true ) ;
if ( pkMob )
vnum = pkMob - > m_table . dwVnum ;
}
if ( vnum = = 0 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " No such mob by that vnum " ) ;
return ;
}
int iCount = 0 ;
if ( * arg2 )
str_to_number ( iCount , arg2 ) ;
else
iCount = 1 ;
iCount = MIN ( 20 , iCount ) ;
while ( iCount - - )
{
tch = CHARACTER_MANAGER : : instance ( ) . SpawnMobRange ( vnum ,
ch - > GetMapIndex ( ) ,
ch - > GetX ( ) - number ( 200 , 750 ) ,
ch - > GetY ( ) - number ( 200 , 750 ) ,
ch - > GetX ( ) + number ( 200 , 750 ) ,
ch - > GetY ( ) + number ( 200 , 750 ) ,
true ,
pkMob - > m_table . bType = = CHAR_TYPE_STONE ) ;
if ( tch )
tch - > SetAggressive ( ) ;
}
}
ACMD ( do_mob )
{
char arg1 [ 256 ] , arg2 [ 256 ] ;
DWORD vnum = 0 ;
two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
if ( ! * arg1 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Usage: mob <mob vnum> " ) ;
return ;
}
const CMob * pkMob = NULL ;
2022-03-06 17:36:43 +02:00
if ( isdigit ( * arg1 ) )
2022-03-05 12:44:06 +02:00
{
str_to_number ( vnum , arg1 ) ;
if ( ( pkMob = CMobManager : : instance ( ) . Get ( vnum ) ) = = NULL )
vnum = 0 ;
}
else
{
pkMob = CMobManager : : Instance ( ) . Get ( arg1 , true ) ;
if ( pkMob )
vnum = pkMob - > m_table . dwVnum ;
}
if ( vnum = = 0 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " No such mob by that vnum " ) ;
return ;
}
int iCount = 0 ;
if ( * arg2 )
str_to_number ( iCount , arg2 ) ;
else
iCount = 1 ;
if ( test_server )
iCount = MIN ( 40 , iCount ) ;
else
iCount = MIN ( 20 , iCount ) ;
while ( iCount - - )
{
CHARACTER_MANAGER : : instance ( ) . SpawnMobRange ( vnum ,
ch - > GetMapIndex ( ) ,
ch - > GetX ( ) - number ( 200 , 750 ) ,
ch - > GetY ( ) - number ( 200 , 750 ) ,
ch - > GetX ( ) + number ( 200 , 750 ) ,
ch - > GetY ( ) + number ( 200 , 750 ) ,
true ,
pkMob - > m_table . bType = = CHAR_TYPE_STONE ) ;
}
}
ACMD ( do_mob_ld )
{
char arg1 [ 256 ] , arg2 [ 256 ] , arg3 [ 256 ] , arg4 [ 256 ] ;
DWORD vnum = 0 ;
two_arguments ( two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) , arg3 , sizeof ( arg3 ) , arg4 , sizeof ( arg4 ) ) ;
if ( ! * arg1 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Usage: mob <mob vnum> " ) ;
return ;
}
const CMob * pkMob = NULL ;
2022-03-06 17:36:43 +02:00
if ( isdigit ( * arg1 ) )
2022-03-05 12:44:06 +02:00
{
str_to_number ( vnum , arg1 ) ;
if ( ( pkMob = CMobManager : : instance ( ) . Get ( vnum ) ) = = NULL )
vnum = 0 ;
}
else
{
pkMob = CMobManager : : Instance ( ) . Get ( arg1 , true ) ;
if ( pkMob )
vnum = pkMob - > m_table . dwVnum ;
}
if ( vnum = = 0 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " No such mob by that vnum " ) ;
return ;
}
int dir = 1 ;
long x , y ;
if ( * arg2 )
str_to_number ( x , arg2 ) ;
if ( * arg3 )
str_to_number ( y , arg3 ) ;
if ( * arg4 )
str_to_number ( dir , arg4 ) ;
CHARACTER_MANAGER : : instance ( ) . SpawnMob ( vnum ,
ch - > GetMapIndex ( ) ,
x * 100 ,
y * 100 ,
ch - > GetZ ( ) ,
pkMob - > m_table . bType = = CHAR_TYPE_STONE ,
dir ) ;
}
struct FuncPurge
{
LPCHARACTER m_pkGM ;
bool m_bAll ;
FuncPurge ( LPCHARACTER ch ) : m_pkGM ( ch ) , m_bAll ( false )
{
}
void operator ( ) ( LPENTITY ent )
{
if ( ! ent - > IsType ( ENTITY_CHARACTER ) )
return ;
LPCHARACTER pkChr = ( LPCHARACTER ) ent ;
int iDist = DISTANCE_APPROX ( pkChr - > GetX ( ) - m_pkGM - > GetX ( ) , pkChr - > GetY ( ) - m_pkGM - > GetY ( ) ) ;
if ( ! m_bAll & & iDist > = 1000 ) // 10<31> <30> <EFBFBD> <EFBFBD> <20> ̻<EFBFBD> <CCBB> <EFBFBD> <20> ִ<EFBFBD> <20> ͵<EFBFBD> <CDB5> <EFBFBD> purge <20> <> <EFBFBD> <EFBFBD> <20> ʴ´ <CAB4> .
return ;
sys_log ( 0 , " PURGE: %s %d " , pkChr - > GetName ( ) , iDist ) ;
if ( pkChr - > IsNPC ( ) & & ! pkChr - > IsPet ( ) & & pkChr - > GetRider ( ) = = NULL )
{
M2_DESTROY_CHARACTER ( pkChr ) ;
}
}
} ;
ACMD ( do_purge )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
FuncPurge func ( ch ) ;
if ( * arg1 & & ! strcmp ( arg1 , " all " ) )
func . m_bAll = true ;
LPSECTREE sectree = ch - > GetSectree ( ) ;
if ( sectree ) // #431
sectree - > ForEachAround ( func ) ;
else
sys_err ( " PURGE_ERROR.NULL_SECTREE(mapIndex=%d, pos=(%d, %d) " , ch - > GetMapIndex ( ) , ch - > GetX ( ) , ch - > GetY ( ) ) ;
}
ACMD ( do_item_purge )
{
int i ;
LPITEM item ;
for ( i = 0 ; i < INVENTORY_AND_EQUIP_SLOT_MAX ; + + i )
{
if ( ( item = ch - > GetInventoryItem ( i ) ) )
{
ITEM_MANAGER : : instance ( ) . RemoveItem ( item , " PURGE " ) ;
ch - > SyncQuickslot ( QUICKSLOT_TYPE_ITEM , i , 255 ) ;
}
}
for ( i = 0 ; i < DRAGON_SOUL_INVENTORY_MAX_NUM ; + + i )
{
if ( ( item = ch - > GetItem ( TItemPos ( DRAGON_SOUL_INVENTORY , i ) ) ) )
{
ITEM_MANAGER : : instance ( ) . RemoveItem ( item , " PURGE " ) ;
}
}
}
ACMD ( do_state )
{
char arg1 [ 256 ] ;
LPCHARACTER tch ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( * arg1 )
{
if ( arg1 [ 0 ] = = ' # ' )
{
tch = CHARACTER_MANAGER : : instance ( ) . Find ( strtoul ( arg1 + 1 , NULL , 10 ) ) ;
}
else
{
LPDESC d = DESC_MANAGER : : instance ( ) . FindByCharacterName ( arg1 ) ;
if ( ! d )
tch = NULL ;
else
tch = d - > GetCharacter ( ) ;
}
}
else
tch = ch ;
if ( ! tch )
return ;
char buf [ 256 ] ;
snprintf ( buf , sizeof ( buf ) , " %s's State: " , tch - > GetName ( ) ) ;
if ( tch - > IsPosition ( POS_FIGHTING ) )
2022-03-06 00:01:03 +02:00
strncat ( buf , " Battle " , sizeof ( buf ) ) ;
2022-03-05 12:44:06 +02:00
else if ( tch - > IsPosition ( POS_DEAD ) )
2022-03-06 00:01:03 +02:00
strncat ( buf , " Dead " , sizeof ( buf ) ) ;
2022-03-05 12:44:06 +02:00
else
2022-03-06 00:01:03 +02:00
strncat ( buf , " Standing " , sizeof ( buf ) ) ;
2022-03-05 12:44:06 +02:00
if ( ch - > GetShop ( ) )
2022-03-06 00:01:03 +02:00
strncat ( buf , " , Shop " , sizeof ( buf ) ) ;
2022-03-05 12:44:06 +02:00
if ( ch - > GetExchange ( ) )
2022-03-06 00:01:03 +02:00
strncat ( buf , " , Exchange " , sizeof ( buf ) ) ;
2022-03-05 12:44:06 +02:00
ch - > ChatPacket ( CHAT_TYPE_INFO , " %s " , buf ) ;
int len ;
len = snprintf ( buf , sizeof ( buf ) , " Coordinate %ldx%ld (%ldx%ld) " ,
tch - > GetX ( ) , tch - > GetY ( ) , tch - > GetX ( ) / 100 , tch - > GetY ( ) / 100 ) ;
if ( len < 0 | | len > = ( int ) sizeof ( buf ) )
len = sizeof ( buf ) - 1 ;
LPSECTREE pSec = SECTREE_MANAGER : : instance ( ) . Get ( tch - > GetMapIndex ( ) , tch - > GetX ( ) , tch - > GetY ( ) ) ;
if ( pSec )
{
TMapSetting & map_setting = SECTREE_MANAGER : : instance ( ) . GetMap ( tch - > GetMapIndex ( ) ) - > m_setting ;
snprintf ( buf + len , sizeof ( buf ) - len , " MapIndex %ld Attribute %08X Local Position (%ld x %ld) " ,
tch - > GetMapIndex ( ) , pSec - > GetAttribute ( tch - > GetX ( ) , tch - > GetY ( ) ) , ( tch - > GetX ( ) - map_setting . iBaseX ) / 100 , ( tch - > GetY ( ) - map_setting . iBaseY ) / 100 ) ;
}
ch - > ChatPacket ( CHAT_TYPE_INFO , " %s " , buf ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " LEV %d " , tch - > GetLevel ( ) ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " HP %d/%d " , tch - > GetHP ( ) , tch - > GetMaxHP ( ) ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " SP %d/%d " , tch - > GetSP ( ) , tch - > GetMaxSP ( ) ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " ATT %d MAGIC_ATT %d SPD %d CRIT %d%% PENE %d%% ATT_BONUS %d%% " ,
tch - > GetPoint ( POINT_ATT_GRADE ) ,
tch - > GetPoint ( POINT_MAGIC_ATT_GRADE ) ,
tch - > GetPoint ( POINT_ATT_SPEED ) ,
tch - > GetPoint ( POINT_CRITICAL_PCT ) ,
tch - > GetPoint ( POINT_PENETRATE_PCT ) ,
tch - > GetPoint ( POINT_ATT_BONUS ) ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " DEF %d MAGIC_DEF %d BLOCK %d%% DODGE %d%% DEF_BONUS %d%% " ,
tch - > GetPoint ( POINT_DEF_GRADE ) ,
tch - > GetPoint ( POINT_MAGIC_DEF_GRADE ) ,
tch - > GetPoint ( POINT_BLOCK ) ,
tch - > GetPoint ( POINT_DODGE ) ,
tch - > GetPoint ( POINT_DEF_BONUS ) ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " RESISTANCES: " ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " WARR:%3d%% ASAS:%3d%% SURA:%3d%% SHAM:%3d%% " ,
tch - > GetPoint ( POINT_RESIST_WARRIOR ) ,
tch - > GetPoint ( POINT_RESIST_ASSASSIN ) ,
tch - > GetPoint ( POINT_RESIST_SURA ) ,
tch - > GetPoint ( POINT_RESIST_SHAMAN ) ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " SWORD:%3d%% THSWORD:%3d%% DAGGER:%3d%% BELL:%3d%% FAN:%3d%% BOW:%3d%% " ,
tch - > GetPoint ( POINT_RESIST_SWORD ) ,
tch - > GetPoint ( POINT_RESIST_TWOHAND ) ,
tch - > GetPoint ( POINT_RESIST_DAGGER ) ,
tch - > GetPoint ( POINT_RESIST_BELL ) ,
tch - > GetPoint ( POINT_RESIST_FAN ) ,
tch - > GetPoint ( POINT_RESIST_BOW ) ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " FIRE:%3d%% ELEC:%3d%% MAGIC:%3d%% WIND:%3d%% CRIT:%3d%% PENE:%3d%% " ,
tch - > GetPoint ( POINT_RESIST_FIRE ) ,
tch - > GetPoint ( POINT_RESIST_ELEC ) ,
tch - > GetPoint ( POINT_RESIST_MAGIC ) ,
tch - > GetPoint ( POINT_RESIST_WIND ) ,
tch - > GetPoint ( POINT_RESIST_CRITICAL ) ,
tch - > GetPoint ( POINT_RESIST_PENETRATE ) ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " ICE:%3d%% EARTH:%3d%% DARK:%3d%% " ,
tch - > GetPoint ( POINT_RESIST_ICE ) ,
tch - > GetPoint ( POINT_RESIST_EARTH ) ,
tch - > GetPoint ( POINT_RESIST_DARK ) ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " MALL: " ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " ATT:%3d%% DEF:%3d%% EXP:%3d%% ITEMx%d GOLDx%d " ,
tch - > GetPoint ( POINT_MALL_ATTBONUS ) ,
tch - > GetPoint ( POINT_MALL_DEFBONUS ) ,
tch - > GetPoint ( POINT_MALL_EXPBONUS ) ,
tch - > GetPoint ( POINT_MALL_ITEMBONUS ) / 10 ,
tch - > GetPoint ( POINT_MALL_GOLDBONUS ) / 10 ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " BONUS: " ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " SKILL:%3d%% NORMAL:%3d%% SKILL_DEF:%3d%% NORMAL_DEF:%3d%% " ,
tch - > GetPoint ( POINT_SKILL_DAMAGE_BONUS ) ,
tch - > GetPoint ( POINT_NORMAL_HIT_DAMAGE_BONUS ) ,
tch - > GetPoint ( POINT_SKILL_DEFEND_BONUS ) ,
tch - > GetPoint ( POINT_NORMAL_HIT_DEFEND_BONUS ) ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " HUMAN:%3d%% ANIMAL:%3d%% ORC:%3d%% MILGYO:%3d%% UNDEAD:%3d%% " ,
tch - > GetPoint ( POINT_ATTBONUS_HUMAN ) ,
tch - > GetPoint ( POINT_ATTBONUS_ANIMAL ) ,
tch - > GetPoint ( POINT_ATTBONUS_ORC ) ,
tch - > GetPoint ( POINT_ATTBONUS_MILGYO ) ,
tch - > GetPoint ( POINT_ATTBONUS_UNDEAD ) ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " DEVIL:%3d%% INSECT:%3d%% FIRE:%3d%% ICE:%3d%% DESERT:%3d%% " ,
tch - > GetPoint ( POINT_ATTBONUS_DEVIL ) ,
tch - > GetPoint ( POINT_ATTBONUS_INSECT ) ,
tch - > GetPoint ( POINT_ATTBONUS_FIRE ) ,
tch - > GetPoint ( POINT_ATTBONUS_ICE ) ,
tch - > GetPoint ( POINT_ATTBONUS_DESERT ) ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " TREE:%3d%% MONSTER:%3d%% " ,
tch - > GetPoint ( POINT_ATTBONUS_TREE ) ,
tch - > GetPoint ( POINT_ATTBONUS_MONSTER ) ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " WARR:%3d%% ASAS:%3d%% SURA:%3d%% SHAM:%3d%% " ,
tch - > GetPoint ( POINT_ATTBONUS_WARRIOR ) ,
tch - > GetPoint ( POINT_ATTBONUS_ASSASSIN ) ,
tch - > GetPoint ( POINT_ATTBONUS_SURA ) ,
tch - > GetPoint ( POINT_ATTBONUS_SHAMAN ) ) ;
for ( int i = 0 ; i < MAX_PRIV_NUM ; + + i )
if ( CPrivManager : : instance ( ) . GetPriv ( tch , i ) )
{
int iByEmpire = CPrivManager : : instance ( ) . GetPrivByEmpire ( tch - > GetEmpire ( ) , i ) ;
int iByGuild = 0 ;
if ( tch - > GetGuild ( ) )
iByGuild = CPrivManager : : instance ( ) . GetPrivByGuild ( tch - > GetGuild ( ) - > GetID ( ) , i ) ;
int iByPlayer = CPrivManager : : instance ( ) . GetPrivByCharacter ( tch - > GetPlayerID ( ) , i ) ;
if ( iByEmpire )
ch - > ChatPacket ( CHAT_TYPE_INFO , " %s for empire : %d " , LC_TEXT ( c_apszPrivNames [ i ] ) , iByEmpire ) ;
if ( iByGuild )
ch - > ChatPacket ( CHAT_TYPE_INFO , " %s for guild : %d " , LC_TEXT ( c_apszPrivNames [ i ] ) , iByGuild ) ;
if ( iByPlayer )
ch - > ChatPacket ( CHAT_TYPE_INFO , " %s for player : %d " , LC_TEXT ( c_apszPrivNames [ i ] ) , iByPlayer ) ;
}
}
struct notice_packet_func
{
const char * m_str ;
notice_packet_func ( const char * str ) : m_str ( str )
{
}
void operator ( ) ( LPDESC d )
{
if ( ! d - > GetCharacter ( ) )
return ;
d - > GetCharacter ( ) - > ChatPacket ( CHAT_TYPE_NOTICE , " %s " , m_str ) ;
}
} ;
struct monarch_notice_packet_func
{
const char * m_str ;
BYTE m_bEmpire ;
monarch_notice_packet_func ( BYTE bEmpire , const char * str ) : m_str ( str ) , m_bEmpire ( bEmpire )
{
}
void operator ( ) ( LPDESC d )
{
if ( ! d - > GetCharacter ( ) )
return ;
if ( m_bEmpire = = d - > GetCharacter ( ) - > GetEmpire ( ) )
{
d - > GetCharacter ( ) - > ChatPacket ( CHAT_TYPE_NOTICE , " %s " , m_str ) ;
}
}
} ;
void SendNotice ( const char * c_pszBuf )
{
const DESC_MANAGER : : DESC_SET & c_ref_set = DESC_MANAGER : : instance ( ) . GetClientSet ( ) ;
std : : for_each ( c_ref_set . begin ( ) , c_ref_set . end ( ) , notice_packet_func ( c_pszBuf ) ) ;
}
void SendMonarchNotice ( BYTE bEmpire , const char * c_pszBuf )
{
const DESC_MANAGER : : DESC_SET & c_ref_set = DESC_MANAGER : : instance ( ) . GetClientSet ( ) ;
std : : for_each ( c_ref_set . begin ( ) , c_ref_set . end ( ) , monarch_notice_packet_func ( bEmpire , c_pszBuf ) ) ;
}
struct notice_map_packet_func
{
const char * m_str ;
int m_mapIndex ;
bool m_bBigFont ;
notice_map_packet_func ( const char * str , int idx , bool bBigFont ) : m_str ( str ) , m_mapIndex ( idx ) , m_bBigFont ( bBigFont )
{
}
void operator ( ) ( LPDESC d )
{
if ( d - > GetCharacter ( ) = = NULL ) return ;
if ( d - > GetCharacter ( ) - > GetMapIndex ( ) ! = m_mapIndex ) return ;
d - > GetCharacter ( ) - > ChatPacket ( m_bBigFont = = true ? CHAT_TYPE_BIG_NOTICE : CHAT_TYPE_NOTICE , " %s " , m_str ) ;
}
} ;
void SendNoticeMap ( const char * c_pszBuf , int nMapIndex , bool bBigFont )
{
const DESC_MANAGER : : DESC_SET & c_ref_set = DESC_MANAGER : : instance ( ) . GetClientSet ( ) ;
std : : for_each ( c_ref_set . begin ( ) , c_ref_set . end ( ) , notice_map_packet_func ( c_pszBuf , nMapIndex , bBigFont ) ) ;
}
struct log_packet_func
{
const char * m_str ;
log_packet_func ( const char * str ) : m_str ( str )
{
}
void operator ( ) ( LPDESC d )
{
if ( ! d - > GetCharacter ( ) )
return ;
if ( d - > GetCharacter ( ) - > GetGMLevel ( ) > GM_PLAYER )
d - > GetCharacter ( ) - > ChatPacket ( CHAT_TYPE_NOTICE , " %s " , m_str ) ;
}
} ;
void SendLog ( const char * c_pszBuf )
{
const DESC_MANAGER : : DESC_SET & c_ref_set = DESC_MANAGER : : instance ( ) . GetClientSet ( ) ;
std : : for_each ( c_ref_set . begin ( ) , c_ref_set . end ( ) , log_packet_func ( c_pszBuf ) ) ;
}
void BroadcastNotice ( const char * c_pszBuf )
{
TPacketGGNotice p ;
p . bHeader = HEADER_GG_NOTICE ;
p . lSize = strlen ( c_pszBuf ) + 1 ;
TEMP_BUFFER buf ;
buf . write ( & p , sizeof ( p ) ) ;
buf . write ( c_pszBuf , p . lSize ) ;
P2P_MANAGER : : instance ( ) . Send ( buf . read_peek ( ) , buf . size ( ) ) ; // HEADER_GG_NOTICE
SendNotice ( c_pszBuf ) ;
}
void BroadcastMonarchNotice ( BYTE bEmpire , const char * c_pszBuf )
{
TPacketGGMonarchNotice p ;
p . bHeader = HEADER_GG_MONARCH_NOTICE ;
p . bEmpire = bEmpire ;
p . lSize = strlen ( c_pszBuf ) + 1 ;
TEMP_BUFFER buf ;
buf . write ( & p , sizeof ( p ) ) ;
buf . write ( c_pszBuf , p . lSize ) ;
P2P_MANAGER : : instance ( ) . Send ( buf . read_peek ( ) , buf . size ( ) ) ;
SendMonarchNotice ( bEmpire , c_pszBuf ) ;
}
ACMD ( do_notice )
{
BroadcastNotice ( argument ) ;
}
ACMD ( do_map_notice )
{
SendNoticeMap ( argument , ch - > GetMapIndex ( ) , false ) ;
}
ACMD ( do_big_notice )
{
ch - > ChatPacket ( CHAT_TYPE_BIG_NOTICE , " %s " , argument ) ;
}
ACMD ( do_monarch_notice )
{
if ( ch - > IsMonarch ( ) = = true )
{
BroadcastMonarchNotice ( ch - > GetEmpire ( ) , argument ) ;
}
else
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <EFBFBD> ָ<EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Դϴ<D4B4> " ) ) ;
}
}
ACMD ( do_who )
{
int iTotal ;
int * paiEmpireUserCount ;
int iLocal ;
DESC_MANAGER : : instance ( ) . GetUserCount ( iTotal , & paiEmpireUserCount , iLocal ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " Total [%d] %d / %d / %d (this server %d) " ,
iTotal , paiEmpireUserCount [ 1 ] , paiEmpireUserCount [ 2 ] , paiEmpireUserCount [ 3 ] , iLocal ) ;
}
class user_func
{
public :
LPCHARACTER m_ch ;
static int count ;
static char str [ 128 ] ;
static int str_len ;
user_func ( )
: m_ch ( NULL )
{ }
void initialize ( LPCHARACTER ch )
{
m_ch = ch ;
str_len = 0 ;
count = 0 ;
str [ 0 ] = ' \0 ' ;
}
void operator ( ) ( LPDESC d )
{
if ( ! d - > GetCharacter ( ) )
return ;
int len = snprintf ( str + str_len , sizeof ( str ) - str_len , " %-16s " , d - > GetCharacter ( ) - > GetName ( ) ) ;
if ( len < 0 | | len > = ( int ) sizeof ( str ) - str_len )
len = ( sizeof ( str ) - str_len ) - 1 ;
str_len + = len ;
+ + count ;
if ( ! ( count % 4 ) )
{
m_ch - > ChatPacket ( CHAT_TYPE_INFO , str ) ;
str [ 0 ] = ' \0 ' ;
str_len = 0 ;
}
}
} ;
int user_func : : count = 0 ;
char user_func : : str [ 128 ] = { 0 , } ;
int user_func : : str_len = 0 ;
ACMD ( do_user )
{
const DESC_MANAGER : : DESC_SET & c_ref_set = DESC_MANAGER : : instance ( ) . GetClientSet ( ) ;
user_func func ;
func . initialize ( ch ) ;
std : : for_each ( c_ref_set . begin ( ) , c_ref_set . end ( ) , func ) ;
if ( func . count % 4 )
ch - > ChatPacket ( CHAT_TYPE_INFO , func . str ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " Total %d " , func . count ) ;
}
ACMD ( do_disconnect )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( ! * arg1 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " ex) /dc <player name> " ) ;
return ;
}
LPDESC d = DESC_MANAGER : : instance ( ) . FindByCharacterName ( arg1 ) ;
LPCHARACTER tch = d ? d - > GetCharacter ( ) : NULL ;
if ( ! tch )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " %s: no such a player. " , arg1 ) ;
return ;
}
if ( tch = = ch )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " cannot disconnect myself " ) ;
return ;
}
DESC_MANAGER : : instance ( ) . DestroyDesc ( d ) ;
}
ACMD ( do_kill )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( ! * arg1 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " ex) /kill <player name> " ) ;
return ;
}
LPDESC d = DESC_MANAGER : : instance ( ) . FindByCharacterName ( arg1 ) ;
LPCHARACTER tch = d ? d - > GetCharacter ( ) : NULL ;
if ( ! tch )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " %s: no such a player " , arg1 ) ;
return ;
}
tch - > Dead ( ) ;
}
# define MISC 0
# define BINARY 1
# define NUMBER 2
const struct set_struct
{
const char * cmd ;
const char type ;
} set_fields [ ] = {
{ " gold " , NUMBER } ,
{ " race " , BINARY } ,
{ " sex " , BINARY } ,
{ " exp " , NUMBER } ,
{ " max_hp " , NUMBER } ,
{ " max_sp " , NUMBER } ,
{ " skill " , NUMBER } ,
{ " alignment " , NUMBER } ,
{ " align " , NUMBER } ,
{ " \n " , MISC }
} ;
ACMD ( do_set )
{
char arg1 [ 256 ] , arg2 [ 256 ] , arg3 [ 256 ] ;
LPCHARACTER tch = NULL ;
int i , len ;
const char * line ;
line = two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
one_argument ( line , arg3 , sizeof ( arg3 ) ) ;
if ( ! * arg1 | | ! * arg2 | | ! * arg3 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Usage: set <name> <field> <value> " ) ;
return ;
}
tch = CHARACTER_MANAGER : : instance ( ) . FindPC ( arg1 ) ;
if ( ! tch )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " %s not exist " , arg1 ) ;
return ;
}
len = strlen ( arg2 ) ;
for ( i = 0 ; * ( set_fields [ i ] . cmd ) ! = ' \n ' ; i + + )
if ( ! strncmp ( arg2 , set_fields [ i ] . cmd , len ) )
break ;
switch ( i )
{
case 0 : // gold
{
int gold = 0 ;
str_to_number ( gold , arg3 ) ;
DBManager : : instance ( ) . SendMoneyLog ( MONEY_LOG_MISC , 3 , gold ) ;
int before_gold = tch - > GetGold ( ) ;
tch - > PointChange ( POINT_GOLD , gold , true ) ;
int after_gold = tch - > GetGold ( ) ;
if ( 0 = = after_gold & & 0 ! = before_gold )
{
LogManager : : instance ( ) . CharLog ( tch , gold , " ZERO_GOLD " , " GM " ) ;
}
}
break ;
case 1 : // race
break ;
case 2 : // sex
break ;
case 3 : // exp
{
int amount = 0 ;
str_to_number ( amount , arg3 ) ;
tch - > PointChange ( POINT_EXP , amount , true ) ;
}
break ;
case 4 : // max_hp
{
int amount = 0 ;
str_to_number ( amount , arg3 ) ;
tch - > PointChange ( POINT_MAX_HP , amount , true ) ;
}
break ;
case 5 : // max_sp
{
int amount = 0 ;
str_to_number ( amount , arg3 ) ;
tch - > PointChange ( POINT_MAX_SP , amount , true ) ;
}
break ;
case 6 : // active skill point
{
int amount = 0 ;
str_to_number ( amount , arg3 ) ;
tch - > PointChange ( POINT_SKILL , amount , true ) ;
}
break ;
case 7 : // alignment
case 8 : // alignment
{
int amount = 0 ;
str_to_number ( amount , arg3 ) ;
tch - > UpdateAlignment ( amount - ch - > GetRealAlignment ( ) ) ;
}
break ;
}
if ( set_fields [ i ] . type = = NUMBER )
{
int amount = 0 ;
str_to_number ( amount , arg3 ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " %s's %s set to [%d] " , tch - > GetName ( ) , set_fields [ i ] . cmd , amount ) ;
}
}
ACMD ( do_reset )
{
ch - > PointChange ( POINT_HP , ch - > GetMaxHP ( ) - ch - > GetHP ( ) ) ;
ch - > PointChange ( POINT_SP , ch - > GetMaxSP ( ) - ch - > GetSP ( ) ) ;
ch - > Save ( ) ;
}
ACMD ( do_advance )
{
char arg1 [ 256 ] , arg2 [ 256 ] ;
two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
if ( ! * arg1 | | ! * arg2 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Syntax: advance <name> <level> " ) ;
return ;
}
LPCHARACTER tch = CHARACTER_MANAGER : : instance ( ) . FindPC ( arg1 ) ;
if ( ! tch )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " %s not exist " , arg1 ) ;
return ;
}
int level = 0 ;
str_to_number ( level , arg2 ) ;
tch - > ResetPoint ( MINMAX ( 0 , level , PLAYER_MAX_LEVEL_CONST ) ) ;
}
ACMD ( do_respawn )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( * arg1 & & ! strcasecmp ( arg1 , " all " ) )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Respaw everywhere " ) ;
regen_reset ( 0 , 0 ) ;
}
else
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Respaw around " ) ;
regen_reset ( ch - > GetX ( ) , ch - > GetY ( ) ) ;
}
}
ACMD ( do_safebox_size )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
int size = 0 ;
if ( * arg1 )
str_to_number ( size , arg1 ) ;
if ( size > 3 | | size < 0 )
size = 0 ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " Safebox size set to %d " , size ) ;
ch - > ChangeSafeboxSize ( size ) ;
}
ACMD ( do_makeguild )
{
if ( ch - > GetGuild ( ) )
return ;
CGuildManager & gm = CGuildManager : : instance ( ) ;
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
TGuildCreateParameter cp ;
memset ( & cp , 0 , sizeof ( cp ) ) ;
cp . master = ch ;
2022-03-05 19:59:39 +02:00
strncpy ( cp . name , arg1 , sizeof ( cp . name ) ) ;
2022-03-05 12:44:06 +02:00
if ( ! check_name ( cp . name ) )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ̸<EFBFBD> <20> Դϴ<D4B4> ." ) ) ;
return ;
}
gm . CreateGuild ( cp ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " (%s) <20> <> <EFBFBD> 尡 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <C7BE> <EFBFBD> <EFBFBD> ϴ<EFBFBD> . [<5B> ӽ<EFBFBD> ] " ) , cp . name ) ;
}
ACMD ( do_deleteguild )
{
if ( ch - > GetGuild ( ) )
ch - > GetGuild ( ) - > RequestDisband ( ch - > GetPlayerID ( ) ) ;
}
ACMD ( do_greset )
{
if ( ch - > GetGuild ( ) )
ch - > GetGuild ( ) - > Reset ( ) ;
}
// REFINE_ROD_HACK_BUG_FIX
ACMD ( do_refine_rod )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
BYTE cell = 0 ;
str_to_number ( cell , arg1 ) ;
LPITEM item = ch - > GetInventoryItem ( cell ) ;
if ( item )
fishing : : RealRefineRod ( ch , item ) ;
}
// END_OF_REFINE_ROD_HACK_BUG_FIX
// REFINE_PICK
ACMD ( do_refine_pick )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
BYTE cell = 0 ;
str_to_number ( cell , arg1 ) ;
LPITEM item = ch - > GetInventoryItem ( cell ) ;
if ( item )
{
mining : : CHEAT_MAX_PICK ( ch , item ) ;
mining : : RealRefinePick ( ch , item ) ;
}
}
ACMD ( do_max_pick )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
BYTE cell = 0 ;
str_to_number ( cell , arg1 ) ;
LPITEM item = ch - > GetInventoryItem ( cell ) ;
if ( item )
{
mining : : CHEAT_MAX_PICK ( ch , item ) ;
}
}
// END_OF_REFINE_PICK
ACMD ( do_fishing_simul )
{
char arg1 [ 256 ] ;
char arg2 [ 256 ] ;
char arg3 [ 256 ] ;
argument = one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
two_arguments ( argument , arg2 , sizeof ( arg2 ) , arg3 , sizeof ( arg3 ) ) ;
int count = 1000 ;
int prob_idx = 0 ;
int level = 100 ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " Usage: fishing_simul <level> <prob index> <count> " ) ;
if ( * arg1 )
str_to_number ( level , arg1 ) ;
if ( * arg2 )
str_to_number ( prob_idx , arg2 ) ;
if ( * arg3 )
str_to_number ( count , arg3 ) ;
fishing : : Simulation ( level , count , prob_idx , ch ) ;
}
ACMD ( do_invisibility )
{
if ( ch - > IsAffectFlag ( AFF_INVISIBILITY ) )
{
ch - > RemoveAffect ( AFFECT_INVISIBILITY ) ;
}
else
{
ch - > AddAffect ( AFFECT_INVISIBILITY , POINT_NONE , 0 , AFF_INVISIBILITY , INFINITE_AFFECT_DURATION , 0 , true ) ;
}
}
ACMD ( do_event_flag )
{
char arg1 [ 256 ] ;
char arg2 [ 256 ] ;
two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
if ( ! ( * arg1 ) | | ! ( * arg2 ) )
return ;
int value = 0 ;
str_to_number ( value , arg2 ) ;
if ( ! strcmp ( arg1 , " mob_item " ) | |
! strcmp ( arg1 , " mob_exp " ) | |
! strcmp ( arg1 , " mob_gold " ) | |
! strcmp ( arg1 , " mob_dam " ) | |
! strcmp ( arg1 , " mob_gold_pct " ) | |
! strcmp ( arg1 , " mob_item_buyer " ) | |
! strcmp ( arg1 , " mob_exp_buyer " ) | |
! strcmp ( arg1 , " mob_gold_buyer " ) | |
! strcmp ( arg1 , " mob_gold_pct_buyer " )
)
value = MINMAX ( 0 , value , 1000 ) ;
//quest::CQuestManager::instance().SetEventFlag(arg1, atoi(arg2));
quest : : CQuestManager : : instance ( ) . RequestSetEventFlag ( arg1 , value ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " RequestSetEventFlag %s %d " , arg1 , value ) ;
sys_log ( 0 , " RequestSetEventFlag %s %d " , arg1 , value ) ;
}
ACMD ( do_get_event_flag )
{
quest : : CQuestManager : : instance ( ) . SendEventFlagList ( ch ) ;
}
ACMD ( do_private )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( ! * arg1 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Usage: private <map index> " ) ;
return ;
}
long lMapIndex ;
long map_index = 0 ;
str_to_number ( map_index , arg1 ) ;
if ( ( lMapIndex = SECTREE_MANAGER : : instance ( ) . CreatePrivateMap ( map_index ) ) )
{
ch - > SaveExitLocation ( ) ;
LPSECTREE_MAP pkSectreeMap = SECTREE_MANAGER : : instance ( ) . GetMap ( lMapIndex ) ;
ch - > WarpSet ( pkSectreeMap - > m_setting . posSpawn . x , pkSectreeMap - > m_setting . posSpawn . y , lMapIndex ) ;
}
else
ch - > ChatPacket ( CHAT_TYPE_INFO , " Can't find map by index %d " , map_index ) ;
}
ACMD ( do_qf )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( ! * arg1 )
return ;
quest : : PC * pPC = quest : : CQuestManager : : instance ( ) . GetPCForce ( ch - > GetPlayerID ( ) ) ;
std : : string questname = pPC - > GetCurrentQuestName ( ) ;
if ( ! questname . empty ( ) )
{
int value = quest : : CQuestManager : : Instance ( ) . GetQuestStateIndex ( questname , arg1 ) ;
pPC - > SetFlag ( questname + " .__status " , value ) ;
pPC - > ClearTimer ( ) ;
quest : : PC : : QuestInfoIterator it = pPC - > quest_begin ( ) ;
unsigned int questindex = quest : : CQuestManager : : instance ( ) . GetQuestIndexByName ( questname ) ;
while ( it ! = pPC - > quest_end ( ) )
{
if ( it - > first = = questindex )
{
it - > second . st = value ;
break ;
}
+ + it ;
}
ch - > ChatPacket ( CHAT_TYPE_INFO , " setting quest state flag %s %s %d " , questname . c_str ( ) , arg1 , value ) ;
}
else
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " setting quest state flag failed " ) ;
}
}
LPCHARACTER chHori , chForge , chLib , chTemple , chTraining , chTree , chPortal , chBall ;
ACMD ( do_b1 )
{
//ȣ <> <C8A3> <EFBFBD> <EFBFBD> 478 579
chHori = CHARACTER_MANAGER : : instance ( ) . SpawnMobRange ( 14017 , ch - > GetMapIndex ( ) , 304222 , 742858 , 304222 , 742858 , true , false ) ;
chHori - > AddAffect ( AFFECT_DUNGEON_UNIQUE , POINT_NONE , 0 , AFF_BUILDING_CONSTRUCTION_SMALL , 65535 , 0 , true ) ;
chHori - > AddAffect ( AFFECT_DUNGEON_UNIQUE , POINT_NONE , 0 , AFF_DUNGEON_UNIQUE , 65535 , 0 , true ) ;
for ( int i = 0 ; i < 30 ; + + i )
{
int rot = number ( 0 , 359 ) ;
float fx , fy ;
GetDeltaByDegree ( rot , 800 , & fx , & fy ) ;
LPCHARACTER tch = CHARACTER_MANAGER : : instance ( ) . SpawnMobRange ( number ( 701 , 706 ) ,
ch - > GetMapIndex ( ) ,
304222 + ( int ) fx ,
742858 + ( int ) fy ,
304222 + ( int ) fx ,
742858 + ( int ) fy ,
true ,
false ) ;
tch - > SetAggressive ( ) ;
}
for ( int i = 0 ; i < 5 ; + + i )
{
int rot = number ( 0 , 359 ) ;
float fx , fy ;
GetDeltaByDegree ( rot , 800 , & fx , & fy ) ;
LPCHARACTER tch = CHARACTER_MANAGER : : instance ( ) . SpawnMobRange ( 8009 ,
ch - > GetMapIndex ( ) ,
304222 + ( int ) fx ,
742858 + ( int ) fy ,
304222 + ( int ) fx ,
742858 + ( int ) fy ,
true ,
false ) ;
tch - > SetAggressive ( ) ;
}
}
ACMD ( do_b2 )
{
chHori - > RemoveAffect ( AFFECT_DUNGEON_UNIQUE ) ;
}
ACMD ( do_b3 )
{
// <20> <> <EFBFBD> <EFBFBD> 492 547
chForge = CHARACTER_MANAGER : : instance ( ) . SpawnMobRange ( 14003 , ch - > GetMapIndex ( ) , 307500 , 746300 , 307500 , 746300 , true , false ) ;
chForge - > AddAffect ( AFFECT_DUNGEON_UNIQUE , POINT_NONE , 0 , AFF_DUNGEON_UNIQUE , 65535 , 0 , true ) ;
//<2F> <> <EFBFBD> <EFBFBD> ž 509 589 -> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
chLib = CHARACTER_MANAGER : : instance ( ) . SpawnMobRange ( 14007 , ch - > GetMapIndex ( ) , 307900 , 744500 , 307900 , 744500 , true , false ) ;
chLib - > AddAffect ( AFFECT_DUNGEON_UNIQUE , POINT_NONE , 0 , AFF_DUNGEON_UNIQUE , 65535 , 0 , true ) ;
//<2F> <> <EFBFBD> <EFBFBD> 513 606 -> <20> <> <EFBFBD> ǽ<EFBFBD> <C7BD> <EFBFBD>
chTemple = CHARACTER_MANAGER : : instance ( ) . SpawnMobRange ( 14004 , ch - > GetMapIndex ( ) , 307700 , 741600 , 307700 , 741600 , true , false ) ;
chTemple - > AddAffect ( AFFECT_DUNGEON_UNIQUE , POINT_NONE , 0 , AFF_DUNGEON_UNIQUE , 65535 , 0 , true ) ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 490 625
chTraining = CHARACTER_MANAGER : : instance ( ) . SpawnMobRange ( 14010 , ch - > GetMapIndex ( ) , 307100 , 739500 , 307100 , 739500 , true , false ) ;
chTraining - > AddAffect ( AFFECT_DUNGEON_UNIQUE , POINT_NONE , 0 , AFF_DUNGEON_UNIQUE , 65535 , 0 , true ) ;
//<2F> <> <EFBFBD> <EFBFBD> 466 614
chTree = CHARACTER_MANAGER : : instance ( ) . SpawnMobRange ( 14013 , ch - > GetMapIndex ( ) , 300800 , 741600 , 300800 , 741600 , true , false ) ;
chTree - > AddAffect ( AFFECT_DUNGEON_UNIQUE , POINT_NONE , 0 , AFF_DUNGEON_UNIQUE , 65535 , 0 , true ) ;
//<2F> <> Ż 439 615
chPortal = CHARACTER_MANAGER : : instance ( ) . SpawnMobRange ( 14001 , ch - > GetMapIndex ( ) , 300900 , 744500 , 300900 , 744500 , true , false ) ;
chPortal - > AddAffect ( AFFECT_DUNGEON_UNIQUE , POINT_NONE , 0 , AFF_DUNGEON_UNIQUE , 65535 , 0 , true ) ;
// <20> <> <EFBFBD> <EFBFBD> 436 600
chBall = CHARACTER_MANAGER : : instance ( ) . SpawnMobRange ( 14012 , ch - > GetMapIndex ( ) , 302500 , 746600 , 302500 , 746600 , true , false ) ;
chBall - > AddAffect ( AFFECT_DUNGEON_UNIQUE , POINT_NONE , 0 , AFF_DUNGEON_UNIQUE , 65535 , 0 , true ) ;
}
ACMD ( do_b4 )
{
chLib - > AddAffect ( AFFECT_DUNGEON_UNIQUE , POINT_NONE , 0 , AFF_BUILDING_UPGRADE , 65535 , 0 , true ) ;
for ( int i = 0 ; i < 30 ; + + i )
{
int rot = number ( 0 , 359 ) ;
float fx , fy ;
GetDeltaByDegree ( rot , 1200 , & fx , & fy ) ;
LPCHARACTER tch = CHARACTER_MANAGER : : instance ( ) . SpawnMobRange ( number ( 701 , 706 ) ,
ch - > GetMapIndex ( ) ,
307900 + ( int ) fx ,
744500 + ( int ) fy ,
307900 + ( int ) fx ,
744500 + ( int ) fy ,
true ,
false ) ;
tch - > SetAggressive ( ) ;
}
for ( int i = 0 ; i < 5 ; + + i )
{
int rot = number ( 0 , 359 ) ;
float fx , fy ;
GetDeltaByDegree ( rot , 1200 , & fx , & fy ) ;
LPCHARACTER tch = CHARACTER_MANAGER : : instance ( ) . SpawnMobRange ( 8009 ,
ch - > GetMapIndex ( ) ,
307900 + ( int ) fx ,
744500 + ( int ) fy ,
307900 + ( int ) fx ,
744500 + ( int ) fy ,
true ,
false ) ;
tch - > SetAggressive ( ) ;
}
}
ACMD ( do_b5 )
{
M2_DESTROY_CHARACTER ( chLib ) ;
//chHori->RemoveAffect(AFFECT_DUNGEON_UNIQUE);
chLib = CHARACTER_MANAGER : : instance ( ) . SpawnMobRange ( 14008 , ch - > GetMapIndex ( ) , 307900 , 744500 , 307900 , 744500 , true , false ) ;
chLib - > AddAffect ( AFFECT_DUNGEON_UNIQUE , POINT_NONE , 0 , AFF_DUNGEON_UNIQUE , 65535 , 0 , true ) ;
}
ACMD ( do_b6 )
{
chLib - > AddAffect ( AFFECT_DUNGEON_UNIQUE , POINT_NONE , 0 , AFF_BUILDING_UPGRADE , 65535 , 0 , true ) ;
}
ACMD ( do_b7 )
{
M2_DESTROY_CHARACTER ( chLib ) ;
//chHori->RemoveAffect(AFFECT_DUNGEON_UNIQUE);
chLib = CHARACTER_MANAGER : : instance ( ) . SpawnMobRange ( 14009 , ch - > GetMapIndex ( ) , 307900 , 744500 , 307900 , 744500 , true , false ) ;
chLib - > AddAffect ( AFFECT_DUNGEON_UNIQUE , POINT_NONE , 0 , AFF_DUNGEON_UNIQUE , 65535 , 0 , true ) ;
}
ACMD ( do_book )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
CSkillProto * pkProto ;
2022-03-06 17:36:43 +02:00
if ( isdigit ( * arg1 ) )
2022-03-05 12:44:06 +02:00
{
DWORD vnum = 0 ;
str_to_number ( vnum , arg1 ) ;
pkProto = CSkillManager : : instance ( ) . Get ( vnum ) ;
}
else
pkProto = CSkillManager : : instance ( ) . Get ( arg1 ) ;
if ( ! pkProto )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " There is no such a skill. " ) ;
return ;
}
LPITEM item = ch - > AutoGiveItem ( 50300 ) ;
item - > SetSocket ( 0 , pkProto - > dwVnum ) ;
}
ACMD ( do_setskillother )
{
char arg1 [ 256 ] , arg2 [ 256 ] , arg3 [ 256 ] ;
argument = two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
one_argument ( argument , arg3 , sizeof ( arg3 ) ) ;
if ( ! * arg1 | | ! * arg2 | | ! * arg3 | | ! isdigit ( * arg3 ) )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Syntax: setskillother <target> <skillname> <lev> " ) ;
return ;
}
LPCHARACTER tch ;
tch = CHARACTER_MANAGER : : instance ( ) . FindPC ( arg1 ) ;
if ( ! tch )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " There is no such character. " ) ;
return ;
}
CSkillProto * pk ;
if ( isdigit ( * arg2 ) )
{
DWORD vnum = 0 ;
str_to_number ( vnum , arg2 ) ;
pk = CSkillManager : : instance ( ) . Get ( vnum ) ;
}
else
pk = CSkillManager : : instance ( ) . Get ( arg2 ) ;
if ( ! pk )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " No such a skill by that name. " ) ;
return ;
}
BYTE level = 0 ;
str_to_number ( level , arg3 ) ;
tch - > SetSkillLevel ( pk - > dwVnum , level ) ;
tch - > ComputePoints ( ) ;
tch - > SkillLevelPacket ( ) ;
}
ACMD ( do_setskill )
{
char arg1 [ 256 ] , arg2 [ 256 ] ;
two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
if ( ! * arg1 | | ! * arg2 | | ! isdigit ( * arg2 ) )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Syntax: setskill <name> <lev> " ) ;
return ;
}
CSkillProto * pk ;
if ( isdigit ( * arg1 ) )
{
DWORD vnum = 0 ;
str_to_number ( vnum , arg1 ) ;
pk = CSkillManager : : instance ( ) . Get ( vnum ) ;
}
else
pk = CSkillManager : : instance ( ) . Get ( arg1 ) ;
if ( ! pk )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " No such a skill by that name. " ) ;
return ;
}
BYTE level = 0 ;
str_to_number ( level , arg2 ) ;
ch - > SetSkillLevel ( pk - > dwVnum , level ) ;
ch - > ComputePoints ( ) ;
ch - > SkillLevelPacket ( ) ;
}
ACMD ( do_set_skill_point )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
int skill_point = 0 ;
if ( * arg1 )
str_to_number ( skill_point , arg1 ) ;
ch - > SetRealPoint ( POINT_SKILL , skill_point ) ;
ch - > SetPoint ( POINT_SKILL , ch - > GetRealPoint ( POINT_SKILL ) ) ;
ch - > PointChange ( POINT_SKILL , 0 ) ;
}
ACMD ( do_set_skill_group )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
int skill_group = 0 ;
if ( * arg1 )
str_to_number ( skill_group , arg1 ) ;
ch - > SetSkillGroup ( skill_group ) ;
ch - > ClearSkill ( ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " skill group to %d. " , skill_group ) ;
}
ACMD ( do_reload )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( * arg1 )
{
switch ( LOWER ( * arg1 ) )
{
case ' u ' :
ch - > ChatPacket ( CHAT_TYPE_INFO , " Reloading state_user_count. " ) ;
LoadStateUserCount ( ) ;
break ;
case ' p ' :
ch - > ChatPacket ( CHAT_TYPE_INFO , " Reloading prototype tables, " ) ;
db_clientdesc - > DBPacket ( HEADER_GD_RELOAD_PROTO , 0 , NULL , 0 ) ;
break ;
case ' s ' :
ch - > ChatPacket ( CHAT_TYPE_INFO , " Reloading notice string. " ) ;
DBManager : : instance ( ) . LoadDBString ( ) ;
break ;
case ' q ' :
ch - > ChatPacket ( CHAT_TYPE_INFO , " Reloading quest. " ) ;
quest : : CQuestManager : : instance ( ) . Reload ( ) ;
break ;
case ' f ' :
fishing : : Initialize ( ) ;
break ;
//RELOAD_ADMIN
case ' a ' :
ch - > ChatPacket ( CHAT_TYPE_INFO , " Reloading Admin infomation. " ) ;
db_clientdesc - > DBPacket ( HEADER_GD_RELOAD_ADMIN , 0 , NULL , 0 ) ;
sys_log ( 0 , " Reloading admin infomation. " ) ;
break ;
//END_RELOAD_ADMIN
case ' c ' : // cube
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> μ<EFBFBD> <CEBC> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
Cube_init ( ) ;
break ;
}
}
else
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Reloading state_user_count. " ) ;
LoadStateUserCount ( ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " Reloading prototype tables, " ) ;
db_clientdesc - > DBPacket ( HEADER_GD_RELOAD_PROTO , 0 , NULL , 0 ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " Reloading notice string. " ) ;
DBManager : : instance ( ) . LoadDBString ( ) ;
}
}
ACMD ( do_cooltime )
{
ch - > DisableCooltime ( ) ;
}
ACMD ( do_level )
{
char arg2 [ 256 ] ;
one_argument ( argument , arg2 , sizeof ( arg2 ) ) ;
if ( ! * arg2 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Syntax: level <level> " ) ;
return ;
}
int level = 0 ;
str_to_number ( level , arg2 ) ;
ch - > ResetPoint ( MINMAX ( 1 , level , PLAYER_MAX_LEVEL_CONST ) ) ;
ch - > ClearSkill ( ) ;
ch - > ClearSubSkill ( ) ;
}
ACMD ( do_gwlist )
{
ch - > ChatPacket ( CHAT_TYPE_NOTICE , LC_TEXT ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Դϴ<D4B4> " ) ) ;
CGuildManager : : instance ( ) . ShowGuildWarList ( ch ) ;
}
ACMD ( do_stop_guild_war )
{
char arg1 [ 256 ] , arg2 [ 256 ] ;
two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
if ( ! * arg1 | | ! * arg2 )
return ;
int id1 = 0 , id2 = 0 ;
str_to_number ( id1 , arg1 ) ;
str_to_number ( id2 , arg2 ) ;
if ( ! id1 | | ! id2 )
return ;
if ( id1 > id2 )
{
std : : swap ( id1 , id2 ) ;
}
ch - > ChatPacket ( CHAT_TYPE_TALKING , " %d %d " , id1 , id2 ) ;
CGuildManager : : instance ( ) . RequestEndWar ( id1 , id2 ) ;
}
ACMD ( do_cancel_guild_war )
{
char arg1 [ 256 ] , arg2 [ 256 ] ;
two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
int id1 = 0 , id2 = 0 ;
str_to_number ( id1 , arg1 ) ;
str_to_number ( id2 , arg2 ) ;
if ( id1 > id2 )
std : : swap ( id1 , id2 ) ;
CGuildManager : : instance ( ) . RequestCancelWar ( id1 , id2 ) ;
}
ACMD ( do_guild_state )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
CGuild * pGuild = CGuildManager : : instance ( ) . FindGuildByName ( arg1 ) ;
if ( pGuild ! = NULL )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " GuildID: %d " , pGuild - > GetID ( ) ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " GuildMasterPID: %d " , pGuild - > GetMasterPID ( ) ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " IsInWar: %d " , pGuild - > UnderAnyWar ( ) ) ;
}
else
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " %s: <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Դϴ<D4B4> . " ) , arg1 ) ;
}
}
struct FuncWeaken
{
LPCHARACTER m_pkGM ;
bool m_bAll ;
FuncWeaken ( LPCHARACTER ch ) : m_pkGM ( ch ) , m_bAll ( false )
{
}
void operator ( ) ( LPENTITY ent )
{
if ( ! ent - > IsType ( ENTITY_CHARACTER ) )
return ;
LPCHARACTER pkChr = ( LPCHARACTER ) ent ;
int iDist = DISTANCE_APPROX ( pkChr - > GetX ( ) - m_pkGM - > GetX ( ) , pkChr - > GetY ( ) - m_pkGM - > GetY ( ) ) ;
if ( ! m_bAll & & iDist > = 1000 ) // 10<31> <30> <EFBFBD> <EFBFBD> <20> ̻<EFBFBD> <CCBB> <EFBFBD> <20> ִ<EFBFBD> <20> ͵<EFBFBD> <CDB5> <EFBFBD> purge <20> <> <EFBFBD> <EFBFBD> <20> ʴ´ <CAB4> .
return ;
if ( pkChr - > IsNPC ( ) )
pkChr - > PointChange ( POINT_HP , ( 10 - pkChr - > GetHP ( ) ) ) ;
}
} ;
ACMD ( do_weaken )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
FuncWeaken func ( ch ) ;
if ( * arg1 & & ! strcmp ( arg1 , " all " ) )
func . m_bAll = true ;
ch - > GetSectree ( ) - > ForEachAround ( func ) ;
}
ACMD ( do_getqf )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
LPCHARACTER tch ;
if ( ! * arg1 )
tch = ch ;
else
{
tch = CHARACTER_MANAGER : : instance ( ) . FindPC ( arg1 ) ;
if ( ! tch )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " There is no such character. " ) ;
return ;
}
}
quest : : PC * pPC = quest : : CQuestManager : : instance ( ) . GetPC ( tch - > GetPlayerID ( ) ) ;
if ( pPC )
pPC - > SendFlagList ( ch ) ;
}
ACMD ( do_set_state )
{
char arg1 [ 256 ] ;
char arg2 [ 256 ] ;
//argument = one_argument(argument, arg1, sizeof(arg1));
two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
if ( ! * arg1 | | ! * arg2 )
return ;
quest : : PC * pPC = quest : : CQuestManager : : instance ( ) . GetPCForce ( ch - > GetPlayerID ( ) ) ;
std : : string questname = arg1 ;
std : : string statename = arg2 ;
if ( ! questname . empty ( ) )
{
int value = quest : : CQuestManager : : Instance ( ) . GetQuestStateIndex ( questname , statename ) ;
pPC - > SetFlag ( questname + " .__status " , value ) ;
pPC - > ClearTimer ( ) ;
quest : : PC : : QuestInfoIterator it = pPC - > quest_begin ( ) ;
unsigned int questindex = quest : : CQuestManager : : instance ( ) . GetQuestIndexByName ( questname ) ;
while ( it ! = pPC - > quest_end ( ) )
{
if ( it - > first = = questindex )
{
it - > second . st = value ;
break ;
}
+ + it ;
}
ch - > ChatPacket ( CHAT_TYPE_INFO , " setting quest state flag %s %s %d " , questname . c_str ( ) , arg1 , value ) ;
}
else
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " setting quest state flag failed " ) ;
}
}
ACMD ( do_setqf )
{
char arg1 [ 256 ] ;
char arg2 [ 256 ] ;
char arg3 [ 256 ] ;
one_argument ( two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) , arg3 , sizeof ( arg3 ) ) ;
if ( ! * arg1 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Syntax: setqf <flagname> <value> [<character name>] " ) ;
return ;
}
LPCHARACTER tch = ch ;
if ( * arg3 )
tch = CHARACTER_MANAGER : : instance ( ) . FindPC ( arg3 ) ;
if ( ! tch )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " There is no such character. " ) ;
return ;
}
quest : : PC * pPC = quest : : CQuestManager : : instance ( ) . GetPC ( tch - > GetPlayerID ( ) ) ;
if ( pPC )
{
int value = 0 ;
str_to_number ( value , arg2 ) ;
pPC - > SetFlag ( arg1 , value ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " Quest flag set: %s %d " , arg1 , value ) ;
}
}
ACMD ( do_delqf )
{
char arg1 [ 256 ] ;
char arg2 [ 256 ] ;
two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
if ( ! * arg1 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Syntax: delqf <flagname> [<character name>] " ) ;
return ;
}
LPCHARACTER tch = ch ;
if ( * arg2 )
tch = CHARACTER_MANAGER : : instance ( ) . FindPC ( arg2 ) ;
if ( ! tch )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " There is no such character. " ) ;
return ;
}
quest : : PC * pPC = quest : : CQuestManager : : instance ( ) . GetPC ( tch - > GetPlayerID ( ) ) ;
if ( pPC )
{
if ( pPC - > DeleteFlag ( arg1 ) )
ch - > ChatPacket ( CHAT_TYPE_INFO , " Delete success. " ) ;
else
ch - > ChatPacket ( CHAT_TYPE_INFO , " Delete failed. Quest flag does not exist. " ) ;
}
}
ACMD ( do_forgetme )
{
ch - > ForgetMyAttacker ( ) ;
}
ACMD ( do_aggregate )
{
ch - > AggregateMonster ( ) ;
}
ACMD ( do_attract_ranger )
{
ch - > AttractRanger ( ) ;
}
ACMD ( do_pull_monster )
{
ch - > PullMonster ( ) ;
}
ACMD ( do_polymorph )
{
char arg1 [ 256 ] , arg2 [ 256 ] ;
two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
if ( * arg1 )
{
DWORD dwVnum = 0 ;
str_to_number ( dwVnum , arg1 ) ;
bool bMaintainStat = false ;
if ( * arg2 )
{
int value = 0 ;
str_to_number ( value , arg2 ) ;
bMaintainStat = ( value > 0 ) ;
}
ch - > SetPolymorph ( dwVnum , bMaintainStat ) ;
}
}
ACMD ( do_polymorph_item )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( * arg1 )
{
DWORD dwVnum = 0 ;
str_to_number ( dwVnum , arg1 ) ;
LPITEM item = ITEM_MANAGER : : instance ( ) . CreateItem ( 70104 , 1 , 0 , true ) ;
if ( item )
{
item - > SetSocket ( 0 , dwVnum ) ;
int iEmptyPos = ch - > GetEmptyInventory ( item - > GetSize ( ) ) ;
if ( iEmptyPos ! = - 1 )
{
item - > AddToCharacter ( ch , TItemPos ( INVENTORY , iEmptyPos ) ) ;
LogManager : : instance ( ) . ItemLog ( ch , item , " GM " , item - > GetName ( ) ) ;
}
else
{
M2_DESTROY_ITEM ( item ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " Not enough inventory space. " ) ;
}
}
else
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " #%d item not exist by that vnum. " , 70103 ) ;
}
//ch->SetPolymorph(dwVnum, bMaintainStat);
}
}
ACMD ( do_priv_empire )
{
char arg1 [ 256 ] = { 0 } ;
char arg2 [ 256 ] = { 0 } ;
char arg3 [ 256 ] = { 0 } ;
char arg4 [ 256 ] = { 0 } ;
int empire = 0 ;
int type = 0 ;
int value = 0 ;
int duration = 0 ;
const char * line = two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
if ( ! * arg1 | | ! * arg2 )
goto USAGE ;
if ( ! line )
goto USAGE ;
two_arguments ( line , arg3 , sizeof ( arg3 ) , arg4 , sizeof ( arg4 ) ) ;
if ( ! * arg3 | | ! * arg4 )
goto USAGE ;
str_to_number ( empire , arg1 ) ;
str_to_number ( type , arg2 ) ;
str_to_number ( value , arg3 ) ;
value = MINMAX ( 0 , value , 1000 ) ;
str_to_number ( duration , arg4 ) ;
if ( empire < 0 | | 3 < empire )
goto USAGE ;
if ( type < 1 | | 4 < type )
goto USAGE ;
if ( value < 0 )
goto USAGE ;
if ( duration < 0 )
goto USAGE ;
// <20> ð<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
duration = duration * ( 60 * 60 ) ;
sys_log ( 0 , " _give_empire_privileage(empire=%d, type=%d, value=%d, duration=%d) by command " ,
empire , type , value , duration ) ;
CPrivManager : : instance ( ) . RequestGiveEmpirePriv ( empire , type , value , duration ) ;
return ;
USAGE :
ch - > ChatPacket ( CHAT_TYPE_INFO , " usage : priv_empire <empire> <type> <value> <duration> " ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " <empire> 0 - 3 (0==all) " ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " <type> 1:item_drop, 2:gold_drop, 3:gold10_drop, 4:exp " ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " <value> percent " ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " <duration> hour " ) ;
}
/**
* @ version 05 / 06 / 08 Bang2ni - <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> <EFBFBD> ȵ <EFBFBD> . )
* quest / priv_guild . quest <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ũ <EFBFBD> <EFBFBD> Ʈ <EFBFBD> о <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
*/
ACMD ( do_priv_guild )
{
static const char msg [ ] = { ' \0 ' } ;
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( * arg1 )
{
CGuild * g = CGuildManager : : instance ( ) . FindGuildByName ( arg1 ) ;
if ( ! g )
{
DWORD guild_id = 0 ;
str_to_number ( guild_id , arg1 ) ;
g = CGuildManager : : instance ( ) . FindGuild ( guild_id ) ;
}
if ( ! g )
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <20> ̸<EFBFBD> <20> Ǵ<EFBFBD> <20> <> ȣ <EFBFBD> <C8A3> <20> <> <EFBFBD> 尡 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> ." ) ) ;
else
{
char buf [ 1024 + 1 ] ;
snprintf ( buf , sizeof ( buf ) , msg , g - > GetID ( ) ) ;
using namespace quest ;
PC * pc = CQuestManager : : instance ( ) . GetPC ( ch - > GetPlayerID ( ) ) ;
QuestState qs = CQuestManager : : instance ( ) . OpenState ( " ADMIN_QUEST " , QUEST_FISH_REFINE_STATE_INDEX ) ;
luaL_loadbuffer ( qs . co , buf , strlen ( buf ) , " ADMIN_QUEST " ) ;
pc - > SetQuest ( " ADMIN_QUEST " , qs ) ;
QuestState & rqs = * pc - > GetRunningQuestState ( ) ;
if ( ! CQuestManager : : instance ( ) . RunState ( rqs ) )
{
CQuestManager : : instance ( ) . CloseState ( rqs ) ;
pc - > EndRunning ( ) ;
return ;
}
}
}
}
ACMD ( do_mount_test )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( * arg1 )
{
DWORD vnum = 0 ;
str_to_number ( vnum , arg1 ) ;
ch - > MountVnum ( vnum ) ;
}
}
ACMD ( do_observer )
{
ch - > SetObserverMode ( ! ch - > IsObserverMode ( ) ) ;
}
ACMD ( do_socket_item )
{
char arg1 [ 256 ] , arg2 [ 256 ] ;
two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
if ( * arg1 )
{
DWORD dwVnum = 0 ;
str_to_number ( dwVnum , arg1 ) ;
int iSocketCount = 0 ;
str_to_number ( iSocketCount , arg2 ) ;
if ( ! iSocketCount | | iSocketCount > = ITEM_SOCKET_MAX_NUM )
iSocketCount = 3 ;
if ( ! dwVnum )
{
if ( ! ITEM_MANAGER : : instance ( ) . GetVnum ( arg1 , dwVnum ) )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " #%d item not exist by that vnum. " , dwVnum ) ;
return ;
}
}
LPITEM item = ch - > AutoGiveItem ( dwVnum ) ;
if ( item )
{
for ( int i = 0 ; i < iSocketCount ; + + i )
item - > SetSocket ( i , 1 ) ;
}
else
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " #%d cannot create item. " , dwVnum ) ;
}
}
}
ACMD ( do_xmas )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
int flag = 0 ;
if ( * arg1 )
str_to_number ( flag , arg1 ) ;
switch ( subcmd )
{
case SCMD_XMAS_SNOW :
quest : : CQuestManager : : instance ( ) . RequestSetEventFlag ( " xmas_snow " , flag ) ;
break ;
case SCMD_XMAS_BOOM :
quest : : CQuestManager : : instance ( ) . RequestSetEventFlag ( " xmas_boom " , flag ) ;
break ;
case SCMD_XMAS_SANTA :
quest : : CQuestManager : : instance ( ) . RequestSetEventFlag ( " xmas_santa " , flag ) ;
break ;
}
}
// BLOCK_CHAT
ACMD ( do_block_chat_list )
{
// GM<47> <4D> <20> ƴϰų<CFB0> block_chat_privilege<67> <65> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ɾ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ұ<EFBFBD>
if ( ! ch | | ( ch - > GetGMLevel ( ) < GM_HIGH_WIZARD & & ch - > GetQuestFlag ( " chat_privilege.block " ) < = 0 ) )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ɾ<EFBFBD> <C9BE> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> " ) ) ;
return ;
}
DBManager : : instance ( ) . ReturnQuery ( QID_BLOCK_CHAT_LIST , ch - > GetPlayerID ( ) , NULL ,
" SELECT p.name, a.lDuration FROM affect%s as a, player%s as p WHERE a.bType = %d AND a.dwPID = p.id " ,
get_table_postfix ( ) , get_table_postfix ( ) , AFFECT_BLOCK_CHAT ) ;
}
ACMD ( do_vote_block_chat )
{
return ;
char arg1 [ 256 ] ;
argument = one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( ! * arg1 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Usage: vote_block_chat <name> " ) ;
return ;
}
const char * name = arg1 ;
long lBlockDuration = 10 ;
sys_log ( 0 , " vote_block_chat %s %d " , name , lBlockDuration ) ;
LPCHARACTER tch = CHARACTER_MANAGER : : instance ( ) . FindPC ( name ) ;
if ( ! tch )
{
CCI * pkCCI = P2P_MANAGER : : instance ( ) . Find ( name ) ;
if ( pkCCI )
{
TPacketGGBlockChat p ;
p . bHeader = HEADER_GG_BLOCK_CHAT ;
2022-03-05 19:59:39 +02:00
strncpy ( p . szName , name , sizeof ( p . szName ) ) ;
2022-03-05 12:44:06 +02:00
p . lBlockDuration = lBlockDuration ;
P2P_MANAGER : : instance ( ) . Send ( & p , sizeof ( TPacketGGBlockChat ) ) ;
}
else
{
TPacketBlockChat p ;
2022-03-05 19:59:39 +02:00
strncpy ( p . szName , name , sizeof ( p . szName ) ) ;
2022-03-05 12:44:06 +02:00
p . lDuration = lBlockDuration ;
db_clientdesc - > DBPacket ( HEADER_GD_BLOCK_CHAT , ch ? ch - > GetDesc ( ) - > GetHandle ( ) : 0 , & p , sizeof ( p ) ) ;
}
if ( ch )
ch - > ChatPacket ( CHAT_TYPE_INFO , " Chat block requested. " ) ;
return ;
}
if ( tch & & ch ! = tch )
tch - > AddAffect ( AFFECT_BLOCK_CHAT , POINT_NONE , 0 , AFF_NONE , lBlockDuration , 0 , true ) ;
}
ACMD ( do_block_chat )
{
// GM<47> <4D> <20> ƴϰų<CFB0> block_chat_privilege<67> <65> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ɾ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ұ<EFBFBD>
if ( ch & & ( ch - > GetGMLevel ( ) < GM_HIGH_WIZARD & & ch - > GetQuestFlag ( " chat_privilege.block " ) < = 0 ) )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ɾ<EFBFBD> <C9BE> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> " ) ) ;
return ;
}
char arg1 [ 256 ] ;
argument = one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( ! * arg1 )
{
if ( ch )
ch - > ChatPacket ( CHAT_TYPE_INFO , " Usage: block_chat <name> <time> (0 to off) " ) ;
return ;
}
const char * name = arg1 ;
long lBlockDuration = parse_time_str ( argument ) ;
if ( lBlockDuration < 0 )
{
if ( ch )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " <EFBFBD> ߸<EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <C3B0> Դϴ<D4B4> . h, m, s<> <73> <20> ٿ<EFBFBD> <D9BF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ֽʽ ÿ<CABD> ." ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " <EFBFBD> <EFBFBD> ) 10s, 10m, 1m 30s" ) ;
}
return ;
}
sys_log ( 0 , " BLOCK CHAT %s %d " , name , lBlockDuration ) ;
LPCHARACTER tch = CHARACTER_MANAGER : : instance ( ) . FindPC ( name ) ;
if ( ! tch )
{
CCI * pkCCI = P2P_MANAGER : : instance ( ) . Find ( name ) ;
if ( pkCCI )
{
TPacketGGBlockChat p ;
p . bHeader = HEADER_GG_BLOCK_CHAT ;
2022-03-05 19:59:39 +02:00
strncpy ( p . szName , name , sizeof ( p . szName ) ) ;
2022-03-05 12:44:06 +02:00
p . lBlockDuration = lBlockDuration ;
P2P_MANAGER : : instance ( ) . Send ( & p , sizeof ( TPacketGGBlockChat ) ) ;
}
else
{
TPacketBlockChat p ;
2022-03-05 19:59:39 +02:00
strncpy ( p . szName , name , sizeof ( p . szName ) ) ;
2022-03-05 12:44:06 +02:00
p . lDuration = lBlockDuration ;
db_clientdesc - > DBPacket ( HEADER_GD_BLOCK_CHAT , ch ? ch - > GetDesc ( ) - > GetHandle ( ) : 0 , & p , sizeof ( p ) ) ;
}
if ( ch )
ch - > ChatPacket ( CHAT_TYPE_INFO , " Chat block requested. " ) ;
return ;
}
if ( tch & & ch ! = tch )
tch - > AddAffect ( AFFECT_BLOCK_CHAT , POINT_NONE , 0 , AFF_NONE , lBlockDuration , 0 , true ) ;
}
// END_OF_BLOCK_CHAT
// BUILD_BUILDING
ACMD ( do_build )
{
using namespace building ;
char arg1 [ 256 ] , arg2 [ 256 ] , arg3 [ 256 ] , arg4 [ 256 ] ;
const char * line = one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
BYTE GMLevel = ch - > GetGMLevel ( ) ;
CLand * pkLand = CManager : : instance ( ) . FindLand ( ch - > GetMapIndex ( ) , ch - > GetX ( ) , ch - > GetY ( ) ) ;
// NOTE: <20> <> <EFBFBD> <EFBFBD> üũ<C3BC> <C5A9> <EFBFBD> <EFBFBD> Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Բ<EFBFBD> <20> ϱ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
// <20> <EFBFBD> <DEBC> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
if ( ! pkLand )
{
sys_err ( " %s trying to build on not buildable area. " , ch - > GetName ( ) ) ;
return ;
}
if ( ! * arg1 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Invalid syntax: no command " ) ;
return ;
}
// <20> Ǽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> üũ
if ( GMLevel = = GM_PLAYER )
{
// <20> ÷<EFBFBD> <C3B7> ̾ <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ȯ<> <C8AE> <EFBFBD> ؾ<EFBFBD> <20> Ѵ <EFBFBD> .
if ( ( ! ch - > GetGuild ( ) | | ch - > GetGuild ( ) - > GetID ( ) ! = pkLand - > GetOwner ( ) ) )
{
sys_err ( " %s trying to build on not owned land. " , ch - > GetName ( ) ) ;
return ;
}
// <20> <> <EFBFBD> <EFBFBD> <20> 渶<EFBFBD> ΰ<EFBFBD> ?
if ( ch - > GetGuild ( ) - > GetMasterPID ( ) ! = ch - > GetPlayerID ( ) )
{
sys_err ( " %s trying to build while not the guild master. " , ch - > GetName ( ) ) ;
return ;
}
}
switch ( LOWER ( * arg1 ) )
{
case ' c ' :
{
// /build c vnum x y x_rot y_rot z_rot
char arg5 [ 256 ] , arg6 [ 256 ] ;
line = one_argument ( two_arguments ( line , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) , arg3 , sizeof ( arg3 ) ) ; // vnum x y
one_argument ( two_arguments ( line , arg4 , sizeof ( arg4 ) , arg5 , sizeof ( arg5 ) ) , arg6 , sizeof ( arg6 ) ) ; // x_rot y_rot z_rot
if ( ! * arg1 | | ! * arg2 | | ! * arg3 | | ! * arg4 | | ! * arg5 | | ! * arg6 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Invalid syntax " ) ;
return ;
}
DWORD dwVnum = 0 ;
str_to_number ( dwVnum , arg1 ) ;
using namespace building ;
const TObjectProto * t = CManager : : instance ( ) . GetObjectProto ( dwVnum ) ;
if ( ! t )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʴ<EFBFBD> <20> ǹ<EFBFBD> <C7B9> Դϴ<D4B4> ." ) ) ;
return ;
}
const DWORD BUILDING_MAX_PRICE = 100000000 ;
if ( t - > dwGroupVnum )
{
if ( pkLand - > FindObjectByGroup ( t - > dwGroupVnum ) )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ǹ<EFBFBD> <C7B9> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ֽ<EFBFBD> <D6BD> ϴ<EFBFBD> ." ) ) ;
return ;
}
}
// <20> ǹ<EFBFBD> <20> <> <EFBFBD> Ӽ<EFBFBD> üũ (<28> <> <20> ǹ<EFBFBD> <C7B9> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ־<EFBFBD> <D6BE> <EFBFBD> <EFBFBD> <EFBFBD> )
if ( t - > dwDependOnGroupVnum )
{
// const TObjectProto * dependent = CManager::instance().GetObjectProto(dwVnum);
// if (dependent)
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ִ°<D6B4> ?
if ( ! pkLand - > FindObjectByGroup ( t - > dwDependOnGroupVnum ) )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> Ǽ<EFBFBD> <EFBFBD> <EFBFBD> <20> ʿ<EFBFBD> <CABF> <EFBFBD> <20> ǹ<EFBFBD> <C7B9> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʽ <EFBFBD> <CABD> ϴ<EFBFBD> ." ) ) ;
return ;
}
}
}
if ( test_server | | GMLevel = = GM_PLAYER )
{
// GM<47> <4D> <20> ƴҰ<C6B4> <D2B0> 츸 (<28> <EFBFBD> <D7BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> GM<47> <4D> <20> Ҹ<EFBFBD> )
// <20> Ǽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> üũ
if ( t - > dwPrice > BUILDING_MAX_PRICE )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> ǹ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ̻<EFBFBD> <CCBB> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ǽ<EFBFBD> <20> ۾<EFBFBD> <DBBE> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ߽<EFBFBD> <DFBD> ϴ<EFBFBD> ." ) ) ;
return ;
}
if ( ch - > GetGold ( ) < ( int ) t - > dwPrice )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> Ǽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> մϴ<D5B4> ." ) ) ;
return ;
}
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> üũ
int i ;
for ( i = 0 ; i < OBJECT_MATERIAL_MAX_NUM ; + + i )
{
DWORD dwItemVnum = t - > kMaterials [ i ] . dwItemVnum ;
DWORD dwItemCount = t - > kMaterials [ i ] . dwCount ;
if ( dwItemVnum = = 0 )
break ;
if ( ( int ) dwItemCount > ch - > CountSpecifyItem ( dwItemVnum ) )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <EFBFBD> 簡 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ͽ<EFBFBD> <20> Ǽ<EFBFBD> <C7BC> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> ." ) ) ;
return ;
}
}
}
float x_rot = atof ( arg4 ) ;
float y_rot = atof ( arg5 ) ;
float z_rot = atof ( arg6 ) ;
// 20050811.myevan.<2E> ǹ<EFBFBD> ȸ<> <C8B8> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
/*
if ( x_rot ! = 0.0f | | y_rot ! = 0.0f | | z_rot ! = 0.0f )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " <EFBFBD> ǹ<EFBFBD> ȸ<> <C8B8> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʽ <EFBFBD> <CABD> ϴ<EFBFBD> " ) ;
return ;
}
*/
long map_x = 0 ;
str_to_number ( map_x , arg2 ) ;
long map_y = 0 ;
str_to_number ( map_y , arg3 ) ;
bool isSuccess = pkLand - > RequestCreateObject ( dwVnum ,
ch - > GetMapIndex ( ) ,
map_x ,
map_y ,
x_rot ,
y_rot ,
z_rot , true ) ;
if ( ! isSuccess )
{
if ( test_server )
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> ǹ<EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> ġ<EFBFBD> Դϴ<D4B4> ." ) ) ;
return ;
}
if ( test_server | | GMLevel = = GM_PLAYER )
// <20> Ǽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ҹ<EFBFBD> <D2B8> ϱ <EFBFBD> (<28> <EFBFBD> <D7BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> GM<47> <4D> <20> Ҹ<EFBFBD> )
{
// <20> Ǽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ҹ<EFBFBD>
ch - > PointChange ( POINT_GOLD , - t - > dwPrice ) ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϱ <EFBFBD>
{
int i ;
for ( i = 0 ; i < OBJECT_MATERIAL_MAX_NUM ; + + i )
{
DWORD dwItemVnum = t - > kMaterials [ i ] . dwItemVnum ;
DWORD dwItemCount = t - > kMaterials [ i ] . dwCount ;
if ( dwItemVnum = = 0 )
break ;
sys_log ( 0 , " BUILD: material %d %u %u " , i , dwItemVnum , dwItemCount ) ;
ch - > RemoveSpecifyItem ( dwItemVnum , dwItemCount ) ;
}
}
}
}
break ;
case ' d ' :
// build (d)elete ObjectID
{
one_argument ( line , arg1 , sizeof ( arg1 ) ) ;
if ( ! * arg1 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Invalid syntax " ) ;
return ;
}
DWORD vid = 0 ;
str_to_number ( vid , arg1 ) ;
pkLand - > RequestDeleteObjectByVID ( vid ) ;
}
break ;
// BUILD_WALL
// build w n/e/w/s
case ' w ' :
if ( GMLevel > GM_PLAYER )
{
int mapIndex = ch - > GetMapIndex ( ) ;
one_argument ( line , arg1 , sizeof ( arg1 ) ) ;
sys_log ( 0 , " guild.wall.build map[%d] direction[%s] " , mapIndex , arg1 ) ;
switch ( arg1 [ 0 ] )
{
case ' s ' :
pkLand - > RequestCreateWall ( mapIndex , 0.0f ) ;
break ;
case ' n ' :
pkLand - > RequestCreateWall ( mapIndex , 180.0f ) ;
break ;
case ' e ' :
pkLand - > RequestCreateWall ( mapIndex , 90.0f ) ;
break ;
case ' w ' :
pkLand - > RequestCreateWall ( mapIndex , 270.0f ) ;
break ;
default :
ch - > ChatPacket ( CHAT_TYPE_INFO , " guild.wall.build unknown_direction[%s] " , arg1 ) ;
sys_err ( " guild.wall.build unknown_direction[%s] " , arg1 ) ;
break ;
}
}
break ;
case ' e ' :
if ( GMLevel > GM_PLAYER )
{
pkLand - > RequestDeleteWall ( ) ;
}
break ;
case ' W ' :
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// build (w)all <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȣ <20> <> <EFBFBD> <EFBFBD> ũ<EFBFBD> <C5A9> <20> 빮<EFBFBD> <EBB9AE> <20> 빮<EFBFBD> <EBB9AE> <20> 빮<EFBFBD> <EBB9AE> <20> 빮<EFBFBD> <EBB9AE>
if ( GMLevel > GM_PLAYER )
{
int setID = 0 , wallSize = 0 ;
char arg5 [ 256 ] , arg6 [ 256 ] ;
line = two_arguments ( line , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
line = two_arguments ( line , arg3 , sizeof ( arg3 ) , arg4 , sizeof ( arg4 ) ) ;
two_arguments ( line , arg5 , sizeof ( arg5 ) , arg6 , sizeof ( arg6 ) ) ;
str_to_number ( setID , arg1 ) ;
str_to_number ( wallSize , arg2 ) ;
if ( setID ! = 14105 & & setID ! = 14115 & & setID ! = 14125 )
{
sys_log ( 0 , " BUILD_WALL: wrong wall set id %d " , setID ) ;
break ;
}
else
{
bool door_east = false ;
str_to_number ( door_east , arg3 ) ;
bool door_west = false ;
str_to_number ( door_west , arg4 ) ;
bool door_south = false ;
str_to_number ( door_south , arg5 ) ;
bool door_north = false ;
str_to_number ( door_north , arg6 ) ;
pkLand - > RequestCreateWallBlocks ( setID , ch - > GetMapIndex ( ) , wallSize , door_east , door_west , door_south , door_north ) ;
}
}
break ;
case ' E ' :
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// build (e)rase <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ID
if ( GMLevel > GM_PLAYER )
{
one_argument ( line , arg1 , sizeof ( arg1 ) ) ;
DWORD id = 0 ;
str_to_number ( id , arg1 ) ;
pkLand - > RequestDeleteWallBlocks ( id ) ;
}
break ;
default :
ch - > ChatPacket ( CHAT_TYPE_INFO , " Invalid command %s " , arg1 ) ;
break ;
}
}
// END_OF_BUILD_BUILDING
ACMD ( do_clear_quest )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( ! * arg1 )
return ;
quest : : PC * pPC = quest : : CQuestManager : : instance ( ) . GetPCForce ( ch - > GetPlayerID ( ) ) ;
pPC - > ClearQuest ( arg1 ) ;
}
ACMD ( do_horse_state )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Horse Information: " ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " Level %d " , ch - > GetHorseLevel ( ) ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " Health %d/%d (%d%%) " , ch - > GetHorseHealth ( ) , ch - > GetHorseMaxHealth ( ) , ch - > GetHorseHealth ( ) * 100 / ch - > GetHorseMaxHealth ( ) ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " Stam %d/%d (%d%%) " , ch - > GetHorseStamina ( ) , ch - > GetHorseMaxStamina ( ) , ch - > GetHorseStamina ( ) * 100 / ch - > GetHorseMaxStamina ( ) ) ;
}
ACMD ( do_horse_level )
{
char arg1 [ 256 ] = { 0 } ;
char arg2 [ 256 ] = { 0 } ;
LPCHARACTER victim ;
int level = 0 ;
two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
if ( ! * arg1 | | ! * arg2 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " usage : /horse_level <name> <level> " ) ;
return ;
}
victim = CHARACTER_MANAGER : : instance ( ) . FindPC ( arg1 ) ;
if ( NULL = = victim )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʴ<EFBFBD> ij<> <C4B3> <EFBFBD> <EFBFBD> <20> Դϴ<D4B4> ." ) ) ;
return ;
}
str_to_number ( level , arg2 ) ;
level = MINMAX ( 0 , level , HORSE_MAX_LEVEL ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " horse level set (%s: %d) " , victim - > GetName ( ) , level ) ;
victim - > SetHorseLevel ( level ) ;
victim - > ComputePoints ( ) ;
victim - > SkillLevelPacket ( ) ;
return ;
/*-----
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
int level = MINMAX ( 0 , atoi ( arg1 ) , HORSE_MAX_LEVEL ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " horse level set to %d. " , level ) ;
ch - > SetHorseLevel ( level ) ;
ch - > ComputePoints ( ) ;
ch - > SkillLevelPacket ( ) ;
return ;
- - - - - */
}
ACMD ( do_horse_ride )
{
if ( ch - > IsHorseRiding ( ) )
ch - > StopRiding ( ) ;
else
ch - > StartRiding ( ) ;
}
ACMD ( do_horse_summon )
{
ch - > HorseSummon ( true , true ) ;
}
ACMD ( do_horse_unsummon )
{
ch - > HorseSummon ( false , true ) ;
}
ACMD ( do_horse_set_stat )
{
char arg1 [ 256 ] , arg2 [ 256 ] ;
two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
if ( * arg1 & & * arg2 )
{
int hp = 0 ;
str_to_number ( hp , arg1 ) ;
int stam = 0 ;
str_to_number ( stam , arg2 ) ;
ch - > UpdateHorseHealth ( hp - ch - > GetHorseHealth ( ) ) ;
ch - > UpdateHorseStamina ( stam - ch - > GetHorseStamina ( ) ) ;
}
else
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Usage : /horse_set_stat <hp> <stamina> " ) ;
}
}
ACMD ( do_save_attribute_to_image ) // command "/saveati" for alias
{
char szFileName [ 256 ] ;
char szMapIndex [ 256 ] ;
two_arguments ( argument , szMapIndex , sizeof ( szMapIndex ) , szFileName , sizeof ( szFileName ) ) ;
if ( ! * szMapIndex | | ! * szFileName )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Syntax: /saveati <map_index> <filename> " ) ;
return ;
}
long lMapIndex = 0 ;
str_to_number ( lMapIndex , szMapIndex ) ;
if ( SECTREE_MANAGER : : instance ( ) . SaveAttributeToImage ( lMapIndex , szFileName ) )
ch - > ChatPacket ( CHAT_TYPE_INFO , " Save done. " ) ;
else
ch - > ChatPacket ( CHAT_TYPE_INFO , " Save failed. " ) ;
}
ACMD ( do_affect_remove )
{
char arg1 [ 256 ] ;
char arg2 [ 256 ] ;
two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
if ( ! * arg1 | | ! * arg2 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Syntax: /affect_remove <player name> " ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " Syntax: /affect_remove <type> <point> " ) ;
LPCHARACTER tch = ch ;
if ( * arg1 )
if ( ! ( tch = CHARACTER_MANAGER : : instance ( ) . FindPC ( arg1 ) ) )
tch = ch ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " -- Affect List of %s ------------------------------- " , tch - > GetName ( ) ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " Type Point Modif Duration Flag " ) ;
const std : : list < CAffect * > & cont = tch - > GetAffectContainer ( ) ;
itertype ( cont ) it = cont . begin ( ) ;
while ( it ! = cont . end ( ) )
{
CAffect * pkAff = * it + + ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " %4d %5d %5d %8d %u " ,
pkAff - > dwType , pkAff - > bApplyOn , pkAff - > lApplyValue , pkAff - > lDuration , pkAff - > dwFlag ) ;
}
return ;
}
bool removed = false ;
CAffect * af ;
DWORD type = 0 ;
str_to_number ( type , arg1 ) ;
BYTE point = 0 ;
str_to_number ( point , arg2 ) ;
while ( ( af = ch - > FindAffect ( type , point ) ) )
{
ch - > RemoveAffect ( af ) ;
removed = true ;
}
if ( removed )
ch - > ChatPacket ( CHAT_TYPE_INFO , " Affect successfully removed. " ) ;
else
ch - > ChatPacket ( CHAT_TYPE_INFO , " Not affected by that type and point. " ) ;
}
ACMD ( do_change_attr )
{
LPITEM weapon = ch - > GetWear ( WEAR_WEAPON ) ;
if ( weapon )
weapon - > ChangeAttribute ( ) ;
}
ACMD ( do_add_attr )
{
LPITEM weapon = ch - > GetWear ( WEAR_WEAPON ) ;
if ( weapon )
weapon - > AddAttribute ( ) ;
}
ACMD ( do_add_socket )
{
LPITEM weapon = ch - > GetWear ( WEAR_WEAPON ) ;
if ( weapon )
weapon - > AddSocket ( ) ;
}
ACMD ( do_show_arena_list )
{
CArenaManager : : instance ( ) . SendArenaMapListTo ( ch ) ;
}
ACMD ( do_end_all_duel )
{
CArenaManager : : instance ( ) . EndAllDuel ( ) ;
}
ACMD ( do_end_duel )
{
char szName [ 256 ] ;
one_argument ( argument , szName , sizeof ( szName ) ) ;
LPCHARACTER pChar = CHARACTER_MANAGER : : instance ( ) . FindPC ( szName ) ;
if ( pChar = = NULL )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʴ<EFBFBD> ij<> <C4B3> <EFBFBD> <EFBFBD> <20> Դϴ<D4B4> ." ) ) ;
return ;
}
if ( CArenaManager : : instance ( ) . EndDuel ( pChar - > GetPlayerID ( ) ) = = false )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> " ) ) ;
}
else
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> " ) ) ;
}
}
ACMD ( do_duel )
{
char szName1 [ 256 ] ;
char szName2 [ 256 ] ;
char szSet [ 256 ] ;
char szMinute [ 256 ] ;
int set = 0 ;
int minute = 0 ;
argument = two_arguments ( argument , szName1 , sizeof ( szName1 ) , szName2 , sizeof ( szName2 ) ) ;
two_arguments ( argument , szSet , sizeof ( szSet ) , szMinute , sizeof ( szMinute ) ) ;
str_to_number ( set , szSet ) ;
if ( set < 0 ) set = 1 ;
if ( set > 5 ) set = 5 ;
if ( ! str_to_number ( minute , szMinute ) )
{
// ij<> <C4B3> <EFBFBD> ٴ<EFBFBD> <20> ⺻ 10<31> <30> .
if ( LC_IsCanada ( ) = = true )
{
minute = 10 ;
}
else
{
minute = 5 ;
}
}
if ( minute < 5 )
minute = 5 ;
LPCHARACTER pChar1 = CHARACTER_MANAGER : : instance ( ) . FindPC ( szName1 ) ;
LPCHARACTER pChar2 = CHARACTER_MANAGER : : instance ( ) . FindPC ( szName2 ) ;
if ( pChar1 ! = NULL & & pChar2 ! = NULL )
{
pChar1 - > RemoveGoodAffect ( ) ;
pChar2 - > RemoveGoodAffect ( ) ;
pChar1 - > RemoveBadAffect ( ) ;
pChar2 - > RemoveBadAffect ( ) ;
LPPARTY pParty = pChar1 - > GetParty ( ) ;
if ( pParty ! = NULL )
{
if ( pParty - > GetMemberCount ( ) = = 2 )
{
CPartyManager : : instance ( ) . DeleteParty ( pParty ) ;
}
else
{
pChar1 - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <<3C> <> Ƽ > <20> <> Ƽ <EFBFBD> <C6BC> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̽<EFBFBD> <CCBD> ϴ<EFBFBD> . " ) ) ;
pParty - > Quit ( pChar1 - > GetPlayerID ( ) ) ;
}
}
pParty = pChar2 - > GetParty ( ) ;
if ( pParty ! = NULL )
{
if ( pParty - > GetMemberCount ( ) = = 2 )
{
CPartyManager : : instance ( ) . DeleteParty ( pParty ) ;
}
else
{
pChar2 - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <<3C> <> Ƽ > <20> <> Ƽ <EFBFBD> <C6BC> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̽<EFBFBD> <CCBD> ϴ<EFBFBD> . " ) ) ;
pParty - > Quit ( pChar2 - > GetPlayerID ( ) ) ;
}
}
if ( CArenaManager : : instance ( ) . StartDuel ( pChar1 , pChar2 , set , minute ) = = true )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <C7BE> <EFBFBD> <EFBFBD> ϴ<EFBFBD> ." ) ) ;
}
else
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ۿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ֽ<EFBFBD> <D6BD> ϴ<EFBFBD> ." ) ) ;
}
}
else
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> ." ) ) ;
}
}
ACMD ( do_stat_plus_amount )
{
char szPoint [ 256 ] ;
one_argument ( argument , szPoint , sizeof ( szPoint ) ) ;
if ( * szPoint = = ' \0 ' )
return ;
if ( ch - > IsPolymorphed ( ) )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> а <EFBFBD> <20> ߿<EFBFBD> <DFBF> <EFBFBD> <20> ɷ<EFBFBD> <C9B7> <EFBFBD> <20> ø<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> ." ) ) ;
return ;
}
int nRemainPoint = ch - > GetPoint ( POINT_STAT ) ;
if ( nRemainPoint < = 0 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> ." ) ) ;
return ;
}
int nPoint = 0 ;
str_to_number ( nPoint , szPoint ) ;
if ( nRemainPoint < nPoint )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> ." ) ) ;
return ;
}
if ( nPoint < 0 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ߸<EFBFBD> <20> Է<EFBFBD> <D4B7> Ͽ<EFBFBD> <CFBF> <EFBFBD> <EFBFBD> ϴ<EFBFBD> ." ) ) ;
return ;
}
switch ( subcmd )
{
case POINT_HT : // ü<> <C3BC>
if ( nPoint + ch - > GetPoint ( POINT_HT ) > 90 )
{
nPoint = 90 - ch - > GetPoint ( POINT_HT ) ;
}
break ;
case POINT_IQ : // <20> <> <EFBFBD> <EFBFBD>
if ( nPoint + ch - > GetPoint ( POINT_IQ ) > 90 )
{
nPoint = 90 - ch - > GetPoint ( POINT_IQ ) ;
}
break ;
case POINT_ST : // <20> ٷ<EFBFBD>
if ( nPoint + ch - > GetPoint ( POINT_ST ) > 90 )
{
nPoint = 90 - ch - > GetPoint ( POINT_ST ) ;
}
break ;
case POINT_DX : // <20> <> ø
if ( nPoint + ch - > GetPoint ( POINT_DX ) > 90 )
{
nPoint = 90 - ch - > GetPoint ( POINT_DX ) ;
}
break ;
default :
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <EFBFBD> ɾ<EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ŀ<> ǵ尡 <20> ߸<EFBFBD> <20> Ǿ<EFBFBD> <C7BE> <EFBFBD> <EFBFBD> ϴ<EFBFBD> ." ) ) ;
return ;
break ;
}
if ( nPoint ! = 0 )
{
ch - > SetRealPoint ( subcmd , ch - > GetRealPoint ( subcmd ) + nPoint ) ;
ch - > SetPoint ( subcmd , ch - > GetPoint ( subcmd ) + nPoint ) ;
ch - > ComputePoints ( ) ;
ch - > PointChange ( subcmd , 0 ) ;
ch - > PointChange ( POINT_STAT , - nPoint ) ;
ch - > ComputePoints ( ) ;
}
}
struct tTwoPID
{
int pid1 ;
int pid2 ;
} ;
ACMD ( do_break_marriage )
{
char arg1 [ 256 ] , arg2 [ 256 ] ;
two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
tTwoPID pids = { 0 , 0 } ;
str_to_number ( pids . pid1 , arg1 ) ;
str_to_number ( pids . pid2 , arg2 ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> ÷<EFBFBD> <EFBFBD> ̾<EFBFBD> %d <20> <> <20> ÷<EFBFBD> <C3B7> ̾<EFBFBD> %d<> <64> <20> <> ȥ<EFBFBD> <C8A5> ŵ<EFBFBD> ϴ<EFBFBD> .." ) , pids . pid1 , pids . pid2 ) ;
db_clientdesc - > DBPacket ( HEADER_GD_BREAK_MARRIAGE , 0 , & pids , sizeof ( pids ) ) ;
}
ACMD ( do_effect )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
int effect_type = 0 ;
str_to_number ( effect_type , arg1 ) ;
ch - > EffectPacket ( effect_type ) ;
}
struct FCountInMap
{
int m_Count [ 4 ] ;
FCountInMap ( ) { memset ( m_Count , 0 , sizeof ( int ) * 4 ) ; }
void operator ( ) ( LPENTITY ent )
{
if ( ent - > IsType ( ENTITY_CHARACTER ) )
{
LPCHARACTER ch = ( LPCHARACTER ) ent ;
if ( ch & & ch - > IsPC ( ) )
+ + m_Count [ ch - > GetEmpire ( ) ] ;
}
}
int GetCount ( BYTE bEmpire ) { return m_Count [ bEmpire ] ; }
} ;
ACMD ( do_threeway_war_info )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> " ) ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> %d <20> <> <EFBFBD> <EFBFBD> %d %d %d" ) , GetSungziMapIndex ( ) , GetPassMapIndex ( 1 ) , GetPassMapIndex ( 2 ) , GetPassMapIndex ( 3 ) ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " ThreewayPhase %d " , CThreeWayWar : : instance ( ) . GetRegenFlag ( ) ) ;
for ( int n = 1 ; n < 4 ; + + n )
{
LPSECTREE_MAP pSecMap = SECTREE_MANAGER : : instance ( ) . GetMap ( GetSungziMapIndex ( ) ) ;
FCountInMap c ;
if ( pSecMap )
{
pSecMap - > for_each ( c ) ;
}
ch - > ChatPacket ( CHAT_TYPE_INFO , " %s killscore %d usercount %d " ,
EMPIRE_NAME ( n ) ,
CThreeWayWar : : instance ( ) . GetKillScore ( n ) ,
c . GetCount ( n ) ) ;
}
}
ACMD ( do_threeway_war_myinfo )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> Ÿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ) ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " Deadcount %d " ,
CThreeWayWar : : instance ( ) . GetReviveTokenForPlayer ( ch - > GetPlayerID ( ) ) ) ;
}
ACMD ( do_rmcandidacy )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( ! * arg1 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Usage: rmcandidacy <name> " ) ;
return ;
}
LPCHARACTER tch = CHARACTER_MANAGER : : instance ( ) . FindPC ( arg1 ) ;
if ( ! tch )
{
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 ) ;
return ;
}
}
}
db_clientdesc - > DBPacket ( HEADER_GD_RMCANDIDACY , 0 , NULL , 32 ) ;
db_clientdesc - > Packet ( arg1 , 32 ) ;
}
ACMD ( do_setmonarch )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( ! * arg1 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Usage: setmonarch <name> " ) ;
return ;
}
db_clientdesc - > DBPacket ( HEADER_GD_SETMONARCH , 0 , NULL , 32 ) ;
db_clientdesc - > Packet ( arg1 , 32 ) ;
}
ACMD ( do_rmmonarch )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( ! * arg1 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Usage: rmmonarch <name> " ) ;
return ;
}
db_clientdesc - > DBPacket ( HEADER_GD_RMMONARCH , 0 , NULL , 32 ) ;
db_clientdesc - > Packet ( arg1 , 32 ) ;
}
ACMD ( do_check_monarch_money )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( ! * arg1 )
return ;
int empire = 0 ;
str_to_number ( empire , arg1 ) ;
int NationMoney = CMonarch : : instance ( ) . GetMoney ( empire ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : %d <20> <> " , NationMoney ) ;
}
ACMD ( do_reset_subskill )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( ! * arg1 )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Usage: reset_subskill <name> " ) ;
return ;
}
LPCHARACTER tch = CHARACTER_MANAGER : : instance ( ) . FindPC ( arg1 ) ;
if ( tch = = NULL )
return ;
tch - > ClearSubSkill ( ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " Subskill of [%s] was reset " , tch - > GetName ( ) ) ;
}
ACMD ( do_siege )
{
char arg1 [ 256 ] , arg2 [ 256 ] ;
two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
int empire = strtol ( arg1 , NULL , 10 ) ;
int tower_count = strtol ( arg2 , NULL , 10 ) ;
if ( empire = = 0 ) empire = number ( 1 , 3 ) ;
if ( tower_count < 5 | | tower_count > 10 ) tower_count = number ( 5 , 10 ) ;
TPacketGGSiege packet ;
packet . bHeader = HEADER_GG_SIEGE ;
packet . bEmpire = empire ;
packet . bTowerCount = tower_count ;
P2P_MANAGER : : instance ( ) . Send ( & packet , sizeof ( TPacketGGSiege ) ) ;
switch ( castle_siege ( empire , tower_count ) )
{
case 0 :
ch - > ChatPacket ( CHAT_TYPE_INFO , " SIEGE FAILED " ) ;
break ;
case 1 :
ch - > ChatPacket ( CHAT_TYPE_INFO , " SIEGE START Empire(%d) Tower(%d) " , empire , tower_count ) ;
break ;
case 2 :
ch - > ChatPacket ( CHAT_TYPE_INFO , " SIEGE END " ) ;
break ;
}
}
ACMD ( do_temp )
{
if ( false = = test_server )
return ;
char arg1 [ 256 ] , arg2 [ 256 ] ;
two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) ;
if ( 0 = = arg1 [ 0 ] | | 0 = = arg2 [ 0 ] )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Usage: empire money " ) ;
return ;
}
int empire = 0 ;
str_to_number ( empire , arg1 ) ;
int money = 0 ;
str_to_number ( money , arg2 ) ;
CMonarch : : instance ( ) . SendtoDBAddMoney ( money , empire , ch ) ;
}
ACMD ( do_frog )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( 0 = = arg1 [ 0 ] )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Usage: empire(1, 2, 3) " ) ;
return ;
}
int empire = 0 ;
str_to_number ( empire , arg1 ) ;
switch ( empire )
{
case 1 :
case 2 :
case 3 :
if ( IS_CASTLE_MAP ( ch - > GetMapIndex ( ) ) )
{
castle_spawn_frog ( empire ) ;
castle_save ( ) ;
}
else
ch - > ChatPacket ( CHAT_TYPE_INFO , " You must spawn frog in castle " ) ;
break ;
default :
ch - > ChatPacket ( CHAT_TYPE_INFO , " Usage: empire(1, 2, 3) " ) ;
break ;
}
}
ACMD ( do_flush )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( 0 = = arg1 [ 0 ] )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " usage : /flush player_id " ) ;
return ;
}
DWORD pid = ( DWORD ) strtoul ( arg1 , NULL , 10 ) ;
db_clientdesc - > DBPacketHeader ( HEADER_GD_FLUSH_CACHE , 0 , sizeof ( DWORD ) ) ;
db_clientdesc - > Packet ( & pid , sizeof ( DWORD ) ) ;
}
ACMD ( do_eclipse )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
if ( strtol ( arg1 , NULL , 10 ) = = 1 )
{
quest : : CQuestManager : : instance ( ) . RequestSetEventFlag ( " eclipse " , 1 ) ;
}
else
{
quest : : CQuestManager : : instance ( ) . RequestSetEventFlag ( " eclipse " , 0 ) ;
}
}
ACMD ( do_weeklyevent )
{
char arg1 [ 256 ] ;
int empire = 0 ;
if ( CBattleArena : : instance ( ) . IsRunning ( ) = = false )
{
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
empire = strtol ( arg1 , NULL , 10 ) ;
if ( empire = = 1 | | empire = = 2 | | empire = = 3 )
{
CBattleArena : : instance ( ) . Start ( empire ) ;
}
else
{
CBattleArena : : instance ( ) . Start ( rand ( ) % 3 + 1 ) ;
}
ch - > ChatPacket ( CHAT_TYPE_INFO , " Weekly Event Start " ) ;
}
else
{
CBattleArena : : instance ( ) . ForceEnd ( ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " Weekly Event End " ) ;
}
}
ACMD ( do_event_helper )
{
char arg1 [ 256 ] ;
int mode = 0 ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
str_to_number ( mode , arg1 ) ;
if ( mode = = 1 )
{
xmas : : SpawnEventHelper ( true ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " Event Helper Spawn " ) ;
}
else
{
xmas : : SpawnEventHelper ( false ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " Event Helper Delete " ) ;
}
}
struct FMobCounter
{
int nCount ;
void operator ( ) ( LPENTITY ent )
{
if ( ent - > IsType ( ENTITY_CHARACTER ) )
{
LPCHARACTER pChar = static_cast < LPCHARACTER > ( ent ) ;
if ( pChar - > IsMonster ( ) = = true | | pChar - > IsStone ( ) )
{
nCount + + ;
}
}
}
} ;
ACMD ( do_get_mob_count )
{
LPSECTREE_MAP pSectree = SECTREE_MANAGER : : instance ( ) . GetMap ( ch - > GetMapIndex ( ) ) ;
if ( pSectree = = NULL )
return ;
FMobCounter f ;
f . nCount = 0 ;
pSectree - > for_each ( f ) ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " MapIndex: %d MobCount %d " , ch - > GetMapIndex ( ) , f . nCount ) ;
}
ACMD ( do_clear_land )
{
const building : : CLand * pLand = building : : CManager : : instance ( ) . FindLand ( ch - > GetMapIndex ( ) , ch - > GetX ( ) , ch - > GetY ( ) ) ;
if ( NULL = = pLand )
{
return ;
}
ch - > ChatPacket ( CHAT_TYPE_INFO , " Guild Land(%d) Cleared " , pLand - > GetID ( ) ) ;
building : : CManager : : instance ( ) . ClearLand ( pLand - > GetID ( ) ) ;
}
ACMD ( do_special_item )
{
ITEM_MANAGER : : instance ( ) . ConvSpecialDropItemFile ( ) ;
}
ACMD ( do_set_stat )
{
char szName [ 256 ] ;
char szChangeAmount [ 256 ] ;
two_arguments ( argument , szName , sizeof ( szName ) , szChangeAmount , sizeof ( szChangeAmount ) ) ;
if ( * szName = = NULL | | * szChangeAmount = = ' \0 ' )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Invalid argument. " ) ;
return ;
}
LPCHARACTER tch = CHARACTER_MANAGER : : instance ( ) . FindPC ( szName ) ;
if ( ! tch )
{
CCI * pkCCI = P2P_MANAGER : : instance ( ) . Find ( szName ) ;
if ( pkCCI )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Cannot find player(%s). %s is not in your game server. " , szName , szName ) ;
return ;
}
else
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " Cannot find player(%s). Perhaps %s doesn't login or exist. " , szName , szName ) ;
return ;
}
}
else
{
if ( tch - > IsPolymorphed ( ) )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> а <EFBFBD> <20> ߿<EFBFBD> <DFBF> <EFBFBD> <20> ɷ<EFBFBD> <C9B7> <EFBFBD> <20> ø<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> ." ) ) ;
return ;
}
if ( subcmd ! = POINT_HT & & subcmd ! = POINT_IQ & & subcmd ! = POINT_ST & & subcmd ! = POINT_DX )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <EFBFBD> ɾ<EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ŀ<> ǵ尡 <20> ߸<EFBFBD> <20> Ǿ<EFBFBD> <C7BE> <EFBFBD> <EFBFBD> ϴ<EFBFBD> ." ) ) ;
return ;
}
int nRemainPoint = tch - > GetPoint ( POINT_STAT ) ;
int nCurPoint = tch - > GetRealPoint ( subcmd ) ;
int nChangeAmount = 0 ;
str_to_number ( nChangeAmount , szChangeAmount ) ;
int nPoint = nCurPoint + nChangeAmount ;
int n ;
switch ( subcmd )
{
case POINT_HT :
if ( nPoint < JobInitialPoints [ tch - > GetJob ( ) ] . ht )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " Cannot set stat under initial stat. " ) ) ;
return ;
}
n = 0 ;
break ;
case POINT_IQ :
if ( nPoint < JobInitialPoints [ tch - > GetJob ( ) ] . iq )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " Cannot set stat under initial stat. " ) ) ;
return ;
}
n = 1 ;
break ;
case POINT_ST :
if ( nPoint < JobInitialPoints [ tch - > GetJob ( ) ] . st )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " Cannot set stat under initial stat. " ) ) ;
return ;
}
n = 2 ;
break ;
case POINT_DX :
if ( nPoint < JobInitialPoints [ tch - > GetJob ( ) ] . dx )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " Cannot set stat under initial stat. " ) ) ;
return ;
}
n = 3 ;
break ;
}
if ( nPoint > 90 )
{
nChangeAmount - = nPoint - 90 ;
nPoint = 90 ;
}
if ( nRemainPoint < nChangeAmount )
{
ch - > ChatPacket ( CHAT_TYPE_INFO , LC_TEXT ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> ." ) ) ;
return ;
}
tch - > SetRealPoint ( subcmd , nPoint ) ;
tch - > SetPoint ( subcmd , tch - > GetPoint ( subcmd ) + nChangeAmount ) ;
tch - > ComputePoints ( ) ;
tch - > PointChange ( subcmd , 0 ) ;
tch - > PointChange ( POINT_STAT , - nChangeAmount ) ;
tch - > ComputePoints ( ) ;
const char * stat_name [ 4 ] = { " con " , " int " , " str " , " dex " } ;
ch - > ChatPacket ( CHAT_TYPE_INFO , " %s's %s change %d to %d " , szName , stat_name [ n ] , nCurPoint , nPoint ) ;
}
}
ACMD ( do_get_item_id_list )
{
for ( int i = 0 ; i < INVENTORY_AND_EQUIP_SLOT_MAX ; i + + )
{
LPITEM item = ch - > GetInventoryItem ( i ) ;
if ( item ! = NULL )
ch - > ChatPacket ( CHAT_TYPE_INFO , " cell : %d, name : %s, id : %d " , item - > GetCell ( ) , item - > GetName ( ) , item - > GetID ( ) ) ;
}
}
ACMD ( do_set_socket )
{
char arg1 [ 256 ] ;
char arg2 [ 256 ] ;
char arg3 [ 256 ] ;
one_argument ( two_arguments ( argument , arg1 , sizeof ( arg1 ) , arg2 , sizeof ( arg2 ) ) , arg3 , sizeof ( arg3 ) ) ;
int item_id , socket_num , value ;
if ( ! str_to_number ( item_id , arg1 ) | | ! str_to_number ( socket_num , arg2 ) | | ! str_to_number ( value , arg3 ) )
return ;
LPITEM item = ITEM_MANAGER : : instance ( ) . Find ( item_id ) ;
if ( item )
item - > SetSocket ( socket_num , value ) ;
}
ACMD ( do_can_dead )
{
if ( subcmd )
ch - > SetArmada ( ) ;
else
ch - > ResetArmada ( ) ;
}
ACMD ( do_full_set )
{
extern void do_all_skill_master ( LPCHARACTER ch , const char * argument , int cmd , int subcmd ) ;
do_all_skill_master ( ch , NULL , 0 , 0 ) ;
extern void do_item_full_set ( LPCHARACTER ch , const char * argument , int cmd , int subcmd ) ;
do_item_full_set ( ch , NULL , 0 , 0 ) ;
extern void do_attr_full_set ( LPCHARACTER ch , const char * argument , int cmd , int subcmd ) ;
do_attr_full_set ( ch , NULL , 0 , 0 ) ;
}
ACMD ( do_all_skill_master )
{
ch - > SetHorseLevel ( SKILL_MAX_LEVEL ) ;
for ( int i = 0 ; i < SKILL_MAX_NUM ; i + + )
{
if ( true = = ch - > CanUseSkill ( i ) )
{
ch - > SetSkillLevel ( i , SKILL_MAX_LEVEL ) ;
}
else
{
switch ( i )
{
case SKILL_HORSE_WILDATTACK :
case SKILL_HORSE_CHARGE :
case SKILL_HORSE_ESCAPE :
case SKILL_HORSE_WILDATTACK_RANGE :
ch - > SetSkillLevel ( i , SKILL_MAX_LEVEL ) ;
break ;
}
}
}
ch - > ComputePoints ( ) ;
ch - > SkillLevelPacket ( ) ;
}
ACMD ( do_item_full_set )
{
BYTE job = ch - > GetJob ( ) ;
LPITEM item ;
for ( int i = 0 ; i < 6 ; i + + )
{
item = ch - > GetWear ( i ) ;
if ( item ! = NULL )
ch - > UnequipItem ( item ) ;
}
item = ch - > GetWear ( WEAR_SHIELD ) ;
if ( item ! = NULL )
ch - > UnequipItem ( item ) ;
switch ( job )
{
case JOB_SURA :
{
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 11699 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 13049 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 15189 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 189 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 12529 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 14109 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 17209 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 16209 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
}
break ;
case JOB_WARRIOR :
{
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 11299 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 13049 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 15189 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 3159 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 12249 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 14109 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 17109 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 16109 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
}
break ;
case JOB_SHAMAN :
{
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 11899 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 13049 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 15189 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 7159 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 12669 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 14109 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 17209 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 16209 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
}
break ;
case JOB_ASSASSIN :
{
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 11499 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 13049 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 15189 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 1139 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 12389 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 14109 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 17189 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
item = ITEM_MANAGER : : instance ( ) . CreateItem ( 16189 ) ;
if ( ! item | | ! item - > EquipTo ( ch , item - > FindEquipCell ( ch ) ) )
M2_DESTROY_ITEM ( item ) ;
}
break ;
}
}
ACMD ( do_attr_full_set )
{
BYTE job = ch - > GetJob ( ) ;
LPITEM item ;
switch ( job )
{
case JOB_WARRIOR :
case JOB_ASSASSIN :
case JOB_SURA :
case JOB_SHAMAN :
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
// <20> ̰<CCB0> <20> <> <EFBFBD> <EFBFBD> <20> ־ <20> ӽ÷<D3BD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> ̷<EFBFBD> <20> Ӽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
item = ch - > GetWear ( WEAR_HEAD ) ;
if ( item ! = NULL )
{
item - > ClearAttribute ( ) ;
item - > SetForceAttribute ( 0 , APPLY_ATT_SPEED , 8 ) ;
item - > SetForceAttribute ( 1 , APPLY_HP_REGEN , 30 ) ;
item - > SetForceAttribute ( 2 , APPLY_SP_REGEN , 30 ) ;
item - > SetForceAttribute ( 3 , APPLY_DODGE , 15 ) ;
item - > SetForceAttribute ( 4 , APPLY_STEAL_SP , 10 ) ;
}
item = ch - > GetWear ( WEAR_WEAPON ) ;
if ( item ! = NULL )
{
item - > ClearAttribute ( ) ;
item - > SetForceAttribute ( 0 , APPLY_CAST_SPEED , 20 ) ;
item - > SetForceAttribute ( 1 , APPLY_CRITICAL_PCT , 10 ) ;
item - > SetForceAttribute ( 2 , APPLY_PENETRATE_PCT , 10 ) ;
item - > SetForceAttribute ( 3 , APPLY_ATTBONUS_DEVIL , 20 ) ;
item - > SetForceAttribute ( 4 , APPLY_STR , 12 ) ;
}
item = ch - > GetWear ( WEAR_SHIELD ) ;
if ( item ! = NULL )
{
item - > ClearAttribute ( ) ;
item - > SetForceAttribute ( 0 , APPLY_CON , 12 ) ;
item - > SetForceAttribute ( 1 , APPLY_BLOCK , 15 ) ;
item - > SetForceAttribute ( 2 , APPLY_REFLECT_MELEE , 10 ) ;
item - > SetForceAttribute ( 3 , APPLY_IMMUNE_STUN , 1 ) ;
item - > SetForceAttribute ( 4 , APPLY_IMMUNE_SLOW , 1 ) ;
}
item = ch - > GetWear ( WEAR_BODY ) ;
if ( item ! = NULL )
{
item - > ClearAttribute ( ) ;
item - > SetForceAttribute ( 0 , APPLY_MAX_HP , 2000 ) ;
item - > SetForceAttribute ( 1 , APPLY_CAST_SPEED , 20 ) ;
item - > SetForceAttribute ( 2 , APPLY_STEAL_HP , 10 ) ;
item - > SetForceAttribute ( 3 , APPLY_REFLECT_MELEE , 10 ) ;
item - > SetForceAttribute ( 4 , APPLY_ATT_GRADE_BONUS , 50 ) ;
}
item = ch - > GetWear ( WEAR_FOOTS ) ;
if ( item ! = NULL )
{
item - > ClearAttribute ( ) ;
item - > SetForceAttribute ( 0 , APPLY_MAX_HP , 2000 ) ;
item - > SetForceAttribute ( 1 , APPLY_MAX_SP , 80 ) ;
item - > SetForceAttribute ( 2 , APPLY_MOV_SPEED , 8 ) ;
item - > SetForceAttribute ( 3 , APPLY_ATT_SPEED , 8 ) ;
item - > SetForceAttribute ( 4 , APPLY_CRITICAL_PCT , 10 ) ;
}
item = ch - > GetWear ( WEAR_WRIST ) ;
if ( item ! = NULL )
{
item - > ClearAttribute ( ) ;
item - > SetForceAttribute ( 0 , APPLY_MAX_HP , 2000 ) ;
item - > SetForceAttribute ( 1 , APPLY_MAX_SP , 80 ) ;
item - > SetForceAttribute ( 2 , APPLY_PENETRATE_PCT , 10 ) ;
item - > SetForceAttribute ( 3 , APPLY_STEAL_HP , 10 ) ;
item - > SetForceAttribute ( 4 , APPLY_MANA_BURN_PCT , 10 ) ;
}
item = ch - > GetWear ( WEAR_NECK ) ;
if ( item ! = NULL )
{
item - > ClearAttribute ( ) ;
item - > SetForceAttribute ( 0 , APPLY_MAX_HP , 2000 ) ;
item - > SetForceAttribute ( 1 , APPLY_MAX_SP , 80 ) ;
item - > SetForceAttribute ( 2 , APPLY_CRITICAL_PCT , 10 ) ;
item - > SetForceAttribute ( 3 , APPLY_PENETRATE_PCT , 10 ) ;
item - > SetForceAttribute ( 4 , APPLY_STEAL_SP , 10 ) ;
}
item = ch - > GetWear ( WEAR_EAR ) ;
if ( item ! = NULL )
{
item - > ClearAttribute ( ) ;
item - > SetForceAttribute ( 0 , APPLY_MOV_SPEED , 20 ) ;
item - > SetForceAttribute ( 1 , APPLY_MANA_BURN_PCT , 10 ) ;
item - > SetForceAttribute ( 2 , APPLY_POISON_REDUCE , 5 ) ;
item - > SetForceAttribute ( 3 , APPLY_ATTBONUS_DEVIL , 20 ) ;
item - > SetForceAttribute ( 4 , APPLY_ATTBONUS_UNDEAD , 20 ) ;
}
}
break ;
}
}
ACMD ( do_use_item )
{
char arg1 [ 256 ] ;
one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
int cell ;
str_to_number ( cell , arg1 ) ;
LPITEM item = ch - > GetInventoryItem ( cell ) ;
if ( item )
{
ch - > UseItem ( TItemPos ( INVENTORY , cell ) ) ;
}
else
{
ch - > ChatPacket ( CHAT_TYPE_INFO , " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> ." ) ;
}
}
ACMD ( do_clear_affect )
{
ch - > ClearAffect ( true ) ;
}
ACMD ( do_dragon_soul )
{
char arg1 [ 512 ] ;
const char * rest = one_argument ( argument , arg1 , sizeof ( arg1 ) ) ;
switch ( arg1 [ 0 ] )
{
case ' a ' :
{
one_argument ( rest , arg1 , sizeof ( arg1 ) ) ;
int deck_idx ;
if ( str_to_number ( deck_idx , arg1 ) = = false )
{
return ;
}
ch - > DragonSoul_ActivateDeck ( deck_idx ) ;
}
break ;
case ' d ' :
{
ch - > DragonSoul_DeactivateAll ( ) ;
}
break ;
}
}
ACMD ( do_ds_list )
{
for ( int i = 0 ; i < DRAGON_SOUL_INVENTORY_MAX_NUM ; i + + )
{
TItemPos cell ( DRAGON_SOUL_INVENTORY , i ) ;
LPITEM item = ch - > GetItem ( cell ) ;
if ( item ! = NULL )
ch - > ChatPacket ( CHAT_TYPE_INFO , " cell : %d, name : %s, id : %d " , item - > GetCell ( ) , item - > GetName ( ) , item - > GetID ( ) ) ;
}
}