Jump to content
Alloder.pro: about Allods with love
Search In
  • More options...
Find results that contain...
Find results in...

New program for writers

We turn from quantity to quality and tell you how we will supplement the Allods Team program with rewards in rubles.


The new Updater

Let us to introduce the new addon updater software and to share the details

Read more

Alloder 2.0

We have started the process of project evolve, and this relates not only, and not even primarily of the site's view

Read more

Помогите. Param 1 not a class.

Guest kSky7000

Recommended Posts

Guest kSky7000

Привет! Нужна помощь.

Есть кусок кода:

function OnEventTargetChanged()

local targetId = avatar.GetTarget() or unit.GetPrimaryTarget( avatar.GetId() )

local Gibberling = unit.GetTrioInfo( targetId )

if not targetId or not Gibberling or not unit.IsPlayer( targetId ) then

wtMainPanel:Show( false )



local trio = unit.GetTrioInfo( targetId )

if trio then

--common.LogInfo( common.GetAddonName(), "Ник Второго: ", trio.name2, ", Ник третьего: ", trio.name3 )

wtNickText:SetVal( "value", trio.name2 )

wtNickkText:SetVal( "value", trio.name3 )


wtMainPanel:Show( true )


В игре все работает идеально. Но если открыть лог файл mods.txt, то там постоянно появляется ошибка:

Error: addon Trio:   func: GetTrioInfo, field, line: -1, defined: C, line: -1,  [C] 

Error: addon Trio:     func: OnEventTargetChanged, global, line: 18, defined: Lua, line: 16,  [string "Mods/Addons/Trio/ScriptTrioInfo.lua"] 

Error: addon Trio: UI::LuaUnitGetTrioInfo: param 1 not a class GMUIHelper::ObjectId (type: nil), details: int __cdecl UI::LuaUnitGetTrioInfo(struct lua_State *) 

В lua я сильно не разбираюсь, поэтому прошу помочь. Объясните почему появляется ошибка и как от неё избавиться?

Link to comment
Share on other sites

Из доков:

unit.GetTrioInfo( unitId )

-- параметры:

unitId: ObjectId ( not nil ) -- идентификатор игрока

Когда цели нет

targetId = nil
unit.GetTrioInfo( targetId )
вызовет ошибку. Избавиться от нее просто:

local Gibberling = targetId and unit.GetTrioInfo( targetId )
Link to comment
Share on other sites

а что вообще будет тогда когда and используется? - если там НИЛ то будет 2е значение? а если не НИЛ то первое? тоесть это аналогично:


local Gibberling

if targetId ~= nil then

    unit.GetTrioInfo( targetId )


   Gibberling = targetId


а если вместо and использовать or:

local Gibberling = targetId or unit.GetTrioInfo( targetId )
Link to comment
Share on other sites

Из документации по ЛУА

Логические операции

В Lua это операции and , or , и not . Так же, как и в управляющих конструкциях (§2.4.4), все логические операции рассматривают false и nil как ложь , а все остальное как истину .

Операция отрицания not всегда возвращает false или true . Операция конъюнкции and возвращает свой первый параметр, если его значение false или nil ; в противном случае, and возвращает второй параметр. Оператор дизъюнкции or возвращает первый параметр, если его значение отлично от nil и false ; в противном случае, or возвращает второй параметр. И and и or вычисляют второй операнд только в случае необходимости. Примеры:

10 or 20 --> 10

10 or error() --> 10

nil or "a" --> "a"

nil and 10 --> nil

false and error() --> false

false and nil --> false

false or nil --> nil

10 and 20 --> 20

(В данном руководстве, --> указывает на результат предшествующего выражения.)

Короче, твое 1-е предположение верно, во 2-м вылезет ошибка, если targetId==nil ;)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Create New...

Important Information

By using our site you agree to the Terms of Use