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

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


Svoboда

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

при ранге ГГ скажем, более 5000, в окне разговора показывать его не мастером, а скажем, легендой?

Позволю себе теоретическое предположение: если значение 5000 - это максимальная цифирь, выше которой движок или будет игнорировать или вытворять глупости, то можно в конфиге, где расписаны диапазоны, указать ...-4999 - мастер, 4999-5000 - легенда. Такой, типа финт ушами, вполне может прокатить...

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

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


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

 

 

1.Насколько вредно для движка использовать(выдавать актору/забирать) например 10-20 инфопорций каждые 5 минут? Движок выдержит?  2. Какие есть аналоги инфопорций , или как можна их имитировать? Заранее спасибо.
Попытаюсь задать тебе вопрос чуток с другой позиции: а может тебе стоит рассказать участникам форума, какова цель выдавать\забирать 10-20 и-п каждые 5 мин. Т.е. когда присутствующие поймут цель этого действа - возможно они смогут предложить тебе более правильную альтернативу? Как ты думаешь?

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


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

 

 

Инфо-порция однако - это сохраняемая переменная. Если нужно значение сохранять, то можно использовать системы хранения, коих уже немало (хотя бы АМК).
Хм, а с каких это пор уже требуется самостоятельно сохранять "выданные"(активные) инфо-порции ? Движок уже этим не занимается ?

 

 

 

И правильно ли использовать в этом случае se_stor ?
Зачем, если "выданную"(активную) и-п движок сохранит сам и однозначно ?

 

Или я отстал от жизни и уже чего-то не понимаю в современной системе обработки и-п ?

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


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

 

 

Мы говорим о аналоге инфопорций - логических переменных , которые нужно сохранять .

Извиняюсь не понял действительно, разговор вроде про и-п был сначала.

А вообще-то, если нужна единичная переменная под хранение булевого(true\false) значения - то можно использовать под это и-п, тем самым не заморачиваясь на самостоятельное сохранение\загрузку ее при сэйв\лоад.

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


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

 

 

при проходе по строке как себя ведет с цифрами

Так-же, как и с остальными строковыми символами - буква и цифра в строке равнозначны.

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


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

 

 

как сделать так, чтобы определённый НПС не использовал фонарик даже ночью?
Может лучше глянуть в сторону enable_attachable_item - правда будет запрет и на батоны, гитары, водку. Но я думаю что навряд-ли непись, которому запрещено пользоваться фонариком, будет сидеть у костра в кампе.

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


Ссылка на сообщение
как убрать закрытие диалогового окна кнопкой "Esc"?

Решил поковыряться  с этим вопросом, и вот чего наковырял.

Доступ к окну диалога(разговора - так точнее ?) получить можно, хотя и коряво:

<info_portion id="ui_talk">

<action>какой-то_скрипт.On_talk</action>

<disable>ui_talk_hide</disable>

</info_portion>

<info_portion id="ui_talk_hide">

<action>какой-то_скрипт.On_talk_hide</action>

<disable>ui_talk</disable>

</info_portion>

 

В этот самый какой-то_скрипт пропишем:

talk_wnd = nil
function On_talk()
talk_wnd = CUIAddTalkControl()
level.start_stop_menu(talk_wnd, true)
end
 
function On_talk_hide()
talk_wnd = nil
end
 
---------------- скриптовый класс для окна разговора --------------------------------
class "CUIAddTalkControl" (CUIScriptWnd)
 
function CUIAddTalkControl:__init() super()
self:InitControls()
end
 
function CUIAddTalkControl:InitControls()
----- Положение и размеры окна -----
self:Init(0,0,1024,768)
end
 
function CUIAddTalkControl:__finalize()
end
 
------------------ обработка нажатий клавы ------------------
function CUIAddTalkControl:OnKeyboard(dik, keyboard_action)
CUIScriptWnd.OnKeyboard(self,dik,keyboard_action)
if keyboard_action == ui_events.WINDOW_KEY_PRESSED then
local bind = dik_to_bind(dik)
----- перехватываем Esc и Действие -----
if dik == DIK_keys.DIK_ESCAPE then
local text = "нажали - ESC"
news_manager.send_tip(db.actor, text, nil, nil, 30000)
return true
elseif bind == key_bindings.kUSE then
local text = "нажали - Действие"
news_manager.send_tip(db.actor, text, nil, nil, 30000)
return true
end
end
return false
end

 

 

Запускаем игру, начинаем разговор с кем-то и переключаемся кнопкой "Торговать" в торговлю и сразу возвращаемся - и сработает On_talk(). Следовательно наше скрипт-окно будет прилеплено к диалоговому и нажатие "Esc" и назначенной в настройках кнопки "Действие" будут перехватываться. Вот только толку с этого вроде как ноль: сам способ через одно место и кроме перехвата ввода с клавы полностью отрубается ввод с мыша. Т.е. закрыть диалог с неписем с клавиатуры уже не получится, но и продолжить его до какой-нить фразы с <action>dialogs.break_dialog</action> чтоб его завершить то-же не получится. Вроде как тупик ?

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

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


Ссылка на сообщение
разбиндить экшены use и quit, а на последней фразе диалога забиндить обратно. 

А можно примерчик собственно как разбиндить\забиндить ?

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

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


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

Ага, разбиндить получается, но вот обратно - чтоб снова назначить указанную в настройках клавишу для "Действия", надо ее перед разбиндиванием получить и сохранить. Попробовал con:get_string("use") - не прокатывает, остальные get_... вообще к вылету приводят...

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


Ссылка на сообщение
могут быть забиндены на другие кнопки?

Однозначно, у меня всегда "use" переназначено так, как мне нравится...

 

@Сталкер-Стрелок

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

 

Вопрос остается открытым.

Изменено пользователем UnLoaded
  • Согласен 1

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


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

 

 

Можно еще проверить, что возвращает get_console():execute("bind quit")

В "Справочнике ..." - void execute(string <команда консоли>); // выполнить команду консоли

Значит ничего не возвращает, плюс назначит на "quit" пустое значение(уже проверял).

 

 

 

по идее можно грузить через ini_file

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

 

Так, что для AndrewMor и J.A.A: похоже на исходном движке ТЧ бессмысленная затея, так что смотреть в сторону правленного движка.

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


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

 

 

Почему, unbind можно еще делать в коллбеке на юзе нпц

Гм, неплохо бы, вот только есть ли такой ? Глянул сейчас в константы C++ class callback в lua_help, не вижу какой из них ? Или я не туда\не о том ?

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


Ссылка на сообщение
спавню объект, а вот как на все это дела повещать метку не знаю

Ф-ции пространства имен level:

level.map_add_object_spot_ser(...)

level.map_add_object_spot(...)

Подробности - как всегда в "Справочнике по ф-циям и классам"...

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

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


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

 

 

функцию для проверки расстояния от камеры до точки куда целится гг.

Дальномер лазерный ? ;)

Поищи, где-то это обсуждалось, и вроде даже отдельной темой.

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


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

 

 

при заходе на локацию Янтарь, происходит спавн живности в лабе х-16 один раз. Помогите зациклить скрипт.

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

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


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

 

 

таким образом при каждом заходе будет спавн.

А еще при каждой загрузке сэйва...

 

 

 

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

Там реально несколько строк в коде нужно прописать - прошу подсказать опять же конкретно - где и что прописать/добавить.

Это смотря кто как понимает "циклический" спавн: не буду пальцем тыкать, но есть приличное кол-во (говно)модов в которых происходит спавн по запрошенному Вами выше варианту. Т.е. зашел на локу - заспавнилась какая-то тварь, и если просто зайти\выйти 5 раз, будем иметь 5 этих тварей. Вы серьезно считаете это правильным вариантом спавна ?

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


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

 

 

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

Тогда, видимо, Вам стоит переместиться из темы "Скриптование" в тему "Ищу файлы\моды\аддоны" ? Правильно изложить свою просьбу, и вполне реально получить искомое...

 

P.S. Без обид, но если Вы задали вопрос в теме "Скриптование", то предполагается что Вы решили хоть как-то его освоить.

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


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

@Shkiper2012

Ф-ция set_condition() - это метод класса game_object, т.е. клиентских объектов в игре. А ты пытаешься применять ее к серверным объектам, alife():create и alife():object возвращают серверные объекты. Получи клиентский объект, допустим так:

level.object_by_id(se_obj.id)

и уже ему устанавливай состояние.

  • Спасибо 1

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


Ссылка на сообщение
необходимо получить доступ к полю my_field биндера.
local obj_bind = obj:binded_object() -- здесь obj - клиентский объект
if obj_bind then
.... obj_bind.my_field -- получаем нужные данные --
.... obj_bind:get_params() -- вариант с ф-цией --
end

Точно не помню, но если напрямую не будет доступа к my_field, то добавь в нужном биндере ф-цию получения параметров:

function my_binder:get_params()
local ret_value = self.my_field
return ret_value
end
Изменено пользователем UnLoaded
  • Спасибо 1

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


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

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