[JX] Hỏi về source JX Win - file KPlayer.cpp
Follow us on
Follow us on Facebook Follow us on Twitter Linked In Flickr Watch us on YouTube My Space Blogger
 
Kết quả 1 đến 10 của 10
  1. #1
    Thành Viên
    Ngày tham gia
    Jul 2007
    Bài viết
    137
    Thanks
    47
    Thanked 61 Times in 20 Posts

    Hỏi về source JX Win - file KPlayer.cpp

    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
    Code:
    	void			script(int nId);
    File KPlayer.cpp
    Code:
    #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.
    Lần sửa cuối bởi traminh83, ngày 04-05-17 lúc 07:58 PM.
    Khách viếng thăm hãy cùng traminh83 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  2. #2
    Thành Viên Tâm Huyết wermanhme1990's Avatar
    Ngày tham gia
    Apr 2008
    Bài viết
    1,594
    Thanks
    78
    Thanked 669 Times in 483 Posts

    Ðề: Hỏi về source JX Win - file KPlayer.cpp

    source này bạn dùng hình như không phải source gốc của tàu share mà source của team nào dev.
    cái trên là khai báo và định nghĩa hàm, bạn sreach xem script(int nId) được gọi ở chổ nào, mình gà lắm nên chỉ biết vậy.
    Khách viếng thăm hãy cùng wermanhme1990 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  3. #3
    Thành Viên
    Ngày tham gia
    Jul 2007
    Bài viết
    137
    Thanks
    47
    Thanked 61 Times in 20 Posts

    Ðề: Hỏi về source JX Win - file KPlayer.cpp

    Trích dẫn Gửi bởi wermanhme1990 [Only registered and activated users can see links. ]
    source này bạn dùng hình như không phải source gốc của tàu share mà source của team nào dev.
    cái trên là khai báo và định nghĩa hàm, bạn sreach xem script(int nId) được gọi ở chổ nào, mình gà lắm nên chỉ biết vậy.
    Đúng rồi bạn, source này là source BrotherTeam7 - HTVL mình download theo link của một bạn trên diễn đàn.
    Mình đã search rồi - search toàn bộ các file trong bộ source - nhưng chỉ thấy script(int nId) có trong 2 file là KPlayer.h và KPlayer.cpp thôi.
    Khách viếng thăm hãy cùng traminh83 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  4. #4
    Thành Viên Tâm Huyết wermanhme1990's Avatar
    Ngày tham gia
    Apr 2008
    Bài viết
    1,594
    Thanks
    78
    Thanked 669 Times in 483 Posts

    Ðề: Hỏi về source JX Win - file KPlayer.cpp

    bạn sreach script( hoặc KPlayer::script thôi, vì nó có thể thay bằng script(xyz).
    Khách viếng thăm hãy cùng wermanhme1990 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  5. #5
    Thành Viên
    Ngày tham gia
    Jul 2007
    Bài viết
    137
    Thanks
    47
    Thanked 61 Times in 20 Posts

    Ðề: Hỏi về source JX Win - file KPlayer.cpp

    Vẫn chỉ có trong file KPlayer.cpp - kiếm trong file này cũng chỉ có một chỗ mà mình đã post ở trên.
    Khách viếng thăm hãy cùng traminh83 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  6. #6
    Thành Viên Tâm Huyết wermanhme1990's Avatar
    Ngày tham gia
    Apr 2008
    Bài viết
    1,594
    Thanks
    78
    Thanked 669 Times in 483 Posts

    Ðề: Hỏi về source JX Win - file KPlayer.cpp

    của bạn đây:
    Core\Src\KProtocolProcess.cpp
    Code:
    void KProtocolProcess::NpcDaTauCommand(int nIndex, BYTE* pProtocol)
    {
        CP_DATAU         *pDaTauCmd;
    
        pDaTauCmd = (CP_DATAU *)pProtocol;
        if (nIndex <= 0 || nIndex >= MAX_PLAYER)
            return;
    
        if (Player[nIndex].m_nIndex <= 0 || Player[nIndex].m_nIndex >= MAX_NPC)
            return;
    
        Player[nIndex].script(pDaTauCmd->nbutton);
    }
    Khách viếng thăm hãy cùng wermanhme1990 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  7. Các thành viên gởi lời cảm ơn đến wermanhme1990 vì bài viết này !

    traminh83 (04-05-17)

  8. #7
    Thành Viên
    Ngày tham gia
    Jul 2007
    Bài viết
    137
    Thanks
    47
    Thanked 61 Times in 20 Posts

    Ðề: Hỏi về source JX Win - file KPlayer.cpp

    Mình hiểu được chút

    PHP Code:
    int KUiDaTau::WndProc(unsigned int uMsgunsigned int uParamint nParam)
    {
        
    int    nRet 0;
        switch(
    uMsg)
        {
        case 
    WND_N_BUTTON_CLICK:
            if (
    uParam == (unsigned int)(KWndWindow*)&EXP)
            {
                
    Hide();
                
    g_pCoreShell->OperationRequest(GOI_DATAU10);
            }
            else if (
    uParam == (unsigned int)(KWndWindow*)&money)
            {
                
    Hide();
                
    g_pCoreShell->OperationRequest(GOI_DATAU20);
            }
            else if (
    uParam == (unsigned int)(KWndWindow*)&random)
            {
                
    Hide();
                
    g_pCoreShell->OperationRequest(GOI_DATAU30);
            }
            break;
        default:
            
    nRet KWndShowAnimate::WndProc(uMsguParamnParam);
        }
        return 
    nRet;

    Trong UiDaTau có đoạn code trên,
    cái chỗ g_pCoreShell->OperationRequest(GOI_DATAU, 1, 0);g_pCoreShell->OperationRequest(GOI_DATAU, 2, 0);g_pCoreShell->OperationRequest(GOI_DATAU, 3, 0);
    tương ứng với exp, money, và random
    mà 3 chữ này trong KPlayer.cpp ở trên mình post cũng có exp.lua, money.lua và random.lua.
    - trong CoreShell.h có dòng GOI_DATAU khai báo trước,
    - trong CoreShell.cpp

    PHP Code:
    case GOI_DATAU:// Da Tau
    SendClientDaTau(uParam);
    break; 
    Hàm SendClientDaTau có trong KProtocol.cpp ở Core
    PHP Code:
     void SendClientDaTau(int nstt)
    {
        
    CP_DATAU ButtonCmd;

        
    ButtonCmd.ProtocolType c2s_datau;
        
    ButtonCmd.nbutton nstt;
        if (
    g_pClient)
            
    g_pClient->SendPackToServer((BYTE*)&ButtonCmdsizeof(CP_DATAU));

    trong hàm này lại có CP_DATAU

    Phía trên chút trong file KProtocol.cpp có khai báo
    PHP Code:
        sizeof(CP_DATAU),                            // c2s_datau 
    vào trong file KProtocolProcess.cpp mà bạn mới post
    PHP Code:
    void KProtocolProcess::NpcDaTauCommand(int nIndexBYTEpProtocol)
    {
        
    CP_DATAU         *pDaTauCmd;

        
    pDaTauCmd = (CP_DATAU *)pProtocol;
        if (
    nIndex <= || nIndex >= MAX_PLAYER)
            return;

        if (
    Player[nIndex].m_nIndex <= || Player[nIndex].m_nIndex >= MAX_NPC)
            return;

        
    Player[nIndex].script(pDaTauCmd->nbutton);

    Có CP_DATAU, và trong hàm này quy định nIndex >=0 và lớn hơn MAX_NPC và MAX_PLAYER

    Cái dòng lệnh "script(pDaTauCmd->nbutton)" không biết có liên quan đến file UiDaTau trong cái đoạn mình post ở trên đầu

    PHP Code:
    case WND_N_BUTTON_CLICK:
            if (
    uParam == (unsigned int)(KWndWindow*)&EXP)
            {
                
    Hide();
                
    g_pCoreShell->OperationRequest(GOI_DATAU10);
            } 
    Cái số 1 phía sau GOI_DATAU có phải là cái "nbutton" này không! và "nbutton" này chính là cái "nId" trong KPlayer.cpp.

    - Theo mình hiểu thì phân tích ra vậy. Không biết đúng 100% không? Các hàm liên quan và kết nối với nhiều file, làm hơi bị rối.
    Khách viếng thăm hãy cùng traminh83 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  9. #8
    Thành Viên
    Ngày tham gia
    Jul 2007
    Bài viết
    137
    Thanks
    47
    Thanked 61 Times in 20 Posts

    Ðề: Hỏi về source JX Win - file KPlayer.cpp

    Mình tiếp tục search và kiểm tra trong UiMarket thử và kết quả cũng có GOI_DATAU

    PHP Code:
    int KUiMiniMap::WndProc(unsigned int uMsgunsigned int uParamint nParam)
    {
        
    int nRet 0;
        switch(
    uMsg)
        {
        case 
    WND_N_BUTTON_CLICK:
            if (
    uParam == (unsigned int)(KWndWindow*)&m_SwitchBtn)
                
    MapSetMode(s_eMapMode == MINIMAP_M_BRIEF_PIC MINIMAP_M_BRIEF_PIC_BROWSE MINIMAP_M_BRIEF_PIC);
            else if (
    uParam == (unsigned int)(KWndWindow*)&m_SwitchBtn)
                
    MapSetMode(x_eMapMode == MINIMAP_M_BRIEF_PIC MINIMAP_M_BRIEF_PIC_BROWSE MINIMAP_M_BRIEF_PIC);
            else if (
    uParam == (unsigned int)(KWndWindow*)&m_WorldMapBtn)
                
    MapSetMode(MINIMAP_M_WORLD_MAP);
            else if (
    uParam == (unsigned int)(KWndWindow*)&m_BtnFlag)
                
    KUiFindPos::OpenWindow();
            else if (
    uParam == (unsigned int)(KWndWindow*)&m_CaveBtn)
                
    MapSetMode(MINIMAP_M_CAVE_MAP);
            else if (
    uParam == (unsigned int)(KWndWindow*)&m_MarketBtn)
                        if (
    g_pCoreShell->GetGameData(GDI_IS_CHEST_UNLOCKED00))
                            {
                                
    g_pCoreShell->OperationRequest(GOI_DATAU70);
                                break;
                            }
                            
    g_pCoreShell->OperationRequest(GOI_PLAYER_ACTIONCN_GH0);
                            break; 
    Dòng lệnh
    PHP Code:
    g_pCoreShell->OperationRequest(GOI_DATAU70); 
    vẫn là GOI_DATAU, 7
    và số 7 mình nghĩ nó cũng là nId trong file KPlayer.cpp

    Có lẽ mình suy nghĩ đúng.

    Thank wermanhme1990 nhiều lắm!
    Khách viếng thăm hãy cùng traminh83 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  10. #9
    Thành Viên Tâm Huyết wermanhme1990's Avatar
    Ngày tham gia
    Apr 2008
    Bài viết
    1,594
    Thanks
    78
    Thanked 669 Times in 483 Posts

    Ðề: Hỏi về source JX Win - file KPlayer.cpp

    src jx cũ lắm rồi, đưa lên vs version cao như vs 2010 hoặc vs 2017 cũng khó, mình trước chỉ vọc chứ không dev.
    Khách viếng thăm hãy cùng wermanhme1990 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  11. Các thành viên gởi lời cảm ơn đến wermanhme1990 vì bài viết này !

    traminh83 (04-05-17)

  12. #10
    Thành Viên
    Ngày tham gia
    Jul 2007
    Bài viết
    137
    Thanks
    47
    Thanked 61 Times in 20 Posts

    Ðề: Hỏi về source JX Win - file KPlayer.cpp

    Thanks bạn lần nữa!
    Thành quả có sự giúp đỡ của bạn:
    Mình đã tạo button "Xaphu" và load file lua vào từ source.

    [Only registered and activated users can see links. ]
    Khách viếng thăm hãy cùng traminh83 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

 

 

Các Chủ đề tương tự

  1. [JX] [Source] Cấu trúc file Pak/Spr và cách tạo ra chúng
    Bởi FanLoveJX trong diễn đàn Võ Lâm Truyền Kỳ (Jx Server)
    Trả lời: 51
    Bài viết cuối: 06-09-21, 03:34 PM
  2. [Gunny] Các bac Pro chỉ giáo. file nào trong source là file hiệu ứng châu báu
    Bởi laibixoa trong diễn đàn Hỏi Đáp/ Yêu Cầu
    Trả lời: 1
    Bài viết cuối: 09-07-14, 01:47 PM
  3. [JX] Vấn đề về thêm 1 thuộc tính vào lớp KPlayer
    Bởi JackSparrow trong diễn đàn Hỏi Đáp/ Yêu Cầu
    Trả lời: 0
    Bài viết cuối: 24-12-12, 12:07 PM
  4. source VB tạo file logIn cho MU đây
    Bởi congacon trong diễn đàn SQL Server & Website
    Trả lời: 36
    Bài viết cuối: 10-04-09, 04:26 PM
  5. Source tạo file Login cho Mu
    Bởi congacon trong diễn đàn Releases
    Trả lời: 1
    Bài viết cuối: 01-01-09, 09:36 PM

Tag của Chủ đề này

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •  
Múi giờ GMT +7. Bây giờ là 09:54 PM.
vBulletin®, Copyright ©2000-2011, Jelsoft Enterprises Ltd.
CLBGamesVN không chịu trách nhiệm về Luật Bản Quyền của các tài liệu, bài viết v.v...được đăng tải trên diễn đàn này.
Diễn đàn phát triển dưới sự đóng góp của tất cả thành viên. BQT chỉ là những người thành lập ra sân chơi, quản lý và duy trì về mặt kỹ thuật, nội dung khi hợp lệ.