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

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


Svoboда

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

Уважаемые гуру подскажите.

Можно ли сделать логику нпс без алл.спавн к сожалению не как не удается его вскрыть перепробывал много программ и не одна не подошла.

 

Нпс нужны для участия в квесте. Они будут спавнятся скриптом.

Идея такая заспавнить в квесте из диалога несколько нпс чтоб жизнь медом не казалась.

 

Так вот до места идти далеко. И нпс со стандартной логикой разбегаются кто куда.

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

 

[esc_kanibal3]:stalker_sakharov

$spawn = "respawn\esc_kanibal3_spawn"

character_profile = esc_kanibal5

spec_rank = master

community = stranger

custom_data = scripts\new\esc_kanibal_mono.ltx --логика

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


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

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

Да все бы ничего. Но точки привязки в аллспавн. по идее достаточно взять подходящую схему(логику нпс их достаточно в моде) Но вот привязка может есть какие нибуть способы обойти или не использовать

path_walk = graf_walk

path_look = graf_look

Или может есть какие специальные флаги стандартные.

 

Извените если глупость но не понимаю пока логику надо разбираться.

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


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

=VENOM=

Спасибо конечно ничего не понял.

Стандартной функцией создаём нужных NPC на заданных позициях.

Что это за функция.

Затем (ну, я так поступаю - просто и удобно ) парой функций из набора АМК (read_salker_params/write_stalker_params) вписываем им в "кустодату" логику, основанную на схеме поведения remark, в которой нужно указать, что сталкеры должны смотреть в сторону игрока (target = actor).

Мне бы примерчик какой одного нпс тогдаб допер.

 

А так. Сделали засаду по рескриптору(нпс на основе имеющихся со своим именем для спавна) без логики. При входе в область спавняца нпс в близи за деревьями и кустами. Так как они близко то сразу реагируют на гг и дают ему жару.

Вообще так можно делать?

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


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

Господа у меня вот такой вопрос.

Вопрос скорее по логике задания.

Я собираюсь отправить ГГ в забег по телепортам. Телепорты помимо того еще и перебрасывают ГГ на другии локации.

Все места необетованные в обычной игре ГГ туда некогда не пройдет.

На каждой локации два этапа в последнем телепорте(через рестриктор) он отправляется на следующую локу и т.д.

Вот возник вопрос как заселить эти места.

Идея такая в конце каждого этапа(на локе из двух подэтапов) есть спейс_рестриктор который и активирует переход на другую локацию.

Хочу его использовать и для заселения локации на которую отправится гг и подчищистки (удаления) все го того что было наспавненно на первой локе. Если ГГ пробежит в телепорт и оставит кого нибуть в живых чтоб потом небыло вопросов.

Все сделано скриптами.

 

Как лучше реализовать поэтапное заселение чтоб перед телепортацией заселить ту локу куда отправимся и удалить то что осталось на первом этапе?

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


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

А я хотел при спавне присваивать каждому объекту ID и рестрикторе вызывать инфопоршень и удалять каждого нпс отдельно функцией по его иду. Но этот вариант мне кажется более совершенный и меньше будет грузить игру.

А дальше в момент телепортации просто делай перебор по iD\ или по db.storage и ищи через string.finde() те секции персонажей, у которых есть в названии _portal_npc и удаляй их :(

Только я недавно этим занялся и пока работаю только с мануалом а такую функцию конечно пока не напишу. Может кто приведет примерчик этой функции с перебором массива и удалением по имени. Буду очень признателен и добавлю себе в мануал.

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


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

Да конечно не проверял есть там сетка или нет. Я даже и незнаю как посмотреть. Буду методом тыка смотреть. Если где нпс будут себя вести неподобающе. То можно придумать на тех этапах забег на время и наспавнить там предметов разных чтоб дорогу загородить или можно спрятатать телепорт пусть ищут. И еще хотел его заставить пройтись по балке крана и упасть в телепорт. Предметы проверил предметы спавнятца там без вылетов.

 

_Призрак_ спасибо.

 

Чтобы просмотреть присутствие АИ сетки есть программка, называется GraphViewre, вот она: >>Click Me<< ColR_iT

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

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


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

*Shoker*

Так и есть нпс точно двигаются сквозь текстуры к ближайшей сетке. И с анимацией движения как положенно но думаю на локациях есть места где сетка присутствует. Одно такое место в баре за забором где старая дорога чуть дальше узкая полоска с сеткой вот на ней и сделал первый этап. Причем интересный момент нпс даже без логики (со стандартной не уходят с этой тропы так как им просто некуда идти. Думаю и на других локах есть места которые не задействовали разработчики буду искать. Также можно попробывать и крыши домов.

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

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


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

function _._._._.() Имя функции для спавна любое поэтому имени будет вызываться из диалога или инфопоршня.

gigant_red_strong Секция нпс или чего угодно то что спавним (Например калаш wpn_ak74 в конфигах предмета или в файле спавна) Далее координаты места спавна x,y,z

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


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

Сталкер тч.

Подскажите почему не меняется отношение групировки к актору.

relation_registry.set_community_goodwill ("stalker", db.actor:id(), 0)

 

 

 

-- Если игрок выбрал групировку "Бандиты" или "Свобода"(в начале игры)
-- делаем нетральными долг и других участников бара.
-- условия ГГ должен снять или надеть броню любой другой групировки
local bComOut = false

function bar_dolg_fix()
    local actor_community = db.actor:character_community()
    local actor_outfit = db.actor:item_in_slot(6)
    local lev = level.name()
	
    if lev == "l05_bar" then
        if not bComOut then
            if actor_community=="actor_bandit" or actor_community=="bandit" then
		if actor_outfit == nil or(actor_outfit and not string.find(actor_outfit:section(),"bandit_") and not string.find(actor_outfit:section(),"svoboda_"))then
                    relation_registry.set_community_goodwill ("stalker", db.actor:id(), 0)
		    relation_registry.set_community_goodwill ("dolg", db.actor:id(), 0)
		    relation_registry.set_community_goodwill ("stranger", db.actor:id(), 0)
		    bComOut = true
		    --log1("Меняем отношение групировок")
		end	
	    elseif actor_community=="actor_freedom" or actor_community=="freedom" then
		if actor_outfit == nil or(actor_outfit and not string.find(actor_outfit:section(),"svoboda_") and not string.find(actor_outfit:section(),"bandit_"))then
                    relation_registry.set_community_goodwill ("dolg", db.actor:id(), 0)
		    bComOut = true
		    --log1("Меняем отношение групировок")
		end	
            end 			
	end
    else		
	if bComOut then
	    if actor_community=="actor_bandit" or actor_community=="bandit" then
                relation_registry.set_community_goodwill ("stalker", db.actor:id(), -5000)
		relation_registry.set_community_goodwill ("dolg", db.actor:id(), -5000)
		relation_registry.set_community_goodwill ("stranger", db.actor:id(), -5000)
		bComOut = false
		--log1("Возвращаем отношение групировок")
	    elseif actor_community=="actor_freedom" or actor_community=="freedom" then
                relation_registry.set_community_goodwill ("dolg", db.actor:id(), -5000)
		bComOut = false
		--log1("Возвращаем отношение групировок")
	    end			
	end
    end 
	
end

 

 

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


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

Старлей. Может ошибаюсь но вроде нет в тч game_relations.set_factions_community(p[1], p[2], p[3])

А так пробывал

relation_registry.set_community_goodwill ("stalker", db.actor:id(), 0)

relation_registry.set_community_goodwill ("stalker", "actor", 0)

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

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


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

Не все таки я не понимаю как это работает может кто-то объяснит.

Вот прописываю вызов только этой функции нахожусь на локации предбанник т.е при старте.

relation_registry.set_community_goodwill ("bandit", "actor", -5000) бандиты
relation_registry.set_community_goodwill ("military", "actor", 0) вояки

Пререхожу на кордон

У меня Бандиты изначально нейтральны становяться  красными

Вояки на кордоне же не меняют ориентации

PS

Хотя _Val_ может быть и прав :) Решил так сам выкручивайся.

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


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

Спасибо и на этом. Я обратился в тему что бы найти ответ почему и что я сделал не так. Вместо этого получил разные речи и почти ни одного ответа где я допустил ошибку. Хорошо больше не буду здесь писать.

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


Ссылка на сообщение
-- новости о смерти сталкеров
local level_name = {
                   ["l01_escape"] = "Кордон",
                   ["l02_garbage"] = "Свалка",
                   ["l03_agroprom"] = "НИИ Агропром",
                   ["l03u_agr_underground"] = "Подземелье НИИ Агропром",
                   ["l04_darkvalley"] = "Тёмная долина",
                   ["l04u_labx18"] = "Лаборатория X-18",
                   ["l05_bar"] = "Бар",
                   ["l06_rostok"] = "Дикая территория",
                   ["l07_military"] = "Армейские склады",
                   ["l08_yantar"] = "Янтарное озеро",
                   ["l08u_brainlab"] = "Лаборатория X-16",
                   ["dead_city"] = "Мёртвый город",
                   ["l10u_bunker"] = "Лаборатория X-10",
                   ["l10_radar"] = "Радар",
                   ["l11_pripyat"] = "Припять",
                   ["l12_stancia"] = "ЧАЭС",
                   ["l12_stancia_2"] = "ЧАЭС",
                   ["l12u_sarcofag"] = "Саркофаг",
                   ["l12u_control_monolith"] = "Бункер управления Монолитом",
                   ["atp_for_test22"] = "АТП",
                   ["peshera"] = "Пещера",
                   ["puzir"] = "Забытый лес",
                   ["aver"] = "Лесная чаща",
                   ["av_peshera"] = "Логово",
                   ["limansk"] = "Лиманск",
                   ["hospital"] = "Госпиталь",
                   ["generators"] = "Генераторы",
                   ["warlab"] = "Варлаб",
                   ["red_forest"] = "Рыжий лес",
                   ["lost_village"] = "Покинутая деревня",
                   ["marsh"] = "Болота",
                   ["zaton"] = "Затон",
                   ["jupiter"] = "Юпитер",
                   ["pripyat"] = "Припять",
                   ["jupiter_underground"] = "Путепровод",
                   ["labx8"] = "Х-8",
                   ["cs_agroprom_underground"] = "Подземелье",
                   ["predbannik"] = "Предбанник",
                   ["garbage_old"] = "Кладбище техники",
                   ["yantar_old"] = "Научная станция",
                   ["swamp_old"] = "Мертвые топи"
                   }

local community = {
                  ["stalker"] = "Одиночка",
                  ["military"] = "Военные",
                  ["bandit"] = "Бандит",
                  ["killer"] = "Наемник",
                  ["ecolog"] = "Эколог",
                  ["dolg"] = "Долг",
                  ["stranger"] = "Неизвестные",
                  ["freedom"] = "Свобода",
                  ["arena_enemy"] = "Участник арены",
                  ["trader"] = "Торговец",
	          ["monolith"] = "Монолит",
	          ["zombied"]  = "Зомбированный"
	          }
				  
local death_komment = {
                       "Я знал, что он допрыгается...",
                       "[Вырезано цензурой]",
                       "Ещё один...",
                       "Таак...",
                       "Мдя, ни дня без этого.",
                       "Одним больше, одним меньше...",
                       "Все там будем",
                       "Помянуть надо бы...",
                       "Зона тебе пухом.",
                       "Как в воду глядел - скопытился!"
	      }	

local dead_news = ""		   

-- новости о смерти сталкеров
function kill_npc_news(victim,who)
    if victim and IsStalker(victim) then
         dead_news = "%c[230,255,128,64]Погиб: "..victim:character_name().."\\nГруппировка: "..community[victim:character_community()].."\\nМесто гибели: "..level_name[level.name()]..""
         db.actor:give_game_news(dead_news,"ui\\ui_iconstotal",Frect():set(83,470,83,47),1000,3000) -- всегда
         local shans = math.random(1,100)
         if shans > 70 then
             dead_news = death_komment[math.random(table.getn(death_komment))]
             db.actor:give_game_news(dead_news,"ui\\ui_iconstotal",Frect():set(83,470,83,47),3000,3000) -- дополнительно не всегда
         end
    end  
end

Вызов в xr_motivator.script

function motivator_binder:death_callback(victim, who)
       имя файла.kill_npc_news(victim,who)--новости о смерти сталкеров
-----................-----
-----................-----
end

Сталкер ТЧ С паком локаций от кости. Ну как то так. Можно еще усовершенствовать сделать для сообщений иконки для каждой групировки усложнить выдачу сообщений. Сделать звуковое сопровождение. Упростить код и. тд

 

 

  • Нравится 1

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


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

А можно как-то скриптом задать логику для двери или задействовать файл логики. Не хочется мне алл.спавн ковырять. Я все практически скриптами сделал. Остались двери на локации Центр Управления Монолитом. Может есть способ скриптом назначить им другую логику, а то у этих дверей в алл.спавне логика.

name = mon_door_from_monolith_control_0000

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


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

Тут заметил чем больше я цепляю на бинд сталкер тем дольше загрузка клиент синхронизация. Видел в модах разное подключение к бинд сталкеру. 

Модули артоса, модульная система скриптов в огср, еще вроде биндят с промежутком времени 4 раза в секунду. Это влияет на загрузку при синхронизации?

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


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

Да просто еще уточнить хотел. Если я буду использовать модульную систему подключения скриптов к биндеру. Это даст какой нибудь значительный результат в производительности и уменьшении времени загрузки игры. Например если я перейду на песочницу от Экстрима.

Будет результат, игра будет быстрее загружаться. 

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


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

Да перешел на ОГСЕ сигнал. Ну так по ощущениям вроде пошустрее игра, по загрузке вроде тоже полегче. Ну еще ОГСР движок на новый билд перевел. Пошустрее вроде бы пошустрее.

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


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

Вот такие дела кракозябры в в текстовом поле, пытаюсь при инициализации окна в текстовое поле забить информацию.

Делаю так.

self.edit1:SetText(string.format("Сокол"))

Английский текст воспринимает. Русский кракозябрами как поправить?

Вот полный код.

function NewUI3:InitControls()
	local xml = CScriptXmlInit()
	self:Init(0,0,1024,768)
	xml:ParseFile("NewUI3.xml")
	self.Static1 = xml:InitStatic("Static1", self)
	self.edit1 = xml:InitEditBox("Static1:edit1", self.Static1)
	self.edit1:SetText(string.format("Сокол"))
	self:Register(xml:Init3tButton("Static1:button1", self.Static1), "button1")
	self:Register(xml:Init3tButton("Static1:button2", self.Static1), "button2")
end

 

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

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


Ссылка на сообщение
6 минут назад, Zander_driver сказал(а):

actor:iterate_inventory

А исходный код, в файле какой кодировки сохраняете?

 

Не понял о чем речь. Скрипт просто текстовый файл с рашерением script. XML в <?xml version="1.0" encoding="windows-1251"?>

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


Ссылка на сообщение
4 минуты назад, Zander_driver сказал(а):

"Просто текстовых файлов" не бывает. У любого текстового файла, есть кодировка. Это следует уже из самого определения, что такое "текстовый файл" с точки зрения Windows.

Vq0Xbfg.png

Понятно. Посмотрел скрипт в Кодировка UTF-8. А какая нужна?

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


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

AMK-Team.ru

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