void Object::addInternalAttributeIncDB(BString key,std::string value) { if(hasInternalAttribute(key)) { setInternalAttributeIncDB(key,value); return; } mInternalAttributeMap.insert(std::make_pair(key.getCrc(),value)); uint32 attributeID = gWorldManager->getAttributeId(key.getCrc()); if(!attributeID) { DLOG(info) << "Object::addAttribute DB: no such attribute in the attribute table : " << key.getAnsi(); return; } int8 sql[512],*sqlPointer,restStr[128]; // int8 sql[1024] sprintf(sql,"INSERT INTO %s.item_attributes VALUES(%" PRIu64 ",%u,'",gWorldManager->getDatabase()->galaxy() ,this->getId(), attributeID); sqlPointer = sql + strlen(sql); sqlPointer += gWorldManager->getDatabase()->escapeString(sqlPointer, value.c_str(), value.length()); sprintf(restStr,"',%u,0)",static_cast<uint32>(this->mInternalAttributeMap.size())); strcat(sql,restStr); gWorldManager->getDatabase()->executeSqlAsync(0, 0, sql); }
void Object::setInternalAttributeIncDB(BString key,std::string value) { if(!hasInternalAttribute(key)) { addInternalAttributeIncDB(key,value); } AttributeMap::iterator it = mInternalAttributeMap.find(key.getCrc()); if(it == mInternalAttributeMap.end()) { DLOG(INFO) << "Object::setAttribute: could not find " << key.getAnsi(); return; } (*it).second = value; uint32 attributeID = gWorldManager->getAttributeId(key.getCrc()); if(!attributeID) { DLOG(INFO) << "Object::addAttribute DB: no such attribute in the attribute table :" << key.getAnsi(); return; } int8 sql[512],*sqlPointer,restStr[128]; // int8 sql[1024] sprintf(sql,"UPDATE item_attributes SET value='"); sqlPointer = sql + strlen(sql); sqlPointer += gWorldManager->getDatabase()->escapeString(sqlPointer,value.c_str(),value.length()); sprintf(restStr,"'WHERE item_id=%"PRIu64" AND attribute_id=%u",this->getId(),attributeID); strcat(sql,restStr); //sprintf(sql,"UPDATE item_attributes SET value='%s' WHERE item_id=%"PRIu64" AND attribute_id=%u",value,this->getId(),attributeID); gWorldManager->getDatabase()->executeSqlAsync(0,0,sql); }