finish nargor island quest

This commit is contained in:
ErikasKontenis
2019-12-13 16:58:01 +02:00
parent c908751ee7
commit 99b231124e
16 changed files with 153 additions and 8 deletions

View File

@@ -336,6 +336,9 @@ bool BehaviourDatabase::loadActions(ScriptReader& script, NpcBehaviour* behaviou
} else if (identifier == "addoutfitaddon") {
action->type = BEHAVIOUR_TYPE_ADDOUTFITADDON;
searchType = BEHAVIOUR_PARAMETER_TWO;
} else if (identifier == "addoutfit") {
action->type = BEHAVIOUR_TYPE_ADDOUTFIT;
searchType = BEHAVIOUR_PARAMETER_ONE;
} else if (identifier == "poison") {
action->type = BEHAVIOUR_TYPE_POISON;
searchType = BEHAVIOUR_PARAMETER_TWO;
@@ -544,6 +547,10 @@ NpcBehaviourNode* BehaviourDatabase::readValue(ScriptReader& script)
node = new NpcBehaviourNode();
node->type = BEHAVIOUR_TYPE_RANDOM;
searchType = BEHAVIOUR_PARAMETER_TWO;
} else if (identifier == "slotitem") {
node = new NpcBehaviourNode();
node->type = BEHAVIOUR_TYPE_SLOTITEM;
searchType = BEHAVIOUR_PARAMETER_ONE;
}
if (searchType == BEHAVIOUR_PARAMETER_ONE) {
@@ -942,6 +949,12 @@ void BehaviourDatabase::checkAction(const NpcBehaviourAction* action, Player* pl
player->addOutfit(lookType, addon);
break;
}
case BEHAVIOUR_TYPE_ADDOUTFIT: {
int32_t lookType = evaluate(action->expression, player, message);
player->addOutfit(lookType, 0);
break;
}
case BEHAVIOUR_TYPE_TELEPORT: {
Position pos;
pos.x = evaluate(action->expression, player, message);
@@ -1110,6 +1123,21 @@ int32_t BehaviourDatabase::evaluate(NpcBehaviourNode* node, Player* player, cons
player->getStorageValue(questNumber, questValue);
return questValue;
}
case BEHAVIOUR_TYPE_SLOTITEM: {
int32_t slot = evaluate(node->left, player, message);
Thing* thing = player->getThing(slot);
if (!thing) {
return 0;
}
Item* item = thing->getItem();
if (!item) {
return 0;
}
return item->getID();
}
case BEHAVIOUR_TYPE_EXPIRINGQUESTVALUE: {
int32_t questNumber = evaluate(node->left, player, message);
int32_t questValue;

View File

@@ -87,8 +87,10 @@ enum NpcBehaviourType_t
BEHAVIOUR_TYPE_TOWN, // change player town
BEHAVIOUR_TYPE_DRUNK, // get/set drunk (set not done)
BEHAVIOUR_TYPE_ADDOUTFITADDON, // Add Outfit Addon
BEHAVIOUR_TYPE_ADDOUTFIT, // Add Outfit
BEHAVIOUR_TYPE_DELETEAMOUNT, // deletes an item according specified amount
BEHAVIOUR_TYPE_EXPIRINGQUESTVALUE, // get/set expiring quest value
BEHAVIOUR_TYPE_SLOTITEM, // get slot item
};
enum NpcBehaviourOperator_t