Jump to content

KiriX

Members
  • Posts

    120
  • Joined

  • Last visited

    Never
  • Donations

    0.00 GBP 

Posts posted by KiriX

  1. This patch fix target select for spell effect EffectQuestComplete. So spell as http://www.wowhead.com/spell=31336 should work correctly. Now for MaNGOS all spells with EffectQuestComplete should be cast by player:

    if(m_caster->GetTypeId() != TYPEID_PLAYER)

    return;

    and effects would be apply at caster:

    Player *_player = (Player*)m_caster;

    _player->AreaExploredOrEventHappens(quest_id);

    ignoring all spell's targets from DBC.

    But spell 31336 has EffectQuestComplete and target for this effect - (TARGET_CASTER_COORDINATES, TARGET_ALL_ENEMY_IN_AREA) and effect will never be apply at player. Also this spell should be cast by NPC http://www.wowhead.com/npc=17664, but with current Spell::EffectQuestComplete implemention will never be apply at player.

    Patch fix this.

    diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
    index 096dae3..70ea439 100644
    --- a/src/game/SpellEffects.cpp
    +++ b/src/game/SpellEffects.cpp
    @@ -7182,10 +7182,10 @@ void Spell::EffectReputation(SpellEffectIndex eff_idx)
    
    void Spell::EffectQuestComplete(SpellEffectIndex eff_idx)
    {
    -    if(m_caster->GetTypeId() != TYPEID_PLAYER)
    +    if(unitTarget->GetTypeId() != TYPEID_PLAYER)
            return;
    
    -    Player *_player = (Player*)m_caster;
    +    Player *_player = (Player*)unitTarget;
    
        uint32 quest_id = m_spellInfo->EffectMiscValue[eff_idx];
        _player->AreaExploredOrEventHappens(quest_id);

    Author: me

  2. That's not a bug, I just haven't put pathfinding into HomeMovementGenerator.

    At youtube video npc return to spawnpoint with using pathfinding. I think that you will add pathfinding into HomeMovementGenerator soon (then it's done :)).

    And big thanks for the realy great work!!! ;)

  3. Thx!

    If I understand you correctly it should be this:

            // now start building mmtiles for each tile
           printf("We have %i tiles.                          \\n", tiles->size());
           for(set<uint32>::iterator it = tiles->begin(); it != tiles->end(); ++it)
           {
               allVerts.fastClear();
               allTris.fastClear();
    
               MeshData meshData;

    allVerts.fastClear(); is not need - it already in loop...

  4. It would appear you don't have enough memory. Try with --hiResHeightmaps false.

    Yes, I can understand it, but didn't think that's it is true...

    3Gb is not enough??? It's terrible...

    Map 000 exstracted normally. Maybe is clean as a memory?

    I'll try again without [--hiResHeightmaps true] key.

  5. Tried to extract mmaps with key [--hiResHeightmaps true --skipContinents false]

    Got error:

    Application Log
    Start: Mon Aug 23 04:59:07 2010
    
    
    **************************
    
    Critical Error - MoveMapGen.exe
    Memory manager returned NULL: out of memory?
    
    
    
    Expression: data
    
    e:\\test\\rsa-10392\\dep\\include\\g3dlite\\G3D/Array.h:154

    3Gb DDR2

    Error then extract map 001.

  6. Yes, that's normal. I should ask Lynx3d to change that to a debug message :)

    One more question. How many Gb mmaps? I get mmaps folder - 242Mb - it's normal too?

    I think that it's should be more...

    And need I a special config tune for work mmaps?

  7. I have some errors like this when try to build MoveMapsGen:

    Building map 035:
    We have 4 tiles.
    ERROR:StaticMapTree::UnloadMapTile(): Trying to unload non-loaded tile. Map:35 X
    :31 Y:31
    ERROR:StaticMapTree::UnloadMapTile(): Trying to unload non-loaded tile. Map:35 X
    :31 Y:32
    ERROR:StaticMapTree::UnloadMapTile(): Trying to unload non-loaded tile. Map:35 X
    :32 Y:31
    ERROR:StaticMapTree::UnloadMapTile(): Trying to unload non-loaded tile. Map:35 X
    :32 Y:32
    Complete!

    It's normal?

  8. ../../../src/game/Group.cpp: In member function ‘void Group::BroadcastGroupUpdate()’:
    ../../../src/game/Group.cpp:1847: error: ‘GetUnit’ is not a member of ‘Unit’
    make[3]: *** [Group.o] Error 1
    make[3]: *** Waiting for unfinished jobs....
    mv -f .deps/GuardAI.Tpo .deps/GuardAI.Po
    mv -f .deps/HostileRefManager.Tpo .deps/HostileRefManager.Po
    mv -f .deps/GroupHandler.Tpo .deps/GroupHandler.Po
    mv -f .deps/HomeMovementGenerator.Tpo .deps/HomeMovementGenerator.Po
    mv -f .deps/GuildHandler.Tpo .deps/GuildHandler.Po
    mv -f .deps/DBCStores.Tpo .deps/DBCStores.Po
    mv -f .deps/Guild.Tpo .deps/Guild.Po
    make[3]: Leaving directory `/root/mangos/objdir/src/game'
    make[2]: *** [all-recursive] Error 1
    make[2]: Leaving directory `/root/mangos/objdir/src'
    make[1]: *** [all-recursive] Error 1
    make[1]: Leaving directory `/root/mangos/objdir'
    make: *** [all] Error 2
    

    KiriX's Patch does not compile on mangos r. 10397.

    Anyone here who has a working patch for latest rev? Thx

    Try this:

    diff --git a/src/game/Group.cpp b/src/game/Group.cpp
    index 14d683b..ca85467 100644
    --- a/src/game/Group.cpp
    +++ b/src/game/Group.cpp
    @@ -347,6 +347,10 @@ bool Group::AddMember(ObjectGuid guid, const char* name)
    
    uint32 Group::RemoveMember(ObjectGuid guid, uint8 method)
    {
    +    // Frozen Mod
    +    BroadcastGroupUpdate();
    +    // Frozen Mod
    +    
        // remove member and change leader (if need) only if strong more 2 members _before_ member remove
        if (GetMembersCount() > uint32(isBGGroup() ? 1 : 2))    // in BG group case allow 1 members group
        {
    @@ -1821,6 +1825,36 @@ void Group::_homebindIfInstance(Player *player)
            }
        }
    }
    +//Frozen Mod
    +void Group::BroadcastGroupUpdate(void)
    +{
    +    for(member_citerator citr = m_memberSlots.begin(); citr != m_memberSlots.end(); ++citr)
    +    {
    +        Player *pp = sObjectMgr.GetPlayer(citr->guid);
    +        if(pp && pp->IsInWorld())
    +        {
    +            pp->ForceValuesUpdateAtIndex(UNIT_FIELD_BYTES_2);
    +            pp->ForceValuesUpdateAtIndex(UNIT_FIELD_FACTIONTEMPLATE);
    +            DEBUG_LOG("-- Forced group value update for '%s'", pp->GetName());
    +            if(pp->GetPet())
    +            {
    +                pp->GetPet()->ForceValuesUpdateAtIndex(UNIT_FIELD_BYTES_2);
    +                pp->GetPet()->ForceValuesUpdateAtIndex(UNIT_FIELD_FACTIONTEMPLATE);
    +                DEBUG_LOG("-- Forced group value update for '%s' pet '%s'", pp->GetName(), pp->GetPet()->GetName());
    +            }
    +            for(uint32 i = 0; i < MAX_TOTEM_SLOT; ++i)
    +            {
    +                if(Unit *totem = pp->GetMap()->GetUnit(pp->m_TotemSlot[i]))
    +                {
    +                    totem->ForceValuesUpdateAtIndex(UNIT_FIELD_BYTES_2);
    +                    totem->ForceValuesUpdateAtIndex(UNIT_FIELD_FACTIONTEMPLATE);
    +                    DEBUG_LOG("-- Forced group value update for '%s' totem #%u", pp->GetName(), i);
    +                }
    +            }
    +        }
    +    }
    +}
    +// Frozen Mod
    
    static void RewardGroupAtKill_helper(Player* pGroupGuy, Unit* pVictim, uint32 count, bool PvP, float group_rate, uint32 sum_level, bool is_dungeon, Player* not_gray_member_with_max_level, Player* member_with_max_level, uint32 xp )
    {
    diff --git a/src/game/Group.h b/src/game/Group.h
    index 2582cae..b34d404 100644
    --- a/src/game/Group.h
    +++ b/src/game/Group.h
    @@ -353,6 +353,10 @@ class MANGOS_DLL_SPEC Group
            InstanceGroupBind* GetBoundInstance(uint32 mapId, Player* player);
            InstanceGroupBind* GetBoundInstance(Map* aMap, Difficulty difficulty);
            BoundInstancesMap& GetBoundInstances(Difficulty difficulty) { return m_boundInstances[difficulty]; }
    +        
    +        // Frozen Mod
    +        void BroadcastGroupUpdate(void);
    +        // Frozen Mod
    
        protected:
            bool _addMember(ObjectGuid guid, const char* name, bool isAssistant=false);
    diff --git a/src/game/GroupHandler.cpp b/src/game/GroupHandler.cpp
    index 04da05c..d161448 100644
    --- a/src/game/GroupHandler.cpp
    +++ b/src/game/GroupHandler.cpp
    @@ -208,6 +208,10 @@ void WorldSession::HandleGroupAcceptOpcode( WorldPacket & recv_data )
        // everything is fine, do it, PLAYER'S GROUP IS SET IN ADDMEMBER!!!
        if(!group->AddMember(GetPlayer()->GetObjectGuid(), GetPlayer()->GetName()))
            return;
    +    
    +    // Frozen Mod
    +    group->BroadcastGroupUpdate();
    +    // Frozen Mod
    }
    
    void WorldSession::HandleGroupDeclineOpcode( WorldPacket & /*recv_data*/ )
    diff --git a/src/game/Object.cpp b/src/game/Object.cpp
    index f4a8fa7..20ab8e8 100644
    --- a/src/game/Object.cpp
    +++ b/src/game/Object.cpp
    @@ -662,6 +662,54 @@ void Object::BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask *
                        else
                            *data << (m_uint32Values[ index ] & ~UNIT_DYNFLAG_TAPPED);
                    }
    +                
    +                // Frozen Mod
    +                else if(index == UNIT_FIELD_BYTES_2 || index == UNIT_FIELD_FACTIONTEMPLATE)
    +                {
    +                    bool ch = false;
    +                    
    +                    if((GetTypeId() == TYPEID_PLAYER || GetTypeId() == TYPEID_UNIT) && target != this)
    +                    {
    +                        bool forcefriendly = false; // bool for pets/totems to offload more code from the big if below
    +                        
    +                        if(GetTypeId() == TYPEID_UNIT)
    +                        {
    +                            forcefriendly = (((Creature*)this)->isTotem() || ((Creature*)this)->isPet())
    +                            && ((Creature*)this)->GetOwner()->GetTypeId() == TYPEID_PLAYER
    +                            && ((Creature*)this)->GetOwner()->IsFriendlyTo(target) // pet owner must be friendly to target
    +                            && ((Creature*)this)->GetOwner() != target // no need to send hackfix to pet owner
    +                            && (target->IsInSameGroupWith((Player*)((Creature*)this)->GetOwner()) || target->IsInSameRaidWith((Player*)((Creature*)this)->GetOwner()));
    +                        }
    +
    +                        if(((Unit*)this)->IsSpoofSamePlayerFaction() || forcefriendly || (target->GetTypeId() == TYPEID_PLAYER && GetTypeId() == TYPEID_PLAYER && (target->IsInSameGroupWith((Player*)this) || target->IsInSameRaidWith((Player*)this))))
    +                        {
    +                            if(index == UNIT_FIELD_BYTES_2)
    +                            {
    +                                DEBUG_LOG("-- VALUES_UPDATE: Sending '%s' the blue-group-fix from '%s' (flag)", target->GetName(), ((Unit*)this)->GetName());
    +                                *data << ( m_uint32Values[ index ] & (UNIT_BYTE2_FLAG_SANCTUARY << 8) ); // this flag is at uint8 offset 1 !!
    +                                ch = true;
    +                            }
    +                            else if(index == UNIT_FIELD_FACTIONTEMPLATE)
    +                            {
    +                                FactionTemplateEntry const *ft1, *ft2;
    +                                ft1 = ((Unit*)this)->getFactionTemplateEntry();
    +                                ft2 = ((Unit*)target)->getFactionTemplateEntry();
    +                                
    +                                if(ft1 && ft2 && (!ft1->IsFriendlyTo(*ft2) || ((Unit*)this)->IsSpoofSamePlayerFaction()))
    +                                {
    +                                    uint32 faction = ((Player*)target)->getFaction(); // pretend that all other HOSTILE players have own faction, to allow follow, heal, rezz (trade wont work)
    +                                    DEBUG_LOG("-- VALUES_UPDATE: Sending '%s' the blue-group-fix from '%s' (faction %u)", target->GetName(), ((Unit*)this)->GetName(), faction);
    +                                    *data << uint32(faction);
    +                                    ch = true;
    +                                }
    +                            }
    +                        }
    +                    }
    +                    
    +                    if(!ch)
    +                        *data << m_uint32Values[ index ];
    +                }
    +                // Frozen Mod
                    else
                    {
                        // send in current format (float as float, uint32 as uint32)
    @@ -1664,6 +1712,21 @@ Creature* WorldObject::SummonCreature(uint32 id, float x, float y, float z, floa
        return pCreature;
    }
    
    +// Frozen Mod
    +void Object::ForceValuesUpdateAtIndex(uint32 i)
    +{
    +    m_uint32Values_mirror[i] = GetUInt32Value(i) + 1; // makes server think the field changed
    +    if(m_inWorld)
    +    {
    +        if(!m_objectUpdated)
    +        {
    +            AddToClientUpdateList();
    +            m_objectUpdated = true;
    +        }
    +    }
    +}
    +// Frozen Mod
    +
    namespace MaNGOS
    {
        class NearUsedPosDo
    diff --git a/src/game/Object.h b/src/game/Object.h
    index c900e4d..4e8063a 100644
    --- a/src/game/Object.h
    +++ b/src/game/Object.h
    @@ -288,6 +288,11 @@ class MANGOS_DLL_SPEC Object
    
            virtual bool hasQuest(uint32 /* quest_id */) const { return false; }
            virtual bool hasInvolvedQuest(uint32 /* quest_id */) const { return false; }
    +        
    +        // Frozen Mod
    +        void ForceValuesUpdateAtIndex(uint32);
    +        // Frozen Mod
    +        
        protected:
    
            Object ( );
    diff --git a/src/game/TradeHandler.cpp b/src/game/TradeHandler.cpp
    index 6abb061..8fb7f64 100644
    --- a/src/game/TradeHandler.cpp
    +++ b/src/game/TradeHandler.cpp
    @@ -604,11 +604,13 @@ void WorldSession::HandleInitiateTradeOpcode(WorldPacket& recvPacket)
            return;
        }
    
    -    if (pOther->GetTeam() !=_player->GetTeam() )
    +    // Frozen Mod
    +    /* if (pOther->GetTeam() !=_player->GetTeam() )
        {
            SendTradeStatus(TRADE_STATUS_WRONG_FACTION);
            return;
    -    }
    +    } */
    +    // Frozen Mod
    
        if (!pOther->IsWithinDistInMap(_player,10.0f,false))
        {
    diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
    index 8e71766..24648dd 100644
    --- a/src/game/Unit.cpp
    +++ b/src/game/Unit.cpp
    @@ -243,6 +243,10 @@ Unit::Unit()
        // remove aurastates allowing special moves
        for(int i=0; i < MAX_REACTIVE; ++i)
            m_reactiveTimer[i] = 0;
    +        
    +    // Frozen Mod
    +    m_spoofSamePlayerFaction = false;
    +    // Frozen Mod
    }
    
    Unit::~Unit()
    diff --git a/src/game/Unit.h b/src/game/Unit.h
    index 4fda849..cc8fb8b 100644
    --- a/src/game/Unit.h
    +++ b/src/game/Unit.h
    @@ -1884,6 +1884,11 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
            PetAuraSet m_petAuras;
            void AddPetAura(PetAura const* petSpell);
            void RemovePetAura(PetAura const* petSpell);
    +        
    +        // Frozen Mod
    +        inline void SetSpoofSamePlayerFaction(bool b) { m_spoofSamePlayerFaction = b; }
    +        inline bool IsSpoofSamePlayerFaction(void) {return m_spoofSamePlayerFaction; }
    +        // Frozen Mod
    
            // Movement info
            MovementInfo m_movementInfo;
    @@ -1936,8 +1941,12 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
            uint32 m_reactiveTimer[MAX_REACTIVE];
            uint32 m_regenTimer;
            uint32 m_lastManaUseTimer;
    +        
    +        // Frozen Mod
    +        bool m_spoofSamePlayerFaction : 1;
    +        // Frozen Mod
    
    -    private:
    +    public:
            void CleanupDeletedAuras();
    
            // player or player's pet
    

  9. Do you realy can't change this in code manualy???

    It should work...

    diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp
    index d8aa6be..ab31c99 100644
    --- a/src/game/SpellMgr.cpp
    +++ b/src/game/SpellMgr.cpp
    @@ -2971,7 +2971,7 @@ SpellCastResult SpellMgr::GetSpellAllowedInLocationError(SpellEntry const *spell
        {
            uint32 v_map = GetVirtualMapForMapAndZone(map_id, zone_id);
            MapEntry const* mapEntry = sMapStore.LookupEntry(v_map);
    -        if (!mapEntry || mapEntry->addon < 1 || !mapEntry->IsContinent())
    +        if (!mapEntry || !mapEntry->IsContinent())
                return SPELL_FAILED_INCORRECT_AREA;
        }

  10. Hm...

    We can get four random model from DB right now. Use modelid_A and modelid_A2 (for Aliance) - this 2 model (random). And for each model use modelid_other_gender in creature_model_info.

    1 model - modelid_A

    2 model - modelid_other_gender from creature_model_info for modelid_A

    3 model - modelid_A2

    4 model - modelid_other_gender from creature_model_info for modelid_A2

    May be I'm wrong?

  11. Firebomb script (Event AI OPvP) has been dropped. UDB has had this data since at least 0.10, with an update in 0.12. You do not need the Firebomb script if you're database is at least current with UDB 0.12 rev. 388.

    Hm... What about users who dont use UDB? They can use YTDB for example...

    I think that Event AI OPvP should not be drop...

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Privacy Policy Terms of Use