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

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

Спасибо за обьяснение!

Вот я ещё какое нашёл:

local  obje_sec = db.actor:object("skaner") 
    if  obje_sec == nil then

Как думаете будет работать? Я уже с пол часа пытаюсь проверить но с XML появилось куча проблем, вот по 1 исправляю :)

Изменено пользователем TRAMP14
Ссылка на комментарий

TRAMP14, данная функция db.actor:object("skaner") - вернет экземпляр класса из инвентаря по секции skaner, и если его нет, то что-то можно будет сделать. Синтаксически это правильно, но работать будет, если это уместно применить!

В теме "справочник по функциям и классам" вот, что написано по поводу этой функции:

game_object* object(string) - возвращает объект из инвентаря по секции
, т.е. ты получишь тоже самое, что и local obj = db.actor:item_in_slot(6), только разница в том, что первый раз ты получаешь объект из инвентаря, а во втором из слота. Изменено пользователем Куфзук
Ссылка на комментарий

Спасибо! Всё заработало!

Ещё вопрос а через db.actor:position() можно сравнивать и получать координаты? Или нужно чтото ещё дописывать?

Ссылка на комментарий

Можно, но удобней сравнивать координаты по x,y,z. Для этого нужно просто написать db.actor:position().x, db.actor:position().y, db.actor:position().z

Freedom

Ссылка на комментарий
TRAMP14, таким образом ты получишь позицию актора, но только координаты, левел и гейм вертексы нужно находить отдельно. Присваеваешь переменной:
local actor_position = db.actor:position()

и можешь манипулировать. Например так:

local actor_position = db.actor:position()
if actor_position.x > 100 then

получаем условие, если позиция актора, по координате Х, больше 100, производим действия.

Ссылка на комментарий

А, допустим, можно снять 4 координаты и сделать квадрат и проставить все условия (типо 100 по x, 5 по y) чтобы при входе в квадрат что то происходило? Или для етого есть другие способы?

И ещё в условии

if  obje_sec == nil then

можно поставить

if  obje_sec == true then

?

 

p/s/ Извините за глупые вопросы, я только учусь

Изменено пользователем TRAMP14
Ссылка на комментарий

TRAMP14,

if obj == nil --если обьект равен нил,это проберка на НЕ существование обьекта. Тоже самое что

if not obj --или

if obj == false -- все это проверки на отсутствие какого либо значения у переменной obj.

Вот проверки на существование:

if obj then

if obj == true then

if obj ~= nil --это все одно и тоже

у обьекта можно проверить многое, например состояние

if obj:conditon() > 0.5 then --если состояние не менее половины то...

Проверим группировку

if obj:community() == "bandit" then

Если нужно сделать несколько проверок используй операторы and (логическое "и") or (логическое "или").

Ссылка на комментарий
А, допустим, можно снять 4 координаты и сделать квадрат и проставить все условия (типо 100 по x, 5 по y) чтобы при входе в квадрат что то происходило?

Это уже давно сделали ПЫС. И называется это спейс_рестриктор

Freedom

Ссылка на комментарий

TRAMP14

--/Если ид НПС присвоен в аллспавне:
local npc = level_object_by_sid(ИД)
иначе:
npc = level.object_by_id(ИД)
local npc_name = npc:name()  -- получили имя непися

Изменено пользователем Stalk15
Ссылка на комментарий

Вопрос к знающим: как прописать что бы сталкер был враг, но Гг не трогал, пока тот не начнет бой или не подойдет ближе х метров +что бы сталкер продолжал ходить под симуляцией?

 

 

Не соответствует. N6260

Ссылка на комментарий

Попробуй так:

[logic]
active = walker

[walker]
combat_ignore_cond = always

 

или

 

[logic]
active = walker

[walker]
combat_ignore = combat_ignore

[combat_ignore]

 

Просто точно уже не помню.

Мод "Жесть"

В команду Two Team ("Жесть") требуется моделлер.

Ссылка на комментарий

ZeeK, если для ЗП, попробуй так:

[logic]
active = remark

[remark]
combat_ignore_cond =  {=is_enemy_actor -info} true
combat_ignore_keep_when_attacked = false

[combat_ignore]

on_hit = hit

[hit]
on_info = {=hit_npc_from_actor } %+info%

Ссылка на комментарий

Извините за тупой вопрос! Что нужно написать чтобы была проверка ранга ГГ?

Ну например если он новичок то.. если ветеран то ... и т.д.? :mellow:

Сообщение от модератора Куфзук
local actor_rank = db.actor:rank()
if actor_rank == 100 then
-- тут пишешь то, что будет, если ранг актера равен 100
end

в переменной actor_rank у тебя будет числовое значение, это и будет ранг ГГ.

 

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

Народ правильно я написал

 

function test()
local satiety= db.actor:satiety()
    if satiety == <= 0.5 then
    news_manager.send_tip(db.actor, пора хавать, 0, "Текст:", 17000)
end

Сообщение от модератора Куфзук
Нет! Функции satiety() не существует, разве, что ты сам ее написал!? В файле _g.script есть функция on_actor_satiety(), но как она работает, я не знаю.
Изменено пользователем Куфзук

Проц: Intel Core x2 2.4 Ггц. Разогнаный до 3.9 Ггц.

ОС: Windows 7 Максимальная x64 bit

ОЗУ: 4000 мб.

Видеокарта: Nvidia 8600 GT

 

 

Ссылка на комментарий

Здравствуйте! Уже 3 день бьюсь с одной проблемой.

[spoiler=Проблема :)]У учёных на Янтаре создаю предмет (4 предмета, просто разница в имени секции и позиции):

[13159]
; cse_abstract properties
section_name = inventory_box
name = komnata_yantar_divan3
position = 30.264,-10.982,-279.780
direction = 0.015,0,-1.000

; cse_alife_object properties
game_vertex_id = 1480
distance = 0
level_vertex_id = 54978
object_flags = 0xffffff3b
custom_data = <<END
[logic]
cfg = scripts\son_yantar_uch.ltx
END
;story_id = 12079

; cse_visual properties
visual_name = physics\equipment_cache\equipment_box_02_case

С логикой:

[logic]
active = ph_idle

[ph_idle]
tips = spi_spoki
on_use = %+budu_v_bunkere_spat%

В том же месте делаю спейс_рестриктор:

[13170]
; cse_abstract properties
section_name = space_restrictor
name = komnata_restrictor_son
position = 28.974,-11.688,-279.474
direction = 0,0,0

; cse_alife_object properties
game_vertex_id = 1480
distance = 0
level_vertex_id = 54978
object_flags = 0xffffffff
custom_data = <<END
[logic]
cfg = scripts\bunker_uchen.ltx
END

; cse_shape properties
shapes = shape0
shape0:type = box
shape0:axis_x = 12.0,0,0
shape0:axis_y = 0,10.0,0
shape0:axis_z = 0,0,12.0
shape0:offset = 0,0,0

; cse_alife_space_restrictor properties
restrictor_type = 3

С логикой:

[logic]
active = sr_idle@pwork

[sr_idle@pwork]
on_actor_inside = sr_idle@work

[sr_idle@work]
on_actor_outside = sr_idle@pwork
on_info = {+budu_v_bunkere_spat} %=son_yan_sleep%

В xr_effects добавляю функцию:

function son_yan_sleep()
    local stype=nil
    if has_alife_info("budu_v_bunkere_spat") then
        stype="matras"
    end
    if stype~=nil then
        amk.start_timer("sleep_"..stype,0.1,matras)
    end
    if has_alife_info("budu_v_bunkere_spat") then
        db.actor:disable_info_portion("budu_v_bunkere_spat")
    end        
end

Вся проблема в том, что функция son_yan_sleep никак не хочет вызываться. Не могу понять, где ошибка. В Баре делал всё также, работало. Всё отличие было в том, что в Баре использовал уже существующий рестриктор - bar_bar_room_area. Подскажите, в чём дело?

 

Ссылка на комментарий

Disord

 

[logic]

active = ph_idle

 

[ph_idle]

tips = spi_spoki

on_use = %+budu_v_bunkere_spat%

и сдесь имя функции из xr_effects

 

tips = spi_spoki зарегестрированн в string_table_ui.xml ?

 

<?xml version="1.0" encoding="windows-1251" ?>

<string_table>

<string id="cant_walk">

<text>Вы слишком истощены, чтобы двигаться</text>

</string>

<string id="cant_walk_weight">

<text>Вы слишком перегружены, чтобы двигаться</text>

</string>

<string id="dar_poltergeist_hold_the_door">

<text>Кто-то удерживает дверь.</text>

</string>

<string id="Global Map">

<text>Глобальная карта</text>

</string>

<string id="gun_jammed">

<text>Оружие заклинило. Нужно перезарядить.</text>

</string>

<string id="inventory_box_use">

<text>Обыскать ящик ($$ACTION_USE$$)</text>

</string>

<string id="Local Map">

<text>Локальная карта</text>

</string>

<string id="st_game_saved">

<text>игра сохранена</text>

</string>

<string id="tip_car_locked">

<text>Заблокировано</text>

</string>

<string id="tip_car_use">

<text>Открыть дверь ($$ACTION_USE$$)</text>

</string>

<string id="tip_door_close">

<text>Нажмите ($$ACTION_USE$$), чтобы закрыть дверь</text>

</string>

<string id="tip_door_coded">

<text>Дверь закодирована</text>

</string>

<string id="tip_door_decode">

<text>Нажмите ($$ACTION_USE$$), чтобы декодировать дверь</text>

</string>

<string id="tip_door_decoding">

<text>Идет процесс декодирования</text>

</string>

<string id="tip_door_locked">

<text>Дверь заперта</text>

</string>

<string id="tip_door_open">

<text>Нажмите ($$ACTION_USE$$), чтобы открыть дверь</text>

</string>

<string id="tip_gate_close">

<text>Нажмите ($$ACTION_USE$$) для того, чтобы закрыть ворота</text>

</string>

<string id="tip_gate_locked">

<text>Ворота заблокированы</text>

</string>

<string id="tip_gate_open">

<text>Нажмите ($$ACTION_USE$$) для того, чтобы открыть ворота</text>

</string>

<string id="tip_monolith">

<text>ЗАГАДАТЬ ЖЕЛАНИЕ ($$ACTION_USE$$)</text>

</string>

</string_table>

 

 

Грубо говоря при юзе обьекта срабатывает функция .

 

 

Ну и для примера вот

 

[8388]

; cse_abstract properties

section_name = physic_object

name = sar_monolith

position = 24.0560283660889,58.6652679443359,42.6767501831055

direction = 0,0.00899999216198921,0

 

; cse_alife_object properties

game_vertex_id = 2402

distance = 0

level_vertex_id = 9864

object_flags = 0xffffff3a

custom_data = <<END

[collide]

ignore_static

 

[logic]

cfg = scripts\sar_monolith.ltx

END

 

; cse_visual properties

visual_name = physics\anomaly\artefact_monolit

 

; cse_ph_skeleton properties

 

; cse_alife_object_physic properties

physic_type = 0x3

mass = 10

fixed_bones = link

 

 

логика

 

[logic]

active = ph_idle

 

[ph_idle]

tips = tip_monolith

on_use = nil %+sar2_monolith_miracle =sar_monolith_miracle%

 

функция в xr_effects

 

function sar_monolith_miracle(actor, npc)

--' Убил лидеров группировок

if has_alife_info("mil_lukash_dead") and

has_alife_info("bar_voronin_dead")

then

game.start_tutorial("mov_desire_3")

return

end

 

--' Много денег

if db.actor:money() >= 50000 then

game.start_tutorial("mov_desire_2")

return

end

 

--' Хорошая репутация

if db.actor:character_reputation() >= 1000 then

game.start_tutorial("mov_desire_1")

return

end

 

--' плохая репутация

if db.actor:character_reputation() <= -1000 then

game.start_tutorial("mov_desire_4")

return

end

 

game.start_tutorial("mov_desire_5")

end

 

Изменено пользователем AKKK1
Ссылка на комментарий

AKKK1, я и пробовал делать и через рестриктор, и так:

on_use = %=my_function%

Ничего. Вообще. Теперь и в Баре этот способ тупит - иногда срабатывает, иногда нет. spi_spoki конечно зарегестрировал в файле с текстами. Да это и не было бы причиной неправильной работы.

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   1 пользователь

×
×
  • Создать...