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

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

В se_stalker (по крайнем мере в ЧН) есть ф-ия on_spawn(), которая вызывается собстно в момент спавна НПС.

В оригинале она пустая (не считая какого то стандартного классового вызова), я её использую чтобы отловить момент спавна НПС и заспавнить ему в инвентарь оружие и прочие принадлежности (чтобы не мучаться с xml-ками)

 

Вдруг кто с ней работал - у неё никаких "неприятных" особенностей нету?

А то уже не знаю от чего у меня НПС виснет. Уже и скрипты откатывал, и инвентарь проверял\удалял и нет-пакет разбирал его.

Даже спавнил около 200-300 сталкеров, ни один не вылетел.

 

А так сталкиваюсь с непонятным редкими зависаниями. Например сегодня один раз зависла игра когда просто стрельнул из гранатомёта в нескольких сталкеров %)

 

Использую перехватчик от Alpet-а, в один из таких зависов с НПС он мне вывел в свою консоль вот такое:

disassembling:
774c5e40 public NtWaitForSingleObject:  ; function entry point
774c5e40   mov     eax, $187
774c5e45   mov     edx, $7ffe0300
774c5e4a > call    dword ptr [edx]      ; KiFastSystemCall (ntdll.dll)
774c5e4c   ret     $c

 

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

Появилась необходимость сохранить значения переменных в некотором скрипте, которые выставлены до начал игры, чтобы они не пропали после загрузки.

Делаю (а точнее переделываю) меню настроек для мода, настройки выставляются в начале игры, а после идёт уже загрузка.

Так вот в момент загрузки значения моих переменных само собой обнуляются, это можно как то избежать?

Скрипт настроек брал из Faction Commander, там настройки сохранялись в текстовый файл. У меня было также, но этот метод для меня был не очень удобен.

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

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

Реклама любых модов бесплатно на моём

сайте писать в личку

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

Ммм, у АМК по умолчанию есть два типа таймеров, их функции описаны в amk.script:

1) По игровому времени

--старт таймера в игровом времени

function g_start_timer(name,delay_d,delay_h,delay_m,action)

name - имя таймера

_d - игровые дни

_h - часы

_m - минуты

action - доп параметр (необязателен) в котором ты можешь передать какое то число или строку.

 

2) По реальному времени (В секундах, тот, что нужен тебе, только он ещё зависет от скорости погоды (та, что в alife.ltx прописана, time_factor))

--старт таймера в реальном времени

function start_timer(name,delay,action)

name - имя

delay - кол-во секунд

action - аналогично

 

Сам же таймер создаётся в функции

function __do_timer_action(select_string,params_string)

 

Думаю если ты на неё взглянешь то всё поймёшь.

select_string - то самое name

params_string - соответственно action

 

Как их вызвать смотри в том же amk_mod.script (они например в сне активно используются)

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

 

Само собой у тебя скрипт amk.script должен быть корректно подключён к своему моду. (Если ты конечно делаешь мод с нуля а не на уже готовом варианте где amk.script подключён)

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

*Shoker*, что-то ты (ИМХО) замудрился ...

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

Вот только зачем(?) так измываться над собою и кодами? Ловить 'своего' непися из кучи спавнящихся по всей(!) Зоне (только на старте НИ их ~1000) - это на садомазохизм смахивает. :crazy:

 

Насчет предстартовых настроек:

Если пытаешься присваивать чему-то некие значения ДО старта самой игры - то только через какой-либо файл возможно передавать свои настройки. Даже alpet'товский Luacap (сторонний модуль) не может этого из своего дебаг-стека. Все, что было до запуска игры удаляется из памяти (ресурсов игры). Так что или через user.ltx или аля-Faction Commander, т.е. через 'io'.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Всем привет! Делаю мод на ЧН, и вот столкнулся со следуещей проблемой:

В ЧН работа некоторым смартам не прописана(нпс тупо сидят в центре) и вот я прописываю в all.spawn смарту

 

[exclusive]

......

END

 

Но при заселение этого смарта происходит безлоговый вылет, скорее всего из-за того что точки path_walk находятся еще дальше чем def_restr

И как это исправить? Заданием out_restr в файле логике?

 

 

 

Ссылка на комментарий
*Shoker*, что-то ты (ИМХО) замудрился ...

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

Вот только зачем(?) так измываться над собою и кодами? Ловить 'своего' непися из кучи спавнящихся по всей(!) Зоне (только на старте НИ их ~1000) - это на садомазохизм смахивает. :crazy:

 

Я использую эту функцию для спавна инвентаря неписям. :)

И она делает это для всех не сюжетных НПС, так что её использование вполне пригодно для это цели... надеюсь.

Разве что при старте игры несколько секунд идёт довольно большой лаг, а в дальнейшем ничего.

 

Насчет предстартовых настроек:

...

 

Понял, спасибо, жалко. Ну тогда пойду другим путём.

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

Artos

Иль присвой аномалиям тип рестриктора для запрета входить в них и не будут твои неписи в них заходить ...

Такой способ не позволяет сделать фильтрацию NPC по рангам и другим параметрам, которую планировалось (в случае успешного тестирования) добавить в тот код, который я выкладывал (то был "черновой" вариант).

 

Сорри, но твой путь тупиковый и у тебя скооее получается не упражнение в кодинге, а испражнение и напрсная трата времени. ИМХО.

Я уже понял. Просто при существующих ограничениях не вижу дугого способа, т.к.:

1. Коллбеки для отлова слышимых NPC'ом звуков для этого не годятся

2. best_danger():object() никогда не возвращает аномалии.

3. Даже если бы не было первых двух пунктов, то добавить аномалию в рестрикторы я всё равно бы не смог - функция add_restrictions не работает по непонятным причинам. И работать, судя по всему, не собирается.

4. Даже если добавить рестрикторы через alife():add_in_restrictions(...), то изменения всё равно не вступят в силу в онлайне.

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

 

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

*Shoker*, конечно можно и левой пяткой чесать правое ухо, но ... со стороны это выглядит смешно и глупо. Не буду отговаривать, конечно же и так можно снаряжать своих неписей. Сам позже поймешь неразумность решения.

 

Полтергейст, варианты обхода аномалий неписями уже давно существуют, чем они тебе не по нраву?

Захотелось "реалистичности", чтобы неписи по звуку аномалий ориентировались, чего в других схемах обхода нет?

Ну так и копать в эту сторону нужно, а не ожидать готового.

Говоришь best_danger():object() никогда не возвращает аномалию? Не буду пока возражать хотя цепочка рассуждений может быть такой:

Класс danger_object может возвращать звуки, но выделяет из них только от врага (enemy_sound), все остальные идут просто как sound. В то же время имеется коллбэк hear_callback, который может различать snd_type для anomaly и anomaly_idle. Не уверен, что этим можно воспользоваться, но это вроде бы все, что можно использовать по аномальным звукам в скриптах. Если есть желание - то попробуй повозиться с этим.

Вот только не пойму тогда, зачем вся твоя возьня с до(у)бавлением рестрикторов? Да еще какая-то странная увязка этого с рангами неписей. Пояснил бы все же исходную идею того , чего хочешь сделать, а не то, чем собираешься "это" нам неизвестное делать, может что и подскажем более разумное.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

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

От себя могу предложить еще такой вариант - итератор memory_sound_objects() класса game_object. Он предоставляет возможность перебирать объекты в памяти сталкера (типа sound_memory_object), из которых легко получить обычные клиентские объекты, издававшие звук. Сталкер помнит 32 объекта по дефолту, но это можно поменять в конфигах. Разумеется, не буду говорить, что это лучший способ, но про такой вариант тоже можно помнить.

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

> Сам позже поймешь неразумность решения.

Это будет быстрее, если ты мне подскажешь. Ибо таким образом раздаю вещи уже несколько месяцев, и ничего плохого не заметил.

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

медитирую на код:

local module, fname = string.match( func, "(.+)[.](.+)" )
func = _G[module][fname]
if func then func() end

 

Это я чего-то не понимаю, или действительно так надо ?

 

KD87, ну, скобка потерялась при копировании. А вот что не так - не работает. И вообще говоря, если в _G оно не вывернуто как-то хитро, то должно таки [fname][module]. Или как ?

 

 

Изменено пользователем Dennis_Chikin
Ссылка на комментарий
Dennis_Chikin, эм. А что не так в коде? Ну, если опустить отсутствующую скобку в конце первой строки. По поводу нужности - ну не знаю. При обычном способе вызова функции через точку, они нормально вызываются. Но наверняка есть случаи, когда модуль, содержащий функцию, обязательно должен быть загружен. Изменено пользователем KD87
Ссылка на комментарий

У меня такая проблема , решил заселить подключенную локацию из чн в тч сталкерами . Только возникла проблема с сталкерами сидячими у костра . Когда их спавню то они не правильно сидят , не смотрят не в центр костра а куда то в сторону (на стандартных тч локациях все отлично работает) . Как решить это ?

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

у меня вопрос: Возможен ли диалог с физическим объектом как с НПС? Просто хочу перед концовкой, Исполнитель желаний всё рассказывал

Создаю глобальный мод с новыми локациямЭ

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

strelok200, нет.

Dennis_Chikin, сразу не обратил внимания (я в lua с регулярками не работал), но тут, скорее всего, неправильное регулярное выражение в первой строке. "(.+)[.](.+)" означает "много любых символов, массив любых символов, снова много любых символов". Чтобы это превратить в "два массива символов, разделенные точкой", нужно как-то так, наверное: "(.+)\.(.+)"

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

strelok200, нет, невозможно, а вот создать свое окно с кнопками и текстом на подобии диалогового окна можно.

korshyn-3, посмотри их логику, наверное center_point в секции kamp нетам стоит.

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

Dennis_Chikin, не знаю с чего (с какого кода) ты "модишь", но патерн в твоем случае явно неудачный.

Вот так:

module, fname = string.match(func, '(%w+)%.(%w+)')

- более правильно (ИМХО).

Это допускает наличие в имени модуля/функции только алфавитно-цифровых символов, исключая иные символы, и экранирует точку, давая однозначное разделение на модуль-функция.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

По-хорошему тут, наверное, даже не string.match() надо бы, наверное. Поскольку ну очень сложно представить на входе нечто отличное от строки "myscript.myfunc"

 

А порядок вызова точно правильный ? По тому что при внимательном рассмотрении простыни обнаружено как _G[fname], так и +G[module][fname]...

 

Все. Кажется, дошло... Где-то крепко попутано имя функции, имя файла, и модуль... Надо по шагам разбирать всю простыню. 8(

 

P.S. а отжигов в исходном вообще в количестве. Ну солянка же... Со всего инета все подряд, напихано как попало.

Один разворот

cs:wnd():SetText(string_format("%02d:%02d", time_h, time_m))

на 40 строк с аццкой логикой и десятком регэкспов чего стоит...

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

Dennis_Chikin, без контекста твои слова сложно приязать к чему-то.

_G[fname] - вполне понятная запись.

+G[module][fname] - явная "глупость".

Ну а "на входе", может быть и имя функции из того же _g.script'а иль инкапсулированного в него из сторонней функции, так что сам 'модуле' может и отсутствовать, т.е. функция быть непосредственно в глобальной метатаблице.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Челоаек просто опечатался, написав плюс вместо подчеркивания - посмотри на свою клавиатуру и поймешь.

Обе записи имеют вполне внятный смысл.

Только вторая опасна, если _G[module] == nil

Все, кто стоит на моем пути: идите нахрен и там погибните! ©

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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