Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Массив, пропадает дробная часть отрицательного числа (после запятой)
фонарик
сообщение 5.12.2020, 0:19
Сообщение #1


****

Apprentice
Сообщений: 145
Регистрация: 23.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.305



Код
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

Первое и третье значение массива теряют числа после запятой (IMG:style_emoticons/default/sad.gif) При любых математических операциях 1 и 3 значения обрезаются до целого. Подскажите, в чем ошибка?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
neves
сообщение 5.12.2020, 0:38
Сообщение #2


***

Novice
Сообщений: 64
Регистрация: 4.10.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.419
Возраст: 19



Код
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
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
фонарик
сообщение 5.12.2020, 0:42
Сообщение #3


****

Apprentice
Сообщений: 145
Регистрация: 23.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.305



Необходимо работать с дробными числами, записанными через запятую. Они у меня так и в памяти хранятся процесса. Readmem такие циферки и считывает (IMG:style_emoticons/default/huh.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 5.12.2020, 1:45
Сообщение #4


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
Необходимо работать с дробными числами

Использовать синтаксис луа. Старый синтаксис поддерживает только целочисленные операции.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
фонарик
сообщение 5.12.2020, 14:41
Сообщение #5


****

Apprentice
Сообщений: 145
Регистрация: 23.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.305



Так положительные числа пилот понимает правильно (IMG:style_emoticons/default/mellow.gif) У меня скрипт написан уже весом на мегабайт, на пилотном языке. Столько всего задумывалось и реализовалось, как дошло дело до обработки полученных данных нате вам, засада (IMG:style_emoticons/default/sad.gif) На луа у меня просто тяму не хватит все сделать аналогично, даже не беря во внимание необходимое время.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 5.12.2020, 15:23
Сообщение #6


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



https://forum.uokit.com/index.php?showtopic=29139
а вообще, если есть желание - помогу разобраться с луа в индивидуальном порядке на добровольных началах.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
фонарик
сообщение 5.12.2020, 16:42
Сообщение #7


****

Apprentice
Сообщений: 145
Регистрация: 23.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.305



Цитата(DarkMaster @ 5.12.2020, 15:23) *
а вообще, если есть желание - помогу разобраться с луа в индивидуальном порядке на добровольных началах.
Вы просто не понимаете - пилотный скриптинг и луа - это 2 разные религии в понимании простых прихожан. Мне становится больно лишь от мысли, что будущие задумки должны быть лишены меток goto gosub, что я воочию построчно своими глазами не смогу видеть как происходит работа скрипта. И так далее.
Как показывает история, смена религии не происходит добровольно или ради интереса. Это всегда сложный, негативный процесс, сопровождающийся сильными муками и проблемами (IMG:style_emoticons/default/biggrin.gif) И каждый истинно верующий пилотянин всегда будет искать возможности остаться в своих привычных стенах. Хоть и старых, но родных. Вот и сейчас мысли лишь о том, как смастерить необходимые костыли и ни о чем другом.

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

Если координаты совпадают с координатами в массиве, значит персонаж находится в нужной точке. По сути, никаких арифметических операций проводить не нужно, кроме простого сравнения текущей динамичной координаты, с той постоянной, что в массиве задана. Т.е подошло бы даже представление этих полученных данных в виде строки. Строковые переменные сравниваются между собой, не теряя данных из своего значения. Массивы теряют все то, что после запятой отрицательного числа.
Мне нужно определять соответствует ли координата персонажа с нужной мне. Ломаю голову. Разве что придумал записывать в массив отрицательное число с двойным тире. И перед сравнением удалять один минус, или делать частичное сравнение (если такое возможно) (IMG:style_emoticons/default/rolleyes.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 5.12.2020, 17:24
Сообщение #8


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Округлить числа и сравнить.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
фонарик
сообщение 5.12.2020, 18:39
Сообщение #9


****

Apprentice
Сообщений: 145
Регистрация: 23.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.305



Цитата(cirus @ 5.12.2020, 17:24) *
Округлить числа и сравнить.
Никак не подойдет (IMG:style_emoticons/default/sad.gif) Нужно точное совпадение координат, не понимаю зачем там столько цифр поле запятой, но погрешность между координатами в пол единицы уже неприемлемо, и таким образом передача объективной реальности через цифры уже будет иметь большое искажение.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sirocco
сообщение 5.12.2020, 18:59
Сообщение #10


******

Expert
Сообщений: 809
Регистрация: 2.2.2012
Группа: Пользователи
Наличность: 15408
Пользователь №: 14.566
Возраст: 30



поделить число на две части до запятой и после... потом собрать назад.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 6.12.2020, 8:38
Сообщение #11


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Цитата
goto gosub

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

Если бы ты сходил по ссылке, что я привел выше, то бы знал, что дробное число точному сравнению подвергать не стоит. Там есть динамическая точность и не все значения существуют в нецелочисленном представлении. Что не так с аддоном из ссылке выше/либо пилотовской реализации по той же ссылке?


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
фонарик
сообщение 7.12.2020, 18:51
Сообщение #12


****

Apprentice
Сообщений: 145
Регистрация: 23.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.305



Цитата(DarkMaster @ 6.12.2020, 8:38) *
Если бы ты сходил по ссылке, что я привел выше, то бы знал, что дробное число точному сравнению подвергать не стоит.
Я ходил по вашей ссылке, и всегда смотрю любую информацию, которую вы советуете. Ваш плагин очень полезная и нужная вещь. Но только вы не поняли самого главного, проблему которую необходимо решить прежде всего: где и как хранить кучу данных, выраженных в виде -17,4429626464844 ? А где обычно хранятся всякие данные? Не знаю как у всех, но у меня - в массивах. На данный момент хранить в массиве такой набор символов нельзя, потому что с ними нельзя работать.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 9.12.2020, 16:00
Сообщение #13


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



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

Через временную строковую переменную?


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
фонарик
сообщение 9.12.2020, 19:13
Сообщение #14


****

Apprentice
Сообщений: 145
Регистрация: 23.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.305



Цитата(DarkMaster @ 9.12.2020, 16:00) *
Через временную строковую переменную?
Тоже не получается. Положить в массив набор символов типа -17,4429626464844 можно, а вот считать из массива эти символы уже нельзя. Ложить в явном виде или в виде строковой переменной - неважно. Этот треклятый минус в сочетании с запятой в одном наборе триггерит там что-то внутри массива.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 14.12.2020, 1:18
Сообщение #15


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Может попробовать заменять минус на какой-нибудь символ, в т.ч. запятую, а потом обратно конвертить при работе?


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
фонарик
сообщение 16.12.2020, 16:29
Сообщение #16


****

Apprentice
Сообщений: 145
Регистрация: 23.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.305



Я придумал записывать в массив отрицательные числа с плавающей запятой с двойным минусом. При такой записи значение можно считать из массива. А затем перед необходимым сравнением текущей полученной координаты с той, что в массиве, вычитать регуляркой 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
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 16.12.2020, 20:57
Сообщение #17


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Пожалуй, данная тема заслуживает упоминания в полезных советах под спойлером "Почему нужно переходить на Lua".
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 17.12.2020, 15:17
Сообщение #18


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 18.746



Цитата(Cockney @ 16.12.2020, 20:57) *
Пожалуй, данная тема заслуживает упоминания в полезных советах под спойлером "Почему нужно переходить на Lua".

Можно будет даже подборку сделать из таких тем)
Думаю я и в своих старых парочку таких найти смогу (IMG:style_emoticons/default/smile.gif)


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 28.3.2024, 10:55
Designed by Nickostyle