⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 teambattle.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#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 + -