Отличается ли логика монстра от НПС? Мне вот нужно чтобы при смерти Бюрера выдавался инфопоршень. Пишу логику как НПС. Но после смерти бюрера инфопоршень выдаётся не всегда. Может нужно как-то по другому писать?
Вот логика:
VOva-VIP Всё зависит от того, был непись захвачен одним из смартов перед смертью, или нет. Дело в том, что при захвате непися смартом, индивидуал
отредактировал(а) singapur22: 22-06-2011 10:57 GMT3 час. Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Товарищи!!!
Подскажите пожалуйста, какой показатель в файле configs\models\objects\wood_fence.ltx отвечает за время разбивания этого самого забора?
Просто хочу сделать что бы забор разбивался долже чем с одного выстрела или с простого кидания болта.
Вот что внутри файла wood_fence.ltx, ткните носом что надо менять, перепробовал много вариатнов меняя имунитет, результат тот же:
[impulse_transition_to_parts]
random_min = 1.0 ; величина случайно направленного импульса пропорционально массе нового объекта
random_hit_imp = 0.1 ; величина случайно направленного импульса пропорционально разрушающему хиту
;ref_bone ; кость из по которой определяется скорость для частей у который связь не задана, по умолчанию рут
imp_transition_factor = 1.0 ; фактор с которым прикладывается хит по исходному объекту ко всем частям
lv_transition_factor = 0.1 ; коэффициент передачи линейной скорости
av_transition_factor = 0.1 ; коэффициент передачи угловой скорости
;-------------------------------------------------------------------------------
;------ End params -------------------------------------------------------------
;-------------------------------------------------------------------------------
[impulse_transition_to_parts]
random_min = 1.0 ; величина случайно направленного импульса пропорционально массе нового объекта
random_hit_imp = 0.1 ; величина случайно направленного импульса пропорционально разрушающему хиту
;ref_bone ; кость из по которой определяется скорость для частей у который связь не задана, по умолчанию рут
imp_transition_factor = 1.0 ; фактор с которым прикладывается хит по исходному объекту ко всем частям
lv_transition_factor = 0.1 ; коэффициент передачи линейной скорости
av_transition_factor = 0.1 ; коэффициент передачи угловой скорости
;-------------------------------------------------------------------------------
;------ End params -------------------------------------------------------------
;-------------------------------------------------------------------------------
singapur22 вписал, но всё по прежнему. Мой квест то выполняется, то нет. Может проблема в самом Бюрере? То есть если я поставлю туда псевдособаку квест станет выполнятся?
VOva-VIP я в логике не шарю, я бы отследил этого зверька
Mehanik Yar логику включай. Логично что связано с действиями на локации, так? Так. Ну вот и выводи после каждой задействованной на этой локации функции информацию в лог, отловишь функцию(ну а там соображай что делать). Неисправимого нет в принципе.
#Artos :
Вот тебе оптимальный вариант для твоего случая с таблицей инфопоршней...
Как-то мудрёно получается с этими больше\меньше...
От перемены м**5001618d69873ce82a42** end
w = true
end
local rnd = math.random(#_MyInfo)
actor:give_info_portion(_MyInfo[rnd])
table.remove(_MyInfo, rnd)
end
end
[/code]
Помогите кто-нибудь с квестом! Мне вот нужна Логика для монстра, чтобы после его смерти выполнялся инфопоршень (с завершением квеста). Я свою логику писал, но с монстром внезапно можно стало говорить (когда походишь к монстру появляется: Говорить (kF). хотя диалог уже не открывается). После его смерти либо вообще ничего не происходит, либо вылетает с ошибкой, типа: Не удалось индексировать местность НПС (что то вроде этого) Вообщем ошибка посылает меня в xr_statistic.script на 120 строчку. Я уже чего только не пробовал!
Gun12
'Мудреность' с 'больше/меньше' обусловлена тем, что делать рандомный выбор из единственно оставшегося варианта (в самом конце) и не логично и оператор math.random(1) вернет тебе уже не целочисленное значение '1', а дробную часть '0...1', что не позволит выбрать из таблицы последний.
Т.о. перед рандомным выбором приходится все одно проверять - а это не последний ли единственный в таблице (if iCount > 1 then)?
Вот и объединил булев-флаг чистки со счетчиком, который все одно потребовался.
math.random ([m [, n]]) При вызове без аргументов, возвращает псевдослучайное действительной число в интервале [0,1). При вызове с аргументом m, math.random возвращает псевдослучайное ЦЕЛОЕ число из отрезка [1, m]. При вызове с двумя аргументами – m и n, math.random возвращает псевдослучайное целое число из отрезка [m, n].
Хотя это же извращённый сталкеровский Lua. Мали что там может быть?
Всё нашел причину. Вылетает в варлабе только тогда, когда в слот главного оружия перетаскиваешь модифицированную гаусску.
Причём этот вылет не наблюдается на кордоне, где собственно игра начинается, а потом уже, когда перешел в варлаб.
При этом если перейти в варлаб уже с этим оружием в руках, то вылета не будет, пока не захочешь поменять оружие.
======================
Чувак из о-сознания начинает диалог с ГГ первым, я посмотрел его логику и не понял почему.
Что нужно сделать, чтобы НПС начал диалог с ГГ первым?
Gun12
Есть пара вопросов (сам что-то или торможу или захотелось невозможного):
1. Имеется читалка**5001618d69873ce82a42**Pk:r_u8() )
end
else
table.insert( tTbl, oPk:r_u8() )
end
end
end
return tTbl --/>
end
[/code]
Хотелось бы оптимизировать код, исключив однотиные проверки в цикле, типа:
[code]local function Get_Left0(tTbl,oPk,iLength,sType)
if not (tTbl and type(tTbl) == 'table') then tTbl = {} end
if iLength and iLength > 0 then
local sFunc = 'r_'..(sType or 'u8') --/ имя функции (строка!)
local Func = oPk[sFunc] --/ WARNING! для методов классов не применимо!
if type(Func) == 'function' then --/ есть такая функция?
for i=1, iLength do
table.insert( tTbl, Func() ) --/ !!!ERROR!!! на этом поток обрывается :-(
end
else
printf("Get_Left:Func(%s)=[%s]:<%s>", sType, type(Func), "Error!") --/#~#
end
end
return tTbl --/>
end[/code]
Но ... для скриптов/функций подобное проходит, а для методов класса (в частности 'net_packet') - не применимо.
Вот думаю ... напрасно время трачу или уперся в недопонималку? :-)
P.S. Вот в том то и дело, что не раз напарывался на фатальные ошибки в игре при попытке делать рандомный выбор из пустой или с единственным элементом таблице.
Именно поэтому уже давно в кодах с рандомным выбором при изменяемых(!) таблицах делаю обязательную проверку и на 0 (чтобы вообще не беспокоиться) и на 1 (для рандома).
В данном случае 'безопасность' кода выше его оптимизации. Тем более пишу для вариантов ТЧ/ЧН/ЗП и не хотелось бы зависить от причуд кастрированных компилляторов.
Примечание: Тогда и в твоем коде следует использовать:
local rnd = math.random(1,#_MyInfo) --/ вероятно должно сработать
#Artos :
Вот в том то и дело, что не раз напарывал**5028618d69873ce82a42**code]if next(_MyInfo) then[/code]
А с единственным?... Какой-то глюк. Не может (не должно) такого быть в принципе.
Мануал об этом говорит чётко.
Тогда и в твоем коде следует использовать:
local rnd = math.random(1,#_MyInfo) --/ вероятно должно сработать
Это уже опционально. Я выбрал вариант без первого аргумента. Только и всего.
И почему "вероятно должно сработать"? Обязательно должно. Как и мой вариант использования.
По твоему вопросу.
Не буду париться с различными проверками, ты сам лучше знаешь что и куда, покажу принцип (не проверял!):
[code]
local function Get_Left0(tTbl,oPk,iLength,sType)
if not (tTbl and type(tTbl) == 'table') then tTbl = {} end
if iLength and iLength > 0 then
local sFunc = sType or 'u8'
for i=1, iLength do
table.insert( tTbl, loadstring('return oPk:'..sFunc..'()')() ) --!!!!!!!! Тут
end
end
return tTbl --/>
end
[/code]
отредактировал(а) Gun12: 22-06-2011 22:24 GMT3 час. Не стань номинантом премии Дарвина.
Gun12
Вариант с 'loadstring('return oPk:'..sFunc..'()')()' - не пройдет.
1. Требуется чтобы 'oPk' имелся в глобальном массиве (иначе вылет по нилу), а это объект класса нет-пакета конкретного объекта и только в данный (обрабатываемый) момент (т.е. локальная переменная/аргумент).
2. Цель не столь снизить кол-во строк, а оптимизировать в перую очередь быстродействие.
Не думаю, что про**5001618d69873ce82a42**Tbl = {} end
if iLength and iLength > 0 then
--local Func = oPk['r_'..(sType or 'u8')] --/#?# для методов объекта не годится!
local Func = tRk['r_'..(sType or 'u8')] --/ берем из таблицы
if type(Func) == 'function' then --/ подстраховка
for i=1, iLength do
table.insert( tTbl, Func(oPk) )
end
else
printf("Get_Left:Func(%s)=[%s]:<%s>", sType, type(Func), "Error!") --/#~#
end
end
return tTbl --/>
end
[/code]
По таблице инфопоршней:
Использование next(_MyInfo) иль #_MyInfo > 0 по сути равноценно, хотя для модмейкеров Сталкера более понятно второе.
Я упомянул о проверке на пустоту только в контексте с рандомным выбором в других скриптах своих нарабаток. А в данном примере конечно же это дело вкуса, лишь бы была сама проверка.
'Вероятно' - ни в чем уже не буваю уверен, если не проверено на практике и временем! :-)
'Опционально' - ??? К сожалению зачастую НЕТ.
Многое модмейкеры применяют упрощенное:
rand_info = tbl[math.random(#tbl)] не ставя 'опциональное' 1,
И, когда в самом конце (что довольно редко) имеют вылеты - не ищут причину, т.к. 'до' последнего момента строка работает безукоризнено.
Ну а не указание 'опциональности' приводит к math.random(1) - что уже возвращает не целочисленное значение а из диапазона 0...1 .
Artos
Извиняюсь, не до конца понимал условий задачи.
приводит к math.random(1) - что уже возвращает не целочисленное значение а из диапазона 0...1**5001618d69873ce82a42** в диапазоне от 1 до 3 (1,2 или 3)
-- или в моём случае
math.random(1) -- возвращает целое число в диапазоне от 1 до 1 (т.е. 1)
-- Вызов с двумя аргументами
math.random(3,5) -- возвращает целое число в диапазоне от 3 до 5 (3,4 или 5)
[/code]
Или у меня установлена аномальная Lua?
Вряд ли я отвечу на второй вопрос. Как-то пытался читать. С ходу не получилось - бросил. Так за ненадобностью пока не возобновлял поиск решения.
отредактировал(а) Gun12: 22-06-2011 23:37 GMT3 час. Не стань номинантом премии Дарвина.
Gun12
Мы же говорим не о чистом LUA, а применительно к его кастрированному варианту в конкретной игре ...
Вопрос второй:
Как прочесть и вывести в лог значение некоторой переменной, которая должны была быть: nil,1,2,3 , но была перезаписана движком в бинарный код? Предположительно стала одновременно содержать и некую таблицу и пр. значения.
Поясню:
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.