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

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

function название_функции()
for i = 1,65535 do
local obj = level.object_by_id(i)
if (obj and IsStalker(obj) and character_community(obj) == "stalker") then -- проверка на то, что объект существует, объект человек и объект из группировки "сталкер".
-- действие
end
end
end

 

 

Изменено пользователем Jurok
  • Нравится 1
Ссылка на комментарий

La'Rento , а почему бы тебе не пользоваться get_time_hours()? пользуйся тем что в сутках 24 часа, а вернее от 0 до 23, к примеру так

if level.get_time_hours()>=23 then
--запустил смену работы, тем самым тебе не нужно будет проверять дни, как только стукнуло 11 часов вечера, нпс сменили вид 
--деятельности
--//ну или так
if level.get_time_hours<=1 then 
--и то же самое, только схема поменяется рано утром 

 

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

Можно ли как-то отследить момент смены костюма у ГГ в слоте и выдать действие?

 

Вот такой функцией проверяю какой костюм у ГГ в слоте, забиндив её в делюту. Но в этом случае получается перегруз памяти или что-то типо этого. Может конечно можно забиндить в какой-то другой функции в файле бинд_сталкер?

 

function outfit_check_up()
local costume
local outfit = db.actor:item_in_slot(7)
   if outfit then
      costume = outfit:section()if string.find(costume, "название_костюма") then
      -- действие
   end
end

Естественно нужно что бы эта проверка  проходила не один раз и не на одном костюме. :)

Изменено пользователем karavan
  • Нравится 1
Ссылка на комментарий

@karavan, ты в ЗП работаешь? Попробуй в actor_binder:use_inventory_item(obj) делать проверку. 

if get_clsid(obj) == clsid.equ_stalker_s then
вызов твоей функции

Еще надо будет добавить проверку, надет ли костюм.

yl59NI59OeI.jpg

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

Помогите пожалуйста полному барану в скриптах сталкера (то есть мне).

Есть один хороший скрипт за авторством Shredder'a для ЗП где выводится пояс артефактов как в ТЧ (немного предыстории, сам скрипт еще был сделан командой OGSM для мода на ЧН, но сам код просто ужасен, в итоге Shredder его изменил). Он работает только на ЗП, при попытке адаптировать на ЧН словил вылет. А именно в ЧН нету метода SetTextureRect. Есть ли ему замена? И как примерно должно работать (если допустим нужно переделывать и так далее). 

Сам кусок кода



-- Вывод артефактов
function show_arts()

if not icons_created then
create_icons()
end

for i = 1,5 do
art = belt[i]
if art and (arts[i] ~= art) then
icons[i]:SetTextureRect(pcfm.get_icon_rect(art))
arts[i] = art
elseif not art then
arts[i] = ""
icons[i]:SetTextureRect(Frect():set(0, 0, 1, 1))
end
end
end
 
Изменено пользователем power-cat
Ссылка на комментарий

Shadows, спс заработало. :) Помню еще когда ковырялся в скриптах ЧН\ЗП приходилось иногда переименовывать одну и ту-же функцию. Правда не помню какую... мож даже и эту.

P.S. Кстати где можно глянуть переименованные функции? Сравнение ТЧ\ЧН с ЗП.

И еще есть такой вопрос, правда кода для примера нету. Как сделать скриптовое меню аля ТСС для ЧН\ЗП? Тама используется насколько помню метод Init. Есть аналог какой? 

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

И еще есть такой вопрос, правда кода для примера нету. Как сделать скриптовое меню аля ТСС для ЧН\ЗП? Тама используется насколько помню метод Init. Есть аналог какой? 

Оригинальное меню такое-же скриптовое как и билдовское. Просто в билдовском вместо "шняги" (CUIMMShniaga) используются обычные кнопки.

 

 

Кстати где можно глянуть переименованные функции? Сравнение ТЧ\ЧН с ЗП.

http://www.amk-team.ru/forum/index.php?showtopic=7450&p=515301

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

Именно вот эти методы я и имел ввиду когда говорил о билдовском меню. 

 

CUIStatic
void Init(float x, float y, float w, float h);
void Init(string texture, float x, float y, float w, float h);

Ни в ЧН, ни в ЗП этих методов вроде как и нету. А они как раз и юзаются в билдовском меню (хотя точнее сказать один из этих методов). Опять таки альтернатива есть?

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

Кто нибудь отправлял НПС на другую локацию? 

utils.send_to_nearest_accessible_vertex( npc, vertex_id )
npc:set_dest_level_vertex_id(vertex_id)

действуют в пределах локации, т.к. требуется level_vertex текущей локации ГГ

Приходит на ум прописать сталкеру smart_terrain на другой локации,c помощью amk.write_stalker_params(), но метод какой-то криминальный).

Может, кто знает более легальный метод?

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

@dukekan, сама игра в симуляции тасует неписей по локациям, а вот методов управления этим процессом нет. В оригинальной игре два Кругловых - один на ДТ, другой на Янтаре для симуляции одновременного с игроком перехода на Янтарь. Если уж разработчики так сделали, вряд ли есть способы.

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

KD87,

 

 

В оригинальной игре два Кругловых - один на ДТ, другой на Янтаре для симуляции одновременного с игроком перехода на Янтарь

Я думаю, что только для симуляции одновременности так и сделано, поскольку в целом неписи с уровня на уровень ходят. Однако, единственный штатный метод отправить непися на другую локацию через скрипты - это используя смарты. Когда непись прописывается в смарт, то ему выдаётся работа, работа в смарте (это не работа в гулаге) - это просто идти в точку пути, а точка эта может быть и на другом уровне, так что непись туда и топает при необходимости переходя в оффлайн и идя по геймнодам. Инициируется это всё скриптами, движок там только автоматически вызывает скриптовые функции. Однако, сам метод получается ограниченный. Требуется смарт, требуется прописать в него непися, требуется заранее подготовить пути.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

 

 


Требуется смарт, требуется прописать в него непися, требуется заранее подготовить пути.

Жаль конечно, что для массовки такой метод не подходит. Может быть тогда поступать как разработчики в ЗП, т.е. гнать НПС на край локации, как дойдёт - удалять его, заспавнив его же уже на другой локации. Но так, как я понимаю, НПС через 1 локацию не отправить, только на соседнюю.

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

Всем привет,

каким образом проверить, играет ли анимку физ. объект на данный момент? Занимаюсь написанием, точнее, доведением до ума новой секции логики, пытаюсь добавить поддержку сигнала anim_end.

self.object:animation_count() == 0 не особо действует, хотя может, в другом месте ошибка. Заранее спасибо.

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

Столкнулся со со следующей задачей: добавить в однотипные квесты возможность поиска предметов на классах, отличных от классов оружия и брони.

Благодаря совету Dennis_Chikin   http://www.amk-team.ru/forum/index.php?showtopic=5525&page=533#entry787682

попробовал выполнить отрегистрацию предметов в se_item.script по аналогии с:

 

function se_weapon_magazined_w_gl:on_register()
    cse_alife_item_weapon_magazined_w_gl.on_register( self )
    -- Регистрация в таскменеджере
    task_manager.get_random_task():register_target(self)

    -- Собираем статистику по предметам.
    if registred_items[self:section_name()] == nil then
        registred_items[self:section_name()] = 1
    else
        registred_items[self:section_name()] = registred_items[self:section_name()] + 1
    end
end

function se_weapon_magazined_w_gl:on_unregister()
    --' Отрегистрация в таскменеджере
    task_manager.get_random_task():unregister_target(self)
end

 

вот так:

class "se_item_detector" (cse_alife_item_detector)
    function se_item_detector:__init (section) super (section)
end

function se_item_detector:on_register()
    cse_alife_item_detector.on_register( self )
    -- Регистрация в таскменеджере
    task_manager.get_random_task():register_target(self)

    -- Собираем статистику по предметам.
    if registred_items[self:section_name()] == nil then
        registred_items[self:section_name()] = 1
    else
        registred_items[self:section_name()] = registred_items[self:section_name()] + 1
    end
end

function se_item_detector:on_unregister()
    --' Отрегистрация в таскменеджере
    task_manager.get_random_task():unregister_target(self)
end

 

Также добавил класс в class_rehistrator.script (насколько я понял, туда тоже нужно):

cs_register (object_factory, "CDetector",       "se_item.se_item_detector",  "D_SIMDET",    "detector_s")
 

Поставил в поле таска target = detector_simple - и квест не появляется.

Что не так?

Изменено пользователем ColR_iT
Неужели так сложно вставить теги?

Подарки

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

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

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

    Капрал Хикс, а он регистрируется ? Лог вывести ? Возможно, это таки другой класс, и другой скрипт, а не se_item.

    Ну и task_manager.ltx еще раз проверить, тоже выводом в лог же.

     

     

    P.S. А вообще мне этот механизм не нравится принципиально. Ибо - жрет.

     

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

    После закрытия окна остаток денег просто плюсуется к общим деньгам.

     

    Смысл - убрать поршни и регулярные проверки на "есть квест/выполнен/провален", и дурацкие диалоги с вопросами ("я буду, я не буду, я отказываюсь, да нет. не отказываюсь...").

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

    Народ, можете немного помочь ? сделал скрипт с анбиндом пда

    local console = get_console()function update()
     if not db.actor:object("device_pda") then
     console: execute("unbind active_jobs")
    else
     console: execute("bind active_jobs kP")
       end
    end

    Ни вылета ни работы, может поможете ? или подскажете как еще сделать ?

     

    А что по твоему должно произойти?

    ColR_iT



    По идее не должно открываться пда если его нету в инвентаре (сам скрипт в записал в апдейт)

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

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

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

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

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

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

    Войти

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

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

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

    AMK-Team.ru

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