min std multimap virker, men ikke som den skal.
vel ikke nogen der kan sige hvad der er galt her ?// holds users known objects
struct knownobjects
{
unsigned int socketid;
unsigned long objectid;
};
// all our objects
multimap<int, struct knownobjects> ko;
// adds known object
void addknownobject(unsigned int cp, unsigned long objid)
{
Log2File(TRUE, "ADD KNOWN OBJECT\n");
struct knownobjects test;
test.socketid = cp;
test.objectid = objid;
pair<int ,struct knownobjects> p(cp,test);
ko.insert(p);
};
// checks if it is known to the user already
void checkknownobject(DWORD ptr, unsigned long objid, char * charname)
{
CConnection* c = reinterpret_cast <CConnection*> (ptr);
char cip[15];
unsigned int cp = 0;
c->PeerInfo (&cip[0], 15, &cp);
Log2File(TRUE, "Checking : %s on IP %s:%i, Object ID: %d\n", charname, cip, cp, objid);
bool found;
if (ko.empty() == true)
{
// have to put something in at first time run, since its empty. no need to do any checking
addknownobject(cp, objid);
senduserobjnewpack(charname, ptr);
}
else
{
multimap<int, struct knownobjects>::iterator it;
for (it = ko.begin(); it != ko.end(); ++it)
{
unsigned int id = (*it).first;
unsigned long thisobjid = (*it).second.objectid;
if (cp == id && objid == thisobjid)
{
// didnt find object need to add it.
found = true;
}
else
{
// found a object, so no need to add one.
found = false;
}
if(found == true)
{
Log2File(TRUE, "No need to add anything\n");
// object is already known
gsmm.sendmovepacket(charname, ptr);
}
if(found == false)
{
Log2File(TRUE, "Adding ID\n");
// object is not known, we add it.
addknownobject(cp, objid);
senduserobjnewpack(charname, ptr);
}
}
}
return;
}
----
det den skulle gøre er tjekke om cp har object kendt med objid, hvis den har skal den ikke adde den, ellers skal den adde den.
f.eks socketid (2201) kender objectid (12030111) så ingen grund til at ligge den ind igen
men det virker bare ikke, den gemmer den flere gange nogle gange, som i kan se her fra min log fil:
[02:43:35] Sending Move packet to socket 3221 object id 20378780
[02:43:35] No need to add anything
[02:43:35] Admin is moving - and not added.
[02:43:35] Sending Move packet to socket 3221 object id 20378780
[02:43:35] No need to add anything
[02:43:35] Admin is moving - and not added.
[02:43:35] Sending Move packet to socket 3221 object id 20378780
[02:43:35] No need to add anything
[02:43:35] Admin is moving - and not added.
[02:43:35] Sending Move packet to socket 3221 object id 20378780
[02:43:35] No need to add anything
[02:43:35] Admin is moving - and not added.
[02:43:35] Sending Move packet to socket 3221 object id 20378780
[02:43:35] Adding ID : 3221, Object ID: 20378780
[02:43:35] ADD KNOWN OBJECT
[02:43:35] Adding ID : 3221, Object ID: 20378780
[02:43:35] ADD KNOWN OBJECT
[02:43:35] Adding ID : 3221, Object ID: 20378780
[02:43:35] ADD KNOWN OBJECT
[02:43:35] Adding ID : 3221, Object ID: 20378780
[02:43:35] ADD KNOWN OBJECT
[02:43:35] Adding ID : 3221, Object ID: 20378780
[02:43:35] ADD KNOWN OBJECT
[02:43:35] Adding ID : 3221, Object ID: 20378780
[02:43:35] ADD KNOWN OBJECT
[02:43:35] Adding ID : 3221, Object ID: 20378780
som i kan se er det samme id + object id, så der er noget galt et eller andet sted...
nogen ide'er ?