📄 msgtalk.org
字号:
{
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 + -