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

_Sk8_AsTeR_

 НС
  • Число публикаций

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

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

  • AMKoin

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

Сообщения опубликованы _Sk8_AsTeR_

  1. Доброго дня! Подскажите пожалуйста вот с чем...

    Имеем мод на динамический костер "dynamic campfire".

    Так вот, там многих, так сказать, бочек с кострами нету. Каким образом можно получить название лагеря? Надеюсь правильно вопрос задал.

    Скрытый текст
    
    	["esc2_st_fabric_kamp_1"] = {flame = "zone_flame_small_0001", light = "lights_camp_fire_omni_r1_r2_0001"},
    	["esc_bridge_kamp_point"] = {flame = "zone_flame_small_0002", light = "lights_camp_fire_omni_r1_r2_0002"},
    	["esc_lager_camp_center"] = {flame = "zone_flame_small_0004", light = "lights_camp_fire_omni_r1_r2_0004"},
    	["esc_killers_kamp"] = {flame = "zone_flame_small_0004", light = "lights_camp_fire_omni_r1_r2_0004"},
    	["esc_blokpost_kamp"] = {flame = "zone_flame_small_0005", light = "lights_camp_fire_omni_r1_r2_0005"},
    	["esc2_most_kamp_1"] = {flame = "zone_flame_small_0006", light = "lights_camp_fire_omni_r1_r2_0006"},
    	["esc_assault_kamp_center1"] = {flame = "zone_flame_small_0007", light = "lights_camp_fire_omni_r1_r2_0007"},
    	["esc_fabrika_bandit_camp_center"] = {flame = "zone_flame_small_0007", light = "lights_camp_fire_omni_r1_r2_0007"},
    	["esc2_st_fabric_kamp_2"] = {flame = "zone_flame_small_0007", light = "lights_camp_fire_omni_r1_r2_0007"},
    	["esc2_bandit_les_kamp_1"] = {flame = "zone_flame_small_0008", light = "lights_camp_fire_omni_r1_r2_0008"},
    	["esc_stalker_camp_esc_fox_kamp"] = {flame = "zone_flame_small_0009", light = "lights_camp_fire_omni_r1_r2_0009"},
    	["esc2_st_fox_place_kamp_1"] = {flame = "zone_flame_small_0009", light = "lights_camp_fire_omni_r1_r2_0009"},
    	["esc_stalker_camp_camp_point"] = {flame = "zone_flame_small_0009", light = "lights_camp_fire_omni_r1_r2_0009"},

     

     

  2. Ребят, вопрос - загадка. С вашей помощью огромной наваял скриптец, благодаря которому через нетпакеты будут перебираться реально существующие НПС, их имена записаться в таблицу, и в итоге от их имени будут сообщения в чат приходить. И так случилось, что практически в начале игры (успел только АТП зачистить вначале) мне отписался Фанат. Официально он появляется после х-18, но он у меня отписался намного раньше.

    Скрытый текст
    
    function table_update_pda()
    tab = {"пусто"}       -- обнуляем таблицу всех НПС
    tab_newbIes = {"new"} -- обнуляем таблицу новичков
    
    	for i = 1, 65535 do
    		local sobj = alife():object(i)
    		if (sobj) and IsNpcStalker(sobj) then  -- проверка на фракцию (только сталкер, долг, фридум, грин)
    		
    		local pk = get_netpk(sobj)
    			if pk and pk:isOk() 
    			then
    				local data = pk:get()
    				local charname = data.character_name
    				table.insert(tab, charname)
    					if (sobj) and is_npc_newbie(sobj) then  -- проверка на новичка
    					table.insert(tab_newbIes, charname)	
    					end
    			end	
    
    		end
    	end
    end

     

    Так вот вопрос, игра где-то спавнит Фаната намного раньше, или я не понимаю как работает моя ф-ция? Помогите разобраться, ибо интрига!

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

     

    @lordmuzer, дружище, огромное тебе спасибо! Ты помог мне реализовать мечту не первого года...

    Осталось задебажить, и сразу вопрос к тебе, как к спасителю.

    При вызове функции игра подвисает на некоторые секунды, считывая нетпакеты. При повторном вызове функции ловлю лог:

    
    LUA error: not enough memory.

    И вот вопрос: как можно ограничить количество циклов выполнения функции? Он мне выводит сразу кучу имён сталкеров, а достаточно 5-6 имен, например... Ну и еще мне нужно придумать как обновляться, чтобы память не кончалась, но по поводу последнего наверно что-то сам придумаю...

     

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

    @lordmuzer, брат, братишка. огромное тебе спасибо! Около года я мозговал как это реализовать!

  4. В 17.04.2019 в 00:36, Overfirst сказал:

    local text = obj:character_name()

    function npc()
    	for i = 1, 65535 do
    		local obj = alife():object(i)
    		if obj and IsStalker(obj) then
    			
    			local text = obj:character_name() -- тут и есть имя сталкера  ? 			
    		end
    	end
    	amk.send_tip(text, "123", 2, 15, "common_channel") -- выводим на экран значение переменной text
    end

    Спасите - помогите! :( 

    Цитата

    attempt to call method 'character_name' (a nil value)

     

  5. В 15.04.2019 в 00:07, AndreySol сказал:

    local text = obj:name() -- тут и есть имя сталкера 

     Сделал функцию, чтобы на экран игровой выводилось значение переменной text

    Возвращается что-то типа esc_stalker_01_784766

    А как можно добиться именно игрового имени? "Андрей Блатной", "Сережа Жыжа" и тдтп?

    Пробовал извращаться с get_npc_name(obj), но тщетно :(

  6. Господа, подскажите добрым советом, как проиграть звук? Задумка такая: в определенные часы будут от лица ГГ (типа по рации) проигрываться рандомные звуки, обрывки чьих-то фраз и тд, и всё это дело НПС будут комментировать в чат текстом, типа: "Что это было?" или "Вы тоже это слышали?"

    Так вот, помогите пожалуйста по возможности с построением ф-ции с проигрыванием рандомного ogg из папки? Нужно только проигрывание рандомного звука...

  7. Господа, вопрос к знатокам по звукам. Подскажите пожалуйста, на сколько критично будет всем звукам ogg(сторонняя озвучка npc) массово выставлять в комментариях например  параметр npc_talking, к примеру, даже если это озвучка для атаки (Урою, чики-брики и в дамки и тд)?

    Нет ли зависимости от типа комментария на реакцию нпс? 

  8. Господа, подскажите пожалуйста, что и где подкрутить чтобы откорректировать цветовую гамму игры? Запустил оригинал сталкера сегодня и чуть не расплакался от той самой оригинальной картинки на мониторе. Солянка делает картинку какой-то желтоватой чтоли... Какой-то менее выразительней в плане цветопередачи, не знаю описать. Будто насыщенность выкрутили и температуру картинки сделали желтой, не знаю. Оригинальная картинка была какая-то розовато-синяя, чтоли. Подскажите пожалуйста?

  9. @naxac, неа. По непонятным причинам НПС просто не лечились. Анимация есть, лечения нет. Пришлось разбираться и руками заставлять у НПС хп подниматься после проигрыша анимации. Костыли, но работает )

  10. Господа, еще вопросик. Выручайте пожалуйста :(

    Суть в том, что задания не засчитываются после убийства групп противников. Таким образом не зачитывается задание как от Бармена например (зачистить Дикую Территорию от бандосов и наймов), а также например не срабатывает тригер после убийств наймов в Рыжем Лесу (помочь сталкерам отбить мост). Куда копать, подскажите пожалуйста?

  11. @AndreySol, благодарю, сенсей! Строг ты и суров, но подсказки твои работают! Но столкнулся с проблемкой. Смотри, реализовал идею с твоей подсказкой следующим образом:

    Скрытый текст
    
    function name(npc, actor)
    
    function item(actor)
    actor:iterate_inventory(keep_item, actor)
    end
    
    function keep_item(actor, item)
    if item:section() == "medkit" then
    actor:transfer_item(item, npc)
    end
    end
    
    item(actor)
    end

     

    Аптечка передается и у НПС она появляется. Только передаётся не 1 аптечка, а сразу все medkit что в рюкзаке у ГГ. Сразу 10, 20, одной передачей. Как пофиксить? Под ночь не соображу никак :( 

    Вдруг еще сможешь помочь!

  12. Подскажите пожалуйста, какая функция РЕАЛЬНО передает предмет от ГГ к НПС? dialog.relocate_item (или какое там название у этой ф-ции) делает лишь видимость. По факту у ГГ просто отнимается предмет. НПС он не передается (проверял). Как передать предмет НПС? Или костыльно (как заспавнить предмет у нпс через скрипт?) Заранее благодарю!

  13. Подскажите пожалуйста, где править кол-во ХП, которое НПС восстанавливает кушая аптечку?

    Специально промониторил сейчас ситуацию:

    Имеется НПС, здоровье: 0,43954873 (много цифр, не важно). 

    Даю ему атечку, он лечится (проигрывается анимация), здоровье становится 0,4584676 (много цифр, не важно).

    Таким образом НПС лечится на 0,02 единицы. Как это справить? 

  14. @Kirgudu, от души благодарю! Заработало всё как надо! Передал НеПиСю аптечку, он сначала сам вылечился, обменяться не предложил. А вот вторую аптечку уже предложил мне обменять! То что надо! Огромное спасибо!

    А еще вопрос. Как можно проверить все в тех же скриптах, является ли НПС другом? То есть if НПС друг, then выполнение скрипта обмена аптечкой, Else отбой, грубо говоря.

  15. @AndreySol, по задумке предмет, который мы хотим получить от НПС должен быть у самого НПС, иначе он скажет - извини, брат, аптечек лишних нету.
    @Kirgudu, прошу прощения, да. Имеем диалог (фрагмент): 

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


    
    function init_exchanging_items_dialog(dlg)
       local intro_phrase = exchanging_items_intro_phrase[math.random(1, table.getn(exchanging_items_intro_phrase))]   --рандомная фраза из таблицы с приветствиями
        phr0 = dlg:AddPhrase(intro_phrase, "0", "", -10000)  --фраза 1
    	phr1 = dlg:AddPhrase(exchanging_items_phr_1, "1", "0", -10000) -- фраза 2, вызывающая ниже написанную функцию
    	    phr1:GetPhraseScript():AddAction("exchanging_items.give_message_proposed_items")  --вызывается функция по нашему диалогу в ответах (второй спойлер внизу)
    									...продолжение диалогов...
    end

     

    Готовая функция, вызываемая из диалога (фрагмент): 

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


    
    function give_message_proposed_items(first_speaker, second_speaker)	
     local Art, Item, Outfit, Wpn, TxtArt, TxtItm, TxtOutfit, TxtWpn   --переменные итемов
     local npc_rank = ranks.get_obj_rank_name(first_speaker)    -- переменные рангов (в этом фрагменте кода пример с новичком)
        if npc_rank == "novice" then		
            Art = GetRndItemFromTable(arts_table_novice)  --переменной Art присваевается случайный арт из заранее прописанной таблицы
    		Outfit = GetRndItemFromTable(outfits_table_novice) --тоже самое с бронёй
    		Item = GetRndItemFromTable(items_table_novice)  --тоже самое с предметами
    		Wpn = GetRndItemFromTable(weapons_table_novice) --тоже самое с оружием
    
    	    ProposedArtRank = Get_Number_Item(Art, arts_table_novice)    --если не ошибаюсь, то в диалоге предлагается (отображается) выбранный артефакт
            ProposedOutfRank = Get_Number_Item(Outfit, outfits_table_novice)    --тоже самое с бронёй
            ProposedItmRank = Get_Number_Item(Item, items_table_novice)   --тоже самое с предметами
            ProposedWpnRank = Get_Number_Item(Wpn, weapons_table_novice)   --тоже самое с оружием
        end
      TxtArt = game.translate_string(get_inv_name(Art))
    		TxtOutfit = game.translate_string(get_inv_name(Outfit))
    	    TxtItm = game.translate_string(get_inv_name(Item))
    		TxtWpn = game.translate_string(get_inv_name(Wpn))
    		
    		InArt = Art
    		InOutf = Outfit
    		InItm = Item
    		InWpn = Wpn
    	  db.actor:give_talk_message("%c[255,250,194,87]Артефакт:%c[255,87,250,240] "..TxtArt, "ui\\ui_iconstotal", Frect():set(0,188,83,47), "iconed_answer_item")
    	  db.actor:give_talk_message("%c[255,250,194,87]Костюм:%c[255,87,250,240] "..TxtOutfit, "ui\\ui_iconstotal", Frect():set(0,329,83,47), "iconed_answer_item")
    	  db.actor:give_talk_message("%c[255,250,194,87]Предмет:%c[255,87,250,240] "..TxtItm, "ui\\ui_iconstotal", Frect():set(0,423,83,47), "iconed_answer_item")
    	  db.actor:give_talk_message("%c[255,250,194,87]Оружие:%c[255,87,250,240] "..TxtWpn, "ui\\ui_iconstotal", Frect():set(0,517,83,47), "iconed_answer_item")
      end --конец функции

     

    В последней функции для реализации моей идеи почти все лишнее. В этой функции, вызываемой из скриптового диалога, как-то нужно реализовать проверку НПС на нужный итем (medkit). Если true, то НПС даст диалог: поделюсь аптечкой. Если False, то, мол: Извини брат, нет лишних аптечек.

    Подскажите, мил-люди, как сделать проверку НПС на определенный предмет? Своих мозгов не хватает :(

AMK-Team.ru

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