📄 teambattle.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 "teambattle.h"
#include "scrp_exe.h"
#include "chatting.h"
#include "menuserver.h" // 020620 YGI
#include "UserManager.h"
#include "ArenaManager.h"
//////////////////////////////////////////////////////////////////////////
// 妮肺技胶 版扁 铰菩 历厘
void CalcWinLoseScore( WINLOSEPOINT &win_lose, int wintype )
{
switch( wintype )
{
case FST_WIN: win_lose.win++; break; // 铰
case FST_DEFEAT : win_lose.defeat++; break; // 菩
case FST_DISCONNECT:win_lose.disconnect++; break; // disconnect
}
}
void SendFightMapChatMyTeam( short int cn, t_packet *packet )
{ //< CSD-030509
CHARLIST* pMember = CheckServerId(cn);
if (pMember == NULL)
{
return;
}
CBaseArena* pGame = pMember->GetJoinArenaGame();
if (pGame == NULL)
{
return;
}
CArenaTeam* pTeam = pMember->GetJoinArenaTeam();
if (pTeam == NULL)
{
return;
}
t_packet p;
t_connection *c = connections;
int range, type, length;
range = (int)packet->u.client_chat_data.range;
type = (int)packet->u.client_chat_data.type;
length = (int)packet->u.client_chat_data.length;
if(length <= 0 || length >= TEXT_LENGTH) return;
p.h.header.type = CMD_CHAT_DATA;
p.u.server_chat_data.server_id = cn;
p.u.server_chat_data.type = CHATTYPE_COLOSSUS;
p.u.server_chat_data.length = (unsigned char)length;
memcpy(p.u.server_chat_data.text, packet->u.client_chat_data.text, length);
p.h.header.size = sizeof(t_server_chat_data)-TEXT_LENGTH+length;
pTeam->SendPacket(&p);
} //> CSD-030509
void SendFightMapChat( short int cn, t_packet *packet ) // 傈眉俊霸 焊辰促.
{ //< CSD-030509
CHARLIST* pMember = CheckServerId(cn);
if (pMember == NULL)
{
return;
}
CBaseArena* pGame = pMember->GetJoinArenaGame();
if (pGame == NULL)
{
return;
}
CArenaTeam* pTeam = pMember->GetJoinArenaTeam();
if (pTeam == NULL)
{
return;
}
t_packet p;
t_connection *c = connections;
int range, type, length;
range = (int)packet->u.client_chat_data.range;
type = (int)packet->u.client_chat_data.type;
length = (int)packet->u.client_chat_data.length;
if(length <= 0 || length >= TEXT_LENGTH) return;
p.h.header.type = CMD_CHAT_DATA;
p.u.server_chat_data.server_id = cn;
p.u.server_chat_data.length = (unsigned char)length;
memcpy(p.u.server_chat_data.text, packet->u.client_chat_data.text, length);
p.h.header.size = sizeof(t_server_chat_data)-TEXT_LENGTH+length;
CBaseArena::LIST_TEAM ltTeam = pGame->GetArenaTeamSet();
for (CBaseArena::ITOR_TEAM i = ltTeam.begin(); i != ltTeam.end(); ++i)
{
if ((*i) == pTeam)
{
p.u.server_chat_data.type = CHATTYPE_COLOSSUS;
}
else
{
p.u.server_chat_data.type = CHATTYPE_COLOSSUS_GLOBAL;
}
(*i)->SendPacket(&p);
}
} //> CSD-030509
void SendGamblingResult(CHARLIST* pGambler, int nPayment, DWORD dwMoney)
{ //< CSD-030522
t_packet packet;
packet.h.header.type = CMD_ARENA_GAMBLING_RESULT;
packet.h.header.size = sizeof(t_arena_gambling_result);
packet.u.arena.arena_gambling_result.nPayment = nPayment;
packet.u.arena.arena_gambling_result.dwMoney = dwMoney;
::QueuePacket(connections, pGambler->GetServerID(), &packet, 1);
} //> CSD-030522
// 惩 弊 评俊 殿废 灯促.
void SendTeamBattleMessageAddCharOk( char team_num, short int cn )
{
t_packet p;
p.h.header.type = CMD_FIGHT_MAP_ADD_OK;
p.u.kein.default_char = team_num;
p.h.header.size = sizeof( char );
QueuePacket(connections, cn, &p, 1);
}
inline int GetNationByMapName( char *mapname )
{
EatRearWhiteChar( mapname );
strupr(mapname );
for( int i=0; i<MAX_MAP_;i++ )
{
if( MapInfo[i].mapfile[0] )
{
if( strcmp( MapInfo[i].mapfile, mapname) == 0 )
{
return MapInfo[i].nation;
}
}
}
return -1;
}
// recent矫 荤侩窍绰 角力 db 俊 历厘窍绰 mapname苞 x, y甫 函券 矫懦荐 乐促.
struct k_impossible_map
{
int map_index;
POINTS xy[3];
};
// recent 矫 xy 蔼阑 官层霖促. // 历厘且锭 官层辑 历厘茄促.
void CheckFightMap( char *mapname, short int &x, short int &y, CHARLIST *ch )
{ //< CSD-030509 : recent矫 困摹蔼阑 函版
LPMAPINFO pMapInfo = ::GetMapInfoByMapName(mapname);
if (pMapInfo == NULL)
{
return;
}
switch (pMapInfo->cPosType)
{
case 1:
{
x = pMapInfo->nSaveX*TILE_SIZE;
y = pMapInfo->nSaveY*TILE_SIZE;
break;
}
default:
{
CArenaInfo* pArena = g_pArenaManager->GetArenaInfo(pMapInfo->port);
if (pArena == NULL)
{
return;
}
int nX = 0, nY = 0;
pArena->GetWaitPosition(nX, nY);
x = nX*TILE_SIZE;
y = nY*TILE_SIZE;
break;
}
}
} //> CSD-030509
////////////////////////////////////////////////////////////
// 白喉 酒捞袍 CGambleItem // << 011019 ygi
int CGambleItem::SetSize( int house, int type, int count )
{
Release( house, type );
if(0 >= count){ return 0; }
m_GambleItem[house][type].lpItem = new int[count];
m_GambleItem[house][type].count = count;
return 1;
}
int CGambleItem::Release( int house, int type )
{
if( !m_GambleItem[house][type].lpItem ) return 1;
SAFE_DELETE_ARRAY(m_GambleItem[house][type].lpItem);
m_GambleItem[house][type].count = 0;
return 1;
}
CGambleItem g_GambleItem;
// >> 011019 ygi
////////////////////////////////////////////////////////////
CTodayGambleItem g_TodayGambleItem;
int CheckMapPort( int port )
{
if( port == g_MapPort ) return true;
else return false;
}
int CTodayGambleItem::CreateTodayItem()
{
int house = 0;
int room = 0;
int ran = rand()%100;
int type = ChoiceParam( g_game_rate_data.create_today_item, 8, ran );
switch( type )
{
case 0 : house = 2; room = 0; break;
case 1 : house = 2; room = 1; break;
case 2 : house = 2; room = 2; break;
case 3 : house = 4; room = 0; break;
case 4 : house = 4; room = 1; break;
case 5 : house = 4; room = 2; break;
case 6 : house = 4; room = 3; break;
case 7 : house = 4; room = 4; break;
default: return 0;
}
int item_no = g_GambleItem.GetRandItem( house, room );
if( house == 2 )
{
m_TodayItem = MakeGambleItem( house, room, item_no );
}
else
{
m_TodayItem = MakeGambleItem( house%2+3, rand()%4+1, item_no );
}
return 1;
}
// 020428 YGI acer
int RefreshTodayItem()
{
if( !CheckMapPort( FindMannagementMap( MM_TODAY_GAMBLE_ITEM_MAIN_MAP_PORT ) ) ) return 0;
if( !g_TodayGambleItem.CreateTodayItem() ) return 0;
t_packet packet;
packet.h.header.type = CMD_SET_TODAY_GAMBLE_ITEM;
packet.u.kein.default_item = g_TodayGambleItem.GetTodayItem();
packet.h.header.size = sizeof( ItemAttr );
SendPacket2Maps( &packet );
return 1;
}
// 020707 YGI
WORD FindMannagementMap( WORD port )
{
if( GetOwnPort() == port ) return port;
LP_SERVER_DATA pServerData = g_pServerTable->GetServerData( (WORD)port );
if( !pServerData || !pServerData->dwConnectionIndex )
{
pServerData = g_pServerTable->GetServerData( (WORD)5190 );
if( !pServerData || !pServerData->dwConnectionIndex )
{
return GetOwnPort();
}
return 5190;
}
return port;
}
//acer5
// 020620 YGI
int g_GetManagementMapPortFlag;
WORD GetManagementMapPort( WORD port )
{
if( !g_GetManagementMapPortFlag )
{
g_GetManagementMapPortFlag = (int)GetPrivateProfileInt("kein", "GetPortFlag", 0, MAP_SERVER_INI_ );
if( !g_GetManagementMapPortFlag) g_GetManagementMapPortFlag = 100;
}
if(LocalMgr.IsFreeBeta())//030102 lsw
{
if( g_GetManagementMapPortFlag != 100 )
{
FindMannagementMap( port );
}
}
return port;
}
k_nation_item_data g_nation_item; // 惫啊 绊鞭 酒捞袍
extern int IsStartNationWar(); // 捞 甘捞 惫啊傈 甘捞绊 泅犁 傈捧 吝牢啊?
extern int g_LocalWarBegin; // 011215 LTS
extern int g_isLocalWarServer; // LTS 020725
// 辨靛傈 吝, 鞍篮 评牢瘤 八荤
// 020620 YGI
bool IsColleagueWhenColossus( CHARLIST *a, CHARLIST *d )
{ //< CSD-031013
// isPKONOFF
if( a->pk_on_off == 0 ) // 傍拜 阂啊 汲沥阑 秦敌 惑怕俊辑
{
if (d->IsTamedNpc())
{
return true;
}
if(LocalMgr.IsAbleNation(KOREA))//030102 lsw
{
if( ! // 关狼 惑炔吝 绢蠢巴档 酒匆锭
( IsStartNationWar() // 惫啊傈老锭 // 葛滴 曼咯磊
|| ( a->fight_flag && a->fight_id == d->GetServerID()) // 搬捧吝牢单 措惑磊甫 锭啡阑 锭
|| (IsArenaFight(a)) // 辨靛傈矫 曼咯 吝老锭
|| ( g_LocalWarBegin && a->JoinLocalWar&&g_isLocalWarServer ) // 惫瘤傈矫 曼咯 吝老锭 // LTS 020725
|| ( d->GetNK( a->name_status.nation ) ) // 惑措规捞 nk 老锭
))
{
// 皋矫瘤 免仿
CallClient( a->GetServerID(), CMD_FAIL_ATTACK_BY_PK_MODE );
return true; // 傍拜捞 阂啊瓷 窍促
}
}
else
{
CallClient( a->GetServerID(), CMD_FAIL_ATTACK_BY_PK_MODE );
return true; // 傍拜捞 阂啊瓷 窍促
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -