XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
prog

offline
Опыт: 32,865
Активность:
ScorpioT1000, там в коде косяки. У меня этот код тоже не сохраняется.
1 S2Ix находится после использующей его ф-ции
2 нельзя получить хендл строки командой GetHandleId
или, скажешь, оно у тебя работает?
Старый 02.04.2012, 17:33
ScorpioT1000
Работаем
offline
Опыт: отключен
Тогда надо пофиксить его
Старый 02.04.2012, 17:43
prog

offline
Опыт: 32,865
Активность:
В первую очередь, автора темы пофиксить надо. Единственное разумное применение равкода в виде строки - использование его при вводе в чат или выводе на экран. А потом уже думать как пофиксить этот древний код.
Старый 02.04.2012, 17:49
ScorpioT1000
Работаем
offline
Опыт: отключен
Его надо пофиксить в первую очередь ибо скоро это будет литься на сайт =) там будет что-то типа новой библиотеки функций.
Старый 02.04.2012, 17:51
ELITE
АДмин
offline
Опыт: 4,078
Активность:
мне для сейв системы, которая готова и полгоно гера со шмотом и всеми хар-ками сохраняет в код длиной 20 символов

Сейв делает отлично, а для ЛОАДа надо раскодировать РАВ код - вот и попал в тупик
------------------

Прошу пофиксите код, чтобы работал, и если не трудно, пожалуста выложите карту с примером работы (хотябы банально вывод на экран результатов выполнения обоих функций)
Старый 02.04.2012, 17:52
prog

offline
Опыт: 32,865
Активность:
ELITE, ты собираешься в чат вводить равкоды предметов для сейвлоада в открытом виде? омг!
Старый 02.04.2012, 17:55
ELITE
АДмин
offline
Опыт: 4,078
Активность:
нет, естественно закодированные
после кодирования и сжатия я получил 2 символа с рав кода
отсюда 6 вещей + гер = 14 симовлов
сжимаю их - остается 5-7 символов

экспу, абилки, голд и дерево - это уже числа - они по своему алгоритму жмутся...

в обшем позже выложу, как работать будет
Старый 02.04.2012, 18:00
prog

offline
Опыт: 32,865
Активность:
ELITE, почему бы не сделать проще? Если ты работаешь только с нестандартными предметами и равкоды у них идут более-менее по порядку, то закодировать в виде небольшого числа ID любого предмета можно очень легко
id = GetItemTypeId(item)-'I000'
и раскодировать
fullID = loadedID+'I000'
Вся работа ведется с целыми числами.
Со стандартными предметами все немного сложнее, конечно.
Старый 02.04.2012, 18:07
ScorpioT1000
Работаем
offline
Опыт: отключен
prog, а что если потом это число кодировать в аски)
фиксите либу !
Старый 02.04.2012, 18:29
prog

offline
Опыт: 32,865
Активность:
ScorpioT1000, у автора есть система кодирования в лоадкод для целых чисел, так что все путем.
А фиксить либу это надо найти способ сопоставить символ с числом, т.е. получить код символа по сути. Стринг хеш этого не дает, в отличии от того что давал РБ - он и отрицательный бывает, увы, да и порядка никакого. На ум пока приходит только тупой перебор и использование хештаблицы, ни первое ни второе не даст высокой скорости и вызовет кучу воплей о производительности.
Старый 02.04.2012, 18:41
ScorpioT1000
Работаем
offline
Опыт: отключен
prog, рб какраз давал айди хендла, что она и делает, ну значи для стрингов другой айди, поищите, я уже не помню нативку эту, StringHash ?
там все бинды уже сделали, это не string2char, не волнуйся.
Старый 02.04.2012, 18:48
ELITE
АДмин
offline
Опыт: 4,078
Активность:
ну так что там исправить, чтобы работало?
Старый 02.04.2012, 19:18
prog

offline
Опыт: 32,865
Активность:
ScorpioT1000, в том то и дело что StringHash работает иначе чем РБ для строк. Контракт у них разный.
CharInx256[S2Ix(SubString(num256, i, i+1))]
    set CharInx16[S2Ix("0")] = 0
    set CharInx16[S2Ix("1")] = 1
    set CharInx16[S2Ix("2")] = 2
    set CharInx16[S2Ix("3")] = 3
    set CharInx16[S2Ix("4")] = 4
    set CharInx16[S2Ix("5")] = 5
Тебя не смущают эти два блока кода?
Из них следует что S2Ix должна возвращать значения, которые можно использовать в качестве индексов массива. Использование StringHash в чистом виде этого не гарантирует - она для другого предназначена. А именно, для использования в качестве ключа в хештаблице.
prog добавил:
ELITE, забей ты на эту систему. Прочитай что я тебе написал парой сообщений выше - равкоды в виде строки не нужны в твоем случае.
Старый 02.04.2012, 19:35
ScorpioT1000
Работаем
offline
Опыт: отключен
prog, хеш строки вроде числа возвращает, а не 128-битный md5, в чем проблема? я думаю, там какраз задействован индексы хешей всех созданных строк, отсчет которого идет от нуля
ScorpioT1000 добавил:
Попробуйте xgm.ru/forum/showpost.php?p=535769&postcount=193
Старый 03.04.2012, 03:13
ELITE
АДмин
offline
Опыт: 4,078
Активность:
function ForLoadMap takes nothing returns
так и должно быть? -
или всетаки
function ForLoadMap takes nothing returns nothing
????
Старый 03.04.2012, 08:35
DaeDR

offline
Опыт: 8,074
Активность:
ELITE, конечно 2-й вариант
function ForLoadMap takes nothing returns nothing
DaeDR добавил:
Если функция ничего не возвращает
DaeDR добавил:
Иначе нужна конкретика, например
function ForLoadMap takes nothing returns integer
Без указания типа возвращения будет ошибка
Старый 03.04.2012, 08:51
ELITE
АДмин
offline
Опыт: 4,078
Активность:
ScorpioT1000, проверил - синтакс чек выдает ОК (вообще без ошибок)
но карта не запускается даже

Код:
globals
    integer array Pow16x
    integer array Pow256x
    string  array CharMap16
    string  array CharMap256
    integer array CharInx16
    integer array CharInx256
endglobals


даже если только это вставить - уже перестает запускать

ELITE добавил:
вот это тоже не дает запустить, хотя проверку проходит
Код:
function ForInitializationMap takes nothing returns nothing
    local trigger trig = CreateTrigger()
    call TriggerRegisterGameEvent(trig, EVENT_GAME_LOADED)
    call TriggerAddAction( trig, function ForLoadMap)


    set trig = null
endfunction


ELITE добавил:
далее принимает только в таком виде
Код:
set udg_CharMap16[0] = "0"


ELITE добавил:
я не спец, но помойму в 1.26а патче много чего отличается от тогоже 1.24
в плане синтаксиса - отсюда и косяки такие

а редактор так и вообще 1.20 имеет основу - порабы обновить его тоже

ELITE добавил:
в общем вот так работает (запускается точнее)

» раскрыть

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


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 < udg_Pow256x
            set CodeCh = CodeCh + 1
            set num10 = num10 - udg_Pow256x[i]
        endloop
        if CodeCh > 0 then
            set num256 = num256 + udg_CharMap256[CodeCh]
        endif
        set i = i - 1
    endloop
    return num256
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 < udg_Pow16x[i]
            set CodeCh = CodeCh + 1
            set num10 = num10 - udg_Pow16x[i]
        endloop
        if CodeCh > 0 then
            set num16 = num16 + udg_CharMap16[CodeCh]
        endif
        set i = i - 1
    endloop
    return num16
endfunction

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



переменны задаю. вручную через редактор переменных

НО если из числа нормально получаю РАВ
то из РАВ всегда получаю 0....

[i]ELITE добавил:

вызываю кодами
call DisplayTimedTextToForce( GetPlayersAll(), 30, DEC2ASCII ( S2I( udg_test ) ) )
это работает, из числа делает РАВ

в вот это
call DisplayTimedTextToForce( GetPlayersAll(), 30, I2S(ASCII2DEC ( udg_test ) ) )
назад не отдает число из РАВ кода
всегда результат = 0
// udg_test это текст, получаю из чата

ELITE добавил:
а также если взять return GetHandleId(s) то тоже не стартует карта

Отредактировано ELITE, 03.04.2012 в 12:20.
Старый 03.04.2012, 11:41
ScorpioT1000
Работаем
offline
Опыт: отключен
Ад какойто блин. Ладно, я сам посмотрю вечером.
Старый 03.04.2012, 11:43
prog

offline
Опыт: 32,865
Активность:
ScorpioT1000, ты проверял? а я, когда свой fly-script делал, очень тесно работал с этой функцией. Так вот, чтобы ты знал, индексов строк, как таковых, не существует. Возвращается число, с областью распределения во всем диапазоне значений integer. Такая реализация дает лучшие результаты при использовании в качестве ключей хештаблицы. Да, естественно, никакого легко предсказуемого порядка значений тоже нет.
ELITE, ты очень сильно тупишь. такое впечатление что в jass ни в зуб ногой, а систему лоадкода делал кто-то другой и ты боишься там что-то менять, потому ухватился за эту дурацкую систему, вписывающуюся в совершенно нелогичный алгоритм сохранения предметов. Ну или, как вариант, все совсем не так как ты говоришь, а перевод равкода в число тебе нужен совсем для других целей.
Вот так сохраняется все, но работать не будет потому что функцию S2Ix нужно переписать так, чтобы она возвращала уникальное число от 0 до 8191 для каждой строки из одного символа.
Обрати внимание, изменений минимум
  • функция S2Ix поднята выше, а возвращаемое значение заменено на 0 (именно это нужно переделать)
  • добавлено nothing, там где его не было
((кат
globals
    integer array Pow16x
    integer array Pow256x
    string  array CharMap16
    string  array CharMap256
    integer array CharInx16
    integer array CharInx256
endglobals

function S2Ix takes string s returns integer
    return 0 // здесь нужно найти способ сопоставить строке из одного ASCII символа уникальное число, которое можно использовать в качестве индекса массива
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[S2Ix(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 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[S2Ix(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 ForLoadMap takes nothing returns nothing
    set CharInx16[S2Ix("0")] = 0
    set CharInx16[S2Ix("1")] = 1
    set CharInx16[S2Ix("2")] = 2
    set CharInx16[S2Ix("3")] = 3
    set CharInx16[S2Ix("4")] = 4
    set CharInx16[S2Ix("5")] = 5
    set CharInx16[S2Ix("6")] = 6
    set CharInx16[S2Ix("7")] = 7
    set CharInx16[S2Ix("8")] = 8
    set CharInx16[S2Ix("9")] = 9
    set CharInx16[S2Ix("A")] = 10
    set CharInx16[S2Ix("a")] = 10
    set CharInx16[S2Ix("B")] = 11
    set CharInx16[S2Ix("b")] = 11
    set CharInx16[S2Ix("C")] = 12
    set CharInx16[S2Ix("c")] = 12
    set CharInx16[S2Ix("D")] = 13
    set CharInx16[S2Ix("d")] = 13
    set CharInx16[S2Ix("E")] = 14
    set CharInx16[S2Ix("e")] = 14
    set CharInx16[S2Ix("F")] = 15
    set CharInx16[S2Ix("f")] = 15
    set CharInx256[S2Ix("!")] = 33
    set CharInx256[S2Ix(" ")] = 34
    set CharInx256[S2Ix("#")] = 35
    set CharInx256[S2Ix("$")] = 36
    set CharInx256[S2Ix("%")] = 37
    set CharInx256[S2Ix("&")] = 38
    set CharInx256[S2Ix("'")] = 39
    set CharInx256[S2Ix("(")] = 40
    set CharInx256[S2Ix(")")] = 41
    set CharInx256[S2Ix("*")] = 42
    set CharInx256[S2Ix("+")] = 43
    set CharInx256[S2Ix(",")] = 44
    set CharInx256[S2Ix("-")] = 45
    set CharInx256[S2Ix(".")] = 46
    set CharInx256[S2Ix("/")] = 47
    set CharInx256[S2Ix("0")] = 48
    set CharInx256[S2Ix("1")] = 49
    set CharInx256[S2Ix("2")] = 50
    set CharInx256[S2Ix("3")] = 51
    set CharInx256[S2Ix("4")] = 52
    set CharInx256[S2Ix("5")] = 53
    set CharInx256[S2Ix("6")] = 54
    set CharInx256[S2Ix("7")] = 55
    set CharInx256[S2Ix("8")] = 56
    set CharInx256[S2Ix("9")] = 57
    set CharInx256[S2Ix(":")] = 58
    set CharInx256[S2Ix(";")] = 59
    set CharInx256[S2Ix("<")] = 60
    set CharInx256[S2Ix("=")] = 61
    set CharInx256[S2Ix(">")] = 62
    set CharInx256[S2Ix(".")] = 63
    set CharInx256[S2Ix("@")] = 64
    set CharInx256[S2Ix("A")] = 65
    set CharInx256[S2Ix("B")] = 66
    set CharInx256[S2Ix("C")] = 67 
    set CharInx256[S2Ix("D")] = 68 
    set CharInx256[S2Ix("E")] = 69 
    set CharInx256[S2Ix("F")] = 70 
    set CharInx256[S2Ix("G")] = 71 
    set CharInx256[S2Ix("H")] = 72 
    set CharInx256[S2Ix("I")] = 73 
    set CharInx256[S2Ix("J")] = 74 
    set CharInx256[S2Ix("K")] = 75 
    set CharInx256[S2Ix("L")] = 76 
    set CharInx256[S2Ix("M")] = 77 
    set CharInx256[S2Ix("N")] = 78 
    set CharInx256[S2Ix("O")] = 79 
    set CharInx256[S2Ix("P")] = 80 
    set CharInx256[S2Ix("Q")] = 81 
    set CharInx256[S2Ix("R")] = 82 
    set CharInx256[S2Ix("S")] = 83 
    set CharInx256[S2Ix("T")] = 84 
    set CharInx256[S2Ix("U")] = 85 
    set CharInx256[S2Ix("V")] = 86 
    set CharInx256[S2Ix("W")] = 87 
    set CharInx256[S2Ix("X")] = 88  
    set CharInx256[S2Ix("Y")] = 89  
    set CharInx256[S2Ix("Z")] = 90  
    set CharInx256[S2Ix("[")] = 91
    set CharInx256[S2Ix("]")] = 93  
    set CharInx256[S2Ix("^")] = 94  
    set CharInx256[S2Ix("_")] = 95   
    set CharInx256[S2Ix("`")] = 96   
    set CharInx256[S2Ix("a")] = 97   
    set CharInx256[S2Ix("b")] = 98   
    set CharInx256[S2Ix("c")] = 99   
    set CharInx256[S2Ix("d")] = 100  
    set CharInx256[S2Ix("e")] = 101   
    set CharInx256[S2Ix("f")] = 102   
    set CharInx256[S2Ix("g")] = 103   
    set CharInx256[S2Ix("h")] = 104   
    set CharInx256[S2Ix("i")] = 105   
    set CharInx256[S2Ix("j")] = 106   
    set CharInx256[S2Ix("k")] = 107   
    set CharInx256[S2Ix("l")] = 108   
    set CharInx256[S2Ix("m")] = 109   
    set CharInx256[S2Ix("n")] = 110   
    set CharInx256[S2Ix("o")] = 111   
    set CharInx256[S2Ix("p")] = 112   
    set CharInx256[S2Ix("q")] = 113   
    set CharInx256[S2Ix("r")] = 114   
    set CharInx256[S2Ix("s")] = 115   
    set CharInx256[S2Ix("t")] = 116    
    set CharInx256[S2Ix("u")] = 117     
    set CharInx256[S2Ix("v")] = 118     
    set CharInx256[S2Ix("w")] = 119     
    set CharInx256[S2Ix("x")] = 120     
    set CharInx256[S2Ix("y")] = 121     
    set CharInx256[S2Ix("z")] = 122     
    set CharInx256[S2Ix("{")] = 123     
    set CharInx256[S2Ix("|")] = 124     
    set CharInx256[S2Ix("}")] = 125     
    set CharInx256[S2Ix("~")] = 126
endfunction

function ForInitializationMap takes nothing returns nothing
    local trigger trig = CreateTrigger()
    call TriggerRegisterGameEvent(trig, EVENT_GAME_LOADED)
    call TriggerAddAction( trig, function ForLoadMap)
    call ForLoadMap()
    set Pow256x[0] = 0x00000001
    set Pow256x[1] = 0x00000100
    set Pow256x[2] = 0x00010000
    set Pow256x[3] = 0x01000000
    set Pow16x[0] = 0x00000001
    set Pow16x[1] = 0x00000010
    set Pow16x[2] = 0x00000100
    set Pow16x[3] = 0x00001000
    set Pow16x[4] = 0x00010000
    set Pow16x[5] = 0x00100000
    set Pow16x[6] = 0x01000000
    set Pow16x[7] = 0x10000000
    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"
    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[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 trig = null
endfunction
))

Отредактировано prog, 03.04.2012 в 17:40.
Старый 03.04.2012, 17:26
ScorpioT1000
Работаем
offline
Опыт: отключен
Свою систему хендлинга предлагаешь?
Ты точно проверял эту функцию? Потому что они не аллокейтят массив на 2^31 ячеек, должно быть парное число: индекс массива типа 0-8191 и второе - порядковый номер объекта в этой ячейке (реализация самого простого хеш-массива), или оно считается на ходу? Тогда получается что надо это число разбить на два ...
Может затестить просто, где совпадения хешей есть и придумать функцию для разброса и разницы, которая подойдёт как костыль? Это тока если хеш константно работает =)
Старый 03.04.2012, 17:36
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 04:32.