Problem fixed, was a few problems with
int CGame::iClientMotion_Move_Handler
replaced with an older version, works perfectly now
if u need it, here it is:
Code: Select all
int CGame::iClientMotion_Move_Handler(int iClientH, short sX, short sY, char cDir, char cMoveType)//from older source added by XenX
{
char * cp, cData[3000];
class CTile * pTile;
DWORD * dwp;
WORD * wp, wObjectID;
short * sp, dX, dY, sTemp, sTemp2, sDOtype, pTopItem;
int * ip, iRet, iSize, iDamage;
BOOL bRet, bIsBlocked = FALSE;
if (m_pClientList[iClientH] == NULL) return 0;
if ((cDir <= 0) || (cDir > 8)) return 0;
if (m_pClientList[iClientH]->m_bIsKilled == TRUE) return 0;
if (m_pClientList[iClientH]->m_bIsInitComplete == FALSE) return 0;
if ((sX != m_pClientList[iClientH]->m_sX) || (sY != m_pClientList[iClientH]->m_sY)) return 2;
int iStX, iStY;
if (m_pMapList[m_pClientList[iClientH]->m_cMapIndex] != NULL) {
iStX = m_pClientList[iClientH]->m_sX / 20;
iStY = m_pClientList[iClientH]->m_sY / 20;
m_pMapList[m_pClientList[iClientH]->m_cMapIndex]->m_stTempSectorInfo[iStX][iStY].iPlayerActivity++;
switch (m_pClientList[iClientH]->m_cSide) {
case 0: m_pMapList[m_pClientList[iClientH]->m_cMapIndex]->m_stTempSectorInfo[iStX][iStY].iNeutralActivity++; break;
case 1: m_pMapList[m_pClientList[iClientH]->m_cMapIndex]->m_stTempSectorInfo[iStX][iStY].iAresdenActivity++; break;
case 2: m_pMapList[m_pClientList[iClientH]->m_cMapIndex]->m_stTempSectorInfo[iStX][iStY].iElvineActivity++; break;
}
}
ClearSkillUsingStatus(iClientH);
dX = m_pClientList[iClientH]->m_sX;
dY = m_pClientList[iClientH]->m_sY;
switch (cDir) {
case 1: dY--; break;
case 2: dX++; dY--; break;
case 3: dX++; break;
case 4: dX++; dY++; break;
case 5: dY++; break;
case 6: dX--; dY++; break;
case 7: dX--; break;
case 8: dX--; dY--; break;
}
pTopItem = 0;
bRet = m_pMapList[m_pClientList[iClientH]->m_cMapIndex]->bGetMoveable(dX, dY, &sDOtype, &pTopItem);
//mag-en00b added to possibly remedy "inviwall" problem 28.08.05
short sOwner;
char sOwnerType;
if (bRet == FALSE) {
m_pMapList[m_pClientList[iClientH]->m_cMapIndex]->GetOwner(&sOwner,&sOwnerType,dX,dY);
if (sOwnerType == 0) {
pTile = (class CTile *)(m_pMapList[m_pClientList[iClientH]->m_cMapIndex]->m_pTile +
dX + dY*m_pMapList[m_pClientList[iClientH]->m_cMapIndex]->m_sSizeY);
pTile->m_sOwner = NULL;
pTile->m_cOwnerClass = NULL;
pTile->m_sDeadOwner = NULL;
pTile->m_cDeadOwnerClass = NULL;
}
}
if (m_pClientList[iClientH]->m_cMagicEffectStatus[DEF_MAGICTYPE_HOLDOBJECT] != 0) {
bRet = FALSE;
}
bIsBlocked = FALSE;
if ((bRet == TRUE) && (bIsBlocked == FALSE)) {
if (m_pClientList[iClientH]->m_iQuest != NULL) _bCheckIsQuestCompleted(iClientH);
m_pMapList[m_pClientList[iClientH]->m_cMapIndex]->ClearOwner(1, iClientH, DEF_OWNERTYPE_PLAYER, m_pClientList[iClientH]->m_sX, m_pClientList[iClientH]->m_sY);
m_pClientList[iClientH]->m_sX = dX;
m_pClientList[iClientH]->m_sY = dY;
m_pClientList[iClientH]->m_cDir = cDir;
m_pMapList[m_pClientList[iClientH]->m_cMapIndex]->SetOwner((short)iClientH,
DEF_OWNERTYPE_PLAYER,
dX, dY);
if (sDOtype == DEF_DYNAMICOBJECT_SPIKE) {
if ((m_pClientList[iClientH]->m_bIsNeutral == TRUE) && ((m_pClientList[iClientH]->m_sAppr2 & 0xF000) == 0)) {
}
else {
iDamage = iDice(2,4);
if (m_pClientList[iClientH]->m_iAdminUserLevel == 0)
m_pClientList[iClientH]->m_iHP -= iDamage;
}
}
if (m_pClientList[iClientH]->m_iHP <= 0) m_pClientList[iClientH]->m_iHP = 0;
dwp = (DWORD *)(cData + DEF_INDEX4_MSGID);
*dwp = MSGID_RESPONSE_MOTION;
wp = (WORD *)(cData + DEF_INDEX2_MSGTYPE);
*wp = DEF_OBJECTMOVE_CONFIRM;
cp = (char *)(cData + DEF_INDEX2_MSGTYPE+2);
sp = (short *)cp;
*sp = (short)(dX - 10);
cp += 2;
sp = (short *)cp;
*sp = (short)(dY - 7);
cp += 2;
*cp = cDir;
cp++;
if (cMoveType == 1) {
if (m_pClientList[iClientH]->m_iSP > 0) {
*cp = 0;
if (m_pClientList[iClientH]->m_iTimeLeft_FirmStaminar == 0) {
m_pClientList[iClientH]->m_iSP--;
*cp = 1;
}
}
else {
*cp = 0;
if (m_pClientList[iClientH]->m_iTimeLeft_FirmStaminar == 0) {
m_pClientList[iClientH]->m_iSP--;
*cp = 1;
}
if (m_pClientList[iClientH]->m_iSP < -10) {
m_pClientList[iClientH]->m_iSP = 0;
DeleteClient(iClientH, TRUE, TRUE);
return 0;
}
}
}
else *cp = 0;
cp++;
pTile = (class CTile *)(m_pMapList[m_pClientList[iClientH]->m_cMapIndex]->m_pTile + dX + dY*m_pMapList[m_pClientList[iClientH]->m_cMapIndex]->m_sSizeY);
*cp = (char)pTile->m_iOccupyStatus;
cp++;
ip = (int *)cp;
*ip = m_pClientList[iClientH]->m_iHP;
cp += 4;
iSize = iComposeMoveMapData((short)(dX - 10), (short)(dY - 7), iClientH, cDir, cp);
iRet = m_pClientList[iClientH]->m_pXSock->iSendMsg(cData, iSize + 12 + 1 + 4);
switch (iRet) {
case DEF_XSOCKEVENT_QUENEFULL:
case DEF_XSOCKEVENT_SOCKETERROR:
case DEF_XSOCKEVENT_CRITICALERROR:
case DEF_XSOCKEVENT_SOCKETCLOSED:
DeleteClient(iClientH, TRUE, TRUE);
return 0;
}
}
else {
m_pClientList[iClientH]->m_bIsMoveBlocked = TRUE;
dwp = (DWORD *)(cData + DEF_INDEX4_MSGID);
*dwp = MSGID_RESPONSE_MOTION;
wp = (WORD *)(cData + DEF_INDEX2_MSGTYPE);
*wp = DEF_OBJECTMOVE_REJECT;
if (bIsBlocked == TRUE) {
m_pClientList[iClientH]->m_dwAttackLAT = 1050;
}
m_pClientList[iClientH]->m_dwAttackLAT = 1010;
wObjectID = (WORD)iClientH;
cp = (char *)(cData + DEF_INDEX2_MSGTYPE + 2);
wp = (WORD *)cp;
*wp = wObjectID;
cp += 2;
sp = (short *)cp;
sX = m_pClientList[wObjectID]->m_sX;
*sp = sX;
cp += 2;
sp = (short *)cp;
sY = m_pClientList[wObjectID]->m_sY;
*sp = sY;
cp += 2;
sp = (short *)cp;
*sp = m_pClientList[wObjectID]->m_sType;
cp += 2;
*cp = m_pClientList[wObjectID]->m_cDir;
cp++;
memcpy(cp, m_pClientList[wObjectID]->m_cCharName, 10);
cp += 10;
sp = (short *)cp;
*sp = m_pClientList[wObjectID]->m_sAppr1;
cp += 2;
sp = (short *)cp;
*sp = m_pClientList[wObjectID]->m_sAppr2;
cp += 2;
sp = (short *)cp;
*sp = m_pClientList[wObjectID]->m_sAppr3;
cp += 2;
sp = (short *)cp;
*sp = m_pClientList[wObjectID]->m_sAppr4;
cp += 2;
ip = (int *)cp;
*ip = m_pClientList[wObjectID]->m_iApprColor;
cp+= 4;
ip = (int *)cp;
sTemp = m_pClientList[wObjectID]->m_iStatus;
sTemp = 0x0FFFFFFF & sTemp;
sTemp2 = iGetPlayerABSStatus(wObjectID, iClientH);
sTemp = (sTemp | (sTemp2 << 28));
*ip = sTemp;
cp += 4;
iRet = m_pClientList[iClientH]->m_pXSock->iSendMsg(cData, 42);
switch (iRet) {
case DEF_XSOCKEVENT_QUENEFULL:
case DEF_XSOCKEVENT_SOCKETERROR:
case DEF_XSOCKEVENT_CRITICALERROR:
case DEF_XSOCKEVENT_SOCKETCLOSED:
DeleteClient(iClientH, TRUE, TRUE);
return 0;
}
return 0;
}
return 1;
}