RU 📌 Pinned

Как сделать?

Dark[Ol(U23)leneri] #34 18.04.2010 22:57 6408 comments 2424027 views

Aleks Versus Moderator 17.02.2024 10:43 (2 years ago)

я ваще балдею от этого вашего ксп:

5.7 и 5.8, но покопавшись выяснил, что это вроде как про сам плеер, но в различиях говориться именно про инструменты разработки,

вот этого я в справке не помню. Укажи, пожалуйста, конкретно, где прямо говорится, или делаются намёки, что 5.7.0 и 5.8.0 — это про инструменты разработки?

Вполне себе #2722 19.02.2024 13:35 (2 years ago)

Aleks Versus:

Плюс, такие штуки, как относительные единицы измерения (vh, vw, насчёт vmax и vmin пока не уверен), прекрасно поддерживаются qSpider’ом, так что сварганить общую резиновую вёрстку страницы, а затем отдельные её элементы сделать адаптивными — как никогда просто. Передавать в QSP код остаётся только данные введённые игроком. А на этот случай у qSpider уже есть инструменты.

Для Спайдера переверстывать крайне лень из-за “стандартных” положений окна. Оно меня полностью не устраивает.
А вот сделать в классическом плеере было бы очень кстати. Я уже писал. Я верстаю на большом экране, но когда пересел за ноут, то вся верстка полезла багами. Стройный текст в 1920х1080 совершенно не айс при 1330x768. Убегает длинным вертикальным столбцом. Тут или картинку уменьшать и другие части верстки, или выносить текст вниз. Уменьшать картинки - такое себе, так как тогда текст все едино выбьется за границы. А выносить вниз - надо понимать когда! Вот тут-то и нужна возможность определения размеров окна. Определил 1 раз (изменение окна игроком - это уже проблемы игрока) и все прекрасно.

Дамир Белялов #654 07.05.2024 18:24 (1 year ago)

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

$scr_top_gen={
:newlist
$toplist=''
staff=1
:new_staff
coderand=rand(1000,9999)
$toplist_name_staff[staff]='A-<<coderand>>'
toplist_totalscrap_staff[staff]=rand(100,1000)
if staff<50: staff+=1 & jump'new_staff'

!тут уже нужно будет сортировать получившиеся списки "<<$toplist_name_staff[staff]>>    <<toplist_totalscrap_staff[staff]>>" по убыванию, сверху вниз. Плюс, чтобы строчка с данными игрока перемещалась внутри этого списка, когда он до него дорастёт. Данные игрока $name и all_time_scrap. А потом это вся мощная лабуда просто записывается в переменную $toplist
}

Попрошу заметить, что приложил скриншот из вики. С помощью совета от туда я смогу вывести на экран топ 1го сотрудника рейтинга, но а как же остальные 49? и Как среди них игрока разместить?

Edited at 07.05.2024 18:42 (1 year ago)
Дамир Белялов #654 07.05.2024 19:18 (1 year ago)

Замутил кое что сам, но из 50 человек отображаются 3-5, и не отображается мой игрок. Что я не так сделал?

$scr_top_gen={
:newlist
$toplist=''
staff=1
max_staff=50
:new_staff
coderand=rand(1000,9999)
$toplist_name_staff[staff]='A-<<coderand>>'
toplist_totalscrap_staff[staff]=rand(100,1000)
$tl[staff]='<br><<$toplist_name_staff[staff]>>     <<toplist_totalscrap_staff[staff]>>'
if staff<max_staff: staff+=1 & jump'new_staff'
if staff=max_staff: staff+=1 & toplist_totalscrap_staff[staff]=career_loot_cost & $toplist_name_staff[staff]=$name & $tl[staff]='<br><font color=rgb(0,200,200)><<$toplist_name_staff[staff]>>     <<toplist_totalscrap_staff[staff]>></font>'
st_sort=0
:staff_sort
sort_staff=arrpos(min('toplist_totalscrap_staff'),'toplist_totalscrap_staff', max('toplist_totalscrap_staff')-st_sort)
$toplist+=$tl[sort_staff]
if st_sort<max_staff: st_sort+=1 & jump'staff_sort'
!тут уже нужно будет сортировать получившиеся списки "<<$toplist_name_staff[staff]>>    <<toplist_totalscrap_staff[staff]>>" по убыванию, сверху вниз. Плюс, чтобы строчка с данными игрока перемещалась внутри этого списка, когда он до него дорастёт.
}

$scr_top={
*p'<br> <<$toplist>>'
}

Дамир Белялов,
1. Генерируешь массив со значениями.
2. Делаешь копию массива и добавляешь в него значение игрока.
3. Либо сортируешь массив путем создания нового массива либо просто выводишь список.

c=max('sorttemp')
b=arrpos('sorttemp',c)
killvar'sorttemp',b

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

Дамир Белялов #654 17.05.2024 17:50 (1 year ago)

Я сделал то же, что ты мне посоветовал, у меня так и есть. Проблема в том, что некоторые позиции пустые. Отображаются все 50 но они не записаны.

Я добавил нумерацию списка и увидел что отображаются все позиции. И кстати каждая с разницей 1 очко рейтинга. Если у меня рейтинг будет в разы выше остальных то останется только строка с рейтингом игрока и пустота.

$scr_top_gen={
:newlist
$toplist='' & !топлист
staff=1
max_staff=60 & !максимальное количество участников рейтинга
:new_staff
coderand=rand(1000,9999)
$toplist_name_staff[staff]='A-<<coderand>>'
toplist_totalscrap_staff[staff]=rand(900,1010)
$tl[staff]='<<$toplist_name_staff[staff]>>     <<toplist_totalscrap_staff[staff]>>'
if staff<max_staff: staff+=1 & jump'new_staff'
if staff=max_staff: staff+=1 & toplist_totalscrap_staff[staff]=career_loot_cost & $toplist_name_staff[staff]=$name & $tl[staff]='<font color=rgb(0,200,200)><<$toplist_name_staff[staff]>>     <<toplist_totalscrap_staff[staff]>></font>' & !наш игрок
st_sort=0
position=1
:staff_sort
sort_staff=arrpos(min('toplist_totalscrap_staff'),'toplist_totalscrap_staff', max('toplist_totalscrap_staff')-st_sort)
$toplist+='<br><<position>>. '+$tl[sort_staff]
if st_sort<max_staff-31: st_sort+=1 & position+=1 & jump'staff_sort'
}

Дамир Белялов,
Может с выводом что-то не то или с исходным массивом. Скинь прогу в личку, посмотрю на досуге. Или у ребят в дискорде попроси помощи.

Дамир Белялов,
А ты посмотри, что у тебя выводит arrpos. Там местами -1, а таких элементов в массиве у тебя очевидно нет (если так и надо, тогда просто сделай проверку на -1 и не увеличивай position да не добавляй в список на вывод). Следовательно, алгоритм сортировки не подходит.

Spoiler

Это для 5.8.*

$formated_list = ''

local temp_arr
local size, position = 1
local max_value, staff_pos
local $not_included, $values

max_staff = 60
loop local i=0 while i<max_staff step i+=1:
	name_seed = rand(1000,9999)
	$top_list_name[i] = ' A-<<name_seed>>'
	top_list_total_scrap[i] = rand(900,1010)
	$top_list[i] = '<<$top_list_name[i]>>     <<top_list_total_scrap[i]>>'
end

!@ - Игрок
$top_list_name[] = "Dominus"
top_list_total_scrap[] = 500
$top_list[] = '<font color=rgb(0,200,200)><<$top_list_name[size]>>     <<top_list_total_scrap[size]>></font>'

!@ - Значения
size = arrsize('top_list_total_scrap')
loop local i=0 while i<size step i+=1:
	temp_arr[i] = top_list_total_scrap[i]
end

loop local i=0 while i<size step i+=1:
	max_value = max('temp_arr')
	staff_pos = arrpos('top_list_total_scrap', max_value)
	if arrpos('$values', $top_list[staff_pos]) = -1:
		$formated_list += '<br><<position>>. ' + $top_list[staff_pos]
		position += 1
	else
		$not_included += '<br><<i>>. ' + $top_list[staff_pos]
	end
	$values[] = $top_list[staff_pos]
	killvar 'temp_arr', arrpos('temp_arr', max_value)
end

*PL $formated_list
*PL $not_included
Дамир Белялов #654 19.05.2024 13:52 (1 year ago)

Dominus:

loop local i=0 while i<size step i+=1:
max_value = max(’temp_arr’)
staff_pos = arrpos(’top_list_total_scrap’, max_value)
if arrpos(’$values’, $top_list[staff_pos]) = -1:
$formated_list += ’
<<position>>. ’ + $top_list[staff_pos]
position += 1
else
$not_included += ’
<<i>>. ’ + $top_list[staff_pos]
end
$values[] = $top_list[staff_pos]
killvar ‘temp_arr’, arrpos(’temp_arr’, max_value)
end

*PL $formated_list
*PL $not_included

вот тут покопаюсь, в исключениях строк, буду пробовать, пока не получится. Если не получится скину в личку человеку код или тебе если можно.

Дамир Белялов #654 19.05.2024 14:41 (1 year ago)

Dominus,
Я кое что прописал, буквально одну строчку и пусты е места исчезли, правда и строки их рейтинга тоже. Я попытался исправить (там к низу где ! знак стоит) и создал раздел отладки, но он не помог. У меня версия 5.7.0 и я хочу чтобы на телефоне вся эта тема работала.

$scr_top_gen={
:newlist
$toplist='' & !сюда запишется сформированный рейтинг
staff=1
max_staff=60 & !всего участников в рейтинге
st_sort=0
position=1  & !начало отсчета позиции (для нумерации списка)
:new_staff
coderand=rand(1000,9999)
$toplist_name_staff[staff]='A-<<coderand>>'  & !генерация имени одного из участников рейтинга
toplist_totalscrap_staff[staff]=rand(950,1010)
$tl[staff]='<<$toplist_name_staff[staff]>>     <<toplist_totalscrap_staff[staff]>>'  & !неотсортированная готовая строка
if staff<max_staff: staff+=1 & jump'new_staff'
if staff=max_staff: staff+=1 & toplist_totalscrap_staff[staff]=career_loot_cost & $toplist_name_staff[staff]=$name & $tl[staff]='<font color=rgb(0,200,200)><<$toplist_name_staff[staff]>>     <<toplist_totalscrap_staff[staff]>></font>'
:staff_sort
sort_staff=arrpos('toplist_totalscrap_staff', max('toplist_totalscrap_staff')-st_sort)
if arrpos('toplist_totalscrap_staff', max('toplist_totalscrap_staff')-st_sort)>-1: $toplist+='<br><<position>>. '+$tl[sort_staff]
!if arrpos('toplist_totalscrap_staff', max('toplist_totalscrap_staff')-st_sort)=-1: error=1 & jump'repair_staff'


if st_sort<max_staff-11: st_sort+=1 & position+=1 & jump'staff_sort'
:repair_staff
if error=1: coderand=rand(1000,9999) & !ремонтируем пустую строку, просто присваивая ей имя (но ничего не произошло!)
if error=1: $toplist_name_staff[sort_staff]='A-<<coderand>>'
if error=1: $tl[sort_staff]='<<$toplist_name_staff[sort_staff]>>     <<toplist_totalscrap_staff[sort_staff]>>'
if error=1: $toplist+='<br><<position>>. '+$tl[sort_staff]
if error=1: error=0 & st_sort+=1 & position+=1 & jump'staff_sort'
}

попробую предыдущий удачный выбор arrpos (if arrpos(’toplist_totalscrap_staff’, max(’toplist_totalscrap_staff’)-st_sort)>-1: $toplist+=‘
<<position>>. ‘+$tl[sort_staff]) дублировать в переменную, а при ошибке (if arrpos(’toplist_totalscrap_staff’, max(’toplist_totalscrap_staff’)-st_sort)=-1: error=1 & jump’repair_staff’) буду присваивать наверное измененное значение предыдущего.

Дамир Белялов #654 19.05.2024 14:47 (1 year ago)

Dominus,

ааа все вроде починил, просто убрал лишнюю позицию.
Ох, ну попробую теперь поработаю над “корректировкой” списка, с его динамическим изменением, ведь чемпионы в рейтинге не стоят на месте :)

Дамир Белялов,
А зачем ты пишешь -st_sort? Разве тебе не нужно перебрать всех в списке и на его основе вывести их места?
А у тебя получается от наибольшего значения мы отнимаем вплоть до 30.
То есть условно ищем в рейтинге всех от 1030 до 1000.

А так, алгоритм на самом деле прост. Ты дублируешь значения из toplist_totalscrap_staff в другой массив. В arrpos ищешь позицию в toplist_totalscrap_staff, а значение берёшь из дубликата. Найденную позицию удаляешь из дубликата. Почему? Чтобы функция max могла найти новое значение.
$values в данном случае записывает найденные результат. Нужно, чтобы не было дублирования в списке, ибо у тебя рандом иногда это делает.

max_value = max('temp_arr')
staff_pos = arrpos('top_list_total_scrap', max_value)
if arrpos('$values', $top_list[staff_pos]) = -1:
   $formated_list += '<br><<position>>. ' + $top_list[staff_pos]
   position += 1
else
   $not_included += '<br><<i>>. ' + $top_list[staff_pos]
end
$values[] = $top_list[staff_pos]
killvar 'temp_arr', arrpos('temp_arr', max_value)
Дамир Белялов #654 19.05.2024 18:34 (1 year ago)

Dominus,
Не хочешь быть со мной соавтором квеста? Мне эту многоэтажную тему тяжело писать. С массивами я работаю посредственно, ты сам видишь. Мне интересней слёту писать механики и наполнять игровой мир. А так, мне очень хочется забить на этот топ-лист, по тому что голова не шарит)) Я смотрю, на то, что ты написал и вроде понимаю, но капец, так муторно всё ломать и заново делать.

Дамир Белялов,
Да без проблем, где удобней будет продолжить общение?)

Не знаю, правильная-ли это тема или нет, но столкнулся с одной проблемой и не понятно, либо я дурак, либо хз.

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

В общем, сделал такую конструкцию -

$ARGS[0] = $UCASE($ARGS[0])

if $ARGS[0] = 'KILLVARS':

i = ARRSIZE('ARGS')

:killvars_loop
killvar '<<$ARGS[i]>>'

if i>1:i-=1 & jump'killvars_loop'

end

Которая вызывается так - gs “util_func”,”killvars”,”a”,”b”,”c”
Т.е. в теории, переменные a, b и c должны быть убиты и первый аргумент проигнорирован.

Но мне выдаёт ошибку “Недопустимое название переменной/массива!”
И вот я понять не могу, либо это баг, либо я что-то делаю не правильно.

Log in or Register to post comments.