traminh83
04-05-17, 07:44 PM
Nếu có thể mong các cao thủ dev source giải thích hay chỉ dẫn giùm (không phải dev script nha)
Mình đã hiểu được cách load một số file .lua khi start server.
Khi xem về file UiMarket (kỳ trân các) - mình search các biến các hàm thì thấy trong 2 file KPlayer có các dòng lệnh sau
File KPlayer.h
void script(int nId);
File KPlayer.cpp
#ifdef _SERVER
void KPlayer::script(int nId)
{
if (nId == 1)
{
char scriptName[255];
sprintf(scriptName,"\\script\\datau\\phanthuong\\exp.lua");
ExecuteScript(scriptName,"main",0);
}
else if (nId == 2)
{
char scriptName[255];
sprintf(scriptName,"\\script\\datau\\phanthuong\\money.lua");
ExecuteScript(scriptName,"main",0);
}
else if (nId == 3)
{
char scriptName[255];
sprintf(scriptName,"\\script\\datau\\phanthuong\\random.lua");
ExecuteScript(scriptName,"main",0);
}
else if (nId == 4)
{
char scriptName[255];
sprintf(scriptName,"\\script\\datau\\phanthuong\\lucky.lua");
ExecuteScript(scriptName,"main",0);
}
else if (nId == 5)
{
char scriptName[255];
sprintf(scriptName,"\\script\\datau\\phanthuong\\item.lua");
ExecuteScript(scriptName,"main",0);
}
else if (nId == 6)
{
char scriptName[255];
sprintf(scriptName,"\\script\\datau\\phanthuong\\point.lua");
ExecuteScript(scriptName,"main",0);
}
else if (nId == 7)
{
if(Npc[Player[CLIENT_PLAYER_INDEX].m_nIndex].m_FightMode == 0)
{
char scriptName[255];
sprintf(scriptName,"\\script\\ktc\\kytrancac.lua");
ExecuteScript(scriptName,"main",0);
}
else
{
char szMsg[100];
sprintf(szMsg, "Kh«ng thÓ më kú tr©n c¸c ë khu vùc chiÕn ®Êu.");
KPlayerChat::SendSystemInfo(1, m_nPlayerIndex, "HÖ thèng", (char *) szMsg, strlen(szMsg) );
}
}
else if (nId == 8)
{
char scriptName[255];
sprintf(scriptName,"\\script\\epdo\\ephkmp.lua");
ExecuteScript(scriptName,"main",0);
}
else if (nId == 9)
{
char scriptName[255];
sprintf(scriptName,"\\script\\trangthaipk\\luyencong.lua");
ExecuteScript(scriptName,"main",0);
}
else if (nId == 10)
{
char scriptName[255];
sprintf(scriptName,"\\script\\trangthaipk\\chiendau.lua");
ExecuteScript(scriptName,"main",0);
}
else if (nId == 11)
{
char scriptName[255];
sprintf(scriptName,"\\script\\trangthaipk\\dosat.lua");
ExecuteScript(scriptName,"main",0);
}
else if (nId == 12)
{
char scriptName[255];
sprintf(scriptName,"\\script\\system\\hethong.lua");
ExecuteScript(scriptName,"main",0);
}
else if (nId == 13)
{
char scriptName[255];
sprintf(scriptName,"\\script\\nhiemvu\\datau.lua");
ExecuteScript(scriptName,"main",0);
}
}
#endif
- mấy cái dòng #ifndef ... #endif thì mình hiểu những code trong đó dùng cho CoreServer.
- void script(int nId); => cái này thì gọi hàm.
- Nhưng qua file .cpp khi gọi hàm thì những dòng if (nId == 1) rồi else if (nId == 2) ...... trong những điều kiện có trong code - nếu thỏa mãn thì thực hiện chạy file .lua đã chỉ định sẵn.
- Do đang tìm cách hiểu cái UiMarket nó hoạt động thông qua source và script như thế nào (bình thường nó là 1 button - khi nhấn vào tất nhiên sẽ hiện một window (UI) nhỏ bán đồ gì đó - và cái việc bán đồ đó thông qua một file .lua để đưa vật phẩm lên UI - mình search trong thư mục script có file theo đường dẫn \\script\\ktc\\kytrancac.lua - trong file lua này là lệnh Sale(2) - theo mình hiểu là bán mấy cái đồ phúc duyên ... được qui định trong các file .txt - bình thường là 1 cái Ui Box để chứa các vật phẩm và khi mình thay đổi script theo dạng Say(....) gì đó - chạy game nó thay đổi Ui theo hàm Say)
- hiểu đến đây - nhưng vẫn chưa hiểu ngay chỗ mấy dòng lệnh if và else if - chính xác là mấy cái "nId"
- các file .lua luyencong, chiendau, ... hay datau (mình thấy trong các source khác) -
- đơn cử lấy datau làm ví dụ - thông thường mình click vào npc dã tẩu - sẽ hiện Ui dạng Say hay Say2 hay SayNew - và nó sẽ load script được viết tại file datau.lua còn khi click vào button trong game thì làm sao biết những nId này là của button hay chỉ là npc hoặc chỉ là một hàm trung gian để gọi script.
Những cái "nId" này ở đâu ra (mình thấy trong KPlayer.h có lệnh gọi) - và làm sao biết được nId nào là của các button luyencong, chiendau, item, lucky, datau, kytrancac...?
Có file nào qui định những nId đó không? Mình chỉ là tự mò mẫm rồi xem các bài viết, hướng dẫn của các ad, mod, và các jx developers trên clb. Mong các cao thủ chỉ dẫn giùm.
Mình đã hiểu được cách load một số file .lua khi start server.
Khi xem về file UiMarket (kỳ trân các) - mình search các biến các hàm thì thấy trong 2 file KPlayer có các dòng lệnh sau
File KPlayer.h
void script(int nId);
File KPlayer.cpp
#ifdef _SERVER
void KPlayer::script(int nId)
{
if (nId == 1)
{
char scriptName[255];
sprintf(scriptName,"\\script\\datau\\phanthuong\\exp.lua");
ExecuteScript(scriptName,"main",0);
}
else if (nId == 2)
{
char scriptName[255];
sprintf(scriptName,"\\script\\datau\\phanthuong\\money.lua");
ExecuteScript(scriptName,"main",0);
}
else if (nId == 3)
{
char scriptName[255];
sprintf(scriptName,"\\script\\datau\\phanthuong\\random.lua");
ExecuteScript(scriptName,"main",0);
}
else if (nId == 4)
{
char scriptName[255];
sprintf(scriptName,"\\script\\datau\\phanthuong\\lucky.lua");
ExecuteScript(scriptName,"main",0);
}
else if (nId == 5)
{
char scriptName[255];
sprintf(scriptName,"\\script\\datau\\phanthuong\\item.lua");
ExecuteScript(scriptName,"main",0);
}
else if (nId == 6)
{
char scriptName[255];
sprintf(scriptName,"\\script\\datau\\phanthuong\\point.lua");
ExecuteScript(scriptName,"main",0);
}
else if (nId == 7)
{
if(Npc[Player[CLIENT_PLAYER_INDEX].m_nIndex].m_FightMode == 0)
{
char scriptName[255];
sprintf(scriptName,"\\script\\ktc\\kytrancac.lua");
ExecuteScript(scriptName,"main",0);
}
else
{
char szMsg[100];
sprintf(szMsg, "Kh«ng thÓ më kú tr©n c¸c ë khu vùc chiÕn ®Êu.");
KPlayerChat::SendSystemInfo(1, m_nPlayerIndex, "HÖ thèng", (char *) szMsg, strlen(szMsg) );
}
}
else if (nId == 8)
{
char scriptName[255];
sprintf(scriptName,"\\script\\epdo\\ephkmp.lua");
ExecuteScript(scriptName,"main",0);
}
else if (nId == 9)
{
char scriptName[255];
sprintf(scriptName,"\\script\\trangthaipk\\luyencong.lua");
ExecuteScript(scriptName,"main",0);
}
else if (nId == 10)
{
char scriptName[255];
sprintf(scriptName,"\\script\\trangthaipk\\chiendau.lua");
ExecuteScript(scriptName,"main",0);
}
else if (nId == 11)
{
char scriptName[255];
sprintf(scriptName,"\\script\\trangthaipk\\dosat.lua");
ExecuteScript(scriptName,"main",0);
}
else if (nId == 12)
{
char scriptName[255];
sprintf(scriptName,"\\script\\system\\hethong.lua");
ExecuteScript(scriptName,"main",0);
}
else if (nId == 13)
{
char scriptName[255];
sprintf(scriptName,"\\script\\nhiemvu\\datau.lua");
ExecuteScript(scriptName,"main",0);
}
}
#endif
- mấy cái dòng #ifndef ... #endif thì mình hiểu những code trong đó dùng cho CoreServer.
- void script(int nId); => cái này thì gọi hàm.
- Nhưng qua file .cpp khi gọi hàm thì những dòng if (nId == 1) rồi else if (nId == 2) ...... trong những điều kiện có trong code - nếu thỏa mãn thì thực hiện chạy file .lua đã chỉ định sẵn.
- Do đang tìm cách hiểu cái UiMarket nó hoạt động thông qua source và script như thế nào (bình thường nó là 1 button - khi nhấn vào tất nhiên sẽ hiện một window (UI) nhỏ bán đồ gì đó - và cái việc bán đồ đó thông qua một file .lua để đưa vật phẩm lên UI - mình search trong thư mục script có file theo đường dẫn \\script\\ktc\\kytrancac.lua - trong file lua này là lệnh Sale(2) - theo mình hiểu là bán mấy cái đồ phúc duyên ... được qui định trong các file .txt - bình thường là 1 cái Ui Box để chứa các vật phẩm và khi mình thay đổi script theo dạng Say(....) gì đó - chạy game nó thay đổi Ui theo hàm Say)
- hiểu đến đây - nhưng vẫn chưa hiểu ngay chỗ mấy dòng lệnh if và else if - chính xác là mấy cái "nId"
- các file .lua luyencong, chiendau, ... hay datau (mình thấy trong các source khác) -
- đơn cử lấy datau làm ví dụ - thông thường mình click vào npc dã tẩu - sẽ hiện Ui dạng Say hay Say2 hay SayNew - và nó sẽ load script được viết tại file datau.lua còn khi click vào button trong game thì làm sao biết những nId này là của button hay chỉ là npc hoặc chỉ là một hàm trung gian để gọi script.
Những cái "nId" này ở đâu ra (mình thấy trong KPlayer.h có lệnh gọi) - và làm sao biết được nId nào là của các button luyencong, chiendau, item, lucky, datau, kytrancac...?
Có file nào qui định những nId đó không? Mình chỉ là tự mò mẫm rồi xem các bài viết, hướng dẫn của các ad, mod, và các jx developers trên clb. Mong các cao thủ chỉ dẫn giùm.