Добавлен , не публикуется
xgm.guru/p/wc3/about_int статья про целое число
xgm.guru/forum/showthread.php?t=15888 похожая статья, но здесь описан подробно пример применения чисел
xgm.guru/p/wc3/w3datatypes статья про типы, здесь можно прочитать про целое число
4-х значное число в варкрафте, используемое в способностях, юнитах, декорациях, баффах и др для обозначения типов объектов. Называют равкодом rawcode. ссылка.
Обычно выражаются 4 символами для удобства:
hfoo - равкод пехотинца. Что они означают? h - human (человек), foo - footman (пехотинец)
Hpal - равкод героя паладина. H - human (буквы героя выражают большими заглавными буквами, FAQ пункт 1.9 ), pal - paladin (паладин)
остальные расы: Undead (нежить), Elf (ночной эльф), Orc (орк)
Aslo - равкод способности замедление. A - Ability (способность, всегда с большой буквой), slo - slow (медленный, замедление)
AOwk - равкод способности стремительность A - Ability (способность), O - Orc (орк, расовые способности героев всегда пишут с большой буквой, роли никакой это не играет на механику, но всегда будет ясно, что это способность героя), wk - wind walk (ветренная ходьба).
BOwk - равкод заклинания (баффа buff) от способности стремительность. здесь та же самая запись. только отличается на 1 букву
dsum - равкод предмета "камень зова". Обычно у предметов нет строгих принципов как у юнитов, где первая буква означает расовую принадлежность. d - Dark (темный), sum - Summoning (вызов)
bspd - равкод ботинок скорости. b - boots (ботинки), spd - speed (скорости)
Все равкоды введены в 256-системы счисления. Обычно можно свободно ввести свой при создании в JNGP. Стоит заметить, что не все символы следует вводить. Например, при неизвестно символе может критовать, а jasshelher ругаться на указанный символ. Если ввести русский символ, у юнита в ро пропадают описания. Можно создать базу данных, последовательность номеров. Относительно типа можно узнавать сколько получить голды с фермы. Например число достаточно получить с помощью нативки GetUnitTypeID(...):
'h000' - ферма +1
'h001' - ферма +2
'h002' - ферма +3
значение равкода каждой фермы становится больше +1 - следствие продуманной базы данных.

При созданий базы данных нужно всегда проверять с онлайн-калькулятором.
калькулятор 1 здесь сразу переводит в число и вам покажут несколько числа, выраженные в разных сс. Это отличает от текстовых калькуляторов. Например может сразу показать dec-число, как и варкрафте 3 в dec-число (вам выводится десятичное число на экран). Имею дело именно с этим онлайн-калькулятором. Это не реклама, но ничего другого найти не смог, нигде не смог найти похож, по каким критериям в гугле надо искать, я не знаю.
есть мобильные версии - скачать и установить приложения:
DEC HEX BIN ASCII Converter
Hex Converter Plus
есть множества др моб приложении, для компа не нашел пока что, тк для скачивания комп. программы есть сложности: трудно найти конвертер - среди утилит находит только конвертер текста, генератор цвета. Не вижу такой программы на комп, очень много мусора попадается. Также учитывайте, что их трудно закачать с сайтов, тк приходится прыгать по ссылкам - это просто потеря времени. Но и не охота качать, вирусняк вдруг подхватишь

В калькуляторе Windows встроены разные калькуляторы: обычный, инженерный и пр. Также есть программный калькулятор. Он позволяет конвентировать разные числа в разные системы счисления, разве что отсутствует Ascii 256-системы счисления. Кроме того позволяет совершать битовые операции.

калькулятор 2 здесь выводит в dec-число номер символа. Как видите, здесь имеем дело с текстом, и вам выводит совершенно другое, номер символа. Но это тоже полезно, если нужно составлять таблицу или базу данных для перевода равкода и других целей в вакрафте. В интернете именно таких калькуляторов очень много
калькулятор 3 здесь тоже самое, что и 2-ой калькулятор. Имеет дело выводит номер символа, короче выводит как текст. Номер символа можно записать так в dec - десятичной сс, так и в других системах. Например, A = 65 dec, а если ввести AB = 65 66.
=====
калькулятор 4 удобно дробные двоичные конвертации делать (ну для проверки).
калькулятор 5 ничего общего с конвертации чисел не имеет. просто для себя ссылку. Иногда полезно узнать остаток. В виндовс калькуляторе есть эта функция mod

зачем проверять нам калькулятором?
ошибка, с которой можете столкнуться вы. Или из-за не знания или из-за невнимательности. Мы заранее составляем базу данных. Бывает придумали что-то, и сохраняете id-шники в хэш-таблице, и с помощью математических ухитрении и ключей достаете нужный.

Приведу пример (это чтобы вы понимали что вар может не составить последовательность правильно):
например мы будем работать с идишником предмета (копии ориганала) - I008. У каждого оригинала-предмета будут свои копии, там 5 или 10. Мы знаем, что у предмета "духи-целители" 3 копии. Мы написали очень удобную функцию, которая добавляет при инициализации карты в хэш все эти равкоды. В базу данных по id-оригинала берем в функцию записываем идишник первой копии - I008, и все. Дальше - это продуманный код добавляет в таблицу равкоды. Циклом прибавляем I008+0, I008+1, I008+2.
код
function SaveR2Icharges takes integer original, integer rune, integer start_charges returns nothing
    local integer i = 0
    
    loop
        exitwhen i == start_charges
        call SaveInteger(udg_Hash, rune+i, 666, original) //Нужно связать ценники с одним типом. Это нужно для проверки, что занят ли он в магазине, также возвращает тип оригинала.
        call SaveInteger(udg_Hash, original, 100 + i+1, rune + i )
        //call BJDebugMsg( "i: " + I2S(i) )
        set i = i + 1
    endloop
    call SaveInteger(udg_Hash, udg_ChargesTypeOfItem, original, start_charges)
    
endfunction
    
 //SaveR2Icharges(original, rune, charge)
 	call SaveR2Icharges('wild', 'I007', 1) //амулет леса х1 заряд
    call SaveR2Icharges('whwd', 'I008', 3) //духи-целители х3 заряда
Но когда вы будете работать, у вас может что-то не заработать. Дело в том, что в редакторе объектов (база данных) может быть отсутствует какой-нибудь идишник. Или не тот ключ, или он записан на другой идишник.
казалось бы все правильно, равкод числа на одну единицу меньше. Но как оказалось, где-то допустил ошибку (это редактор сам автоматом задавал равкоды, и я честно не доглядел. Просто не понимал в чем дело. немного попутал с 16-ричной с 256-ричной, надо смотреть по таблице). Берем любой онлайн-калькулятор ASCII , и переводим 10-чную систему, проверяя насколько отличается.
I008=1227894840
I009=1227894841
I00A=1227894849 Тут отличается на целых 8 знаков, короче сбивается база данных

Давайте проверим что же под номером 1227894842 скрывается
1227894842=I00: не удивляйтесь, двоеточие - это тоже символ, в 256-ричной системе по-другому номеруются символы. Просто варкрафт не хочет вписывать этот символ, но мы можем вписать.
Вывод: Казалось бы мы можем доверить варкрафту составлении базы данных, и он создает равкоды в нужной последовательности, то есть на 1 единичку отличается. Но на самом деле не так. Видите, здесь варкрафт не любит знаки препинания в равкодах ставить, он их пропускает, а в jass-коде при компиляции кода ругается на недопустимые знаки. Например, ругает на переменную с таким именем. Вы должны сами проверять.
Теперь надо переделать. Вместо I009 сделать I00:
Беру копирую итем I00A, и в jngp выскакивает окошко Create Object, и туда копируете 'I00:'
Теперь получается так:

Где же еще можно использовать эту базу данных чисел?
при вычислении можно будет знать сколько получить денег с фермы. Это привел пример. Картоделы опытные используют большие ухитрения с работой равкодом.

Можем от типа узнавать сколько голды давать за убитых крипов - например в ТД. При хитрых ухитрениях можно создать многое, пример выше в второй статье

Или же сделать в РО базу данных для каждого героя, для каждого героя можно создать свой артефакт:
call CreateItem(GetUnitTypeId(<hero>)+0x01000000, GetUnitX(<hero>), GetUnitY(<hero>))
'H000' + 0x01000000 = 0x48303030 + 0x01000000 = 0x49303030 = 'I000' для каждого типа можно сделать свой артефакт
'O000' + 0x07000000 = 0x4F303030 + 0x07000000 = 0x56303030 = 'V000' для каждой расы
для каждого типа 'H000' можно создать свой набор артефактов, например 20 типов артефактов от 0 до 20:
'H000' (для одного типа) = 'I000'-'I00D' 20 типов итемов могут принадлежать только герою 'H000'
'H001' (для следующего типа) = I00E-I00Y эти 20 типов принадлежат 'H001' и так далее

Заметка 1:
в последнее время в файле .j при взломе карте, можем не заметить указанных 4-х значных равкодов. Потому что, если открыть в текстовом редакторе, то можно увидеть вместо них числа в 10-чной системе счисления. Новички этого могут не понять. Но сделано это специально, чтобы взломщики не смогли ничего понять, и главное чтобы ленились взламывать.
Заметка 2:
равкод можно вывести на экран в игре с помощью I2S. так можно и через 256-чную, так 16-ричную, и 8-ричную. Переводит все в 10 систему счисления.
можно проверить калькулятором ascii-table.com/calculator.php
'e0EU'=0x65304555 hex=014514042525 oct=1697662293 dec
пример
'e0EU'(Characters) - 256-ричная система счисления ASCII, каждый символ называется "чар" (char).
Если надо перевести из 256-ричную в десятичную (все рассказано вот здесь ):
Если надо перевести из десятичной в 256-ричную систему (по остатку от деления находим номер чара):
Другой способ из 10-чной в 256-ричную сс:

0x65304555 - 16-ричная система счисления, обычно к hex-числу добавляют 0x или 1x. 0x65304555=1697662293 (0x - положительное число), а 1x65304555=-1697662293 (1x - отрицательное число)

014514042525 - 8-ричная система счисления, обычно к oct-числу добавляют 0

1100101001100000100010101010101 - двоичная система счисления, 32 разряда (длина строки 32 символа). Это машинный код. специально отделил зеленым цветом на 4 разряда - можно перевести в 16=ричную сс.
1100101001100000100010101010101 - отделил красным на 3 разряда - можно перевести в 8-ричную сс
Вы должны знать что такое система счисления.
система счисления
позиционная система счисления

У каждой системы есть определенное число символов, и основание.

Hexadecimal - 16-ричная система счисления (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F) обычно большие и маленькие буквы это один и тот же символ. Например: A = 10, a = 10; B = 11, b = 11 и так далее.
применение 16-ричной системы счисления
используется в варкрафте, обычно на jass прописывают добавляя (0x<число hex>= положительное число или 1x<число hex>= отрицательнок число). Например, 0x00000001 = 1. Или например: 1x00000001 = -1.

используется в варкрафте для генерации цветов ARGB.
AA : alpha value (альфа - прозрачность)
RR : red value (красный)
GG : green value (зеленый)
BB : blue value (синий)
Кодировка ARGB:
|c - открыть цветовой тег;
первые 2 символа - прозрачность;
вторые 2 символа - красный;
третьи 2 - зелёный;
последние 2 - синий.
|r - закрыть тег
Всего 4 значения (прозрачный, красный, зеленый, синий). Варьируются эти значения от 0 до 255 в 16-ричной системе счисления. Там в 16 ричной системе цвет обозначается двумя символами от 00 до FF (ff). Так 0 обозначают 00, а вот 16 обозначается в hex 10 , 128 обозначают 80, а вот 255 превращают в FF.
В большинстве случаев, вы делаете текст полностью видимым (255 = FF), используя FF как альфа. Прозрачным (0 = 00) текст трудно сделать в описании предметов и юнитов, пробовал. Но можно прозрачным сделать в текстагах. Хотя, у текстагов уже есть отдельные функции для смены цветов.
А что касается остальных, чем больше значения, тем светлее оттенок цвета, и наоборот.
FF000000 - черный цвет со значением 0 у цветов (red, gren and blue)
FFFFFFFF - белый цвет со значением 255 у всех цветов (red, gren and blue)
FFFF0000 - красный
FF00FF00 - зеленый
FF0000FF - синий
Decimal - 10-тичная система счисления (0,1,2,3,4,5,6,7,8,9)
Octal - 8-ричная система счисления (0,1,2,3,4,5,6,7). В jass обычно к числу в 8-ричной системы приписывают нолик. Например: 044 = 36
Binary - двоичная система счисления (машинный 0 и 1). В варкрафте на jass двоичный код не применим.
пример
в качестве примера показан двоичный код из 32 символов
двоичный код обычно состоит в таком виде
1000 0000 0000 0000 0000 0000 0000 0000 = 10 0 0 0 0 0 0 0 oct = 8 0 0 0 0 0 0 0 0 hex
Специально разделил двоичный код на 4 разряда, но в вакрафте лучше писать слитно.
10000000000000000000000000000000 = 2^31=2147483648
но в jass невозможно указать integer в двоичной (binary) системе счисления, но она очень важна для понимания всего материала. Один разряд в двоичной системе называется бит, восемь разрядов или двух разрядное шестнадцатеричное число - байт.
если поставить двоичный код из 32 символов в jass, то система будет преобразовано не двоичную систему, а в 8-ричную. Например, если я выставлю в вакрафте такой код:
0000 0000 0000 0000 0000 0000 0000 0010 = 00000000000000000000000000000010=8 а должна была быть двойка вместо восьмерки. Дело в том, что если спереди ноль поставить, то вар преобразует в 8-ричную сс. А если перед этим числом стоит единица то такого не будет, например 101 = 101 - то будет обозначать сто один в 10-чной сс
Characters - 256-ричная система счисления ASCII (American Standard Code for Information Interchange), каждый символ называется "чар" (char). Все символы не влезут, если буду печатать сейчас, их очень много. Таблица большая у 256-ричной системы. У каждого языка есть своя таблица, обычно 126 символов - стандартная, а остальная отличается. В варкрафте при конвертации работаем только с буквами латинского алфавита и цифрами, и иногда знаки препинания. Поэтому и не нужно в варкрафте записывать все символы.
ВОПРОС: зачем тогда нам нужно переводить, если можем вывести на экран и узнать какой-нибудь равкод. Да, так мы можем. Это безусловно поможет при взломе. Другое дело, когда создавать какие-то объекты динамически по ходу игры (часто можно хранить данные в двоичном коде) или что-то делать в течении игры (конечно вариантов пока мало, не понимаю как поможет эта конвертация систем счисления из строк в числа). Но знаю одну систему, которую хотел сделать пользователь. Например, ввести в чат равкод паладина "-Hpal", который будет создан в центре карты (такой единственный пример).
вот ссылка на карту
вот ссылка на карту можно просто сделать бд. Вводишь строку и все

есть интересный момент работы с мем хаком. Опыт
www.hiveworkshop.com/threads/memory-hack.289508 здесь описан код. правда устарел.
скачать новую можно здесь
Но здесь, на хайве (выше ссылочка), изложен принцип работы, и как находить адреса. Для новичка, который умеет кодить на jass, это будет не очень-то и понятно. Пользуюсь не часто memory hack, поэтому и знаю мало. Мне было достаточно использовать те функции, которые имелись. Большинство функции мне не понятны. Со временем может пойму.
Когда мне нужно было изменять стоимость предмета или стоимость юнита, описания, я не нашел нужных мне функции для торговли. Так хотелось динамично изменять цены. Поэтому пошел читать конспект Драколича что представлен выше, как найти мне значения. На примере, я сначала начал работать с ConvertHandle. Я просто не понимал эту функцию, но сделал все как было написано в конспекте. Повторил один в один. Поверьте, очень долго тыкал, и не понимал. Большинство функции (защита, атака, реген и многое другое), которые представлены драколичем, сильно связаны с ConvertHandle. Пытался сравнивать их с моим результатами, и меня удивляло, что я не мог найти ценник на моего героя. Даже проверочной функцией пытался найти формулу.
функция
Сравнивая эти функции драколича, начал понимать для чего ConvertHandle. И пытался найти адреса. У каждого объекта есть список адресов. Это группа адресов занимает определенный диапазон. Адреса строго понумерованы относительно ConvertHandle.
local integer i = 0 //счетчик цикла
local integer c = 0 //счетчик чисел (подсчитывает кол-во нужных чисел)

local integer a  //значение ячейки (целое число)
local real r //значение ячейки (реальное число, предполагалось использовать, если нужно найти реальное число)

call echo("1 hero: " + GetUnitName(u) + " :" + Int2Hex(ConvertHandle(u))) //просто дебаг, выводит на экран. вот еще один из примеров конвертации, функция Int2Hex возращает строку. Как мы видим, иначе вар в десятичную переведет. А нам нужно hex-число для работы с адресами 

set LastConvertedHandle=ConvertHandle(u) //адрес ячейки объекта. в игре адреса динамичные, в этой игре адрес 5, в следующей игре адрес 8. Какое-то смещение. Если адрес ячейки чем-то занят, то перезапишется на другой. Поэтому нам помогают подобные функции

loop
    set a = 0
    set r = 0
    
    exitwhen i > 0xFF //попробовать можно FFFFFFFF
    set a = (RMem(LastConvertedHandle + i)) //function mI2R - функция на реалку. функция RMem - новая, в новой версии. RMem - считывает значения из ячейки, WMem - перезаписывают
    
    if a == 595759 then //я ввел в редакторе в ценник героя 595759, и пытаюсь найти это число
        set c = c + 1
        call BJDebugMsg("номер порядка: " + (I2S(i)) + ", число: " + I2S(a))
    endif
    set i = i + 1
endloop
call BJDebugMsg("общее кол-во чисел: " + (I2S(c)))
Оказалось, что ConvertHandle не подходит. Дело в том, что адрес ценника зависит не от объекта, а от типа объекта. Надо было использовать GetUnitDataDefById
как нашел вручную
первая попытка:
convert: 0x0FAD0634 = 262997556 dec адрес юнита 0FAD0634 выдала ConvertHandle
convert: 0x12797648 = 309950024 dec адрес стоимости юнита 12797648 нашел через artmoney (легко делается, в редакторе задайте самое редкое значение например "595759". Найдите это значение, мне выдало 5-6 значении. Судя всего одно то что нам нужное, остальные это побочные. Измените одно значение, и посмотрите как ведет себя игра. Если изменилась, подождите 5-7 секунд. Некоторые значения могут вернуть числа на место. Побочные значения бывают зависимы от основного значения, если вы измените основное значения, изменятся и побочные. Видимо, побочные значения - те цифры на экране). Сверните игру, вернитесь в оуну виндовс и в артмони попробуйте так проделать с каждым число. Обычно, хранятся в 4-байтах)
======================================
вторая попытка:
convert: 0x0FAC0634 = 262932020 dec адрес юнита 0FAC0634 выдала ConvertHandle
convert: 0x12777648 = 309818952 dec адрес стоимости юнита 12777648 нашел через artmoney
convert: 309818920 dec = 0x12777628 адрес 309818920 типа выдал GetUnitDataDefById через дебаг на экран
309818952-309818920=32 получается адрес ячейки к стоимости золота данного типа находится смещается на 32. Надо снова перепроверить.
======================================
третья попытка:
convert: 0x0FBC0634 = 263980596 dec адрес юнита 0FBC0634 выдала ConvertHandle
convert: 0x12877648 = 310867528 dec адрес стоимости юнита 12877648 нашел через artmoney
convert: 310867496 dec = 0x12877628 адрес 310867496 типа выдал GetUnitDataDefById через дебаг на экран
310867528-310867496=32 все верно
function GetUnitPrice takes integer id returns integer
	local integer a =GetUnitDataDefById(id)

	if a>0 then
		return RMem(a + 32)
	endif
	return 0
endfunction
function SetUnitPrice takes integer id, integer gold returns integer
	local integer a =GetUnitDataDefById(id)

	if a>0 then
        call WMem(a + 32, gold)
	endif
	return 0
endfunction
проще можно было с программой Cheat Engine (CE), которую представил драколич. Но я не подумал. Надо было брать GetUnitDataDefById, и полученное значение вставлять в Cheat Engine (CE)
Просто не знал. Мне просто повезло, я тыкался до ночи. И как-то додумался. Просто знаете, эти значения и описания могут быть все завязаны на тип (записаны в slk). Точно не утверждаю что так работает, но что-то много работал с slk-таблицами. Короче распространяются изменения на все итемы этого типа. Изменяете описание одного итема, распространяются на все. Просто догадался, ибо Data - база данных. Возможно можно изменить конкретный тип. Видел похожие функции типа GetObjectDataCaching. Пока не разобрался.

Или например, часто записанный код в 10-чной системе мало помогает в дебагах. Допустим, хочу узнать какой это артефакт сработал, если копии несколько. Но дебаг показывает слишком большие номера, например 1697662293. Такое трудно запомнить. Необходимо перевести в 256-ричную. Чтоб не утруждал себя лишней работой. Ну мало ли. Или в прелоад записать, и онлайне обработать. Это не есть решение, так как можно получше вычислить что за объект.

Или можно хранить в двоичном коде какую-нибудь информацию. хотя постоянно придется перебирать символы
1010 - код состоит из 4 символов
первый символ - может ли рабочий бегать (1 - да, или 0 - нет), второй символ - может ли спать, третий - может ли плавать и так далее. главное придумать.

Вот несколько примерных систем (здесь представлен мой разбор, это полезно для развития):
циклом перебираем каждый массив и сравниваем строчный символ ASCII или HEX. Если символы одинаковы, выдаст номер массива
за основу взята система счисления Jon и ScorpioT1000 (+ доработана и добавлено).
xgm.guru/p/wc3/58159 библиотека функции
Перейдем теперь к недостаткам системы, я вот доработал систему по-своему. Дело в том, что систему, которую я предоставил выше, была создана не мной. Она была у меня первый эталоном красоты и по понятлевее что ли. Обычно многие на Cjass и Vjass делают. Но она у меня не работала, и я оставлял все это дело в долгий ящик. Так как конвертация систем счисления не очень то и нужная вещь в моей карте, ведь в интернете полно онлайн-калькуляторов-переводчиков. Если бы я искал бы дольше, мог бы и найти систему счисления. Сейчас времени у меня полно, поэтому решил делать систему. Как оказалось позже, можно было использовать StringHash. Тогда мало, что понимал в системах счислениях (так как не понимал).
Сейчас намного больше подучил, начинаю соображать. Например, вы можете узнать из чего состоит равкод xgm.guru/p/wc3/rawcode-to-string У каждой системы определенное кол-во символов, у каждой системы свой алфавит или таблица, свой номер. Но об этом чуть позже.
чтобы понять принцип работы - можно посмотреть вот этот пример xgm.guru/p/wc3/rawcode-to-string
Еще примеры
Конечно эта система работает так (см. ниже на скрине)
Вернемся к той выбранной выше системе. Но у нее сохранились недостатки, она не работала. Ошибка была в хранении данных по индексу, мы не могли сохранить массиве число или строку. Ошибка была в функции S2Ix. Она старая, ее немного даже правил ScorpioT1000.
function S2Ix takes string s returns integer
    //return GetHandleId(s) // changed, 20.03.2012
    return StringHash(s) // changed by ScorpioT1000, 03.04.2012
    //return s
    //return 0
endfunction
Из всех предложенных вариантов осталось бы использовать StringHash
return StringHash(s) это не работает так как значения слишком большие. число "0" возвращает -242600650, "1" возвращает 1132341824. Эти числа предполагалось использовать в индексах массива для заполнения бд. А размер индекса 8192. Если число > 8192, вар перезаписывает как ноль или не может записать. Поэтому при работе всегда возвращает ноль. Используется только в хэше.
Поэтому использовать лучше в качестве хранения хэш-таблицу
"H" = 72
SaveStr(hash,StringHash("72"),1,"H")
LoadStr(hash,StringHash("72"),1)
SaveInteger(hash,StringHash("H"),1,72)
LoadInteger(hash,StringHash("H"),1)
Читал конечно про эту функцию в статье xgm.guru/p/blog-bahek/157979 но ничего не понял
У меня StringHash не зашел, поэтому я пошел по-другому пути. В функции мне надо, чтобы строка возвращала число. Как это сделать? Конечно циклом, я перебирал сравнивал строку с каждым массивом. И если такой символ есть, мне выдаст номер массива.
код системы
globals
    integer array Pow2x //возводит число 2 в n степень - позволяет получить готовое, а не возводить в степерь по 20 раз
    integer array Pow8x //возводит число 8 в n степень
    integer array Pow16x //возводит число 16 в n степень
    integer array Pow256x //возводит число 256 в n степень
    string  array CharMap2x16 //позволяет перебирать триады (3 разряда) из двоичного кода, своего рода заранее забитая таблица
    string  array CharMap2x8 //позволяет перебирать тетрады (4 разряда) из двоичного кода, своего рода заранее забитая таблица
    string  array CharMap16 //хранит символ 16-ричной сс, в индексе массива записан номер символа, а в строке символ. учавствует переборе, и также собирает символы в 16-ричный код
    string  array CharMap256 //хранит символ 256-ричной сс. в индексе массива записан номер символа, а в строке символ. учавствует переборе, и также собирает символы в 4-мтроковой равкод
    integer array CharInx16 //хранит номер символа 16-ричной сс. возвращает число. позволяет возвращать в 10-чное число
    integer array CharInx256 //хранит номер символа 16-ричной сс. возвращает число. позволяет возвращать в 10-чное число
endglobals


//function S2Ix takes string s returns integer
    //return GetHandleId(s) // changed, 20.03.2012
    //return StringHash(s) // changed by ScorpioT1000, 03.04.2012
    //return s
    //return 0
//endfunction




function Str2Int256 takes string s returns integer
    local integer i = 32
    local integer n=-1
    
    loop
        if s==CharMap256[i] then
            set n = i
        endif
        exitwhen (i>126 or s==CharMap256[i])
        set i = i + 1
    endloop
    
    return n //если такого символа не существует вернет -1, иначе вар фаталит с ошибкой

endfunction

function Str2Int16 takes string s returns integer
    local integer i = 0
    local integer n=-1
    
    loop
        if s==CharMap16[i] then
            set n = i
        endif
        exitwhen (i>16 or s==CharMap16[i])
        set i = i + 1
    endloop
    
    return n //если такого символа не существует вернет -1, иначе вар фаталит с ошибкой

endfunction


function ASCII2DEC takes string num256 returns integer
    local integer num10 = 0
    local integer i = 0
    local integer len = StringLength(num256)
    loop
        exitwhen i >= len
        set num10 = num10 + CharInx256[Str2Int256(SubString(num256, i, i+1))] * Pow256x[len-i-1]
        set i = i + 1
    endloop
    return num10
endfunction

function DEC2ASCII takes integer num10 returns string
    local string num256 = ""
    local integer i = 3
    local integer CodeCh
    loop
        exitwhen i < 0
        set CodeCh = 0
        loop
            exitwhen num10 < Pow256x[i]
            set CodeCh = CodeCh + 1
            set num10 = num10 - Pow256x[i]
        endloop
        if CodeCh > 0 then
            set num256 = num256 + CharMap256[CodeCh]
        endif
        set i = i - 1
    endloop
    return num256
endfunction

function DEC2Binary takes integer num10 returns string
    local string s1 = ""
    local string s2 = ""
    
    local integer e = num10
    local integer C = num10
    
    loop
        set e = e/2 //делим число e на основание 2, до сих пор пока число e не станет меньше или равно 1
        set s1 = s1 + I2S(ModuloInteger(C,2)) //извлекаем остаток при делении на основание
        set C = e //перезаписываем так как число e изменилось, и от него будет брать остаток
        exitwhen e <= 0 //делится число до сих пор пока не станет равно или меньше 1
    endloop
    
    set C = StringLength(s1) //кол-во рядов
    set e = C
    
    call BJDebugMsg("Получилось при делений на основание 2: " + s1 +". Кол-во рялов - " + I2S(C))
    call BJDebugMsg("Переворачиваем символы")
    
    loop
        exitwhen e < 1
        set s2 = s2 + SubString(s1, e-1, e)
        call BJDebugMsg(SubString(s1, e-1, e))
        set e = e - 1
    endloop
    
    return s2
endfunction

function Binary2Octal takes string num2 returns string
    local string z1 = ""
    local string z2 = ""
    local integer len = StringLength(num2)
    local integer i = len
    local integer start 
    local integer k
    local integer n

    loop
        exitwhen i <= 0
        
        set start = i-3 //порядок строки
        if start <= 0 then //если порядок строки меньше 0, то выдает не символы. Поэтому делаем проверку
            set start = 0
        endif
        
        set z1 = SubString(num2, start, i)
        set k = 0
        loop
            exitwhen k>7
            if (S2I(z1)==S2I(CharMap2x8[k])) then //решающая функция это S2I иначе при переборе CharMap2x8 не всегда можно подобрать подходящую
                //так как варкрафт не добирает нулей при разложении на триады - 3 разряда (10101 = 10 101. тут у 10 нет нуля, 010). их походу самому придеться добавлять
                set z2 = z2 + I2S(k)
                set n = k
            endif
            set k=k+1
        endloop
    
        call BJDebugMsg(I2S(i) + " - выбрана триада: " + z1 + " получили из таблицы: " + I2S(n) + " это из 8-ричной системы "  )
        set i = i - 3
    endloop
    call BJDebugMsg("Переворачиваем символы")
    
    set k = StringLength(z2) //кол-во рядов
    set i = k
    set z1 = ""
    loop
        exitwhen k < 1
        set z1 = z1 + SubString(z2, k-1, k)
        call BJDebugMsg(SubString(z2, k-1, k))
        set k = k - 1
    endloop
    
    return z1
endfunction


function Binary2Hex takes string num2 returns string
    local string z1 = ""
    local string z2 = ""
    local integer len = StringLength(num2)
    local integer i = len
    local integer start 
    local integer k
    local integer n

    loop
        exitwhen i <= 0
        
        set start = i-4 //порядок строки
        if start <= 0 then //если порядок строки меньше 0, то выдает не символы. Поэтому делаем проверку
            set start = 0
        endif
        
        set z1 = SubString(num2, start, i)
        set k = 0
        loop
            exitwhen k>15
            if (S2I(z1)==S2I(CharMap2x16[k])) then //решающая функция это S2I иначе при переборе CharMap2x16 не всегда можно подобрать подходящую
                //так как варкрафт не добирает нулей при разложении на тетрады - 4 разряда (100101 = 10 0101. тут у 100 нет нуля, 0100). их походу самому придеться добавлять
                set z2 = z2 + CharMap16[k]
                set n = k
            endif
            set k=k+1
        endloop
    
        call BJDebugMsg(I2S(i) + " - выбрана Тетрада: " + z1 + " получили из таблицы: " + I2S(n) + " это из 8-ричной системы "  )
        set i = i - 4
    endloop
    call BJDebugMsg("Переворачиваем символы")
    
    set k = StringLength(z2) //кол-во рядов
    set i = k
    set z1 = ""
    loop
        exitwhen k < 1
        set z1 = z1 + SubString(z2, k-1, k)
        call BJDebugMsg(SubString(z2, k-1, k))
        set k = k - 1
    endloop
    
    return z1
endfunction

function Binary2DEC takes string num2 returns integer
    local integer num10 = 0
    local integer i = 0
    local integer len = StringLength(num2)
    loop
        exitwhen i >= len
        set num10 = num10 + S2I(SubString(num2, i, i+1)) * Pow2x[len-i-1]
        set i = i + 1
    endloop
    return num10
endfunction

function HEX2DEC takes string num16 returns integer
    local integer num10 = 0
    local integer i = 0
    local integer len = StringLength(num16)
    loop
        exitwhen i >= len
        set num10 = num10 + CharInx16[Str2Int256(SubString(num16, i, i+1))] * Pow16x[len-i-1]
        set i = i + 1
    endloop
    return num10
endfunction

function DEC2HEX takes integer num10 returns string
    local string num16 = ""
    local integer i = 7
    local integer CodeCh
    loop
        exitwhen i < 0
        set CodeCh = 0
        loop
            exitwhen num10 < Pow16x[i]
            set CodeCh = CodeCh + 1
            set num10 = num10 - Pow16x[i]
        endloop
        if CodeCh > 0 then
            set num16 = num16 + CharMap16[CodeCh]
        endif
        set i = i - 1
    endloop
    return num16
endfunction

//-

function ForLoadMap2 takes nothing returns nothing
    call BJDebugMsg("ЗАГРУЗКА 1")
    set CharInx16[Str2Int16("0")] = 0
    set CharInx16[Str2Int16("1")] = 1
    set CharInx16[Str2Int16("2")] = 2
    set CharInx16[Str2Int16("3")] = 3
    set CharInx16[Str2Int16("4")] = 4
    set CharInx16[Str2Int16("5")] = 5
    set CharInx16[Str2Int16("6")] = 6
    set CharInx16[Str2Int16("7")] = 7
    set CharInx16[Str2Int16("8")] = 8
    set CharInx16[Str2Int16("9")] = 9
    set CharInx16[Str2Int16("A")] = 10
    set CharInx16[Str2Int16("a")] = 10
    set CharInx16[Str2Int16("B")] = 11
    set CharInx16[Str2Int16("b")] = 11
    set CharInx16[Str2Int16("C")] = 12
    set CharInx16[Str2Int16("c")] = 12
    set CharInx16[Str2Int16("D")] = 13
    set CharInx16[Str2Int16("d")] = 13
    set CharInx16[Str2Int16("E")] = 14
    set CharInx16[Str2Int16("e")] = 14
    set CharInx16[Str2Int16("F")] = 15
    set CharInx16[Str2Int16("f")] = 15
    

    set CharInx256[Str2Int256("!")] = 33
    set CharInx256[Str2Int256(" ")] = 34
    set CharInx256[Str2Int256("#")] = 35
    set CharInx256[Str2Int256("$")] = 36
    set CharInx256[Str2Int256("%")] = 37
    set CharInx256[Str2Int256("&")] = 38
    set CharInx256[Str2Int256("'")] = 39
    set CharInx256[Str2Int256("(")] = 40
    set CharInx256[Str2Int256(")")] = 41
    set CharInx256[Str2Int256("*")] = 42
    set CharInx256[Str2Int256("+")] = 43
    set CharInx256[Str2Int256(",")] = 44
    set CharInx256[Str2Int256("-")] = 45
    set CharInx256[Str2Int256(".")] = 46
    set CharInx256[Str2Int256("/")] = 47
    set CharInx256[Str2Int256("0")] = 48
    set CharInx256[Str2Int256("1")] = 49
    set CharInx256[Str2Int256("2")] = 50
    set CharInx256[Str2Int256("3")] = 51
    set CharInx256[Str2Int256("4")] = 52
    set CharInx256[Str2Int256("5")] = 53
    set CharInx256[Str2Int256("6")] = 54
    set CharInx256[Str2Int256("7")] = 55
    set CharInx256[Str2Int256("8")] = 56
    set CharInx256[Str2Int256("9")] = 57
    set CharInx256[Str2Int256(":")] = 58
    set CharInx256[Str2Int256(";")] = 59
    set CharInx256[Str2Int256("<")] = 60
    set CharInx256[Str2Int256("=")] = 61
    set CharInx256[Str2Int256(">")] = 62
    set CharInx256[Str2Int256(".")] = 63
    set CharInx256[Str2Int256("@")] = 64
    set CharInx256[Str2Int256("A")] = 65
    set CharInx256[Str2Int256("B")] = 66
    set CharInx256[Str2Int256("C")] = 67 
    set CharInx256[Str2Int256("D")] = 68 
    set CharInx256[Str2Int256("E")] = 69 
    set CharInx256[Str2Int256("F")] = 70 
    set CharInx256[Str2Int256("G")] = 71 
    set CharInx256[Str2Int256("H")] = 72 
    set CharInx256[Str2Int256("I")] = 73 
    set CharInx256[Str2Int256("J")] = 74 
    set CharInx256[Str2Int256("K")] = 75 
    set CharInx256[Str2Int256("L")] = 76 
    set CharInx256[Str2Int256("M")] = 77 
    set CharInx256[Str2Int256("N")] = 78 
    set CharInx256[Str2Int256("O")] = 79 
    set CharInx256[Str2Int256("P")] = 80 
    set CharInx256[Str2Int256("Q")] = 81 
    set CharInx256[Str2Int256("R")] = 82 
    set CharInx256[Str2Int256("S")] = 83 
    set CharInx256[Str2Int256("T")] = 84 
    set CharInx256[Str2Int256("U")] = 85 
    set CharInx256[Str2Int256("V")] = 86 
    set CharInx256[Str2Int256("W")] = 87 
    set CharInx256[Str2Int256("X")] = 88
    set CharInx256[Str2Int256("Y")] = 89  
    set CharInx256[Str2Int256("Z")] = 90  
    set CharInx256[Str2Int256("[")] = 91
    set CharInx256[Str2Int256("]")] = 93  
    set CharInx256[Str2Int256("^")] = 94  
    set CharInx256[Str2Int256("_")] = 95   
    set CharInx256[Str2Int256("`")] = 96   
    set CharInx256[Str2Int256("a")] = 97   
    set CharInx256[Str2Int256("b")] = 98   
    set CharInx256[Str2Int256("c")] = 99   
    set CharInx256[Str2Int256("d")] = 100  
    set CharInx256[Str2Int256("e")] = 101   
    set CharInx256[Str2Int256("f")] = 102   
    set CharInx256[Str2Int256("g")] = 103   
    set CharInx256[Str2Int256("h")] = 104   
    set CharInx256[Str2Int256("i")] = 105   
    set CharInx256[Str2Int256("j")] = 106
    set CharInx256[Str2Int256("k")] = 107   
    set CharInx256[Str2Int256("l")] = 108   
    set CharInx256[Str2Int256("m")] = 109   
    set CharInx256[Str2Int256("n")] = 110   
    set CharInx256[Str2Int256("o")] = 111   
    set CharInx256[Str2Int256("p")] = 112   
    set CharInx256[Str2Int256("q")] = 113   
    set CharInx256[Str2Int256("r")] = 114   
    set CharInx256[Str2Int256("s")] = 115   
    set CharInx256[Str2Int256("t")] = 116    
    set CharInx256[Str2Int256("u")] = 117     
    set CharInx256[Str2Int256("v")] = 118
    set CharInx256[Str2Int256("w")] = 119     
    set CharInx256[Str2Int256("x")] = 120     
    set CharInx256[Str2Int256("y")] = 121     
    set CharInx256[Str2Int256("z")] = 122     
    set CharInx256[Str2Int256("{")] = 123     
    set CharInx256[Str2Int256("|")] = 124     
    set CharInx256[Str2Int256("}")] = 125     
    set CharInx256[Str2Int256("~")] = 126
    call BJDebugMsg("ЗАГРУЗКА 2")
endfunction



function ForLoadMap1 takes nothing returns nothing
    local string s
    
    call BJDebugMsg("СТАРТ")
//====================================
// Pow256x - число 256 в n-степени 
//  Pow256x нужен для вычисления, для работы с rawcode (в тос числе в переводе десятичной и 256-ричной систем)

//Напомню, что первый бит числа - знаковый бит, и он определяет будет ли оно положительным (0) или отрицательным (1). 
//Положительные числа идут от 0x00000000 (0dec) до 0x7fffffff (2147483647dec), отрицательные от 0xffffffff (-1dec) до 0x80000000 (-2147483648dec). 
//Что бы изменить знак числа надо инвертировать (где было 1 написать 0, где был 0 написать один) все биты числа и потом к нему прибавить 1.
// Короче (0x<hex-число> или 1x<hex-число>) это hex, короче 16-ричная система счисления

    set Pow256x[0] = 0x00000001 //256^0=1
    set Pow256x[1] = 0x00000100 //256^1=256 
    set Pow256x[2] = 0x00010000 //256^2=65536
    set Pow256x[3] = 0x01000000 //256^3=16777216
//====================================
// Pow16x - число 16 в n-степени 
//  Pow16x нужен для вычисления, для перевода из 16-ричной системы в десятичную, или наоборот.
    set Pow16x[0] = 0x00000001 //16^0=1
    set Pow16x[1] = 0x00000010 //16^1=16
    set Pow16x[2] = 0x00000100 //16^2=256
    set Pow16x[3] = 0x00001000 //16^3=4096
    set Pow16x[4] = 0x00010000 //16^4=65536
    set Pow16x[5] = 0x00100000 //16^5=1048576
    set Pow16x[6] = 0x01000000 //16^6=16777216
    set Pow16x[7] = 0x10000000 //16^7=268435456
//====================================
// Pow2x - число 2 в n-степени 
// Pow2x нужен для вычисления, для перевода из двоичной системы в десятичную.
//в качестве примера показан двоичный код из 32 символов, но в jass невозможно указать integer в двоичной (binary) системе счисления, но она очень важна для понимания всего материала.

//вместо 1000 0000 0000 0000 0000 0000 0000 0000 можно было поставить 10000000000000000000000000000000 = 2^31=2147483648
//НО: это не работает в варк, нельзя указывать в двоичной системе счисления. Поэтому пришлось указать заранее в 10-чной системе счисления
//если поставить двоичный код из 32 символов в jass, то система будет преобразовано не двоичную систему, а в 8-ричную. 
//короче в варкрафте не так работает 


    set Pow2x[0] = 1 //0000 0000 0000 0000 0000 0000 0000 0001 //2^0=1
    set Pow2x[1] = 2 //0000 0000 0000 0000 0000 0000 0000 0010 //2^1=2
    set Pow2x[2] = 4 //0000 0000 0000 0000 0000 0000 0000 0100 //2^2=4
    set Pow2x[3] = 8 //0000 0000 0000 0000 0000 0000 0000 1000 //2^3=8
    set Pow2x[4] = 16 //0000 0000 0000 0000 0000 0000 0001 0000 //2^4=16
    set Pow2x[5] = 32 //0000 0000 0000 0000 0000 0000 0010 0000 //2^5=32
    set Pow2x[6] = 64 //0000 0000 0000 0000 0000 0000 0100 0000 //2^6=64
    set Pow2x[7] = 128 //0000 0000 0000 0000 0000 0000 1000 0000 //2^7=128
    set Pow2x[8] = 256 //0000 0000 0000 0000 0000 0001 0000 0000 //2^8=256
    set Pow2x[9] = 512 //0000 0000 0000 0000 0000 0010 0000 0000 //2^9=512
    set Pow2x[10] =1024 //0000 0000 0000 0000 0000 0100 0000 0000 //2^10=1024
    set Pow2x[11] =2048 //0000 0000 0000 0000 0000 1000 0000 0000 //2^11=2048
    set Pow2x[12] =4096 //0000 0000 0000 0000 0001 0000 0000 0000 //2^12=4096
    set Pow2x[13] =8192 //0000 0000 0000 0000 0010 0000 0000 0000 //2^13=8192
    set Pow2x[14] =16384 //0000 0000 0000 0000 0100 0000 0000 0000 //2^14=16384
    set Pow2x[15] =32768 //0000 0000 0000 0000 1000 0000 0000 0000 //2^15=32768
    set Pow2x[16] =65536 //0000 0000 0000 0001 0000 0000 0000 0000 //2^16=65536
    set Pow2x[17] =131072 //0000 0000 0000 0010 0000 0000 0000 0000 //2^17=131072
    set Pow2x[18] =262144 //0000 0000 0000 0100 0000 0000 0000 0000 //2^18=262144
    set Pow2x[19] =524288 //0000 0000 0000 1000 0000 0000 0000 0000 //2^19=524288
    set Pow2x[20] =1048576 //0000 0000 0001 0000 0000 0000 0000 0000 //2^20=1048576
    set Pow2x[21] =2097152 //0000 0000 0010 0000 0000 0000 0000 0000 //2^21=2097152
    set Pow2x[22] =4194304 //0000 0000 0100 0000 0000 0000 0000 0000 //2^22=4194304
    set Pow2x[23] =8388608 //0000 0000 1000 0000 0000 0000 0000 0000 //2^23=8388608
    set Pow2x[24] =16777216 //0000 0001 0000 0000 0000 0000 0000 0000 //2^24=16777216
    set Pow2x[25] =33554432 //0000 0010 0000 0000 0000 0000 0000 0000 //2^25=33554432
    set Pow2x[26] =67108864 //0000 0100 0000 0000 0000 0000 0000 0000 //2^26=67108864
    set Pow2x[27] =134217728 //0000 1000 0000 0000 0000 0000 0000 0000 //2^27=134217728
    set Pow2x[28] =268435456 //0001 0000 0000 0000 0000 0000 0000 0000 //2^28=268435456
    set Pow2x[29] =536870912 //0010 0000 0000 0000 0000 0000 0000 0000 //2^29=536870912
    set Pow2x[30] =1073741824 //0100 0000 0000 0000 0000 0000 0000 0000 //2^30=1073741824
    set Pow2x[31] =2147483648 //1000 0000 0000 0000 0000 0000 0000 0000 //2^31=2147483648
    
//====================================
// Pow8x - число 8 в n-степени 
// Pow8x нужен для вычисления, для перевода из 8-ричной системы в десятичную.    
//Чтобы написать цифру в восьмеричной системе счисления мы должны приставить к ней 0
    set Pow8x[0] = 000000001 //8^0=1
    set Pow8x[1] = 000000010 //8^1=8
    set Pow8x[2] = 000000100 //8^2=64
    set Pow8x[3] = 000001000 //8^3=512
    set Pow8x[4] = 000010000 //8^4=4096
    set Pow8x[5] = 000100000 //8^5=32768
    set Pow8x[6] = 001000000 //8^6=262144
    set Pow8x[7] = 010000000 //8^7=2097152

    
    set CharMap16[0] = "0"
    set CharMap16[1] = "1"
    set CharMap16[2] = "2"
    set CharMap16[3] = "3"
    set CharMap16[4] = "4"
    set CharMap16[5] = "5"
    set CharMap16[6] = "6"
    set CharMap16[7] = "7"
    set CharMap16[8] = "8"
    set CharMap16[9] = "9"
    set CharMap16[10] = "a"
    set CharMap16[11] = "b"
    set CharMap16[12] = "c"
    set CharMap16[13] = "d"
    set CharMap16[14] = "e"
    set CharMap16[15] = "f"
    
    //Первые 128 символов стандарта Юникод — совпадают с соответствующими символами US-ASCII. 
    //символы от 0 до 32 это в основном управляющие символы, в которых не прописан графическое представление.
    
    
    set CharMap256[0]=null //спец. NOP
    set CharMap256[1]=null //спец. SOH
    set CharMap256[2]=null //спец. STX
    set CharMap256[3]=null //спец. ETX
    set CharMap256[4]=null //спец. EOT
    set CharMap256[5]=null //спец. ENQ
    set CharMap256[6]=null //спец. ACK
    set CharMap256[7]=null //спец. BEL
    
    set CharMap256[8]="\b" //символ Backspace
    set CharMap256[9]="\t" //horizontal tab
    set CharMap256[10]="\n" //LF line feed, new line
    set CharMap256[11]=null //спец. VT
    set CharMap256[12]="\f" //NP form feed
    set CharMap256[13]="\r"
    
    //графические символы
    set CharMap256[32] = " " //пробел Space
    set CharMap256[33] = "!"
    set CharMap256[34] = "\"" // \" - эти два знака означают ковычки ", иначе вар ругает
    set CharMap256[35] = "#"
    set CharMap256[36] = "$"
    set CharMap256[37] = "%"
    set CharMap256[38] = "&"
    set CharMap256[39] = "'"
    set CharMap256[40] = "("
    set CharMap256[41] = ")"
    set CharMap256[42] = "*"
    set CharMap256[43] = "+"
    set CharMap256[44] = ","
    set CharMap256[45] = "-"
    set CharMap256[46] = "."
    set CharMap256[47] = "/"
    set CharMap256[48] = "0"
    set CharMap256[49] = "1"
    set CharMap256[50] = "2"
    set CharMap256[51] = "3"
    set CharMap256[52] = "4"
    set CharMap256[53] = "5"
    set CharMap256[54] = "6"
    set CharMap256[55] = "7"
    set CharMap256[56] = "8"
    set CharMap256[57] = "9"
    set CharMap256[58] = ":"
    set CharMap256[59] = ";"
    set CharMap256[60] = "<"
    set CharMap256[61] = "="
    set CharMap256[62] = ">"
    set CharMap256[63] = "?"
    set CharMap256[64] = "@"
    set CharMap256[65] = "A"
    set CharMap256[66] = "B"
    set CharMap256[67] = "C"
    set CharMap256[68] = "D"
    set CharMap256[69] = "E" 
    set CharMap256[70] = "F"
    set CharMap256[71] = "G"
    set CharMap256[72] = "H"
    set CharMap256[73] = "I" 
    set CharMap256[74] = "J"
    set CharMap256[75] = "K" 
    set CharMap256[76] = "L" 
    set CharMap256[77] = "M" 
    set CharMap256[78] = "N"
    set CharMap256[79] = "O"
    set CharMap256[80] = "P"
    set CharMap256[81] = "Q"
    set CharMap256[82] = "R"
    set CharMap256[83] = "S"
    set CharMap256[84] = "T"
    set CharMap256[85] = "U" 
    set CharMap256[86] = "V"
    set CharMap256[87] = "W"
    set CharMap256[88] = "X" 
    set CharMap256[89] = "Y" 
    set CharMap256[90] = "Z"
    set CharMap256[91] = "["
    set CharMap256[92] = "\\" //такие символы как '\' при компиляции jasshelper выдает ошибку. Нужно ставить '\\', так как при компиляции у вас будет '\'
    set CharMap256[93] = "]" 
    set CharMap256[94] = "^"
    set CharMap256[95] = "_" 
    set CharMap256[96] = "`" 
    set CharMap256[97] = "a" 
    set CharMap256[98] = "b" 
    set CharMap256[99] = "c" 
    set CharMap256[100] = "d"  
    set CharMap256[101] = "e"
    set CharMap256[102] = "f" 
    set CharMap256[103] = "g"  
    set CharMap256[104] = "h"   
    set CharMap256[105] = "i" 
    set CharMap256[106] = "j"  
    set CharMap256[107] = "k"
    set CharMap256[108] = "l"  
    set CharMap256[109] = "m"
    set CharMap256[110] = "n"
    set CharMap256[111] = "o"
    set CharMap256[112] = "p"
    set CharMap256[113] = "q" 
    set CharMap256[114] = "r" 
    set CharMap256[115] = "s" 
    set CharMap256[116] = "t"  
    set CharMap256[117] = "u" 
    set CharMap256[118] = "v"  
    set CharMap256[119] = "w"
    set CharMap256[120] = "x"
    set CharMap256[121] = "y"
    set CharMap256[122] = "z"
    set CharMap256[123] = "{"  
    set CharMap256[124] = "|"  
    set CharMap256[125] = "}"  
    set CharMap256[126] = "~"
    set CharMap256[126] = null //127 - символ Delete 
    
    //остальные 128 символов - это национальные символы (у каждого языка свой стандарт, у английского есть еще расширенный дополнительный 128 символов)
    
    set CharMap256[128] = "Ђ"
    set CharMap256[129] = "Ѓ"
    set CharMap256[130] = "‚"
    set CharMap256[131] = "ѓ"
    set CharMap256[132] = "„"
    set CharMap256[133] = "…"
    set CharMap256[134] = "†"
    set CharMap256[135] = "‡"
    set CharMap256[136] = "€"
    set CharMap256[137] = "‰"
    set CharMap256[138] = "Љ"
    set CharMap256[139] = "‹ ‹"
    set CharMap256[140] = "Њ"
    set CharMap256[141] = "Ќ"
    set CharMap256[142] = "Ћ"
    set CharMap256[143] = "Џ"
    set CharMap256[144] = "ђ"
    set CharMap256[145] = "‘"
    set CharMap256[146] = "’"
    set CharMap256[147] = "“"
    set CharMap256[148] = "”"
    set CharMap256[149] = "•"
    set CharMap256[150] = "–"
    set CharMap256[151] = "—" //тут чуть больше чем у 153 символа, хоть это не заметно
    set CharMap256[152] = null //не понятно какой это символ
    set CharMap256[153] = "™"
    set CharMap256[154] = "љ"
    set CharMap256[155] = "›"
    set CharMap256[156] = "њ"
    set CharMap256[157] = "ќ"
    set CharMap256[158] = "ћ"
    set CharMap256[159] = "џ"
    set CharMap256[160] = null //тоже не понятно какой символ
    set CharMap256[161] = "Ў"
    set CharMap256[162] = "ў"
    set CharMap256[163] = "Ћ"
    set CharMap256[164] = "¤"
    set CharMap256[165] = "Ґ"
    set CharMap256[166] = "¦"
    set CharMap256[167] = "§"
    set CharMap256[168] = "Ё" //большая буква Ё
    set CharMap256[169] = "©"
    set CharMap256[170] = "Є"
    set CharMap256[171] = "«"
    set CharMap256[172] = "¬"
    set CharMap256[173] = null //не понятно какой символ
    set CharMap256[174] = "®" 
    set CharMap256[175] = "Ї"
    set CharMap256[176] = "°" //значок градус
    set CharMap256[177] = "±" //плюс-минус
    set CharMap256[178] = "І"
    set CharMap256[179] = "і"
    set CharMap256[180] = "ґ"
    set CharMap256[181] = "µ"
    set CharMap256[182] = "¶"
    set CharMap256[183] = "·"
    set CharMap256[184] = "ё" //буква ё
    set CharMap256[185] = "№"
    set CharMap256[186] = "є"
    set CharMap256[187] = "»"
    set CharMap256[188] = "ј"
    set CharMap256[189] = "Ѕ"
    set CharMap256[190] = "ѕ"
    set CharMap256[191] = "ї"
    set CharMap256[192] = "А"
    set CharMap256[193] = "Б"
    set CharMap256[194] = "В"
    set CharMap256[195] = "Г"
    set CharMap256[196] = "Д"
    set CharMap256[197] = "Е"
    set CharMap256[198] = "Ж"
    set CharMap256[199] = "З"
    set CharMap256[200] = "И"
    set CharMap256[201] = "Й"
    set CharMap256[202] = "К"
    set CharMap256[203] = "Л"
    set CharMap256[204] = "М"
    set CharMap256[205] = "Н"
    set CharMap256[206] = "О"
    set CharMap256[207] = "П"
    set CharMap256[208] = "Р"
    set CharMap256[209] = "С"
    set CharMap256[210] = "Т"
    set CharMap256[211] = "У"
    set CharMap256[212] = "Ф"
    set CharMap256[213] = "Х"
    set CharMap256[214] = "Ц"
    set CharMap256[215] = "Ч"
    set CharMap256[216] = "Ш"
    set CharMap256[217] = "Щ"
    set CharMap256[218] = "Ъ"
    set CharMap256[219] = "Ы"
    set CharMap256[220] = "Ь"
    set CharMap256[221] = "Э"
    set CharMap256[222] = "Ю"
    set CharMap256[223] = "Я"
    set CharMap256[224] = "а"
    set CharMap256[225] = "б"
    set CharMap256[226] = "в"
    set CharMap256[227] = "г"
    set CharMap256[228] = "д"
    set CharMap256[229] = "е"
    set CharMap256[230] = "ж"
    set CharMap256[231] = "з"
    set CharMap256[232] = "и"
    set CharMap256[233] = "й"
    set CharMap256[234] = "к"
    set CharMap256[235] = "л"
    set CharMap256[236] = "м"
    set CharMap256[237] = "н"
    set CharMap256[238] = "о"
    set CharMap256[239] = "п"
    set CharMap256[240] = "р"
    set CharMap256[241] = "с"
    set CharMap256[242] = "т"
    set CharMap256[243] = "у"
    set CharMap256[244] = "ф"
    set CharMap256[245] = "х"
    set CharMap256[246] = "ц"
    set CharMap256[247] = "ч"
    set CharMap256[248] = "ш"
    set CharMap256[249] = "щ"
    set CharMap256[250] = "ъ"
    set CharMap256[251] = "ы"
    set CharMap256[252] = "ь"
    set CharMap256[253] = "э"
    set CharMap256[254] = "ю"
    set CharMap256[255] = "я"
    
    //CharMap2x8 - эта переменная типа таблица для перевода из двоичной в 8-ричную. Очень нужна.
    //Для перевода числа в восьмеричную необходимо разбить число на триады. Например, 1000110 = 1 000 110 = 106 в 8-ричной системе
    //влево и вправо от запятой двоичное число разбивается на двоичные триады 423,6 = 100 010 011, 110 (пока реализованы только целые, реальные нет)
    //Или обратно по табличке, 144 = 001 100 100 = 1100100 в двоичной системе счисления
    //чтобы перевести обратно в двоичную систему необязательно использовать таблицу и перебирать массив CharMap2x8
    //можно добавить в варкрафт нолик = 0144=1100100, однако труднее будет вставить в строку 0, так как функция I2S обнуляет
    set CharMap2x8[0] = "000"
    set CharMap2x8[1] = "001"
    set CharMap2x8[2] = "010"
    set CharMap2x8[3] = "011"
    set CharMap2x8[4] = "100"
    set CharMap2x8[5] = "101"
    set CharMap2x8[6] = "110"
    set CharMap2x8[7] = "111"
    
    //CharMap2x16 - эта переменная типа таблица для перевода из двоичной в 16-ричную. Очень нужна.
    //Для перевода числа в 16-чную систему необходимо разбить число на тетрады. Например, 1000110 = 100 0110 = 46 в 16-ричной системе
    set CharMap2x16[0x0] = "0000" //0
    set CharMap2x16[0x1] = "0001" //1
    set CharMap2x16[0x2] = "0010" //2
    set CharMap2x16[0x3] = "0011" //3
    set CharMap2x16[0x4] = "0100" //4
    set CharMap2x16[0x5] = "0101" //5
    set CharMap2x16[0x6] = "0110" //6
    set CharMap2x16[0x7] = "0111" //7
    set CharMap2x16[0x8] = "1000" //8
    set CharMap2x16[0x9] = "1001" //9
    set CharMap2x16[0xa] = "1010" //10=A=a
    set CharMap2x16[0xb] = "1011" //11=B=b
    set CharMap2x16[0xc] = "1100" //12=C=c
    set CharMap2x16[0xd] = "1101" //13=D=d
    set CharMap2x16[0xe] = "1110" //14=E=e
    set CharMap2x16[0xf] = "1111" //15=F=d
    
    call BJDebugMsg("ЗАГРУЗКА 0")
    call ForLoadMap2()
endfunction

//===========================================================================
function InitTrig_R takes nothing returns nothing
    set gg_trg_R = CreateTrigger(  )
    //call TriggerRegisterGameEvent(gg_trg_R, EVENT_GAME_LOADED)
    call TriggerRegisterTimerEventSingle( gg_trg_R, 1.00 )
    call TriggerAddAction( gg_trg_R, function ForLoadMap1)
    //call ForLoadMap()
endfunction
Перевод символа (строчный символ String) в 256-число = функция Str2Int256
Перевод символа (строчный символ String) в 16-число = функция Str2Int16
Перевод 256-числа в 10-число = функция ASCII2DEC
Перевод 10-числа в 256-число = функция DEC2ASCII
Перевод 16-числа в 10-число = функция HEX2DEC
Перевод 10-числа в 16-число = функция DEC2HEX
Перевод 10-числа в двоичное = функция DEC2Binary
Перевод двоичного числа в 10-чное = функция Binary2DEC
Перевод двоичного числа в 8-ричное = функция Binary2Octal
Перевод двоичного числа в 16-ричное = функция Binary2Hex
система Faion - математические ухитрения с StringHash
кстати некоторые используют некоторые математические ухитрения с StringHash: делят на что-то, умножают и получают значения меньшие. Эти значения влезают в индекс массива. А в индекс массива максимум 8192.
int a = i[StringHash(s) / 0x1F0748 + 0x3EA]
там теперь нужно в базу данных вводить под каждый символ. Это нужно знать сколько вернет число StringHash, потом взять формулу и подсчитать. Взять калькулятор, и подсчитать.
Например, возьмем английский символ A:
'A' = 65 dec смотрите по таблице ASCII
StringHash("A") = -1587459251 dec вывел дебагом на экран, так как неизвестно как там подсчитывается. Но ссылка на подробный разбор StringHash кидал выше.
0x1F0748 hex = 2033480 dec можно взять калькулятором перевести
0x3EA hex = 1002 dec
(-1587459251/2033480) + 1002 = -780 + 1002 = 222 - это число для индекса массива
Если так считать вручную, то это будет очень и очень долго. Проще было записать в текстовый код с помощью прелоада xgm.guru/p/wc3/preexp :
код
function AddString takes string S returns nothing

local string A = I2S(StringHash(S))
local string B = I2S(0x1F0748)
local string C = I2S(0x3EA)
local string D = I2S(StringHash(S)/0x1F0748)
local string E = I2S(StringHash(S) / 0x1F0748 + 0x3EA)

local string a = "StringHash("  + S + ")" + " /0x1F0748 + 0x3EA = "
local string b = "(" + A + "/" + B + ")" + " + " + C  + " = " 
local string c = D + " + " + C + " = " //первое правило математики: сначало деление и умножение, а потом сложение/вычитание

call Preload( "---------"  )
call Preload( S + " = " + "StringHash(" + S + ") = " + A)
call Preload( a + b + c + E  )

endfunction
call Preload("хитрая ФОРМУЛА: <" + "StringHash(s) / 0x1F0748 + 0x3EA >")
call Preload("============")
call Preload("0x1F0748 hex = 2033480 dec")
call Preload("0x3EA oct = 1002 dec") 

call Preload( "============" )    
call AddString("A")
call AddString("B")
call PreloadGenEnd("save\\PreExp.txt") 
пример того что получил
Если открыть текстовик
function PreloadFiles takes nothing returns nothing

	call Preload( "хитрая ФОРМУЛА: <StringHash(s) / 0x1F0748 + 0x3EA >" )
	call Preload( "============" )
	call Preload( "0x1F0748 hex = 2033480 dec" )
	call Preload( "0x3EA oct = 1752 dec" )
	call Preload( "============" )
	call Preload( "---------" )
	call Preload( "A = StringHash(A) = -1587459251" )
	call Preload( "StringHash(A) /0x1F0748 + 0x3EA = (-1587459251/2033480) + 1002 = -780 + 1002 = 222" )
	call Preload( "---------" )
	call Preload( "B = StringHash(B) = -1676716706" )
	call Preload( "StringHash(B) /0x1F0748 + 0x3EA = (-1676716706/2033480) + 1002 = -824 + 1002 = 178" )
	call PreloadEnd( 490624.7 )

endfunction
вот карта пример с прелоадом xgm.guru/files/1774/208854/12.w3m
В принципе не трудно, создать свою базу. но зачем? есть готовое. Если что-то нужно проверить или доделать, то вы знаете как.
скачиваем от сюда xgm.guru/p/snw/70263
кстати такую схему видел не только в этой системе, на хайве находил www.hiveworkshop.com/threads/snippet-ascii.190746
система RAW2S - перебираем каждый символ в строке
При конвертации не обязательно использовать базу данных с кучу массивов на каждый символ, можно использовать строку. Здесь берется строка типа charMap. Является эталоном, некоторые разработчики даже в глобалку записывают. В введенной строке выбирается по одному. Сначала берется первый. И циклом перебирают похожий в эталонной строке charMap (короче суть в том что сравнивают символ с символом в эталонной строке. Если совпал, то все, символ наш. Что важное здесь? в строке charMap записывается обычно в строгом порядке. И перебором цикла помогает вытащить нужную позицию - номер, число.
function RAW2S takes integer value returns string
        local string charMap = ".................................!.#$%&'()*+,-./0123456789:;<=>.@ABCDEFGHIJKLMNOPQRS?TUVWXYZ[.]^_`abcdefghijklmnopqrstuvwxyz{|}~.........................................................?........................................................................"
        local string result = ""
        local integer remainingValue = value
        local integer charValue
        local integer byteno = 0

        loop
            set charValue = ModuloInteger(remainingValue, 256)
            set remainingValue = remainingValue / 256
            set result = SubString(charMap, charValue, charValue + 1) + result
     
            set byteno = byteno + 1
            exitwhen ( byteno == 4 )
        endloop

        return result
endfunction 

//===========================================================================
// Convert a integer id value into a 4-letter id code.
//в архивах WarCraft ScopteRectuS нашел следующий файл: war3.mpq/Scripts/Cheats.j (они похожи с RAW2S)
//
function DebugIdInteger2IdString takes integer value returns string
    local string charMap = ".................................!.#$%&'()*+,-./0123456789:;<=>.@ABCDEFGHIJKLMNOPQRS&#8203;TUVWXYZ[.]^_`abcdefghijklmnopqrstuvwxyz{|}~.........................................................&#8203;........................................................................"
    local string result = ""
    local integer remainingValue = value
    local integer charValue
    local integer byteno

    set byteno = 0
    loop
        set charValue = ModuloInteger(remainingValue, 256)
        set remainingValue = remainingValue / 256
        set result = SubString(charMap, charValue, charValue + 1) + result

        set byteno = byteno + 1
        exitwhen byteno == 4
    endloop
    return result
endfunction

//===========================================================================
по коду система берет остаток (см. скрин ниже)
по остатку от деления находит номер чара еще одна система - система FellGuard скидываю еще раз ссылку. только здесь не используют эталонную строку
function raw2s takes integer raw returns string
    local string s = ""   
    loop
        set s = sOutput[raw-(raw/256)*256] + s
        set raw = raw/256
    exitwhen raw==0
    endloop    
    return s
endfunction
не стал вписывать кучу других систем, найденных мной. Ведь они похожи. Но я все разные системы скинул в одну карту. Может быть одна из них вам понравится. ВОТ ПРИМЕР КАРТЫ
Знаю, что это лишнее. Будете говорить зачем это. Ведь есть кучу библиотек, статьей. Ведь здесь решил описать принцип работы систем конвертации. И обычно не всегда была доступна инфа, если кое-что не понимаешь.
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
14
11 месяцев назад
1
не стал вписывать кучу других систем, найденных мной. Ведь они похожи. Но я все разные системы скинул в одну карту. Может быть одна из них вам понравится. ВОТ ПРИМЕР КАРТЫ
а я вот впишу за тебя из твоей карты:
globals
    // User-defined
string array udg_sOutput
integer array udg_RAWINT
string array udg_RAWSTR

    // Generated
trigger gg_trg_R= null
trigger gg_trg_S= null
trigger gg_trg_AA= null
trigger gg_trg_BB= null
trigger gg_trg_TEST= null
trigger gg_trg_integer= null
trigger gg_trg_int_string= null
trigger gg_trg_string= null
trigger gg_trg_____________________________________001= null
trigger gg_trg_Int= null
trigger gg_trg_test= null
trigger gg_trg_____________________________________001_____________________u= null
trigger gg_trg_NNN= null
integer array Pow2x
integer array Pow8x
integer array Pow16x
integer array Pow256x
string array CharMap2x16
string array CharMap2x8
string array CharMap16
string array CharMap256
integer array CharInx16
integer array CharInx256


//JASSHelper struct globals:

endglobals


//===========================================================================
// 
// Еще одна карта
// 
//   Warcraft III map script
//   Generated by the Warcraft III World Editor
//   Date: Tue Jun 12 04:56:40 2018
//   Map Author: Неизвестно
// 
//===========================================================================

//***************************************************************************
//*
//*  Global Variables
//*
//***************************************************************************


function InitGlobals takes nothing returns nothing
    local integer i= 0
    set i=0
    loop
        exitwhen ( i > 1 )
        set udg_sOutput[i]=""
        set i=i + 1
    endloop

    set i=0
    loop
        exitwhen ( i > 1 )
        set udg_RAWINT[i]=0
        set i=i + 1
    endloop

    set i=0
    loop
        exitwhen ( i > 1 )
        set udg_RAWSTR[i]=""
        set i=i + 1
    endloop

endfunction

//***************************************************************************
//*
//*  Custom Script Code
//*
//***************************************************************************
//TESH.scrollpos=0
//TESH.alwaysfold=0

//***************************************************************************
//*
//*  Triggers
//*
//***************************************************************************

//===========================================================================
// Trigger: R
//
// Перевод символа в 256-число = Str2Int256
// Перевод символа в 16-число = Str2Int16
// Перевод 256-числа в 10-число = ASCII2DEC
// Перевод 10-числа в 256-число = DEC2ASCII
// Перевод 16-числа в 10-число = HEX2DEC
// Перевод 10-числа в 16-число = DEC2HEX
// Перевод 10-числа в двоичное = DEC2Binary
// Перевод двоичного числа в 10-чное = Binary2DEC
// Перевод двоичного числа в 8-ричное = Binary2Octal
// Перевод двоичного числа в 16-ричное = Binary2Hex
//===========================================================================
//TESH.scrollpos=180
//TESH.alwaysfold=0


//function S2Ix takes string s returns integer
    //return GetHandleId(s) // changed, 20.03.2012
    //return StringHash(s) // changed by ScorpioT1000, 03.04.2012
    //return s
    //return 0
//endfunction




function Str2Int256 takes string s returns integer
    local integer i= 32
    local integer n=- 1
    
    loop
        if s == CharMap256[i] then
            set n=i
        endif
        exitwhen ( i > 126 or s == CharMap256[i] )
        set i=i + 1
    endloop
    
    return n //если такого символа не существует вернет -1, иначе вар фаталит с ошибкой

endfunction

function Str2Int16 takes string s returns integer
    local integer i= 0
    local integer n=- 1
    
    loop
        if s == CharMap16[i] then
            set n=i
        endif
        exitwhen ( i > 16 or s == CharMap16[i] )
        set i=i + 1
    endloop
    
    return n //если такого символа не существует вернет -1, иначе вар фаталит с ошибкой

endfunction


function ASCII2DEC takes string num256 returns integer
    local integer num10= 0
    local integer i= 0
    local integer len= StringLength(num256)
    loop
        exitwhen i >= len
        set num10=num10 + CharInx256[Str2Int256(SubString(num256, i, i + 1))] * Pow256x[len - i - 1]
        set i=i + 1
    endloop
    return num10
endfunction

function DEC2ASCII takes integer num10 returns string
    local string num256= ""
    local integer i= 3
    local integer CodeCh
    loop
        exitwhen i < 0
        set CodeCh=0
        loop
            exitwhen num10 < Pow256x[i]
            set CodeCh=CodeCh + 1
            set num10=num10 - Pow256x[i]
        endloop
        if CodeCh > 0 then
            set num256=num256 + CharMap256[CodeCh]
        endif
        set i=i - 1
    endloop
    return num256
endfunction

function DEC2Binary takes integer num10 returns string
    local string s1= ""
    local string s2= ""
    
    local integer e= num10
    local integer C= num10
    
    loop
        set e=e / 2 //делим число e на основание 2, до сих пор пока число e не станет меньше или равно 1
        set s1=s1 + I2S(ModuloInteger(C, 2)) //извлекаем остаток при делении на основание
        set C=e //перезаписываем так как число e изменилось, и от него будет брать остаток
        exitwhen e <= 0 //делится число до сих пор пока не станет равно или меньше 1
    endloop
    
    set C=StringLength(s1) //кол-во рядов
    set e=C
    
    call BJDebugMsg("Получилось при делений на основание 2: " + s1 + ". Кол-во рялов - " + I2S(C))
    call BJDebugMsg("Переворачиваем символы")
    
    loop
        exitwhen e < 1
        set s2=s2 + SubString(s1, e - 1, e)
        call BJDebugMsg(SubString(s1, e - 1, e))
        set e=e - 1
    endloop
    
    return s2
endfunction

function Binary2Octal takes string num2 returns string
    local string z1= ""
    local string z2= ""
    local integer len= StringLength(num2)
    local integer i= len
    local integer start
    local integer k
    local integer n

    loop
        exitwhen i <= 0
        
        set start=i - 3 //порядок строки
        if start <= 0 then //если порядок строки меньше 0, то выдает не символы. Поэтому делаем проверку
            set start=0
        endif
        
        set z1=SubString(num2, start, i)
        set k=0
        loop
            exitwhen k > 7
            if ( S2I(z1) == S2I(CharMap2x8[k]) ) then //решающая функция это S2I иначе при переборе CharMap2x8 не всегда можно подобрать подходящую
                //так как варкрафт не добирает нулей при разложении на триады - 3 разряда (10101 = 10 101. тут у 10 нет нуля, 010). их походу самому придеться добавлять
                set z2=z2 + I2S(k)
                set n=k
            endif
            set k=k + 1
        endloop
    
        call BJDebugMsg(I2S(i) + " - выбрана триада: " + z1 + " получили из таблицы: " + I2S(n) + " это из 8-ричной системы ")
        set i=i - 3
    endloop
    call BJDebugMsg("Переворачиваем символы")
    
    set k=StringLength(z2) //кол-во рядов
    set i=k
    set z1=""
    loop
        exitwhen k < 1
        set z1=z1 + SubString(z2, k - 1, k)
        call BJDebugMsg(SubString(z2, k - 1, k))
        set k=k - 1
    endloop
    
    return z1
endfunction


function Binary2Hex takes string num2 returns string
    local string z1= ""
    local string z2= ""
    local integer len= StringLength(num2)
    local integer i= len
    local integer start
    local integer k
    local integer n

    loop
        exitwhen i <= 0
        
        set start=i - 4 //порядок строки
        if start <= 0 then //если порядок строки меньше 0, то выдает не символы. Поэтому делаем проверку
            set start=0
        endif
        
        set z1=SubString(num2, start, i)
        set k=0
        loop
            exitwhen k > 15
            if ( S2I(z1) == S2I(CharMap2x16[k]) ) then //решающая функция это S2I иначе при переборе CharMap2x16 не всегда можно подобрать подходящую
                //так как варкрафт не добирает нулей при разложении на тетрады - 4 разряда (100101 = 10 0101. тут у 100 нет нуля, 0100). их походу самому придеться добавлять
                set z2=z2 + CharMap16[k]
                set n=k
            endif
            set k=k + 1
        endloop
    
        call BJDebugMsg(I2S(i) + " - выбрана Тетрада: " + z1 + " получили из таблицы: " + I2S(n) + " это из 8-ричной системы ")
        set i=i - 4
    endloop
    call BJDebugMsg("Переворачиваем символы")
    
    set k=StringLength(z2) //кол-во рядов
    set i=k
    set z1=""
    loop
        exitwhen k < 1
        set z1=z1 + SubString(z2, k - 1, k)
        call BJDebugMsg(SubString(z2, k - 1, k))
        set k=k - 1
    endloop
    
    return z1
endfunction

function Binary2DEC takes string num2 returns integer
    local integer num10= 0
    local integer i= 0
    local integer len= StringLength(num2)
    loop
        exitwhen i >= len
        set num10=num10 + S2I(SubString(num2, i, i + 1)) * Pow2x[len - i - 1]
        set i=i + 1
    endloop
    return num10
endfunction

function HEX2DEC takes string num16 returns integer
    local integer num10= 0
    local integer i= 0
    local integer len= StringLength(num16)
    loop
        exitwhen i >= len
        set num10=num10 + CharInx16[Str2Int256(SubString(num16, i, i + 1))] * Pow16x[len - i - 1]
        set i=i + 1
    endloop
    return num10
endfunction

function DEC2HEX takes integer num10 returns string
    local string num16= ""
    local integer i= 7
    local integer CodeCh
    loop
        exitwhen i < 0
        set CodeCh=0
        loop
            exitwhen num10 < Pow16x[i]
            set CodeCh=CodeCh + 1
            set num10=num10 - Pow16x[i]
        endloop
        if CodeCh > 0 then
            set num16=num16 + CharMap16[CodeCh]
        endif
        set i=i - 1
    endloop
    return num16
endfunction

//-

function ForLoadMap2 takes nothing returns nothing
    call BJDebugMsg("ЗАГРУЗКА 1")
    set CharInx16[Str2Int16("0")]=0
    set CharInx16[Str2Int16("1")]=1
    set CharInx16[Str2Int16("2")]=2
    set CharInx16[Str2Int16("3")]=3
    set CharInx16[Str2Int16("4")]=4
    set CharInx16[Str2Int16("5")]=5
    set CharInx16[Str2Int16("6")]=6
    set CharInx16[Str2Int16("7")]=7
    set CharInx16[Str2Int16("8")]=8
    set CharInx16[Str2Int16("9")]=9
    set CharInx16[Str2Int16("A")]=10
    set CharInx16[Str2Int16("a")]=10
    set CharInx16[Str2Int16("B")]=11
    set CharInx16[Str2Int16("b")]=11
    set CharInx16[Str2Int16("C")]=12
    set CharInx16[Str2Int16("c")]=12
    set CharInx16[Str2Int16("D")]=13
    set CharInx16[Str2Int16("d")]=13
    set CharInx16[Str2Int16("E")]=14
    set CharInx16[Str2Int16("e")]=14
    set CharInx16[Str2Int16("F")]=15
    set CharInx16[Str2Int16("f")]=15
    

    set CharInx256[Str2Int256("!")]=33
    set CharInx256[Str2Int256(" ")]=34
    set CharInx256[Str2Int256("#")]=35
    set CharInx256[Str2Int256("$")]=36
    set CharInx256[Str2Int256("%")]=37
    set CharInx256[Str2Int256("&")]=38
    set CharInx256[Str2Int256("'")]=39
    set CharInx256[Str2Int256("(")]=40
    set CharInx256[Str2Int256(")")]=41
    set CharInx256[Str2Int256("*")]=42
    set CharInx256[Str2Int256("+")]=43
    set CharInx256[Str2Int256(",")]=44
    set CharInx256[Str2Int256("-")]=45
    set CharInx256[Str2Int256(".")]=46
    set CharInx256[Str2Int256("/")]=47
    set CharInx256[Str2Int256("0")]=48
    set CharInx256[Str2Int256("1")]=49
    set CharInx256[Str2Int256("2")]=50
    set CharInx256[Str2Int256("3")]=51
    set CharInx256[Str2Int256("4")]=52
    set CharInx256[Str2Int256("5")]=53
    set CharInx256[Str2Int256("6")]=54
    set CharInx256[Str2Int256("7")]=55
    set CharInx256[Str2Int256("8")]=56
    set CharInx256[Str2Int256("9")]=57
    set CharInx256[Str2Int256(":")]=58
    set CharInx256[Str2Int256(";")]=59
    set CharInx256[Str2Int256("<")]=60
    set CharInx256[Str2Int256("=")]=61
    set CharInx256[Str2Int256(">")]=62
    set CharInx256[Str2Int256(".")]=63
    set CharInx256[Str2Int256("@")]=64
    set CharInx256[Str2Int256("A")]=65
    set CharInx256[Str2Int256("B")]=66
    set CharInx256[Str2Int256("C")]=67
    set CharInx256[Str2Int256("D")]=68
    set CharInx256[Str2Int256("E")]=69
    set CharInx256[Str2Int256("F")]=70
    set CharInx256[Str2Int256("G")]=71
    set CharInx256[Str2Int256("H")]=72
    set CharInx256[Str2Int256("I")]=73
    set CharInx256[Str2Int256("J")]=74
    set CharInx256[Str2Int256("K")]=75
    set CharInx256[Str2Int256("L")]=76
    set CharInx256[Str2Int256("M")]=77
    set CharInx256[Str2Int256("N")]=78
    set CharInx256[Str2Int256("O")]=79
    set CharInx256[Str2Int256("P")]=80
    set CharInx256[Str2Int256("Q")]=81
    set CharInx256[Str2Int256("R")]=82
    set CharInx256[Str2Int256("S")]=83
    set CharInx256[Str2Int256("T")]=84
    set CharInx256[Str2Int256("U")]=85
    set CharInx256[Str2Int256("V")]=86
    set CharInx256[Str2Int256("W")]=87
    set CharInx256[Str2Int256("X")]=88
    set CharInx256[Str2Int256("Y")]=89
    set CharInx256[Str2Int256("Z")]=90
    set CharInx256[Str2Int256("[")]=91
    set CharInx256[Str2Int256("]")]=93
    set CharInx256[Str2Int256("^")]=94
    set CharInx256[Str2Int256("_")]=95
    set CharInx256[Str2Int256("`")]=96
    set CharInx256[Str2Int256("a")]=97
    set CharInx256[Str2Int256("b")]=98
    set CharInx256[Str2Int256("c")]=99
    set CharInx256[Str2Int256("d")]=100
    set CharInx256[Str2Int256("e")]=101
    set CharInx256[Str2Int256("f")]=102
    set CharInx256[Str2Int256("g")]=103
    set CharInx256[Str2Int256("h")]=104
    set CharInx256[Str2Int256("i")]=105
    set CharInx256[Str2Int256("j")]=106
    set CharInx256[Str2Int256("k")]=107
    set CharInx256[Str2Int256("l")]=108
    set CharInx256[Str2Int256("m")]=109
    set CharInx256[Str2Int256("n")]=110
    set CharInx256[Str2Int256("o")]=111
    set CharInx256[Str2Int256("p")]=112
    set CharInx256[Str2Int256("q")]=113
    set CharInx256[Str2Int256("r")]=114
    set CharInx256[Str2Int256("s")]=115
    set CharInx256[Str2Int256("t")]=116
    set CharInx256[Str2Int256("u")]=117
    set CharInx256[Str2Int256("v")]=118
    set CharInx256[Str2Int256("w")]=119
    set CharInx256[Str2Int256("x")]=120
    set CharInx256[Str2Int256("y")]=121
    set CharInx256[Str2Int256("z")]=122
    set CharInx256[Str2Int256("{")]=123
    set CharInx256[Str2Int256("|")]=124
    set CharInx256[Str2Int256("}")]=125
    set CharInx256[Str2Int256("~")]=126
    call BJDebugMsg("ЗАГРУЗКА 2")
endfunction



function ForLoadMap1 takes nothing returns nothing
    local string s
    
    call BJDebugMsg("СТАРТ")
//====================================
// Pow256x - число 256 в n-степени 
//  Pow256x нужен для вычисления, для работы с rawcode (в тос числе в переводе десятичной и 256-ричной систем)

//Напомню, что первый бит числа - знаковый бит, и он определяет будет ли оно положительным (0) или отрицательным (1). 
//Положительные числа идут от 0x00000000 (0dec) до 0x7fffffff (2147483647dec), отрицательные от 0xffffffff (-1dec) до 0x80000000 (-2147483648dec). 
//Что бы изменить знак числа надо инвертировать (где было 1 написать 0, где был 0 написать один) все биты числа и потом к нему прибавить 1.
// Короче (0x<hex-число> или 1x<hex-число>) это hex, короче 16-ричная система счисления

    set Pow256x[0]=0x00000001 //256^0=1
    set Pow256x[1]=0x00000100 //256^1=256 
    set Pow256x[2]=0x00010000 //256^2=65536
    set Pow256x[3]=0x01000000 //256^3=16777216
//====================================
// Pow16x - число 16 в n-степени 
//  Pow16x нужен для вычисления, для перевода из 16-ричной системы в десятичную, или наоборот.
    set Pow16x[0]=0x00000001 //16^0=1
    set Pow16x[1]=0x00000010 //16^1=16
    set Pow16x[2]=0x00000100 //16^2=256
    set Pow16x[3]=0x00001000 //16^3=4096
    set Pow16x[4]=0x00010000 //16^4=65536
    set Pow16x[5]=0x00100000 //16^5=1048576
    set Pow16x[6]=0x01000000 //16^6=16777216
    set Pow16x[7]=0x10000000 //16^7=268435456
//====================================
// Pow2x - число 2 в n-степени 
// Pow2x нужен для вычисления, для перевода из двоичной системы в десятичную.
//в качестве примера показан двоичный код из 32 символов, но в jass невозможно указать integer в двоичной (binary) системе счисления, но она очень важна для понимания всего материала.

//вместо 1000 0000 0000 0000 0000 0000 0000 0000 можно было поставить 10000000000000000000000000000000 = 2^31=2147483648
//НО: это не работает в варк, нельзя указывать в двоичной системе счисления. Поэтому пришлось указать заранее в 10-чной системе счисления
//если поставить двоичный код из 32 символов в jass, то система будет преобразовано не двоичную систему, а в 8-ричную. 
//короче в варкрафте не так работает 


    set Pow2x[0]=1 //0000 0000 0000 0000 0000 0000 0000 0001 //2^0=1
    set Pow2x[1]=2 //0000 0000 0000 0000 0000 0000 0000 0010 //2^1=2
    set Pow2x[2]=4 //0000 0000 0000 0000 0000 0000 0000 0100 //2^2=4
    set Pow2x[3]=8 //0000 0000 0000 0000 0000 0000 0000 1000 //2^3=8
    set Pow2x[4]=16 //0000 0000 0000 0000 0000 0000 0001 0000 //2^4=16
    set Pow2x[5]=32 //0000 0000 0000 0000 0000 0000 0010 0000 //2^5=32
    set Pow2x[6]=64 //0000 0000 0000 0000 0000 0000 0100 0000 //2^6=64
    set Pow2x[7]=128 //0000 0000 0000 0000 0000 0000 1000 0000 //2^7=128
    set Pow2x[8]=256 //0000 0000 0000 0000 0000 0001 0000 0000 //2^8=256
    set Pow2x[9]=512 //0000 0000 0000 0000 0000 0010 0000 0000 //2^9=512
    set Pow2x[10]=1024 //0000 0000 0000 0000 0000 0100 0000 0000 //2^10=1024
    set Pow2x[11]=2048 //0000 0000 0000 0000 0000 1000 0000 0000 //2^11=2048
    set Pow2x[12]=4096 //0000 0000 0000 0000 0001 0000 0000 0000 //2^12=4096
    set Pow2x[13]=8192 //0000 0000 0000 0000 0010 0000 0000 0000 //2^13=8192
    set Pow2x[14]=16384 //0000 0000 0000 0000 0100 0000 0000 0000 //2^14=16384
    set Pow2x[15]=32768 //0000 0000 0000 0000 1000 0000 0000 0000 //2^15=32768
    set Pow2x[16]=65536 //0000 0000 0000 0001 0000 0000 0000 0000 //2^16=65536
    set Pow2x[17]=131072 //0000 0000 0000 0010 0000 0000 0000 0000 //2^17=131072
    set Pow2x[18]=262144 //0000 0000 0000 0100 0000 0000 0000 0000 //2^18=262144
    set Pow2x[19]=524288 //0000 0000 0000 1000 0000 0000 0000 0000 //2^19=524288
    set Pow2x[20]=1048576 //0000 0000 0001 0000 0000 0000 0000 0000 //2^20=1048576
    set Pow2x[21]=2097152 //0000 0000 0010 0000 0000 0000 0000 0000 //2^21=2097152
    set Pow2x[22]=4194304 //0000 0000 0100 0000 0000 0000 0000 0000 //2^22=4194304
    set Pow2x[23]=8388608 //0000 0000 1000 0000 0000 0000 0000 0000 //2^23=8388608
    set Pow2x[24]=16777216 //0000 0001 0000 0000 0000 0000 0000 0000 //2^24=16777216
    set Pow2x[25]=33554432 //0000 0010 0000 0000 0000 0000 0000 0000 //2^25=33554432
    set Pow2x[26]=67108864 //0000 0100 0000 0000 0000 0000 0000 0000 //2^26=67108864
    set Pow2x[27]=134217728 //0000 1000 0000 0000 0000 0000 0000 0000 //2^27=134217728
    set Pow2x[28]=268435456 //0001 0000 0000 0000 0000 0000 0000 0000 //2^28=268435456
    set Pow2x[29]=536870912 //0010 0000 0000 0000 0000 0000 0000 0000 //2^29=536870912
    set Pow2x[30]=1073741824 //0100 0000 0000 0000 0000 0000 0000 0000 //2^30=1073741824
    set Pow2x[31]=2147483648 //1000 0000 0000 0000 0000 0000 0000 0000 //2^31=2147483648
    
//====================================
// Pow8x - число 8 в n-степени 
// Pow8x нужен для вычисления, для перевода из 8-ричной системы в десятичную.    
//Чтобы написать цифру в восьмеричной системе счисления мы должны приставить к ней 0
    set Pow8x[0]=000000001 //8^0=1
    set Pow8x[1]=000000010 //8^1=8
    set Pow8x[2]=000000100 //8^2=64
    set Pow8x[3]=000001000 //8^3=512
    set Pow8x[4]=000010000 //8^4=4096
    set Pow8x[5]=000100000 //8^5=32768
    set Pow8x[6]=001000000 //8^6=262144
    set Pow8x[7]=010000000 //8^7=2097152

    
    set CharMap16[0]="0"
    set CharMap16[1]="1"
    set CharMap16[2]="2"
    set CharMap16[3]="3"
    set CharMap16[4]="4"
    set CharMap16[5]="5"
    set CharMap16[6]="6"
    set CharMap16[7]="7"
    set CharMap16[8]="8"
    set CharMap16[9]="9"
    set CharMap16[10]="a"
    set CharMap16[11]="b"
    set CharMap16[12]="c"
    set CharMap16[13]="d"
    set CharMap16[14]="e"
    set CharMap16[15]="f"
    
    //Первые 128 символов стандарта Юникод — совпадают с соответствующими символами US-ASCII. 
    //символы от 0 до 32 это в основном управляющие символы, в которых не прописан графическое представление.
    
    
    set CharMap256[0]=null //спец. NOP
    set CharMap256[1]=null //спец. SOH
    set CharMap256[2]=null //спец. STX
    set CharMap256[3]=null //спец. ETX
    set CharMap256[4]=null //спец. EOT
    set CharMap256[5]=null //спец. ENQ
    set CharMap256[6]=null //спец. ACK
    set CharMap256[7]=null //спец. BEL
    
    set CharMap256[8]="\b" //символ Backspace
    set CharMap256[9]="\t" //horizontal tab
    set CharMap256[10]="\n" //LF line feed, new line
    set CharMap256[11]=null //спец. VT
    set CharMap256[12]="\f" //NP form feed
    set CharMap256[13]="\r"
    
    //графические символы
    set CharMap256[32]=" " //пробел Space
    set CharMap256[33]="!"
    set CharMap256[34]="\"" // \" - эти два знака означают ковычки ", иначе вар ругает
    set CharMap256[35]="#"
    set CharMap256[36]="$"
    set CharMap256[37]="%"
    set CharMap256[38]="&"
    set CharMap256[39]="'"
    set CharMap256[40]="("
    set CharMap256[41]=")"
    set CharMap256[42]="*"
    set CharMap256[43]="+"
    set CharMap256[44]=","
    set CharMap256[45]="-"
    set CharMap256[46]="."
    set CharMap256[47]="/"
    set CharMap256[48]="0"
    set CharMap256[49]="1"
    set CharMap256[50]="2"
    set CharMap256[51]="3"
    set CharMap256[52]="4"
    set CharMap256[53]="5"
    set CharMap256[54]="6"
    set CharMap256[55]="7"
    set CharMap256[56]="8"
    set CharMap256[57]="9"
    set CharMap256[58]=":"
    set CharMap256[59]=";"
    set CharMap256[60]="<"
    set CharMap256[61]="="
    set CharMap256[62]=">"
    set CharMap256[63]="?"
    set CharMap256[64]="@"
    set CharMap256[65]="A"
    set CharMap256[66]="B"
    set CharMap256[67]="C"
    set CharMap256[68]="D"
    set CharMap256[69]="E"
    set CharMap256[70]="F"
    set CharMap256[71]="G"
    set CharMap256[72]="H"
    set CharMap256[73]="I"
    set CharMap256[74]="J"
    set CharMap256[75]="K"
    set CharMap256[76]="L"
    set CharMap256[77]="M"
    set CharMap256[78]="N"
    set CharMap256[79]="O"
    set CharMap256[80]="P"
    set CharMap256[81]="Q"
    set CharMap256[82]="R"
    set CharMap256[83]="S"
    set CharMap256[84]="T"
    set CharMap256[85]="U"
    set CharMap256[86]="V"
    set CharMap256[87]="W"
    set CharMap256[88]="X"
    set CharMap256[89]="Y"
    set CharMap256[90]="Z"
    set CharMap256[91]="["
    set CharMap256[92]="\\" //такие символы как '\' при компиляции jasshelper выдает ошибку. Нужно ставить '\\', так как при компиляции у вас будет '\'
    set CharMap256[93]="]"
    set CharMap256[94]="^"
    set CharMap256[95]="_"
    set CharMap256[96]="`"
    set CharMap256[97]="a"
    set CharMap256[98]="b"
    set CharMap256[99]="c"
    set CharMap256[100]="d"
    set CharMap256[101]="e"
    set CharMap256[102]="f"
    set CharMap256[103]="g"
    set CharMap256[104]="h"
    set CharMap256[105]="i"
    set CharMap256[106]="j"
    set CharMap256[107]="k"
    set CharMap256[108]="l"
    set CharMap256[109]="m"
    set CharMap256[110]="n"
    set CharMap256[111]="o"
    set CharMap256[112]="p"
    set CharMap256[113]="q"
    set CharMap256[114]="r"
    set CharMap256[115]="s"
    set CharMap256[116]="t"
    set CharMap256[117]="u"
    set CharMap256[118]="v"
    set CharMap256[119]="w"
    set CharMap256[120]="x"
    set CharMap256[121]="y"
    set CharMap256[122]="z"
    set CharMap256[123]="{"
    set CharMap256[124]="|"
    set CharMap256[125]="}"
    set CharMap256[126]="~"
    set CharMap256[126]=null //127 - символ Delete 
    
    //остальные 128 символов - это национальные символы (у каждого языка свой стандарт, у английского есть еще расширенный дополнительный 128 символов)
    
    set CharMap256[128]="Ђ"
    set CharMap256[129]="Ѓ"
    set CharMap256[130]="‚"
    set CharMap256[131]="ѓ"
    set CharMap256[132]="„"
    set CharMap256[133]="…"
    set CharMap256[134]="†"
    set CharMap256[135]="‡"
    set CharMap256[136]="€"
    set CharMap256[137]="‰"
    set CharMap256[138]="Љ"
    set CharMap256[139]="‹ ‹"
    set CharMap256[140]="Њ"
    set CharMap256[141]="Ќ"
    set CharMap256[142]="Ћ"
    set CharMap256[143]="Џ"
    set CharMap256[144]="ђ"
    set CharMap256[145]="‘"
    set CharMap256[146]="’"
    set CharMap256[147]="“"
    set CharMap256[148]="”"
    set CharMap256[149]="•"
    set CharMap256[150]="–"
    set CharMap256[151]="—" //тут чуть больше чем у 153 символа, хоть это не заметно
    set CharMap256[152]=null //не понятно какой это символ
    set CharMap256[153]="™"
    set CharMap256[154]="љ"
    set CharMap256[155]="›"
    set CharMap256[156]="њ"
    set CharMap256[157]="ќ"
    set CharMap256[158]="ћ"
    set CharMap256[159]="џ"
    set CharMap256[160]=null //тоже не понятно какой символ
    set CharMap256[161]="Ў"
    set CharMap256[162]="ў"
    set CharMap256[163]="Ћ"
    set CharMap256[164]="¤"
    set CharMap256[165]="Ґ"
    set CharMap256[166]="¦"
    set CharMap256[167]="§"
    set CharMap256[168]="Ё" //большая буква Ё
    set CharMap256[169]="©"
    set CharMap256[170]="Є"
    set CharMap256[171]="«"
    set CharMap256[172]="¬"
    set CharMap256[173]=null //не понятно какой символ
    set CharMap256[174]="®"
    set CharMap256[175]="Ї"
    set CharMap256[176]="°" //значок градус
    set CharMap256[177]="±" //плюс-минус
    set CharMap256[178]="І"
    set CharMap256[179]="і"
    set CharMap256[180]="ґ"
    set CharMap256[181]="µ"
    set CharMap256[182]="¶"
    set CharMap256[183]="·"
    set CharMap256[184]="ё" //буква ё
    set CharMap256[185]="№"
    set CharMap256[186]="є"
    set CharMap256[187]="»"
    set CharMap256[188]="ј"
    set CharMap256[189]="Ѕ"
    set CharMap256[190]="ѕ"
    set CharMap256[191]="ї"
    set CharMap256[192]="А"
    set CharMap256[193]="Б"
    set CharMap256[194]="В"
    set CharMap256[195]="Г"
    set CharMap256[196]="Д"
    set CharMap256[197]="Е"
    set CharMap256[198]="Ж"
    set CharMap256[199]="З"
    set CharMap256[200]="И"
    set CharMap256[201]="Й"
    set CharMap256[202]="К"
    set CharMap256[203]="Л"
    set CharMap256[204]="М"
    set CharMap256[205]="Н"
    set CharMap256[206]="О"
    set CharMap256[207]="П"
    set CharMap256[208]="Р"
    set CharMap256[209]="С"
    set CharMap256[210]="Т"
    set CharMap256[211]="У"
    set CharMap256[212]="Ф"
    set CharMap256[213]="Х"
    set CharMap256[214]="Ц"
    set CharMap256[215]="Ч"
    set CharMap256[216]="Ш"
    set CharMap256[217]="Щ"
    set CharMap256[218]="Ъ"
    set CharMap256[219]="Ы"
    set CharMap256[220]="Ь"
    set CharMap256[221]="Э"
    set CharMap256[222]="Ю"
    set CharMap256[223]="Я"
    set CharMap256[224]="а"
    set CharMap256[225]="б"
    set CharMap256[226]="в"
    set CharMap256[227]="г"
    set CharMap256[228]="д"
    set CharMap256[229]="е"
    set CharMap256[230]="ж"
    set CharMap256[231]="з"
    set CharMap256[232]="и"
    set CharMap256[233]="й"
    set CharMap256[234]="к"
    set CharMap256[235]="л"
    set CharMap256[236]="м"
    set CharMap256[237]="н"
    set CharMap256[238]="о"
    set CharMap256[239]="п"
    set CharMap256[240]="р"
    set CharMap256[241]="с"
    set CharMap256[242]="т"
    set CharMap256[243]="у"
    set CharMap256[244]="ф"
    set CharMap256[245]="х"
    set CharMap256[246]="ц"
    set CharMap256[247]="ч"
    set CharMap256[248]="ш"
    set CharMap256[249]="щ"
    set CharMap256[250]="ъ"
    set CharMap256[251]="ы"
    set CharMap256[252]="ь"
    set CharMap256[253]="э"
    set CharMap256[254]="ю"
    set CharMap256[255]="я"
    
    //CharMap2x8 - эта переменная типа таблица для перевода из двоичной в 8-ричную. Очень нужна.
    //Для перевода числа в восьмеричную необходимо разбить число на триады. Например, 1000110 = 1 000 110 = 106 в 8-ричной системе
    //влево и вправо от запятой двоичное число разбивается на двоичные триады 423,6 = 100 010 011, 110 (пока реализованы только целые, реальные нет)
    //Или обратно по табличке, 144 = 001 100 100 = 1100100 в двоичной системе счисления
    //чтобы перевести обратно в двоичную систему необязательно использовать таблицу и перебирать массив CharMap2x8
    //можно добавить в варкрафт нолик = 0144=1100100, однако труднее будет вставить в строку 0, так как функция I2S обнуляет
    set CharMap2x8[0]="000"
    set CharMap2x8[1]="001"
    set CharMap2x8[2]="010"
    set CharMap2x8[3]="011"
    set CharMap2x8[4]="100"
    set CharMap2x8[5]="101"
    set CharMap2x8[6]="110"
    set CharMap2x8[7]="111"
    
    //CharMap2x16 - эта переменная типа таблица для перевода из двоичной в 16-ричную. Очень нужна.
    //Для перевода числа в 16-чную систему необходимо разбить число на тетрады. Например, 1000110 = 100 0110 = 46 в 16-ричной системе
    set CharMap2x16[0x0]="0000" //0
    set CharMap2x16[0x1]="0001" //1
    set CharMap2x16[0x2]="0010" //2
    set CharMap2x16[0x3]="0011" //3
    set CharMap2x16[0x4]="0100" //4
    set CharMap2x16[0x5]="0101" //5
    set CharMap2x16[0x6]="0110" //6
    set CharMap2x16[0x7]="0111" //7
    set CharMap2x16[0x8]="1000" //8
    set CharMap2x16[0x9]="1001" //9
    set CharMap2x16[0xa]="1010" //10=A=a
    set CharMap2x16[0xb]="1011" //11=B=b
    set CharMap2x16[0xc]="1100" //12=C=c
    set CharMap2x16[0xd]="1101" //13=D=d
    set CharMap2x16[0xe]="1110" //14=E=e
    set CharMap2x16[0xf]="1111" //15=F=d
    
    call BJDebugMsg("ЗАГРУЗКА 0")
    call ForLoadMap2()
endfunction

//===========================================================================
function InitTrig_R takes nothing returns nothing
    set gg_trg_R=CreateTrigger()
    //call TriggerRegisterGameEvent(gg_trg_R, EVENT_GAME_LOADED)
    call TriggerRegisterTimerEventSingle(gg_trg_R, 1.00)
    call TriggerAddAction(gg_trg_R, function ForLoadMap1)
    //call ForLoadMap()
endfunction

//===========================================================================
// Trigger: TEST
//
//     set Pow2x[0] = 0000 0000 0000 0000 0000 0000 0000 0001 //2^0=1
//     set Pow2x[1] = 0000 0000 0000 0000 0000 0000 0000 0010 //2^1=2
//     set Pow2x[2] = 0000 0000 0000 0000 0000 0000 0000 0100 //2^2=4
//     set Pow2x[3] = 0000 0000 0000 0000 0000 0000 0000 1000 //2^3=8
//     set Pow2x[4] =
//===========================================================================
//TESH.scrollpos=0
//TESH.alwaysfold=0
function Trig_TEST_Actions takes nothing returns nothing
    //call BJDebugMsg(I2S(ASCII2DEC("Edok")))
    call BJDebugMsg("Начало")
    call BJDebugMsg(Binary2Hex("111100010010"))



endfunction


//===========================================================================
function InitTrig_TEST takes nothing returns nothing
    set gg_trg_TEST=CreateTrigger()
    call TriggerRegisterTimerEventPeriodic(gg_trg_TEST, 1.00)
    call TriggerAddAction(gg_trg_TEST, function Trig_TEST_Actions)
endfunction//===========================================================================
function InitCustomTriggers takes nothing returns nothing
    call InitTrig_R()
    call InitTrig_TEST()
endfunction

//***************************************************************************
//*
//*  Players
//*
//***************************************************************************

function InitCustomPlayerSlots takes nothing returns nothing

    // Player 0
    call SetPlayerStartLocation(Player(0), 0)
    call SetPlayerColor(Player(0), ConvertPlayerColor(0))
    call SetPlayerRacePreference(Player(0), RACE_PREF_HUMAN)
    call SetPlayerRaceSelectable(Player(0), true)
    call SetPlayerController(Player(0), MAP_CONTROL_USER)

endfunction

function InitCustomTeams takes nothing returns nothing
    // Force: TRIGSTR_002
    call SetPlayerTeam(Player(0), 0)

endfunction

//***************************************************************************
//*
//*  Main Initialization
//*
//***************************************************************************

//===========================================================================
function main takes nothing returns nothing
    call SetCameraBounds(- 3328.0 + GetCameraMargin(CAMERA_MARGIN_LEFT), - 3584.0 + GetCameraMargin(CAMERA_MARGIN_BOTTOM), 3328.0 - GetCameraMargin(CAMERA_MARGIN_RIGHT), 3072.0 - GetCameraMargin(CAMERA_MARGIN_TOP), - 3328.0 + GetCameraMargin(CAMERA_MARGIN_LEFT), 3072.0 - GetCameraMargin(CAMERA_MARGIN_TOP), 3328.0 - GetCameraMargin(CAMERA_MARGIN_RIGHT), - 3584.0 + GetCameraMargin(CAMERA_MARGIN_BOTTOM))
    call SetDayNightModels("Environment\\DNC\\DNCLordaeron\\DNCLordaeronTerrain\\DNCLordaeronTerrain.mdl", "Environment\\DNC\\DNCLordaeron\\DNCLordaeronUnit\\DNCLordaeronUnit.mdl")
    call NewSoundEnvironment("Default")
    call SetAmbientDaySound("LordaeronSummerDay")
    call SetAmbientNightSound("LordaeronSummerNight")
    call SetMapMusic("Music", true, 0)
    call InitBlizzard()


    call InitGlobals()
    call InitCustomTriggers()

endfunction

//***************************************************************************
//*
//*  Map Configuration
//*
//***************************************************************************

function config takes nothing returns nothing
    call SetMapName("Еще одна карта")
    call SetMapDescription("Описание отсутствует")
    call SetPlayers(1)
    call SetTeams(1)
    call SetGamePlacement(MAP_PLACEMENT_USE_MAP_SETTINGS)

    call DefineStartLocation(0, - 1088.0, 1920.0)

    // Player setup
    call InitCustomPlayerSlots()
    call SetPlayerSlotAvailable(Player(0), MAP_CONTROL_USER)
    call InitGenericPlayerSlots()
endfunction




//Struct method generated initializers/callers:

0
27
11 месяцев назад
Отредактирован MpW
0
host_pi, приятно осознавать, что это кому то понадобилось. Но я ничего не помню из этого, что код такой написал. Тогда я плохо понимал системы счисления, и пытался как то конвертировать равкоды в число. Мне это хотелось написать удобный способ создать ключ для массива. 8192 ужасно ограничивал. Сейчас это мб кому нибудь понадобиться
0
14
11 месяцев назад
0
да просто карта есть карта, а код есть код - это разное
Чтобы оставить комментарий, пожалуйста, войдите на сайт.