Автор Тема: [Alpha/Beta Testing] Тестируем сырые обновления (ссылки в первом посте)  (Прочитано 120243 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Hito

  • Герой форума
  • *****
  • Сообщений: 1065
    • Просмотр профиля
Ну, вот теперь сразу все ясно стало... ;D
Я не ду... Потому и не бу...

АНТИКЛАН

  • Активный участник
  • ***
  • Сообщений: 111
    • Просмотр профиля
Re: [Alpha/Beta Testing]
« Ответ #661 : Октябрь 30, 2019, 06:10:20 pm »
Всех с Днем Программиста!
И в честь нашего праздника...

Patch 4.14.003b

https://yadi.sk/d/hPssEg8K76M9RQ

Исправлено почти все, что тут накопано, что-то добавлено, обновлена справка. Ковыряйтесь на здоровье



Johnny спасибо! И тебя! :D

Viktor77

  • Освоившийся
  • **
  • Сообщений: 67
    • Просмотр профиля
Полная сборка Clickermann 4.14.003b
https://yadi.sk/d/zJPu59MW7-YROg
при открытии редактора, сворачивается в трей, и дальше никак в редактор не попасть

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3677
  • Котэ
    • Просмотр профиля
Полная сборка Clickermann 4.14.003b
https://yadi.sk/d/zJPu59MW7-YROg
при открытии редактора, сворачивается в трей, и дальше никак в редактор не попасть

Вероятно редактор появляется за экраном. Хотя, в той сборке что я выложил, такого быть не должно.
Я специально в файле \data\config_editor.ini указал координаты окна 100 100. Именно там должно появляться окно.

left =100
top =100


Viktor77

  • Освоившийся
  • **
  • Сообщений: 67
    • Просмотр профиля
Полная сборка Clickermann 4.14.003b
https://yadi.sk/d/zJPu59MW7-YROg
при открытии редактора, сворачивается в трей, и дальше никак в редактор не попасть

Вероятно редактор появляется за экраном. Хотя, в той сборке что я выложил, такого быть не должно.
Я специально в файле \data\config_editor.ini указал координаты окна 100 100. Именно там должно появляться окно.

left =100
top =100
каким то образом авто заменяется файл  \data\config_editor.ini , и не открывается редактор. приходится из архива каждый раз его доставать. такая ситуация происходит при сворачивании кликера в трей.

Dimava

  • Зашел в гости
  • *
  • Сообщений: 2
    • Просмотр профиля
С помощью препроцессора вполне возможно сделать хоть и немного кривые, но функции.
С локальными переменными и возвращаемыми значениями.

Код: Javascript
  1. s = `
  2.  
  3. sub(ar, $i, $j)
  4. $ret = $arr[$i+10*$j+11]
  5. end_sub
  6.  
  7. ar(1, 2)
  8.  
  9. $v1 = ar(1, ar(2, sin(3))))
  10.  
  11. $v2 = sin(ar(2, sin(3)))
  12.  
  13. $v3 = ar(ar(1, 2), ar(3, 4))
  14.  
  15. `;
  16.  
  17.  
  18. a = s.split('\n');
  19. b = [];
  20.  
  21. localvars = new Map();
  22. subname = ''
  23. subnames = new Set();
  24.  
  25. // todo: make both 'SUB' and 'sub' support
  26. a = a.map(s=>{
  27. if (s.startsWith('sub(')) {
  28.  
  29. subname = s.match(/\(\s*(\w+)/)[1];
  30. subnames.add(subname);
  31.  
  32. localvars = new Map();
  33. localvars.set('$ret', '$_' + subname + '_ret');
  34.  
  35. return s.replace(/\$\w+/g, s=>{
  36. localvars.set(s, '$_' + subname + '_' + localvars.size);
  37. return localvars.get(s);
  38. }
  39. );
  40. }
  41.  
  42. if (s.startsWith('end_sub')) {
  43. localvars = new Map();
  44. return s;
  45. }
  46.  
  47. return s.replace(/\$\w+/g, s=>{
  48. return localvars.get(s) || s;
  49. }
  50. );
  51. }
  52. )
  53.  
  54. a2 = [];
  55. tempn = 0;
  56. for (let s of a) {
  57. if (s.match(/^\s*(sub|for|while|do|if)\s*\(/)) {
  58. a2.push(s);
  59. continue;
  60. }
  61.  
  62. let ws = s.match(/^\s*/)[0];
  63.  
  64. // todo: make "(" string support
  65. let temps = []
  66. for (let i = 0; i < 10; i++) {
  67. s = s.replace(/(\w+)\([^()]*\)/, (s, fname) => {
  68. let tempname = '$_temp_' + (++tempn)
  69. let o = {type: 'call', s, fname, n: tempn, tempname};
  70. o.id = temps.push(o);
  71. return tempname;
  72. })
  73. }
  74. let inlines = new Map();
  75. for (let o of temps) {
  76. for (let i = 0; i < 10; i++) {
  77. o.s = o.s.replace(/\$_temp_\w+/, s => inlines.get(s) || s)
  78. }
  79. if (subnames.has(o.fname)) {
  80. a2.push(ws + o.s);
  81. a2.push(ws + o.tempname + ' = $_' + o.fname + '_ret');
  82. } else {
  83. inlines.set(o.tempname, o.s)
  84. }
  85. }
  86. for (let i = 0; i < 10; i++) {
  87. s = s.replace(/\$_temp_\w+/, s => inlines.get(s) || s)
  88. }
  89. a2.push(s);
  90.  
  91.  
  92. }
  93.  
  94. s = a2.join('\n')
  95.  
  96. console.log('%o', s);
  97.  
  98.  

Из
Код: Clickermann
  1. sub(ar, $i, $j)
  2. $ret = $arr[$i+10*$j+11]
  3. end_sub
  4.  
  5. ar(1, 2)
  6.  
  7. $v1 = ar(1, ar(2, sin(3))))
  8.  
  9. $v2 = sin(ar(2, sin(3)))
  10.  
  11. $v3 = ar(ar(1, 2), ar(3, 4))
  12.  
генерирует
Код: Clickermann
  1. sub(ar, $_ar_1, $_ar_2)
  2. $_ar_ret = $arr[$_ar_1+10*$_ar_2+11]
  3. end_sub
  4.  
  5. ar(1, 2)
  6. $_temp_1 = $_ar_ret
  7. $_temp_1
  8.  
  9. ar(2, sin(3))
  10. $_temp_3 = $_ar_ret
  11. ar(1, $_temp_3)
  12. $_temp_4 = $_ar_ret
  13. $v1 = $_temp_4)
  14.  
  15. ar(2, sin(3))
  16. $_temp_6 = $_ar_ret
  17. $v2 = sin($_temp_6)
  18.  
  19. ar(1, 2)
  20. $_temp_8 = $_ar_ret
  21. ar(3, 4)
  22. $_temp_9 = $_ar_ret
  23. ar($_temp_8, $_temp_9)
  24. $_temp_10 = $_ar_ret
  25. $v3 = $_temp_10
  26.  


Если кто может перевести в dll (сам на подходящих языках плохо пишу), пожалуйста скомпилируйте.
« Последнее редактирование: Январь 06, 2020, 05:49:57 pm от Dimava »

dramster

  • Герой форума
  • *****
  • Сообщений: 1027
    • Просмотр профиля
А какая именно функция должна быть в длл?  Я так понимаю "ar", типа вот эта :
Код: Clickermann
  1. ....
  2.     $ret = $arr[$i+10*$j+11]
  3. ....
  4.  
Но кроме двух параметров $i и $j у нас же еще есть некий массив $arr. В последней версии длл вроде принимает массивы, не пробовал использовать в длл пока. В таком случае нужно параметры $i и $j добавить в массив. Можно в начало, можно в конец.
 
из  справки:
Цитировать
Однако необходимо помнить, что массив должен содержать только целочисленные значения, иначе будет ошибка.

А у тебя sin(3) = 0.052 = 0
Если нужно именно так как ты написал, то можно и дробные пересылать в длл, но перед этим их нужно перевести целочисленные http://crapware.aidf.org/forum/index.php?topic=5212.0 , ну  или както попроще.

Вобщем, для начала, вот простенький пример твоей функции на делфи7, работает только с целочисленными.
Код делфи:
Код: Clickermann
  1. library test;
  2.  
  3. uses
  4.  SysUtils;
  5. //------------------------------------------------------------------------------
  6. // Основное тело функции, идет на экспорт, вызывается из кликера
  7. function execute( _mas: pInteger; _size: Integer): Integer; export; stdcall;
  8. type
  9.  pIntArr = array[0..0] of Integer;
  10. var
  11.  i, j : Integer;
  12. begin
  13. // _mas  - указатель на начало массива параметров integer
  14. // _size - размер массива (число параметров)
  15.  
  16.   i := pIntArr(_mas^)[_size-2]; //наши два параметра
  17.   j := pIntArr(_mas^)[_size-1];
  18.  
  19. result := pIntArr(_mas^)[i + 10*j + 11]; // присваиваем возвращаемое значение
  20.  
  21. end;
  22. //------------------------------------------------------------------------------
  23.  
  24. // список экспорта
  25. exports execute;
  26.  
  27. begin
  28.  // тело пусто
  29. end.

Тестовый код, для проверки в кликере, версия 4.14.003 (x32):
Код: Clickermann
  1. FOR($a=0,$a<200)       //создаем рандомный массив со значениями от 0 до 9. 200 элементов
  2.  ARRPUSH ($arr, rnd(0,9))
  3. END_CYC
  4.  
  5.  
  6. $i = 1
  7. $j = 2
  8.  
  9. ARRPUSH ($arr, $i) //добавляем в конец наши параметры
  10. ARRPUSH ($arr, $j)
  11.  
  12. print("результат расчитанный кликером = ", $arr[$i+10*$j+11])
  13.  
  14.  
  15. callarr("test.dll", $arr)
  16.  
  17. print("результат расчитанный dll = ",$_return1)
  18.  
  19. halt

Результаты расчетов кликера и длл совпадают.



Во вложении "test.dll"
« Последнее редактирование: Январь 08, 2020, 11:03:42 pm от dramster »

Dimava

  • Зашел в гости
  • *
  • Сообщений: 2
    • Просмотр профиля
Вот тот мой препроцессор (работает только в браузере): https://output.jsbin.com/rafaqey ( код - https://jsbin.com/rafaqey/edit?js,output )

А вот что оно делает (там этот же пример)

Код: Clickermann
  1. #preprocessor "please_make_this_dll.dll"            #preprocessor "please_make_this_dll.dll"
  2.  
  3. // пример                                           // пример
  4.  
  5. // локальные переменные $x и $y - имена поменять    // локальные переменные $x и $y - имена поменять
  6. sub(fn1, $x, $y)                                    sub(fn1, $_fn1_1, $_fn1_2)
  7.   // возвращаемое значение - имя поменять             // возвращаемое значение - имя поменять
  8.   $ret = $x * $x + $y * $y                            $_fn1_ret = $_fn1_1 * $_fn1_1 + $_fn1_2 * $_fn1_2
  9. end_sub                                             end_sub
  10.  
  11. for ($x = 0, $x < 5)                                for ($x = 0, $x < 5)
  12.   for ($y = 0, $y < 5)                                for ($y = 0, $y < 5)
  13.      // вызов функции - сохранить возвращаемое           // вызов функции - сохранить возвращаемое
  14.      //     значение во временную переменную             //     значение во временную переменную
  15.      $s = $s + fn1($x, $y)                               fn1($x, $y)
  16.   end_cyc                                                $_temp_1 = $_fn1_ret
  17. end_cyc                                                   $s = $s + $_temp_1
  18.                                                       end_cyc
  19.                                                    end_cyc
  20.  
  21.  
  22. // пример 2                                         // пример 2
  23.  
  24. sub(fn2, $i)                                        sub(fn2, $_fn2_1)
  25.   // возвращаемой значение - имя всегда $ret          // возвращаемой значение - имя всегда $_fn2_ret
  26.   $ret = $i * ($i + 1)                                $_fn2_ret = $_fn2_1 * ($_fn2_1 + 1)
  27. end_sub                                             end_sub
  28.  
  29. // развёртка функций должна поддерживать            // развёртка функций должна поддерживать
  30. // многократную вложенность                         // многократную вложенность
  31. $v1 = fn2(1) + fn2(fn2(fn2(fn2(1))))                fn2(1)
  32.                                                    $_temp_1 = $_fn2_ret
  33. // встроенные функции не должны развёртываться      fn2(1)
  34. $v2 = fn2(cos(sin(fn2(1))))                         $_temp_2 = $_fn2_ret
  35.                                                    fn2($_temp_2)
  36.                                                    $_temp_3 = $_fn2_ret
  37.                                                    fn2($_temp_3)
  38.                                                    $_temp_4 = $_fn2_ret
  39.                                                    fn2($_temp_4)
  40.                                                    $_temp_5 = $_fn2_ret
  41.                                                    $v1 = $_temp_1 + $_temp_5
  42.  
  43.                                                    // встроенные функции не должны развёртываться
  44.                                                    fn2(1)
  45.                                                    $_temp_6 = $_fn2_ret
  46.                                                    fn2(cos(sin($_temp_6)))
  47.                                                    $_temp_9 = $_fn2_ret
  48.                                                    $v2 = $_temp_9
  49.  
  50.  
« Последнее редактирование: Январь 11, 2020, 02:50:21 pm от Dimava »