📄 sealstonegameserver.cpp
字号:
#include "..\stdafx.h"
#include "DefaultHeader.h"
#include "SealStone.h"
#include "UserManager.h"
#include "..\LowerLayers\define.h"
#include "..\LowerLayers\servertable.h"
int KingCommandBlock;
int SealStoneBreakable;
static char packet_msg[ MM_MAX_PACKET_SIZE ];
int ReturnSealStoneBreakable( void )
{
switch( SealStoneBreakable )
{
case CMD_STEALSTONE_BREAKABLE :
case CMD_STEALSTONE_NON_BREAKABLE_PEACE :
case CMD_STEALSTONE_NON_BREAKABLE: return SealStoneBreakable;
}
return CMD_STEALSTONE_NON_BREAKABLE;
}
void Recv_CMD_SEALSTONE_STATUS( t_sealstone_status *tp )
{ //< CSD-CN-031213
DWORD nation = N_NEUTRAL;
switch (tp->sealstonesprno)
{
case 91: nation = N_YILSE; break;
case 98: nation = N_VYSEUS; break;
case 99: nation = N_ZYPERN; break;
}
t_packet p;
p.h.header.type = CMD_SEALSTONE_STATUS;
p.h.header.size = sizeof(t_sealstone_client_status);
p.u.sealstone_client_status.mapnumber = tp->mapnumber;
p.u.sealstone_client_status.status = tp->status;
p.u.sealstone_client_status.x = tp->x;
p.u.sealstone_client_status.y = tp->y;
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 (pUser->name_status.nation == nation && pUser->GetLevel() >= ENABLE_FREE_LEVEL)
{
QueuePacket(connections, idUser, &p, 1);
}
}
}
} //> CSD-CN-031213
// LoginServer俊辑 傈里捞 矫累等促绰 娟扁甫 甸菌促.
// 鞍篮 唱扼 局甸茄抛 谎妨霖促.
extern void SendPacket2NationClients(const int Nation,t_packet* p); // CSD-030415
void Recv_CMD_SEALSTONE_WAR_START( int nation )
{ //< CSD-030415
t_packet p;
p.h.header.type = CMD_SEALSTONE_WAR_START;
p.h.header.size = 0;
SendPacket2NationClients(nation, &p);
} //> CSD-030415
// 肺变挤俊辑 傈积狼 搬苞甫 焊郴林菌促.
// 寸荤磊 某腐磐俊霸 谎妨霖促.
void Recv_CMD_SEALSTONE_RESULT( t_sealstone_result *tp )
{ //< CSD-CN-031213
t_packet ap;
ap.h.header.size = 0;
switch (tp->aresult)
{
case SSR_FAIL:
{
ap.h.header.type = CMD_SEALSTONE_RESULT_DEFEAT;
break;
}
case SSR_VICTORY:
{
ap.h.header.type = CMD_SEALSTONE_RESULT_VICTORY;
break;
}
case SSR_DRAW:
{
ap.h.header.type = CMD_SEALSTONE_RESULT_DRWAW;
break;
}
}
t_packet bp;
bp.h.header.size = 0;
switch (tp->bresult)
{
case SSR_FAIL:
{
bp.h.header.type = CMD_SEALSTONE_RESULT_DEFEAT;
break;
}
case SSR_VICTORY:
{
bp.h.header.type = CMD_SEALSTONE_RESULT_VICTORY;
break;
}
case SSR_DRAW:
{
bp.h.header.type = CMD_SEALSTONE_RESULT_DRWAW;
break;
}
}
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 (pUser->name_status.nation == (DWORD)tp->anation)
{
QueuePacket(connections, idUser, &ap, 1);
}
if (pUser->name_status.nation == (DWORD)tp->bnation)
{
QueuePacket(connections, idUser, &bp, 1);
}
}
}
} //> CSD-CN-031213
void Recv_CMD_SEALSTONE_WAR_LEFTTIME(int nation, DWORD lefttime)
{ //< CSD-CN-031213
t_packet p;
p.h.header.type = CMD_SEALSTONE_WAR_LEFTTIME;
p.h.header.size = sizeof(t_sealstone_client_warlefttime);
p.u.sealstone_client_warlefttime.lefttime = lefttime;
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 && pUser->name_status.nation == (DWORD)nation)
{
QueuePacket(connections, idUser, &p, 1);
}
}
} //> CSD-CN-031213
void SendSealStoneFromKing( int cn )
{
return;
if( connections[cn].chrlst.name_status.king == 0 )
{
// 匙啊 空捞衬...
return;
}
t_packet p;
if( KingCommandBlock ) // 泅犁绰 傍拜疙飞阑 郴副荐 绝促.
{
p.h.header.type = CMD_WAR_START_BLOCK;
p.h.header.size = 0;
QueuePacket(connections, cn, &p, 1);
}
else
{
p.h.header.type = CMD_SEALSTONEFROMKING;
p.h.header.size = sizeof( t_sealstone_fromking );
p.u.sealstone_fromking.nation = connections[cn].chrlst.name_status.nation;
QueuePacket(connections, LOGIN_SERVER_CONNECT, &p, 1);
}
}
void Send_CMD_SEALSTONE_STATUS( LPCHARLIST d, int status )
{
t_packet p;
if( d->Race != SEALSTONE ) return;
p.h.header.type = CMD_SEALSTONE_STATUS;
p.h.header.size = sizeof( t_sealstone_status );
p.u.sealstone_status.sealstonesprno = (char )d->SprNo;
p.u.sealstone_status.id = d->eventno;
p.u.sealstone_status.mapnumber = MapNumber;
p.u.sealstone_status.x = d->MoveSx;
p.u.sealstone_status.y = d->MoveSy;
p.u.sealstone_status.status = status;
p.u.sealstone_status.Hp = d->Hp; // 030516 kyo
// QueuePacket( connections, LOGIN_SERVER_CONNECT, &p, 1 );
// 001206 KHS
SERVER_DATA *pData = g_pServerTable->GetOwnServerData();
if( pData->wPort == NATION_MANAGE_SERVER )
{
Recv_CMD_SEALSTONE_STATUS( &p.u.sealstone_status );
}
else
{
packet_msg[0] = (BYTE)PTCL_MAP_TO_MAP;
memcpy( packet_msg + 1, (char *)&p, (sizeof( t_header ) + p.h.header.size ) );
g_pServerTable->Send( (WORD)NATION_MANAGE_SERVER, (char *)&packet_msg, (sizeof( t_header ) + p.h.header.size )+1 ) ;
}
}
/********************************************************************************************白挤(甘挤)俊辑 荤侩窍绰 窃荐
扁 瓷 : 惫啊埃狼 包拌甫 Loginserver肺 焊郴 霸烙辑滚俊 焊郴绢 葛电 霸烙挤(甘挤)捞 舅霸 茄促.
牢 磊 : int a_nation, b_nation : 包拌甫 汲沥且 惫啊 ( 惫啊内靛, 3: 官捞辑胶, 4:磊捞戚 ... )
int relation : 0 : 公包拌 1: 利措包拌 2: 蛆仿包拌 3: 林辆包拌( a:林 b:辆)
DWORD relationstart : 割檬第俊 矫累且巴牢啊
DWORD relationhowlong : 割檬悼救 蜡瘤瞪巴牢啊? ( 0捞搁 公茄 )
搬 苞 : LoginServer俊 焊郴瘤搁, 促矫 霸烙挤(甘挤)栏肺 焊郴瘤哥, 促矫 Client鳖瘤 搬苞甫 焊郴林霸 等促.
*******************************************************************************************************/
int SendNation2NationRelation( int a_nation, int b_nation, int relation, int year = 0, int yday = 0, int hour = 0, DWORD howlong = 0 )
{
t_packet p;
if( relation == NATION_RELATION_FRIEND_ )
{
if( year == 0 ) // 惫啊埃狼 1老埃狼 绒傈阑 茄促.
{
year = g_year;
yday = g_yday;
hour = g_hour;
int shour = 24 - g_hour + 2;
int smin = 60 - g_min;
howlong = 60*60*shour + smin * 60;
}
}
p.h.header.type = CMD_NATION2NATION_RELATION;
p.h.header.size = sizeof( t_nation2nation_relation );
p.u.nation2nation_relation.a = a_nation;
p.u.nation2nation_relation.b = b_nation;
p.u.nation2nation_relation.relation = relation;
p.u.nation2nation_relation.year = year;
p.u.nation2nation_relation.yday = yday;
p.u.nation2nation_relation.hour = hour;
p.u.nation2nation_relation.howlong = howlong;
SERVER_DATA *pData= g_pServerTable->GetOwnServerData();
if( pData->wPort == NATION_MANAGE_SERVER )
{
RecvNation2NationRelation( 0, &(p.u.nation2nation_relation) );
}
else
{
g_pServerTable->BroadCastToEveryServer( (char *)&p, (sizeof( t_header ) + p.h.header.size ), SERVER_TYPE_MAP );
}
// QueuePacket( connections, LOGIN_SERVER_CONNECT, &p, 1 );
return 1;
}
void RecvNation2NationRelationResult(t_packet *p)
{ //< CSD-CN-031213
switch (p->u.nation2nation_relation_result.why)
{
case NATION_RELATION_SAME_FAIL_: // 泅犁 捞固 弊犯霸 汲沥捞 登绢 乐绰惑怕涝聪促.
case NATION_RELATION_FAIL_: // 绒傈捞 搬纺登菌嚼聪促.
{
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 && pUser->name_status.king)
{
QueuePacket(connections, idUser, p, 1);
}
}
break;
}
case NATION_RELATION_SUCCESS_ : // 绒傈捞 己赋登菌嚼聪促.
{
g_pUserManager->SendPacket(p);
break;
}
}
} //> CSD-CN-031213
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -