Все посты %s в %S - AMK Team
Перейти к контенту

Скриптование


Svoboда

Рекомендуемые сообщения

@Gray Hawk, на форуме есть мод, подобие просмотра книги или фотографии( на деле текстурки ). Поискать надо, название не помню.

 

Народ! 
Помогите найти ошибку.
Вот сам код, вызываеться из bind_stalker.update()

 

local s_obj = {
"[[ep\military\ml1]]",
"[[ep\military\ml2]]",
"[[ep\military\ml3]]"
}
local snd_flag = false

 

function mil_sound_update()

local level_gg = level.name()
if snd_flag == false and level_gg == "l07_military" then
local s_obj=s_obj[math.random(table.getn(s_obj))]
local snd_obj = xr_sound.get_safe_sound_object(s_obj)
        snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
snd_flag = true
end
end

 

Лог вылета - 

 

[error]Line : 73
[error]Description :
[error]Arguments : LUA error: ...ow of chernobyl\gamedata\scripts\bind_stalker.script:324: attempt to call field 'mil_sound_update' (a nil value)

 

 

Изначально грешил на таблицу(мол получение звука неверно), но и без неё вылетает...

Не соответствует правилам.

Поделиться этим сообщением


Ссылка на сообщение

@Romann@Serge!@Dennis_Chikin, никто из вас не прав, в данной проблеме...

Упрастил функцию( нет, ну а что? Никто не запрещает каждую итерацию цикла делать что захочу...)

 

 

function mil_sound_update()

local level_gg = level.name()
if level_gg == "l07_military" then
local snd_obj = xr_sound.get_safe_sound_object([[ep\hurt]])
        snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
end
end

 

Вылет...

WAT!&!

Перенес в другой скрипт, функцию не менял - НЕТ вылета...

Все файлы проверяю постоянно чекером ошибок синтаксиса... но видимо он не все знает...

У кого какие идеи?

Не соответствует правилам.

Поделиться этим сообщением


Ссылка на сообщение

@Romann, даже ваш старый вариант прекрасно работает!

Проблема была в самом файле скрипта... И не понятно, какого она вообще рода...

Не соответствует правилам.

Поделиться этим сообщением


Ссылка на сообщение

@Dennis_Chikin@Serge!, я не про то....

 

Вот смотрите.

Если я вызову из того скрипта, пусть даже это:

 

get_console():execute("1")

 

или это

 

if db.actor:has_info then

give_info бла бла бла

 

Или любую другую функцию - получу вылет... Вот я к чему...

 

А звуки прекрасно работают, за это отдельное спасибо!

Не соответствует правилам.

Поделиться этим сообщением


Ссылка на сообщение

Такая проблема. Использую модифицированную ph_car от lscon.

Вот в чем проблема. Перевел функцию на новое хранилище обьектов, И так, переписал функцию.

 

 

function action_car:update_friends_and_target()
self.friends = {}
local obj

for k,v in pairs(db.btr_target) do
obj=level.object_by_id(k)
if obj and ( (IAmAStalker[obj:clsid()] and obj:character_community()=="military" and obj:alive()) or
(obj:section()=="vehicle_btr" and obj:id()~=self.object:id()) ) and
self.fire_range_sqr>self.object:position():distance_to_sqr(obj:position()) then
self.friends[k] = obj:section()
end
end

if self.st.fire_target == "monsters" then
-- враги монстры, значит друзья все сталкеры и выбираем ближайшего монстра в качестве цели
local dist = 0
local nearest = 100000
local nearest_limit = 25 -- но не ближе 5 м, иначе БТР сам себе мешает стрелять
local target = nil

for id,obj in pairs(db.btr_target) do
if obj:alive() then
dist = self.object:position():distance_to_sqr(obj:position())
if dist < self.fire_range_sqr then
if IAmAStalker[obj:clsid()] then
-- добираем всех сталкеров в друзей
self.friends[id] = obj:section()
elseif IAmAMonster[obj:clsid()] and nearest_limit < dist and dist < nearest and self.car:IsObjectVisible(obj) then
-- ищем ближайшего монстра в качестве цели
nearest = dist
target = obj
end
end
end
end

if target then
self.target_obj = target
self.state_firetarget = state_firetarget_enemy
else
self.target_obj = nil
self.state_firetarget = state_none
end
end
end

 

 

Теперь данные берем из db.btr_target. Там, вроде бы, храниться то, что нужно.

Вот инициализация хранилища:

 

 


function add_obj( obj )
if IsStalker(obj) then
creature[obj:id()] = true
elseif IsMonster(obj) then
creature[obj:id()] = false
end

if IsMonster(obj) then
monster_stock[obj:id()] = obj
end

if IsStalker(obj) and IsMonster(obj) then
btr_target[obj:id()] = true
end
end

function del_obj( obj )
storage [obj:id()] = nil
if IsStalker(obj) or IsMonster(obj) then
creature[obj:id()] = nil
end
if IsMonster(obj) then
monster_stock[obj:id()] = nil
end

if IsStalker(obj) and IsMonster(obj) then
btr_target[obj:id()] = nil
end
end

 

 

Итого - ничего. Если выставить db.creature - вылет со ссылкой на obj(мол boolean value). Если db.storage - вылет со ссылкой на метод alive(), мол его к obj применить нельзя...

Вроде все должно работать, в остальных частях схемы(логика БТР) проблем нет, брал прямо из ОП-2.

 

Кто-то скажет скопировать оригинальный btrs_friends = {}, еще раз говорю - на счет друзей БТР фишка не особо нужна. Тем более проверка на группировки и прочее уже вшита в функцию.

 

Жду вашей помощи...

Изменено пользователем CRAZY_STALKER666

Не соответствует правилам.

Поделиться этим сообщением


Ссылка на сообщение

Итак, после over9000 вылетов, поломок update() и результатов = nil, я добился этого - БТР гасит монстров!!!

Может, пригодиться кому.

Для чистого ТЧ, разве что нужно объявить хранилище monster_stock, там только монстры...

 

 

function action_car:update_friends_and_target()

 
get_console():execute("CHEKING!!!")
 if self.st.fire_target == "monsters" then
for k in pairs(db.monster_stock) do
local obj = level.object_by_id(k)
if obj and IsMonster(obj) and obj:alive() and self.car:IsObjectVisible(obj) then
               self.target_obj = obj
               self.state_firetarget = state_firetarget_enemy
get_console():execute(" !!_"..obj:name().."_!!")
end
end
end
end
  • Нравится 1

Не соответствует правилам.

Поделиться этим сообщением


Ссылка на сообщение

Наткнулся на интересную штучку в секции [spawner]

 

 

[spawner]

cond = never

(Была у БТР в Припяти, хотя я там вообще БТР в оригинале не припомню...

 

В xr_spawner.script такого условия "never" нет...

Выходит её теоретическое значение : когда спавнить - НИКОГДА!!11 ? :D

А зачем она тогда?)

Не соответствует правилам.

Поделиться этим сообщением


Ссылка на сообщение
Может потому и нет его в оригинале, что "never" ?

 

А описание скриптовое этого never где? А?

 

P.S Условие спавна - "никогда" сводит на нет весь сокральный смысл секции спавна БТР, ведь описание всех его параметров просто не нужно в итоге, ведь "never-never" не будет использовано....

Изменено пользователем CRAZY_STALKER666

Не соответствует правилам.

Поделиться этим сообщением


Ссылка на сообщение

 

 

И при чем здесь xr_spawner ?

 

Цитирую(http://stalkerin.gameru.net):

Общая секция спавнер

та секция, которая присутствует как у NPC, так и у монстров....

 

В самом конце:

Файл: gamedata\scripts\xr_spawner.script

Не соответствует правилам.

Поделиться этим сообщением


Ссылка на сообщение

Другой вопрос - xr_robbers - кто-нибудь когда-нибудь пытался эту схему использовать? Работоспособна ли она?

Не соответствует правилам.

Поделиться этим сообщением


Ссылка на сообщение

 

 

Вообще-то насчет не используемых вещей в скриптах\конфигах\спавне - не ужели ты впервые узнал, что разрабы наплодили вышеназванного в приличном кол-ве и не удосужились это подчистить даже в релизе ?

 

Знал.

Но не я один их замечал, исследовал.

Может кто и довел скрипт до конца. Вот и интересуюсь...

Не соответствует правилам.

Поделиться этим сообщением


Ссылка на сообщение
максимальное количество lvid на конкретной локации?

 

Тут посмотри:

https://github.com/dsh2dsh/op2ogse/blob/master/gamedata/scripts/ogse_anomaly.script

Изменено пользователем CRAZY_STALKER666

Не соответствует правилам.

Поделиться этим сообщением


Ссылка на сообщение

 

 

скриптом заспавнить машину/бтр ?

 

Для машины(нивы например) хватит alife:create()

А вот для БТР, с логикой,как положено - смотри выше пост.

Не соответствует правилам.

Поделиться этим сообщением


Ссылка на сообщение

Такой вопрос.

Через скрипт отрисовываю по координатам ГГ партикл(снег), но рисуеться он как бы в стороне от ГГ, и иногда выглядит это совсем некрасиво, и нереалистично. Вот сама функция:

 

if not self.particles then
self.particles=particles_object("ghoul\\global_snow")
self.particles:play_at_pos( db.actor:position() )
end

if self.particles then
self.particles:move_to(db.actor:position(),vector():set(10,2,15))
end

 

 

На месте цифр 10,2,15 стояли нули в исходном варианте, я думал добавить значение для вектора ,тем самым сместить положение точки отрисовки, но ничего не изменилось. Подскажите, как возможно решить проблему. Может быть сначала поработать с координатами ГГ, попробовать поприбовлять к ним значения исходя из данного относительно времени? Тоесть как бы подменять их на новые в рамках функции.

Подскажите, у кого какие идеи...

Не соответствует правилам.

Поделиться этим сообщением


Ссылка на сообщение

 

 

что мешает посмотреть любой зимний мод, в котором это работает?

 

Отвечу - материал взят именно из него.

Там это в таком кривом варианте и оставлено...

Не соответствует правилам.

Поделиться этим сообщением


Ссылка на сообщение

Выполнил функцию( Тч 1.0004)

 

function pri_scene_rel()
relation_registry.set_community_relation("stalker","actor_freedom",-5000)
end

 

 

Группировки все рабочие, но ловлю вылет:

 

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 :
[error]Arguments : LUA error: ...adow of chernobyl\gamedata\scripts\xr_effects.script:152: attempt to call field 'set_community_relation' (a nil value)

 

 

В инете искал, и не нашел примеров использования .set_community_relation в ТЧ. Быть может ее там просто нет? Есть ли ей альтернатива, или я просто накосячил в аргументах функции?

Не соответствует правилам.

Поделиться этим сообщением


Ссылка на сообщение

 

 

Использование set_community_relation в этой функции верное.

 

Возможно мы не поняли друг друга.

Есть ли в ТЧ вообще эта функция? 

Не соответствует правилам.

Поделиться этим сообщением


Ссылка на сообщение

 

 

В твоем случае, я думаю, подойдет, так как, если не ошибаюсь, то ты хочешь поссорить актора, который состоит в Свободе, со сталкерами (как группировкой). Такое возможно.

 

Неправильно ^_^

Нужно поссорить 2 группировки, ГГ к ним отношения не имеет.(На названия группировок смысла нет смотреть, их не я делал и использую по своему).

В таком случае, если данной функции нет, можно ли её реализовать без ковыряний движка?

Не соответствует правилам.

Поделиться этим сообщением


Ссылка на сообщение

@Карлан, ок тогда поступим так.

У каждого моего НПЦ из сценки( какой не скажу, секрет типо <_< ) есть уникальный id. И получить его можно вплоть до:


 

local id_kl7 = my_sid.pri_killed_3

local se_obj_1 = alife():object(id_kl7)

На выходе имеем alife():object. Но это я использую для удаления вышеуказанных.

Значит, можно написать функцию, которой я передам 2 аргумента(2 нпц) и она поссорит? Просто как правильно и аккуратно это сделать, не помню.

 

З.Ы Через секнду озарение пришло.

М.б так прокатит?)

 

function set_enemies(obj, obj_2)

-- тут надо получить НПЦ вышеуказанным способом
if npc1 and npc1:alive() then -- тут проверить нет ли у нас NIL и не мертвы ли они.
npc:set_relation(game_object.enemy, npc1) -- ссорим однго относительно другого
npc1:set_relation(game_object.enemy, npc) -- наоборот
end
end
end
Изменено пользователем CRAZY_STALKER666

Не соответствует правилам.

Поделиться этим сообщением


Ссылка на сообщение

@Карлан, смотри, новые подробности.

 

1.Группировка, которую добавлял не я, не доделана, при смерти НПЦ из нее вылет, ссылающийся на death_manager, значит неизвестно где там еще накосячили. А делал то DEXXX...

 

2. Твой способ может и прокатит, но раз у меня есть конкретные обьекты, не проще оперировать ими а не группировками?

 

3. Попробовал применить к своему способу set_relation() - вылет:

 

[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 :
[error]Arguments : LUA error: ...adow of chernobyl\gamedata\scripts\xr_effects.script:259: attempt to call method 'set_relation' (a nil value)

 

 

Применим ли set_relation для обьекта типа alife():object?

Не соответствует правилам.

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...