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) {
// Currently we cannot compare because plugin lists can be loaded in different order
//return c->cell.sRecordId == cellData.sRecordId;
return c->cell.isExterior() ? (c->cell.mData.mX == cellData.mData.mX && c->cell.mData.mY == cellData.mData.mY) :
(c->cell.mName == cellData.mName);
if (c->cell.isExterior() && cellData.isExterior())
{
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;

@ -123,7 +123,7 @@ namespace mwmp
else
{
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);
for (const auto &item : inventoryChanges.items)
{
try
{
MWWorld::Ptr itemPtr = *ptrStore.add(item.refId, item.count, ptrPlayer);
if (item.charge != -1)
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()
@ -651,34 +658,39 @@ void LocalPlayer::addSpells()
MWMechanics::Spells &ptrSpells = ptrPlayer.getClass().getCreatureStats(ptrPlayer).getSpells();
for (const auto &spell : spellbookChanges.spells)
{
if(spell.mId.find("$dynamic") != string::npos)
{
//custom spell
MWBase::Environment::get().getWorld()->createRecord(spell);
ptrSpells.add(&spell);
}else{
// Only add spells that are ensured to exist
if (MWBase::Environment::get().getWorld()->getStore().get<ESM::Spell>().search(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()
{
for (const auto &journalItem : journalChanges.journalItems)
{
MWWorld::Ptr ptrFound;
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)
ptrFound = getPlayerPtr();
}
try
{
if (journalItem.type == JournalItem::ENTRY)
MWBase::Environment::get().getJournal()->addEntry(journalItem.quest, journalItem.index, ptrFound);
}
else
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()
@ -903,12 +915,20 @@ void LocalPlayer::setEquipment()
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];
try
{
auto addIter = ptrInventory.ContainerStore::add(equipped.refId.c_str(), equipped.count, 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
ptrInventory.equip(slot, it, ptrPlayer);
}

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

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

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

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

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

@ -526,6 +526,10 @@ namespace MWWorld
*/
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;
searchVisitor.mRefNumIndexToFind = refNumIndex;
searchVisitor.mMpNumToFind = mpNum;

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

@ -54,7 +54,7 @@ void Utils::timestamp()
}
// 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
int totaldotz=40;
@ -79,7 +79,7 @@ int Utils::progress_func(double TotalToDownload, double NowDownloaded)
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;
}
@ -91,7 +91,7 @@ std::string Utils::toString(int num)
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 replace_len = strlen(replace);
@ -108,7 +108,7 @@ string Utils::str_replace(const string& source, const char* find, const char* re
return dest;
}
string& Utils::RemoveExtension(string& file)
string& Utils::removeExtension(string& file)
{
size_t pos = file.find_last_of('.');
@ -118,7 +118,7 @@ string& Utils::RemoveExtension(string& file)
return file;
}
long int Utils::FileLength(const char* file)
long int Utils::getFileLength(const char* file)
{
FILE* _file = fopen(file, "rb");
@ -132,7 +132,7 @@ long int Utils::FileLength(const char* file)
return size;
}
unsigned int ::Utils::crc32checksum(const std::string &file)
unsigned int ::Utils::crc32Checksum(const std::string &file)
{
boost::crc_32_type crc32;
boost::filesystem::ifstream ifs(file, std::ios_base::binary);

@ -22,19 +22,19 @@ namespace Utils
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 &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);

Loading…
Cancel
Save