実現したいこと
ここに実現したいことを箇条書きで書いてください。
- 作成している格闘ゲームを、Steamにてネットワーク対戦ができるようにしたい。
前提
ここに質問の内容を詳しく書いてください。
Ikemen_GO(Go言語+Lua)をベースに作成している対戦格闘ゲームがあり、それは元々ポート開放によるネットワーク対戦の機能を有している(直接IPアドレスを入力して繋げる)のですが、それをSteamにてリリースするにあたり、Steam match makingを利用する乃至Steam IDにて繋げられるように変更したい状態です。
Steamworks SDKはC++であると聞き及んでいますので、互換性のあるLuaスクリプトを変更しようとしています。
良い記述方法を教えていただけるとありがたいです。
発生している問題・エラーメッセージ
external/script/main.lua:4: module luasteam not found: no field package.preload['luasteam'] CreateFile .\luasteam.lua: The system cannot find the file specified. CreateFile C:\Users\00251110\Desktop\MGCMCE\lua\luasteam.lua: The system cannot find the path specified. CreateFile C:\Users\00251110\Desktop\MGCMCE\lua\luasteam\init.lua: The system cannot find the path specified., stack traceback: [G]: in function 'require' external/script/main.lua:4: in main chunk [G]: ?
external/script/main.lua:2709: attempt to index a non-table object(nil) with key 'networkingSockets' stack traceback: external/script/main.lua:2709: in function <external/script/main.lua:2706> external/script/main.lua:3225: in function 'loop' external/script/main.lua:3214: in function 'loop' external/script/main.lua:4181: in main chunk [G]: ?
該当のソースコード
Lua
1main = {} 2 3-- STEAM版 4 local Steam = require 'luasteam' 5 6-- ~中略~ 7 8 --SERVER CONNECT 9 ['serverconnect'] = function(t, item) 10 11 -- Steam版 12 local socket = Steam.networkingSockets.connectP2P(main.f_extractText(motif.title_info.connecting_join_text, t[item].displayname, config.IP[t[item].displayname]), 0) 13 14 if main.f_connect(config.IP[t[item].displayname], main.f_extractText(motif.title_info.connecting_join_text, t[item].displayname, config.IP[t[item].displayname])) then 15 synchronize() 16 math.randomseed(sszRandom()) 17 main.f_cmdBufReset() 18 main.menu.submenu.server.loop() 19 replayStop() 20 exitNetPlay() 21 exitReplay() 22 23 Steam.networkingSockets.closeConnection(socket) 24 25 end 26 return nil 27 end, 28 29 --SERVER HOST 30 ['serverhost'] = function(t, item) 31 32 -- Steam版 33 local socket = Steam.networkingSockets.createListenSocketP2P(0) 34 35 if main.f_connect("", main.f_extractText(motif.title_info.connecting_host_text, getListenPort())) then 36 37 Steam.networkingSockets.acceptConnection(socket) 38 39 synchronize() 40 math.randomseed(sszRandom()) 41 main.f_cmdBufReset() 42 main.menu.submenu.server.loop() 43 replayStop() 44 exitNetPlay() 45 exitReplay() 46 47 Steam.networkingSockets.closeConnection(socket) 48 Steam.networkingSockets.closeListenSocket(socket) 49 50 end 51 return nil 52 end,
IPアドレスを入力してネットワーク対戦が動く元々の記述は下記のようになっています。
Lua
1 --SERVER CONNECT 2 ['serverconnect'] = function(t, item) 3 if main.f_connect(config.IP[t[item].displayname], main.f_extractText(motif.title_info.connecting_join_text, t[item].displayname, config.IP[t[item].displayname])) then 4 synchronize() 5 math.randomseed(sszRandom()) 6 main.f_cmdBufReset() 7 main.menu.submenu.server.loop() 8 replayStop() 9 exitNetPlay() 10 exitReplay() 11 end 12 return nil 13 end, 14 --SERVER HOST 15 ['serverhost'] = function(t, item) 16 if main.f_connect("", main.f_extractText(motif.title_info.connecting_host_text, getListenPort())) then 17 synchronize() 18 math.randomseed(sszRandom()) 19 main.f_cmdBufReset() 20 main.menu.submenu.server.loop() 21 replayStop() 22 exitNetPlay() 23 exitReplay() 24 end 25 return nil 26 end,
試したこと
処理を行なっているmain.luaに、Luasteam( https://luasteam.readthedocs.io/en/stable/ )という、Steamworks SDKの機能をLua側で記述できるリポジトリ(luasteam.dll)を呼び出しさせて処理を試みようとしていますが、そもそも呼び出し時点で失敗している状態です。
(Luasteam側の案内に従い、main.luaと同フォルダ内(MGCMCE\external\script)に、luasteam.dllとリネームしたwin64_luasteam.dllおよび、Steamworks SDKからコピーしたsteam_api64.dllを配置した状態で、上記コードのように呼び出しを試みています)
呼び出しをコメントアウトすると当然ながら、ホストとしてネットワーク対戦を立ち上げようとした瞬間に落ちてしまいます。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
Ikemen_GO v0.99.0-rc.1 ( https://github.com/ikemen-engine/Ikemen-GO ) を使用しています。
使用しているパソコンとOSは64bitのWindows 10 Proです。Ikemen_GOの通常の利用自体は問題なくできています。
回答1件
あなたの回答
tips
プレビュー