instead of the std::endl use the \n newline function and occasionally a std::endl
They are not exactly the same, std::endl flushes the cache as well, while \n does not.
Essentially, it makes little sense to flush the cache so many times.
For the rest, I don't see to many things you can improve.
"Is there anything else that could make my code more efficient?"
Yes:
1) Place member function definitions within a source file, and not within the class itself. This is because member functions declared and defined inside a class are implicitly declared in-line. In-lining can improve performance by increasing the number of CPU cache hits. However, excessive in-lining can cause thrashing, and can increase the number of CPU cache misses.
2) Declare parameters/variables/objects constant if you plan to only read from them.
3) Use iterators to transverse containers, rather than using indices. Here's an example:
attackPlayer() is a possible candidate, but the call to std::vector::push_back() in attachWeapon() might might be enough to convince the compiler not to in-line attachWeapon().