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

Gameplay - как сделать ЭТО, чтобы ОНО всем нравилось ;)


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

Тема предназначена для разработчиков, а не для пользователей. Модерирование будет крайне жестким. Прежде, чем что-либо писать - прочитайте первый пост и примеры обсуждения. Изменено пользователем Dennis_Chikin
  • Не нравится 1
Ссылка на комментарий

 

 

И, блин, нет ничего хуже, чем постоянно что-то править под древние кривые скрипты, когда у тебя давно вменяемые написаны. 8(

А кто вас, сударь, заставляет этим заниматься?

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

Да, чтобы ответ был не риторическим, то ну вот хоть как-то так, что-ли: https://dl.dropboxusercontent.com/u/27871782/bind_monster.script

 

Ну и, да, сначала придется все остальные привязки ото всюду вычистить.

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

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

 

А пока, всем жаждущим рефакторинга в массы, даю простенькую ивент-драйвен модель, слепленную за минут 15 (по мотивам сами угадайте кого):

 

 

 

--// by Karlan
local events = {}
class "event"
function event:__init(name)
if name and name ~= "" then
if not events[name] then  
events[name] = {}
end
self.__evt_name = name
end
end

function event:register(func, uo)
table.insert(events[self.__evt_name], { func = func, uo = userobj })
end

function event:unregister(func)
for i,v in pairs(events[self.__evt_name]) do
if v.func == func then
table.remove(events[self.__evt_name],i)
end
end
end

function event:trigger(data)
for _,v in ipairs(events[self.__evt_name]) do
v.func(data, v.uo)
end
end

 

 

 

Да-да, она без полотна функций типа как в xr_s.script... Расширять функционал можно сколь угодно (это тоже не долго), я лишь рабочий плацдарм даю, который должен быть понятен каждому, как устроена эта система, и в чем ее преимущества перед существующей (в оригинале). 

Если же ты будешь строить всё с нуля!!!, то тогда действительно вероятность "слепить что-то страшное" достаточна велика.

Ну конкретно я сделал огромное количество велосипедов. И работают, судя по логам, они куда лучше, чем предыдущие варианты данных разработок. Так что с этим я не соглашусь.

 

Денис, нет, таймеры не смотрел  сейчас гляну. 

upd: Глянул, мне понятна твоя система (уже из темы с коллбеками).

Изменено пользователем Карлан
Ссылка на комментарий

(Записывает в ежедневник: "дать себе пинка по поводу динамического подключения модулей"). Впрочем, там тот же принцип, что on_use/take/drop/ненужное вписать. Ну и в общем близко к тому, что здесь, но плоское.

 

И, кстати, таймеры в "подполье" смотрел ? "Плоские".

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

 

 

Zander_driver, Ну вот будет такой конструктор модов. А тут меня разберёт, чтоб тот же кровосос после неудачной атаки матерился и махнув лапой, обиженно уходил от ГГ. А заготовки для такого случая нету.

Основные ключевые действия везде поддаются общим правилам. Захотели чтоб что то произошло после атаки кровососа - ловим это событие и выясняем результат, удачный/неудачный. А "матерился" и прочее, это уже контент. который от скриптов никак не зависит. Звуки, текстуры, модели - все делают сами или находят из доступных подходящее.

 

 

 

Конструктор из основных (базовых) сутуационных элементов, которые отлажены, оттестированы и при любых обстоятельствах не приводят к непонятным вылетам - это замечательная вещь. Увы она вряд ли будет реализована, увы.

Извольте озвучить причины, почему вы так считаете.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

Добавлю совершенно идиотскую мысль о вреде олл_спавна.

Стоит у меня бэтээрчик в нужном месте, заспавненный через олл_спавн, с логикой - прописанной там же)) Постреливает себе по зверушкам..А вот появится ГГ, постреляет и по нему. А чтобы стрелять перестал, нужно кое-чего сделать.

А сколько проживет ...после выхода мода... логика такого бэтээра, если она будет вынесена в геймдату?

 

@Priboj37, про Артоса я в курсе)) Но с учетом скажем так - своего виденья Зоны, я не хочу устраивать эпичные бои и погони на вертушках. А всё, что мне нужно от бэтээров у меня уже есть...Юркнул в подвальчик)))

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

Хе-хе...

 

function se_stalker:on_before_register()
	local nm = self:name()
	if nm == "sim_stalker_fraer" then	-- hack глючного олспавна
		local t = get_npc_data( self )
		t.custom = "[smart_terrains]\nval_lager_bandits = {-bar_darklab_document_start}"
		set_npc_data( t, self )
	elseif nm == "radar_svoboda_reyd3" then
		local t = get_npc_data( self )
		t.custom = ""
		set_npc_data( t, self )
	elseif nm == "mil_blockpost_freedomstalker001" then
		local t = get_npc_data( self )
		t.custom = "[smart_terrains]\nmil_fblockpost = true"
		set_npc_data( t, self )
	elseif nm == "borman" then
		local t = get_npc_data( self )
		t.custom = "[smart_terrains]\nnone\n[logic]\ncgf = scripts\\limansk\\borman.ltx"
		set_npc_data( t, self )
	end

	-- self:fill_exclusives()
	self:get_ini()
	local cnd = smart_terrain.read_smart_terrain_conditions( self )
	if self.strn_e then	-- только один эксклюзивный
		local t, e = smart_terrain.exclusives, self.strn_e
		t[e] = ( t[e] or 0 ) + 1
	elseif cnd then
		self.smart_terrain_conditions = cnd
		local t = smart_terrain.exclusives
		for k, v in pairs( cnd ) do t[k] = ( t[k] or 0 ) + 1 end
	end
end

-- вот вам и олспавн.

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

Не знаю куда лучше было такое написать, но поскольку всякого рода правками занимаемся тут, то думаю лучше сюда, так как в "подполье" не все есть, а дельные мысли могут быть и у тех, кто по другую сторону баррикад.  В общем вопрос по теме сохранений, все мы знаем, что система сохранений в НЛС нравится далеко не всем, но тем не менее с технической части это какая-никакая, но находка, т.к. мы т.о. избавляемся от разного рода косяков, которые выползают при тех моментах, когда в сложной сцене мы квиксейвимся/квиклоадимся после каждого трупа. Так же это чит какой-никакой, т.к. допустим в нас все стреляли, гг помер, мы перезагружаемся, и ву-а-ля, все смотрят в другую сторону и на нас всем пофигу (нет, писать алгоритмы для поворота врагов на врагов при загрузке я не предлагаю). Так вот, нет ли у кого мыслей как оптимизировать эту систему сохранений, делать ли ее в определенных местах и/или при определнных условиях), либо же делать сохранение через определенные промежутки времени (тут совсем все просто, циклический таймер и флаг), либо может еще какие идеи есть.

Ссылка на комментарий

Так вот, нет ли у кого мыслей как оптимизировать эту систему сохранений, делать ли ее в определенных местах и/или при определнных условиях), либо же делать сохранение через определенные промежутки времени (тут совсем все просто, циклический таймер и флаг), либо может еще какие идеи есть.

Идеи есть, и даже конкретная реализация этих идей есть. Только пожалуй покину я этот раздел форума на месяц-полтора. Я здесь явно лишний. Изменено пользователем Dennis_Chikin
удалил личное
Добавлено Dennis_Chikin,

В общем, я раскидал посты по темам, какие куда ближе: что - в скриптование, что - в ковырялку, что - и в отстойник, а дальше - ну, насильно - не заставишь. 8(

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

Так, поехали, про сохранения.

 

Во-первЫх строках сего спаслания я есть иметь быть хотеть сказать(С), что ежели есть возможность убить одним выстрелом несколько зайцев - это надо сделать.

 

Коль скоро основание у нас В ПЕРВУЮ ОЧЕРЕДЬ - техническое: бьются сэйвы, сделанные из какой-либо специфической позы - отключать их именно из этой позы. Если поза - непись, сорвавшийся в danger или combat - неразрешаем записываться именно в случае, внезапно, когда у нас есть КТО-НИБУДЬ в - неожиданно овощи© - этом самом состоянии.

 

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

 

Ну, помним, незабвенный watcher_act.scrip, когда непись прямо во время боя прется через всю локацию, ни на что не обращая внимания, подбирать упавший бинтик, на другом краю этой локации, причем ориентируясь НА СЛУХ.

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

 

В общем, если кто-то где-то - отключаем все лишнее везде. Сделать - довольно таки элементарно, тем более файлики все рано править на предмет пачки багов древних, как с теми же сидениями в кострах. ;)

 

 

Едем далее... С собственно сохранениями, но примерно на ту же тему:

Если монстры или враждебные неписи видят актора, или актор видит врагов - ну, понятно. Так же, как со сном сделано (у кого не сделано - мои соболезнования).

Проверка здесь более ресурсоемкая, так что делать только при попытке сохранения.

 

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

 

Да, кстати, о птичках:

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

Блокировать ли сэйв через менюшку совсем, или разрешить, но не давать выбрать произвольный, а только какой-нибудь "unstable", и выводить грозный текст на весь экран, типа "вы сохранились в неудачное время, этот сэйв может быть нерабочим" - я за второй вариант. Что не надо делать однозначно - это грохать сэйвы и убивать актора (как не буду показывать пальцем где) - ибо это есть не борьба с глюками, а их умножение.

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

Вот в очередной раз наталкиваюсь вот на подобную фразу - "Попробуйте сами пробежать с 30-атником на плечах, уверен многое прояснится" - и вот хочу об этом поговорить.
Как человек, с рюкзаком ходивший мно-оого, и рюкзвак весил по-разному. Было что и килограммов 5, а было, что и 80.

Ну, то есть, что такое 80кг, и даже 30 - я знаю. А вот гложет такое смутное сомнение, что эти самые 80кг - они были в общем-то по тому, что это я счел себя обязанным неким, простите, ИДИОТАМ. Ну, то есть, по принципу, "да отвяжитесь вы - ну хотите, чтобы я по лесу 80 кг на себе тащил - так и притащу".

Но, вот после этого случая, я просто зарекся иметь дело с этими людьми от слова совсем. По тому как было практикой доказано, что эти 80 были не нужны. И даже 20 на самом деле были не нужны. А просто идиотам так вот захотелось посмотреть, как люди будут корячиться.

И когда иду куда-то с рюкзаком "сам по себе" - высчитываю буквально граммы. Поскольку да, на 30 км по пересеченке чувствуется каждый этот этот вот грамм.

Да, я понимаю, что оружие - оно - весит. И патроны весят. И броники весят тем более. Но с тем не оставляет чувство, что во всех без исключения модах я опять таки имею дело с теми самыми идиотами, которые хотели, чтобы в лес было притащено на горбу 80 кг бесполезного хлама, который потом так и уехал обратно, не распаковываясь.
Вес нарастает как-то слишком быстро и от непойми чего. Хотя если начать считать, то вроде как все правильно.

Вопрос: кто-то подобное замечал ли, а если замечал, то пытался ли что-то с этим сделать ?

2 7.9: гм, по-моему, по ссылке опять какое-то "ущучивание". На этот раз через объем (гм, в амк было, и в итоге его все отрывали). А вот чтобы не "ущучивать", и одновременно тягу авторов к "реализЬме" удовлетворить ?

Изменено пользователем Dennis_Chikin
  • Согласен 3
  • Полезно 1
Ссылка на комментарий

Пробовали, здесь http://forum.xianionline.com/viewtopic.php?f=12&t=90

Но недоделали.

А ограничение веса и так есть.

всё легко

Ссылка на комментарий

Как бы, еще расшифрую:

 

1. Хочется, действительно, ограничить рюкзак вот этими 20 кг. И еще чтоб 10 мог таскать с "пыхтением".

2. Но, действительно, чтобы это самое пыхтение в норме достигалось редко, и чтобы у игроков не возникало желание "править" и "отрывать".

 

То есть, чтобы было ИНТЕРЕСНО эти 20 кг. самому ограничивать, а костюмчик туриста знаменитый с +5 к весу ценился может быть и по-выше экзы, которая позволяет 2 центнера легко перетаскивать.

  • Согласен 1
  • Не согласен 1
Ссылка на комментарий

Врядли есть "психиатрическое" решение вопроса "читерства" и попыток "сыграть не по плану".

 

Можно попробовать предложить игроку не читерить, через геймплей, например:

- Компенсировать легальный вес, например, "точностью стрельбы";

- Ввести возможность комплектовать и манипулировать этими (20килограммовыми) "комплектами предметов", например, через снятие-одевание (укомплектованных) разгрузок, рюкзаков, костюмов, и тд

- ну и прочее такое...

Изменено пользователем 7.9
  • Полезно 1

всё легко

Ссылка на комментарий

Читерство начинается с какого-то момента, и довольно резко. В амк "не пошло" ограничение объема, но вес массово не правили. В солянке пошли массовые правки веса. ОПКМ при этом опять же игрался без массового чита, а по ОП2 я ни секунды не колебался создать тему для читеров, и все резко бросились откручивать ВСЕ, даже то, на что в соли ни кто внимания не обращал.

 

То есть, существование порога считаю доказанным.

Ссылка на комментарий

Так и есть - уровень готовности на "преступление" существует - "уровень дискомфорта" / "псих.прочность" / "смысл ограничения".

 

Про АМК-ограничение объёма - оно недоработанно, или непроработанно, в общем, неудачно с точки зрения геймдизайна...

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

всё легко

Ссылка на комментарий

2 Murarius: это не есть верно даже для Неназываемого случая. Если посмотреть внимательно.

И в общем-то речь даже не об этом. А о том ощущении, что рюкзак (с любым ограничением), "почему-то" очень быстро забивается каким-то явно "мусорным" весом.

 

Здесь есть несколько довольно очевидных "не ограничительных" вариантов, и сколько-то неочевидных. Плюс то же самое и с ограничительными. И их комбинации.

 

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

Равно ни кто и с дачи не пытается утащить сразу весь урожай. Ну, это - из банального.

То есть, сразу очевидное решение: сократить в игре количество предметов, имеющих большой вес, и при этом по сути одинаковых.

 

Собственно, тот же Сяк здесь ввел порчу колбасы и батонов (но при этом вроде не портящиеся консервы), и не портящиеся же, и при этом ЛЕГКИЕ колбаски охотников.

Но как видим в роликах, это все же не очень хорошо сработало "почему-то" (возможно, по тому что не очень и хотелось).

И, да, облегченные колбаски - это таки явная полумера. По тому что ощущение мусорности содержимого рюкзака у меня лично ни куда не делось.

 

 

Да, при этом в солянкосэйвах я почему-то регулярно видел кучи заведомого уже явно мусора, таскаемые зачем-то через 10 локаций, даже у персон, прославившихся своей бескомпромиссной "борьбой с читерством" - это когда я со своими заведомо читерскими конфигами с их сэйвами даже с места сдвинуться не могу (О КАК ! Борцы, понимаешь ли ! С читерством !)

Понятно, что такое - ни какой колбасой не лечится, но при этом явно имеет какие-то свои причины.

 

Что бы хотелось иметь в идеале как финал всего этого трэда - чью-то success story типа: "А вот в моем моде ни один игрок никогда на себе больше 20кг не таскал, и такой потребности не испытывал !"

Ну вот как я в реале, кроме описанного случая про 80 кг для идиотов.

Изменено пользователем Dennis_Chikin
  • Согласен 2
Ссылка на комментарий

@Dennis_Chikin, я конечно не хочу опять кому-то шибко умным показаться, но у себя я этот вопрос решил теми-же объемами, что и в амк (ну или как 7.9 предложил), и большим лутом (но опять же с дискомфортом, еда не падает). Т.е. по факту играться тяжело, но какого-то там дискомфорта в виде выпадения по 5 патронов с трупа я не делал, т.к. в подобных модах волей-неволей начинаешь собирать по одному патрону до 300-400 штук и таскаешь их постоянно, т.к. думаешь а может выпадет не 1 патрон, а вообще собственно - нифига, и в тех же модах совершенно невозможно поменять рабочий ствол из-за дефицита боеприпасов.

 

Проблема игроков я думаю кроется в том, что они всю игру расценивают как единый поход, т.е. не делают никаких схронов, таскают по два вида стволов (ближний/дальний), по два вида броников (аномалии/перестрелки) и еще кучу всего не нужного. Кокнретно у себя в моде я добивался того, что-бы до игрока доходило, что надо выбрать для себя в каком-то месте постоянный пеервалочный пункт (или даже несколько), там сделать заминированный схрон и складывать туда все "полунужное", ценовую политику выкрутил до того, что все "не нужно" лучше сразу продать (а то некоторые вещи со временем обесцениваются). Ну а нужное все время таскать с собой (как правило у меня это один ствол (ага, без пистолета), боеприпасы к нему, несколько бинтов и аптечек, пару консерв (на случай если где-то придется сильно задержатся) и контейнер для артефактов).

 

О переносимом весе. Ну тут если рогом упереться в "рыализм", то можно сказать, что все зависит от физ. подготовки и собственной массы человека. Кому то и 30кг пушинкой покажутся, а кто-то будет дохнуть от 15. Это я еще не говорю о удобности экипировки. Конкретно у себя в моде сделал 30кг, оптимальный вес для среднего мужика, но и то в виду объема редко когда удается достичь этой планки.

 

В NLC7 кстати многое учли по части пресловутого реализма. Мне понравилось, в целом грамотно.

  • Нравится 1
Ссылка на комментарий

Ага, выцепляю две выглядящих годными идеи:

 

1. Оборудование схрона как явно выраженный игровой процесс. То есть, схрон, видимо, гарантированный, я так понимаю ? Кстати, на схрон (а не просто брошенное как попало где попало и что попало) можно вообще много всякого завязать. Недостаток - придется поработать с картами.

 

Конкретные идеи/реализации "схронов-в-которые-можно-играть" - реквестируются.

 

2. Сделать и стимулировать продажу всякого ненужного хлама "первым встречным". Нужен хороший уборщик этого самого проданного хлама как промежуточный этап к "торговым караванам". Ну, у меня такой уборщик есть. Кому надо - могу дать. "Корованов" пока нет, надеюсь - будут. Кстати, надеюсь, сразу и проблему с едой/патронами несколько снимут.

 

Кстати, возможно еще какие-то способы утилизации ненужного "не отходя от кассы". Ну, то есть, не совсем идиотские и не совсем "себе в убыток".

 

3. Пожалуй, стоит тоже отметить: убрать дефициты, вынуждающие запасаться "на всякий случай", и чтоб непременно в рюкзаке.

Заодно - сократить на локациях собственно количество разного хлама, которые на этих же локациях неприменим. (Гм, частный случай п2).

Ага, привести в равновесие с п2 на предмет утилизации излишков.

 

 

Что еще хочу, вот прямо сейчас и здесь, как простой и универсальный способ для любого мода без больших переделок собственно кода:

 

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

То есть, как сделать более лекий рюкзак, чтобы игроку было стремиться именно к этому варианту не "под принуждением" ?

 

Таки вопрос с которого начат тред: что такого тяжелого игроки постоянно таскают в рюкзаках и зачем они это делают ? Что можно сделать с ЭТИМ ТЯЖЕЛЫМ, чтоб не таскали или оно не было тяжелым ?

Ну, то есть, чтобы когда игрок подходит к идее "полезть в конфиг поменять вес" - понимал, что не прав, и есть способ более лучший и более имеющий отношение к игре ?

 

(Ну тут у меня есть какие-то обрывки мыслей, что в реале и оружие какое-то новое все время пытаются разработать, с заменой металла и дерева на пластик, и всякие там опять-же жратву с хозбытом опять же походные... Но это все обрывки, и надо по интернетам шариться за конкретными характеристиками - "что есть, какое оно есть, почему я сам об нем до сих пор не знаю/не использую ?" - а мож кто пошарился уже, и вот прям щас вот прям здесь список выложит: что из игры нафиг выкинуть и чем заменить, с характеристиками.)

 

P.S. А вот ограничение объема мне кажется вообще неправильным. Ибо в свой 120-литровыц рюкзак я не только 20 автоматов запихаю, но и целый запрожец. ;) Вот поднять потом, это - вряд-ли.

Изменено пользователем Dennis_Chikin
  • Полезно 1
Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

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

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