📄 ltssupport.cpp
字号:
{
//笛促 傈里俊 曼咯沁促.
tempLevel = pTarget->GetLevel() - pCaster->GetLevel(); // CSD-030806
tempIndex=(int)tempLevel/10;
if (tempLevel>0) //规绢磊狼 饭骇捞 臭促 // 傍拜磊狼 痢荐裙垫
{
switch (pCaster->name_status.nation) // 惫啊痢荐甫 备茄促.
{
case NW_BY : NationPoint[0]+=PointTBL[tempIndex]; break;
case NW_ZY : NationPoint[1]+=PointTBL[tempIndex]; break;
case NW_YL : NationPoint[2]+=PointTBL[tempIndex]; break;
}
if (tempIndex>0)
{
IncGainedFame(pCaster,3);
IncGainedFame(pTarget,-3);
}
else
{
if (tempIndex==0)
{
IncGainedFame(pCaster,2);
IncGainedFame(pTarget,-2);
}
}
}
else //傍拜磊狼 饭骇捞 臭促 // 规绢磊狼 痢荐
{
if (tempIndex<-1)
{
IncGainedFame(pCaster,0);
IncGainedFame(pTarget,0);
}
else
{
if (tempIndex==0)
{
IncGainedFame(pCaster,1);
IncGainedFame(pTarget,-1);
}
}
}
}
/* else // 020130 LTS
{
if (pCaster->JoinLocalWar)
{
//傍拜磊啊 傈里曼咯
IncGainedFame(pCaster,-2); //傈里葛靛啊 酒囱荤恩阑 磷捞搁 -2疙己摹皑家
switch (pCaster->name_status.nation) // 惫啊痢荐甫 备茄促.
{
case NW_BY : NationPoint[0]-=5; break;
case NW_ZY : NationPoint[1]-=5; break;
case NW_YL : NationPoint[2]-=5; break;
}
}
else
{
//规绢磊啊 傈里曼咯
switch (pCaster->name_status.nation) // 惫啊痢荐甫 备茄促.
{
case NW_BY : NationPoint[0]-=5; break;
case NW_ZY : NationPoint[1]-=5; break;
case NW_YL : NationPoint[2]-=5; break;
}
}
}*/
//MyLog(0,"Send Nation Point 1 : %d, 2 : %d, 3 : %d",NationPoint[0],NationPoint[1],Nationpoint[2]);
packet.h.header.type=CMD_LOCALWAR_NATION_POINT_CHANGED;
packet.u.LocalWar.NationPointChanged.NationPoint[0]=NationPoint[0];
packet.u.LocalWar.NationPointChanged.NationPoint[1]=NationPoint[1];
packet.u.LocalWar.NationPointChanged.NationPoint[2]=NationPoint[2];
packet.h.header.size=sizeof(t_NationPointChanged);
SendPacket2NWManager(&packet);
}
cLocalWarfield::cLocalWarfield()
{
m_tLocalWarfieldInfo.Index=0;
m_tLocalWarfieldInfo.Port=0;
m_tLocalWarfieldInfo.Phase=0;
ClearManCount();
ClearSealStonePtr(); // LTS NEW LOCALWAR
// ClearPoint();
}
void cLocalWarfield::ClearSealStonePtr() // LTS NEW LOCALWAR
{
for (int i=0;i<NW_NATION_COUNT;i++)
{
for (int j=0;j<LOCALWAR_SEALSTONE_MAX;j++)
{
m_SealStonePtr[i][j]=NULL;
}
}
}
int cLocalWarfield::ConvertNation2Index(int Nation)
{
switch (Nation)
{
case NW_BY : return 0;
case NW_ZY : return 1;
case NW_YL : return 2;
}
return 0;
}
void cLocalWarfield::ClearManCount()
{
m_ManCount[0]=0; // LOOP UNROLL
m_ManCount[1]=0;
m_ManCount[2]=0;
}
/*void cLocalWarfield::ClearPoint()
{
m_LocalWarPoint[0]=0; // LOOP UNROLL
m_LocalWarPoint[1]=0;
m_LocalWarPoint[2]=0;
}*/
void cLocalWarfield::SetLocalWarfieldInfo(LocalWarfield_Info LF) // LTS NEW LOCALWAR
{
m_tLocalWarfieldInfo.Index=LF.Index;
m_tLocalWarfieldInfo.Phase=LF.Phase;
m_tLocalWarfieldInfo.Port=LF.Port;
strcpy(m_tLocalWarfieldInfo.MapName,LF.MapName);
for (int i=0;i<NW_NATION_COUNT;i++)
{
for (int j=0;j<LOCALWAR_SEALSTONE_MAX;j++)
{
m_SealStoneNo[i][j]=LF.SealNo[i][j];
}
}
}
int cLocalWarfield::CheckAllSealStonebroked(int NationIndex) // LTS NEW LOCALWAR
{
for (int i=0;i<LOCALWAR_SEALSTONE_MAX;i++) // NPCList[]俊辑 瘤况柳促搁... 救等促.
{ // 惫瘤傈狼 搬拌籍篮 Remove登瘤 臼绰促. 犬牢秦焊磊
if (m_SealStonePtr[NationIndex][i])
{
if (!m_SealStonePtr[NationIndex][i]->IsDead())
{
return FALSE;
}
}
}
/* t_packet packet;
packet.h.header.type=CMD_SEALSTONE_ALL_BROKED;
packet.u.LocalWar.CommonDataC.Data=TRUE;
packet.h.header.size=sizeof(t_CommonDataC);
SendPacket2Map(&packet,NATION_MANAGE_SERVER);*/
return TRUE;
}
extern int GetNationIndex(int Nation); // LTS NEW LOCALWAR
void cLocalWarfield::CheckSealStonePtr(CHARLIST* ch) // LTS NEW LOCALWAR BUG
{
int NationIndex;
switch(ch->SprNo)
{
case 98 : NationIndex=0; break; // BY
case 99 : NationIndex=1; break; // ZY
case 91 : NationIndex=2; break; // YL
}
for (int i=0;i<LOCALWAR_SEALSTONE_MAX;i++)
{
if (ch->eventno==m_SealStoneNo[NationIndex][i]) // 0篮 磊悼栏肺 NULL捞等促.
{
if (m_SealStonePtr[NationIndex][i]==NULL)
{
m_SealStonePtr[NationIndex][i]=ch;
MyLog(0,"SEALSTONE WAS POINTED!! EventNo : %d, NationIndex:%d, Locate:%d",ch->eventno,NationIndex,i);
return;
}
}
}
}
CHARLIST* cLocalWarfield::GetSealStonePtr( const int nNation, const int nStoneNum )
{// 030506 kyo
if( 0 <= nNation && nNation <= NW_NATION_COUNT && 0<= nStoneNum && nStoneNum <= LOCALWAR_SEALSTONE_MAX )
{
return m_SealStonePtr[nNation][nStoneNum];
}
else
return NULL;
}
void cLocalWarfield::RecoveryAllSealStone()
{// 030520 kyo //葛电 搬拌籍狼 HP甫 HPMAX肺 盲款促.
CHARLIST *ch;
for (int i=0;i<NW_NATION_COUNT;i++)
{
for (int j=0;j<LOCALWAR_SEALSTONE_MAX;j++)
{
ch = GetSealStonePtr( i, j );
if( !ch)
{
continue;
}
ch->Hp = ch->HpMax;
}
}
}
void GiveSealStonePoint(CHARLIST* ach,CHARLIST* dch)
{
switch (dch->SprNo)
{
case 91 :
MyLog(0,"Gained Fame 函版 , 捞抚 : %s, Old : %d, New : %d",ach->Name,ach->GainedFame,ach->GainedFame+3);
if (ach->name_status.nation!=NW_YL) ach->GainedFame+=3;
break;
case 98 :
MyLog(0,"Gained Fame 函版 , 捞抚 : %s, Old : %d, New : %d",ach->Name,ach->GainedFame,ach->GainedFame+3);
if (ach->name_status.nation!=NW_BY) ach->GainedFame+=3;
break;
case 99 :
MyLog(0,"Gained Fame 函版 , 捞抚 : %s, Old : %d, New : %d",ach->Name,ach->GainedFame,ach->GainedFame+3);
if (ach->name_status.nation!=NW_ZY) ach->GainedFame+=3;
break;
}
}
void SendCMD_LOCALWAR_STARTUP_STATUS(CHARLIST* ch) //盖贸澜 肺变矫 焊辰促.
{
t_packet packet;
packet.h.header.type=CMD_LOCALWAR_STARTUP_STATUS;
packet.u.LocalWar.CommonDataC.Data=g_LocalWarBegin;
packet.h.header.size=sizeof(t_CommonDataC);
QueuePacket(connections,ch->GetServerID(),&packet,1);
}
void SendCMD_ANSWER_LOCAL_DELIVERY(int UserID,int MapServerPort,t_packet* p)
{
t_packet DeliveryPacket;
DeliveryPacket.h.header.type=CMD_ANSWER_LOCAL_DELIVERY;
DeliveryPacket.u.LocalWar.Delivery_A.UserID=UserID;
DeliveryPacket.u.LocalWar.Delivery_A.Size=sizeof(t_header)+p->h.header.size;
//memcpy(DeliveryPacket.u.LocalWar.Delivery_A.Data,(char*)p,DeliveryPacket.u.LocalWar.Delivery_A.Size);
DeliveryPacket.u.LocalWar.Delivery_A.nType = p->h.header.type; // 030518 kyo
memcpy(DeliveryPacket.u.LocalWar.Delivery_A.Data,(char*)(p->u.data),DeliveryPacket.u.LocalWar.Delivery_A.Size); // 030518 kyo单捞鸥父 汗荤
DeliveryPacket.h.header.size=sizeof(t_Delivery_A)-100+DeliveryPacket.u.LocalWar.Delivery_A.Size;
g_pServerTable->SendRajaPacketToOtherMapServer(MapServerPort, (char *)&DeliveryPacket, DeliveryPacket.h.header.size+sizeof(t_header) );
}
void SendCMD_REQUEST_LOCAL_DELIVERY(t_packet *p, t_connection c[], int cn)
{
t_packet packet;
packet.h.header.type=CMD_REQUEST_LOCAL_DELIVERY;
packet.u.LocalWar.Delivery_R.Port=g_wMapServerPort;
packet.u.LocalWar.Delivery_R.UserID=cn;
packet.u.LocalWar.Delivery_R.Size=sizeof(t_header)+p->h.header.size;
memcpy(packet.u.LocalWar.Delivery_R.Data,(char*)p,packet.u.LocalWar.Delivery_R.Size);
packet.h.header.size=sizeof(t_Delivery_R)-MAX_STRING_PK+packet.u.LocalWar.Delivery_R.Size; //100篮 滚欺狼 荐捞促. MAX_STRING_PK (NetWork4.h)//020903 lsw
g_pServerTable->SendRajaPacketToOtherMapServer( NATION_MANAGE_SERVER, (char *)&packet, packet.h.header.size+sizeof(t_header) );
}
void SendCMD_REQUEST_LOCAL_DELIVERY(WORD Port,t_packet *p, t_connection c[], int cn)
{
t_packet packet;
packet.h.header.type=CMD_REQUEST_LOCAL_DELIVERY;
packet.u.LocalWar.Delivery_R.Port=g_wMapServerPort;
packet.u.LocalWar.Delivery_R.UserID=cn;
packet.u.LocalWar.Delivery_R.Size=sizeof(t_header)+p->h.header.size;
memcpy(packet.u.LocalWar.Delivery_R.Data,(char*)p,packet.u.LocalWar.Delivery_R.Size);
packet.h.header.size=sizeof(t_Delivery_R)-MAX_STRING_PK+packet.u.LocalWar.Delivery_R.Size; //100篮 滚欺狼 荐捞促. MAX_STRING_PK (NetWork4.h)//020903 lsw
g_pServerTable->SendRajaPacketToOtherMapServer( Port, (char *)&packet, packet.h.header.size+sizeof(t_header) );
}
void ProcessCMD_LOCALWAR_STATUS(t_packet *ReturnPacket,t_packet* ReceivePacket)
{
ReturnPacket->h.header.type=CMD_LOCALWAR_STATUS;
ReturnPacket->u.LocalWar.CommonDataC.Data=g_pNation->GetLocalWarStatus();
ReturnPacket->h.header.size=sizeof(t_CommonDataC);
}
void ProcessCMD_REQUEST_LOCALWAR_INFO(t_packet *ReturnPacket,t_packet* ReceivePacket) // LTS NEW LOCALWAR
{
const char EventNo[3][9]={ { 1, 2, 6, 7, 8,24,25,26,27}, // NW_BY
{ 8, 9,18,19,20,24,25,26,27}, // NW_ZY
{ 9,10,13,14,15,25,26,27,28} }; // NW_YL
ReturnPacket->h.header.type=CMD_ANSWER_LOCALWAR_INFO;
ReturnPacket->h.header.size=sizeof(t_LocalWarInfo);
for (int i=0;i<7;i++)
{
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo1[i].Index=i;
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo1[i].ManCount[0]=g_pNation->GetLocalWarfieldManCount(i,0);
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo1[i].ManCount[1]=g_pNation->GetLocalWarfieldManCount(i,1);
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo1[i].ManCount[2]=g_pNation->GetLocalWarfieldManCount(i,2);
}
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarPointChanged.RemainTime=g_pNation->GetLocalWarRemainTime()-g_curr_time;
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarPointChanged.Point[0]=g_pNation->GetLocalWarPoint(0);
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarPointChanged.Point[1]=g_pNation->GetLocalWarPoint(1);
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarPointChanged.Point[2]=g_pNation->GetLocalWarPoint(2);
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[0][0]=SealStone[NW_BY].status[EventNo[0][0]]; // LOOP UNROLL
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[0][1]=SealStone[NW_BY].status[EventNo[0][1]];
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[0][2]=SealStone[NW_BY].status[EventNo[0][2]];
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[0][3]=SealStone[NW_BY].status[EventNo[0][3]];
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[0][4]=SealStone[NW_BY].status[EventNo[0][4]];
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[0][5]=SealStone[NW_BY].status[EventNo[0][5]];
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[0][6]=SealStone[NW_BY].status[EventNo[0][6]];
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[0][7]=SealStone[NW_BY].status[EventNo[0][7]];
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[0][8]=SealStone[NW_BY].status[EventNo[0][8]];
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[1][0]=SealStone[NW_ZY].status[EventNo[1][0]]; // LOOP UNROLL
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[1][1]=SealStone[NW_ZY].status[EventNo[1][1]];
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[1][2]=SealStone[NW_ZY].status[EventNo[1][2]];
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[1][3]=SealStone[NW_ZY].status[EventNo[1][3]];
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[1][4]=SealStone[NW_ZY].status[EventNo[1][4]];
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[1][5]=SealStone[NW_ZY].status[EventNo[1][5]];
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[1][6]=SealStone[NW_ZY].status[EventNo[1][6]];
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[1][7]=SealStone[NW_ZY].status[EventNo[1][7]];
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[1][8]=SealStone[NW_ZY].status[EventNo[1][8]];
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[2][0]=SealStone[NW_YL].status[EventNo[2][0]]; // LOOP UNROLL
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[2][1]=SealStone[NW_YL].status[EventNo[2][1]];
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[2][2]=SealStone[NW_YL].status[EventNo[2][2]];
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[2][3]=SealStone[NW_YL].status[EventNo[2][3]];
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[2][4]=SealStone[NW_YL].status[EventNo[2][4]];
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[2][5]=SealStone[NW_YL].status[EventNo[2][5]];
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[2][6]=SealStone[NW_YL].status[EventNo[2][6]];
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[2][7]=SealStone[NW_YL].status[EventNo[2][7]];
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[2][8]=SealStone[NW_YL].status[EventNo[2][8]];
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarDefencePoint[0]=g_pNation->GetLocalWarDefencePoint(0); // LTS NEW LOCALWAR
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarDefencePoint[1]=g_pNation->GetLocalWarDefencePoint(1); // LTS NEW LOCALWAR
ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarDefencePoint[2]=g_pNation->GetLocalWarDefencePoint(2); // LTS NEW LOCALWAR
}
void ProcessCMD_EVENT_LOCALWAR_JOIN(t_packet *ReturnPacket,t_packet* ReceivePacket)
{
int Level=ReceivePacket->u.LocalWar.EventJoin.Level;
int Nation=ReceivePacket->u.LocalWar.EventJoin.Nation;
if (!g_isEventLocalWarServer) return;
if (!g_pEventLocalWarfield->CheckLevel(Level)) // 饭骇狼 裹困啊 撇府促搁
{
ReturnPacket->h.header.type=CMD_EVENT_LOCALWAR_JOIN_RESULT;
ReturnPacket->u.LocalWar.CommonDataC.Data=2; // 0 : 角菩 1 : 己傍 2 : 饭骇角菩 3 : 牢盔角菩
ReturnPacket->h.header.size=sizeof(t_CommonDataC);
return;
}
if (!g_pEventLocalWarfield->IncManCount(Nation)) // 牢盔力茄俊 吧啡促搁
{
ReturnPacket->h.header.type=CMD_EVENT_LOCALWAR_JOIN_RESULT;
ReturnPacket->u.LocalWar.CommonDataC.Data=3; // 0 : 角菩 1 : 己傍 2 : 饭骇角菩 3 : 牢盔角菩
ReturnPacket->h.header.size=sizeof(t_CommonDataC);
return;
}
ReturnPacket->h.header.type=CMD_EVENT_LOCALWAR_JOIN_RESULT; // 捞惑绝促搁
ReturnPacket->u.LocalWar.CommonDataC.Data=1; // 0 : 角菩 1 : 己傍 2 : 饭骇角菩 3 : 牢盔角菩
ReturnPacket->h.header.size=sizeof(t_CommonDataC);
}
void RecvCMD_REQUEST_LOCAL_DELIVERY(t_packet *p, t_connection c[], int cn)
{
t_packet tempPacket;
t_packet SendPacket;
WORD MapServerPort;
DWORD UserID;
MapServerPort=p->u.LocalWar.Delivery_R.Port;
UserID=p->u.LocalWar.Delivery_R.UserID;
memcpy((char*)&tempPacket,p->u.LocalWar.Delivery_R.Data,p->u.LocalWar.Delivery_R.Size);
switch (tempPacket.h.header.type)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -