2016-04-06 10 views
0

を誤る実行 - これはROBLOX自身によって作られたコードの一部です:、私は、これら2つのスクリプトを実行すると、それは完璧に実行製作中ROBLOXモジュールは

-- Setup table that we will return to scripts that require the ModuleScript. 
    local PlayerStatManager = {} 

    -- Table to hold all of the player information for the current session. 
    local sessionData = {} 

    -- Function the other scripts in our game can call to change a player's stats. This 
    -- function is stored in the returned table so external scripts can use it. 
    function PlayerStatManager:ChangeStat(player, statName, changeValue) 
     sessionData[player][statName] = sessionData[player][statName] + changeValue 
    end 

    -- Function to add player to the sessionData table. 
    local function setupPlayerData(player) 
     sessionData[player] = {Money = 0, Experience = 0} 
    end 

    -- Bind setupPlayerData to PlayerAdded to call it when player joins. 
    game.Players.PlayerAdded:connect(setupPlayerData) 

    -- Return the PlayerStatManager table to external scripts can access it. 
    return PlayerStatManager 
-------------------------------------------------------------------------------- 

-- Require ModuleScript so we can change player stats 
local PlayerStatManager = require(game.ServerStorage.PlayerStatManager) 

-- After player joins we'll periodically give the player money and experience 
game.Players.PlayerAdded:connect(function(player) 
    while wait(2) do 
     PlayerStatManager:ChangeStat(player, 'Money', 5) 
     PlayerStatManager:ChangeStat(player, 'Experience', 1) 
    end 
end) 

ChangeStat関数内print(sessionData[player][statName])を追加するが、ときに私モジュールスクリプトのgame.Players.PlayerAdded:connect(setupPlayerData)部分を削除しましたが、動作を停止しました。モジュールスクリプトは呼び出されずにコードを実行しませんが、その場合、プレーヤーが既に追加されているので、game.Players.PlayerAdded:connect(setupPlayerData)部分が遅れて機能しないようにしてください。

+0

':connect(setupPlayerData)'行を削除しました。何が起こったのですか?何が正確に機能しなくなったのですか何かエラーがありましたか?これがなければ、変更しようとするテーブルが正しく作成されていないため、 'ChangeStat'の呼び出しでエラーが発生することが予想されます。 –

+0

新しいプレイヤーがセットアップ機能を呼び出すことなく入力したときにモジュールが実行されますか? –

+0

モジュールがロードされると、モジュールコード(関数などの外)が実行されます。他のイベントが発生したときに呼び出されるコールバック関数を設定する方法です。 'PlayerAdded'イベントに追加された*他の*コールバックが正しく動作する必要がある内部データ構造体を設定する' PlayerAdded'イベント用に設定されたコールバックを削除しました。基本的には、ステップ1を3ステッププロセスから削除したので、ステップ2と3を壊しました。 –

答えて

3

requireは、必要なコードを実行します。 そうでない場合は、return PlayerStatManagerステートメントが実行されないので、requireでテーブルを取得することができません。正しく初期化されない追加プレーヤーの原因となります

-- Bind setupPlayerData to PlayerAdded to call it when player joins. 
    game.Players.PlayerAdded:connect(setupPlayerData) 

を取り除く結果として

。これは基本的に言う:新しいプレーヤーが追加されたら、setupPlayerDataを呼び出します。 ここではsetupPlayerDataといいます。新しい統計情報をplayerに与えます。

あなたがこのラインを削除したときに、誰も統計情報を持っていません。統計情報がない場合は、値を増やすことはできません...

明らかに、コードを変更した理由を理解できませんでした。そのため、あなたの変更がなぜ問題を引き起こすのか理解できません。

あなたが理解していないシステムを変更した場合、あなたは幸運かもしれませんが、ほとんどの場合、完全に失敗します。

+0

コードを理解していないという不必要なコメントまで丁寧に回答してください。 –

関連する問題