Как сделать?
…
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 должны быть убиты и первый аргумент проигнорирован.
Но мне выдаёт ошибку “Недопустимое название переменной/массива!”
И вот я понять не могу, либо это баг, либо я что-то делаю не правильно.
l0stetrnity,
dynamic 'killvar ''<<$ARGS[i]>>'''
dmvikar:
l0stetrnity,
dynamic 'killvar ''<<$ARGS[i]>>'''
Неа, с динамиком тоже самое - 
А вот такая конструкция - работает без проблем.
a=5
$b[0]='a'
killvar "<<$b[0]>>"
Вообще не понимаю в чём пролема, единственное предположение, это что по какой-то причине, killvar не хочет работать внутри цикла.
l0stetrnity,
Индекс за пределами массива. Нужно i-1.
dmvikar,
Хм, точно, забыл что ARRSIZE возвращает нулевой индекс как 1.
Мой косяк, теперь всё работает.
Хмм… Есть-ли какой-то способ избавиться от назойливых
в классике 5.7?
Т.е. вот например, создаёшь ты <table>, и в ней куча разных <tr>, <td> - если всё писать в одну строку, то никаких
не будет, но это ужасно неудобно, т.к. код получается нечитабельный.
А если переносить <td>/<tr> на новую строку - появляется куча
, которые ну СОВСЕМ не нужны.
Есть идея как с этим бороться?
l0stetrnity,ты про это?
*p'<table align=center width=100% >'
*p'<tr>'
*p'<td><img src="p\title.jpg"></td>'
*p'<td align=center>'
*p'</td>'
*p'</tr>'
*p'</table>'
Сори, понял, *p убирает BRы.
Спасибо.
Можно записать строку в переменную, а затем использовать $REPLACE для замены всех переносов строк на пустую строку.
