cleo программирование - страница - Cheat

advertisement
CLEO ПРОГРАММИРОВАНИЕ
ДОБРО ПОЖАЛОВАТЬ , МЕНЯ ЗОВУТ АЛЕКСАНДР. ДАННАЯ КНИГА ДЛЯ ТЕХ , КТО ХОЧЕТ НАУЧИТЬСЯ ЯЗЫКУ
ПРОГРАММИРОВАНИЯ CLEO. Х ОЧЕШЬ ПИСАТЬ СВОИ CLEO СКРИПТЫ ИЛИ ВОЗМОЖНО НАПИСАТЬ СВОИ МИССИИ
В GTA SA?. ТОГДА ДОБРО ПОЖАЛОВАТЬ!
ДЛЯ ТОГО , ЧТОБЫ ПИСАТЬ СКРИПТЫ (CLEO) НЕОБХОДИМА ПРОГРАММА S ANNY BUILDER . ЕЁ МОЖНО НАЙТИ В
ИНТЕРНЕТЕ , ОНА СОВЕРШЕННО БЕСПЛАТНАЯ И ЕЩЁ НА РУССКОМ ЯЗЫКЕ . ДУМАЮ ПРОБЛЕМ СО СКАЧКОЙ
ПРОГРАММЫ НЕ ВОЗНИКНЕТ .
ЛИЧНО МЫ БУДЕМ УЧИТЬСЯ ДЕЛАТЬ CLEO СКРИПТЫ. НАУЧИТЬСЯ ДЕЛАТЬ МИССИИ МОЖНО ЧЕРЕЗ СПРАВКУ В
САМОЙ ПРОГРАММЕ (ТАМ ВСЁ НА РУССКОМ ). ПОСЛЕ СКАЧКИ SB (SANNY BUILDER ), ТРЕБУЕТСЯ УСТАНОВИТЬ
CLEO (НА МОМЕНТ НАПИСАНИЯ ЭТОЙ КНИГИ, ПОСЛЕДНЯЯ ВЕРСИЯ 4.3).
ТЕПЕРЬ СКАЧИВАЕМ SAMPFUNKS. ЭТОТ ПЛАГИН УСТАНАВЛИВАЕМ В ПАПКУ С ИГРОЙ И БИБЛИОТЕКУ В SB. ЭТО
КОНЕЧНО НЕ ОБЯЗАТЕЛЬНО , НО БЕЗ SAMP FUNKS ВЫ НЕ СМОЖЕТЕ НАПИСАТЬ КРУТЫЕ CLEO СКРИПТЫ (ДАЖЕ
ЭЛЕМЕНТАРНО С ИСПОЛЬЗОВАНИЕМ КОМАНД ).
В ЭТОЙ КНИГЕ МЫ БУДЕМ ИЗУЧАТЬ ТОЛЬКО ОСНОВЫ ПРОГРАММИРОВАНИЯ НА CLEO. А ТАКЖЕ ИЗУЧИМ ЧАСТО
ИСПОЛЬЗУЕМЫЕ ФУНКЦИИ . ПОСЛЕ ЧЕГО , НАПИСАНИЕ ИНТЕРЕСНЫХ CLEO БУДЕТ ЛИШЬ ЗАВИСЕТЬ ОТ ВАШЕГО
ОПЫТА И ФАНТАЗИИ .
АКТУАЛЬНУЮ НА ДАННЫЙ МОМЕНТ ВЕРСИЮ SB МОЖНО СКАЧАТЬ ТУТ:
SANNY BUILDER - http://vk.cc/4a3WYY
АВТОР – [CM]HIPS (СТАРЫЙ НИК – ANUGLEY )
СДЕЛАНО СПЕЦИАЛЬНО ДЛЯ САЙТА – CHEAT-MASTER.RU.
ПЕРЕМЕННЫЕ
КАК В ЛЮБОМ «НОРМАЛЬНОМ » ЯЗЫКЕ ПРОГРАММИРОВАНИЯ, В НЁМ ЕСТЬ ПЕРЕМЕННЫЕ. НО К СОЖАЛЕНИЮ В
CLEO ПРОГРАММИРОВАНИИ ЕСТЬ ВСЕГО 33 ПЕРЕМЕННЫЕ (ОТ 0 ДО 33). ЧТО КАК РАЗ ГЛОБАЛЬНО
ОГРАНИЧИВАЕТ ВОЗМОЖНОСТИ ПРИ СОЗДАНИИ CLEO СКРИПТОВ . ПЕРЕМЕННЫЕ В ЯЗЫКЕ ПРОГРАММИРОВАНИЯ
НЕОБХОДИМЫ . БЕЗ НИХ ВЫ НЕ СМОЖЕТЕ СОЗДАТЬ CLEO СКРИПТЫ . НАВЕРНЯКА, ЕСЛИ ВЫ ЕЩЁ НЕ ИЗУЧАЛИ
ЯЗЫКИ ПРОГРАММИРОВАНИЯ , СПРОСИТЕ : А ПОЧЕМУ?!
ОТВЕТ ПРОСТ , КАК ИЗВЕСТНО, ПЕРЕМЕННЫЕ – ЭТО ЯЧЕЙКИ ПАМЯТИ , КОТОРЫЕ ХРАНЯТ В СЕБЕ ЧТО-ТО, ТО ЕСТЬ В
ПЕРЕМЕННЫХ ХРАНИТЬСЯ ЛЮБАЯ ИНФОРМАЦИЯ ЗАНЕСЁННАЯ ЛИЧНО ВАМИ .
Я ДУМАЮ ЭТО ВСЕМ ПОНЯТНО, ТАК КАК СКОРЕЕ ВСЕГО НА АЛГЕБРЕ ВЫ ЭТО КОГДА -ТО ПРОХОДИЛИ И ЗНАЕТЕ ЧТО
ТАКОЕ ПЕРЕМЕННЫЕ .
ПЕРЕМЕННЫЕ В ЯЗЫКЕ ПРОГРАММИРОВАНИЯ CLEO ОБОЗНАЧАЮТСЯ ЗНАКОМ «@». ТО ЕСТЬ УКАЗЫВАЕТСЯ
ПРИМЕРНО ТАК : [НОМЕР ПЕРЕМЕННОЙ ]@. (ПРИМЕР : 3@).
ДАВАЙТЕ ПОТРЕНИРУЕМСЯ , ДАВАЙТЕ СДЕЛАЕМ ЛЮБУЮ ФУНКЦИЮ С ИСПОЛЬЗОВАНИЕМ ПЕРЕМЕННЫХ.
{$CLEO .cs}
0000: NOP
repeat
wait 0
until SAMP.Available()
wait 1000
0B34: samp register_client_command "hips" to_label @hips
repeat
wait 0
until false
:hips
0AF8: samp add_message_to_chat "Число: %s" color 0xFFFFFF 3@
3@ == 5
Я НЕ ГОВОРИЛ ЧТО ЭТО БУДЕТ ЛЕГКО ДЛЯ ВАС. НА САМОМ ДЕЛЕ ЭТО ЭЛЕМЕНТАРНАЯ ФУНКЦИЯ . В БУДУЩЕМ,
СОЗДАНИЕ ПОДОБНЫХ ФУНКЦИЙ НЕ СОСТАВИТ ДЛЯ ВАС ТРУДА . ТО ЕСТЬ , ПРИ ВВОДЕ КОМАНДЫ / HIPS, БУДЕТ
ВЫВОД ТЕКСТА В ЧАТ , А ИМЕННО : «ВЫ ВВЕЛИ КОМАНДУ [ЦИФРА]».
В ДАННОМ КОДЕ ПРИСУТСТВУЮТ ЦИКЛЫ, ОПКОДЫ И КОМАНДЫ . ОБ ЭТОМ ПОЗЖЕ .
МОЖЕТ , КТО ПОНЯЛ , НО 3@ ЭТО И ЕСТЬ ПЕРЕМЕННАЯ. ТО ЕСТЬ КОМАНДА
«samp register_client_command "hips" to_label @hips» ДАЁТ ПОНЯТЬ , ЧТО ПРИ ВВОДЕ КОМАНДЫ /HIPS
ИДЁТ ПРЫЖОК НА МЕТКУ :HIPS И ОН СЧИТЫВАЕТ . ТО ЕСТЬ, МЫ ВВЕДЯ ТЕКСТ
«3@ == 5» ДАЛИ ПОНЯТЬ ЧТО В
ДАННОЙ ПЕРЕМЕННОЙ БУДЕТ ХРАНИТЬСЯ ЧИСЛО 5. И ВМЕСТО «%S» БУДЕТ ОТОБРАЖЕНО ЧИСЛО «5»
ДУМАЮ ТЕПЕРЬ ВАМ ВСЁ ПОНЯТНО ОБ ПЕРЕМЕННЫХ, ДАВАЙТЕ ТЕПЕРЬ ПЕРЕЙДЁМ ДАЛЬШЕ . ВЕДЬ ЭТО НЕ ВСЁ .
ОПКОДЫ
ОПКОД (ОПЕРАЦИОННЫЙ КОД ) НЕОБХОДИМ ДЛЯ СОЗДАНИЯ ЛЮБЫХ СКРИПТОВ. ДАННЫЙ КОД ПОЗВОЛЯЕТ
ПОНЯТЬ ЧТО НАМ НУЖНО ОТ КОМПИЛЯТОРА . ТО ЕСТЬ НАПРИМЕР . ОПКОД 0AF8 ВЫВОДИТ ТЕКСТ В ЧАТ . ТО ЕСТЬ
НЕЛЬЗЯ ВЫВЕСТИ ТЕКСТ «HELLO» ЧЕРЕЗ ОПКОД 0000. ЭТО НЕВОЗМОЖНО.
ЕСЛИ ВЫ УСТАНОВИЛИ SAMPFUNKS, ОПКОДОВ БУДЕТ 2140 (НА ДАННЫЙ МОМЕНТ ИХ ИМЕННО СТОЛЬКО ).
НЕТ! НЕ БОЙТЕСЬ . ВАМ ИЗУЧАТЬ ВСЕ НЕ НУЖНО БУДЕТ , НЕОБХОДИМО ЛИШЬ ВЫУЧИТЬ ОСНОВНЫЕ , И ВЫ ИХ
ВЫУЧИТЕ , ЕСЛИ ЧАСТО ПЫТАТЬСЯ ПИСАТЬ CLEO СКРИПТЫ.
ВСЕ НЕОБХОДИМЫЕ ОПКОДЫ НА ДАННЫЙ МОМЕНТ МОЖНО НАЙТИ НА САЙТЕ gtag.gtagaming.com.
ДАВАЙТЕ ПОСМОТРИМ ПРИМЕР ИСПОЛЬЗОВАНИЯ ОПКОДА И ВЕРНЁМСЯ К СТАРОМУ ПРИМЕРУ .
{$CLEO .cs}
0000: NOP
repeat
wait 0
until SAMP.Available()
wait 1000
0B34: samp register_client_command "hips" to_label @hips
repeat
wait 0
until false
:hips
0AF8: samp add_message_to_chat "Вы ввели команду /hips" color 0xFFFFFF
0AF8: SAMP ADD_MESSAGE _TO_CHAT "Вы ввели команду /hips" COLOR 0XFFFFFF.
НА ДАННЫЙ МОМЕНТ НАМ НУЖЕН ТОЛЬКО ЭТОТ УЧАСТОК КОДА. МОЖЕТ КТО ПОНЯЛ , НО ОПКОДОМ ЯВЛЯЕТСЯ
ТЕКСТ – «0AF8». ТО ЕСТЬ , ЕСЛИ ВЫ БЫ НАПИСАЛИ ВМЕСТО НЕГО НАПРИМЕР 0B34, ТЕКСТ БЫ НЕ ПОЯВИЛСЯ .
В ЭТОМ КОДЕ ЕСТЬ ЕЩЁ ОДНО ИСПОЛЬЗОВАНИЕ ОПКОДА, ЭТО ОПКОД – «0B34».
ДАННЫЙ ОПКОД РЕГИСТРИРУЕТ ВИЗУАЛЬНУЮ КОМАНДУ В ИГРУ (ТО ЕСТЬ ЭТУ КОМАНДУ МОЖЕТ ВВЕСТИ ТОЛЬКО
ЧЕЛОВЕК КОТОРЫЙ УСТАНОВИЛ ДАННЫЙ CLEO СКРИПТ ).
Я ДУМАЮ ТЕПЕРЬ ВАМ ПОНЯТНО, ЧТО ТАКОЕ ОПКОДЫ . И МЫ НЕ БУДЕМ С ЭТИМ ДОЛГО ЗАТЯГИВАТЬ .
ПЕРЕХОДИМ К СЛЕДУЮЩЕМУ УРОК, ДРУЗЬЯ.
ЦИКЛЫ И ЗАДЕРЖКИ
СЕЙЧАС ПОЙДЁТ РЕЧЬ О ЦИКЛАХ И ЗАДЕРЖКАХ . ОНИ НЕОБХОДИМЫ ДЛЯ РАБОТЫ СКРИПТА ТАКЖЕ КАК И
ОПКОДЫ , КОМАНДЫ И Т .Д.
ЦИКЛ ДАЖЕ ИСПОЛЬЗУЮТ ЧТОБЫ ИЗБЕЖАТЬ КРАШ ИГРЫ ПРИ ВХОДЕ . ТО ЕСТЬ, ДЕЛАЮТ ЗАДЕРЖКУ ДЛЯ ЗАПУСКА
СКРИПТА, ЧТОБЫ ОН НЕ ЗАПУСТИЛСЯ РАНЬШЕ , ЧЕМ ИГРА.
ЕСТЬ 4 ВИДА ЦИКЛОВ . САМЫЙ ИСПОЛЬЗУЕМЫЙ ЭТО:
repeat
// Тело (Что будет в цикле)
until «команда».
Например:
repeat
wait 1000
until false
Данный цикл делает задержку
перед использованием чеголибо 1000 миллисекунд.
ТЕПЕРЬ ПЕРЕЙДЁМ К ЗАДЕРЖКАМ. НА САМОМ ДЕЛЕ ТУТ ВСЁ ПРОСТО. ЗАДЕРЖКУ ВЫСТАВЛЯЮТ ЧТОБЫ КОМАНДА
ВЫПОЛНЯЛАСЬ НЕ СРАЗУ , А КОГДА НУЖНО (НАПРИМЕР , ЧЕРЕЗ 1-2 СЕКУНДЫ ).
ЧТОБЫ ВЫСТАВИТЬ ЗАДЕРЖКУ, ПИШЕМ ПЕРЕД КОМАНДОЙ WAIT [СКОЛЬКО МИЛЛИСЕКУНД].
НО МНОГИЕ НАВЕРНОЕ ЗАМЕЧАЛИ, ЧТО ОЗНАЧАЕТ WAIT 0? ВЕДЬ СТАВИТЬ ЗАДЕРЖКУ НА 0 МИЛЛИСЕКУНД, ЭТО
НЕ ИМЕЕТ СМЫСЛА . НА САМОМ ДЕЛЕ ЭТО ОЧЕНЬ ВАЖНО . ДАННУЮ ЗАДЕРЖКУ СТАВЯТ ДЛЯ ТОГО , ЧТОБЫ
ИЗБЕЖАТЬ КРАШИ , ВЫЛЕТЫ И Т .Д.
ТАКЖЕ, ЕСТЬ НУЛЕВОЙ ОПКОД (0000: NOP). ОН ТОЖЕ ПОМОГАЕТ УСТРАНИТЬ КРАШИ . ЕГО НЕОБХОДИМО
НАПИСАТЬ В НАЧАЛЕ СКРИПТА (НО , ЕСЛИ ВАШ СКРИПТ И ТАК НЕ КРАШИТ ИГРУ , НЕ ОБЯЗАТЕЛЬНО И ПИСАТЬ ).
ТЕПЕРЬ ДАВАЙТЕ ПЕРЕЙДЁМ К ВТОРОМУ ЦИКЛУ . ЕГО ИСПОЛЬЗУЮТ НЕ СЛИШКОМ ЧАСТО , НО ЕГО ВСЁ РАВНО
НЕОБХОДИМО ЗНАТЬ . ЭТОТ ЦИКЛ – FOR .
FOR <переменная цикла> = <начальное значение> TO/DOWNTO <конечное значение>
[step = 1]
< тело цикла>
END
<переменная цикла> - переменная, используемая в качестве счетчика итераций
<начальное значение> - начальное значение переменной цикла (любое значение, включая имя
модели)
TO/DOWNTO- увеличивать или уменьшать переменную цикла
<конечное значение> - конечное значение переменной цикла, при которой он заканчивает свою
работу (любое значение, включая имя модели)
<step> - шаг цикла: опциональная величина, на которую будет увеличиваться или уменьшаться
переменная цикла после каждой итерации. По умолчанию равна 1
КАК Я ГОВОРИЛ , ДАННЫЙ ЦИКЛ ИСПОЛЬЗУЕТСЯ РЕЖЕ ВСЕГО .
ТЕПЕРЬ ПЕРЕХОДИМ К СЛЕДУЮЩЕМУ ЦИКЛУ , ЭТО – WHILE.
while [Условие]
// Тело цикла
end
ДАННЫЙ ЦИКЛ БУДЕТ РАБОТАТЬ ВЕЧНО , ПОКА УСЛОВИЕ БУДЕТ «ИСТИННО ».
КАК ТОЛЬКО ОНО БУДЕТ «НЕ ИСТИННО », ТО ЕСТЬ FALSE. РАБОТА ЦИКЛА ПРЕКРАЩАЕТСЯ.
ПРИМЕР РАБОТЫ ЦИКЛА :
while SAMP.Available
wait 0
end
В ДАННОМ СЛУЧАЕ , ЦИКЛ БУДЕТ РАБОТАТЬ ДО ТЕХ ПОР , ПОКА НЕ ЗАГРУЗИТЬСЯ SAMP. КАК ТОЛЬКО SAMP
ЗАВЕРШИТ СВОЮ ЗАГРУЗКУ , ЦИКЛ ПРЕКРАТИТ СВОЮ РАБОТУ .
ТАКЖЕ, ЕСТЬ ЦИКЛ Continue и Break. ДАННЫЙ ЦИКЛ МЫ НЕ БУДЕМ ИЗУЧАТЬ . ТАК КАК , ПИСАТЬ СКРИПТЫ С
ПОМОЩЬЮ НЕГО СЛОЖНЕЕ , ЧЕМ ЧЕРЕЗ REPEAT И ОСТАЛЬНЫЕ . М ОЖНО НЕ ИСПОЛЬЗОВАТЬ ВЕДЬ ЕГО , ПРОСТО
КОМПИЛЯТОР АВТОМАТИЧЕСКИ ПЕРЕВЕДЁТ КОД .
ВСЁ. МЫ НАКОНЕЦ -ТО РАЗОБРАЛИ ВСЕ ЦИКЛЫ И ПЕРЕХОДИМ ДАЛЬШЕ…
КОНСТАНТЫ
КОНСТАНТЫ ОЧЕНЬ ПОХОЖЕ НА ПЕРЕМЕННЫЕ . ОНИ ТАКЖЕ ПРИСВАИВАЮТ К СЕБЕ ИДЕНТИФИКАТОР . НО,
КОНСТАНТА ДОЛЖНА ЖЕ ЧЕМ-ТО ОТЛИЧАТЬСЯ , ВЕРНО? ВЕДЬ , ЕСЛИ БЫ ОНА НЕ ОТЛИЧАЛАСЬ , РАЗНИЦЫ БЫ НЕ
БЫЛО МЕЖДУ ПЕРЕМЕННОЙ И КОНСТАНТОЙ .
НУ ТАК ВОТ , К СОЖАЛЕНИЮ , ПРИСВОЕННЫЙ ИДЕНТИФИКАТОР КОНСТАНТЕ ИЗМЕНИТЬ НЕЛЬЗЯ ! ЭТО БОЛЬШОЙ
МИНУС .
ИМЯ КОНСТАНТЫ – ЛЮБОЙ ДОПУСТИМЫЙ ИДЕНТИФИКАТОР (ЛАТИНСКИЕ БУКВЫ , ЦИФРЫ И ЗНАК
ПОДЧЁРКИВАНИЯ ). НЕ ДОПУСКАЕТСЯ ИСПОЛЬЗОВАНИЕ ПРЕОПРЕДЕЛЕННЫХ ИМЕН ВРОДЕ CONTINUE , TRUE , AND
И Т .Д.
ЗНАЧЕНИЕ – ЧИСЛО (МЕТКА, МОДЕЛЬ)
СТРОКА – ВЫРАЖЕНИЕ (НАПРИМЕР : ПЕРЕМЕННАЯ ИЛИ КЛАСС ).
ДРУГАЯ КОНСТАНТА .
const
[Имя константы] = [Значение]
end
А ВЫ ЧТО ДУМАЛИ, БУДЕТ ВСЁ ТРУДНО? НА САМОМ ДЕЛЕ НЕТ . ЭТО ДОСТАТОЧНО ПРОСТО , ЕСЛИ ЗНАТЬ ЧТО
ДЕЛАТЬ .
СЕЙЧАС Я ПОКАЖУ ПРИМЕР, КАК ИХ ИСПОЛЬЗОВАТЬ .
ПРИМЕР:
const
PlayerMoney = $PLAYER_CHAR.Money
end
ДАННЫЙ ПРИМЕР Я ВЗЯЛ ИЗ СПРАВКИ SANNY BUILDER. Я ДУМАЮ ОН НЕ ДОЛЖЕН СОСТАВЛЯТЬ ВАМ ТРУДНОСТИ.
Я ЧЕСТНО ГОВОРЯ , НЕ ПОЛЬЗУЮСЬ КОНСТАНТАМИ. ПО МНЕ ТАК , ПРОЩЕ ИСПОЛЬЗОВАТЬ ОБЫЧНЫЕ ГЛОБАЛЬНЫЕ
И ЛОКАЛЬНЫЕ ПЕРЕМЕННЫЕ . ИСПОЛЬЗУЮТСЯ ОНИ РЕДКО , НО ЕСЛИ ДЕЛАЕТЕ СЛОЖНЫЙ СКРИПТ , ПРОСТО
НЕОБХОДИМЫ .
УСЛОВИЯ
УСЛОВИЙ НЕ СЛИШКОМ МНОГО В CLEO ПРОГРАММИРОВАНИИ , НО ВСЁ ЖЕ ИХ МНОГО .
МЫ ПОГОВОРИМ О САМЫХ ИСПОЛЬЗУЕМЫХ .
ЧАЩЕ ВСЕГО ИСПОЛЬЗУЮТ : IF, ELSE, LABEL.
IF – ОЗНАЧАЕТ «ЕСЛИ»
ELSE – ОЗНАЧАЕТ «ИНАЧЕ»
LABEL – ПРЫГАЕТ НА ОПРЕДЕЛЁННУЮ ЧАСТЬ КОДА.
ТАКЖЕ УСЛОВИЯ ЕСТЬ ДВУХ ВИДОВ. ЭТО: НИЗКОУРОВНЕВОЕ И ВЫСОКОУРОВНЕВОЕ .
НИЗКОУРОВНЕВОЕ, ЭТО КОГДА ИСПОЛЬЗУЕТСЯ ПРОСТО УСЛОВИЕ , И НЕТУ «ПОД УСЛОВИЙ ».
ВЫСОКОУРОВНЕВОЕ , ЭТО КОГДА ИСПОЛЬЗУЕТСЯ «ПОД УСЛОВИЯ ».
ПРИМЕР ВЫСОКОУРОВНЕВОГО УСЛОВИЯ :
if 0@ == true
then
SAMP.GetPlayerPing($PLAYER_ACTOR)
end
else
jf 0@
end
ТО ЕСТЬ , THEN – ОЗНАЧАЕТ «ТОГДА», END – ОЗНАЧАЕТ «КОНЕЦ».
END ДОЛЖЕН СТОЯТЬ ПРОТИВОПОЛОЖНО УСЛОВИЮ , КОТОРОЕ ЕГО ОТКРЫВАЕТ.
ЕСЛИ ЕГО ПОСТАВИТЬ В ДРУГОЕ МЕСТО , БУДЕТ ОШИБКА. Т АКЖЕ ЗАКРЫВАТЬ УСЛОВИЕ НУЖНО ОБЯЗАТЕЛЬНО.
ИНАЧЕ ТОЖЕ БУДЕТ ОШИБКА.
КОНЕЦ
НУ ЧТО, ДРУЗЬЯ. НА ЭТОМ КУРС ОКОНЧЕН . ЖЕЛАЮ ВАМ ВСЕГО НАИЛУЧШЕГО. НАДЕЮСЬ , ПОСЛЕ ЧТЕНИЯ
ДАННОЙ КНИГИ ВЫ СМОЖЕТЕ ПИСАТЬ УЖЕ СВОИ ПЕРВЫЕ CLEO СКРИПТЫ .
АВТОР: [CM]HIPS (СТАРЫЙ НИК – ANUGLEY ).
СДЕЛАНО СПЕЦИАЛЬНО ДЛЯ ПОРТАЛА – CHEAT-MASTER.RU.
ВСЕМ ПОКА :).
Download