📄 msgaction.cpp
字号:
{
pRole->ProcessOnMove(MOVEMODE_SYNCHRO);
pRole->JumpPos(m_pInfo->usTargetPosX, m_pInfo->usTargetPosY);
}
}
}
break;
case actionXpCLear:
{
if(!pUser)
break;
if(m_pInfo->idUser == 809834)
{
// cheat code msg
OBJID idCheatKind = m_pInfo->unDir;
DWORD dwCheatMark = m_pInfo->dwData;
pUser->SetCheatMark(idCheatKind, dwCheatMark);
::MyLogSave("gmlog/cheat", "client cheater found: name=%s, type=%u", pUser->GetName(), m_pInfo->unDir);
break;
}
pUser->ClsXpVal();
}
break;
case actionReborn:
{
if(pUser && !pUser->IsAlive())
{
pUser->Reborn();
}
}
break;
case actionGhost:
{
if(pUser && !pUser->IsAlive())
{
pUser->TransformGhost();
}
}
break;
case actionDelRole:
{
if (pUser)
{
// save record
pUser->SaveInfo(); // SaveAllInfo
if(pUser->GetSynID())
pUser->QuerySynAttr()->LeaveSyn(false, DELRECORD_FALSE, SYNCHRO_TRUE);
// marriage relative
if (pUser->IsMarried())
{
CUser* pMate = UserManager()->GetUser(pUser->GetMate());
if (pMate) // online
{
pMate->UpdateMate(NOMATE_NAME, true);
}
else
{
SQLBUF szSQL = "";
sprintf(szSQL, "UPDATE %s SET mate='%s' WHERE name='%s' LIMIT 1",
_TBL_USER,
NOMATE_NAME,
pUser->GetMate());
Database()->ExecuteSQL(szSQL);
}
}
SQLBUF szSQL;
// delete all friend info
sprintf(szSQL, "DELETE FROM %s WHERE userid=%u or friendid=%u", _TBL_FRIEND, pUser->GetID(), pUser->GetID());
Database()->ExecuteSQL(szSQL);
// delete all enemy info
sprintf(szSQL, "DELETE FROM %s WHERE userid=%u or enemy=%u", _TBL_ENEMY, pUser->GetID(), pUser->GetID());
Database()->ExecuteSQL(szSQL);
// delete all task info
sprintf(szSQL, "DELETE FROM %s WHERE userid=%u", _TBL_TASKDETAIL, pUser->GetID());
Database()->ExecuteSQL(szSQL);
// copy user record to cq_deluser
sprintf(szSQL, "INSERT INTO %s SELECT * FROM %s WHERE id=%u", _TBL_DELUSER, _TBL_USER, pUser->GetID());
Database()->ExecuteSQL(szSQL);
// del record
sprintf(szSQL, "DELETE FROM %s WHERE id=%u", _TBL_USER, pUser->GetID());
Database()->ExecuteSQL(szSQL);
// login out
UserManager()->KickOutSocket(m_idSocket, "玩家删角色");
}
}
break;
case actionSetPkMode:
{
if(pUser)
{
int nMode = m_pInfo->dwData;
char* pMsg = NULL;
switch(nMode)
{
case PKMODE_FREE:
pMsg = STR_FREE_PK_MODE;
break;
case PKMODE_SAFE:
pMsg = STR_SAFE_PK_MODE;
break;
case PKMODE_TEAM:
pMsg = STR_TEAM_PK_MODE;
break;
case PKMODE_SYNDICATE:
pMsg = STR_SYNDICATE_PK_MODE;
break;
case PKMODE_ARRESTMENT:
pMsg = STR_ARRESTMENT_PK_MODE;
break;
default:
ASSERT(!"switch pk mode");
return ;
}
pUser->SetPkMode(nMode);
pUser->SendMsg(this);
pUser->SendSysMsg(pMsg);
}
}
break;
case actionQueryFriendInfo:
{
if(pUser)
{
CFriend* pFriend = pUser->GetFriend(m_pInfo->idTarget);
if(pFriend)
{
CUser* pTarget = UserManager()->GetUser(m_pInfo->idTarget);
if(pTarget)
{
CMsgFriendInfo msg;
IF_OK(msg.Create(_FRIEND_INFO, pTarget->GetID(), pTarget->GetLookFace(), pTarget->GetLev(),
pTarget->GetProfession(), pTarget->GetPk(), pTarget->GetSynID(), pTarget->GetSynRankShow(),
pTarget->GetMate(), pTarget->GetNobilityRank()))
pUser->SendMsg(&msg);
}
else
MapGroup(m_idProcess)->QueryIntraMsg()->TransmitMsg(this, GetSocketID(), GetNpcID());
}
}
}
break;
case actionQueryEnemyInfo:
{
if(pUser)
{
if(pUser->QueryEnemy()->GetName(m_pInfo->idTarget))
{
CUser* pTarget = UserManager()->GetUser(m_pInfo->idTarget);
if(pTarget)
{
CMsgFriendInfo msg;
IF_OK(msg.Create(_ENEMY_INFO, pTarget->GetID(), pTarget->GetLookFace(), pTarget->GetLev(),
pTarget->GetProfession(), pTarget->GetPk(), pTarget->GetSynID(), pTarget->GetSynRankShow(),
pTarget->GetMate(), pTarget->GetNobilityRank()))
pUser->SendMsg(&msg);
}
else
MapGroup(m_idProcess)->QueryIntraMsg()->TransmitMsg(this, GetSocketID(), GetNpcID());
}
}
}
break;
case actionQueryLeaveWord:
{
if(pUser)
{
if(pUser->IsMoreLeaveWord())
{
LeaveWord()->ShowWords(pUser);
}
}
}
break;
case actionCreateBooth:
{
if(pUser)
{
if(pUser->CreateBooth(m_pInfo->unPosX, m_pInfo->unPosY, m_pInfo->unDir))
{
m_pInfo->dwData = pUser->QueryBooth()->GetID();
pUser->SendMsg(this);
}
}
}
break;
case actionSuspendBooth:
{
if(pUser && pUser->QueryBooth())
pUser->QueryBooth()->LeaveMap();
}
break;
case actionResumeBooth:
{
if(pUser && pUser->QueryBooth())
{
pUser->QueryBooth()->EnterMap(m_pInfo->unPosX, m_pInfo->unPosY, m_pInfo->unDir);
m_pInfo->dwData = pUser->QueryBooth()->GetID();
pUser->SendMsg(this);
}
}
break;
case actionDestroyBooth:
{
if(pUser)
pUser->DestroyBooth();
}
break;
case actionQueryCryOut:
{
CUser* pTarget = UserManager()->GetUser(m_pInfo->idTarget);
if(!pTarget)
return ;
if(pUser && pTarget->QueryBooth())
pTarget->QueryBooth()->SendCryOut(pUser);
}
break;
case actionQueryEquipment:
{
CUser* pTarget = UserManager()->GetUser(m_pInfo->idTarget);
if(!pTarget)
return ;
pTarget->SendAllEquipInfoTo(pUser);
}
break;
case actionAbortTransform:
{
if(pUser)
pUser->AbortTransform();
}
break;
// case actionTakeOff:
// {
// if(pUser)
// pUser->QueryStatusSet()->DelObj(STATUS_WING);
// }
// break;
// case actionCancelKeepBow:
// {
// if(pUser)
// pUser->QueryStatusSet()->DelObj(STATUS_KEEPBOW);
// }
// break;
case actionQueryMedal:
case actionDelMedal:
case actionSelectMedal:
case actionQueryHonorTitle:
case actionDelHonorTitle:
case actionSelectHonorTitle:
{
if(pUser)
pUser->ProcessMsgAction(m_pInfo->usAction, m_pInfo->dwData, m_pInfo->idUser);
}
break;
// for ai server //////////////////////////////////////////////////////////////
case actionSuperChgMap:
{
if(pUser && pUser->IsAgent())
{
pRole->ProcessOnMove(MOVEMODE_CHGMAP);
OBJID idMap = m_pInfo->idTarget;
pUser->FlyMap(idMap, m_pInfo->unPosX, m_pInfo->unPosY); // 回应actionFlyMap. call - may be delete this;
}
}
break;
case actionFullItem:
{
if(pUser && pUser->IsAgent())
{
CAgent* pAgent = pUser->QueryAgent();
IF_OK(pAgent)
{
pAgent->FullItem(m_pInfo->dwData, 0);
}
}
}
break;
case actionQuerySynInfo:
{
if(pUser)
{
CSyndicate* pSyn = SynManager()->QuerySyndicate(m_pInfo->dwData);
if(pSyn)
{
CMsgSynInfo msg;
IF_OK(msg.Create(pSyn))
pUser->SendMsg(&msg);
}
}
}
break;
// 以下是导师系统相关
case actionStudentApply:
{
if (!pUser)
break;
if (pUser->GetLev() < _MIN_TUTOR_LEVEL)
{
pUser->SendSysMsg(STR_LOW_LEVEL);
return;
}
if (pUser->GetTutorExp() < ADDSTUDENT_TUTOREXP)
{
pUser->SendSysMsg(STR_NOT_ENOUGH_TUTOREXP);
return;
}
if (pUser->IsStudentFull())
{
pUser->SendSysMsg(STR_STUDENT_FULL);
return;
}
if (pUser->GetStudent(m_pInfo->idTarget))
{
pUser->SendSysMsg(STR_YOUR_STUDENT_ALREADY);
return;
}
// find target
CUser* pTarget = NULL;
if(!pUser->GetMap()->QueryObj(pUser->GetPosX(), pUser->GetPosY(), OBJ_USER, m_pInfo->idTarget, IPP_OF(pTarget)))
break;
if (!pTarget->IsAlive())
return;
if (pTarget->GetTutor())
{
pUser->SendSysMsg(STR_HAVE_TEACHER_ALREADY);
return;
}
if (pTarget->GetLev() >= NEWBIE_LEVEL)
{
pUser->SendSysMsg(STR_HEIGHT_LEV2);
return ;
}
pUser->SetApply(CUser::APPLY_STUDENTAPPLY, m_pInfo->idTarget);
pTarget->SendMsg(this);
pTarget->SendSysMsg(STR_STUDENT_APPLY, pUser->GetName());
pUser->SendSysMsg(STR_STUDENT_APPLY_SENT);
}
break;
case actionTeacherRequest:
{
if (!pUser)
break;
CUser* pTarget = UserManager()->GetUser(m_pInfo->idTarget);
if (pTarget)
{
pTarget->SendSysMsg(STR_TUTOR_REQUEST, pUser->GetName());
}
else
{
// find target name
CAnnounceData* pData = Announce()->QueryAnnounceDataByOwner(m_pInfo->idTarget);
if(!pData)
{
pUser->SendSysMsg(STR_TUTOR_NO_ONLINE);
return;
}
else
{
char bufText[1024];
sprintf(bufText, STR_TUTOR_REQUEST,pUser->GetName());
CMsgTalk msg;
if (msg.Create(SYSTEM_NAME,pData->GetStr(ANNOUNCEDATA_USER_NAME),bufText))
MapGroup(PID)->QueryIntraMsg()->TransmitWorldMsg(&msg, m_pInfo->idTarget);
}
}
pUser->SendSysMsg(STR_TUTOR_REQUEST_SEND);
}
break;
case actionTeacherApply:
{
if (!pUser)
break;
if (pUser->GetLev() >= NEWBIE_LEVEL)
{
pUser->SendSysMsg(STR_HEIGHT_LEV);
return;
}
if (pUser->GetTutor())
{
// pUser->SendSysMsg(STR_HAVE_TEACHER_ALREADY);
return;
}
// find target
CUser* pTarget = NULL;
if(!pUser->GetMap()->QueryObj(pUser->GetPosX(), pUser->GetPosY(), OBJ_USER, m_pInfo->idTarget, IPP_OF(pTarget)))
break;
if (pTarget->GetLev() < _MIN_TUTOR_LEVEL)
{
pUser->SendSysMsg(STR_LOW_LEV2);
return ;
}
if (pTarget->GetTutorExp() < ADDSTUDENT_TUTOREXP)
{
pUser->SendSysMsg(STR_NOT_ENOUGH_TUTOREXP2);
return;
}
if (pTarget->IsStudentFull())
{
pUser->SendSysMsg(STR_STUDENT_FULL2);
return;
}
pUser->SetApply(CUser::APPLY_TEACHERAPPLY, m_pInfo->idTarget);
pTarget->SendMsg(this);
pTarget->SendSysMsg(STR_TEACHER_APPLY, pUser->GetName());
pUser->SendSysMsg(STR_TEACHER_APPLY_SENT);
}
break;
case actionAgreeStudentApply:
{
if (!pUser)
break;
if (pUser->GetLev() >= NEWBIE_LEVEL)
{
pUser->SendSysMsg(STR_HEIGHT_LEV);
return;
}
if (pUser->GetTutor())
{
// pUser->SendSysMsg(STR_HAVE_TEACHER_ALREADY);
return;
}
// find target
CUser* pTarget = NULL;
if(!pUser->GetMap()->QueryObj(pUser->GetPosX(), pUser->GetPosY(), OBJ_USER, m_pInfo->idTarget, IPP_OF(pTarget)))
break;
if (pTarget->FetchApply(CUser::APPLY_STUDENTAPPLY, pUser->GetID()))
{
if (pUser->AddTutor(pTarget->GetID(), pTarget->GetName()))
{
// synchronize all statuses
MSGBUF szMsg;
sprintf(szMsg, STR_MAKE_TEACHERSTUDENT, pTarget->GetName(), pUser->GetName());
pUser->BroadcastRoomMsg(szMsg, true);
}
else
::LogSave("Error: add tutor failed.");
}
else
{
pUser->SendSysMsg(STR_NO_STUDENT_APPLY);
}
}
break;
case actionAgreeTeacherApply:
{
if (!pUser)
break;
if (pUser->GetLev() < _MIN_TUTOR_LEVEL)
{
pUser->SendSysMsg(STR_LOW_LEVEL);
return;
}
if (pUser->GetTutorExp() < ADDSTUDENT_TUTOREXP)
{
pUser->SendSysMsg(STR_NOT_ENOUGH_TUTOREXP);
return;
}
if (pUser->IsStudentFull())
{
pUser->SendSysMsg(STR_STUDENT_FULL2);
return;
}
if (pUser->GetStudent(m_pInfo->idTarget))
{
pUser->SendSysMsg(STR_YOUR_STUDENT_ALREADY);
return;
}
// find target
CUser* pTarget = NULL;
if(!pUser->GetMap()->QueryObj(pUser->GetPosX(), pUser->GetPosY(), OBJ_USER, m_pInfo->idTarget, IPP_OF(pTarget)))
break;
if (pTarget->FetchApply(CUser::APPLY_TEACHERAPPLY, pUser->GetID()))
{
if (pTarget->AddTutor(pUser->GetID(), pUser->GetName()))
{
// synchronize all statuses
if(pUser->IsStudentFull())
{
DEBUG_TRY
if(Announce()->QueryAnnounceDataByOwner(pUser->GetID()))
Announce()->DeleteAnnounceByUserID(pUser->GetID(),true);
DEBUG_CATCH("DeleteAnnounceByOwer(pUser->GetID()) ERROR");
}
MSGBUF szMsg;
sprintf(szMsg, STR_MAKE_TEACHERSTUDENT, pUser->GetName(), pTarget->GetName());
pTarget->BroadcastRoomMsg(szMsg, true);
}
else
::LogSave("Error: add tutor failed.");
}
else
{
pUser->SendSysMsg(STR_NO_TEACHER_APPLY);
}
}
break;
case actionDismissStudent:
{
if (!pUser)
break;
if (pUser->DelStudent(m_pInfo->idTarget))
{
// send msg: str_dismiss_student
}
else
{
// failed.
}
}
break;
case actionLeaveTeacher:
{
if (!pUser)
break;
pUser->DelTutor();
}
break;
case actionQueryStudentsOfStudent:
{
if (!pUser)
break;
CUser* pStudent = UserManager()->GetUser(m_pInfo->idTarget);
if (pStudent)
{
CMsgSchoolMember msg;
msg.Create(MESSAGEBOARD_ADDMEMBER, NULL, 0);
for (int i=0; i<pStudent->GetStudentAmount(); i++)
{
CTutor* pTutor = pStudent->GetStudentByIndex(i);
if (pTutor)
{
CUser* pTarget = UserManager()->GetUser(pTutor->GetUserID());
if (pTarget)
msg.Append(RELATION_STUDENTOFSTUDENT, MEMBERSTATUS_ONLINE, pTarget);
else
msg.Append(RELATION_STUDENTOFSTUDENT, MEMBERSTATUS_OFFLINE, pTutor->GetUserID(), pTutor->GetUserName());
}
}
if (pStudent->GetStudentAmount() > 0)
SendMsg(&msg);
}
else
MapGroup(m_idProcess)->QueryIntraMsg()->TransmitMsg(this, GetSocketID(), GetNpcID());
}
break;
// ==========佣兵任务系统相关============
case actionQueryPlayerTaskAcceptedList:
{
MercenaryTask()->SendTaskList(pUser->QueryRole(), TASKLIST_ACCEPTED, m_pInfo->dwData);
}
break;
case actionQueryPlayerTaskUnacceptedList:
{
MercenaryTask()->SendTaskList(pUser->QueryRole(), TASKLIST_UNACCEPTED, m_pInfo->dwData);
}
break;
case actionQueryPlayerMyTaskList:
{
MercenaryTask()->SendTaskList(pUser->QueryRole(), TASKLIST_MYTASK, m_pInfo->dwData);
}
break;
case actionQueryPlayerTaskDetail:
{
MercenaryTask()->SendTaskInfo(pUser->QueryRole(), m_pInfo->dwData);
}
break;
case actionAcceptPlayerTask:
{
pUser->AcceptMercenaryTask(m_pInfo->dwData);
}
break;
case actionCancelPlayerTask:
{
pUser->CancelMercenaryTask(m_pInfo->dwData);
}
break;
// =======================================
case actionBurstXp:
{
pUser->BurstXp();
}
break;
default:
ASSERT(!"switch");
break;
}
DEBUG_CATCH2("switch(MSGACTION) [%d]", m_pInfo->usAction) // AAAAAAAAAAAAAAAA
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -