📄 menuserver2.cpp
字号:
#include "..\stdafx.h"
#include "..\LowerLayers\servertable.h"
#include "..\LowerLayers\recvmsg.h"
#include "..\LowerLayers\mylog.h"
#include "DefaultHeader.h"
#include "MenuDefine.h"
#include "ItemList.h"
#include "CItem.h"
#include "Scrp_exe.h"
#include "SealStone.h"
#include "SealStonegameserver.h"
#include "op_magic.h"
#include "map.h"
#include "teambattle.h"
#include "LTSSupport.h"
#include "dungeon.h"
#include "eventmgr.h"
#include "LogManager.h"
#include "ArenaManager.h"
#include "UserManager.h"
void SendSaveEventItem( CHARLIST *ch, int item_no, int count )
{
t_packet packet;
packet.h.header.type = CMD_ADD_EVENT_ITEM;
packet.u.kein.save_event_item.item_no = item_no;
packet.u.kein.save_event_item.count = count;
strcpy( packet.u.kein.save_event_item.name, ch->Name );
packet.h.header.size = sizeof( k_save_event_item ) - 20 + strlen( ch->Name )+1 ;
QueuePacket( connections, DB_DEMON, &packet, 1 );
}
void RecvOXSelect( t_packet *p, short int cn )
{
CHARLIST *ch = CheckServerId( cn );
if( !ch ) return;
SetOXSelect( ch,p->u.kein.default_char );
return;
}
void SetOXSelect( CHARLIST *ch, int type )
{
ch->ox_select = type;
}
void RecvOXAnser( t_packet *p, short int cn )
{ //< CSD-CN-031213
const int type = p->u.kein.default_char;
CUserManager::HASH_USER mpUser = g_pUserManager->GetUserSet();
for (CUserManager::ITOR_USER i = mpUser.begin(); i != mpUser.end(); ++i)
{
const int idUser = i->second;
if (idUser == cn)
{
continue;
}
CHARLIST* pUser = CheckServerId(idUser);
if (pUser == NULL)
{
continue;
}
if (pUser->IsCounselor() || pUser->IsReporter())
{
continue;
}
if (pUser->ox_select == type)
{
continue;
}
MapMove(idUser, "G_BATTLE", 140, 100); // 030929 kyo
}
} //> CSD-CN-031213
// 捞 甘俊 乐绰 葛电 蜡历甫 瘤沥茄 镑栏肺 甘捞悼 矫挪促.
// type == 1 捞搁 扁磊唱, 款康磊绰 巢变促.
int UserAllMapMove( int type, char *map_name, int x, int y )
{ //< CSD-CN-031213
if (strcmp(map_name, MapName) == 0)
{
return 0;
}
if (GetMapMoveType(map_name) == MMT_FAIL)
{ // 绝绰 甘捞促.
return 0;
}
CUserManager::HASH_USER mpUser = g_pUserManager->GetUserSet();
for (CUserManager::ITOR_USER i = mpUser.begin(); i != mpUser.end(); ++i)
{
const int idUser = i->second;
CHARLIST* pUser = CheckServerId(idUser);
if (pUser != NULL)
{
if (type == 1)
{
if (pUser->IsCounselor() || pUser->IsReporter())
{
continue;
}
}
MapMove(idUser, map_name, x, y);
}
}
return 1;
} //> CSD-CN-031213
void RecvCheckSkill( short int cn )
{
CHARLIST *ch= CheckServerId( cn );
if( !ch ) return;
// 堪祸 扁贱阑 硅奎栏搁 捣阑 霖促.
if( ch->Skill[46] )
{
ch->IncBankMoney(50000, BMCT_SKILL_RESET); // CSD-030723
ch->Skill[46] = 0;
SendPutMenuString( KM_BBS, 121, cn ); // 堪祸窍扁 胶懦阑 昏力沁嚼聪促.
}
}
void DeleteMenuData()
{
// 辆丰矫 橇府矫虐绰 镑..
}
void RecvPutGuildItem( t_packet *p, short int cn )
{ //< CSD-030324
CHARLIST *ch = CheckServerId( cn );
if( !ch ) return;
POS pos = p->u.kein.default_pos;
ItemAttr *pItem = GetItemByPOS( ch, pos );
if( !pItem ) return;
if( !pItem->item_no ) return;
if( !ch->GetGuildCode() ) return; // 辨靛啊 绝促.
//if( ch->name_status.guild_master ) return; // 辨靛郴 殿鞭 力距阑 窍妨搁 咯扁辑
t_packet packet;
packet.h.header.type = CMD_PUT_GUILD_ITEM;
packet.u.kein.put_guild_item.item = *pItem;
packet.u.kein.put_guild_item.guild_code = ch->GetGuildCode();
strcpy( packet.u.kein.put_guild_item.name, ch->Name );
packet.h.header.size = sizeof( k_put_guild_item );
QueuePacket( connections, DB_DEMON, &packet, 1 ); // DB俊 历厘茄促.
//021030 YGI
SendItemEventLog( pItem, cn, SN_NOT_USER, SILT_PUT_GUILD_BOX, 1 ); // 021018 YGI
// 酒捞袍阑 瘤快绊
memset( pItem, 0, sizeof( ItemAttr ) );
// 历厘茄 荤角阑 努扼捞攫飘俊 焊郴霖促.
SendPutMenuString( KM_OK, 132, cn ); // 焊包登菌嚼聪促.
} //> CSD-030324
void RecvGetGuildItemClient( t_packet *p, short int cn )
{ //< CSD-030324
CHARLIST *ch = CheckServerId( cn );
if( !ch ) return;
// if( !ch->GetGuildCode() ) return;
// int degree = ch->name_status.guild_master;
// if( !degree || degree > 2 ) return; // 1苞 2父 荤侩 啊瓷
if( !CheckGuildPower( GDP_GUILD_BOX, ch ) ) return;
DWORD index = p->u.kein.default_dword;
t_packet packet;
packet.h.header.type = CMD_GET_GUILD_ITEM_MAP;
packet.u.kein.get_guild_item_map.server_id = cn;
packet.u.kein.get_guild_item_map.guild_code = ch->GetGuildCode();
packet.u.kein.get_guild_item_map.index = index;
packet.h.header.size = sizeof( k_get_guild_item_map );
QueuePacket( connections, DB_DEMON, &packet, 1 ); // DB俊辑 秦搬
} //> CSD-030324
// 叼厚 单阁俊辑 酒捞袍阑 波郴 吭促.
void RecvGetGuildItemMap( t_packet *p )
{
int server_id = p->u.kein.get_guild_item_db.server_id;
ItemAttr *pItem = &p->u.kein.get_guild_item_db.item;
CHARLIST *ch = CheckServerId( server_id );
if( !ch ) return;
//021030 YGI
SendItemEventLog( pItem, server_id, SN_NOT_USER, SILT_GET_GUILD_BOX, 3 ); // 021018 YGI
MoveEmptyInv( pItem, ch );
}
void RecvChangeGuildMaster(short int cn)
{ //< CSD-030326
CHARLIST* ch = CheckServerId(cn);
if (!ch) return;
int guild_code = ch->GetGuildCode();
const int guild_master = ch->name_status.guild_master;
if (guild_code <= 0 || guild_master != 1)
{
return; // 辨靛 付胶磐啊 酒聪促.
}
SendPacketDefault(CMD_CHANGE_GUILD_MASTER, &guild_code, sizeof(short int), DB_DEMON);
ch->name_status.guild_master = 0; // 辨靛 付胶磐
SendChangeGuildDegree(cn, guild_code, 0, cn);
SendPutMenuString(KM_OK, 178, cn);
} //> CSD-030326
// 辨靛盔 沥焊甫 函版
void SendChangeGuildDegree( int server_id, int guild_code, int guild_degree, short int cn )
{
t_packet packet;
packet.h.header.type = CMD_CHANGE_GUILD_MASTER;
packet.u.kein.change_guild_degree.server_id = server_id;
packet.u.kein.change_guild_degree.guild_code = guild_code;
packet.u.kein.change_guild_degree.degree = guild_degree;
packet.h.header.size = sizeof( k_change_guild_degree );
QueuePacket( connections, cn, &packet, 1 );
CastMe2Other( cn, &packet );
}
// 辨付啊 官布促.
void RecvChangeGuildMasterAllMap( t_packet *p )
{ //< CSD-030324
char *name = p->u.kein.default_name;
int cn = ExistHe( name );
if( cn <= 0 ) return;
CHARLIST *ch = CheckServerId( cn );
if( !ch ) return;
ch->name_status.guild_master = 1;
SendChangeGuildDegree( cn, ch->GetGuildCode(), ch->name_status.guild_master, cn );
} //> CSD-030324
int GetDegree2Param( int degree ) // degree 蔼阑 颇扼皋磐肺 函版茄促.
{
static degree2param[] = { 4, 0, 1, 2, 3 };
return degree2param[degree];
}
// 020620 YGI
bool CheckGuildPower( int type, CHARLIST *ch )
{ //< CSD-030324
if( !ch ) return 0;
if( !ch->GetGuildCode() ) return 0;
if( type < 0 || type > GDP_MAX ) return 0;
static power_table[][5] =
{
{ 1, 1, 0, 0, 0 }, // 辨靛 啊涝 // GDP_JOINING
{ 1, 1, 0, 0, 0 }, // 辨靛 傈眉 皋矫瘤 // GDP_BBS
{ 1, 0, 0, 0, 0 }, // 辨靛盔 流氓函版 // GDP_CHANGE_DEGREE // 020620 YGI
{ 1, 1, 0, 0, 0 }, // 辨靛 芒绊 捞侩 // GDP_GUILD_BOX
{ 1, 1, 0, 0, 0 }, // 碍力 辨靛 呕硼 矫虐扁 // GDP_EXIT_GUILD_HIM
{ 1, 0, 0, 0, 0 }, // 辨靛 付农 函版 // GDP_CHANGE_MARK
{ 1, 0, 0, 0, 0 }, // 辨靛 流氓 疙 函版 // GDP_CHANGE_DEGREE_INFO
{ 1, 0, 0, 0, 0 }, // 辨靛 付胶磐 函版 // GDP_GUILD_CHANGE_MASTER
{ 1, 0, 0, 0, 0 }, // 辨靛 力芭 // GDP_GUILD_BREAK
{ 1, 0, 0, 0, 0 }, // 何辨付 殿废 // GDP_REGIST_SUB_MASTER
{ 0, 1, 1, 1, 1 }, // 胶胶肺 辨靛 呕硼 // GDP_EXIT_GUILD_SELF
{ 1, 0, 0, 0, 0 }, // 骏器府酒 备涝 // GDP_BUY_GUILD_HOUSE
};
int para = GetDegree2Param( ch->name_status.guild_master );
return ((power_table[type][para])?true:false);
} //> CSD-030324
void RecvGetNationItem( short int cn )
{
CHARLIST *ch = CheckServerId( cn );
if( !ch ) return;
t_packet packet;
packet.h.header.type = CMD_GET_NATION_ITEM;
packet.u.kein.nation_item.item_no = g_nation_item.item_no;
if( g_nation_item.money > 0 )
{
packet.u.kein.nation_item.give_type = 0; // money_type
packet.u.kein.nation_item.give_much = g_nation_item.money;
}
else
{
packet.u.kein.nation_item.give_type = 1; // money_type
packet.u.kein.nation_item.give_much = g_nation_item.fame;
}
packet.h.header.size = sizeof( k_nation_item );
QueuePacket( connections, cn, &packet, 1 );
}
extern void SaveChangeNationItem(CHARLIST* pTarget, int type, ItemAttr* item); // CSD-040224
void RecvBuyNationItem( short int cn )
{
CHARLIST *ch = CheckServerId( cn );
if( !ch ) return;
int ret = 0;
if( g_nation_item.money > 0 )
{
if( ch->Money< g_nation_item.money )
{
// 捣捞 何练窍促.
ret = 2;
}
else
{
// 021209 YGI
if( SubtractMoney( g_nation_item.money, ch ) == 1 )
{
ItemAttr item = GenerateItem( g_nation_item.item_no);
SendItemEventLog( &item, cn, SN_NOT_USER, SILT_BUY_NATION_ITEM_MONEY, 100 );
SaveChangeNationItem(ch, 0, &item); // CSD-040224
MoveEmptyInv( &item, ch );
SendNationMoney( NM_ADD, ch->name_status.nation, g_nation_item.money); // 惫绊甫 函拳矫挪促.
ret = 1;
}
else
{
ret = 2;
}
}
}
else
{
if( ch->fame - g_nation_item.fame < 1000 )
{
// 疙己摹啊 何练窍促.
ret = 3;
}
else
{
// 021209 YGI
ret = 1;
SaveChangeFame(ch,ch->fame,ch->fame-g_nation_item.fame,LF_ITEMBUY);
ch->fame -= g_nation_item.fame;
ItemAttr item = GenerateItem( g_nation_item.item_no);
SendItemEventLog( &item, cn, SN_NOT_USER, SILT_BUY_NATION_ITEM_FAME, 100 );
SaveChangeNationItem(ch, 1, &item); // CSD-040224
MoveEmptyInv( &item, ch );
}
}
t_packet packet;
packet.h.header.type = CMD_BUY_NATION_ITEM_OK;
packet.u.kein.default_char = ret;
packet.h.header.size = sizeof( char );
QueuePacket( connections, cn, &packet, 1 );
}
void RecvCheckColossusMap(t_packet *p, short int cn)
{ //< CSD-TW-030701
CHARLIST* pTarget = CheckServerId(cn);
if (pTarget == NULL)
{
return;
}
CArenaInfo* pArenaInfo = g_pArenaManager->GetArenaInfo(g_MapPort);
if (pArenaInfo == NULL)
{
return;
}
CArenaManager::HASH_GAME mpArena = g_pArenaManager->GetGameSet();
for (CArenaManager::ITOR_GAME i = mpArena.begin(); i != mpArena.end(); ++i)
{
CBaseArena* pGame = i->second;
pGame->SendGameInfo(pTarget, g_MapPort);
}
} //> CSD-TW-030701
// 021107 YGI
void SendPacket2Map( t_packet *p, int port )
{
if( port != ST_SEND_MAP_ALL )
{
if( port == GetOwnPort() ) // 鞍篮 甘栏肺 焊尘 版快
{
HandleCommand( CN_FROM_OTHER_MAPSERVER_MSG, p );
}
else
{
g_pServerTable->SendRajaPacketToOtherMapServer( port, (char *)p, p->h.header.size+sizeof(t_header) );
}
}
else // all
g_pServerTable->BroadCastToEveryServer((char *)p, p->h.header.size+sizeof(t_header),SERVER_TYPE_MAP);
}
void RecvInviteColossus( t_packet *p, short int cn )
{ //< CSD-030509
CHARLIST* ch = CheckServerId(cn);
if (ch == NULL)
{
return;
}
CBaseArena* pGame = ch->GetJoinArenaGame();
if (pGame == NULL)
{
return;
}
// 规厘父 荤侩且 荐 乐绰 疙飞绢
if (pGame->GetLeader() != ch)
{
return;
}
t_packet packet;
packet.h.header.type = CMD_INVITE_COLOSSUS_REPLY;
packet.h.header.size = sizeof(k_invite_colossus_map) - 20 + strlen(ch->Name) + 1;
packet.u.kein.invite_colossus_map.port = g_MapPort;
strcpy(packet.u.kein.invite_colossus_map.name, ch->Name);
SendPacket2Map(&packet, ST_SEND_MAP_ALL);
RecvInviteColossusReply(&packet);
} //> CSD-030509
void RecvInviteColossusReply( t_packet *p )
{ //< CSD-CN-031213
g_pUserManager->SendPacket(p);
} //> CSD-CN-031213
void RecvJoinColossusMap( t_packet *p, short int cn )
{ //< CSD-030519
CHARLIST* ch = CheckServerId(cn);
if (ch == NULL)
{
return;
}
const int nPort = p->u.kein.default_short_int;
if (nPort == g_MapPort)
{
return;
}
CArenaInfo* pArena = g_pArenaManager->GetArenaInfo(nPort);
if (pArena == NULL)
{
return;
}
t_MapInfo* pMapInfo = GetMapInfoByMapPort(nPort);
if (pMapInfo == NULL)
{
return;
}
int nX = 0, nY = 0;
pArena->GetWaitPosition(nX, nY);
MapMove(cn, pMapInfo->mapfile, nX, nY);
} //> CSD-030519
void RecvAttackColossusItem( t_packet *p, short int cn )
{ //< CSD-030509
CHARLIST* ch = CheckServerId(cn);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -