[JX] Share Script sắp xếp hạng cá nhân, xử lý file văn bản thuần!
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 3 của 3
  1. #1
    Thành Viên bil4i3n's Avatar
    Ngày tham gia
    Feb 2015
    Đang ở
    fb.com/bil.jx
    Bài viết
    321
    Thanks
    87
    Thanked 276 Times in 151 Posts

    Share Script sắp xếp hạng cá nhân, xử lý file văn bản thuần!

    Các bác lấy về test xem có ổn định hông nha, lúc trước mình viết ra thì chính xác từng lượng Exp!
    Ưu điểm là sếp hạng đến người cuối cùng trong game, truy xuất thẳng vào bảng, không dùng vòng lặp nên không ảnh hưởng đến hệ thống khi xác định hạng cá nhân
    Nhược điểm là lúc tiến hành xếp hạng vẫn phải chạy 2 vòng for 1 vòng chạy lấy thông tin người A, 1 vòng lấy thông tin người A so với tất cả các người còn lại, và nói chung là nhược điểm hơi nhiều .
    Khuyến cáo, không nên đem lên online, vì nếu đem lên on các bác phải biết cách cho nó chạy lúc bảo trì nếu mà để chạy theo s3relay thì cẩn thận treo máy chủ
    vì vô tình chiều hôm nay mình dạo chơi thì tìm ra 1 cách xếp hạng cá nhân toàn bộ nhân vật của máy chủ 1 các đơn giản dễ chịu, nhẹ máy chủ hơn nhiều nên share script lại cho anh em tham khảo

    Script main
    PHP Code:
    IncludeLib("FILESYS")
    Include (
    "\\script\\class\\ktabfile.lua")
    bilNowDay date("%Y%m%d")..GetLocalDate("%H%M%S")

    bilWorldRank = {
        
    FileTempNew "bil4i3n_data/bil4i3n_worldrank_temp_new.txt",
        
    FileTempNewTbFileLoad "\\bil4i3n_data\\bil4i3n_worldrank_temp_new.txt",
        
    FileTempNewHeader "bilNamePlayer\tbilLevelPlayer",
        
    FileTempOld "bil4i3n_data/bil4i3n_worldrank_temp_old.txt",
        
    FileTempOldTbFileLoad "\\bil4i3n_data\\bil4i3n_worldrank_temp_old.txt",
        
    FileCompared "bil4i3n_data/bil4i3n_worldrank_compared.txt",
        
    FileComparedTbFileLoad "\\bil4i3n_data\\bil4i3n_worldrank_compared.txt",
        
    FileRankSorted "script/global/bil4i3n/bil4i3n_log/bil4i3n_worldrank_sorted.lua",
        
    FileRankSortedTbFileLoad "\\script\\global\\bil4i3n\\bil4i3n_log\\bil4i3n_worldrank_sorted.lua",
    }
        
    function 
    bilWorldRank:UpdateDataPlayer()
        if 
    GetTask(5974) ~= tonumber(bilNowDaythen
            
    if TabFile_Load(self.FileTempNewTbFileLoad"bilNamePlayerUpdateData") ~= 1 then
                local bilOpenFileTemp 
    openfile(self.FileTempNew"a");
                
    write(bilOpenFileTempself.FileTempNewHeader"\n")
                
    closefile(bilOpenFileTemp)
            
    end
            TabFile_UnLoad
    ("bilNamePlayerUpdateData")
            
    local bilOpenFileTemp openfile(self.FileTempNew"a");
            
    write(bilOpenFileTempGetName().."\t"..GetLevel().."."..GetExpPercent(), "\n")
            
    closefile(bilOpenFileTemp)
            
    SetTask(5974tonumber(bilNowDay))
        
    end
    end
        
    function bilWorldRank:UpdateRankData()
        print(
    " ");
        print( 
    "========================================================================================");
        print(
    " bilWorldRank -> Update Data -> Start")
        
    Msg2SubWord("HÖ thèng ®ang tiƠn hµnh lµm míi l¹i xƠp h¹ng c¸ nh©n toµn m¸y chñ!")
        if 
    TabFile_Load(self.FileTempNewTbFileLoadself.FileTempNewTbFileLoad) ~= 1 then
            
    print(" Khong tai duoc file FileTempNew! -> return")
            return
        else
            if 
    TabFile_Load(self.FileTempOldTbFileLoadself.FileTempOldTbFileLoad) == 1 then
                self
    .CompareFromData()
            
    end
            TabFile_UnLoad
    (self.FileTempOldTbFileLoad)
        
    end
        TabFile_UnLoad
    (self.FileTempNewTbFileLoad)
        
    local bilTbTemp = {}
        
    local bilDataNeedSort
        
    if TabFile_Load(self.FileComparedTbFileLoadself.FileComparedTbFileLoad) ~= 1 then
            bilDataNeedSort 
    = new(KTabFileself.FileTempNewTbFileLoadformat("bilWorldRankSort_Check_%s"bilNowDay))
        else
            
    bilDataNeedSort = new(KTabFileself.FileComparedTbFileLoadformat("bilWorldRankSort_Check_%s"bilNowDay))
        
    end
        
    for bilLoopDataSort 1bilDataNeedSort:getRow() do
            
    tinsert(bilTbTemp, {bilDataNeedSort:getCell("bilNamePlayer"bilLoopDataSort), bilDataNeedSort:getCell("bilLevelPlayer"bilLoopDataSort)})
        
    end
        bilDataNeedSort
    :release()
        
    sort(bilTbTemp, function (ab) return(tonumber(a[2]) > tonumber(b[2])) end)
        
    local bilOpenFileRanking openfile(self.FileRankSorted"w")
        
    write(bilOpenFileRanking"bil4i3nRankingData = {\n\t["..bilString2Byte("GM01").."] = {bilRankNum = "..bilNowDay..", bilNamePlayer = 'GM01'},""\n")
        for 
    bilSave2Tb 1getn(bilTbTemp) do
            
    write(bilOpenFileRanking"\t["..bilString2Byte(bilTbTemp[bilSave2Tb][1]).."] = {bilRankNum = "..bilSave2Tb..", bilNamePlayer = '"..bilTbTemp[bilSave2Tb][1].."', bilLevelPlayer = "..bilTbTemp[bilSave2Tb][2].."},""\n")
        
    end
        write
    (bilOpenFileRanking"}""\n")
        
    closefile(bilOpenFileRanking)
        
    self.ConvertFile()
        print(
    " bilWorldRank -> Sorted -> Done")
        
    dofile(bilWorldRank.FileRankSorted)
        
    dofile("script/global/bil4i3n/bil4i3n_worldrank.lua")
        print(
    " bilWorldRank -> dofile RankSorted -> Done")
        
    Msg2SubWord("Lµm míi thø h¹ng giang hå cho ng­êi ch¬i toµn m¸y chñ hoµn tÊt!")
        print( 
    "========================================================================================");
    end

    function bilWorldRank:CompareFromData()
        print(
    " bilWorldRank -> CompareFromData Old <> New -> Compared")
        
    local bilOldData = new(KTabFilebilWorldRank.FileTempOldTbFileLoadformat("bilWorldRank_OldData_%s"bilNowDay))
        
    local bilNowData = new(KTabFilebilWorldRank.FileTempNewTbFileLoadformat("bilWorldRank_New_%s"bilNowDay))
        
    local bilRowNowDatabilCheckNumbilWriteData2Compared bilNowData:getRow(), 0openfile(bilWorldRank.FileCompared"w")
        
    write(bilWriteData2ComparedbilWorldRank.FileTempNewHeader"\n")
        for 
    bilLoopOldData 1bilOldData:getRow() do
            for 
    bilLoopNowData 1bilRowNowData do
                if 
    tostring(bilOldData:getCell("bilNamePlayer"bilLoopOldData)) ~= tostring(bilNowData:getCell("bilNamePlayer"bilLoopNowData)) then
                    bilCheckNum 
    bilCheckNum 1
                
    else
                    
    write(bilWriteData2Comparedtostring(bilNowData:getCell("bilNamePlayer"bilLoopNowData)).."\t"..tostring(bilNowData:getCell("bilLevelPlayer"bilLoopNowData)), "\n")
                    break
                
    end
            end
            
    if bilCheckNum == bilRowNowData then
                write
    (bilWriteData2Comparedtostring(bilOldData:getCell("bilNamePlayer"bilLoopOldData)).."\t"..tostring(bilOldData:getCell("bilLevelPlayer"bilLoopOldData)), "\n")
            
    end
            bilCheckNum 
    0
        end
        
    for bilCompareDataNewWithOld 1bilNowData:getRow() do
            
    bilCheckNum 0
            
    for bilOldDt 1bilOldData:getRow() do
                if 
    tostring(bilOldData:getCell("bilNamePlayer"bilOldDt)) ~= tostring(bilNowData:getCell("bilNamePlayer"bilCompareDataNewWithOld)) then
                    bilCheckNum 
    bilCheckNum 1
                end
            end
            
    if bilCheckNum == bilOldData:getRow() then
                write
    (bilWriteData2Comparedtostring(bilNowData:getCell("bilNamePlayer"bilCompareDataNewWithOld)).."\t"..tostring(bilNowData:getCell("bilLevelPlayer"bilCompareDataNewWithOld)), "\n")
            
    end
        end
        closefile
    (bilWriteData2Compared)
        
    bilOldData:release()
        
    bilNowData:release()
        print(
    " bilWorldRank -> CompareFromData -> Complete")
    end

    function bilWorldRank:ConvertFile()
        print(
    " ConvertFile -> Chuyen file Compared -> TempOld")
        
    local bilOpenFileCompared
        
    if TabFile_Load(bilWorldRank.FileComparedTbFileLoadbilWorldRank.FileComparedTbFileLoad) ~= 1 then
            
    print(" ConvertFile -> Khong tai duoc file Compared!")
            if 
    TabFile_Load(bilWorldRank.FileTempNewTbFileLoadbilWorldRank.FileTempNewTbFileLoad) == 1 then
                
    print(" ConvertFile -> FileTempNew -> Old")
                
    bilOpenFileCompared = new(KTabFilebilWorldRank.FileTempNewTbFileLoadformat("bilConvertCompared2Old_%s"bilNowDay))
            else
                print(
    " ConvertFile -> Khong duoc thuc hien!")
                return
            
    end
        
    else
            
    bilOpenFileCompared = new(KTabFilebilWorldRank.FileComparedTbFileLoadformat("bilConvertCompared2Old_%s"bilNowDay))
        
    end
        TabFile_UnLoad
    (bilWorldRank.FileTempNewTbFileLoad)
        
    TabFile_UnLoad(bilWorldRank.FileComparedTbFileLoad)
        
    local bilOpenFileOld openfile(bilWorldRank.FileTempOld"w")
        
    write(bilOpenFileOldbilWorldRank.FileTempNewHeader"\n")
        for 
    bilLoopDataConvert 1bilOpenFileCompared:getRow() do
            
    write(bilOpenFileOldtostring(bilOpenFileCompared:getCell("bilNamePlayer"bilLoopDataConvert)).."\t"..tostring(bilOpenFileCompared:getCell("bilLevelPlayer"bilLoopDataConvert)), "\n")
        
    end
        bilOpenFileCompared
    :release()
        
    closefile(bilOpenFileOld)
        print(
    " ConvertFile -> Lam moi file Compared")
        
    local bilOpenFileComparedEmpty openfile(bilWorldRank.FileCompared"w");
        
    closefile(bilOpenFileComparedEmpty)
        print(
    " ConvertFile -> Lam moi file TempNew")
        
    local bilOpenFileTemp openfile(bilWorldRank.FileTempNew"w");
        
    write(bilOpenFileTempbilWorldRank.FileTempNewHeader"\n")
        
    closefile(bilOpenFileTemp)
        print(
    " ConvertFile -> Done")
    end

    function bilWorldRank:GetWorldRank()
        if 
    GetTask(5972) ~= tonumber(date("%Y%m%d")) then
            
    if TabFile_Load(bilWorldRank.FileRankSortedTbFileLoadbilWorldRank.FileRankSortedTbFileLoad) ~= 1 then
                
    if GetTask(5973) > 0 then
                    
    return GetTask(5973)
                else
                    return 
    "VÉn ch­a xƠp h¹ng"
                
    end
            
    else
                
    TabFile_UnLoad(bilWorldRank.FileRankSortedTbFileLoad)
                
    dofile(bilWorldRank.FileRankSorted)
                Include(
    bilWorldRank.FileRankSortedTbFileLoad)
            
    end
            
    if FALSE(bil4i3nRankingData[tonumber(bilString2Byte(GetName()))]) then
                SetTask
    (59730)
            else
                
    SetTask(5973tonumber(bil4i3nRankingData[tonumber(bilString2Byte(GetName()))].bilRankNum))
            
    end
            SetTask
    (5972tonumber(date("%Y%m%d")))
        
    end
        
    if GetTask(5973) <= 0 then
            
    return "VÉn ch­a xƠp h¹ng"
        
    else
            return 
    GetTask(5973)
        
    end
    end

    function bilString2Byte(string)
        
    local lenbilByteRet strlen(string), ""
        
    for 1len do 
            
    bilByteRet bilByteRet..strbyte(stringi)
        
    end
        
    return bilByteRet
    end

    function FALSE(nValue)
        if (
    nValue == nil or nValue == or nValue == ""then
            
    return 1
        
    else
            return 
    nil
        end
    end 


    Hướng dẫn dùng:
    hàm: bilWorldRank:UpdateDataPlayer()
    dùng để cập nhật thông tin người chơi vào file, các bác muốn lấy thông tin người chơi thì gọi hàm này ra.
    hàm: bilWorldRank:UpdateRankData()
    dùng để cập nhật, sắp xếp hạng người chơi vào 1 file .lua ra 1 bảng đã mã hóa tên người chơi thành các con số dạng Byte nhằm giúp truy cập 1 cách trực tiếp không cần vòng lặp hay thuật toán, khi hàm này chạy nó sẽ tạo ra file mới, file tạm, xóa file cũ, phục hồi lại file mới.
    hàm: bilWorldRank:GetWorldRank() là hàm mà các bác muốn lấy thông tin thứ hạng người chơi hiển thị lên đâu đó

    nhưng trước tiên các bác phải tạo thư mục: \server1\bil4i3n_data, sau đó tạo 1 file: bil4i3n_worldrank_temp_new.txt có nội dung như sau:
    PHP Code:
    bilNamePlayer    bilLevelPlayer 

    1 file với đường dẫn: \server1\script\global\bil4i3n\bil4i3n_log\bil4i3n _worldrank_sorted.lua với nội dung:
    PHP Code:
    bil4i3nRankingData = {




    Chúc các bác thành công!
    Lần sửa cuối bởi bil4i3n, ngày 17-02-16 lúc 11:36 PM.
    Khách viếng thăm hãy cùng bil4i3n xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  2. The Following 11 Users Say Thank You to bil4i3n For This Useful Post:

    34k01 (16-08-19), assaa (18-02-16), cabato (18-02-16), cuongvh93 (18-02-16), dichduon (03-03-16), kanhtien (18-02-16), Kethanglang (19-02-16), khanhhello9091 (06-11-16), minhduc_aa (23-02-16), minhkhanh109 (18-02-16), vuduymanh (19-02-16)

  3. #2
    Thành Viên
    Ngày tham gia
    Jan 2012
    Bài viết
    390
    Thanks
    125
    Thanked 29 Times in 8 Posts

    Ðề: Share Script sắp xếp hạng cá nhân, xử lý file văn bản thuần!

    Ai đã thử test chưa ?................................
    Khách viếng thăm hãy cùng kanhtien xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  4. #3
    Thành Viên minhduc_aa's Avatar
    Ngày tham gia
    Nov 2015
    Bài viết
    363
    Thanks
    133
    Thanked 550 Times in 253 Posts

    Ðề: Share Script sắp xếp hạng cá nhân, xử lý file văn bản thuần!

    Anh em ai có kinh nghiệm chỉ em cách reset lại BXH với, em dùng ver3 thì BXH bị đơ, log in hay log out gì nó đều không cập nhật, đã thử tạo file .lua như hướng dẫn của anh chủ topic nhưng không ăn thua. Có ai có thể team giúp em phát với, em cám ơn ạ.
    Hình em nó đây ạ, sau khi em nâng đến 190 level rồi chuyển sinh ở NPC Nam cung nhất thiên thì dính lỗi này.
    Đó giờ em cũng tắt secureCRT 3-2-1 trước rồi đến Paysys rồi Relaysys, sau khi đọc bài này lại có hướng tắt game kiểu khác. Anh có thể nói rõ hơn là tắt như thế nào thì đúng ạ. Mong anh em giúp để lại yahoo hay email để em liên lạc ạ.

    Anh bil4i3n tối team giúp em tẩy não cái BXH với ạ, nó đơ đơ kiểu thế này hoài, yh em: minhduc_aa đó ạ.
    [Only registered and activated users can see links. ]
    Khách viếng thăm hãy cùng minhduc_aa xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

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

    TPLink (30-09-16)

 

 

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

  1. [TLBB] Share Source Server + Client Có Điêu Văn 11 Phái Và Nhiều Thứ Hot
    Bởi rikudo trong diễn đàn Releases
    Trả lời: 88
    Bài viết cuối: 09-08-14, 01:01 PM
  2. Share tool việt hóa Action Script cho file swf các bác down về vọc nhé
    Bởi tianmochang trong diễn đàn Đao Kiếm Vô Song
    Trả lời: 21
    Bài viết cuối: 07-08-14, 10:45 AM
  3. [KT] Share file sửa lỗi View thuộc tính Chân Nguyên linux
    Bởi Sesshomaru trong diễn đàn Scripts
    Trả lời: 1
    Bài viết cuối: 31-05-14, 01:31 AM
  4. Share Code Tra Từ Điển giống google - Hỗ trợ dịch cả đoạn văn
    Bởi KingSky trong diễn đàn Thư Viện Mã Nguồn Mở
    Trả lời: 0
    Bài viết cuối: 10-02-14, 10:01 PM
  5. [KT] Giải thuật nào cho script đổi đồ Hoàng Kim tương ứng
    Bởi mr.rain trong diễn đàn Hỏi Đáp/ Yêu Cầu
    Trả lời: 2
    Bài viết cuối: 06-07-13, 10:10 PM

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à 06:35 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ệ.