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

Nazgool

Жители
  • Число публикаций

    618
  • Регистрация

  • Последнее посещение

  • Дней в топе

    1
  • AMKoin

    37 [Подарить AMKoin]

Весь контент пользователя Nazgool

  1. В том то и дело, что это не работает для окна, где находятся фразы ГГ. Добавлено через 33 мин.: В .хml-ях есть какой то параметр "что-то там_mode" для записи в несколько строк, и он должен равняться единице. Может кто вспомнит?
  2. qwertyuiop, в 3.9.10 Sr_timer (Настройка логики) написано же : type - тип счетчика, инкриментирующий(inc) или декриментирующий(dec). Если поле не задано - счетчик будет инкриментирующий декриментирующий - отсчёт в обратном порядке
  3. Monnoroch я снова не понял - вопрос снят или нет? На всякий случай вот вариант : x = str:gsub("(%a-\\.+\\.+)", "[[%1]]") str - поменяй на свою переменную, в которую получил строку из конфига.
  4. Monnoroch подробнее объясни, плз? Тебе ко второй строке дорисовать скриптом квадратные скобки, чтобы было как в первой?
  5. TREWKO, можно так : flag = true function ***() if flag then ... flag = false end end
  6. tab_info = {'info_1','info_2','info_3','info_4','info_5'} function rnd_info() math.randomseed(time_global()) math.random() local rnd_pos = math.random(#tab_info) db.actor:give_info_portion(tab_info[rnd_pos]) table.remove(tab_info,rnd_pos) end
  7. Gonarh Всё, я полностью признАю свою неправоту, если вас не затруднит рассказать мне, как(?) неработающий код, вернее отработанный один раз за всю игру, может привести "к вылетам или битию сейвов"
  8. Согласен. Вот поэтому я и написал "неэстетично", но не невозможно.
  9. Эта проверка изначально поставлена туда разрабами, ничего нового, кроме вызова спавна внутри этого блока, не добавляется. Этот блок срабатывает один раз при старте игры, а далее, при следующих апдейтах, он просто игнорируется, т.к. не проходит оригинальная проверка if NOT ... InfoPortion уже оказывается выдан после первого апдейта.
  10. О какой проверке идет речь? Вызов ставить внутри уже упомянутого блока if ... еnd.
  11. malandrinus, понимаю что вспоминать может уже не к месту, но только увидел, и не могу не ответить на ваш пост 3877. Возможно вы хотели сказать что такой способ не эстетичен? Но так делать можно! Не мне же вам объяснять, что апдейт будет "обрезать" секцию if not has_alife_info("storyline_actor_start") ... end после получения вышеупомянутой infoportion. И раз уж такая запись существует, то почему не воспользоваться ею и не поставить тот же одноразовый спавн в начале игры на неё?
  12. Вызов скрипта поставь после строчки _G.g_start_avi = true в функции actor_binder:update(delta) файла bind_stalker.script
  13. По крайней мере я убедился что это не случайность. Сколько раз был на Болотах - ходил только по воде. Ни тебе радиации, ни (самое главное) монстров. Так что нужно сказать Архаре что есть такая недоработка.
  14. Да, поспешил. Измени строку : local tmpw = amk.spawn_item_in_inv("wpn_pkm" ) на local tmpw = amk.spawn_item_in_inv(weapon:section())
  15. gamedata\scripts\bind_stalker.script Функция function actor_binder:update(delta) Сразу ниже неё пиши вызов в формате : название_файла.название_функции. Можешь написать эту функцию в любом файле из папки scripts, а можешь создать свой файл и назвать скажем my_script и написать там. Должно быть так : function actor_binder:update(delta) my_script.check_armor() ...
  16. Friday13 в биндере эктора конечно.
  17. max_max_08 Тогда так : function check_armor() local armor = db.actor:item_in_slot(6) local weapon = db.actor:item_in_slot(2) if db.actor:active_slot()==2 and weapon then local tmp if armor then tmp = armor:section() else tmp = "none" end if (not string.find(tmp, "exo" )) and (weapon:section()=="wpn_pkm" or weapon:section()=="wpn_m60" or weapon:section()=="wpn_minigun") then db.actor:drop_item(weapon) local tmpw = amk.spawn_item_in_inv("wpn_pkm" ) db.actor:transfer_item(weapon,db.actor) alife():release(tmpw) news_manager.send_tip(db.actor,"Невозможно взять пулемёт в руки без экзы",nil,nil,10000) end end Вообще-то этой фунцией я не пользовался. Юзал эту : function check_armor() local wpn,arm local armor = db.actor:item_in_slot(6) local weapon = db.actor:item_in_slot(2) if weapon then wpn = weapon:section() else wpn = "no_weapon" end if armor then arm = armor:section() else arm = "no_armor" end if string:find(wpn,"wpn_название") or string:find(wpn,"wpn_название") or string:find(wpn,"wpn_название") then -- через 'or' пиши сколько нужно стволов if (not string.find(arm, "exo" )) then db.actor:drop_item(weapon) local temp = alife():create("wpn_ak74",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),d b.actor:id()) db.actor:transfer_item(weapon,db.actor) alife():release(temp) news_manager.send_tip(db.actor,"Невозможно взять пулемёт в руки без экзы",nil,nil,10000) end end end
  18. Вот например. Нельзя взять ПКМ, если не надета экза. Изменишь где что нужно : function check_armor() local armor = db.actor:item_in_slot(6) local weapon = db.actor:item_in_slot(2) if db.actor:active_slot()==2 and weapon then local tmp if armor then tmp = armor:section() else tmp = "none" end if (not string.find(tmp, "exo" )) and weapon:section()=="wpn_pkm" then db.actor:drop_item(weapon) local tmpw = amk.spawn_item_in_inv("wpn_pkm" ) db.actor:transfer_item(weapon,db.actor) alife():release(tmpw) end end
  19. Возможно я понял не правильно, но не с подобной ли проблемой сталкивался Red75 в первоначальной версии "Напарников", когда НПС не подчинялись новой схеме? Если да, то причина ведь была в том, что нужно было установить состояние с помощью state_mgr.set_state(). И в этом случае, если сравнить статью на Wiki с окончательным вариантом, где эта проблема была решена, возможно понять как именно это было сделано.
  20. 60449 - level_vertex_id 46 - game_vertex_id 0,0,0 - direction (x,y,z) "L01_Escape" - я думаю понятно
  21. Для начала хотелось бы знать - что именно не получается? Что выдает лог? Что Вы делали? Нужна вся информация. Иначе Ваш вопрос просто проигнорируют.
  22. Nazgool

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

    Можно. Сначала нужно исключить возможность попадания в гулаг. Для этого в логике пишется секция : [smart_terrains] none = true Далее логика пишется таким образом : [logic] active = kamp [kamp] center_point = *** (***-это имя точки, вокруг которой НПС садятся. Располагать её можно где угодно, не только у костра. Название этой точки должно быть уникальным, т.к. она прописывается в way_"уровень".ltх) radius = * (*-радиус в метрах от точки center_point, в пределах которого НПС будут садится. Можно не указывать. По умолчанию 2 метра) path_walk = ***_task (Можно не прописывать, если точка center_point находится не в центре костра. *** - то же название, что и указано в center_point, с добавлением _task. Эта точка тоже прописывается в way_"уровень".ltх, но координаты указываются на некотором расстоянии от center_point. Эта строка нужна для того, чтобы при переходе из оффлайн НПС не попадали в костер и не получали хит, а выходили в этой точке)
  23. Совсем не обязательно создавать гулаг. Например можно сделать так : В файле alife_l"уровень".ltx в секции этого перса написать(или вынести в конфиг) custom_data = <<END [smart_terrains] none = true [logic] active = kamp [kamp] center_point = camp_center_new path_walk = camp_center_task_new В файле way_l"уровень".ltx добавить : [camp_center_new] points = p0 p0:name = wp00 p0:position = "координаты x,y,z костра" p0:game_vertex_id = "гейм_вертекс костра" p0:level_vertex_id = "левел_вертекс костра" [camp_center_task_new] points = p0 p0:name = wp00 p0:position = "координаты x,y,z точки в метре/двух от костра" p0:game_vertex_id = "гейм_вертекс этой точки" p0:level_vertex_id = "левел_вертекс этой точки"
  24. Но ведь вопрос был поставлен так: "определенное расстояние" и устанавливает рестриктор. Может я чего-то не понял из условий поставленной задачи? Тогда хотелось бы узнать подробнее.
  25. gruber, тогда можно попробовать такой вариант(теория): Поставить рестриктор с центром в точке, где сидит непись и радиусом, определяющим зону, при входе в которую он сорвется в бой. В gulag_escape.script найти работу этого НПС и после out_rest = "???" через запятую добавить info_rest = в кавычках название нового рестриктора.
×
×
  • Создать...