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

📄 msgtalk.org

📁 网络游戏魔域的服务端与客户端完整源代码 包括详细的说明文档与开发日志
💻 ORG
📖 第 1 页 / 共 2 页
字号:
		{
			if (pUser->IsPM())
			{
				pUser->AddAttrib(_USERATTRIB_SOUL, 500, SYNCHRO_TRUE);
				pUser->AddAttrib(_USERATTRIB_HEALTH, 500, SYNCHRO_TRUE);
				pUser->AddAttrib(_USERATTRIB_FORCE, 500, SYNCHRO_TRUE);
				pUser->AddAttrib(_USERATTRIB_SPEED, 500, SYNCHRO_TRUE);
			}
		}
		else if(stricmp(szCmd, "pos") == 0)
		{
			pUser->SendSysMsg("(%3d, %3d)", pUser->GetPosX(), pUser->GetPosY());
		}		
		else if (stricmp(szCmd, "player") == 0)
		{
			if (pUser->GetAccountID() <= 100)
			{
				if(stricmp(szParam, "all") == 0)
				{
					pUser->SendSysMsg(STR_SHOW_PLAYERS_uu, UserManager()->GetUserAmount(), UserManager()->GetMaxUser());
				}
				else if(stricmp(szParam, "map") == 0)
				{
					OBJID idMap = pUser->GetMapID();
					pUser->SendSysMsg("total %u player in this map.", UserManager()->GetMapUserAmount(idMap));
				}
			}
		}
		else if (stricmp(szCmd, "setmaxplayer") == 0)
		{
			if (pUser && pUser->IsPM() && strlen(szParam) > 0)
			{
				int nMaxPlayers = atoi(szParam);
				extern DWORD g_dwMaxPlayer;
				InterlockedExchange((long*)&g_dwMaxPlayer, nMaxPlayers);
				{
					pUser->SendSysMsg(STR_SET_MAX_PLAYERS_u, nMaxPlayers);
				}
			}
		}
		else if (stricmp(szCmd, "fly") == 0)
		{
			if (pUser && pUser->IsGM())
			{
				MSGBUF	szCmd	= "NO_CMD";
				int nPosX = 0, nPosY = 0;
				if (3 == sscanf(szWords+1, "%s %d %d", szCmd, &nPosX, &nPosY))
				{
					CMapPtr pMap = pUser->GetMap();
					if (pMap)
					{
						if(!pMap->IsStandEnable(nPosX, nPosY))
						{
							pUser->SendSysMsg(STR_CAN_STAND);
							return;
						}

						IMapThing* pMapThing = NULL;

						IThingSet* pSet = pMap->QueryBlock(nPosX, nPosY).QuerySet();
						for(int i = 0; i < pSet->GetAmount(); i++)
						{
							IMapThing* pTheMapThing = pSet->GetObjByIndex(i);
							if (pTheMapThing && 									
									pTheMapThing->GetObjType() == OBJ_NPC &&
										pTheMapThing->GetPosX() == nPosX && pTheMapThing->GetPosY() == nPosY)
							{
								pMapThing = pTheMapThing;
								break;		
							}
						}

						if (!pMapThing)
							pUser->FlyMap(ID_NONE, nPosX, nPosY);
						else
							pUser->SendSysMsg(STR_CAN_STAND);
					}
				}
			}
		}
		else if (stricmp(szCmd, "chgmap") == 0)
		{
			if (pUser && pUser->IsGM())
			{
				MSGBUF	szCmd	= "NO_CMD";
				OBJID idMap = ID_NONE;
				int nPosX = 0, nPosY = 0;
				if (4 == sscanf(szWords+1, "%s %u %d %d", szCmd, &idMap, &nPosX, &nPosY))
				{
					CMapPtr pMap = MapManager()->QueryMap(idMap);
					if (pMap)
					{
#ifdef	LOCAL_DEBUG
						if(!pMap->IsValidPoint(nPosX, nPosY))
#else
						if(!pMap->IsStandEnable(nPosX, nPosY))
#endif
						{
							pUser->SendSysMsg(STR_CAN_STAND);
							return;
						}
						IMapThing* pMapThing = NULL;

						IThingSet* pSet = pMap->QueryBlock(nPosX, nPosY).QuerySet();
						CHECK(pSet);
						for(int i = 0; i < pSet->GetAmount(); i++)
						{
							IMapThing* pTheMapThing = pSet->GetObjByIndex(i);
							if (pTheMapThing && 									
									pTheMapThing->GetObjType() == OBJ_NPC &&
										pTheMapThing->GetPosX() == nPosX && pTheMapThing->GetPosY() == nPosY)
							{
								pMapThing = pTheMapThing;
								break;		
							}
						}

						if (!pMapThing)
							pUser->FlyMap(idMap, nPosX, nPosY);
						else
							pUser->SendSysMsg(STR_CAN_STAND);
					}
					else
					{
						pUser->FlyMap(idMap, nPosX, nPosY);
					}
				}
			}
		}
		else if (stricmp(szCmd, "千里传音") == 0)
		{
			if (pUser->IsGM())
			{
				char szMsg[256] = "";
				if (2 == sscanf(szWords+1, "%s %s", szCmd, szMsg))
				{
					char szBuf[300]	= "";
					sprintf(szBuf, "%s:%s", pUser->GetName(), szMsg);
					UserManager()->BroadcastMsg(szBuf, NULL, NULL, 0xffffff, _TXTATR_GM);
				}
			}
		}
		else if (stricmp(szCmd, "reloadaction") == 0)
		{
			OBJID idAction=0;
			if (2 == sscanf(szWords+1, "%s %u", szCmd, &idAction))
			{
				if(idAction == ID_NONE)
				{
					if (pUser->IsPM())
					{
						pUser->SendSysMsg(STR_WARNING_CRASH);
						extern IActionSet* g_setAction;
						if(g_setAction)
							g_setAction->Release();
						g_setAction	= CActionSet::CreateNew(true);
						IF_OK_(g_setAction && g_setAction->Create("SELECT * FROM cq_action", Database()))
							pUser->SendSysMsg("[ACTION UPDATE。]");
						LOGMSG("★process command: %s★", szCmd);
					}
				}
				else
				{
					if (pUser->IsGM())
					{
						extern IActionSet* g_setAction;
						SQLBUF	szSQL;
						sprintf(szSQL, "SELECT * FROM cq_action WHERE id=%u LIMIT 1", idAction);
						CAutoPtr<IRecordset>	pRes = Database()->CreateNewRecordset(szSQL);
						CActionData* pData = CActionData::CreateNew();
						if(pData)
						{
							IF_OK(pData->Create(pRes))
							{
								DEBUG_TRY // VVVVVVVVVVVVVV
								g_setAction->DelObj(pData->GetKey());		// BUG: don't safe in multi thread
								g_setAction->AddObj(pData);
								pUser->SendSysMsg("[AN ACTION UPDATE。]");
								DEBUG_CATCH("reloadaction") // AAAAAAAAAAAAA
							}
							else
								pData->Release();
						}
						LOGMSG("%s process command: %s %d", pUser->GetName(), szCmd, idAction);
					}
				}
			}
		}
		else if (stricmp(szCmd, "reloadmagictype") == 0)
		{
			if (pUser->IsPM())
			{
				pUser->SendSysMsg(STR_WARNING_CRASH);
				extern IMagicTypeSet* g_setMagicType;
				if(g_setMagicType)
					g_setMagicType->Release();
				g_setMagicType	= CMagicTypeSet::CreateNew(true);
				IF_NOT_(g_setMagicType && g_setMagicType->Create("SELECT * FROM cq_magictype", Database()))
					pUser->SendSysMsg("[ERROR: MAGICTYPE UPDATE ERROR]");
				extern IMagicTypeSet* g_setAutoMagicType;
				if(g_setAutoMagicType)
					g_setAutoMagicType->Release();
				g_setAutoMagicType	= CMagicTypeSet::CreateNew(true);
				IF_NOT_(g_setAutoMagicType && g_setAutoMagicType->Create("SELECT * FROM cq_magictype WHERE auto_learn!=0", Database()))
					pUser->SendSysMsg("[ERROR: MAGICTYPE UPDATE ERROR]");
				CUserManager::Iterator pUser = UserManager()->NewEnum();
				while(pUser.Next())
				{
					if(pUser)
						pUser->QueryMagic()->DebugReloadAll();
				}
				LOGMSG("★process command: %s★", szCmd);
			}
		}
		else if (stricmp(szCmd, "查询") == 0)
		{
			CUserPtr pTarget = UserManager()->GetUser(szParam);
			if(pTarget)
			{
				OBJID idSyn = pUser->QuerySynAttr()->GetSynID();
				OBJID idTargetSyn = pTarget->QuerySynAttr()->GetSynID();
				if(idSyn != ID_NONE && idTargetSyn == idSyn)
				{
					pUser->SendSysMsg("贡献度:%d。", pTarget->QuerySynAttr()->GetInt(SYNATTRDATA_PROFFER));
				}
			}
		}
		else if (stricmp(szCmd, "奖品") == 0)
		{
			if (!pUser->DoBonus())
			{
				pUser->SendSysMsg(STR_NO_BONUS);
			}
		}
#ifdef	_DEBUG
		else if(stricmp(szCmd, "test") == 0)
		{
			pUser->SendSysMsg("Dead loop !!!");
			while(true)
				Sleep(1000*1000);
			if(pUser)
				pUser->AttachStatus(pUser->QueryRole(), STATUS_WING, 1, 30);
			pUser->SetAttrib(_USERATTRIB_KEEPEFFECT, pUser->GetEffect(), SYNCHRO_BROADCAST);
		}
#endif
//#ifdef	_DEBUG
		else if (stricmp(szCmd, "dropitem") == 0)
		{
			pUser->SendSysMsg(szWords);
			OBJID	idRuleGroup = 0;
			if (2 == sscanf(szWords+1, "%s %u", szCmd, &idRuleGroup))
			{
				CDropRuleGroup* pDropRuleGroup	= DropRuleMap()->GetObjByIndex(idRuleGroup);
				if (pDropRuleGroup)
				{
					OBJID	idItemType = pDropRuleGroup->GetDropItem();
					if (idItemType != ID_NONE)
					{
						if(pUser->AwardItem(idItemType, SYNCHRO_TRUE))
							pUser->SendSysMsg("[您的物品增加了。 idItemType = %u ]", idItemType);
					} else {
						pUser->SendSysMsg("[ 不掉物品。idItemType = %u ]", idItemType);
					}
				} else {
					pUser->SendSysMsg("[ 没找到规则 %u ]", idRuleGroup);
				}
			} else {
				pUser->SendSysMsg("[ 参数数量不对 ]");
			}
		}
//#endif
		DEBUG_CATCH2("CMsgTalk CMD:[%s] error.", szCmd)			// AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
		return;
	}

	// 鬼频道
	if(pUser && pUser->IsGhost() && m_pInfo->unTxtAttribute != _TXTATR_TEAM)
	{
		m_pInfo->unTxtAttribute	= _TXTATR_GHOST;
		pUser->BroadcastRoomMsg(this, EXCLUDE_SELF);
		return ;
	}

	// 普通TALK
	switch(m_pInfo->unTxtAttribute)
	{
	case	_TXTATR_GLOBAL:
		{
			if(pRole->GetLev() < 30)
			{
				pRole->SendSysMsg(STR_NO_ENOUGH_LEVEL);
				break;
			}

			if(pUser && pUser->GetMana() < 200)
			{
				pRole->SendSysMsg(STR_NO_ENOUGH_POWER);
				break;
			}

			pRole->AddAttrib(_USERATTRIB_MANA, -200, SYNCHRO_TRUE);

			RoleManager()->BroadcastMsg(this);
		}
		break;
	case	_TXTATR_PRIVATE:
		{
			CUserPtr pTarget = UserManager()->GetUser(szReceiver);
			if(pTarget)
				pTarget->SendMsg(this);
			else
				MapGroup(PID)->QueryIntraMsg()->TransmitWorldMsg(this, szReceiver);
		}
		break;
	case	_TXTATR_TEAM:
		{
			if (pUser)
			{
				CTeam* pTeam = pUser->GetTeam();
				if (pTeam)
					pTeam->BroadcastTeamMsg(this, pUser);
			}
		}
		break;
	case	_TXTATR_FRIEND:
		{
			if (pUser)
				pUser->BroadcastFriendsMsg(this);
		}
		break;
	case	_TXTATR_SYNDICATE:
		{
			if (pUser)
			{
				OBJID idSyn = pUser->GetSynID();
				CSyndicate* pSyn = SynManager()->QuerySyndicate(idSyn);
				if (pSyn)
				{
					if(pSyn->GetInt(SYNDATA_MONEY) < SYN_MONEY_BASELINE)
					{
						pUser->SendSysMsg(STR_TOO_LOWER_SYN_MONEY);
						break;
					}
					pSyn->BroadcastSynMsg(this, pUser);

					m_pInfo->idTransmit	= pSyn->GetID();
					MapGroup(PID)->QueryIntraMsg()->TransmitMsg(this, GetSocketID(), GetNpcID());
				}
			}
		}
		break;
	case	_TXTATR_LEAVEWORD:
		{
			if (pUser)
			{
				if(!::TalkStrCheck(szWords, true))		// true: enable new line character
				{
					pUser->SendSysMsg(STR_INVALID_CHARACTER);
					return ;
				}
				pUser->AddLeaveWord(szReceiver, szWords);
			}
		}
		break;
	case	_TXTATR_SYNANNOUNCE:
		{
			LPCTSTR pAnnounce = szWords;
			if(!pUser || pUser->GetSynID() == ID_NONE || pUser->GetSynRankShow() < RANK_ASSISTANT)
				return ;
			if(!::TalkStrCheck(szWords, true))		// true: enable new line character
			{
				pUser->SendSysMsg(STR_INVALID_CHARACTER);
				return ;
			}

			CSyndicate* pSyn = SynManager()->QuerySyndicate(pUser->GetSynID());
			IF_OK(pSyn)
			{
				pSyn->QueryModify()->SetTenet(pAnnounce);
				pSyn->BroadcastSubSynMsg(GetSocketID(), GetNpcID(), pAnnounce, NULL, NULL, 0xFFFFFF, _TXTATR_SYNANNOUNCE);
			}
		}
		break;
	case	_TXTATR_CRYOUT:
		{
			if (pUser && pUser->QueryBooth())
			{
				if(!::TalkStrCheck(szWords))
				{
					pUser->SendSysMsg(STR_INVALID_MSG);
					return ;
				}

				pUser->QueryBooth()->SetCryOut(szWords);
			}
		}
		break;
	case	_TXTATR_MSG_TRADE:
	case	_TXTATR_MSG_FRIEND:
	case	_TXTATR_MSG_TEAM:
	case	_TXTATR_MSG_SYN:
	case	_TXTATR_MSG_OTHER:
		{
			CUser* pUser = UserManager()->GetUser(this);
			if(!pUser)
				return ;
			if(pUser->GetLev() < LOGIN_FREE_LEVEL)
			{
				pUser->SendSysMsg(STR_LOW_LEVEL);
				return ;
			}
			if(!::TalkStrCheck(szWords, true))		// true: enable new line character
			{
				pUser->SendSysMsg(STR_INVALID_CHARACTER);
				return ;
			}

				if(m_pInfo->unTxtAttribute == _TXTATR_MSG_SYN)
			{
				OBJID idSyn = pUser->GetSynID();
				if(idSyn == ID_NONE)
					return ;

				SetTransData(idSyn);
			}

			MapGroup(PID)->QueryIntraMsg()->TransmitWorldMsg(this);
		}
		break;
	case	_TXTATR_MSG_SYSTEM:
		{
			ASSERT(!"_TXTATR_MSG_OTHER");
		}
		break;

	case	_TXTATR_SERVE:
		{
			CUser* pUser = UserManager()->GetUser(this);
			if (!pUser)
				return;

			if (pUser->IsGM())	// game service
			{
				CUserPtr pTarget = UserManager()->GetUser(szReceiver);
				if (pTarget)
					pTarget->SendMsg(this);
				else
					MapGroup(PID)->QueryIntraMsg()->TransmitWorldMsg(this, szReceiver);
			}
			else				// client ask service
			{
				CUserPtr pTarget = UserManager()->GetGM();
				if (pTarget)
					pTarget->SendMsg(this);
				else
					MapGroup(PID)->QueryIntraMsg()->TransmitWorldMsg(this, szReceiver);
			}
		}
		break;

	default:
		{
			pRole->BroadcastRoomMsg(this, EXCLUDE_SELF);
		}
		break;
	}
}

⌨️ 快捷键说明

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