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

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

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, CoP Gunslinger, ShoC GA, Legend Return, Anomaly, CS OGSM!

Мозг состоит на 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, CoP Gunslinger, ShoC GA, Legend Return, Anomaly, CS OGSM!

Мозг состоит на 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 ядер, 32 потока, 5.75 ГГц); 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, CoP Gunslinger, ShoC GA, Legend Return, Anomaly, CS OGSM!

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

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

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

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

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

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

Есть script vars storage.

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

Или там  в чистом ОГСР своя версия движка? А то, может, человеку просто надо добавить в какой-нибудь конфиг имя своего уникального механика, и поплевывать этот механик будет с высокой колокольни на все аномалии, будь их хоть миллион...

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

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

Ссылка на комментарий
29 минут назад, Okichi сказал:

разве в движке  ОГСР нельзя делать любых ( нужных автору ) неписей совершенно неуязвимыми для любых аномалий? В версии ОГСР в dsh-моде такое было

Тут я могу с уверенностью говорить только за старый OGSR, с которого я начинал свои наработки в 2019-м году. Там такого не было.

Возможно, позже появилось, а возможно, это @dsh-специфичная технология. Тут автору виднее)

  • Полезно 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

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

[ТЧ 1.0006]

 

После попытки адаптации какой-то древней версии "amk_offline_alife" игра случайным образом падает на переходах с ошибкой чтения сейва и руганью на пустое значение game_difficulty. Вроде такого: https://www.amk-team.ru/forum/topic/14288-soc-kovyryaemsya-v-faylah/?do=findComment&comment=608408

 

Если в actor_binder:save и …load изменений нет, что еще может портить сейв? Среди файлов мода есть [amk_tools.script] с таймерами – может, это они криво записываются?

В целом, что и как стоит проверять при таких вылетах?

 

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

Шпаргалка

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

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

Видимо оно что-то делает с нетпакетом/пстором актора. Или не только актора.

А зачем вообще ковырять древнее непойми что, когда на современных средствах то же самое при желании делается как два пальца?

  • Полезно 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

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

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

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

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

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

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

Войти

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

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

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