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

📄 guildmanager.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// GuildManager.cpp: implementation of the CGuildManager class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "GuildManager.h"
#include "ObjectManager.h"
#include "ChatManager.h"
#include "GameIn.h"
#include "GuildCreateDialog.h"
#include "CharacterDialog.h"
#include "GuildInviteDialog.h"
#include "GuildDialog.h"
#include "GuildLevelupDialog.h"
#include "GuildRankDialog.h"
#include "GuildWarehouseDialog.h"
#include "MHMap.h"
#include "GuildMarkManager.h"
#include "MHFile.h"
#include "AbilityManager.h"
#include "FilteringTable.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CGuildManager::CGuildManager()
{
}

CGuildManager::~CGuildManager()
{

} 

void CGuildManager::Init()
{
	m_Guild.Init(NULL);
	SetCreating(FALSE);
	SetRequestPlayerId(0);
	m_SelectedMemberID = 0;
	m_bActiveFunc = FALSE;
	LoadLevelUpInfo();
	GUILDMARKMGR->Init();
}

void CGuildManager::NetworkMsgParse(BYTE Protocol,void* pMsg)
{
	if(HERO == 0)
		return;
	if(HERO->IsInited() == FALSE)
		return;
	switch(Protocol)
	{
	case MP_GUILD_CREATE_ACK:
		{
			SEND_GUILD_CREATE_ACK * pmsg = (SEND_GUILD_CREATE_ACK*)pMsg;
			CreateGuildResult(pmsg->GuildIdx, pmsg->GuildName);
		}
		break;
	case MP_GUILD_BREAKUP_ACK:
		{			
			BreakUpGuildResult();
		}
		break;
	case MP_GUILD_ADDMEMBER_INVITE:
		{
			CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(33));
		}
		break;
	case MP_GUILD_ADDMEMBER_ACK:
		{
			SEND_GUILD_MEMBER_INFO* pmsg = (SEND_GUILD_MEMBER_INFO*)pMsg;
			m_Guild.AddMember(&pmsg->MemberInfo);
			m_Guild.RefreshMember();
			// create, addmember
			if(pmsg->MemberInfo.MemberIdx == HEROID)
			{
				HERO->SetGuildIdxRank(pmsg->GuildIdx, pmsg->MemberInfo.Rank);
				HERO->SetGuildName(pmsg->GuildName);
				GAMEIN->GetCharacterDialog()->RefreshMunpaInfo();
			}
			GAMEIN->GetGuildDlg()->RefreshGuildInfo(&m_Guild);
			CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(37), pmsg->MemberInfo.MemberName);
		}
		break;
	case MP_GUILD_DELETEMEMBER_ACK:
		{
			MSG_DWORDBYTE* pmsg = (MSG_DWORDBYTE*)pMsg;
			GUILDMEMBERINFO * pInfo = m_Guild.GetMemberInfo(pmsg->dwData);
			if(pInfo == 0)
				return;
			if(pmsg->dwData == HEROID)
			{
				m_Guild.Release();
				HERO->ClearGuildInfo();
				GAMEIN->GetCharacterDialog()->RefreshMunpaInfo();
				if(GAMEIN->GetGuildDlg()->IsActive() == TRUE)
					GAMEIN->GetGuildDlg()->SetActive(FALSE);
				if(GAMEIN->GetGuildWarehouseDlg()->IsActive())
					GAMEIN->GetGuildWarehouseDlg()->SetActive(FALSE);
				CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(51));
				return;
			}
			if(pmsg->bData == eGuild_Delete) //ban
				CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(42), pInfo->MemberName);
			else //secede
				CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(43), pInfo->MemberName);
			m_Guild.DeleteMember(pmsg->dwData);
			GAMEIN->GetGuildDlg()->RefreshGuildInfo(&m_Guild);
		}
		break;
	case MP_GUILD_INVITE:
		{
			if(GAMEIN->GetGuildInviteDlg()->IsActive() == TRUE)
			{
				//檬措吝捞绢辑 促弗 巩颇狼 檬措甫 给罐绰促. chatmsg
				return;
			}			
			SEND_GUILD_INVITE* pmsg = (SEND_GUILD_INVITE*)pMsg;
			SetRequestPlayerId(pmsg->MasterIdx);
			GAMEIN->GetGuildInviteDlg()->SetInfo(pmsg->GuildName, pmsg->MasterName);
			GAMEIN->GetGuildInviteDlg()->SetActive(TRUE);
		}
		break;
	case MP_GUILD_INVITE_DENY:
		{
			CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(47));
		}
		break;
	case MP_GUILD_INFO:
		{
			SEND_GUILD_TOTALINFO* pmsg = (SEND_GUILD_TOTALINFO*)pMsg;
			m_Guild.SetTotalInfo(&pmsg->GuildInfo, pmsg->MemberInfo, pmsg->membernum);
			GAMEIN->GetGuildDlg()->RefreshGuildInfo(&m_Guild);
			GAMEIN->GetGuildRankDlg()->ShowGuildRankMode(pmsg->GuildInfo.GuildLevel);
		}
		break;
	case MP_GUILD_ACCEPT_ACK:
		{
			SEND_GUILD_TOTALINFO* pmsg = (SEND_GUILD_TOTALINFO*)pMsg;
			HERO->SetGuildIdxRank(pmsg->GuildInfo.GuildIdx, GUILD_MEMBER);
			HERO->SetGuildName(pmsg->GuildInfo.GuildName);
			GAMEIN->GetCharacterDialog()->RefreshMunpaInfo();
			
			m_Guild.SetTotalInfo(&pmsg->GuildInfo, pmsg->MemberInfo, pmsg->membernum);
		
			GAMEIN->GetGuildDlg()->RefreshGuildInfo(&m_Guild);
			CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(31), GetRankName(HERO->GetGuildMemberRank()));			
		}
		break;
	case MP_GUILD_SECEDE_ACK:
		{
			HERO->ClearGuildInfo();
			GAMEIN->GetCharacterDialog()->RefreshMunpaInfo();
			m_Guild.Release();
			GAMEIN->GetGuildDlg()->SetActive(FALSE);
			CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(48));
		}
		break;
	case MP_GUILD_LEVELUP_ACK:
		{
			MSG_BYTE* pmsg = (MSG_BYTE*)pMsg;
			m_Guild.SetLevel(pmsg->bData);
			GAMEIN->GetCharacterDialog()->RefreshMunpaInfo();
			GAMEIN->GetGuildDlg()->RefreshGuildInfo(&m_Guild);
			GAMEIN->GetGuildLevelUpDlg()->SetLevel(pmsg->bData);
			GAMEIN->GetGuildRankDlg()->ShowGuildRankMode(pmsg->bData);
			if(pmsg->bData == GUILD_5LEVEL)
				CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(707));
			else
				CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(40), pmsg->bData);
		}
		break;
	case MP_GUILD_SETENTRYDATE:
		{
			MSG_NAME* pmsg = (MSG_NAME*)pMsg;
			HERO->SetGuildEntryDate(pmsg->Name);
		}
		break;
	case MP_GUILD_CHANGERANK_ACK:
		{
			MSG_DWORDBYTE * pmsg = (MSG_DWORDBYTE*)pMsg;
			if(HEROID == pmsg->dwData)
			{
				HERO->SetGuildMemberRank(pmsg->bData);
				GAMEIN->GetCharacterDialog()->RefreshMunpaInfo();
				CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(107), GetRankName(pmsg->bData));
			}
			else
			{
				CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(721), GetMemberName(pmsg->dwData), GetRankName(pmsg->bData));
			}
			m_Guild.ChangeRank(pmsg->dwData, pmsg->bData);
			m_Guild.RefreshMember();
		}
		break;
	case MP_GUILD_PUTIN_MONEY_ACK: case MP_GUILD_PUTOUT_MONEY_ACK:
		{
			MSG_DWORD3 * pmsg = (MSG_DWORD3 *)pMsg;
			GAMEIN->GetGuildWarehouseDlg()->PutInOutMoneyResult(pmsg);
		}
		break;
	//////////////////////////////////////////////////////////
	//NACK
	case MP_GUILD_CREATE_NACK:
		{
			MSG_BYTE * pmsg = (MSG_BYTE*)pMsg;
			if(pmsg->bData == eGuildErr_Create_Name)
				CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(29));
			else
				CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(44));
			SetCreating(FALSE);
		}
		break;
	case MP_GUILD_BREAKUP_NACK:
		{
			CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(44));
		}
		break;
	case MP_GUILD_DELETEMEMBER_NACK:
		{
			CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(44));
		}
		break;
	case MP_GUILD_INVITE_ACCEPT_NACK:
		{
			//巩颇 秦眉
			CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(44));
		}
		break;
	case MP_GUILD_ADDMEMBER_NACK:
		{
			MSG_BYTE* pmsg = (MSG_BYTE*)pMsg;
			ShowErrMsg(pmsg->bData);
		}
		break;

		//////////////////////////////////////////////////////////////
		//mark
	case MP_GUILDMARK_UPDATE_ACK:
		{
			MSG_GUILDMARK_IMG* pmsg = (MSG_GUILDMARK_IMG*)pMsg;
			((CPlayer*)HERO)->SetGuildMarkName(pmsg->MarkName);
			GUILDMARKMGR->OnRecvGuildMarkImg(pmsg);
				
			//付农 盎脚
			OBJECTMGR->ApplyOverInfoOptionToAll();
			CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(705));
		}
		break;
	case MP_GUILDMARK_UPDATE_NACK:
		{
			CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(44));
		}
		break;
	case MP_GUILDMARK_REQUEST_ACK:
		{
			MSG_GUILDMARK_IMG* pmsg = (MSG_GUILDMARK_IMG*)pMsg;
			GUILDMARKMGR->OnRecvGuildMarkImg(pmsg);
			
			//付农 盎脚
			OBJECTMGR->ApplyOverInfoOptionToAll();
		}
		break;
	case MP_GUILDMARK_REQUEST_NACK:
		{
	//		MSG_DWORD* pmsg = (MSG_DWORD*)pmsg;
			int a = 1;
		}
		break;
	case MP_GUILDMARK_CHANGE:
		{
			MSG_DWORD3 * pmsg = (MSG_DWORD3*)pMsg;
			MarkChange(pmsg);
			CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(705));
		}
		break;
	default:
		{
			char buf[32];
			sprintf(buf, "Protocol : %d", Protocol);
			ASSERTMSG(0, buf);
		}		
	}
}

void CGuildManager::CreateGuildSyn(char* GuildName, char* Intro)
{
	if(IsCreating() == TRUE)
	{
		CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(34));
		return;
	}
	if(HERO->GetGuildIdx())
	{
		CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(28));
		return;
	}
	if( ( FILTERTABLE->IsInvalidCharInclude((unsigned char *)GuildName) == TRUE ) || 
		( FILTERTABLE->IsUsableName(GuildName) == FALSE ) )
	{
		CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(29));
		return;
	}

	SetCreating(TRUE);

	SEND_GUILD_CREATE_SYN msg;
	msg.Category = MP_GUILD;
	msg.Protocol = MP_GUILD_CREATE_SYN;
	SafeStrCpy(msg.GuildName, GuildName, MAX_GUILD_NAME+1);
	SafeStrCpy(msg.Intro, Intro, MAX_GUILD_INTRO+1);
	msg.dwObjectID = HEROID;

	NETWORK->Send(&msg, sizeof(msg));
	GAMEIN->GetGuildCreateDlg()->SetActive(FALSE);
}

void CGuildManager::BreakUpGuildSyn()
{
	if(HERO->GetGuildIdx() == 0)
	{
		char buf[64];
		sprintf(buf, "HOW CAN U SHOW DLG? chridx : %u", HEROID);
		ASSERTMSG(0, buf);
		return;
	}
	if(HERO->GetGuildMemberRank() != GUILD_MASTER)
	{
		char buf[64];
		sprintf(buf, "HOW CAN U BREAKUP? chridx : %u, rank : %d", HEROID, HERO->GetGuildMemberRank());
		ASSERTMSG(0, buf);
		return;
	}
	
	MSGBASE msg;
	msg.Category = MP_GUILD;
	msg.Protocol = MP_GUILD_BREAKUP_SYN;
	msg.dwObjectID = HEROID;

	NETWORK->Send(&msg, sizeof(msg));
}

void CGuildManager::CreateGuildResult(DWORD GuildIdx, char* GuildName)
{
	SetCreating(FALSE);
	
	HERO->SetGuildIdxRank(GuildIdx, GUILD_MASTER);
	HERO->SetGuildName(GuildName);
	GAMEIN->GetCharacterDialog()->RefreshMunpaInfo();

	GUILDINFO GInfo;
	GInfo.GuildIdx = GuildIdx;
	SafeStrCpy(GInfo.GuildName, GuildName, MAX_GUILD_NAME+1);
	SafeStrCpy(GInfo.MasterName, HERO->GetObjectName(), MAX_NAME_LENGTH+1);
	GInfo.MapNum = MAP->GetMapNum();
	GInfo.GuildLevel = GUILD_1LEVEL;
	GInfo.UnionIdx = 0;
	GInfo.MasterIdx = HEROID;
	m_Guild.Init(&GInfo);

	GUILDMEMBERINFO Info;
	Info.InitInfo(HEROID, HERO->GetObjectName(), HERO->GetLevel(), GUILD_MASTER);
	m_Guild.AddMember(&Info);
	m_Guild.RefreshMember();

	GAMEIN->GetGuildRankDlg()->ShowGuildRankMode(GInfo.GuildLevel);
	GAMEIN->GetGuildDlg()->RefreshGuildInfo(&m_Guild);

	CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(58));
}

void CGuildManager::BreakUpGuildResult()
{
	m_Guild.Release();
	HERO->ClearGuildInfo();
	GAMEIN->GetCharacterDialog()->RefreshMunpaInfo();
	if(GAMEIN->GetGuildDlg()->IsActive() == TRUE)
		GAMEIN->GetGuildDlg()->SetActive(FALSE);
	if(GAMEIN->GetGuildWarehouseDlg()->IsActive())
		GAMEIN->GetGuildWarehouseDlg()->SetActive(FALSE);

⌨️ 快捷键说明

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