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

📄 ltssupport.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 5 页
字号:
#include "..\stdafx.h"

#include <stdio.h>
#include "../LowerLayers/MyLog.h"
#include "../LowerLayers/servertable.h"

#include "SealStone.h"
#include "CItem.h"
#include "NationSys.h"
#include "LTSSupport.h"
#include "Scrp_exe.h"
#include "dungeon.h"
#include "LogManager.h"
#include "AIManager.h"
#include "UserManager.h"

extern void RecvReqResetAbility( short int cn );
extern bool isLevelUp(CHARLIST*);
#define	ABILITY_REDISTRIBUTION_MONEY			1000000000		// 10撅 农复

cLocalWarfield*			g_pLocalWarfield=NULL;
cEventLocalWarfield*	g_pEventLocalWarfield=NULL;				// 020115 LTS
cDragonLordWar			g_pDragonLordWar;					// LTS DRAGONLORD

int					g_isLocalWarServer=0;
int					g_LocalWarBegin=0;
int					g_EventLocalWarBegin=0;						// 020115 LTS
int					g_EventLocalWarStatus=0;					// 020115 LTS
int					g_EventLocalWarStep=0;						// 020115 LTS
int					g_isEventLocalWarServer=0;					// 020115 LTS
int					g_EventMapPort=0;							// 020115 LTS	
POINTS				g_StartPoint[6];							// 唱扼喊 2俺究
DWORD				g_AbilityRedistributionMoney[10];
int					g_LocalWarResult[3]={1,1,1};				// LTS NEW LOCALWAR
POINTS				g_LocalWarMovePoint[7][3];					// LTS NEW LOCALWAR



// Extern Variable Define _______________________________________________________________
extern cNation*				g_pNation;
extern WORD					g_wMapServerPort;
extern int*					g_pNationWar_Exp;		// LTS NEW LOCALWAR

// Extern Variable Define End ___________________________________________________________
// Extern Function Define________________________________________________________________
extern bool			isNationManageServer();
extern void			SendPacket2NWManager(t_packet* p);
extern void			SendPacket2Maps(t_packet* p);						
extern void			SetShape( unsigned char *equip, short int cn );
extern void			SendPacket2NationClients(const int Nation,t_packet* p);	//020903 lsw
extern void			SendPacket2NationMaps(const int Nation,t_packet* p);//020903 lsw
extern CHARLIST* CheckServerId(WORD id);
extern ItemAttr*	SearchInv( CHARLIST *ch );			// 011214 LTS
extern void			MoveEmptyInv( ItemAttr *item, CHARLIST *ch );		// 011215 LTS
extern void			SendPacket2NWMap(const WORD Port,t_packet* p);			// 020115 LTS//020903 lsw

// Extern Function Define End____________________________________________________________

extern unsigned short	g_DefensePoint[];	// BBD 040401

int Pos(char* PosString,char KeyChar)					// LTS NEW LOCALWAR		// 裹侩利牢 窃荐 酒丛
{
	int StringLength=strlen(PosString);
	for (int i=0;i<StringLength;i++)
	{
		if (PosString[i]==KeyChar) return i;
	}
	return -1;
}

void DeleteString(char* DeleteString,int Pos)			// LTS NEW LOCALWAR		// 裹侩利牢 窃荐 酒丛
{
	char tempString[MAX_PATH] = {0,};
	int StringLength=strlen(DeleteString);
	int j=0;
	for (int i=Pos;i<StringLength;i++)
	{
		tempString[j]=DeleteString[i];
		j++;
	}
	tempString[j]=NULL;
	memset(DeleteString,0,MAX_PATH);
	sprintf(DeleteString,tempString);
}

void CopyString(char* SrcString,char* DestString,int Pos)			// LTS NEW LOCALWAR		// 裹侩利牢 窃荐 酒丛
{
	for (int i=0;i<Pos;i++)
	{
		DestString[i]=SrcString[i];
	}
	DestString[i]=NULL;
}

int InitMapServerConfigINI()	// 020115 LTS		// LTS NEW LOCALWAR
{
	// 030919 HK YGI
//	char	NetworkDir[MAX_PATH];
//	char	MapServerConfigFileName[MAX_PATH];
	char	tempString[MAX_PATH];
	char	tempString2[MAX_PATH];

	SERVER_DATA	*pData=g_pServerTable->GetOwnServerData();
	short MapServerPort=pData->wPort;


/*	if (GetPrivateProfileString("Network","path","",NetworkDir,MAX_PATH, MAP_SERVER_INI_)<=0)
	{
		MyLog(0,"Error!! Check MapServerConfig.ini Path Setting!!");
		return FALSE;
	}
	sprintf(MapServerConfigFileName,"%s/data/MapServerConfig.ini",NetworkDir);*/// 030919 HK YGI
	for (int i=0;i<10;i++)
	{
		sprintf(tempString,"NeedMoney%02d",i);
		g_AbilityRedistributionMoney[i]=(int)GetPrivateProfileInt("AbilityRedistribution",tempString,0,MapServerConfigFileName);
	}

	int Position;
	char tempString3[MAX_PATH];
	for (i=0;i<7;i++)
	{
		sprintf(tempString,"LocalWarfield%dBYMovePoint",i);
		GetPrivateProfileString("LocalWarMovePoint",tempString,"Error",tempString2,MAX_PATH,MapServerConfigFileName);
		if (strcmp(tempString2,"Error")==0)
		{
			JustMsg("Error!! LocalWarMovePoint Read Error!! Check MapServerConfig.ini");
			return FALSE;
		}

		Position=Pos(tempString2,',');
		CopyString(tempString2,tempString3,Position);
		g_LocalWarMovePoint[i][0].x=atoi(tempString3);
		DeleteString(tempString2,Position+1);
		g_LocalWarMovePoint[i][0].y=atoi(tempString2);

		sprintf(tempString,"LocalWarfield%dZYMovePoint",i);
		GetPrivateProfileString("LocalWarMovePoint",tempString,"Error",tempString2,MAX_PATH,MapServerConfigFileName);
		if (strcmp(tempString2,"Error")==0)
		{
			JustMsg("Error!! LocalWarMovePoint Read Error!! Check MapServerConfig.ini");
			return FALSE;
		}

		Position=Pos(tempString2,',');
		CopyString(tempString2,tempString3,Position);
		g_LocalWarMovePoint[i][1].x=atoi(tempString3);
		DeleteString(tempString2,Position+1);
		g_LocalWarMovePoint[i][1].y=atoi(tempString2);

		sprintf(tempString,"LocalWarfield%dYLMovePoint",i);
		GetPrivateProfileString("LocalWarMovePoint",tempString,"Error",tempString2,MAX_PATH,MapServerConfigFileName);
		if (strcmp(tempString2,"Error")==0)
		{
			JustMsg("Error!! LocalWarMovePoint Read Error!! Check MapServerConfig.ini");
			return FALSE;
		}

		Position=Pos(tempString2,',');
		CopyString(tempString2,tempString3,Position);
		g_LocalWarMovePoint[i][2].x=atoi(tempString3);
		DeleteString(tempString2,Position+1);
		g_LocalWarMovePoint[i][2].y=atoi(tempString2);
	}
	return TRUE;
}

DWORD GetAbilityRedistributionMoney(t_connection c[], int cn)		// 020115 LTS
{	//< CSD-030806
	const int Index = c[cn].chrlst.GetLevel()/10;
	
	if (Index >= 9)
	{
		return g_AbilityRedistributionMoney[9];
	}
	
	return g_AbilityRedistributionMoney[Index];
}	//> CSD-030806

void RecvCMD_CHECK_ABILITY_CHANGE_MONEY( t_packet *p, t_connection c[], int cn )	// 020115 LTS
{
	t_packet packet;
	packet.h.header.type=CMD_CHECK_ABILITY_CHANGE_MONEY;				
	packet.h.header.size=sizeof(t_CommonDataC);
	CHARLIST *ch = CheckServerId(cn);
	if(!ch){return;}
	if (!ch->IsDual()) // 掂倔捞 酒聪搁 角青
	{
		SendCMD_COMFORM_RESET_ABILITY(ch);//020820 lsw
		return;
	}
	else 
	{
		packet.u.NationWar.CommonDataC.Data=5;		// 掂倔角菩
	}
		
	QueuePacket(c,cn,&packet,1);
}


void MakeSealStoneNumber(char* SrcString,int SealNo[4])				// LTS NEW LOCALWAR		// 裹侩利牢 窃荐 酒丛
{
	int Position;
	char tempString[MAX_PATH];
	char tempSrcString[MAX_PATH];

	strcpy(tempSrcString,SrcString);
	
	for(int i=0;i<3;i++)
	{
		Position=Pos(tempSrcString,',');
		CopyString(tempSrcString,tempString,Position);
		SealNo[i]=atoi(tempString);
		DeleteString(tempSrcString,Position+1);
	}

	SealNo[i]=atoi(tempSrcString);
}

// Where : Call From Main.cpp InitDrmapServerDatas()
// Usage : Initializing Local War System
bool InitLocalWarSystem()				// LTS NEW LCOALWAR
{
	// 030919 HK YGI
//	char	NetworkDir[MAX_PATH];
//	char	MapServerConfigFileName[MAX_PATH];
	char	KeyName[MAX_PATH];
	int		LocalWarfieldSize=0;
	int		tempPort;
	int		MapServerPort;
	char	tempString[MAX_PATH];

	SERVER_DATA	*pData=g_pServerTable->GetOwnServerData();
	MapServerPort=pData->wPort;


/*	if (GetPrivateProfileString("Network","path","",NetworkDir,MAX_PATH, MAP_SERVER_INI_)<=0)
	{
		MyLog(0,"Mapserver.ini狼  Path汲沥捞 肋给登绢乐嚼聪促.");
		return false;
	}
	sprintf(MapServerConfigFileName,"%s/data/MapServerConfig.ini",NetworkDir);*/// 030919 HK YGI
	LocalWarfieldSize=(DWORD)GetPrivateProfileInt("LocalWarfield","LocalWarfieldSize",0,MapServerConfigFileName);
	if (!LocalWarfieldSize)
	{
		MyLog(0,"%s狼 [LocalWarfield],LocalWarfieldSize狼 汲沥捞 肋给登绢乐嚼聪促.",MapServerConfigFileName);
		return false;
	}

	for (int i=0;i<LocalWarfieldSize;i++)
	{
		sprintf(KeyName,"LocalWarfield%dPort",i);
		tempPort=(DWORD)GetPrivateProfileInt("LocalWarfield",KeyName,0,MapServerConfigFileName);
		if (tempPort) 
		{
			if (tempPort==MapServerPort)
			{
				if (NULL==g_pLocalWarfield)
				{
					g_pLocalWarfield=new cLocalWarfield;
					LocalWarfield_Info tempLF;

					g_isLocalWarServer=1;

					tempLF.Index=i;
					sprintf(KeyName,"LocalWarfield%dName",i);
					if (GetPrivateProfileString("LocalWarfield",KeyName,"",tempLF.MapName,20,MapServerConfigFileName)<=0)
					{
						return false;
					}
					sprintf(KeyName,"LocalWarfield%dPort",i);
					tempLF.Port=(DWORD)GetPrivateProfileInt("LocalWarfield",KeyName,0,MapServerConfigFileName);
					if (!tempLF.Port)
					{
						return false;
					}
					sprintf(KeyName,"LocalWarfield%dPhase",i);
					tempLF.Phase=(DWORD)GetPrivateProfileInt("LocalWarfield",KeyName,0,MapServerConfigFileName);
					if (!tempLF.Phase)
					{
						if (i) return false;
					}

					sprintf(KeyName,"LocalWarfield%dBYSealStone",i);
					GetPrivateProfileString("LocalWarfield",KeyName,NULL,tempString,MAX_PATH,MapServerConfigFileName);
					if (tempString==NULL)
					{
						return false;
					}

					MakeSealStoneNumber(tempString,tempLF.SealNo[0]);

					sprintf(KeyName,"LocalWarfield%dZYSealStone",i);
					GetPrivateProfileString("LocalWarfield",KeyName,NULL,tempString,MAX_PATH,MapServerConfigFileName);
					if (tempString==NULL)
					{
						return false;
					}

					MakeSealStoneNumber(tempString,tempLF.SealNo[1]);

					sprintf(KeyName,"LocalWarfield%dYLSealStone",i);
					GetPrivateProfileString("LocalWarfield",KeyName,NULL,tempString,MAX_PATH,MapServerConfigFileName);
					if (tempString==NULL)
					{
						return false;
					}

					MakeSealStoneNumber(tempString,tempLF.SealNo[2]);

					g_pLocalWarfield->SetLocalWarfieldInfo(tempLF);
				}
				return true;
			}
		}
		else
		{
			return false;
		}
	}
	return true;
}

void CloseLocalWarSystem()
{
	SAFE_DELETE(g_pLocalWarfield);
}

int CanLocalWarAttack(CHARLIST* pAttacker,CHARLIST* pDefencer)		// 020115 LTS 弥己悼 ,烙惑快傍悼 
{
	if (!g_LocalWarBegin) return FALSE;				// 惫瘤傈捞 矫累登瘤 臼疽促搁 傍拜凳
	if (!g_isLocalWarServer) return FALSE;			// 惫瘤傈 辑滚啊 酒聪搁 傍拜凳 

	if (pAttacker->JoinLocalWar)
	{
		if (pDefencer->JoinLocalWar)	// 笛促 惫瘤傈俊 曼咯沁促搁
		{
			if (pDefencer->name_status.nation==pAttacker->name_status.nation) return true;	// 鞍篮唱扼捞搁 傍拜阂啊
			else return FALSE;				// 傍拜啊瓷
		} else return TRUE;				// 规绢磊啊 惫瘤傈俊 曼咯 窍瘤 臼疽促搁 傍拜阂啊
	}
	else 
	{
		if (pDefencer->JoinLocalWar)	// 规绢磊啊 惫瘤傈俊 曼咯 沁促搁
		{
			return TRUE;				// 傍拜救凳
		} else return FALSE;			// 笛促 曼咯窍瘤 臼疽促搁 傍拜凳
	}
}

int CheckLocalWarAttacker(CHARLIST* pAttacker)						// 020115 LTS 弥己悼 傍悼
{
	if (!g_LocalWarBegin) return TRUE;
	if (!g_isLocalWarServer) return TRUE;
	if (pAttacker->JoinLocalWar) return FALSE;
	else return TRUE;
}

void IncGainedFame(CHARLIST* ch,int Value)
{
	if (ch->GainedFame>=9) return;
	MyLog(0,"Gained Fame 函版 , 捞抚 : %s, Old : %d, New : %d",ch->Name,ch->GainedFame,ch->GainedFame+Value);
	ch->GainedFame+=Value;
}

void SendPacket2LocalWarJoinClients(t_packet* p)
{	//< CSD-CN-031213
	CUserManager::HASH_USER user = g_pUserManager->GetUserSet();

	for (CUserManager::ITOR_USER i = user.begin(); i != user.end(); ++i)
	{
		const int idUser = i->second;
		CHARLIST* pTarget = CheckServerId(idUser);

		if (pTarget != NULL && pTarget->JoinLocalWar)
		{
			QueuePacket(connections, idUser, p, 1);
		}
	}
}	//> CSD-CN-031213

void CheckLocalWarDeath(CHARLIST* pCaster,CHARLIST* pTarget)	// 011217 LTS
{
	const PointTBL[11] = { 1,1,1,2,2,2,2,2,3,3,4 };			// 痢荐拌魂		// 011219 LTS
	short tempLevel;
	short tempIndex;
	unsigned short NationPoint[3]= {0,0,0};					// 020130 LTS
	t_packet packet;

	if (!g_isLocalWarServer) return;						// 惫瘤傈辑滚啊 酒囱搁 
	if (!g_pLocalWarfield->GetLocalWarStatus()) return;		// 傈里吝捞 酒聪搁 
	if (pCaster==NULL||pTarget==NULL) return;				// 011217 LTS

	if (!pCaster->IsPlayer()) return;						// 020130 LTS
	if (!pTarget->IsPlayer()) return;

	if (pCaster->name_status.nation==pTarget->name_status.nation) return;	//鞍篮 惫啊捞搁 老馆苞 悼老贸府 

	if (pCaster->JoinLocalWar&&pTarget->JoinLocalWar)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -