aboutsummaryrefslogtreecommitdiff
path: root/src/game/MapManager.cpp
diff options
context:
space:
mode:
authorAnubisss <none@none>2010-03-27 13:54:38 +0100
committerAnubisss <none@none>2010-03-27 13:54:38 +0100
commitbe739e99009c2796d0153e7b3dabcf819e915541 (patch)
tree22017cf657485b228e93b0dc496d25a5246bd83d /src/game/MapManager.cpp
parent099ef2a9b6e2e1c4986878c15ce5758edba5a71c (diff)
Use GUIDs instead of "global" pointers in ~all boss/instance scripts.
GUIDs are most safer than pointers and in some cases can avoid segmentation faults. == - == Let me show a simple example: We have a pointer to a creature: Creature *pCreature; and try to search a creature and store it in the pointer: pCreature = SearchCreature(ID); We can check simply if the creature found or not: if(pCreature) - if this give true: creature found and we have a memory address which points to the creature - if this give false: creature not found and this is a NULL pointer Suppose that we have a valid pointer, so creature found. We wanna use that pointer somewhere, for example in script phase 3. But we delete the creature(from world) in phase 1. In phase 3: if(pCreature) pCreature->DoSomeShit(); The if condition gives true, but pCreature points to an _invalid_ address. In that address maybe have "nothing" or another creature's object or a player or anything else, dont know that. ~~ - ~~ Let me show the correct way: Creature's GUID: uint64 CreatureGUID; search the creature and set the GUID: Creature *pCreature = SearchCreature(ID); CreatureGUID = pCreature ? pCreature->GetGUID() : 0; // if pCreature is NULL set the GUID to 0 So we have a GUID and not a pointer. We can get the creature from that GUID: Creature *pCreature = GetCreature(CreatureGUID); and we can simply check it is valid or not(found or not): if(pCreature) So we deleted the creature in phase 1 and try to use it in phase 3: Creature *pCreature = GetCreature(CreatureGUID); And this gives NULL because GetCreature() can't find the creature which GUID is CreatureGUID. if(pCreature) // pCreature is NULL pCreature->DoSomeShit(); // DoSomeShit() not called == - == Remove some not used variables. Some clean. TODO: Should search/fix these in zones scripts. --HG-- branch : trunk
Diffstat (limited to 'src/game/MapManager.cpp')
0 files changed, 0 insertions, 0 deletions