ColR_iT 171 Опубликовано 11 Февраля 2011 Поделиться Опубликовано 11 Февраля 2011 (изменено) Да-да! И меня тоже интересует вопрос antreg! Я уже задал подобный в теме "Ковыряемся в файлах", там мне сказали, что !возможно! они отслеживаються движково, для ограничения/разрешения. Лично по рестрикторам в кострах, абсолютно ничего не нашел. Единственное оправдание наличия "пустых" рестрикторов, я нашел на Wiki: >>Click Me<< Там, в условиях переключения схем от одной к другой есть такие строки: on_actor_in_zone = restrictor_name | scheme – если актер в зоне, (указывается имя рестриктора), т.е. выходит, что для такого случая логика для рестриктора не нужна!? А для костров, могу предположить, что они нужны, чтобы НПС не лезли в них, чего-то типа денжер зон. Удаление zone_flame_small удалит у тебя огонь как явление, т.е. партикл, а lights_hanging_lamp - свет вокруго него. По всей видимости взаимодействие между этими объектами происходит, непосредственно, при помощи движка. Изменено 11 Февраля 2011 пользователем Куфзук Ссылка на комментарий
SibireaStalker 0 Опубликовано 12 Февраля 2011 Поделиться Опубликовано 12 Февраля 2011 Никто не подскажет, есть ли способ ускорить функцию demo_record, на больших локах тестить неудобно.... Выводы модмейкера: 1)Вылетает - это хорошо. Значит, работает 2) Если хочешь сделать что-то хорошо, делай сам! 3) Если падёшь духом, падёт и мод. 4) Он живой... Ссылка на комментарий
antreg 178 Опубликовано 12 Февраля 2011 Поделиться Опубликовано 12 Февраля 2011 (изменено) Добрый день! Можно ли удалить скриптовой функцией спейс_рестриктор. Вот такой: [6565] ; cse_abstract properties section_name = space_restrictor name = camp_fire_0011 position = -4.02209758758545,3.58234667778015,200.165649414063 direction = 0,0,0 ; cse_alife_object properties game_vertex_id = 2117 distance = 0 level_vertex_id = 73868 object_flags = 0xffffff3e ; cse_shape properties shapes = shape0 shape0:type = box shape0:axis_x = 1.7837952375412,0,0 shape0:axis_y = 0,1.93420171737671,0 shape0:axis_z = 0,0,1.7837952375412 shape0:offset = 0,0,0 ; cse_alife_space_restrictor properties restrictor_type = 2 Если да, то как должна выглядеть функция в этом случае? Изменено 12 Февраля 2011 пользователем antreg "Тайные Тропы 2" техподдержка "Ф.О.Т.О.Г.Р.А.Ф" техподдержка Ссылка на комментарий
Scarabay 98 Опубликовано 12 Февраля 2011 Поделиться Опубликовано 12 Февраля 2011 SibireaStalker, Никто не подскажет, есть ли способ ускорить функцию demo_record, на больших локах тестить неудобно.... shift - замедление ctrl - ускорение Мой YouTube-канал Ссылка на комментарий
Министр 3 Опубликовано 12 Февраля 2011 Поделиться Опубликовано 12 Февраля 2011 antreg, как-то так: local obj = alife():object("camp_fire_0011") alife():release(obj, true) Ссылка на комментарий
TRAMP14 1 Опубликовано 12 Февраля 2011 Поделиться Опубликовано 12 Февраля 2011 Здравствуйте, надыбал скрипт который не берёт оружие без экзы, но он мне не понравился и я другой сотворил. Но мой почемуто не работает function noweap() -- выкидываем оружие если нет экзы local exza = db.actor:item_in_slot(6) -- локальные local grena = db.actor:item_in_slot(2) -- переменные if exza ~= "exo_outfit" then -- проверяем экзу if grena and grena == "wpn_gauss" or grena == "wpn_rpg7" or grena == "wpn_fn2000" then -- проверяем оружие db.actor:drop_item(grena) -- выбрасываем news_manager.send_tip(db.actor,"Слишком тяжёлое оружие для обычной брони, оденьте эгзоскелет",nil,nil,10000) -- сообщаем об этом end end end Что в нём не так? Луа чекером проверял, вылетов при проверке из игры нет но работать он не хочет Ссылка на комментарий
Garry_Galler 7 Опубликовано 12 Февраля 2011 Поделиться Опубликовано 12 Февраля 2011 TRAMP14 db.actor:item_in_slot(6) возвращает юзердату, а не строку. Так что твое сравнение дает false. Для того, чтобы получить строку с наименованием объекта по секции нужно предварительно применить к нему метод section(). if exza and exza:section()~= "exo_outfit" then if grena and (grena:section() == "wpn_gauss" и т.д.) Ссылка на комментарий
TRAMP14 1 Опубликовано 12 Февраля 2011 Поделиться Опубликовано 12 Февраля 2011 Всё заработало, спасибо. Вот ещё скриптик - тоже неработает Смена худа при смене костюмов function prost() local hud = get_hud() local cs = hud:GetCustomStatic("nov_outfit") local item_in_slot = db.actor:item_in_slot(6) if item_in_slot ~= nil then if item_in_slot == "novice_outfit" or item_in_slot == "bandit_outfit" or item_in_slot == "killer_outfit" or item_in_slot == "monolit_outfit" or item_in_slot == "soldier_outfit" or item_in_slot == "stalker_outfit" or item_in_slot == "svoboda_light_outfit" or item_in_slot == "svoboda_heavy_outfit" or item_in_slot == "dolg_outfit" or item_in_slot == "outfit_novice_m1" or item_in_slot == "outfit_bandit_m1" or item_in_slot == "outfit_dolg_m1" or item_in_slot == "outfit_killer_m1" or item_in_slot == "outfit_specnaz_m1" or item_in_slot == "outfit_stalker_m1" or item_in_slot == "outfit_stalker_m2" or item_in_slot == "outfit_svoboda_m1" then if cs == nil then hud:AddCustomStatic("nov_outfit", true) cs = hud:GetCustomStatic("nov_outfit") end else if cs ~= nil then hud:RemoveCustomStatic("nov_outfit") end end end end function okylar() local hud = get_hud() local cs = hud:GetCustomStatic("okul") local item_in_slot = db.actor:item_in_slot(6) if item_in_slot ~= nil then if item_in_slot == "dolg_scientific_outfit" or item_in_slot == "ecolog_outfit" or item_in_slot == "protection_outfit" or item_in_slot == "scientific_outfit" then if cs == nil then hud:AddCustomStatic("okul", true) cs = hud:GetCustomStatic("okul") end else if cs ~= nil then hud:RemoveCustomStatic("okul") end end end end function protivogaz() local hud = get_hud() local cs = hud:GetCustomStatic("protivgaza") local item_in_slot = db.actor:item_in_slot(6) if item_in_slot ~= nil then if item_in_slot == "outfit_exo_m1" or item_in_slot == "exo_outfit" then if cs == nil then hud:AddCustomStatic("protivgaza", true) cs = hud:GetCustomStatic("protivgaza") end else if cs ~= nil then hud:RemoveCustomStatic("protivgaza") end end end end function shlemi() local hud = get_hud() local cs = hud:GetCustomStatic("shlem") local item_in_slot = db.actor:item_in_slot(6) if item_in_slot ~= nil then if item_in_slot == "specops_outfit" or item_in_slot == "military_outfit" then if cs == nil then hud:AddCustomStatic("shlem", true) cs = hud:GetCustomStatic("shlem") end else if cs ~= nil then hud:RemoveCustomStatic("shlem") end end end end Правда в первой функции перечислений много. Она также не работает - худы не выводятся, вылетов нет Ссылка на комментарий
Nazgool 250 Опубликовано 12 Февраля 2011 Поделиться Опубликовано 12 Февраля 2011 (изменено) TRAMP14 Тебе же выше уже объяснили почему не работает. А теперь вот что. Допустим ты без костюма и статик не установлен. (Смотрим в любой из функций) 1. Одеваешь костюм : if item_in_slot ~= nil then -- Истина (костюм уже надет - не равен NIL) ... if cs == nil then -- Истина (статик пока не установлен) hud:AddCustomStatic("okul", true) --установить статик 2. Снимаешь костюм : if item_in_slot ~= nil then -- Ложь (Слот уже пуст - равен NIL) ... end end -- функция отработала, НО ! Костюм уже снят, а кто статик будет удалять? Ну и наконец, даже если бы работало, то всё это получилось достаточно затратно в ресурсах. Можно сделать не только одной функцией, но и оптимизировать. Например : function HandlerStatic() local hud = get_hud() local item_in_slot = db.actor:item_in_slot(6) local cs --Если установлен хотя бы один из статиков, задать переменной "cs" значение, отличное от "лжи" if hud:GetCustomStatic("nov_outfit") then cs = "nov_outfit" elseif hud:GetCustomStatic("okul") then cs = "okul" elseif hud:GetCustomStatic("protivgaza") then cs = "protivgaza" elseif hud:GetCustomStatic("shlem") then cs = "shlem" end -- Проверить, надет ли броник... if item_in_slot then -- если надет... if cs then return end -- ...и есть статик - прекратить работу функции local item_section = item_in_slot:section() if item_section == "specops_outfit" or item_section == "military_outfit" then cs = "nov_outfit" elseif item_section == "outfit_exo_m1" or item_section == "exo_outfit" then cs = "protivgaza" elseif item_section == "dolg_scientific_outfit" or item_section == "ecolog_outfit" or item_section == "protection_outfit" or item_section == "scientific_outfit" then cs = "okul" else cs = "nov_outfit" -- предполагаю что тут все остальные костюмы. Может ошибаюсь. end -- если надет и нет статика, то установить статик hud:AddCustomStatic(cs, true) elseif not cs then return -- если броник не надет и нет статика, то прекратить работу функции else -- если броник не надет и есть статик, то удалить статик hud:RemoveCustomStatic(cs) end end Изменено 12 Февраля 2011 пользователем Gun12 Ссылка на комментарий
TRAMP14 1 Опубликовано 13 Февраля 2011 Поделиться Опубликовано 13 Февраля 2011 СпасибО! Вот такой вопрос - есть ли правила когда ставить db.actor:item_in_slot(6) а когда db.actor:item_in_slot(6):section()? А то я почти никогда не ставил и все работало. А сейчас на тех же сравнениях требуется ставить :section() Ссылка на комментарий
UX-3000 26 Опубликовано 13 Февраля 2011 Поделиться Опубликовано 13 Февраля 2011 (изменено) Не подскажете как создать логовище полтергейста на Заводе Юпитер, ну там где входите в главный корпус, когда ищете вертолёт, вроде бы точка Б8. Там много разбросанных вещей, подходящих под метательные снаряды. Хотелось бы создать точку респауна полтергейстов с их постоянным респапуном в этом месте. Как лучше это сделать и какую примерно логику лучше использовать? Изменено 13 Февраля 2011 пользователем UX-3000 То, что меня не убивает - делает меня сильнее Ссылка на комментарий
Stalk15 27 Опубликовано 13 Февраля 2011 Поделиться Опубликовано 13 Февраля 2011 TRAMP14 Странноватый вопрос у тебя. Если ты хочешь просто проверить, есть ли итем в слоте или нет, то можно так писать: local gg = db.actor:item_in_slot(6) if gg~=nil then А если тебе надо узнать, какой именно итем в слоте, то тогда надо использовать section(). Ссылка на комментарий
Garry_Galler 7 Опубликовано 13 Февраля 2011 Поделиться Опубликовано 13 Февраля 2011 (изменено) TRAMP14 Уясни наконец разницу между юзердатой и строкой. И вспомни - когда ты использовал только юзердату, с чем ты ее сравнивал? С nil. То есть делал типа того: if db.actor:item_in_slot(6) ~= nil then - это просто проверка, что предмет в слоте(экземпляр класса) не nil (то есть что там есть хоть какой то предмет - не важно какой секции). Юзердата, которую возвращает метод item_in_slot(number) , в данном случае это просто экземпляр объекта определенного класса вообще. Как допустим ты - экземпляр класса homo sapiens. Но все люди разные и экземпляры объекта одного и того же класса тоже разные. Например у них разные имена - секции. И как раз метод section() их возвращает. Разница между юзердатой и строкой - огромная. Это совершенно разные типы. И их нельзя (потому что бессмысленно) сравнивать друг с другом. Поэтому когда тебе нужно сравнить секцию объекта с другой секцией (а это строки) нужно применять метод section(). (или section_name() для серверных объектов). Изменено 13 Февраля 2011 пользователем Garry_Galler Ссылка на комментарий
_Призрак_ 11 Опубликовано 13 Февраля 2011 Поделиться Опубликовано 13 Февраля 2011 TRAMP14 Давай представил что у тебя в слоте №6 не оружие, а кот. Если ты применяешь такую функцию: local gg = db.actor:item_in_slot(6), то ты как бы берешь кота за шиворот и можешь делать с ним все что угодно. Выкинуть, узнать его имя, массу, рост и т.д. А если ты используешь функцию db.actor:item_in_slot(6):section() то ты только узнаешь имя кота, его секцию в файле итем. Freedom Ссылка на комментарий
TRAMP14 1 Опубликовано 14 Февраля 2011 Поделиться Опубликовано 14 Февраля 2011 (изменено) Ещё хотел спросить что тут правильно: object():section() db.actor:object():section() object:section() obj:section()? Или есть ещё какие либо варианты? 1 и 2 дают вылеты Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ... shadow of chernobyl\gamedata\scripts\glavnaa.script:2: attempt to index a number value Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ... shadow of chernobyl\gamedata\scripts\glavnaa.script:2: attempt to call method 'section' (a nil value) Боюсь и остальные тоже Изменено 14 Февраля 2011 пользователем TRAMP14 Ссылка на комментарий
ColR_iT 171 Опубликовано 14 Февраля 2011 Поделиться Опубликовано 14 Февраля 2011 TRAMP14, object:section() и obj:section() одно и тоже! Что значит правильно? Что ты хочешь сделать? Ссылка на комментарий
TRAMP14 1 Опубликовано 14 Февраля 2011 Поделиться Опубликовано 14 Февраля 2011 Чтобы при использовании предмета появлялся худ. Конечно старая битая тема но у меня скока пробую везде оставновка на етой функции Ссылка на комментарий
_Призрак_ 11 Опубликовано 14 Февраля 2011 Поделиться Опубликовано 14 Февраля 2011 object():section() - это вообще непонятно что. Максиум, если у тебя есть функция, которая возвращает объект, то тогда это будет рабочее. Но только если у тебя есть функция object() в данном скрипте, которая возвращает объект. Тогда эта строка возвратит секцию объекта, которого возвращает функция object() db.actor:object():section() - вооще вылетит в любом случае. Ибо ты пытаешься получить объект nil у актора. object:section() и obj:section() это одно и тоже. Получаешь объект каким либо образом, и применяешь к нему метод section(). Freedom Ссылка на комментарий
TRAMP14 1 Опубликовано 14 Февраля 2011 Поделиться Опубликовано 14 Февраля 2011 Мне надо посмотреть какой обьект используется и сравнить его с тем который мне нужен, в статье "Звук при использовании предмета" именно ета функция. из неё я собственно и брал. Но вылет Ссылка на комментарий
ColR_iT 171 Опубликовано 14 Февраля 2011 Поделиться Опубликовано 14 Февраля 2011 TRAMP14, тебе же выше писали, если ты хочешь сравнить объект по секции (тип данных string), то сравнивать нужно так: local obj = db.actor:item_in_slot(6) local obj_section = obj:section() if obj_section == "stalker_outfit" then , если ты напишешь так: obj = db.actor:item_in_slot(6) if obj_section then , то ты просто проверишь, есть ли вообще, что нибудь в слоте! И таким образом ты можешь делать все, что позволяет класс, к которому принадлежит этот объект. obj - это экземпляр класса. Например, Карась - это экзепляр класса Рыба, а Щука - это уже другой экземпляр, того же класса! Через экземпляр класса ты можешь получить его имя: local obj_name = obj:name() , уникальный идентификатор объекта: local obj_id = obj:id() , позицию: local obj_position = obj:position() , гейм вертекс: local obj_gv = obj:game_vertex_id() и так далее и тому подобное. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти