Как сделать?
…
я ваще балдею от этого вашего ксп:
5.7 и 5.8, но покопавшись выяснил, что это вроде как про сам плеер, но в различиях говориться именно про инструменты разработки,
вот этого я в справке не помню. Укажи, пожалуйста, конкретно, где прямо говорится, или делаются намёки, что 5.7.0 и 5.8.0 — это про инструменты разработки?
Aleks Versus:
Плюс, такие штуки, как относительные единицы измерения (vh, vw, насчёт vmax и vmin пока не уверен), прекрасно поддерживаются qSpider’ом, так что сварганить общую резиновую вёрстку страницы, а затем отдельные её элементы сделать адаптивными — как никогда просто. Передавать в QSP код остаётся только данные введённые игроком. А на этот случай у qSpider уже есть инструменты.
Для Спайдера переверстывать крайне лень из-за “стандартных” положений окна. Оно меня полностью не устраивает.
А вот сделать в классическом плеере было бы очень кстати. Я уже писал. Я верстаю на большом экране, но когда пересел за ноут, то вся верстка полезла багами. Стройный текст в 1920х1080 совершенно не айс при 1330x768. Убегает длинным вертикальным столбцом. Тут или картинку уменьшать и другие части верстки, или выносить текст вниз. Уменьшать картинки - такое себе, так как тогда текст все едино выбьется за границы. А выносить вниз - надо понимать когда! Вот тут-то и нужна возможность определения размеров окна. Определил 1 раз (изменение окна игроком - это уже проблемы игрока) и все прекрасно.
Помогите кодом, кто разбирается. Как сделать динамический топ-лист? Внизу я написал базу, как я бы начал генерировать список. Но я не умею сортировать массивы по содержимому от наибольшей переменной массива к наименьшей
$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? и Как среди них игрока разместить?
Замутил кое что сам, но из 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
Получаешь максимальное значение из временного массива, делаешь с ним что нужно и удаляешь из временного массива. И так, пока временный массив не закончится.
Я сделал то же, что ты мне посоветовал, у меня так и есть. Проблема в том, что некоторые позиции пустые. Отображаются все 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
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
вот тут покопаюсь, в исключениях строк, буду пробовать, пока не получится. Если не получится скину в личку человеку код или тебе если можно.
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’) буду присваивать наверное измененное значение предыдущего.
Дамир Белялов,
А зачем ты пишешь -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)
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 должны быть убиты и первый аргумент проигнорирован.
Но мне выдаёт ошибку “Недопустимое название переменной/массива!”
И вот я понять не могу, либо это баг, либо я что-то делаю не правильно.
