Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Как узнать название предмета в инвентаре

-

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

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

Ответ
 
Опции темы
Старый 20.07.2012, 13:30   #16
-= Мастер Света =-
 Рыцарь-капитан
Аватар для Ginrey
 
Ginrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака Норриса
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
 
По умолчанию Re: Как узнать название предмета в инвентаре

Цитата:
Сообщение от Nek1tПосмотреть сообщение
Как я понял, четвертый параметр - это сколько байт считывать. Попробуй вместо sizeof(name) 40 например поставить.

в delphi не предусматривается такое, тут не задаете сколько байт лезет в этом числе, а задается отдельная - как бы переменная которая хранит некоторое колво байт от 1 до 4. 40 невозможно.
например 1- числа от 0 до 255, а 4 - от 0 до 4200000000+

Последний раз редактировалось Ginrey; 20.07.2012 в 13:34.
  Ответить с цитированием
Старый 20.07.2012, 13:50   #17
 Пехотинец
Аватар для Nek1t
 
Nek1t на правильном путиNek1t на правильном пути
Регистрация: 31.08.2010
Сообщений: 64
Популярность: 129
Сказал(а) спасибо: 30
Поблагодарили 12 раз(а) в 7 сообщениях
 
По умолчанию Re: Как узнать название предмета в инвентаре

Цитата:
Сообщение от GinreyПосмотреть сообщение
в delphi не предусматривается такое, тут не задаете сколько байт лезет в этом числе, а задается отдельная - как бы переменная которая хранит некоторое колво байт от 1 до 4. 40 невозможно.
например 1- числа от 0 до 255, а 4 - от 0 до 4200000000+

Извините. Не знал. Все таки в С++ с этим проще.
  Ответить с цитированием
Старый 20.07.2012, 13:56   #18
 Разведчик
Аватар для Nobody4all
 
Nobody4all неизвестен в этих краях
Регистрация: 02.12.2010
Сообщений: 3
Популярность: -58
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Отправить сообщение для Nobody4all с помощью ICQ
 
По умолчанию Re: Как узнать название предмета в инвентаре

Цитата:
Сообщение от STIL23Посмотреть сообщение
Ого ты его сам составлял или он с element.data вытаскивается ? И теперь додумать не могу как сделать . Если id = 6 например , то это "Крепкий клинок" . Как так для всех значений сделать то сразу?



открываеш этот items.txt, ищещ айди и выдераеш всё что после него + 1 байт ( : )
что-то типа

Код:
var
  f:TextFile;
  st:String; 
.......
.......
assignfile(f,'items.txt');
reset(f);

while not EOF(f) do 
begin
readln(f,st); 
if pos('6'+':',st) = 1 then 
showmessage(copy(st,pos(':',st)+1,length(st)));
end;
closefile(f);
вместо 6 любой другой айди предмета


как вариант сразу из pwdatabase выдрать можно, на форму кидаем tiddhttp

Код:
st:=idhttp1.get('http://www.pwdatabase.com/ru/items/6');

showmessage(utf8toansi(copy(st,
pos('<title>Perfect World Item Database - ',st)+37,
posex('</title>',st,pos('<title>Perfect World Item Database - ',st))-pos('<title>',st)-37)));

или как уже говорили необходимо всё это дело из items.txt загонять в массив

Код:
itemsarr: array[1..10] of String[10]=('вещь 1','вещь 2',вещь 3'..);
showmessage(itemsarr[2]) ;
но тут есть подводные камни
________________
ем мороженки

Последний раз редактировалось Nobody4all; 20.07.2012 в 15:27.
  Ответить с цитированием
Старый 20.07.2012, 15:56   #19
-= Мастер Света =-
 Рыцарь-капитан
Аватар для Ginrey
 
Ginrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака Норриса
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
 
По умолчанию Re: Как узнать название предмета в инвентаре

Цитата:
Сообщение от Nobody4allПосмотреть сообщение
как вариант сразу из pwdatabase выдрать можно, на форму кидаем tiddhttp

Код:
st:=idhttp1.get('http://www.pwdatabase.com/ru/items/6');

showmessage(utf8toansi(copy(st,
pos('<title>Perfect World Item Database - ',st)+37,
posex('</title>',st,pos('<title>Perfect World Item Database - ',st))-pos('<title>',

вариант не плох, но есть одно но, кодировка страницы и программы несколько не совпадают и я почти уверен, что если он так сделает получит вопросики или иероглифы какие то. поэтому лучше убрать utf8toansi вообще. Так же минус этой функции, получение кода страницы занимает не маленькое время, а так как ID в списке будет от 1 до 64 то затратится около минуты чтобы получить полный список имен предметов

Последний раз редактировалось Ginrey; 20.07.2012 в 16:17.
  Ответить с цитированием
Старый 20.07.2012, 16:43   #20
 Разведчик
Аватар для Nobody4all
 
Nobody4all неизвестен в этих краях
Регистрация: 02.12.2010
Сообщений: 3
Популярность: -58
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Отправить сообщение для Nobody4all с помощью ICQ
 
По умолчанию Re: Как узнать название предмета в инвентаре

Цитата:
Сообщение от GinreyПосмотреть сообщение
вариант не плох, но есть одно но, кодировка страницы и программы несколько не совпадают и я почти уверен, что если он так сделает получит вопросики или иероглифы какие то. поэтому лучше убрать utf8toansi вообще. Так же минус этой функции, получение кода страницы занимает не маленькое время, а так как ID в списке будет от 1 до 64 то затратится около минуты чтобы получить полный список имен предметов

перекодировку (utf8toansi) на то и поставил ибо иероглифы были про время да- всё зависит от канала, у меня подгружается страница около 2-3 секунд (3*64= 192 сек аля ~ 3 минуты). Впринципе если заюзать чистые сокеты, то можно добиться и быстрой работы, нежели используя инди
________________
ем мороженки
  Ответить с цитированием
Старый 20.07.2012, 21:42   #21
 Старший сержант
Аватар для N00bSa1b0t
 
N00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядом
Регистрация: 09.04.2010
Сообщений: 204
Популярность: 5518
Сказал(а) спасибо: 49
Поблагодарили 512 раз(а) в 198 сообщениях
 
По умолчанию Re: Как узнать название предмета в инвентаре

Цитата:
Сообщение от STIL23Посмотреть сообщение
Ого ты его сам составлял или он с element.data вытаскивается ?

Можно и из elements.data вытащить, но я парсил pwdatabase.com. Минут 30 - и вот он файлик
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]-cофт и прочее для комфортной игры в PW.
PW Everyday Helper Bot
  Ответить с цитированием
Старый 20.07.2012, 22:32   #22
-= Мастер Света =-
 Рыцарь-капитан
Аватар для Ginrey
 
Ginrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака Норриса
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
 
По умолчанию Re: Как узнать название предмета в инвентаре

Цитата:
Сообщение от N00bSa1b0tПосмотреть сообщение
Можно и из elements.data вытащить, но я парсил pwdatabase.com. Минут 30 - и вот он файлик

скинь файлик с именами и id. ты же их вытаскивал?
а все не надо. уже дали.

сделал с проверкой id построчно. да все отлично находит. но перебирает 17000 строчек занимает это секунд 40

Последний раз редактировалось Ginrey; 20.07.2012 в 23:51.
  Ответить с цитированием
Старый 20.07.2012, 23:30   #23
Заблокирован
 Сержант
Аватар для STIL23
 
STIL23 на правильном пути
Регистрация: 19.12.2009
Сообщений: 130
Популярность: 34
Сказал(а) спасибо: 21
Поблагодарили 86 раз(а) в 32 сообщениях
 
По умолчанию Re: Как узнать название предмета в инвентаре

Может кто поподробнее как через оффсет это вытащить ?
  Ответить с цитированием
Старый 20.07.2012, 23:52   #24
 Старший сержант
Аватар для N00bSa1b0t
 
N00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядом
Регистрация: 09.04.2010
Сообщений: 204
Популярность: 5518
Сказал(а) спасибо: 49
Поблагодарили 512 раз(а) в 198 сообщениях
 
По умолчанию Re: Как узнать название предмета в инвентаре

Цитата:
Сообщение от GinreyПосмотреть сообщение
скинь файлик с именами и id. ты же их вытаскивал?

Чуть выше ссылка


Цитата:
Сообщение от GinreyПосмотреть сообщение
сделал с проверкой id построчно. да все отлично находит. но перебирает 17000 строчек занимает это секунд 20

Лучше в начале запуска приложения загрузи этот файл в ассоциативный массив вида id->name и все.
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]-cофт и прочее для комфортной игры в PW.
PW Everyday Helper Bot
  Ответить с цитированием
Старый 21.07.2012, 07:18   #25
-= Мастер Света =-
 Рыцарь-капитан
Аватар для Ginrey
 
Ginrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака Норриса
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
 
По умолчанию Re: Как узнать название предмета в инвентаре

Цитата:
Сообщение от N00bSa1b0tПосмотреть сообщение
Чуть выше ссылка



Лучше в начале запуска приложения загрузи этот файл в ассоциативный массив вида id->name и все.

впринципе можно. но мне так кажется все этой займет столько же времени только теперь при запуске.
  Ответить с цитированием
Старый 21.07.2012, 12:26   #26
 Старший сержант
Аватар для N00bSa1b0t
 
N00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядом
Регистрация: 09.04.2010
Сообщений: 204
Популярность: 5518
Сказал(а) спасибо: 49
Поблагодарили 512 раз(а) в 198 сообщениях
 
По умолчанию Re: Как узнать название предмета в инвентаре

Цитата:
Сообщение от GinreyПосмотреть сообщение
впринципе можно. но мне так кажется все этой займет столько же времени только теперь при запуске.

Я не знаю на чем ты пишешь, то в моей программе чтения файла и заполнения массива проходит за 16 милисекунд, только что измерил.
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]-cофт и прочее для комфортной игры в PW.
PW Everyday Helper Bot
  Ответить с цитированием
Старый 21.07.2012, 13:09   #27
-= Мастер Света =-
 Рыцарь-капитан
Аватар для Ginrey
 
Ginrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака Норриса
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
 
По умолчанию Re: Как узнать название предмета в инвентаре

Цитата:
Сообщение от N00bSa1b0tПосмотреть сообщение
Я не знаю на чем ты пишешь, то в моей программе чтения файла и заполнения массива проходит за 16 милисекунд, только что измерил.

да ну, если не затруднит выложи свой пример кода. спасибо
  Ответить с цитированием
Старый 21.07.2012, 13:45   #28
 Старший сержант
Аватар для N00bSa1b0t
 
N00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядом
Регистрация: 09.04.2010
Сообщений: 204
Популярность: 5518
Сказал(а) спасибо: 49
Поблагодарили 512 раз(а) в 198 сообщениях
 
По умолчанию Re: Как узнать название предмета в инвентаре

Пишу на шарпе, вот код

Код:
  public static class ItemData
  {
    private static readonly Dictionary<int, string> Names = new Dictionary<int, string>();
    private const string ItemFileDB = "items.txt";

    static ItemData()
    {
      if (File.Exists(ItemFileDB))
      {
        var f = File.OpenText(ItemFileDB);

        while (!f.EndOfStream)
        {
          var l = f.ReadLine().Split(new[] {':'}, 2);

          try
          {
            Names.Add(int.Parse(l[0]), l[1]);
          }
          catch
          {
          }
        }
        f.Close();
      }
    }

    public static string GetName(int id)
    {
      return Names.ContainsKey(id) ? Names[id] : String.Empty;
    }
  }

В начале считываем весь файл, а потом, в ходе работы вызываем функцию
ItemData.GetName(id), которая возвращает имя, если оно найдено в загруженном файле.
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]-cофт и прочее для комфортной игры в PW.
PW Everyday Helper Bot
  Ответить с цитированием
Старый 21.07.2012, 14:17   #29
-= Мастер Света =-
 Рыцарь-капитан
Аватар для Ginrey
 
Ginrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака Норриса
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
 
По умолчанию Re: Как узнать название предмета в инвентаре

позорно признавать , но я не смогу тоже самое переделать в delphi )) точнее не смогу понять код C#
  Ответить с цитированием
Старый 21.07.2012, 14:26   #30
 Старший сержант
Аватар для N00bSa1b0t
 
N00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядом
Регистрация: 09.04.2010
Сообщений: 204
Популярность: 5518
Сказал(а) спасибо: 49
Поблагодарили 512 раз(а) в 198 сообщениях
 
По умолчанию Re: Как узнать название предмета в инвентаре

Вот код с комментариями

Код:
  public static class ItemData
  {
    //Names - ассоциативный массив. В качестве ключей используем ID вещи, в качестве значения - имя предмета
    private static readonly Dictionary<int, string> Names = new Dictionary<int, string>();
    private const string ItemFileDB = "items.txt"; //Имя файла

    static ItemData()
    {
      if (File.Exists(ItemFileDB)) //Если файл существует
      {
        var f = File.OpenText(ItemFileDB); //Открываем его на чтение как текстовый файл

        while (!f.EndOfStream) //Пока не достигнут конец файла
        {
          var l = f.ReadLine().Split(new[] {':'}, 2); //Читаем строчку и разбиваем её в массив на две строчки. Разделитель - ':'

          try //Мне лень делать нормальную проверку, поэтому просто оборачиваю дальнейший код в try catch, чтобы в случае чего программа не упала, а продолжила работу дальше
          {
            Names.Add(int.Parse(l[0]), l[1]); //Добавляем в Names значения.
//int.parse(l[0]) - это мы берем первую часть строчки (т.е. айди вещи) и приводим его к типу int
//l[1] - это вторая часть строчки - т.е. имя
          }
          catch //Пусть блок обработки исключения. Вообще оно не должно вызваться, если файл никто не менял
          {
          }
        }
        f.Close(); //Закрываем файл
      }
    }

    public static string GetName(int id)
    {
//Если в массиве есть элемент с индексом id, то возвращаем значение. Если нету - то пустую строку.
      return Names.ContainsKey(id) ? Names[id] : String.Empty;
    }
  }
Добавлено через 2 минуты
В дельфи ассоциативный массив делается так, посмотри

[Ссылки могут видеть только зарегистрированные пользователи. ]
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]-cофт и прочее для комфортной игры в PW.
PW Everyday Helper Bot

Последний раз редактировалось N00bSa1b0t; 21.07.2012 в 14:28. Причина: Добавлено сообщение
  Ответить с цитированием
Ответ


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] Узнать название комнаты написанной русскими буквами Crazydoom Свободное обсуждение 3 11.04.2012 08:53
[Помогите!] Помогите узнать название песни MattGuetta Наше творчество 3 19.10.2011 00:06
Как вставить название предмета в чате с возможностью обзора? Impekon Общение и обсуждение Perfect World 2 15.04.2011 20:36

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

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

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