PseuWoW - первый Альтернативный клиент для сервера MaNGOS
Часть 1.
Описание. PseuWoW - альтернативный opensource MMORPG клиент, который позволяет соединяться с MaNGOS и другими серверами ВоВ. Пожалуйста обратите внимание, что PseuWoW официально поддерживает только MаNGOS. Преимущества: - Работает на любой Windows-платформе (win98 +) - почти отсутствуют системные требования к ЭВМ (386 процессора будет достаточно для запуска, но работа программмы будет медленной) - минимум дискового пространства (основной размер пакета - ниже 5 МБ) - минимальные требования к оперативной памяти - может быть запущен ото всюду, не нуждается в установке, и ничего не изменяют в системе, на компьютере, где производится запуск (подобно реестру). Запускайте клиент где угодно: школа, офис, и т.д, к примеру, Вы можете болтать с людьми, играющими на серверах. - может быть расширен через скриптинг - очень быстрое время входа. По локальным сетям требуется 2 секунды, чтобы подсоединиться к Realm серверу, если у вас достаточно быстрая машина (начал считать, как только запустил .ехе) - файлы клиента Blizzard критически НЕ необходимы для работы, но Вы можете модульно добавлять контент от коммерческих MMO игр (stuffextract.exe для WoW) - наиболее важный аспект: проект создан как opensource! измените код под ваши нужды, и поделитесь с другими. Неудобства: - основной пакет без извлеченных ресурсов игры обеспечивает мало функциональных возможностей - все еще в очень раннем состоянии, так что не ожидайте слишком много, есть так много вещей, которые еще не осуществлены. - чем больше контента включено и загружено, тем больше используется оперативной памяти и места на диске. - Вы не можете использовать данные игры, упакованные в оригинале MPQ архив, их необходимо извлечь. Это занимает больше дискового места, но лучше для изменения данных и улучшения совместимости. К счастью stuffextract делает все необходимое автоматически. Часть 2. Установка. --------------------- Клиент идет с готовыми к использованию SCP данными, извлеченными из 3.3.2 enGB клиента. Все, что Вы должны сделать, это изменить ваши conf файлы. --------------------- 1.) Откройте дирректорию conf . 2.) Скопируйте все *.conf.default файлы и переимуйте их копии в *.conf (удалите расширение .default) 3.) Откройте PseuWoW.conf блокнотом или любым другим текстовым редактором. 4.) Сконфигурируйте файл, чтобы он соответствовыл вашей логин-информации. Читайте комментарии в файле для более детальной справки. 5.) Если Вы планируете использовать PseuWoW как бота, редактируйте файл users.conf и добавляйте пользователей и уровни доступа. (Разрешения необходимы, чтобы управлять DefScripts; если разрешение игрока слишком низко для скрипта ему не разрешат запустить его.) Также проверьте ScriptConfig.conf для встроенных назначений скрипта (автоброадкаст = сообщение дня). 6.) Не забывайте сохранять изменения!!! 7.) Скопируйте stuffextract.exe (и .bat файлы) в дирректорию, где установлен клиент World of Warcraft. Обратите внимание: используйте WoW 3.0.8, другие клиенты не подходят и не подерживаются. Запустите stuffextract, после того, как он закончит работу, перейдите в папку /stuffextract/ и скопируйте все файлы и папки в дирректорию PseuWoW . замените существующие данные! >> есть 2 .bat файла, идущих с сервером, один, чтобы извлечь только минимальное количество требуемых данных, >> и тот, который также извлекает карты, если Вы интересуетесь тестированнием. >>В этом релизе мы уже упаковали самые необходимые данные, так что Вы нуждаетесь в stuffextract только если хотите использовать данные различных языков. 8.) Запустите PseuWoW. 9.) Ошибка? Убедитесь, что Вы установили правильный адрес realmlist, realm name и character name. Персонаж должен существовать! (В противном случае создайте персонажа, используя коммерческий клиент). Проверьте также, есть ли файл _startup.def в корневой дирректории PseuWoW, он необходим! 10.) Запустите снова. Все еще ошибка? Посетите форум! Часть 3. ЧАВО. Через некоторое время, я получаю crypt errors, exceptions или unknown object errors! Что я могу сделать? Сообщите об ошибке! Опубликуйте ваши лог-файлы, они могли бы быть полезны. Не забудьте почистить логи, если вы собираетесь сделать их достоянием широкой общественности. Крашит. КАКОГО ...? СООБЩИТЕ НАМ!!!!!! И добавьте логи!!! Как я могу изменить или выключить сообщение " [A13-dev1] login successful. "? Откройте scripts/__core_eventstubs.def текстовым редактором и измените соответствующую строку. Как я могу использовать консоль? Если консоль не активна, убедитесь, что строка "enablecli=1" существует в вашем conf файле. Если Вы видите " <>: " при запуске, консоль однозначно активна. Вы можете ввести что - нибудь, что существует как a .def файл в вашй скриптовой дерриктории. Пример: "say привет" (проверьте scripts/say.def) В основном все, в что Вы вводите - скриптовые команды. Обратите внимание: чтобы "заблокировать(заморозит ь)" команду, напечатайте название, которому будет предшествовать символ "!"-> "! say". Это означает, что Вы напечатали, будет добавляться в конец команды "say". пример: на консоли отобразилось: " <>: " Вы напечатали: "! whisper, Keks" - нажмите enter на консоли отобразилось: ":" Вы напечатали: "Привет, друг! Видел бы ты мой клиент ))" итог: отправлено личное сообщение игроку Keks "Привет, друг! Видел бы ты мой клиент ))". Как я могу делать мои собственные скрипты? Создайте .def файл в папке скриптов, и напишите код.Информация о синтаксисе - https: // opensvn.csie.org/traccgi/PseuWoW/wiki/DefScript Когда выполняются основные скрипты? - _enterworld.def: когда вход в мир был успешен. - _leaveworld.def: когда PseuWoW разъединен. - _startup.def: в течение инициализации программы. также здесь загружаются conf файлы. - _nopermission.def: когда игрок пробовал выполнить недопустимую команду ingame. - _onwhisper: личное сообщение от игрока - recieved. (за исключением личного сообщения самому себе) Я хочу удаленно управлять PseuWoW. Как я могу сделать это? (1) послать сообщение PseuWoW в чате (say, yell, whisper, channel,...),который начинается с - (минуса). PseuWoW интерпретирет это сообщение чата как скриптовую команду, подобно тому, если это было напечатано в окне консоли. Установить разрешения, какие скрипты кто может использовать, редактируя /conf/users.conf. Чтобы изменить уровень доступа для скриптов,редактируйте флаг *permission=xx в файлах скрипта, или установите это используя команду setscriptpermission. Офсайт: _http://mangosclient.org/ Исходники: _https://pseuwow.svn.sourceforge.net/svnroot/pseuwow/ (outdated) _http://github.com/fgenesis/pseuwow (orig) (outdated) _http://github.com/BThallid/pseuwow (fork) (outdated) _http://github.com/shlainn/pseuwow (fork) (current) |
На данный момент нормально входит на 3.3.2, но не лезет в 3.3.3. При обновлении с 3.1.3 на 3.3.2 были изменения:
WorldSession.cpp Код:
void WorldSession::_HandleAuthChallengeOpcode(WorldPacket& recvPacket) Может кто-то объяснить - что куда написать, чтобы на 3.3.3 начал нормально входить? А то проект обновляется, мягко говоря, нечасто. :) Сейчас при входе выдается ошибка в PseuWoW: Код:
Connected to world server. Код:
Connected to world server. Код:
Connected to world server. |
Вложений: 1
фикс под 333а
пишут, что работает, сам пока не проверил, только нашел и поставил. |
Tempura, при компиляции возникают ошибки:
Компиляции проекта PseuWoW: PHP код:
PHP код:
Ревизия 386 (самая последняя... :mda: ) Да и кстати, нашел на github.com репозитарий: http://github.com/BThallid/pseuwow ИМХО: Две ветки, на взгляд одна оригинал, другой он занимается лично :) сейчас скачаю, попробую скомпилить. И еще, в коммитах есть масса обновляний под 3.3.3а :declare: Все те же ошибки... PHP код:
Add: В дебаге скомпилилось без проблем.... |
Видите ли, дорогой вы мой Lawliet... Я не являюсь разработчиком проекта PseuWoW, поэтому любые личные обращения ко мне по поводу ошибок в данном проекте - просто бессмысленны. :) Обычно я (как и любой здоровый человек) все найденное и могущее принести пользу - сразу выкладываю сюда. Так что я тут совершенно ни при чем.
Однако, если вы затеете переписку с автором и разработчиком на его собственном форуме, я почти уверен, что вы получите хоть какой-то ответ. :) (кстати - у меня таже фигня, и я компилю именно в дебаге) |
Проблема в не объявленной библиотеки или в private объекте класса.
А скорее всего ошибка в Make файлах Visual Studio(не знал как их обозвать, но думаю вы меня поняли), просто автор работает в linux, а make для Visual Studio делает теоретически и проверить на практике не может |
Цитата:
Add: Ничего не вышло, чтож делать, дебаг так дебаг.... Только вот еще одна проблема, зависает GUI интерфейс, отладка говорит, что причина в: PHP код:
|
Вспомнил об этом клиенте =) Зашёл и задался мыслью - а можно ли заставить его понимать русские символы и нормально работать с ними через консоль? Т.е. писать сообщения на русском, отображать получаемые сообщения не кракозябрами, а русскими символами, ну и, конечно, заходить персом с именем на русском?
Где это вообще менять, чтобы консольное приложение нормально работало с кириллицей? |
По умолчанию консоль имеет кодировку 866 (OEM), посему :
Или воспользоваться функцией конвертацией для каждой выводимой строки Код:
CharToOem Код:
setlocale(LC_ALL, "Russian"); Код:
cout << "русский текст" << endl; |
Я уже нашёл в интернетах что-то по поводу:
Код:
SetConsoleCP(1251); Только я что-то совсем не понимаю, где среди множества файлов PseuWoW - начало? =) С выводом на экран помогло следующее: Код:
SetConsoleOutputCP(CP_UTF8); А вот ввод воспринимать правильно по прежнему отказывается. Код:
setlocale(LC_ALL, "Russian"); Может, дело в том, что работаем мы с UTF8, а не cp1251? Я не нашёл нормального преобразователя с UTF8 для консоли... |
А как это реализовано в мангосе? Там с вводом/выводом проблем нет. Всё прекрасно вводится и выводится на русском...
|
Цитата:
Цитата:
Я как-то писал такую функцию, пример взят из MSDN, там идет сперва идет конвертация в юникод, а потом в 866. Конечно можно написать функцию попроще, но эта работает и главное что она универсальная, можно ее за 5 сек исправить для преобразования любой другой кодировки опять же в любую другую -). Всего лишь поменять "CP_UTF8" и "866". Да, и не забыть что строку после использования нужно удалять руками, или написать маленький класс обертку, для автоматического удаления буфера Код:
char* str_utf8_to_866(BYTE *buf) |
Йоха, спасибо.
Вот только проблема в том, что предложенный тобой код не универсален, а в псивове уже есть множество функций вывода текста. Твоё преобразование придётся пихать в каждую их них или писать функцию (что почти равносильно - всё равно придётся переписывать код в очень многих местах...) Но всё же интересно, как эту ситуацию порешили разработчики мангоса =) Владимир, не поделитесь тайной? =) Добавил функцию, решил так перевести хотя бы некоторые строки - фиг вам получил. Код: Код:
char *str_utf8_to_866(BYTE *buf) Код:
3>DefScriptInterface.obj : error LNK2001: неразрешенный внешний символ ""void __cdecl logcustom(unsigned char,enum Color,char const *,...)" (?logcustom@@YAXEW4Color@@PBDZZ)" |
Универсального решения нет, что бы с минимальными модификациями кода влепить поддрежку utf8.
В мангосе все то же самое, используется функция vutf8printf, определенная в файле util.cpp. при вызове sLog.OutError вызывается именно она. Внутри vutf8printf так же происходит конфвертация из utf8 в oem, чудес то не бывает -) В псивове какая функция используется для вывода ? printf ? Если да то пишем там функцию printf_utf8, внутри нее делаем конвертацию utf8-oem, а во всем проекте делаем пакетную замену printf на printf_utf8 Имхо это самое быстрое решение. |
Ух, я когда-то тоже намучался с этой проблемой...
Запускал bat файлом: %COMSPEC% /C chcp 65001 & PseuWoW.exe Но после первой команды с использованием кирилицы дальше что-либо ввести было нельзя. |
Йоха, ну чтож, будем пробовать дальше... Спасибо за подсказки!
Burned, Цитата:
Код:
SetConsoleCP(CP_UTF8); P.S: Копаем дальше =) |
Код:
DefScriptInterface.obj : error LNK2001: неразрешенный внешний символ ""void __cdecl logcustom(unsigned char,enum Color,char const *,...)" Код:
void logcustom(uint8 lvl, Color color, BYTE *stru, ...) Код:
char *str_utf8_to_866(const char *buf) Код:
void logcustom(uint8 lvl, Color color, const char *stru, ...) |
Вот слегка измененный вариант, позволяет указывать кодировки при вызове функции, ее так же можно использовать при вводе данных для последующей обработки, только поменять местами CP_UTF8 и 866.
Код:
char* str_convert(const char *buf, UINT codepage_from, UINT codepage_to) Код:
int _tmain(int argc, _TCHAR* argv[]) |
Йоха, я думал BYTE - это важно =)
Я взял способ с мангоса - выводит теперь всё на русском нормально. Теперь надо разобраться с нормальным вводом русских символов =) Спасибо за подсказки - очень помог! ;) |
Всё! Я сдаюсь =( Не могу понять, где идёт работа с входящими (вводимыми) командами, которые пишутся в консоли =(
Ну хоть отображает теперь на русском нормально =) |
Цитата:
Просто у меня в программе использовался именно BYTE, поэтому так и функция выглядела. А для ввода тоже самое, только обратное преобразование Код:
char *str; |
Цитата:
|
сейчас скачаю исходники, посмотрю
этот адрес github.com/fgenesis/pseuwow ? |
Вложений: 1
Цитата:
Патчем, то, что я уже сделал - хотябы выводит русский язык =) |
к сожалению не могу запустить сие творение, у меня дома нет мангоса, и не могу посмотреть как он выглядит этот псивов. Что за консоль ? и для чего она используется? а то поиск неизвестно чего в исходниках пока не принес результатов -)
KiriX, скриншот что ли покажи как он выглядит в работе |
я вообще слышал как кто-то правда на базе не мангос а Runwow создал на базе Unigine совершенно новую Mmorpg с вовской механикой.
причем что интересно нашёл эту инфу на сайте разработчиков unigine.com наших русских кстати. может и на базе PseuWow+ MaNGOS можно что то иное сделать? хотя как мне кажется многие чисто wow-related вещи попросту будут неиспользованы. |
понятно. И в этом же окне печатаются команды ? а что за команды которые используют русские символы ?
Вроде как я понял по тексту орбработка консольных команд идет в функции DefReturnResult DefScriptPackage::RunSingleLine(std::string line) эта команда заменяет какие-то переменные на их значения, заполняет структуру CmdSet и передает ее дальше на исполнение: DefScriptPackage::Interpret(CmdSet& Set) тут идет перебор встроенных команд и если найдена то отдается выполнение найденой функции, если нет, пытается запустить какой-то внешний скрипт В общем предлагаю в эту функцию: Код:
void PseuInstance::ProcessCliQueue(void) примерно так: Код:
void PseuInstance::ProcessCliQueue(void) |
Да, в общем-то всё правильно понял.
Спасибо, завтра уже попробую. Команда какая? Да почти любая - начиная от простой переписки в чате и заканчивая announce и notify. В общем применение есть, самое важное - чат. |
есть успехи ?
|
Цитата:
Результаты получены - всё прекрасно работает!!! =) Огромное спасибо за помощь ;) Попробую сегодня переписать и вывод инфы с функцией, которую ты дал, чтобы не добавлять лишние файлы в проект - потом выложу патчем. =) Ещё раз огромное спасибо за помощь! ;) Попробовал с вашим патчем на вывод данных - хренушки - программа падает, как только пробует вывести данные на русском. Пока не разбирался почему - обед кончился - работать надо =) |
Цитата:
|
... еще неплохо бы рабочие бинарники под 335 :) А то у меня таких нет.
|
Цитата:
Цитата:
|
Цитата:
Цитата:
Ну вот тот кусок который ты переписал на вывод используя мою функцию. |
Вложений: 1
Вот код для Йохи:
Код:
char* str_convert_log(const char *buf, UINT codepage_from, UINT codepage_to) |
Оно наконец-то заработало!!! В логе поиском по слову error выдает только
Код:
*** All files loaded without errors. |
Цитата:
|
Код:
void logcustom(uint8 lvl, Color color, const char *str, ...) P.S. этот код может быть не корректен, так как конвертируется только строка формата, а все параметры остаются в изначальной кодировке и если utf8 строки передаются в качестве параметра, то тут то и наступят грабли |
вот так 100% верно:
Код:
void logcustom(uint8 lvl, Color color, const char *str, ...) |
Текущее время: 18:48. Часовой пояс GMT +3. |
ru-mangos.ru - Русское сообщество MaNGOS