local tExeptItems =
{
["bolt"] = true,
["device_pda"] = true,
["binocular_a"] = true,
["device_torch"] = true
}
function __del_item(actor, item)
local section = item:section()
--// если предмет есть в таблице - вернем false
if tExeptItems[section] then
return false
end
alife():release(alife():object(item:id()), true)
end
Ты это имел ввиду?
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
killer2203
Поставь ActivePerl Когда я начинал копаться с алл.спавном год назад, у меня такая же проблема была Arist
Не понял вопроса. Тебе нужно чтобы у актора отнимался фонарик болт и пда? Если да, то тогда я тебе сразу предупреждаю - отнимать болты фонарики и пда ненадо, ибо они нигде не продаются
Expression : vertex || show_restrictions(m_object)
Function : CPatrolPathManager::select_point
File : E:\stalker\patch_1_0004\xr_3da\xrGame\patrol_path_manager.cpp
Line : 155
Description : any vertex in patrol path [esc_sin_voron3_walk] in inaccessible for object [esc_stalker_nebo317047]
Я тут подумал, а если два телепата начнут читать мысли друг друга одновременно... Они умрут от переполнения стека?
fan fan
У обьекта по имени esc_stalker_nebo317047 есть преграда на пути. Тоесть у него прописаны пути, например walker, но он не может встать на этот путь, т.к перед НПС преграда. Правь координаты точек-поинтов.
erlik
Пару месяцев назад,вы мне дали изящную функцию спавна.
local tT=
{
["af_medusa"] = {-29.272364,0.230699,39.573017,63,2419},
["af_cristall_flower"] = {-27.690733,0.232351,41.362331,93,2419}
}
function SpawnArt(tT)
local sim = alife()
local vec = vector()
if tT and next(tT)~=nil then
for k, v in pairs(tT) do
sim:create(tT[k], vec:set(tT[v][1],tT[v][2],tT[v][3]),tT[v][4],tT[v][5])
end
end
end
Я вызывал её через диалог,напрямую:
<action>kfs_erste.SpawnArt</action>
Вылет:
Всем привет.
Сделал странствующего торговца,а вот с места он не с двигается!
Всё вроде-бы продаёт,а стоит на месте как вкопанный,а мне надо чтобы он везде шлялся,хотябы доходил до лагеря новичков.
Вот его логика:
Arist
Если вызываешь из диалога, то можно сделать так:
Код:
local tTable=
{
["af_medusa"] = {-29.272364,0.230699,39.573017,63,2419},
["af_cristall_flower"] = {-27.690733,0.232351,41.362331,93,2419}
}
function OnSpawnArt()
SpawnArt(tTable)
end
function SpawnArt(tT)
local sim = alife()
local vec = vector()
if tT and next(tT)~=nil then
for k, v in pairs(tT) do
sim:create(tT[k], vec:set(tT[v][1],tT[v][2],tT[v][3]),tT[v][4],tT[v][5])
end
end
end
Вызывай функцию OnSpawnArt. ДатчикХабара
Чтоб НПС ходил туда, куда надо, нужно ему прописать точки ходьбы(way_points).
Arist
В этой функции была ошибка, которую я потом поправил, но ты видимо скопировал ошибочный вариант, в котором имя таблицы совершенно некстати оказалось приписано к переменным.
Код:
function SpawnArt(tT)
local sim = alife()
local vec = vector()
if tT and next(tT) then
for k, v in pairs(tT) do
sim:create(k, vec:set(v[1],v[2],v[3]),v[4],v[5])
end
end
end
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Есть идеи, как сделать того или иного персонажа бессмертным? Просто надоело во время перестрелок бояться не за свою шкуру, а за шкуру квестового персонажа. Например Беса.
Очень нужно)
.— Должны были, да не приняли… Сказали, мол, раз сняли наклейку, то на глянце теперь «микроцарапины». Я обрадовался, что не «наноцарапины», и пошел домой.
ЦитатаДля создания бессмертного НПС надо либо поправить immunities.ltx, что с гарантией аукнется по всей игре, либо сделать копию модели, аккуратно поправить в ней #include и сделать/прописать секцию иммунитета для бессмертных
Сообщение было успешно отредактировано Gun12 (13-02-2011 00:41 GMT3 часа, назад) Не стань номинантом премии Дарвина.
Спасибо за ссылку. Как я понял, мне просто нужно взять модель Беса и вписать ему нужные мне иммунитеты?
.— Должны были, да не приняли… Сказали, мол, раз сняли наклейку, то на глянце теперь «микроцарапины». Я обрадовался, что не «наноцарапины», и пошел домой.
aqraccy
Опередил меня Gun12 пока вспоминал как это делается
Я ту статью не читал, но по логике это так реализуется:
Сделай уникальный виузал на базе того, который прописан NPC и этому визуалу пропиши в модели путь до своего файла с характеристиками иммунитета.
Открой любую модель хексом и увидишь там например это: #include "gilet_mask_damage_low.ltx" Это файл из папки models в котором (помимо прочего)указана конкретная секция из файла damage.ltx
[bone_protection]
bones_protection_sect = kombez_kupol_damage -- вот это название секции
и секция из файла immunities.ltx
[immunities]
immunities_sect = high_resistance ---- и это название секции
Каждая из них отвечает за стойкость костюма к разным воздействиям.
Как делают в модах: создают в файлах immunities.ltx и damage.ltx (или даже только в одном immunities.ltx ) свои секции с нужными характеристиками. А затем создают новый файл типа "gilet_mask_bessmertie.ltx" и указывают в нем уже эти новые секции. А в модели потом меняют название файла на свое (главное чтобы кол-во символов совпадало).
И получается, что перс имеет жилетку бессмертия, непробиваемую ничем.
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Месяц назад в этой теме было.100% работает.
Бессмертие:
сделал так файл \Program Files\S.T.A.L.K.E.R. - Shadow of Chernobyl\gamedata\config\creatures\m_person
если нет в папке взять в распакованом оригинале
Секции [trader_immunities] и [trader_condition] конец файла должны выглядеть так различие
[trader_immunities]
burn_immunity = 0.0 ;коэффициенты иммунитета
strike_immunity = 0.0
shock_immunity = 0.0
wound_immunity = 0.0
radiation_immunity = 0.0
telepatic_immunity = 0.0
chemical_burn_immunity = 0.0
explosion_immunity = 0.0
fire_wound_immunity = 0.0
[trader_condition]
satiety_v = 0.0 ;скорость уменьшения сытости со временем
radiation_v = 2.0 ;скорость уменьшения радиации
satiety_power_v = 1.0 ;увеличение силы при уменьшении сытости
satiety_health_v = 1.0 ;увеличение здоровья при уменьшении сытости
satiety_critical = 0.0 ;критическое значения сытости (в процентах от 0..1) когда здоровье начианает уменьшаться
radiation_health_v = 0.0 ;уменьшение здоровья при воздействии радиации
morale_v = 0.0 ;скорость восстановления морали
health_hit_part = 0.001 ;процент хита, уходящий на отнимание здоровья
power_hit_part = 0.001 ;процент хита, уходящий на отнимание силы
psy_health_v = 0.1 ;скорость восстановления psy-здоровья
;открытые раны
bleeding_v = 0.0 ;потеря крови при номинальной ране в секунду
Опередил меня Gun12 пока вспоминал как это делается
Я ту статью не читал, но по логике это так реализуется:
Сделай уникальный виузал на базе того, который прописан NPC и этому визуалу пропиши в модели путь до своего файла с характеристиками иммунитета.
Открой любую модель хексом и увидишь там например это: #include "gilet_mask_damage_low.ltx" Это файл из папки models в котором (помимо прочего)указана конкретная секция из файла damage.ltx
[bone_protection]
bones_protection_sect = kombez_kupol_damage -- вот это название секции
и секция из файла immunities.ltx
[immunities]
immunities_sect = high_resistance ---- и это название секции
Каждая из них отвечает за стойкость костюма к разным воздействиям.
Как делают в модах: создают в файлах immunities.ltx и damage.ltx (или даже только в одном immunities.ltx ) свои секции с нужными характеристиками. А затем создают новый файл типа "gilet_mask_bessmertie.ltx" и указывают в нем уже эти новые секции. А в модели потом меняют название файла на свое (главное чтобы кол-во символов совпадало).
И получается, что перс имеет жилетку бессмертия, непробиваемую ничем.
Да, спасибо всем и erlik в частности) Правда уже сам дотумкал и все получилось, но за старания - еще раз огромное спасибо! :)
.— Должны были, да не приняли… Сказали, мол, раз сняли наклейку, то на глянце теперь «микроцарапины». Я обрадовался, что не «наноцарапины», и пошел домой.
Stalk15
Вызываю:
<action>kfs_erste.OnSpawnArt</action>
Вылет немного другой:
[error]Expression : fatal error
[error]Function : CScriptEngine::lua_error
[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
[error]Line : 73
[error]Description : <no expression>
[error]Arguments : LUA error: d:\s.t.a.l.k.e.r\gamedata\scripts\kfs_erste.script:16: attempt to index field '?' (a nil value)
Ладно.Есть стандартный метод,alife():create.А насчёт торговца,чтобы он ходил,что-то в голове сидит,что ему надо ставить класс монстр.Вот только во время боя он может повести себя как монстр.
Берем эту функцию и вставляем ее в любой скриптовый файл - лучше даже в _g.script - тогда функция будет глобальной. И забываем о ней.
Код:
function Create(tT)
local sim = alife()
local vec = vector()
if tT and next(tT) then
for k, v in pairs(tT) do
sim:create(k, vec:set(v[1],v[2],v[3]),v[4],v[5])
end
end
end
Потому что далее (в любых файлах ) просто пишем функции с данными, когда нам нужно что то заспавнить. Например такую:
Код:
function SpawnArt()
local tT=
{
["af_medusa"] = {-29.272364,0.230699,39.573017,63,2419},
["af_cristall_flower"] = {-27.690733,0.232351,41.362331,93,2419},
["af_cristall_flower"] = {db.actor:position().x,db.actor:position().y,db.actor:position().z,db.actor:level_vertex_id(),db.actor:game_vertex_id()}
}
имя_файла.Create(tT) -- если Create() находится в _g_script то имя файла писать не нужно.
end
Вызываем уже эту функцию, а не Create() - вызывать можно откуда угодно. (исключение - из логики: для этого функцию с данными нужно в xr_effects.script писать).
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Gun12
(возвращаясь в Syntax Checker'у. Еще раз Огромное спасибо!)
Наткнулся на такой факт:
строка (с явно лишим одним из символов '-' или '*' в патерне): string.match('^%s*(.-*%S)') игрою однозначно определяется как 'с ошибкой', а верификация через "Syntax Checker" проходит с 'Ok'.
Это я в задел для работы над ..., когда время будет.
Artos
Я знаю про подобную ошибку. Спасибо что заметил.
Чекер расценивает значение в скобках как строку.
Поэтому, по его разумению, всё правильно. В принципе-то так оно и есть.
Модуль по проверке стринговых операций и передаваемых аргументов я сделал сразу же после релиза этой версии.
Он не пропускает подобных ошибок.
Осталось только внедрить. Но то ли лень, то ли ... стимул короче нужен.=)
ДатчикХабара
Во-первых, нафига писать пнеписям перематр(ы) (inv_max_weight), которые обрабатываются только для актора? Не фатально конечно, но стОит ли мусорить в логике ...
Во-вторых, если твой торговец сделан на базе [m_trader] а не [stalker...] - то он подчиняется схемам для монстров и никакие 'anim = sit' на него не подействуют.
Если пишешь 'С другими работает,а с этим нет' - так и приводи информацию что за 'другие' или чем от 'этого' отличается. Тут нет Кашпировских.
Artos
Любая стандартная анимка(кроме некоторых барменовских - но они вообще не работают на любых NPC, кроме бармена) пашет на NPC -торговце. Загляни в мой журнал - в статье по анимациям у меня целый цикл анимок прописан для одного NPC (а NPC у меня был торговцем на базе stalker_trader).
------------------------------------------- Датчик Хабара
У тебя чего написано в spawn_sections
[твой_сталкер]:stalker
или
[твой_сталкер]:stalker_trader ?
Нужно второй вариант писать.
Сообщение было успешно отредактировано erlik (13-02-2011 16:40 GMT3 часа, назад) Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
ДатчикХабара
Советну немножко: [smart_terrains]
none = true
Ты это пишешь "вне логики". Иначе твой НПС может засосать в гулаг. Нужно писать внутри, например, так:
Насчёт торговца.Та же проблема.Добавляю:
trade = misc\trade_limansk.ltx
и он ведёт себя.как монстр.Убираю - снова человек.Можно ли прописаить путь к файлу торговли по другому.
Никто не сталкивался с такой ошибкой при компиляции аллспавна:
unknown section 'af_slots_spawn'
Died at stkutils/ini_file.pm line 200
Что за секция af_slots_spawn? У меня нет ничего похожего...
И за что отвечает строка 200
Код:
sub value {
my $self = shift;
my ($section, $name) = @_;
if (!defined($self->{sections_hash}{$section}))
{
print "unknown section '" .$section. "'\n";
}
die unless defined $self->{sections_hash}{$section}; -- это что?
return $self->{sections_hash}{$section}{$name};
}
Artos
Ну тут и я ошибся - то что невнимательно прочитал пост, но и ты зря ДатчикаХабара в "сумнения" вводил - большинство ведь наследование от m_trader не делает (так как большинство ориентируется на статьи на вики), и, в основном, все указывают своим торговцам секцию stalker_trader - и следовательно никаких проблем с анимками тут быть не может.
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.