mirror of
https://github.com/ErikasKontenis/SabrehavenServer.git
synced 2025-10-14 14:44:55 +02:00
base the tasker npcs exp reward by specific formula based on player stages
This commit is contained in:
@@ -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:
|
||||
|
@@ -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 = '-',
|
||||
};
|
||||
|
Reference in New Issue
Block a user