Перейти к контенту

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


Svoboда

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

Кто может подсказать почему этот скрипт срабатывает только когда его вызывают 2 раз? Тоесть по правильному этот скрипт должен работать так:

При первом вызове он должен заспаунить объект в 1 слот и сделать его активным. Но при первом вызове лишь создаёт объект в инветарь, а уже при втором и последующих вызовах работает как надо.

function use_cigarette()
    give_info("ui_inventory_hide")
    local weapon = db.actor:item_in_slot(1)
    finished("cigarette")
    if weapon~=nil then
    if weapon:section()~="cigarette" then 
        this.drop_item_to_inventory(1) 
    end
    db.actor:activate_slot(1)
    if db.actor:object("cigarette")==nil then mn_script.spawn_item_in_inv("cigarette") end
        db.actor:activate_slot(1)
    end
    if weapon==nil then
        db.actor:activate_slot(1)
    if db.actor:object("cigarette")==nil then mn_script.spawn_item_in_inv("cigarette") end
        db.actor:activate_slot(1)
    end
    db.actor:activate_slot(1)
end

Для 'портянок' кодов/логов используем спойлеры! --/Artos

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

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


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

1. Перемещением в слот у меня занимается отдельная функция трансфера. Всё работает.

 

Т.о. заспавнив объект, ты никогда не получишь этот клиентский объект в той же самой функции и в том же самом вызове.

Artos, жаль... И это никак нельзя исправить?

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

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


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

Artos, да нет не приспичило)

Можете ещё подсказать как сделать таймер по реальному времени на использование объекта, чтобы по истечению некоторого времени после использования объект удалялся?

P.S. На ТЧ.

 

Таймеры уже заезженная тема. Посмотри как это сделано в АМК моде, там есть два таймера: по игровому и реальному времени.

ColR_iT

 

Добавлено через 21 мин.:

В АМК смотрел, по такому же принципу сделать не получилось, увы, поэтому и спрашиваю.

P.S. Вылетает игра и ругается на "pstor".

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

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


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

Artos, нет, у меня объект с анимацией, что-то типа активация артефакта. Только она (активация артефакта) у меня идёт бесконечно, анимация каждый раз повтаряется и повторяется.

А можно ссылку хотя бы на одну статью по созданию таймера?

Извини ... я не справочное бюро и потрудить сам поискать. Ссылки на вики-сайты в шапке топика. --/Artos

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

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


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

Вот скрипт старта таймера реального времени. Не мой.

function start_timer(name,delay,action)
    if not delay then
        return false
    end
    
    if not action then
        action = ""
    end

    local time = game.time() --time in seconds since 1970
    local a=1
    while db.storage[db.actor:id()].pstor["rt"..a] do
        a=a+1
        if a>100 then 
            return false 
        end
    end

    save_variable("rt"..a, name)
    save_variable("rt"..a.."d", time+delay*10000)
    save_variable("rt"..a.."p", action)
    
    return true
end

 

После вызова этой функции игра вылетает с логом:

Expression : fatal error

Function : CScriptEngine::lua_error

File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp

Line : 73

Description : <no expression>

Arguments : LUA error: ...ing\s.t.a.l.k.e.r\gamedata\scripts\new_script.script:32: attempt to index field 'pstor' (a nil value)

 

Строчку типа while db.storage[db.actor:id()].pstor["rt"..a] do я никогда раньше не видел и даже не представляю что в ней может быть не так.

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

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


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

Как должна выглядеть логика моба при таком раскладе действий?

После спавна моб ждёт 10 игровых минут и потом направляется в заданную точку, но при этои игнорируя ГГ.

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

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


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

*Shoker*, если так, тогда уж combat_ignore в активную писать. И не combat_ignore = true, а combat_ignore = combat_ignore

[combat_ignore]

И тут уже параметры.

Да и вообще работает схема combat_ignore у мобов?

 

И где бы ещё эти готовые примеры найти...

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


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

gruber, нашёл тутор, спасибо, попробую.

 

Добавлено через 43 мин.:

В туторе такого не нашёл. Кто знает как через логику убить моба, или это невозможно?

 

А вот с этим, плз, в соответствующий топик: "[XXX] Ковыряемся в файлах".

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

--/Artos

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

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


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

Из за чего может быть такая проблема?

Заспавнил мутанта и задал ему логику направится в определённую точку. Но вместо того чтобы двигаться к точке, мутант тупо стоит на месте с анимацией бега.

 

Добавлено через 8 мин.:

Вот что я действительно упустил, забыл сказать важную вещь - мутант спавнится на новой локации.

Секция спавна собаки(моего мутанта) из all.spawn.

; cse_abstract properties
section_name = dog_normal
name = dog_normal_1
position = 179.759155273438,20.1181125640869,79.2889633178711 
direction = 5.63856360713544e-007,-1.32480001449585,-1.41571035783272e-007

; cse_alife_object properties
game_vertex_id = 0 
distance = 40.5999984741211 
level_vertex_id = 383716 
object_flags = 0xffffffbf 
custom_data = <<END
[logic]
active = mob_walker@dog_walk_1

[mob_walker@dog_walk_1]
path_walk = dog_walk_1
on_timer = 10 | mob_walker@dog_walk_2

[mob_walker@dog_walk_2]
path_walk = dog_walk_2
END

; cse_visual properties
visual_name = monsters\dog\dog_red

; cse_alife_creature_abstract properties
g_team = 0
g_squad = 0
g_group = 0
health = 1
dynamic_out_restrictions = 
dynamic_in_restrictions = 

upd:health = 1
upd:timestamp = 0 
upd:creature_flags = 0 
upd:position = 179.759155273438,20.1181125640869,79.2889633178711 
upd:o_model = 0 
upd:o_torso = -1.32480001449585,5.63856360713544e-007,0 
upd:g_team = 0 
upd:g_squad = 0 
upd:g_group = 0

; cse_alife_monster_abstract properties

upd:next_game_vertex_id = 65535
upd:prev_game_vertex_id = 65535
upd:distance_from_point = 0
upd:distance_to_point = 0

; cse_ph_skeleton properties

; cse_alife_monster_base properties

; se_monster properties

Точки я думаю писать уже не нужно?

Не думаю что они чем-то помогут, но вот если что:

[dog_walk_1]
points = p0
p0:name = name00
p0:position = 218.416305541992,21.7092933654785,91.9415588378906
p0:game_vertex_id = 0
p0:level_vertex_id = 421092

 

[dog_walk_2]
points = p0
p0:name = name00
p0:position = 88.924103,-10.092127,118.739883
p0:game_vertex_id = 1
p0:level_vertex_id = 301145

 

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

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


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

А на мой вопрос так и не ответили...

Неужели никто не знает решения? Не поверю...

Если это поможет, то у меня были следующие подозрения:

У сталкеров есть секции такого типа:

[stalker_terrain]

255,000,255,255

008,001,255,255 ;Разрешено ходить по опасным местам на баре

012,001,255,255 ;Разрешено ходить по опасным местам на Милитари

 

У собак же она одна, но может быть она не подходит для моей новой локации или что-то типа этого?

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


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

Artos, ну тогда меня может смущать только сама логика мутанта.

Рабочая ли вообще схема mob_walker?

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


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

Artos, выяснил что виновата именно логика. Когда мутант находится под действием логики, то зависает в истерическом бегу на месте, но стоит ему заметить врага, он выходит из под действия логики и нападает на врага (передвигается). Но стоит врагу пропасть, он снова продолжает выполнять незаконченную логику и зависает... Менял и координаты точек и координаты спавна самого мутанта. Даже прописывал новую локацию в скрипте xr_gulag. Безрезультатно. Уже даже не представляю что ещё можно сделать...

Пробовал без логики. Всё нормально.

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

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


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

Artos, в том то и дело что сделал логику почти точ в точ как у той учебной плоти, а всё равно никак.

Уже даже укоротил... Сделал самую простейшую.

[logic]

active = mob_walker1

 

[mob_walker1]

path_walk = dog_walk_1

path_look = dog_look_1

 

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

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


Ссылка на сообщение
×
×
  • Создать...