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

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

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

  Информация (Показать)

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

  Читать рекомендуется. (Показать)

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий

 

 

  alex4321 писал(а):
Но (см. комментарий) сообщения нет.  з.ы. и да, проблема не в выводе сообщения - даже явное return 1/0 не приводит к вылету :-) (т.ею. до a4_message не доходит, при этом - даже если она вызывается из a4_on_update)

И не будет никакого сообщения при таком коде.

local packet = net_packet()
local new_game = packet:r_u8() != 1 

Во-первых, как справедливо заметил @naxac, неравенство должно обозначаться «~=».

А во-вторых, чтобы пользоваться net-пакетами, надо для начала хотя бы изучить что они такое и с чем их едят. Начать можно с азов в теме «Справочник по функциям и классам», да и в целом на форуме информации предостаточно. Даже тут, на предыдущей странице, было обсуждение, которое могло бы навести на некоторые мысли.

В частности, вызов конструктора local packet = net_packet() возвращает новый, чистый (!) net-пакет. Всегда. И пытаться получить из него признак запуска игры - бессмысленно.

 

Вообще, использовать net-пакеты для сохранения признака того, что игра уже запускалась - это палить из пушки по воробьям. Один вопрос: зачем?

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

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

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

Спасибо, про сравнение даже не подумал как-то. Позор моим... (блин, седины нет :-) )

  Цитата

 

 

Вообще, использовать net-пакеты для сохранения признака того, что игра уже запускалась - это палить из пушки по воробьям. Один вопрос: зачем?

 

Да так-то до них дело ещё не доходит - а в дальнейшем мне тут ещё будет что хранить. Хотя на данный момент да, идиотизм - целый пакет из-за 1байта (ну или. какое там выравнивание? :-) ) А за pstor - спасибо, сам при более ранних ковыряния видел только пакеты (ещё бы я помнил, где находил пример нужных мне действий :-) )

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

 

 

  Serge! писал(а):
Можно и так
Я просто хотел реализовать худ предметов: схема такова - кушаем батон, спавнится сам худ на классе чего-нибудь, заводится таймер, и потом худ удаляется. Но вот со спавном этого худа проблемы...
Ссылка на комментарий
  alex4321 писал(а):

а в дальнейшем мне тут ещё будет что хранить

В зависимости от специфики и размера сохраняемых данных - пстор, обсуждавшиеся тут универсальные хранилища, нет-пакет конкретного объекта и т. д. Вариантов хватает. По целям надо и средства выбирать.

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

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

@Kirgudu, да, похоже - действительно была проблема в синтаксисе.

Теперь a4_on_update таки выполняется (return 1/0 приводит к падению).

Впрочем, сообщение показать не удается

function a4_message()  
  local actor = alife():actor()
  local cactor = level.object_by_id(actor.id)
  cactor:give_game_news("Свободу тушканам!\\nТушканчики всех стран, объединяйтесь!", "ui\\ui_npc_monster", Frect():set(0,215,163,105), 1000, 50000)
end
Ссылка на комментарий
  12.11.2015 в 05:11, naxac сказал:

@Wlad777, без движковых правок - нет.

Плохо. Опять костыли на костылях городить придётся.

 

А вот следующий вопрос: есть zone_flame_small, рядом стоит актор. Дистанция до этого конкретного костра получена, нужно узнать горит он или нет. Можно ли это отследить?

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

---------------------------------

www.amk-zone.de

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

@alex4321, ещё раз:

 

 

  Kirgudu писал(а):
В частности, вызов конструктора local packet = net_packet() возвращает новый, чистый (!) net-пакет. Всегда. И пытаться получить из него признак запуска игры - бессмысленно.

Поэтому

local packet = net_packet()
local new_game = packet:r_u8()

вернёт что? Мне неизвестно - не пробовал получать значение из нового net-пакета.

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

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

Да пофиг, что оно вернет - я пока что сократил до

function a4_on_update()
  a4_message()
end

net_packet-в я сейчас не юзаю. В таком варианте оно на каждый вызов actor_binder:update должно вызывать мой код, т.к. я не отписываюсь от события. Как минимум - 1 раз вызывает, раз крешится при замене a4_message() на return 1/0. Но вывода сообщения не проходит. Т.е. проблема с 

function a4_message()  
  local actor = alife():actor()
  local cactor = level.object_by_id(sactor.id)
  cactor:give_game_news("Свободу тушканам!\\nТушканчики всех стран, объединяйтесь!","ui\\ui_npc_monster",Frect():set(0,215,163,105),1000,50000)
end
Ссылка на комментарий
  alex4321 писал(а):

 

local actor = alife():actor()
local cactor = level.object_by_id(sactor.id)

 

Точно sactor.id? Строчкой раньше определяется переменная actor. Это первое.

А второе - зачем такие мучения? Не проще ли сделать так?

db.actor:give_game_news("Свободу тушканам!\\nТушканчики всех стран, объединяйтесь!","ui\\ui_npc_monster",Frect():set(0,215,163,105),1000,50000)
@Serge!, это при условии, что там всегда 0. А также что позиция чтения установлена с начала пакета (см. выше).

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

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

 

 

  Kirgudu писал(а):
это при условии, что там всегда 0

этот ноль меня удивил, т.к. я ждал, что там какой-нибудь мусор.

Никакие позиции не усанавлива, просто тупо скопировал строки из Вашего сообщения. Вот так:

local packet = net_packet()
news_manager.send_tip(db.actor," s -->"..tostring(packet:r_u8()))
Добавлено Kirgudu,

Говоря про позицию чтения, я имел в виду ЗП/ЧН, где для вновь созданного пакета она может не равняться нулю, о чём и писалось несколькими сообщениями назад.

Ссылка на комментарий
  Kirgudu писал(а):
db.actor:give_game_news("Свободу тушканам!\\nТушканчики всех стран, объединяйтесь!","ui\\ui_npc_monster",Frect():set(0,215,163,105),1000,50000)

Кстати, верно - опечатку в коде поправил, а тут как висела, так и оставалась. Ну и за упрощенный вариант спасибо. Но сейчас у меня такой код :

 

  Показать

 

Однако, сообщения нет. Более того - если я помещаю db.actor:give_game_news... в bind_stalker:update - тоже нет. А по return 1/0 - падает, т.е. до выполнения этого кода дело доходит.

 

upd. А вот вариант с news_manager.send_tip в моём случае подходит и работает. Т.к. мне это вообще только для отладки - то и хрен с ним, буду показывать инфу так.

function a4_message()
  news_manager.send_tip(db.actor, "TEST", nil, nil, 30000) 
end
Изменено пользователем alex4321
Ссылка на комментарий

Потому что в news_manager.send_tip() используется альтернативный метод вывода сообщения:

db.actor:give_game_news("Свободу тушканам!", "Тушканчики всех стран, объединяйтесь!", "ui\\ui_npc_monster", 0, 50000)

В этом варианте не указываются координаты и размеры вырезаемого из текстуры изображения.

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

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

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

Кстати, вероятно - но проверить пока не могу. А код такой вышел :

 

  Показать

 

Теперь я уже могу подписываться на событие game_new в своих скриптах. Отрабатывает как и должно  по задумке - 1 раз при старте новой игры.

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

@alex4321, триггер добавляй прямо в коллбек, нечего всякие нагромождения городить, в оригинале там инфопоршень ставится на единоразовое отрабатывание, можешь поступить так же и туда еще один ивент добавить, но у меня нету, вот посмотри мой код:

  Показать

 

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

@hi_flyer, в онлайне или оффлайне? на тебе пример для онлайна:

function kill_npc_in_gulag(gulag_name)
	local gulag = xr_gulag.get_gulag_by_name(gulag_name)
	if gulag then
		for k,v in pairs(gulag.Object) do
			if type(v)=="userdata" then
				local o = level.object_by_id(k) --// можно сразу v:kill(v)
				if o then o:kill(o) end
			end
		end
	end
end

для оффлайна сам думаю сообразишь.

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

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

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

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

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

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

Войти

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

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

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