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

📄 nationsys.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	if (g_wMapServerPort<BASE_NEW_WARFIELD_PORT||g_wMapServerPort>=(BASE_NEW_WARFIELD_PORT+MAX_NEW_WARFIELD))
		return false;
	return true;
}

int CheckJoinReinforce(bool type=true)			// 老馆傈里 true
{
	if (!type)
		return 0;

	if ((g_pWarfieldStatus[0].Possession==g_pWarfieldStatus[1].Possession)&&
		(g_pWarfieldStatus[1].Possession==g_pWarfieldStatus[2].Possession))
	{
		return g_pWarfieldStatus[0].Possession;
	}
	return 0;
}

int GetYL_JoinNation()	// 011020 LTS
{
	if ((g_pWarfieldStatus[0].Possession==g_pWarfieldStatus[1].Possession)&&
		(g_pWarfieldStatus[1].Possession==g_pWarfieldStatus[2].Possession))
	{
		if (g_pWarfieldStatus[0].Possession==NW_BY) return NW_ZY;
		else return NW_BY;
	}
	return 0;
}

// Very often call Function

int CheckNationStatus(const int type,const int StatusNo) // type 0 : EveryServer 1 : NationManageServer
{
	int WarfieldNo=-1;
	if (type)
	{
		if (g_pNation->GetWarfieldStatus(0)==StatusNo) WarfieldNo=0;
		if (g_pNation->GetWarfieldStatus(1)==StatusNo) WarfieldNo=1;
		if (g_pNation->GetWarfieldStatus(2)==StatusNo) WarfieldNo=2;
	}
	else
	{
		if (g_pWarfieldStatus[0].Status==StatusNo) WarfieldNo=0;
		if (g_pWarfieldStatus[1].Status==StatusNo) WarfieldNo=1;
		if (g_pWarfieldStatus[2].Status==StatusNo) WarfieldNo=2;
	}
    return WarfieldNo;
}

bool CheckWarLoopProcess()		// 傈里 风橇啊 柳青登绰瘤 犬牢茄促.
{
	if (isNationManageServer())
	{
		if (g_pNation->GetWarfieldStatus(0)>NW_PEACE) return true;
		if (g_pNation->GetWarfieldStatus(1)>NW_PEACE) return true;
		if (g_pNation->GetWarfieldStatus(2)>NW_PEACE) return true;
		if (g_pNation->GetNewWarfieldStatus(0)>NW_PEACE) return true;

	}
	else
	{
		if (g_pWarfieldStatus[0].Status>NW_PEACE) return true;
		if (g_pWarfieldStatus[1].Status>NW_PEACE) return true;
		if (g_pWarfieldStatus[2].Status>NW_PEACE) return true;
		if (g_pNewWarfieldStatus[0]>NW_PEACE) return true;
	}
	return false;
}

int ReturnWarfieldNoByWarLoopProcess()		// CheckWarLoopProcess客 街栏肺 静牢促.. 器窃秦档 等促..
{
	if (isNationManageServer())
	{
		if (g_pNation->GetWarfieldStatus(0)>NW_PEACE) return 0;
		if (g_pNation->GetWarfieldStatus(1)>NW_PEACE) return 1;
		if (g_pNation->GetWarfieldStatus(2)>NW_PEACE) return 2;
		if (g_pNation->GetNewWarfieldStatus(0)>NW_PEACE) return 3;
	}
	else
	{
		if (g_pWarfieldStatus[0].Status>NW_PEACE) return 0;
		if (g_pWarfieldStatus[1].Status>NW_PEACE) return 1;
		if (g_pWarfieldStatus[2].Status>NW_PEACE) return 2;
		if (g_pNewWarfieldStatus[0]>NW_PEACE) return 3;
	}
	return -1;
}

bool isAttacker(int WarfieldNo,t_connection c[],int cn)		// 绢怕目客 叼奇辑甫 魄窜窍绰 辟芭绰 葛电 甘辑滚狼 g_pWarfieldStatus[].Possession俊 乐促.
{
	int Nationality=c[cn].chrlst.name_status.nation;		// 澜.. 侩捍狼 曼咯俊 蝶扼...
	if (NW_YL==Nationality)									// 老胶捞搁..
	{
		Nationality=c[cn].chrlst.NWCharacter.YL_JoinNation; //唱扼锅龋啊 朝酒柯促
	}
	if (g_pWarfieldStatus[WarfieldNo].Possession==Nationality) return false;
	return true;
}

bool isAttacker(CHARLIST* pCaster)
{
	int Nationality=pCaster->name_status.nation;			// 澜.. 侩捍狼 曼咯俊 蝶扼...
	if (NW_YL==Nationality)									// 老胶捞搁..
	{
		Nationality=pCaster->NWCharacter.YL_JoinNation;		//唱扼锅龋啊 朝酒柯促
	}
	if (g_pWarfieldStatus[g_wMapServerPort-BASE_WARFIELD_PORT].Possession==Nationality) return false;
	return true;
}

bool isAttacker(int WarfieldNo,int Nation)					// 老胶狼 版快 公炼扒 傍拜磊肺 魄沥阑 罐绰促.
{
	if (g_pWarfieldStatus[WarfieldNo].Possession==Nation) return false;
	return true;
}

bool IsWar()
{
	if (isNationWarfieldServer())
	{
		if (g_pWarfield->GetStatus() == NW_WAR)
		{
			return true;//020903 lsw
		}
	}

	if (isNewWarfieldServer())
	{
		if (g_pNewWarfield->GetWarfieldStatus() == NW_WAR)
		{
			return true;
		}
	}

	return false;
}

bool isMySquad(CHARLIST* pCaster,CHARLIST* pTarget)
{
	if (!isNationWarfieldServer()) return false;
	if (g_pWarfield->GetStatus()!=NW_WAR) return false;
	if (pCaster->name_status.nation==pTarget->name_status.nation)	// 鞍篮 唱扼捞促 
	{
		if (pCaster->NWCharacter.SquadNo==pTarget->NWCharacter.SquadNo)		// 何措 锅龋啊 鞍促.
		{
			if (pCaster->NWCharacter.SquadNo!=0) return true;
		}
	}
	return false;
}

void ClearNationWar_Exp()		// LTS NEW LOCALWAR
{
	SAFE_DELETE_ARRAY(g_pNationWar_Exp);
}

bool LoadNationWar_Exp()		// LTS NEW LOCALWAR
{
	HSTMT	hStmt=NULL;
	RETCODE	ret;
	SWORD	nClos;
	char	query_stmt[80]={0,};
	SDWORD	cbValue;
	int		FieldCount;
	int		tempExpGrade;

	SQLAllocStmt(hDBC,&hStmt);

	wsprintf(query_stmt,"select Count(Exp_Grade) as FieldCount from NationWar_Exp");   
	ret=SQLExecDirect(hStmt,(UCHAR*)query_stmt,SQL_NTS);
	if (ret!=SQL_SUCCESS_WITH_INFO && ret !=SQL_SUCCESS)
	{
		MyLog(0,"NationWar_Exp Table Query Error!!");
		SQLFreeStmt(hStmt,SQL_DROP);
		return false;
	}

	SQLNumResultCols(hStmt,&nClos);

	ret=SQLFetch(hStmt);
	if (ret!=SQL_SUCCESS_WITH_INFO && ret !=SQL_SUCCESS)
	{
		MyLog(0,"NationWar_Exp Table Fetch Error!!");
		SQLFreeStmt(hStmt,SQL_DROP);
		return false;
	}
	ret=SQLGetData(hStmt,1,SQL_C_SLONG,&FieldCount,sizeof(int),&cbValue);	// 鞘靛墨款飘 备窍扁
	if (ret!=SQL_SUCCESS_WITH_INFO && ret!=SQL_SUCCESS)
	{
		MyLog(0,"NationWar_Exp Table SQL Return Error(%d)!!",ret);
	    SQLFreeStmt(hStmt,SQL_DROP);
		return false;
	}                
    SQLFreeStmt(hStmt,SQL_DROP);

	SQLAllocStmt(hDBC,&hStmt);

	g_pNationWar_Exp=new int[FieldCount+1];					// 皋葛府 且寸	// 0何磐 矫累窍骨肺 
	if (!g_pNationWar_Exp) 
	{
		MyLog(0,"Memory Allocation Error for NationWar Exp Table!!");
		return false;
	}

	wsprintf(query_stmt,"select * from NationWar_Exp order by Exp_Grade");   
	ret=SQLExecDirect(hStmt,(UCHAR*)query_stmt,SQL_NTS);
	if (ret!=SQL_SUCCESS_WITH_INFO && ret !=SQL_SUCCESS)
	{
		MyLog(0,"NationWar_Exp Table Query Error!!");
		SQLFreeStmt(hStmt,SQL_DROP);
		return false;
	}
	SQLNumResultCols(hStmt,&nClos);
	ret=SQLFetch(hStmt);
	if (ret!=SQL_SUCCESS_WITH_INFO && ret !=SQL_SUCCESS)
	{
		MyLog(0,"NationWar_Exp Table Fetch Error!!");
		SQLFreeStmt(hStmt,SQL_DROP);
		return false;
	}
	while (ret==SQL_SUCCESS)
	{
		ret=SQLGetData(hStmt,1,SQL_C_SLONG,&tempExpGrade,sizeof(int),&cbValue);
		if (ret!=SQL_SUCCESS_WITH_INFO && ret!=SQL_SUCCESS)
		{
			MyLog(0,"NationWar_Exp Table SQL Return Error(%d)!!",ret);
		    SQLFreeStmt(hStmt,SQL_DROP);
			return false;
		}                
		ret=SQLGetData(hStmt,3,SQL_C_SLONG,&g_pNationWar_Exp[tempExpGrade],sizeof(int),&cbValue);
		if (ret!=SQL_SUCCESS_WITH_INFO && ret!=SQL_SUCCESS)
		{
			MyLog(0,"NationWar_Exp Table SQL Return Error(%d)!!",ret);
		    SQLFreeStmt(hStmt,SQL_DROP);
			return false;
		}                
		ret=SQLFetch(hStmt);
	}
    SQLFreeStmt(hStmt,SQL_DROP);
	return true;
}

void ReLoadNationData()
{
	if (isNationWarfieldServer()) g_pWarfield->InitWarLoopDefine();
}

bool CanDestroyTarget(CHARLIST* pCaster,CHARLIST* pTarget)		// CAttackMagic::Result
{
	if (isNationWarfieldServer())
	{
		if (isAttacker(pCaster))								// Attacker	// 荐龋籍 己巩狼 版快
		{
			if (64==pTarget->SprNo)								// 焊胶 荐龋籍 
			{
				for (int i=0;i<NW_MAX_NPC;i++)					// NPC傈眉甫 鉴雀 (20俺)
				{
					if (63==g_pWarfield->GetWeaponIndex(i))		//焊炼 荐龋籍
					{
						if (1==g_pWarfield->GetWeaponStatus(i)) 
						{
							return false;  //混酒 乐促搁 
						}
					}
				}
				return true;									//促磷菌促搁..
			}
			else 
			{
				return	true;
			}// 焊胶 荐龋籍捞 酒聪搁 饼荐 乐促.
		}
		else 
		{
			return false;
		}// Defencer     //荐龋籍 己巩狼  版快 饼荐 绝促
	}
	if (isNewWarfieldServer())
	{
		return g_pNewWarfield->CanAttackGuard(pCaster,pTarget);
	}
	return false;
}

void CountNationDeath(CHARLIST* pCaster,CHARLIST* pTarget)
{
	if (!isNationWarfieldServer()) return;
	if (pTarget->name_status.nation==NW_YL)
	{
		if (isAttacker(g_pWarfield->GetWarfieldCode(),pTarget->NWCharacter.YL_JoinNation)) 
			 g_pWarfield->IncKilledCount(NW_ATTACKER);
		else g_pWarfield->IncKilledCount(NW_DEFENCER);
	}
	else
	{
		if (isAttacker(g_pWarfield->GetWarfieldCode(),pTarget->name_status.nation))
			 g_pWarfield->IncKilledCount(NW_ATTACKER);
		else g_pWarfield->IncKilledCount(NW_DEFENCER);
	}
}

void UpdateWarTime()			// 011015 LTS 
{
	struct tm *today;
	time_t lTime;
	__int64 curr_time;
	__int64 starttime;

	__int64 year,mon,yday,day,hour,min,sec;

	time(&lTime);
	today = localtime(&lTime);

	year = today->tm_year + 1900;
	mon  = today->tm_mon;
	yday = today->tm_yday;
	day  = today->tm_mday;
	hour = today->tm_hour;
	min  = today->tm_min;
	sec  = today->tm_sec;
		
		//-----------------------------------------------

	curr_time = ((__int64)(g_year - 1) * 31536000) 
			      + ((g_yday) * 86400) 
			      + (g_hour * 3600) 
			      + (g_min * 60) 
			      + g_sec;

	starttime  = ((__int64)(1998) * 31536000) 
			      + ((365-61) * 86400) 
			      + (24 * 3600) 
			      + (0 * 60) 
			      + 0;
	g_WarTime = (curr_time - starttime );
	//MyLog(0,"Time : %ld",g_WarTime);		// LTS TEMP
};

// ScripFunction _____________________________________________________________
bool CheckDefence(int cn)
{
	if (!isNationWarfieldServer()) 
	{
		return false;			//巩力啊 乐促. 傍拜磊啊 酒聪促.
	}
	
	if (isAttacker(g_wMapServerPort-BASE_WARFIELD_PORT,connections,cn)) 
	{
		return false;
	}
	else 
	{
		return true;
	}
	return false;
}

bool CanGoBonus()
{
	if (isNationWarfieldServer())
	{
		return g_pWarfield->isBonusTime();
	}

	if (isNewWarfieldServer())
	{
		if (g_pNewWarfield->GetWarfieldStatus() == NW_SOPEN)
		{
			return true;
		}
	}

	return false;
}
// ___________________________________________________________________________

int CheckNationStatus(const int StatusNo)
{
	int WarfieldNo=-1;
	if (isNationManageServer())
	{
		if (g_pNation->GetWarfieldStatus(0)==StatusNo)
		{
			WarfieldNo=0;
		}
		if (g_pNation->GetWarfieldStatus(1)==StatusNo) 
		{
			WarfieldNo=1;
		}
		if (g_pNation->GetWarfieldStatus(2)==StatusNo) 
		{
			WarfieldNo=2;
		}
	}
	else
	{
		if (g_pWarfieldStatus[0].Status==StatusNo) 
		{
			WarfieldNo=0;
		}
		if (g_pWarfieldStatus[1].Status==StatusNo) 
		{

⌨️ 快捷键说明

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