Added rate per refine in laphine upgrade
This commit is contained in:
parent
4a43856271
commit
b2a74e228e
@ -27,6 +27,10 @@
|
|||||||
# ResultRefine Absolute refine level after the upgrade. (Default: none)
|
# ResultRefine Absolute refine level after the upgrade. (Default: none)
|
||||||
# ResultRefineMinimum Minimum refine level after the upgrade. (Default: none)
|
# ResultRefineMinimum Minimum refine level after the upgrade. (Default: none)
|
||||||
# ResultRefineMaximum Maximum refine level after the upgrade. (Default: none)
|
# ResultRefineMaximum Maximum refine level after the upgrade. (Default: none)
|
||||||
|
# ResultRefineRate: Table of rate per refine level. (Default: none)
|
||||||
|
# By default the rate per level is 1. When defined the total rate is the sum of the rates between the minimum and maximum refinements.
|
||||||
|
# - Level Refine level.
|
||||||
|
# Rate Rate per level. (Default: 1. Max: 10000)
|
||||||
# MinimumRefine Minimum refine level of the required items. (Default: 0)
|
# MinimumRefine Minimum refine level of the required items. (Default: 0)
|
||||||
# MaximumRefine Maximum refine level of the required items. (Default: MAX_REFINE)
|
# MaximumRefine Maximum refine level of the required items. (Default: MAX_REFINE)
|
||||||
# RequiredRandomOptions How many random options have to be in the item? (Default: 0)
|
# RequiredRandomOptions How many random options have to be in the item? (Default: 0)
|
||||||
@ -37,4 +41,4 @@
|
|||||||
|
|
||||||
Header:
|
Header:
|
||||||
Type: LAPHINE_UPGRADE_DB
|
Type: LAPHINE_UPGRADE_DB
|
||||||
Version: 1
|
Version: 2
|
||||||
|
|||||||
@ -27,6 +27,10 @@
|
|||||||
# ResultRefine Absolute refine level after the upgrade. (Default: none)
|
# ResultRefine Absolute refine level after the upgrade. (Default: none)
|
||||||
# ResultRefineMinimum Minimum refine level after the upgrade. (Default: none)
|
# ResultRefineMinimum Minimum refine level after the upgrade. (Default: none)
|
||||||
# ResultRefineMaximum Maximum refine level after the upgrade. (Default: none)
|
# ResultRefineMaximum Maximum refine level after the upgrade. (Default: none)
|
||||||
|
# ResultRefineRate: Table of rate per refine level. (Default: none)
|
||||||
|
# By default the rate per level is 1. When defined the total rate is the sum of the rates between the minimum and maximum refinements.
|
||||||
|
# - Level Refine level.
|
||||||
|
# Rate Rate per level. (Default: 1. Max: 10000)
|
||||||
# MinimumRefine Minimum refine level of the required items. (Default: 0)
|
# MinimumRefine Minimum refine level of the required items. (Default: 0)
|
||||||
# MaximumRefine Maximum refine level of the required items. (Default: MAX_REFINE)
|
# MaximumRefine Maximum refine level of the required items. (Default: MAX_REFINE)
|
||||||
# RequiredRandomOptions How many random options have to be in the item? (Default: 0)
|
# RequiredRandomOptions How many random options have to be in the item? (Default: 0)
|
||||||
@ -37,7 +41,7 @@
|
|||||||
|
|
||||||
Header:
|
Header:
|
||||||
Type: LAPHINE_UPGRADE_DB
|
Type: LAPHINE_UPGRADE_DB
|
||||||
Version: 1
|
Version: 2
|
||||||
|
|
||||||
Footer:
|
Footer:
|
||||||
Imports:
|
Imports:
|
||||||
|
|||||||
@ -27,6 +27,10 @@
|
|||||||
# ResultRefine Absolute refine level after the upgrade. (Default: none)
|
# ResultRefine Absolute refine level after the upgrade. (Default: none)
|
||||||
# ResultRefineMinimum Minimum refine level after the upgrade. (Default: none)
|
# ResultRefineMinimum Minimum refine level after the upgrade. (Default: none)
|
||||||
# ResultRefineMaximum Maximum refine level after the upgrade. (Default: none)
|
# ResultRefineMaximum Maximum refine level after the upgrade. (Default: none)
|
||||||
|
# ResultRefineRate: Table of rate per refine level. (Default: none)
|
||||||
|
# By default the rate per level is 1. When defined the total rate is the sum of the rates between the minimum and maximum refinements.
|
||||||
|
# - Level Refine level.
|
||||||
|
# Rate Rate per level. (Default: 1. Max: 10000)
|
||||||
# MinimumRefine Minimum refine level of the required items. (Default: 0)
|
# MinimumRefine Minimum refine level of the required items. (Default: 0)
|
||||||
# MaximumRefine Maximum refine level of the required items. (Default: MAX_REFINE)
|
# MaximumRefine Maximum refine level of the required items. (Default: MAX_REFINE)
|
||||||
# RequiredRandomOptions How many random options have to be in the item? (Default: 0)
|
# RequiredRandomOptions How many random options have to be in the item? (Default: 0)
|
||||||
@ -37,7 +41,7 @@
|
|||||||
|
|
||||||
Header:
|
Header:
|
||||||
Type: LAPHINE_UPGRADE_DB
|
Type: LAPHINE_UPGRADE_DB
|
||||||
Version: 1
|
Version: 2
|
||||||
|
|
||||||
Body:
|
Body:
|
||||||
# - Item: Ein_Ddbox
|
# - Item: Ein_Ddbox
|
||||||
@ -152,6 +156,27 @@ Body:
|
|||||||
- Item: Shadow_Refine_Hammer
|
- Item: Shadow_Refine_Hammer
|
||||||
ResultRefineMinimum: 1
|
ResultRefineMinimum: 1
|
||||||
ResultRefineMaximum: 10
|
ResultRefineMaximum: 10
|
||||||
|
ResultRefineRate:
|
||||||
|
- Level: 1
|
||||||
|
Rate: 440
|
||||||
|
- Level: 2
|
||||||
|
Rate: 879
|
||||||
|
- Level: 3
|
||||||
|
Rate: 1703
|
||||||
|
- Level: 4
|
||||||
|
Rate: 3516
|
||||||
|
- Level: 5
|
||||||
|
Rate: 1758
|
||||||
|
- Level: 6
|
||||||
|
Rate: 879
|
||||||
|
- Level: 7
|
||||||
|
Rate: 440
|
||||||
|
- Level: 8
|
||||||
|
Rate: 220
|
||||||
|
- Level: 9
|
||||||
|
Rate: 110
|
||||||
|
- Level: 10
|
||||||
|
Rate: 55
|
||||||
MaximumRefine: 9
|
MaximumRefine: 9
|
||||||
CardsAllowed: true
|
CardsAllowed: true
|
||||||
TargetItems:
|
TargetItems:
|
||||||
|
|||||||
@ -23476,17 +23476,53 @@ void clif_parse_laphine_upgrade( int fd, struct map_session_data* sd ){
|
|||||||
if( upgrade->resultRefine > 0 ){
|
if( upgrade->resultRefine > 0 ){
|
||||||
// Absolute refine level change
|
// Absolute refine level change
|
||||||
item->refine = max( item->refine, upgrade->resultRefine );
|
item->refine = max( item->refine, upgrade->resultRefine );
|
||||||
}else if( upgrade->resultRefineMaximum > 0 ){
|
}else {
|
||||||
|
uint16 min_value = 0;
|
||||||
|
uint16 max_value = MAX_REFINE;
|
||||||
|
|
||||||
|
if( upgrade->resultRefineMaximum > 0 ){
|
||||||
// If a minimum is specified it can also downgrade
|
// If a minimum is specified it can also downgrade
|
||||||
if( upgrade->resultRefineMinimum ){
|
if( upgrade->resultRefineMinimum ){
|
||||||
item->refine = rnd_value( upgrade->resultRefineMinimum, upgrade->resultRefineMaximum );
|
min_value = upgrade->resultRefineMinimum;
|
||||||
}else{
|
}else{
|
||||||
// Otherwise it can only be upgraded until the maximum, but not downgraded
|
// Otherwise it can only be upgraded until the maximum, but not downgraded
|
||||||
item->refine = rnd_value( item->refine, upgrade->resultRefineMaximum );
|
min_value = item->refine;
|
||||||
}
|
}
|
||||||
|
max_value = upgrade->resultRefineMaximum;
|
||||||
}else if( upgrade->resultRefineMinimum > 0 ){
|
}else if( upgrade->resultRefineMinimum > 0 ){
|
||||||
// No maximum has been specified, so it can be anything between minimum and MAX_REFINE
|
// No maximum has been specified, so it can be anything between minimum and MAX_REFINE
|
||||||
item->refine = rnd_value( upgrade->resultRefineMinimum, MAX_REFINE );
|
min_value = upgrade->resultRefineMinimum;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (upgrade->resultRefineRate.empty()) {
|
||||||
|
item->refine = rnd_value( min_value, max_value );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
int level, total = 0, rate = 0;
|
||||||
|
|
||||||
|
// Get the total rate between min_value and max_value
|
||||||
|
for ( level = min_value; level <= max_value; level++ ) {
|
||||||
|
if (upgrade->resultRefineRate.count(level) > 0)
|
||||||
|
total += upgrade->resultRefineRate[level];
|
||||||
|
else
|
||||||
|
total += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int r = rnd_value( 1, total );
|
||||||
|
|
||||||
|
for ( level = min_value; level <= max_value; level++ ) {
|
||||||
|
if (upgrade->resultRefineRate.count(level) > 0)
|
||||||
|
rate += upgrade->resultRefineRate[level];
|
||||||
|
else
|
||||||
|
rate += 1;
|
||||||
|
|
||||||
|
if (r <= rate) {
|
||||||
|
item->refine = level;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Log retrieving the item again -> with the new options
|
// Log retrieving the item again -> with the new options
|
||||||
|
|||||||
@ -1665,6 +1665,36 @@ uint64 LaphineUpgradeDatabase::parseBodyNode( const ryml::NodeRef& node ){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this->nodeExists( node, "ResultRefineRate" )) {
|
||||||
|
const auto& refineNode = node["ResultRefineRate"];
|
||||||
|
|
||||||
|
for (const auto& refineit : refineNode) {
|
||||||
|
if (!this->nodesExist(refineit, { "Level", "Rate" })) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16 level;
|
||||||
|
|
||||||
|
if (!this->asUInt16Rate(refineit, "Level", level, MAX_REFINE))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
bool refine_exists = util::umap_find( entry->resultRefineRate, level ) != nullptr;
|
||||||
|
|
||||||
|
if (this->nodeExists( refineit, "Rate" )) {
|
||||||
|
uint16 rate;
|
||||||
|
|
||||||
|
if (!this->asUInt16Rate( refineit, "Rate", rate )) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
entry->resultRefineRate[level] = rate;
|
||||||
|
} else {
|
||||||
|
if (!refine_exists) {
|
||||||
|
entry->resultRefineRate[level] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if( !exists ){
|
if( !exists ){
|
||||||
this->put( entry->item_id, entry );
|
this->put( entry->item_id, entry );
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1372,11 +1372,12 @@ struct s_laphine_upgrade{
|
|||||||
uint16 resultRefine;
|
uint16 resultRefine;
|
||||||
uint16 resultRefineMinimum;
|
uint16 resultRefineMinimum;
|
||||||
uint16 resultRefineMaximum;
|
uint16 resultRefineMaximum;
|
||||||
|
std::unordered_map<uint16, uint16> resultRefineRate;
|
||||||
};
|
};
|
||||||
|
|
||||||
class LaphineUpgradeDatabase : public TypesafeYamlDatabase<t_itemid, s_laphine_upgrade>{
|
class LaphineUpgradeDatabase : public TypesafeYamlDatabase<t_itemid, s_laphine_upgrade>{
|
||||||
public:
|
public:
|
||||||
LaphineUpgradeDatabase() : TypesafeYamlDatabase( "LAPHINE_UPGRADE_DB", 1 ){
|
LaphineUpgradeDatabase() : TypesafeYamlDatabase( "LAPHINE_UPGRADE_DB", 2 ){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user