mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2024-12-22 21:43:35 +00:00
Merge branch 'main' into Frostburgh
This commit is contained in:
commit
263b019262
@ -2173,3 +2173,15 @@ void Entity::AddToGroup(const std::string& group) {
|
||||
m_Groups.push_back(group);
|
||||
}
|
||||
}
|
||||
|
||||
void Entity::RetroactiveVaultSize() {
|
||||
auto inventoryComponent = GetComponent<InventoryComponent>();
|
||||
if (!inventoryComponent) return;
|
||||
|
||||
auto itemsVault = inventoryComponent->GetInventory(eInventoryType::VAULT_ITEMS);
|
||||
auto modelVault = inventoryComponent->GetInventory(eInventoryType::VAULT_MODELS);
|
||||
|
||||
if (itemsVault->GetSize() == modelVault->GetSize()) return;
|
||||
|
||||
modelVault->SetSize(itemsVault->GetSize());
|
||||
}
|
||||
|
@ -220,7 +220,11 @@ public:
|
||||
/*
|
||||
* Utility
|
||||
*/
|
||||
|
||||
/**
|
||||
* Retroactively corrects the model vault size due to incorrect initialization in a previous patch.
|
||||
*
|
||||
*/
|
||||
void RetroactiveVaultSize();
|
||||
bool GetBoolean(const std::u16string& name) const;
|
||||
int32_t GetI32(const std::u16string& name) const;
|
||||
int64_t GetI64(const std::u16string& name) const;
|
||||
|
@ -291,7 +291,7 @@ void UserManager::CreateCharacter(const SystemAddress& sysAddr, Packet* packet)
|
||||
xml << "ls=\"0\" lzx=\"-626.5847\" lzy=\"613.3515\" lzz=\"-28.6374\" lzrx=\"0.0\" lzry=\"0.7015\" lzrz=\"0.0\" lzrw=\"0.7126\" ";
|
||||
xml << "stt=\"0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;\"></char>";
|
||||
xml << "<dest hm=\"4\" hc=\"4\" im=\"0\" ic=\"0\" am=\"0\" ac=\"0\" d=\"0\"/>";
|
||||
xml << "<inv><bag><b t=\"0\" m=\"20\"/><b t=\"1\" m=\"240\"/><b t=\"2\" m=\"240\"/><b t=\"3\" m=\"240\"/></bag><items><in t=\"0\">";
|
||||
xml << "<inv><bag><b t=\"0\" m=\"20\"/><b t=\"1\" m=\"40\"/><b t=\"2\" m=\"240\"/><b t=\"3\" m=\"240\"/><b t=\"14\" m=\"40\"/></bag><items><in t=\"0\">";
|
||||
std::string xmlSave1 = xml.str();
|
||||
|
||||
ObjectIDManager::Instance()->RequestPersistentID([=](uint32_t idforshirt) {
|
||||
|
@ -84,6 +84,7 @@ Inventory* InventoryComponent::GetInventory(const eInventoryType type)
|
||||
case eInventoryType::ITEMS:
|
||||
size = 20u;
|
||||
break;
|
||||
case eInventoryType::VAULT_MODELS:
|
||||
case eInventoryType::VAULT_ITEMS:
|
||||
size = 40u;
|
||||
break;
|
||||
|
@ -415,10 +415,13 @@ void RacingControlComponent::HandleMessageBoxResponse(Entity *player,
|
||||
// If solo racing is enabled OR if there are 3 players in the race, progress placement tasks.
|
||||
if(m_SoloRacing || m_LoadedPlayers > 2) {
|
||||
missionComponent->Progress(MissionTaskType::MISSION_TASK_TYPE_RACING, data->finished, (LWOOBJID)RacingTaskParam::RACING_TASK_PARAM_FINISH_WITH_PLACEMENT); // Finish in 1st place on a race
|
||||
missionComponent->Progress(MissionTaskType::MISSION_TASK_TYPE_RACING, data->finished, (LWOOBJID)RacingTaskParam::RACING_TASK_PARAM_FIRST_PLACE_MULTIPLE_TRACKS); // Finish in 1st place on multiple tracks.
|
||||
if(m_Finished != 1) return;
|
||||
if(data->finished == 1) {
|
||||
missionComponent->Progress(MissionTaskType::MISSION_TASK_TYPE_RACING, dZoneManager::Instance()->GetZone()->GetWorldID(), (LWOOBJID)RacingTaskParam::RACING_TASK_PARAM_FIRST_PLACE_MULTIPLE_TRACKS); // Finish in 1st place on multiple tracks.
|
||||
missionComponent->Progress(MissionTaskType::MISSION_TASK_TYPE_RACING, dZoneManager::Instance()->GetZone()->GetWorldID(), (LWOOBJID)RacingTaskParam::RACING_TASK_PARAM_WIN_RACE_IN_WORLD); // Finished first place in specific world.
|
||||
|
||||
}
|
||||
if (data->finished == m_LoadedPlayers) {
|
||||
missionComponent->Progress(MissionTaskType::MISSION_TASK_TYPE_RACING, dZoneManager::Instance()->GetZone()->GetWorldID(), (LWOOBJID)RacingTaskParam::RACING_TASK_PARAM_LAST_PLACE_FINISH); // Finished first place in specific world.
|
||||
}
|
||||
}
|
||||
} else if (id == "ACT_RACE_EXIT_THE_RACE?" || id == "Exit") {
|
||||
auto *vehicle = EntityManager::Instance()->GetEntity(data->vehicleID);
|
||||
|
@ -511,9 +511,11 @@ void Mission::YieldRewards() {
|
||||
}
|
||||
|
||||
if (info->reward_bankinventory > 0) {
|
||||
auto* inventory = inventoryComponent->GetInventory(VAULT_ITEMS);
|
||||
auto* inventory = inventoryComponent->GetInventory(eInventoryType::VAULT_ITEMS);
|
||||
auto modelInventory = inventoryComponent->GetInventory(eInventoryType::VAULT_MODELS);
|
||||
|
||||
inventory->SetSize(inventory->GetSize() + info->reward_bankinventory);
|
||||
modelInventory->SetSize(modelInventory->GetSize() + info->reward_bankinventory);
|
||||
}
|
||||
|
||||
if (info->reward_reputation > 0) {
|
||||
|
@ -183,8 +183,14 @@ bool MissionTask::InParameters(const uint32_t value) const
|
||||
|
||||
bool MissionTask::IsComplete() const
|
||||
{
|
||||
// Mission 668 has task uid 984 which is a bit mask. Its completion value is 3.
|
||||
if (info->uid == 984) {
|
||||
return progress >= 3;
|
||||
}
|
||||
else {
|
||||
return progress >= info->targetValue;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void MissionTask::Complete()
|
||||
@ -423,12 +429,23 @@ void MissionTask::Progress(int32_t value, LWOOBJID associate, const std::string&
|
||||
|
||||
if (parameters[0] != associate) break;
|
||||
|
||||
if (associate == 1 || associate == 15 || associate == 2 || associate == 3)
|
||||
if (associate == 1 || associate == 2 || associate == 3)
|
||||
{
|
||||
if (value > info->targetValue) break;
|
||||
|
||||
AddProgress(info->targetValue);
|
||||
}
|
||||
// task 15 is a bit mask!
|
||||
else if (associate == 15) {
|
||||
if (!InAllTargets(value)) break;
|
||||
|
||||
auto tempProgress = GetProgress();
|
||||
// If we won at Nimbus Station, set bit 0
|
||||
if (value == 1203) SetProgress(tempProgress |= 1 << 0);
|
||||
// If we won at Gnarled Forest, set bit 1
|
||||
else if (value == 1303) SetProgress(tempProgress |= 1 << 1);
|
||||
// If both bits are set, then the client sees the mission as complete.
|
||||
}
|
||||
else if (associate == 10)
|
||||
{
|
||||
// If the player did not crash during the race, progress this task by count.
|
||||
|
@ -1931,54 +1931,17 @@ void SlashCommandHandler::HandleChatCommand(const std::u16string& command, Entit
|
||||
}
|
||||
|
||||
bool SlashCommandHandler::CheckIfAccessibleZone(const unsigned int zoneID) {
|
||||
switch (zoneID) {
|
||||
case 98:
|
||||
case 1000:
|
||||
case 1001:
|
||||
|
||||
case 1100:
|
||||
case 1101:
|
||||
case 1150:
|
||||
case 1151:
|
||||
case 1152:
|
||||
|
||||
case 1200:
|
||||
case 1201:
|
||||
|
||||
case 1250:
|
||||
case 1251:
|
||||
case 1260:
|
||||
|
||||
case 1300:
|
||||
case 1350:
|
||||
case 1351:
|
||||
|
||||
case 1400:
|
||||
case 1401:
|
||||
case 1450:
|
||||
case 1451:
|
||||
|
||||
case 1600:
|
||||
case 1601:
|
||||
case 1602:
|
||||
case 1603:
|
||||
case 1604:
|
||||
|
||||
case 1700:
|
||||
case 1800:
|
||||
case 1900:
|
||||
case 2000:
|
||||
|
||||
case 58004:
|
||||
case 58005:
|
||||
case 58006:
|
||||
return true;
|
||||
|
||||
default:
|
||||
//We're gonna go ahead and presume we've got the db loaded already:
|
||||
CDZoneTableTable * zoneTable = CDClientManager::Instance()->GetTable<CDZoneTableTable>("ZoneTable");
|
||||
const CDZoneTable* zone = zoneTable->Query(zoneID);
|
||||
if (zone != nullptr) {
|
||||
std::string zonePath = "./res/maps/" + zone->zoneName;
|
||||
std::transform(zonePath.begin(), zonePath.end(), zonePath.begin(), ::tolower);
|
||||
std::ifstream f(zonePath.c_str());
|
||||
return f.good();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void SlashCommandHandler::SendAnnouncement(const std::string& title, const std::string& message) {
|
||||
|
@ -976,6 +976,8 @@ void HandlePacket(Packet* packet) {
|
||||
|
||||
c->SetRetroactiveFlags();
|
||||
|
||||
player->RetroactiveVaultSize();
|
||||
|
||||
player->GetCharacter()->SetTargetScene("");
|
||||
|
||||
// Fix the destroyable component
|
||||
|
Loading…
Reference in New Issue
Block a user