mirror of
https://github.com/ErikasKontenis/SabrehavenServer.git
synced 2025-10-14 06:34:55 +02:00
finish rookgard addon quests and fix stages for rookslayers
This commit is contained in:
@@ -303,6 +303,9 @@ bool BehaviourDatabase::loadActions(ScriptReader& script, NpcBehaviour* behaviou
|
||||
} else if (identifier == "delete") {
|
||||
action->type = BEHAVIOUR_TYPE_DELETE;
|
||||
searchType = BEHAVIOUR_PARAMETER_ONE;
|
||||
} else if (identifier == "deleteamount") {
|
||||
action->type = BEHAVIOUR_TYPE_DELETEAMOUNT;
|
||||
searchType = BEHAVIOUR_PARAMETER_TWO;
|
||||
} else if (identifier == "teachspell") {
|
||||
action->type = BEHAVIOUR_TYPE_TEACHSPELL;
|
||||
searchType = BEHAVIOUR_PARAMETER_ONE;
|
||||
@@ -327,6 +330,12 @@ bool BehaviourDatabase::loadActions(ScriptReader& script, NpcBehaviour* behaviou
|
||||
} else if (identifier == "setquestvalue") {
|
||||
action->type = BEHAVIOUR_TYPE_QUESTVALUE;
|
||||
searchType = BEHAVIOUR_PARAMETER_TWO;
|
||||
} else if (identifier == "setexpiringquestvalue") {
|
||||
action->type = BEHAVIOUR_TYPE_EXPIRINGQUESTVALUE;
|
||||
searchType = BEHAVIOUR_PARAMETER_TWO;
|
||||
} else if (identifier == "addoutfitaddon") {
|
||||
action->type = BEHAVIOUR_TYPE_ADDOUTFITADDON;
|
||||
searchType = BEHAVIOUR_PARAMETER_TWO;
|
||||
} else if (identifier == "poison") {
|
||||
action->type = BEHAVIOUR_TYPE_POISON;
|
||||
searchType = BEHAVIOUR_PARAMETER_TWO;
|
||||
@@ -523,6 +532,10 @@ NpcBehaviourNode* BehaviourDatabase::readValue(ScriptReader& script)
|
||||
node = new NpcBehaviourNode();
|
||||
node->type = BEHAVIOUR_TYPE_QUESTVALUE;
|
||||
searchType = BEHAVIOUR_PARAMETER_ONE;
|
||||
} else if (identifier == "expiringquestvalue") {
|
||||
node = new NpcBehaviourNode();
|
||||
node->type = BEHAVIOUR_TYPE_EXPIRINGQUESTVALUE;
|
||||
searchType = BEHAVIOUR_PARAMETER_ONE;
|
||||
} else if (identifier == "count") {
|
||||
node = new NpcBehaviourNode();
|
||||
node->type = BEHAVIOUR_TYPE_COUNT;
|
||||
@@ -854,6 +867,19 @@ void BehaviourDatabase::checkAction(const NpcBehaviourAction* action, Player* pl
|
||||
}
|
||||
break;
|
||||
}
|
||||
case BEHAVIOUR_TYPE_DELETEAMOUNT: {
|
||||
type = evaluate(action->expression, player, message);
|
||||
int32_t amount = evaluate(action->expression2, player, message);
|
||||
const ItemType& itemType = Item::items[type];
|
||||
if (itemType.stackable || !itemType.hasSubType()) {
|
||||
data = -1;
|
||||
}
|
||||
|
||||
if (!player->removeItemOfType(type, amount, data, true)) {
|
||||
player->removeItemOfType(type, amount, data, false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case BEHAVIOUR_TYPE_EFFECTME:
|
||||
g_game.addMagicEffect(npc->getPosition(), evaluate(action->expression, player, message));
|
||||
break;
|
||||
@@ -904,6 +930,18 @@ void BehaviourDatabase::checkAction(const NpcBehaviourAction* action, Player* pl
|
||||
player->addStorageValue(questNumber, questValue);
|
||||
break;
|
||||
}
|
||||
case BEHAVIOUR_TYPE_EXPIRINGQUESTVALUE: {
|
||||
int32_t questNumber = evaluate(action->expression, player, message);
|
||||
int32_t ticks = evaluate(action->expression2, player, message);
|
||||
player->addStorageValue(questNumber, OTSYS_TIME() + ticks);
|
||||
break;
|
||||
}
|
||||
case BEHAVIOUR_TYPE_ADDOUTFITADDON: {
|
||||
int32_t lookType = evaluate(action->expression, player, message);
|
||||
int32_t addon = evaluate(action->expression2, player, message);
|
||||
player->addOutfit(lookType, addon);
|
||||
break;
|
||||
}
|
||||
case BEHAVIOUR_TYPE_TELEPORT: {
|
||||
Position pos;
|
||||
pos.x = evaluate(action->expression, player, message);
|
||||
@@ -1072,6 +1110,12 @@ int32_t BehaviourDatabase::evaluate(NpcBehaviourNode* node, Player* player, cons
|
||||
player->getStorageValue(questNumber, questValue);
|
||||
return questValue;
|
||||
}
|
||||
case BEHAVIOUR_TYPE_EXPIRINGQUESTVALUE: {
|
||||
int32_t questNumber = evaluate(node->left, player, message);
|
||||
int32_t questValue;
|
||||
player->getStorageValue(questNumber, questValue);
|
||||
return questValue - OTSYS_TIME();
|
||||
}
|
||||
case BEHAVIOUR_TYPE_MESSAGE_COUNT: {
|
||||
int32_t value = searchDigit(message);
|
||||
if (value < node->number) {
|
||||
|
@@ -86,6 +86,9 @@ enum NpcBehaviourType_t
|
||||
BEHAVIOUR_TYPE_CREATECONTAINER, // create a container of an item in particular
|
||||
BEHAVIOUR_TYPE_TOWN, // change player town
|
||||
BEHAVIOUR_TYPE_DRUNK, // get/set drunk (set not done)
|
||||
BEHAVIOUR_TYPE_ADDOUTFITADDON, // Add Outfit Addon
|
||||
BEHAVIOUR_TYPE_DELETEAMOUNT, // deletes an item according specified amount
|
||||
BEHAVIOUR_TYPE_EXPIRINGQUESTVALUE, // get/set expiring quest value
|
||||
};
|
||||
|
||||
enum NpcBehaviourOperator_t
|
||||
|
@@ -2052,6 +2052,11 @@ void LuaScriptInterface::registerFunctions()
|
||||
|
||||
registerMethod("Player", "getParty", LuaScriptInterface::luaPlayerGetParty);
|
||||
|
||||
registerMethod("Player", "addOutfit", LuaScriptInterface::luaPlayerAddOutfit);
|
||||
registerMethod("Player", "addOutfitAddon", LuaScriptInterface::luaPlayerAddOutfitAddon);
|
||||
registerMethod("Player", "removeOutfit", LuaScriptInterface::luaPlayerRemoveOutfit);
|
||||
registerMethod("Player", "removeOutfitAddon", LuaScriptInterface::luaPlayerRemoveOutfitAddon);
|
||||
registerMethod("Player", "hasOutfit", LuaScriptInterface::luaPlayerHasOutfit);
|
||||
registerMethod("Player", "sendOutfitWindow", LuaScriptInterface::luaPlayerSendOutfitWindow);
|
||||
|
||||
registerMethod("Player", "getPremiumDays", LuaScriptInterface::luaPlayerGetPremiumDays);
|
||||
@@ -8259,6 +8264,80 @@ int LuaScriptInterface::luaPlayerGetParty(lua_State* L)
|
||||
return 1;
|
||||
}
|
||||
|
||||
int LuaScriptInterface::luaPlayerAddOutfit(lua_State* L)
|
||||
{
|
||||
// player:addOutfit(lookType)
|
||||
Player* player = getUserdata<Player>(L, 1);
|
||||
if (player) {
|
||||
player->addOutfit(getNumber<uint16_t>(L, 2), 0);
|
||||
pushBoolean(L, true);
|
||||
}
|
||||
else {
|
||||
lua_pushnil(L);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int LuaScriptInterface::luaPlayerAddOutfitAddon(lua_State* L)
|
||||
{
|
||||
// player:addOutfitAddon(lookType, addon)
|
||||
Player* player = getUserdata<Player>(L, 1);
|
||||
if (player) {
|
||||
uint16_t lookType = getNumber<uint16_t>(L, 2);
|
||||
uint8_t addon = getNumber<uint8_t>(L, 3);
|
||||
player->addOutfit(lookType, addon);
|
||||
pushBoolean(L, true);
|
||||
}
|
||||
else {
|
||||
lua_pushnil(L);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int LuaScriptInterface::luaPlayerRemoveOutfit(lua_State* L)
|
||||
{
|
||||
// player:removeOutfit(lookType)
|
||||
Player* player = getUserdata<Player>(L, 1);
|
||||
if (player) {
|
||||
uint16_t lookType = getNumber<uint16_t>(L, 2);
|
||||
pushBoolean(L, player->removeOutfit(lookType));
|
||||
}
|
||||
else {
|
||||
lua_pushnil(L);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int LuaScriptInterface::luaPlayerRemoveOutfitAddon(lua_State* L)
|
||||
{
|
||||
// player:removeOutfitAddon(lookType, addon)
|
||||
Player* player = getUserdata<Player>(L, 1);
|
||||
if (player) {
|
||||
uint16_t lookType = getNumber<uint16_t>(L, 2);
|
||||
uint8_t addon = getNumber<uint8_t>(L, 3);
|
||||
pushBoolean(L, player->removeOutfitAddon(lookType, addon));
|
||||
}
|
||||
else {
|
||||
lua_pushnil(L);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int LuaScriptInterface::luaPlayerHasOutfit(lua_State* L)
|
||||
{
|
||||
// player:hasOutfit(lookType[, addon = 0])
|
||||
Player* player = getUserdata<Player>(L, 1);
|
||||
if (player) {
|
||||
uint16_t lookType = getNumber<uint16_t>(L, 2);
|
||||
uint8_t addon = getNumber<uint8_t>(L, 3, 0);
|
||||
pushBoolean(L, player->canWear(lookType, addon));
|
||||
}
|
||||
else {
|
||||
lua_pushnil(L);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int LuaScriptInterface::luaPlayerSendOutfitWindow(lua_State* L)
|
||||
{
|
||||
// player:sendOutfitWindow()
|
||||
|
@@ -882,6 +882,11 @@ class LuaScriptInterface
|
||||
|
||||
static int luaPlayerGetParty(lua_State* L);
|
||||
|
||||
static int luaPlayerAddOutfit(lua_State* L);
|
||||
static int luaPlayerAddOutfitAddon(lua_State* L);
|
||||
static int luaPlayerRemoveOutfit(lua_State* L);
|
||||
static int luaPlayerRemoveOutfitAddon(lua_State* L);
|
||||
static int luaPlayerHasOutfit(lua_State* L);
|
||||
static int luaPlayerSendOutfitWindow(lua_State* L);
|
||||
|
||||
static int luaPlayerGetPremiumDays(lua_State* L);
|
||||
|
Reference in New Issue
Block a user