base the tasker npcs exp reward by specific formula based on player stages

This commit is contained in:
ErikasKontenis
2020-04-30 21:30:52 +03:00
parent 869e101428
commit c724a3071a
5 changed files with 61 additions and 27 deletions

View File

@@ -564,6 +564,10 @@ NpcBehaviourNode* BehaviourDatabase::readValue(ScriptReader& script)
node = new NpcBehaviourNode();
node->type = BEHAVIOUR_TYPE_COUNT;
searchType = BEHAVIOUR_PARAMETER_ONE;
} else if (identifier == "experiencestage") {
node = new NpcBehaviourNode();
node->type = BEHAVIOUR_TYPE_EXPERIENCESTAGE;
searchType = BEHAVIOUR_PARAMETER_ONE;
} else if (identifier == "random") {
node = new NpcBehaviourNode();
node->type = BEHAVIOUR_TYPE_RANDOM;
@@ -636,6 +640,28 @@ NpcBehaviourNode* BehaviourDatabase::readFactor(ScriptReader& script, NpcBehavio
nextNode = headNode;
}
// / operator
while (true) {
if (script.Token != SPECIAL) {
break;
}
if (script.getSpecial() != '/') {
break;
}
NpcBehaviourNode* headNode = new NpcBehaviourNode();
headNode->type = BEHAVIOUR_TYPE_OPERATION;
headNode->number = BEHAVIOUR_OPERATOR_DIVIDE;
headNode->left = nextNode;
script.nextToken();
nextNode = readValue(script);
headNode->right = nextNode;
nextNode = headNode;
}
// + - operators
while (true) {
if (script.Token != SPECIAL) {
@@ -1136,6 +1162,10 @@ int32_t BehaviourDatabase::evaluate(NpcBehaviourNode* node, Player* player, cons
}
return player->getItemTypeCount(itemId, data);
}
case BEHAVIOUR_TYPE_EXPERIENCESTAGE: {
int32_t level = evaluate(node->left, player, message);
return g_game.getExperienceStage(level);
}
case BEHAVIOUR_TYPE_COUNTMONEY:
return player->getMoney();
case BEHAVIOUR_TYPE_BURNING: {
@@ -1285,6 +1315,8 @@ int32_t BehaviourDatabase::checkOperation(Player* player, NpcBehaviourNode* node
return leftResult != rightResult;
case BEHAVIOUR_OPERATOR_MULTIPLY:
return leftResult * rightResult;
case BEHAVIOUR_OPERATOR_DIVIDE:
return leftResult / rightResult;
case BEHAVIOUR_OPERATOR_SUM:
return leftResult + rightResult;
case BEHAVIOUR_OPERATOR_RES:

View File

@@ -84,6 +84,7 @@ enum NpcBehaviourType_t
BEHAVIOUR_TYPE_WITHDRAW, // withdraw from player bank balance
BEHAVIOUR_TYPE_DEPOSIT, // deposit x amount of gold
BEHAVIOUR_TYPE_TRANSFER, // transfer x amount of gold
BEHAVIOUR_TYPE_EXPERIENCESTAGE, // get experience staged based on player level
BEHAVIOUR_TYPE_BLESS, // add blessing to player
BEHAVIOUR_TYPE_CREATECONTAINER, // create a container of an item in particular
BEHAVIOUR_TYPE_TOWN, // change player town
@@ -106,6 +107,7 @@ enum NpcBehaviourOperator_t
BEHAVIOUR_OPERATOR_LESSER_OR_EQUALS = 'L',
BEHAVIOUR_OPERATOR_NOT_EQUALS = 'N',
BEHAVIOUR_OPERATOR_MULTIPLY = '*',
BEHAVIOUR_OPERATOR_DIVIDE = '/',
BEHAVIOUR_OPERATOR_SUM = '+',
BEHAVIOUR_OPERATOR_RES = '-',
};