From: Anders R. <ma...@us...> - 2007-02-28 17:00:26
|
Update of /cvsroot/planeshift/planeshift/src/npcclient In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32600/src/npcclient Modified Files: networkmgr.cpp npc.cpp npc.h npcbehave.cpp npcclient.cpp tribe.cpp Log Message: - Make sure that the entity pointer is cleared from the NPC when receiving remove object in npc client. - Renamed to use PID and EID where player IDs and entity IDs are used this to make sure we don't mix them up. - Updated prints to use "EID: %u" and "PID: %u" to print EIDs and PIDs. This to make it easy to search logs for happenings on particulare entites when debuging. Index: networkmgr.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/npcclient/networkmgr.cpp,v retrieving revision 1.128 retrieving revision 1.129 diff -C2 -d -r1.128 -r1.129 *** networkmgr.cpp 23 Feb 2007 21:06:04 -0000 1.128 --- networkmgr.cpp 28 Feb 2007 17:00:23 -0000 1.129 *************** *** 224,228 **** --- 224,230 ---- if(mesg.playerID != 0 && !obj) + { obj = npcclient->FindCharacterID(mesg.playerID); + } if(obj) *************** *** 230,234 **** // We have a player id, entity id mismatch and we already know this entity // so we can only assume a RemoveObject message misorder and we will delete the existing one and recreate. ! CPrintf(CON_DEBUG, "Deleting because we already know gemNPCActor: %s (%s), EID: %u PID: %u as EID: %u PID: %u.\n", mesg.name.GetData(), obj->GetName().GetData(), mesg.entityid, mesg.playerID, obj->GetEntity()->GetID(), obj->GetPlayerID() ); npcclient->Remove(obj->GetEntity()->GetID()); } --- 232,239 ---- // We have a player id, entity id mismatch and we already know this entity // so we can only assume a RemoveObject message misorder and we will delete the existing one and recreate. ! CPrintf(CON_DEBUG, "Deleting because we already know gemNPCActor: " ! "%s (%s), EID: %u PID: %u as EID: %u PID: %u.\n", ! mesg.name.GetData(), obj->GetName().GetData(), mesg.entityid, mesg.playerID, ! obj->GetEntity()->GetID(), obj->GetPlayerID() ); npcclient->Remove(obj->GetEntity()->GetID()); } Index: npc.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/npcclient/npc.cpp,v retrieving revision 1.86 retrieving revision 1.87 diff -C2 -d -r1.86 -r1.87 *** npc.cpp 24 Feb 2007 17:38:31 -0000 1.86 --- npc.cpp 28 Feb 2007 17:00:23 -0000 1.87 *************** *** 50,54 **** { brain=NULL; ! id=0; last_update=0; entity=NULL; --- 50,54 ---- { brain=NULL; ! pid=0; last_update=0; entity=NULL; *************** *** 79,84 **** { name = row["name"]; ! id = row.GetInt("char_id"); ! if ( id == 0 ) { Error1("NPC has no id attribute. Error in XML"); --- 79,84 ---- { name = row["name"]; ! pid = row.GetInt("char_id"); ! if ( pid == 0 ) { Error1("NPC has no id attribute. Error in XML"); *************** *** 237,242 **** void NPC::DumpBehaviorList() { ! CPrintf(CON_CMDOUTPUT, "\nBehaviors for %s (%d)\n---------------------------------------------\n", ! name.GetData(),id ); brain->DumpBehaviorList(this); --- 237,242 ---- void NPC::DumpBehaviorList() { ! CPrintf(CON_CMDOUTPUT, "\nBehaviors for %s (PID: %u)\n---------------------------------------------\n", ! name.GetData(),pid ); brain->DumpBehaviorList(this); *************** *** 245,250 **** void NPC::DumpHateList() { ! CPrintf(CON_CMDOUTPUT, "\nHate list for %s (%d)\n---------------------------------------------\n", ! name.GetData(),id ); hatelist.DumpHateList(); --- 245,250 ---- void NPC::DumpHateList() { ! CPrintf(CON_CMDOUTPUT, "\nHate list for %s (PID: %u)\n---------------------------------------------\n", ! name.GetData(),pid ); hatelist.DumpHateList(); *************** *** 352,356 **** va_end(args); ! CPrintf(CON_CMDOUTPUT, "%s (%d)> %s\n",GetName().GetDataSafe(),id,str); } --- 352,356 ---- va_end(args); ! CPrintf(CON_CMDOUTPUT, "%s (%u)> %s\n",GetName().GetDataSafe(),pid,str); } *************** *** 367,371 **** va_end(args); ! CPrintf(CON_CMDOUTPUT, "%s (%d)> %s\n",GetName().GetDataSafe(),id,str); } --- 367,371 ---- va_end(args); ! CPrintf(CON_CMDOUTPUT, "%s (%u)> %s\n",GetName().GetDataSafe(),pid,str); } *************** *** 476,480 **** if(vel.y < -50) { ! CPrintf(CON_ERROR,"Got bad starting location %f %f %f, killing %s (%i).\n", pos.x,pos.y,pos.z,name.GetData(),id); SetAlive(false); } --- 476,480 ---- if(vel.y < -50) { ! CPrintf(CON_ERROR,"Got bad starting location %f %f %f, killing %s (PID: %u).\n", pos.x,pos.y,pos.z,name.GetData(),pid); SetAlive(false); } Index: npc.h =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/npcclient/npc.h,v retrieving revision 1.63 retrieving revision 1.64 diff -C2 -d -r1.63 -r1.64 *** npc.h 23 Feb 2007 21:06:04 -0000 1.63 --- npc.h 28 Feb 2007 17:00:23 -0000 1.64 *************** *** 65,69 **** NPCType *brain; csString type; ! int id; PS_ID oldID; csString name; --- 65,69 ---- NPCType *brain; csString type; ! unsigned int pid; PS_ID oldID; csString name; *************** *** 99,103 **** ~NPC(); ! int GetID() { return id; } iCelEntity *GetEntity() { return entity; } iPcLinearMovement *GetLinMove() { return linmove; } --- 99,103 ---- ~NPC(); ! unsigned int GetPID() { return pid; } iCelEntity *GetEntity() { return entity; } iPcLinearMovement *GetLinMove() { return linmove; } Index: npcbehave.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/npcclient/npcbehave.cpp,v retrieving revision 1.163 retrieving revision 1.164 diff -C2 -d -r1.163 -r1.164 *** npcbehave.cpp 24 Feb 2007 17:38:31 -0000 1.163 --- npcbehave.cpp 28 Feb 2007 17:00:23 -0000 1.164 *************** *** 2431,2435 **** csVector3 dest; csString name; ! iCelEntity *entity; target_id = (uint32_t)~0; --- 2431,2435 ---- csVector3 dest; csString name; ! iCelEntity *entity = NULL; target_id = (uint32_t)~0; *************** *** 2470,2474 **** psGameObject::GetPosition(entity, targetPos,targetRot,targetSector); ! CPrintf(CON_ERROR,"npc %i chasing enemy %i at %f %f %f\n",npc->GetID(), entity->GetID(), targetPos.x,targetPos.y,targetPos.z); // We need to work in the target sector space --- 2470,2474 ---- psGameObject::GetPosition(entity, targetPos,targetRot,targetSector); ! CPrintf(CON_ERROR,"npc PID: %u chasing enemy EID: %u at %f %f %f\n",npc->GetPID(), entity->GetID(), targetPos.x,targetPos.y,targetPos.z); // We need to work in the target sector space *************** *** 2498,2502 **** { npc->Printf("No one found to chase!"); ! return true; } } --- 2498,2502 ---- { npc->Printf("No one found to chase!"); ! return true; // This operation is complete } } *************** *** 2602,2606 **** if((fabs(myPos.x)> 1000 || fabs(myNewPos.x)> 1000) || (fabs(myPos.y)>1000 || fabs(myNewPos.y)>1000) || (fabs(myPos.z)>1000 || fabs(myNewPos.z)>1000)) { ! npc->Printf("Moved from %f %f %f to %f %f %f, timedelta is %f, chase error!\n",npc->GetID(), npc->GetName().GetData(), myPos.x,myPos.y,myPos.z, myNewPos.x,myNewPos.y,myNewPos.z, timedelta); } --- 2602,2606 ---- if((fabs(myPos.x)> 1000 || fabs(myNewPos.x)> 1000) || (fabs(myPos.y)>1000 || fabs(myNewPos.y)>1000) || (fabs(myPos.z)>1000 || fabs(myNewPos.z)>1000)) { ! npc->Printf("Moved from %f %f %f to %f %f %f, timedelta is %f, chase error!\n", myPos.x,myPos.y,myPos.z, myNewPos.x,myNewPos.y,myNewPos.z, timedelta); } *************** *** 2610,2614 **** Perception collision("collision"); npc->TriggerEvent(&collision,eventmgr); ! npc->Printf("Collided! Moving from %f %f %f to %f %f %f, timedelta is %f!\n",npc->GetID(), npc->GetName().GetData(), myPos.x,myPos.y,myPos.z, myNewPos.x,myNewPos.y,myNewPos.z, timedelta); } } --- 2610,2614 ---- Perception collision("collision"); npc->TriggerEvent(&collision,eventmgr); ! npc->Printf("Collided! Moving from %f %f %f to %f %f %f, timedelta is %f!\n", myPos.x,myPos.y,myPos.z, myNewPos.x,myNewPos.y,myNewPos.z, timedelta); } } *************** *** 2926,2930 **** // Todo: Add a random delta within radius to the where value. ! npcclient->GetNetworkMgr()->QueueResurrectCommand(where,rot,sector->QueryObject()->GetName(),npc->GetID()); return true; --- 2926,2930 ---- // Todo: Add a random delta within radius to the where value. ! npcclient->GetNetworkMgr()->QueueResurrectCommand(where,rot,sector->QueryObject()->GetName(),npc->GetPID()); return true; Index: npcclient.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/npcclient/npcclient.cpp,v retrieving revision 1.131 retrieving revision 1.132 diff -C2 -d -r1.131 -r1.132 *** npcclient.cpp 25 Feb 2007 17:59:33 -0000 1.131 --- npcclient.cpp 28 Feb 2007 17:00:23 -0000 1.132 *************** *** 370,380 **** } ! void psNPCClient::Remove ( unsigned id ) { ! gemNPCObject * obj = FindEntityID( id ); if (obj == NULL) { ! CPrintf(CON_DEBUG, "NPCObject %d cannot be removed - not found\n", id); return; } --- 370,380 ---- } ! void psNPCClient::Remove ( unsigned eid ) { ! gemNPCObject * obj = FindEntityID( eid ); if (obj == NULL) { ! CPrintf(CON_DEBUG, "NPCObject EID: %u cannot be removed - not found\n", eid); return; } *************** *** 383,390 **** for (size_t x=0; x<npcs.GetSize(); x++) { ! npcs[x]->RemoveFromHateList(id); } ! npc_entities.DeleteAll( id ); objects.Delete( obj ); delete obj; --- 383,395 ---- for (size_t x=0; x<npcs.GetSize(); x++) { ! npcs[x]->RemoveFromHateList(eid); ! if (npcs[x]->GetEntity() && npcs[x]->GetEntity()->GetID() == eid) ! { ! npcs[x]->SetEntity(NULL); ! npcs[x]->SetAlive(false); ! } } ! npc_entities.DeleteAll( eid ); objects.Delete( obj ); delete obj; *************** *** 408,412 **** --- 413,419 ---- { if (objects[i]->GetPlayerID() == char_id) + { return objects[i]; + } } return NULL; *************** *** 929,951 **** if ( !npc ) { ! CPrintf(CON_NOTIFY,"NPC %s not found based on playerid %d. Trying by name\n", ! actor->GetName().GetData(), actor->GetPlayerID()); ! ! csString templateName; ! templateName.Append( "FAMILIAR:" ); ! templateName.Append( actor->GetRace() ); ! ! npc = FindNPC( templateName.GetData() ); ! ! if (!npc) ! { ! // Try to mach on name ! npc = FindNPC( actor->GetName() ); ! } ! } ! ! if ( !npc ) ! { ! CPrintf(CON_NOTIFY,"NPC %s (ID %d) was not found in scripted npcs for this npcclient.\n", actor->GetName().GetData(), actor->GetPlayerID() ); return; --- 936,940 ---- if ( !npc ) { ! CPrintf(CON_NOTIFY,"NPC %s (PID: %u) was not found in scripted npcs for this npcclient.\n", actor->GetName().GetData(), actor->GetPlayerID() ); return; *************** *** 953,957 **** if(npc->GetEntity() != NULL) { ! CPrintf(CON_NOTIFY,"NPC %s (ID %d) (eid %d) is already assigned eid %d name %s.\n", actor->GetName().GetData(), actor->GetPlayerID(), actor->GetEntity()->GetID(), npc->GetEntity()->GetID(), npc->GetName().GetData() ); --- 942,946 ---- if(npc->GetEntity() != NULL) { ! CPrintf(CON_NOTIFY,"NPC '%s' (PID: %u) (EID: %u) is already assigned EID: %u named '%s'.\n", actor->GetName().GetData(), actor->GetPlayerID(), actor->GetEntity()->GetID(), npc->GetEntity()->GetID(), npc->GetName().GetData() ); *************** *** 970,974 **** npc_entities.Put(actor->GetEntity()->GetID() ,actor->GetEntity() ); ! npc->Printf("We are now managing NPC: %s(%d) EID %u.\n", actor->GetName().GetData(), actor->GetPlayerID(), actor->GetEntity()->GetID()); --- 959,963 ---- npc_entities.Put(actor->GetEntity()->GetID() ,actor->GetEntity() ); ! npc->Printf("We are now managing NPC: %s(PID: %u) EID: %u.\n", actor->GetName().GetData(), actor->GetPlayerID(), actor->GetEntity()->GetID()); *************** *** 986,990 **** for (size_t x=0; x<npcs.GetSize(); x++) { ! if (npcs[x]->GetID() == character_id) return npcs[x]; } --- 975,979 ---- for (size_t x=0; x<npcs.GetSize(); x++) { ! if (npcs[x]->GetPID() == character_id) return npcs[x]; } *************** *** 1098,1102 **** else { ! CPrintf(CON_DEBUG, "Entity %d not found!\n",id); } } --- 1087,1091 ---- else { ! CPrintf(CON_DEBUG, "Entity EID: %u not found!\n",id); } } *************** *** 1564,1569 **** if (!pattern || strstr(npcs[i]->GetName().GetData(),pattern)) { ! CPrintf(CON_CMDOUTPUT, "%-7d %-5d %-30s %-6s %-6s %-20s %-15s %4d %-20s %-20s %-3s\n" , ! npcs[i]->GetID(), (npcs[i]->GetEntity()?npcs[i]->GetEntity()->GetID():0), npcs[i]->GetName().GetDataSafe(), --- 1553,1558 ---- if (!pattern || strstr(npcs[i]->GetName().GetData(),pattern)) { ! CPrintf(CON_CMDOUTPUT, "%-7u %-5d %-30s %-6s %-6s %-20s %-15s %4d %-20s %-20s %-3s\n" , ! npcs[i]->GetPID(), (npcs[i]->GetEntity()?npcs[i]->GetEntity()->GetID():0), npcs[i]->GetName().GetDataSafe(), *************** *** 1594,1598 **** for (size_t i=0; i<npcs.GetSize(); i++) { ! if (npcs[i]->GetID() == id) { DumpNPC(npcs[i]); --- 1583,1587 ---- for (size_t i=0; i<npcs.GetSize(); i++) { ! if (npcs[i]->GetPID() == id) { DumpNPC(npcs[i]); *************** *** 1679,1684 **** { NPC * npc = tribes[i]->GetMember(j); ! CPrintf(CON_CMDOUTPUT, "%6d %6d %-30s %-6s %-6s %-15s %-15s %-20s %-20s\n" , ! npc->GetID(), (npc->GetEntity()?npc->GetEntity()->GetID():0), npc->GetName().GetDataSafe(), --- 1668,1673 ---- { NPC * npc = tribes[i]->GetMember(j); ! CPrintf(CON_CMDOUTPUT, "%6u %6d %-30s %-6s %-6s %-15s %-15s %-20s %-20s\n" , ! npc->GetPID(), (npc->GetEntity()?npc->GetEntity()->GetID():0), npc->GetName().GetDataSafe(), *************** *** 1708,1712 **** if (memory->npc) { ! name.Format("%s(%d)",memory->npc->GetName().GetDataSafe(),memory->npc->GetID()); } CPrintf(CON_CMDOUTPUT,"%-20s %7.1f %7.1f %7.1f %7.1f %-20s %-20s\n", --- 1697,1701 ---- if (memory->npc) { ! name.Format("%s(%u)",memory->npc->GetName().GetDataSafe(),memory->npc->GetPID()); } CPrintf(CON_CMDOUTPUT,"%-20s %7.1f %7.1f %7.1f %7.1f %-20s %-20s\n", Index: tribe.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/npcclient/tribe.cpp,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** tribe.cpp 9 Feb 2007 21:50:28 -0000 1.24 --- tribe.cpp 28 Feb 2007 17:00:23 -0000 1.25 *************** *** 73,77 **** for (size_t i=0; i < members_id.GetSize(); i++) { ! if (npc->GetID() == members_id[i]) { AttachMember(npc); --- 73,77 ---- for (size_t i=0; i < members_id.GetSize(); i++) { ! if (npc->GetPID() == members_id[i]) { AttachMember(npc); *************** *** 82,86 **** { if (npc->GetName() == members[i]->GetName() && ! npc->GetID() != members[i]->GetID()) { AttachMember(npc); --- 82,86 ---- { if (npc->GetName() == members[i]->GetName() && ! npc->GetPID() != members[i]->GetPID()) { AttachMember(npc); *************** *** 88,93 **** // Add to members list in db db->Command("INSERT INTO tribe_members (tribe_id,member_id) " ! "VALUES (%d,%d)",GetID(),npc->GetID()); ! members_id.Push(npc->GetID()); return true; } --- 88,93 ---- // Add to members list in db db->Command("INSERT INTO tribe_members (tribe_id,member_id) " ! "VALUES (%u,%u)",GetID(),npc->GetPID()); ! members_id.Push(npc->GetPID()); return true; } *************** *** 102,106 **** for (size_t i=0; i < members.GetSize(); i++) { ! if (npc->GetID() == members[i]->GetID()) { return true; --- 102,106 ---- for (size_t i=0; i < members.GetSize(); i++) { ! if (npc->GetPID() == members[i]->GetPID()) { return true; |