PDA

View Full Version : [JX] Hướng dẫn code Sử dụng quest Item bằng chuột phải từ Source



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

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

runkissbig
08-10-12, 05:15 PM
hài nhox. me, lúc người ta chưa hướng dẫn thì ỉm, đến khi người ta hướng dẫn thì bảo dài dòng ;)=;

doanhungit
08-10-12, 07:26 PM
Cám ơn trananh88vt nhiều. Mong bạn hướng dẫn nhiều hơn nữa cho những vọc sĩ như mình nhé...

haquocvu
08-10-12, 11:09 PM
Thanks 1 phát cho tinh thần cộng đồng. :-bd

doanhungit
15-10-12, 10:32 PM
else
{
// Tùy vào code của bạn cho cho phép del Item hay không khi Use item
}
trananh cho mình hỏi nhé, code chỗ này ntn để hợp lý. Ví dụ: mình là nv Thiếu Lâm khi sử dụng bí kíp phái khác sẽ hiện thông báo: ...... bạn nghiên cứu cả ngày mà vẫn không lĩnh hội được... và đồng thời bí kíp vẫn ko bị mất đi... Bạn chỉ rõ chổ này giùm mình

lzlsky301
15-10-12, 11:15 PM
else
{
// Tùy vào code của bạn cho cho phép del Item hay không khi Use item
}
trananh cho mình hỏi nhé, code chỗ này ntn để hợp lý. Ví dụ: mình là nv Thiếu Lâm khi sử dụng bí kíp phái khác sẽ hiện thông báo: ...... bạn nghiên cứu cả ngày mà vẫn không lĩnh hội được... và đồng thời bí kíp vẫn ko bị mất đi... Bạn chỉ rõ chổ này giùm mình
Cái này bạn viết trong script. nếu chưa làm del questkey trong src khi sử dụng. Thì bạn dùng hàm DelItem(IDQUESTKEY) trong script :D

greentears
30-10-12, 10:38 PM
Bây h vào lớp KPlayer tạo 1 hàm nữa là OK


thêm vào file nào? chỗ nào vậy pro 8-|

greentears
30-10-12, 10:56 PM
lỗi rùi pro ơi :(

E:\Src\swrod3\SwordOnline\Sources\Core\Src\KItemLi st.cpp(1120) : error C2248: 'UseItemQuest' : cannot access private member declared in class 'KPlayer'
E:\Src\swrod3\SwordOnline\Sources\Core\Src\KPlayer .h(101) : see declaration of 'UseItemQuest'

30char .......................................

lzlsky301
31-10-12, 12:41 AM
cách dễ thì ko chịu làm, cứ đề cách khó mà làm. đúng là bó tay với mấy đại ca :|
=)) buồn cười quá 30 charrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr

greentears
31-10-12, 07:37 AM
cách dễ thì ko chịu làm, cứ đề cách khó mà làm. đúng là bó tay với mấy đại ca :|

thì học hỏi mà Nhóc ^^

cách của cậu tớ làm xong rùi ^^

mò xem cách này thế nào ^^