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

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

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


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

 
 

Stalkerin. Там есть много хороших статей касательно данной темы.
Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения.

 

Справочное руководство по языку Lua 5.1
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ru
Справочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены.

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

 

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

 

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

 

Вопросы которые будут удалятся, следовательно их задавать не нужно:
-- Где находится та или иная функция?
Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;
-- Как сделать что-то/то-то?
С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;
-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.
-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.
Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов?
В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос.

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


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

Вот только тогда игрок сможет выйти за пределы локации и упасть например)

Ставите невидимую стену или пишите скрипт который будет вызывать нужные эффекты когда ГГ входит в заданную область координат

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

Нету

Нету в чистом ТЧ в Экстейсшоне есть, но у меня не робит...

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

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

Согласен с TIGER_VLAD, для себя такую проблему решал давным-давно - похоже, тем же способом, что и в ЧН на болотах (точно не помню, в ЧН не играл с момента выхода игры, наверное :) ). 2 варианта: первый попроще, если вокруг левелчейнджера есть много свободного места, "накрываем" его рестриктором, с шейпом, бОльшим, чем у левелчейнджера. В его логике выставляем условия, при которых рестриктор будет "возвращать" игрока в заданную (заданные) точки функцией set_actor_position+set_actor_direction, не давая ему "добраться" до левелчейнджера. И, может быть, даже с соответствующим сообщением, типа "дорога закрыта" :) . Второй вариант, если пространство у перехода ограничено, и рестриктором не получается надёжно перекрыть левелчейнждер - логику рестриктора, перемещающую игрока оставляем, как и в первом случае, а вот сам левелчейнджер придётся спонить/удалять уже либо из логики рестриктора (что очень удобно, в общем-то), либо где-то в другом месте, где удобнее разработчику.

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

Можно ли на ТЧ получить имя шрифта или размер шрифта в GUI статике?

GUIWindow:GetFont()

Возвращает непонятный объект\класс

Изменено пользователем Graff46
Ссылка на комментарий
6 минут назад, Graff46 сказал:

Возвращает непонятный объект\класс

С объектом\классом все понятно - CGameFont. Вот только толку от этого мало - в скрипты из этого класса ничего не экспортировано, кроме флагов выравнивания текста.

Цитата

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

Не выйдет у Вас ни чего, т.к. для этого надо много чего иметь экспортированного в скрипты - а нету ! Ну не нужно это было ПЫСам... 

Самый простой вариант - правка движка. Я вот у себя экспортнул AdjustHeightToText() - проверил, все прекрасно работает.

Ссылка на комментарий
В 19.08.2017 в 23:23, Lebedev30 сказал:
В 19.08.2017 в 23:19, nego сказал:

Здравствуйте ВАМ. Как можно в ТЧ...04 сделать арты, увеличивающие переносимый вес? 

Меня этот вопрос интересовал и давно, но для ТЧ даже таких модов не встречалось или инструкций. Лучше на ЧН или ЗП переходи.

Сразу видно, в OLR не играли.:crazy2:

Ссылка на комментарий
Цитата
Сразу видно, в OLR не играли

Я не играю. Я делаю мелкие модификации для мальчишек. Вот они играют.

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

Одна голова хорошо, а две лучше. А вот три, это уже змей Горыныч.

Ссылка на комментарий
В 20.08.2017 в 23:38, UnLoaded сказал:

Не выйдет у Вас ни чего,

Вот реализация ввода строки с переносами в кастом статик и его растягивание под текст 

function start(t, fntName, kegl) -- t - вводимый текст: fntName* - шрифт; kegl* - размер шрифта
    var = doc_viewer.DocUI()
    level.start_stop_menu(var, true) 
	
	str_ln_px = string.len(t)*(0.35*kegl) 
	cnt_str = math.ceil(str_ln_px/list:GetWidth())
	for str in string.gmatch(t, "\\n") do
		cnt_str = cnt_str+1
	end
	offst_ht = math.ceil(cnt_str*30) 
	list:SetHeight(offst_ht)
	--list:SetFont(GetFontGraffiti22())
	list:SetText(t)
end 

list это объект статика

Изменено пользователем Graff46
Ошибки исправлял
Ссылка на комментарий
2 часа назад, Graff46 сказал:

Вот реализация ввода строки...

И где это будет работать ? Т.е. под какую версию исходного движка ?

2 часа назад, Graff46 сказал:

list это объект статика

doc_viewer.DocUI() - а это что ? "kegl" каким образом задается\вычисляется ? GetFontGraffiti22() - это из какой версии движка ?
Ссылка на комментарий
9 часов назад, UnLoaded сказал:

И где это будет работать ?

ТЧ оригинал.

doc_viewer.script

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

local var, list, str_ln 
local str_ln_px, offst_ht, cnt_str = 0, 0, 1

--***************************************************************
function start(t, fntName, kegl)
    var = doc_viewer.DocUI()
    level.start_stop_menu(var, true) 
	
	str_ln_px = string.len(t)*(0.35*kegl) 
	cnt_str = math.ceil(str_ln_px/list:GetWidth())
	for str in string.gmatch(t, "\\n") do
		cnt_str = cnt_str+1
	end
	offst_ht = math.ceil(cnt_str*30) 
	list:SetHeight(offst_ht)
	--list:SetFont(GetFontGraffiti22())
	list:SetText(t)
end 
--***************************************************************

class "DocUI" (CUIScriptWnd)

function DocUI:__init() super()
	self:InitControls()
	self:InitCallBacks()
end

function DocUI:__finalize()
end

function DocUI:InitControls()
	local xml = CScriptXmlInit()
	self:Init(0,0,1024,768)
	xml:ParseFile("DocUI.xml")
	self.frame1 = xml:InitFrame("frame1", self)
	self.st = xml:InitStatic("frame1:Static1", self.frame1)
	self.descr_scroll = xml:InitScrollView("frame1:Static1:descr_scroll", self.st)
	list = xml:InitStatic("frame1:Static1:Static2", self.descr_scroll)
	self:Register(xml:Init3tButton("frame1:button1", self.frame1), "button1")
end

function DocUI:InitCallBacks()
	self:AddCallback("button1", ui_events.BUTTON_CLICKED, self.button1_button_clicked, self)
end

function DocUI:button1_button_clicked()
	self:Hide()
end

function DocUI:Hide()
	self:GetHolder():start_stop_menu(self, true)
end

 

Кегль задаём сами - это как правило число в конце названия шрифта.

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

@Graff46 Беру свои слова обратно.

Хотя так и не получил ответа: "kegl" - как вычисляется\откуда берется, + смущают как всегда "волшебные" числа

str_ln_px = string.len(t)*(0.35*kegl) и offst_ht = math.ceil(cnt_str*30)...

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

Хотя так и не получил ответа:

Числа подбирал и пользовался конвертерами из пунктов в пиксели + некоторые свои расчёты...

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

_________________

Хотел бы получить разъяснения как писать шрифты в метод :SetFont(СFont*).

Изменено пользователем Graff46
Ссылка на комментарий
44 минуты назад, Graff46 сказал:

Хотел бы получить разъяснения как писать шрифты в метод :SetFont(СFont*).

local font = GetFontGraffiti22Russian()
какой-то-статик:SetFont(font)

Список шрифтов, доступных в скриптах(нашел поиском в движке, то что экспортировано(в 1.0007rc1)), в виде ф-ций их получения:

"GetFontSmall"
"GetFontMedium"
"GetFontDI"
"GetFontGraffiti19Russian"
"GetFontGraffiti22Russian"
"GetFontLetterica16Russian"
"GetFontLetterica18Russian"
"GetFontGraffiti32Russian"
"GetFontGraffiti50Russian"
"GetFontLetterica25"

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

В дополнение...

Что бы в ГУИ элементах работали переносы строк стоит провести такое преобразование:

function inline_str (str)
	return string.gsub(str, "[\r\n]",'\\n')
end

 

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

Подскажите что за число возвращает метод?

какоетоЧисло, ключ, секция = ini_file:r_line(string)

 

Изменено пользователем Graff46
Ссылка на комментарий
6 часов назад, UnLoaded сказал:

писок шрифтов, доступных в скриптах(нашел поиском в движке, то что экспортировано(в 1.0007rc1)), в виде ф-ций их получения:

"GetFontSmall"

"GetFontMedium"
"GetFontDI"
"GetFontGraffiti19Russian"
"GetFontGraffiti22Russian"
"GetFontLetterica16Russian"
"GetFontLetterica18Russian"
"GetFontGraffiti32Russian"
"GetFontGraffiti50Russian"
"GetFontLetterica25"

 

Мне, в своё время, удалось реально задействовать только эти:

 

GetFontLetterica16Russian())
GetFontLetterica18Russian())
GetFontGraffiti19Russian())
GetFontGraffiti22Russian())
GetFontArialN21Russian())
GetFontHeaderRussian())
GetFontBigDigit())

 

Вообще, неплохо-бы если-б ещё шрифтов добавили...

всё легко

Ссылка на комментарий
Только что, 7.9 сказал:

если-б ещё шрифтов добавили...

Так вроде шрифты можно конфигурировать и наследовать в файле fonts.ltx.

И я находил сборку шрифтов для больших экранов на ТЧ и они работали.

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

Я больше про сам набор символов имел в виду, про сами текстуры шрифтов.

Помню "смайлы" хотел что-бы в текст вставить можно было, чего-то ещё то-же хотел...

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

всё легко

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

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

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

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

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

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

Войти

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

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

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