|
Регистрация | Файлы | Правила | Альбомы | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
Tools Обсуждение программ для MaNGOS |
|
Опции темы | Поиск в этой теме | Опции просмотра |
13.04.2010, 08:53 | #1 |
Forum bot
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
|
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)
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. |
13.04.2010, 08:57 | #2 |
Forum bot
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
|
На данный момент нормально входит на 3.3.2, но не лезет в 3.3.3. При обновлении с 3.1.3 на 3.3.2 были изменения:
WorldSession.cpp Код:
void WorldSession::_HandleAuthChallengeOpcode(WorldPacket& recvPacket) { std::string acc = stringToUpper(GetInstance()->GetConf()->accname); + uint32 sp; + recvPacket >> sp; uint32 serverseed; recvPacket >> serverseed; logdebug("Auth: serverseed=0x%X",serverseed); Sha1Hash digest; digest.UpdateData(acc); uint32 unk=0; + uint64 unk4=0; digest.UpdateData((uint8*)&unk,sizeof(uint32)); BigNumber clientseed; Может кто-то объяснить - что куда написать, чтобы на 3.3.3 начал нормально входить? А то проект обновляется, мягко говоря, нечасто. Сейчас при входе выдается ошибка в PseuWoW: Код:
Connected to world server. CRYPT ERROR: opcode=7442, remain=5078590 Shutting down instance... Код:
Connected to world server. CRYPT ERROR: opcode=42499, remain=3846113 Shutting down instance... Код:
Connected to world server. CRYPT ERROR: opcode=34771, remain=32501 Shutting down instance...
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. |
07.05.2010, 20:43 | #3 |
Forum bot
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
|
фикс под 333а
пишут, что работает, сам пока не проверил, только нашел и поставил.
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. |
Пользователь сказал cпасибо: | lovepsone (08.05.2010) |
11.05.2010, 18:51 | #4 |
Новичок
|
Tempura, при компиляции возникают ошибки:
Компиляции проекта PseuWoW: PHP код:
PHP код:
Ревизия 386 (самая последняя... ) Да и кстати, нашел на github.com репозитарий: http://github.com/BThallid/pseuwow ИМХО: Две ветки, на взгляд одна оригинал, другой он занимается лично сейчас скачаю, попробую скомпилить. И еще, в коммитах есть масса обновляний под 3.3.3а Все те же ошибки... PHP код:
Add: В дебаге скомпилилось без проблем.... |
12.05.2010, 04:31 | #5 |
Forum bot
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
|
Видите ли, дорогой вы мой Lawliet... Я не являюсь разработчиком проекта PseuWoW, поэтому любые личные обращения ко мне по поводу ошибок в данном проекте - просто бессмысленны. Обычно я (как и любой здоровый человек) все найденное и могущее принести пользу - сразу выкладываю сюда. Так что я тут совершенно ни при чем.
Однако, если вы затеете переписку с автором и разработчиком на его собственном форуме, я почти уверен, что вы получите хоть какой-то ответ. (кстати - у меня таже фигня, и я компилю именно в дебаге)
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. |
12.05.2010, 05:18 | #6 |
Новичок
Регистрация: 24.03.2010
Сообщений: 25
Сказал(а) спасибо: 11
Поблагодарили 14 раз(а) в 7 сообщениях
Записей в дневнике: 6
|
Проблема в не объявленной библиотеки или в private объекте класса.
А скорее всего ошибка в Make файлах Visual Studio(не знал как их обозвать, но думаю вы меня поняли), просто автор работает в linux, а make для Visual Studio делает теоретически и проверить на практике не может |
12.05.2010, 11:48 | #7 | |
Новичок
|
Цитата:
Add: Ничего не вышло, чтож делать, дебаг так дебаг.... Только вот еще одна проблема, зависает GUI интерфейс, отладка говорит, что причина в: PHP код:
Последний раз редактировалось Lawliet; 12.05.2010 в 15:40. |
|
12.04.2011, 08:55 | #8 |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Вспомнил об этом клиенте Зашёл и задался мыслью - а можно ли заставить его понимать русские символы и нормально работать с ними через консоль? Т.е. писать сообщения на русском, отображать получаемые сообщения не кракозябрами, а русскими символами, ну и, конечно, заходить персом с именем на русском?
Где это вообще менять, чтобы консольное приложение нормально работало с кириллицей? |
12.04.2011, 09:24 | #9 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
По умолчанию консоль имеет кодировку 866 (OEM), посему :
Или воспользоваться функцией конвертацией для каждой выводимой строки Код:
CharToOem Код:
setlocale(LC_ALL, "Russian"); Код:
cout << "русский текст" << endl; Последний раз редактировалось Йоха; 12.04.2011 в 09:29. |
Пользователь сказал cпасибо: | KiriX (12.04.2011) |
12.04.2011, 10:45 | #10 |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Я уже нашёл в интернетах что-то по поводу:
Код:
SetConsoleCP(1251); SetConsoleOutputCP(1251); Только я что-то совсем не понимаю, где среди множества файлов PseuWoW - начало? С выводом на экран помогло следующее: Код:
SetConsoleOutputCP(CP_UTF8); А вот ввод воспринимать правильно по прежнему отказывается. Код:
setlocale(LC_ALL, "Russian"); Может, дело в том, что работаем мы с UTF8, а не cp1251? Я не нашёл нормального преобразователя с UTF8 для консоли... |
12.04.2011, 16:11 | #12 | ||
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Цитата:
Цитата:
Я как-то писал такую функцию, пример взят из MSDN, там идет сперва идет конвертация в юникод, а потом в 866. Конечно можно написать функцию попроще, но эта работает и главное что она универсальная, можно ее за 5 сек исправить для преобразования любой другой кодировки опять же в любую другую -). Всего лишь поменять "CP_UTF8" и "866". Да, и не забыть что строку после использования нужно удалять руками, или написать маленький класс обертку, для автоматического удаления буфера Код:
char* str_utf8_to_866(BYTE *buf) { wchar_t* pResw = 0; char* pRes = 0; int res_len = 0; res_len = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)buf, -1, 0, 0); if (!res_len) return NULL; pResw = new wchar_t[res_len]; if (!MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)buf, -1, pResw, res_len)) { delete[] pResw; return NULL; } res_len = WideCharToMultiByte(866, 0, pResw, -1, 0, 0, 0, 0); if (!res_len) return 0; pRes = new char[res_len]; if (!pRes) return NULL; if (!WideCharToMultiByte(866, 0, pResw, -1, pRes, res_len, 0, 0)) { delete[] pRes; return NULL; } delete[] pResw; return pRes; } Последний раз редактировалось Йоха; 12.04.2011 в 16:16. |
||
Пользователь сказал cпасибо: | KiriX (12.04.2011) |
12.04.2011, 16:20 | #13 |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Йоха, спасибо.
Вот только проблема в том, что предложенный тобой код не универсален, а в псивове уже есть множество функций вывода текста. Твоё преобразование придётся пихать в каждую их них или писать функцию (что почти равносильно - всё равно придётся переписывать код в очень многих местах...) Но всё же интересно, как эту ситуацию порешили разработчики мангоса Владимир, не поделитесь тайной? Добавил функцию, решил так перевести хотя бы некоторые строки - фиг вам получил. Код: Код:
char *str_utf8_to_866(BYTE *buf) { wchar_t* pResw = 0; char* pRes = 0; int res_len = 0; res_len = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)buf, -1, 0, 0); if (!res_len) return NULL; pResw = new wchar_t[res_len]; if (!MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)buf, -1, pResw, res_len)) { delete[] pResw; return NULL; } res_len = WideCharToMultiByte(866, 0, pResw, -1, 0, 0, 0, 0); if (!res_len) return 0; pRes = new char[res_len]; if (!pRes) return NULL; if (!WideCharToMultiByte(866, 0, pResw, -1, pRes, res_len, 0, 0)) { delete[] pRes; return NULL; } delete[] pResw; return pRes; } void logcustom(uint8 lvl, Color color, BYTE *stru, ...) { char *str = str_utf8_to_866(stru); if(!str || loglevel < lvl) return; va_list ap; _log_setcolor(true,color); if(logtime) printf("%s ", GetTimeString().c_str()); va_start(ap, str); vprintf( str, ap ); va_end(ap); _log_resetcolor(true); printf("\n"); if(logfile) { fprintf(logfile, "%s", getDateString().c_str()); va_start(ap, str); vfprintf(logfile, str, ap); fprintf(logfile, "\n" ); va_end(ap); fflush(logfile); } fflush(stdout); } Код:
3>DefScriptInterface.obj : error LNK2001: неразрешенный внешний символ ""void __cdecl logcustom(unsigned char,enum Color,char const *,...)" (?logcustom@@YAXEW4Color@@PBDZZ)" |
12.04.2011, 16:29 | #14 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Универсального решения нет, что бы с минимальными модификациями кода влепить поддрежку utf8.
В мангосе все то же самое, используется функция vutf8printf, определенная в файле util.cpp. при вызове sLog.OutError вызывается именно она. Внутри vutf8printf так же происходит конфвертация из utf8 в oem, чудес то не бывает -) В псивове какая функция используется для вывода ? printf ? Если да то пишем там функцию printf_utf8, внутри нее делаем конвертацию utf8-oem, а во всем проекте делаем пакетную замену printf на printf_utf8 Имхо это самое быстрое решение. Последний раз редактировалось Йоха; 12.04.2011 в 16:34. |
Пользователь сказал cпасибо: | KiriX (12.04.2011) |
12.04.2011, 17:35 | #15 |
Новичок
Регистрация: 07.03.2010
Адрес: Украина
Сообщений: 26
Сказал(а) спасибо: 28
Поблагодарили 26 раз(а) в 8 сообщениях
|
Ух, я когда-то тоже намучался с этой проблемой...
Запускал bat файлом: %COMSPEC% /C chcp 65001 & PseuWoW.exe Но после первой команды с использованием кирилицы дальше что-либо ввести было нельзя.
__________________
Opcode значения правы, понюхал Фрум официально. |
12.04.2011, 17:45 | #16 | |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Йоха, ну чтож, будем пробовать дальше... Спасибо за подсказки!
Burned, Цитата:
Код:
SetConsoleCP(CP_UTF8); P.S: Копаем дальше |
|
12.04.2011, 18:07 | #17 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Код:
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, ...) Последний раз редактировалось Йоха; 12.04.2011 в 18:23. |
12.04.2011, 18:16 | #18 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Вот слегка измененный вариант, позволяет указывать кодировки при вызове функции, ее так же можно использовать при вводе данных для последующей обработки, только поменять местами CP_UTF8 и 866.
Код:
char* str_convert(const char *buf, UINT codepage_from, UINT codepage_to) { wchar_t* pResw = 0; char* pRes = 0; int res_len = 0; res_len = MultiByteToWideChar(codepage_from, 0, (LPCSTR)buf, -1, 0, 0); if (!res_len) return NULL; pResw = new wchar_t[res_len]; if (!MultiByteToWideChar(codepage_from, 0, (LPCSTR)buf, -1, pResw, res_len)) { delete[] pResw; return NULL; } res_len = WideCharToMultiByte(codepage_to, 0, pResw, -1, 0, 0, 0, 0); if (!res_len) return 0; pRes = new char[res_len]; if (!pRes) return NULL; if (!WideCharToMultiByte(codepage_to, 0, pResw, -1, pRes, res_len, 0, 0)) { delete[] pRes; return NULL; } delete[] pResw; return pRes; } Код:
int _tmain(int argc, _TCHAR* argv[]) { char* str = str_convert("some text", CP_UTF8, 866); printf("%s\n", str); delete[] str; return 0; } Последний раз редактировалось Йоха; 12.04.2011 в 18:29. |
12.04.2011, 19:24 | #19 |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Йоха, я думал BYTE - это важно
Я взял способ с мангоса - выводит теперь всё на русском нормально. Теперь надо разобраться с нормальным вводом русских символов Спасибо за подсказки - очень помог! |
12.04.2011, 19:44 | #20 |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Всё! Я сдаюсь Не могу понять, где идёт работа с входящими (вводимыми) командами, которые пишутся в консоли
Ну хоть отображает теперь на русском нормально |
12.04.2011, 19:46 | #21 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
BYTE это просто typedef unsigned char
Просто у меня в программе использовался именно BYTE, поэтому так и функция выглядела. А для ввода тоже самое, только обратное преобразование Код:
char *str; // каким-то там образом ввели с консоли str char *utf8str = str_convert(str, 866, CP_UTF8); // здесь что-то делаем со строкой в utf8 // ... delete[] utf8str // освобождаем память; |
12.04.2011, 19:51 | #22 | |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Цитата:
|
|
12.04.2011, 20:00 | #23 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
сейчас скачаю исходники, посмотрю
этот адрес github.com/fgenesis/pseuwow ? |
12.04.2011, 22:06 | #25 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
к сожалению не могу запустить сие творение, у меня дома нет мангоса, и не могу посмотреть как он выглядит этот псивов. Что за консоль ? и для чего она используется? а то поиск неизвестно чего в исходниках пока не принес результатов -)
KiriX, скриншот что ли покажи как он выглядит в работе Последний раз редактировалось Йоха; 12.04.2011 в 22:23. |
12.04.2011, 22:32 | #26 |
Пользователь
Регистрация: 09.03.2010
Сообщений: 41
Сказал(а) спасибо: 15
Поблагодарили 20 раз(а) в 11 сообщениях
|
я вообще слышал как кто-то правда на базе не мангос а Runwow создал на базе Unigine совершенно новую Mmorpg с вовской механикой.
причем что интересно нашёл эту инфу на сайте разработчиков unigine.com наших русских кстати. может и на базе PseuWow+ MaNGOS можно что то иное сделать? хотя как мне кажется многие чисто wow-related вещи попросту будут неиспользованы.
__________________
http://ru-mangos.ru/showthread.php?p=949#post949 |
12.04.2011, 22:33 | #27 | |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Цитата:
Такое же консольное окно как и мангос. |
|
12.04.2011, 23:02 | #28 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
понятно. И в этом же окне печатаются команды ? а что за команды которые используют русские символы ?
Вроде как я понял по тексту орбработка консольных команд идет в функции DefReturnResult DefScriptPackage::RunSingleLine(std::string line) эта команда заменяет какие-то переменные на их значения, заполняет структуру CmdSet и передает ее дальше на исполнение: DefScriptPackage::Interpret(CmdSet& Set) тут идет перебор встроенных команд и если найдена то отдается выполнение найденой функции, если нет, пытается запустить какой-то внешний скрипт В общем предлагаю в эту функцию: Код:
void PseuInstance::ProcessCliQueue(void) { std::string cmd; while(_cliQueue.size()) { cmd = _cliQueue.next(); try { GetScripts()->RunSingleLine(cmd); } catch(...) { logerror("Exception while executing CLI command: \"%s\"",cmd.c_str()); } } } примерно так: Код:
void PseuInstance::ProcessCliQueue(void) { std::string cmd; while(_cliQueue.size()) { cmd = _cliQueue.next(); try { char *charutf8 = str_convert(cmd.c_str(), 866, CP_UTF8); std::string strutf8(charutf8); GetScripts()->RunSingleLine(strutf8); delete[] charutf8; } catch(...) { logerror("Exception while executing CLI command: \"%s\"",cmd.c_str()); } } } Последний раз редактировалось Йоха; 13.04.2011 в 13:45. |
12.04.2011, 23:22 | #29 |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Да, в общем-то всё правильно понял.
Спасибо, завтра уже попробую. Команда какая? Да почти любая - начиная от простой переписки в чате и заканчивая announce и notify. В общем применение есть, самое важное - чат. |
13.04.2011, 10:15 | #30 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
есть успехи ?
|
13.04.2011, 12:02 | #31 |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Результаты получены - всё прекрасно работает!!! Огромное спасибо за помощь Попробую сегодня переписать и вывод инфы с функцией, которую ты дал, чтобы не добавлять лишние файлы в проект - потом выложу патчем. Ещё раз огромное спасибо за помощь! Попробовал с вашим патчем на вывод данных - хренушки - программа падает, как только пробует вывести данные на русском. Пока не разбирался почему - обед кончился - работать надо |
20.04.2011, 19:35 | #32 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
|
21.04.2011, 06:16 | #33 |
Forum bot
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
|
... еще неплохо бы рабочие бинарники под 335 А то у меня таких нет.
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. |
21.04.2011, 08:19 | #35 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
|
21.04.2011, 12:08 | #36 |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Вот код для Йохи:
Код:
char* str_convert_log(const char *buf, UINT codepage_from, UINT codepage_to) { wchar_t* pResw = 0; char* pRes = 0; int res_len = 0; res_len = MultiByteToWideChar(codepage_from, 0, (LPCSTR)buf, -1, 0, 0); if (!res_len) return NULL; pResw = new wchar_t[res_len]; if (!MultiByteToWideChar(codepage_from, 0, (LPCSTR)buf, -1, pResw, res_len)) { delete[] pResw; return NULL; } res_len = WideCharToMultiByte(codepage_to, 0, pResw, -1, 0, 0, 0, 0); if (!res_len) return 0; pRes = new char[res_len]; if (!pRes) return NULL; if (!WideCharToMultiByte(codepage_to, 0, pResw, -1, pRes, res_len, 0, 0)) { delete[] pRes; return NULL; } delete[] pResw; return pRes; } *** void logcustom(uint8 lvl, Color color, const char *str, ...) { char *charutf8 = str_convert_log(str, CP_UTF8, 866); if(!str || loglevel < lvl) return; va_list ap; _log_setcolor(true,color); if(logtime) printf("%s ", GetTimeString().c_str()); va_start(ap, charutf8); vprintf(charutf8, ap); va_end(ap); _log_resetcolor(true); printf("\n"); if(logfile) { fprintf(logfile, "%s", getDateString().c_str()); va_start(ap, charutf8); vfprintf(logfile, charutf8, ap); fprintf(logfile, "\n" ); va_end(ap); fflush(logfile); } fflush(stdout); delete[] charutf8; } |
Пользователь сказал cпасибо: | tempura (21.04.2011) |
21.04.2011, 19:43 | #37 |
Forum bot
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
|
Оно наконец-то заработало!!! В логе поиском по слову error выдает только
Код:
*** All files loaded without errors.
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. |
21.04.2011, 21:03 | #39 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Код:
void logcustom(uint8 lvl, Color color, const char *str, ...) { char *charutf8 = str_convert_log(str, CP_UTF8, 866); if(!str || loglevel < lvl) return; va_list ap; _log_setcolor(true,color); if(logtime) printf("%s ", GetTimeString().c_str()); va_start(ap, charutf8); vprintf(charutf8, ap); va_end(ap); _log_resetcolor(true); printf("\n"); if(logfile) { fprintf(logfile, "%s", getDateString().c_str()); va_start(ap, charutf8); vfprintf(logfile, charutf8, ap); fprintf(logfile, "\n" ); va_end(ap); fflush(logfile); } fflush(stdout); delete[] charutf8; P.S. этот код может быть не корректен, так как конвертируется только строка формата, а все параметры остаются в изначальной кодировке и если utf8 строки передаются в качестве параметра, то тут то и наступят грабли Последний раз редактировалось Йоха; 21.04.2011 в 23:49. |
21.04.2011, 23:14 | #40 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
вот так 100% верно:
Код:
void logcustom(uint8 lvl, Color color, const char *str, ...) { char buf[4096]; // if(!str || loglevel < lvl) return; va_list ap; _log_setcolor(true,color); if(logtime) printf("%s ", GetTimeString().c_str()); va_start(ap, str); vsprintf(buf, str, ap ); va_end(ap); char* str_oem = str_convert_log(buf, CP_UTF8, 866); printf("%s\n", str_oem); _log_resetcolor(true); if(logfile) { fprintf(logfile, "%s %s\n", getDateString().c_str(), str_oem); fflush(logfile); } fflush(stdout); delete[] str_oem; } Последний раз редактировалось Йоха; 21.04.2011 в 23:49. |
Метки |
pseuwow, альтернативный клиент |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Клиент Катаклизма | evilstar | Флудильня | 5 | 04.12.2010 12:58 |
Нужна помощь по установке сервера mangos в дата центр | Kolyasamec | Корзина | 1 | 25.09.2010 21:28 |
Портативный SQL клиент | selector | Новичкам | 10 | 09.07.2010 17:12 |
я проста с линуксом сталковаюсь первый раз | vsalda | Флудильня | 7 | 12.06.2010 03:40 |
Клиент не пускает в мир mangos | koloff | Корзина | 1 | 19.04.2010 00:29 |