2016-10-05 18 views
1

gmod用のテストサーバーがあります。私はそれを起動するときに優れた動作するスクリプトをコーディングしましたが、それには多くの短所があります。Garry's Mod - Luaスクリプトを起動した後にPropsが起動しない

私は、「!speed fast」や「!speed normal」のようなコマンドを入力すると、単にユーザー速度を変更するスクリプトを作成しようとしました。それは次のようになります。

table = {} 
table[0]="!help" 
table[1]="!speed normal" 
table[2]="!speed fast" 
table[3]="!speed sanic"  
hook.Add("PlayerSay", "Chat", function(ply, message, teamchat) 
    if message == "!speed normal" then 
     GAMEMODE:SetPlayerSpeed(ply, 250, 500) 
    elseif message == "!speed fast" then 
     GAMEMODE:SetPlayerSpeed(ply, 1000, 2000) 
    elseif message == "!speed sanic" then 
     GAMEMODE:SetPlayerSpeed(ply, 10000, 20000) 
    elseif message == "!help" then 
     for key, value in pairs(table) do 
      PrintMessage(HUD_PRINTTALK, value) 
     end 
    end 
end) 

スクリプトが彼らのいずれかのタイプ、または「スピードsanic!の」チャットであ​​れば、ユーザーは変速見ることができるように、「スピードノーマル!」「スピード速いです!」。このスクリプトにはすべてのコマンドのテーブルも含まれており、ユーザーがチャットで「!help」と入力した場合に表示されます。

私はスクリプトを起動するとすぐれていますが、起動した後にプロップをスポーンしようとすると、プロップは生成されません。私が最初に小道具をスポーンしても、その小道具を起動して小道具を "元に戻す"ようにしようとしても、 "元に戻す"機能は動作しません!このスクリプトは、Sandboxのゲームモードを完全に無用にしています。なぜなら、あなたは小道具をスポーンすることさえできないからです!

私はインターネット上で少し前に検索しようとしましたが、まだこのようなものを見つけたわけではないので、誰かが解決策を得たことを願っています!助けてください

+0

キーワードを強調表示できるテキストエディタを使用する必要があります。 Luaの必須ライブラリを自分のもので上書きすることはありません。あなたのコードスニペットから、あなたのテーブルがグローバルでなければならない理由は何もわかりません。可能であれば、ローカル変数を使用してください。 – Piglet

答えて

2

私はあなたがグローバルtableを上書きしているので、これが起こっていると思います。 The table library contains helper functions for tables。テーブルtableの名前をcommandsなどの名前に変更してみてください。他のスクリプトやライブラリのように他のものに干渉しないように、local commandsと宣言して他のグローバルを置き換えることはお勧めします。

はまた、余分なヒントとして、Luaのテーブルが1でインデックス化されている、ようにあなたの名前を変更し、テーブルを宣言することができます:あなたは、通常のforでそれを反復処理することができ

local commands = { 
    "!help", 
    "!speed normal", 
    "!speed fast", 
    "!speed sanic", 
} 

for index = 1, #commands do 
    PrintMessage(HUD_PRINTTALK, commands[index]) 
end 

私の意見では、これは少しクリーナーになると思います。

関連する問題