Случайная подборка модов
Путь Человека: Возвращение
4.1
Oblivion Lost 3.0
3.0
Sigerous Mod 2.2
4.1
Под прикрытием смерти
3.9
SZM CoP 0.2
3.9
Nature Winter v2.0 «Квантовый скачок»
4.0
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
Архив - только для чтения
⚙ Модострой: Вопросница
Российская Федерация  Wolfstalker
Среда, 24.02.2016, 00:25 | Сообщение # 1
Статус:
Легенда:
Сообщений: 2258
Награды: 15
Регистрация: 05.04.2010

В данной теме вы можете задавать любые вопросы касательно S.T.A.L.K.E.R. моддинга


• Не флудить
• Предварительно просматривайте раздел, ведь ответ на ваш вопрос может быть там
• В своем вопросе указывайте платформу моддинга — Тень Чернобыля, Чистое небо или Зов Припяти




F.A.Q

  Злобная реклама
Среда, 24.02.2016, 00:25
Статус:
Сообщений: 666
Регистрация: 05.04.2010
Российская Федерация  yobakun
Понедельник, 18.12.2017, 13:05 | Сообщение # 9421
Статус:
Новичок:
Сообщений: 270
Награды: 5
Регистрация: 30.07.2016

Graff46, ну вот есть функция:
Код
function generate_position( smart_name, max_offset_x, max_offset_y, max_offset_z )

    local zone_off = {"pri_sr_autovokzal", "sr_cinema_out_anomaly"} -- таблица со смартами

-- здесь различные проверки на валидность позиции
  pos = vector( ):set( pos_x, pos_y, pos_z )
  local lvid = level.vertex_id( pos )
  
  for k,v in pairs( zone_off ) do
   local zone = db.zone_by_name[ v ]
   if zone then -- всегда nil
    if not zone:inside( position ) then
     if ( lvid < 4294967295 ) then
      pos = level.vertex_position( lvid )
      valid_lvid = true
     end
    end
   end
  end
  
  -- либо выходим из цикла после определенного кол-ва попыток
  num_tries = (num_tries - 1)
  if ( (num_tries <= 0) and (valid_lvid ~= true) ) then
   printf( "DA: Unable to generate valid lvid pos, aborting" )
   return
  end
    end
    
    -- При успешном выполнении возвращаем позицию:
    return pos
end

Почему в данном случае zone = nil? Опечаток нет, скрипт полностью работает, кроме проверки на зону и позиции внутри нее.
  Злобная реклама
Понедельник, 18.12.2017, 13:05
Статус:
Сообщений: 666
Регистрация: 30.07.2016
Российская Федерация  atanda
Понедельник, 18.12.2017, 15:48 | Сообщение # 9422
Статус:
Бывалый:
Сообщений: 672
Награды: 7
Регистрация: 12.07.2017

yobakun, уверен, что нет ошибок? Чрезмерное количество end. Из-за чего твоё понимание сиего скрипта сводится на нет.

Какой, извините уж, к чёрту, выход из цикла?

Прямой выход из функции при удовлетворении условий.
Да и откуда мы берём переменную num_tries? Ладно, предположим, что она глобальная.

И если уж занимаетесь копированием скриптов, то хотя-бы вникайте в суть. На этом всё.

А по-поводу вопроса, вы уверены, что написанные вами названия зон существуют?
  Злобная реклама
Понедельник, 18.12.2017, 15:48
Статус:
Сообщений: 666
Регистрация: 12.07.2017
Российская Федерация  Overfirst
Понедельник, 18.12.2017, 16:01 | Сообщение # 9423
Статус:
Бывалый:
Сообщений: 1081
Награды: 19
Регистрация: 11.06.2015

Цитата yobakun ()
-- таблица со смартами

Со смартами или с рестрикторами?
  Злобная реклама
Понедельник, 18.12.2017, 16:01
Статус:
Сообщений: 666
Регистрация: 11.06.2015
Российская Федерация  atanda
Понедельник, 18.12.2017, 16:10 | Сообщение # 9424
Статус:
Бывалый:
Сообщений: 672
Награды: 7
Регистрация: 12.07.2017

Цитата Graff46 ()
Нил - это то, что возвращает ф-ция, а юзердэйта - это тип данных.

Не понял.
Функция может возвращать любые данные. По умолчанию, да это nil.
Userdata это любые, как я понял, не зарезервированные в луа данные, например классы(могу ошибаться).

Цитата Graff46 ()
В Луа такое бывает, если какой то объект приводить к строке, то выведится его тип.

Не бывает, а должен вывестись. Ну это в чистом луа.
Вообще при конкатенации движок будет пытаться, если это возможно, привести данные к строке.
Также, имхо, приведение типов к строке очень грамотно выполнено в Java, там developer сам решает, как преобразовать объект к строке. Путём добавления в класс метода toString, но это уже другая история. biggrin
При конкатенации нил к строке будет ошибка, так как мы не может прибавить ничего к чему-то. Это как что-то делить на ноль.

Добавлено (18.12.2017, 16:10)
---------------------------------------------
BoBaH_671, скорее всего рестрикторами.
Сообщение отредактировал buffy - Понедельник, 18.12.2017, 16:11
  Злобная реклама
Понедельник, 18.12.2017, 16:10
Статус:
Сообщений: 666
Регистрация: 12.07.2017
Российская Федерация  yobakun
Понедельник, 18.12.2017, 17:37 | Сообщение # 9425
Статус:
Новичок:
Сообщений: 270
Награды: 5
Регистрация: 30.07.2016

buffy, это не полная функция, неужели не очевидно? Вот полная:
Код
function generate_position( smart_name, max_offset_x, max_offset_y, max_offset_z )
    -- Get the smart terrain:
    local smart = SIMBOARD.smarts_by_names[smart_name]
    if not ( smart ) then
  printf( "DA: Unable to generate positional data, specified smart location does not exist!" )
  return
    end
    
    -- Try to generate valid positional data on the ground:
    local num_tries = 64  -- Prevents infinite loop
    local pos = vector( ):set( 0, 0, 0 )
    local valid_lvid = false
    local zone_off = {"pri_sr_autovokzal","pri_sr_dom_kult","pri_sr_stadion","pri_sr_hotel","pri_sr_kooptorg",
  "pri_sr_cinema","pri_sr_port","pri_sr_college","pri_sr_dom_byta","pri_sr_old_kbo",
  "pri_sr_hospital","pri_sr_berezka","pri_sr_laundry","pri_sr_school","pri_sr_book",
  "pri_sr_market","pri_sr_detsad","pri_sr_gastronom","pri_sr_technikum","pri_sr_kpss","pri_sr_killer",
    "sr_sklad_garag","sr_dom_kult_left","sr_cinema_out_anomaly"}
    while ( (valid_lvid ~= true) and (num_tries > 0) ) do
  -- Randomly offset anomaly x-position from center of smart terrain:
  local offset_x = (max_offset_x * math.random( ))
  if (math.random( ) < 0.5) then
   offset_x = -(offset_x)
  end
  local pos_x = (smart.position.x + offset_x)
  
  -- Randomly offset anomaly y-position from center of smart terrain:
  local offset_y = (max_offset_y * math.random( ))
  if (math.random( ) < 0.5) then
   offset_y = -(offset_y)
  end
  local pos_y = (smart.position.y + offset_y)
  
  -- Randomly offset anomaly z-position from center of smart terrain:
  local offset_z = (max_offset_z * math.random( ))
  if (math.random( ) < 0.5) then
   offset_z = -(offset_z)
  end
  local pos_z = (smart.position.z + offset_z)
  
  -- Set anomaly position at location vertex and check if valid:
  pos = vector( ):set( pos_x, pos_y, pos_z )
  local lvid = level.vertex_id( pos )
  
  for k,v in pairs( zone_off ) do
   local zone = db.zone_by_name[ v ]
   if zone then
    if not zone:inside( pos ) then
     if ( lvid < 4294967295 ) then
      pos = level.vertex_position( lvid )
      valid_lvid = true
     end
    end
    else
    log ("zone is nil!!!")    
   end
   
  end
  
  -- Decrement the number of tries left:
  num_tries = (num_tries - 1)
  if ( (num_tries <= 0) and (valid_lvid ~= true) ) then
   printf( "DA: Unable to generate valid lvid pos, aborting" )
   return
  end
    end
    
    -- Return the position vector:
    return pos
end

Верно, рестрикторы. Суть в том, что zone возвращает nil, соответственно скрипт не работает.
  Злобная реклама
Понедельник, 18.12.2017, 17:37
Статус:
Сообщений: 666
Регистрация: 30.07.2016
Украина  BozKurt
Понедельник, 18.12.2017, 19:46 | Сообщение # 9426
Статус:
Опытный:
Сообщений: 1753
Награды: 3
Регистрация: 25.05.2012

yobakun, ну коль zone внутри функции равно nil, значить такой зоны нет в онлайне - очевидно же. Таблицы в файле db хранят в себе онлайновые объекты.
buffy, не нужно плести паутину и сравнивать компилируемые типизированные языки, с интерпретируемыми и не типизированными. Отвратительная аналогия с Java. P.S. По секрету - классов в Lua нет.
  Злобная реклама
Понедельник, 18.12.2017, 19:46
Статус:
Сообщений: 666
Регистрация: 25.05.2012
Российская Федерация  NEO
Понедельник, 18.12.2017, 21:23 | Сообщение # 9427
Статус:
Ветеран:
Сообщений: 4497
Награды: 11
Регистрация: 24.05.2012

Всем доброго времени. Вопрос по ЧН, нужно сделать 3х персов бессмертными, 2х торгашей и меха на барахолке. Известный способ с invulnerable не помогает. Какие ещё есть варианты ?
  Злобная реклама
Понедельник, 18.12.2017, 21:23
Статус:
Сообщений: 666
Регистрация: 24.05.2012
Российская Федерация  yobakun
Понедельник, 18.12.2017, 21:51 | Сообщение # 9428
Статус:
Новичок:
Сообщений: 270
Награды: 5
Регистрация: 30.07.2016

Цитата BozKurt ()
ну коль zone внутри функции равно nil, значить такой зоны нет в онлайне

Вообще всех? Я дописывал "yan_smart_terrain_6_4_att" и загружал сохранение в этой зоне, почему оно не работает?
  Злобная реклама
Понедельник, 18.12.2017, 21:51
Статус:
Сообщений: 666
Регистрация: 30.07.2016
Украина  BozKurt
Понедельник, 18.12.2017, 22:15 | Сообщение # 9429
Статус:
Опытный:
Сообщений: 1753
Награды: 3
Регистрация: 25.05.2012

yobakun, у тебя вообще все вписанные зоны не найдены (то беж nil)? Возможно yan_smart_terrain_6_4_att не рестриктор вовсе?

Добавлено (18.12.2017, 22:09)
---------------------------------------------
Хотя в zone_by_name всё пишется включая смарты и аномалии.

Добавлено (18.12.2017, 22:11)
---------------------------------------------
Ну исключая невозможное - ты не в той зоне находишься, как допущение.

Добавлено (18.12.2017, 22:15)
---------------------------------------------

Цитата denis2000 ()
Цитата Graff46 ()
Можно ли запустить анимацию худа предмета не ставя этот предмет в слот?

Нет.

Ну я бы не был так категоричен. Как то же анимация приёма всякого медикаментозного барахла сделана?
  Злобная реклама
Понедельник, 18.12.2017, 22:15
Статус:
Сообщений: 666
Регистрация: 25.05.2012
Российская Федерация  atanda
Понедельник, 18.12.2017, 22:19 | Сообщение # 9430
Статус:
Бывалый:
Сообщений: 672
Награды: 7
Регистрация: 12.07.2017

BozKurt, да, да, luabind... Не учёл... Ну и тебе по 'секрету', любые типы данных в Java это объекты, будь то целочисленные, булевые, строки или числа с плавающей точкой. wink

Ну да ладно, окончим на этом дискуссию. Т.к. это здесь не к месту. Да и я, порой, несу бред.
  Злобная реклама
Понедельник, 18.12.2017, 22:19
Статус:
Сообщений: 666
Регистрация: 12.07.2017
Российская Федерация  denis2000
Понедельник, 18.12.2017, 22:21 | Сообщение # 9431
Время Альянса
Статус:
Ветеран:
Сообщений: 4070
Награды: 16
Регистрация: 19.07.2013

Цитата BozKurt ()
Как то же анимация приёма всякого медикаментозного барахла сделана?

Лично я делал это помещением в слот предмета с соответствующей анимацией и активацией этого слота. Иной метод вероятнее всего возможен только с правками движка (GUNSLINGER mod).
Сообщение отредактировал denis2000 - Понедельник, 18.12.2017, 22:26
  Злобная реклама
Понедельник, 18.12.2017, 22:21
Статус:
Сообщений: 666
Регистрация: 19.07.2013
Российская Федерация  atanda
Понедельник, 18.12.2017, 22:22 | Сообщение # 9432
Статус:
Бывалый:
Сообщений: 672
Награды: 7
Регистрация: 12.07.2017

Цитата BozKurt ()
Ну я бы не был так категоричен. Как то же анимация приёма всякого медикаментозного барахла сделана?

ну... сделать фейковый итем, унаследованный от секции бинокля(плохой пример) и при юзании аптечки вставлять этот предмет в слот, делать активным ну и по накатанной.
  Злобная реклама
Понедельник, 18.12.2017, 22:22
Статус:
Сообщений: 666
Регистрация: 12.07.2017
Российская Федерация  denis2000
Понедельник, 18.12.2017, 22:24 | Сообщение # 9433
Время Альянса
Статус:
Ветеран:
Сообщений: 4070
Награды: 16
Регистрация: 19.07.2013

Цитата NEO ()
ЧН... способ с invulnerable не помогает

Это конечно странно что не помогает, значит делайте через имунитеты НПС:
Код
immunities_sect  = stalker_immunities_sakharov
  Злобная реклама
Понедельник, 18.12.2017, 22:24
Статус:
Сообщений: 666
Регистрация: 19.07.2013
Российская Федерация  yobakun
Понедельник, 18.12.2017, 22:30 | Сообщение # 9434
Статус:
Новичок:
Сообщений: 270
Награды: 5
Регистрация: 30.07.2016

Цитата BozKurt ()
Возможно yan_smart_terrain_6_4_att не рестриктор вовсе?

Я появляюсь прямо внутри бункера, то бишь внутри этого рестриктора. Может он просто прогрузиться не успевает?
Прикрепления: 0199640.png (8.4 Kb)
Сообщение отредактировал yobakun - Понедельник, 18.12.2017, 22:31
  Злобная реклама
Понедельник, 18.12.2017, 22:30
Статус:
Сообщений: 666
Регистрация: 30.07.2016
Российская Федерация  NEO
Понедельник, 18.12.2017, 22:53 | Сообщение # 9435
Статус:
Ветеран:
Сообщений: 4497
Награды: 11
Регистрация: 24.05.2012

Цитата denis2000 ()
Это конечно странно что не помогает, значит делайте через имунитеты НПС:

Может и странно. Для ГГ они неуязвимы, для шальной пули и мутов смертны. immunities_sect = stalker_immunities_sakharov - знакомая схема, но ни разу не пробовал.
Сообщение отредактировал NEO - Понедельник, 18.12.2017, 22:57
  Злобная реклама
Понедельник, 18.12.2017, 22:53
Статус:
Сообщений: 666
Регистрация: 24.05.2012
Поиск: