Jump to content

Opterman

Members
  • Posts

    27
  • Joined

  • Last visited

    Never
  • Donations

    0.00 GBP 

Everything posted by Opterman

  1. I can't do that, because all parts of the code, however small, they are related. Greetings, Opterman
  2. Its better to wait, we're about to finish solving crash problems. I think aprox to end of this year or at the beginning of 2010 will be a stable version. Greetings, Opterman
  3. I think too os better to wait for a stable version It has a lor of differences with mtmapts. Mtmaps hasnt a map restarter when it crash. Packets are procressed by map thread and no by ace world thread. BattleGrouns are updated by her maps instead by world thread An adaptative rewriting of BG Code. An improving on events. And everything what is going to come Greetings, Opterman
  4. Yes , i've uploaded lastest patch version working with lastest mangos rev. I've modified somethings in BG Codes, Event codes and now , bg are updated by her maps Actually we've only i known crash and we're working on fix it Next Step: adapt events and pools to map restart. Greetings, Opterman
  5. Patch is currently under developing, I 'll notice you when i have a version more or less stable. I have to say that's near because Woweur is helping me a lot with crash. So you have to wait. I'll post news soon Greetings, Opterman
  6. My patch is tested on Windows and linux , and it's what im going to do in next releases , at finish patch versions I'll test on Mac and switch it to this S.O. if doesnt work there. Greetigns, Opterman
  7. Vladimir I thought that , it was the first thing that I thgought, but the only way to do the same thing of my patch and without mem corruption unsafe is process map by process , I think Multi Mangos will be the best option. Anyway i 'll continue updating my patch and improving it , maybe I find another way to avoid memory corruption,i.e like someone say mem hashes checks Greetings, Opterman
  8. I can't do this because when a map crash I dont delete the map instead this , I release all resources save all data and then restart the thread, so what you say is no possible. Greetings, Opterman
  9. Blizzard servers dont have it , blizzard server restart map if the error is on map and restart server if error is on network i can say it because i tested it my self.... Greetings, Opterman
  10. Could u put server in Debug on VS and make an backtrace of MapRunnable's threads and WorldRunnable thread What exactly occcurs ? Players cant cast ? I've tested again on Windows last patch version with last core revision and works totally ok Do you have another patch ? Greetings, Opterman
  11. Its because map crashed maybe and server is logouting out players , i had a function that logout player sending them the client message and then logout them in the server but i souppoused that it was no need But its needed maybe... Have you noticed i appears a backtrace message in cmd at this time¿ Or maybe you should change update interval Anyway im going to do tests with a 2k + player server population Greetings, Opterman
  12. If you active crash dump generation , yes , anyway the ACE Stacktrace is too poor.... so I want to read gdb for linux and another debugger on windows to make a good backtrace class and then put it on files with mapnumber and timestamp... I think join master now isnt a good idea without certain improvings and testing... Greetings, Opterman
  13. Shendor the first backtrace is not the same to the second ( Full backtrace ) To help you i need the backtrace of map thread I add too that if you debug the server with debugger you 'll get it signals like SIGTERM and you should continue. It's unused map cleanup feature. That's what i thought , so by this reason i added a option where you can specificate the number of crashes to restart the server, if there's some redundant error I.E If i put MapUpdater.ShudownAtCrash = 6 when there's 6 map crashes ( of whatever map , not for each map.. ) then the server shudowns... Greetings, Opterman
  14. Yes leak , is as you've said , as i've already said if it goes well i 'll think in an improving with an statical thread pool ( for instances only ( obiusly ) ). Greetings, Opterman
  15. It affects to server performance yes, but i dont know the result , i've tested with no many population and works fine , but i need to know what's the result with highs population. I dont want to give you false hopes, because as i said i dont know what will happen, but i 've programmed the patch doing my best, its the only thing that i can say. The performance result is on testing.... only there... Yes ,thought in doing the patch with a thread pool, but first i want to know how works with the current method.. Greetings, Opterman
  16. What bug does the patch fix? What features does the patch add? It adds a processor map system per thread. For which repository revision was the patch created? 8756 Who has been writing this patch? Please include either forum user names or email addresses. Woweur && Me This patch add a blizzlike map system processor. Maybe blizzard use a thread pool for map processing or maybe process instead thread but i wrote this patch following the main concept of Blizzard Map System processor , so if there's a crash in 1 thread it restarts and whoever be in anothers map could continue playing.. It patch has a backtrace output, and unload system if map isnt used, a shutdown feature if there's many crashes and at last point ( maybe too important to finish with the lag ): Each map number is processed by 1 thread... If a map is being restarted and someone is offline but is on this map and tries to login it recv a error message and if someone tries a teleport to a crashed map that is restarting it comeback at original teleport position. This patch too change the network processor to the map if player is on World. It means that the map process all the packets while the player is in the current map. At teleport i change the network processor to the world thread and the same at crash and before login. (22/11/09 Redundant crash on SendObjectUpdates fixed) This is the patch http://pastebin.com/m74127ce3 SQL Patch for events http://pastebin.com/m25a95e35 PD: I've tested it as exhaustively as it has been possible and I havent detected errors but i'd appreciate if you test it in a server with many population If you have a good CPU i recommend u a MapUpdater.Interval less than 30 ms I've to say that there's 1 thing on this patch that is not blizzlike and is "ACE processing" in blizzard when there's lag in a map ( like 571 winterlag(grasp) ) you can write correctly in the chat with no lags so i think the network processing of blizzard is in a different place of map processing.. Edit: Current TODO: 2rewriting events and pools.. Thanks to Woweur for help testing and fixing crashes Greetings, Opterman
  17. It's needed because if the object is not activated to quest server sends the default value ( closed ) 0xFFFF0000 and in fact this patch is already into git branch Greetings, Opterman
  18. Ok , you're right , i 've updated already. Greetings, Opterman
  19. It works for all GameObejct types. Greetings, Opterman
  20. What bug does the patch fix? What features does the patch add? It corrrect update of this criteria type with spells like Spirit of Redemption. For which repository revision was the patch created? 8442 Who has been writing this patch? Please include either forum user names or email addresses. Me This is the fix: From d480a5cbfbb3ba6d402b336e47a9b809d405766b Mon Sep 17 00:00:00 2001 From: unknown <Administrator@.(none)> Date: Mon, 31 Aug 2009 05:08:55 -0700 Subject: [PATCH] Criteria Fall Without Dying --- src/game/Player.cpp | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 5e52b87..8e86e7c 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -19886,10 +19886,11 @@ void Player::HandleFall(MovementInfo const& movementInfo) if (GetDummyAura(43621)) damage = GetMaxHealth()/2; + uint32 Health = GetHealth(); EnvironmentalDamage(DAMAGE_FALL, damage); // recheck alive, might have died of EnvironmentalDamage - if (isAlive()) + if (isAlive() && damage < Health) GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_FALL_WITHOUT_DYING, uint32(z_diff*100)); } -- 1.6.2.msysgit.0.186.gf7512 This patch avoid to update criteria fall without diying if you die but you have auras like Spirit of Redemption or DK Ghoul.. Greetings, Opterman
  21. What bug does the patch fix? What features does the patch add? It change itemGUID in packets by real guid ( loot creature guid ) For which repository revision was the patch created? 8442 Who has been writing this patch? Please include either forum user names or email addresses. Me This is the fix: From 2697d66417bc9bf514ec3331fa5537caa4289607 Mon Sep 17 00:00:00 2001 From: unknown <Administrator@.(none)> Date: Mon, 31 Aug 2009 10:25:20 -0700 Subject: [PATCH] Send Owner as its in roll packets --- src/game/Group.cpp | 30 +++++++++++++++--------------- src/game/Group.h | 11 ++++++----- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/game/Group.cpp b/src/game/Group.cpp index 5c83df6..e0fc912 100644 --- a/src/game/Group.cpp +++ b/src/game/Group.cpp @@ -451,7 +451,7 @@ void Group::Disband(bool hideDestroy) void Group::SendLootStartRoll(uint32 CountDown, const Roll &r) { WorldPacket data(SMSG_LOOT_START_ROLL, (8+4+4+4+4+4)); - data << uint64(r.itemGUID); // object guid what we're looting + data << uint64(r.LootedTargetGUID); // creature guid what we're looting data << uint32(r.totalPlayersRolling); // maybe the number of players rolling for it??? data << uint32(r.itemid); // the itemEntryId for the item that shall be rolled for data << uint32(r.itemRandomSuffix); // randomSuffix @@ -469,10 +469,10 @@ void Group::SendLootStartRoll(uint32 CountDown, const Roll &r) } } -void Group::SendLootRoll(const uint64& SourceGuid, const uint64& TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r) +void Group::SendLootRoll(const uint64& TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r) { WorldPacket data(SMSG_LOOT_ROLL, (8+4+8+4+4+4+1+1)); - data << uint64(SourceGuid); // guid of the item rolled + data << uint64(r.LootedTargetGUID); // creature guid what we're looting data << uint32(0); // unknown, maybe amount of players data << uint64(TargetGuid); data << uint32(r.itemid); // the itemEntryId for the item that shall be rolled for @@ -493,10 +493,10 @@ void Group::SendLootRoll(const uint64& SourceGuid, const uint64& TargetGuid, uin } } -void Group::SendLootRollWon(const uint64& SourceGuid, const uint64& TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r) +void Group::SendLootRollWon(const uint64& TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r) { WorldPacket data(SMSG_LOOT_ROLL_WON, (8+4+4+4+4+8+1+1)); - data << uint64(SourceGuid); // guid of the item rolled + data << uint64(r.LootedTargetGUID); // creature guid what we're looting data << uint32(0); // unknown, maybe amount of players data << uint32(r.itemid); // the itemEntryId for the item that shall be rolled for data << uint32(r.itemRandomSuffix); // randomSuffix @@ -519,7 +519,7 @@ void Group::SendLootRollWon(const uint64& SourceGuid, const uint64& TargetGuid, void Group::SendLootAllPassed(uint32 NumberOfPlayers, const Roll &r) { WorldPacket data(SMSG_LOOT_ALL_PASSED, (8+4+4+4+4)); - data << uint64(r.itemGUID); // Guid of the item rolled + data << uint64(r.LootedTargetGUID); // creature guid what we're looting data << uint32(NumberOfPlayers); // The number of players rolling for it??? data << uint32(r.itemid); // The itemEntryId for the item that shall be rolled for data << uint32(r.itemRandomPropId); // Item random property ID @@ -557,7 +557,7 @@ void Group::GroupLoot(const uint64& playerGUID, Loot *loot, Creature *creature) if (item->Quality >= uint32(m_lootThreshold) && !i->freeforall) { uint64 newitemGUID = MAKE_NEW_GUID(objmgr.GenerateLowGuid(HIGHGUID_ITEM),0,HIGHGUID_ITEM); - Roll* r=new Roll(newitemGUID,*i); + Roll* r=new Roll(newitemGUID,creature->GetGUID(),*i); //a vector is filled with only near party members for(GroupReference *itr = GetFirstMember(); itr != NULL; itr = itr->next()) @@ -607,7 +607,7 @@ void Group::NeedBeforeGreed(const uint64& playerGUID, Loot *loot, Creature *crea if (item->Quality >= uint32(m_lootThreshold) && !i->freeforall) { uint64 newitemGUID = MAKE_NEW_GUID(objmgr.GenerateLowGuid(HIGHGUID_ITEM),0,HIGHGUID_ITEM); - Roll* r=new Roll(newitemGUID,*i); + Roll* r=new Roll(newitemGUID,creature->GetGUID(),*i); for(GroupReference *itr = GetFirstMember(); itr != NULL; itr = itr->next()) { @@ -702,21 +702,21 @@ void Group::CountRollVote(const uint64& playerGUID, const uint64& Guid, uint32 N { case 0: //Player choose pass { - SendLootRoll(0, playerGUID, 128, 128, *roll); + SendLootRoll(playerGUID, 128, 128, *roll); ++roll->totalPass; itr->second = PASS; } break; case 1: //player choose Need { - SendLootRoll(0, playerGUID, 0, 0, *roll); + SendLootRoll(playerGUID, 0, 0, *roll); ++roll->totalNeed; itr->second = NEED; } break; case 2: //player choose Greed { - SendLootRoll(0, playerGUID, 128, 2, *roll); + SendLootRoll(playerGUID, 128, 2, *roll); ++roll->totalGreed; itr->second = GREED; } @@ -764,14 +764,14 @@ void Group::CountTheRoll(Rolls::iterator rollI, uint32 NumberOfPlayers) continue; uint8 randomN = urand(1, 99); - SendLootRoll(0, itr->first, randomN, 1, *roll); + SendLootRoll(itr->first, randomN, 1, *roll); if (maxresul < randomN) { maxguid = itr->first; maxresul = randomN; } } - SendLootRollWon(0, maxguid, maxresul, 1, *roll); + SendLootRollWon(maxguid, maxresul, 1, *roll); player = objmgr.GetPlayer(maxguid); if(player && player->GetSession()) @@ -811,14 +811,14 @@ void Group::CountTheRoll(Rolls::iterator rollI, uint32 NumberOfPlayers) continue; uint8 randomN = urand(1, 99); - SendLootRoll(0, itr->first, randomN, 2, *roll); + SendLootRoll(itr->first, randomN, 2, *roll); if (maxresul < randomN) { maxguid = itr->first; maxresul = randomN; } } - SendLootRollWon(0, maxguid, maxresul, 2, *roll); + SendLootRollWon(maxguid, maxresul, 2, *roll); player = objmgr.GetPlayer(maxguid); if(player && player->GetSession()) diff --git a/src/game/Group.h b/src/game/Group.h index 478b7c5..f697789 100644 --- a/src/game/Group.h +++ b/src/game/Group.h @@ -97,16 +97,17 @@ class InstanceSave; class Roll : public LootValidatorRef { public: - Roll(uint64 _guid, LootItem const& li) - : itemGUID(_guid), itemid(li.itemid), itemRandomPropId(li.randomPropertyId), itemRandomSuffix(li.randomSuffix), + Roll(uint64 _guid, uint64 _owner, LootItem const& li) + : itemGUID(_guid), LootedTargetGUID(_owner), itemid(li.itemid), itemRandomPropId(li.randomPropertyId), itemRandomSuffix(li.randomSuffix), totalPlayersRolling(0), totalNeed(0), totalGreed(0), totalPass(0), itemSlot(0) {} ~Roll() { } void setLoot(Loot *pLoot) { link(pLoot, this); } Loot *getLoot() { return getTarget(); } void targetObjectBuildLink(); - uint64 itemGUID; uint32 itemid; + uint64 itemGUID; + uint64 LootedTargetGUID; int32 itemRandomPropId; uint32 itemRandomSuffix; typedef std::map<uint64, RollVote> PlayerVote; @@ -300,8 +301,8 @@ class MANGOS_DLL_SPEC Group /*********************************************************/ void SendLootStartRoll(uint32 CountDown, const Roll &r); - void SendLootRoll(const uint64& SourceGuid, const uint64& TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r); - void SendLootRollWon(const uint64& SourceGuid, const uint64& TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r); + void SendLootRoll(const uint64& TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r); + void SendLootRollWon(const uint64& TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r); void SendLootAllPassed(uint32 NumberOfPlayers, const Roll &r); void GroupLoot(const uint64& playerGUID, Loot *loot, Creature *creature); void NeedBeforeGreed(const uint64& playerGUID, Loot *loot, Creature *creature); -- 1.6.2.msysgit.0.186.gf7512 Greetings, Opterman
  22. What bug does the patch fix? What features does the patch add? It fixes wrong door animation at visibility range. For which repository revision was the patch created? 8432 Who has been writing this patch? Please include either forum user names or email addresses. Me This is the patch: From 91352a4a19cbb6f8a06f69d3e3a85f633e05c396 Mon Sep 17 00:00:00 2001 From: unknown <Administrator@.(none)> Date: Mon, 31 Aug 2009 08:19:53 -0700 Subject: [PATCH] GAME_OBJECT_TYPE_DOOR Animation --- src/game/GameObject.cpp | 1 + src/game/Object.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/game/GameObject.cpp b/src/game/GameObject.cpp index 6ddd5a2..866e468 100644 --- a/src/game/GameObject.cpp +++ b/src/game/GameObject.cpp @@ -145,6 +145,7 @@ bool GameObject::Create(uint32 guidlow, uint32 name_id, Map *map, uint32 phaseMa SetUInt32Value(GAMEOBJECT_FACTION, goinfo->faction); SetUInt32Value(GAMEOBJECT_FLAGS, goinfo->flags); + SetUInt32Value(GAMEOBJECT_BYTES_1, uint32(-1)); SetEntry(goinfo->id); diff --git a/src/game/Object.cpp b/src/game/Object.cpp index 1601738..51247fe 100644 --- a/src/game/Object.cpp +++ b/src/game/Object.cpp @@ -711,18 +711,18 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask switch(((GameObject*)this)->GetGoType()) { case GAMEOBJECT_TYPE_CHEST: - *data << uint32(9); // enable quest object. Represent 9, but 1 for client before 2.3.0 + *data << uint32(0xFFFF0009); // enable quest object. Represent 9, but 1 for client before 2.3.0 break; case GAMEOBJECT_TYPE_GOOBER: - *data << uint32(1); + *data << uint32(0xFFFF0001); break; default: - *data << uint32(0); // unknown, not happen. + *data << uint32(0xFFFF0000); // unknown, not happen. break; } } else - *data << uint32(0); // disable quest object + *data << uint32(0xFFFF0000); // disable quest object } else *data << m_uint32Values[ index ]; // other cases -- 1.6.2.msysgit.0.186.gf7512 Well, when somebody relog in front of a door or is recently at visibility range it animates as if it was opening. I take dumps from official server and i noticed that the high word value of GAMEOBJECT_DYNAMIC was always -1 as unsigned so I think that wow client take -1 high word value as no animation, so that's what i fixed. This 's the dump: I initialize GAMEOBJECT_BYTES_1 too as -1 because in official servers its done by this way too, at least the highest byte value. Greetings, Opterman
  23. What bug does the patch fix? What features does the patch add? Fix CMSG_MOVE_NOT_ACTIVE_MOVER , maybe a typo For which repository revision was the patch created? 8432 Who has been writing this patch? Please include either forum user names or email addresses. Me This is the patch: From b132ef74014bc1653f46918742d7f77ed4d26d35 Mon Sep 17 00:00:00 2001 From: unknown <Administrator@.(none)> Date: Sun, 30 Aug 2009 18:12:56 -0700 Subject: [PATCH] NoActiveMover --- src/game/MovementHandler.cpp | 9 ++++----- 1 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/game/MovementHandler.cpp b/src/game/MovementHandler.cpp index 7696e1e..2c2ec80 100644 --- a/src/game/MovementHandler.cpp +++ b/src/game/MovementHandler.cpp @@ -446,14 +446,13 @@ void WorldSession::HandleSetActiveMoverOpcode(WorldPacket &recv_data) void WorldSession::HandleMoveNotActiveMover(WorldPacket &recv_data) { sLog.outDebug("WORLD: Recvd CMSG_MOVE_NOT_ACTIVE_MOVER"); - recv_data.hexlike(); - uint64 old_mover_guid; - recv_data >> old_mover_guid; + uint64 mover_guid; + recv_data >> mover_guid; //GUID That disable movement - if(_player->m_mover->GetGUID() == old_mover_guid) + if(_player->m_mover->GetGUID() != mover_guid) { - sLog.outError("HandleMoveNotActiveMover: incorrect mover guid: mover is " I64FMT " and should be " I64FMT " instead of " I64FMT, _player->m_mover->GetGUID(), _player->GetGUID(), old_mover_guid); + sLog.outError("HandleMoveNotActiveMover: incorrect mover guid: mover is " I64FMT " and should be " I64FMT " instead of " I64FMT, _player->m_mover->GetGUID(), _player->GetGUID(), mover_guid); recv_data.rpos(recv_data.wpos()); // prevent warnings spam return; } -- 1.6.2.msysgit.0.186.gf7512 The old processing code of this packet was a bit annoying because mover guid was as old mover guid perhaps meaning that when client send no active mover packet, mover guid change and that's no right. and before appliying my fix in my server i got very weird console messages like these: Greetings, Opterman
  24. What bug does the patch fix? What features does the patch add? Add the Spell Insta Kill Log For which repository revision was the patch created? 8432 Who has been writing this patch? Please include either forum user names or email addresses. Me With this patch , players sould see when someone uses a spell with InstaKIll effect. This is the patch From 1d53c97fa8044ed1ddf895ef66eb962fc8c2a206 Mon Sep 17 00:00:00 2001 From: unknown <Administrator@.(none)> Date: Sat, 29 Aug 2009 05:48:50 -0700 Subject: [PATCH] Spell Insta Kill Log --- src/game/SpellEffects.cpp | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index a52d573..91649dd 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -282,6 +282,11 @@ void Spell::EffectInstaKill(uint32 /*i*/) if(m_caster == unitTarget) // prevent interrupt message finish(); + WorldPacket data(SMSG_SPELLINSTAKILLLOG, (8+8+4)); + data << uint64(m_caster->GetTypeId() != TYPEID_GAMEOBJECT ? m_caster->GetGUID() : 0); //Caster GUID + data << uint64(unitTarget->GetGUID()); //Victim GUID + data << uint32(m_spellInfo->Id); + m_caster->SendMessageToSet(&data, true); m_caster->DealDamage(unitTarget, unitTarget->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); } -- 1.6.2.msysgit.0.186.gf7512 I added a check in GameObject caster case knowning that mangos actually doesn't support gameobject as caster, but in official server when caster is a gameobject caster guid is 0 , I dont know why. So i added it for further support. Greetings, Opterman
×
×
  • 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