Ru-MaNGOS

Вернуться   Ru-MaNGOS > Дополнения > Tools

Важная информация

Tools Обсуждение программ для MaNGOS

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.04.2010, 08:53   #1
tempura
Forum bot
 
Аватар для tempura
 
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
tempura отключил(а) отображение уровня репутации
По умолчанию 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)
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки.
tempura вне форума   Ответить с цитированием
12 пользователя(ей) сказали cпасибо:
DeusModus (14.04.2010), dj--alex (12.04.2011), Foks (06.05.2010), Hantet (05.12.2011), KiriX (25.05.2010), Kujbor (01.05.2011), Rossy (05.11.2011)
Старый 13.04.2010, 08:57   #2
tempura
Forum bot
 
Аватар для tempura
 
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
tempura отключил(а) отображение уровня репутации
По умолчанию

На данный момент нормально входит на 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;
(про откат с 332 на 313 автор дословно написал: "pseuwow 3.1.3 expects 4 bytes in auth challenge, while pseuwow 3.3.2 expects 8. that explains why it fails to read - your 3.1.3 server sends only 4 bytes there")

Может кто-то объяснить - что куда написать, чтобы на 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...
ну и так далее...
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки.
tempura вне форума   Ответить с цитированием
Старый 07.05.2010, 20:43   #3
tempura
Forum bot
 
Аватар для tempura
 
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
tempura отключил(а) отображение уровня репутации
По умолчанию

фикс под 333а


пишут, что работает, сам пока не проверил, только нашел и поставил.
Вложения
Тип файла: patch wow333a.patch (1.1 Кб, 770 просмотров)
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки.
tempura вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
lovepsone (08.05.2010)
Старый 11.05.2010, 18:51   #4
Lawliet
Новичок
 
Аватар для Lawliet
 
Регистрация: 16.03.2010
Адрес: Россия/г.Ижевск
Сообщений: 14
Сказал(а) спасибо: 4
Поблагодарили 3 раз(а) в 3 сообщениях
Lawliet На верном пути
Отправить сообщение для Lawliet с помощью ICQ
По умолчанию

Tempura, при компиляции возникают ошибки:
Компиляции проекта PseuWoW:

PHP код:
Linking...
   
Creating library D:\Dev\pseywow\/bin/PseuWoW_VC90_noconsole.lib and object D:\Dev\pseywow\/bin/PseuWoW_VC90_noconsole.exp
LINK 
warning LNK4098defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
WorldSession
.obj error LNK2001unresolved external symbol __CrtDbgReportW
libcpmtd
.lib(stdthrow.obj) : error LNK2001unresolved external symbol __CrtDbgReportW
libcpmtd
.lib(xdebug.obj) : error LNK2001unresolved external symbol __malloc_dbg
libcpmtd
.lib(xdebug.obj) : error LNK2001unresolved external symbol __free_dbg
D
:\Dev\pseywow\/bin/PseuWoW_VC90_noconsole.exe fatal error LNK11203 unresolved externals
Build log was saved at 
"file://D:\Dev\pseywow\temp\PseuWoW\Release noconsole\BuildLog.htm"
PseuWoW 5 error(s), 3 warning(s
И StuffExtract:

PHP код:
Linking...
LINK fatal error LNK1104cannot open file 'StormLibRAS.lib'
Build log was saved at "file://D:\Dev\pseywow\temp\StuffExtract\Release\BuildLog.htm"
StuffExtract 1 error(s), 0 warning(s
В чем проблема не подскажите, пробовал компилить как просто Release Win32, так и остальные конфигурации, с настройками и без, ни хочет ни в какую.

Ревизия 386 (самая последняя... )

Да и кстати, нашел на github.com репозитарий:
http://github.com/BThallid/pseuwow

ИМХО: Две ветки, на взгляд одна оригинал, другой он занимается лично сейчас скачаю, попробую скомпилить. И еще, в коммитах есть масса обновляний под 3.3.3а

Все те же ошибки...

PHP код:
Linking...
   
Creating library D:\Dev\pseywow\/bin/PseuWoW_VC90.lib and object D:\Dev\pseywow\/bin/PseuWoW_VC90.exp
LINK 
warning LNK4098defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
WorldSession
.obj error LNK2001unresolved external symbol __CrtDbgReportW
libcpmtd
.lib(stdthrow.obj) : error LNK2001unresolved external symbol __CrtDbgReportW
libcpmtd
.lib(xdebug.obj) : error LNK2001unresolved external symbol __malloc_dbg
libcpmtd
.lib(xdebug.obj) : error LNK2001unresolved external symbol __free_dbg
D
:\Dev\pseywow\/bin/PseuWoW_VC90.exe fatal error LNK11203 unresolved externals
Build log was saved at 
"file://D:\Dev\pseywow\temp\PseuWoW\Release\BuildLog.htm"
PseuWoW 5 error(s), 1 warning(s
Tempura, подскажите пожалуйста как от этого избавится


Add: В дебаге скомпилилось без проблем....
Lawliet вне форума   Ответить с цитированием
Старый 12.05.2010, 04:31   #5
tempura
Forum bot
 
Аватар для tempura
 
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
tempura отключил(а) отображение уровня репутации
По умолчанию

Видите ли, дорогой вы мой Lawliet... Я не являюсь разработчиком проекта PseuWoW, поэтому любые личные обращения ко мне по поводу ошибок в данном проекте - просто бессмысленны. Обычно я (как и любой здоровый человек) все найденное и могущее принести пользу - сразу выкладываю сюда. Так что я тут совершенно ни при чем.
Однако, если вы затеете переписку с автором и разработчиком на его собственном форуме, я почти уверен, что вы получите хоть какой-то ответ.

(кстати - у меня таже фигня, и я компилю именно в дебаге)
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки.
tempura вне форума   Ответить с цитированием
Старый 12.05.2010, 05:18   #6
MangMan
Новичок
 
Аватар для MangMan
 
Регистрация: 24.03.2010
Сообщений: 25
Сказал(а) спасибо: 11
Поблагодарили 14 раз(а) в 7 сообщениях
Записей в дневнике: 6
MangMan На верном пути
По умолчанию

Проблема в не объявленной библиотеки или в private объекте класса.
А скорее всего ошибка в Make файлах Visual Studio(не знал как их обозвать, но думаю вы меня поняли), просто автор работает в linux, а make для Visual Studio делает теоретически и проверить на практике не может
MangMan вне форума   Ответить с цитированием
Старый 12.05.2010, 11:48   #7
Lawliet
Новичок
 
Аватар для Lawliet
 
Регистрация: 16.03.2010
Адрес: Россия/г.Ижевск
Сообщений: 14
Сказал(а) спасибо: 4
Поблагодарили 3 раз(а) в 3 сообщениях
Lawliet На верном пути
Отправить сообщение для Lawliet с помощью ICQ
По умолчанию

Цитата:
Сообщение от MangMan Посмотреть сообщение
Проблема в не объявленной библиотеки или в private объекте класса.
А скорее всего ошибка в Make файлах Visual Studio(не знал как их обозвать, но думаю вы меня поняли), просто автор работает в linux, а make для Visual Studio делает теоретически и проверить на практике не может
Спасибо за подсказку, попробую сегодня, что нибудь придумать, если же не получится, будем компилить в дебаге

Add: Ничего не вышло, чтож делать, дебаг так дебаг.... Только вот еще одна проблема, зависает GUI интерфейс, отладка говорит, что причина в:

PHP код:
MapMgr.-> inline uint32 GetGridX(void) { return _gridx; } 
Add2: возможно потому, что я извлекал из 3.3.3а клиента дата файлы, в вашем мануале написано, поддерживается только 3.0.8

Последний раз редактировалось Lawliet; 12.05.2010 в 15:40.
Lawliet вне форума   Ответить с цитированием
Старый 12.04.2011, 08:55   #8
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Вспомнил об этом клиенте Зашёл и задался мыслью - а можно ли заставить его понимать русские символы и нормально работать с ними через консоль? Т.е. писать сообщения на русском, отображать получаемые сообщения не кракозябрами, а русскими символами, ну и, конечно, заходить персом с именем на русском?
Где это вообще менять, чтобы консольное приложение нормально работало с кириллицей?
KiriX вне форума   Ответить с цитированием
Старый 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
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Я уже нашёл в интернетах что-то по поводу:
Код:
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
Тоже в начале программы вставлять надо
Только я что-то совсем не понимаю, где среди множества файлов PseuWoW - начало?

С выводом на экран помогло следующее:
Код:
SetConsoleOutputCP(CP_UTF8);
При условии если в консоли стоит настройка шрифта Lucida Console.
А вот ввод воспринимать правильно по прежнему отказывается.
Код:
setlocale(LC_ALL, "Russian");
Вообще выводит страшные кракозябры, которые даже http://www.artlebedev.ru/tools/decoder перевести не может
Может, дело в том, что работаем мы с UTF8, а не cp1251? Я не нашёл нормального преобразователя с UTF8 для консоли...
KiriX вне форума   Ответить с цитированием
Старый 12.04.2011, 14:32   #11
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

А как это реализовано в мангосе? Там с вводом/выводом проблем нет. Всё прекрасно вводится и выводится на русском...
KiriX вне форума   Ответить с цитированием
Старый 12.04.2011, 16:11   #12
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от KiriX Посмотреть сообщение
Только я что-то совсем не понимаю, где среди множества файлов PseuWoW - начало?
в любой программе на с/с++ "начало" это функция main

Цитата:
Сообщение от KiriX Посмотреть сообщение
Может, дело в том, что работаем мы с UTF8, а не cp1251? Я не нашёл нормального преобразователя с UTF8 для консоли...
а, ну если там используется UTF-8, то придется конвертировать текст из этой кодировки в OEM

Я как-то писал такую функцию, пример взят из 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
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Йоха, спасибо.
Вот только проблема в том, что предложенный тобой код не универсален, а в псивове уже есть множество функций вывода текста. Твоё преобразование придётся пихать в каждую их них или писать функцию (что почти равносильно - всё равно придётся переписывать код в очень многих местах...)
Но всё же интересно, как эту ситуацию порешили разработчики мангоса Владимир, не поделитесь тайной?

Добавил функцию, решил так перевести хотя бы некоторые строки - фиг вам получил.
Код:
Код:
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)"
А при чём он здесь вообще???
KiriX вне форума   Ответить с цитированием
Старый 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
Burned
Новичок
 
Аватар для Burned
 
Регистрация: 07.03.2010
Адрес: Украина
Сообщений: 26
Сказал(а) спасибо: 28
Поблагодарили 26 раз(а) в 8 сообщениях
Burned На верном пути
По умолчанию

Ух, я когда-то тоже намучался с этой проблемой...
Запускал bat файлом:
%COMSPEC% /C chcp 65001 & PseuWoW.exe

Но после первой команды с использованием кирилицы дальше что-либо ввести было нельзя.
__________________
Opcode значения правы, понюхал Фрум официально.
Burned вне форума   Ответить с цитированием
Старый 12.04.2011, 17:45   #16
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Йоха, ну чтож, будем пробовать дальше... Спасибо за подсказки!
Burned,
Цитата:
Сообщение от KiriX Посмотреть сообщение
С выводом на экран помогло следующее:
Код:
SetConsoleOutputCP(CP_UTF8);
При условии если в консоли стоит настройка шрифта Lucida Console
Вызывает аналогичную проблему. Отображать отображает, отправляет неверно. Если использовать ещё и
Код:
SetConsoleCP(CP_UTF8);
тоже виснет при первом вводе кириллицы...
P.S: Копаем дальше
KiriX вне форума   Ответить с цитированием
Старый 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 *,...)"
Дело в том что убран модификатор const у третьего параметра, это получилась другая функция.
Код:
void logcustom(uint8 lvl, Color color, BYTE *stru, ...)
Надо изменить объявление функции str_utf8_to_866 на :
Код:
char *str_utf8_to_866(const char *buf)
а logcustom оставить без изменений
Код:
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
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Йоха, я думал BYTE - это важно
Я взял способ с мангоса - выводит теперь всё на русском нормально.
Теперь надо разобраться с нормальным вводом русских символов
Спасибо за подсказки - очень помог!
KiriX вне форума   Ответить с цитированием
Старый 12.04.2011, 19:44   #20
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Всё! Я сдаюсь Не могу понять, где идёт работа с входящими (вводимыми) командами, которые пишутся в консоли
Ну хоть отображает теперь на русском нормально
KiriX вне форума   Ответить с цитированием
Старый 12.04.2011, 19:46   #21
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от KiriX Посмотреть сообщение
Йоха, я думал BYTE - это важно
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
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Цитата:
Сообщение от Йоха Посмотреть сообщение
BYTE это просто typedef unsigned char
Просто у меня в программе использовался именно BYTE, поэтому так и функция выглядела.

А для ввода тоже самое, только обратное преобразование
Код:
char *str;
// каким-то там образом ввели с консоли str
char *utf8str = str_convert(str, 866, CP_UTF8);
// здесь что-то делаем со строкой в utf8
// ...
delete[] utf8str // освобождаем память;
Да с вашими подсказками с обратным преобразованием я уже справился бы, вот только не могу найти в коде где эта обработка входящих команд
KiriX вне форума   Ответить с цитированием
Старый 12.04.2011, 20:00   #23
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

сейчас скачаю исходники, посмотрю

этот адрес github.com/fgenesis/pseuwow ?
Йоха вне форума   Ответить с цитированием
Старый 12.04.2011, 21:48   #24
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Цитата:
Сообщение от Йоха Посмотреть сообщение
сейчас скачаю исходники, посмотрю

этот адрес github.com/fgenesis/pseuwow?
Да, оно.
Патчем, то, что я уже сделал - хотябы выводит русский язык
Вложения
Тип файла: 7z PseuWoW_utf8.7z (15.0 Кб, 675 просмотров)
KiriX вне форума   Ответить с цитированием
Старый 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
dj--alex
Пользователь
 
Аватар для dj--alex
 
Регистрация: 09.03.2010
Сообщений: 41
Сказал(а) спасибо: 15
Поблагодарили 20 раз(а) в 11 сообщениях
dj--alex На верном пути
По умолчанию

я вообще слышал как кто-то правда на базе не мангос а Runwow создал на базе Unigine совершенно новую Mmorpg с вовской механикой.
причем что интересно нашёл эту инфу на сайте разработчиков unigine.com наших русских кстати.

может и на базе PseuWow+ MaNGOS можно что то иное сделать?
хотя как мне кажется многие чисто wow-related вещи попросту будут неиспользованы.
__________________
http://ru-mangos.ru/showthread.php?p=949#post949
dj--alex вне форума   Ответить с цитированием
Старый 12.04.2011, 22:33   #27
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Цитата:
Сообщение от Йоха Посмотреть сообщение
к сожалению не могу запустить сие творение, у меня дома нет мангоса, и не могу посмотреть как он выглядит этот псивов. Что за консоль ? и для чего она используется? а то поиск неизвестно чего в исходниках пока не принес результатов -)

KiriX, скриншот что ли покажи как он выглядит в работе
Да а смысл тогда?
Такое же консольное окно как и мангос.
Миниатюры
Нажмите на изображение для увеличения
Название: Новый точечный рисунок.jpg
Просмотров: 3119
Размер:	105.3 Кб
ID:	847  
KiriX вне форума   Ответить с цитированием
Старый 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());
    }
  }
}
ну а в начало файла засунуть определение функции char* str_convert(const char *buf, UINT codepage_from, UINT codepage_to), так как она описана выше.

Последний раз редактировалось Йоха; 13.04.2011 в 13:45.
Йоха вне форума   Ответить с цитированием
Старый 12.04.2011, 23:22   #29
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Да, в общем-то всё правильно понял.
Спасибо, завтра уже попробую.
Команда какая? Да почти любая - начиная от простой переписки в чате и заканчивая announce и notify. В общем применение есть, самое важное - чат.
KiriX вне форума   Ответить с цитированием
Старый 13.04.2011, 10:15   #30
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

есть успехи ?
Йоха вне форума   Ответить с цитированием
Старый 13.04.2011, 12:02   #31
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Цитата:
Сообщение от Йоха Посмотреть сообщение
есть успехи ?

Результаты получены - всё прекрасно работает!!!
Огромное спасибо за помощь
Попробую сегодня переписать и вывод инфы с функцией, которую ты дал, чтобы не добавлять лишние файлы в проект - потом выложу патчем.
Ещё раз огромное спасибо за помощь!

Попробовал с вашим патчем на вывод данных - хренушки - программа падает, как только пробует вывести данные на русском. Пока не разбирался почему - обед кончился - работать надо
KiriX вне форума   Ответить с цитированием
Старый 20.04.2011, 19:35   #32
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от KiriX Посмотреть сообщение
Попробовал с вашим патчем на вывод данных - хренушки - программа падает, как только пробует вывести данные на русском. Пока не разбирался почему - обед кончился - работать надо
а можно пример кода ?
Йоха вне форума   Ответить с цитированием
Старый 21.04.2011, 06:16   #33
tempura
Forum bot
 
Аватар для tempura
 
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
tempura отключил(а) отображение уровня репутации
По умолчанию

... еще неплохо бы рабочие бинарники под 335 А то у меня таких нет.
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки.
tempura вне форума   Ответить с цитированием
Старый 21.04.2011, 06:52   #34
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Цитата:
Сообщение от Йоха Посмотреть сообщение
а можно пример кода ?
Что именно нужно? Весь отрывок, что именно я сделал?
Цитата:
Сообщение от tempura Посмотреть сообщение
... еще неплохо бы рабочие бинарники под 335 А то у меня таких нет.
Хорошо, к вечеру выложу.
KiriX вне форума   Ответить с цитированием
Старый 21.04.2011, 08:19   #35
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от KiriX
Что именно нужно? Весь отрывок, что именно я сделал?
Цитата:
Сообщение от KiriX Посмотреть сообщение
Попробовал с вашим патчем на вывод данных - хренушки - программа падает, как только пробует вывести данные на русском.

Ну вот тот кусок который ты переписал на вывод используя мою функцию.
Йоха вне форума   Ответить с цитированием
Старый 21.04.2011, 12:08   #36
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Вот код для Йохи:
Код:
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;
}
И в аттаче компил для темпуры
Вложения
Тип файла: 7z PseuWoW.7z (3.42 Мб, 677 просмотров)
KiriX вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
tempura (21.04.2011)
Старый 21.04.2011, 19:43   #37
tempura
Forum bot
 
Аватар для tempura
 
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
tempura отключил(а) отображение уровня репутации
По умолчанию

Оно наконец-то заработало!!! В логе поиском по слову error выдает только
Код:
*** All files loaded without errors.
Вот оно - щщастие!
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки.
tempura вне форума   Ответить с цитированием
Старый 21.04.2011, 20:20   #38
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Цитата:
Сообщение от tempura Посмотреть сообщение
Оно наконец-то заработало!!! В логе поиском по слову error выдает только
Код:
*** All files loaded without errors.
Вот оно - щщастие!
Везёт тебе - у меня ошибок море, о гуи вообще речи нет
KiriX вне форума   Ответить с цитированием
Старый 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, альтернативный клиент


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Клиент Катаклизма 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


Текущее время: 08:08. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot