2016-03-24 2 views
-1

Я пытаюсь создать плагин, но я не могу получить доступ к возвращенному классу игрока вне функции GetPlayer().Возвращение класса в Lua

Это GetPlayer Fuction:

function GetPlayer(Player_To_Find) -- This is the function we use to verify the user exists, It will return the user class if the user exists 
    LOG("Finding " .. Player_To_Find) --False if they do not exist 
    local Found = false 
    local FindPlayer = function(TargetPlayer) 
     if (TargetPlayer:GetName() == Player_To_Find) then 
      Found = true 
      print("Found " .. TargetPlayer:GetName()) 
      return TargetPlayer 

     end 
    end 
    cRoot:Get():FindAndDoWithPlayer(Player_To_Find, FindPlayer) 
    if Found == true then return TargetPlayer else return false end 
end 

Если я пытаюсь вызвать класс TargetPlayer после того, как вернулся, используя этот фрагмент кода:

TargetPlayer=GetPlayer(Target) 
if TargetPlayer ~= false then 
    LOG(TargetPlayer:GetName()) 

Это будет завершаться с ошибкой:

attempt to index global 'TargetPlayer' (a nil value) 

Может ли кто-нибудь указать мне в правильном направлении? Это заняло у меня много времени, и я пришел в себя.

+0

Плагин для чего именно? –

ответ

2

Параметр TargetPlayer находится только в области действия в теле функции. Значение TargetPlayer в последней строке GetPlayer относится к глобальной переменной, которая, по-видимому, несуществующая и, следовательно, nil.

Объявите локальную переменную в функции GetPlayer, установите его в теле функции FindPlayer, и вернуть его в конце из GetPlayer (также не возвращаются false, если игрок не может быть найден, возврат nil, который семантически означает «ничего»).

+0

Большое спасибо! Не могу поверить, что я пропустил это. – AB49K