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

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

5 часов назад, dsh сказал:

можно и скриптом создавать

Сложно представить ситуацию, когда это нужно.

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

ситуации, когда ГГ даёт НПСу указание, как подчинённому, типа "Стоять здесь!". И он остаётся там навсегда уолкером, например, а не в ремарке.

 

Изменено пользователем mole venomous
  • Сочувствую 1

Здесь могла быть ваша реклама.

Ссылка на комментарий
8 часов назад, mole venomous сказал:

Но точки путей, это объекты, которые можно заспавнить?

Нет. Во всяком случае это НЕ игровой объект в его классическом представлении (серверный, клиентский, имеет id, секцию, конфиг, класс...) - нет. Точки путей это более простая вещь, которая таким объектом не является.

Заспавнить их нельзя. Скриптом создать (в OGSR) - можно.

1 час назад, mole venomous сказал:

Сложно представить ситуацию, когда это нужно

 

Сложно представить? А если еще подумать? Что можно ТОЛЬКО ТАК и делать? :)

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

  • Нравится 1
  • Согласен 1
  • Полезно 1

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

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

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

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

@Zander_driver ,

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

ты сейчас не согласен с тем, что сам утверждаешь? Судя по красному крестику. Если что, там у меня не вопрос, хоть и со знаком вопроса. Это недоумение. К вопросу о том, как заспавнить поинты. Ну да ладно. Не нужно быть матёрым кодером, что бы понимать, что точки путей это не объекты. Поэтому вопрос юзера был, как я считаю, некорректным.  

 

17 минут назад, Zander_driver сказал:

динамически создать

Об этом я думал. И первое, что всплыло в голове, была СЗ. Не знаю, как у тебя там... Но не вижу в этом острой необходимости. Моб-хоумами с разными радиусами не так сложно поиграться, а для сталкеров я бы не стал так рандомно накидывать. Ну это моё видение, я допускаю одинаковые пути.

Здесь могла быть ваша реклама.

Ссылка на комментарий
1 минуту назад, mole venomous сказал:

Но не вижу в этом острой необходимости.

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

 

В одно окно смотрели двое. Один увидел дождь и грязь.
Другой — листвы зелёной вязь, весну и небо голубое.
В одно окно смотрели двое.

 

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

А я вижу... :( и почему-то только я?

 

 

  • Нравится 1
  • Смешно 1

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

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

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

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

@Zander_driver , 

  

8 минут назад, Zander_driver сказал:

Видеть можно совершенно противоположные, разные "явления"

 

так всегда было. И во всём. Но это не повод для грусти, вообще то. Я бы так сказал:

Не вижу острой необходимости. Вообще то, я сам любитель рандома. Ещё со времён "Диабло". Но считаю, что он не должен быть совсем хаотичным. Ну то есть, мне не лень будет сделать с десяток дорог, из которых каждый раз будет выбрана одна. :unknw: 

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

Здесь могла быть ваша реклама.

Ссылка на комментарий
3 часа назад, mole venomous сказал:

@Zander_driver , 

  

 

так всегда было. И во всём. Но это не повод для грусти, вообще то. Я бы так сказал:

Не вижу острой необходимости. Вообще то, я сам любитель рандома. Ещё со времён "Диабло". Но считаю, что он не должен быть совсем хаотичным. Ну то есть, мне не лень будет сделать с десяток дорог, из которых каждый раз будет выбрана одна. :unknw: 

В сталкере что то с передвижением мутанта если управлять им путём move через action. На предыдущей странице как раз про это спрашивал, особенно заметно в SGM ЗП где есть мутанты компаньоны. Может через динамически создаваемый patrol path будет лучше

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

Здрасьте.

 

Нашел старый пост: https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/18/#comment-661443

 

Интересует конкретно вот эта часть:

On 1/8/2012 at 9:50 PM, xStream said:

убрать имя класса из функций,вынести содержимое конструктора просто в тело скрипта, а в самом начале скрипта обозначить local self={}

 

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

Spoiler
class "custom" (CUIScriptWnd)

function custom:__init() super()
	self:Init(0, 0, 1, 1)
end

function custom:__finalize()
end

function custom:OnKeyboard(dik, action)
	CUIScriptWnd.OnKeyboard(self, dik, action)

	if action == ui_events.WINDOW_KEY_PRESSED then
		if dik == DIK_keys.DIK_X then
			printf("X")
		end
	end
end

 

 

  • Жуть! 1
  • Сомнительно 1

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

@Norman Eisenherz Имхо, никак, потому что здесь как раз наследование, инициализация базового класса со всеми его инкапсулированными свойствами и т. д.

В цитируемом посте речь, к. м. к., шла о более простом варианте класса, типа такого:

class "WeatherManager"
function WeatherManager:__init()
	self.weather_change_day = 0
	self.update_time = 0
	self.update_level = ""
end
function WeatherManager:reset()
	-- ...
end
function WeatherManager:select_weather(now)
	-- ...
end

Который можно было бы переписать как:

self = {}
function reset()
	-- содержимое не меняется
end
function select_weather(now)
	-- содержимое не меняется
end
self.weather_change_day = 0
self.update_time = 0
self.update_level = ""

Но зачем вообще вопрос и желание - непонятно. Академический интерес?

  • Согласен 3
Ссылка на комментарий
16 hours ago, Kirgudu said:

Академический интерес

Именно. Хотелось понять, возможно ли вызвать метод OnKeyboard для окна, которое хранится просто в переменной, без описания класса.

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

День добрый, прошу помощи!
Написал такой код:

if has_alife_info("freeplay") and level.name == "l11_pripyat" then -- если во фриплее и на Припяти
		for id = 1, 65535 do
			local lobj = level.object_by_id(id)
			if (get_clsid(lobj) == clsid.zone_bfuzz_s or get_clsid(lobj) == clsid.zone_galant_s or get_clsid(lobj) == clsid.zone_mbald_s or get_clsid(lobj) == clsid.zone_mincer_s) and distance_between_safe(lobj, level.vertex_in_direction(nil,vector():set(-45,-2,-85),9)) < 900 then -- если класса грави-аномалий и ближе 30 метров от вертекса костра у гаражей
				alife():set_switch_online(id, false) -- отключить онлайн
				alife():set_switch_offline(id, true) -- включаем офлайн
					alife():release(lobj, true) -- посылаем на разрушение
			end
		end
	end

в биндере сталкера (знаю, что плохая затея, но так нужно) на движке ОГСР (точнее в моде-аддоне Ганслингер для чистого ТЧ) , чтобы удалить аномалии (две) вечно "съедающие" механика.
Аномалии остались на месте, механик мёртв и возникает закономерный вопрос - что я натворил не так? Пожалуйста, ткните носом в мои ошибки!

Уточнение: убрать клиентский объект по координатам я могу, а вот работать с серверными пока не научился

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

AMD FX-8100 (Bulldozer) , 16GB DDR3-1600, AFOX GeForce GTX1050Ti и нормально сталкерим в НА5.1, НА7, OGSE-0693, OGSR, НС2016, OLR, OFFLIFE, CoC, LADC, СГМ, "Возвращении в Зону", Аномали, ЧН ОГСМ!

Мозг состоит на 80 процентов из жидкости, и мало того, что она тормозная, так многим еще конкретно не долили...@Denikius136
Black_Raven.gif
 

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

@Black_Raven_03 что-то я не понял. Если тебе мешают две конкретные аномалии, то просто удали эти две конкретные аномалии. Можно прямо в начале игры это сделать.

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

@Black_Raven_03 , что это за механик? Его заспавнили прямо на аномалиях? Или он не стоит на месте?

Если исключить эти два варианта, то в моде имеют место быть динамические аномалии. Это значит что в скриптах нужно добавить ещё одно безопасное место, что бы туда не лезли аномалии.

Ваш К.О. :)

  • Спасибо 1
  • Согласен 1
  • Полезно 1

 Моя нычкаНычка в арендованном у Опричника холодильнике  

Мы хорошие ребята, жаль патронов маловато:):ukostra:

UriZzz.gif

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

@Black_Raven_03 а если говорить непосредственно о коде, то

distance_between_safe(lobj, level.vertex_in_direction(nil,vector():set(-45,-2,-85),9)) < 900

где:

distance_between_safe вычисляет расстояние между двумя объектами,

lobj - клиентский объект аномалии,

level.vertex_in_direction(nil,vector():set(-45,-2,-85),9) возвращает номер (число, а не объект) вертекса в некоем направлении и на некоем расстоянии от номера другого вертекса, который в данном случае не передан (параметр nil).

 

В оригинале всё это в лучшем случае приведёт к значению 100000, которое точно больше 900, а значит внутрь условия ты не попадёшь.

В OGSR... не знаю, может какие-то функции и модифицированы, но всё равно код выглядит ошибочным.

Изменено пользователем Kirgudu
  • Спасибо 1
  • Нравится 2
Ссылка на комментарий

@dsh,  @UriZzz, @Kirgudu, спасибо, что откликнулись и извините, что так плохо сформулировал вопрос (плохо соображал, когда писал)
@dsh мне нужно удалить эти аномалии, только если О-Сознание убичтожено Стрелком/Меченым, не раньше;
@UriZzz да - механик (Шуруп) притопал в Припять со Складов, причём с Лукашом и Кэпом из уникальных НеПиСей и ещё пятью статисами из фрименов;
@Kirgudu, м-да, это я сильно тупанул с номером вертекса - мне должно было хватить vector():set(x,y,z) для сравнения расстояния;
не помню - с какого бодуна я решил перестраховаться с поиском смарта с костром, к которому квад и пытаеться "рассесться", попадая в "мясорубку".

переписал нафиг - от греха подальше:

if has_alife_info("freeplay") and level.name == "l11_pripyat" then -- если во фриплее и на Припяти
		for i = 1, 65535 do
			local svobj = alife().object(i)
			local clobj = level.object_by_id(svobj.id)
			if (get_clsid(clobj) == clsid.zone_bfuzz_s or get_clsid(clobj) == clsid.zone_galant_s or get_clsid(clobj) == clsid.zone_mbald_s or get_clsid(clobj) == clsid.zone_mincer_s) and distance_between_safe(clobj, level.vertex_in_direction(nil,vector():set(-45,-2,-85),9)) < 900 then -- если класса грави-аномалий и ближе 30 метров от вертекса костра у гаражей
				alife():set_switch_online(i, false) -- отключить онлайн
				alife():set_switch_offline(i, true) -- включаем офлайн
--				if actor:position():distance_to(clobj:position()) > 9 then -- если есть 3 метра до Меченого
					alife():release(svobj, true) -- посылаем на разрушение
--				end
			end
		end
	end

надеюсь теперь будет цивилизованнее

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

AMD FX-8100 (Bulldozer) , 16GB DDR3-1600, AFOX GeForce GTX1050Ti и нормально сталкерим в НА5.1, НА7, OGSE-0693, OGSR, НС2016, OLR, OFFLIFE, CoC, LADC, СГМ, "Возвращении в Зону", Аномали, ЧН ОГСМ!

Мозг состоит на 80 процентов из жидкости, и мало того, что она тормозная, так многим еще конкретно не долили...@Denikius136
Black_Raven.gif
 

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

@Black_Raven_03 и снова ты не понял, что именно я тебе пытался показать.
Посмотри на строку 5 своего кода, где длинное условие, не помещающееся на экране. Там в самом конце часть условия "and distance_between_safe(...) < 900", которое никогда не выполнится, а значит, ты не попадёшь внутрь к удалению аномалий.
Почему - расписал выше.

  • Спасибо 1
Ссылка на комментарий
16 часов назад, Black_Raven_03 сказал:
level.vertex_in_direction(nil,vector():set(-45,-2,-85),9)

Оно не просто не выполнится, но по идее вызовет вылет. Разве можно указывать вертекс nil для функции vertex_in_direction ? По идее нельзя.

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

16 часов назад, Black_Raven_03 сказал:
if actor:position():distance_to(clobj:position()) > 9 then -- если есть 3 метра до Меченого

Опять же, тут видится ошибочное представление о работе функций.

vector:distance_to(vector) -- Возвращает непосредственно дистанцию. А не квадрат дистанции.
-- Если вы хотите меньше 3 метров, то и в условии надо писать 3 а не 9.

 

16 часов назад, Black_Raven_03 сказал:

нужно удалить эти аномалии, только если О-Сознание убичтожено Стрелком/Меченым, не раньше;

Почему бы не удалить их в момент уничтожения О-сознания.

Там же дается какой-то инфопоршень? Повесьте на него функцию через action, и в ней удаляйте.

  • Спасибо 1
  • Нравится 1
  • Согласен 2
  • Полезно 2

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

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

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

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

@Black_Raven_03 если удаление двух вполне конкретных _статичных_ аномалий нужно сразу после отключения О-сознания, то зачем здесь такие сложности с вычислением расстояний и перебором всех объектов, да еще все это повешенное на биндер?

Две эти  аномалии имеют вполне конкретные гейм и левел вертексы, и однозначно заданные имена, если они прописаны в аллспавне. 

Почему не сделать обычный экшн по получению инфопоршня на отключения О-Сознания ( там такие в оригинале, емнип, и так выдаются, ну если не выдаются - выдать самому).

Т.е. как только выдан поршень - автоматически выполняется скрипт на отключение/удаление объектов аномалий по их именам.

 

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

  • Спасибо 1
  • Нравится 1
  • Согласен 4
  • Полезно 1

След от кругов на воде - это тоже след (с)

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

@Zander_driver, @Okichi удалять надо и статичные и динамические аномалии, ещё и синхронизируя с другими скриптами по несколько раз в секунду (соотв. имя и вертексы будут менятся, а одиночный экшн не повторит выполнения - отсюда и биндер... пока...)
@Zander_driver про квадрат расстояния понял - банально не заметил, когда переписывал, спасибки что повторил

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

AMD FX-8100 (Bulldozer) , 16GB DDR3-1600, AFOX GeForce GTX1050Ti и нормально сталкерим в НА5.1, НА7, OGSE-0693, OGSR, НС2016, OLR, OFFLIFE, CoC, LADC, СГМ, "Возвращении в Зону", Аномали, ЧН ОГСМ!

Мозг состоит на 80 процентов из жидкости, и мало того, что она тормозная, так многим еще конкретно не долили...@Denikius136
Black_Raven.gif
 

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

А если статичные удалить непосредственно с уничтожением О-Сознания, а появление динамических предотвратить изначально в этом месте, подобно тому, как сделано ещё в АМК моде (защищённые места, где аномалии не появятся).

Изменено пользователем mole venomous
  • Спасибо 1
  • Согласен 2

Здесь могла быть ваша реклама.

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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