Hexing | Дата: Пятница, 20 Апреля 2012, 16:12:06 | Сообщение # 1 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Нужна помощь шарящих: функция конвертации Code string BaseConversion (string input, int inputBase, int outputBase) { string charMap = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; //62 string s, result=""; int val=0, i, p=0, pow=1; i = StringLength(input) // Get the integer value of input //input = StringCase(input, false) loop exitwhen i <= 0 s = SubString(input, i-1, i) p = 0 loop if ( p >= inputBase ) then // Input cannot match base return "Input does not match base!" endif if ( s == SubString(charMap, p, p+1) ) then val = val + pow*p pow = pow * inputBase exitwhen true endif p++; endloop i--; endloop loop p = ModuloInteger(val, outputBase) result = SubString(charMap, p, p+1) + result val /= outputBase exitwhen val <= 0 endloop return result } при сохранении: heroes[] - массив героев: heroes[0] - герой первого игрока и тп playerName[] - массив имён игроков - нужен т.к. я окрашиваю имена Code void Save(int id) { int hid = GetUnitTypeId(heroes[id]); int hero = 0; if(hid == 'H000') { hero = 0; } elseif(hid == 'H00B') { hero = 1; } elseif(hid == 'H00Q') { hero = 2; } elseif(hid == 'H00R') { hero = 3; } string nameSoff = playerName[id]; loop { exitwhen(StringLength(nameSoff) >= 6) nameSoff += "n"; } string nameS=""; int i = 0, s; loop { exitwhen(i==6); s = S2I(BaseConversion(SubString(nameSoff, i, i+1), 62, 10)) s += 5; if(s > 61) { s -= 62; } nameS = nameS + BaseConversion(I2S(s), 10, 62); i++; } //BJDebugMsg(BaseConversion("1000000", 10, 62)); //до 4ех символов //BJDebugMsg(BaseConversion("789123123", 10, 62)); //до 5и символов //BJDebugMsg(BaseConversion("61", 10, 62)); //1 символ string goldS = BaseConversion(I2S(GetPlayerState(Player(id), PLAYER_STATE_RESOURCE_GOLD)), 10, 62); string xpS = BaseConversion(I2S(GetHeroXP(heroes[id])), 10, 62); string heroS = BaseConversion(I2S(hero), 10, 62); string Code = "|c00FF0101"+SubString(nameS, 0, 3)+"|r-|c00FF900F"+heroS+SubString(nameS, 3, 4)+"|r-|c00FEFF01"+xpS+SubString(nameS, 4, 5)+"|r-|c0021C000"+goldS+SubString(nameS, 5, 6)+"|r"; DisplayTimedTextToPlayer(Player(id), 0.0, 0.0, 60.0, Code); //AddHeroXP(heroes[id], 99999999999, false); } проблема в том, что такой код очень(!) легко взламывается, а я будучи не имевшим опыта в таких вещах отчаялся задать вопрос: как реализовать чек суммы, чтобы при измене одного значения код переставал работать, если нужна карта - в пм
|
|
|
|
Ty3uK | Дата: Пятница, 20 Апреля 2012, 21:25:39 | Сообщение # 2 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Запили код в виде мд5. И будет няшно
|
|
|
|
Hexing | Дата: Суббота, 21 Апреля 2012, 08:59:13 | Сообщение # 3 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Quote (Ty3uK) Запили код в виде мд5. И будет няшно я же говорю я нубка в этих вещах, и мне казалось мд5 не дешифруется в первоначальный вид и подходит лишь для сравнения конечных кодов, да и мне бы что попроще, уже день вожусь всё фигня выходит, надеюсь допилю( мб статьи какие есть?Добавлено (21 Апрель 2012, 08:56:20) --------------------------------------------- всё, додумался наконец, другой вопрос: Code scope items { define private a(e) = { elseif(it == e) { setdef id = id+1 return id; } } int ItemId(int it) { define private id = 0 if(it == 'ratc') { return 0; } a('rat6') a('rat9') } } можно реализовать это на уровне дефайнов? просто лень писать elseif() и тпДобавлено (21 Апрель 2012, 08:59:13) --------------------------------------------- пока что сделал так Code scope items { define private a(e) = { id++; elseif(it == e) { return id; } } int ItemId(int it) { int id = 0 if(it == 'ratc') { return id; } a('rat6') a('rat9') return 0; } }
|
|
|
|
SirNikolas | Дата: Суббота, 21 Апреля 2012, 17:41:52 | Сообщение # 4 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (Hexing) setdef id = id+1 setdef внутри define не работает.
|
|
|
|
Hexing | Дата: Суббота, 21 Апреля 2012, 20:09:10 | Сообщение # 5 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Quote (SirNikolas) setdef внутри define не работает. okay :| ждём switch от пирожка
|
|
|
|