All pastes #1006967 Raw Edit

Unnamed

public cpp v1 · immutable
#1006967 ·published 2008-05-04 14:15 UTC
rendered paste body
ndex: CharacterHandler.cpp===================================================================--- CharacterHandler.cpp	(revision 5746)+++ CharacterHandler.cpp	(working copy)@@ -521,8 +521,52 @@      MapManager::Instance().GetMap(pCurrChar->GetMapId(), pCurrChar)->Add(pCurrChar);     ObjectAccessor::Instance().AddObject(pCurrChar);-    //sLog.outDebug("Player %s added to Map.",pCurrChar->GetName());-+		if (MapManager::Instance().GetMap(pCurrChar->GetMapId(), pCurrChar)->Instanceable())+	    {+		    uint32 limit=MapManager::Instance().GetMap(pCurrChar->GetMapId(), pCurrChar)->GetMaxPlayers();+	        uint32 cur=MapManager::Instance().GetMap(pCurrChar->GetMapId(), pCurrChar)->GetPlayersCountExceptGMs();+	        if (cur>limit)+	        {+	            sLog.outError("Player %s exceed limit and will be teleported",pCurrChar->GetName());+				uint32 map_id = MapManager::Instance().GetMap(pCurrChar->GetMapId(), pCurrChar)->GetId();+				QueryResult *result = WorldDatabase.PQuery("SELECT id FROM areatrigger_teleport WHERE target_map ='%u'", map_id);+				uint32 Trigger_ID;+				if(result){+					QueryResult *result2 = WorldDatabase.PQuery("SELECT parent_map FROM instance_template WHERE map ='%u'", map_id);+					AreaTriggerEntry const* atEntry;+					if(result2){+					uint32 parentmap;+					Field *field2 = result2->Fetch();+					parentmap = field2[0].GetUInt32();+					for (uint64 i=0; i < result->GetRowCount(); i++){+						Field *fields = result->Fetch();+						Trigger_ID = fields[0].GetUInt32();+						atEntry = sAreaTriggerStore.LookupEntry(Trigger_ID);+						if(atEntry->mapid == parentmap)+							break;+						result->NextRow();+					}else{+						delete result2;+						Field *fields = result->Fetch();+						Trigger_ID = fields[0].GetUInt32();+						atEntry = sAreaTriggerStore.LookupEntry(Trigger_ID);+					}+					}+		        +				if(atEntry){+					pCurrChar->TeleportTo(atEntry->mapid, atEntry->x, atEntry->y,atEntry->z, pCurrChar->GetOrientation());+					sLog.outError("TEleport to %u",atEntry->mapid);+				}else{+					sLog.outError("Not find the instance areatrigger. Player: %s, Trigger_ID: %i,teleport to Home.",pCurrChar->GetName(),Trigger_ID);+					pCurrChar->TeleportTo(pCurrChar->m_homebindMapId, pCurrChar->m_homebindX, pCurrChar->m_homebindY,pCurrChar->m_homebindZ, pCurrChar->GetOrientation());+				}+				}else{+					sLog.outError("Query bug");+				}+				delete result;+	        }+	    }+	     pCurrChar->SendInitialPacketsAfterAddToMap();      CharacterDatabase.PExecute("UPDATE characters SET online = 1 WHERE guid = '%u'", pCurrChar->GetGUIDLow());