Dennis_Chikin 3 658 Опубликовано 10 Марта 2014 Поделиться Опубликовано 10 Марта 2014 Ну, например, в этих самых схемах могут вызываться функции, которые дохлякам не поддерживаются. Далее, это просто бесцельная трата ресурсов. Самое поганое, что я не могу понять, откуда оно лезет, и при каких условиях. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
mumie 2 Опубликовано 13 Марта 2014 Поделиться Опубликовано 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 Ссылка на комментарий
Nazgool 250 Опубликовано 13 Марта 2014 Поделиться Опубликовано 13 Марта 2014 mumie Возьми в инвентарь только 4 сломанных предмета и проверь на numpad'e все 9 вариантов. Штук 5 должны быть равны 1 (детектор, фонарь, бинокль, пда, нож), остальные меньше 1. Ссылка на комментарий
mumie 2 Опубликовано 13 Марта 2014 Поделиться Опубликовано 13 Марта 2014 (изменено) ,нет, все так как и сказал. У всех предметов, кондишн по единице. Изменено 13 Марта 2014 пользователем mumie Ссылка на комментарий
Den-Stash 14 Опубликовано 16 Марта 2014 Поделиться Опубликовано 16 Марта 2014 Подскажите пожалуйста, можно ли умножить вектор на матрицу без танцев с бубном (В Lua_Help не нашел - приходится юзать промежуточную матрицу) Ссылка на комментарий
Graff46 598 Опубликовано 16 Марта 2014 Поделиться Опубликовано 16 Марта 2014 Доброго времени суток! Подскажите есть ли в классе CUIStatic метод поворота текстуры, (я искал не нашёл) платформа ТЧ? Ссылка на комментарий
Nazgool 250 Опубликовано 16 Марта 2014 Поделиться Опубликовано 16 Марта 2014 (изменено) Graff46 Прямого метода нет. Поворот возможен только при использовании *.xml файлов. Но способ скриптово управлять всем тем, что пока управляется только из *.xml существует. P.S. По крайней мере я это делаю. Только на вопрос КАК? пока не отвечу, т.к. расширение для этого ещё не дописал. Лень. Изменено 16 Марта 2014 пользователем Gun12 Ссылка на комментарий
Graff46 598 Опубликовано 16 Марта 2014 Поделиться Опубликовано 16 Марта 2014 Graff46 Поворот возможен только при использовании *.xml файлов. Мне метод когда статики выводят через *.xml не подходит, они под родной худ уходят и удаляются ф-цией level.hide_indicators() Я делаю статики методом таким local hud = CUIStatic()hud:Init(0,0,1024,768) hud:InitTexture("my\\krepost\\glass") hud:Show(true) hud:SetStretchTexture(true) get_hud():AddDialogToRender(hud) При таком подходе статики не пропадают при диалогах, открытом инвентаре, пда и так далее. Я хотел таким способом миникарту сделать, а для этого нужно вращать текстуру. Ссылка на комментарий
Nazgool 250 Опубликовано 16 Марта 2014 Поделиться Опубликовано 16 Марта 2014 Вращать не выйдет Ссылка на комментарий
Graff46 598 Опубликовано 16 Марта 2014 Поделиться Опубликовано 16 Марта 2014 Вращать не выйдет Понятно. Жаль. Ссылка на комментарий
7.9 174 Опубликовано 16 Марта 2014 Поделиться Опубликовано 16 Марта 2014 (изменено) ... есть ли в классе CUIStatic метод поворота текстуры... платформа ТЧ. CUIStatic : CUIWindow { CUIStatic (); ... void SetHeading(float angle); ...} http://www.amk-team.ru/forum/index.php?showtopic=7450&page=7#entry515301 Изменено 16 Марта 2014 пользователем 7.9 всё легко Ссылка на комментарий
Nazgool 250 Опубликовано 16 Марта 2014 Поделиться Опубликовано 16 Марта 2014 (изменено) Поворот возможен только при использовании *.xml файлов ) Если в xml не прописать heading=1 (а xml не устраивает)... Мне метод когда статики выводят через *.xml не подходит ..то повторю, - Вращать не выйдет Изменено 16 Марта 2014 пользователем Gun12 Ссылка на комментарий
kmsk 2 Опубликовано 18 Марта 2014 Поделиться Опубликовано 18 Марта 2014 Ребят помогите ... есть такая функция которая при взятии оружия меняет на актерское оружие... но проблева в том как передать аддоны и количество жизней оружию)))зарание спасибо если кто знает как это сделать))) function wpn_update() local wpn_actor = {"wpn_pm","wpn_pb","wpn_fort","wpn_apb","wpn_hpsa","wpn_beretta","wpn_walther","wpn_colt1911","wpn_ups","wpn_desert_eagle","wpn_desert_eagle_full","wpn_sig220","wpn_pp19","wpn_mp5","wpn_ak74u","wpn_ak74","wpn_abakan","wpn_l85","wpn_lr300","wpn_sig550","wpn_sig_m1","wpn_sig_m2","wpn_g36","wpn_fn2000","wpn_vintorez","wpn_val","wpn_val_m1","wpn_groza","wpn_svd","wpn_svu","wpn_bm16","wpn_bm-16_full","wpn_toz34_short","wpn_toz34","wpn_wincheaster1300","wpn_spas12",}for _, section in pairs (wpn_actor) dolocal wpnObject = db.actor:object(section)if wpnObject thendb.actor:drop_item(wpnObject)alife():release(alife():object(wpnObject:id()), true)spawn.inv(section.."_actor)endendend Ссылка на комментарий
mumie 2 Опубликовано 20 Марта 2014 Поделиться Опубликовано 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() -эта группа должна выводить тип, если есть. Могу ошибаться, лучше проверить. Ссылка на комментарий
kmsk 2 Опубликовано 20 Марта 2014 Поделиться Опубликовано 20 Марта 2014 (изменено) mumie, Я сделал но почему-то ошибка, 10 раз все перепроверил не могу понять причины: Expression : fatal error Function : CScriptEngine::lua_errorFile : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cppLine : 73Description : <no expression>Arguments : LUA error: ...hadow of chernobyl\gamedata\scripts\wpn_actor.script:99: attempt to index local 'wpn' (a nil value) Пишет что wpn нет равно нулю for _, section in pairs (wpn_actor) dolocal wpnObject = db.actor:object(section)if wpnObject thenlocal cond = wpnObject:condition()db.actor:drop_item(wpnObject)alife():release(alife():object(wpnObject:id()), true)local spawnwpn = section.."_actor"local obj = alife():create(spawnwpn,vector():set(0,0,0),1,1,db.actor:id())local wpn = db.actor:object(spawnwpn)wpn:set_condition(cond)endend З.Ы. если ставлю проверку local wpn = db.actor:object(spawnwpn)if wpn thenwpn:set_condition(cond)end передачи жизней нет Изменено 20 Марта 2014 пользователем kmsk Ссылка на комментарий
*Shoker* 322 Опубликовано 20 Марта 2014 Поделиться Опубликовано 20 Марта 2014 (изменено) @kmsk, Потому что сразу после создания ствола нельзя получить его клиентский объект - его ещё не существует. Переносить аддоны и состояние можно через нет-пакеты, я завтра попробую откопать то что нужно. Если бы ещё нужный скрипт ещё был бы под рукой, но некоторые здесь поспособствовали, и теперь его придётся искать у себя или брать первый попавшийся. Изменено 20 Марта 2014 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
mumie 2 Опубликовано 21 Марта 2014 Поделиться Опубликовано 21 Марта 2014 @kmsk, да, прости. Я думал ты уже разобрался с мутками клиентских объектов и работу с ними.@*Shoker*,Слушай, а не подскажешь как можно функционально прикрутить/снять к/у стволу/а аддоны? а то вот как раз не смог найти такой функции. Вывод, либо ее нет, либо не там искал, конечно же... Ссылка на комментарий
Zander_driver 10 331 Опубликовано 21 Марта 2014 Поделиться Опубликовано 21 Марта 2014 как можно функционально прикрутить/снять к/у стволу/а аддоны? Берем нет-пакет ствола, уводим его в оффлайн, меняем в нет-пакете что нам надо (например наличие/отсутствие аддонов), присваиваем новый нет-пакет стволу, выводим его в онлайн. вроде так. Вопрос по работе с оконными классами, точнее с текстурами для них. прежде чем устанавливать текстуру для статика методом void InitTexture(string texture); можно ли как то проверить что данная текстура (string texture) существует? Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Charsi 440 Опубликовано 21 Марта 2014 Поделиться Опубликовано 21 Марта 2014 Если texture это файл, то его наличие можно проверить так getFS():exist("$game_textures$", texture..".dds") Если это идентификатор текстуры, то нужно проверить его наличие в файлах-описателях для текстур. Их имена перечислены в секции texture_desc. Если не нашлось ни того ни другого, ругаемся в лог и текстурим окно какой-нибудь заведомо существующей дефолтной текстурой. 1 Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
proper70 74 Опубликовано 23 Марта 2014 Поделиться Опубликовано 23 Марта 2014 (изменено) Наконец-то победил причину автозавершения квестов на защиту барьера и им подобным после сейв/лоада) Найдена и вырвана с корнем глубоко сидевшая в скриптах ошибка еще от ПЫСов, что в сейве не сохранялся ИД смарта, от которого надо защищать другой смарт) Этот ИД задавался при выдаче таска, но при сейв/лоаде он терялся, и после лоада это ИД было = nil. Но ее легко было бы выловить, если бы при запросе состояния несуществующего гулага возвращалось заведомо несуществующее значение, например -1. Но xr_gulag.getGulagState() при несуществующем гулаге возвращает 0, или состояние неактивного, пустого гулага. Вот проверка и срабатывала, что гулаг зачищен, и задание выполнялось)) Это, конечно, досадная оплошность со стороны того, кто делал скрипты гулагов, и, если бы не она, то это все было бы выявлено и поправлено еще в далеком 2007 году) а так эта проблема дожила аж до 2014 года)) И, наконец, она вылечена)) Правка этой ошибки в общем случае требует НИ, так как в нетпакет пишется новое значение и меняется его размер. Но можно использовать технологию двухэтапного подключения этой и подобных ей правок, без начала НИ. Для этого нужно в методе save выдать поршень, и в методе load его проверять при чтении нетпакета. Тогда на старых сейвах до правки будет читаться старый нетпакет, а на новых - новый) Вот правка автозавершения на task_manager от Народной Солянки на версии 1.0006: -- Будем записывать не id задания а его хеш - семикратная экономия. function CRandomTask:save(p) printf("^^^ SAVE") -- Отметка того, что это новая версия формата. p:w_u8(255) --' Считаем количество записей local i = 0 for k,v in pairs(self.task_info) do i = i + 1 end p:w_u8(i) for k,v in pairs(self.task_info) do if not id_to_hash[k] then abort("Cannot find hash for id %s!",k) end p:w_u16(id_to_hash[k]) p:w_bool(v.enabled) p:w_bool(v.enabled_props) if not status_to_num[v.status] then abort("Wrong status '%s' for task %s!",v.status,k) end p:w_u8(status_to_num[v.status]) p:w_u32(v.selected_target or -1) p:w_u32(v.defend_target or -1) -- Фикс автозавершения квестов utils.w_CTime(p, v.last_task_time) end --' Та же самая процедура с активными тасками i = 0 for k,v in pairs(self.active_task_by_type) do i = i + 1 end p:w_u8(i) for k,v in pairs(self.active_task_by_type) do if not ct_to_hash[k] then abort("Cannot find hash for complex type %s!",k) end p:w_u16(ct_to_hash[k]) if not id_to_hash[v] then abort("Cannot find hash for task id %s!",v) end p:w_u16(id_to_hash[v]) end -- Фикс автозавершения квестов db.actor:give_info_portion("fix_task_manager") end --' Загрузка function CRandomTask:load(p) printf("^^^ LOAD") --' Считаем количество записей local rt0=p:r_tell() local i = p:r_u8() amk.mylog("tasks "..i) if i~=255 then for k = 1,i do local id = p:r_stringZ() if id ~= nil and self.task_info[id] ~= nil then self.task_info[id].enabled = p:r_bool() self.task_info[id].enabled_props = p:r_bool() self.task_info[id].status = p:r_stringZ() local selected_target = p:r_u32() if selected_target ~= -1 then self.task_info[id].selected_target = selected_target end -- Фикс автозавершения квестов if has_alife_info("fix_task_manager") then local defend_target = p:r_u32() if defend_target ~= -1 then self.task_info[id].defend_target = defend_target end end self.task_info[id].last_task_time = utils.r_CTime(p) end end --' Та же самая процедура с активными тасками local i = p:r_u8() amk.mylog("active "..i) for k = 1,i do local id = p:r_stringZ() self.active_task_by_type[id] = p:r_stringZ() end else i=p:r_u8() for k = 1,i do local hash = p:r_u16() local id=hash_to_id[hash] if not id then abort("Cannot find id for hash %d!",hash) end self.task_info[id].enabled = p:r_bool() self.task_info[id].enabled_props = p:r_bool() self.task_info[id].status = num_to_status[p:r_u8()] local selected_target = p:r_u32() if selected_target ~= -1 then self.task_info[id].selected_target = selected_target end -- Фикс автозавершения квестов if has_alife_info("fix_task_manager") then local defend_target = p:r_u32() if defend_target ~= -1 then self.task_info[id].defend_target = defend_target end end self.task_info[id].last_task_time = utils.r_CTime(p) end --' Та же самая процедура с активными тасками i = p:r_u8() amk.mylog("active "..i) for k = 1,i do local cthash = p:r_u16() local id=hash_to_ct[cthash] if not id then abort("Cannot find complex type for hash %d!",cthash) end local hash=p:r_u16() self.active_task_by_type[id] = hash_to_id[hash] if not self.active_task_by_type[id] then abort("Cannot find task id for hash %d!",hash) end end amk.mylog("Feel the difference.") end amk.mylog("size "..p:r_tell()-rt0) end Если адаптация к старым сейвам не нужна, то можно выкинуть поршень fix_task_manager и все его проверки. Изменено 23 Марта 2014 пользователем proper70 2 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти