Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Прочая документация (http://mangos.ytdb.ru/forumdisplay.php?f=33)
-   -   Character stat research (http://mangos.ytdb.ru/showthread.php?t=1924)

HarpyWar 26.07.2010 10:04

Character stat research
 
Хочу сделать пхп класс, чтобы он извлекал данные перса из бд в массив, и затем эти данные можно было бы где-то использовать. Например, на основе этого я хотел сделать настраиваемый юзербар, с разными картинками, разными видами, оптимизированный и кешируемый. Но своего вов сервера уже не имею, и толком не играл в вов). И тем более, не знаю откуда брать статы из бд.

Ниже все статы, для части из них я нашел как извлечь. А для всех остальных статов прошу помочь найти откуда брать инфу конкретно по каждому. То, что становится известно - буду обновлять в этом сообщении. Если что не так - поправляйте.


[Item level]
Items Level

[Arhievements]
Achv Points (SELECT SUM (`points`) FROM `dbc_achievement` WHERE `id` IN (SELECT `achievement` FROM `character_achievement` WHERE `guid`=?d) )

[Basic stats]
Health (таблица: сharacter.character_stats, поле: maxhealth)
Mana (таблица: сharacter.character_stats, поле: maxpowerX, индекс: 1)
Stamina (таблица: сharacter.character_stats, поле: stamina)
Intellect (таблица: сharacter.character_stats, поле: intellect)
Strength (таблица: сharacter.character_stats, поле: strength)
Agility (таблица: сharacter.character_stats, поле: agility)
Spirit (таблица: сharacter.character_stats, поле: spirit)

[Melee]
AP (таблица: сharacter.character_stats, поле: attackPower)
Armor Pen
Crit (таблица: сharacter.character_stats, поле: critPct)
Expertise
Hit
Hit Perc
Energy (таблица: сharacter.character_stats, поле: maxpowerX, индекс: 4)
Melee Haste

[Ranged]
RAP (таблица: сharacter.character_stats, поле: rangedAttackPower)
Ranged Crit (таблица: сharacter.character_stats, поле: rangedCritPct)
Ranged Hit
Ranged Hit Perc
Ranged Haste

[Spells]
Spell Power (таблица: сharacter.character_stats, поле: spellPower)
Spell Crit (таблица: сharacter.character_stats, поле: spellCritPct)
Spell Hit
Spell Hit Perc
Spell Pen
Spell Haste
MP5
Mana Reg

Healing ≈ Spell Power
Arcane Crit ≈ Crit Power
Arcane Dmg ≈ Spell Power
Fire Crit ≈ Crit Power
Fire Dmg ≈ Spell Power
Frost Crit ≈ Crit Power
Frost Dmg ≈ Spell Power
Holy Crit ≈ Crit Power
Holy Dmg ≈ Spell Power
Nature Crit ≈ Crit Power
Nature Dmg ≈ Spell Power
Shadow Crit ≈ Crit Power
Shadow Dmg ≈ Spell Power


[Defence]
Avoidance
Armor (таблица: сharacter.character_stats, поле: armor)
Block
Block Rtng (таблица: сharacter.character_stats, поле: blockPct)
Defense
Dodge (таблица: сharacter.character_stats, поле: dodgePct)
Parry (таблица: сharacter.character_stats, поле: parryPct)
Resilience

[PvP]
2v2 Rating
3v3 Rating
5v5 Rating

Kills (таблица: сharacter.characters, поле: totalKills)

[Special cases]
Cat AP
Cat Crit



Откуда взять две основные профессии персонажа?
Профессии хранятся там же, где скиллы. Сначала берутся все скиллы из таблицы character_skills, сортируя по полю value по убыванию, затем из них отбираются профессии (пример).

Откуда взять значения 3х основных талантов?
http://ru-mangos.ru/showpost.php?p=11467&postcount=20

Список статов взят с http://www.zetbit.com/
Много полезного по теме в вики http://wiki.ytdb.ru/index.php/Charactersdb_struct
Так же часть полезностей в Blizzlike userbar от SergiK_KilleR http://svn.assembla.com/svn/webmango....character.php

Shadez 26.07.2010 11:11

Цитата:

(Field: сharacter.data, Index:
Уже давно не актуально - поля data не существует.
Цитата:

Откуда взять значения 3х основных талантов и 2х основных профессий персонажа?
character_talents
character_skills

HarpyWar 26.07.2010 13:34

Ок. Но я пока не ориентируюсь что и где в таблицах находится. Идеально было бы получить алгоритм извлечения каждой статы из списка выше.

Например, в character_skills 2 поля value и max, какое из них нужно? Чтобы получить 3 основных профессии, я так понимаю, надо отсортировать по убыванию по одному из этих полей и взять 3 профессии?

Далее, character_talent. То же самое: сортировка по убыванию, лимит в 2. current_rank - это то поле, которое нужно?


Ещё очень хорошо было бы, если кто-то выложит дамп нескольких персов из бд character. Или можно всю бд, если нескольких, отдельно со всеми нужными таблицами, сложно вытащить.

tempura 26.07.2010 14:57

Цитата:

Сообщение от HarpyWar (Сообщение 11412)
Например, в character_skills 2 поля value и max, какое из них нужно?

Эм... *ушел и застрелился* Приведите перевод слов "value" и "maximum" пожалуйста.

HarpyWar 26.07.2010 16:38

Цитата:

Сообщение от tempura (Сообщение 11414)
Эм... *ушел и застрелился* Приведите перевод слов "value" и "maximum" пожалуйста.

В разных контекстах это может означать разное)
Я понимаю это касательно жизней, например. А вот профессия как может быть текущей и максимальной не понимаю.

Йоха 26.07.2010 16:43

Точно так же как и жизнь. Есть максимальное значение, и то что у тебя на текущий момент. Что тут непонятного ?

З.Ы. ааа ты не играл в вов... понятно

Уровень владения профессией выражается числом, а не просто знаю/не знаю. Изначально после посещения соответствующего тренера твой навык владения профой = 0. И ограничен сверху некоторым лимитом. Когда ты делаешь какие-то дествия связанные с твоей профой (собираешь руду/траву, что-то крафтишь ...) твой текущий навык повышается, позволяя учить у тренера новые возможности. Выучить профессию выше максимального уровня невозможно.

HarpyWar 26.07.2010 16:48

Для жизни надо использовать максимальное, т.к. нет смысла выводить текущее, если у чара в момент забора статистики 1 хитпоинт.

А для профессии я так и не понял, надо использовать текущее или максимальное значение? Она может уменьшаться, как жизни, или как? :)

Йоха 26.07.2010 16:50

для проф надо выводить текущее/максимальное. Ибо максимальное ограничено текущим патчем. Новый лимит будет в катаклизме.
Уменьшаться она не может, можно только полностью сбросить профессию.
Посмотри в армори, там все хорошо видно

HarpyWar 26.07.2010 16:51

Йоха, теперь понял)
Как насчет всего остального? :)

Йоха 26.07.2010 16:55

не, я не силен в структуре таблиц мангоса, могу только что-то по игре рассказать

HarpyWar 26.07.2010 17:07

Цитата:

Сообщение от Йоха (Сообщение 11427)
не, я не силен в структуре таблиц мангоса, могу только что-то по игре рассказать

Если разбираешься в игре, то понять структуру таблиц должно быть гораздо легче.

Вот таблица сharacter_talent, там поле current_rank. Этот ранк и есть единица измерения таланта?

Йоха 26.07.2010 17:13

Вложений: 1
current_rank - это сколько очков вложено в талант. Ты дерево талантов представляешь ? у некоторых талантов есть ранки, вот это оно и есть

HarpyWar 26.07.2010 17:17

Вот перс на вовармори, там колдовство 61.
Значит у него current_rank = 61? Тогда что означает текст в вики "(для талантов имеющих более одного ранга)"?

Йоха 26.07.2010 17:20

61 - это общее количество очков вложенных во всю ветку
Улучшенное проклятие агонии 2/2 - это ранк таланта два из двух

HarpyWar 26.07.2010 17:29

Уже яснее) Значит надо суммировать все таланты перса, входящие в колдовство.
Тогда что такое колдовство, и как я узнаю, принадлежит ли ему данный талант?

alien 26.07.2010 17:35

Spell Dmg = Healing=Arcane Dmg=Fire DmgFrost Dmg=Holy Dmg=
Nature Dmg=Shadow Dmg
Spell Crit=Fire Crit=Arcane Crit=Frost Crit=Holy Crit=Nature Crit=Shadow Crit
Crit - http://wiki.ytdb.ru/index.php/Charac...s#spellCritPct
Dmg - http://wiki.ytdb.ru/index.php/Charac...ats#spellPower
Тоесть демаг и крит для всех одинаков

HarpyWar 26.07.2010 17:53

Цитата:

Сообщение от alien (Сообщение 11435)
Spell Dmg = Healing=Arcane Dmg=Fire DmgFrost Dmg=Holy Dmg=
Nature Dmg=Shadow Dmg
Spell Crit=Fire Crit=Arcane Crit=Frost Crit=Holy Crit=Nature Crit=Shadow Crit
Crit - http://wiki.ytdb.ru/index.php/Charac...s#spellCritPct
Dmg - http://wiki.ytdb.ru/index.php/Charac...ats#spellPower
Тоесть демаг и крит для всех одинаков

То есть можно смело заменять Spell Crit'ом все, что оканчивается на Crit, а Spell Power'ом - все, что на Dmg?

Healing, надеюсь, опечаткой был?

И вопрос, зачем тогда на zetbit.com добавили все эти Crit и Dmg?

alien 26.07.2010 20:30

Нет Healing не опечатка.
Цитата:

И вопрос, зачем тогда на zetbit.com добавили все эти Crit и Dmg?
Не знаю
А вообще не проще ли глянуть в реализацию WowArmory?

tempura 26.07.2010 20:41

Цитата:

Сообщение от HarpyWar (Сообщение 11437)
И вопрос, зачем тогда на zetbit.com добавили все эти Crit и Dmg?

Например для файр-мага важнее продемонстрировать бонусы именно по файр-магии, а не магии вообще. Хотя понты дешевые. :)

Shadez 26.07.2010 22:52

Подсчет талантов:
сам скрипт - http://paste2.org/p/928574
таблица dbc_talents - http://filebeam.com/591fdb6f95600a90993eca07e7e705ca
Заливать в базу персонажей. Использование:
http://localhost/talents.php?guid=1
Цитата:

Сообщение от alien (Сообщение 11435)
Тоесть демаг и крит для всех одинаков

Не всегда - у холи паладинов крит магией света больше по сравнению с остальными школами.

Йоха 27.07.2010 12:37

Цитата:

Сообщение от HarpyWar (Сообщение 11434)
Уже яснее) Значит надо суммировать все таланты перса, входящие в колдовство.
Тогда что такое колдовство, и как я узнаю, принадлежит ли ему данный талант?

У каждого класса есть три ветки талантов, это одинаково для всех. Принадлежность таланта к той или иной ветке может меняться от патча к патчу, когда близы проводят балансировку...
Как определить в данном случае не знаю, может в мангосе есть какая-то еще таблица в которой прописаны принадлежности талантов к определенной ветке. Если нет, тогда выкручиваться как-то по другому, например завести эти таблицы самому или определить в программе 3 массива с перечнем талантов принадлежащих каждой ветке.

Energy 27.07.2010 12:44

Эти данные есть в DBC

Йоха 27.07.2010 12:50

Цитата:

Сообщение от alien (Сообщение 11435)
Spell Dmg = Healing=Arcane Dmg=Fire DmgFrost Dmg=Holy Dmg=
Nature Dmg=Shadow Dmg
Spell Crit=Fire Crit=Arcane Crit=Frost Crit=Holy Crit=Nature Crit=Shadow Crit
Crit - http://wiki.ytdb.ru/index.php/Charac...s#spellCritPct
Dmg - http://wiki.ytdb.ru/index.php/Charac...ats#spellPower
Тоесть демаг и крит для всех одинаков

это все не соответствует действительности!

все школы магии могут иметь различные значения у одного персонажа. Ибо есть всякие енчанты, таланты, проки предметов и.т.д. которые влияют не на весь спел дмг, а на конкретную школу.
Например енчант,

Крит у холи паладинов всегда выше у школы холи магии чем у остальных, особенность класса. см талант священная сила.

HarpyWar 27.07.2010 14:03

Я запутался с дамагами и критами. Все же их можно к одному стату свести или есть отличия у некоторых классов персонажей?
Если отличия есть, то как их взять из бд?

Красным пометил то, что мне пока непонятно откуда брать.

Мне очень нужна база "character", чтобы прямо на ней тестировать. Если кто-то поделится полным дампом, буду премного благодарен. Лучше базу, где персов побольше - будет проще улучшить производительность.

Йоха 27.07.2010 15:34

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

alien 27.07.2010 16:14

Цитата:

Все же их можно к одному стату свести или есть отличия у некоторых классов персонажей?
Если отличия есть, то как их взять из бд?
Да можно и нужно брать тупо из бд, начальное значение все равно берется из http://wiki.ytdb.ru/index.php/Charac...ats#spellPower
и http://wiki.ytdb.ru/index.php/Charac...s#spellCritPct а дальше уже накладываются все возможные таланты и так далее.
То есть в самой БД нету разделения на школы. Все эти разделения накладываются талантами, чантами

Цитата:

[Arhievements]
Achv Points (SELECT COUNT(`achievement`) FROM `character_achievement` WHERE `guid`=?d)
А это точно правильно? Так мы просто считаем сколько ачивок у человека. Но ведь разные ачивы дают разное количеств поинтов.

Shadez 27.07.2010 16:46

Цитата:

А это точно правильно?
Нет. Нужны данные данные из Achievement.dbc, поле Points.
PHP код:

SELECT SUM (`points`) FROM `dbc_achievementWHERE `idIN (SELECT `achievementFROM `character_achievementWHERE `guid`=?d


HarpyWar 29.07.2010 09:50

Такой запрос я взял с этого юзербара http://svn.assembla.com/svn/webmango....character.php. Может там имеется в виду что-то другое?
PHP код:

public function getAchievement(){
        
$achieve $this->cDB->selectCell("SELECT COUNT(`achievement`) FROM `character_achievement` WHERE `guid`=?d",$this->guid);
        if(!
$achieve$achieve 0;
        
        return 
$achieve;
    } 

http://wiki.ytdb.ru/index.php/Achievement.dbc - это тот dbc, или устаревшая версия? Там нет колонки Points. Эта таблица уже изначально есть в бд мангоса или нужно её добавлять? Я, если честно, даже не знаю какая сейчас последняя версия вова для мангоса.

Ну поделится кто дампом базы персов? :) Только персы - аккаунты не нужны.

Shadez 29.07.2010 10:13

Цитата:

Может там имеется в виду что-то другое?
Возможно, там отображается общее кол-во выполненных достижений. В этом случае запрос правильный.
Цитата:

это тот dbc, или устаревшая версия?
Актуальную структуру DBC лучше смотреть в файле DBCStructure.h (/src/game/)

HarpyWar 29.07.2010 12:34

К сожалению, просто структура без данных (и без того, с чем эти данные соотносятся) мне ни о чем не говорит.

Теперь ещё хорошо бы получить актуальные Talents.dbc, TalentTab.dbc и Achievement.dbc (клиента игры у меня нет).
И я не понимаю, почему никто не хочет (или не может?) выложить базу персов... Увы, но без неё ничего с места не сдвинется. :(

alien 29.07.2010 22:24

а что мешает скачать клиент?

29.07.2010 22:24

Цитата:

Сообщение от HarpyWar (Сообщение 11606)
И я не понимаю, почему никто не хочет (или не может?) выложить базу персов... Увы, но без неё ничего с места не сдвинется. :(

даже с ней не сдвинется...т.к. нужны скриншоты, а еще лучше точные данные с сервера о параметрах персонажа...
пробовал переписать код мангоса на пхп, осилил совсем не много, при чем только класс player +1500 строк; и запутался уже окончательно ...
имхо проще написать на С++ мод для апачи используя исходники мангоса, чем биться головой о пхп...
скриншот
http://img294.imageshack.us/img294/8168/16862449.jpg

Konctantin 29.07.2010 22:45

добавлено dbc:
dbc_enUS_12340
На название файла не смотреть, я там просто ошибся, когда обзывал его

30.07.2010 02:06

для того что бы получить статы, минимум необходимо :
1. загрузить базовые значения
PHP код:

SELECT `class`, `level`, `basehp`, `basemanaFROM `player_classlevelstatswhere `class` = ? and `level` = ?
SELECT `race`, `class`, `level`, `str`, `agi`, `sta`, `inte`, `spiFROM `player_levelstatswhere `class` = ? and `race` = ? and `level` = ?
SELECT `power_typeFROM `chr_classesWHERE `id` = ? 

2. выставить базовые значения комбатрейтинг, ат-к спид(мили маин, оффхенд, ренжед)
3. "обнулить" модификаторы
4. загрузить все скилы, в том числе расовые(не все хранятся в character_skills, часть в playercreateinfo_spell)
5. загрузить equip - применить бонусы с вещей
6. загрузить все ауры ( с учетом того, что некоторые имеют отрицательное значение )
7. пересчитать все рейтинги, защитные навыки
8. применить сохраненные значение хп и повер

Shadez 30.07.2010 03:13

Ауры (если это баффы) учитывать не надо.

30.07.2010 08:32

Цитата:

Сообщение от Shadez (Сообщение 11648)
Ауры (если это баффы) учитывать не надо.

тогда нет смысла и заморачиваться, не получим точные данные ...
пример: http://ru.wowhead.com/spell=168 будет кривой расчет брони...
http://ru.wowhead.com/spell=1245 неверное макс хп

Shadez 30.07.2010 11:07

Цитата:

Сообщение от Minimajack (Сообщение 11664)
тогда нет смысла и заморачиваться, не получим точные данные ...

C бафами данные как раз и не точные. Это всё временные модификаторы, а нам нужны постоянные данные. Как, например, в официальной Оружейной - там баффы/дебаффы не учитываются. Отображаются статы только исходя из бонусов вещей/энчантов/талантов/абилок.


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

ru-mangos.ru - Русское сообщество MaNGOS