FIXED!
Now I have another problem. When I recieve Angelic my Majestic Point dont decrease
And Angels Should be avabile only for max lvl's
Code: Select all
void CGame::GetAngelHandler(int iClientH, char * pData, DWORD dwMsgSize)
{
char *cp, cData[256], cTmpName[21];
int iAngel, iItemNbe;
class CItem * pItem;
int iRet, iEraseReq;
short * sp;
WORD * wp;
int * ip;
DWORD * dwp;
if (m_pClientList[iClientH] == NULL) return;
if (m_pClientList[iClientH]->m_bIsInitComplete == FALSE) return;
if (_iGetItemSpaceLeft(iClientH) == 0)
{ SendItemNotifyMsg(iClientH, DEF_NOTIFY_CANNOTCARRYMOREITEM, NULL, NULL);
return;
}
if (m_pClientList[iClientH]->m_iGizonItemUpgradeLeft <= 20)
{ SendNotifyMsg(NULL, iClientH, DEF_NOTIFY_CANNOTCARRYMOREITEM, NULL, NULL, NULL);
return;
}
cp = (char *)(pData + DEF_INDEX2_MSGTYPE + 2);
ZeroMemory(cTmpName, sizeof(cTmpName));
strcpy(cTmpName, cp);
cp += 20;
ip = (int *)cp;
iAngel = (int) *ip; // 0x00 l a i
cp += 2;
wsprintf(G_cTxt, "PC(%s) obtained an Angel (%d). %s(%d %d)"
, m_pClientList[iClientH]->m_cCharName
, iAngel
, m_pClientList[iClientH]->m_cMapName
, m_pClientList[iClientH]->m_sX
, m_pClientList[iClientH]->m_sY);
PutLogList(G_cTxt);
switch (iAngel) {
case 1: // STR
iItemNbe = 908;
break;
case 2: // DEX
iItemNbe = 909;
break;
case 3: // INT
iItemNbe = 910;
break;
case 4: // MAG
iItemNbe = 911;
break;
default:
PutLogList("Gail asked to create a wrong item!");
break;
}
pItem = NULL;
pItem = new class CItem;
if (pItem == NULL) return;
if ((_bInitItemAttr(pItem, iItemNbe) == TRUE))
{ pItem->m_sTouchEffectType = DEF_ITET_UNIQUE_OWNER;
pItem->m_sTouchEffectValue1 = m_pClientList[iClientH]->m_sCharIDnum1;
pItem->m_sTouchEffectValue2 = m_pClientList[iClientH]->m_sCharIDnum2;
pItem->m_sTouchEffectValue3 = m_pClientList[iClientH]->m_sCharIDnum3;
if (_bAddClientItemList(iClientH, pItem, &iEraseReq) == TRUE)
{ ZeroMemory(cData, sizeof(cData));
dwp = (DWORD *)(cData + DEF_INDEX4_MSGID);
*dwp = MSGID_NOTIFY;
wp = (WORD *)(cData + DEF_INDEX2_MSGTYPE);
*wp = DEF_NOTIFY_ITEMOBTAINED;
cp = (char *)(cData + DEF_INDEX2_MSGTYPE + 2);
*cp = 1;
cp++;
memcpy(cp, pItem->m_cName, 20);
cp += 20;
dwp = (DWORD *)cp;
*dwp = pItem->m_dwCount;
cp += 4;
*cp = pItem->m_cItemType;
cp++;
*cp = pItem->m_cEquipPos;
cp++;
*cp = (char)0;
cp++;
sp = (short *)cp;
*sp = pItem->m_sLevelLimit;
cp += 2;
*cp = pItem->m_cGenderLimit;
cp++;
wp = (WORD *)cp;
*wp = pItem->m_wCurLifeSpan;
cp += 2;
wp = (WORD *)cp;
*wp = pItem->m_wWeight;
cp += 2;
sp = (short *)cp;
*sp = pItem->m_sSprite;
cp += 2;
sp = (short *)cp;
*sp = pItem->m_sSpriteFrame;
cp += 2;
*cp = pItem->m_cItemColor;
cp++;
*cp = (char)pItem->m_sItemSpecEffectValue2; // v1.41
cp++;
dwp = (DWORD *)cp;
*dwp = pItem->m_dwAttribute;
cp += 4;
if (iEraseReq == 1) delete pItem;
iRet = m_pClientList[iClientH]->m_pXSock->iSendMsg(cData, 53);
switch (iRet) {
case DEF_XSOCKEVENT_QUENEFULL:
case DEF_XSOCKEVENT_SOCKETERROR:
case DEF_XSOCKEVENT_CRITICALERROR:
case DEF_XSOCKEVENT_SOCKETCLOSED:
DeleteClient(iClientH, TRUE, TRUE);
break;
}
}else
{ m_pMapList[ m_pClientList[iClientH]->m_cMapIndex ]->bSetItem(m_pClientList[iClientH]->m_sX,
m_pClientList[iClientH]->m_sY, pItem);
SendEventToNearClient_TypeB(MSGID_EVENT_COMMON, DEF_COMMONTYPE_ITEMDROP, m_pClientList[iClientH]->m_cMapIndex,
m_pClientList[iClientH]->m_sX, m_pClientList[iClientH]->m_sY,
pItem->m_sSprite, pItem->m_sSpriteFrame, pItem->m_cItemColor); // v1.4
dwp = (DWORD *)(cData + DEF_INDEX4_MSGID);
*dwp = MSGID_NOTIFY;
wp = (WORD *)(cData + DEF_INDEX2_MSGTYPE);
*wp = DEF_NOTIFY_CANNOTCARRYMOREITEM;
iRet = m_pClientList[iClientH]->m_pXSock->iSendMsg(cData, 6);
switch (iRet) {
case DEF_XSOCKEVENT_QUENEFULL:
case DEF_XSOCKEVENT_SOCKETERROR:
case DEF_XSOCKEVENT_CRITICALERROR:
case DEF_XSOCKEVENT_SOCKETCLOSED:
DeleteClient(iClientH, TRUE, TRUE);
break;
} }
}else
{ delete pItem;
pItem = NULL;
} }