Помощь - Поиск - Пользователи - Календарь
Полная версия: Массив, пропадает дробная часть отрицательного числа (после запятой)
UoKit.com Форумы > Кликер > UO Pilot
фонарик
Код
log clear
set %arr[1 1] -17,4429626464844
set %arr[1 2] 128,38623046875
set %arr[1 3] "-16,9535217285156"
set %arr[1 4] 117,128959655762

for #x 1 size(%arr[1]) 1
log %arr[1 #x] //-17 128,38623046875 -16 117,128959655762
end_for
stop_script

Первое и третье значение массива теряют числа после запятой sad.gif При любых математических операциях 1 и 3 значения обрезаются до целого. Подскажите, в чем ошибка?
neves
Код
log clear
set %arr[1 1] -17.4429626464844
set %arr[1 2] 128.38623046875
set %arr[1 3] "-16.9535217285156"
set %arr[1 4] 117.128959655762

for #x 1 size(%arr[1]) 1
log %arr[1 #x]
end_for
stop_script
фонарик
Необходимо работать с дробными числами, записанными через запятую. Они у меня так и в памяти хранятся процесса. Readmem такие циферки и считывает huh.gif
cirus
Цитата
Необходимо работать с дробными числами

Использовать синтаксис луа. Старый синтаксис поддерживает только целочисленные операции.
фонарик
Так положительные числа пилот понимает правильно mellow.gif У меня скрипт написан уже весом на мегабайт, на пилотном языке. Столько всего задумывалось и реализовалось, как дошло дело до обработки полученных данных нате вам, засада sad.gif На луа у меня просто тяму не хватит все сделать аналогично, даже не беря во внимание необходимое время.
DarkMaster
https://forum.uokit.com/index.php?showtopic=29139
а вообще, если есть желание - помогу разобраться с луа в индивидуальном порядке на добровольных началах.
фонарик
Цитата(DarkMaster @ 5.12.2020, 15:23) *
а вообще, если есть желание - помогу разобраться с луа в индивидуальном порядке на добровольных началах.
Вы просто не понимаете - пилотный скриптинг и луа - это 2 разные религии в понимании простых прихожан. Мне становится больно лишь от мысли, что будущие задумки должны быть лишены меток goto gosub, что я воочию построчно своими глазами не смогу видеть как происходит работа скрипта. И так далее.
Как показывает история, смена религии не происходит добровольно или ради интереса. Это всегда сложный, негативный процесс, сопровождающийся сильными муками и проблемами biggrin.gif И каждый истинно верующий пилотянин всегда будет искать возможности остаться в своих привычных стенах. Хоть и старых, но родных. Вот и сейчас мысли лишь о том, как смастерить необходимые костыли и ни о чем другом.

Вот происходит чтение памяти для координат (причем считать их можно только в строковую переменную):
Код
readmem $Xcurrent $AddressX F // -17,4429626464844
readmem $Ycurrent $AddressY F //128,38623046875

Если координаты совпадают с координатами в массиве, значит персонаж находится в нужной точке. По сути, никаких арифметических операций проводить не нужно, кроме простого сравнения текущей динамичной координаты, с той постоянной, что в массиве задана. Т.е подошло бы даже представление этих полученных данных в виде строки. Строковые переменные сравниваются между собой, не теряя данных из своего значения. Массивы теряют все то, что после запятой отрицательного числа.
Мне нужно определять соответствует ли координата персонажа с нужной мне. Ломаю голову. Разве что придумал записывать в массив отрицательное число с двойным тире. И перед сравнением удалять один минус, или делать частичное сравнение (если такое возможно) rolleyes.gif
cirus
Округлить числа и сравнить.
фонарик
Цитата(cirus @ 5.12.2020, 17:24) *
Округлить числа и сравнить.
Никак не подойдет sad.gif Нужно точное совпадение координат, не понимаю зачем там столько цифр поле запятой, но погрешность между координатами в пол единицы уже неприемлемо, и таким образом передача объективной реальности через цифры уже будет иметь большое искажение.
Sirocco
поделить число на две части до запятой и после... потом собрать назад.
DarkMaster
Цитата
goto gosub

goto доступен, но я точно так же не рекомендую его и в старом синтаксисе.
gosub - фактически тоже самое, что и функция
Цитата
Нужно точное совпадение координат

Если бы ты сходил по ссылке, что я привел выше, то бы знал, что дробное число точному сравнению подвергать не стоит. Там есть динамическая точность и не все значения существуют в нецелочисленном представлении. Что не так с аддоном из ссылке выше/либо пилотовской реализации по той же ссылке?
фонарик
Цитата(DarkMaster @ 6.12.2020, 8:38) *
Если бы ты сходил по ссылке, что я привел выше, то бы знал, что дробное число точному сравнению подвергать не стоит.
Я ходил по вашей ссылке, и всегда смотрю любую информацию, которую вы советуете. Ваш плагин очень полезная и нужная вещь. Но только вы не поняли самого главного, проблему которую необходимо решить прежде всего: где и как хранить кучу данных, выраженных в виде -17,4429626464844 ? А где обычно хранятся всякие данные? Не знаю как у всех, но у меня - в массивах. На данный момент хранить в массиве такой набор символов нельзя, потому что с ними нельзя работать.
DarkMaster
Цитата
На данный момент хранить в массиве такой набор символов нельзя, потому что с ними нельзя работать.

Через временную строковую переменную?
фонарик
Цитата(DarkMaster @ 9.12.2020, 16:00) *
Через временную строковую переменную?
Тоже не получается. Положить в массив набор символов типа -17,4429626464844 можно, а вот считать из массива эти символы уже нельзя. Ложить в явном виде или в виде строковой переменной - неважно. Этот треклятый минус в сочетании с запятой в одном наборе триггерит там что-то внутри массива.
DarkMaster
Может попробовать заменять минус на какой-нибудь символ, в т.ч. запятую, а потом обратно конвертить при работе?
фонарик
Я придумал записывать в массив отрицательные числа с плавающей запятой с двойным минусом. При такой записи значение можно считать из массива. А затем перед необходимым сравнением текущей полученной координаты с той, что в массиве, вычитать регуляркой 1 такой минус если он есть:
Код
log clear
set %arr[1 1] 15,8137130737305      //X
set %arr[1 2] --103,095977783203    //Y

set %arr[2 1] --69,8136596679688    //X
set %arr[2 2] 34,4126510620117      //Y

set $regexp "-?\d+,\d+"

for #x 1 size(%arr) 1
  set $string %arr[#x 1] //читаем координату Х из массива
  set #n regexp (#position $TempX $string $regexp) //вычтем 1 минус если он есть

  set $string %arr[#x 2]  //читаем координату Y из массива
  set #n regexp (#position $TempY $string $regexp) //вычтем 1 минус если он есть
  //теперь с координатами $TempX $TempY можно работать
  log X = $TempX Y = $TempY
end_for
stop_script
Cockney
Пожалуй, данная тема заслуживает упоминания в полезных советах под спойлером "Почему нужно переходить на Lua".
Fors1k
Цитата(Cockney @ 16.12.2020, 20:57) *
Пожалуй, данная тема заслуживает упоминания в полезных советах под спойлером "Почему нужно переходить на Lua".

Можно будет даже подборку сделать из таких тем)
Думаю я и в своих старых парочку таких найти смогу smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.