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

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

Прошу помощи. Игра ОП-2.1, вымогатель антирадов Гарик, на входе к ремонтникам. Хотелось пересадить его на еду. Но не на одну колбасу, консерву, батон, а комплектом. например батон-колбаса- пиво, батон-консерва-водка, буттерброд-батончик-фляжка. Все фалы нашёл, текст исправил. Не соображу как прописать в скрипте три названия продукта, через запятую, через тире, что бы он забирал их за раз. Подскажите как? Строки на антирады в скрипте, выглядят так;

 

function give_antirad(first_speaker, second_speaker)
    lost("antirad", 1)
end
function antirad_have()
    return has("antirad",1)

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

MinyaUr.gif

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


Ссылка на сообщение
Поделиться на других сайтах

@Minya Как-то так:

function give_antirad(first_speaker, second_speaker)
    lost("батон", 1)

    lost("колбаса", 1)

    lost("пиво", 1)
end
function antirad_have()
    return (has("батон",1) and has("колбаса",1) and has("пиво",1))

end

Секции продуктов пропишешь как надо.

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


Ссылка на сообщение
Поделиться на других сайтах

@dsh, огср, да

Огромное спасибо, скоро проверю :)

@dsh Метод работает! А есть ли способ проверить, нажал ли ГГ левую кнопку мыши, иначе говоря - выстрелил? 

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

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


Ссылка на сообщение
Поделиться на других сайтах

Можно обратиться к движковому счетчику патронов: если active_item:get_ammo_in_magazine() и active_item:get_ammo_total() уменьшились на одну величину, это как раз выстрел.

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


Ссылка на сообщение
Поделиться на других сайтах

Решил по быстрому заспавнить освещение скриптом. Использовал код из AEM (для смены освещения на арене). Всё спавниться и работает, но после сейв/лоада объекты меняют свой direction. По висячим лампам "ильича" этого не видно, а несимметричные объекты, типа настольной лампы, доставляют. Думаю, в коде нужны дополнительные манипуляции с direction и если так, то какие? Код почти без правок, добавил аргументы lvid и gvid:

Скрытый текст

function v3f(x,y,z) 
    return vector():set(x,y,z)
end

 

пример спавна

add_lamp(v3f(139.67343139648,-6.1285934448242,180.18035888672),1203772,3686,v3f(0,-1.0,0),"physics\\light\\lampa_01_on",0.8,true)

 

function add_lamp(pos, lvid, gvid, dir, visual, brightness, shadow, color)
    local light_flags = 56                
    if shadow then light_flags = light_flags + 2 end
    local packet = net_packet()
    packet:w_u16(gvid)
    packet:w_float(0.0)
    packet:w_s32(1)
    packet:w_s32(lvid)
    packet:w_s32(-70)                
    packet:w_stringZ("")
    packet:w_s32(-1)
    packet:w_s32(-1)
    packet:w_stringZ(visual)
    packet:w_u8(0)
    packet:w_stringZ("$editor")
    packet:w_u8(0)
    packet:w_u16(-1)
    if color ~= nil then
        packet:w_s32(color)
        packet:w_float(brightness)
        packet:w_stringZ("")
    else
        packet:w_s32(-1)
        packet:w_float(brightness)
        packet:w_stringZ("light\\light_omni_white_idle")
    end
    packet:w_float(14.0)
    packet:w_u16(light_flags)
    packet:w_stringZ("$editor")
    packet:w_stringZ("link")
    packet:w_float(100.0)  
    packet:w_float(0.1)    
    packet:w_float(4.0)    
    packet:w_float(0.3)    
    packet:w_stringZ("")
    packet:w_stringZ("")
    packet:w_stringZ("bone_lamp")  
    packet:w_float(1.0)            
    packet:w_stringZ("")
    packet:w_float(0.7) 
    packet:w_stringZ("bone_omni")

    local se_obj = alife():create("aem_lamp", pos, lvid, gvid)
    se_obj:STATE_Read(packet, packet:w_tell())

    if dir ~= nil then
        se_obj.direction = vector():set(dir)
    end
end

После спауна (как запланировано):

https://yadi.sk/i/Wqubj3MUGLwvhA

После сейв/лоада(повёрнута):

https://yadi.sk/d/aqF7QfAZH5y5GQ

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

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


Ссылка на сообщение
Поделиться на других сайтах

Здрасьте.

 

Задача: создать одноименный текстовый файл при создании сейва.

В [ui_save_dialog.script] можно отследить имя и создать свой файл при сейве через меню "Сохранить игру". Как сделать то же самое при вводе имени нового сейва через консоль?

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


Ссылка на сообщение
Поделиться на других сайтах
9 часов назад, Norman Eisenherz сказал:

Как сделать то же самое при вводе имени нового сейва через консоль?

Скорее всего никак. Не предусмотрен никакой кэллбэк на это действие, соответственно отследить его не получится.

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

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


Ссылка на сообщение
Поделиться на других сайтах
29.10.2020 в 18:26, _Sk8_AsTeR_ сказал:

А есть ли способ проверить, нажал ли ГГ левую кнопку мыши, иначе говоря - выстрелил?

Таки вы для начала определитесь, собираетесь вы ловить нажатие ЛКМ, или ловить событие выстрела.

Это разные события. В ОГСР ловится и то и другое.

Нажатия - callback.on_key_press (и там надо ловить код клавиши),

Выстрел - callback.on_actor_weapon_fire,

Начало стрельбы - callback.on_actor_weapon_start_firing - от предыдущего отличается тем, что при стрельбе очередью будет вызван только 1 раз.

08.01.2012 в 03:30, xStream сказал(а):

Те, у кого свои руки есть, копипастить это не будут, проще свое написать, которое тоже велосипедное, но более понятное автору.

Мод, где не бывает одинаковых путей - Судьба Зоны.

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

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


Ссылка на сообщение
Поделиться на других сайтах
6 часов назад, AndreySol сказал:

слепить скриптовые костыли, типа мониторинга на апдейте кол-ва файлов

Лучше тогда при сохранении (вызове метода save биндера того же актёра) - сделать небольшой таймаут и получить самый новый файл из папки сохранений, его и переименовывать. 

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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


Ссылка на сообщение
Поделиться на других сайтах

@naxac

Любой из таких вариантов - костыль галимый, я бы не стал использовать. Лучше правку сделать движковую...

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


Ссылка на сообщение
Поделиться на других сайтах

@Zander_driver, нужно было отследить сразу 2 события: сначала ПКМ и сразу ЛКМ, когда ПКМ еще нажато. Но уже справился, все работает, спасибо :)

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


Ссылка на сообщение
Поделиться на других сайтах

@AndreySol Где найти разобранный на файлы C++ движок ЧН? Движок ЗП тоже было бы интересно почитать.

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


Ссылка на сообщение
Поделиться на других сайтах

@Norman Eisenherz

Ну наверное поиск рулит. Я исходники ТЧ брал давным-давно со Сталкерин, но там сейчас ссылку на скачивание убрали. Еще можно спросить в разделе Редактирование движка и Ищу файлы\моды....

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


Ссылка на сообщение
Поделиться на других сайтах

Здрасьте.

 

Как проверить, что дождь не только идет в данный момент, но и попадает на ГГ (ГГ не находится в здании)? Версия игры любая без движковых правок.

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


Ссылка на сообщение
Поделиться на других сайтах
Только что, Norman Eisenherz сказал:

ГГ не находится в здании... без движковых правок.

Никак.

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

Есть ли над ГГ крыша, не найдется ли в ту сторону бетонной стены... это скриптам было неведомо.

08.01.2012 в 03:30, xStream сказал(а):

Те, у кого свои руки есть, копипастить это не будут, проще свое написать, которое тоже велосипедное, но более понятное автору.

Мод, где не бывает одинаковых путей - Судьба Зоны.

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

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


Ссылка на сообщение
Поделиться на других сайтах

@Zander_driver, как вариант, наверно, можно расставить в каждом помещении по рестриктору, и делать проверку на нахождение в нем. Ну и проверять текущую погоду. Если дождь, и ГГ вне рестриктора, то... Ещё то извращение, но без правок вижу только такую ситуацию.

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


Ссылка на сообщение
Поделиться на других сайтах

В ЧН часто есть готовые рестрикторы – укрытия от выброса, но у них нет внешних конфигов логики. Можно ли без перебора [all.spawn] определить, что ГГ находится в рестрикторе с именем "(level)_vibros_#"?

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


Ссылка на сообщение
Поделиться на других сайтах

@Norman Eisenherz

 

function func()
  local lvl = level.name()
  local pos = db.actor:position()
  local n = 1
  local name, obj
  while true do
    name = string.format( "%s_vibros_%s", lvl, n )
    obj = db.zone_by_name [ name ]
    if obj then
      if obj:inside( pos ) then
        return true
      end
    else
      return false
    end
    n = n + 1
  end
end

Это если имена с нумерацией от 1 и по возрастанию. Если вразброс, то придётся всю zone_by_name перебирать в поисках нужных рестрикторов.

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

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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


Ссылка на сообщение
Поделиться на других сайтах

@naxac Нашел перебор укрытий в [xr_surge_hide.script]:

Spoiler

		local board = sim_board.get_sim_board()
		local hide_tbl = {}
		local n = 0
		for k,v in pairs(board.smarts) do
			if v.smrt.actor_hides~=nil then
				for kk,vv in pairs(v.smrt.actor_hides) do
					local obj = alife():object(vv)
					if(obj) then
						n = n + 1
						hide_tbl[n] = obj
					end
				end
			end
		end

 

После этого как раз выполняется проверка через inside.

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


Ссылка на сообщение
Поделиться на других сайтах

Прошу помощи скриптёров.
Поигрываю в мод-сборку на основе FreeplayStart 1.21, но с изменённой оружейкой, добавленными мутантами, АИ-паком и прочими вкусностями от Alex5773
Сборка очень нравится, но у неё есть серьёзный недостаток - спустя непродолжительное время начинают наглухо ломаться сейвы с логом вылета, что под спойлером.

Скрытый текст

 

FATAL ERROR
 
[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : .\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : LUA error: d:\games\soc\gamedata\scripts\rgr.script:378: attempt to index local 'dead_otf' (a nil value)
 

stack trace:

 

К сожалению, автор данной сборки не помог с исправлением данного вылета, да и не заходит на АМК уже с августа.
Возможно, кто-то из скриптеров поможет исправить данный баг, возможно даже небезвозмездно, в разумных пределах, конечно :)  
Сам в скриптовании Сталкера не шарю.
Прилагаю сам мод и сломанный сейв: 
https://dropmefiles.com/jR5Fi

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


Ссылка на сообщение
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

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

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

AMK-Team.ru

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