📄 menuserver2.cpp
字号:
}
else // 酒捞袍阑 父甸瘤 富绊 角菩茄 捞具扁甫 甸妨林磊
{
if( pEvent->m_lpszMessage2 && pEvent->m_nMessageSize2 ) // npc狼 措拳甫 焊郴霖促.
SendDial( pData->server_id, pData->npc_index, pEvent->m_lpszMessage2, pEvent->m_nMessageSize2 );
}
}
void RecvEventMoveMap( t_packet *p, short int cn )
{
CHARLIST *ch = CheckServerId( cn );
if( !ch ) return;
int event_no = p->u.kein.default_int;
CEventMoveMap *pEvent = g_EventMgr.GetEventMoveMapPoint( event_no );
if( !pEvent ) return;
// 捞亥飘 曼咯 炼扒 犬牢 --------------------
if( !pEvent->m_bAll )
{
static int sex2sex[] = { 2, 1 };
static int class2class[] = { 1, 3, 2, 5, 4 };
static int nation2nation[] = { 0, 0, 0, 1, 2, 0, 3 };
if( pEvent->m_nSex )
{
if( pEvent->m_nSex != sex2sex[ch->SprNo] ) return;
}
if( pEvent->m_nClass )
{
if( pEvent->m_nClass != class2class[ch->Class] ) return;
}
if( pEvent->m_nNation )
{
if( pEvent->m_nNation != nation2nation[ch->name_status.nation] ) return;
}
}
//----------------------------
t_packet packet;
packet.h.header.type = CMD_EVENT_MOVE_MAP_CHECK_MAP;
packet.u.kein.event_move_map_check_map.server_id = cn;
packet.u.kein.event_move_map_check_map.server_port = GetOwnPort();
packet.u.kein.event_move_map_check_map.event_no = event_no;
packet.h.header.size = sizeof( k_event_move_map_check_map );
int port = GetMapPortByName( pEvent->m_szMap );
if( port == GetOwnPort() ) return;
if( !port ) return;
SendPacket2Map( &packet, port );
}
void RecvEventMoveMapCheckMap( t_packet *p, short int cn ) // 促弗 甘俊辑 棵版快
{
k_event_move_map_check_map *pData = (k_event_move_map_check_map *)p->u.data;
CEventMoveMap *pEvent = g_EventMgr.GetEventMoveMapPoint( pData->event_no );
if( !pEvent ) return;
if( _stricmp( pEvent->m_szMap, MapName ) != 0 ) return; // 捞亥飘 锅龋啊 部看促.
int user_count = g_pServerTable->GetNumOfUsers();
if( user_count >= pEvent->m_nMax )
{
// 歹捞惑 曼啊且 荐 绝促.
k_put_menu_string msg;
msg.type = KM_FAIL;
msg.str_num = 212;
SendDirectClientOtherMap( CMD_PUT_MENU_STRING, pData->server_id, pData->server_port, &msg, sizeof( k_put_menu_string ) );
}
else
{
t_packet packet;
packet.h.header.type = CMD_EVENT_MOVE_MAP_OK;
strcpy( packet.u.kein.event_move_map_ok.map_name, MapName );
packet.u.kein.event_move_map_ok.server_id = pData->server_id;
packet.u.kein.event_move_map_ok.map_x = pEvent->m_nMapX;
packet.u.kein.event_move_map_ok.map_y = pEvent->m_nMapY;
packet.h.header.size = sizeof( k_event_move_map_ok );
SendPacket2Map( &packet, pData->server_port );
// 辑滚俊 历厘茄促.
k_save_event_move_map save_data;
save_data.event_no = pData->event_no;
save_data.max = pEvent->m_nMax; // 021128 YGI
save_data.now = user_count;
SendPacketDefault( CMD_SAVE_EVENT_MAPMOVE_NOW, &save_data, sizeof( k_save_event_move_map ), DB_DEMON );
}
}
void RecvEventMoveMapOk( t_packet *p, short int cn )
{
k_event_move_map_ok *pData = (k_event_move_map_ok *)p->u.data;
MapMove( pData->server_id, pData->map_name, pData->map_x, pData->map_y );
}
void CheckDoubleName( CHARLIST *ch, short int cn )
{
char name[20]={0,};
::strcpy( name, ch->Name );
int target_id = ExistHe( ch->Name );
if( target_id > 0 ) // 穿焙啊 鞍篮 捞抚阑 啊瘤绊 乐促.
{
MyLog(1,"CheckDoubleName() name = %s", ch->Name );
closeconnection( connections, target_id, -101 ); // 老窜 促弗 仇阑 谗绊 --> 历厘
ch->updatable = 0; // CSD-TW-030620
closeconnection( connections, cn, -102 ); // 悼矫 立加 茄 仇篮 历厘窍瘤 富搁辑 谗磊...
}
else
{
target_id = ExistConnectingHe( ch->Name );
if( target_id > 0 )
{
connections[target_id].chrlst.updatable = 1; // CSD-TW-030620
closeconnection( connections, target_id, -103 ); // 老窜 促弗 仇阑 谗绊 --> 历厘
ch->updatable = 0; // CSD-TW-030620
closeconnection( connections, cn, -104 ); // 悼矫 立加 茄 仇篮 历厘窍瘤 富搁辑 谗磊...
}
}
// 促弗 镑俊 乐绰 仇档 谗磊..
t_packet packet;
packet.h.header.type = CMD_CHECK_DOUBLE_NAME;
strcpy( packet.u.kein.invite_colossus_map.name, name );
packet.u.kein.invite_colossus_map.port = GetOwnPort();
packet.h.header.size = sizeof( k_invite_colossus_map );
SendPacket2Map( &packet, ST_SEND_MAP_ALL );
}
// 秦寸 捞抚捞 乐绰瘤 犬牢茄促.
void RecvCheckDoubleName( t_packet *p, short int cn )
{
char *name = p->u.kein.invite_colossus_map.name;
int port = p->u.kein.invite_colossus_map.port;
int target_id = ExistHe( name );
if( target_id > 0 )
{
closeconnection( connections, target_id, -105 ); // 老窜 促弗 仇阑 谗绊 --> 历厘
// 弊 荤角阑 舅妨霖促.
t_packet packet;
packet.h.header.type = CMD_CHECK_DOUBLE_NAME_OK;
strcpy( packet.u.kein.default_name, name );
packet.h.header.size = strlen(name);
SendPacket2Map( &packet, port );
}
else
{
target_id = ExistConnectingHe( name );
if( target_id > 0 )
{
connections[target_id].chrlst.updatable = 1; // CSD-TW-030620
closeconnection( connections, target_id, -106 ); // 老窜 促弗 仇阑 谗绊 --> 历厘
// 弊 荤角阑 舅妨霖促.
t_packet packet;
packet.h.header.type = CMD_CHECK_DOUBLE_NAME_OK;
strcpy( packet.u.kein.default_name, name );
packet.h.header.size = strlen(name);
SendPacket2Map( &packet, port );
}
}
}
void RecvCheckDoubleNameOk( t_packet *p, short int cn )
{
char *name = p->u.kein.default_name;
int target_id = ExistHe(name );
if( target_id > 0 )
{ // 促弗 甘俊 鞍篮 仇捞 乐促绰 家侥捞 吭扁 锭巩俊 历厘窍瘤 富绊 昏力窍磊
connections[target_id].chrlst.updatable = 0; // CSD-TW-030620
closeconnection( connections, target_id, -102 );
}
else
{
target_id = ExistConnectingHe( name );
if( target_id > 0 )
{
connections[target_id].chrlst.updatable = 0; // CSD-TW-030620
closeconnection( connections, target_id, -102 ); // 老窜 促弗 仇阑 谗绊 --> 历厘
}
}
}
void RecvCheckDoubleNameDB2Map( t_packet *p, short int cn )
{
return;
int target_id;
int bClose;
char *pName;
for( int i=0; i<4; i++ )
{
pName = p->u.kein.login_check_double_name.name[i];
if( pName[0] )
{
EatRearWhiteChar( pName );
bClose = 0;
target_id = ExistHe( pName );
if( target_id > 0 )
{
bClose = 1;
}
else
{
target_id = ExistConnectingHe( pName );
if( target_id > 0 )
{
bClose = 1;
}
}
if( bClose )
{
connections[target_id].chrlst.updatable = 1; // CSD-TW-030620
closeconnection( connections, target_id, -101 );
}
}
}
}
void RecvCheckDoubleNameWhenFirst( t_packet *p, short int cn )
{
char *pName = p->u.kein.check_double_when_first.name;
int server_id = p->u.kein.check_double_when_first.server_id;
int port = p->u.kein.check_double_when_first.port;
int bClose = 0;
int target_id = ExistHe( pName );
if( target_id > 0 )
{
bClose = 1;
}
else
{
target_id = ExistConnectingHe( pName );
if( target_id > 0 )
{
bClose = 1;
}
}
if( bClose )
{
connections[target_id].chrlst.updatable = 1; // CSD-TW-030620
closeconnection( connections, target_id, -101 );
t_packet packet;
packet.h.header.type = CMD_CHECK_DOUBLE_NAME_WHERE_OK;
packet.u.kein.default_short_int = server_id;
packet.h.header.size = sizeof( short int );
SendPacket2Map( &packet, port );
}
}
void RecvCheckDoubleNameWhenFirstOk( t_packet *p, short int cn )
{
int server_id = p->u.kein.default_short_int;
if( CheckServerIndex( server_id ) )
{
connections[server_id].chrlst.updatable = 0; // CSD-TW-030620
closeconnection( connections, server_id, -102 );
}
}
void CheckDoubleNameWhenFirst( char *pName, short int server_id )
{
int bClose = 0;
int target_id = ExistHe( pName );
if( target_id > 0 )
{
bClose = 1;
}
else
{
target_id = ExistConnectingHe( pName );
if( target_id > 0 )
{
bClose = 1;
}
}
if( bClose )
{
connections[target_id].chrlst.updatable = 1; // CSD-TW-030620
closeconnection( connections, target_id, -101 );
connections[server_id].chrlst.updatable = 0; // CSD-TW-030620
closeconnection( connections, server_id, -102 );
}
t_packet packet;
packet.h.header.type = CMD_CHECK_DOUBLE_NAME_WHERE_FIRST;
strcpy( packet.u.kein.check_double_when_first.name, connections[server_id].name );
packet.u.kein.check_double_when_first.server_id = server_id;
packet.u.kein.check_double_when_first.port = GetOwnPort();
packet.h.header.size = sizeof( k_check_double_when_first );
SendPacket2Map( &packet, ST_SEND_MAP_ALL );
}
// 030923 HK YGI
void SaveLoginLogoutLogByKein(CHARLIST* pTarget, int type, int call_function_id )
{
if (!g_EventFlagMgr.IsSaveLogWhenSaveUserData())
{
return;
}
char type2str[2][20] = {"LOGOUT", "LOGIN"};
string strPath;
if (g_pLogManager->GetLogPath(LT_CHANGE, strPath))
{
char temp[FILENAME_MAX] = {0,};
char log[FILENAME_MAX] = {0,};
::sprintf(temp, "%s/savelog_%s.txt", strPath.c_str(), pTarget->Name);
::sprintf(log, "%s(%d): [%s][%s] lv=%d, exp=(%d)%d, class=%d",
type2str[type], call_function_id, MapName,
pTarget->Name, pTarget->GetLevel(), pTarget->GetExperienceStep(), pTarget->Exp, pTarget->Class);
SaveLogDefault2(temp, log);
}
}
// 031009 CI YGI
int InitItemLimitCountFromDB( )
{
char query[512];
WORD port = GetOwnPort();
if( !port )
{
return 0;
}
DWORD limit_number;
int ret = GetItemLimitCount_SQL( port, &limit_number );
if( ret < 1 )
{
limit_number = 1;
sprintf( query, "INSERT INTO ItemLimitMgrTable ( port, limit_number ) VALUES ( %d, %d )", port, limit_number );
Querry_SQL( query );
}
ItemMgr.SetLimitCount( limit_number );
ret = ItemMgr.LoadHaveLimitItem();
if( !ret ) // 角菩
{
JustMsg( "Error!!! check please ItemList_HaveLimit table" );
return 0;
}
return 1;
}
// 040105 YGI 焊拱 ----------------
int GetTreasureMining( int lv )
{
switch( lv )
{
case 1: return 30;
case 2: return 50;
case 3: return 70;
case 4: return 99;
}
return 101;
}
void RecvCheckTreasureXY( t_packet *p, short int cn )
{
CHARLIST *ch = CheckServerId( cn );
if( !ch ) return;
int event_index = -1;
k_check_treasure_xy *pData = (k_check_treasure_xy *)p->u.data;
int tile_x = pData->x/TILE_SIZE;
int tile_y = pData->y/TILE_SIZE;
int lv = 0;
bool mining = false; // 扁贱捞 何练窍促
for( int a=0; a<3; a++ )
{
for( int b=0; b<3; b++ )
{
for( int c=0; c<8; c++ )
{
ItemAttr *pItem = &ch->inv[a][b][c];
lv = IsTreasureMapItem( pItem->item_no );
if( !lv ) continue; // 焊拱 瘤档啊 酒聪促.
CTreasureMapItem *pAttr = (CTreasureMapItem *)&pItem->attr[IATTR_TREASURE_MAP];
if( !pAttr->isChecked || pAttr->mapnumber != MapNumber ) continue;
if( ch->skillexp[MINING].skillexp/10000 < GetTreasureMining( lv ) )
{
mining = false;
continue;
}
if( pAttr->x != tile_x || pAttr->y != tile_y ) continue;
event_index = g_EventFindTreasure.CheckXY( tile_x, tile_y );
if( event_index == -1 ) continue;
// 付捞呈 饭骇
mining = true;
// 荤侩茄巴篮 促矫 荤侩窍瘤 给窍霸 昏力 茄促.
//pAttr->use = 1;
POS pos;
SetItemPos( INV, a, b, c, &pos );
SendDeleteItem( pItem, &pos, ch );
//SendServerEachItem( &pos, pItem, cn );
goto find_stop;
}
}
}
find_stop :
if( event_index == -1 ) return;
if( lv == 0 ) return;
if( !mining )
{
SendPutMenuString( KM_FAIL, 215, cn );
return;
}
if( g_TreasureGuardMgr.IsEvent( event_index ) ) return; // 捞固 殿厘沁菌绰瘤 犬牢
int treasure_class = lv-1; // 脾绢 唱客具 且 各苞 唱吝俊 焊拱 惑磊狼 殿鞭
int ret = g_TreasureGuardMgr.CreateGuard( event_index, treasure_class, tile_x, tile_y, cn );
if( ret )
{
MyLog( 0, "Treasure Guard Event Start <event_index:%d>, <treasure_class:%d>, (%d,%d) <%s>",
event_index, treasure_class, tile_x, tile_y, ch->Name );
}
} //////////////////////////
void RecvGetTreasureMapDetail( t_packet *p, short int cn )
{
CHARLIST *ch = CheckServerId( cn );
if( !ch ) return;
POS *pPos = &p->u.kein.default_pos;
ItemAttr *item = GetItemByPOS( ch, *pPos );
if( !item ) return;
int lv = IsTreasureMapItem( item->item_no );
if( !lv ) return; // 焊拱 瘤档啊 酒聪促.
CTreasureMapItem *pAttr = (CTreasureMapItem *)&item->attr[IATTR_TREASURE_MAP];
if( pAttr->isChecked) return;
t_packet packet;
packet.h.header.type = CMD_GET_TREASURE_MAP_DETAIL_DB;
packet.u.kein.get_treasure_map_detail_to_db.cn = cn;
packet.u.kein.get_treasure_map_detail_to_db.pos = *pPos;
packet.h.header.size = sizeof( k_get_treasure_map_detail_to_db );
QueuePacket( connections, DB_DEMON, &packet, 1 );
}
void RecvGetTreasureMapDetailDB( t_packet *p, short int cn )
{
k_get_treasure_map_detail_to_map *pData = &p->u.kein.get_treasure_map_detail_to_map;
CHARLIST *ch = CheckServerId( pData->cn );
if( !ch ) return;
ItemAttr *item = GetItemByPOS( ch, pData->pos );
if( !item ) return;
int lv = IsTreasureMapItem( item->item_no );
if( !lv ) return; // 焊拱 瘤档啊 酒聪促.
CTreasureMapItem *pAttr = (CTreasureMapItem *)&item->attr[IATTR_TREASURE_MAP];
if( pAttr->isChecked ) return;
pAttr->isChecked = 1;
pAttr->mapnumber = pData->map_number;
//pAttr->use = 0;
// lv俊 蝶扼 罚待窍霸...
pAttr->x = pData->x;
pAttr->y = pData->y;
switch( lv )
{
case 1 : pAttr->offset2 = 0; pAttr->offset = 0; break;
case 2 : pAttr->offset2 = rand()%4; pAttr->offset = rand()%2; break;
case 3 : pAttr->offset2 = rand()%4; pAttr->offset = rand()%3; break;
case 4 : pAttr->offset2 = rand()%4; pAttr->offset = rand()%4; break;
}
SendServerEachItem( &pData->pos, item, pData->cn );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -