mirror of
https://github.com/ErikasKontenis/SabrehavenServer.git
synced 2025-04-30 09:39:20 +02:00
Merge branch '22-implement-the-shattered-isles-quest' into 'master'
Resolve "Implement The Shattered Isles Quest" Closes #22 See merge request ErikasKontenis/Sabrehaven!18
This commit is contained in:
commit
14fb795807
@ -85,6 +85,9 @@
|
|||||||
<action actionid="82" script="nostalrius/82.lua" />
|
<action actionid="82" script="nostalrius/82.lua" />
|
||||||
<action actionid="83" script="nostalrius/83.lua" />
|
<action actionid="83" script="nostalrius/83.lua" />
|
||||||
|
|
||||||
|
<action actionid="17525" script="meriana_quest/tortoise_egg.lua" />
|
||||||
|
<action fromaid="17528" toaid="17530" script="meriana_quest/pirate_map.lua" />
|
||||||
|
|
||||||
<!-- Nostalrius Default Actions -->
|
<!-- Nostalrius Default Actions -->
|
||||||
<!-- Furniture Parcels -->
|
<!-- Furniture Parcels -->
|
||||||
<action fromid="2775" toid="2812" script="misc/furniture_parcels.lua" />
|
<action fromid="2775" toid="2812" script="misc/furniture_parcels.lua" />
|
||||||
@ -174,6 +177,7 @@
|
|||||||
<action itemid="4872" script="misc/ice_pick.lua" />
|
<action itemid="4872" script="misc/ice_pick.lua" />
|
||||||
<action itemid="3456" script="misc/pick.lua" />
|
<action itemid="3456" script="misc/pick.lua" />
|
||||||
<action itemid="3457" script="misc/shovel.lua" />
|
<action itemid="3457" script="misc/shovel.lua" />
|
||||||
|
<action itemid="3452" script="misc/rake.lua" />
|
||||||
<action itemid="5710" script="misc/shovel.lua" />
|
<action itemid="5710" script="misc/shovel.lua" />
|
||||||
<action itemid="3483" allowfaruse="1" script="misc/fishing_rod.lua" />
|
<action itemid="3483" allowfaruse="1" script="misc/fishing_rod.lua" />
|
||||||
<action itemid="5865" script="misc/juice_squeezer.lua" />
|
<action itemid="5865" script="misc/juice_squeezer.lua" />
|
||||||
@ -279,6 +283,7 @@
|
|||||||
<action itemid="3732" script="misc/food.lua" />
|
<action itemid="3732" script="misc/food.lua" />
|
||||||
<action itemid="5096" script="misc/food.lua" />
|
<action itemid="5096" script="misc/food.lua" />
|
||||||
<action itemid="5678" script="misc/food.lua" />
|
<action itemid="5678" script="misc/food.lua" />
|
||||||
|
<action itemid="6125" script="misc/food.lua" />
|
||||||
|
|
||||||
<!-- Passthrough -->
|
<!-- Passthrough -->
|
||||||
<action fromid="2334" toid="2341" script="misc/doors.lua" />
|
<action fromid="2334" toid="2341" script="misc/doors.lua" />
|
||||||
|
28
data/actions/scripts/meriana_quest/pirate_map.lua
Normal file
28
data/actions/scripts/meriana_quest/pirate_map.lua
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
local maps = {
|
||||||
|
[17528] = "You have successfully read plan A.",
|
||||||
|
[17529] = "You have successfully read plan B.",
|
||||||
|
[17530] = "You have successfully read plan C."
|
||||||
|
}
|
||||||
|
|
||||||
|
function onUse(player, item, fromPosition, target, toPosition)
|
||||||
|
local mapActionId = item:getActionId()
|
||||||
|
local map = maps[mapActionId]
|
||||||
|
if not map then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
local playerPosition = player:getPosition()
|
||||||
|
if player:getStorageValue(17520) < 8 then
|
||||||
|
player:say("You shouldn't touch these maps because someone might see you.", TALKTYPE_MONSTER_SAY, false, 0, playerPosition)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
if player:getStorageValue(mapActionId) ~= 1 then
|
||||||
|
player:say(map, TALKTYPE_MONSTER_SAY, false, 0, playerPosition)
|
||||||
|
player:setStorageValue(mapActionId, 1)
|
||||||
|
else
|
||||||
|
player:say("You have already read this map.", TALKTYPE_MONSTER_SAY, false, 0, playerPosition)
|
||||||
|
end
|
||||||
|
|
||||||
|
return true
|
||||||
|
end
|
10
data/actions/scripts/meriana_quest/tortoise_egg.lua
Normal file
10
data/actions/scripts/meriana_quest/tortoise_egg.lua
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
function onUse(player, item, fromPosition, target, toPosition)
|
||||||
|
if player:getStorageValue(17526) < os.time() then
|
||||||
|
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have found a tortoise egg from Nargor.")
|
||||||
|
player:setStorageValue(17526, os.time() + 24 * 60 * 60) -- 24 hour
|
||||||
|
player:addItem(6125,1)
|
||||||
|
else
|
||||||
|
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You shoud not take any more today.")
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
@ -1,4 +1,10 @@
|
|||||||
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
|
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
|
||||||
|
if player:getStorageValue(17520) == 5 and target.itemid == 5601 then
|
||||||
|
player:setStorageValue(17520, 6)
|
||||||
|
toPosition:sendMagicEffect(CONST_ME_FIREAREA)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
local random = math.random(10)
|
local random = math.random(10)
|
||||||
if random >= 4 then --success 6% chance
|
if random >= 4 then --success 6% chance
|
||||||
if target.itemid == 5465 then --Burn Sugar Cane
|
if target.itemid == 5465 then --Burn Sugar Cane
|
||||||
|
12
data/actions/scripts/misc/rake.lua
Normal file
12
data/actions/scripts/misc/rake.lua
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
|
||||||
|
-- The Shattered Isles Parrot ring
|
||||||
|
if target.itemid == 6094 then
|
||||||
|
if player:getStorageValue(17502) == 1 and player:getStorageValue(17503) ~= 1 then
|
||||||
|
toPosition:sendMagicEffect(CONST_ME_POFF)
|
||||||
|
Game.createItem(6093, 1, Position(32422, 32770, 1))
|
||||||
|
player:say("You have found a ring.", TALKTYPE_MONSTER_SAY)
|
||||||
|
player:setStorageValue(17503, 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
@ -26932,7 +26932,8 @@ Flags = {Take}
|
|||||||
Attributes = {Weight=250}
|
Attributes = {Weight=250}
|
||||||
|
|
||||||
TypeID = 5952
|
TypeID = 5952
|
||||||
Name = "a scroll"
|
Name = "a poem scroll"
|
||||||
|
Description = "It contains a love poem, written by an unknown elven poet."
|
||||||
Flags = {Take}
|
Flags = {Take}
|
||||||
Attributes = {Weight=120}
|
Attributes = {Weight=120}
|
||||||
|
|
||||||
@ -27641,7 +27642,7 @@ TypeID = 6093
|
|||||||
Name = "a crystal ring"
|
Name = "a crystal ring"
|
||||||
Description = "The initials E.S. are engraved on it"
|
Description = "The initials E.S. are engraved on it"
|
||||||
Flags = {Take}
|
Flags = {Take}
|
||||||
Attributes = {Weight=90}
|
Attributes = {Weight=90,SlotType=RING}
|
||||||
|
|
||||||
TypeID = 6094
|
TypeID = 6094
|
||||||
Name = "a thread tree"
|
Name = "a thread tree"
|
||||||
@ -27804,9 +27805,9 @@ Attributes = {Weight=1100}
|
|||||||
|
|
||||||
TypeID = 6125
|
TypeID = 6125
|
||||||
Name = "a tortoise egg from Nargor"
|
Name = "a tortoise egg from Nargor"
|
||||||
Description = "Handle with care and don't try to eat it" # TODO: Make it eatable and implement from quest details
|
Description = "Handle with care and don't try to eat it"
|
||||||
Flags = {Take}
|
Flags = {Take}
|
||||||
Attributes = {Weight=30}
|
Attributes = {Nutrition=8,Weight=30}
|
||||||
|
|
||||||
TypeID = 6126
|
TypeID = 6126
|
||||||
Name = "a peg leg"
|
Name = "a peg leg"
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
<flag canpushcreatures="1" />
|
<flag canpushcreatures="1" />
|
||||||
<flag targetdistance="1" />
|
<flag targetdistance="1" />
|
||||||
<flag runonhealth="0" />
|
<flag runonhealth="0" />
|
||||||
|
<flag hidehealth="1"/>
|
||||||
</flags>
|
</flags>
|
||||||
<attacks>
|
<attacks>
|
||||||
<attack name="fire" chance="30" range="7" min="-0" max="-111">
|
<attack name="fire" chance="30" range="7" min="-0" max="-111">
|
||||||
|
39
data/monster/781/magic pillar.xml
Normal file
39
data/monster/781/magic pillar.xml
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<monster name="magic pillar" nameDescription="a magic pillar" race="undead" experience="0" speed="0" manacost="0">
|
||||||
|
<health now="9950" max="9950"/>
|
||||||
|
<look typeex="2190"/>
|
||||||
|
<targetchange interval="1000" chance="10" />
|
||||||
|
<targetstrategy nearest="90" weakest="0" mostdamage="0" random="10" />
|
||||||
|
<flags>
|
||||||
|
<flag summonable="0"/>
|
||||||
|
<flag attackable="1"/>
|
||||||
|
<flag hostile="1"/>
|
||||||
|
<flag illusionable="0"/>
|
||||||
|
<flag convinceable="0"/>
|
||||||
|
<flag pushable="0"/>
|
||||||
|
<flag canpushitems="0"/>
|
||||||
|
<flag canpushcreatures="1"/>
|
||||||
|
<flag targetdistance="1"/>
|
||||||
|
<flag hidehealth="1"/>
|
||||||
|
</flags>
|
||||||
|
<attacks attack="1" skill="1">
|
||||||
|
<attack name="poison" min="-50" max="-100" range="7" chance="1">
|
||||||
|
<attribute key="shootEffect" value="energy" />
|
||||||
|
<attribute key="areaEffect" value="fire" />
|
||||||
|
</attack>
|
||||||
|
</attacks>
|
||||||
|
<defenses armor="1" defense="1"/>
|
||||||
|
<immunities>
|
||||||
|
<immunity fire="1" />
|
||||||
|
<immunity energy="1" />
|
||||||
|
<immunity physical="1" />
|
||||||
|
<immunity outfit="1" />
|
||||||
|
<immunity lifedrain="1" />
|
||||||
|
<immunity paralyze="1" />
|
||||||
|
<immunity poison="1" />
|
||||||
|
<immunity invisible="1" />
|
||||||
|
</immunities>
|
||||||
|
<summons maxSummons="3">
|
||||||
|
<summon name="demon" interval="1000" chance="10" max="4"/>
|
||||||
|
</summons>
|
||||||
|
</monster>
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF - 8"?>
|
<?xml version="1.0" encoding="UTF - 8"?>
|
||||||
<monster name="magicthrower" nameDescription="a magicthrower" race="undead" experience="18" speed="0" manacost="0">
|
<monster name="magicthrower" nameDescription="a magicthrower" race="undead" experience="18" speed="0" manacost="0">
|
||||||
<health now="100" max="100" />
|
<health now="100" max="100" />
|
||||||
<look typeex="0" />
|
<look typeex="2190" />
|
||||||
<targetchange interval="1000" chance="0" />
|
<targetchange interval="1000" chance="0" />
|
||||||
<targetstrategy nearest="100" weakest="0" mostdamage="0" random="0" />
|
<targetstrategy nearest="100" weakest="0" mostdamage="0" random="0" />
|
||||||
<flags>
|
<flags>
|
||||||
@ -15,6 +15,7 @@
|
|||||||
<flag canpushcreatures="1" />
|
<flag canpushcreatures="1" />
|
||||||
<flag targetdistance="1" />
|
<flag targetdistance="1" />
|
||||||
<flag runonhealth="100" />
|
<flag runonhealth="100" />
|
||||||
|
<flag hidehealth="1"/>
|
||||||
</flags>
|
</flags>
|
||||||
<attacks attack="1" skill="1">
|
<attacks attack="1" skill="1">
|
||||||
<attack name="poison" min="-50" max="-100" range="7" chance="1">
|
<attack name="poison" min="-50" max="-100" range="7" chance="1">
|
||||||
|
@ -207,4 +207,5 @@
|
|||||||
<monster name="tiquandas revenge" file="781/tiquandas revenge.xml" />
|
<monster name="tiquandas revenge" file="781/tiquandas revenge.xml" />
|
||||||
<monster name="toad" file="781/toad.xml" />
|
<monster name="toad" file="781/toad.xml" />
|
||||||
<monster name="tortoise" file="781/tortoise.xml" />
|
<monster name="tortoise" file="781/tortoise.xml" />
|
||||||
|
<monster name="magic pillar" file="781/magic pillar.xml" />
|
||||||
</monsters>
|
</monsters>
|
@ -395,6 +395,34 @@
|
|||||||
<movevent event="StepIn" itemid="5764" script="misc/drowning.lua" />
|
<movevent event="StepIn" itemid="5764" script="misc/drowning.lua" />
|
||||||
<movevent event="StepOut" itemid="5764" script="misc/drowning.lua"/>
|
<movevent event="StepOut" itemid="5764" script="misc/drowning.lua"/>
|
||||||
|
|
||||||
|
<!-- Goroma -->
|
||||||
|
<movevent event="StepIn" frommovementid="17506" tomovementid="17508" script="goroma/energy_barrier.lua" />
|
||||||
|
<movevent event="StepIn" movementid="17510" script="goroma/to_ramoa.lua" />
|
||||||
|
<movevent event="AddItem" movementid="17510" tileitem="1" script="goroma/to_ramoa.lua" />
|
||||||
|
<movevent event="StepIn" movementid="17511" script="goroma/back_ramoa.lua" />
|
||||||
|
<movevent event="AddItem" movementid="17511" tileitem="1" script="goroma/back_ramoa.lua" />
|
||||||
|
<movevent event="StepIn" movementid="17512" script="goroma/to_talahu.lua" />
|
||||||
|
<movevent event="AddItem" movementid="17512" tileitem="1" script="goroma/to_talahu.lua" />
|
||||||
|
<movevent event="StepIn" movementid="17513" script="goroma/sacrifice_mushroom_talahu.lua" />
|
||||||
|
<movevent event="AddItem" movementid="17513" tileitem="1" script="goroma/sacrifice_mushroom_talahu.lua" />
|
||||||
|
<movevent event="StepIn" movementid="17514" script="goroma/back_sacrifice_mushroom_talahu.lua" />
|
||||||
|
<movevent event="AddItem" movementid="17514" tileitem="1" script="goroma/back_sacrifice_mushroom_talahu.lua" />
|
||||||
|
<movevent event="StepIn" movementid="17515" script="goroma/back_talahu.lua" />
|
||||||
|
<movevent event="AddItem" movementid="17515" tileitem="1" script="goroma/back_talahu.lua" />
|
||||||
|
<movevent event="StepIn" movementid="17516" script="goroma/to_malada.lua" />
|
||||||
|
<movevent event="AddItem" movementid="17516" tileitem="1" script="goroma/to_malada.lua" />
|
||||||
|
<movevent event="StepIn" movementid="17517" script="goroma/back_malada.lua" />
|
||||||
|
<movevent event="AddItem" movementid="17517" tileitem="1" script="goroma/back_malada.lua" />
|
||||||
|
<movevent event="StepIn" movementid="17518" script="goroma/back_kharos.lua" />
|
||||||
|
<movevent event="AddItem" movementid="17518" tileitem="1" script="goroma/back_kharos.lua" />
|
||||||
|
<movevent event="StepIn" frommovementid="17519" tomovementid="17522" script="goroma/energy_barrier_kharos.lua" />
|
||||||
|
<movevent event="StepIn" frommovementid="17523" tomovementid="17524" script="goroma/entrance_kharos.lua" />
|
||||||
|
<movevent event="StepIn" movementid="17525" script="goroma/second_ferumbras_floor.lua" />
|
||||||
|
<movevent event="AddItem" movementid="17525" tileitem="1" script="goroma/second_ferumbras_floor.lua" />
|
||||||
|
<movevent event="StepIn" movementid="17526" script="goroma/final_ferumbras_floor.lua" />
|
||||||
|
<movevent event="AddItem" movementid="17526" tileitem="1" script="goroma/final_ferumbras_floor.lua" />
|
||||||
|
<movevent event="StepIn" movementid="17527" script="goroma/back_ferumbras_floor.lua" />
|
||||||
|
<movevent event="AddItem" movementid="17527" tileitem="1" script="goroma/back_ferumbras_floor.lua" />
|
||||||
<!-- Floorchange -->
|
<!-- Floorchange -->
|
||||||
<movevent event="StepIn" itemid="293" script="misc/floorchange.lua" />
|
<movevent event="StepIn" itemid="293" script="misc/floorchange.lua" />
|
||||||
<movevent event="AddItem" itemid="293" tileitem="1" script="misc/floorchange.lua" />
|
<movevent event="AddItem" itemid="293" tileitem="1" script="misc/floorchange.lua" />
|
||||||
@ -585,6 +613,7 @@
|
|||||||
<movevent event="AddItem" itemid="2526" tileitem="1" script="misc/dustbin.lua" />
|
<movevent event="AddItem" itemid="2526" tileitem="1" script="misc/dustbin.lua" />
|
||||||
<movevent event="RemoveItem" itemid="2927" script="misc/candelabrum.lua" />
|
<movevent event="RemoveItem" itemid="2927" script="misc/candelabrum.lua" />
|
||||||
<movevent event="RemoveItem" itemid="3482" script="misc/open_trap.lua" />
|
<movevent event="RemoveItem" itemid="3482" script="misc/open_trap.lua" />
|
||||||
|
<movevent event="StepIn" frommovementid="51191" tomovementid="51198" script="misc/turtles.lua" />
|
||||||
|
|
||||||
<!--Doors -->
|
<!--Doors -->
|
||||||
<movevent event="StepOut" itemid="1643" script="misc/doors.lua" />
|
<movevent event="StepOut" itemid="1643" script="misc/doors.lua" />
|
||||||
|
21
data/movements/scripts/goroma/back_ferumbras_floor.lua
Normal file
21
data/movements/scripts/goroma/back_ferumbras_floor.lua
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
function onStepIn(creature, item, position, fromPosition)
|
||||||
|
local player = creature:getPlayer()
|
||||||
|
if not player then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
doRelocate(item:getPosition(),{x = 32121, y = 32709, z = 7})
|
||||||
|
Game.sendMagicEffect({x = 32121, y = 32709, z = 7}, 11)
|
||||||
|
|
||||||
|
local isInGhostMode = player:isInGhostMode()
|
||||||
|
local spectators = Game.getSpectators(player:getPosition(), false, true, 3, 3)
|
||||||
|
for i = 1, #spectators do
|
||||||
|
player:say("This entrance has been sealed by the Edron Academy.", TALKTYPE_MONSTER_SAY, isInGhostMode, spectators[i], player:getPosition())
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function onAddItem(item, tileitem, position)
|
||||||
|
doRelocate(item:getPosition(),{x = 32121, y = 32709, z = 7})
|
||||||
|
item:getPosition():sendMagicEffect(11)
|
||||||
|
Game.sendMagicEffect({x = 32121, y = 32709, z = 7}, 11)
|
||||||
|
end
|
16
data/movements/scripts/goroma/back_kharos.lua
Normal file
16
data/movements/scripts/goroma/back_kharos.lua
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
function onStepIn(creature, item, position, fromPosition)
|
||||||
|
local player = creature:getPlayer()
|
||||||
|
if not player then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
doRelocate(item:getPosition(),{x = 32101, y = 32545, z = 07})
|
||||||
|
item:getPosition():sendMagicEffect(11)
|
||||||
|
Game.sendMagicEffect({x = 32101, y = 32545, z = 07}, 11)
|
||||||
|
end
|
||||||
|
|
||||||
|
function onAddItem(item, tileitem, position)
|
||||||
|
doRelocate(item:getPosition(),{x = 32101, y = 32545, z = 07})
|
||||||
|
item:getPosition():sendMagicEffect(11)
|
||||||
|
Game.sendMagicEffect({x = 32101, y = 32545, z = 07}, 11)
|
||||||
|
end
|
21
data/movements/scripts/goroma/back_malada.lua
Normal file
21
data/movements/scripts/goroma/back_malada.lua
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
function onStepIn(creature, item, position, fromPosition)
|
||||||
|
local player = creature:getPlayer()
|
||||||
|
if not player then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
if player:getStorageValue(17512) ~= 1 then
|
||||||
|
player:setStorageValue(17512, 1)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
doRelocate(item:getPosition(),{x = 31919, y = 32659, z = 08})
|
||||||
|
item:getPosition():sendMagicEffect(11)
|
||||||
|
Game.sendMagicEffect({x = 31919, y = 32659, z = 08}, 11)
|
||||||
|
end
|
||||||
|
|
||||||
|
function onAddItem(item, tileitem, position)
|
||||||
|
doRelocate(item:getPosition(),{x = 31919, y = 32659, z = 08})
|
||||||
|
item:getPosition():sendMagicEffect(11)
|
||||||
|
Game.sendMagicEffect({x = 31919, y = 32659, z = 08}, 11)
|
||||||
|
end
|
21
data/movements/scripts/goroma/back_ramoa.lua
Normal file
21
data/movements/scripts/goroma/back_ramoa.lua
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
function onStepIn(creature, item, position, fromPosition)
|
||||||
|
local player = creature:getPlayer()
|
||||||
|
if not player then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
if player:getStorageValue(17510) ~= 1 then
|
||||||
|
player:setStorageValue(17510, 1)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
doRelocate(item:getPosition(),{x = 32036, y = 32558, z = 08})
|
||||||
|
item:getPosition():sendMagicEffect(11)
|
||||||
|
Game.sendMagicEffect({x = 32036, y = 32558, z = 08}, 11)
|
||||||
|
end
|
||||||
|
|
||||||
|
function onAddItem(item, tileitem, position)
|
||||||
|
doRelocate(item:getPosition(),{x = 32036, y = 32558, z = 08})
|
||||||
|
item:getPosition():sendMagicEffect(11)
|
||||||
|
Game.sendMagicEffect({x = 32036, y = 32558, z = 08}, 11)
|
||||||
|
end
|
@ -0,0 +1,11 @@
|
|||||||
|
function onStepIn(creature, item, position, fromPosition)
|
||||||
|
doRelocate(item:getPosition(),{x = 31919, y = 32594, z = 10})
|
||||||
|
item:getPosition():sendMagicEffect(11)
|
||||||
|
Game.sendMagicEffect({x = 31919, y = 32594, z = 10}, 11)
|
||||||
|
end
|
||||||
|
|
||||||
|
function onAddItem(item, tileitem, position)
|
||||||
|
doRelocate(item:getPosition(),{x = 31919, y = 32594, z = 10})
|
||||||
|
item:getPosition():sendMagicEffect(11)
|
||||||
|
Game.sendMagicEffect({x = 31919, y = 32594, z = 10}, 11)
|
||||||
|
end
|
21
data/movements/scripts/goroma/back_talahu.lua
Normal file
21
data/movements/scripts/goroma/back_talahu.lua
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
function onStepIn(creature, item, position, fromPosition)
|
||||||
|
local player = creature:getPlayer()
|
||||||
|
if not player then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
if player:getStorageValue(17511) ~= 1 then
|
||||||
|
player:setStorageValue(17511, 1)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
doRelocate(item:getPosition(),{x = 31948, y = 32554, z = 08})
|
||||||
|
item:getPosition():sendMagicEffect(11)
|
||||||
|
Game.sendMagicEffect({x = 31948, y = 32554, z = 08}, 11)
|
||||||
|
end
|
||||||
|
|
||||||
|
function onAddItem(item, tileitem, position)
|
||||||
|
doRelocate(item:getPosition(),{x = 31948, y = 32554, z = 08})
|
||||||
|
item:getPosition():sendMagicEffect(11)
|
||||||
|
Game.sendMagicEffect({x = 31948, y = 32554, z = 08}, 11)
|
||||||
|
end
|
16
data/movements/scripts/goroma/energy_barrier.lua
Normal file
16
data/movements/scripts/goroma/energy_barrier.lua
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
function onStepIn(creature, item, position, fromPosition)
|
||||||
|
local player = creature:getPlayer()
|
||||||
|
if not player then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
if player:getStorageValue(17509) < 5 then
|
||||||
|
position:sendMagicEffect(CONST_ME_ENERGYHIT)
|
||||||
|
|
||||||
|
position.x = position.x + 2
|
||||||
|
player:teleportTo(position)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
return true
|
||||||
|
end
|
25
data/movements/scripts/goroma/energy_barrier_kharos.lua
Normal file
25
data/movements/scripts/goroma/energy_barrier_kharos.lua
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
function onStepIn(creature, item, position, fromPosition)
|
||||||
|
local player = creature:getPlayer()
|
||||||
|
if not player then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
if player:getStorageValue(17513) ~= 2 then
|
||||||
|
player:setStorageValue(17513, 1)
|
||||||
|
doRelocate(item:getPosition(),{x = 32121, y = 32709, z = 7})
|
||||||
|
Game.sendMagicEffect({x = 32121, y = 32709, z = 7}, 11)
|
||||||
|
|
||||||
|
local isInGhostMode = player:isInGhostMode()
|
||||||
|
local spectators = Game.getSpectators(player:getPosition(), false, true, 3, 3)
|
||||||
|
for i = 1, #spectators do
|
||||||
|
player:say("This entrance has been sealed by the Edron Academy.", TALKTYPE_MONSTER_SAY, isInGhostMode, spectators[i], player:getPosition())
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
doRelocate(item:getPosition(),{x = 32121, y = 32703, z = 7})
|
||||||
|
Game.sendMagicEffect({x = 32121, y = 32703, z = 7}, 11)
|
||||||
|
player:setStorageValue(17513, 1)
|
||||||
|
|
||||||
|
return true
|
||||||
|
end
|
11
data/movements/scripts/goroma/entrance_kharos.lua
Normal file
11
data/movements/scripts/goroma/entrance_kharos.lua
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
function onStepIn(creature, item, position, fromPosition)
|
||||||
|
local player = creature:getPlayer()
|
||||||
|
if not player then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
position.y = position.y - 1
|
||||||
|
player:teleportTo(position)
|
||||||
|
|
||||||
|
return true
|
||||||
|
end
|
16
data/movements/scripts/goroma/final_ferumbras_floor.lua
Normal file
16
data/movements/scripts/goroma/final_ferumbras_floor.lua
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
function onStepIn(creature, item, position, fromPosition)
|
||||||
|
local player = creature:getPlayer()
|
||||||
|
if not player then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
doRelocate(item:getPosition(),{x = 32121, y = 32693, z = 04})
|
||||||
|
item:getPosition():sendMagicEffect(11)
|
||||||
|
Game.sendMagicEffect({x = 32121, y = 32693, z = 04}, 11)
|
||||||
|
end
|
||||||
|
|
||||||
|
function onAddItem(item, tileitem, position)
|
||||||
|
doRelocate(item:getPosition(),{x = 32121, y = 32693, z = 04})
|
||||||
|
item:getPosition():sendMagicEffect(11)
|
||||||
|
Game.sendMagicEffect({x = 32121, y = 32693, z = 04}, 11)
|
||||||
|
end
|
31
data/movements/scripts/goroma/sacrifice_mushroom_talahu.lua
Normal file
31
data/movements/scripts/goroma/sacrifice_mushroom_talahu.lua
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
function onStepIn(creature, item, position, fromPosition)
|
||||||
|
local player = creature:getPlayer()
|
||||||
|
if not player then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
if Game.isItemThere({x = 31918, y = 32598, z = 10},3723) and Game.isItemThere({x = 31918, y = 32599, z = 10},3725) and Game.isItemThere({x = 31920, y = 32598, z = 10},3732) and Game.isItemThere({x = 31920, y = 32599, z = 10},3728) then
|
||||||
|
Game.sendMagicEffect({x = 31918, y = 32598, z = 10}, 15)
|
||||||
|
Game.removeItemOnMap({x = 31918, y = 32598, z = 10}, 3723)
|
||||||
|
Game.sendMagicEffect({x = 31918, y = 32599, z = 10}, 15)
|
||||||
|
Game.removeItemOnMap({x = 31918, y = 32599, z = 10}, 3725)
|
||||||
|
Game.sendMagicEffect({x = 31920, y = 32598, z = 10}, 15)
|
||||||
|
Game.removeItemOnMap({x = 31920, y = 32598, z = 10}, 3732)
|
||||||
|
Game.sendMagicEffect({x = 31920, y = 32599, z = 10}, 15)
|
||||||
|
Game.removeItemOnMap({x = 31920, y = 32599, z = 10}, 3728)
|
||||||
|
|
||||||
|
doRelocate(item:getPosition(),{x = 31914, y = 32605, z = 10})
|
||||||
|
item:getPosition():sendMagicEffect(11)
|
||||||
|
Game.sendMagicEffect({x = 31914, y = 32605, z = 10}, 11)
|
||||||
|
else
|
||||||
|
doRelocate(item:getPosition(),{x = 31919, y = 32597, z = 10})
|
||||||
|
item:getPosition():sendMagicEffect(11)
|
||||||
|
Game.sendMagicEffect({x = 31919, y = 32597, z = 10}, 11)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function onAddItem(item, tileitem, position)
|
||||||
|
doRelocate(item:getPosition(),{x = 31915, y = 32606, z = 10})
|
||||||
|
item:getPosition():sendMagicEffect(11)
|
||||||
|
Game.sendMagicEffect({x = 31915, y = 32606, z = 10}, 11)
|
||||||
|
end
|
16
data/movements/scripts/goroma/second_ferumbras_floor.lua
Normal file
16
data/movements/scripts/goroma/second_ferumbras_floor.lua
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
function onStepIn(creature, item, position, fromPosition)
|
||||||
|
local player = creature:getPlayer()
|
||||||
|
if not player then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
doRelocate(item:getPosition(),{x = 32124, y = 32694, z = 05})
|
||||||
|
item:getPosition():sendMagicEffect(11)
|
||||||
|
Game.sendMagicEffect({x = 32124, y = 32694, z = 05}, 11)
|
||||||
|
end
|
||||||
|
|
||||||
|
function onAddItem(item, tileitem, position)
|
||||||
|
doRelocate(item:getPosition(),{x = 32124, y = 32694, z = 05})
|
||||||
|
item:getPosition():sendMagicEffect(11)
|
||||||
|
Game.sendMagicEffect({x = 32124, y = 32694, z = 05}, 11)
|
||||||
|
end
|
22
data/movements/scripts/goroma/to_malada.lua
Normal file
22
data/movements/scripts/goroma/to_malada.lua
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
function onStepIn(creature, item, position, fromPosition)
|
||||||
|
local player = creature:getPlayer()
|
||||||
|
if not player then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
if player:getStorageValue(17512) ~= 1 then
|
||||||
|
Game.sendMagicEffect({x = 31926, y = 32656, z = 08}, 11)
|
||||||
|
player:teleportTo({x = 31926, y = 32656, z = 08})
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
doRelocate(item:getPosition(),{x = 32021, y = 32680, z = 08})
|
||||||
|
item:getPosition():sendMagicEffect(11)
|
||||||
|
Game.sendMagicEffect({x = 32021, y = 32680, z = 08}, 11)
|
||||||
|
end
|
||||||
|
|
||||||
|
function onAddItem(item, tileitem, position)
|
||||||
|
doRelocate(item:getPosition(),{x = 32021, y = 32680, z = 08})
|
||||||
|
item:getPosition():sendMagicEffect(11)
|
||||||
|
Game.sendMagicEffect({x = 32021, y = 32680, z = 08}, 11)
|
||||||
|
end
|
22
data/movements/scripts/goroma/to_ramoa.lua
Normal file
22
data/movements/scripts/goroma/to_ramoa.lua
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
function onStepIn(creature, item, position, fromPosition)
|
||||||
|
local player = creature:getPlayer()
|
||||||
|
if not player then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
if player:getStorageValue(17510) ~= 1 then
|
||||||
|
Game.sendMagicEffect({x = 32043, y = 32559, z = 08}, 11)
|
||||||
|
player:teleportTo({x = 32043, y = 32559, z = 08})
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
doRelocate(item:getPosition(),{x = 31948, y = 32554, z = 08})
|
||||||
|
item:getPosition():sendMagicEffect(11)
|
||||||
|
Game.sendMagicEffect({x = 31948, y = 32554, z = 08}, 11)
|
||||||
|
end
|
||||||
|
|
||||||
|
function onAddItem(item, tileitem, position)
|
||||||
|
doRelocate(item:getPosition(),{x = 31948, y = 32554, z = 08})
|
||||||
|
item:getPosition():sendMagicEffect(11)
|
||||||
|
Game.sendMagicEffect({x = 31948, y = 32554, z = 08}, 11)
|
||||||
|
end
|
22
data/movements/scripts/goroma/to_talahu.lua
Normal file
22
data/movements/scripts/goroma/to_talahu.lua
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
function onStepIn(creature, item, position, fromPosition)
|
||||||
|
local player = creature:getPlayer()
|
||||||
|
if not player then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
if player:getStorageValue(17511) ~= 1 then
|
||||||
|
Game.sendMagicEffect({x = 31951, y = 32555, z = 08}, 11)
|
||||||
|
player:teleportTo({x = 31951, y = 32555, z = 08})
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
doRelocate(item:getPosition(),{x = 31919, y = 32659, z = 08})
|
||||||
|
item:getPosition():sendMagicEffect(11)
|
||||||
|
Game.sendMagicEffect({x = 31919, y = 32659, z = 08}, 11)
|
||||||
|
end
|
||||||
|
|
||||||
|
function onAddItem(item, tileitem, position)
|
||||||
|
doRelocate(item:getPosition(),{x = 31919, y = 32659, z = 08})
|
||||||
|
item:getPosition():sendMagicEffect(11)
|
||||||
|
Game.sendMagicEffect({x = 31919, y = 32659, z = 08}, 11)
|
||||||
|
end
|
@ -74,7 +74,7 @@ local list = {
|
|||||||
[5258] = {x = 0, y = -1, z = -1},
|
[5258] = {x = 0, y = -1, z = -1},
|
||||||
[5259] = {x = -1, y = 0, z = -1},
|
[5259] = {x = -1, y = 0, z = -1},
|
||||||
[5544] = {x = 0, y = 0, z = 1},
|
[5544] = {x = 0, y = 0, z = 1},
|
||||||
[5691] = {x = 0, y = 0, z = 1},
|
[5691] = {x = 1, y = 0, z = 1},
|
||||||
[5731] = {x = 0, y = 0, z = 1},
|
[5731] = {x = 0, y = 0, z = 1},
|
||||||
[5763] = {x = 0, y = 0, z = 1},
|
[5763] = {x = 0, y = 0, z = 1},
|
||||||
}
|
}
|
||||||
|
34
data/movements/scripts/misc/turtles.lua
Normal file
34
data/movements/scripts/misc/turtles.lua
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
local config = {
|
||||||
|
[51191] = Position(32359, 32901, 7),
|
||||||
|
[51192] = Position(32340, 32538, 7),
|
||||||
|
[51193] = Position(32472, 32869, 7),
|
||||||
|
[51194] = Position(32415, 32916, 7),
|
||||||
|
[51195] = Position(32490, 32979, 7),
|
||||||
|
[51196] = Position(32440, 32971, 7),
|
||||||
|
[51197] = Position(32523, 32923, 7),
|
||||||
|
[51198] = Position(32527, 32951, 7)
|
||||||
|
}
|
||||||
|
|
||||||
|
function onStepIn(creature, item, position, fromPosition)
|
||||||
|
local player = creature:getPlayer()
|
||||||
|
if not player then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
local targetPosition = config[item:getMovementId()]
|
||||||
|
if not targetPosition then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
if item:getMovementId() == 51191 and player:getStorageValue(17502) < 13 then
|
||||||
|
player:teleportTo(Position(32340, 32540, 7))
|
||||||
|
position:sendMagicEffect(CONST_ME_TELEPORT)
|
||||||
|
Position(32340, 32540, 7):sendMagicEffect(CONST_ME_TELEPORT)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
player:teleportTo(targetPosition)
|
||||||
|
position:sendMagicEffect(CONST_ME_TELEPORT)
|
||||||
|
targetPosition:sendMagicEffect(CONST_ME_TELEPORT)
|
||||||
|
return true
|
||||||
|
end
|
@ -6,7 +6,7 @@ Home = [32417,31583,7]
|
|||||||
Radius = 3
|
Radius = 3
|
||||||
|
|
||||||
Behaviour = {
|
Behaviour = {
|
||||||
ADDRESS,"hello$",! -> "Hi."
|
ADDRESS,"hello$",! -> "Whatcha do in my place?"
|
||||||
ADDRESS,"hi$",! -> *
|
ADDRESS,"hi$",! -> *
|
||||||
ADDRESS,! -> Idle
|
ADDRESS,! -> Idle
|
||||||
BUSY,"hello$",! -> "Wait, %N.", Queue
|
BUSY,"hello$",! -> "Wait, %N.", Queue
|
||||||
@ -17,5 +17,7 @@ VANISH,! -> NOP
|
|||||||
"bye" -> "Bye.", Idle
|
"bye" -> "Bye.", Idle
|
||||||
"farewell" -> *
|
"farewell" -> *
|
||||||
|
|
||||||
|
"fight" -> "You. Weak."
|
||||||
|
"job" -> "No time for such a stupid thing."
|
||||||
|
"name" -> "Ajax."
|
||||||
}
|
}
|
||||||
|
@ -16,10 +16,13 @@ VANISH,! -> "Good bye."
|
|||||||
|
|
||||||
"bye" -> "Good bye.", Idle
|
"bye" -> "Good bye.", Idle
|
||||||
|
|
||||||
"buy" -> "I can offer you food."
|
"drinks" -> "Well, we usually drink around here, but right now we're running dry. However, I sell juice squeezers to make fruit juice."
|
||||||
|
"tavern" -> "I can offer you food and drinks. I also offer juice squeezers."
|
||||||
|
"buy" -> *
|
||||||
"do","you","sell" -> *
|
"do","you","sell" -> *
|
||||||
"do","you","have" -> *
|
"do","you","have" -> *
|
||||||
"food" -> "Are you looking for food? I have banana, blueberry, cheese, mango, meat, melon, orange, pear, pumpkin, red apple and strawberry."
|
"food" -> "Are you looking for food? I have cheese, ham and meat as well as a variety of fruits."
|
||||||
|
"fruits" -> "I have bananas, apples, oranges, strawberries, melons, pumpkin, blueberries, mangoes and pears, sweety."
|
||||||
|
|
||||||
"banana" -> Type=3587, Amount=1, Price=5, "Do you want to buy a banana for %P gold?", Topic=1
|
"banana" -> Type=3587, Amount=1, Price=5, "Do you want to buy a banana for %P gold?", Topic=1
|
||||||
"blueberry" -> Type=3588, Amount=1, Price=1, "Do you want to buy blueberry for %P gold?", Topic=1
|
"blueberry" -> Type=3588, Amount=1, Price=1, "Do you want to buy blueberry for %P gold?", Topic=1
|
||||||
@ -52,4 +55,23 @@ VANISH,! -> "Good bye."
|
|||||||
Topic=1,"yes",CountMoney>=Price -> "Here it is.", DeleteMoney, Create(Type)
|
Topic=1,"yes",CountMoney>=Price -> "Here it is.", DeleteMoney, Create(Type)
|
||||||
Topic=1,"yes" -> "I am sorry, but you do not have enough gold."
|
Topic=1,"yes" -> "I am sorry, but you do not have enough gold."
|
||||||
Topic=1 -> "Maybe later."
|
Topic=1 -> "Maybe later."
|
||||||
|
|
||||||
|
"mission",QuestValue(17520)=1,QuestValue(17521)=0 -> "You know, we have plenty of rum here but we lack some basic food. Especially food that easily becomes mouldy is a problem. Bring me 100 breads and you will help me a lot.", SetQuestValue(17521,1)
|
||||||
|
|
||||||
|
"mission",QuestValue(17521)=1 -> Type=3600, Amount=100, "Are you here to bring me the 100 pieces of bread that I requested?", Topic=2
|
||||||
|
"bread",QuestValue(17521)=1 -> *
|
||||||
|
Topic=2,"yes",Count(Type)>=Amount -> "What a joy. At least for a few days adequate supply is ensured.", Delete(Type), SetQuestValue(17521,2)
|
||||||
|
Topic=2,"yes" -> "Sorry, you do not have so many."
|
||||||
|
Topic=2 -> "Maybe another time."
|
||||||
|
|
||||||
|
"mission",QuestValue(17521)=2 -> "The sailors always tell tales about the famous beer of Carlin. You must know, alcohol is forbidden in that city. ...",
|
||||||
|
"The beer is served in a secret whisper bar anyway. Bring me a sample of the whisper beer, NOT the usual beer but whisper beer. I hope you are listening.", SetQuestValue(17521,3)
|
||||||
|
|
||||||
|
"mission",QuestValue(17521)=3 -> Type=6106, Amount=1, "Did you get a sample of the whisper beer from Carlin?", Topic=3
|
||||||
|
"bread",QuestValue(17521)=1 -> *
|
||||||
|
Topic=3,"yes",Count(Type)>=Amount -> "Thank you very much. I will test this beauty in privacy.", Delete(Type), SetQuestValue(17521,4)
|
||||||
|
Topic=3,"yes" -> "Sorry, you do not have it."
|
||||||
|
Topic=3 -> "Maybe another time."
|
||||||
|
|
||||||
|
"mission" -> "Sorry, I don't have any missions for you."
|
||||||
}
|
}
|
||||||
|
@ -21,12 +21,15 @@ VANISH,! -> "Oh well."
|
|||||||
"sail" -> "Where do you want to go? To Treasure Island?"
|
"sail" -> "Where do you want to go? To Treasure Island?"
|
||||||
"passage" -> *
|
"passage" -> *
|
||||||
|
|
||||||
"treasure island" -> Price=200, "Do you seek a passage to Treasure Island for %P?", Topic=1
|
"treasure","island" -> Price=200, "Do you seek a passage to Treasure Island for %P?", Topic=1
|
||||||
|
"peg","leg",QuestValue(17502)>5 -> Price=50, "Ohhhh. So... <lowers his voice> 'you know who' sent you so I sail you to 'you know where'. <wink> <wink> It will cost 50 gold to cover my expenses. Is it that what you wish?", Topic=2
|
||||||
|
|
||||||
Topic=1,"yes",PZBlock,! -> "First get rid of those blood stains! You are not going to ruin my vehicle!"
|
Topic=1,"yes",PZBlock,! -> "First get rid of those blood stains! You are not going to ruin my vehicle!"
|
||||||
|
Topic=2,"yes",PZBlock,! -> "First get rid of those blood stains! You are not going to ruin my vehicle!"
|
||||||
|
|
||||||
Topic=1,"yes",Premium,CountMoney>=Price -> "Set the sails!", DeleteMoney, Idle, EffectOpp(11), Teleport(32132,32913,7), EffectOpp(11)
|
Topic=1,"yes",Premium,CountMoney>=Price -> "Set the sails!", DeleteMoney, Idle, EffectOpp(11), Teleport(32132,32913,7), EffectOpp(11)
|
||||||
|
Topic=2,"yes",Premium,CountMoney>=Price -> "Set the sails!", DeleteMoney, Idle, EffectOpp(11), Teleport(32348,32625,7), EffectOpp(11)
|
||||||
|
|
||||||
Topic>0,"yes",CountMoney>=Price -> "I'm sorry, but you need a premium account in order to travel onboard our ships."
|
Topic>0,"yes",CountMoney>=Price -> "I'm sorry, but you need a premium account in order to travel onboard our ships."
|
||||||
Topic>0,"yes" -> "You don't have enough money."
|
Topic>0,"yes" -> "You don't have enough money."
|
||||||
Topic>0 -> "We would like to serve you some time."
|
Topic>0 -> "We would like to serve you some time."
|
||||||
|
@ -113,4 +113,9 @@ Topic=3,"yes",CountMoney<Price -> "Sorry, you do not have enough gold
|
|||||||
Topic=3,"yes" -> "Here you are. Look in your spellbook for the pronunciation of this spell.", DeleteMoney, EffectOpp(13), TeachSpell(String)
|
Topic=3,"yes" -> "Here you are. Look in your spellbook for the pronunciation of this spell.", DeleteMoney, EffectOpp(13), TeachSpell(String)
|
||||||
Topic=3 -> "Maybe next time."
|
Topic=3 -> "Maybe next time."
|
||||||
|
|
||||||
|
"mission",QuestValue(17502)=3 -> Price=200, "Oh, so you brought some gold from Eleonore to me?", Topic=4
|
||||||
|
"errand",QuestValue(17502)=3 -> *
|
||||||
|
|
||||||
|
Topic=4,"yes" -> "Hmm, it seems that Eleonore does trust you. Perhaps she is even right. However. Since we need some help right now I guess we can't be too picky. Return to Eleonore and tell her the secret password: 'peg leg'. She will tell you more about her problem.", DeleteMoney, SetQuestValue(17502,4)
|
||||||
|
Topic=4 -> "Hmm, interesting how do you even know about the errand then..."
|
||||||
}
|
}
|
||||||
|
@ -47,4 +47,51 @@ VANISH,! -> "Good bye."
|
|||||||
"banana" -> "A banana staff is the sign of a high ape magician."
|
"banana" -> "A banana staff is the sign of a high ape magician."
|
||||||
"pirates" -> "You have to understand that there are two groups of people that are called pirates. One consists of evil thieves and murderers for whom the word pirate actually stands for. ...",
|
"pirates" -> "You have to understand that there are two groups of people that are called pirates. One consists of evil thieves and murderers for whom the word pirate actually stands for. ...",
|
||||||
"The others are resistance fighters for whom old ideals are hold true and that are the assertors of the native people."
|
"The others are resistance fighters for whom old ideals are hold true and that are the assertors of the native people."
|
||||||
|
|
||||||
|
"spellbook",QuestValue(17509)=0,Count(6120)>=1 -> "Ah, thank you very much! I will honour his memory.", Amount=1, Delete(6120), SetQuestValue(17509,1)
|
||||||
|
"counterspell",QuestValue(17509)=0 -> "You should not talk about things you don't know anything about."
|
||||||
|
"energy","field",QuestValue(17509)=0 -> *
|
||||||
|
"spellbook",QuestValue(17509)=0 -> *
|
||||||
|
"energy","field",QuestValue(17509)>0 -> "Ah, the energy barrier set up by the cult is maintained by lousy magic, but is still effective. Without a proper counterspell you won't be able to pass it."
|
||||||
|
|
||||||
|
"counterspell",QuestValue(17509)=1 -> "You mean, you are interested in a counterspell to cross the energy barrier on Goroma?", Topic=1
|
||||||
|
Topic=1,"yes" -> "This is really not advisable. Behind this barrier, strong forces are raging violently. Are you sure that you want to go there?", Topic=2
|
||||||
|
Topic=1 -> "It's much safer for you to stay here anyway, trust me."
|
||||||
|
Topic=2,"yes" -> "I guess I cannot stop you then. Since you told me about my apprentice, it is my turn to help you. I will perform a ritual for you, but I need a few ingredients. ...",
|
||||||
|
"Bring me one fresh dead chicken, one fresh dead rat and one fresh dead black sheep, in that order. Summoned ones will do as well as natural ones.", SetQuestValue(17509,2)
|
||||||
|
Topic=2 -> "It's much safer for you to stay here anyway, trust me."
|
||||||
|
|
||||||
|
"counterspell",QuestValue(17509)=2 -> Type=4330, Amount=1, "Did you bring the fresh dead chicken?", Topic=3
|
||||||
|
"chicken",QuestValue(17509)=2 -> *
|
||||||
|
Topic=3,"yes",Count(Type)>=Amount -> "Very good! <mumblemumble> 'Your soul shall be protected!' Now, I need a fresh dead rat.", Delete(Type), SetQuestValue(17509,3)
|
||||||
|
Topic=3,"yes" -> "You don't have any dead chicken with you don't you?"
|
||||||
|
Topic=3 -> "Maybe another time."
|
||||||
|
|
||||||
|
"counterspell",QuestValue(17509)=3 -> Type=3994, Amount=1, "Did you bring the fresh dead rat?", Topic=4
|
||||||
|
"rat",QuestValue(17509)=3 -> *
|
||||||
|
Topic=4,"yes",Count(Type)>=Amount -> "Very good! <chants and dances> 'You shall face black magic without fear!' Now, I need a fresh dead black sheep.", Delete(Type), SetQuestValue(17509,4)
|
||||||
|
Topic=4,"yes" -> "You don't have any dead rat with you don't you?"
|
||||||
|
Topic=4 -> "Maybe another time."
|
||||||
|
|
||||||
|
"counterspell",QuestValue(17509)=4 -> Type=4095, Amount=1, "Did you bring the fresh dead black sheep?", Topic=5
|
||||||
|
"sheep",QuestValue(17509)=4 -> *
|
||||||
|
Topic=5,"yes",Count(Type)>=Amount -> "Very good! <stomps staff on ground> 'EVIL POWERS SHALL NOT KEEP YOU ANYMORE! SO BE IT!'", Delete(Type), SetQuestValue(17509,5)
|
||||||
|
Topic=5,"yes" -> "You don't have any dead black sheep with you don't you?"
|
||||||
|
Topic=5 -> "Maybe another time."
|
||||||
|
|
||||||
|
"counterspell",QuestValue(17509)>4 -> "Hm. I don't think you need another one of my counterspells to cross the barrier on Goroma."
|
||||||
|
|
||||||
|
"mission",QuestValue(17520)=1,QuestValue(17524)=0 -> "The evil cult has placed a curse on one of the captains here. I need at least five of their pirate voodoo dolls to lift that curse.", SetQuestValue(17524,1)
|
||||||
|
|
||||||
|
"mission",QuestValue(17524)>0,QuestValue(17524)<5 -> Type=5810, Amount=1, "Did you bring one of the required pirate voodoo dolls?", Topic=6
|
||||||
|
"doll",QuestValue(17524)>0,QuestValue(17524)<5 -> *
|
||||||
|
|
||||||
|
"mission",QuestValue(17524)=5 -> Type=5810, Amount=1, "Did you bring the last of the required voodoo dolls?", Topic=6
|
||||||
|
"doll",QuestValue(17524)=5, -> *
|
||||||
|
Topic=6,"yes",Count(Type)>=Amount -> "Now I can weaken that curse a bit. Thank you.", Delete(Type), SetQuestValue(17524,QuestValue(17524)+1)
|
||||||
|
Topic=6,"yes",Count(Type)>=Amount,QuestValue(17524)=5 -> "Finally I can put an end to that curse. I thank you so much.", Delete(Type), SetQuestValue(17524,QuestValue(17524)+1)
|
||||||
|
Topic=6,"yes" -> "Sorry, you do not have it."
|
||||||
|
Topic=6 -> "Maybe another time."
|
||||||
|
|
||||||
|
"mission" -> "Sorry, I don't have any missions for you."
|
||||||
}
|
}
|
||||||
|
@ -26,4 +26,27 @@ VANISH,! -> "Bye"
|
|||||||
Topic=1,"yes",CountMoney>=Price -> "Here you go. Those would fit nicely into your house, showing that you're a fan and supporter and all that.", DeleteMoney, Create(Type)
|
Topic=1,"yes",CountMoney>=Price -> "Here you go. Those would fit nicely into your house, showing that you're a fan and supporter and all that.", DeleteMoney, Create(Type)
|
||||||
Topic=1,"yes" -> "Come back when you have enough money."
|
Topic=1,"yes" -> "Come back when you have enough money."
|
||||||
Topic=1 -> "Maybe next time."
|
Topic=1 -> "Maybe next time."
|
||||||
|
|
||||||
|
"mission",QuestValue(17520)=1,QuestValue(17523)=0 -> "I need a new quality atlas for our captains. Only one of the best will do it. I heard the explorers society sells the best, but only to members of a certain rank. You will have to get this rank or ask a high ranking member to buy it for you.", SetQuestValue(17523,1)
|
||||||
|
|
||||||
|
"mission",QuestValue(17523)=1 -> Type=6108, Amount=1, "Did you get an atlas of the explorers society as I requested?", Topic=2
|
||||||
|
"atlas",QuestValue(17523)=1 -> *
|
||||||
|
Topic=2,"yes",Count(Type)>=Amount -> "Indeed, what a fine work... the book I mean. Your work was acceptable all in all.", Delete(Type), SetQuestValue(17523,2)
|
||||||
|
Topic=2,"yes" -> "Sorry, you do not have it."
|
||||||
|
Topic=2 -> "Maybe another time."
|
||||||
|
|
||||||
|
"mission",QuestValue(17525)=0,QuestValue(17520)>4 -> "You did some impressive things. I think people here start considering you as one of us. But these are dire times and everyone of us is expected to give his best and even exceed himself. Do you think you can handle that?", Topic=3
|
||||||
|
Topic=3,"yes" -> "I am glad to hear this. Please listen. The pirates on Nargor are breeding tortoises. They think eating tortoises makes a hard man even harder. ...",
|
||||||
|
"However I am quite fond of tortoises and can't stand the thought of them being eaten. So I convinced Captain Striker that I can train them to help us. As a substitute for rafts and such ...",
|
||||||
|
"All I need is one tortoise egg from Nargor. This is the opportunity to save a tortoise from a gruesome fate! ...",
|
||||||
|
"I will ask Sebastian to bring you there. Travel to Nargor, find their tortoise eggs and bring me at least one of them.", SetQuestValue(17525,1)
|
||||||
|
Topic=3 -> "Maybe another time."
|
||||||
|
|
||||||
|
"mission",QuestValue(17525)=1 -> Type=6125, Amount=1, "Did you rescue one of those poor soon-to-be baby tortoises from Nargor?", Topic=4
|
||||||
|
"egg",QuestValue(17525)=1 -> *
|
||||||
|
Topic=4,"yes",Count(Type)>=Amount -> "A real tortoise egg ... I guess you are more accustomed to rescue some noblewoman in distress but you did something good today.", Delete(Type), SetQuestValue(17525,2)
|
||||||
|
Topic=4,"yes" -> "Sorry, you do not have it."
|
||||||
|
Topic=4 -> "Maybe another time."
|
||||||
|
|
||||||
|
"mission" -> "Sorry, I don't have any missions for you."
|
||||||
}
|
}
|
||||||
|
@ -17,4 +17,41 @@ VANISH,! -> "Oh well."
|
|||||||
"bye" -> "Good bye.", Idle
|
"bye" -> "Good bye.", Idle
|
||||||
"farewell" -> *
|
"farewell" -> *
|
||||||
|
|
||||||
|
"ring",QuestValue(17502)=0 -> "My ring was stolen by a parrot, directly from my dressing table near the window. It flew to the nearby mountains and I fear my ring will be lost forever. Whoever returns it to me will be rewarded generously. ...",
|
||||||
|
"I guess that evil parrot hid the ring somewhere on a high tree or a rock so that you might need a rake to get it.", SetQuestValue(17502,1)
|
||||||
|
"mission",QuestValue(17502)=0 -> *
|
||||||
|
|
||||||
|
"ring",QuestValue(17502)=1 -> Type=6093, Amount=1, Price=150, "Oh, my beloved ring! Have you found it and want to return it to me?", Topic=1
|
||||||
|
"mission",QuestValue(17502)=1 -> *
|
||||||
|
|
||||||
|
Topic=1,"yes",Count(Type)>=Amount -> "Oh, thank you so much! Take this gold as a reward. ... which reminds me, I would need some help in another matter. It is only a small errand. Are you interested?", Delete(Type), CreateMoney, SetQuestValue(17502,2), Topic=2
|
||||||
|
Topic=1,"yes" -> "You don't have it!"
|
||||||
|
Topic=1 -> "Too bad."
|
||||||
|
|
||||||
|
"ring",QuestValue(17502)=2 -> Price=200, "I would need some help in another matter. It is only a small errand. Are you interested?", Topic=3
|
||||||
|
"mission",QuestValue(17502)=2 -> *
|
||||||
|
"errand",QuestValue(17502)=2 -> *
|
||||||
|
Topic=2,"yes" -> Price=200, "Thank you! It is not a difficult matter but a rather urgent one. I need to send some money to a person in town. Would you be willing to run this small errand for me?", Topic=3
|
||||||
|
Topic=2 -> "Too bad."
|
||||||
|
Topic=3,"yes" -> "I was hoping that you'd agree. Please deliver these 200 gold pieces to the herbalist Charlotta in the south-western part of the town. If you return from this errand, I will grant you 5 gold pieces as reward for your efforts.", CreateMoney, SetQuestValue(17502,3)
|
||||||
|
Topic=3 -> "Too bad."
|
||||||
|
|
||||||
|
"mission",QuestValue(17502)=3 -> "Charlotta is still waiting for your delivery."
|
||||||
|
"errand",QuestValue(17502)=3 -> *
|
||||||
|
|
||||||
|
"mission",QuestValue(17502)=4 -> Price=5, "Great, thank you! As promised, here are your 5 gold pieces. Is there ... anything left that you might want to discuss with me?", CreateMoney, SetQuestValue(17502,5)
|
||||||
|
"errand",QuestValue(17502)=4 -> *
|
||||||
|
|
||||||
|
"peg","leg",QuestValue(17502)=5 -> "You have returned my ring and proven yourself as trustworthy. There is something I have to discuss with you. Are you willing to listen?", Topic=4
|
||||||
|
Topic=4,"yes" -> "I am glad to hear that. So please listen: Due to circumstances too complicated to explain now, I met Captain Ray Striker. He is ... a freedom fighter and would not find my father's acceptance, but we fell in love ...",
|
||||||
|
"Even though he had to hide for a while, we have stayed in contact for a long time now. And our love grew even further against all odds ...",
|
||||||
|
"However, recently we lost contact. I don't know what has happened to him and fear the worst ...",
|
||||||
|
"We always have been aware that something terrible might happen to him due to his lifestyle. But perhaps there is a harmless explanation for the absence of messages <holds her tears back>. I have arranged a passage for you to Ray's hiding place ...",
|
||||||
|
"Contact Captain Waverider, the old fisherman, and tell him the secret word 'peg leg'. He will make sure that you arrive safely ...",
|
||||||
|
"Please look for Ray and find out what happened to him and why he was not able to answer. Return to me as soon as you have found something out. I wish you a good journey.", SetQuestValue(17502,6)
|
||||||
|
Topic=4 -> "Too bad."
|
||||||
|
|
||||||
|
"ray","striker",QuestValue(17502)=13 -> "<blushes> Oh, he is so wonderful. A very special man with a special place in my heart.", Topic=5
|
||||||
|
Topic=5,"mermaid" -> "I can't thank you enough for freeing my beloved Ray from that evil spell. I am still shocked that a mermaid could steal his love that easily.", SetQuestValue(17502,14)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -79,6 +79,7 @@ Topic=2 -> "Maybe you will buy it another time."
|
|||||||
"lute" -> Type=2950, Amount=1, Price=195, "Do you want to buy a lute for %P gold?", Topic=1
|
"lute" -> Type=2950, Amount=1, Price=195, "Do you want to buy a lute for %P gold?", Topic=1
|
||||||
"drum" -> Type=2952, Amount=1, Price=140, "Do you want to buy a drum for %P gold?", Topic=1
|
"drum" -> Type=2952, Amount=1, Price=140, "Do you want to buy a drum for %P gold?", Topic=1
|
||||||
"simple","fanfare" -> Type=2954, Amount=1, Price=150, "Do you want to buy a simple fanfare for %P gold?", Topic=1
|
"simple","fanfare" -> Type=2954, Amount=1, Price=150, "Do you want to buy a simple fanfare for %P gold?", Topic=1
|
||||||
|
"love","peom" -> Type=5952, Amount=1, Price=200, "Do you want to buy a love poem for %P gold?", Topic=1
|
||||||
|
|
||||||
%1,1<%1,"lyre" -> Type=2949, Amount=%1, Price=120*%1, "Do you want to buy %A lyre for %P gold?", Topic=1
|
%1,1<%1,"lyre" -> Type=2949, Amount=%1, Price=120*%1, "Do you want to buy %A lyre for %P gold?", Topic=1
|
||||||
%1,1<%1,"lute" -> Type=2950, Amount=%1, Price=195*%1, "Do you want to buy %A lute for %P gold?", Topic=1
|
%1,1<%1,"lute" -> Type=2950, Amount=%1, Price=195*%1, "Do you want to buy %A lute for %P gold?", Topic=1
|
||||||
|
@ -122,6 +122,7 @@ Topic=5,"yes",CountMoney<Price,! -> "Oh. You do not have enough money
|
|||||||
Topic=5,"yes",! -> "So receive the wisdom of solitude, pilgrim", DeleteMoney, EffectOpp(13), SetQuestValue(101,1), Bless(4)
|
Topic=5,"yes",! -> "So receive the wisdom of solitude, pilgrim", DeleteMoney, EffectOpp(13), SetQuestValue(101,1), Bless(4)
|
||||||
Topic=5,! -> "Ok. As you wish."
|
Topic=5,! -> "Ok. As you wish."
|
||||||
|
|
||||||
|
"letter",QuestValue(17522)=1,Count(6113)>=1 -> "A letter from that youngster Morgan? I believed him dead since years. These news are good news indeed. Thank you very much, my friend.", DeleteAmount(6113, 1), SetQuestValue(17522,2)
|
||||||
|
"letter" -> "I am not waiting for any letters from strangers."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -322,3 +322,17 @@ Topic=56,"yes",CountMoney>=Price -> "Here, better don't lose it.", DeleteMoney,
|
|||||||
Topic=56,"yes" -> "Sorry, you don't have the money for this transaction."
|
Topic=56,"yes" -> "Sorry, you don't have the money for this transaction."
|
||||||
Topic=56 -> "Is there anything else I can do for you?"
|
Topic=56 -> "Is there anything else I can do for you?"
|
||||||
|
|
||||||
|
######################
|
||||||
|
"atlas" -> Amount=1, Type=6108, Price=150, "Do you want to buy an atlas for %P gold?", Topic=57
|
||||||
|
|
||||||
|
Topic=57,"yes",QuestValue(300)<5 -> "Oh, sorry but we sell atlas only for members with a special rank."
|
||||||
|
Topic=57,"yes",CountMoney>=Price -> "Here you are.", DeleteMoney, Create(Type)
|
||||||
|
Topic=57,"yes" -> "Sorry, you don't have the money for this transaction."
|
||||||
|
Topic=57 -> "Is there anything else I can do for you?"
|
||||||
|
|
||||||
|
%1,1<%1,"atlas" -> Amount=%1, Type=6108, Price=150*%1, "Do you want to buy %A atlas for %P gold?", Topic=58
|
||||||
|
|
||||||
|
Topic=58,"yes",QuestValue(300)<5 -> "Oh, sorry but we sell atlas only for members with a special rank."
|
||||||
|
Topic=58,"yes",CountMoney>=Price -> "Here you are.", DeleteMoney, Create(Type)
|
||||||
|
Topic=58,"yes" -> "Sorry, you don't have the money for this transaction."
|
||||||
|
Topic=58 -> "Is there anything else I can do for you?"
|
||||||
|
@ -38,6 +38,7 @@ VANISH,! -> "Please come back, but don't tell others."
|
|||||||
"hugo" -> "I think Todd mentioned a Hugo once."
|
"hugo" -> "I think Todd mentioned a Hugo once."
|
||||||
"news" -> "Some travelers from Edron told about a great treasure guarded by cruel demons in the dungeons there."
|
"news" -> "Some travelers from Edron told about a great treasure guarded by cruel demons in the dungeons there."
|
||||||
"rumors" -> *
|
"rumors" -> *
|
||||||
|
"whisper","beer",QuestValue(17521)=3 -> Type=6106, Amount=1, Price=80, "Do you want to buy a bottle of our finest whisper beer for %P gold?", Topic=1
|
||||||
"beer" -> Type=2880, Data=3, Amount=1, Price=20, "Do you want to buy a mug of beer for %P gold?", Topic=1
|
"beer" -> Type=2880, Data=3, Amount=1, Price=20, "Do you want to buy a mug of beer for %P gold?", Topic=1
|
||||||
Topic=1,"yes",CountMoney>=Price -> "Here. Don't take it into the city though.", DeleteMoney, Create(Type)
|
Topic=1,"yes",CountMoney>=Price -> "Here. Don't take it into the city though.", DeleteMoney, Create(Type)
|
||||||
Topic=1,"yes" -> "Sorry, come back with more gold."
|
Topic=1,"yes" -> "Sorry, come back with more gold."
|
||||||
|
@ -12,7 +12,7 @@ ADDRESS,! -> Idle
|
|||||||
BUSY,"hello$",! -> "Wait a moment, %N. I'll be here soon.", Queue
|
BUSY,"hello$",! -> "Wait a moment, %N. I'll be here soon.", Queue
|
||||||
BUSY,"hi$",! -> *
|
BUSY,"hi$",! -> *
|
||||||
BUSY,! -> NOP
|
BUSY,! -> NOP
|
||||||
VANISH,! -> "Arrr!"
|
VANISH,! -> "Whenever your throat is dry, you know where to find my tavern."
|
||||||
|
|
||||||
"bye" -> "Whenever your throat is dry, you know where to find my tavern.", Idle
|
"bye" -> "Whenever your throat is dry, you know where to find my tavern.", Idle
|
||||||
"farewell" -> *
|
"farewell" -> *
|
||||||
@ -51,4 +51,14 @@ Topic=5,"no" -> "Oh come on, don't be a child."
|
|||||||
Topic=4,"yes",CountMoney>=100,Amount=6 -> Price=100, Type=5792, Amount=1, "Ok, here we go ... 6! You have won a dice, congratulations. One more game?", DeleteMoney, Create(Type), EffectMe(27), Topic=5
|
Topic=4,"yes",CountMoney>=100,Amount=6 -> Price=100, Type=5792, Amount=1, "Ok, here we go ... 6! You have won a dice, congratulations. One more game?", DeleteMoney, Create(Type), EffectMe(27), Topic=5
|
||||||
Topic=4,"yes",CountMoney>=100 -> Price=100, "Ok, here we go ... %A! You have lost. Har Har Har. One more game?", DeleteMoney, EffectMe(27), Topic=5
|
Topic=4,"yes",CountMoney>=100 -> Price=100, "Ok, here we go ... %A! You have lost. Har Har Har. One more game?", DeleteMoney, EffectMe(27), Topic=5
|
||||||
Topic=4,"yes" -> "You don't have so much money."
|
Topic=4,"yes" -> "You don't have so much money."
|
||||||
|
|
||||||
|
"mission",QuestValue(17520)=9,QuestValue(17531)=0 -> "Hmm, you look like a seasoned seadog. Kill Captain Ray Striker, bring me his lucky pillow as a proof and you are our hero!", SetQuestValue(17531,1)
|
||||||
|
|
||||||
|
"mission",QuestValue(17531)=1 -> Type=6105, Amount=1, "Do you have Striker's pillow?", Topic=7
|
||||||
|
"pillow",QuestValue(17531)=1 -> *
|
||||||
|
Topic=7,"yes",Count(Type)>=Amount -> "You DID it!!! Incredible! Boys, lets have a PAAAAAARTY!!!!", Delete(Type), SetQuestValue(17531,2)
|
||||||
|
Topic=7,"yes" -> "No you not!"
|
||||||
|
Topic=7 -> "Maybe another time."
|
||||||
|
|
||||||
|
"mission" -> "Sorry, I don't have any missions for you."
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@ Home = [32329,32528,7]
|
|||||||
Radius = 0
|
Radius = 0
|
||||||
|
|
||||||
Behaviour = {
|
Behaviour = {
|
||||||
ADDRESS,"hello$",! -> "You wouldn't keep a pretty lady like me waiting, would you?"
|
ADDRESS,"hello$",! -> "Oh, hello %N. A visitor, how nice!"
|
||||||
ADDRESS,"hi$",! -> *
|
ADDRESS,"hi$",! -> *
|
||||||
ADDRESS,! -> Idle
|
ADDRESS,! -> Idle
|
||||||
BUSY,"hello$",! -> "Wait a second please, %N.", Queue
|
BUSY,"hello$",! -> "Wait a second please, %N.", Queue
|
||||||
@ -16,4 +16,29 @@ VANISH,! -> "How rude."
|
|||||||
|
|
||||||
"bye" -> "Good bye, %N.", Idle
|
"bye" -> "Good bye, %N.", Idle
|
||||||
|
|
||||||
|
# The Mermaid Marina Quest
|
||||||
|
"silk","yarn",QuestValue(17504)=0 -> "Um. You mean, you really want me to touch that gooey spider silk just because you need yarn? Well... do you think that I'm pretty?", Topic=1
|
||||||
|
Topic=1,"yes" -> "Well, everyone would say that in your position. Do you think that I'm really, absolutely the most stunning being that you have ever seen?", Topic=2
|
||||||
|
Topic=1 -> "Get out of there!"
|
||||||
|
Topic=2,"yes" -> "<giggles> It's funny how easy it is to get humans to say what you want. Now, proving it will be even more fun! ...",
|
||||||
|
"You want me to touch something gooey, so you have to touch something gooey for me too. <giggles> ...",
|
||||||
|
"I love honey and I haven't eaten it in a while, so bring me 50 honeycombs and worship my beauty a little more, then we will see.", SetQuestValue(17504,1)
|
||||||
|
Topic=2 -> "Get out of there!"
|
||||||
|
|
||||||
|
"honeycomb",QuestValue(17504)=1 -> Type=5902, Amount=50, "Did you bring me the 50 honeycombs I requested and do you absolutely admire my beauty?", Topic=3
|
||||||
|
Topic=3,"yes",Count(Type)>=Amount -> "Oh goodie! Thank you! Okay... I guess since my fingers are sticky now anyway, I will help you. From now on, if you bring me 10 pieces of spider silk, I will create one spool of yarn.", Delete(Type), SetQuestValue(17504,2)
|
||||||
|
Topic=3,"yes" -> "Sorry, you do not have so many."
|
||||||
|
Topic=3 -> "Maybe another time."
|
||||||
|
|
||||||
|
"silk","yarn",QuestValue(17504)=2 -> Type=5879, Amount=10, "Okay... a deal is a deal, would you like me to create a spool of yarn from 10 pieces of spider silk?", Topic=4
|
||||||
|
Topic=4,"yes",Count(Type)>=Amount -> "Ew... gooey... there you go.", Delete(Type), Amount=1, Create(5886)
|
||||||
|
Topic=4,"yes" -> "Sorry, you do not have so many."
|
||||||
|
Topic=4 -> "Maybe another time."
|
||||||
|
|
||||||
|
#The Shattered Isles Quest
|
||||||
|
"Raymond","Striker",QuestValue(17502)=7 -> "<giggles> I think he has a crush on me. Well, silly man, it is only for his own good. This way he can get accustomed to TRUE beauty. And I won't give him up anymore now that he is mine.", SetQuestValue(17502,8)
|
||||||
|
|
||||||
|
"date",QuestValue(17502)=9 -> "Is that the best you can do? A true Djinn would have done something more poetic.", SetQuestValue(17502,10)
|
||||||
|
"date",QuestValue(17502)=12 -> "This lovely, exotic Djinn is a true poet. And he is asking me for a date? Excellent. Now I can finaly dump this human pirate. He was growing to be boring more and more with each day ...",
|
||||||
|
"As a little reward for your efforts I allow you to ride my sea turtles. Just look around at the shores and you will find them.", SetQuestValue(17502,13)
|
||||||
}
|
}
|
||||||
|
@ -17,4 +17,13 @@ VANISH,! -> "Good bye."
|
|||||||
"bye" -> "Good bye.", Idle
|
"bye" -> "Good bye.", Idle
|
||||||
"farewell" -> *
|
"farewell" -> *
|
||||||
|
|
||||||
|
"mission",QuestValue(17520)=1,QuestValue(17522)=0 -> Type=6113, Amount=1, "Hm, if you are that eager to work I have an idea how you could help me out. A distant relative of mine, the old sage Eremo lives on the isle Cormaya, near Edron. ...",
|
||||||
|
"He has not heard from me since ages. He might assume that I am dead. Since I don't want him to get into trouble for receiving a letter from a pirate I ask you to deliver it personally. ...",
|
||||||
|
"Of course it's a long journey but you asked for it. You will have to prove us your worth. Are you up to that?", Topic=1
|
||||||
|
Topic=1,"yes" -> "Alright, we will see. Here, take this letter and deliver it safely to old Eremo on Cormaya.", Create(Type), SetQuestValue(17522,1)
|
||||||
|
Topic=1 -> "Maybe another time."
|
||||||
|
|
||||||
|
"mission",QuestValue(17522)=1 -> "Please deliver my letter to Eremo as fast as you can."
|
||||||
|
"mission",QuestValue(17522)=2 -> "Thank you for delivering my letter to Eremo. I have no more missions for you.", SetQuestValue(17522,3)
|
||||||
|
"mission" -> "Sorry, I don't have any missions for you."
|
||||||
}
|
}
|
||||||
|
@ -27,8 +27,23 @@ VANISH,! -> "Farewell, human."
|
|||||||
"king" -> "Human kings come and go. Djinns are not such short-lived creatures and don't care much about humans."
|
"king" -> "Human kings come and go. Djinns are not such short-lived creatures and don't care much about humans."
|
||||||
"thais" -> "The noisy human cities are of absolutely no interest for me."
|
"thais" -> "The noisy human cities are of absolutely no interest for me."
|
||||||
"raymond striker" -> "Now that Marina and me have arranged a date, I hope this human is forgotten soon."
|
"raymond striker" -> "Now that Marina and me have arranged a date, I hope this human is forgotten soon."
|
||||||
"marina" -> "Marina and I have arranged a date already, I am so excited."
|
"marina",QuestValue(17502)>12 -> "Marina and I have arranged a date already, I am so excited."
|
||||||
"pirates" -> "Many humans sail the seas, I can't tell them apart. You humans look all the same to me."
|
"pirates" -> "Many humans sail the seas, I can't tell them apart. You humans look all the same to me."
|
||||||
"voodoo" -> "Some humans are tapping the energy of these isles with some strange results. Perhaps that explains the voodoo we've heard about."
|
"voodoo" -> "Some humans are tapping the energy of these isles with some strange results. Perhaps that explains the voodoo we've heard about."
|
||||||
|
|
||||||
|
"Eleonore",QuestValue(17502)=8 -> "I heard the birds sing about her beauty. But how could a human rival the enchanting beauty of a mermaid?", Topic=1
|
||||||
|
Topic=1,"mermaid" -> "Oh yes, I noticed that lovely mermaid. From afar of course. I would not dare to step into the eyes of such a lovely creature. ...",
|
||||||
|
"I guess I am quite shy. Oh my, if I were not blue, I would turn red now. If there would be someone to arrange a date with her.", Topic=2
|
||||||
|
Topic=2,"date" -> "Will you ask the mermaid Marina if she would date me?", Topic=3
|
||||||
|
Topic=3,"yes" -> "Thank you. How ironic, a human granting a djinn a wish.", SetQuestValue(17502,9)
|
||||||
|
Topic=3, -> "Too bad."
|
||||||
|
|
||||||
|
"mermaid",QuestValue(17502)=10 -> "Oh my. Its not easy to impress a mermaid I guess. Please get me a love poem. I think elves are the greatest poets so their city seems like a good place to look for one.", SetQuestValue(17502,11)
|
||||||
|
"marina",QuestValue(17502)=10 -> *
|
||||||
|
|
||||||
|
"love","poem",QuestValue(17502)=11 -> Type=5952, Amount=1, "Did you get a love poem from Ab'Dendriel?", Topic=4
|
||||||
|
Topic=4,"yes",Count(Type)>=Amount -> "Excellent. Here, with this little spell I enable you to recite the poem like a true elven poet. Now go and ask her for a date again.", SetQuestValue(17502,12)
|
||||||
|
Topic=4,"yes" -> "It looks like you forgot it somewhere."
|
||||||
|
Topic=4 -> "Maybe another time."
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
Name = "Raymond Striker"
|
Name = "Raymond Striker"
|
||||||
Outfit = (151,58-77-60-114-1)
|
Outfit = (151,58-77-60-114-1)
|
||||||
Home = [32350,32588,7]
|
Home = [32350,32588,7]
|
||||||
Radius = 4
|
Radius = 2
|
||||||
|
|
||||||
Behaviour = {
|
Behaviour = {
|
||||||
ADDRESS,"hello$",! -> "Be greeted."
|
ADDRESS,"hello$",! -> "Be greeted. Is there anything I can do for you?"
|
||||||
ADDRESS,"hi$",! -> *
|
ADDRESS,"hi$",! -> *
|
||||||
ADDRESS,! -> Idle
|
ADDRESS,! -> Idle
|
||||||
BUSY,"hello$",! -> "Wait a minute, %N.", Queue
|
BUSY,"hello$",! -> "Wait a minute, %N.", Queue
|
||||||
@ -14,6 +14,67 @@ BUSY,"hi$",! -> *
|
|||||||
BUSY,! -> NOP
|
BUSY,! -> NOP
|
||||||
VANISH,! -> "Good bye."
|
VANISH,! -> "Good bye."
|
||||||
|
|
||||||
"bye" -> "Good bye, %N!", Idle
|
"bye" -> "May there always be wind in your sails, %N.", Idle
|
||||||
"farewell" -> *
|
"farewell" -> *
|
||||||
|
|
||||||
|
"name" -> "Raymond Striker, at your service."
|
||||||
|
"job" -> "I am one of the free captains of the Shattered Isles, who selected me as their spokesperson."
|
||||||
|
"captains" -> "We don't consider ourselves as pirates, but as freedom fighters. But there are indeed pirates out there. They are true bandits, cutthroats and murderers. They are the ones responsible for the horrible acts that are accredited to us."
|
||||||
|
"ferumbras" -> "It is rumoured that he has established some base on one of the isles in the past."
|
||||||
|
"Liberty","Bay" -> "One day the city will bear this name justly and with pride."
|
||||||
|
"Thais" -> "Thais is not the source of the evil that has befallen our isles. It might end up as a victim itself whenever Venore feels powerful enough."
|
||||||
|
"Venore" -> "The scheming trade barons of Venore know nothing but profit and power. For that, they lie and murder and would readily sell their souls."
|
||||||
|
"Carlin" -> "We have loose trade relations with Carlin."
|
||||||
|
"Eleonore",QuestValue(17502)>12 -> "She is my only and true love. It hurts me deeply that the mermaid's magic let me forget her. I feel so guilty and can only hope that Eleonore can forgive my weakness."
|
||||||
|
"King" -> "I doubt the king gains as much from the occupation of the isles as the Venoreans do."
|
||||||
|
|
||||||
|
#shattered
|
||||||
|
"mission",QuestValue(17502)=6 -> "Don't ask about silly missions. All I can think about is this lovely mermaid.", Topic=1
|
||||||
|
"Eleonore",QuestValue(17502)=6 -> "Eleonore ... Yes, I remember her... vaguely. She is a pretty girl ... but still only a girl and now I am in love with a beautiful and passionate woman. A true mermaid even.", Topic=1
|
||||||
|
Topic=1,"mermaid" -> "The mermaid is the most beautiful creature I have ever met. She is so wonderful. It was some kind of magic as we first met. A look in her eyes and I suddenly knew there would be never again another woman in my life but her.", SetQuestValue(17502,7)
|
||||||
|
"mermaid",QuestValue(17502)>6,QuestValue(17502)<12 -> "The mermaid is the most beautiful creature I have ever met. She is so wonderful. It was some kind of magic as we first met. A look in her eyes and I suddenly knew there would be never again another woman in my life but her."
|
||||||
|
"mermaid",QuestValue(17502)>12 -> "I am deeply ashamed that I lacked the willpower to resist her spell. Thank you for your help in that matter. Now my head is once more free to think about our mission."
|
||||||
|
"marina",QuestValue(17502)>12 -> *
|
||||||
|
|
||||||
|
# Meriana_Quest
|
||||||
|
"mission",QuestValue(17502)>12,QuestValue(17520)=0 -> "Ask around in the settlement where you can help out. If you have proven your worth I might have some missions for you.", SetQuestValue(17520,1)
|
||||||
|
"mission",QuestValue(17520)=1,QuestValue(17521)=4,QuestValue(17522)=3,QuestValue(17523)=2,QuestValue(17524)=6 -> "Indeed, I could use some help. The evil pirates of Nargor have convinced an alchemist from Edron to supply them with a substance called Fafnar's Fire ...",
|
||||||
|
"It can burn even on water and is a threat to us all. I need you to travel to Edron and pretend to the alchemist Sandra that you are the one whom the other pirates sent to get the fire ...",
|
||||||
|
"When she asks for a payment, tell her 'Your continued existence is payment enough'. That should enrage any member of the Edron academy enough to refuse any further deals with the pirates.", SetQuestValue(17520,2)
|
||||||
|
"mission",QuestValue(17520)=1 -> "Ask around in the settlement where you can help out. If you have proven your worth I might have some missions for you."
|
||||||
|
"mission",QuestValue(17520)=2 -> "I am still waiting news from you about Fafnar's Fire from alchemist Sandra."
|
||||||
|
"mission",QuestValue(17520)=3 -> "I think that means 'mission accomplished'. Hehe. I guess that will put an end to their efforts to buy any alchemical substance from Edron.", SetQuestValue(17520,4)
|
||||||
|
"mission",QuestValue(17520)=4 -> "The mission on which I will send you is vital to our cause. It is a sabotage mission. Nargor is guarded by several heavy catapults. ...",
|
||||||
|
"I need you to sabotage the most dangerous of those catapults which can be found right in their harbour, aiming at ships passing by the entrance. ...",
|
||||||
|
"Get a fire bug - you can buy them in Liberty Bay - and set this catapult on fire. ...",
|
||||||
|
"Make sure to use the bug on the left part of the catapult where its lever is. That is where it's most vulnerable. ...",
|
||||||
|
"If you see a short explosion, you will know that it worked. I will tell Sebastian to bring you to Nargor, but beware. ...",
|
||||||
|
"Of course, he can't drop you off directly in the pirate's base. However, we have discovered a secret way into the Howling Grotto. ...",
|
||||||
|
"Try to make your way through the caves of Nargor to reach their harbour. This is where you will find the catapult in question.", SetQuestValue(17520,5)
|
||||||
|
"mission",QuestValue(17520)=5 -> "Sail with Sebastian to Nargor and make your way to the pirate's harbour. Once arrived there, find the catapult and use a fire bug on the left part. ...",
|
||||||
|
"A small explosion will show you that you have succeeded. Afterwards, report to me about your mission. Good luck!"
|
||||||
|
|
||||||
|
"mission",QuestValue(17520)=6 -> "You did it! Excellent!", SetQuestValue(17520,7)
|
||||||
|
"mission",QuestValue(17520)=7,QuestValue(17525)<2 -> "I have heard that Duncan has a mission for you this time."
|
||||||
|
"mission",QuestValue(17520)=7 -> "If you manage to accomplish this vital mission you will prove yourself to be a worthy member of our community. I might even grant you your own ship and pirate clothing! ...",
|
||||||
|
"So listen to the first step of my plan. I want you to infiltrate their base. Try to enter their tavern, which means that you have to get past the guard. ...",
|
||||||
|
"You will probably have to deceive him somehow, so that he thinks you are one of them. ...",
|
||||||
|
"In the tavern, the pirates feel safe and plan their next strikes. Study ALL of their maps and plans lying around ...",
|
||||||
|
"Afterwards, return here and report to me about your mission.", SetQuestValue(17520,8)
|
||||||
|
|
||||||
|
"mission",QuestValue(17520)=8,QuestValue(17528)=1,QuestValue(17529)=1,QuestValue(17530)=1 -> "Well done, my friend. That will help us a lot. Of course there are other things to be done though. ...",
|
||||||
|
"I learned that Klaus, the owner of the tavern, wants me dead. He is offering any of those pirates a mission to kill me....",
|
||||||
|
"If we could convince him that you fulfilled that mission, the pirates will have the party of their lives. This would be our chance for a sneak attack to damage their boats and steal their plunder! ...",
|
||||||
|
"Obtain this mission from him and learn what he needs as a proof. Then return to me and report to me about your mission so we can formulate an appropriate plan.", SetQuestValue(17520,9)
|
||||||
|
"mission",QuestValue(17520)=8 -> "I am waiting for the information about the pirate plans my friend."
|
||||||
|
|
||||||
|
"mission",QuestValue(17520)=9 -> "Still planning to go to Klaus right?"
|
||||||
|
"mission",QuestValue(17520)=9,QuestValue(17531)=1 -> Type=6105, Amount=1, "My pillow?? They know me all too well... <sigh> I've owned it since my childhood. However. Here, take it and convince him that I am dead.", Create(Type), SetQuestValue(17520,10)
|
||||||
|
"mission",QuestValue(17520)=10 -> "Pillow is already yours. Just go to Klaus and convince him that I am dead."
|
||||||
|
"mission",QuestValue(17520)=10,QuestValue(17531)=2 -> Type=2994, Amount=1, "Incredible! You did what no other did even dare to think about! You are indeed a true hero to our cause ...",
|
||||||
|
"Sadly I have no ship that lacks a captain, else you would of course be our first choice. I am still true to my word as best as I am able. ...",
|
||||||
|
"So take this as your very own ship. Oh, and remind me about the pirate outfit sometime.", Create(Type), SetQuestValue(17520,11)
|
||||||
|
"mission" -> "Sorry, I don't have any missions for you."
|
||||||
|
|
||||||
|
"outfit",QuestValue(17520)=11 -> "Ah, right! The pirate outfit! Here you go, now you are truly one of us.", AddOutfit(155), AddOutfit(151), SetQuestValue(17520,12)
|
||||||
}
|
}
|
||||||
|
@ -59,4 +59,11 @@ Topic=2 -> "Hmm, but next time."
|
|||||||
Topic=3,"yes",Count(2874)>0 -> Amount=Count(2874), Price=Amount*5, "Here you are ... %P gold.", Delete(2874), CreateMoney
|
Topic=3,"yes",Count(2874)>0 -> Amount=Count(2874), Price=Amount*5, "Here you are ... %P gold.", Delete(2874), CreateMoney
|
||||||
Topic=3,"yes" -> "You don't have any empty vials."
|
Topic=3,"yes" -> "You don't have any empty vials."
|
||||||
Topic=3 -> "Hmm, but please keep Tibia litter free."
|
Topic=3 -> "Hmm, but please keep Tibia litter free."
|
||||||
|
|
||||||
|
"mission",QuestValue(17520)=2 -> "Pssht, not that loud. So they have sent you to get... the stuff?", Topic=4
|
||||||
|
"fafnar","fire",QuestValue(17520)=2 -> *
|
||||||
|
Topic=4,"yes" -> "Finally. You have no idea how difficult it is to keep something secret here. And you brought me all the crystal coins I demanded?", Topic=5
|
||||||
|
Topic=4 -> "How do you even know about the stuff then..."
|
||||||
|
Topic=5,"Your","continued","existence","is","payment","enough" -> "What?? How dare you?! I am a sorcerer of the most reknown academy on the face of this world. Do you think some lousy pirates could scare me? Get lost! Now! I will have no further dealings with the likes of you!", SetQuestValue(17520,3)
|
||||||
|
Topic=5 -> "I see no deal with you then."
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,7 @@ VANISH,! -> "Hm."
|
|||||||
"meriana" -> "Yes. We are in Meriana."
|
"meriana" -> "Yes. We are in Meriana."
|
||||||
|
|
||||||
"liberty bay" -> Price=50, "Do you seek a passage to Liberty Bay for %P?", Topic=1
|
"liberty bay" -> Price=50, "Do you seek a passage to Liberty Bay for %P?", Topic=1
|
||||||
|
"nargor",QuestValue(17520)<4 -> "Sorry, but you have to get permission from the Raymond Striker if you wan't to sail to Nargor."
|
||||||
"nargor" -> Price=50, "Do you seek a passage to Nargor for %P?", Topic=2
|
"nargor" -> Price=50, "Do you seek a passage to Nargor for %P?", Topic=2
|
||||||
|
|
||||||
Topic=1,"yes",PZBlock,! -> "First get rid of those blood stains! You are not going to ruin my vehicle!"
|
Topic=1,"yes",PZBlock,! -> "First get rid of those blood stains! You are not going to ruin my vehicle!"
|
||||||
|
@ -17,7 +17,6 @@ VANISH,! -> "Get lost."
|
|||||||
"bye" -> "Get lost.", Idle
|
"bye" -> "Get lost.", Idle
|
||||||
"farewell" -> *
|
"farewell" -> *
|
||||||
"what" -> "I guard this door. I won't let anyone pass who is not supposed to enter."
|
"what" -> "I guard this door. I won't let anyone pass who is not supposed to enter."
|
||||||
"enter" -> "YOU WILL NOT PASS! Erm ... I mean you don't look like a true pirate to me. You won't get in."
|
|
||||||
"pirate" -> "Yoho, a pirate's life for me!"
|
"pirate" -> "Yoho, a pirate's life for me!"
|
||||||
"name" -> "They call me Vulturenose."
|
"name" -> "They call me Vulturenose."
|
||||||
"rum" -> "You won't bribe old Vulturenose with some rum. No way."
|
"rum" -> "You won't bribe old Vulturenose with some rum. No way."
|
||||||
@ -31,4 +30,7 @@ VANISH,! -> "Get lost."
|
|||||||
"thais" -> "Thais is a town full of wimps."
|
"thais" -> "Thais is a town full of wimps."
|
||||||
"carlin" -> "A city full of women? That calls for plunder. Sadly, a bit far away. Ho Ho Ho."
|
"carlin" -> "A city full of women? That calls for plunder. Sadly, a bit far away. Ho Ho Ho."
|
||||||
|
|
||||||
|
"enter",QuestValue(17527)=1 -> "Hey, I rarely see a dashing pirate like you! Get in, matey!"
|
||||||
|
"enter",QuestValue(17527)=0,SlotItem(1)=6096,SlotItem(4)=6095,SlotItem(7)=5918,SlotItem(8)=5461 -> "Hey, I rarely see a dashing pirate like you! Get in, matey!", SetQuestValue(17527,1)
|
||||||
|
"enter",QuestValue(17527)=0 -> "YOU WILL NOT PASS! Erm ... I mean you don't look like a true pirate to me. You won't get in."
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,6 @@ VANISH,! -> "Use your knowledge wisely."
|
|||||||
"king" -> "King Tibianus III was the founder of our academy."
|
"king" -> "King Tibianus III was the founder of our academy."
|
||||||
"tibianus" -> *
|
"tibianus" -> *
|
||||||
"army" -> "They rely too much on their brawn instead of their brain."
|
"army" -> "They rely too much on their brawn instead of their brain."
|
||||||
"ferumbras" -> "A fallen sorcerer, indeed. What a shame."
|
|
||||||
"excalibug" -> "You will need no weapon if you manipulate the essence of magic."
|
"excalibug" -> "You will need no weapon if you manipulate the essence of magic."
|
||||||
"thais" -> "Thais is a place of barbary."
|
"thais" -> "Thais is a place of barbary."
|
||||||
"tibia" -> "There is still much left to be explored in this world."
|
"tibia" -> "There is still much left to be explored in this world."
|
||||||
@ -59,4 +58,28 @@ Topic=1,"yes",Level<SpellLevel(String) -> Amount=SpellLevel(String), "Don't be i
|
|||||||
Topic=1,"yes",CountMoney<Price -> "Want to learn one of the most powerful spells, and don't even know how much money you have?"
|
Topic=1,"yes",CountMoney<Price -> "Want to learn one of the most powerful spells, and don't even know how much money you have?"
|
||||||
Topic=1,"yes" -> "Congratulations. You now know one of the most powerful spells. Use it wisely.", DeleteMoney, EffectOpp(13), TeachSpell(String)
|
Topic=1,"yes" -> "Congratulations. You now know one of the most powerful spells. Use it wisely.", DeleteMoney, EffectOpp(13), TeachSpell(String)
|
||||||
Topic=1 -> "Lost your heart?"
|
Topic=1 -> "Lost your heart?"
|
||||||
|
|
||||||
|
"ferumbras", QuestValue(17513)>0 -> "I see, you managed to reach Kharos, the harbinger isle, and discovered the gates to Ferumbras' citadel, and now you are here full of questions. Are you ready to listen?", Topic=3
|
||||||
|
Topic=3,"yes" -> "So know that destroying the mortal shell of the being called Ferumbras was the best we were able to achieve with our combined efforts in the past. ...",
|
||||||
|
"He was destroyed not only once but several times. Eventually we were able to figure out the secret of his seeming immortality. ...",
|
||||||
|
"On one of the most remote islands of the Shattered Isles, he built a citadel with demonic aid right around a powerful magical nexus. ...",
|
||||||
|
"The only reason for the whole complex was to establish a point of return into our world. Whenever he is slain, his soul retreats to some demonic dimension to regain enough strength to re-enter the world. ...",
|
||||||
|
"We were not able to destroy his citadel, this unholy construct. To make matters worse, the nexus makes it easy for demons of all kind to pass into our world. ...",
|
||||||
|
"The best thing we could do was to seal the citadel and to install a device that will alarm us whenever Ferumbras tries to re-enter our world. ...",
|
||||||
|
"We grant heroes like you the permission to pass our seals and enter Ferumbras' citadel. ...",
|
||||||
|
"Just ask for the permission if you are ready to go there. Be warned that the citadel is no holiday place though. You will encounter large amounts of demons and traps that scare off most adventurers. ...",
|
||||||
|
"On the other hand, WHEN Ferumbras re-enters the world we need heroes like you to face him on his very own ground before he can escape. ...",
|
||||||
|
"His return is not very likely but it can happen each and every day. If you should manage to defeat him, bring a proof of his death here and you will be rewarded."
|
||||||
|
Topic=3 -> "Lost your heart?"
|
||||||
|
"ferumbras", QuestValue(17513)=0 -> "A fallen sorcerer, indeed. What a shame."
|
||||||
|
|
||||||
|
"permission",QuestValue(17513)=0 -> "I see no reason to discuss this matter with you."
|
||||||
|
"permission",QuestValue(17513)=1 -> Price=500, "The attuning to our seals is a costly process and it will grant you access to the citadel ONLY ONCE. Each time you want to enter, you will need a new attuning. Are you willing to pay 500 gold pieces to become attuned to the seal of the citadel?", Topic=2
|
||||||
|
Topic=2,"yes",CountMoney>=Price -> "SO BE IT!", DeleteMoney, SetQuestValue(17513,2), EffectOpp(15)
|
||||||
|
Topic=2,"yes" -> "Don't even know how much money you have?"
|
||||||
|
Topic=2 -> "Lost your heart?"
|
||||||
|
|
||||||
|
"permission",QuestValue(17513)=2 -> "You already have the permission to enter the citadel."
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
@ -852,6 +852,18 @@
|
|||||||
<monster name="hydra" x="0" y="0" z="4" spawntime="600" />
|
<monster name="hydra" x="0" y="0" z="4" spawntime="600" />
|
||||||
<monster name="hydra" x="0" y="2" z="4" spawntime="600" />
|
<monster name="hydra" x="0" y="2" z="4" spawntime="600" />
|
||||||
</spawn>
|
</spawn>
|
||||||
|
<spawn centerx="32119" centery="32681" centerz="4" radius="1">
|
||||||
|
<monster name="magic pillar" x="0" y="0" z="4" spawntime="60" />
|
||||||
|
</spawn>
|
||||||
|
<spawn centerx="32124" centery="32681" centerz="4" radius="1">
|
||||||
|
<monster name="magic pillar" x="0" y="0" z="4" spawntime="60" />
|
||||||
|
</spawn>
|
||||||
|
<spawn centerx="32115" centery="32685" centerz="4" radius="1">
|
||||||
|
<monster name="magic pillar" x="0" y="0" z="4" spawntime="60" />
|
||||||
|
</spawn>
|
||||||
|
<spawn centerx="32128" centery="32685" centerz="4" radius="1">
|
||||||
|
<monster name="magic pillar" x="0" y="0" z="4" spawntime="60" />
|
||||||
|
</spawn>
|
||||||
<spawn centerx="32121" centery="32687" centerz="4" radius="4">
|
<spawn centerx="32121" centery="32687" centerz="4" radius="4">
|
||||||
<monster name="demon" x="-4" y="-4" z="4" spawntime="59" />
|
<monster name="demon" x="-4" y="-4" z="4" spawntime="59" />
|
||||||
<monster name="demon" x="4" y="-4" z="4" spawntime="59" />
|
<monster name="demon" x="4" y="-4" z="4" spawntime="59" />
|
||||||
@ -863,6 +875,12 @@
|
|||||||
<monster name="dragon lord" x="-2" y="0" z="4" spawntime="1200" />
|
<monster name="dragon lord" x="-2" y="0" z="4" spawntime="1200" />
|
||||||
<monster name="dragon lord" x="0" y="0" z="4" spawntime="1200" />
|
<monster name="dragon lord" x="0" y="0" z="4" spawntime="1200" />
|
||||||
</spawn>
|
</spawn>
|
||||||
|
<spawn centerx="32118" centery="32693" centerz="4" radius="1">
|
||||||
|
<monster name="magic pillar" x="0" y="0" z="4" spawntime="60" />
|
||||||
|
</spawn>
|
||||||
|
<spawn centerx="32125" centery="32693" centerz="4" radius="1">
|
||||||
|
<monster name="magic pillar" x="0" y="0" z="4" spawntime="60" />
|
||||||
|
</spawn>
|
||||||
<spawn centerx="33041" centery="32708" centerz="4" radius="1">
|
<spawn centerx="33041" centery="32708" centerz="4" radius="1">
|
||||||
<monster name="dragon" x="0" y="0" z="4" spawntime="900" />
|
<monster name="dragon" x="0" y="0" z="4" spawntime="900" />
|
||||||
</spawn>
|
</spawn>
|
||||||
|
@ -336,6 +336,9 @@ bool BehaviourDatabase::loadActions(ScriptReader& script, NpcBehaviour* behaviou
|
|||||||
} else if (identifier == "addoutfitaddon") {
|
} else if (identifier == "addoutfitaddon") {
|
||||||
action->type = BEHAVIOUR_TYPE_ADDOUTFITADDON;
|
action->type = BEHAVIOUR_TYPE_ADDOUTFITADDON;
|
||||||
searchType = BEHAVIOUR_PARAMETER_TWO;
|
searchType = BEHAVIOUR_PARAMETER_TWO;
|
||||||
|
} else if (identifier == "addoutfit") {
|
||||||
|
action->type = BEHAVIOUR_TYPE_ADDOUTFIT;
|
||||||
|
searchType = BEHAVIOUR_PARAMETER_ONE;
|
||||||
} else if (identifier == "poison") {
|
} else if (identifier == "poison") {
|
||||||
action->type = BEHAVIOUR_TYPE_POISON;
|
action->type = BEHAVIOUR_TYPE_POISON;
|
||||||
searchType = BEHAVIOUR_PARAMETER_TWO;
|
searchType = BEHAVIOUR_PARAMETER_TWO;
|
||||||
@ -544,6 +547,10 @@ NpcBehaviourNode* BehaviourDatabase::readValue(ScriptReader& script)
|
|||||||
node = new NpcBehaviourNode();
|
node = new NpcBehaviourNode();
|
||||||
node->type = BEHAVIOUR_TYPE_RANDOM;
|
node->type = BEHAVIOUR_TYPE_RANDOM;
|
||||||
searchType = BEHAVIOUR_PARAMETER_TWO;
|
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) {
|
if (searchType == BEHAVIOUR_PARAMETER_ONE) {
|
||||||
@ -942,6 +949,12 @@ void BehaviourDatabase::checkAction(const NpcBehaviourAction* action, Player* pl
|
|||||||
player->addOutfit(lookType, addon);
|
player->addOutfit(lookType, addon);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case BEHAVIOUR_TYPE_ADDOUTFIT: {
|
||||||
|
int32_t lookType = evaluate(action->expression, player, message);
|
||||||
|
|
||||||
|
player->addOutfit(lookType, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case BEHAVIOUR_TYPE_TELEPORT: {
|
case BEHAVIOUR_TYPE_TELEPORT: {
|
||||||
Position pos;
|
Position pos;
|
||||||
pos.x = evaluate(action->expression, player, message);
|
pos.x = evaluate(action->expression, player, message);
|
||||||
@ -1110,6 +1123,21 @@ int32_t BehaviourDatabase::evaluate(NpcBehaviourNode* node, Player* player, cons
|
|||||||
player->getStorageValue(questNumber, questValue);
|
player->getStorageValue(questNumber, questValue);
|
||||||
return 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: {
|
case BEHAVIOUR_TYPE_EXPIRINGQUESTVALUE: {
|
||||||
int32_t questNumber = evaluate(node->left, player, message);
|
int32_t questNumber = evaluate(node->left, player, message);
|
||||||
int32_t questValue;
|
int32_t questValue;
|
||||||
|
@ -87,8 +87,10 @@ enum NpcBehaviourType_t
|
|||||||
BEHAVIOUR_TYPE_TOWN, // change player town
|
BEHAVIOUR_TYPE_TOWN, // change player town
|
||||||
BEHAVIOUR_TYPE_DRUNK, // get/set drunk (set not done)
|
BEHAVIOUR_TYPE_DRUNK, // get/set drunk (set not done)
|
||||||
BEHAVIOUR_TYPE_ADDOUTFITADDON, // Add Outfit Addon
|
BEHAVIOUR_TYPE_ADDOUTFITADDON, // Add Outfit Addon
|
||||||
|
BEHAVIOUR_TYPE_ADDOUTFIT, // Add Outfit
|
||||||
BEHAVIOUR_TYPE_DELETEAMOUNT, // deletes an item according specified amount
|
BEHAVIOUR_TYPE_DELETEAMOUNT, // deletes an item according specified amount
|
||||||
BEHAVIOUR_TYPE_EXPIRINGQUESTVALUE, // get/set expiring quest value
|
BEHAVIOUR_TYPE_EXPIRINGQUESTVALUE, // get/set expiring quest value
|
||||||
|
BEHAVIOUR_TYPE_SLOTITEM, // get slot item
|
||||||
};
|
};
|
||||||
|
|
||||||
enum NpcBehaviourOperator_t
|
enum NpcBehaviourOperator_t
|
||||||
|
@ -162,6 +162,13 @@ class Creature : virtual public Thing
|
|||||||
direction = dir;
|
direction = dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool isHealthHidden() const {
|
||||||
|
return hiddenHealth;
|
||||||
|
}
|
||||||
|
void setHiddenHealth(bool b) {
|
||||||
|
hiddenHealth = b;
|
||||||
|
}
|
||||||
|
|
||||||
int32_t getThrowRange() const final {
|
int32_t getThrowRange() const final {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -511,6 +518,7 @@ class Creature : virtual public Thing
|
|||||||
bool cancelNextWalk = false;
|
bool cancelNextWalk = false;
|
||||||
bool hasFollowPath = false;
|
bool hasFollowPath = false;
|
||||||
bool forceUpdateFollowPath = false;
|
bool forceUpdateFollowPath = false;
|
||||||
|
bool hiddenHealth = false;
|
||||||
|
|
||||||
//creature script events
|
//creature script events
|
||||||
bool hasEventRegistered(CreatureEventType_t event) const {
|
bool hasEventRegistered(CreatureEventType_t event) const {
|
||||||
|
@ -1922,6 +1922,7 @@ void LuaScriptInterface::registerFunctions()
|
|||||||
registerMethod("Creature", "addHealth", LuaScriptInterface::luaCreatureAddHealth);
|
registerMethod("Creature", "addHealth", LuaScriptInterface::luaCreatureAddHealth);
|
||||||
registerMethod("Creature", "getMaxHealth", LuaScriptInterface::luaCreatureGetMaxHealth);
|
registerMethod("Creature", "getMaxHealth", LuaScriptInterface::luaCreatureGetMaxHealth);
|
||||||
registerMethod("Creature", "setMaxHealth", LuaScriptInterface::luaCreatureSetMaxHealth);
|
registerMethod("Creature", "setMaxHealth", LuaScriptInterface::luaCreatureSetMaxHealth);
|
||||||
|
registerMethod("Creature", "setHiddenHealth", LuaScriptInterface::luaCreatureSetHiddenHealth);
|
||||||
|
|
||||||
registerMethod("Creature", "getSkull", LuaScriptInterface::luaCreatureGetSkull);
|
registerMethod("Creature", "getSkull", LuaScriptInterface::luaCreatureGetSkull);
|
||||||
registerMethod("Creature", "setSkull", LuaScriptInterface::luaCreatureSetSkull);
|
registerMethod("Creature", "setSkull", LuaScriptInterface::luaCreatureSetSkull);
|
||||||
@ -2311,6 +2312,7 @@ void LuaScriptInterface::registerFunctions()
|
|||||||
registerMethod("MonsterType", "isIllusionable", LuaScriptInterface::luaMonsterTypeIsIllusionable);
|
registerMethod("MonsterType", "isIllusionable", LuaScriptInterface::luaMonsterTypeIsIllusionable);
|
||||||
registerMethod("MonsterType", "isHostile", LuaScriptInterface::luaMonsterTypeIsHostile);
|
registerMethod("MonsterType", "isHostile", LuaScriptInterface::luaMonsterTypeIsHostile);
|
||||||
registerMethod("MonsterType", "isPushable", LuaScriptInterface::luaMonsterTypeIsPushable);
|
registerMethod("MonsterType", "isPushable", LuaScriptInterface::luaMonsterTypeIsPushable);
|
||||||
|
registerMethod("MonsterType", "isHealthShown", LuaScriptInterface::luaMonsterTypeIsHealthShown);
|
||||||
|
|
||||||
registerMethod("MonsterType", "canPushItems", LuaScriptInterface::luaMonsterTypeCanPushItems);
|
registerMethod("MonsterType", "canPushItems", LuaScriptInterface::luaMonsterTypeCanPushItems);
|
||||||
registerMethod("MonsterType", "canPushCreatures", LuaScriptInterface::luaMonsterTypeCanPushCreatures);
|
registerMethod("MonsterType", "canPushCreatures", LuaScriptInterface::luaMonsterTypeCanPushCreatures);
|
||||||
@ -6677,6 +6679,21 @@ int LuaScriptInterface::luaCreatureSetMaxHealth(lua_State* L)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::luaCreatureSetHiddenHealth(lua_State* L)
|
||||||
|
{
|
||||||
|
// creature:setHiddenHealth(hide)
|
||||||
|
Creature* creature = getUserdata<Creature>(L, 1);
|
||||||
|
if (creature) {
|
||||||
|
creature->setHiddenHealth(getBoolean(L, 2));
|
||||||
|
g_game.addCreatureHealth(creature);
|
||||||
|
pushBoolean(L, true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
lua_pushnil(L);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
int LuaScriptInterface::luaCreatureGetSkull(lua_State* L)
|
int LuaScriptInterface::luaCreatureGetSkull(lua_State* L)
|
||||||
{
|
{
|
||||||
// creature:getSkull()
|
// creature:getSkull()
|
||||||
@ -10880,6 +10897,19 @@ int LuaScriptInterface::luaMonsterTypeIsPushable(lua_State* L)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::luaMonsterTypeIsHealthShown(lua_State* L)
|
||||||
|
{
|
||||||
|
// monsterType:isHealthShown()
|
||||||
|
MonsterType* monsterType = getUserdata<MonsterType>(L, 1);
|
||||||
|
if (monsterType) {
|
||||||
|
pushBoolean(L, !monsterType->info.hiddenHealth);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
lua_pushnil(L);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
int LuaScriptInterface::luaMonsterTypeCanPushItems(lua_State* L)
|
int LuaScriptInterface::luaMonsterTypeCanPushItems(lua_State* L)
|
||||||
{
|
{
|
||||||
// monsterType:canPushItems()
|
// monsterType:canPushItems()
|
||||||
|
@ -752,6 +752,7 @@ class LuaScriptInterface
|
|||||||
static int luaCreatureAddHealth(lua_State* L);
|
static int luaCreatureAddHealth(lua_State* L);
|
||||||
static int luaCreatureGetMaxHealth(lua_State* L);
|
static int luaCreatureGetMaxHealth(lua_State* L);
|
||||||
static int luaCreatureSetMaxHealth(lua_State* L);
|
static int luaCreatureSetMaxHealth(lua_State* L);
|
||||||
|
static int luaCreatureSetHiddenHealth(lua_State* L);
|
||||||
|
|
||||||
static int luaCreatureGetSkull(lua_State* L);
|
static int luaCreatureGetSkull(lua_State* L);
|
||||||
static int luaCreatureSetSkull(lua_State* L);
|
static int luaCreatureSetSkull(lua_State* L);
|
||||||
@ -1128,6 +1129,7 @@ class LuaScriptInterface
|
|||||||
static int luaMonsterTypeIsIllusionable(lua_State* L);
|
static int luaMonsterTypeIsIllusionable(lua_State* L);
|
||||||
static int luaMonsterTypeIsHostile(lua_State* L);
|
static int luaMonsterTypeIsHostile(lua_State* L);
|
||||||
static int luaMonsterTypeIsPushable(lua_State* L);
|
static int luaMonsterTypeIsPushable(lua_State* L);
|
||||||
|
static int luaMonsterTypeIsHealthShown(lua_State* L);
|
||||||
|
|
||||||
static int luaMonsterTypeCanPushItems(lua_State* L);
|
static int luaMonsterTypeCanPushItems(lua_State* L);
|
||||||
static int luaMonsterTypeCanPushCreatures(lua_State* L);
|
static int luaMonsterTypeCanPushCreatures(lua_State* L);
|
||||||
|
@ -54,6 +54,7 @@ Monster::Monster(MonsterType* mtype) :
|
|||||||
healthMax = mType->info.healthMax;
|
healthMax = mType->info.healthMax;
|
||||||
baseSpeed = mType->info.baseSpeed;
|
baseSpeed = mType->info.baseSpeed;
|
||||||
internalLight = mType->info.light;
|
internalLight = mType->info.light;
|
||||||
|
hiddenHealth = mType->info.hiddenHealth;
|
||||||
|
|
||||||
// register creature events
|
// register creature events
|
||||||
for (const std::string& scriptName : mType->info.scripts) {
|
for (const std::string& scriptName : mType->info.scripts) {
|
||||||
|
@ -690,6 +690,8 @@ bool Monsters::loadMonster(const std::string& file, const std::string& monsterNa
|
|||||||
mType->info.targetDistance = std::max<int32_t>(1, pugi::cast<int32_t>(attr.value()));
|
mType->info.targetDistance = std::max<int32_t>(1, pugi::cast<int32_t>(attr.value()));
|
||||||
} else if (strcasecmp(attrName, "runonhealth") == 0) {
|
} else if (strcasecmp(attrName, "runonhealth") == 0) {
|
||||||
mType->info.runAwayHealth = pugi::cast<int32_t>(attr.value());
|
mType->info.runAwayHealth = pugi::cast<int32_t>(attr.value());
|
||||||
|
} else if (strcasecmp(attrName, "hidehealth") == 0) {
|
||||||
|
mType->info.hiddenHealth = attr.as_bool();
|
||||||
} else {
|
} else {
|
||||||
std::cout << "[Warning - Monsters::loadMonster] Unknown flag attribute: " << attrName << ". " << file << std::endl;
|
std::cout << "[Warning - Monsters::loadMonster] Unknown flag attribute: " << attrName << ". " << file << std::endl;
|
||||||
}
|
}
|
||||||
|
@ -1434,7 +1434,14 @@ void ProtocolGame::sendCreatureHealth(const Creature* creature)
|
|||||||
NetworkMessage msg;
|
NetworkMessage msg;
|
||||||
msg.addByte(0x8C);
|
msg.addByte(0x8C);
|
||||||
msg.add<uint32_t>(creature->getID());
|
msg.add<uint32_t>(creature->getID());
|
||||||
msg.addByte(std::ceil((static_cast<double>(creature->getHealth()) / std::max<int32_t>(creature->getMaxHealth(), 1)) * 100));
|
|
||||||
|
if (creature->isHealthHidden()) {
|
||||||
|
msg.addByte(0x00);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
msg.addByte(std::ceil((static_cast<double>(creature->getHealth()) / std::max<int32_t>(creature->getMaxHealth(), 1)) * 100));
|
||||||
|
}
|
||||||
|
|
||||||
writeToOutputBuffer(msg);
|
writeToOutputBuffer(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1848,7 +1855,13 @@ void ProtocolGame::AddCreature(NetworkMessage& msg, const Creature* creature, bo
|
|||||||
msg.addString(creature->getName());
|
msg.addString(creature->getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
msg.addByte(std::ceil((static_cast<double>(creature->getHealth()) / std::max<int32_t>(creature->getMaxHealth(), 1)) * 100));
|
if (creature->isHealthHidden()) {
|
||||||
|
msg.addByte(0x00);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
msg.addByte(std::ceil((static_cast<double>(creature->getHealth()) / std::max<int32_t>(creature->getMaxHealth(), 1)) * 100));
|
||||||
|
}
|
||||||
|
|
||||||
msg.addByte(creature->getDirection());
|
msg.addByte(creature->getDirection());
|
||||||
|
|
||||||
if (!creature->isInGhostMode() && !creature->isInvisible()) {
|
if (!creature->isInGhostMode() && !creature->isInvisible()) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user