Сейчас 03:36:49 Вторник, 26 ноября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
[Вопрос] -save/-load checksumms
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. И будет няшно

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

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 от пирожка


 

  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz