Strchi я уже забыл зачем я вообще что-то менял в _g, но во всяком случае это никак не влияло на излома раньше. Удаление файла _g от ошибки не избавляет. Так что дело в другом. Конфиг излома я тоже пробовал менять, ставить от другого мода, например "восстановление старого сюжета"
Это тоже не помогает.
abort("Statistic ERROR: cannot find monstr class for [%s]", npc and npc:name())
Получаем такой вылет.
Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description :
Arguments : LUA error: ...\stalker - Зона поражения\gamedata\scripts\_g.script:1117: bad argument #2 to 'format' (string expected, got nil)
При закомментировании в 1117 строке получаем при убийстве излома такой вылет.
Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description :
Arguments : LUA error: ...alker - Зона поражения\gamedata\scripts\ranks.script:66: attempt to index local 'obj' (a nil value)
Mehanik Yar Поправлю чуток Artos'а. При проверке на валидность переменной npc нужно задать ещё дефолтовое значение, иначе при отрицательной валидности переменной npc, в функцию будет передаваться значение nil, что так же не допустимо в данной ситуации (код %s требует значение типа string). Посему к правке Artos'а добавь ещё ... or "no_npc". Тобишь: abort("Statistic ERROR: cannot find monstr class for [%s]", npc and npc:name()or "no_npc")
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Mehanik Yar
(что-то плохо доходит ... уберем лишнее)
1. Изменив строку 115: ... - ты получишь ... и вылетишь из игры с другим логом.
2. Смотри сами вызовы 'getNpcType(npc)'(а скорее addKillCount(npc)) из других скриптов (например: generic_object_binder:death_callback(victim, who) ) и ищи где ты теряешь нужный аргумент (npc).
Исправлять нужно причину, а не следствия! Залалатав в одном - все одно прорвет в другом.
P.S. Уж если ты пытаешься залатать ошибку путем удаления '_g.script' - тебе явно НЕ стОит заниматься скриптами вообще!
(если непонятно - то это примерно то же, если доктор лечит больного путем отрезания у него головы ...)
Fagot_
Тут вообще-то топик "Вопросы и Ответы", а не заказы на написание статей-туторов.
Бери код/мод со спальным мешком и смотри как и что в нем делается..
Struck , а ты уверен, что Fagot_ хочет делать спальный мод? В вопросе только о создании предмета "спальный мешой", а ты ему такие "сложности" советуешь. ;-)
Fagot_ посоветовал бы почитать туторы про создание окошек, это первое, второе - это взять DreamMod за основу, разобрав его и переписав "под себя" - получишь то что нужно. Фантазия безгранична, обычный сон - скучен.
Что-то мы теряем бдительность ... :-)
И твой вариант (до) правки так же некорректен, т.е. npc and npc:name() or "no_npc" - некорректно с точки зрения соблюдения синтаксиса: a and b or c.
Тогда уж: (npc and npc:name()) or "no_npc" ( т.е. (a and b) or c )
или проще: tostring(npc and npc:name()) - что и забыл сделать в самом начале.
Artos Ну скобки собственно не требуют обязательного наличия, **5009618d69873ce82a42** return 1,2,3
end
local a,b,c = f and f() or 5,6,7[/code]
Код не верный, но принцып думаю ты понял.
отредактировал(а) singapur22: 20-06-2011 18:31 GMT3 час. Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
singapur22
Пробовал присваивать 'за раз', но ... ни в одной из различных ситуация ни разу не удавалось. :-(
Сколее всего компиллятор игры (иль его парсер) на подобное не расчитан.
Даже вроде как с корректным синтаксисом: local a,b,c = ( f and f() ) or ( 5,6,7 )
- мы все же не до конца знаем как компиллятор (его парсер) воспринимает подобные строки ... Но даже с заведомо правильным синтаксисом - за раз не проходит 'условное' присваивание.
P.S. Даже банальное:
local a,b,c = unpack( {1,2,3} ) or unpack( {5,6,7} ) - присваивает присваивает только 1-му ...
Artos Вот и я про то же. Чё только я не делал, ничерта не выходит. А жаль. Не однократно сталкивался с ситуацией, когда нужно было установить значения по условию, сразу нескольким переменным, по возврату функций. К сожалению приходилось расписывать по if-then-else-end :-(
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Artos Хм. Возвращать вместо набора параметров, их список?! Ну я думал уже над этим, но както не решился его применить. Както не смог сообразить, что для распарсивания таблицы можно применить функцию unpack(tbl). :-)
Пожалуй, вариант. Спасибо за наводку.
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Если нетрудно,объясните,как использовать коллбек.Вот статья на Инсайде.по созданию ремкомплектов.Почему-то сам скрипт на ремонт(неважно на что) не активируется.В самый низ в
bind_stalker.script я добавил:
function actor_binder:repair_outfit_start(obj, who)
if obj then
if obj:section() == "repair_kit_outfit" then
main_new.repair_outfit()
end
end
end
и,как и написано:
function actor_binder:reinit() и после строки
self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self) пишем: self.object:set_callback(callback.use_object, self.repair_outfit_start, self)
У SkyLoader в журнале есть скрипт на добавление звуков при использовании предмета.Выкинув звуки,поставил скрипт на ремонт(спавн) - работает.Там же Master пишет:
А чем тебе не понравился вариант с каллбэком на юз?
Так что там не хватает в этой статье?Неужелли опять мои кривые руки?
Какую логику надо прописать НПС чтобы он всегда стоял на месте своего спавна. То есть даже если он видит противника, чтобы он стрелял в него не отходя от места своего спавна?
К ЗП сильная антипатия.Я написал,что через скрипт добавления звуков:
local item
function items()
if item and type(item) == "number" then
if (not level.object_by_id(item)) then
end
item = nil
end
if item and type(item) == "userdata" then
item = item:id()
else
item = nil
end
end
function items_drop(obj)
local sect = obj:section()
if sect then
if sect == "repair_kit_outfit" then
main_new.repair_outfit()
item = obj
end
end
end
работает.
Просто вот это вот каллбек.Хотел на примере с ремкомплектами посмотреть,что это. VOva-VIP
Кемпер,валькер - без разницы.Главное - combat_ignore в таком вот виде:
[logic]
active = walker
combat_ignore = combat_ignore
3.2.5.1. Схема sniper
Разновидность кемпера. Отличаются тем, что стреляют только одиночными выстрелами и не смотрят по точкам патрульного пути, а сканируют пространство между ними. Скорость сканирования от точки к точке фиксирована и равна 20сек.
NB! Ставить снайперу только 2 точки look
В кастом дате кемпера прописать:
sniper = true
При работе с диалоговым окном я использовал свою функцию, которая читает значение строки "inv_weight" из ltx-файла заданного оружия. Я это значения поставил на показ в диалоговое окно и получил вот что: Расскажу на примере wpn_beretta, т.к. тут самый яркий пример.
Открываю инвентарь, вижу вес "Беретты", равный 1.18 кг, открываю диалоговое окно и вижу вес, прочитанный из секции, равный ровно 1 кг. Непорядок.
Я полез в ltx-файл "Беретты" вручную и обнаружил там значение секции "inv_weight", равное 1.0. Вроде моя функция все правильно посчитала.
Другой вопрос. Откуда берется вес 1.18 кг? Подскажите пожалуйста.
И еще один вопрос
Как следует из 1-ой неполадки, вес предмета высчитывается не только лишь чтением значения строки "inv_weight". Но тут я нарвался на следующий баг:
Когда я посмотрел вес Пмм'a, то мне далоговое окно выдало число с огромной дробной частью (Например: 0,8273923100456) Вот и мой следующий вопрос: Подскажите функцию, которая поможет сократить число (я уверен, что таковая существует, только вот какая?).
Извиняюсь за поспешные вопросы, я лентяй:-G
Я только что сам ответил на свой первый вопрос, может кому интересно, объясню:
Вес оружия в секции "inv_weight", как ни странно, это вес разряженного оружия. Впринципе, не нужно быть гением, чтобы до этого додуматься:-).
Ну а вот ответ на второй вопрос я все еще хочу узнать.
отредактировал(а) Angel from Hell: 21-06-2011 14:10 GMT3 час. Труд свободных скриптеров-любителей тяжел и утомителен, полон ошибок и багов, но в то же время интересен, захватывающ и благороден.
Upgrades mod build 1.006 готов. В журнале есть новое видео.
Подробнее в журнале.
[logic]
danger = danger_ignore
on_death = death
active = remark1
[danger_ignore]
ignore_distance = 5
[remark1]
[death]
on_info = %+mil_shugan1_done%
[smart_terrains]
none = true
Но если я его убиваю вот такая вот ошибка:
Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description :
Arguments : LUA error: ...w of chernobyl\gamedata\scripts\death_manager.script:139: attempt to index field '?' (a nil value)
Если логика не правильная, то какую нужно писать, чтобы при убийстве НПС выполнялся инфопоршень?
VOva-VIP,
Логика то правильная... Попробуй закомментировать строку 139 в файле death_manager.script и посмотри новый лог вылета. Эта функция по идее отвечает за спавн предметов (лута) в убитого НПС, там в скрипте все пояснено комментариями.
Проблема, может быть в группировке НПС. Но может и не так, в любом случае нужно закомментировать строку 139 и посмотреть лог еще разок.
А у меня назрел еще один вопрос к товарищу singapur22:
Если взять метод InitStatic[/o**5001618d69873ce82a42**d(CUIWindow*);
function SetPPMode();
function WindowName();
function IsShown();
function SetWndSize(number, number);
function SetWndRect(Frect);
function SetWndRect(number, number, number, number);
function GetHeight() const;
function SetWidth(number);
function Show(boolean);
function IsEnabled();
function ResetPPMode();
function SetFont(CGameFont*);
function IsAutoDelete();
};
[/code] Как с помощью этих функций можно изменить текст скролла по своему усмотрению?
Struck, что за функция f3? Как ее использовать? Объясни пожалуйста на примере:
localpistol_sect = db.actor:item_in_slot(1):section() -- Отображаем вес пистолета по строке inv_weight из ltx... localinv_weight = xml:InitStatic("static_weight",self)
отредактировал(а) Angel from Hell: 21-06-2011 15:12 GMT3 час. Труд свободных скриптеров-любителей тяжел и утомителен, полон ошибок и багов, но в то же время интересен, захватывающ и благороден.
Upgrades mod build 1.006 готов. В журнале есть новое видео.
Подробнее в журнале.
Angel from Hell да, проблема оказывается в группировке. Странно конечно, но вылетать перестало.
У меня вот ещё одна проблема: мне нужно чтобы мой новый НПС (заспавненый через скрипт) смотрел в другую сторону, ну то есть нужно поменять вектор, но как?
Вот сам скрипт (пытался приписывать 1,5 в скобках после vector, но НПС смотрел всё равно в ту же сторону):
function shugan1_spawn ()
alife():create("mil_killer_quest_spawn",vector():set( -378, -12.38, 398 ),32782,1545)
end
Angel from Hell ни f3, а %1.3f, что означает оставлять три знака после запятой, и функция у тебя в корне не верная, нажно получать через метод сfg_get_number, чт. мат. часть луа, а методы получения цифорок и буковок есть в utils
VOva-VIP попробуй set_desired_direction()
отредактировал(а) Struck: 21-06-2011 17:38 GMT3 час. Снова в строю.
Angel from Hell Класс CUIScrollView не поддерживает непосредственный вывод текста. И я тебе говорил использовать его не для вывода текста, а для скроллинга статика, в котором планируется выводить текст. Чтобы привязать статик к скроллу, нужно использовать метод AddWindow(CUIWindow*, boolean). Где, CUIWindow* --в твоём случае, статик, в котором выводится текст. boolean --булева, не помню за что отвечает.
Данным методом, статик добавляется в скролл_вьювер, так же, как строка в листинг. Тоесть, каждый последующий добавленый элемент, устанавливается под предыдущим. Но в отличии от класса CUIListWnd, высота элемента может превышать высоту скролл_вьювера, и при этом скроллинг можно будет произ**5031618d69873ce82a42**
отредактировал(а) singapur22: 21-06-2011 17:48 GMT3 час. Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Нужна помощь:хочу вернуть видимость аномалий в моде,но не могу понять,как.(невидимость сделана как-то иначе,чем описывается в ФАКе).Сам мод называется Full Realism Mod by Wolkolak
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.