Kernell Posted March 20, 2011 Share Posted March 20, 2011 Собственно я знаю, что в Lua нет классов, но они могут быть "эмулированы" с помощью Lua-таблиц или userdata. Я с Lua имел дело только в сталкере, попытался сделать всё привычным образом.. Но так как в сталкере все классы уже созданны, в MTA мне пришлось делать велосипед самому D: local rightclick_menu = { }; local rightclick_menu_meta = { __index = rightclick_menu }; setmetatable( {}, rightclick_menu_meta ); function rightclick_menu:__init() -- вызываю из main() self:InitControls(); -- создаём элементы GUI self:InitCallBacks(); -- добавляем эвенты end function rightclick_menu:InitControls() self.list = self:CreateGridList( 0, 0, .13, .08, true ); self.list:SetSelectionMode ( 0 ); self.list:SetSortingEnabled ( false ); self.list_Column = self.list:AddColumn( " ", .8 ); self.list:SetVisible ( false ); end function rightclick_menu:InitCallBacks( ) -- добавляю эвент на GridList addEventHandler( "onClientGUIClick", self.list, self:OnList_clicked ); -- function arguments expected near ',' end function rightclick_menu:OnList_clicked( button, state ) if button == "left" and state == "up" then -- бла бла бла end end function main() if gui.rc_dlg == nil then -- массив gui ={} создан в главном файле ресурса. (client-side естественно) gui.rc_dlg = rightclick_menu(); gui.rc_dlg:__init(); end end addEventHandler( "onClientClick", root, main ); В общем проблема караз в этом варнинге ( на строке 23 ) из-за которого ничего не работает и остановилось продвижение.. Просьба не ругаться, ибо с Lua работал в сталкере и то давно, поэтому осталось много привычек оттуда и подзабытый синтаксис Lua Link to comment
lil Toady Posted March 20, 2011 Share Posted March 20, 2011 "self:OnList_clicked" - это ты уже вызываешь функцию, просто "self.OnList_clicked" в addEventHandler. Разница в том что функции вызванные с двоеточием передают объект на котором они вызваны в первом аргументе, то есть self:OnList_clicked() это то же самое что self.OnList_clicked ( self ) или rightclick_menu.OnList_clicked ( self ) Link to comment
Kernell Posted March 20, 2011 Author Share Posted March 20, 2011 Точно! Оказалось малейшая опечатка на которую я даже внимания не обратил Спасибо! Link to comment
MX_Master Posted March 21, 2011 Share Posted March 21, 2011 табличная эмуляция выглядит проще, именно поэтому ее юзаю, дабы было понятно для других скриптеров, а не только мне названиеКласса = {} function названиеКласса.создатьОбъект ( начальныеПараметрыОбъекта ) local self = {} -- объект класса local приватнаяПеременная = 123 self.публичнаяПеременная = 456 local function приватныйМетодОчисткиТаблицы ( таблица ) local индекс = next(таблица) while индекс do if type(таблица[индекс]) == 'table' then приватныйМетодОчисткиТаблицы(таблица[индекс]) end таблица[индекс] = nil индекс = next(таблица, индекс) end end function self.__конструктор ( начальныеПараметрыОбъекта ) приватнаяПеременная = начальныеПараметрыОбъекта end function self.__деструктор ( ) приватныйМетодОчисткиТаблицы(self) приватнаяПеременная = nil end self.__конструктор( начальныеПараметрыОбъекта ) -- запуск конструктора function self.публичныйМетод ( ... ) outputChattBox( 'приватнаяПеременная = ' .. tostring(приватнаяПеременная) ) end return self end function названиеКласса.уничтожитьОбъект ( объект ) объект.__деструктор() объект = nil end local мойОбъект = названиеКласса.создатьОбъект( 777 ) мойОбъект.публичныйМетод() названиеКласса.уничтожитьОбъект( мойОбъект ); мойОбъект = nil это так, чистая фантазию должна быть у скриптера. На самом деле из таблиц можно создавать свою уникальную логику и иерархию, непохожую на классы, объекты и прочий стандартный набор. Link to comment
Easterdie Posted March 21, 2011 Share Posted March 21, 2011 вооооовааа, переделай то, про чо тебе говорят. ты кодер - я генератор идей, пиши мне, я тебе расскажу кучу интересных мыслей. Link to comment
Kernell Posted March 22, 2011 Author Share Posted March 22, 2011 А вообще как можно luabind подключить к MTA ? А то я что-то разобраться не могу.. Link to comment
MX_Master Posted March 22, 2011 Share Posted March 22, 2011 ты подробнее расскажи, тада и ответим.. чую пахнет это дополнительным модулем Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now