Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Опкоды, Формулы, Клиент > Опкоды

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

Опкоды Опкоды

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.07.2010, 11:24   #1
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию гуид персонажа?

Интересует как узнать guid своего персонажа которым я захожу в мир.
Порылся в снифе и нашел вроде бы два варианта: первый - в сообщениии SMSG_CHAR_ENUM и второй - в SMSG_NAME_QUERY_RESPONSE. В последнем приходит packed guid и имя.

В связи с этим два вопроса:

guid каждого персонажа задается при его создании на сервере и больше не меняется ?

Как перевести текст который возвращает сервер в нормальный вид? некоторые символы заменены на 2 байта, логику пока не разглядел
Йоха вне форума   Ответить с цитированием
Старый 16.07.2010, 11:40   #2
RomanRom2
WowCore Dev
 
Аватар для RomanRom2
 
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
RomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всем
По умолчанию

CMSG_PLAYER_LOGIN
гуид никогда не меняется.
текс в обычном юникоде.

я ж тебе в аську всё написал.
RomanRom2 вне форума   Ответить с цитированием
Старый 16.07.2010, 11:40   #3
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

да не юникод это, какая-то двухбайтовая ахинея -)
Йоха вне форума   Ответить с цитированием
Старый 16.07.2010, 11:50   #4
RomanRom2
WowCore Dev
 
Аватар для RomanRom2
 
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
RomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всем
По умолчанию

давным давно, когда динозавры еще были молодые, я на скору руку сделал две функции и (вот парадокс) пользуюсь ими до сих пор.

Код:
procedure cmd_CMSG_MESSAGECHAT(sender: TWorldUser);
var
  imsg: T_CMSG_MESSAGECHAT;
  i: longint;
begin
  i:= msgParse(sender.RBuf, imsg);
...
  MainLog('CMSG_MESSAGECHAT type='+strr(imsg.cType)+', lang='+strr(imsg.cLanguage)+' ['+wow_unicode866(imsg.cText)+']',1,0,0);
...
Код:
function wow_unicode866(s: string): string;
var
  ofs: integer;
  c: byte;
begin
  ofs:=1;
  result:='';
  while ofs<=length(s) do
    begin
      c:=ord(s[ofs]);
      if c in [208,209] then
        begin
          inc(ofs);
          c:=ord(s[ofs]);
          if (c in [128..143]) then result:=result+chr(c+96);
          if (c in [144..191]) then result:=result+chr(c-16);
        end
      else
        result:=result+s[ofs];
      inc(ofs);
    end;
end;
Код:
function wow_unicode1251(s: string): string;
var
  ofs: integer;
  c: byte;
begin
  ofs:=1;
  result:='';
  while ofs<=length(s) do
    begin
      c:=ord(s[ofs]);
      if c in [208,209] then
        begin
          inc(ofs);
          c:=ord(s[ofs]);
          if (c in [128..143]) then result:=result+chr(c+112);
          if (c in [144..191]) then result:=result+chr(c+48);
        end
      else
        result:=result+s[ofs];
      inc(ofs);
    end;
end;
может пригодится.
RomanRom2 вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Йоха (16.07.2010)
Старый 16.07.2010, 11:57   #5
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Там не юникод, а UTF-8. А гуид персонажа меняется при трансфере на другой сервер.
На C# с UTF8 вообще элементарно работать:
Код:
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;

namespace Wlp.IO
{
    public static class CStringExtensions
    {
        /// <summary> Reads the NULL terminated string from 
        /// the current stream and advances the current position of the stream by string length + 1.
        /// <seealso cref="BinaryReader.ReadString"/>
        /// </summary>
        public static string ReadCString(this BinaryReader reader)
        {
            return reader.ReadCString(Encoding.UTF8);
        }

        /// <summary> Reads the NULL terminated string from 
        /// the current stream and advances the current position of the stream by string length + 1.
        /// <seealso cref="BinaryReader.ReadString"/>
        /// </summary>
        public static string ReadCString(this BinaryReader reader, Encoding encoding)
        {
            try
            {
                var bytes = new List<byte>();
                byte b;
                while ((b = reader.ReadByte()) != 0)
                    bytes.Add(b);
                return encoding.GetString(bytes.ToArray());
            }
            catch (EndOfStreamException exc)
            {
                Logger.Instance.WarnFormat("ReadCString failed: {0}!", exc.Message);
                return String.Empty;
            }
        }

        public static void WriteCString(this BinaryWriter writer, string str)
        {
            var bytes = Encoding.UTF8.GetBytes(str);
            writer.Write(bytes);
            writer.Write((byte)0);
        }
    }
}

Последний раз редактировалось TOM_RUS; 16.07.2010 в 12:14.
TOM_RUS вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Йоха (16.07.2010)
Старый 16.07.2010, 13:20   #6
RomanRom2
WowCore Dev
 
Аватар для RomanRom2
 
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
RomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всем
По умолчанию

а UTF-8 разве не юникод?

в дельфи наверняка тоже есть встроенные средства. в 2010ой точно есть, она вся такая юникодная стала.
я просто написал сам по быстрой и не маялся с поиском. в данном случае было проще замазать, чем отскрести
RomanRom2 вне форума   Ответить с цитированием
Старый 16.07.2010, 13:20   #7
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

Рома, я ж говорил что это UTF-8, а ты уникод -)

TOM_RUS, RomanRom2 спасибо за подсказки

P.S.
в общем выкрутился парой WideCharToMultiByte(...)

Последний раз редактировалось Йоха; 16.07.2010 в 13:49.
Йоха вне форума   Ответить с цитированием
Старый 16.07.2010, 17:11   #8
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

При перекодировании данных из Windows-1251 в UTF-8 и Unicode получаем разные данные, так что кодировки разные, надо использовать UTF-8.
virusav вне форума   Ответить с цитированием
Старый 16.07.2010, 18:25   #9
Minimajack
Гость
 
Сообщений: n/a
По умолчанию

  Ответить с цитированием
Пользователь сказал cпасибо:
RomanRom2 (16.07.2010)
Старый 16.07.2010, 19:34   #10
Vladimir
MaNGOS Dev
 
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
Vladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небес
По умолчанию

Ну обычно когда говорят юникод имеют ввиду utf-16, а про utf-8 явно говорят, все остальные просто очень редко используются...
__________________
Так как устал объяснять знайте ICQ не пользуюсь
Vladimir вне форума   Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открыть все зоны для персонажа. Реально? Sl3p0y Новичкам 1 13.07.2010 10:55
Забрать предмет у персонажа через личный кабинет. tozter WWW 9 07.07.2010 16:21
Зависание персонажа serg1 Корзина 7 17.04.2010 05:03
Сброс статистики персонажа uNkind Флудильня 1 12.03.2010 04:34


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


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