trananh88vt
08-10-12, 10:55 AM
- Mới làm xong việc hì rảnh ko có gì làm nên viết tut cho các bạn cần để dùng
- Ai bít rùi hay gì gì xin đừng quang gạch em nha
hì
Vào vấn đề lun
Mình xin hưỡng dẫn chút về chuột phải QuestKey
Đầu tiên là các hàm phải sửa trong lớp KItemList
// UseItem
int KItemList::UseItem(int nIdx)
{
if (m_PlayerIdx <= 0)
return FALSE;
int nNpcIdx = Player[m_PlayerIdx].m_nIndex;
if (0 == FindSame(nIdx))
{
return 0;
}
int nRet = 0;
switch(Item[nIdx].GetGenre())
{
case item_equip:
break;
/* if (Equip(nNpcIdx, nIdx))
nRet = REQUEST_EQUIP_ITEM;*/
case item_task:
if (EatMecidine(nIdx))
nRet = REQUEST_EAT_MEDICINE;
break;
case item_townportal:
case item_medicine:
if (EatMecidine(nIdx))
nRet = REQUEST_EAT_MEDICINE;
break;
default:
break;
}
return nRet;
}
//EatMecidine
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 || nGenre == item_task);
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 // ¿Í»§¶ËÏÈ¿´¿´ÊDz»ÊÇ·ÇÕ½¶·Ç ø£¬Èç¹ûÊǵĻ°¾Í±ð·¢¸øServerÁ Ë¡£
// ϵͳÏûÏ¢
KSystemMessage Msg;
Msg.byConfirmType = SMCT_CLICK;
Msg.byParamSize = 0;
Msg.byPriority = 1;
Msg.eType = SMT_PLAYER;
strcpy(Msg.szMessage, "Kh«ng thÓ sñ dông thæ ®Þa phï t¹i ®©y !");
CoreDataChanged(GDCNI_SYSTEM_MESSAGE, (unsigned int)&Msg, NULL);
#endif
return FALSE;
}
#ifdef _SERVER
Player[m_PlayerIdx].UseTownPortal();
#endif
}
if (nGenre == item_task)
{
#ifdef _SERVER
Player[m_PlayerIdx].UseItemQuest(nIdx);
#endif
}
#ifdef _SERVER
if (nGenre != item_task)
{
Remove(nIdx);
ItemSet.Remove(nIdx);
}
else
{
// Tùy vào code của bạn cho cho phép del Item hay không khi Use item
}
#endif
if (Npc[Player[m_PlayerIdx].m_nIndex].m_Doing == do_sit)
{
Npc[Player[m_PlayerIdx].m_nIndex].SendCommand(do_stand);
}
return TRUE;
}
Bây h vào lớp KPlayer tạo 1 hàm nữa là OK
#ifdef _SERVER
void KPlayer::UseItemQuest(int nIdx)
{
if(Item[nIdx].GetGenre() != item_task)
return;
char scriptName[255];
sprintf(scriptName,"\\script\\item\\%d.lua",Item[nIdx].GetDetailType());
ExecuteScript(scriptName,"main",0);
}
#endif
Các sử dụng như sau . Dự vào id quest key ta thêm vào 1 file .lua tại thư mục scipts/item/xxx.lua
Hì em trình còn gà chỉ có thể làm zậy thui hix
- Ai bít rùi hay gì gì xin đừng quang gạch em nha
hì
Vào vấn đề lun
Mình xin hưỡng dẫn chút về chuột phải QuestKey
Đầu tiên là các hàm phải sửa trong lớp KItemList
// UseItem
int KItemList::UseItem(int nIdx)
{
if (m_PlayerIdx <= 0)
return FALSE;
int nNpcIdx = Player[m_PlayerIdx].m_nIndex;
if (0 == FindSame(nIdx))
{
return 0;
}
int nRet = 0;
switch(Item[nIdx].GetGenre())
{
case item_equip:
break;
/* if (Equip(nNpcIdx, nIdx))
nRet = REQUEST_EQUIP_ITEM;*/
case item_task:
if (EatMecidine(nIdx))
nRet = REQUEST_EAT_MEDICINE;
break;
case item_townportal:
case item_medicine:
if (EatMecidine(nIdx))
nRet = REQUEST_EAT_MEDICINE;
break;
default:
break;
}
return nRet;
}
//EatMecidine
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 || nGenre == item_task);
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 // ¿Í»§¶ËÏÈ¿´¿´ÊDz»ÊÇ·ÇÕ½¶·Ç ø£¬Èç¹ûÊǵĻ°¾Í±ð·¢¸øServerÁ Ë¡£
// ϵͳÏûÏ¢
KSystemMessage Msg;
Msg.byConfirmType = SMCT_CLICK;
Msg.byParamSize = 0;
Msg.byPriority = 1;
Msg.eType = SMT_PLAYER;
strcpy(Msg.szMessage, "Kh«ng thÓ sñ dông thæ ®Þa phï t¹i ®©y !");
CoreDataChanged(GDCNI_SYSTEM_MESSAGE, (unsigned int)&Msg, NULL);
#endif
return FALSE;
}
#ifdef _SERVER
Player[m_PlayerIdx].UseTownPortal();
#endif
}
if (nGenre == item_task)
{
#ifdef _SERVER
Player[m_PlayerIdx].UseItemQuest(nIdx);
#endif
}
#ifdef _SERVER
if (nGenre != item_task)
{
Remove(nIdx);
ItemSet.Remove(nIdx);
}
else
{
// Tùy vào code của bạn cho cho phép del Item hay không khi Use item
}
#endif
if (Npc[Player[m_PlayerIdx].m_nIndex].m_Doing == do_sit)
{
Npc[Player[m_PlayerIdx].m_nIndex].SendCommand(do_stand);
}
return TRUE;
}
Bây h vào lớp KPlayer tạo 1 hàm nữa là OK
#ifdef _SERVER
void KPlayer::UseItemQuest(int nIdx)
{
if(Item[nIdx].GetGenre() != item_task)
return;
char scriptName[255];
sprintf(scriptName,"\\script\\item\\%d.lua",Item[nIdx].GetDetailType());
ExecuteScript(scriptName,"main",0);
}
#endif
Các sử dụng như sau . Dự vào id quest key ta thêm vào 1 file .lua tại thư mục scipts/item/xxx.lua
Hì em trình còn gà chỉ có thể làm zậy thui hix