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

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


Svoboда

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

@HellRatz@hi_flyer, вот, взято откуда-то отсюда:

-- http://www.amk-team.ru/forum/index.php?showtopic=6458&p=937442
--[=[

local lname = level.name()
local lvtab = GetLevelVertexes( lname )
local lvx = math.max( unpack( lvtab ) )
local lv  = math_random( 1, lvx )

local gvtab  = GetGameVertexes( lname )
local gv_min = math.min( unpack( gvtab ) )
local gv_max = math.max( unpack( gvtab ) )

--]=]
function GetLevelVertexes( level )
  local lvtab ={}
  local i = 0
  while game_graph():valid_vertex_id( i ) do
    local lv = game_graph():vertex( i ):level_vertex_id()
    local ln = alife():level_name( game_graph():vertex( i ):level_id() )
    if not lvtab[ ln ] then
      lvtab[ ln ] = {}
    end
    table.insert( lvtab[ ln ], lv )
    i = i + 1
  end
  return lvtab[ level ]
end

function GetGameVertexes( level )
  local gvtab ={}
  local i = 0
  while game_graph():valid_vertex_id( i ) do
    local ln = alife():level_name( game_graph():vertex( i ):level_id() )
    if not gvtab[ ln ] then
      gvtab[ ln ] = {}
    end
    table.insert( gvtab[ ln ], i )
    i = i + 1
  end
  return gvtab[ level ]
end

  • Спасибо 2
  • Полезно 1

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


Ссылка на сообщение
(изменено)

@naxac, не, ну в самом деле, ну это уже какой-то совет из серии выстрелю себе в ногу. Ну есть же m_net_utils или xs_netpk.

 

А, впрочем, ты прав. Бесполезно это. Какая разница, какую магию эта лабуда использует, если она так сделана, как сделана.

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

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


Ссылка на сообщение
(изменено)

@Romz, у тебя, похоже, OGSE? Тогда вместо той лабуды, лучше используй:

function ts_get_weapon_ammo_type(sobj)
  local data = m_net_utils.get_weapon_data( sobj )
  return data.ammo_type
end


Или вообще, вместо

		local ammo_type = ts_get_weapon_ammo_type( alife():object(wpn:id()) )

используй

		local ammo_type = ogse_wpn_utils.get_active_ammo_type( wpn )

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

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

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


Ссылка на сообщение
@vampirnik77, первый дестрой вызывается, когда граната вылетает с руки. Дальше летит уже другая граната, если я правильно помню. Второй дестрой - это уже ее взрыв.

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


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

@vampirnik77,  и net_spawn и net_destroy вызываются. Когда граната появляется в руках, вызывается net_spawn и у этой гранаты есть parent. Потом гранату бросают и вызывается net_destroy, а потом появляется новая граната и для нее вызывается net_spawn. parent-а у этой гранаты нет. Она летит, падает и взрывается. Вызывается net_destroy. Один из вариантов отловить взрыв гранаты - это в net_spawn сохранить parent_id, а в net_destroy проверять, имеется-ли сохраненный parent_id. Если нет, значит это взрыв. Если есть - значит граната полетела.

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


Ссылка на сообщение
@TIGER_VLAD, самый простой вариант - сделать для него секцию, в ней указать "custom_data". Универсальный вариант - создать непися через alife():create() и любым, удобным для тебя, способом записать в его нетпакет нужную custom_data.
  • Спасибо 1
  • Полезно 1

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


Ссылка на сообщение
(изменено)

@TIGER_VLAD, вот по тому примеру делать не нужно. Выкинь каку. :) Лучше делать

local sobj = alife():create(...)
local pk   = xs_netpk.stalker( sobj )
if pk:isOk() then
  local data = pk:get()
  local cd   = data.custom_data:getTable()
  cd.logic = {
    [ "cfg" ] = "logic\\my_very_custom_logic.ltx",
  }
  data.custom_data:set( cd )
  pk:set( data )
end
 

 

 

 

или

local sobj = alife():create(...)
local data = m_net_utils.get_stalker_data( sobj )
data.custom = "[logic]\ncfg=logic\\my_very_custom_logic.ltx\n"
m_net_utils.set_stalker_data( data, sobj )
 

 

 

 
Пишу по памяти и могу ошибиться.
Изменено пользователем dsh
  • Спасибо 1

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


Ссылка на сообщение
@TIGER_VLAD, про вертолеты и бтры не скажу, не смотрел. Возможно, даже если соотв. класс не поддерживается, читать, как alife item, и устанавливать только custom data. Для мутантов поддержка есть, m_net_utils.get_monster_data() и xs_netpk.monster().
  • Нравится 1

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


Ссылка на сообщение
(изменено)

Народ, ну вот кто, кто вас учит так делать?

for k, v in pairs(ex_sects) do
    if v == wpsec then return end
end

Так делать не надо ни-ког-да. Надо делать вот так

if ex_sects[ wpsec ] then return end


А в ex_sects естественно надо добавлять вот так

local ex_sects = {
  [ "wpn_ognemet" ] = true,
}

И я, естественно, не стиль имею ввиду.

Изменено пользователем dsh
  • Спасибо 1

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


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

 

 

Хотя в посте вопрошающего говорилось о двух исключениях - гравипушка и огнемет

 

Ты ведь какая штука. И ты о ней упоминал. Один создал табличку с двумя элементами. А второй, потом, или вообще десятый, запихает в эту табличку еще сотню. Ну потому, что он не скриптер и т.д.

 

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

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


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

Чисто гипотетически, на мой взгляд, это даже не так надо делать, а как-то вроде

if get_bool( wpsec, script_name() .. ".ignore" ) then return end

Ну и в секции оружия добавить

ts_mod_soc.ignore = true

Но что бы это стало работать не гипотетически, нужна хорошая скриптовая основа, где и get_bool() есть и много других хороших плюшек.

  • Полезно 1

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


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

Ой, какая большая таблица. Я бы посоветовал, для определения квестового персонажа, в первую очередь проверять наличие story_id, и только потом, если его нету, смотреть в таблицу. Это позволит уменьшить эту таблицу, если не избавиться от нее совсем. Всё-таки, наличие story_id с большой вероятностью будет означать, что этот персонаж квестовый. Обратное не верно.

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


Ссылка на сообщение
(изменено)
if not quest_npc[obj:name()]

 

Как минимум не нужно делать так, а нужно делать

if not quest_npc[obj:section_name()]

Это первое, что в глаза бросается. А вообще, что-то я не въезжаю, а зачем перебираются все объекты игрового мира? Что это вообще делает-то?

 

Мутный какой-то скрипт.

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

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


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

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

  • Согласен 2

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


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

@Sla-Sla, подробно не скажу. Судя по упоминанию времени, уборщик мусора что-то нужное удалил. У меня подобное как-то было, а подробностей вспомнить не могу. Инициализировал какой-то контрол и ссылку на него нигде не сохранял. Что-то типа того. Не могу подробней вспомнить.

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


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

@Sla-Sla, если разберешься, то вот тут вот:

 

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

 

скриптовый рюкзак. Тоже в виде списка показывает содержимое себя в одной вкладке и содержимое инвентаря ГГ в другой. Примерно то, что тебе нужно.

  • Полезно 1

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


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

 

 

численное значение текущего cam_fov

 

А какое оно еще может быть? Возможно ты имеешь ввиду db.actor:get_camera_fov()

  • Спасибо 1

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


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

С помощью XE можно, но особо не поувеличиваешь. Например, ту скорость, что стоит в ОП-2 по умолчанию, увеличивать уже и некуда. Максимум, на десяток процентов, а далее ГГ начинает стукаться о воздух.

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


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

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

AMK-Team.ru

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