DrKLO
-
Posts
20 -
Joined
-
Last visited
Never -
Donations
0.00 GBP
Content Type
Profiles
Bug Tracker
Wiki
Release Notes
Forums
Downloads
Blogs
Events
Posts posted by DrKLO
-
-
i found one crash, main thread stuck in this part of code
void WorldSession::SendDoFlight( uint32 mountDisplayId, uint32 path, uint32 pathNode ) { // remove fake death if (GetPlayer()->hasUnitState(UNIT_STAT_DIED)) GetPlayer()->RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH); while(GetPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE) //STUCK HERE GetPlayer()->GetMotionMaster()->MovementExpired(false); if (mountDisplayId) GetPlayer()->Mount( mountDisplayId ); GetPlayer()->GetMotionMaster()->MoveTaxiFlight(path,pathNode); }
i added iteration counter in this loop and break it when it equal to 100, no core stuck any more
maybe someone have the same problem?
-
if you shoot with wand, and while shooting if you press a lot of time on some instans spell, this spell will be casted a lot of times
seem that cooldown isn't apply on spell when casting shoot spell
so you can cast one spell up to ~10 times without cooldown
-
http://paste2.org/p/716069 caused by this commit http://github.com/mangos/mangos/commit/7661fe98398107a968c68d1a346002a70db772b1
i just revert it, because there was a lot of crash
-
to Lightguard, the problem is not only in the instance reset. If someone change difficulty who outside dungeon, and someone who inside make relog in the game - server will crash, because he will enter in the dungeon that not bind to him, and we get assert(false) in the code
sLog.outError("InstanceMap::Add: player %s(%d) is being put in instance %d,%d,%d,%d,%d,%d but he is in group %d and is bound to instance %d,%d,%d,%d,%d,%d!", player->GetName(), player->GetGUIDLow(), mapSave->GetMapId(), mapSave->GetInstanceId(), mapSave->GetDifficulty(), mapSave->GetPlayerCount(), mapSave->GetGroupCount(), mapSave->CanReset(), GUID_LOPART(pGroup->GetLeaderGUID()), playerBind->save->GetMapId(), playerBind->save->GetInstanceId(), playerBind->save->GetDifficulty(), playerBind->save->GetPlayerCount(), playerBind->save->GetGroupCount(), playerBind->save->CanReset()); if(groupBind) sLog.outError("InstanceMap::Add: the group is bound to instance %d,%d,%d,%d,%d,%d", groupBind->save->GetMapId(), groupBind->save->GetInstanceId(), groupBind->save->GetDifficulty(), groupBind->save->GetPlayerCount(), groupBind->save->GetGroupCount(), groupBind->save->CanReset()); assert(false);
we just prvevent it
i think it's bl1zz like, bacause i got message that i can't change dungeon difficulty, bacause i or some of my party members in the dungeon already
-
moderators, plz move it to the patch section
-
if someone compile source with #define MANGOS_DEBUG and enable logs, we should see what happened before crash in logs
maybe we should change in WaypointMovementGenerator.cpp this
// prevent a crash at empty waypoint path. if (!i_path || i_path->empty()) { creature.clearUnitState(UNIT_STAT_ROAMING_MOVE); return true; } // i_path was modified by chat commands for example if (i_path->size() != i_hasDone.size()) i_hasDone.resize(i_path->size()); if (i_currentNode >= i_path->size()) i_currentNode = 0;
and this
CreatureTraveller traveller(creature); i_nextMoveTime.Update(diff); i_destinationHolder.UpdateTraveller(traveller, diff, false, true);
to avoid crash
-
CreatureTraveller traveller(creature); i_nextMoveTime.Update(diff); i_destinationHolder.UpdateTraveller(traveller, diff, false, true); -this
function DestinationHolder<TRAVELLER>::UpdateTraveller ... traveller.Relocation(x, y, z, ori); - in some cases - this
template<> inline void Traveller<Creature>::Relocation(float x, float y, float z, float orientation) { i_traveller.GetMap()->CreatureRelocation(&i_traveller, x, y, z, orientation); }
void Map::CreatureRelocation(Creature *creature, float x, float y, float z, float ang) ... // if creature can't be move in new cell/grid (not loaded) move it to repawn cell/grid // creature coordinates will be updated and notifiers send if(!CreatureRespawnRelocation(creature)) - this
bool Map::CreatureRespawnRelocation(Creature *c) ... c->GetMotionMaster()->Clear(); - this
in 9400-9401 there was added some changes in CreatureRelocation, and maybe some of this changes delete WaypointMovementGenerator? so we have crash, and i_path = 0
-
But DrKLO said that SD2 starting in other thread in current realization of core, but it's need check.
i say that it's look like, not sure
Vladimir, can after MovementInform(creature); - creature.IsStopped() become false?
Russian:
Если не может, то краш точно не из за этого, т.к. краш только тогда, когда creature.IsStopped() = false.
-
first post updated, fortgot to add the same check in HandleSetRaidDifficultyOpcode
-
if we look at code we see
if (creature.IsStopped()){ - look at this check .... MovementInform(creature); }
and after
if (i_nextMoveTime.Passed()) { // If stopped then begin a new move segment if (creature.IsStopped()) - the same check { .... } else { .... i_nextMoveTime.Reset(i_path->at(i_currentNode).delay); - there was crash, because i_past = null; ... }
if first check passed, crash code can't be call
so making check i_path after MovementInform(creature); as in [9434] doesn't help
looks like it's deleted from other thread, but creatures on what was crash don't have eventAI or SD2 scripts
PS sorry for my bad english
-
this hack and bug can't cause crash in WorldSession::HandleMovementOpcodes
and i think can't cause server freeze, because function WaypointMovementGenerator<Creature>::Update doesn't have loop, it's called once for each time diff as i see.
if you have freezes, try to disable logs and compile without debug and with optimization, because with loglevel = 3 i have freezes too. Now uptime is more then one day with 300+ online for me.
-
bug: if yo go to the dungeon, for example in normal 10 difficulty, and then invite in the raid someone who outside. If this someone change dungeon difficulty and people inside dungeon make logout - server will crash or instance will reset
So do not let this someone to change dungeon difficulty if somebody in this raid\\group in dungeon.
-
i'm use freeze detector, 300 seconds check. But i'm use KAPATEJIb patches, there is meybe some that prevent freezes.
-
18 hours uptime now and still no crashes
-
else
{
// If not stopped then stop it and set the reset of TimeTracker to waittime
creature.StopMoving();
SetStoppedByPlayer(false);
if(!i_path)
{
sLog.outDebug("wtf? path is null!\\n"); //-----add this check
return true;
}
i_nextMoveTime.Reset(i_path->at(i_currentNode).delay);
++i_currentNode;
if (i_currentNode >= i_path->size())
i_currentNode = 0;
}
Could u tell me please, where shall i type it?
WaypointMovementGenerator.cpp - line 243
-
so
else { // If not stopped then stop it and set the reset of TimeTracker to waittime creature.StopMoving(); SetStoppedByPlayer(false); if(!i_path) { sLog.outDebug("wtf? path is null!\\n"); //-----add this check return true; } i_nextMoveTime.Reset(i_path->at(i_currentNode).delay); ++i_currentNode; if (i_currentNode >= i_path->size()) i_currentNode = 0; }
so crash is disappear, i_path become null, don't know why. In log i see my check.
all this creatures have event_ai, and maybe during update this calls MonsterMoveWithSpeed, and then Reset, that makes i_path = null
-
crashed 3 times on creature with entry 10760, guid 94985
and one with creature entry 3501, guid 52494
both when LoadPath, i think it's called after movgen->Reset(*creature); that was added in 9400
i think that's YTDB bug
i'll try to clear this creature waypoints
-
What bug does the patch fix? What features does the patch add?
If you fully broke you weapon, wear it and learn talent(for example Two-Handed Weapon Specialization),
then you weapon damage increase. Then unwear this weapon and unlearn talents. You damage doesn't decrease. You can do it a lot of times, and you melee damage will be increase and increase. So we shouldn't increase damage with broken item.
For which repository revision was the patch created?
8809+
Is there a thread in the bug report section or at lighthouse? If yes, please add a link to the thread.
Didn't find any
Who has been writing this patch? Please include either forum user names or email addresses.
Me
diff --git a/src/game/Player.cpp b/src/game/Player.cpp index b93b34c..62bc9e7 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -6889,6 +6889,10 @@ void Player::_ApplyWeaponDependentAuraCritMod(Item *item, WeaponAttackType attac void Player::_ApplyWeaponDependentAuraDamageMod(Item *item, WeaponAttackType attackType, Aura* aura, bool apply) { + //don't apply mod if item is broken + if(item->IsBroken()) + return; + // ignore spell mods for not wands Modifier const* modifier = aura->GetModifier(); if((modifier->m_miscvalue & SPELL_SCHOOL_MASK_NORMAL)==0 && (getClassMask() & CLASSMASK_WAND_USERS)==0)
-
2 functions
GameObject* ObjectAccessor::GetGameObject(WorldObject const &u, uint64 guid) { GameObject * ret = GetObjectInWorld(guid, (GameObject*)NULL); if(!ret) return NULL; if(ret->GetMapId() != u.GetMapId()) ret = NULL; if(ret->GetInstanceId() != u.GetInstanceId()) return NULL; return ret; } DynamicObject* ObjectAccessor::GetDynamicObject(WorldObject const &u, uint64 guid) { DynamicObject * ret = GetObjectInWorld(guid, (DynamicObject*)NULL); if(!ret) return NULL; if(ret->GetMapId() != u.GetMapId()) ret = NULL; if(ret->GetInstanceId() != u.GetInstanceId()) return NULL; return ret; }
if(ret->GetMapId() != u.GetMapId()) ret = NULL;
!!! ret = 0 and after this ret->GetInstanceId().
if(ret->GetInstanceId() != u.GetInstanceId()) return NULL;
i think there should be
if(ret->GetMapId() != u.GetMapId()) return NULL;
[unconfirmed] Infinite loop in TaxiHandler.cpp
in OldBug reports
Posted
i think it's related to http://github.com/rsa/mangos/commit/b6d31044b7ea17630cab6f9001a31bcf0b67a536 patch