Code: Select all
goto void CGame::MsgProcess()
find
case MSGID_REQUEST_INITPLAYER:
RequestInitPlayerHandler(iClientH, pData, cKey);
break;
case MSGID_REQUEST_INITDATA:
RequestInitDataHandler(iClientH, pData, cKey);
break;
case MSGID_COMMAND_CHECKCONNECTION:
CheckConnectionHandler(iClientH, pData);
break;
replace with
case MSGID_REQUEST_INITPLAYER:
RequestInitPlayerHandler(iClientH, pData, cKey);
break;
case MSGID_REQUEST_INITDATA:
RequestInitDataHandler(iClientH, pData, cKey, FALSE);
break;
case MSGID_COMMAND_CHECKCONNECTION:
CheckConnectionHandler(iClientH, pData);
break;
also game.cpp
/*********************************************************************************************************************
* void CGame::RequestInitDataHandler
* DESCRIPTION :: manages player data/variables on enter zone
* LAST_UPDATED :: 8/27/2005 11;26 PM EvilHit
* RETURN_VALUE :: void
* NOTES :: - added bIsResurrected to save process time
* - expanded DeleteClient to include TRUE(4)
* - missing <4> cp++
* - added temporary position list to stop items from scrambling on enter zone
* - added checks to _iGetArrowItemIndex, and CalcTotalItemEffect
*
* MODIFICATION :: none
**********************************************************************************************************************/
void CGame::RequestInitDataHandler(int iClientH, char * pData, char cKey, BOOL bIsResurrected)
{
char * pBuffer = NULL;
short * sp, sSummonPoints; //CDW added sSummonPoints;
DWORD * dwp;
WORD * wp;
char * cp, cPlayerName[11], cTxt[120], cPoints = 0;
int * ip, i, iTotalItemA, iTotalItemB, iSize, iRet;
SYSTEMTIME SysTime;
BOOL bIsItemListNull;
POINT TempItemPosList[DEF_MAXITEMS];
int iStats;
if (m_pClientList[iClientH] == NULL) return;
pBuffer = new char [DEF_MSGBUFFERSIZE+1];
ZeroMemory(pBuffer, DEF_MSGBUFFERSIZE+1);
// new - check to save time process time when resurrecting
if (bIsResurrected == FALSE) {
cp = (char *)(pData + DEF_INDEX2_MSGTYPE + 2);
ZeroMemory(cPlayerName, sizeof(cPlayerName));
memcpy(cPlayerName, cp, 10);
ZeroMemory(cTxt, sizeof(cTxt)); // v1.4
memcpy(cTxt, cPlayerName, 10);
m_Misc.bDecode(cKey, cTxt);
ZeroMemory(cPlayerName, sizeof(cPlayerName));
memcpy(cPlayerName, cTxt, 10);
if (memcmp(m_pClientList[iClientH]->m_cCharName, cPlayerName, 10) != 0) {
DeleteClient(iClientH, FALSE, TRUE, TRUE, FALSE);// added TRUE to 4
return;
}
dwp = (DWORD *)(pBuffer + DEF_INDEX4_MSGID);
*dwp = MSGID_PLAYERCHARACTERCONTENTS; // 0x0Fm_cHeldenianVictoryType000 = 262406144
wp = (WORD *) (pBuffer + DEF_INDEX2_MSGTYPE);
*wp = DEF_MSGTYPE_CONFIRM;
cp = (char *)(pBuffer + DEF_INDEX2_MSGTYPE + 2);
ip = (int *)cp;
*ip = m_pClientList[iClientH]->m_iHP;
cp += 4;
ip = (int *)cp;
*ip = m_pClientList[iClientH]->m_iMP;
cp += 4;
ip = (int *)cp;
*ip = m_pClientList[iClientH]->m_iSP;
cp += 4;
ip = (int *)cp;
*ip = m_pClientList[iClientH]->m_iDefenseRatio;
cp += 4;
ip = (int *)cp;
*ip = m_pClientList[iClientH]->m_iHitRatio;
cp += 4;
ip = (int *)cp;
*ip = m_pClientList[iClientH]->m_iLevel;
cp += 4;
ip = (int *)cp;
*ip = m_pClientList[iClientH]->m_iStr;
cp += 4;
ip = (int *)cp;
*ip = m_pClientList[iClientH]->m_iInt;
cp += 4;
ip = (int *)cp;
*ip = m_pClientList[iClientH]->m_iVit;
cp += 4;
ip = (int *)cp;
*ip = m_pClientList[iClientH]->m_iDex;
cp += 4;
ip = (int *)cp;
*ip = m_pClientList[iClientH]->m_iMag;
cp += 4;
ip = (int *)cp;
*ip = m_pClientList[iClientH]->m_iCharisma;
cp += 4;
iStats = (m_pClientList[iClientH]->m_iStr + m_pClientList[iClientH]->m_iDex + m_pClientList[iClientH]->m_iVit +
m_pClientList[iClientH]->m_iInt + m_pClientList[iClientH]->m_iMag + m_pClientList[iClientH]->m_iCharisma);
m_pClientList[iClientH]->m_iLU_Pool = m_pClientList[iClientH]->m_iLevel*3 - (iStats - 70);
wp = (WORD *)cp;
*wp = m_pClientList[iClientH]->m_iLU_Pool;
cp += 2;
*cp = m_pClientList[iClientH]->m_cVar;
cp++;
*cp = 0;
cp++;
*cp = 0;
cp++;
*cp = 0;
cp++;
*cp = 0;
cp++;
ip = (int *)cp;
*ip = m_pClientList[iClientH]->m_iExp;
cp += 4;
ip = (int *)cp;
*ip = m_pClientList[iClientH]->m_iEnemyKillCount;
cp += 4;
ip = (int *)cp;
*ip = m_pClientList[iClientH]->m_iPKCount;
cp += 4;
ip = (int *)cp;
*ip = m_pClientList[iClientH]->m_iRewardGold;
cp += 4;
memcpy(cp, m_pClientList[iClientH]->m_cLocation, 10);
cp += 10;
memcpy(cp, m_pClientList[iClientH]->m_cGuildName, 20);
cp += 20;
ip = (int *)cp;
*ip = m_pClientList[iClientH]->m_iGuildRank;
cp += 4;
// v1.4311
*cp = (char)m_pClientList[iClientH]->m_iSuperAttackLeft;
cp++;
ip = (int *)cp;
*ip = m_pClientList[iClientH]->m_iFightzoneNumber;
cp += 4;
m_pClientList[iClientH]->isForceSet = FALSE;
m_pClientList[iClientH]->m_iPartyID = NULL;
m_pClientList[iClientH]->m_iPartyStatus = DEF_PARTYSTATUS_NULL;
m_pClientList[iClientH]->m_iReqJoinPartyClientH = NULL;
iRet = m_pClientList[iClientH]->m_pXSock->iSendMsg(pBuffer, 116);// Original : 118
switch (iRet) {
case DEF_XSOCKEVENT_QUENEFULL:
case DEF_XSOCKEVENT_SOCKETERROR:
case DEF_XSOCKEVENT_CRITICALERROR:
case DEF_XSOCKEVENT_SOCKETCLOSED:
DeleteClient(iClientH, TRUE, TRUE, TRUE, FALSE);// added TRUE (4)
if(pBuffer != NULL) delete pBuffer;
return;
}
dwp = (DWORD *)(pBuffer + DEF_INDEX4_MSGID);
*dwp = MSGID_PLAYERITEMLISTCONTENTS;
wp = (WORD *) (pBuffer + DEF_INDEX2_MSGTYPE);
*wp = DEF_MSGTYPE_CONFIRM;
iTotalItemA = 0;
for (i = 0; i < DEF_MAXITEMS; i++)
if (m_pClientList[iClientH]->m_pItemList[i] != NULL)
iTotalItemA++;
// new
bIsItemListNull = FALSE;
if (!bIsItemListNull) {
bIsItemListNull = TRUE;
for (i = 0; i < DEF_MAXITEMS-1; i++) {
if ((m_pClientList[iClientH]->m_pItemList[i] == NULL) && (m_pClientList[iClientH] != NULL)) {
m_pClientList[iClientH]->m_ItemPosList[i].x = TempItemPosList[i].x;
m_pClientList[iClientH]->m_ItemPosList[i].y = TempItemPosList[i].y;
bIsItemListNull = FALSE;
}
}
}
m_pClientList[iClientH]->m_cArrowIndex = _iGetArrowItemIndex(iClientH); // new
CalcTotalItemEffect(iClientH, -1, FALSE); // new
cp = (char *)(pBuffer + DEF_INDEX2_MSGTYPE + 2);
*cp = iTotalItemA;
cp++;
for (i = 0; i < iTotalItemA; i++) {
if (m_pClientList[iClientH]->m_pItemList[i] == NULL) {
wsprintf(G_cTxt, "RequestInitDataHandler error: Client(%s) Item(%d)", m_pClientList[iClientH]->m_cCharName, i);
PutLogFileList(G_cTxt);
DeleteClient(iClientH, FALSE, TRUE, TRUE, FALSE);// added TRUE (4)
if(pBuffer != NULL) delete pBuffer;
return;
}
memcpy(cp, m_pClientList[iClientH]->m_pItemList[i]->m_cName, 20);
cp += 20;
dwp = (DWORD *)cp;
*dwp = m_pClientList[iClientH]->m_pItemList[i]->m_dwCount;
cp += 4;
*cp = m_pClientList[iClientH]->m_pItemList[i]->m_cItemType;
cp++;
*cp = m_pClientList[iClientH]->m_pItemList[i]->m_cEquipPos;
cp++;
*cp = (char)m_pClientList[iClientH]->m_bIsItemEquipped[i];
cp++;
sp = (short *)cp;
*sp = m_pClientList[iClientH]->m_pItemList[i]->m_sLevelLimit;
cp += 2;
*cp = m_pClientList[iClientH]->m_pItemList[i]->m_cGenderLimit;
cp++;
wp = (WORD *)cp;
*wp = m_pClientList[iClientH]->m_pItemList[i]->m_wCurLifeSpan;
cp += 2;
wp = (WORD *)cp;
*wp = m_pClientList[iClientH]->m_pItemList[i]->m_wWeight;
cp += 2;
sp = (short *)cp;
*sp = m_pClientList[iClientH]->m_pItemList[i]->m_sSprite;
cp += 2;
sp = (short *)cp;
*sp = m_pClientList[iClientH]->m_pItemList[i]->m_sSpriteFrame;
cp += 2;
*cp = m_pClientList[iClientH]->m_pItemList[i]->m_cItemColor; // v1.4
cp++;
*cp = (char)m_pClientList[iClientH]->m_pItemList[i]->m_sItemSpecEffectValue2; // v1.41
cp++;
dwp =(DWORD *)cp;
*dwp = m_pClientList[iClientH]->m_pItemList[i]->m_dwAttribute;
cp += 4;
}
iTotalItemB = 0;
for (i = 0; i < DEF_MAXBANKITEMS; i++)
if (m_pClientList[iClientH]->m_pItemInBankList[i] != NULL)
iTotalItemB++;
*cp = iTotalItemB;
cp++;
for (i = 0; i < iTotalItemB; i++) {
if (m_pClientList[iClientH]->m_pItemInBankList[i] == NULL) {
wsprintf(G_cTxt, "RequestInitDataHandler error: Client(%s) Bank-Item(%d)", m_pClientList[iClientH]->m_cCharName, i);
PutLogFileList(G_cTxt);
DeleteClient(iClientH, FALSE, TRUE, TRUE, FALSE);// added TRUE (4)
if(pBuffer != NULL) delete pBuffer;
return;
}
memcpy(cp, m_pClientList[iClientH]->m_pItemInBankList[i]->m_cName, 20);
cp += 20;
dwp = (DWORD *)cp;
*dwp = m_pClientList[iClientH]->m_pItemInBankList[i]->m_dwCount;
cp += 4;
*cp = m_pClientList[iClientH]->m_pItemInBankList[i]->m_cItemType;
cp++;
*cp = m_pClientList[iClientH]->m_pItemInBankList[i]->m_cEquipPos;
cp++;
sp = (short *)cp;
*sp = m_pClientList[iClientH]->m_pItemInBankList[i]->m_sLevelLimit;
cp += 2;
*cp = m_pClientList[iClientH]->m_pItemInBankList[i]->m_cGenderLimit;
cp++;
wp = (WORD *)cp;
*wp = m_pClientList[iClientH]->m_pItemInBankList[i]->m_wCurLifeSpan;
cp += 2;
wp = (WORD *)cp;
*wp = m_pClientList[iClientH]->m_pItemInBankList[i]->m_wWeight;
cp += 2;
sp = (short *)cp;
*sp = m_pClientList[iClientH]->m_pItemInBankList[i]->m_sSprite;
cp += 2;
sp = (short *)cp;
*sp = m_pClientList[iClientH]->m_pItemInBankList[i]->m_sSpriteFrame;
cp += 2;
*cp = m_pClientList[iClientH]->m_pItemInBankList[i]->m_cItemColor; // v1.4
cp++;
*cp = (char)m_pClientList[iClientH]->m_pItemInBankList[i]->m_sItemSpecEffectValue2; // v1.41
cp++;
dwp =(DWORD *)cp;
*dwp = m_pClientList[iClientH]->m_pItemInBankList[i]->m_dwAttribute;
cp += 4;
}
for (i = 0; i < DEF_MAXMAGICTYPE; i++) {
*cp = m_pClientList[iClientH]->m_cMagicMastery[i];
cp++;
}
for (i = 0; i < DEF_MAXSKILLTYPE; i++) {
*cp = m_pClientList[iClientH]->m_cSkillMastery[i];
cp++;
}
iRet = m_pClientList[iClientH]->m_pXSock->iSendMsg(pBuffer, 6 + 1 + iTotalItemA*44 + iTotalItemB*43 + DEF_MAXMAGICTYPE + DEF_MAXSKILLTYPE);
switch (iRet) {
case DEF_XSOCKEVENT_QUENEFULL:
case DEF_XSOCKEVENT_SOCKETERROR:
case DEF_XSOCKEVENT_CRITICALERROR:
case DEF_XSOCKEVENT_SOCKETCLOSED:
DeleteClient(iClientH, TRUE, TRUE, TRUE, FALSE);// added TRUE (4)
if(pBuffer != NULL) delete pBuffer;
return;
}
dwp = (DWORD *)(pBuffer + DEF_INDEX4_MSGID);
*dwp = MSGID_RESPONSE_INITDATA;
wp = (WORD *)(pBuffer + DEF_INDEX2_MSGTYPE);
*wp = DEF_MSGTYPE_CONFIRM;
cp = (char *)(pBuffer + DEF_INDEX2_MSGTYPE + 2);
if (m_pClientList[iClientH]->m_bIsObserverMode == FALSE)
bGetEmptyPosition(&m_pClientList[iClientH]->m_sX, &m_pClientList[iClientH]->m_sY, m_pClientList[iClientH]->m_cMapIndex);
else GetMapInitialPoint(m_pClientList[iClientH]->m_cMapIndex, &m_pClientList[iClientH]->m_sX, &m_pClientList[iClientH]->m_sY);
// ObjectID
wp = (WORD *)cp;
*wp = iClientH;
cp += 2;
sp = (short *)cp;
*sp = m_pClientList[iClientH]->m_sX - 14 - 5;
cp += 2;
sp = (short *)cp;
*sp = m_pClientList[iClientH]->m_sY - 12 - 5;
cp += 2;
sp = (short *)cp;
*sp = m_pClientList[iClientH]->m_sType;
cp += 2;
sp = (short *)cp;
*sp = m_pClientList[iClientH]->m_sAppr1;
cp += 2;
sp = (short *)cp;
*sp = m_pClientList[iClientH]->m_sAppr2;
cp += 2;
sp = (short *)cp;
*sp = m_pClientList[iClientH]->m_sAppr3;
cp += 2;
sp = (short *)cp;
*sp = m_pClientList[iClientH]->m_sAppr4;
cp += 2;
ip = (int *)cp; // v1.4
*ip = m_pClientList[iClientH]->m_iApprColor;
cp += 4;
ip = (int *)cp;
*ip = m_pClientList[iClientH]->m_iStatus;
cp += 4;// Original : 2
memcpy(cp, m_pClientList[iClientH]->m_cMapName, 10);
cp += 10;
memcpy(cp, m_pMapList[m_pClientList[iClientH]->m_cMapIndex]->m_cLocationName, 10);
cp += 10;
if (m_pMapList[m_pClientList[iClientH]->m_cMapIndex]->m_bIsFixedDayMode == TRUE)
*cp = 1;
else *cp = m_cDayOrNight;
cp++;
if (m_pMapList[m_pClientList[iClientH]->m_cMapIndex]->m_bIsFixedDayMode == TRUE)
*cp = NULL;
else *cp = m_pMapList[m_pClientList[iClientH]->m_cMapIndex]->m_cWhetherStatus;
cp++;
// v1.4 Contribution
ip = (int *)cp;
*ip = m_pClientList[iClientH]->m_iContribution;
cp += 4;
if (m_pClientList[iClientH]->m_bIsObserverMode == FALSE) {
m_pMapList[m_pClientList[iClientH]->m_cMapIndex]->SetOwner(iClientH, DEF_OWNERTYPE_PLAYER, m_pClientList[iClientH]->m_sX, m_pClientList[iClientH]->m_sY);
}
// v1.41
*cp = (char)m_pClientList[iClientH]->m_bIsObserverMode;
cp++;
// catches debug on player load up
// v1.41
ip = (int *)cp;
*ip = m_pClientList[iClientH]->m_iRating;
cp += 4;
// v1.44
ip = (int *)cp;
*ip = m_pClientList[iClientH]->m_iHP;
cp += 4;
*cp = cPoints;
cp++;
iSize = iComposeInitMapData(m_pClientList[iClientH]->m_sX - 10, m_pClientList[iClientH]->m_sY - 7, iClientH, cp );
iRet = m_pClientList[iClientH]->m_pXSock->iSendMsg(pBuffer, 46 + iSize +4 +4 +1 +4 +4+3); // Zabuza fix
switch (iRet) {
case DEF_XSOCKEVENT_QUENEFULL:
case DEF_XSOCKEVENT_SOCKETERROR:
case DEF_XSOCKEVENT_CRITICALERROR:
case DEF_XSOCKEVENT_SOCKETCLOSED:
DeleteClient(iClientH, TRUE, TRUE, TRUE, FALSE);// added TRUE (4)
if(pBuffer != NULL) delete pBuffer;
return;
}
if(pBuffer != NULL) delete pBuffer;
SendEventToNearClient_TypeA(iClientH, DEF_OWNERTYPE_PLAYER, MSGID_EVENT_LOG, DEF_MSGTYPE_CONFIRM, NULL, NULL, NULL);
if ( (memcmp(m_pClientList[iClientH]->m_cLocation, "are", 3) == 0) &&
(memcmp(m_pMapList[m_pClientList[iClientH]->m_cMapIndex]->m_cLocationName, "elvine", 6) == 0)
&& (m_pClientList[iClientH]->m_iAdminUserLevel == 0) ) {
m_pClientList[iClientH]->m_dwWarBeginTime = timeGetTime();
m_pClientList[iClientH]->m_bIsWarLocation = TRUE;
SetForceRecallTime(iClientH);
}
else if ( (memcmp(m_pClientList[iClientH]->m_cLocation, "elv", 3) == 0) &&
(memcmp(m_pMapList[m_pClientList[iClientH]->m_cMapIndex]->m_cLocationName, "aresden", 7) == 0)
&& (m_pClientList[iClientH]->m_iAdminUserLevel == 0)) {
m_pClientList[iClientH]->m_dwWarBeginTime = timeGetTime();
m_pClientList[iClientH]->m_bIsWarLocation = TRUE;
SetForceRecallTime(iClientH);
}
else if (((memcmp(m_pMapList[m_pClientList[iClientH]->m_cMapIndex]->m_cLocationName, "arejail", 7) == 0) ||
(memcmp(m_pMapList[m_pClientList[iClientH]->m_cMapIndex]->m_cLocationName, "elvjail", 7) == 0))
&& (m_pClientList[iClientH]->m_iAdminUserLevel == 0)) {
m_pClientList[iClientH]->m_bIsWarLocation = TRUE;
m_pClientList[iClientH]->m_dwWarBeginTime = timeGetTime();
if (m_pClientList[iClientH]->m_iTimeLeft_ForceRecall == 0) {
m_pClientList[iClientH]->m_iTimeLeft_ForceRecall = 20*5;
} else if (m_pClientList[iClientH]->m_iTimeLeft_ForceRecall > 20*5) {
m_pClientList[iClientH]->m_iTimeLeft_ForceRecall = 20*5; // 5ºÐ
}
}
else if ((m_pMapList[m_pClientList[iClientH]->m_cMapIndex]->m_bIsFightZone == TRUE) &&
(m_iFightzoneNoForceRecall == 0) && (m_pClientList[iClientH]->m_iAdminUserLevel == 0)) {
m_pClientList[iClientH]->m_dwWarBeginTime = timeGetTime();
m_pClientList[iClientH]->m_bIsWarLocation = TRUE;
GetLocalTime(&SysTime);
m_pClientList[iClientH]->m_iTimeLeft_ForceRecall = 2*60*20 - ((SysTime.wHour%2)*20*60 + SysTime.wMinute*20) - 2*20;
}
else
{
m_pClientList[iClientH]->m_bIsWarLocation = FALSE;
// v1.42
m_pClientList[iClientH]->m_iTimeLeft_ForceRecall = 0;
// 06/11/2004
SetForceRecallTime(iClientH);
}
if ((m_pClientList[iClientH]->m_iTimeLeft_ForceRecall > 0) && (m_pClientList[iClientH]->m_bIsWarLocation == TRUE) && IsEnemyZone(iClientH)) {
SendNotifyMsg(NULL, iClientH, DEF_NOTIFY_FORCERECALLTIME, m_pClientList[iClientH]->m_iTimeLeft_ForceRecall , NULL, NULL, NULL);
//wsprintf(G_cTxt,"(!) Game Server Force Recall Time %d (%d)min", m_pClientList[iClientH]->m_iTimeLeft_ForceRecall, m_pClientList[iClientH]->m_iTimeLeft_ForceRecall/20);
//PutLogList(G_cTxt);
}
// No entering enemy shops
int iMapside, iMapside2;
iMapside = iGetMapLocationSide(m_pMapList[m_pClientList[iClientH]->m_cMapIndex]->m_cName);
if (iMapside > 3) iMapside2 = iMapside - 2;
else iMapside2 = iMapside;
m_pClientList[iClientH]->m_bIsInsideOwnTown = FALSE;
if ((m_pClientList[iClientH]->m_cSide != iMapside2) && (iMapside != 0)) {
if ((iMapside <= 2) && (m_pClientList[iClientH]->m_iAdminUserLevel < 1)) {
if (m_pClientList[iClientH]->m_cSide != 0) {
m_pClientList[iClientH]->m_dwWarBeginTime = timeGetTime();
m_pClientList[iClientH]->m_bIsWarLocation = TRUE;
m_pClientList[iClientH]->m_iTimeLeft_ForceRecall = 1;
m_pClientList[iClientH]->m_bIsInsideOwnTown = TRUE;
}
}
}
else{
if (m_pMapList[ m_pClientList[iClientH]->m_cMapIndex ]->m_bIsFightZone == TRUE &&
m_iFightzoneNoForceRecall == FALSE &&
m_pClientList[iClientH]->m_iAdminUserLevel == 0) {
m_pClientList[iClientH]->m_dwWarBeginTime = timeGetTime();
m_pClientList[iClientH]->m_bIsWarLocation = TRUE;
GetLocalTime(&SysTime);
m_pClientList[iClientH]->m_iTimeLeft_ForceRecall = 2*60*20 - ((SysTime.wHour%2)*20*60 + SysTime.wMinute*20) - 2*20;
}
else{
if (memcmp(m_pMapList[ m_pClientList[iClientH]->m_cMapIndex ]->m_cLocationName, "arejail", 7) == 0 ||
memcmp(m_pMapList[ m_pClientList[iClientH]->m_cMapIndex ]->m_cLocationName, "elvjail", 7) == 0) {
if (m_pClientList[iClientH]->m_iAdminUserLevel == 0) {
m_pClientList[iClientH]->m_bIsWarLocation = TRUE;
m_pClientList[iClientH]->m_dwWarBeginTime = timeGetTime();
if (m_pClientList[iClientH]->m_iTimeLeft_ForceRecall == 0)
m_pClientList[iClientH]->m_iTimeLeft_ForceRecall = 100;
else if(m_pClientList[iClientH]->m_iTimeLeft_ForceRecall > 100)
m_pClientList[iClientH]->m_iTimeLeft_ForceRecall = 100;
}
}
}
}
SendNotifyMsg(NULL, iClientH, DEF_NOTIFY_SAFEATTACKMODE, NULL, NULL, NULL, NULL);
SendNotifyMsg(NULL, iClientH, DEF_NOTIFY_DOWNSKILLINDEXSET, m_pClientList[iClientH]->m_iDownSkillIndex, NULL, NULL, NULL);
SendNotifyMsg(NULL, iClientH, DEF_NOTIFY_ITEMPOSLIST, NULL, NULL, NULL, NULL);
_SendQuestContents(iClientH);
_CheckQuestEnvironment(iClientH);
// v1.432
if (m_pClientList[iClientH]->m_iSpecialAbilityTime == 0) {
SendNotifyMsg(NULL, iClientH, DEF_NOTIFY_SPECIALABILITYENABLED, NULL, NULL, NULL, NULL);
}
if (m_bIsCrusadeMode == TRUE) {
if (m_pClientList[iClientH]->m_dwCrusadeGUID == 0) {
m_pClientList[iClientH]->m_iCrusadeDuty = 0;
m_pClientList[iClientH]->m_iConstructionPoint = 0;
m_pClientList[iClientH]->m_dwCrusadeGUID = m_dwCrusadeGUID;
}
else if (m_pClientList[iClientH]->m_dwCrusadeGUID != m_dwCrusadeGUID) {
m_pClientList[iClientH]->m_iCrusadeDuty = 0;
m_pClientList[iClientH]->m_iConstructionPoint = 0;
m_pClientList[iClientH]->m_iWarContribution = 0;
m_pClientList[iClientH]->m_dwCrusadeGUID = m_dwCrusadeGUID;
SendNotifyMsg(NULL, iClientH, DEF_NOTIFY_CRUSADE, (DWORD)m_bIsCrusadeMode, NULL, 0, NULL, -1);
}
m_pClientList[iClientH]->m_cVar = 1;
SendNotifyMsg(NULL, iClientH, DEF_NOTIFY_CRUSADE, (DWORD)m_bIsCrusadeMode, m_pClientList[iClientH]->m_iCrusadeDuty, NULL, NULL);
}
else if (m_bIsHeldenianMode == TRUE) {
sSummonPoints = m_pClientList[iClientH]->m_iCharisma*300;
if (sSummonPoints > DEF_MAXSUMMONPOINTS) sSummonPoints = DEF_MAXSUMMONPOINTS;
if (m_pClientList[iClientH]->m_dwHeldenianGUID == NULL) {
m_pClientList[iClientH]->m_dwHeldenianGUID = m_dwHeldenianGUID;
m_pClientList[iClientH]->m_iConstructionPoint = sSummonPoints;
}
else if (m_pClientList[iClientH]->m_dwHeldenianGUID != m_dwHeldenianGUID) {
m_pClientList[iClientH]->m_iConstructionPoint = sSummonPoints;
m_pClientList[iClientH]->m_iWarContribution = 0;
m_pClientList[iClientH]->m_dwHeldenianGUID = m_dwHeldenianGUID;
}
m_pClientList[iClientH]->m_cVar = 2;
if (m_bIsHeldenianMode == TRUE) {
SendNotifyMsg(NULL, iClientH, DEF_NOTIFY_CRUSADE, NULL, NULL, NULL, NULL);
if (m_bHeldenianInitiated == FALSE) {
SendNotifyMsg(NULL, iClientH, DEF_NOTIFY_HELDENIANSTART, NULL, NULL, NULL, NULL);
}
SendNotifyMsg(NULL, iClientH, DEF_NOTIFY_CONSTRUCTIONPOINT, m_pClientList[iClientH]->m_iConstructionPoint, m_pClientList[iClientH]->m_iWarContribution, NULL, NULL);
UpdateHeldenianStatus();
}
}
else if ((m_pClientList[iClientH]->m_cVar == 1) && (m_pClientList[iClientH]->m_dwCrusadeGUID == m_dwCrusadeGUID)) {
m_pClientList[iClientH]->m_iCrusadeDuty = 0;
m_pClientList[iClientH]->m_iConstructionPoint = 0;
}
else {
if (m_pClientList[iClientH]->m_dwCrusadeGUID == m_dwCrusadeGUID) {
if (m_pClientList[iClientH]->m_cVar == 1) {
SendNotifyMsg(NULL, iClientH, DEF_NOTIFY_CRUSADE, (DWORD)m_bIsCrusadeMode, NULL, NULL, NULL, -1);
}
}
else {
SendNotifyMsg(NULL, iClientH, DEF_NOTIFY_CRUSADE, (DWORD)m_bIsCrusadeMode, NULL, 0, NULL, -1);
m_pClientList[iClientH]->m_dwCrusadeGUID = 0;
m_pClientList[iClientH]->m_iWarContribution = 0;
m_pClientList[iClientH]->m_dwCrusadeGUID = 0;
}
}
// v1.42
if (memcmp(m_pClientList[iClientH]->m_cMapName, "fightzone", 9) == 0) {
wsprintf(G_cTxt, "Char(%s)-Enter(%s) Observer(%d)", m_pClientList[iClientH]->m_cCharName, m_pClientList[iClientH]->m_cMapName, m_pClientList[iClientH]->m_bIsObserverMode);
PutLogEventFileList(G_cTxt);
}
if (m_bIsHeldenianMode == TRUE) SendNotifyMsg(NULL, iClientH, DEF_NOTIFY_HELDENIANTELEPORT, NULL, NULL, NULL, NULL, NULL);
if (m_bHeldenianInitiated == TRUE) SendNotifyMsg(NULL, iClientH, DEF_NOTIFY_HELDENIANSTART, NULL, NULL, NULL, NULL, NULL);
// Crusade
SendNotifyMsg(NULL, iClientH, DEF_NOTIFY_CONSTRUCTIONPOINT, m_pClientList[iClientH]->m_iConstructionPoint, m_pClientList[iClientH]->m_iWarContribution, 1, NULL);
//Fix Sprite Bug
// SendEventToNearClient_TypeA(iClientH, DEF_OWNERTYPE_PLAYER, MSGID_EVENT_MOTION, DEF_OBJECTNULLACTION, NULL, NULL, NULL);
//Gizon point lefT???
SendNotifyMsg(NULL, iClientH, DEF_NOTIFY_GIZONITEMUPGRADELEFT, m_pClientList[iClientH]->m_iGizonItemUpgradeLeft, NULL, NULL, NULL);
if ((m_bIsApocalypseMode == TRUE) && (m_pMapList[m_pClientList[iClientH]->m_cMapIndex]->m_bIsApocalypseMap == TRUE)) {
RequestTeleportHandler(iClientH, "1 ");
}
if (m_bIsApocalypseMode == TRUE) {
SendNotifyMsg(NULL, iClientH, DEF_NOTIFY_APOCGATESTARTMSG, NULL, NULL, NULL, NULL, NULL);
}
}
}
Code: Select all
/*********************************************************************************************************************
* void CGame::RequestInitPlayerHandler(int iClientH, char * pData, char cKey)
* DESCRIPTION :: player login varifier
* LAST_UPDATED :: 8/27/2005 10;46 PM EvilHit
* RETURN_VALUE :: void
* NOTES :: - expanded DeleteClient and bSendMsgToLS
* MODIFICATION :: none
**********************************************************************************************************************/
void CGame::RequestInitPlayerHandler(int iClientH, char * pData, char cKey)
{
register int i;
char * cp, cCharName[11], cAccountName[11], cAccountPassword[11], cTxt[120];
BOOL bIsObserverMode;
if (m_pClientList[iClientH] == NULL) return;
if (m_pClientList[iClientH]->m_bIsInitComplete == TRUE) return;
ZeroMemory(cCharName, sizeof(cCharName));
ZeroMemory(cAccountName, sizeof(cAccountName));
ZeroMemory(cAccountPassword, sizeof(cAccountPassword));
ZeroMemory(m_pClientList[iClientH]->m_cCharName, sizeof(m_pClientList[iClientH]->m_cCharName));
ZeroMemory(m_pClientList[iClientH]->m_cAccountName, sizeof(m_pClientList[iClientH]->m_cAccountName));
ZeroMemory(m_pClientList[iClientH]->m_cAccountPassword, sizeof(m_pClientList[iClientH]->m_cAccountPassword));
cp = (char *)(pData + DEF_INDEX2_MSGTYPE + 2);
memcpy(cCharName, cp, 10);
cp += 10;
ZeroMemory(cTxt, sizeof(cTxt)); // v1.4
memcpy(cTxt, cCharName, 10);
m_Misc.bDecode(cKey, cTxt);
ZeroMemory(cCharName, sizeof(cCharName));
memcpy(cCharName, cTxt, 10);
if (strlen(cTxt) == 0) PutLogList("RIPH - cTxt: Char NULL!");
memcpy(cAccountName, cp, 10);
cp += 10;
ZeroMemory(cTxt, sizeof(cTxt));
memcpy(cTxt, cAccountName, 10);
m_Misc.bDecode(cKey, cTxt);
ZeroMemory(cAccountName, sizeof(cAccountName));
memcpy(cAccountName, cTxt, 10);
memcpy(cAccountPassword, cp, 10);
cp += 10;
ZeroMemory(cTxt, sizeof(cTxt));
memcpy(cTxt, cAccountPassword, 10);
m_Misc.bDecode(cKey, cTxt);
ZeroMemory(cAccountPassword, sizeof(cAccountPassword));
memcpy(cAccountPassword, cTxt, 10);
bIsObserverMode = (BOOL)*cp;
cp++;
for (i = 1; i < DEF_MAXCLIENTS; i++)
if ((m_pClientList[i] != NULL) && (iClientH != i) && (memcmp(m_pClientList[i]->m_cAccountName, cAccountName, 10) == 0)) {
if (memcmp(m_pClientList[i]->m_cAccountPassword, cAccountPassword, 10) == 0) {
wsprintf(G_cTxt, "<%d> Duplicate account player! Deleted with data save : CharName(%s) AccntName(%s) IP(%s)", i, m_pClientList[i]->m_cCharName, m_pClientList[i]->m_cAccountName, m_pClientList[i]->m_cIPaddress);
PutLogList(G_cTxt);
DeleteClient(i, TRUE, TRUE, FALSE);
}
else {
memcpy(m_pClientList[iClientH]->m_cCharName, cCharName, 10);
memcpy(m_pClientList[iClientH]->m_cAccountName, cAccountName, 10);
memcpy(m_pClientList[iClientH]->m_cAccountPassword, cAccountPassword, 10);
DeleteClient(iClientH, FALSE, FALSE, FALSE);
return;
}
}
for (i = 1; i < DEF_MAXCLIENTS; i++)
if ((m_pClientList[i] != NULL) && (iClientH != i) && (memcmp(m_pClientList[i]->m_cCharName, cCharName, 10) == 0)) {
if (memcmp(m_pClientList[i]->m_cAccountPassword, cAccountPassword, 10) == 0) {
wsprintf(G_cTxt, "<%d> Duplicate player! Deleted with data save : CharName(%s) IP(%s)", i, m_pClientList[i]->m_cCharName, m_pClientList[i]->m_cIPaddress);
PutLogList(G_cTxt);
DeleteClient(i, TRUE, TRUE, FALSE);
}
else {
memcpy(m_pClientList[iClientH]->m_cCharName, cCharName, 10);
memcpy(m_pClientList[iClientH]->m_cAccountName, cAccountName, 10);
memcpy(m_pClientList[iClientH]->m_cAccountPassword, cAccountPassword, 10);
DeleteClient(iClientH, FALSE, FALSE, TRUE, FALSE);
return;
}
}
memcpy(m_pClientList[iClientH]->m_cCharName, cCharName, 10);
memcpy(m_pClientList[iClientH]->m_cAccountName, cAccountName, 10);
memcpy(m_pClientList[iClientH]->m_cAccountPassword, cAccountPassword, 10);
m_pClientList[iClientH]->m_bIsObserverMode = bIsObserverMode;
bSendMsgToLS(MSGID_REQUEST_PLAYERDATA, iClientH, TRUE);
}