PDA

View Full Version : [JX] Code sử dụng questkey



doanhungit
18-09-12, 09:34 PM
Có thể dựa vào code EatItem để viết không? Và các file cần viết là những file nào? Có bạn nào biết xin gợi ý...

shocklads
18-09-12, 09:57 PM
Có thể dựa vào code EatItem để viết không? Và các file cần viết là những file nào? Có bạn nào biết xin gợi ý...
Hầu hết mọi file lua liên quan đến item đều sd questkey mà bạn?

assaa
18-09-12, 10:02 PM
Hầu hết mọi file lua liên quan đến item đều sd questkey mà bạn?
Bạn hiểu nhầm ý của bạn kia rồi. ý bạn ấy là làm trong source ấy

lzlsky301
18-09-12, 10:39 PM
Có thể dựa vào code EatItem để viết không? Và các file cần viết là những file nào? Có bạn nào biết xin gợi ý...
Dựa theo viết hàm riêng hay làm tích hợp trong hàm đó cũng được EatMecidine nữa :D

trananh88vt
18-09-12, 10:43 PM
Có thể dựa vào code EatItem để viết không? Và các file cần viết là những file nào? Có bạn nào biết xin gợi ý...

Item_task hình như là quest Item thì phải hì


Client (CoreClient)
b1 : Gọi đến gói sử dụng Item [CoreShell::OperationRequest(GOI_USE_ITEM)]
b2 : Gọi tới hàm sủ dụng Item của lớp KPlayer [Player::ApplyUseItem]
b3 : Tại hàm ApplyUseItem gửi 1 gói tin đến server để xử lý (KProtocolProcess::..........)
Server(CoreServer)
b4 : Gói tin này đc thực thi và gọi tới 1 hàm trên CoreServer tại lớp KPlayer
Ví dụ :
#ifdef _SERVER
void KPlayer::EatItem(BYTE* pProtocol)
{
PLAYER_EAT_ITEM_COMMAND *pEat = (PLAYER_EAT_ITEM_COMMAND*)pProtocol;

m_ItemList.EatMecidine(pEat->m_btPlace, pEat->m_btX, pEat->m_btY);
}
#endif
+ Tại hàm này gọi tới hàm xủ lý của lớp KItemList
b5 : Trong KItemList tại hàm đc gọi đến sẽ thực thi hàm sử dụng Item đó
Ví dụ :
#ifdef _SERVER
BOOL KItemList::EatMecidine(int nPlace, int nX, int nY)
{
int nItemIdx = 0;
switch(nPlace)
{
case pos_equiproom:
nItemIdx = m_Room[room_equipment].FindItem(nX, nY);
if (nItemIdx > 0)
return EatMecidine(nItemIdx);
break;
case pos_immediacy:
nItemIdx = m_Room[room_immediacy].FindItem(nX, nY);
if (nItemIdx > 0)
{
if (Item[nItemIdx].GetGenre() != item_medicine)
return EatMecidine(nItemIdx);
int nGenre, nDetailType, nIdx, nXpos, nYpos;
BOOL bEat;

nGenre = item_medicine;
nDetailType = Item[nItemIdx].GetDetailType();

bEat = EatMecidine(nItemIdx);
if (bEat == FALSE)
return bEat;

if (FALSE == FindSameDetailTypeInEquipment(nGenre, nDetailType, &nIdx, &nXpos, &nYpos))
return bEat;

this->AutoMoveMedicine(nIdx, nXpos, nYpos, nX, nY);

return bEat;
}
break;
default:
break;
}

return FALSE;
}
#endif
b6 : Thực thi 1 hàm có trong cả CoreServer và cả CoreClient
Ví dụ :
BOOL KItemList::EatMecidine(int nIdx)
{
if (m_PlayerIdx <= 0)
return FALSE;

int nNpcIdx = Player[m_PlayerIdx].m_nIndex;
int nGenre = Item[nIdx].GetGenre();

_ASSERT(nGenre == item_medicine || nGenre == item_townportal);
if (nGenre == item_medicine)
Item[nIdx].ApplyMagicAttribToNPC(&Npc[nNpcIdx], 3);
if (nGenre == item_townportal)
{
if (!Npc[Player[m_PlayerIdx].m_nIndex].m_FightMode)
{
#ifndef _SERVER
KSystemMessage Msg;

Msg.byConfirmType = SMCT_CLICK;
Msg.byParamSize = 0;
Msg.byPriority = 1;
Msg.eType = SMT_PLAYER;
strcpy(Msg.szMessage, "ÎÞ·¨ÔÚÕâÀïʹÓÃÍÁµØ·û£¡");
CoreDataChanged(GDCNI_SYSTEM_MESSAGE, (unsigned int)&Msg, NULL);
#endif
return FALSE;
}
#ifdef _SERVER
Player[m_PlayerIdx].UseTownPortal();
#endif
}
#ifdef _SERVER
Remove(nIdx);
ItemSet.Remove(nIdx);
#endif
if (Npc[Player[m_PlayerIdx].m_nIndex].m_Doing == do_sit)
{
Npc[Player[m_PlayerIdx].m_nIndex].SendCommand(do_stand);
}
return TRUE;
}