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

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

@Kondr48, немного не ясно что ты хочешь от кода. Ты собираешься красить кнопку, но красишь текст, текстуру красят другим методом (метки например), а SetHighlightColor красит, очевидно, текст, в случае с кнопкой - на кнопке.

 

По второму вопросу я вообще не понял о чем ты спрашиваешь.

 

Статик можно повернуть методом SetHeading.

 

@SkyLoader, метод называется SetColor (также SetColorAll), а не SetHighlightColor. Например:

void CUITradeWnd::ColorizeItem(CUICellItem* itm, bool 
{
if(!
itm->SetColorAll(color_argb(255,255,100,100));
}

 

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

Карлан, по сути я про то и спрашивал, КАК мне покрасить текстуру, лишь уточнил, поможет ли мне этот метод? А так в lua_help есть аж три метода:

SetHighlightColor(number);
и
SetTextColor(number, number, number, number);
и
SetColor(number);

А что касается второго вопроса, как удалить кнопку с окна, по имени строки? То есть есть строка "btn_yes" кнопка была зарегана как self.btn_yes = CUIButton()
P.S. еще бы понять, чем эти три метода друг от друга отличаются.

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

@Kondr48, это же очевидно:

SetHighlightColor и SetTextColor идентичны, только аргументы принимают по разному, первый жрет GetARGB (в данном контексте совершенно не ясно зачем), а второй напрямую.

SetColor как раз красит сам статик. SetColorAll предполагалось, что должен красить и детей тоже, но не красит, так что методы тоже идентичны  :).

Оговорюсь, что я веду речь о CUIStatic.

 

Второй вопрос: кнопку достаточно скрыть, примерно так: self.btn_yes:Hide(), если хочется непременно удалить, то ее надо отцепить от парента (DetachChild), только в этом случае советую еще поглядывать за сборщиком мусора, так как может все достаточно печально закончиться, особенно если имеешь дело с каким-нибудь динамическим статик-боксом.

 

P.S. Предупрежу, что мои советы не всегда могут быть применимы для стандартных исходников, так как некоторые части у меня достаточно сильно переписаны.

 

 

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

@Kondr48, если ты хочешь изменить цвет кнопки, чтобы видно было, что она нерабочая, то достаточно сделать копку на классе CUI3tButton (если через xml, то это xml:Init3tButton) и покрасить нужным цветом текстуру *_d кнопки. А потом просто: button:Enable(false).

Окно подсказки к кнопке (hint) скриптово на чистом движке сделать не получится.

Изменено пользователем naxac
  • Спасибо 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

 

 

метод называется SetColor (также SetColorAll), а не SetHighlightColor.

Говорилось о том, что видимых изменений не было. Я лишь указал на некорректное использование метода SetHighlightColor.

 

 

 

Существуют ли методы, чтобы повернуть статик на определенный угол?

Есть соседняя тема X-Ray extensions. В этом проекте был добавлен такой метод.

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

Есть таблица с кучей поршней. Как сделать выдачу поршня или что ещё, если из этой таблицы имеем более, к примеру, 20-ти поршней?

Ранее был известен под ником BoBaH_671.

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

 

BoBaH_671, не совсем понятен смысл. Вот так, например, можно выдать из таблицы рандомный поршень, которого у ГГ еще нету.


local enciclopedy_list = {

"encyclopedy_zone_artifact_af-medusa",

"encyclopedy_zone_artifact_af-cristall-flower",

...

"encyclopedy_tutorial_diary"

}

 

local flag = false

 

while flag == false do

statja_for_pda = enciclopedy_list[math.random(table.getn(enciclopedy_list))]

if not has_alife_info(statja_for_pda) then

db.actor:give_info_portion(statja_for_pda)

flag = true

end

end

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

@Kondr48, да что ж меня никто с первого раза не понимает! :)

Я ж сказал: имеем таблицу, в ней - много поршней. Как сделать проверку, что из этой таблицы мы имеем 20 поршней. ЛЮБЫХ поршней.

Ранее был известен под ником BoBaH_671.

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


local enciclopedy_list = {

"encyclopedy_zone_artifact_af-medusa",

"encyclopedy_zone_artifact_af-cristall-flower",

...

"encyclopedy_tutorial_diary"

 

local kolvo = 0


for i = 1, #enciclopedy_list, 1 do  

 if has_alife_info(enciclopedy_list) then

kolvo = kolvo + 1

 end

if kolvo >= 20 then

-- мы имеем 20 инфопоршней из списка, на радостях дадим поршень

db.actor:give_info_portion("Радостный поршень")

break

end

end

 

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

Такая проблема - нужна заселить специальными дин.аномалиями специальную локацию для мода.

Базируюсь на OGSM, начал ковырять алгоритм спавна, возник вопрос - как получают координаты x,y,z для спавна? В скриптах о них не слова!

Рандомно генерировать числа не прокатит, будет каша со спавном, да и бред это малость... Но тогда, как?

 

Открыл скрипт из simbion мода, вгляделся... Мы получаем все аномалии на уровне, и заменяем их на... Свои!?! Нет, серьезно, я заметил открытие таблицы db.anomalies и передачу координат всех аномалий в ф-ю спавна. Но блин, тут рандомность тогда только в секциях аномалий...

 

Возможно выше я и бред сказанул, но понял код - как смог.

 

Обьясните недалекому, как же идет рандомная генерация именно координат пространства, с game v. и level.v я разобрался...

 

P.S Посмотрел скрипты от dsh - там идет получение позиций НПЦ... Мда... Жду дядек, которые развеят туман...

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

Не соответствует правилам.

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

 

CRAZY_STALKER666, как вариант генерить рандомные числа в пределах локации. То есть задать некое ограничение по x, y, z. А вообще насколько я знаю в судьбе зоны можно посмотреть.

 

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

гы, позиции нпс... Позиции нпс там используются, что бы не генерировать на их месте аномалии.

 

@CRAZY_STALKER666, выбираешь случайный левел вертекс. У него, соотв. методом, можно получить позицию, т.е. те самые координаты. Потом методом подбора находишь ближайший гейм вертекс. В процессе всего этого производишь проверки на неподходящие позиции/вертексы и игнорируешь их. И так до тех пор, пока не получится то, что можно использовать.

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

@dsh, ого,и не знал что из level v можно получить координаты!

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

 

Для себя решил делать так(не лучший вариант, но как умею) - получаю координаты всех аномалий. К их х,у,зэд прибавляю какие нибудь числа, и спавню то что нужно. А заранее можно, расставить аномалии-точи вокруг которых будет спавн мои спец.аномалий. Как по мне - вроде не костыль получился :D

Не соответствует правилам.

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

 

 

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

Фу, это же в точности так же как в "Судьбе Зоны". А в ней, со слов вопрошающего

 

 

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

Не, в данном случае не годится. Надо все горбато, топорно и костыльно сделать.

  • Согласен 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.

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

Всем доброго утра, у меня вопрос: каким образом в ЗП можно назначить текст кнопке с помощью скрипта? Кнопка на классе CUIButton, но для этого класса нет метода SetText.

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

Уважаемые знающие, столкнулся с такой проблемой при использовании m_netpk.

При чтении нетпакета, например, для cse_alife_inventory_item поле num_items иногда становиться равным 255, что влечет за собой чтение далее битых данных. при этом r_eof()==false, т.е. данные в пакете еще есть, но m_netpk пытается вычитать их больше, чем они там есть. сталкивался ли кто с таким? Благодарю за информацию.

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

@Winsor, а почему ты думаешь, что данные там битые? В зависимости от значения num_items наполнение нет-пакета может меняться.

Подробнее, например, здесь.

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

@Winsor, а почему ты думаешь, что данные там битые? В зависимости от значения num_items наполнение нет-пакета может меняться.

Подробнее, например, здесь.

Ну... я в курсе что наполнение может изменяться.

Пример:

cse_alife_inventory_item - 99% процентов этих итемов , которые лежат в инвентори у ГГ - имеют num_items=0. т.е. полей ph_position, ph_rotation и иже с ними не имеют. но у 1-го процента итемов из инвентори случайным образом num_items==255, , и при попытке прочитать

log("before "..prop.name.." "..prop.type)
ret.upd[prop.name] = this["_r_"..prop.type](pk, prop.ver)
log("after "..prop.name.." "..prop.type.." "..ret.upd[prop.name]) 

получаем такой лог:

m_netpk:before num_items h8

m_netpk:after num_items h8 0

m_netpk:before num_items h8

m_netpk:after num_items h8 225

m_netpk:before ph_position f32v3

 

 

в инвентари два итема одного и того же класса. отличаются визуалом и описанием. первые две строки - все хорошо. далее num_items==255 и при попытке прочитать вектор ph_position - чтение за границы нетпакета, само собой данные в этом векторе уже считать достоверными нельзя. Вот я и хочу понять - почему num_items == 255 у итема у которого он должен быть 0.

p.s. ну и у таких итемов после такого чтения r_elapsed < 0 - это ли не признак чтения за границу (elapsed=packet_size-read_position) ?

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

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

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

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

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

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

Войти

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

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

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