mumie 2 Опубликовано 18 Мая 2013 Привет, извиняюсь за глупый вопрос, но как определить динамически позицию, левел и гэйм вертексы заспавненного объекта?А теперь поясню:В инвентаре есть item мы "съедаем" его и он спавниться на позиции ГГ, иак вот как можно с течением времени заспавнить на эти координаты другие объекты? Знаю что можно сделать так: local pos = db.actor:position() local vid = db.actor:level_vertex_id() local gvid = db.actor:game_vertex_id() local obj=alife():create(spawn_item, pos, vid, gvid) obj:position() ...но с obj:level_vertex_id() и obj:game_vertex_id() не срабатывает, и вообще нужно обратиться к координатам заспавненного объекта в другой функции запускающейся таймером. Весь код готов, в этом ничего сложного нет, а вот к динамическим координатам обратиться мозгов не хватает.Заранее спасибо! Поделиться этим сообщением Ссылка на сообщение
mumie 2 Опубликовано 29 Мая 2013 (изменено) Здравствуйте всем, возникла проблемка с худом образовалась, пытаюсь прибиндить в инвентарь показатели объема вещей, но вот не задача, метод который я использую работает в SoC но ругается в CoP, говорит что не знает что такое level.main_input_receiver() local btn=nil local uWnd function Init() uWnd = level.main_input_receiver() if btn or not uWnd then return end local iPosX, iPosY=432, 285 btn = CUIStatic() btn:Init(iPosX, iPosY, 150, 40) btn:InitTexture("ui\\ui_button_02") btn:SetAutoDelete(false) uWnd:AttachChild(btn) btn:SetText("Vol 0.0 / 0.0") btn:SetTextAlign(0) btn:SetTextX(5) btn:SetTextY(10) btn:SetFont(GetFontGraffiti22Russian()) btn:SetTextColor(255,231,153,22) ShowVolume() end function ShowVolume() local vol_M = 30 --Для теста я написал значения от балды, просто чтобы проверить вывод формата чисел local vol_c = 31 --Впоследствии создам класс для подсчета объема всех предметов if btn then local a,r,g, b = 255,231,153,22 local txt if (vol_c >=vol_M ) then a,r,g, b = 255, 255, 0, 0 end txt = string.format("Vol %.2f / %.1f", vol_c, vol_M) btn:SetTextColor(a,r,g, btn:SetText(txt) end end function HideVolume() if btn and uWnd then uWnd:DetachChild(btn) btn = nil uWnd = nil end end Может существует альтернатива? Заранее очень бладгодарен! Изменено 29 Мая 2013 пользователем mumie Поделиться этим сообщением Ссылка на сообщение
mumie 2 Опубликовано 30 Мая 2013 (изменено) @MalandrinusЭто если использовать метод AddDialogToRender и RemoveDialogToRender? @Viнt@rь, Я уже разобрался, когда забрел в тему Справочника по функциям и классам, но когда я путешествовал по луа_хелп, я как раз таки нашел все эти методы. Извините может я что то путаю, но вот: Это из моего S.T.A.L.K.E.R. CoP: C++ class CUIStatic : CUIWindow { CUIStatic (); function SetWindowName(string); function GetWndPos(CUIWindow*); function TextControl(); function SetAutoDelete(boolean); function GetTextureRect(); function AttachChild(CUIWindow*); function SetStretchTexture(boolean); function SetWndPos(vector2); function SetTextureRect(Frect*); function SetWndSize(vector2); function DetachChild(CUIWindow*); function SetPPMode(); function WindowName(); function IsShown(); function SetWndRect(Frect); function Show(boolean); function GetHeight() const; function GetWidth() const; function InitTexture(string); function IsEnabled(); function ResetPPMode(); function Enable(boolean); function IsAutoDelete(); }; Ну и где ты здесь нашёл метод main_input_receiver? ColR_iT Изменено 30 Мая 2013 пользователем ColR_iT Поделиться этим сообщением Ссылка на сообщение
mumie 2 Опубликовано 31 Мая 2013 @Charsi, А какой промежуток времени должен пройти с момента открытия движкового окна(на примере инвентаря)? И можно ли справиться обычным флажком? Поделиться этим сообщением Ссылка на сообщение
mumie 2 Опубликовано 31 Мая 2013 @Viнt@rь, Ну он и не утверждает обратного, просто я сам уже дня три мучаюсь с CoP'ом, и просто не доходило о вырезанности метода, потом когда залез на форум понял что это не сработает, затем стал пытаться пробовать и мучиться с AddDialogRender и Add(Get)CustomStatic, и так же ничего не выходило( Затем совсем отчаявшись уже написал сюда, и вот дали совсем простой и в тоже время действенный способ. Charsi, премного благодарен) Поделиться этим сообщением Ссылка на сообщение
mumie 2 Опубликовано 4 Июня 2013 @dukekan,Скорее всего логическая, так как на синтаксис, движок в лог выпечатывает имя "убитого" скрипта, или функции что довольно редко Поделиться этим сообщением Ссылка на сообщение
mumie 2 Опубликовано 5 Июня 2013 (изменено) @Viнt@rь,В виду того что GSC очень сильно урезали класс CUIStatic, видимо был введен новый класс, CUILines,который расширяет возможности CUIStatic.Вот как выглядит CUILines: C++ class CUILines { function GetText();function SetTextST(string);function SetTextColor(number);function SetText(string);function SetFont(CGameFont*);function SetElipsis(boolean); }; Как я понимаю function SetTextColor должен быть записан в виде wnd:SetTextColor[a,r,g,b] (на самом деле в круглых, но движок сайта думает что это смайлы) и должен служить альтернативой "статиковскому" SetTextColor'у Я сам правда не пробовал еще, (мне бы в мой рюкзак тоже понадобилось изменять цвет при приближении текущего объема к максимальному, переходить зеленый->желтый->красный), если попробуешь напиши в ЛС о результатах, буду благодарен) @Viнt@rь,черт, кажется я понял)) ты только о текстурах) Изменено 5 Июня 2013 пользователем mumie Поделиться этим сообщением Ссылка на сообщение
mumie 2 Опубликовано 10 Марта 2014 @Dennis_Chikin,попробуй делать проверки на жизнь/не жизнь монстров, думаю только это нужно делать глобальными апдейтами(правда думается мне, что это "секс двух друзей" в чистом виде). Хотя на самом деле не вижу проблемы, в том, что они "мертвяком" схемы переключают. Что именно тебя беспокоит? Поделиться этим сообщением Ссылка на сообщение
mumie 2 Опубликовано 13 Марта 2014 (изменено) Сразу извинюсь, за немного глупый вопрос. Проблема в том, что бы забить все id объектов инвентаря в таблицу и на всякий пожарный еще и их состояние, создал две идентичные таблички и на одной и той же итерации, добавляю по объекту и его состоянию параллельно в обе таблички соответственно, но когда пытаюсь проверить и вывести, состояние у всех объектов равно 1, не смотря на то, что там есть изодранный в хламину сталкерский костюм, еле живой шлем и побитый автомат... --Вот функция загрузки таблиц local tItems={} local tCond={} function Actor_Has_ListItems() local cnt = db.actor:object_count() for i=0, cnt-1 do local item = db.actor:object(i) local sobj = alife():object(item:id()) if sobj then table.insert(tItems,item) table.insert(tCond,item:condition()) end end end --Этой я проверяю состояние function test_t(n) text="His condition -"..tCond[n] news_manager.send_tip(db.actor,text , nil, nil, 30000) end n-параметр, который вводится с помощью горячих клавиш, На numpad'e(1-9).То есть, могу вывести состояние 9 различных объектов их таблицы(теоретически). где я допустил ошибку? Заранее спасибо) Изменено 13 Марта 2014 пользователем mumie Поделиться этим сообщением Ссылка на сообщение
mumie 2 Опубликовано 13 Марта 2014 (изменено) ,нет, все так как и сказал. У всех предметов, кондишн по единице. Изменено 13 Марта 2014 пользователем mumie Поделиться этим сообщением Ссылка на сообщение
mumie 2 Опубликовано 20 Марта 2014 @kmsk,Состояние очень легко wpnObject:condition() -- это сохраняешь в переменную скажем cond wpnObject:set_condition(cond)-- это когда будешь спавнить свой ствол, просто дописываешь после спавна @kmsk,небольшой апдейт.проверить наличие аддонов можно так(не знаю прокатит ли, но в ЛУА_хелпе иного нет совсем ) weapon_scope_status() weapon_grenadelauncher_status() weapon_silincer_status() --Данная группа функций должна возвращать наличие или отсутствие аддонов на стволе. weapon_is_silencer() weapon_is_scope() weapon_is_grenadelauncher() -эта группа должна выводить тип, если есть. Могу ошибаться, лучше проверить. Поделиться этим сообщением Ссылка на сообщение
mumie 2 Опубликовано 21 Марта 2014 @kmsk, да, прости. Я думал ты уже разобрался с мутками клиентских объектов и работу с ними.@*Shoker*,Слушай, а не подскажешь как можно функционально прикрутить/снять к/у стволу/а аддоны? а то вот как раз не смог найти такой функции. Вывод, либо ее нет, либо не там искал, конечно же... Поделиться этим сообщением Ссылка на сообщение
mumie 2 Опубликовано 21 Апреля 2014 (изменено) Доброго времени суток всем форумчанам! Не так давно столкнулся с довольно специфичной проблемой, попробовал свои силы в примитивах ИК на x-ray (инверсной кинематики) и встал перед стеной вопроса. Возможно ли, получить "динамически" id НПС? Поясню, мы наводим прицел на НПС и нам игра(думаю все таки движок ибо в скриптах такого рода функций не встречал) имя НПС, его группировку и отношение к ГГ. Мне это нужно для следующего: есть id нпс, по которому мы вычисляем дистанцию до цели. После чего если, наша дистанция удовлетворяет условию мы проводим с НПС некие действия, скажем запускаем кат сцену с воровством, просто здороваемся и много чего еще чего душе угодно. Дабы не быть голословным и не нарушать правила темы, прилагаю ниже свою версию скрипта который должен выступить в роли решения моей проблемы function test_ik() local dist = se_obj:position():distance_to(db.actor:position()) for a = 1,65534 do local se_obj = alife():object(a) if se_obj and isStalker(se_obj) then if dist <= 3 then news_manager.send_tip(db.actor,"Hi GG!") end end end end Но в моем примере уже куча проблем, ибо таких сталкеров может быть 2, 3 и тп. Да и думаю это лишком будет нагружать "калькуляторы". У кого нибудь есть идеи по решению данного вопроса? Заранее благодарен! Изменено 21 Апреля 2014 пользователем mumie Поделиться этим сообщением Ссылка на сообщение
mumie 2 Опубликовано 21 Апреля 2014 @Desertir,скорее всего форум. у меня вроде ровный был. Но я же говорю, что этот скрипт тоже рабочий, но есть одно но, в радиусе может быть n колличество сталкеров, а мне нужен один, желательно тот на которого указан курсор(прицел), в этом и беда. Поделиться этим сообщением Ссылка на сообщение
mumie 2 Опубликовано 21 Апреля 2014 @*Shoker*,мда, мой косяк. ЗП. Спасибо за прямой ответ, буду рыскать ибо это направление одно из самых малоизученных, но наверное одно из перспективнейших, если конечно в стакере вообще можно говорить о перспективах Устное предупреждение. Правила форума, п. 2.1.1, также п.5 шапки темы. Благодарности, пожалуйста, в личку. Оффтопика, пожалуйста, не надо. Murarius Поделиться этим сообщением Ссылка на сообщение
mumie 2 Опубликовано 22 Апреля 2014 (изменено) @k01jan,ну я не помню стопроцентного метода, но возможно, тебе поможет "оживление трупов". Попробуй ставить совсем малое количество жизней, пусть хоть сотую часть, и затем тут же удаляй. Метка по идее должна пропасть после "оживления". И чем именно должно помочь это оживление ? dc Изменено 22 Апреля 2014 пользователем Dennis_Chikin Поделиться этим сообщением Ссылка на сообщение
mumie 2 Опубликовано 29 Мая 2014 (изменено) Привет, форумчане! Боюсь вопрос смешон до безумия, но я сам слеп и не вижу причин вылета(Идея такова: 1)Перебираем все и вся в инвентаре2)Записываем каждый элемент инвентаря в таблицу3)Удаляем все4)При необходимости спавним все элементы таблицы поочередно в инвентарь обратно local t_temp = {} function RI() local cnt = db.actor:object_count() for i = 1, cnt-1 do local se_obj = alife():object(i) if se_obj then table.insert(t_temp,1,se_obj:section_name()) end end end function SI() for a = 1, #t_temp do alife():create(t_temp[a], db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id()) end end Версия игры 1.6.2 хотя я думаю это не важно.Лог No such operator Изменено 29 Мая 2014 пользователем mumie Поделиться этим сообщением Ссылка на сообщение
mumie 2 Опубликовано 7 Августа 2014 Ребят, здравствуйте всем. Вопрос для кого то покажется банальным, но к сожалению на форуме я подобного не нашел. Как работать с прогресс баром? Если можно то пример, если нельзя, то хотя бы в двух словах, можно ли передавать туда значения на апдейте, что бы шкала росла? И вообще есть ли функции подобного рода? Просто если его не существует, придется писать вручную систему проверки значений и "дорисовки палочек" (замены статиков на худе) на апдейте, что весьма муторно, особенно если учесть что прогресс бары нужны в многих местах... Заранее спасибо. Поделиться этим сообщением Ссылка на сообщение
mumie 2 Опубликовано 8 Августа 2014 , а можно несколько глупый вопрос? У метода SetProgressPos есть ли максимальные значения? ну скажем как можно адекватно указать "шкале", что она должен расти скажем от нуля до 1000? Поделиться этим сообщением Ссылка на сообщение
mumie 2 Опубликовано 28 Февраля 2015 (изменено) Всем привет. Недавно столкнулся с проблемой, которую пока решить не могу(мозгов видимо нету). Может подскажите чего. Есть функция, которая работает со строкой(Она считывает значение соответствующего edit_box и записывает в переменную textstring). Далее запускается функция которая сверяет строку(значение textstring) с значениями элементов таблицы(в таблице написаны названия имеющихся в файле функций). Тут думаю всем понятно, что если имеется совпадение, то на этой итерации вызывается функция с именем которое есть в таблице. (На этом этапе все работает отлично). Вопрос состоит в том, что бы перенести эти функции(для экономии места в файле) в другой, тем самым создав, что то вроде "библиотеки". И вот здесь уже проблема. Ибо я додумался лишь до конструкции типа: local fun_table = { "QWERTY", "GETWEAPON", "GETMEDKIT" } function start_fun(textstring) local flag = 0 for i=1,#fun_table do if textstring == fun_table[i] then flag = 1 end end if flag == 1 then this[textstring]() flag = 0 end end Красным выделена сама конструкция вызова соответствующей функции. Как ее можно было модернизировать, что бы я мог вызывать таким "компактным" способом функции из другого файла? Заранее благодарю. P.S. Код детский, написан для примера. Извиняюсь, в пред просмотре было выделено) this[textstring]() --вот этот оператор меня интересует. Изменено 28 Февраля 2015 пользователем mumie Поделиться этим сообщением Ссылка на сообщение