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 "motion.h"
|
|
|
|
|
#include "packet.h"
|
|
|
|
|
#include "affect.h"
|
|
|
|
|
#include "pvp.h"
|
|
|
|
|
#include "start_position.h"
|
|
|
|
|
#include "party.h"
|
|
|
|
|
#include "guild_manager.h"
|
|
|
|
|
#include "p2p.h"
|
|
|
|
|
#include "dungeon.h"
|
|
|
|
|
#include "messenger_manager.h"
|
|
|
|
|
#include "war_map.h"
|
|
|
|
|
#include "questmanager.h"
|
|
|
|
|
#include "item_manager.h"
|
|
|
|
|
#include "monarch.h"
|
|
|
|
|
#include "mob_manager.h"
|
|
|
|
|
#include "dev_log.h"
|
|
|
|
|
#include "item.h"
|
|
|
|
|
#include "arena.h"
|
|
|
|
|
#include "buffer_manager.h"
|
|
|
|
|
#include "unique_item.h"
|
|
|
|
|
#include "threeway_war.h"
|
|
|
|
|
#include "log.h"
|
2022-03-05 19:59:39 +02:00
|
|
|
|
#include <common/VnumHelper.h>
|
2022-03-05 12:44:06 +02:00
|
|
|
|
#ifdef __AUCTION__
|
|
|
|
|
#include "auction_manager.h"
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
extern int g_server_id;
|
|
|
|
|
|
|
|
|
|
extern int g_nPortalLimitTime;
|
|
|
|
|
|
|
|
|
|
ACMD(do_user_horse_ride)
|
|
|
|
|
{
|
|
|
|
|
if (ch->IsObserverMode())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (ch->IsDead() || ch->IsStun())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (ch->IsHorseRiding() == false)
|
|
|
|
|
{
|
|
|
|
|
// <20><><EFBFBD><EFBFBD> <20>ƴ<EFBFBD> <20>ٸ<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD> Ÿ<><C5B8><EFBFBD>ִ<EFBFBD>.
|
|
|
|
|
if (ch->GetMountVnum())
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD>̹<EFBFBD> Ż<><C5BB><EFBFBD><EFBFBD> <20>̿<EFBFBD><CCBF><EFBFBD><EFBFBD>Դϴ<D4B4>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ch->GetHorse() == NULL)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD><C8AF><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ch->StartRiding();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ch->StopRiding();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_user_horse_back)
|
|
|
|
|
{
|
|
|
|
|
if (ch->GetHorse() != NULL)
|
|
|
|
|
{
|
|
|
|
|
ch->HorseSummon(false);
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><C2BD>ϴ<EFBFBD>."));
|
|
|
|
|
}
|
|
|
|
|
else if (ch->IsHorseRiding() == true)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>մϴ<D5B4>."));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD><C8AF><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>."));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_user_horse_feed)
|
|
|
|
|
{
|
|
|
|
|
// <20><><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD≯<EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD>.
|
|
|
|
|
if (ch->GetMyShop())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (ch->GetHorse() == NULL)
|
|
|
|
|
{
|
|
|
|
|
if (ch->IsHorseRiding() == false)
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD><C8AF><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>."));
|
|
|
|
|
else
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ź <20><><EFBFBD>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD≯<EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DWORD dwFood = ch->GetHorseGrade() + 50054 - 1;
|
|
|
|
|
|
|
|
|
|
if (ch->CountSpecifyItem(dwFood) > 0)
|
|
|
|
|
{
|
|
|
|
|
ch->RemoveSpecifyItem(dwFood, 1);
|
|
|
|
|
ch->FeedHorse();
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %s%s <20>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ϴ<EFBFBD>."),
|
2022-03-06 17:36:43 +02:00
|
|
|
|
ITEM_MANAGER::instance().GetTable(dwFood)->szLocaleName, "");
|
2022-03-05 12:44:06 +02:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF>մϴ<D5B4>"), ITEM_MANAGER::instance().GetTable(dwFood)->szLocaleName);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#define MAX_REASON_LEN 128
|
|
|
|
|
|
|
|
|
|
EVENTINFO(TimedEventInfo)
|
|
|
|
|
{
|
|
|
|
|
DynamicCharacterPtr ch;
|
|
|
|
|
int subcmd;
|
|
|
|
|
int left_second;
|
|
|
|
|
char szReason[MAX_REASON_LEN];
|
|
|
|
|
|
|
|
|
|
TimedEventInfo()
|
|
|
|
|
: ch()
|
|
|
|
|
, subcmd( 0 )
|
|
|
|
|
, left_second( 0 )
|
|
|
|
|
{
|
|
|
|
|
::memset( szReason, 0, MAX_REASON_LEN );
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct SendDisconnectFunc
|
|
|
|
|
{
|
|
|
|
|
void operator () (LPDESC d)
|
|
|
|
|
{
|
|
|
|
|
if (d->GetCharacter())
|
|
|
|
|
{
|
|
|
|
|
if (d->GetCharacter()->GetGMLevel() == GM_PLAYER)
|
|
|
|
|
d->GetCharacter()->ChatPacket(CHAT_TYPE_COMMAND, "quit Shutdown(SendDisconnectFunc)");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct DisconnectFunc
|
|
|
|
|
{
|
|
|
|
|
void operator () (LPDESC d)
|
|
|
|
|
{
|
|
|
|
|
if (d->GetType() == DESC_TYPE_CONNECTOR)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (d->IsPhase(PHASE_P2P))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (d->GetCharacter())
|
|
|
|
|
d->GetCharacter()->Disconnect("Shutdown(DisconnectFunc)");
|
|
|
|
|
|
|
|
|
|
d->SetPhase(PHASE_CLOSE);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
EVENTINFO(shutdown_event_data)
|
|
|
|
|
{
|
|
|
|
|
int seconds;
|
|
|
|
|
|
|
|
|
|
shutdown_event_data()
|
|
|
|
|
: seconds( 0 )
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
EVENTFUNC(shutdown_event)
|
|
|
|
|
{
|
|
|
|
|
shutdown_event_data* info = dynamic_cast<shutdown_event_data*>( event->info );
|
|
|
|
|
|
|
|
|
|
if ( info == NULL )
|
|
|
|
|
{
|
|
|
|
|
sys_err( "shutdown_event> <Factor> Null pointer" );
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int * pSec = & (info->seconds);
|
|
|
|
|
|
|
|
|
|
if (*pSec < 0)
|
|
|
|
|
{
|
|
|
|
|
sys_log(0, "shutdown_event sec %d", *pSec);
|
|
|
|
|
|
|
|
|
|
if (--*pSec == -10)
|
|
|
|
|
{
|
|
|
|
|
const DESC_MANAGER::DESC_SET & c_set_desc = DESC_MANAGER::instance().GetClientSet();
|
|
|
|
|
std::for_each(c_set_desc.begin(), c_set_desc.end(), DisconnectFunc());
|
|
|
|
|
return passes_per_sec;
|
|
|
|
|
}
|
|
|
|
|
else if (*pSec < -10)
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
return passes_per_sec;
|
|
|
|
|
}
|
|
|
|
|
else if (*pSec == 0)
|
|
|
|
|
{
|
|
|
|
|
const DESC_MANAGER::DESC_SET & c_set_desc = DESC_MANAGER::instance().GetClientSet();
|
|
|
|
|
std::for_each(c_set_desc.begin(), c_set_desc.end(), SendDisconnectFunc());
|
|
|
|
|
g_bNoMoreClient = true;
|
|
|
|
|
--*pSec;
|
|
|
|
|
return passes_per_sec;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
char buf[64];
|
|
|
|
|
snprintf(buf, sizeof(buf), LC_TEXT("<EFBFBD>˴ٿ<EFBFBD><EFBFBD><EFBFBD> %d<><64> <20><><EFBFBD>ҽ<EFBFBD><D2BD>ϴ<EFBFBD>."), *pSec);
|
|
|
|
|
SendNotice(buf);
|
|
|
|
|
|
|
|
|
|
--*pSec;
|
|
|
|
|
return passes_per_sec;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Shutdown(int iSec)
|
|
|
|
|
{
|
|
|
|
|
if (g_bNoMoreClient)
|
|
|
|
|
{
|
|
|
|
|
thecore_shutdown();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CWarMapManager::instance().OnShutdown();
|
|
|
|
|
|
|
|
|
|
char buf[64];
|
|
|
|
|
snprintf(buf, sizeof(buf), LC_TEXT("%d<><64> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˴ٿ<CBB4> <20>˴ϴ<CBB4>."), iSec);
|
|
|
|
|
|
|
|
|
|
SendNotice(buf);
|
|
|
|
|
|
|
|
|
|
shutdown_event_data* info = AllocEventInfo<shutdown_event_data>();
|
|
|
|
|
info->seconds = iSec;
|
|
|
|
|
|
|
|
|
|
event_create(shutdown_event, info, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_shutdown)
|
|
|
|
|
{
|
|
|
|
|
if (NULL == ch)
|
|
|
|
|
{
|
|
|
|
|
sys_err("Accept shutdown command from %s.", ch->GetName());
|
|
|
|
|
}
|
|
|
|
|
TPacketGGShutdown p;
|
|
|
|
|
p.bHeader = HEADER_GG_SHUTDOWN;
|
|
|
|
|
P2P_MANAGER::instance().Send(&p, sizeof(TPacketGGShutdown));
|
|
|
|
|
|
|
|
|
|
Shutdown(10);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
EVENTFUNC(timed_event)
|
|
|
|
|
{
|
|
|
|
|
TimedEventInfo * info = dynamic_cast<TimedEventInfo *>( event->info );
|
|
|
|
|
|
|
|
|
|
if ( info == NULL )
|
|
|
|
|
{
|
|
|
|
|
sys_err( "timed_event> <Factor> Null pointer" );
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LPCHARACTER ch = info->ch;
|
|
|
|
|
if (ch == NULL) { // <Factor>
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
LPDESC d = ch->GetDesc();
|
|
|
|
|
|
|
|
|
|
if (info->left_second <= 0)
|
|
|
|
|
{
|
|
|
|
|
ch->m_pkTimedEvent = NULL;
|
|
|
|
|
|
|
|
|
|
if (true == LC_IsEurope() || true == LC_IsYMIR() || true == LC_IsKorea())
|
|
|
|
|
{
|
|
|
|
|
switch (info->subcmd)
|
|
|
|
|
{
|
|
|
|
|
case SCMD_LOGOUT:
|
|
|
|
|
case SCMD_QUIT:
|
|
|
|
|
case SCMD_PHASE_SELECT:
|
|
|
|
|
{
|
|
|
|
|
TPacketNeedLoginLogInfo acc_info;
|
|
|
|
|
acc_info.dwPlayerID = ch->GetDesc()->GetAccountTable().id;
|
|
|
|
|
|
|
|
|
|
db_clientdesc->DBPacket( HEADER_GD_VALID_LOGOUT, 0, &acc_info, sizeof(acc_info) );
|
|
|
|
|
|
|
|
|
|
LogManager::instance().DetailLoginLog( false, ch );
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch (info->subcmd)
|
|
|
|
|
{
|
|
|
|
|
case SCMD_LOGOUT:
|
|
|
|
|
if (d)
|
|
|
|
|
d->SetPhase(PHASE_CLOSE);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case SCMD_QUIT:
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_COMMAND, "quit");
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case SCMD_PHASE_SELECT:
|
|
|
|
|
{
|
|
|
|
|
ch->Disconnect("timed_event - SCMD_PHASE_SELECT");
|
|
|
|
|
|
|
|
|
|
if (d)
|
|
|
|
|
{
|
|
|
|
|
d->SetPhase(PHASE_SELECT);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d<><64> <20><><EFBFBD>ҽ<EFBFBD><D2BD>ϴ<EFBFBD>."), info->left_second);
|
|
|
|
|
--info->left_second;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return PASSES_PER_SEC(1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_cmd)
|
|
|
|
|
{
|
|
|
|
|
/* RECALL_DELAY
|
|
|
|
|
if (ch->m_pkRecallEvent != NULL)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
event_cancel(&ch->m_pkRecallEvent);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// END_OF_RECALL_DELAY */
|
|
|
|
|
|
|
|
|
|
if (ch->m_pkTimedEvent)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
event_cancel(&ch->m_pkTimedEvent);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch (subcmd)
|
|
|
|
|
{
|
|
|
|
|
case SCMD_LOGOUT:
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD>α<EFBFBD><EFBFBD><EFBFBD> ȭ<><C8AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϴ<EFBFBD>. <20><><EFBFBD>ø<EFBFBD> <20><><EFBFBD>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD><EFBFBD>."));
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case SCMD_QUIT:
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>մϴ<D5B4>. <20><><EFBFBD>ø<EFBFBD> <20><><EFBFBD>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD><EFBFBD>."));
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case SCMD_PHASE_SELECT:
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ <20>մϴ<D5B4>. <20><><EFBFBD>ø<EFBFBD> <20><><EFBFBD>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD><EFBFBD>."));
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int nExitLimitTime = 10;
|
|
|
|
|
|
|
|
|
|
if (ch->IsHack(false, true, nExitLimitTime) &&
|
|
|
|
|
false == CThreeWayWar::instance().IsSungZiMapIndex(ch->GetMapIndex()) &&
|
|
|
|
|
(!ch->GetWarMap() || ch->GetWarMap()->GetType() == GUILD_WAR_TYPE_FLAG))
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch (subcmd)
|
|
|
|
|
{
|
|
|
|
|
case SCMD_LOGOUT:
|
|
|
|
|
case SCMD_QUIT:
|
|
|
|
|
case SCMD_PHASE_SELECT:
|
|
|
|
|
{
|
|
|
|
|
TimedEventInfo* info = AllocEventInfo<TimedEventInfo>();
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
if (ch->IsPosition(POS_FIGHTING))
|
|
|
|
|
info->left_second = 10;
|
|
|
|
|
else
|
|
|
|
|
info->left_second = 3;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
info->ch = ch;
|
|
|
|
|
info->subcmd = subcmd;
|
2023-05-01 08:10:00 +03:00
|
|
|
|
strlcpy(info->szReason, argument, sizeof(info->szReason));
|
2022-03-05 12:44:06 +02:00
|
|
|
|
|
|
|
|
|
ch->m_pkTimedEvent = event_create(timed_event, info, 1);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_mount)
|
|
|
|
|
{
|
|
|
|
|
/*
|
|
|
|
|
char arg1[256];
|
|
|
|
|
struct action_mount_param param;
|
|
|
|
|
|
|
|
|
|
// <20>̹<EFBFBD> Ÿ<><C5B8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (ch->GetMountingChr())
|
|
|
|
|
{
|
|
|
|
|
char arg2[256];
|
|
|
|
|
two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
|
|
|
|
|
|
|
|
|
|
if (!*arg1 || !*arg2)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
param.x = atoi(arg1);
|
|
|
|
|
param.y = atoi(arg2);
|
|
|
|
|
param.vid = ch->GetMountingChr()->GetVID();
|
|
|
|
|
param.is_unmount = true;
|
|
|
|
|
|
|
|
|
|
float distance = DISTANCE_SQRT(param.x - (DWORD) ch->GetX(), param.y - (DWORD) ch->GetY());
|
|
|
|
|
|
|
|
|
|
if (distance > 600.0f)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
action_enqueue(ch, ACTION_TYPE_MOUNT, ¶m, 0.0f, true);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
one_argument(argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
if (!*arg1)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
LPCHARACTER tch = CHARACTER_MANAGER::instance().Find(atoi(arg1));
|
|
|
|
|
|
|
|
|
|
if (!tch->IsNPC() || !tch->IsMountable())
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD>ű<EFBFBD><EFBFBD> Ż <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
float distance = DISTANCE_SQRT(tch->GetX() - ch->GetX(), tch->GetY() - ch->GetY());
|
|
|
|
|
|
|
|
|
|
if (distance > 600.0f)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ÿ<><C5B8><EFBFBD><EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
param.vid = tch->GetVID();
|
|
|
|
|
param.is_unmount = false;
|
|
|
|
|
|
|
|
|
|
action_enqueue(ch, ACTION_TYPE_MOUNT, ¶m, 0.0f, true);
|
|
|
|
|
*/
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_fishing)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
one_argument(argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
if (!*arg1)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
ch->SetRotation(atof(arg1));
|
|
|
|
|
ch->fishing();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_console)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_COMMAND, "ConsoleEnable");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_restart)
|
|
|
|
|
{
|
|
|
|
|
if (false == ch->IsDead())
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_COMMAND, "CloseRestartWindow");
|
|
|
|
|
ch->StartRecoveryEvent();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (NULL == ch->m_pkDeadEvent)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
int iTimeToDead = (event_time(ch->m_pkDeadEvent) / passes_per_sec);
|
|
|
|
|
|
|
|
|
|
if (subcmd != SCMD_RESTART_TOWN && (!ch->GetWarMap() || ch->GetWarMap()->GetType() == GUILD_WAR_TYPE_FLAG))
|
|
|
|
|
{
|
|
|
|
|
if (!test_server)
|
|
|
|
|
{
|
|
|
|
|
if (ch->IsHack())
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD>ϰ<EFBFBD><CFB0>쿡<EFBFBD><ECBFA1> üũ <20><><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
|
|
|
|
|
if (false == CThreeWayWar::instance().IsSungZiMapIndex(ch->GetMapIndex()))
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. (%d<><64> <20><><EFBFBD><EFBFBD>)"), iTimeToDead - (180 - g_nPortalLimitTime));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (iTimeToDead > 170)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. (%d<><64> <20><><EFBFBD><EFBFBD>)"), iTimeToDead - 170);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//PREVENT_HACK
|
|
|
|
|
//DESC : â<><C3A2>, <20><>ȯ â <20><> <20><>Ż<EFBFBD><C5BB> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>̿<EFBFBD><CCBF>ɼ<EFBFBD> <20>־
|
|
|
|
|
// <09><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20>߰<EFBFBD>
|
|
|
|
|
if (subcmd == SCMD_RESTART_TOWN)
|
|
|
|
|
{
|
|
|
|
|
if (ch->IsHack())
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>ʿ<EFBFBD><CABF><EFBFBD><EFBFBD><EFBFBD> üũ <20><><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
|
|
|
|
|
if ((!ch->GetWarMap() || ch->GetWarMap()->GetType() == GUILD_WAR_TYPE_FLAG) ||
|
|
|
|
|
false == CThreeWayWar::instance().IsSungZiMapIndex(ch->GetMapIndex()))
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. (%d<><64> <20><><EFBFBD><EFBFBD>)"), iTimeToDead - (180 - g_nPortalLimitTime));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (iTimeToDead > 173)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. (%d <20><> <20><><EFBFBD><EFBFBD>)"), iTimeToDead - 173);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//END_PREVENT_HACK
|
|
|
|
|
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_COMMAND, "CloseRestartWindow");
|
|
|
|
|
|
|
|
|
|
ch->GetDesc()->SetPhase(PHASE_GAME);
|
|
|
|
|
ch->SetPosition(POS_STANDING);
|
|
|
|
|
ch->StartRecoveryEvent();
|
|
|
|
|
|
|
|
|
|
//FORKED_LOAD
|
|
|
|
|
//DESC: <20><><EFBFBD>Ÿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ȱ<EFBFBD><C8B0> <20>Ұ<EFBFBD><D2B0><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ա<EFBFBD><D4B1><EFBFBD> <20>ƴ<EFBFBD> <20><><EFBFBD>Ÿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD><CCB5>ϰ<EFBFBD> <20>ȴ<EFBFBD>.
|
|
|
|
|
if (1 == quest::CQuestManager::instance().GetEventFlag("threeway_war"))
|
|
|
|
|
{
|
|
|
|
|
if (subcmd == SCMD_RESTART_TOWN || subcmd == SCMD_RESTART_HERE)
|
|
|
|
|
{
|
|
|
|
|
if (true == CThreeWayWar::instance().IsThreeWayWarMapIndex(ch->GetMapIndex()) &&
|
|
|
|
|
false == CThreeWayWar::instance().IsSungZiMapIndex(ch->GetMapIndex()))
|
|
|
|
|
{
|
|
|
|
|
ch->WarpSet(EMPIRE_START_X(ch->GetEmpire()), EMPIRE_START_Y(ch->GetEmpire()));
|
|
|
|
|
|
|
|
|
|
ch->ReviveInvisible(5);
|
|
|
|
|
ch->PointChange(POINT_HP, ch->GetMaxHP() - ch->GetHP());
|
|
|
|
|
ch->PointChange(POINT_SP, ch->GetMaxSP() - ch->GetSP());
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
if (true == CThreeWayWar::instance().IsSungZiMapIndex(ch->GetMapIndex()))
|
|
|
|
|
{
|
|
|
|
|
if (CThreeWayWar::instance().GetReviveTokenForPlayer(ch->GetPlayerID()) <= 0)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ȱ <20><>ȸ<EFBFBD><C8B8> <20><><EFBFBD><EFBFBD> <20>Ҿ<EFBFBD><D2BE><EFBFBD><EFBFBD>ϴ<EFBFBD>! <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD><CCB5>մϴ<D5B4>!"));
|
|
|
|
|
ch->WarpSet(EMPIRE_START_X(ch->GetEmpire()), EMPIRE_START_Y(ch->GetEmpire()));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ch->Show(ch->GetMapIndex(), GetSungziStartX(ch->GetEmpire()), GetSungziStartY(ch->GetEmpire()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ch->PointChange(POINT_HP, ch->GetMaxHP() - ch->GetHP());
|
|
|
|
|
ch->PointChange(POINT_SP, ch->GetMaxSP() - ch->GetSP());
|
|
|
|
|
ch->ReviveInvisible(5);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//END_FORKED_LOAD
|
|
|
|
|
|
|
|
|
|
if (ch->GetDungeon())
|
|
|
|
|
ch->GetDungeon()->UseRevive(ch);
|
|
|
|
|
|
|
|
|
|
if (ch->GetWarMap() && !ch->IsObserverMode())
|
|
|
|
|
{
|
|
|
|
|
CWarMap * pMap = ch->GetWarMap();
|
|
|
|
|
DWORD dwGuildOpponent = pMap ? pMap->GetGuildOpponent(ch) : 0;
|
|
|
|
|
|
|
|
|
|
if (dwGuildOpponent)
|
|
|
|
|
{
|
|
|
|
|
switch (subcmd)
|
|
|
|
|
{
|
|
|
|
|
case SCMD_RESTART_TOWN:
|
|
|
|
|
sys_log(0, "do_restart: restart town");
|
|
|
|
|
PIXEL_POSITION pos;
|
|
|
|
|
|
|
|
|
|
if (CWarMapManager::instance().GetStartPosition(ch->GetMapIndex(), ch->GetGuild()->GetID() < dwGuildOpponent ? 0 : 1, pos))
|
|
|
|
|
ch->Show(ch->GetMapIndex(), pos.x, pos.y);
|
|
|
|
|
else
|
|
|
|
|
ch->ExitToSavedLocation();
|
|
|
|
|
|
|
|
|
|
ch->PointChange(POINT_HP, ch->GetMaxHP() - ch->GetHP());
|
|
|
|
|
ch->PointChange(POINT_SP, ch->GetMaxSP() - ch->GetSP());
|
|
|
|
|
ch->ReviveInvisible(5);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case SCMD_RESTART_HERE:
|
|
|
|
|
sys_log(0, "do_restart: restart here");
|
|
|
|
|
ch->RestartAtSamePos();
|
|
|
|
|
//ch->Show(ch->GetMapIndex(), ch->GetX(), ch->GetY());
|
|
|
|
|
ch->PointChange(POINT_HP, ch->GetMaxHP() - ch->GetHP());
|
|
|
|
|
ch->PointChange(POINT_SP, ch->GetMaxSP() - ch->GetSP());
|
|
|
|
|
ch->ReviveInvisible(5);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch (subcmd)
|
|
|
|
|
{
|
|
|
|
|
case SCMD_RESTART_TOWN:
|
|
|
|
|
sys_log(0, "do_restart: restart town");
|
|
|
|
|
PIXEL_POSITION pos;
|
|
|
|
|
|
|
|
|
|
if (SECTREE_MANAGER::instance().GetRecallPositionByEmpire(ch->GetMapIndex(), ch->GetEmpire(), pos))
|
|
|
|
|
ch->WarpSet(pos.x, pos.y);
|
|
|
|
|
else
|
|
|
|
|
ch->WarpSet(EMPIRE_START_X(ch->GetEmpire()), EMPIRE_START_Y(ch->GetEmpire()));
|
|
|
|
|
|
|
|
|
|
ch->PointChange(POINT_HP, 50 - ch->GetHP());
|
|
|
|
|
ch->DeathPenalty(1);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case SCMD_RESTART_HERE:
|
|
|
|
|
sys_log(0, "do_restart: restart here");
|
|
|
|
|
ch->RestartAtSamePos();
|
|
|
|
|
//ch->Show(ch->GetMapIndex(), ch->GetX(), ch->GetY());
|
|
|
|
|
ch->PointChange(POINT_HP, 50 - ch->GetHP());
|
|
|
|
|
ch->DeathPenalty(0);
|
|
|
|
|
ch->ReviveInvisible(5);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#define MAX_STAT 90
|
|
|
|
|
|
|
|
|
|
ACMD(do_stat_reset)
|
|
|
|
|
{
|
|
|
|
|
ch->PointChange(POINT_STAT_RESET_COUNT, 12 - ch->GetPoint(POINT_STAT_RESET_COUNT));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_stat_minus)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
one_argument(argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
if (!*arg1)
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ch->GetPoint(POINT_STAT_RESET_COUNT) <= 0)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (!strcmp(arg1, "st"))
|
|
|
|
|
{
|
|
|
|
|
if (ch->GetRealPoint(POINT_ST) <= JobInitialPoints[ch->GetJob()].st)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
ch->SetRealPoint(POINT_ST, ch->GetRealPoint(POINT_ST) - 1);
|
|
|
|
|
ch->SetPoint(POINT_ST, ch->GetPoint(POINT_ST) - 1);
|
|
|
|
|
ch->ComputePoints();
|
|
|
|
|
ch->PointChange(POINT_ST, 0);
|
|
|
|
|
}
|
|
|
|
|
else if (!strcmp(arg1, "dx"))
|
|
|
|
|
{
|
|
|
|
|
if (ch->GetRealPoint(POINT_DX) <= JobInitialPoints[ch->GetJob()].dx)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
ch->SetRealPoint(POINT_DX, ch->GetRealPoint(POINT_DX) - 1);
|
|
|
|
|
ch->SetPoint(POINT_DX, ch->GetPoint(POINT_DX) - 1);
|
|
|
|
|
ch->ComputePoints();
|
|
|
|
|
ch->PointChange(POINT_DX, 0);
|
|
|
|
|
}
|
|
|
|
|
else if (!strcmp(arg1, "ht"))
|
|
|
|
|
{
|
|
|
|
|
if (ch->GetRealPoint(POINT_HT) <= JobInitialPoints[ch->GetJob()].ht)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
ch->SetRealPoint(POINT_HT, ch->GetRealPoint(POINT_HT) - 1);
|
|
|
|
|
ch->SetPoint(POINT_HT, ch->GetPoint(POINT_HT) - 1);
|
|
|
|
|
ch->ComputePoints();
|
|
|
|
|
ch->PointChange(POINT_HT, 0);
|
|
|
|
|
ch->PointChange(POINT_MAX_HP, 0);
|
|
|
|
|
}
|
|
|
|
|
else if (!strcmp(arg1, "iq"))
|
|
|
|
|
{
|
|
|
|
|
if (ch->GetRealPoint(POINT_IQ) <= JobInitialPoints[ch->GetJob()].iq)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
ch->SetRealPoint(POINT_IQ, ch->GetRealPoint(POINT_IQ) - 1);
|
|
|
|
|
ch->SetPoint(POINT_IQ, ch->GetPoint(POINT_IQ) - 1);
|
|
|
|
|
ch->ComputePoints();
|
|
|
|
|
ch->PointChange(POINT_IQ, 0);
|
|
|
|
|
ch->PointChange(POINT_MAX_SP, 0);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
ch->PointChange(POINT_STAT, +1);
|
|
|
|
|
ch->PointChange(POINT_STAT_RESET_COUNT, -1);
|
|
|
|
|
ch->ComputePoints();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_stat)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
one_argument(argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
if (!*arg1)
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ch->GetPoint(POINT_STAT) <= 0)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
BYTE idx = 0;
|
|
|
|
|
|
|
|
|
|
if (!strcmp(arg1, "st"))
|
|
|
|
|
idx = POINT_ST;
|
|
|
|
|
else if (!strcmp(arg1, "dx"))
|
|
|
|
|
idx = POINT_DX;
|
|
|
|
|
else if (!strcmp(arg1, "ht"))
|
|
|
|
|
idx = POINT_HT;
|
|
|
|
|
else if (!strcmp(arg1, "iq"))
|
|
|
|
|
idx = POINT_IQ;
|
|
|
|
|
else
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (ch->GetRealPoint(idx) >= MAX_STAT)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
ch->SetRealPoint(idx, ch->GetRealPoint(idx) + 1);
|
|
|
|
|
ch->SetPoint(idx, ch->GetPoint(idx) + 1);
|
|
|
|
|
ch->ComputePoints();
|
|
|
|
|
ch->PointChange(idx, 0);
|
|
|
|
|
|
|
|
|
|
if (idx == POINT_IQ)
|
|
|
|
|
{
|
|
|
|
|
ch->PointChange(POINT_MAX_HP, 0);
|
|
|
|
|
}
|
|
|
|
|
else if (idx == POINT_HT)
|
|
|
|
|
{
|
|
|
|
|
ch->PointChange(POINT_MAX_SP, 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ch->PointChange(POINT_STAT, -1);
|
|
|
|
|
ch->ComputePoints();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_pvp)
|
|
|
|
|
{
|
|
|
|
|
if (ch->GetArena() != NULL || CArenaManager::instance().IsArenaMap(ch->GetMapIndex()) == true)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>忡<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͻ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
char arg1[256];
|
|
|
|
|
one_argument(argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
DWORD vid = 0;
|
|
|
|
|
str_to_number(vid, arg1);
|
|
|
|
|
LPCHARACTER pkVictim = CHARACTER_MANAGER::instance().Find(vid);
|
|
|
|
|
|
|
|
|
|
if (!pkVictim)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (pkVictim->IsNPC())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (pkVictim->GetArena() != NULL)
|
|
|
|
|
{
|
|
|
|
|
pkVictim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CPVPManager::instance().Insert(ch, pkVictim);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_guildskillup)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
one_argument(argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
if (!*arg1)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (!ch->GetGuild())
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<<3C><><EFBFBD><EFBFBD>> <20><><EFBFBD>忡 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CGuild* g = ch->GetGuild();
|
|
|
|
|
TGuildMember* gm = g->GetMember(ch->GetPlayerID());
|
|
|
|
|
if (gm->grade == GUILD_LEADER_GRADE)
|
|
|
|
|
{
|
|
|
|
|
DWORD vnum = 0;
|
|
|
|
|
str_to_number(vnum, arg1);
|
|
|
|
|
g->SkillLevelUp(vnum);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<<3C><><EFBFBD><EFBFBD>> <20><><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_skillup)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
one_argument(argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
if (!*arg1)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
DWORD vnum = 0;
|
|
|
|
|
str_to_number(vnum, arg1);
|
|
|
|
|
|
|
|
|
|
if (true == ch->CanUseSkill(vnum))
|
|
|
|
|
{
|
|
|
|
|
ch->SkillLevelUp(vnum);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
switch(vnum)
|
|
|
|
|
{
|
|
|
|
|
case SKILL_HORSE_WILDATTACK:
|
|
|
|
|
case SKILL_HORSE_CHARGE:
|
|
|
|
|
case SKILL_HORSE_ESCAPE:
|
|
|
|
|
case SKILL_HORSE_WILDATTACK_RANGE:
|
|
|
|
|
|
|
|
|
|
case SKILL_7_A_ANTI_TANHWAN:
|
|
|
|
|
case SKILL_7_B_ANTI_AMSEOP:
|
|
|
|
|
case SKILL_7_C_ANTI_SWAERYUNG:
|
|
|
|
|
case SKILL_7_D_ANTI_YONGBI:
|
|
|
|
|
|
|
|
|
|
case SKILL_8_A_ANTI_GIGONGCHAM:
|
|
|
|
|
case SKILL_8_B_ANTI_YEONSA:
|
|
|
|
|
case SKILL_8_C_ANTI_MAHWAN:
|
|
|
|
|
case SKILL_8_D_ANTI_BYEURAK:
|
|
|
|
|
|
|
|
|
|
case SKILL_ADD_HP:
|
|
|
|
|
case SKILL_RESIST_PENETRATE:
|
|
|
|
|
ch->SkillLevelUp(vnum);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// @version 05/06/20 Bang2ni - Ŀ<>ǵ<EFBFBD> ó<><C3B3> Delegate to CHARACTER class
|
|
|
|
|
//
|
|
|
|
|
ACMD(do_safebox_close)
|
|
|
|
|
{
|
|
|
|
|
ch->CloseSafebox();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// @version 05/06/20 Bang2ni - Ŀ<>ǵ<EFBFBD> ó<><C3B3> Delegate to CHARACTER class
|
|
|
|
|
//
|
|
|
|
|
ACMD(do_safebox_password)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
one_argument(argument, arg1, sizeof(arg1));
|
|
|
|
|
ch->ReqSafeboxLoad(arg1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_safebox_change_password)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
char arg2[256];
|
|
|
|
|
|
|
|
|
|
two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
|
|
|
|
|
|
|
|
|
|
if (!*arg1 || strlen(arg1)>6)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â<><C3A2>> <20>߸<EFBFBD><DFB8><EFBFBD> <20><>ȣ<EFBFBD><C8A3> <20>Է<EFBFBD><D4B7>ϼ̽<CFBC><CCBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!*arg2 || strlen(arg2)>6)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â<><C3A2>> <20>߸<EFBFBD><DFB8><EFBFBD> <20><>ȣ<EFBFBD><C8A3> <20>Է<EFBFBD><D4B7>ϼ̽<CFBC><CCBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (LC_IsBrazil() == true)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < 6; ++i)
|
|
|
|
|
{
|
|
|
|
|
if (arg2[i] == '\0')
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
if (isalpha(arg2[i]) == false)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â<><C3A2>> <20><><EFBFBD>й<EFBFBD>ȣ<EFBFBD><C8A3> <20><><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TSafeboxChangePasswordPacket p;
|
|
|
|
|
|
|
|
|
|
p.dwID = ch->GetDesc()->GetAccountTable().id;
|
2023-05-01 08:10:00 +03:00
|
|
|
|
strlcpy(p.szOldPassword, arg1, sizeof(p.szOldPassword));
|
|
|
|
|
strlcpy(p.szNewPassword, arg2, sizeof(p.szNewPassword));
|
2022-03-05 12:44:06 +02:00
|
|
|
|
|
|
|
|
|
db_clientdesc->DBPacket(HEADER_GD_SAFEBOX_CHANGE_PASSWORD, ch->GetDesc()->GetHandle(), &p, sizeof(p));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_mall_password)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
one_argument(argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
if (!*arg1 || strlen(arg1) > 6)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â<><C3A2>> <20>߸<EFBFBD><DFB8><EFBFBD> <20><>ȣ<EFBFBD><C8A3> <20>Է<EFBFBD><D4B7>ϼ̽<CFBC><CCBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int iPulse = thecore_pulse();
|
|
|
|
|
|
|
|
|
|
if (ch->GetMall())
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â<><C3A2>> â<><C3A2><EFBFBD><EFBFBD> <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (iPulse - ch->GetMallLoadTime() < passes_per_sec * 10) // 10<31>ʿ<EFBFBD> <20>ѹ<EFBFBD><D1B9><EFBFBD> <20><>û <20><><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â<><C3A2>> â<><C3A2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 10<31><30> <20>ȿ<EFBFBD><C8BF><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ch->SetMallLoadTime(iPulse);
|
|
|
|
|
|
|
|
|
|
TSafeboxLoadPacket p;
|
|
|
|
|
p.dwID = ch->GetDesc()->GetAccountTable().id;
|
2023-05-01 08:10:00 +03:00
|
|
|
|
strlcpy(p.szLogin, ch->GetDesc()->GetAccountTable().login, sizeof(p.szLogin));
|
|
|
|
|
strlcpy(p.szPassword, arg1, sizeof(p.szPassword));
|
2022-03-05 12:44:06 +02:00
|
|
|
|
|
|
|
|
|
db_clientdesc->DBPacket(HEADER_GD_MALL_LOAD, ch->GetDesc()->GetHandle(), &p, sizeof(p));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_mall_close)
|
|
|
|
|
{
|
|
|
|
|
if (ch->GetMall())
|
|
|
|
|
{
|
|
|
|
|
ch->SetMallLoadTime(thecore_pulse());
|
|
|
|
|
ch->CloseMall();
|
|
|
|
|
ch->Save();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_ungroup)
|
|
|
|
|
{
|
|
|
|
|
if (!ch->GetParty())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (!CPartyManager::instance().IsEnablePCParty())
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<<3C><>Ƽ> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ƽ <20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ch->GetDungeon())
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<<3C><>Ƽ> <20><><EFBFBD><EFBFBD> <20>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD> <20><>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LPPARTY pParty = ch->GetParty();
|
|
|
|
|
|
|
|
|
|
if (pParty->GetMemberCount() == 2)
|
|
|
|
|
{
|
|
|
|
|
// party disband
|
|
|
|
|
CPartyManager::instance().DeleteParty(pParty);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<<3C><>Ƽ> <20><>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD><CCBD>ϴ<EFBFBD>."));
|
|
|
|
|
//pParty->SendPartyRemoveOneToAll(ch);
|
|
|
|
|
pParty->Quit(ch->GetPlayerID());
|
|
|
|
|
//pParty->SendPartyRemoveAllToOne(ch);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_close_shop)
|
|
|
|
|
{
|
|
|
|
|
if (ch->GetMyShop())
|
|
|
|
|
{
|
|
|
|
|
ch->CloseMyShop();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_set_walk_mode)
|
|
|
|
|
{
|
|
|
|
|
ch->SetNowWalking(true);
|
|
|
|
|
ch->SetWalking(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_set_run_mode)
|
|
|
|
|
{
|
|
|
|
|
ch->SetNowWalking(false);
|
|
|
|
|
ch->SetWalking(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_war)
|
|
|
|
|
{
|
|
|
|
|
//<2F><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
CGuild * g = ch->GetGuild();
|
|
|
|
|
|
|
|
|
|
if (!g)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> üũ<C3BC>ѹ<EFBFBD>!
|
|
|
|
|
if (g->UnderAnyWar())
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<<3C><><EFBFBD><EFBFBD>> <20>̹<EFBFBD> <20>ٸ<EFBFBD> <20><><EFBFBD>£ <20><><EFBFBD><EFBFBD> <20><> <20>Դϴ<D4B4>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD> <20>ι<EFBFBD><CEB9><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
char arg1[256], arg2[256];
|
|
|
|
|
int type = GUILD_WAR_TYPE_FIELD;
|
|
|
|
|
two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
|
|
|
|
|
|
|
|
|
|
if (!*arg1)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (*arg2)
|
|
|
|
|
{
|
|
|
|
|
str_to_number(type, arg2);
|
|
|
|
|
|
|
|
|
|
if (type >= GUILD_WAR_TYPE_MAX_NUM)
|
|
|
|
|
type = GUILD_WAR_TYPE_FIELD;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>
|
|
|
|
|
DWORD gm_pid = g->GetMasterPID();
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> üũ(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>常<EFBFBD><E5B8B8> <20><><EFBFBD><EFBFBD>)
|
|
|
|
|
if (gm_pid != ch->GetPlayerID())
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<<3C><><EFBFBD><EFBFBD>> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD>带 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
CGuild * opp_g = CGuildManager::instance().FindGuildByName(arg1);
|
|
|
|
|
|
|
|
|
|
if (!opp_g)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<<3C><><EFBFBD><EFBFBD>> <20><EFBFBD> <20><><EFBFBD>尡 <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> üũ
|
|
|
|
|
switch (g->GetGuildWarState(opp_g->GetID()))
|
|
|
|
|
{
|
|
|
|
|
case GUILD_WAR_NONE:
|
|
|
|
|
{
|
|
|
|
|
if (opp_g->UnderAnyWar())
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<<3C><><EFBFBD><EFBFBD>> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>尡 <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>Դϴ<D4B4>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int iWarPrice = KOR_aGuildWarInfo[type].iWarPrice;
|
|
|
|
|
|
|
|
|
|
if (g->GetGuildMoney() < iWarPrice)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<<3C><><EFBFBD><EFBFBD>> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (opp_g->GetGuildMoney() < iWarPrice)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<<3C><><EFBFBD><EFBFBD>> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case GUILD_WAR_SEND_DECLARE:
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case GUILD_WAR_RECV_DECLARE:
|
|
|
|
|
{
|
|
|
|
|
if (opp_g->UnderAnyWar())
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<<3C><><EFBFBD><EFBFBD>> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>尡 <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>Դϴ<D4B4>."));
|
|
|
|
|
g->RequestRefuseWar(opp_g->GetID());
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case GUILD_WAR_RESERVE:
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<<3C><><EFBFBD><EFBFBD>> <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Դϴ<D4B4>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case GUILD_WAR_END:
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<<3C><><EFBFBD><EFBFBD>> <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>."));
|
|
|
|
|
g->RequestRefuseWar(opp_g->GetID());
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!g->CanStartWar(type))
|
|
|
|
|
{
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʴ´<CAB4>.
|
|
|
|
|
if (g->GetLadderPoint() == 0)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<<3C><><EFBFBD><EFBFBD>> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
sys_log(0, "GuildWar.StartError.NEED_LADDER_POINT");
|
|
|
|
|
}
|
|
|
|
|
else if (g->GetMemberCount() < GUILD_WAR_MIN_MEMBER_COUNT)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<<3C><><EFBFBD><EFBFBD>> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϱ<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> <20>ּ<EFBFBD><D6BC><EFBFBD> %d<><64><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD> <20>մϴ<D5B4>."), GUILD_WAR_MIN_MEMBER_COUNT);
|
|
|
|
|
sys_log(0, "GuildWar.StartError.NEED_MINIMUM_MEMBER[%d]", GUILD_WAR_MIN_MEMBER_COUNT);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
sys_log(0, "GuildWar.StartError.UNKNOWN_ERROR");
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <20>ʵ<EFBFBD><CAB5><EFBFBD> üũ<C3BC><C5A9> <20>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> üũ<C3BC><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>³<EFBFBD><C2B3>Ҷ<EFBFBD> <20>Ѵ<EFBFBD>.
|
|
|
|
|
if (!opp_g->CanStartWar(GUILD_WAR_TYPE_FIELD))
|
|
|
|
|
{
|
|
|
|
|
if (opp_g->GetLadderPoint() == 0)
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<<3C><><EFBFBD><EFBFBD>> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
else if (opp_g->GetMemberCount() < GUILD_WAR_MIN_MEMBER_COUNT)
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<<3C><><EFBFBD><EFBFBD>> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
do
|
|
|
|
|
{
|
|
|
|
|
if (g->GetMasterCharacter() != NULL)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
CCI *pCCI = P2P_MANAGER::instance().FindByPID(g->GetMasterPID());
|
|
|
|
|
|
|
|
|
|
if (pCCI != NULL)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<<3C><><EFBFBD><EFBFBD>> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴմϴ<D5B4>."));
|
|
|
|
|
g->RequestRefuseWar(opp_g->GetID());
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
} while (false);
|
|
|
|
|
|
|
|
|
|
do
|
|
|
|
|
{
|
|
|
|
|
if (opp_g->GetMasterCharacter() != NULL)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
CCI *pCCI = P2P_MANAGER::instance().FindByPID(opp_g->GetMasterPID());
|
|
|
|
|
|
|
|
|
|
if (pCCI != NULL)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<<3C><><EFBFBD><EFBFBD>> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴմϴ<D5B4>."));
|
|
|
|
|
g->RequestRefuseWar(opp_g->GetID());
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
} while (false);
|
|
|
|
|
|
|
|
|
|
g->RequestDeclareWar(opp_g->GetID(), type);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_nowar)
|
|
|
|
|
{
|
|
|
|
|
CGuild* g = ch->GetGuild();
|
|
|
|
|
if (!g)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
char arg1[256];
|
|
|
|
|
one_argument(argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
if (!*arg1)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
DWORD gm_pid = g->GetMasterPID();
|
|
|
|
|
|
|
|
|
|
if (gm_pid != ch->GetPlayerID())
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<<3C><><EFBFBD><EFBFBD>> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CGuild* opp_g = CGuildManager::instance().FindGuildByName(arg1);
|
|
|
|
|
|
|
|
|
|
if (!opp_g)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<<3C><><EFBFBD><EFBFBD>> <20><EFBFBD> <20><><EFBFBD>尡 <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
g->RequestRefuseWar(opp_g->GetID());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_detaillog)
|
|
|
|
|
{
|
|
|
|
|
ch->DetailLog();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_monsterlog)
|
|
|
|
|
{
|
|
|
|
|
ch->ToggleMonsterLog();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_pkmode)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
one_argument(argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
if (!*arg1)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
BYTE mode = 0;
|
|
|
|
|
str_to_number(mode, arg1);
|
|
|
|
|
|
|
|
|
|
if (mode == PK_MODE_PROTECT)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (ch->GetLevel() < PK_PROTECT_LEVEL && mode != 0)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
ch->SetPKMode(mode);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_messenger_auth)
|
|
|
|
|
{
|
|
|
|
|
if (ch->GetArena())
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>忡<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͻ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
char arg1[256], arg2[256];
|
|
|
|
|
two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
|
|
|
|
|
|
|
|
|
|
if (!*arg1 || !*arg2)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
char answer = LOWER(*arg1);
|
|
|
|
|
|
|
|
|
|
if (answer != 'y')
|
|
|
|
|
{
|
|
|
|
|
LPCHARACTER tch = CHARACTER_MANAGER::instance().FindPC(arg2);
|
|
|
|
|
|
|
|
|
|
if (tch)
|
|
|
|
|
tch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ģ<><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ź<EFBFBD> <20><><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>."), ch->GetName());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MessengerManager::instance().AuthToAdd(ch->GetName(), arg2, answer == 'y' ? false : true); // DENY
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_setblockmode)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
one_argument(argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
if (*arg1)
|
|
|
|
|
{
|
|
|
|
|
BYTE flag = 0;
|
|
|
|
|
str_to_number(flag, arg1);
|
|
|
|
|
ch->SetBlockMode(flag);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_unmount)
|
|
|
|
|
{
|
|
|
|
|
if (true == ch->UnEquipSpecialRideUniqueItem())
|
|
|
|
|
{
|
|
|
|
|
ch->RemoveAffect(AFFECT_MOUNT);
|
|
|
|
|
ch->RemoveAffect(AFFECT_MOUNT_BONUS);
|
|
|
|
|
|
|
|
|
|
if (ch->IsHorseRiding())
|
|
|
|
|
{
|
|
|
|
|
ch->StopRiding();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("<EFBFBD>κ<EFBFBD><EFBFBD>丮<EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_observer_exit)
|
|
|
|
|
{
|
|
|
|
|
if (ch->IsObserverMode())
|
|
|
|
|
{
|
|
|
|
|
if (ch->GetWarMap())
|
|
|
|
|
ch->SetWarMap(NULL);
|
|
|
|
|
|
|
|
|
|
if (ch->GetArena() != NULL || ch->GetArenaObserverMode() == true)
|
|
|
|
|
{
|
|
|
|
|
ch->SetArenaObserverMode(false);
|
|
|
|
|
|
|
|
|
|
if (ch->GetArena() != NULL)
|
|
|
|
|
ch->GetArena()->RemoveObserver(ch->GetPlayerID());
|
|
|
|
|
|
|
|
|
|
ch->SetArena(NULL);
|
|
|
|
|
ch->WarpSet(ARENA_RETURN_POINT_X(ch->GetEmpire()), ARENA_RETURN_POINT_Y(ch->GetEmpire()));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ch->ExitToSavedLocation();
|
|
|
|
|
}
|
|
|
|
|
ch->SetObserverMode(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_view_equip)
|
|
|
|
|
{
|
|
|
|
|
if (ch->GetGMLevel() <= GM_PLAYER)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
char arg1[256];
|
|
|
|
|
one_argument(argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
if (*arg1)
|
|
|
|
|
{
|
|
|
|
|
DWORD vid = 0;
|
|
|
|
|
str_to_number(vid, arg1);
|
|
|
|
|
LPCHARACTER tch = CHARACTER_MANAGER::instance().Find(vid);
|
|
|
|
|
|
|
|
|
|
if (!tch)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (!tch->IsPC())
|
|
|
|
|
return;
|
|
|
|
|
/*
|
|
|
|
|
int iSPCost = ch->GetMaxSP() / 3;
|
|
|
|
|
|
|
|
|
|
if (ch->GetSP() < iSPCost)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
ch->PointChange(POINT_SP, -iSPCost);
|
|
|
|
|
*/
|
|
|
|
|
tch->SendEquipment(ch);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_party_request)
|
|
|
|
|
{
|
|
|
|
|
if (ch->GetArena())
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>忡<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͻ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ch->GetParty())
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD>̹<EFBFBD> <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><><EFBFBD>Խ<EFBFBD>û<EFBFBD><C3BB> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
char arg1[256];
|
|
|
|
|
one_argument(argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
if (!*arg1)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
DWORD vid = 0;
|
|
|
|
|
str_to_number(vid, arg1);
|
|
|
|
|
LPCHARACTER tch = CHARACTER_MANAGER::instance().Find(vid);
|
|
|
|
|
|
|
|
|
|
if (tch)
|
|
|
|
|
if (!ch->RequestToParty(tch))
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_COMMAND, "PartyRequestDenied");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_party_request_accept)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
one_argument(argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
if (!*arg1)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
DWORD vid = 0;
|
|
|
|
|
str_to_number(vid, arg1);
|
|
|
|
|
LPCHARACTER tch = CHARACTER_MANAGER::instance().Find(vid);
|
|
|
|
|
|
|
|
|
|
if (tch)
|
|
|
|
|
ch->AcceptToParty(tch);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_party_request_deny)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
one_argument(argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
if (!*arg1)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
DWORD vid = 0;
|
|
|
|
|
str_to_number(vid, arg1);
|
|
|
|
|
LPCHARACTER tch = CHARACTER_MANAGER::instance().Find(vid);
|
|
|
|
|
|
|
|
|
|
if (tch)
|
|
|
|
|
ch->DenyToParty(tch);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_monarch_warpto)
|
|
|
|
|
{
|
|
|
|
|
if (true == LC_IsYMIR() || true == LC_IsKorea())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (!CMonarch::instance().IsMonarch(ch->GetPlayerID(), ch->GetEmpire()))
|
|
|
|
|
{
|
|
|
|
|
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>"));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD> <20><>Ÿ<EFBFBD><C5B8> <20>˻<EFBFBD>
|
|
|
|
|
if (!ch->IsMCOK(CHARACTER::MI_WARP))
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d <20>ʰ<EFBFBD> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>."), ch->GetMCLTime(CHARACTER::MI_WARP));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD> <20><> <20><>ȯ <20><><EFBFBD><EFBFBD>
|
|
|
|
|
const int WarpPrice = 10000;
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD>
|
|
|
|
|
if (!CMonarch::instance().IsMoneyOk(WarpPrice, ch->GetEmpire()))
|
|
|
|
|
{
|
|
|
|
|
int NationMoney = CMonarch::instance().GetMoney(ch->GetEmpire());
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. <20><><EFBFBD><EFBFBD> : %u <20>ʿ<EFBFBD><CABF>ݾ<EFBFBD> : %u"), NationMoney, WarpPrice);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int x = 0, y = 0;
|
|
|
|
|
char arg1[256];
|
|
|
|
|
|
|
|
|
|
one_argument(argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
if (!*arg1)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: warpto <character name>"));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LPCHARACTER tch = CHARACTER_MANAGER::instance().FindPC(arg1);
|
|
|
|
|
|
|
|
|
|
if (!tch)
|
|
|
|
|
{
|
|
|
|
|
CCI * pkCCI = P2P_MANAGER::instance().Find(arg1);
|
|
|
|
|
|
|
|
|
|
if (pkCCI)
|
|
|
|
|
{
|
|
|
|
|
if (pkCCI->bEmpire != ch->GetEmpire())
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("Ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD> <20>̵<EFBFBD><CCB5>Ҽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>"));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (pkCCI->bChannel != g_bChannel)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d ä<>ο<EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. (<28><><EFBFBD><EFBFBD> ä<><C3A4> %d)"), pkCCI->bChannel, g_bChannel);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (!IsMonarchWarpZone(pkCCI->lMapIndex))
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("<EFBFBD>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD><CCB5><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PIXEL_POSITION pos;
|
|
|
|
|
|
|
|
|
|
if (!SECTREE_MANAGER::instance().GetCenterPositionOfMap(pkCCI->lMapIndex, pos))
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, "Cannot find map (index %d)", pkCCI->lMapIndex);
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//ch->ChatPacket(CHAT_TYPE_INFO, "You warp to (%d, %d)", pos.x, pos.y);
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s <20><><EFBFBD>Է<EFBFBD> <20>̵<EFBFBD><CCB5>մϴ<D5B4>"), arg1);
|
|
|
|
|
ch->WarpSet(pos.x, pos.y);
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD> <20><> <20>谨
|
|
|
|
|
CMonarch::instance().SendtoDBDecMoney(WarpPrice, ch->GetEmpire(), ch);
|
|
|
|
|
|
|
|
|
|
//<2F><>Ÿ<EFBFBD><C5B8> <20>ʱ<EFBFBD>ȭ
|
|
|
|
|
ch->SetMC(CHARACTER::MI_WARP);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (NULL == CHARACTER_MANAGER::instance().FindPC(arg1))
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, "There is no one by that name");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (tch->GetEmpire() != ch->GetEmpire())
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD> <20>̵<EFBFBD><CCB5>Ҽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>"));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (!IsMonarchWarpZone(tch->GetMapIndex()))
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("<EFBFBD>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD><CCB5><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
x = tch->GetX();
|
|
|
|
|
y = tch->GetY();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s <20><><EFBFBD>Է<EFBFBD> <20>̵<EFBFBD><CCB5>մϴ<D5B4>"), arg1);
|
|
|
|
|
ch->WarpSet(x, y);
|
|
|
|
|
ch->Stop();
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD> <20><> <20>谨
|
|
|
|
|
CMonarch::instance().SendtoDBDecMoney(WarpPrice, ch->GetEmpire(), ch);
|
|
|
|
|
|
|
|
|
|
//<2F><>Ÿ<EFBFBD><C5B8> <20>ʱ<EFBFBD>ȭ
|
|
|
|
|
ch->SetMC(CHARACTER::MI_WARP);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_monarch_transfer)
|
|
|
|
|
{
|
|
|
|
|
if (true == LC_IsYMIR() || true == LC_IsKorea())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
char arg1[256];
|
|
|
|
|
one_argument(argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
if (!*arg1)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: transfer <name>"));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!CMonarch::instance().IsMonarch(ch->GetPlayerID(), ch->GetEmpire()))
|
|
|
|
|
{
|
|
|
|
|
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>"));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD> <20><>Ÿ<EFBFBD><C5B8> <20>˻<EFBFBD>
|
|
|
|
|
if (!ch->IsMCOK(CHARACTER::MI_TRANSFER))
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d <20>ʰ<EFBFBD> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>."), ch->GetMCLTime(CHARACTER::MI_TRANSFER));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|
|
|
|
const int WarpPrice = 10000;
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD>
|
|
|
|
|
if (!CMonarch::instance().IsMoneyOk(WarpPrice, ch->GetEmpire()))
|
|
|
|
|
{
|
|
|
|
|
int NationMoney = CMonarch::instance().GetMoney(ch->GetEmpire());
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. <20><><EFBFBD><EFBFBD> : %u <20>ʿ<EFBFBD><CABF>ݾ<EFBFBD> : %u"), NationMoney, WarpPrice);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LPCHARACTER tch = CHARACTER_MANAGER::instance().FindPC(arg1);
|
|
|
|
|
|
|
|
|
|
if (!tch)
|
|
|
|
|
{
|
|
|
|
|
CCI * pkCCI = P2P_MANAGER::instance().Find(arg1);
|
|
|
|
|
|
|
|
|
|
if (pkCCI)
|
|
|
|
|
{
|
|
|
|
|
if (pkCCI->bEmpire != ch->GetEmpire())
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD><C8AF> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (pkCCI->bChannel != g_bChannel)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s <20><><EFBFBD><EFBFBD> %d ä<>ο<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>Դϴ<D4B4>. (<28><><EFBFBD><EFBFBD> ä<><C3A4>: %d)"), arg1, pkCCI->bChannel, g_bChannel);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (!IsMonarchWarpZone(pkCCI->lMapIndex))
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("<EFBFBD>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD><CCB5><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (!IsMonarchWarpZone(ch->GetMapIndex()))
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("<EFBFBD>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD><C8AF> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TPacketGGTransfer pgg;
|
|
|
|
|
|
|
|
|
|
pgg.bHeader = HEADER_GG_TRANSFER;
|
2023-05-01 08:10:00 +03:00
|
|
|
|
strlcpy(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, LC_TEXT("%s <20><><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>."), arg1);
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD> <20><> <20>谨
|
|
|
|
|
CMonarch::instance().SendtoDBDecMoney(WarpPrice, ch->GetEmpire(), ch);
|
|
|
|
|
//<2F><>Ÿ<EFBFBD><C5B8> <20>ʱ<EFBFBD>ȭ
|
|
|
|
|
ch->SetMC(CHARACTER::MI_TRANSFER);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD>Է<EFBFBD><EFBFBD>Ͻ<EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (ch == tch)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD><C8AF> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (tch->GetEmpire() != ch->GetEmpire())
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD><C8AF> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (!IsMonarchWarpZone(tch->GetMapIndex()))
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("<EFBFBD>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD><CCB5><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (!IsMonarchWarpZone(ch->GetMapIndex()))
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("<EFBFBD>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD><C8AF> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//tch->Show(ch->GetMapIndex(), ch->GetX(), ch->GetY(), ch->GetZ());
|
|
|
|
|
tch->WarpSet(ch->GetX(), ch->GetY(), ch->GetMapIndex());
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD> <20><> <20>谨
|
|
|
|
|
CMonarch::instance().SendtoDBDecMoney(WarpPrice, ch->GetEmpire(), ch);
|
|
|
|
|
//<2F><>Ÿ<EFBFBD><C5B8> <20>ʱ<EFBFBD>ȭ
|
|
|
|
|
ch->SetMC(CHARACTER::MI_TRANSFER);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_monarch_info)
|
|
|
|
|
{
|
|
|
|
|
if (CMonarch::instance().IsMonarch(ch->GetPlayerID(), ch->GetEmpire()))
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>"));
|
|
|
|
|
TMonarchInfo * p = CMonarch::instance().GetMonarch();
|
|
|
|
|
for (int n = 1; n < 4; ++n)
|
|
|
|
|
{
|
|
|
|
|
if (n == ch->GetEmpire())
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[%s<><73><EFBFBD><EFBFBD>] : %s <20><><EFBFBD><EFBFBD><EFBFBD>ݾ<EFBFBD> %lld "), EMPIRE_NAME(n), p->name[n], p->money[n]);
|
|
|
|
|
else
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[%s<><73><EFBFBD><EFBFBD>] : %s "), EMPIRE_NAME(n), p->name[n]);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>"));
|
|
|
|
|
TMonarchInfo * p = CMonarch::instance().GetMonarch();
|
|
|
|
|
for (int n = 1; n < 4; ++n)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[%s<><73><EFBFBD><EFBFBD>] : %s "), EMPIRE_NAME(n), p->name[n]);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_elect)
|
|
|
|
|
{
|
|
|
|
|
db_clientdesc->DBPacketHeader(HEADER_GD_COME_TO_VOTE, ch->GetDesc()->GetHandle(), 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 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;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
extern void BroadcastNotice(const char * c_pszBuf);
|
|
|
|
|
|
|
|
|
|
ACMD(do_monarch_tax)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
one_argument(argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
if (!*arg1)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, "Usage: monarch_tax <1-50>");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD>
|
|
|
|
|
if (!ch->IsMonarch())
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>"));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>
|
|
|
|
|
int tax = 0;
|
|
|
|
|
str_to_number(tax, arg1);
|
|
|
|
|
|
|
|
|
|
if (tax < 1 || tax > 50)
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("1-50 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>"));
|
|
|
|
|
|
|
|
|
|
quest::CQuestManager::instance().SetEventFlag("trade_tax", tax);
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD> <20><EFBFBD><DEBC><EFBFBD> <20>ϳ<EFBFBD>
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d %<25><> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>"));
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>
|
|
|
|
|
char szMsg[1024];
|
|
|
|
|
|
|
|
|
|
snprintf(szMsg, sizeof(szMsg), "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d %% <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>", tax);
|
|
|
|
|
BroadcastNotice(szMsg);
|
|
|
|
|
|
|
|
|
|
snprintf(szMsg, sizeof(szMsg), "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD> <20>ŷ<EFBFBD> <20>ݾ<EFBFBD><DDBE><EFBFBD> %d %% <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ե˴ϴ<CBB4>.", tax);
|
|
|
|
|
BroadcastNotice(szMsg);
|
|
|
|
|
|
|
|
|
|
// <20><>Ÿ<EFBFBD><C5B8> <20>ʱ<EFBFBD>ȭ
|
|
|
|
|
ch->SetMC(CHARACTER::MI_TAX);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static const DWORD cs_dwMonarchMobVnums[] =
|
|
|
|
|
{
|
|
|
|
|
191, // <09><><EFBFBD>߽<EFBFBD>
|
|
|
|
|
192, // <09><><EFBFBD><EFBFBD>
|
|
|
|
|
193, // <09><><EFBFBD><EFBFBD>
|
|
|
|
|
194, // ȣ<><C8A3>
|
|
|
|
|
391, // <09><><EFBFBD><EFBFBD>
|
|
|
|
|
392, // <09><><EFBFBD><EFBFBD>
|
|
|
|
|
393, // <09><><EFBFBD><EFBFBD>
|
|
|
|
|
394, // <09><><EFBFBD><EFBFBD>
|
|
|
|
|
491, // <09><>ȯ
|
|
|
|
|
492, // <09><><EFBFBD><EFBFBD>
|
|
|
|
|
493, // <09><><EFBFBD><EFBFBD>
|
|
|
|
|
494, // <09><><EFBFBD><EFBFBD>
|
|
|
|
|
591, // <09><><EFBFBD><EFBFBD><EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>
|
|
|
|
|
691, // <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|
|
|
|
791, // <09>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
1304, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
1901, // <20><><EFBFBD><EFBFBD>ȣ
|
|
|
|
|
2091, // <20><><EFBFBD>հŹ<D5B0>
|
|
|
|
|
2191, // <20>Ŵ<EFBFBD><C5B4>縷<EFBFBD>ź<EFBFBD>
|
|
|
|
|
2206, // ȭ<><C8AD><EFBFBD><EFBFBD>i
|
|
|
|
|
0,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
ACMD(do_monarch_mob)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
LPCHARACTER tch;
|
|
|
|
|
|
|
|
|
|
one_argument(argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
if (!ch->IsMonarch())
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>"));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!*arg1)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, "Usage: mmob <mob name>");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BYTE pcEmpire = ch->GetEmpire();
|
|
|
|
|
BYTE mapEmpire = SECTREE_MANAGER::instance().GetEmpireFromMapIndex(ch->GetMapIndex());
|
|
|
|
|
|
|
|
|
|
if (LC_IsYMIR() == true || LC_IsKorea() == true)
|
|
|
|
|
{
|
|
|
|
|
if (mapEmpire != pcEmpire && mapEmpire != 0)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD>ڱ<EFBFBD> <20><><EFBFBD>信<EFBFBD><E4BFA1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>"));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD> <20><> <20><>ȯ <20><><EFBFBD><EFBFBD>
|
|
|
|
|
const int SummonPrice = 5000000;
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD> <20><>Ÿ<EFBFBD><C5B8> <20>˻<EFBFBD>
|
|
|
|
|
if (!ch->IsMCOK(CHARACTER::MI_SUMMON))
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d <20>ʰ<EFBFBD> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>."), ch->GetMCLTime(CHARACTER::MI_SUMMON));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD>
|
|
|
|
|
if (!CMonarch::instance().IsMoneyOk(SummonPrice, ch->GetEmpire()))
|
|
|
|
|
{
|
|
|
|
|
int NationMoney = CMonarch::instance().GetMoney(ch->GetEmpire());
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. <20><><EFBFBD><EFBFBD> : %u <20>ʿ<EFBFBD><CABF>ݾ<EFBFBD> : %u"), NationMoney, SummonPrice);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const CMob * pkMob;
|
|
|
|
|
DWORD vnum = 0;
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DWORD count;
|
|
|
|
|
|
|
|
|
|
// <20><>ȯ <20><><EFBFBD><EFBFBD> <20><> <20>˻<EFBFBD>
|
|
|
|
|
for (count = 0; cs_dwMonarchMobVnums[count] != 0; ++count)
|
|
|
|
|
if (cs_dwMonarchMobVnums[count] == vnum)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
if (0 == cs_dwMonarchMobVnums[count])
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD>ȯ<EFBFBD>Ҽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Դϴ<D4B4>. <20><>ȯ<EFBFBD><C8AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD> Ȩ<><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>"));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tch = CHARACTER_MANAGER::instance().SpawnMobRange(vnum,
|
|
|
|
|
ch->GetMapIndex(),
|
2022-11-27 14:36:04 +02:00
|
|
|
|
ch->GetX() - Random::get(200, 750),
|
|
|
|
|
ch->GetY() - Random::get(200, 750),
|
|
|
|
|
ch->GetX() + Random::get(200, 750),
|
|
|
|
|
ch->GetY() + Random::get(200, 750),
|
2022-03-05 12:44:06 +02:00
|
|
|
|
true,
|
|
|
|
|
pkMob->m_table.bType == CHAR_TYPE_STONE,
|
|
|
|
|
true);
|
|
|
|
|
|
|
|
|
|
if (tch)
|
|
|
|
|
{
|
|
|
|
|
// <20><><EFBFBD><EFBFBD> <20><> <20>谨
|
|
|
|
|
CMonarch::instance().SendtoDBDecMoney(SummonPrice, ch->GetEmpire(), ch);
|
|
|
|
|
|
|
|
|
|
// <20><>Ÿ<EFBFBD><C5B8> <20>ʱ<EFBFBD>ȭ
|
|
|
|
|
ch->SetMC(CHARACTER::MI_SUMMON);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static const char* FN_point_string(int apply_number)
|
|
|
|
|
{
|
|
|
|
|
switch (apply_number)
|
|
|
|
|
{
|
|
|
|
|
case POINT_MAX_HP: return LC_TEXT("<EFBFBD>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> +%d");
|
|
|
|
|
case POINT_MAX_SP: return LC_TEXT("<EFBFBD>ִ<EFBFBD> <20><><EFBFBD>ŷ<EFBFBD> +%d");
|
|
|
|
|
case POINT_HT: return LC_TEXT("ü<EFBFBD><EFBFBD> +%d");
|
|
|
|
|
case POINT_IQ: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> +%d");
|
|
|
|
|
case POINT_ST: return LC_TEXT("<EFBFBD>ٷ<EFBFBD> +%d");
|
|
|
|
|
case POINT_DX: return LC_TEXT("<EFBFBD><EFBFBD>ø +%d");
|
|
|
|
|
case POINT_ATT_SPEED: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD>ݼӵ<EFBFBD> +%d");
|
|
|
|
|
case POINT_MOV_SPEED: return LC_TEXT("<EFBFBD>̵<EFBFBD><EFBFBD>ӵ<EFBFBD> %d");
|
|
|
|
|
case POINT_CASTING_SPEED: return LC_TEXT("<EFBFBD><EFBFBD>Ÿ<EFBFBD><EFBFBD> -%d");
|
|
|
|
|
case POINT_HP_REGEN: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȸ<><C8B8> +%d");
|
|
|
|
|
case POINT_SP_REGEN: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD> ȸ<><C8B8> +%d");
|
|
|
|
|
case POINT_POISON_PCT: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d");
|
|
|
|
|
case POINT_STUN_PCT: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> +%d");
|
|
|
|
|
case POINT_SLOW_PCT: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD> +%d");
|
|
|
|
|
case POINT_CRITICAL_PCT: return LC_TEXT("%d%% Ȯ<><C8AE><EFBFBD><EFBFBD> ġ<><C4A1>Ÿ <20><><EFBFBD><EFBFBD>");
|
|
|
|
|
case POINT_RESIST_CRITICAL: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ġ<><C4A1>Ÿ Ȯ<><C8AE> %d%% <20><><EFBFBD><EFBFBD>");
|
|
|
|
|
case POINT_PENETRATE_PCT: return LC_TEXT("%d%% Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>");
|
|
|
|
|
case POINT_RESIST_PENETRATE: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE> %d%% <20><><EFBFBD><EFBFBD>");
|
|
|
|
|
case POINT_ATTBONUS_HUMAN: return LC_TEXT("<EFBFBD>ΰ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8>ġ +%d%%");
|
|
|
|
|
case POINT_ATTBONUS_ANIMAL: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8>ġ +%d%%");
|
|
|
|
|
case POINT_ATTBONUS_ORC: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8>ġ +%d%%");
|
|
|
|
|
case POINT_ATTBONUS_MILGYO: return LC_TEXT("<EFBFBD>б<EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8>ġ +%d%%");
|
|
|
|
|
case POINT_ATTBONUS_UNDEAD: return LC_TEXT("<EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD> Ÿ<><C5B8>ġ +%d%%");
|
|
|
|
|
case POINT_ATTBONUS_DEVIL: return LC_TEXT("<EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8>ġ +%d%%");
|
|
|
|
|
case POINT_STEAL_HP: return LC_TEXT("Ÿ<EFBFBD><EFBFBD>ġ %d%% <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>");
|
|
|
|
|
case POINT_STEAL_SP: return LC_TEXT("Ÿ<EFBFBD><EFBFBD>ġ %d%% <20><> <20><><EFBFBD>ŷ<EFBFBD><C5B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>");
|
|
|
|
|
case POINT_MANA_BURN_PCT: return LC_TEXT("%d%% Ȯ<><C8AE><EFBFBD><EFBFBD> Ÿ<>ݽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ŷ<EFBFBD> <20>Ҹ<EFBFBD>");
|
|
|
|
|
case POINT_DAMAGE_SP_RECOVER: return LC_TEXT("%d%% Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD>ؽ<EFBFBD> <20><><EFBFBD>ŷ<EFBFBD> ȸ<><C8B8>");
|
|
|
|
|
case POINT_BLOCK: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD>ݽ<EFBFBD> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE> %d%%");
|
|
|
|
|
case POINT_DODGE: return LC_TEXT("Ȱ <20><><EFBFBD><EFBFBD> ȸ<><C8B8> Ȯ<><C8AE> %d%%");
|
|
|
|
|
case POINT_RESIST_SWORD: return LC_TEXT("<EFBFBD>Ѽհ<EFBFBD> <20><><EFBFBD><EFBFBD> %d%%");
|
|
|
|
|
case POINT_RESIST_TWOHAND: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD>հ<EFBFBD> <20><><EFBFBD><EFBFBD> %d%%");
|
|
|
|
|
case POINT_RESIST_DAGGER: return LC_TEXT("<EFBFBD>μհ<EFBFBD> <20><><EFBFBD><EFBFBD> %d%%");
|
|
|
|
|
case POINT_RESIST_BELL: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %d%%");
|
|
|
|
|
case POINT_RESIST_FAN: return LC_TEXT("<EFBFBD><EFBFBD>ä <20><><EFBFBD><EFBFBD> %d%%");
|
|
|
|
|
case POINT_RESIST_BOW: return LC_TEXT("Ȱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %d%%");
|
|
|
|
|
case POINT_RESIST_FIRE: return LC_TEXT("ȭ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %d%%");
|
|
|
|
|
case POINT_RESIST_ELEC: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %d%%");
|
|
|
|
|
case POINT_RESIST_MAGIC: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %d%%");
|
|
|
|
|
case POINT_RESIST_WIND: return LC_TEXT("<EFBFBD>ٶ<EFBFBD> <20><><EFBFBD><EFBFBD> %d%%");
|
|
|
|
|
case POINT_RESIST_ICE: return LC_TEXT("<EFBFBD>ñ<EFBFBD> <20><><EFBFBD><EFBFBD> %d%%");
|
|
|
|
|
case POINT_RESIST_EARTH: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %d%%");
|
|
|
|
|
case POINT_RESIST_DARK: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %d%%");
|
|
|
|
|
case POINT_REFLECT_MELEE: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8>ġ <20>ݻ<EFBFBD> Ȯ<><C8AE> : %d%%");
|
|
|
|
|
case POINT_REFLECT_CURSE: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD> Ȯ<><C8AE> %d%%");
|
|
|
|
|
case POINT_POISON_REDUCE: return LC_TEXT("<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %d%%");
|
|
|
|
|
case POINT_KILL_SP_RECOVER: return LC_TEXT("%d%% Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ġ<EFBFBD><C4A1> <20><><EFBFBD>ŷ<EFBFBD> ȸ<><C8B8>");
|
|
|
|
|
case POINT_EXP_DOUBLE_BONUS: return LC_TEXT("%d%% Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD>ġ <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD>");
|
|
|
|
|
case POINT_GOLD_DOUBLE_BONUS: return LC_TEXT("%d%% Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ġ<EFBFBD><C4A1> <20><> 2<><32> <20><><EFBFBD><EFBFBD>");
|
|
|
|
|
case POINT_ITEM_DROP_BONUS: return LC_TEXT("%d%% Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2<><32> <20><><EFBFBD><EFBFBD>");
|
|
|
|
|
case POINT_POTION_BONUS: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d%% <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>");
|
|
|
|
|
case POINT_KILL_HP_RECOVERY: return LC_TEXT("%d%% Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȸ<><C8B8>");
|
|
|
|
|
// case POINT_IMMUNE_STUN: return LC_TEXT("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %d%%");
|
|
|
|
|
// case POINT_IMMUNE_SLOW: return LC_TEXT("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %d%%");
|
|
|
|
|
// case POINT_IMMUNE_FALL: return LC_TEXT("<22>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %d%%");
|
|
|
|
|
// case POINT_SKILL: return LC_TEXT("");
|
|
|
|
|
// case POINT_BOW_DISTANCE: return LC_TEXT("");
|
|
|
|
|
case POINT_ATT_GRADE_BONUS: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD> +%d");
|
|
|
|
|
case POINT_DEF_GRADE_BONUS: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> +%d");
|
|
|
|
|
case POINT_MAGIC_ATT_GRADE: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ݷ<EFBFBD> +%d");
|
|
|
|
|
case POINT_MAGIC_DEF_GRADE: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> +%d");
|
|
|
|
|
// case POINT_CURSE_PCT: return LC_TEXT("");
|
|
|
|
|
case POINT_MAX_STAMINA: return LC_TEXT("<EFBFBD>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> +%d");
|
|
|
|
|
case POINT_ATTBONUS_WARRIOR: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD>翡<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> +%d%%");
|
|
|
|
|
case POINT_ATTBONUS_ASSASSIN: return LC_TEXT("<EFBFBD>ڰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> +%d%%");
|
|
|
|
|
case POINT_ATTBONUS_SURA: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> +%d%%");
|
|
|
|
|
case POINT_ATTBONUS_SHAMAN: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD>翡<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> +%d%%");
|
|
|
|
|
case POINT_ATTBONUS_MONSTER: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> +%d%%");
|
|
|
|
|
case POINT_MALL_ATTBONUS: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD> +%d%%");
|
|
|
|
|
case POINT_MALL_DEFBONUS: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> +%d%%");
|
|
|
|
|
case POINT_MALL_EXPBONUS: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ %d%%");
|
|
|
|
|
case POINT_MALL_ITEMBONUS: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %.1f<EFBFBD><EFBFBD>");
|
|
|
|
|
case POINT_MALL_GOLDBONUS: return LC_TEXT("<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %.1f<EFBFBD><EFBFBD>");
|
|
|
|
|
case POINT_MAX_HP_PCT: return LC_TEXT("<EFBFBD>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> +%d%%");
|
|
|
|
|
case POINT_MAX_SP_PCT: return LC_TEXT("<EFBFBD>ִ<EFBFBD> <20><><EFBFBD>ŷ<EFBFBD> +%d%%");
|
|
|
|
|
case POINT_SKILL_DAMAGE_BONUS: return LC_TEXT("<EFBFBD><EFBFBD>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d%%");
|
|
|
|
|
case POINT_NORMAL_HIT_DAMAGE_BONUS: return LC_TEXT("<EFBFBD><EFBFBD>Ÿ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d%%");
|
|
|
|
|
case POINT_SKILL_DEFEND_BONUS: return LC_TEXT("<EFBFBD><EFBFBD>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %d%%");
|
|
|
|
|
case POINT_NORMAL_HIT_DEFEND_BONUS: return LC_TEXT("<EFBFBD><EFBFBD>Ÿ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %d%%");
|
|
|
|
|
// case POINT_PC_BANG_EXP_BONUS: return LC_TEXT("");
|
|
|
|
|
// case POINT_PC_BANG_DROP_BONUS: return LC_TEXT("");
|
|
|
|
|
// case POINT_EXTRACT_HP_PCT: return LC_TEXT("");
|
|
|
|
|
case POINT_RESIST_WARRIOR: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD> %d%% <20><><EFBFBD><EFBFBD>");
|
|
|
|
|
case POINT_RESIST_ASSASSIN: return LC_TEXT("<EFBFBD>ڰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD> %d%% <20><><EFBFBD><EFBFBD>");
|
|
|
|
|
case POINT_RESIST_SURA: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD> %d%% <20><><EFBFBD><EFBFBD>");
|
|
|
|
|
case POINT_RESIST_SHAMAN: return LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD> %d%% <20><><EFBFBD><EFBFBD>");
|
|
|
|
|
default: return NULL;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static bool FN_hair_affect_string(LPCHARACTER ch, char *buf, size_t bufsiz)
|
|
|
|
|
{
|
|
|
|
|
if (NULL == ch || NULL == buf)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
CAffect* aff = NULL;
|
|
|
|
|
time_t expire = 0;
|
|
|
|
|
struct tm ltm;
|
|
|
|
|
int year, mon, day;
|
|
|
|
|
int offset = 0;
|
|
|
|
|
|
|
|
|
|
aff = ch->FindAffect(AFFECT_HAIR);
|
|
|
|
|
|
|
|
|
|
if (NULL == aff)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
expire = ch->GetQuestFlag("hair.limit_time");
|
|
|
|
|
|
|
|
|
|
if (expire < get_global_time())
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
// set apply string
|
|
|
|
|
offset = snprintf(buf, bufsiz, FN_point_string(aff->bApplyOn), aff->lApplyValue);
|
|
|
|
|
|
|
|
|
|
if (offset < 0 || offset >= (int) bufsiz)
|
|
|
|
|
offset = bufsiz - 1;
|
|
|
|
|
|
|
|
|
|
localtime_r(&expire, <m);
|
|
|
|
|
|
|
|
|
|
year = ltm.tm_year + 1900;
|
|
|
|
|
mon = ltm.tm_mon + 1;
|
|
|
|
|
day = ltm.tm_mday;
|
|
|
|
|
|
|
|
|
|
snprintf(buf + offset, bufsiz - offset, LC_TEXT(" (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : %d<><64> %d<><64> %d<><64>)"), year, mon, day);
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_costume)
|
|
|
|
|
{
|
|
|
|
|
char buf[512];
|
|
|
|
|
const size_t bufferSize = sizeof(buf);
|
|
|
|
|
|
|
|
|
|
char arg1[256];
|
|
|
|
|
one_argument(argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
CItem* pBody = ch->GetWear(WEAR_COSTUME_BODY);
|
|
|
|
|
CItem* pHair = ch->GetWear(WEAR_COSTUME_HAIR);
|
|
|
|
|
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, "COSTUME status:");
|
|
|
|
|
|
|
|
|
|
if (pHair)
|
|
|
|
|
{
|
|
|
|
|
const char* itemName = pHair->GetName();
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, " HAIR : %s", itemName);
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < pHair->GetAttributeCount(); ++i)
|
|
|
|
|
{
|
|
|
|
|
const TPlayerItemAttribute& attr = pHair->GetAttribute(i);
|
|
|
|
|
if (0 < attr.bType)
|
|
|
|
|
{
|
|
|
|
|
snprintf(buf, bufferSize, FN_point_string(attr.bType), attr.sValue);
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, " %s", buf);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (pHair->IsEquipped() && arg1[0] == 'h')
|
|
|
|
|
ch->UnequipItem(pHair);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (pBody)
|
|
|
|
|
{
|
|
|
|
|
const char* itemName = pBody->GetName();
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, " BODY : %s", itemName);
|
|
|
|
|
|
|
|
|
|
if (pBody->IsEquipped() && arg1[0] == 'b')
|
|
|
|
|
ch->UnequipItem(pBody);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_hair)
|
|
|
|
|
{
|
|
|
|
|
char buf[256];
|
|
|
|
|
|
|
|
|
|
if (false == FN_hair_affect_string(ch, buf, sizeof(buf)))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, buf);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_inventory)
|
|
|
|
|
{
|
|
|
|
|
int index = 0;
|
|
|
|
|
int count = 1;
|
|
|
|
|
|
|
|
|
|
char arg1[256];
|
|
|
|
|
char arg2[256];
|
|
|
|
|
|
|
|
|
|
LPITEM item;
|
|
|
|
|
|
|
|
|
|
two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
|
|
|
|
|
|
|
|
|
|
if (!*arg1)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, "Usage: inventory <start_index> <count>");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!*arg2)
|
|
|
|
|
{
|
|
|
|
|
index = 0;
|
|
|
|
|
str_to_number(count, arg1);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2022-11-27 22:18:08 +02:00
|
|
|
|
str_to_number(index, arg1); index = std::min<int>(index, INVENTORY_MAX_NUM);
|
|
|
|
|
str_to_number(count, arg2); count = std::min<int>(count, INVENTORY_MAX_NUM);
|
2022-03-05 12:44:06 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < count; ++i)
|
|
|
|
|
{
|
|
|
|
|
if (index >= INVENTORY_MAX_NUM)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
item = ch->GetInventoryItem(index);
|
|
|
|
|
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, "inventory [%d] = %s",
|
|
|
|
|
index, item ? item->GetName() : "<NONE>");
|
|
|
|
|
++index;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//gift notify quest command
|
|
|
|
|
ACMD(do_gift)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_COMMAND, "gift");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_cube)
|
|
|
|
|
{
|
|
|
|
|
if (!ch->CanDoCube())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
dev_log(LOG_DEB0, "CUBE COMMAND <%s>: %s", ch->GetName(), argument);
|
|
|
|
|
int cube_index = 0, inven_index = 0;
|
|
|
|
|
const char *line;
|
|
|
|
|
|
|
|
|
|
char arg1[256], arg2[256], arg3[256];
|
|
|
|
|
|
|
|
|
|
line = two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
|
|
|
|
|
one_argument(line, arg3, sizeof(arg3));
|
|
|
|
|
|
|
|
|
|
if (0 == arg1[0])
|
|
|
|
|
{
|
|
|
|
|
// print usage
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, "Usage: cube open");
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, " cube close");
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, " cube add <inveltory_index>");
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, " cube delete <cube_index>");
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, " cube list");
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, " cube cancel");
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, " cube make [all]");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const std::string& strArg1 = std::string(arg1);
|
|
|
|
|
|
|
|
|
|
// r_info (request information)
|
|
|
|
|
// /cube r_info ==> (Client -> Server) <20><><EFBFBD><EFBFBD> NPC<50><43> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û
|
|
|
|
|
// (Server -> Client) /cube r_list npcVNUM resultCOUNT 123,1/125,1/128,1/130,5
|
|
|
|
|
//
|
|
|
|
|
// /cube r_info 3 ==> (Client -> Server) <20><><EFBFBD><EFBFBD> NPC<50><43> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 3<><33>° <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û
|
|
|
|
|
// /cube r_info 3 5 ==> (Client -> Server) <20><><EFBFBD><EFBFBD> NPC<50><43> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 3<><33>° <20><><EFBFBD><EFBFBD><EFBFBD>ۺ<EFBFBD><DBBA><EFBFBD> <20><><EFBFBD><EFBFBD> 5<><35><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û
|
|
|
|
|
// (Server -> Client) /cube m_info startIndex count 125,1|126,2|127,2|123,5&555,5&555,4/120000@125,1|126,2|127,2|123,5&555,5&555,4/120000
|
|
|
|
|
//
|
|
|
|
|
if (strArg1 == "r_info")
|
|
|
|
|
{
|
|
|
|
|
if (0 == arg2[0])
|
|
|
|
|
Cube_request_result_list(ch);
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (isdigit(*arg2))
|
|
|
|
|
{
|
|
|
|
|
int listIndex = 0, requestCount = 1;
|
|
|
|
|
str_to_number(listIndex, arg2);
|
|
|
|
|
|
|
|
|
|
if (0 != arg3[0] && isdigit(*arg3))
|
|
|
|
|
str_to_number(requestCount, arg3);
|
|
|
|
|
|
|
|
|
|
Cube_request_material_info(ch, listIndex, requestCount);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch (LOWER(arg1[0]))
|
|
|
|
|
{
|
|
|
|
|
case 'o': // open
|
|
|
|
|
Cube_open(ch);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 'c': // close
|
|
|
|
|
Cube_close(ch);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 'l': // list
|
|
|
|
|
Cube_show_list(ch);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 'a': // add cue_index inven_index
|
|
|
|
|
{
|
|
|
|
|
if (0 == arg2[0] || !isdigit(*arg2) ||
|
|
|
|
|
0 == arg3[0] || !isdigit(*arg3))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
str_to_number(cube_index, arg2);
|
|
|
|
|
str_to_number(inven_index, arg3);
|
|
|
|
|
Cube_add_item (ch, cube_index, inven_index);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 'd': // delete
|
|
|
|
|
{
|
|
|
|
|
if (0 == arg2[0] || !isdigit(*arg2))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
str_to_number(cube_index, arg2);
|
|
|
|
|
Cube_delete_item (ch, cube_index);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 'm': // make
|
|
|
|
|
if (0 != arg2[0])
|
|
|
|
|
{
|
|
|
|
|
while (true == Cube_make(ch))
|
|
|
|
|
dev_log (LOG_DEB0, "cube make success");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
Cube_make(ch);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_in_game_mall)
|
|
|
|
|
{
|
|
|
|
|
if (LC_IsYMIR() == true || LC_IsKorea() == true)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_COMMAND, "mall http://metin2.co.kr/04_mall/mall/login.htm");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (true == LC_IsTaiwan())
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_COMMAND, "mall http://203.69.141.203/mall/mall/item_main.htm");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <20><>_<EFBFBD><5F> <20>赵<EFBFBD><E8B5B5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۸<EFBFBD> URL <20>ϵ<EFBFBD><CFB5>ڵ<EFBFBD> <20>߰<EFBFBD>
|
|
|
|
|
if (true == LC_IsWE_Korea())
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_COMMAND, "mall http://metin2.co.kr/50_we_mall/mall/login.htm");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (LC_IsJapan() == true)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_COMMAND, "mall http://mt2.oge.jp/itemmall/itemList.php");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (LC_IsNewCIBN() == true && test_server)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_COMMAND, "mall http://218.99.6.51/04_mall/mall/login.htm");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (LC_IsSingapore() == true)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_COMMAND, "mall http://www.metin2.sg/ishop.php");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
if (LC_IsCanada() == true)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_COMMAND, "mall http://mall.z8games.com/mall_entry.aspx?tb=m2");
|
|
|
|
|
return;
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
if (LC_IsEurope() == true)
|
|
|
|
|
{
|
|
|
|
|
char country_code[3];
|
|
|
|
|
|
|
|
|
|
switch (LC_GetLocalType())
|
|
|
|
|
{
|
|
|
|
|
case LC_GERMANY: country_code[0] = 'd'; country_code[1] = 'e'; country_code[2] = '\0'; break;
|
|
|
|
|
case LC_FRANCE: country_code[0] = 'f'; country_code[1] = 'r'; country_code[2] = '\0'; break;
|
|
|
|
|
case LC_ITALY: country_code[0] = 'i'; country_code[1] = 't'; country_code[2] = '\0'; break;
|
|
|
|
|
case LC_SPAIN: country_code[0] = 'e'; country_code[1] = 's'; country_code[2] = '\0'; break;
|
|
|
|
|
case LC_UK: country_code[0] = 'e'; country_code[1] = 'n'; country_code[2] = '\0'; break;
|
|
|
|
|
case LC_TURKEY: country_code[0] = 't'; country_code[1] = 'r'; country_code[2] = '\0'; break;
|
|
|
|
|
case LC_POLAND: country_code[0] = 'p'; country_code[1] = 'l'; country_code[2] = '\0'; break;
|
|
|
|
|
case LC_PORTUGAL: country_code[0] = 'p'; country_code[1] = 't'; country_code[2] = '\0'; break;
|
|
|
|
|
case LC_GREEK: country_code[0] = 'g'; country_code[1] = 'r'; country_code[2] = '\0'; break;
|
|
|
|
|
case LC_RUSSIA: country_code[0] = 'r'; country_code[1] = 'u'; country_code[2] = '\0'; break;
|
|
|
|
|
case LC_DENMARK: country_code[0] = 'd'; country_code[1] = 'k'; country_code[2] = '\0'; break;
|
|
|
|
|
case LC_BULGARIA: country_code[0] = 'b'; country_code[1] = 'g'; country_code[2] = '\0'; break;
|
|
|
|
|
case LC_CROATIA: country_code[0] = 'h'; country_code[1] = 'r'; country_code[2] = '\0'; break;
|
|
|
|
|
case LC_MEXICO: country_code[0] = 'm'; country_code[1] = 'x'; country_code[2] = '\0'; break;
|
|
|
|
|
case LC_ARABIA: country_code[0] = 'a'; country_code[1] = 'e'; country_code[2] = '\0'; break;
|
|
|
|
|
case LC_CZECH: country_code[0] = 'c'; country_code[1] = 'z'; country_code[2] = '\0'; break;
|
|
|
|
|
case LC_ROMANIA: country_code[0] = 'r'; country_code[1] = 'o'; country_code[2] = '\0'; break;
|
|
|
|
|
case LC_HUNGARY: country_code[0] = 'h'; country_code[1] = 'u'; country_code[2] = '\0'; break;
|
|
|
|
|
case LC_NETHERLANDS: country_code[0] = 'n'; country_code[1] = 'l'; country_code[2] = '\0'; break;
|
|
|
|
|
case LC_USA: country_code[0] = 'u'; country_code[1] = 's'; country_code[2] = '\0'; break;
|
|
|
|
|
case LC_CANADA: country_code[0] = 'c'; country_code[1] = 'a'; country_code[2] = '\0'; break;
|
|
|
|
|
default:
|
|
|
|
|
if (test_server == true)
|
|
|
|
|
{
|
|
|
|
|
country_code[0] = 'd'; country_code[1] = 'e'; country_code[2] = '\0';
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
char buf[512+1];
|
|
|
|
|
|
2022-03-06 17:36:43 +02:00
|
|
|
|
snprintf(buf, sizeof(buf), "mall http://%s/ishop?pid=%u&c=%s&sid=%d",
|
|
|
|
|
g_strWebMallURL.c_str(), ch->GetPlayerID(), country_code, g_server_id);
|
2022-03-05 12:44:06 +02:00
|
|
|
|
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_COMMAND, buf);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <20>ֻ<EFBFBD><D6BB><EFBFBD>
|
|
|
|
|
ACMD(do_dice)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256], arg2[256];
|
|
|
|
|
int start = 1, end = 100;
|
|
|
|
|
|
|
|
|
|
two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
|
|
|
|
|
|
|
|
|
|
if (*arg1 && *arg2)
|
|
|
|
|
{
|
|
|
|
|
start = atoi(arg1);
|
|
|
|
|
end = atoi(arg2);
|
|
|
|
|
}
|
|
|
|
|
else if (*arg1 && !*arg2)
|
|
|
|
|
{
|
|
|
|
|
start = 1;
|
|
|
|
|
end = atoi(arg1);
|
|
|
|
|
}
|
|
|
|
|
|
2022-11-27 22:18:08 +02:00
|
|
|
|
end = std::max(start, end);
|
|
|
|
|
start = std::min(start, end);
|
2022-03-05 12:44:06 +02:00
|
|
|
|
|
2022-11-27 14:36:04 +02:00
|
|
|
|
int n = Random::get(start, end);
|
2022-03-05 12:44:06 +02:00
|
|
|
|
|
|
|
|
|
if (ch->GetParty())
|
|
|
|
|
ch->GetParty()->ChatPacketToAllMember(CHAT_TYPE_INFO, LC_TEXT("%s<><73><EFBFBD><EFBFBD> <20>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %d<><64> <20><><EFBFBD>Խ<EFBFBD><D4BD>ϴ<EFBFBD>. (%d-%d)"), ch->GetName(), n, start, end);
|
|
|
|
|
else
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %d<><64> <20><><EFBFBD>Խ<EFBFBD><D4BD>ϴ<EFBFBD>. (%d-%d)"), n, start, end);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_click_mall)
|
|
|
|
|
{
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_COMMAND, "ShowMeMallPassword");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_ride)
|
|
|
|
|
{
|
|
|
|
|
dev_log(LOG_DEB0, "[DO_RIDE] start");
|
|
|
|
|
if (ch->IsDead() || ch->IsStun())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
if (ch->IsHorseRiding())
|
|
|
|
|
{
|
|
|
|
|
dev_log(LOG_DEB0, "[DO_RIDE] stop riding");
|
|
|
|
|
ch->StopRiding();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ch->GetMountVnum())
|
|
|
|
|
{
|
|
|
|
|
dev_log(LOG_DEB0, "[DO_RIDE] unmount");
|
|
|
|
|
do_unmount(ch, NULL, 0, 0);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Ÿ<><C5B8>
|
|
|
|
|
{
|
|
|
|
|
if (ch->GetHorse() != NULL)
|
|
|
|
|
{
|
|
|
|
|
dev_log(LOG_DEB0, "[DO_RIDE] start riding");
|
|
|
|
|
ch->StartRiding();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (BYTE i=0; i<INVENTORY_MAX_NUM; ++i)
|
|
|
|
|
{
|
|
|
|
|
LPITEM item = ch->GetInventoryItem(i);
|
|
|
|
|
if (NULL == item)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ũ Ż<><C5BB> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (item->IsRideItem())
|
|
|
|
|
{
|
|
|
|
|
if (NULL==ch->GetWear(WEAR_UNIQUE1) || NULL==ch->GetWear(WEAR_UNIQUE2))
|
|
|
|
|
{
|
|
|
|
|
dev_log(LOG_DEB0, "[DO_RIDE] USE UNIQUE ITEM");
|
|
|
|
|
//ch->EquipItem(item);
|
|
|
|
|
ch->UseItem(TItemPos (INVENTORY, i));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <20>Ϲ<EFBFBD> Ż<><C5BB> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// TODO : Ż<>Ϳ<EFBFBD> SubType <20>߰<EFBFBD>
|
|
|
|
|
switch (item->GetVnum())
|
|
|
|
|
{
|
|
|
|
|
case 71114: // <20><><EFBFBD><EFBFBD><EFBFBD>̿<EFBFBD><CCBF><EFBFBD>
|
|
|
|
|
case 71116: // <20><><EFBFBD>߽<EFBFBD><DFBD>̿<EFBFBD><CCBF><EFBFBD>
|
|
|
|
|
case 71118: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̿<EFBFBD><CCBF><EFBFBD>
|
|
|
|
|
case 71120: // <20><><EFBFBD>ڿ<EFBFBD><DABF>̿<EFBFBD><CCBF><EFBFBD>
|
|
|
|
|
dev_log(LOG_DEB0, "[DO_RIDE] USE QUEST ITEM");
|
|
|
|
|
ch->UseItem(TItemPos (INVENTORY, i));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GF mantis #113524, 52001~52090 <20><> Ż<><C5BB>
|
|
|
|
|
if( (item->GetVnum() > 52000) && (item->GetVnum() < 52091) ) {
|
|
|
|
|
dev_log(LOG_DEB0, "[DO_RIDE] USE QUEST ITEM");
|
|
|
|
|
ch->UseItem(TItemPos (INVENTORY, i));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Ÿ<>ų<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD><C8AF><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>."));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifdef __AUCTION__
|
|
|
|
|
// temp_auction
|
|
|
|
|
ACMD(do_get_item_id_list)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < INVENTORY_MAX_NUM; i++)
|
|
|
|
|
{
|
|
|
|
|
LPITEM item = ch->GetInventoryItem(i);
|
|
|
|
|
if (item != NULL)
|
|
|
|
|
ch->ChatPacket(CHAT_TYPE_INFO, "name : %s id : %d", item->GetProto()->szName, item->GetID());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// temp_auction
|
|
|
|
|
|
|
|
|
|
ACMD(do_enroll_auction)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
char arg2[256];
|
|
|
|
|
char arg3[256];
|
|
|
|
|
char arg4[256];
|
|
|
|
|
two_arguments (two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2)), arg3, sizeof(arg3), arg4, sizeof(arg4));
|
|
|
|
|
|
|
|
|
|
DWORD item_id = strtoul(arg1, NULL, 10);
|
|
|
|
|
BYTE empire = strtoul(arg2, NULL, 10);
|
|
|
|
|
int bidPrice = strtol(arg3, NULL, 10);
|
|
|
|
|
int immidiatePurchasePrice = strtol(arg4, NULL, 10);
|
|
|
|
|
|
|
|
|
|
LPITEM item = ITEM_MANAGER::instance().Find(item_id);
|
|
|
|
|
if (item == NULL)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
AuctionManager::instance().enroll_auction(ch, item, empire, bidPrice, immidiatePurchasePrice);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_enroll_wish)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
char arg2[256];
|
|
|
|
|
char arg3[256];
|
|
|
|
|
one_argument (two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2)), arg3, sizeof(arg3));
|
|
|
|
|
|
|
|
|
|
DWORD item_num = strtoul(arg1, NULL, 10);
|
|
|
|
|
BYTE empire = strtoul(arg2, NULL, 10);
|
|
|
|
|
int wishPrice = strtol(arg3, NULL, 10);
|
|
|
|
|
|
|
|
|
|
AuctionManager::instance().enroll_wish(ch, item_num, empire, wishPrice);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD(do_enroll_sale)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
char arg2[256];
|
|
|
|
|
char arg3[256];
|
|
|
|
|
one_argument (two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2)), arg3, sizeof(arg3));
|
|
|
|
|
|
|
|
|
|
DWORD item_id = strtoul(arg1, NULL, 10);
|
|
|
|
|
DWORD wisher_id = strtoul(arg2, NULL, 10);
|
|
|
|
|
int salePrice = strtol(arg3, NULL, 10);
|
|
|
|
|
|
|
|
|
|
LPITEM item = ITEM_MANAGER::instance().Find(item_id);
|
|
|
|
|
if (item == NULL)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
AuctionManager::instance().enroll_sale(ch, item, wisher_id, salePrice);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// temp_auction
|
|
|
|
|
// packet<65><74><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>ϰ<EFBFBD>, <20>̰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE>Ѵ<EFBFBD>.
|
|
|
|
|
ACMD(do_get_auction_list)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
char arg2[256];
|
|
|
|
|
char arg3[256];
|
|
|
|
|
two_arguments (one_argument (argument, arg1, sizeof(arg1)), arg2, sizeof(arg2), arg3, sizeof(arg3));
|
|
|
|
|
|
|
|
|
|
AuctionManager::instance().get_auction_list (ch, strtoul(arg1, NULL, 10), strtoul(arg2, NULL, 10), strtoul(arg3, NULL, 10));
|
|
|
|
|
}
|
|
|
|
|
//
|
|
|
|
|
//ACMD(do_get_wish_list)
|
|
|
|
|
//{
|
|
|
|
|
// char arg1[256];
|
|
|
|
|
// char arg2[256];
|
|
|
|
|
// char arg3[256];
|
|
|
|
|
// two_arguments (one_argument (argument, arg1, sizeof(arg1)), arg2, sizeof(arg2), arg3, sizeof(arg3));
|
|
|
|
|
//
|
|
|
|
|
// AuctionManager::instance().get_wish_list (ch, strtoul(arg1, NULL, 10), strtoul(arg2, NULL, 10), strtoul(arg3, NULL, 10));
|
|
|
|
|
//}
|
|
|
|
|
ACMD (do_get_my_auction_list)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
char arg2[256];
|
|
|
|
|
two_arguments (argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
|
|
|
|
|
|
|
|
|
|
AuctionManager::instance().get_my_auction_list (ch, strtoul(arg1, NULL, 10), strtoul(arg2, NULL, 10));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD (do_get_my_purchase_list)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
char arg2[256];
|
|
|
|
|
two_arguments (argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
|
|
|
|
|
|
|
|
|
|
AuctionManager::instance().get_my_purchase_list (ch, strtoul(arg1, NULL, 10), strtoul(arg2, NULL, 10));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD (do_auction_bid)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
char arg2[256];
|
|
|
|
|
two_arguments (argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
|
|
|
|
|
|
|
|
|
|
AuctionManager::instance().bid (ch, strtoul(arg1, NULL, 10), strtoul(arg2, NULL, 10));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD (do_auction_impur)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
one_argument (argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
AuctionManager::instance().immediate_purchase (ch, strtoul(arg1, NULL, 10));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD (do_get_auctioned_item)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
char arg2[256];
|
|
|
|
|
two_arguments (argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
|
|
|
|
|
|
|
|
|
|
AuctionManager::instance().get_auctioned_item (ch, strtoul(arg1, NULL, 10), strtoul(arg2, NULL, 10));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD (do_buy_sold_item)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
char arg2[256];
|
|
|
|
|
one_argument (argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
AuctionManager::instance().get_auctioned_item (ch, strtoul(arg1, NULL, 10), strtoul(arg2, NULL, 10));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD (do_cancel_auction)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
one_argument (argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
AuctionManager::instance().cancel_auction (ch, strtoul(arg1, NULL, 10));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD (do_cancel_wish)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
one_argument (argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
AuctionManager::instance().cancel_wish (ch, strtoul(arg1, NULL, 10));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD (do_cancel_sale)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
one_argument (argument, arg1, sizeof(arg1));
|
|
|
|
|
|
|
|
|
|
AuctionManager::instance().cancel_sale (ch, strtoul(arg1, NULL, 10));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD (do_rebid)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
char arg2[256];
|
|
|
|
|
two_arguments (argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
|
|
|
|
|
|
|
|
|
|
AuctionManager::instance().rebid (ch, strtoul(arg1, NULL, 10), strtoul(arg2, NULL, 10));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ACMD (do_bid_cancel)
|
|
|
|
|
{
|
|
|
|
|
char arg1[256];
|
|
|
|
|
char arg2[256];
|
|
|
|
|
two_arguments (argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
|
|
|
|
|
|
|
|
|
|
AuctionManager::instance().bid_cancel (ch, strtoul(arg1, NULL, 10));
|
|
|
|
|
}
|
|
|
|
|
#endif
|