Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Ткните носом пожалуйста

-

Общение разработчиков

- Программирование для Perfect World, общение и обсуждене разработок

Ответ
 
Опции темы
Старый 23.05.2013, 13:10   #31
 Разведчик
Аватар для Xantrax2150198
 
Xantrax2150198 никому не известный тип
Регистрация: 12.05.2013
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Ткните носом пожалуйста

Цитата:
Затем что, при смене фокуса окна клиент опять 1 сменит на 0.

Ага, ясно, спасибо.
Вопрос к fds255:
WriteProcessMemory(hProcess,ptr($00B9070C),@unfree ze,1,temp);
Почему мы записываем 1 байт? По моему мнению там должно быть sizeof(DWORD), т.е. 4 байта...
  Ответить с цитированием
Старый 23.05.2013, 14:15   #32
 Рыцарь
Аватар для Sirioga
 
Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(
Регистрация: 19.11.2008
Сообщений: 385
Популярность: 13343
Сказал(а) спасибо: 124
Поблагодарили 217 раз(а) в 109 сообщениях
 
По умолчанию Re: Ткните носом пожалуйста

Цитата:
Сообщение от Xantrax2150198Посмотреть сообщение
Почему мы записываем 1 байт? По моему мнению там должно быть sizeof(DWORD), т.е. 4 байта...

Не fds255, но всё же отвечу. Потому, что правим лишь один байт с 0 на 1, если попытаться записать 4 байта, то не получим никакого анфриза, а скорее всего крэш клиента. Можешь проверить с помощью SizeOf и после записи посмотреть в lpNumberOfBytesWritten, у тебя это temp, а еще легче, посмотри чему у тебя равен @unfreeze и посчитай сколько там байт...
  Ответить с цитированием
Старый 23.05.2013, 18:16   #33
 Разведчик
Аватар для Xantrax2150198
 
Xantrax2150198 никому не известный тип
Регистрация: 12.05.2013
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Ткните носом пожалуйста

Sirioga, перезапись значения с sizeof(DWORD) (4 байта), размораживает окно нормально и краха клиента не вызывает, да и вообще буфер у нас содержи целочисленную переменную, которая на наших операционных системах равна 4 байтам и мы ее записываем в память, я не вижу там(в этой функции) никаких операций работы с байтами(битами)...
Саму функцию замораживающую окно, пока не патчил, поэтому пока приходится постоянно вызывать ф-цию перезаписи значения в памяти...
  Ответить с цитированием
Старый 23.05.2013, 18:46   #34
 Разведчик
Аватар для fds255
 
fds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известен
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
 
По умолчанию Re: Ткните носом пожалуйста

Цитата:
Сообщение от Xantrax2150198Посмотреть сообщение
я не вижу там(в этой функции) никаких операций работы с байтами(битами)...

Как это не видишь?

Посмотри выдержку с сайта MS:
[Ссылки могут видеть только зарегистрированные пользователи. ]

BOOL WINAPI WriteProcessMemory(
_In_ HANDLE hProcess,
_In_ LPVOID lpBaseAddress,
_In_ LPCVOID lpBuffer,
_In_ SIZE_T nSize,
_Out_ SIZE_T *lpNumberOfBytesWritten
);


Parameters

hProcess [in]
A handle to the process memory to be modified. The handle must have PROCESS_VM_WRITE and PROCESS_VM_OPERATION access to the process.

lpBaseAddress [in]
A pointer to the base address in the specified process to which data is written. Before data transfer occurs, the system verifies that all data in the base address and memory of the specified size is accessible for write access, and if it is not accessible, the function fails.

lpBuffer [in]
A pointer to the buffer that contains data to be written in the address space of the specified process.

nSize [in]
The number of bytes to be written to the specified process.

lpNumberOfBytesWritten [out]
A pointer to a variable that receives the number of bytes transferred into the specified process. This parameter is optional. If lpNumberOfBytesWritten is NULL, the parameter is ignored.

Return value
If the function succeeds, the return value is nonzero.

If the function fails, the return value is 0 (zero). To get extended error information, call GetLastError. The function fails if the requested write operation crosses into an area of the process that is inaccessible.
________________
MultiXBot
MultiX_POT

Последний раз редактировалось fds255; 23.05.2013 в 19:06.
  Ответить с цитированием
Старый 23.05.2013, 23:53   #35
 Разведчик
Аватар для Xantrax2150198
 
Xantrax2150198 никому не известный тип
Регистрация: 12.05.2013
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Ткните носом пожалуйста

Так ладно, приступим к тому, что у меня вообще не получалось - к инжекту асм кода.
Фунцкию инжекта я напишу, а вот где бы взять асм код:
1) простенький - для проверки рабочести;
2) для перемещения в координаты карты (пешком)...?
Просмотрев пол форума, я увидел что, допустим в гайде по написанию бота человек пишет через отсылку пакетов, а в гайде по инжекту от Dinmaite используется asm вставка (я ее очень опасаюсь, но нужно когда-нибудь это сделать). Да, и наверняка у Dinmaite асм вставки(адреса) уже устаревшие. Поделитесь пожалуйста асмом...
Как вставлять спойлеры на форуме?([SPOOLER][/SPOILER] не работает(()

Добавлено через 15 часов 28 минут
Все-таки, у кого как реализована ф-ция перемещения? С помощью пакетов или асм вставки?

Последний раз редактировалось Xantrax2150198; 24.05.2013 в 15:22. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 24.05.2013, 16:48   #36
 Рыцарь
Аватар для Sirioga
 
Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(
Регистрация: 19.11.2008
Сообщений: 385
Популярность: 13343
Сказал(а) спасибо: 124
Поблагодарили 217 раз(а) в 109 сообщениях
 
По умолчанию Re: Ткните носом пожалуйста

Цитата:
Сообщение от Xantrax2150198Посмотреть сообщение
Sirioga, перезапись значения с sizeof(DWORD) (4 байта), размораживает окно нормально и краха клиента не вызывает

Это да, я просто подумал ты спрашиваешь именно о пропатчивании, а не о перезаписи. В общем неверно тебя понял. Еще мне не ясна такая вещь - ты постоянно, приводишь в пример sizeof(dword), почему же ты не поставишь sizeof в саму функцию WriteProcessMemory? Конечно это будет не совсем правильно с точки зрения предназначения и возможно запутает в будущем, но универсально и успокоит тебя...

Цитата:
Сообщение от Xantrax2150198Посмотреть сообщение
Как вставлять спойлеры на форуме?([SPOOLER][/SPOILER] не работает(()

Поставь вместо spoiler, more. Полный список BB кодов форума.
  Ответить с цитированием
Старый 24.05.2013, 18:10   #37
 Разведчик
Аватар для Xantrax2150198
 
Xantrax2150198 никому не известный тип
Регистрация: 12.05.2013
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Ткните носом пожалуйста

Цитата:
почему же ты не поставишь sizeof в саму функцию WriteProcessMemory?

Я всегда ставлю sizeof(), я ж вроде так и пишу (по-русски): "перезапись значения с sizeof(DWORD)", естественно, что я ее вставляю...
На самый главный вопрос так и не ответил, как перемещение осуществлять?
  Ответить с цитированием
Старый 24.05.2013, 18:26   #38
 Рыцарь
Аватар для Sirioga
 
Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(
Регистрация: 19.11.2008
Сообщений: 385
Популярность: 13343
Сказал(а) спасибо: 124
Поблагодарили 217 раз(а) в 109 сообщениях
 
По умолчанию Re: Ткните носом пожалуйста

Цитата:
Сообщение от Xantrax2150198Посмотреть сообщение
Я всегда ставлю sizeof(), я ж вроде так и пишу (по-русски): "перезапись значения с sizeof(DWORD)", естественно, что я ее вставляю...

Ок, значит я в упор не понимаю всего того, о чем ты пишешь, а мой риторический вопрос "зачем" - просто не имеет смысла

Цитата:
Сообщение от Xantrax2150198Посмотреть сообщение
На самый главный вопрос так и не ответил, как перемещение осуществлять?

Я и не старался на него ответить, потому, что я не знаю. Судя по теме Dinmaite это занятие не из простых, с точки зрения понимания о чем идёт речь в этой вставке, да и лично у меня не было нужды заниматься именно этим, по этому даже сказать что либо точно не могу.
А собственно в связи с чем возникла необходимость перемещения?
  Ответить с цитированием
Старый 24.05.2013, 19:11   #39
 Разведчик
Аватар для Xantrax2150198
 
Xantrax2150198 никому не известный тип
Регистрация: 12.05.2013
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Ткните носом пожалуйста

Цитата:
А собственно в связи с чем возникла необходимость перемещения?

Ну как, вот допустим вар, первая автоатака, если ее использовать через отсылку пакетов действует так:
1) перс бежит к мобу и ударяет его.

А если я отсылаю пакет с его первой атакой (там название - уровень 1), то он действует так:
1) если моб далеко, он мне пишет в чат - неизвестное умение, т.е. нужно сначала подбежать к мобу на расстояние действия скилла и применить скилл;
2) если моб близко, то все нормально.

Ну, здесь ладно, можно сделать так:
1) использую автоатаку;
2) использую скилл (но и то, пока он подбежит к мобу это время пройдет). Сейчас использование скиллов у меня осуществляется через отправку нажатия клавиш окну игры (моветон, как скажут многие здесь :)), НО! если использовать скилл через отправку пакетов, а не через нажатие клавиш, то он не бежит к мобу, а использует чисто скилл и идентификатор (wid) моба, и если моб далеко, то он не бежит к нему.

И еще один момент, понимаешь, я запущу бота, уйду куда-нибудь(ненадолго), а он (если мобы расположены прилично друг от друга) может убежать фиг знает куда, ведь перемещается он от моба к мобу, а хотелось бы что бы если в радиусе (к примеру) 100-500 метров мобов нет - возвращаемся в такие-то координаты(точку) и продолжает сканировать на наличие в этом радиусе.

Еще, а если у меня друидка, она кастер, если я напишу использование скилла и моб не в радиусе действия заклинания, то мне в чат выдастся просто - неверное заклинание.
Хорошо, он в зоне действия, а как лут собирать? Ведь нужно добежать сначала до той точки где умер моб... Хотя если реализовать поиск лута как осуществляется поиск мобов и юзать скилл подбора лута, то мне кажется она будет собирать....

Последний раз редактировалось Xantrax2150198; 24.05.2013 в 19:32.
  Ответить с цитированием
Старый 25.05.2013, 02:13   #40
 Разведчик
Аватар для fds255
 
fds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известен
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
 
По умолчанию Re: Ткните носом пожалуйста

Цитата:
Сообщение от Xantrax2150198Посмотреть сообщение
И еще один момент, понимаешь, я запущу бота, уйду куда-нибудь(ненадолго), а он (если мобы расположены прилично друг от друга) может убежать фиг знает куда, ведь перемещается он от моба к мобу, а хотелось бы что бы если в радиусе (к примеру) 100-500 метров мобов нет - возвращаемся в такие-то координаты(точку) и продолжает сканировать на наличие в этом радиусе.

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

Цитата:
Сообщение от Xantrax2150198Посмотреть сообщение
Хорошо, он в зоне действия, а как лут собирать? Ведь нужно добежать сначала до той точки где умер моб... Хотя если реализовать поиск лута как осуществляется поиск мобов и юзать скилл подбора лута, то мне кажется она будет собирать....

Так не прокатит, если юзать скилл подбора лута, то будет собран лут, находящийся рядом с персом. Чтобы собирать лут дистанционными классами, например друидами или лучниками, придется:
1) считать координаты лута
2) рассчитать время, за которое добежит перс до данной точки
3) инжектить асмокод Mine_Drop (© gen-ostr, перенос на Delphi и "универсализация" - Dinmaite)
из темы http://zhyk.ru/forum/showthread.php?t=144558
4) и повторять так до тех пор, пока весь лут не будет собран

Подолью масла в огонь, так сказать:
Нужно следить, за тем, что если в боте не будет выбора, какой лут собирать, то перс при забитом инвентаре будет постоянно бегать к одному и тому же предмету, но взять его не сможет, выдавая себя и тратя время )))
________________
MultiXBot
MultiX_POT
  Ответить с цитированием
Старый 25.05.2013, 10:53   #41
 Разведчик
Аватар для Xantrax2150198
 
Xantrax2150198 никому не известный тип
Регистрация: 12.05.2013
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Ткните носом пожалуйста

Цитата:
то отправляешь перса к точке фарма

Написал тоже самое, что и я только немного другими словами.
Для этого и нужно передвижение по координатам, разве нет?

Добавлено через 2 часа 26 минут
Ммм, странно, как мне найти HP своего пета? Я так понимаю так же как и моба, только изменить проверку условия if(mobType(i)==4), но у меня что-то ничего не находит...

Мой код

Хм, может найти +07CC ActivePetId /Призванный пет/?

Так, нашел ActivePetId

А толку, что дальше-то? Как найти его HP?

Ага, есть так называемый массив петов... (+1140 PetArray /Массив петов/), хорошо, а какой отступ до HP пета в первой ячейке?
Так, ну походу, нужно прибавить к значению массива еще номер ячейки в которой находится пет...
вот оффсеты и функция нахождения HP пета, поправьте оффсеты кто может пожалуйста
А может функция считывания HP пета должна выглядеть так?
И все-таки смещение до HP пета должно выглядеть так....

Хорошо, как найти оффсет используя CheatEngine? Я нашел адресс соответствующий значению HP пета.
Изменил значение, в игре значение тоже изменилось.
Итак это тот адрес, далее Find out what writes to this adress, а дальше что, как действовать?


Спасибо подсказкам CheatEngine я нашел смещение до HP пета.

Люди, не работает глобальная разморозка окна, клиент просто виснет((, какие адреса ставить то для глобальной разморозки?
Код:
void CNewBotDlg::UnfreezeWindow()
{
    
    DWORD unfreeze1 = 0x01B0;
    DWORD A = 0x00436986; 
    DWORD unfreeze2 = 0x01;
    DWORD B = 0x00B9070C; 

    HWND hWnd = ::FindWindow((LPCSTR)"ElementClient Window",NULL);
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
    if(pid!=0)
    {
         WriteProcessMemory(hProcess,(void*)A,&unfreeze1,sizeof(DWORD),NULL);
         WriteProcessMemory(hProcess,(void*)B,&unfreeze2,sizeof(DWORD),NULL);
    }
    else
    {
        MessageBox("pid=0","",MB_OK);
        return;
    }
}
А как найти максимальное количество HP пета или что за фигню выдает оффсет +1C HPProc,fl /%/ в массиве пета?

Последний раз редактировалось Xantrax2150198; 26.05.2013 в 14:01. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 26.05.2013, 16:09   #42
 Рыцарь
Аватар для Sirioga
 
Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(
Регистрация: 19.11.2008
Сообщений: 385
Популярность: 13343
Сказал(а) спасибо: 124
Поблагодарили 217 раз(а) в 109 сообщениях
 
По умолчанию Re: Ткните носом пожалуйста

Цитата:
Сообщение от Xantrax2150198Посмотреть сообщение
Люди, не работает глобальная разморозка окна, клиент просто виснет((, какие адреса ставить то для глобальной разморозки?

Глобальной, это как? Лично я размораживаю записью по адресу 436986, вместо test al,al - mov al,1.

436986 - B0 01 - mov al,01
  Ответить с цитированием
Старый 26.05.2013, 16:39   #43
 Разведчик
Аватар для Xantrax2150198
 
Xantrax2150198 никому не известный тип
Регистрация: 12.05.2013
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Ткните носом пожалуйста

Цитата:
Глобальной, это как?

Глобально - это значит пропатчил функцию и при смене фокуса с окна игры на другое окно, не надо больше ничего записывать никуда в память, т.е. разморозил окно игры раз и навсегда, пока существует процесс игры...
Локальная разморозка - это когда ты с каждой отправкой окну (допустим) нажатия клавиши еще и перезаписываешь значение в памяти(флаг) отвечающее за заморозку окна...
Цитата:
Лично я размораживаю записью по адресу 436986, вместо test al,al - mov al,1.

Это что? Асм код? А через WriteProcessMemory() в какой адрес и что записывать?

P.S. по поводу твоего поста №38 и моего ответа на него комментарии какие-нибудь будут?

Последний раз редактировалось Xantrax2150198; 26.05.2013 в 16:44.
  Ответить с цитированием
Старый 26.05.2013, 17:48   #44
 Рыцарь
Аватар для Sirioga
 
Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(
Регистрация: 19.11.2008
Сообщений: 385
Популярность: 13343
Сказал(а) спасибо: 124
Поблагодарили 217 раз(а) в 109 сообщениях
 
По умолчанию Re: Ткните носом пожалуйста

Цитата:
Сообщение от Xantrax2150198Посмотреть сообщение
клиент просто виснет((

Присмотрелся к твоему коду, и подумать не мог, что ты догадаешься использовать SizeOf в таком отвратительном ключе, то что он может и уместен в некоторых случаях, не говорит о том, что нужно вписывать внутрь тип данных, там должно быть имя переменной, даже если ты заранее знаешь какой тип данных у неё, но даже это не помогло бы, т.к. SizeOf всё равно выдавал бы 4 байта. Отсюда и вывод, вместо записи 2х байт, ты записал 4 байта. SizeOf для такого дела, нужно убрать, либо патчить по 1 байту, с соответствующим типом данных.

Цитата:
Сообщение от Xantrax2150198Посмотреть сообщение
Это что? Асм код? А через WriteProcessMemory() в какой адрес и что записывать?

Код на WinAPI + FreeBASIC
Код:
#include "windows.bi"

Dim PID As UInteger
Dim hProcess As Handle
Dim hWindow as hWnd
Dim Address as dWord = &h436986
Dim lpBuffer As dWord = &h01B0

hWindow = FindWindow("ElementClient Window", "Perfect World")
GetWindowThreadProcessId(hWindow, @PID)
if pid <> 0 then
    hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, PID)
 
    WriteProcessMemory(hProcess, Address, @lpBuffer, 2, NULL)

    CloseHandle(hProcess)

    print "Succes"
else
    print "Can't find game window"
end if

sleep

Последний раз редактировалось Sirioga; 26.05.2013 в 23:29.
  Ответить с цитированием
Старый 27.05.2013, 08:18   #45
 Разведчик
Аватар для Xantrax2150198
 
Xantrax2150198 никому не известный тип
Регистрация: 12.05.2013
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Ткните носом пожалуйста

Цитата:
Присмотрелся к твоему коду, и подумать не мог, что ты догадаешься использовать SizeOf в таком отвратительном ключе,

Sirioga, а у меня вот так вот пропатчилось )) :
Код:
void CNewBotDlg::UnfreezeWindow()
{
    DWORD unfreeze1 = 0xB0;
    DWORD A = 0x00436986; 
    DWORD unfreeze2 = 0x01;
    DWORD B = 0x00B9070C; 

    HWND hWnd = ::FindWindow((LPCSTR)"ElementClient Window",NULL);
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
    if(pid!=0)
    {
         WriteProcessMemory(hProcess,&A,&unfreeze1,sizeof(DWORD),NULL);
         WriteProcessMemory(hProcess,(void*)B,&unfreeze2,sizeof(DWORD),NULL);
    }
    else
    {
        MessageBox("pid=0","",MB_OK);
        return;
    }
    CloseHandle(hProcess);
}
Потестировал, вроде все работает, размораживает раз и навсегда....
  Ответить с цитированием
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Гм Инновы у нас под носом О_о .NextTarget Общение и обсуждение, архив Point Blank 4 10.03.2011 13:16

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 19:28.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net