Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Флудильня (http://mangos.ytdb.ru/forumdisplay.php?f=30)
-   -   Метка Рейда (http://mangos.ytdb.ru/showthread.php?t=7247)

Dubstep 02.08.2013 21:43

Метка Рейда
 
Привет всем, может кто подсказать что за визуальные эффекты там? Спелл или объект, а может что ещё О_о

зы http://wow.joystiq.com/2010/11/07/ca...-raid-markers/

LordJZ 02.08.2013 22:01

http://www.wowhead.com/search?q=raid+marker#spells

Dubstep 02.08.2013 22:18

Спеллы эти известны, но от них нету визуального эффекта...

LordJZ 02.08.2013 23:17

Я уже мало что помню, и полного кода под рукой нет, но вот из публичного моего репозитория:
Код:

    public enum DynamicObjectTypes
    {
        /// <summary>
        /// Unused.
        /// </summary>
        Portal          = 0,
        AreaSpell      = 1,
        FarsightFocus  = 2,
        RaidMarker      = 3,
    }

    public sealed class WowDynamicObject : WowObject
    {
        public DynamicObjectTypes DynamicObjectType
        {
            get { return (DynamicObjectTypes)(GetByte(DynamicObjectUpdateFields.DYNAMICOBJECT_BYTES, 3) >> 4); }
            set { SetByte(DynamicObjectUpdateFields.DYNAMICOBJECT_BYTES, (byte)((int)value << 4), 3); }
        }

        public ushort SpellVisual
        {
            get { return GetShort(DynamicObjectUpdateFields.DYNAMICOBJECT_BYTES, 0); }
            set { SetShort(DynamicObjectUpdateFields.DYNAMICOBJECT_BYTES, value, 0); }
        }

        public uint Spell
        {
            get { return GetUInt(DynamicObjectUpdateFields.DYNAMICOBJECT_SPELLID); }
            set
            {
                SetUInt(DynamicObjectUpdateFields.DYNAMICOBJECT_SPELLID, value);
                Entry = value;
            }
        }

Собственно, я создавал видимые объекты, кажется просто присваивая Spell, DynamicObjectType и, возможно, SpellVisual. Попробуйте.

Dubstep 03.08.2013 00:46

спс. помогло

А что клиенту нужно скормить с опкодом SMSG_RAID_MARKERS_CHANGED?

LordJZ 03.08.2013 01:52

Цитата:

Сообщение от Dubstep (Сообщение 31731)
...
А что клиенту нужно скормить с опкодом SMSG_RAID_MARKERS_CHANGED?

Не знаю, не использовал их по назначению никогда.

Amaru 03.08.2013 15:25

Цитата:

Сообщение от LordJZ (Сообщение 31730)
Я уже мало что помню, и полного кода под рукой нет, но вот из публичного моего репозитория:
Код:

    public enum DynamicObjectTypes
    {
        /// <summary>
        /// Unused.
        /// </summary>
        Portal          = 0,
        AreaSpell      = 1,
        FarsightFocus  = 2,
        RaidMarker      = 3,
    }

    public sealed class WowDynamicObject : WowObject
    {
        public DynamicObjectTypes DynamicObjectType
        {
            get { return (DynamicObjectTypes)(GetByte(DynamicObjectUpdateFields.DYNAMICOBJECT_BYTES, 3) >> 4); }
            set { SetByte(DynamicObjectUpdateFields.DYNAMICOBJECT_BYTES, (byte)((int)value << 4), 3); }
        }

        public ushort SpellVisual
        {
            get { return GetShort(DynamicObjectUpdateFields.DYNAMICOBJECT_BYTES, 0); }
            set { SetShort(DynamicObjectUpdateFields.DYNAMICOBJECT_BYTES, value, 0); }
        }

        public uint Spell
        {
            get { return GetUInt(DynamicObjectUpdateFields.DYNAMICOBJECT_SPELLID); }
            set
            {
                SetUInt(DynamicObjectUpdateFields.DYNAMICOBJECT_SPELLID, value);
                Entry = value;
            }
        }

Собственно, я создавал видимые объекты, кажется просто присваивая Spell, DynamicObjectType и, возможно, SpellVisual. Попробуйте.

Там еще в поле кастера - гуид группы
Цитата:

Сообщение от Dubstep (Сообщение 31731)
спс. помогло

А что клиенту нужно скормить с опкодом SMSG_RAID_MARKERS_CHANGED?

Код:

void Group::SendRaidMarkerUpdate()
{
    WorldPacket data(SMSG_RAID_MARKERS_CHANGED, 4);
    uint32 mask = 0;
    for (uint8 i = 0; i < RAID_MARKER_COUNT; ++i)
        if (m_raidMarkers[i])
            mask |= 1 << i;
    data << uint32(mask);

    BroadcastPacket(&data, false);
}


Dubstep 03.08.2013 21:00

SetUInt64Value(DYNAMICOBJECT_CASTER, group->GetGUID()); Как понимаю чтобы убрать из видимость игрокам не из группы?
Только вот что то падает сервер :) Там потом идёт выборка гуида из этого поля и падает :(
Если какие ещё способы убрать из видимости? или что то не так делаю

Amaru 03.08.2013 21:10

Цитата:

Сообщение от Dubstep (Сообщение 31734)
SetUInt64Value(DYNAMICOBJECT_CASTER, group->GetGUID()); Как понимаю чтобы убрать из видимость игрокам не из группы?
Только вот что то падает сервер :) Там потом идёт выборка гуида из этого поля и падает :(
Если какие ещё способы убрать из видимости? или что то не так делаю

Насколько я помню, с видимостью оно не связано.
С крашем все просто - включаем гдб и смотрим, что где крашит)
Для видимости же есть метод DynamicObject::IsVisibleForInState

LordJZ 04.08.2013 01:09

Цитата:

Сообщение от Amaru (Сообщение 31733)
Там еще в поле кастера - гуид группы

Опционально.

LordJZ 04.08.2013 11:32

Нашёл старый код, действительно, хватает двух полей: Spell и SpellVisual.

Но позже я переключился на создание маркеров юнитами:
Код:

void AddHighlight(WowGameObject go)
{
    if (!m_highlightedEntities.ContainsKey(go.Guid))
    {
        var highlighterGuid = new WowGuid(WowGuidType.Creature, 46645, ++m_dynamicObjectCounter);

        var unit = new WowUnit();

        var movement = new MovementInfo(highlighterGuid);
        movement.Living = true;
        movement.Position = go.MovementData.Position;
        movement.Orientation = 3.141593f;
        movement.TimeStamp = 2751961664;

        unit.MovementData = movement;
        unit.Guid = highlighterGuid;
        unit.Scale = Math.Max(go.Scale, 1.0f);
        unit.Entry = 46645;
        unit.Class = Classes.Warrior;
        unit.Gender = Genders.None;
        unit.PowerType = PowerType.Rage;
        unit.Health = 4979;
        unit.MaxHealth = 4979;
        unit.Level = 60;
        unit.Model = unit.NativeModel = 37259;
        unit.Faction = 190;
        unit.Flags2 = UnitFlags2.Flag_0x800;
        unit.BoundingRadius = 1.595f;
        unit.CombatReach = 1.65f;

        std.CreateObject(unit);

        var aura = new Aura();
        aura.AppliedTime = (uint)Environment.TickCount;
        aura.Caster = highlighterGuid;
        aura.Slot = 0;
        aura.Level = 60;
        aura.Flags = AuraFlags.EffectIndex_0 | AuraFlags.Positive | AuraFlags.NotCaster;
        aura.Spell = Global_HighlightSparklingGOs_Spell;
        aura.Unit = highlighterGuid;

        var auraUpdate = new AuraUpdate(highlighterGuid);
        auraUpdate.Full = true;
        auraUpdate.Auras.Add(aura);
        Send(auraUpdate);

        m_highlightedEntities.Add(go.Guid, highlighterGuid);
    }
}



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

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