From 3eb0ad0c8602a068cbb0e69d58b2365b26280ff7 Mon Sep 17 00:00:00 2001 From: goaaats Date: Thu, 1 Feb 2018 14:50:51 +0100 Subject: [PATCH] Fix for weather crash --- src/common/Exd/ExdDataGenerated.cpp | 7 ++++++- src/common/Exd/ExdDataGenerated.h | 4 +++- src/servers/sapphire_zone/Zone/Zone.cpp | 8 +++++--- src/tools/exd_struct_gen/ex.json | 14 +++++++++++++- 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/common/Exd/ExdDataGenerated.cpp b/src/common/Exd/ExdDataGenerated.cpp index 84904506..9c401e72 100644 --- a/src/common/Exd/ExdDataGenerated.cpp +++ b/src/common/Exd/ExdDataGenerated.cpp @@ -2378,10 +2378,11 @@ id = exdData->getField< std::string >( row, 5 ); sizeFactor = exdData->getField< uint16_t >( row, 6 ); offsetX = exdData->getField< int16_t >( row, 7 ); - discoveryIndex = exdData->getField< int16_t >( row, 8 ); + offsetY = exdData->getField< int16_t >( row, 8 ); placeNameRegion = exdData->getField< uint16_t >( row, 9 ); placeName = exdData->getField< uint16_t >( row, 10 ); placeNameSub = exdData->getField< uint16_t >( row, 11 ); + discoveryIndex = exdData->getField< int16_t >( row, 12 ); territoryType = exdData->getField< uint16_t >( row, 14 ); discoveryArrayByte = exdData->getField< bool >( row, 15 ); } @@ -3711,6 +3712,10 @@ defaultTalkNPCWin = exdData->getField< uint32_t >( row, 22 ); defaultTalkDraw = exdData->getField< uint32_t >( row, 23 ); defaultTalkPCWin = exdData->getField< uint32_t >( row, 24 ); + itemPossibleReward.push_back( exdData->getField< uint32_t >( row, 26 ) ); + itemPossibleReward.push_back( exdData->getField< uint32_t >( row, 27 ) ); + itemPossibleReward.push_back( exdData->getField< uint32_t >( row, 28 ) ); + itemPossibleReward.push_back( exdData->getField< uint32_t >( row, 29 ) ); } Core::Data::TripleTriadCard::TripleTriadCard( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) diff --git a/src/common/Exd/ExdDataGenerated.h b/src/common/Exd/ExdDataGenerated.h index 2192626e..f86c73c7 100644 --- a/src/common/Exd/ExdDataGenerated.h +++ b/src/common/Exd/ExdDataGenerated.h @@ -2424,10 +2424,11 @@ struct Map std::string id; uint16_t sizeFactor; int16_t offsetX; - int16_t discoveryIndex; + int16_t offsetY; uint16_t placeNameRegion; uint16_t placeName; uint16_t placeNameSub; + int16_t discoveryIndex; uint16_t territoryType; bool discoveryArrayByte; @@ -3215,6 +3216,7 @@ struct TripleTriad uint32_t defaultTalkNPCWin; uint32_t defaultTalkDraw; uint32_t defaultTalkPCWin; + std::vector< uint32_t > itemPossibleReward; TripleTriad( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; diff --git a/src/servers/sapphire_zone/Zone/Zone.cpp b/src/servers/sapphire_zone/Zone/Zone.cpp index 3f0338d7..92642861 100644 --- a/src/servers/sapphire_zone/Zone/Zone.cpp +++ b/src/servers/sapphire_zone/Zone/Zone.cpp @@ -225,8 +225,10 @@ uint8_t Zone::getNextWeather() auto rate = static_cast< uint8_t >( step2 % 0x64 ); - auto weatherRate = g_exdDataGen.getWeatherRate( zoneInfo->weatherRate ); - auto weatherRateFields = g_exdDataGen.m_WeatherRateDat.get_row( zoneInfo->weatherRate ); + uint8_t weatherRateNum = zoneInfo->weatherRate > g_exdDataGen.getWeatherRateIdList().size() ? 0 : zoneInfo->weatherRate; + + auto weatherRate = g_exdDataGen.getWeatherRate( weatherRateNum ); + auto weatherRateFields = g_exdDataGen.m_WeatherRateDat.get_row( weatherRateNum ); std::map< uint8_t, int32_t> weatherRateMap; @@ -238,7 +240,7 @@ uint8_t Zone::getNextWeather() if( weatherId == 0 ) break; - sumPc += boost::get( weatherRateFields[i + 1] ); + sumPc += boost::get( weatherRateFields[i + 1] ); weatherRateMap[sumPc] = weatherId; i += 2; diff --git a/src/tools/exd_struct_gen/ex.json b/src/tools/exd_struct_gen/ex.json index 5b4ab455..51b01c68 100644 --- a/src/tools/exd_struct_gen/ex.json +++ b/src/tools/exd_struct_gen/ex.json @@ -6253,7 +6253,7 @@ } }, { - "index": 8, + "index": 12, "name": "DiscoveryIndex" }, { @@ -9114,6 +9114,18 @@ "type": "link", "target": "DefaultTalk" } + }, + { + "index": 26, + "type": "repeat", + "count": 4, + "definition": { + "name": "Item{PossibleReward}", + "converter": { + "type": "link", + "target": "Item" + } + } } ] },