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

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

Вот попробовал поэксперементировать с ражиацией, вот такое нашлёпал:

function rada()
local actor = db.actor
    if  actor.radiation >= 0.3 then
        if  actor:object("antirad") then
            actor:eat("antirad")
                end 
    end
end

Но не пашет, антирад не используется. Я правильно радиацию проверяю? Вроде всё как описанно но не работает :(

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

TRAMP14

Мне почему то кажется, что ГГ скорее скушает антирад, если ты напишешь вот так:

local obj = actor:object("antirad")

if obj then

actor:eat(obj)

:-)

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

Так с радиацией всё норм?

local obj = actor:object("antirad") 
if obj then 
actor:eat(obj)

Я както задумывался но мне показалось что будет вылет.

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

В логике есть схема проверки на присутствие конкретного нпс в спейс-рестрикторе:

on_npc_in_zone = npc_story_id | restrictor_name | scheme

А как сделать чтобы условие срабатывало на любого нпс, а не на конкретного?

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

Всем привет, размышлял тут на досуге о создании проводников, чтоб водили по локации без перехода на другую, и пришла в голову такая схема - игрок говорит с проводником, тот соглашается его отвести, отводит, !и вот самое главное! остаётся в том райёне куда отвёл, либо идет к ближайшей точке отдыха\сбора нпс и дожидается гг там пока гг снова не понадобятся его услуги. Со скриптом маломальски допетрил, но вот как написать проводнику такую логику? Да и ещё надо учитывать то, что во время выброса или нападения врагов проводник должен вести себя как обычный нпс - прятаться\отстреливаться. Может кто помочь с написанием логики?

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

TRAMP14

Вариант с использованием файла amk.script

function Get_Visual_by_Wolf()
  local se_obj = alife():story_object(6) --  получаем серверный объект по его sid - в данном случае это Волк
  if se_obj then
    local t = amk.read_stalker_params(se_obj)
    if t ~= nil then
      local vis = t.visual
      vis = amk.str_explode("\\",vis)
      vis = vis[3]
      get_console():execute("Визуал_Волка="..vis)   
    else
      get_console():execute("Ошибка_чтения_визуала_Волка!")
    end
  else
    get_console():execute("Волка_в_игре_НЕТ!")
  end
end

 

 

Автономный вариант

function GetStalkerParams(sobj)
local packet = net_packet()
packet:w_begin(0)
packet:r_seek(2)
sobj:STATE_Write(packet)

local tData ={}
-- Свойства cse_trader
tData.money = packet:r_s32()
tData.profile = packet:r_stringZ()
tData.infammo = packet:r_s32()
tData.class = packet:r_stringZ()
tData.communityid = packet:r_s32()
tData.rank = packet:r_s32()
tData.reputation = packet:r_s32()
tData.charname = packet:r_stringZ()

-- Свойства cse_alife_object
tData.gvid = packet:r_u16()
tData.obf32u1 = packet:r_float()
tData.obs32u2 = packet:r_s32()
tData.lvid = packet:r_s32()
tData.oflags = packet:r_s32()
tData.custom = packet:r_stringZ()
tData.sid = packet:r_s32()
tData.obs32u3 = packet:r_s32()

-- Свойства cse_visual
tData.visual = packet:r_stringZ()
return tData
end 

--// Распечатка всех данных полученной таблицы
function PrintPacket()
local tData = GetStalkerParams(alife():story_object(6))
for k, v in pairs(tData) do 
get_console():execute("load ~ "..string.format("[%s]=%s", k, v))
end
end

Обращение к полю visual аналогично:

local tData = GetStalkerParams(alife():story_object(6))

local vis = tData.visual --// только строка в данном случае будет такого вида actors\neytral\stalker_neytral_balon_1

выпарсить из нее именно название можно как при помощи функции amk.str_explode(), так и при помощи функции StringSplit() ,которую я выкладывал в справочнике.

 

Изменено пользователем Garry_Galler
Ссылка на комментарий
tData.money = packet:r_s32()
tData.profile = packet:r_stringZ()
tData.infammo = packet:r_s32()
tData.class = packet:r_stringZ()
tData.communityid = packet:r_s32()
tData.rank = packet:r_s32()
tData.reputation = packet:r_s32()
tData.charname = packet:r_stringZ()

-- Свойства cse_alife_object
tData.gvid = packet:r_u16()
tData.obf32u1 = packet:r_float()
tData.obs32u2 = packet:r_s32()
tData.lvid = packet:r_s32()
tData.oflags = packet:r_s32()
tData.custom = packet:r_stringZ()
tData.sid = packet:r_s32()
tData.obs32u3 = packet:r_s32()

 

Получается таким же способом можно проверить деньги, вертексы, профили, логику и тп?

p/s/ Нет пакет полезная штука однако :D

p/s/s/ Нашёл в оригинальных скриптах такую строку

wait(цифра)

. Это как в других языках delay или как таймер? Или она вообщене работает?

p/s/s/s/ Спасибо!

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

TRAMP14

Получается таким же способом можно проверить деньги, вертексы, профили, логику и тп?

Именно так.

-----------------------------------------------------------------

wait(time) - это глобальная функция (находится в _g.script) задержки выполнения программы на указанное время (аналог Sleep() в других языках)). Для этого скрипт должен быть запущен как coroutine(подпрограмма) - что это такое читай в документации по lua.

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

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

TRAMP14,

А можно как либо получить визуал непися?

В ЗП есть функции get_visual_name и set_visual_name. Ну если не ЗП, то через нетпакет, как здесь уже объясняли.

 

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

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

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

 

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

Хочу сделать чтобы в зависимости от группировки был набор предметов (при опеделённых условиях естественно). Вот кусок.

local tbl = {bandit = "medkit", stalker = "antirad", killer = "vodka"}
for k, v in pairs(tbl) do
if  common == k then
    alife():create(v, pos, lv, gv, id)
end
end

Скажите пожалуйста я правильно разобрался с таблицами? Или надо по другому?

p/s/ common - группировака непися, сокращённо

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

TRAMP14

В принципе всё верно, и хотя в таблице мало полей, я бы всё-таки после функции спавна поставил break :

if  common == k then
    alife():create(v, pos, lv, gv, id)
    break
end

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

 

Как вариант можно сделать и без pairs.

local tbl = {bandit = "medkit", stalker = "antirad", killer = "vodka"}
local item = tbl[common]
if item then
    alife():create(item, pos, lv, gv, id)
end

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

А как сделать скриптовый респавн?Просто через all.spawn не умею,там ведь еще и смарты надо писать.А я пробовал сматры на новых локах,но вылетает.Поэтому заспавнил через скрипт,прописал логику,но они спавняться один раз.Как можно прописать фунцию респавна?

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

Заспавнить непися через скрипт (можно и через спавн) записать ид в табличку, проверять пока он не помрёт и после смерти удалить труп и заспавнить его по новой. И так по кругу

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

А поподробней можно.Я не скриптер.Но работаю один .Осваиваю.Что,куда,точно,подскажите,как?Просто заселил новые локации,мне нужно много неписей и мутантов респавнить.

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

panzyuza,

Если тебе нужно респаунить НПС, то почитай эту тему, может помочь - http://www.amk-team.ru/forum/index.php?showtopic=5734

 

Модератор(ы) - могу ли я здесь указать ссылку на пост в другой теме, вроде ему(посту) самое место тут - ошибся малость темой.

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

У меня такой вопросик - как сделать, чтобы предметы не прописывались в smart_terrain? Не знаю, как так получается, но в какой-то смарт пытается прописаться какой-нибудь предмет, например, пачка патронов (вызывает register_npc()). Этот глюк, похоже, был и раньше, только smart_terrain.script до редактирования пропускал этот баг (не было отложенного заполнения npc_info -> не вызывались методы, которые есть только у живности), но его ловил amk_offline_alife при вызове npc:alive() (писал, что нет такого метода). Тогда я не обращал на это внимание и просто поставил проверку на наличие функции alive и закрыл на это глаза, оказалось, что зря. Как с этим можно бороться? Фильтрация в suitable(), enabled() и register_npc() не помогает.

 

 

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

Тогда это нужно делать через se_stalker.script. Отследить по имени секции и при вызове on_death() удалить объект и создать заново. Естественно, удалять только через планировщик отложенного удаления (как в теме про вылеты без логов, только поправить ошибки). Спавнить скорее всего тоже таким же способом, иначе он заспавнится ещё до удаления.

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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