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

Скриптование


Svoboда

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

Снимаю/цепляю оптический прицел из скрипта. Сейчас делаю это, удаляя оружие и спауня новое, меняя нетпакет при спауне. Есть способы "синхронизировать" клиентский объект с серверным, что бы обойтись без удаления/спауна?

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

Поделиться этим сообщением


Ссылка на сообщение

@UnLoaded, эксперименты показывают, что с x-ray extensions прицел можно нацепить визуально:

wpn:set_wpn_int( 936, 1 )

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

Поделиться этим сообщением


Ссылка на сообщение
@UnLoaded, либо ты не все показал, либо у тебя что-то странное. Судя по использованию двух индексов, каждый элемент таблицы должен содержать таблицу, но не видно, что бы эти элементы инициализировались таблицами. Возможно lua сделает это за тебя, но кто знает, какие грабли в этом интеллекте будут. Я бы не надеялся на такой автоугадав.

Поделиться этим сообщением


Ссылка на сообщение

@vampirnik77, самое первое решение, приходящее в голову: на первом апдейте поставить флажок и ничего не делать, а на втором апдейте проверить флажок, сделать что надо и сбросить его.

Поделиться этим сообщением


Ссылка на сообщение

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

Поделиться этим сообщением


Ссылка на сообщение

возможно ли реализовать проверку получения хита (тип fire_wound) актёром и/или НПС и деление полученого хита на коэффициент

Возможно с использованием x-ray extensions. Там есть коллбэк, который вызывается перед обработкой хита и в нём можно менять параметры хита. Пример можешь найти вот в этом скрипте:

 

https://github.com/dsh2dsh/op2ogse/blob/master/gamedata/scripts/dsh_art_degrad.script

 

например в функции apply_outfit_protection.

  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение

@Wlad777, ну ведь кто-то этот костер гасит. По умолчанию же он горит. Вот пусть этот кто-то и отмечает факт погашения. Или наоборот, если кто-то костер зажигает, то пусть он отмечает факт загорания.

Поделиться этим сообщением


Ссылка на сообщение

@HellRatz, т.е. у тебя собаки, имеющие один и тот-же clsid, имеют разные community? Тогда ты ничего не сделаешь, не меняя smart_terrains.script. Он расчитан на то, что один clsid будет иметь одно community.

Поделиться этим сообщением


Ссылка на сообщение
чтобы гулаги брали на работу моих собак с новым коммунити, иначе он берет только то, что прописано в этой таблице

 

Данный код не интересует коммунити твоих собак. Грубо говоря, если у тебя в смарте указано

communities = dog

и в smart_terrains.script

      [clsid.dog_s         ] = "dog",

то в этот смарт будет принят любой мутант с clsid == dog_s. По сути, смарт принимает к себе не по коммунити, которое указано в секции моба, а по clsid. Тот код, он просто для человекочитаемого вида. Я предполагаю, что ты используешь generic_lair. Иначе, ко всему этому, еще действуют правила конкретного гулага. generic_lair примет всех, кого примет смарт.

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

Поделиться этим сообщением


Ссылка на сообщение

 

 

Вот и я так думал, а на деле оказалось иначе. Пока не прописал заместо "dog" свою community, моя новая собака не бралась в работу гулага.

 

Конечно, ты же в смарте написал "dog_two", а в таблице "dog". Это таблица используется для перевода clsid в человекочитаемый формат, что бы значение потом сравнивать с тем, что указано в описании смарта. В твоем случае, т.к. ты хочешь более сложных правил, а именно, что бы указанный смарт принимал не всякую собаку, а только ту, у которой в секции указано "community = dog_two", нужно уже свою логику добавлять. Например вот так:

function se_smart_terrain:get_obj_community( obj )
  local cls = obj:clsid()

  if cls == clsid.script_stalker then
    return obj:community(), true
  else
    local comm = get_string( obj:section_name(), "community" )
    if comm == "dog_two" then
      return comm, false
    else
      return monster_classes[ cls ], false
    end
  end
end

Или вообще вот так

function se_smart_terrain:get_obj_community( obj )
  local cls = obj:clsid()

  if cls == clsid.script_stalker then
    return obj:community(), true
  else
    return get_string( obj:section_name(), "community", monster_classes[ cls ] ), false
  end
end

Решать тебе. А может еще как-то более замороченно. Результат get_obj_community просто сравнивается со значениями из communities смарта и если совпадает с одним из этих значений, моб принимается в смарт, если другие условия тоже совпадают. Т.ч. никакой магии, возвращай из get_obj_community все, что тебе нужно и так, как тебе нужно.

Поделиться этим сообщением


Ссылка на сообщение

 

 

сделал по второму варианту, все заработало

 

это более общий вариант, поэтому, что бы ничего работающего не сломать, убедиcь, что у всех мутантов прописано правильное community.

Поделиться этим сообщением


Ссылка на сообщение

Поделиться этим сообщением


Ссылка на сообщение

 

 

"freedom" атакует "dolg", но атаковать группировку "bandit" не хочет

 

Во, как раз еще помню свое удивление, когда с этим столкнулся. В game_relations.ltx поправь отношения бандитов и свободы, а то они там нейтральны друг к другу. Если тебе именно это нужно.

  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение

@kmsk, на вскидку, в качестве идеи. Отлавливаем появление патронов в инвентаре в on_take. Пробегаемся по инвентарю и ищем стволы, у которых с прошлого раза не стало патронов. Не самое оптимальное решение, но это всего лишь идея.

Поделиться этим сообщением


Ссылка на сообщение

 

 

Ну и повесить на все это дело выполнение функции, если условие оружие-анимация выполнено.

 

А какую анимацию? Если перезарядку, то что-то типа такого:

 

 

local cur_wpn = {}
function on_update( delta )
  local wpn = db.actor:active_item()
  if not wpn then return end
  if not wpn:is_weapon() then return end
  if ( not cur_wpn.id ) or cur_wpn.id ~= wpn:id() then
    cur_wpn = {
      [ "ammo_n"       ] = wpn:get_ammo_in_magazine(),
      [ "has_gl"       ] = has_wpn_gl( wpn ),
      [ "has_silencer" ] = ( ogse_wpn_utils.get_silencer_status( wpn ) == 2 ),
      [ "id"           ] = wpn:id(),
      [ "weapon_state" ] = wpn:get_hud_item_state(),
      [ "wpn"          ] = wpn,
    }
    if cur_wpn.has_gl then
      cur_wpn.gl_mode = ogse_wpn_utils.get_gl_mode( wpn )
      cur_wpn.gl_name = get_string( wpn:section(), "grenade_launcher_name" )
    end
  end
  check_silencer( wpn )
  local state = wpn:get_hud_item_state()
  if state == cur_wpn.weapon_state then
    if state == weapon_states.fire then
      local ammo_n = wpn:get_ammo_in_magazine()
      if ammo_n ~= cur_wpn.ammo_n then
        cur_wpn.ammo_n = ammo_n
        ogse_signals.get_mgr():call( "on_actor_fire", cur_wpn )
      end
    end
  else
    cur_wpn.weapon_state = state
    if state == weapon_states.fire then
      cur_wpn.ammo_n = wpn:get_ammo_in_magazine()
      ogse_signals.get_mgr():call( "on_actor_fire", cur_wpn )
    elseif state == weapon_states.switch then
      if cur_wpn.has_gl then
        local gl_mode = ogse_wpn_utils.get_gl_mode( wpn )
        if cur_wpn.gl_mode ~= gl_mode then
          cur_wpn.gl_mode = gl_mode
          ogse_signals.get_mgr():call( "on_wpn_gl_mode", cur_wpn )
        end
      end
    elseif state == weapon_states.reload then
      if
        ( db.actor:is_actor_sprinting() or db.actor:is_actor_climbing() )
        and math.random() < level.get_game_difficulty() * 0.2
      then
        db.actor:drop_item( wpn )
        dsh.say_blin()
      end
    end
  end
end
 

Здесь обрабатывается стрельба, переключения подствольника и перезарядка. Сравнение с wpn:section() в начало уже сам добавить сможешь.

 

 

 

  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение
@AndrewMor, если я не путаю, в первую в цикле заносятся трупики, которые сейчас будут удалятся. Во вторую заносятся трупики, у которых story_id меньше 9510 и они не будут удаляться.

Поделиться этим сообщением


Ссылка на сообщение
@FonSwong,если ты используешь x-ray extensions или OGSE, то там имеется колбэк, вызываемый перед обработкой хита. Вся нужная информация там имеется. Ты же, кажется, для OGSE делаешь? Найди там обработку бюрера, в скриптах. Ему из этого колбэка неуязвимость делается.

Поделиться этим сообщением


Ссылка на сообщение

вообще платформа ЗП

Про ЗП ничего не могу сказать.

 

Что означает amount?

Величина полученного хита.

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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