Jump to content

KiriX

Members
  • Posts

    120
  • Joined

  • Last visited

    Never
  • Donations

    0.00 GBP 

Everything posted by KiriX

  1. Any problem? Please review this and comment if patch contain errors...
  2. This sould fix DK pet and very usefull for a future (for impliment vehicle). Why dev don't commetns this?
  3. 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
  4. Thanks! Realy great patch. Need add to git!
  5. I don't know why you have error... Ok, try this. This patchfile wich use I'm. For r.10399
  6. No, this is does not mean that I simply removed the check of totems. I just correct this part like it should be in latest mangos revision...
  7. Рatch from 86 post work - 100% For example: patch from 86 post don't contain Unit::m_TotemSlot
  8. KiriX

    MMaps Redux

    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!!!
  9. KiriX

    MMaps Redux

    Is need re-extract maps and vmaps? Work well =) One bug - npc correct found path if I attacked them, but then I turn on GM - they return to their spawnpoint without any pathfind =(
  10. Drop this patch... This is dirty hack and very-very old...
  11. KiriX

    MMaps Redux

    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...
  12. KiriX

    MMaps Redux

    Without key [--hiResHeightmaps true] mmaps was extracted fully without any errors. What makes this key?
  13. KiriX

    MMaps Redux

    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.
  14. KiriX

    MMaps Redux

    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.
  15. KiriX

    MMaps Redux

    Thx =) How I should extract mmaps (that key?) if I want get npc move like in youtube move from first post? =) And it will be usefull if you point how many Gb full mmaps and how many files it's contain...
  16. KiriX

    MMaps Redux

    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?
  17. KiriX

    MMaps Redux

    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?
  18. 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
  19. For other. You can use this: Horde & Alliance grouping/trade This work - 100% =)
  20. 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; }
  21. 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?
  22. Not need update for 10246... I have not any problem with this patch and 10274.
  23. Hm... What about users who dont use UDB? They can use YTDB for example... I think that Event AI OPvP should not be drop...
  24. It is not yet fully done (I talked with zergtmn on ru-mangos.ru forum).
×
×
  • 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