Merge pull request #281 from TES3MP/0.6.0

Add hotfix commits for 0.6.0 up to 31 Aug 2017
pull/283/head
David Cernat 7 years ago committed by GitHub
commit e81dafb28a

@ -86,8 +86,15 @@ Cell *CellController::addCell(ESM::Cell cellData)
auto it = find_if(cells.begin(), cells.end(), [cellData](const Cell *c) { auto it = find_if(cells.begin(), cells.end(), [cellData](const Cell *c) {
// Currently we cannot compare because plugin lists can be loaded in different order // Currently we cannot compare because plugin lists can be loaded in different order
//return c->cell.sRecordId == cellData.sRecordId; //return c->cell.sRecordId == cellData.sRecordId;
return c->cell.isExterior() ? (c->cell.mData.mX == cellData.mData.mX && c->cell.mData.mY == cellData.mData.mY) : if (c->cell.isExterior() && cellData.isExterior())
(c->cell.mName == cellData.mName); {
if (c->cell.mData.mX == cellData.mData.mX && c->cell.mData.mY == cellData.mData.mY)
return true;
}
else if (c->cell.mName == cellData.mName)
return true;
return false;
}); });
Cell *cell; Cell *cell;

@ -123,7 +123,7 @@ namespace mwmp
else else
{ {
mHistory->addText(color + msg); mHistory->addText(color + msg);
LOG_MESSAGE_SIMPLE(Log::LOG_INFO, msg.c_str()); LOG_MESSAGE_SIMPLE(Log::LOG_INFO, "%s", msg.c_str());
} }
} }

@ -638,11 +638,18 @@ void LocalPlayer::addItems()
MWWorld::ContainerStore &ptrStore = ptrPlayer.getClass().getContainerStore(ptrPlayer); MWWorld::ContainerStore &ptrStore = ptrPlayer.getClass().getContainerStore(ptrPlayer);
for (const auto &item : inventoryChanges.items) for (const auto &item : inventoryChanges.items)
{
try
{ {
MWWorld::Ptr itemPtr = *ptrStore.add(item.refId, item.count, ptrPlayer); MWWorld::Ptr itemPtr = *ptrStore.add(item.refId, item.count, ptrPlayer);
if (item.charge != -1) if (item.charge != -1)
itemPtr.getCellRef().setCharge(item.charge); itemPtr.getCellRef().setCharge(item.charge);
} }
catch (std::exception&)
{
LOG_APPEND(Log::LOG_INFO, "- Ignored addition of invalid inventory item %s", item.refId.c_str());
}
}
} }
void LocalPlayer::addSpells() void LocalPlayer::addSpells()
@ -651,34 +658,39 @@ void LocalPlayer::addSpells()
MWMechanics::Spells &ptrSpells = ptrPlayer.getClass().getCreatureStats(ptrPlayer).getSpells(); MWMechanics::Spells &ptrSpells = ptrPlayer.getClass().getCreatureStats(ptrPlayer).getSpells();
for (const auto &spell : spellbookChanges.spells) for (const auto &spell : spellbookChanges.spells)
{ // Only add spells that are ensured to exist
if(spell.mId.find("$dynamic") != string::npos) if (MWBase::Environment::get().getWorld()->getStore().get<ESM::Spell>().search(spell.mId))
{
//custom spell
MWBase::Environment::get().getWorld()->createRecord(spell);
ptrSpells.add(&spell);
}else{
ptrSpells.add(spell.mId); ptrSpells.add(spell.mId);
} else
} LOG_APPEND(Log::LOG_INFO, "- Ignored addition of invalid spell %s", spell.mId.c_str());
} }
void LocalPlayer::addJournalItems() void LocalPlayer::addJournalItems()
{ {
for (const auto &journalItem : journalChanges.journalItems) for (const auto &journalItem : journalChanges.journalItems)
{ {
MWWorld::Ptr ptrFound;
if (journalItem.type == JournalItem::ENTRY) if (journalItem.type == JournalItem::ENTRY)
{ {
MWWorld::Ptr ptrFound = MWBase::Environment::get().getWorld()->searchPtr(journalItem.actorRefId, false); ptrFound = MWBase::Environment::get().getWorld()->searchPtr(journalItem.actorRefId, false);
if (!ptrFound) if (!ptrFound)
ptrFound = getPlayerPtr(); ptrFound = getPlayerPtr();
}
try
{
if (journalItem.type == JournalItem::ENTRY)
MWBase::Environment::get().getJournal()->addEntry(journalItem.quest, journalItem.index, ptrFound); MWBase::Environment::get().getJournal()->addEntry(journalItem.quest, journalItem.index, ptrFound);
}
else else
MWBase::Environment::get().getJournal()->setJournalIndex(journalItem.quest, journalItem.index); MWBase::Environment::get().getJournal()->setJournalIndex(journalItem.quest, journalItem.index);
} }
catch (std::exception&)
{
LOG_APPEND(Log::LOG_INFO, "- Ignored addition of invalid journal quest %s", journalItem.quest.c_str());
}
}
} }
void LocalPlayer::addTopics() void LocalPlayer::addTopics()
@ -903,12 +915,20 @@ void LocalPlayer::setEquipment()
return Misc::StringUtils::ciEqual(a.getCellRef().getRefId(), currentItem.refId); return Misc::StringUtils::ciEqual(a.getCellRef().getRefId(), currentItem.refId);
}); });
if (it == ptrInventory.end()) // if not exists add item if (it == ptrInventory.end()) // If the item is not in our inventory, add it
{ {
auto equipped = equipedItems[slot]; auto equipped = equipedItems[slot];
try
{
auto addIter = ptrInventory.ContainerStore::add(equipped.refId.c_str(), equipped.count, ptrPlayer); auto addIter = ptrInventory.ContainerStore::add(equipped.refId.c_str(), equipped.count, ptrPlayer);
ptrInventory.equip(slot, addIter, ptrPlayer); ptrInventory.equip(slot, addIter, ptrPlayer);
} }
catch (std::exception&)
{
LOG_APPEND(Log::LOG_INFO, "- Ignored addition of invalid equipment item %s", equipped.refId.c_str());
}
}
else else
ptrInventory.equip(slot, it, ptrPlayer); ptrInventory.equip(slot, it, ptrPlayer);
} }

@ -328,7 +328,7 @@ void Networking::preInit(std::vector<std::string> &content, Files::Collections &
if (col.doesExist(*it)) if (col.doesExist(*it))
{ {
PacketPreInit::HashList hashList; PacketPreInit::HashList hashList;
unsigned crc32 = Utils::crc32checksum(col.getPath(*it).string()); unsigned crc32 = Utils::crc32Checksum(col.getPath(*it).string());
hashList.push_back(crc32); hashList.push_back(crc32);
checksums.push_back(make_pair(*it, hashList)); checksums.push_back(make_pair(*it, hashList));

@ -22,6 +22,8 @@ namespace mwmp
{ {
if (isLocal()) if (isLocal())
{ {
LOG_MESSAGE_SIMPLE(Log::LOG_INFO, "Received ID_PLAYER_EQUIPMENT about LocalPlayer from server");
if (isRequest()) if (isRequest())
static_cast<LocalPlayer*>(player)->updateEquipment(true); static_cast<LocalPlayer*>(player)->updateEquipment(true);
else else

@ -21,6 +21,8 @@ namespace mwmp
{ {
if (!isLocal()) return; if (!isLocal()) return;
LOG_MESSAGE_SIMPLE(Log::LOG_INFO, "Received ID_PLAYER_INVENTORY about LocalPlayer from server");
if (isRequest()) if (isRequest())
static_cast<LocalPlayer*>(player)->updateInventory(true); static_cast<LocalPlayer*>(player)->updateInventory(true);
else else

@ -15,6 +15,8 @@ namespace mwmp
virtual void Do(PlayerPacket &packet, BasePlayer *player) virtual void Do(PlayerPacket &packet, BasePlayer *player)
{ {
LOG_MESSAGE_SIMPLE(Log::LOG_INFO, "Received ID_PLAYER_JOURNAL from server");
if (isRequest()) if (isRequest())
{ {
// Entire journal cannot currently be requested from players // Entire journal cannot currently be requested from players

@ -22,6 +22,8 @@ namespace mwmp
{ {
if (!isLocal()) return; if (!isLocal()) return;
LOG_MESSAGE_SIMPLE(Log::LOG_INFO, "Received ID_PLAYER_SPELLBOOK about LocalPlayer from server");
if (isRequest()) if (isRequest())
static_cast<LocalPlayer*>(player)->sendSpellbook(); static_cast<LocalPlayer*>(player)->sendSpellbook();
else else

@ -526,6 +526,10 @@ namespace MWWorld
*/ */
Ptr CellStore::searchExact (unsigned int refNumIndex, unsigned int mpNum) Ptr CellStore::searchExact (unsigned int refNumIndex, unsigned int mpNum)
{ {
// Ensure that all objects searched for have a valid reference number
if (refNumIndex == 0 && mpNum == 0)
return 0;
SearchExactVisitor<MWWorld::Ptr> searchVisitor; SearchExactVisitor<MWWorld::Ptr> searchVisitor;
searchVisitor.mRefNumIndexToFind = refNumIndex; searchVisitor.mRefNumIndexToFind = refNumIndex;
searchVisitor.mMpNumToFind = mpNum; searchVisitor.mMpNumToFind = mpNum;

@ -80,7 +80,7 @@ namespace mwmp
{ {
if (write) if (write)
{ {
RakNet::RakString rstr(str.c_str()); RakNet::RakString rstr("%s", str.c_str());
if (compress) if (compress)
rstr.SerializeCompressed(bs); rstr.SerializeCompressed(bs);
else else

@ -54,7 +54,7 @@ void Utils::timestamp()
} }
// http://stackoverflow.com/questions/1637587/c-libcurl-console-progress-bar // http://stackoverflow.com/questions/1637587/c-libcurl-console-progress-bar
int Utils::progress_func(double TotalToDownload, double NowDownloaded) int Utils::progressFunc(double TotalToDownload, double NowDownloaded)
{ {
// how wide you want the progress meter to be // how wide you want the progress meter to be
int totaldotz=40; int totaldotz=40;
@ -79,7 +79,7 @@ int Utils::progress_func(double TotalToDownload, double NowDownloaded)
return 1; return 1;
} }
bool Utils::DoubleCompare(double a, double b, double epsilon) bool Utils::compareDoubles(double a, double b, double epsilon)
{ {
return fabs(a - b) < epsilon; return fabs(a - b) < epsilon;
} }
@ -91,7 +91,7 @@ std::string Utils::toString(int num)
return stream.str(); return stream.str();
} }
string Utils::str_replace(const string& source, const char* find, const char* replace) string Utils::replaceString(const string& source, const char* find, const char* replace)
{ {
unsigned int find_len = strlen(find); unsigned int find_len = strlen(find);
unsigned int replace_len = strlen(replace); unsigned int replace_len = strlen(replace);
@ -108,7 +108,7 @@ string Utils::str_replace(const string& source, const char* find, const char* re
return dest; return dest;
} }
string& Utils::RemoveExtension(string& file) string& Utils::removeExtension(string& file)
{ {
size_t pos = file.find_last_of('.'); size_t pos = file.find_last_of('.');
@ -118,7 +118,7 @@ string& Utils::RemoveExtension(string& file)
return file; return file;
} }
long int Utils::FileLength(const char* file) long int Utils::getFileLength(const char* file)
{ {
FILE* _file = fopen(file, "rb"); FILE* _file = fopen(file, "rb");
@ -132,7 +132,7 @@ long int Utils::FileLength(const char* file)
return size; return size;
} }
unsigned int ::Utils::crc32checksum(const std::string &file) unsigned int ::Utils::crc32Checksum(const std::string &file)
{ {
boost::crc_32_type crc32; boost::crc_32_type crc32;
boost::filesystem::ifstream ifs(file, std::ios_base::binary); boost::filesystem::ifstream ifs(file, std::ios_base::binary);

@ -22,19 +22,19 @@ namespace Utils
void timestamp(); void timestamp();
int progress_func(double TotalToDownload, double NowDownloaded); int progressFunc(double TotalToDownload, double NowDownloaded);
bool DoubleCompare(double a, double b, double epsilon); bool compareDoubles(double a, double b, double epsilon);
std::string str_replace(const std::string &source, const char *find, const char *replace); std::string replaceString(const std::string &source, const char *find, const char *replace);
std::string toString(int num); std::string toString(int num);
std::string &RemoveExtension(std::string &file); std::string &removeExtension(std::string &file);
long int FileLength(const char *file); long int getFileLength(const char *file);
unsigned int crc32checksum(const std::string &file); unsigned int crc32Checksum(const std::string &file);
void printWithWidth(std::ostringstream &sstr, std::string str, size_t width); void printWithWidth(std::ostringstream &sstr, std::string str, size_t width);

Loading…
Cancel
Save