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

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

speczadanie

Как можно округлить число до сотен?

Например так - вычисляем сотни и к ним прибавляем ещё 100, если остаток не меньше 50, иначе 0.

local z=632.565
z=math.floor(z/100)*100 + (math.fmod(z,100)>=50 and 100 or 0)
-- теперь z=600

z=2799
z=math.floor(z/100)*100 + (math.fmod(z,100)>=50 and 100 or 0)
-- теперь z=2800

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

Вылетает при попытке установки указанного состояния для созданного оружия. Лог:

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: ...k.e.r.-1-1\gamedata\scripts\myj.script:90: attempt to index local 'obj' (a nil value)

90 строка - это "obj:set_condition(0.1)". Делал, как предлагали выше.

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

speczadanie

Если нет уверенности в безопасном применении упрощенных вариантов - используй полные (избыточные):

function spawn()
  local wpn = amk.spawn_item_in_inv("wpn_ak74")
  if wpn then --/ предмет заспавнен?
    level.client_spawn_manager():add( wpn.id, 0, weapon_in_alife) --/ ставим каллбек на выход в онлайн
  end
end

function weapon_in_alife(first,id,obj)
  if level.object_by_id(id) and obj then --/ предмет в игре?
    obj:set_condition(0) --/ выставляем кондишн
  end
end

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

Гадать предоставляем тебе самому.

 

strelok200, а почитать топик(и) и ФАКи - времени жаль?

'story_id' присваивается при скриптовом спавне использованием скриптов записи нет-пакетов.

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

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

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

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

[10339]

; cse_abstract properties

section_name = stalker

name = baza_mar_band_1

position = 378.577392578125,2.56930565834045,226.345489501953

direction = -0.998166263103485,0,0.0605319775640965

 

; cse_alife_trader_abstract properties

money = 5000

character_profile = baza_marsh_band_1

 

; cse_alife_object properties

game_vertex_id = 3544

distance = 3.5

level_vertex_id = 386803

object_flags = 0xffffffbf

custom_data = <<END

 

[logic]

cfg = scripts\marsh\band1_patrul_logic.ltx

 

; cse

[smart_terrains]

none = true

END

 

; cse_visual properties

visual_name = actors\bandit\stalker_bandit_1

 

; cse_alife_creature_abstract properties

g_team = 0

g_squad = 0

g_group = 0

health = 3

dynamic_out_restrictions =

dynamic_in_restrictions =

 

upd:health = 3

upd:timestamp = 0x6d6d695f

upd:creature_flags = 0x75

upd:position = 378.577392578125,2.56930565834045,226.345489501953

upd:o_model = 0

upd:o_torso = -0.000645029998850077,0.0445535257458687,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_alife_human_abstract properties

predicate5 = 1,0,0,2,0

predicate4 = 2,2,1,2

 

; cse_ph_skeleton properties

 

upd:start_dialog =

 

; se_stalker properties

[smart_terrains]

none = true

 

[logic]

active = walker@patr_cerk1_ohr3

 

[walker@patr_cerk1_ohr3]

path_walk = patr_cerk1_ohr3_walk

path_look = patr_cerk1_ohr3_look

danger = danger_condition@patr_cerk1_ohr3

 

[danger_condition@patr_cerk1_ohr3]

ignore_distance = 0

[patr_cerk1_ohr3_look]

points = p0,p1

p0:name = wp00

p0:flags = 0x1

p0:position = 241.453994750977,0.504000067710876,-161.621002197266

p0:game_vertex_id = 3510

p0:level_vertex_id = 289010

 

p1:name = wp01

p1:flags = 0x2

p1:position = 320.196990966797,0.855000019073486,-137.065002441406

p1:game_vertex_id = 3531

p1:level_vertex_id = 343886

 

 

[patr_cerk1_ohr3_walk]

points = p0,p1

p0:name = wp00

p0:flags = 0x1

p0:position = 252.224334716797,0.172305732965469,-161.015487670898

p0:game_vertex_id = 3510

p0:level_vertex_id = 296269

p0:links = p1(1)

 

p1:name = wp01

p1:flags = 0x2

p1:position = 312.371002197266,0.796000063419342,-132.20100402832

p1:game_vertex_id = 3531

p1:level_vertex_id = 339727

p1:links = p0(1)

 

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

С каждым днём, всё радостнее жить!

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

Только вот если присвоить SID НПС'у при спавне через нет-пакеты то получить НПС через СИД можно только после сейф-лоада. Я прав или тут есть какой нибудь обходной путь?

 

Artos

Ах, забыл про перевод в оффлайн. Спасибо

Изменено пользователем _Призрак_

Freedom

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

_Призрак_

Вроде как ты довольно пытливый и читающий ... :-)

Если SID присваивается объекту при спавне - то никаких дополнительных манипуляций не требуется и его гейм-объект доступен сразу же по SID'у как только появится в онлайне. Серверный же объект - и вовсе доступен сразу.

Если объект уже в игре и требуется присвоить иль сменить SID, то после (пере)присвоения - существует метод с переводом объекта в оффлайн и обратно ...

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

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

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

А можно ли с помощью данной функции выставить в диалоге прекондишн на время?Это в ТЧ.

-- точное время
function set_current_time (hour, min, sec)
    local current_time_factor = level.get_time_factor ()

    printf ("Need time : %d:%d:%d", hour, min, sec)

    local current_time = game.time ()
    local c_day = math.floor (current_time / 86400000)
    local c_time = current_time - c_day * 86400000
    local n_time = (sec + min * 60 + hour * 3600) * 1000

    if c_time > n_time then c_day = c_day + 1 end
    n_time = n_time + c_day * 86400000

    level.set_time_factor (10000)
    while game.time () < n_time do wait () end

    level.set_time_factor (current_time_factor)
end

 

И правильный ли пример?

<precondition>ogse.need_time_esc</precondition>

 

function need_time_esc()
if set_current_time (23, 00, 00) then
return true
    end
  return false
end

 

Если что не так, подскажите, пожалуйста.И я знаю, что еще можно и с помощью другой функции, просто эта функция для чего?

function need_time_esc()
  return level.get_time_hours() >= 23 and level.get_time_hours() <= 24
end

 

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

panzyuza

Приглянувшаяся тебе функция 'set_current_time' НЕ возвращает никакого ответа и предназначена не для проверок, а только для 'ускоренной' установки заданного времени суток (часы, минуты, секунды).

Т.о. твоя проверка 'if set_current_time (23, 00, 00) then' бессмысленна и всегда будет иметь результатом 'nil', т.е. заведомо невыполнимой.

 

Второй же вариант с 'need_time_esc' вернет тебе результат проверки: "Текущее время суток в Зоне не менее 23:00?".

Второй элемент условия проверки: 'level.get_time_hours() <= 24' по сути бессмысленный рудимент, т.к. время в Зоне (так же как и в реальности) не бывает равным 24:00 и более, а после 23:59:59 => становиться 00:00:00 следующих суток.

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

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

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

panzyuza, я все же не Кашпировский и не умею читать чужих мыслей о похотелках.

Тобою не сформулировано никаких условий для проверки, как и не ясно что подразумеваешь под определением 'точное' время.

Если тебе требуется: "Текущее время суток в Зоне не менее 23:00?" - то и используй второй вариант, выкинув из него рудимент.

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

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

Ссылка на комментарий
Spezer, чтобы твои НПС реагировали на тебя как на врага при стрельбе по ним, тебе нужно делать для них гулаг или изменить логику вот так:
Ссылка на комментарий

panzyuza

Уже не первый раз употребляешь 'точно(е)', а выражаешь мысли размыто ...

Делать проверку на точное время врядли тебе потребно. Время не стоит на месте и тот миг, когда дата и время в Зоне будет равно в точности 23.12.2012 16:00:00 - длится всего лишь одну дискрету функции времени, ну или один период апдейта в игре.

Даже если очень захочешь - врядли ты сможешь в диалоге отловить этот миг и тем более его использовать.

Т.о. речь может идти о некоем диапазоне времени. Для диалогов это может вероятно начинаться от минут и более.

 

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

function Get_StringByTimeOrDate(sType) --/ на входе "Y"/"M"/.../"ms" or nil
  if sType then
    local tTime = {
      ["Y"]  = game.CTime.DateToYear,    --/ 2012
      ["M"]  = game.CTime.DateToMonth,   --/ 01/2012
      ["D"]  = game.CTime.DateToDay,     --/ 01/01/2012
      ["h"]  = game.CTime.TimeToHours,   --/ 23
      ["m"]  = game.CTime.TimeToMinutes, --/ 23:59
      ["s"]  = game.CTime.TimeToSeconds, --/ 23:59:59
      ["ms"] = game.CTime.TimeToMilisecs --/ 23:59:59:999
    }
    if  sType == "D" or sType == "M" or sType == "Y" then --/ запрос строки даты
      return game.get_game_time():dateToString(tTime[sType] or 0) --/> строка 'дата'
    end
    return game.get_game_time():timeToString(tTime[sType] or 0) --/> строка 'время'
  end
  return game.get_game_time():timeToString(game.CTime.TimeToSeconds) --/> по дефолту 'время' в формате: 23:59:59
end

Выбирай подходящие методы и формируй свои условия/диапазоны ... Думаю вместо стринга получить числовые значения не столь уж трудно.

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

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

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

Попробовал "безопасный вариант". Не работает. Методом логов пришёл к выводу, что всё останавливается на условии во второй функции.

Никаких ограничений рюкзака и т.п. нет и в помине... В чём может быть проблема?

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

Ребят, подскажите, как НПСу поставить логику, чтобы он реагировал только на ГГ (ну т.е. если ГГ начнет в него стрелять, то он отстреливался), но забивал на прочие внешние раздражители (типа мутантов и вражеской группировки).

Спасибо.

Карусель-карусель - это радость для нас, прокатись на нашей ка-ру-се-ли!
-=Krovosos Mod=- 4.0 Final для S.T.A.L.K.E.R. SHoC 1.0004 (336 Мб): Мод

Финальный патч для -=Krovosos Mod=- (1 Мб): Патч

Адаптация -=Krovosos Mod=- под S.T.A.L.K.E.R. SHoC 1.0006 (1 Мб): Адаптация

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

А можно как то получить список level vertex-ов вокруг определённой точки на заданном расстоянии, кроме как делать перебор всех вертексов и сравнивать их расстояние до точки?

 

 

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

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

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

Artos, спасибо за обьяснение.У меня есть еще вопрос.Возможно ли через скрипт заставить в определенной точке(рестриктор, например) нпс проиграть анимацию напрямую из файла stalker_animation.omf.Данная анимация не прописана в state_lib и state_mgr_animation_list.Или же все равно надо в данных скриптах ее прописывать и все циклы, относящиеся к данной анимации?Если есть способ, прошу, подскажите.

И что за функция в файле xr_effects и можно ли ее использовать?

function monster_berserk(actor, npc)

npc:berserk()

end

 

 

А есть ли возможность адаптации системы анипоинтов под ТЧ?

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

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

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

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

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

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

Войти

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

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

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