2016年03月

    最近の進捗

    PAYDAY2 Blacklist Assist

    最近更新中のPAYDAY2のBlacklist MODの補助ツール
    ※特に理由が無い場合は最新バージョンを使用してください。


    ━━━━━━━━━━━━━━━━━━━━━━━━━━━

    NGBTOを参考に書いてみた。
    参考にとはいいつつもやはり手さぐりなので数時間もクラッシュと戦ってしまった。
    BLTを導入してからもう半年も経つらしいが、今更logsフォルダの存在に気が付きデバッグがとても捗った。
    SteamLibrary\SteamApps\common\PAYDAY 2\mods\logs

    このフォルダには日付別にテキストファイルでBLTのログが出力される。
    このログはシステムメッセージやチャットなどからLuaファイルの読み込みとエラーなどがすべて記録される。

    それから、クラッシュ時のログでおなじみの
    C:\Users\ユーザ名\AppData\Local\PAYDAY 2\crashlog.txt


    あとは沢山のLuaのリファレンスと沢山のMODのソースを見ながらいじる・・・。
    しかし、実行するのにいちいちPD2を立ち上げなければならない、Luaを変更して再読み込みするためにはPD2を再起動しなければならないと面倒・・・。

    理解していないけれども一応思った通りの動きをするようにはなった。

    スキルとパークとプレイ中のジョブ名あたりも記録できるようにしたい。
    教えて先生。

    このMODを入れてから
    Application has crashed: access violation
    が増えた気がするのでしばらく様子見。

    mod/PD2BLAp/lua/BaseMod.lua

    if RequiredScript == "lib/network/base/networkpeer" then
    --設定
    if not _G.PD2BLAp then
    _G.PD2BLAp = _G.PD2BLAp or {}
    PD2BLAp.Colors = {"ff0000", "00ff04", "1a64f6"} -- RGB
    PD2BLAp.settings = {
    file_path = "mods/PD2BLAp/ConnectionIDList.txt",
    header_list = "Time,Unixtime,SteamID64,Name",
    }
    end


    --ファイルの存在
    function PD2BLAp:FileExists(path)
    local fh = io.open(path, "rb")
    if fh then fh:close() end
    return fh ~= nil
    end

    --デバッグメッセージ
    function PD2BLAp:Debug_Message(message, color, message2)
    if message2 then
    managers.mission._fading_debug_output:script().log(message2, Color(color))
    end
    managers.mission._fading_debug_output:script().log(message, Color(color))
    end

    --Hooks
    Hooks:Add("NetworkManagerOnPeerAdded", "PD2BLAp:PeerAdded", function(peer, peer_id)
    --まずファイルが存在するか確認する
    file_exist_flag = PD2BLAp:FileExists(PD2BLAp.settings.file_path)

    --1行目は項目タイトル
    --1行に1 ID情報を格納
    --ファイルが存在しない場合は新しくファイルを作る
    if file_exist_flag == false then
    f = io.output(PD2BLAp.settings.file_path)
    f:write(PD2BLAp.settings.header_list.."\n")
    f:close()
    else
    f = io.open(PD2BLAp.settings.file_path , "r")
    line = f:read()
    print(line)
    --読み込んだ1行目の項目が最新のものでなければ最新のものに置き換える
    if line ~= PD2BLAp.settings.header_list and line ~= PD2BLAp.settings.header_list.."b" then
    text_all = {} --ファイルの内容

    while true do
    text = f:read()
    table.insert(text_all , text)
    if text == nul then break end
    end
    f:close()

    --書き込み内容を保持しつつ、項目タイトルを更新する
    f = io.open(PD2BLAp.settings.file_path , "w")
    f:write(PD2BLAp.settings.header_list.."\n")
    for i=1, #text_all, 1 do
    f:write(text_all[i].."\n")
    print(text_all[i])
    end
    end

    f:close()
    end

    f = io.open(PD2BLAp.settings.file_path , "a+") --追記で開きなおす

    --書き込む文字列
    write_line = os.date()..","..os.time()..","..peer:user_id()..","..peer:name()

    --PD2BLAp:Debug_Message(write_line, PD2BLAp.Colors[2])

    f:write(write_line.."\n")
    f:close()

    end)
    end
    スポンサーサイト

    最近の進捗

    PAYDAY2 Blacklist Assist

    最近更新中のPAYDAY2のBlacklist MODの補助ツール
    ※特に理由が無い場合は最新バージョンを使用してください。


    ━━━━━━━━━━━━━━━━━━━━━━━━━━━

    PD2BLAの進捗

    ランキング機能は相変わらず放置中、いろいろ考えてはいるのだけれど、実装するのに必要な知識が足りないことと、拡張性を持たせて実装したいので悩み中。

    今後バックグラウンドで自動判定することを考えると、Warning判定が出たときに何か音を鳴らすとかしてもいいかもしれない。

    細かい変更だけども、AchievementDetailのバーの位置を変更して常に全ての行が見えるようにした。
    バーと表が被っているのがのがデザイン的に不恰好だっただけ。
    ついでにスクリーンショットのメニューも追加。
    手軽に絞り込みできる機能をつける予定。(UnlockTime LIKE 'XXX'のXXXを自動的に挿入するような)

    76561198147063532_AchievementDetail_20160305162153.png


    あとはフレンドを一括でチェックする機能。
    ただし、こちらはSteamとPD2StatsAPIに連続アクセスするので没になるかも。
    一応最低でも1秒以内に連続アクセスすることは無いように配慮しているが、それでいいのか?
    SteamBan情報は数百のIDに対して1度で取得できるが、AchievementとPD2Statsは1IDに対して1度のアクセスが必要。

    PD2BLA1_15_0_0_1.jpg
    (今話題のこの方!ちなみにフレンドが被害にあったので間違いなく黒。
    この人が出現するとSWATは死ぬ、残らず死ぬ。)

    PD2でユーザが接続を要求したときにバックグラウンドで勝手に判定する機能を考え中。
    プロセス間通信にはいろいろ方法があるけれど、ログを後でも見られたほうがいいかなということでテキストファイルに出力していく形で実装しようかと。
    そうなると、PD2側にMODを導入してもらわないといけなくなるが、Luaの勉強にもなるしいいかなーと、書き始めたはいいもののぜんぜん知らない言語だとはかどらないはかどらない。

    でも、思い通りに動くと楽しいね!
    実行もコマンドラインですぐ、実行速度も速いし。

    ということで、とりあえずLuaでちょろっと書いてみた。
    C#ならもっとコンパクトに書けるのに、うーん。

    ファイルを開いて、閉じて、開いて、閉じて、開く!
    すごく無駄!
    どうすれば・・・。
    (あと、Syntaxのハイライトされない)


    --http://symfoware.blog68.fc2.com/blog-entry-454.html

    --http://lua.tips/index.php?Lua%20implements_func_io
    -- 対象のfilenameのファイルが存在するかどうか。
    -- 対象のファイルのフルパス。もしくは、カレントからの相対パス。
    --戻り値bool
    function io.file_exists(path)
    local fh = io.open(path, "rb")
    if fh then fh:close() end
    return fh ~= nil
    end

    br = "n" -- 改行
    header_list = "SteamID64,Name" --出力する項目タイトル

    --まずファイルが存在するか確認する
    file_path = "ConnectedList.txt"
    file_exist_flag = io.file_exists(file_path)

    --1行目は項目タイトル
    --1行に1 ID情報を格納

    --ファイルが存在しない場合は新しくファイルを作る
    if file_exist_flag == false then
    f = io.output(file_path)
    f:write(header_list..br)
    f:close()
    else
    f = io.open(file_path , "r")
    line = f:read()
    print(line)
    --読み込んだ1行目の項目が最新のものでなければ最新のものに置き換える
    if line ~= header_list and line ~= header_list..br then
    text_all = {} --ファイルの内容

    while true do
    text = f:read()
    table.insert(text_all , text)
    if text == nul then break end
    end
    f:close()

    --書き込み内容を保持しつつ、項目タイトルを更新する
    f = io.open(file_path , "w")
    f:write(header_list..br)
    for i=1, #text_all, 1 do
    f:write(text_all[i]..br)
    print(text_all[i])
    end
    end

    f:close()
    end

    f = io.open(file_path , "a+") --追記で開きなおす
    --ID情報の書き出し処理
    f:close()
    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。