├── playersRecord.txt ├── data ├── weapons │ ├── lib │ │ └── weapons.lua │ └── scripts │ │ ├── poison_arrow.lua │ │ ├── explosive_arrow.lua │ │ └── viper_star.lua ├── globalevents │ ├── lib │ │ └── globalevents.lua │ ├── scripts │ │ └── record.lua │ └── globalevents.xml ├── movements │ ├── lib │ │ └── movements.lua │ └── scripts │ │ ├── decay.lua │ │ ├── citizen.lua │ │ ├── walkback.lua │ │ ├── dough.lua │ │ ├── snow.lua │ │ ├── swimming.lua │ │ ├── drowning.lua │ │ ├── trap.lua │ │ └── closingdoor.lua ├── talkactions │ ├── lib │ │ └── talkactions.lua │ ├── scripts │ │ ├── magiceffect.lua │ │ ├── uptime.lua │ │ ├── save.lua │ │ ├── leavehouse.lua │ │ ├── buyprem.lua │ │ └── changesex.lua │ └── talkactions.xml ├── creaturescripts │ ├── lib │ │ └── creaturescripts.lua │ ├── scripts │ │ ├── login.lua │ │ └── firstitems.lua │ └── creaturescripts.xml ├── items │ ├── items.otb │ └── items.xsd ├── world │ └── forgotten.otbm ├── actions │ └── scripts │ │ ├── other │ │ ├── destroy.lua │ │ ├── trap.lua │ │ ├── music.lua │ │ ├── partyhat.lua │ │ ├── partytrumpet.lua │ │ ├── dice.lua │ │ ├── teleport.lua │ │ ├── piggybank.lua │ │ ├── decayto.lua │ │ ├── fireworksrocket.lua │ │ ├── createbread.lua │ │ ├── watch.lua │ │ ├── changegold.lua │ │ ├── blueberrybush.lua │ │ ├── surprisebag.lua │ │ ├── spellbook.lua │ │ ├── constructionkits.lua │ │ └── windows.lua │ │ └── tools │ │ ├── machete.lua │ │ ├── scythe.lua │ │ ├── pick.lua │ │ ├── shovel.lua │ │ ├── fishing.lua │ │ └── rope.lua ├── spells │ └── scripts │ │ ├── support │ │ ├── light.lua │ │ ├── ultimate light.lua │ │ ├── wild growth rune.lua │ │ ├── magic wall rune.lua │ │ ├── cancel invisibility.lua │ │ ├── invisible.lua │ │ ├── magic shield.lua │ │ ├── challenge.lua │ │ ├── haste.lua │ │ ├── charge.lua │ │ ├── strong haste.lua │ │ ├── paralyze rune.lua │ │ ├── great light.lua │ │ ├── magic rope.lua │ │ ├── blood rage.lua │ │ ├── swift foot.lua │ │ ├── destroy field rune.lua │ │ ├── desintegrate rune.lua │ │ ├── sharpshooter.lua │ │ └── protector.lua │ │ ├── healing │ │ ├── antidote.lua │ │ ├── antidote rune.lua │ │ ├── heal friend.lua │ │ ├── intense healing.lua │ │ ├── light healing.lua │ │ ├── intense healing rune.lua │ │ ├── divine healing.lua │ │ ├── ultimate healing.lua │ │ ├── ultimate healing rune.lua │ │ ├── mass healing.lua │ │ └── wound cleasing.lua │ │ ├── attack │ │ ├── icicle.lua │ │ ├── fireball.lua │ │ ├── stalagmite.lua │ │ ├── fire field.lua │ │ ├── energy field.lua │ │ ├── poison field.lua │ │ ├── sudden death.lua │ │ ├── ethereal spear.lua │ │ ├── heavy magic missile.lua │ │ ├── light magic missile.lua │ │ ├── whirlwind throw.lua │ │ ├── berserk.lua │ │ ├── holy missile.lua │ │ ├── fierce berserk.lua │ │ ├── hells core.lua │ │ ├── divine caldera.lua │ │ ├── eternal winter.lua │ │ ├── groundshaker.lua │ │ ├── rage of the skies.lua │ │ ├── fire wave.lua │ │ ├── ice wave.lua │ │ ├── wrath of nature.lua │ │ ├── energy beam.lua │ │ ├── great energy beam.lua │ │ ├── terra wave.lua │ │ ├── avalanche.lua │ │ ├── fire bomb.lua │ │ ├── great fireball.lua │ │ ├── poison bomb.lua │ │ ├── stone shower.lua │ │ ├── energy bomb.lua │ │ ├── explosion.lua │ │ ├── thunderstorm.lua │ │ ├── fire wall.lua │ │ ├── poison wall.lua │ │ ├── energy wall.lua │ │ ├── energy wave.lua │ │ ├── soul fire.lua │ │ ├── death strike.lua │ │ ├── flame strike.lua │ │ ├── ice strike.lua │ │ ├── divine missile.lua │ │ ├── energy strike.lua │ │ ├── terra strike.lua │ │ └── envenom.lua │ │ ├── custom │ │ ├── magic prison.lua │ │ ├── drunk.lua │ │ ├── combustion.lua │ │ └── apocalypse.lua │ │ └── summon │ │ └── animate dead rune.lua ├── raids │ └── raids.xml ├── npc │ ├── Alice.xml │ ├── Varkhal.xml │ ├── The Forgotten King.xml │ ├── Deruno.xml │ ├── Riona.xml │ ├── Eryn.xml │ ├── scripts │ │ ├── default.lua │ │ └── promotion.lua │ └── Tyoric.xml ├── XML │ ├── admin.xml │ ├── stages.xml │ └── quests.xml └── monster │ ├── Birds │ ├── flamingo.xml │ ├── seagull.xml │ ├── penguin.xml │ └── chicken.xml │ ├── Shapeshifters │ └── mimic.xml │ ├── Canines │ ├── dog.xml │ ├── husky.xml │ ├── gnarlhound.xml │ ├── wolf.xml │ ├── winter wolf.xml │ └── war wolf.xml │ ├── Insects │ ├── yellow butterfly.xml │ ├── cockroach.xml │ ├── blue butterfly.xml │ ├── red butterfly.xml │ ├── purple butterfly.xml │ ├── bug.xml │ ├── wasp.xml │ ├── insect swarm.xml │ ├── sandcrawler.xml │ ├── larva.xml │ └── centipede.xml │ ├── Misc │ ├── horse(fire).xml │ ├── horse(grey).xml │ ├── horse(brown).xml │ ├── bat.xml │ ├── hyaena.xml │ ├── rabbit.xml │ ├── badger.xml │ ├── silver rabbit.xml │ ├── squirrel.xml │ ├── deer.xml │ ├── dromedary.xml │ ├── skunk.xml │ ├── white deer.xml │ └── yalahari.xml │ ├── Rifts │ └── rift worm.xml │ ├── Arena │ ├── greenhorn │ │ ├── bovinus.xml │ │ ├── bloodpaw.xml │ │ ├── frostfur.xml │ │ ├── the hairy one.xml │ │ ├── achad.xml │ │ ├── orcus the cruel.xml │ │ ├── rocky.xml │ │ ├── axeitus headbanger.xml │ │ ├── cursed gladiator.xml │ │ └── colerian the barbarian.xml │ ├── scrapper │ │ ├── spirit of earth.xml │ │ ├── grimgor guteater.xml │ │ ├── slim.xml │ │ └── spirit of water.xml │ └── warlord │ │ └── norgle glacierbeard.xml │ ├── Felines │ ├── cat.xml │ ├── lion.xml │ └── tiger.xml │ ├── Grunts │ ├── pig.xml │ └── boar.xml │ ├── Frogs │ ├── green frog.xml │ ├── orchid frog.xml │ ├── coral frog.xml │ ├── crimson frog.xml │ └── azure frog.xml │ ├── Sheeps │ ├── black sheep.xml │ └── sheep.xml │ ├── Bosses │ ├── rotworm queen.xml │ ├── fatality.xml │ ├── mr. punish.xml │ ├── foreman kneebiter.xml │ ├── dreadwing.xml │ ├── baron brute.xml │ ├── big boss trolliver.xml │ ├── brutus bloodbeard.xml │ ├── munster.xml │ └── ron the ripper.xml │ ├── Arachnids │ ├── spider.xml │ ├── scorpion.xml │ └── poison spider.xml │ ├── Bio-Elementals │ ├── slime summon.xml │ └── slime.xml │ ├── Serpents │ ├── snake.xml │ └── cobra.xml │ ├── Blobs │ └── death blob.xml │ ├── Rats │ ├── cave rat.xml │ └── rat.xml │ ├── Crustaceans │ ├── crab.xml │ └── blood crab.xml │ ├── Traps │ ├── eye of the seven.xml │ ├── lavahole.xml │ └── flamethrower.xml │ ├── Bears │ ├── panda.xml │ ├── bear.xml │ └── polar bear.xml │ ├── Annelids │ └── rotworm.xml │ └── Pirates │ └── pirate skeleton.xml ├── lastMotd.txt ├── TheForgottenServer.ico ├── forgottenserver.s3db ├── codeblocks ├── TheForgottenServer.ico └── windows_resources.rc ├── doc ├── TODO ├── ACTION_IDS ├── CHANGELOG └── LIQUIDS ├── vc10 ├── gui.props ├── arch64.props ├── arch32.props ├── release.props └── debug.props └── otpch.cpp /playersRecord.txt: -------------------------------------------------------------------------------- 1 | 1 -------------------------------------------------------------------------------- /data/weapons/lib/weapons.lua: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /lastMotd.txt: -------------------------------------------------------------------------------- 1 | 1 2 | Welcome to the Forgotten Server! -------------------------------------------------------------------------------- /data/globalevents/lib/globalevents.lua: -------------------------------------------------------------------------------- 1 | -- empty file -- -------------------------------------------------------------------------------- /data/movements/lib/movements.lua: -------------------------------------------------------------------------------- 1 | -- Nothing -- 2 | 3 | -------------------------------------------------------------------------------- /data/talkactions/lib/talkactions.lua: -------------------------------------------------------------------------------- 1 | -- Nothing -- 2 | -------------------------------------------------------------------------------- /data/creaturescripts/lib/creaturescripts.lua: -------------------------------------------------------------------------------- 1 | -- empty file -- 2 | -------------------------------------------------------------------------------- /TheForgottenServer.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otland/tfs-old-svn/HEAD/TheForgottenServer.ico -------------------------------------------------------------------------------- /data/items/items.otb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otland/tfs-old-svn/HEAD/data/items/items.otb -------------------------------------------------------------------------------- /forgottenserver.s3db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otland/tfs-old-svn/HEAD/forgottenserver.s3db -------------------------------------------------------------------------------- /data/world/forgotten.otbm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otland/tfs-old-svn/HEAD/data/world/forgotten.otbm -------------------------------------------------------------------------------- /codeblocks/TheForgottenServer.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/otland/tfs-old-svn/HEAD/codeblocks/TheForgottenServer.ico -------------------------------------------------------------------------------- /data/creaturescripts/scripts/login.lua: -------------------------------------------------------------------------------- 1 | function onLogin(cid) 2 | registerCreatureEvent(cid, "PlayerDeath") 3 | return TRUE 4 | end -------------------------------------------------------------------------------- /data/actions/scripts/other/destroy.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, fromPosition, itemEx, toPosition) 2 | return destroyItem(cid, itemEx, toPosition) 3 | end -------------------------------------------------------------------------------- /data/movements/scripts/decay.lua: -------------------------------------------------------------------------------- 1 | function onStepIn(cid, item, position, fromPosition) 2 | doTransformItem(item.uid, item.itemid + 1) 3 | doDecayItem(item.uid) 4 | return TRUE 5 | end -------------------------------------------------------------------------------- /data/globalevents/scripts/record.lua: -------------------------------------------------------------------------------- 1 | function onRecord(current, old) 2 | addEvent(broadcastMessage, 150, "New record: " .. current .. " players are logged in.", MESSAGE_STATUS_DEFAULT) 3 | return true 4 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/light.lua: -------------------------------------------------------------------------------- 1 | function onCastSpell(cid, var) 2 | local pos = getPlayerPosition(cid) 3 | doSendMagicEffect(pos, CONST_ME_MAGIC_BLUE) 4 | return doSetCreatureLight(cid, 10, 120, 30000) 5 | end -------------------------------------------------------------------------------- /data/actions/scripts/other/trap.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, fromPosition, itemEx, toPosition) 2 | doTransformItem(item.uid, item.itemid - 1) 3 | doSendMagicEffect(fromPosition, CONST_ME_POFF) 4 | return TRUE 5 | end -------------------------------------------------------------------------------- /data/raids/raids.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /data/talkactions/scripts/magiceffect.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | if isPlayer(cid) == TRUE and param ~= "" and getPlayerAccess(cid) > 0 then 3 | doSendMagicEffect(getCreaturePosition(cid), param) 4 | end 5 | end -------------------------------------------------------------------------------- /data/movements/scripts/citizen.lua: -------------------------------------------------------------------------------- 1 | function onStepIn(cid, item, position, fromPosition) 2 | if item.actionid > 30020 and item.actionid < 30100 then 3 | doPlayerSetTown(cid, item.actionid - 30020) 4 | end 5 | return TRUE 6 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/ultimate light.lua: -------------------------------------------------------------------------------- 1 | function onCastSpell(cid, var) 2 | local pos = getPlayerPosition(cid) 3 | doSendMagicEffect(pos, CONST_ME_MAGIC_BLUE) 4 | return doSetCreatureLight(cid, 11, 215, (60*33+10)*1000) 5 | end -------------------------------------------------------------------------------- /data/actions/scripts/other/music.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, fromPosition, itemEx, toPosition) 2 | -- TODO: Different music effect for different instruments. 3 | doSendMagicEffect(fromPosition, CONST_ME_SOUND_BLUE) 4 | return TRUE 5 | end -------------------------------------------------------------------------------- /data/movements/scripts/walkback.lua: -------------------------------------------------------------------------------- 1 | function onStepIn(cid, item, position, fromPosition) 2 | if item.uid > 0 and item.uid <= 65535 and isPlayer(cid) == TRUE then 3 | doTeleportThing(cid, fromPosition, FALSE) 4 | end 5 | return TRUE 6 | end -------------------------------------------------------------------------------- /data/movements/scripts/dough.lua: -------------------------------------------------------------------------------- 1 | function onAddItem(moveitem, tileitem, position) 2 | if moveitem.itemid == 2693 then 3 | doTransformItem(moveitem.uid, 2689) 4 | doSendMagicEffect(position, CONST_ME_HITBYFIRE) 5 | end 6 | return TRUE 7 | end -------------------------------------------------------------------------------- /doc/TODO: -------------------------------------------------------------------------------- 1 | [ TODO 2 | Project Name 3 | The Forgotten Server 4 | 5 | Version 6 | 1.0 7 | 8 | License 9 | GNU GPLv2 10 | 11 | Forum 12 | http://otland.net/ 13 | ] 14 | 15 | [ LIST 16 | Compatibility with 0.3 scripts 17 | ] 18 | -------------------------------------------------------------------------------- /data/npc/Alice.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/npc/Varkhal.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/actions/scripts/tools/machete.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, fromPosition, itemEx, toPosition) 2 | if itemEx.itemid == 2782 then 3 | doTransformItem(itemEx.uid, 2781) 4 | doDecayItem(itemEx.uid) 5 | return TRUE 6 | end 7 | return destroyItem(cid, itemEx, toPosition) 8 | end -------------------------------------------------------------------------------- /data/globalevents/globalevents.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | -------------------------------------------------------------------------------- /data/actions/scripts/other/partyhat.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, fromPosition, itemEx, toPosition) 2 | if item.uid == getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid then 3 | doSendMagicEffect(getPlayerPosition(cid), CONST_ME_GIFT_WRAPS) 4 | return TRUE 5 | end 6 | return FALSE 7 | end -------------------------------------------------------------------------------- /data/XML/admin.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /data/npc/The Forgotten King.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/actions/scripts/other/partytrumpet.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, fromPosition, itemEx, toPosition) 2 | doTransformItem(item.uid, 6573) 3 | doCreatureSay(cid, "TOOOOOOT!", TALKTYPE_ORANGE_1) 4 | doSendMagicEffect(fromPosition, CONST_ME_SOUND_BLUE) 5 | doDecayItem(item.uid) 6 | return TRUE 7 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/wild growth rune.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_EARTH) 3 | setCombatParam(combat, COMBAT_PARAM_CREATEITEM, ITEM_WILDGROWTH) 4 | 5 | function onCastSpell(cid, var) 6 | return doCombat(cid, combat, var) 7 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/magic wall rune.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) 3 | setCombatParam(combat, COMBAT_PARAM_CREATEITEM, ITEM_MAGICWALL) 4 | 5 | function onCastSpell(cid, var) 6 | return doCombat(cid, combat, var) 7 | end 8 | -------------------------------------------------------------------------------- /data/actions/scripts/tools/scythe.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, fromPosition, itemEx, toPosition) 2 | if itemEx.itemid == 2739 then 3 | doTransformItem(itemEx.uid, 2737) 4 | doCreateItem(2694, 1, toPosition) 5 | doDecayItem(itemEx.uid) 6 | return TRUE 7 | end 8 | return destroyItem(cid, itemEx, toPosition) 9 | end -------------------------------------------------------------------------------- /data/creaturescripts/creaturescripts.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /data/spells/scripts/healing/antidote.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_POISON) 5 | 6 | function onCastSpell(cid, var) 7 | return doCombat(cid, combat, var) 8 | end -------------------------------------------------------------------------------- /data/spells/scripts/healing/antidote rune.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_POISON) 5 | 6 | function onCastSpell(cid, var) 7 | return doCombat(cid, combat, var) 8 | end -------------------------------------------------------------------------------- /data/movements/scripts/snow.lua: -------------------------------------------------------------------------------- 1 | function onStepOut(cid, item, position, fromPosition) 2 | if isPlayer(cid) and not isPlayerGhost(cid) then 3 | if item.itemid == 670 then 4 | doTransformItem(item.uid, 6594) 5 | else 6 | doTransformItem(item.uid, item.itemid + 15) 7 | end 8 | doDecayItem(item.uid) 9 | end 10 | return true 11 | end 12 | -------------------------------------------------------------------------------- /doc/ACTION_IDS: -------------------------------------------------------------------------------- 1 | [ ACTION IDS 2 | Project Name 3 | The Forgotten Server 4 | 5 | Version 6 | 1.0 7 | 8 | License 9 | GNU GPLv2 10 | 11 | Forum 12 | http://otland.net/ 13 | ] 14 | 15 | [ IDS 16 | Depottile 17 | 100 + DepotID 18 | 19 | Leveltile 20 | 1000 + Required Level 21 | 22 | Leveldoor 23 | 1000 + Required Level 24 | ] 25 | -------------------------------------------------------------------------------- /data/actions/scripts/tools/pick.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, fromPosition, itemEx, toPosition) 2 | if (itemEx.uid <= 65535 or itemEx.actionid > 0) and (itemEx.itemid == 354 or itemEx.itemid == 355) then 3 | doTransformItem(itemEx.uid, 392) 4 | doDecayItem(itemEx.uid) 5 | doSendMagicEffect(toPosition, CONST_ME_POFF) 6 | return TRUE 7 | end 8 | return FALSE 9 | end -------------------------------------------------------------------------------- /data/XML/stages.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /data/spells/scripts/support/cancel invisibility.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 3 | setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_INVISIBLE) 4 | 5 | local area = createCombatArea(AREA_CIRCLE3X3) 6 | setCombatArea(combat, area) 7 | 8 | function onCastSpell(cid, var) 9 | return doCombat(cid, combat, var) 10 | end -------------------------------------------------------------------------------- /data/talkactions/scripts/uptime.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | local hours = math.ceil(getWorldUpTime() / 3600) - 1 3 | local minutes = math.ceil((getWorldUpTime() - (3600 * hours)) / 60) 4 | if minutes == 60 then 5 | minutes = 0 6 | hours = hours + 1 7 | end 8 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Uptime: " .. hours .. " hours and " .. minutes .. " minutes.") 9 | end -------------------------------------------------------------------------------- /data/actions/scripts/other/dice.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, fromPosition, itemEx, toPosition) 2 | local value = math.random(5792, 5797) 3 | if fromPosition.x ~= CONTAINER_POSITION then 4 | doSendMagicEffect(fromPosition, CONST_ME_CRAPS) 5 | end 6 | doTransformItem(item.uid, value) 7 | doCreatureSay(cid, getCreatureName(cid) .. ' rolled a ' .. value - 5791 .. '.', TALKTYPE_ORANGE_1) 8 | return TRUE 9 | end -------------------------------------------------------------------------------- /data/actions/scripts/other/teleport.lua: -------------------------------------------------------------------------------- 1 | local upFloorIds = {1386, 3678, 5543} 2 | function onUse(cid, item, fromPosition, itemEx, toPosition) 3 | if isInArray(upFloorIds, item.itemid) == TRUE then 4 | fromPosition.y = fromPosition.y + 1 5 | fromPosition.z = fromPosition.z - 1 6 | else 7 | fromPosition.z = fromPosition.z + 1 8 | end 9 | doTeleportThing(cid, fromPosition, FALSE) 10 | return TRUE 11 | end -------------------------------------------------------------------------------- /data/movements/scripts/swimming.lua: -------------------------------------------------------------------------------- 1 | local outfit = 2 | { 3 | lookType = 267, 4 | lookHead = 0, 5 | lookBody = 0, 6 | lookLegs = 0, 7 | lookFeet = 0, 8 | lookAddons = 0 9 | } 10 | 11 | function onStepIn(cid, item, position, fromPosition) 12 | doSetCreatureOutfit(cid, outfit, -1) 13 | end 14 | 15 | function onStepOut(cid, item, position, fromPosition) 16 | doRemoveCondition(cid, CONDITION_OUTFIT) 17 | end -------------------------------------------------------------------------------- /data/actions/scripts/other/piggybank.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, fromPosition, itemEx, toPosition) 2 | if math.random(1, 6) == 1 then 3 | doSendMagicEffect(fromPosition, CONST_ME_POFF) 4 | doPlayerAddItem(cid, ITEM_GOLD_COIN, 1) 5 | doTransformItem(item.uid, 2115) 6 | else 7 | doSendMagicEffect(fromPosition, CONST_ME_SOUND_YELLOW) 8 | doPlayerAddItem(cid, ITEM_PLATINUM_COIN, 1) 9 | end 10 | return TRUE 11 | end -------------------------------------------------------------------------------- /data/npc/Deruno.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /data/spells/scripts/attack/icicle.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ICEAREA) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ICE) 5 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.2, 0, -0.4, 0) 6 | 7 | function onCastSpell(cid, var) 8 | return doCombat(cid, combat, var) 9 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/fireball.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREATTACK) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) 5 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.2, 0, -0.4, 0) 6 | 7 | function onCastSpell(cid, var) 8 | return doCombat(cid, combat, var) 9 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/stalagmite.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_STONES) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_EARTH) 5 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.2, 0, -0.4, 0) 6 | 7 | function onCastSpell(cid, var) 8 | return doCombat(cid, combat, var) 9 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/fire field.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) 5 | setCombatParam(combat, COMBAT_PARAM_CREATEITEM, ITEM_FIREFIELD_PVP_FULL) 6 | 7 | function onCastSpell(cid, var) 8 | return doCombat(cid, combat, var) 9 | end -------------------------------------------------------------------------------- /vc10/gui.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Windows 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /data/spells/scripts/attack/energy field.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYHIT) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGYBALL) 5 | setCombatParam(combat, COMBAT_PARAM_CREATEITEM, ITEM_ENERGYFIELD_PVP) 6 | 7 | function onCastSpell(cid, var) 8 | return doCombat(cid, combat, var) 9 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/poison field.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_GREEN_RINGS) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISON) 5 | setCombatParam(combat, COMBAT_PARAM_CREATEITEM, ITEM_POISONFIELD_PVP) 6 | 7 | function onCastSpell(cid, var) 8 | return doCombat(cid, combat, var) 9 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/sudden death.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SUDDENDEATH) 5 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.3, -30, -1.8, 0) 6 | 7 | function onCastSpell(cid, var) 8 | return doCombat(cid, combat, var) 9 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/ethereal spear.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, TRUE) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ETHEREALSPEAR) 5 | setCombatFormula(combat, COMBAT_FORMULA_SKILL, 0, -20, 0.8, 0) 6 | 7 | function onCastSpell(cid, var) 8 | return doCombat(cid, combat, var) 9 | end 10 | -------------------------------------------------------------------------------- /data/spells/scripts/attack/heavy magic missile.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) 5 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.2, 0, -0.4, 0) 6 | 7 | function onCastSpell(cid, var) 8 | return doCombat(cid, combat, var) 9 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/light magic missile.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) 5 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.1, 0, -0.2, 0) 6 | 7 | function onCastSpell(cid, var) 8 | return doCombat(cid, combat, var) 9 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/whirlwind throw.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, TRUE) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_WEAPONTYPE) 5 | setCombatFormula(combat, COMBAT_FORMULA_SKILL, 0, -20, 0.5, 0) 6 | 7 | function onCastSpell(cid, var) 8 | return doCombat(cid, combat, var) 9 | end 10 | -------------------------------------------------------------------------------- /data/talkactions/scripts/save.lua: -------------------------------------------------------------------------------- 1 | local savingEvent = 0 2 | 3 | function onSay(cid, words, param) 4 | if getPlayerAccess(cid) ~= 0 then 5 | if isNumber(param) == TRUE then 6 | stopEvent(savingEvent) 7 | save(tonumber(param) * 60 * 1000) 8 | else 9 | saveData() 10 | end 11 | end 12 | end 13 | 14 | function save(delay) 15 | saveData() 16 | if delay > 0 then 17 | savingEvent = addEvent(save, delay, delay) 18 | end 19 | end -------------------------------------------------------------------------------- /data/creaturescripts/scripts/firstitems.lua: -------------------------------------------------------------------------------- 1 | local firstItems = {2050, 2382} 2 | 3 | function onLogin(cid) 4 | if getPlayerLastLoginSaved(cid) == 0 then 5 | for i = 1, table.maxn(firstItems) do 6 | doPlayerAddItem(cid, firstItems[i], 1) 7 | end 8 | doPlayerAddItem(cid, getPlayerSex(cid) == 0 and 2651 or 2650, 1) 9 | local bag = doPlayerAddItem(cid, 1987, 1) 10 | doAddContainerItem(bag, 2674, 1) 11 | end 12 | return true 13 | end 14 | -------------------------------------------------------------------------------- /data/npc/Riona.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /data/spells/scripts/attack/berserk.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA) 4 | setCombatFormula(combat, COMBAT_FORMULA_SKILL, 0, -90, 0.7, -50) 5 | 6 | local area = createCombatArea(AREA_SQUARE1X1) 7 | setCombatArea(combat, area) 8 | 9 | function onCastSpell(cid, var) 10 | return doCombat(cid, combat, var) 11 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/holy missile.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HOLYDAMAGE) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_HOLY) 5 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.2, 0, -0.4, 0) 6 | 7 | function onCastSpell(cid, var) 8 | return doCombat(cid, combat, var) 9 | end 10 | -------------------------------------------------------------------------------- /data/spells/scripts/attack/fierce berserk.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA) 4 | setCombatFormula(combat, COMBAT_FORMULA_SKILL, 0.8, 0, 1.6, 0) 5 | 6 | local area = createCombatArea(AREA_SQUARE1X1) 7 | setCombatArea(combat, area) 8 | 9 | function onCastSpell(cid, var) 10 | return doCombat(cid, combat, var) 11 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/hells core.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) 4 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.0, 0, -1.6, 0) 5 | 6 | local area = createCombatArea(AREA_CROSS5X5) 7 | setCombatArea(combat, area) 8 | 9 | function onCastSpell(cid, var) 10 | return doCombat(cid, combat, var) 11 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/divine caldera.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HOLYAREA) 4 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.0, 0, -1.3, 0) 5 | 6 | local area = createCombatArea(AREA_CIRCLE3X3) 7 | setCombatArea(combat, area) 8 | 9 | function onCastSpell(cid, var) 10 | return doCombat(cid, combat, var) 11 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/eternal winter.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ICETORNADO) 4 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.0, 0, -1.6, 0) 5 | 6 | local area = createCombatArea(AREA_CROSS5X5) 7 | setCombatArea(combat, area) 8 | 9 | function onCastSpell(cid, var) 10 | return doCombat(cid, combat, var) 11 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/groundshaker.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_GROUNDSHAKER) 4 | setCombatFormula(combat, COMBAT_FORMULA_SKILL, 0.3, 0, 0.6, 0) 5 | 6 | local area = createCombatArea(AREA_CIRCLE3X3) 7 | setCombatArea(combat, area) 8 | 9 | function onCastSpell(cid, var) 10 | return doCombat(cid, combat, var) 11 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/invisible.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_INVISIBLE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 200000) 7 | setCombatCondition(combat, condition) 8 | 9 | function onCastSpell(cid, var) 10 | return doCombat(cid, combat, var) 11 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/rage of the skies.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_BIGCLOUDS) 4 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.8, 0, -1.4, 0) 5 | 6 | local area = createCombatArea(AREA_CROSS5X5) 7 | setCombatArea(combat, area) 8 | 9 | function onCastSpell(cid, var) 10 | return doCombat(cid, combat, var) 11 | end -------------------------------------------------------------------------------- /data/spells/scripts/custom/magic prison.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) 3 | setCombatParam(combat, COMBAT_PARAM_CREATEITEM, ITEM_MAGICWALL) 4 | 5 | local arr = { 6 | {1, 1, 1}, 7 | {1, 2, 1}, 8 | {1, 1, 1} 9 | } 10 | 11 | local area = createCombatArea(arr) 12 | setCombatArea(combat, area) 13 | 14 | function onCastSpell(cid, var) 15 | return doCombat(cid, combat, var) 16 | end 17 | -------------------------------------------------------------------------------- /data/spells/scripts/support/magic shield.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_MANASHIELD) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 200000) 7 | setCombatCondition(combat, condition) 8 | 9 | function onCastSpell(cid, var) 10 | return doCombat(cid, combat, var) 11 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/fire wave.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE) 4 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.8, 0, -1.3, 0) 5 | 6 | local area = createCombatArea(AREA_WAVE4, AREADIAGONAL_WAVE4) 7 | setCombatArea(combat, area) 8 | 9 | function onCastSpell(cid, var) 10 | return doCombat(cid, combat, var) 11 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/ice wave.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ICEAREA) 4 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.8, 0, -1.3, 0) 5 | 6 | local area = createCombatArea(AREA_WAVE4, AREADIAGONAL_WAVE4) 7 | setCombatArea(combat, area) 8 | 9 | function onCastSpell(cid, var) 10 | return doCombat(cid, combat, var) 11 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/wrath of nature.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_PLANTATTACK) 4 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.8, 0, -1.4, 0) 5 | 6 | local area = createCombatArea(AREA_CROSS6X6) 7 | setCombatArea(combat, area) 8 | 9 | function onCastSpell(cid, var) 10 | return doCombat(cid, combat, var) 11 | end 12 | -------------------------------------------------------------------------------- /data/actions/scripts/other/decayto.lua: -------------------------------------------------------------------------------- 1 | local itemIdArray = {[2041] = 2042, [2042] = 2041, [2044] = 2045, [2045] = 2044, [2047] = 2048, [2048] = 2047, [2050] = 2051, [2051] = 2050, [2052] = 2053, [2053] = 2051, [2054] = 2055, [2054] = 2055} 2 | function onUse(cid, item, fromPosition, itemEx, toPosition) 3 | if itemIdArray[item.itemid] ~= nil then 4 | doTransformItem(item.uid, itemIdArray[item.itemid]) 5 | doDecayItem(item.uid) 6 | return TRUE 7 | end 8 | return FALSE 9 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/energy beam.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA) 4 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.0, 0, -1.5, 0) 5 | 6 | local area = createCombatArea(AREA_BEAM5, AREADIAGONAL_BEAM5) 7 | setCombatArea(combat, area) 8 | 9 | function onCastSpell(cid, var) 10 | return doCombat(cid, combat, var) 11 | end -------------------------------------------------------------------------------- /vc10/arch64.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | $(TFS_LIBS64) 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /data/spells/scripts/attack/great energy beam.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA) 4 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.3, 0, -1.7, 0) 5 | 6 | local area = createCombatArea(AREA_BEAM7, AREADIAGONAL_BEAM7) 7 | setCombatArea(combat, area) 8 | 9 | function onCastSpell(cid, var) 10 | return doCombat(cid, combat, var) 11 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/terra wave.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_SMALLPLANTS) 4 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.5, 0, -2.0, 0) 5 | 6 | local area = createCombatArea(AREA_SQUAREWAVE5, AREADIAGONAL_SQUAREWAVE5) 7 | setCombatArea(combat, area) 8 | 9 | function onCastSpell(cid, var) 10 | return doCombat(cid, combat, var) 11 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/challenge.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 3 | 4 | local area = createCombatArea(AREA_SQUARE1X1) 5 | setCombatArea(combat, area) 6 | 7 | function onTargetCreature(cid, target) return doChallengeCreature(cid, target) end 8 | setCombatCallback(combat, CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature") 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/healing/heal friend.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 4 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, FALSE) 5 | setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) 6 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 2.08, 0, 2.7, 0) 7 | 8 | function onCastSpell(cid, var) 9 | return doCombat(cid, combat, var) 10 | end -------------------------------------------------------------------------------- /data/spells/scripts/healing/intense healing.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 4 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, FALSE) 5 | setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) 6 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 1.335, 0, 1.58, 0) 7 | 8 | function onCastSpell(cid, var) 9 | return doCombat(cid, combat, var) 10 | end -------------------------------------------------------------------------------- /data/spells/scripts/healing/light healing.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 4 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, FALSE) 5 | setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) 6 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 0.08, 0, 0.33, 0) 7 | 8 | function onCastSpell(cid, var) 9 | return doCombat(cid, combat, var) 10 | end 11 | -------------------------------------------------------------------------------- /data/spells/scripts/support/haste.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 33000) 7 | setConditionFormula(condition, 0.3, -24, 0.3, -24) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/npc/Eryn.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /data/spells/scripts/custom/drunk.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 3 | 4 | local condition = createConditionObject(CONDITION_DRUNK) 5 | setConditionParam(condition, CONDITION_PARAM_TICKS, 20000) 6 | setCombatCondition(combat, condition) 7 | 8 | local area = createCombatArea( { {1, 1, 1}, {1, 3, 1}, {1, 1, 1} } ) 9 | setCombatArea(combat, area) 10 | 11 | function onCastSpell(cid, var) 12 | return doCombat(cid, combat, var) 13 | end 14 | -------------------------------------------------------------------------------- /data/spells/scripts/support/charge.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, FALSE) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 5000) 7 | setConditionFormula(condition, 0.9, 0, 0.9, 0) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end 13 | -------------------------------------------------------------------------------- /data/spells/scripts/support/strong haste.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 22000) 7 | setConditionFormula(condition, 0.7, -56, 0.7, -56) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/movements/scripts/drowning.lua: -------------------------------------------------------------------------------- 1 | local condition = createConditionObject(CONDITION_DROWN) 2 | setConditionParam(condition, CONDITION_PARAM_PERIODICDAMAGE, -20) 3 | setConditionParam(condition, CONDITION_PARAM_TICKS, -1) 4 | setConditionParam(condition, CONDITION_PARAM_TICKINTERVAL, 2000) 5 | 6 | function onStepIn(cid, item, pos) 7 | if isPlayer(cid) == TRUE then 8 | doAddCondition(cid, condition) 9 | end 10 | end 11 | 12 | function onStepOut(cid, item, pos) 13 | doRemoveCondition(cid, CONDITION_DROWN) 14 | end -------------------------------------------------------------------------------- /data/npc/scripts/default.lua: -------------------------------------------------------------------------------- 1 | local keywordHandler = KeywordHandler:new() 2 | local npcHandler = NpcHandler:new(keywordHandler) 3 | NpcSystem.parseParameters(npcHandler) 4 | 5 | function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end 6 | function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end 7 | function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end 8 | function onThink() npcHandler:onThink() end 9 | 10 | npcHandler:addModule(FocusModule:new()) 11 | -------------------------------------------------------------------------------- /data/spells/scripts/attack/avalanche.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ICEAREA) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ICE) 5 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.366, 0, -0.641, 0) 6 | 7 | local area = createCombatArea(AREA_CIRCLE3X3) 8 | setCombatArea(combat, area) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/fire bomb.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) 5 | setCombatParam(combat, COMBAT_PARAM_CREATEITEM, ITEM_FIREFIELD_PVP_FULL) 6 | 7 | local area = createCombatArea(AREA_SQUARE1X1) 8 | setCombatArea(combat, area) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/great fireball.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) 5 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.2, -30, -0.4, 0) 6 | 7 | local area = createCombatArea(AREA_CIRCLE3X3) 8 | setCombatArea(combat, area) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/poison bomb.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_GREEN_RINGS) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISON) 5 | setCombatParam(combat, COMBAT_PARAM_CREATEITEM, ITEM_POISONFIELD_PVP) 6 | 7 | local area = createCombatArea(AREA_SQUARE1X1) 8 | setCombatArea(combat, area) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/stone shower.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_STONES) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_EARTH) 5 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.366, 0, -0.641, 0) 6 | 7 | local area = createCombatArea(AREA_CIRCLE3X3) 8 | setCombatArea(combat, area) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/paralyze rune.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 3 | 4 | local condition = createConditionObject(CONDITION_PARALYZE) 5 | setConditionParam(condition, CONDITION_PARAM_TICKS, 20000) 6 | --setConditionParam(condition, CONDITION_PARAM_SPEED, -200) 7 | setConditionFormula(condition, -0.9, 0, -0.9, 0) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end 13 | -------------------------------------------------------------------------------- /vc10/arch32.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | $(TFS_LIBS) 9 | true 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /data/spells/scripts/attack/energy bomb.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYHIT) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGYBALL) 5 | setCombatParam(combat, COMBAT_PARAM_CREATEITEM, ITEM_ENERGYFIELD_PVP) 6 | 7 | local area = createCombatArea(AREA_SQUARE1X1) 8 | setCombatArea(combat, area) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/explosion.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_EXPLOSIONAREA) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_EXPLOSION) 5 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.5, -30, -1.1, 0) 6 | 7 | local area = createCombatArea(AREA_CROSS1X1) 8 | setCombatArea(combat, area) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/thunderstorm.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYHIT) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGYBALL) 5 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.366, 0, -0.641, 0) 6 | 7 | local area = createCombatArea(AREA_CIRCLE3X3) 8 | setCombatArea(combat, area) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/fire wall.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) 5 | setCombatParam(combat, COMBAT_PARAM_CREATEITEM, ITEM_FIREFIELD_PVP_FULL) 6 | 7 | local area = createCombatArea(AREA_WALLFIELD, AREADIAGONAL_WALLFIELD) 8 | setCombatArea(combat, area) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /doc/CHANGELOG: -------------------------------------------------------------------------------- 1 | [ CHANGELOG 2 | Project Name 3 | The Forgotten Server 4 | 5 | Version 6 | 1.0 7 | 8 | License 9 | GNU GPLv2 10 | 11 | Forum 12 | http://otland.net/ 13 | ] 14 | 15 | [ File changes 16 | D = Deleted. 17 | M = Modified. 18 | A = Added. 19 | 20 | M The Forgotten Server.exe 21 | ] 22 | 23 | [ Milestone 24 | Fixed a bug where a player who died in PVP zone (with skill loss set to false) would be affected by the death penalty. 25 | Fixed a bug with relational map storage being loaded or saved in wrong order. 26 | ] 27 | -------------------------------------------------------------------------------- /data/spells/scripts/attack/poison wall.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_GREEN_RINGS) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISON) 5 | setCombatParam(combat, COMBAT_PARAM_CREATEITEM, ITEM_POISONFIELD_PVP) 6 | 7 | local area = createCombatArea(AREA_WALLFIELD, AREADIAGONAL_WALLFIELD) 8 | setCombatArea(combat, area) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/energy wall.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYHIT) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGYBALL) 5 | setCombatParam(combat, COMBAT_PARAM_CREATEITEM, ITEM_ENERGYFIELD_PVP) 6 | 7 | local area = createCombatArea(AREA_WALLFIELD, AREADIAGONAL_WALLFIELD) 8 | setCombatArea(combat, area) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/energy wave.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) 5 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.3, -30, -1.7, 0) 6 | 7 | local area = createCombatArea(AREA_SQUAREWAVE5, AREADIAGONAL_SQUAREWAVE5) 8 | setCombatArea(combat, area) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/npc/Tyoric.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /data/spells/scripts/healing/intense healing rune.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 4 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, FALSE) 5 | setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, TRUE) 6 | setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) 7 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 1.335, 0, 1.58, 0) 8 | 9 | function onCastSpell(cid, var) 10 | return doCombat(cid, combat, var) 11 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/soul fire.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) 5 | 6 | local condition = createConditionObject(CONDITION_FIRE) 7 | setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) 8 | addDamageCondition(condition, 10, 2000, -10) 9 | setCombatCondition(combat, condition) 10 | 11 | function onCastSpell(cid, var) 12 | return doCombat(cid, combat, var) 13 | end -------------------------------------------------------------------------------- /data/actions/scripts/tools/shovel.lua: -------------------------------------------------------------------------------- 1 | local holes = {468, 481, 483} 2 | function onUse(cid, item, fromPosition, itemEx, toPosition) 3 | if isInArray(holes, itemEx.itemid) == TRUE then 4 | doTransformItem(itemEx.uid, itemEx.itemid + 1) 5 | doDecayItem(itemEx.uid) 6 | elseif itemEx.itemid == 231 then 7 | local rand = math.random(1, 100) 8 | if rand == 1 then 9 | doCreateItem(2159, 1, toPosition) 10 | elseif rand > 95 then 11 | doSummonCreature("Scarab", toPosition) 12 | end 13 | doSendMagicEffect(toPosition, CONST_ME_POFF) 14 | else 15 | return FALSE 16 | end 17 | return TRUE 18 | end -------------------------------------------------------------------------------- /data/actions/scripts/other/fireworksrocket.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, fromPosition, itemEx, toPosition) 2 | if fromPosition.x ~= CONTAINER_POSITION then 3 | fireworksEffect = math.random(CONST_ME_FIREWORK_YELLOW, CONST_ME_FIREWORK_BLUE) 4 | doSendMagicEffect(fromPosition, fireworksEffect) 5 | else 6 | doSendMagicEffect(fromPosition, CONST_ME_HITBYFIRE) 7 | doSendMagicEffect(fromPosition, CONST_ME_EXPLOSIONAREA) 8 | doCreatureSay(cid, "Ouch! Rather place it on the ground next time.", TALKTYPE_ORANGE_1) 9 | doCreatureAddHealth(cid, -10) 10 | end 11 | doRemoveItem(cid, item.uid, 1) 12 | return TRUE 13 | end -------------------------------------------------------------------------------- /data/weapons/scripts/poison_arrow.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) 3 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_POISONDAMAGE) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISONARROW) 5 | setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0) 6 | 7 | local condition = createConditionObject(CONDITION_POISON) 8 | setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) 9 | addDamageCondition(condition, 10, 2000, -1) 10 | setCombatCondition(combat, condition) 11 | 12 | function onUseWeapon(cid, var) 13 | return doCombat(cid, combat, var) 14 | end -------------------------------------------------------------------------------- /vc10/release.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | false 7 | 8 | 9 | 10 | Full 11 | 12 | 13 | UseLinkTimeCodeGeneration 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /data/spells/scripts/support/great light.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, FALSE) 4 | 5 | local condition = createConditionObject(CONDITION_LIGHT) 6 | setConditionParam(condition, CONDITION_PARAM_LIGHT_LEVEL, 8) 7 | setConditionParam(condition, CONDITION_PARAM_LIGHT_COLOR, 215) 8 | setConditionParam(condition, CONDITION_PARAM_TICKS, ((11*60)+35)*1000) --11 minutes and 35 seconds(time in ms) 9 | setCombatCondition(combat, condition) 10 | 11 | function onCastSpell(cid, var) 12 | return doCombat(cid, combat, var) 13 | end -------------------------------------------------------------------------------- /data/talkactions/talkactions.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /data/actions/scripts/other/createbread.lua: -------------------------------------------------------------------------------- 1 | local liquidContainers = {1775, 2005, 2006, 2007, 2008, 2009, 2011, 2012, 2013, 2014, 2015, 2023, 2031, 2032, 2033} 2 | function onUse(cid, item, fromPosition, itemEx, toPosition) 3 | if item.itemid == 2692 and isInArray(liquidContainers, itemEx.itemid) == TRUE and itemEx.type == 9 then 4 | doChangeTypeItem(item.uid, item.type - 1) 5 | doPlayerAddItem(cid, 2693, 1) 6 | doChangeTypeItem(itemEx.uid, item.type - item.type) 7 | elseif itemEx.itemid == 1381 then 8 | doChangeTypeItem(item.uid, item.type - 1) 9 | doPlayerAddItem(cid, 2692, 1) 10 | else 11 | return FALSE 12 | end 13 | return TRUE 14 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/magic rope.lua: -------------------------------------------------------------------------------- 1 | local ArrayRopeSpot = {384, 418, 8278} 2 | 3 | function onCastSpell(cid, var) 4 | local pos = getPlayerPosition(cid) 5 | pos.stackpos = 0 6 | local grounditem = getThingfromPos(pos) 7 | 8 | if(isInArray(ArrayRopeSpot, grounditem.itemid) == TRUE) then 9 | local newpos = pos 10 | newpos.y = newpos.y + 1 11 | newpos.z = newpos.z - 1 12 | doTeleportThing(cid, newpos, 0) 13 | doSendMagicEffect(pos, CONST_ME_TELEPORT) 14 | return LUA_NO_ERROR 15 | else 16 | doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) 17 | doSendMagicEffect(pos, CONST_ME_POFF) 18 | return LUA_ERROR 19 | end 20 | end -------------------------------------------------------------------------------- /data/weapons/scripts/explosive_arrow.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) 3 | setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 1) 4 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) 5 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) 6 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BURSTARROW) 7 | setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0) 8 | 9 | local area = createCombatArea( { {1, 1, 1}, {1, 3, 1}, {1, 1, 1} } ) 10 | setCombatArea(combat, area) 11 | 12 | function onUseWeapon(cid, var) 13 | return doCombat(cid, combat, var) 14 | end 15 | -------------------------------------------------------------------------------- /vc10/debug.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | true 7 | 8 | 9 | 10 | false 11 | false 12 | EnableFastChecks 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /data/actions/scripts/other/watch.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, fromPosition, itemEx, toPosition) 2 | local twentyfour = TRUE 3 | local tibiantime = TRUE 4 | if tibiantime == FALSE then 5 | if twentyfour == TRUE then 6 | time = os.date('%H:%M') 7 | else 8 | time = os.date('%I:%M %p') 9 | end 10 | else 11 | varh = (os.date('%M') * 60 + os.date('%S')) / 150 12 | tibH = math.floor(varh) 13 | tibM = math.floor(60 * (varh-tibH)) 14 | if tibH < 10 then tibH = '0'..tibH end 15 | if tibM < 10 then tibM = '0'..tibM end 16 | time = (tibH..':'..tibM) 17 | end 18 | doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'The time is ' ..time.. '.') 19 | return TRUE 20 | end -------------------------------------------------------------------------------- /data/talkactions/scripts/leavehouse.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | if getTileHouseInfo(getPlayerPosition(cid)) ~= FALSE then 3 | if getHouseOwner(getTileHouseInfo(getPlayerPosition(cid))) == getPlayerGUID(cid) then 4 | setHouseOwner(getTileHouseInfo(getPlayerPosition(cid)), 0) 5 | doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have successfully left your house.") 6 | else 7 | doPlayerSendCancel(cid, "You are not the owner of this house.") 8 | doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) 9 | end 10 | else 11 | doPlayerSendCancel(cid, "You are not inside a house.") 12 | doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) 13 | end 14 | end -------------------------------------------------------------------------------- /data/spells/scripts/healing/divine healing.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 4 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, FALSE) 5 | setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) 6 | 7 | function onGetFormulaValues(cid, level, maglevel) 8 | local min = (level * 3 + maglevel * 3) * 2.08 9 | local max = (level * 3 + maglevel * 3) * 2.7 10 | return min, max 11 | end 12 | 13 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 14 | 15 | function onCastSpell(cid, var) 16 | return doCombat(cid, combat, var) 17 | end -------------------------------------------------------------------------------- /data/spells/scripts/custom/combustion.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) 5 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.3, -30, -1.7, 0) 6 | 7 | local condition = createConditionObject(CONDITION_FIRE) 8 | setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) 9 | addDamageCondition(condition, 5, 3000, -25) 10 | addDamageCondition(condition, 1, 5000, -666) 11 | setCombatCondition(combat, condition) 12 | 13 | function onCastSpell(cid, var) 14 | return doCombat(cid, combat, var) 15 | end 16 | -------------------------------------------------------------------------------- /data/spells/scripts/support/blood rage.lua: -------------------------------------------------------------------------------- 1 | local conditionAttrib = createConditionObject(CONDITION_ATTRIBUTES) 2 | 3 | setConditionParam(conditionAttrib, CONDITION_PARAM_TICKS, 10000) 4 | setConditionParam(conditionAttrib, CONDITION_PARAM_SKILL_SHIELDPERCENT, 0) 5 | setConditionParam(conditionAttrib, CONDITION_PARAM_SKILL_MELEEPERCENT, 135) 6 | 7 | local combat = createCombatObject() 8 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 9 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 10 | setCombatCondition(combat, conditionAttrib) 11 | 12 | function onCastSpell(cid, var) 13 | if(doCombat(cid, combat, var) == LUA_NO_ERROR) then 14 | return LUA_NO_ERROR 15 | end 16 | return LUA_ERROR 17 | end 18 | -------------------------------------------------------------------------------- /data/monster/Birds/flamingo.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /data/spells/scripts/healing/ultimate healing.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 4 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, FALSE) 5 | setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) 6 | 7 | function onGetFormulaValues(cid, level, maglevel) 8 | min = (level * 1 + maglevel * 4) * 2.08 9 | max = (level * 1 + maglevel * 4) * 2.7 10 | if min < 250 then 11 | min = 250 12 | end 13 | return min, max 14 | end 15 | 16 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 17 | 18 | function onCastSpell(cid, var) 19 | return doCombat(cid, combat, var) 20 | end -------------------------------------------------------------------------------- /data/monster/Shapeshifters/mimic.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /codeblocks/windows_resources.rc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "../gui_resources.rc" 4 | 5 | A ICON MOVEABLE PURE LOADONCALL DISCARDABLE "../TheForgottenServer.ico" 6 | 7 | 1 VERSIONINFO 8 | FILEVERSION 1,0,0,0 9 | PRODUCTVERSION 1,0,0,0 10 | FILETYPE VFT_APP 11 | { 12 | BLOCK "StringFileInfo" 13 | { 14 | BLOCK "040904E4" 15 | { 16 | VALUE "CompanyName", "http://otland.net" 17 | VALUE "FileVersion", "1.0" 18 | VALUE "FileDescription", "The Forgotten Server" 19 | VALUE "InternalName", "" 20 | VALUE "LegalCopyright", "" 21 | VALUE "LegalTrademarks", "" 22 | VALUE "OriginalFilename", "The Forgotten Server.exe" 23 | VALUE "ProductName", "The Forgotten Server" 24 | VALUE "ProductVersion", "1.0" 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /data/actions/scripts/tools/fishing.lua: -------------------------------------------------------------------------------- 1 | local useWorms = FALSE 2 | local waterIds = {493, 4608, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625} 3 | function onUse(cid, item, fromPosition, itemEx, toPosition) 4 | if isInArray(waterIds, itemEx.itemid) == TRUE then 5 | if itemEx.itemid ~= 493 then 6 | if useWorms == FALSE or useWorms == TRUE and doPlayerRemoveItem(cid, ITEM_WORM, 1) == TRUE then 7 | if math.random(1, (100 + (getPlayerSkill(cid, SKILL_FISHING) / 10))) <= getPlayerSkill(cid, SKILL_FISHING) then 8 | doPlayerAddItem(cid, ITEM_FISH, 1) 9 | end 10 | doPlayerAddSkillTry(cid, SKILL_FISHING, 1) 11 | end 12 | end 13 | doSendMagicEffect(toPosition, CONST_ME_LOSEENERGY) 14 | return TRUE 15 | end 16 | return FALSE 17 | end -------------------------------------------------------------------------------- /data/spells/scripts/healing/ultimate healing rune.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 4 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, FALSE) 5 | setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, TRUE) 6 | setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) 7 | 8 | function onGetFormulaValues(cid, level, maglevel) 9 | min = (level * 1 + maglevel * 4) * 2.08 10 | max = (level * 1 + maglevel * 4) * 2.7 11 | if min < 250 then 12 | min = 250 13 | end 14 | return min, max 15 | end 16 | 17 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 18 | 19 | function onCastSpell(cid, var) 20 | return doCombat(cid, combat, var) 21 | end -------------------------------------------------------------------------------- /data/spells/scripts/healing/mass healing.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 4 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, FALSE) 5 | setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) 6 | 7 | function onGetFormulaValues(cid, level, maglevel) 8 | min = (level * 1 + maglevel * 4) * 2.08 9 | max = (level * 1 + maglevel * 4) * 2.7 10 | if min < 250 then 11 | min = 250 12 | end 13 | return min, max 14 | end 15 | 16 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 17 | 18 | local area = createCombatArea(AREA_CIRCLE3X3) 19 | setCombatArea(combat, area) 20 | 21 | function onCastSpell(cid, var) 22 | return doCombat(cid, combat, var) 23 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/death strike.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA) 4 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.4, 0, -0.5, 0) 5 | 6 | local distanceCombat = createCombatObject() 7 | setCombatParam(distanceCombat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) 8 | setCombatParam(distanceCombat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA) 9 | setCombatParam(distanceCombat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_DEATH) 10 | setCombatFormula(distanceCombat, COMBAT_FORMULA_LEVELMAGIC, -0.4, 0, -0.5, 0) 11 | 12 | function onCastSpell(cid, var) 13 | if(variantToNumber(var) ~= 0) then 14 | return doCombat(cid, distanceCombat, var) 15 | end 16 | return doCombat(cid, combat, var) 17 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/flame strike.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE) 4 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.4, 0, -0.5, 0) 5 | 6 | local distanceCombat = createCombatObject() 7 | setCombatParam(distanceCombat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) 8 | setCombatParam(distanceCombat, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE) 9 | setCombatParam(distanceCombat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) 10 | setCombatFormula(distanceCombat, COMBAT_FORMULA_LEVELMAGIC, -0.4, 0, -0.5, 0) 11 | 12 | function onCastSpell(cid, var) 13 | if(variantToNumber(var) ~= 0) then 14 | return doCombat(cid, distanceCombat, var) 15 | end 16 | return doCombat(cid, combat, var) 17 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/ice strike.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ICEATTACK) 4 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.4, 0, -0.5, 0) 5 | 6 | local distanceCombat = createCombatObject() 7 | setCombatParam(distanceCombat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) 8 | setCombatParam(distanceCombat, COMBAT_PARAM_EFFECT, CONST_ME_ICEATTACK) 9 | setCombatParam(distanceCombat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SMALLICE) 10 | setCombatFormula(distanceCombat, COMBAT_FORMULA_LEVELMAGIC, -0.4, 0, -0.5, 0) 11 | 12 | function onCastSpell(cid, var) 13 | if(variantToNumber(var) ~= 0) then 14 | return doCombat(cid, distanceCombat, var) 15 | end 16 | return doCombat(cid, combat, var) 17 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/divine missile.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HOLYDAMAGE) 4 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.4, 0, -0.5, 0) 5 | 6 | local distanceCombat = createCombatObject() 7 | setCombatParam(distanceCombat, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE) 8 | setCombatParam(distanceCombat, COMBAT_PARAM_EFFECT, CONST_ME_HOLYDAMAGE) 9 | setCombatParam(distanceCombat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SMALLHOLY) 10 | setCombatFormula(distanceCombat, COMBAT_FORMULA_LEVELMAGIC, -0.4, 0, -0.5, 0) 11 | 12 | function onCastSpell(cid, var) 13 | if(variantToNumber(var) ~= 0) then 14 | return doCombat(cid, distanceCombat, var) 15 | end 16 | return doCombat(cid, combat, var) 17 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/energy strike.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA) 4 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.4, 0, -0.5, 0) 5 | 6 | local distanceCombat = createCombatObject() 7 | setCombatParam(distanceCombat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) 8 | setCombatParam(distanceCombat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA) 9 | setCombatParam(distanceCombat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) 10 | setCombatFormula(distanceCombat, COMBAT_FORMULA_LEVELMAGIC, -0.4, 0, -0.5, 0) 11 | 12 | function onCastSpell(cid, var) 13 | if(variantToNumber(var) ~= 0) then 14 | return doCombat(cid, distanceCombat, var) 15 | end 16 | return doCombat(cid, combat, var) 17 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/terra strike.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_CARNIPHILA) 4 | setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.4, 0, -0.5, 0) 5 | 6 | local distanceCombat = createCombatObject() 7 | setCombatParam(distanceCombat, COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE) 8 | setCombatParam(distanceCombat, COMBAT_PARAM_EFFECT, CONST_ME_CARNIPHILA) 9 | setCombatParam(distanceCombat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SMALLEARTH) 10 | setCombatFormula(distanceCombat, COMBAT_FORMULA_LEVELMAGIC, -0.4, 0, -0.5, 0) 11 | 12 | function onCastSpell(cid, var) 13 | if(variantToNumber(var) ~= 0) then 14 | return doCombat(cid, distanceCombat, var) 15 | end 16 | return doCombat(cid, combat, var) 17 | end -------------------------------------------------------------------------------- /data/monster/Canines/dog.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /data/monster/Birds/seagull.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /data/monster/Insects/yellow butterfly.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /data/spells/scripts/attack/envenom.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_POISONDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_POISONAREA) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISON) 5 | 6 | local condition = createConditionObject(CONDITION_POISON) 7 | setConditionParam(condition, CONDITION_PARAM_DELAYED, TRUE) 8 | setConditionParam(condition, CONDITION_PARAM_MINVALUE, 20) 9 | setConditionParam(condition, CONDITION_PARAM_MAXVALUE, 70) 10 | setConditionParam(condition, CONDITION_PARAM_STARTVALUE, 5) 11 | setConditionParam(condition, CONDITION_PARAM_TICKINTERVAL, 6000) 12 | setConditionParam(condition, CONDITION_PARAM_FORCEUPDATE, TRUE) 13 | setCombatCondition(combat, condition) 14 | 15 | function onCastSpell(cid, var) 16 | return doCombat(cid, combat, var) 17 | end -------------------------------------------------------------------------------- /data/monster/Misc/horse(fire).xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /data/monster/Misc/horse(grey).xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /data/spells/scripts/support/swift foot.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local exhaust = createConditionObject(CONDITION_EXHAUST_COMBAT) 6 | setConditionParam(exhaust, CONDITION_PARAM_TICKS, 10000) 7 | setCombatCondition(combat, exhaust) 8 | 9 | local condition = createConditionObject(CONDITION_HASTE) 10 | setConditionParam(condition, CONDITION_PARAM_TICKS, 10000) 11 | setConditionFormula(condition, 0.8, -72, 0.8, -72) 12 | setCombatCondition(combat, condition) 13 | 14 | local disable = createConditionObject(CONDITION_PACIFIED) 15 | setConditionParam(disable, CONDITION_PARAM_TICKS, 10000) 16 | setCombatCondition(combat, disable) 17 | 18 | function onCastSpell(cid, var) 19 | return doCombat(cid, combat, var) 20 | end 21 | -------------------------------------------------------------------------------- /data/actions/scripts/other/changegold.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, fromPosition, itemEx, toPosition) 2 | if item.itemid == ITEM_GOLD_COIN and item.type == ITEMCOUNT_MAX then 3 | doChangeTypeItem(item.uid, item.type - item.type) 4 | doPlayerAddItem(cid, ITEM_PLATINUM_COIN, 1) 5 | elseif item.itemid == ITEM_PLATINUM_COIN and item.type == ITEMCOUNT_MAX then 6 | doChangeTypeItem(item.uid, item.type - item.type) 7 | doPlayerAddItem(cid, ITEM_CRYSTAL_COIN, 1) 8 | elseif item.itemid == ITEM_PLATINUM_COIN and item.type < ITEMCOUNT_MAX then 9 | doChangeTypeItem(item.uid, item.type - 1) 10 | doPlayerAddItem(cid, ITEM_GOLD_COIN, ITEMCOUNT_MAX) 11 | elseif item.itemid == ITEM_CRYSTAL_COIN then 12 | doChangeTypeItem(item.uid, item.type - 1) 13 | doPlayerAddItem(cid, ITEM_PLATINUM_COIN, ITEMCOUNT_MAX) 14 | else 15 | return FALSE 16 | end 17 | return TRUE 18 | end -------------------------------------------------------------------------------- /data/monster/Misc/horse(brown).xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /data/spells/scripts/support/destroy field rune.lua: -------------------------------------------------------------------------------- 1 | local function doRemoveField(cid, pos) 2 | pos.stackpos = 254 3 | local field = getThingfromPos(pos) 4 | local playerPos = getPlayerPosition(cid) 5 | 6 | if(field.uid > 0 and isInArray(FIELDS, field.itemid) == TRUE) then 7 | doRemoveItem(field.uid) 8 | doSendMagicEffect(pos, CONST_ME_POFF) 9 | return LUA_NO_ERROR 10 | end 11 | 12 | doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) 13 | doSendMagicEffect(playerPos, CONST_ME_POFF) 14 | return LUA_ERROR 15 | end 16 | 17 | function onCastSpell(cid, var) 18 | local pos = variantToPosition(var) 19 | if(pos.x ~= 0 and pos.y ~= 0 and pos.z ~= 0) then 20 | return doRemoveField(cid, pos) 21 | end 22 | 23 | doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) 24 | doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) 25 | return LUA_ERROR 26 | end -------------------------------------------------------------------------------- /data/talkactions/scripts/buyprem.lua: -------------------------------------------------------------------------------- 1 | local config = { 2 | days = 90, 3 | maxDays = 365, 4 | price = 10000 5 | } 6 | 7 | function onSay(cid, words, param) 8 | if getPlayerPremiumDays(cid) <= config.maxDays then 9 | if doPlayerRemoveMoney(cid, config.price) == TRUE then 10 | doPlayerAddPremiumDays(cid, config.days) 11 | doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have bought " .. config.days .." days of premium account.") 12 | else 13 | doPlayerSendCancel(cid, "You don't have enough money, " .. config.maxDays .. " days premium account costs " .. config.price .. " gold coins.") 14 | doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) 15 | end 16 | else 17 | doPlayerSendCancel(cid, "You can not buy more than " .. config.maxDays .. " days of Premium Account.") 18 | doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) 19 | end 20 | end -------------------------------------------------------------------------------- /data/movements/scripts/trap.lua: -------------------------------------------------------------------------------- 1 | function onStepIn(cid, item, pos) 2 | if item.itemid == 2579 then 3 | if isPlayer(cid) ~= TRUE then 4 | doTargetCombatHealth(0, cid, COMBAT_PHYSICALDAMAGE, -15, -30, CONST_ME_NONE) 5 | doTransformItem(item.uid, item.itemid - 1) 6 | end 7 | else 8 | if isPlayer(cid) == TRUE then 9 | doTargetCombatHealth(0, cid, COMBAT_PHYSICALDAMAGE, -50, -100, CONST_ME_NONE) 10 | doTransformItem(item.uid, item.itemid + 1) 11 | end 12 | end 13 | return TRUE 14 | end 15 | 16 | function onStepOut(cid, item, pos) 17 | doTransformItem(item.uid, item.itemid - 1) 18 | return TRUE 19 | end 20 | 21 | function onRemoveItem(item, tile, pos) 22 | if getDistanceBetween(getThingPos(item.uid), pos) > 0 then 23 | doTransformItem(item.uid, item.itemid - 1) 24 | doSendMagicEffect(getThingPos(item.uid), CONST_ME_POFF) 25 | end 26 | return TRUE 27 | end -------------------------------------------------------------------------------- /data/spells/scripts/healing/wound cleasing.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 4 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, FALSE) 5 | setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) 6 | 7 | function getCombatFormulas(cid, lv, maglv) 8 | local formula_min = ((lv*3 + maglv*2) * 0.55) + 15 9 | local formula_max = ((lv*4 + maglv*1) * 0.95) + 20 10 | 11 | if(formula_max < formula_min) then 12 | --Normalize values 13 | local tmp = formula_max 14 | formula_max = formula_min 15 | formula_min = tmp 16 | end 17 | return formula_min, formula_max 18 | end 19 | 20 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "getCombatFormulas") 21 | 22 | function onCastSpell(cid, var) 23 | return doCombat(cid, combat, var) 24 | end -------------------------------------------------------------------------------- /data/monster/Rifts/rift worm.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /data/monster/Canines/husky.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /data/monster/Arena/greenhorn/bovinus.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /data/movements/scripts/closingdoor.lua: -------------------------------------------------------------------------------- 1 | function onStepOut(cid, item, position, fromPosition) 2 | local newPosition = {x = position.x, y = position.y, z = position.z} 3 | if isInArray(verticalOpenDoors, item.itemid) == TRUE then 4 | newPosition.x = newPosition.x + 1 5 | else 6 | newPosition.y = newPosition.y + 1 7 | end 8 | doRelocate(position, newPosition) 9 | 10 | local tmpPos = {x = position.x, y = position.y, z = position.z, stackpos = -1} 11 | local tileCount = getTileThingByPos(tmpPos) 12 | local i = 1 13 | local tmpItem = {uid = 1} 14 | while(tmpItem.uid ~= 0 and i < tileCount) do 15 | tmpPos.stackpos = i 16 | tmpItem = getTileThingByPos(tmpPos) 17 | if tmpItem.uid ~= item.uid and tmpItem.uid ~= 0 and isMoveable(tmpItem.uid) == TRUE then 18 | doRemoveItem(tmpItem.uid) 19 | else 20 | i = i + 1 21 | end 22 | end 23 | 24 | doTransformItem(item.uid, item.itemid - 1) 25 | return TRUE 26 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/desintegrate rune.lua: -------------------------------------------------------------------------------- 1 | local function doRemoveObject(cid, pos) 2 | pos.stackpos = 255 3 | local object = getThingfromPos(pos) 4 | 5 | if(object.uid > 65535 and isCreature(object.uid) == FALSE and isMovable(object.uid) == TRUE and object.actionid == 0 and getTilePzInfo(pos) == FALSE) then 6 | doRemoveItem(object.uid) 7 | doSendMagicEffect(pos, CONST_ME_BLOCKHIT) 8 | return LUA_NO_ERROR 9 | end 10 | 11 | doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) 12 | doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) 13 | return LUA_ERROR 14 | end 15 | 16 | function onCastSpell(cid, var) 17 | local pos = variantToPosition(var) 18 | if(pos.x ~= 0 and pos.y ~= 0 and pos.z ~= 0) then 19 | return doRemoveObject(cid, pos) 20 | end 21 | 22 | doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) 23 | doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) 24 | return LUA_ERROR 25 | end -------------------------------------------------------------------------------- /data/monster/Insects/cockroach.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /data/XML/quests.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /data/monster/Arena/greenhorn/bloodpaw.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /data/monster/Arena/greenhorn/frostfur.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /data/actions/scripts/other/blueberrybush.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, fromPosition, itemEx, toPosition) 2 | if item.itemid == ITEM_BLUEBERRYBUSH then 3 | doTransformItem(item.uid, ITEM_BUSH) 4 | doCreateItem(ITEM_BLUEBERRY, 3, fromPosition) 5 | addEvent(transformBack, 300000, {position = fromPosition}) 6 | end 7 | return TRUE 8 | end 9 | 10 | function transformBack(parameters) 11 | parameters.position.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE 12 | local topThing = getThingfromPos(parameters.position) 13 | if topThing.itemid == ITEM_BLUEBERRY then 14 | addEvent(transformBack, 300000, parameters) 15 | else 16 | for i = STACKPOS_FIRST_ITEM_ABOVE_GROUNDTILE, STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE do 17 | parameters.position.stackpos = i 18 | topThing = getThingfromPos(parameters.position) 19 | if topThing.itemid == ITEM_BUSH then 20 | doTransformItem(topThing.uid, ITEM_BLUEBERRYBUSH) 21 | break 22 | end 23 | end 24 | end 25 | end -------------------------------------------------------------------------------- /data/actions/scripts/other/surprisebag.lua: -------------------------------------------------------------------------------- 1 | local bluePresent = {2687, 6394, 6280, 6574, 6578, 6575, 6577, 6569, 6576, 6572, 2114} 2 | local redPresent = {2152, 2152, 2152, 2153, 5944, 2112, 6568, 6566, 2492, 2520, 2195, 2114, 2114, 2114, 6394, 6394, 6576, 6576, 6578, 6578, 6574, 6574} 3 | 4 | function onUse(cid, item, fromPosition, itemEx, toPosition) 5 | local count = 1 6 | if item.itemid == 6570 then 7 | local randomChance = math.random(1, 11) 8 | if randomChance == 1 then 9 | count = 10 10 | elseif randomChance == 2 then 11 | count = 3 12 | end 13 | doPlayerAddItem(cid, bluePresent[randomChance], count) 14 | elseif item.itemid == 6571 then 15 | local randomChance = math.random(1, 22) 16 | if randomChance > 0 and randomChance < 4 then 17 | count = 10 18 | end 19 | doPlayerAddItem(cid, redPresent[randomChance], count) 20 | end 21 | doSendMagicEffect(fromPosition, CONST_ME_GIFT_WRAPS) 22 | doRemoveItem(item.uid, 1) 23 | return TRUE 24 | end -------------------------------------------------------------------------------- /data/monster/Felines/cat.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /data/actions/scripts/other/spellbook.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, fromPosition, itemEx, toPosition) 2 | local count = getPlayerInstantSpellCount(cid) 3 | local text = "" 4 | local t = {} 5 | for i = 0, count - 1 do 6 | local spell = getPlayerInstantSpellInfo(cid, i) 7 | if spell.level ~= 0 then 8 | if spell.manapercent > 0 then 9 | spell.mana = spell.manapercent .. "%" 10 | end 11 | table.insert(t, spell) 12 | end 13 | end 14 | table.sort(t, function(a, b) return a.level < b.level end) 15 | local prevLevel = -1 16 | for i, spell in ipairs(t) do 17 | local line = "" 18 | if prevLevel ~= spell.level then 19 | if i ~= 1 then 20 | line = "\n" 21 | end 22 | line = line .. "Spells for Level " .. spell.level .. "\n" 23 | prevLevel = spell.level 24 | end 25 | text = text .. line .. " " .. spell.words .. " - " .. spell.name .. " : " .. spell.mana .. "\n" 26 | end 27 | doShowTextDialog(cid, item.itemid, text) 28 | return TRUE 29 | end -------------------------------------------------------------------------------- /data/monster/Insects/blue butterfly.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /data/monster/Insects/red butterfly.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /doc/LIQUIDS: -------------------------------------------------------------------------------- 1 | [ LIQUIDS 2 | Project Name 3 | The Forgotten Server 4 | 5 | Version 6 | 1.0 7 | 8 | License 9 | GNU GPLv2 10 | 11 | Forum 12 | http://otland.net/ 13 | ] 14 | 15 | [ FLUIDTYPE NAME COLOR 16 | 2 blood RED 17 | 10 lifefluid RED 18 | 18 lava RED 19 | 20 | 3 beer BROWN 21 | 11 oil BROWN 22 | 19 mud BROWN 23 | 27 rum BROWN 24 | 35 tea BROWN 25 | 26 | 4 slime GREEN 27 | 28 | 5 lemonade YELLOW 29 | 13 urine YELLOW 30 | 21 fruit juice YELLOW 31 | 32 | 6 milk WHITE 33 | 14 coconut milk WHITE 34 | 35 | 7 manafluid PURPLE 36 | 15 wine PURPLE 37 | 38 | 9 water BLUE 39 | ] 40 | -------------------------------------------------------------------------------- /data/monster/Insects/purple butterfly.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /data/monster/Misc/bat.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /data/talkactions/scripts/changesex.lua: -------------------------------------------------------------------------------- 1 | local config = { 2 | premiumDaysCost = 3 3 | } 4 | 5 | function onSay(cid, words, param) 6 | if getPlayerAccess(cid) > 0 then 7 | doPlayerSetSex(cid, getPlayerSex(cid) == PLAYERSEX_FEMALE and PLAYERSEX_MALE or PLAYERSEX_FEMALE) 8 | doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have changed your sex.") 9 | return 10 | end 11 | 12 | if getPlayerPremiumDays(cid) < config.premiumDaysCost then 13 | doPlayerRemovePremiumDays(cid, config.premiumDaysCost) 14 | doPlayerSetSex(cid, getPlayerSex(cid) == PLAYERSEX_FEMALE and PLAYERSEX_MALE or PLAYERSEX_FEMALE) 15 | doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have changed your sex for ".. config.premiumDaysCost .." days of your premium account.") 16 | else 17 | doPlayerSendCancel(cid, "You do not have enough premium days, changing sex costs ".. config.premiumDaysCost .." days of your premium account.") 18 | doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /data/spells/scripts/summon/animate dead rune.lua: -------------------------------------------------------------------------------- 1 | local function doTargetCorpse(cid, pos) 2 | local getPos = pos 3 | getPos.stackpos = 255 4 | corpse = getThingfromPos(getPos) 5 | if(corpse.uid > 0 and isCreature(corpse.uid) == FALSE and isInArray(CORPSES, corpse.itemid) == TRUE) then 6 | doRemoveItem(corpse.uid) 7 | local creature = doSummonCreature(cid, "Skeleton", pos) 8 | doConvinceCreature(cid, creature) 9 | doSendMagicEffect(pos, CONST_ME_MAGIC_BLUE) 10 | return LUA_NO_ERROR 11 | end 12 | 13 | doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) 14 | doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) 15 | return LUA_ERROR 16 | end 17 | 18 | function onCastSpell(cid, var) 19 | local pos = variantToPosition(var) 20 | if(pos.x ~= 0 and pos.y ~= 0 and pos.z ~= 0) then 21 | return doTargetCorpse(cid, pos) 22 | end 23 | 24 | doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) 25 | doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) 26 | return LUA_ERROR 27 | end -------------------------------------------------------------------------------- /data/monster/Grunts/pig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /data/monster/Misc/hyaena.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /data/monster/Misc/rabbit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /data/monster/Frogs/green frog.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /data/monster/Misc/badger.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /data/monster/Misc/silver rabbit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /data/npc/scripts/promotion.lua: -------------------------------------------------------------------------------- 1 | local keywordHandler = KeywordHandler:new() 2 | local npcHandler = NpcHandler:new(keywordHandler) 3 | NpcSystem.parseParameters(npcHandler) 4 | 5 | function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end 6 | function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end 7 | function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end 8 | function onThink() npcHandler:onThink() end 9 | 10 | local node1 = keywordHandler:addKeyword({'promot'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'I can promote you for 20000 gold coins. Do you want me to promote you?'}) 11 | node1:addChildKeyword({'yes'}, StdModule.promotePlayer, {npcHandler = npcHandler, cost = 20000, level = 20, text = 'Congratulations! You are now promoted.'}) 12 | node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Alright then, come back when you are ready.', reset = true}) 13 | 14 | npcHandler:addModule(FocusModule:new()) 15 | -------------------------------------------------------------------------------- /data/monster/Misc/squirrel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /data/monster/Sheeps/black sheep.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /data/monster/Bosses/rotworm queen.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /data/monster/Frogs/orchid frog.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /data/monster/Misc/deer.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /data/actions/scripts/tools/rope.lua: -------------------------------------------------------------------------------- 1 | local holeId = {294, 369, 370, 383, 392, 408, 409, 427, 428, 430, 462, 469, 470, 482, 484, 485, 489, 924, 3135, 3136} 2 | function onUse(cid, item, fromPosition, itemEx, toPosition) 3 | if toPosition.x == CONTAINER_POSITION or toPosition.x == 0 and toPosition.y == 0 and toPosition.z == 0 then 4 | return FALSE 5 | end 6 | 7 | local groundTile = getThingfromPos(toPosition) 8 | if groundTile.itemid == 384 or groundTile.itemid == 418 or groundTile.itemid == 8278 then 9 | doTeleportThing(cid, {x = toPosition.x, y = toPosition.y + 1, z = toPosition.z - 1}, FALSE) 10 | elseif isInArray(holeId, itemEx.itemid) == TRUE then 11 | local hole = getThingfromPos({x = toPosition.x, y = toPosition.y, z = toPosition.z + 1, stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE}) 12 | if hole.itemid > 0 then 13 | doTeleportThing(hole.uid, {x = toPosition.x, y = toPosition.y + 1, z = toPosition.z}, FALSE) 14 | else 15 | doPlayerSendCancel(cid, "Sorry, not possible.") 16 | end 17 | else 18 | return FALSE 19 | end 20 | return TRUE 21 | end 22 | -------------------------------------------------------------------------------- /data/monster/Insects/bug.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /data/monster/Arachnids/spider.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /data/monster/Arena/greenhorn/the hairy one.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /data/monster/Bosses/fatality.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /data/spells/scripts/support/sharpshooter.lua: -------------------------------------------------------------------------------- 1 | local conditionAttrib = createConditionObject(CONDITION_ATTRIBUTES) 2 | local conditionSlow = createConditionObject(CONDITION_HASTE) 3 | local conditionExhaustHeal = createConditionObject(CONDITION_EXHAUST_HEAL) 4 | 5 | setConditionParam(conditionAttrib, CONDITION_PARAM_TICKS, 10000) 6 | setConditionParam(conditionAttrib, CONDITION_PARAM_SKILL_DISTANCEPERCENT, 150) 7 | 8 | setConditionParam(conditionSlow, CONDITION_PARAM_TICKS, 10000) 9 | setConditionFormula(conditionSlow, -0.7, 0, -0.7, 0) 10 | 11 | setConditionParam(conditionExhaustHeal, CONDITION_PARAM_TICKS, 10000) 12 | 13 | local combat = createCombatObject() 14 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 15 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 16 | setCombatCondition(combat, conditionAttrib) 17 | setCombatCondition(combat, conditionSlow) 18 | setCombatCondition(combat, conditionExhaustHeal) 19 | 20 | function onCastSpell(cid, var) 21 | if(doCombat(cid, combat, var) == LUA_NO_ERROR) then 22 | return LUA_NO_ERROR 23 | end 24 | return LUA_ERROR 25 | end 26 | -------------------------------------------------------------------------------- /data/actions/scripts/other/constructionkits.lua: -------------------------------------------------------------------------------- 1 | local constructionKits = {[3901] = 1652, [3902] = 1658, [3903] = 1666, [3904] = 1670, [3905] = 3813, [3906] = 3817, [3907] = 3821, [3908] = 2602, [3909] = 1614, [3910] = 1615, [3911] = 1616, [3912] = 1619, [3913] = 3805, [3914] = 3807, [3915] = 1740, [3917] = 2084, [3918] = 2095, [3919] = 3809, [3920] = 3811, [3921] = 1716, [3923] = 1774, [3926] = 2080, [3927] = 2098, [3928] = 2104, [3929] = 2101, [3931] = 2105, [3932] = 1724, [3933] = 1728, [3934] = 1732, [3935] = 1775, [3936] = 3832, [3937] = 2064, [3938] = 1750} 2 | function onUse(cid, item, fromPosition, itemEx, toPosition) 3 | if fromPosition.x == CONTAINER_POSITION then 4 | doPlayerSendCancel(cid, "Put the construction kit on the floor first.") 5 | elseif getTileHouseInfo(fromPosition) == FALSE then 6 | doPlayerSendCancel(cid,"You may only construct this inside a house.") 7 | elseif constructionKits[item.itemid] ~= nil then 8 | doTransformItem(item.uid, constructionKits[item.itemid]) 9 | doSendMagicEffect(fromPosition, CONST_ME_POFF) 10 | else 11 | return FALSE 12 | end 13 | return TRUE 14 | end -------------------------------------------------------------------------------- /data/monster/Grunts/boar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /data/weapons/scripts/viper_star.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) 3 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_GREENSTAR) 5 | setCombatFormula(combat, COMBAT_FORMULA_SKILL, 0, 0, 1.0, 0) 6 | 7 | local xCombat = createCombatObject() 8 | setCombatParam(xCombat, COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE) 9 | 10 | local condition = createConditionObject(CONDITION_POISON) 11 | setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) 12 | addDamageCondition(condition, 4, 2000, -2) 13 | addDamageCondition(condition, 6, 2000, -1) 14 | setCombatCondition(xCombat, condition) 15 | 16 | function onUseWeapon(cid, var) 17 | local ret = doCombat(cid, combat, var) 18 | if(ret == LUA_ERROR) then 19 | return LUA_ERROR 20 | end 21 | 22 | local target = variantToNumber(var) 23 | if(target ~= 0) then 24 | -- chance to poison the enemy 25 | local chance = math.random(0, 100) 26 | if(chance > 90) then 27 | ret = doCombat(cid, xCombat, var) 28 | end 29 | end 30 | return ret 31 | end -------------------------------------------------------------------------------- /data/monster/Bio-Elementals/slime summon.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /data/monster/Arena/scrapper/spirit of earth.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /data/monster/Serpents/snake.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /data/monster/Insects/wasp.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /data/monster/Misc/dromedary.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /data/actions/scripts/other/windows.lua: -------------------------------------------------------------------------------- 1 | local windows = {[6438] = 6436, [6436] = 6438, [6439] = 6437, [6437] = 6439, [6442] = 6440, [6440] = 6442, [6443] = 6441, [6441] = 6443, [6446] = 6444, [6444] = 6446, [6447] = 6445, [6445] = 6447, [6452] = 6450, [6450] = 6452, [6453] = 6451, [6451] = 6453, [6456] = 6454, [6454] = 6456, [6457] = 6455, [6455] = 6457, [6460] = 6458, [6458] = 6460, [6461] = 6459, [6459] = 6461, [6464] = 6462, [6462] = 6464, [6465] = 6463, [6463] = 6465, [6468] = 6466, [6466] = 6468, [6469] = 6467, [6467] = 6469, [6472] = 6470, [6470] = 6472, [6473] = 6471, [6471] = 6473, [6790] = 6788, [6788] = 6790, [6791] = 6789, [6789] = 6791, [7027] = 7025, [7025] = 7027, [7028] = 7026, [7026] = 7028, [7031] = 7029, [7029] = 7031, [7032] = 7030, [7030] = 7032, [10264] = 10266, [10265] = 10267, [10266] = 10264, [10267] = 10265, [10488] = 10490, [10489] = 10491, [10490] = 10488, [10491] = 10489} 2 | function onUse(cid, item, fromPosition, itemEx, toPosition) 3 | if getTileHouseInfo(getPlayerPosition(cid)) ~= FALSE and windows[item.itemid] ~= nil then 4 | doTransformItem(item.uid, windows[item.itemid]) 5 | return TRUE 6 | end 7 | return FALSE 8 | end 9 | -------------------------------------------------------------------------------- /data/monster/Frogs/coral frog.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /data/monster/Frogs/crimson frog.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /data/monster/Sheeps/sheep.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /data/monster/Arena/greenhorn/achad.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /data/monster/Birds/penguin.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /data/monster/Bosses/mr. punish.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /data/monster/Bosses/foreman kneebiter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /otpch.cpp: -------------------------------------------------------------------------------- 1 | ////////////////////////////////////////////////////////////////////// 2 | // OpenTibia - an opensource roleplaying game 3 | ////////////////////////////////////////////////////////////////////// 4 | // Lua script interface 5 | ////////////////////////////////////////////////////////////////////// 6 | // This program is free software; you can redistribute it and/or 7 | // modify it under the terms of the GNU General Public License 8 | // as published by the Free Software Foundation; either version 2 9 | // of the License, or (at your option) any later version. 10 | // 11 | // This program is distributed in the hope that it will be useful, 12 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | // GNU General Public License for more details. 15 | // 16 | // You should have received a copy of the GNU General Public License 17 | // along with this program; if not, write to the Free Software Foundation, 18 | // Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 19 | ////////////////////////////////////////////////////////////////////// 20 | 21 | #include "otpch.h" -------------------------------------------------------------------------------- /data/monster/Birds/chicken.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /data/monster/Bosses/dreadwing.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /data/monster/Insects/insect swarm.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /data/monster/Insects/sandcrawler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /data/monster/Arachnids/scorpion.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /data/monster/Misc/skunk.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /data/monster/Canines/gnarlhound.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /data/monster/Canines/wolf.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /data/monster/Arena/greenhorn/orcus the cruel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /data/monster/Canines/winter wolf.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /data/spells/scripts/support/protector.lua: -------------------------------------------------------------------------------- 1 | local conditionAttrib = createConditionObject(CONDITION_ATTRIBUTES) 2 | local conditionExhaustCombat = createConditionObject(CONDITION_EXHAUST_COMBAT) 3 | local conditionExhaustHeal = createConditionObject(CONDITION_EXHAUST_HEAL) 4 | local conditionPacified = createConditionObject(CONDITION_PACIFIED) 5 | 6 | setConditionParam(conditionAttrib, CONDITION_PARAM_TICKS, 10000) 7 | setConditionParam(conditionAttrib, CONDITION_PARAM_SKILL_SHIELDPERCENT, 220) 8 | setConditionParam(conditionExhaustCombat, CONDITION_PARAM_TICKS, 10000) 9 | setConditionParam(conditionExhaustHeal, CONDITION_PARAM_TICKS, 10000) 10 | setConditionParam(conditionPacified, CONDITION_PARAM_TICKS, 10000) 11 | 12 | local combat = createCombatObject() 13 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 14 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 15 | setCombatCondition(combat, conditionAttrib) 16 | setCombatCondition(combat, conditionExhaustCombat) 17 | setCombatCondition(combat, conditionExhaustHeal) 18 | setCombatCondition(combat, conditionPacified) 19 | 20 | function onCastSpell(cid, var) 21 | if(doCombat(cid, combat, var) == LUA_NO_ERROR) then 22 | return LUA_NO_ERROR 23 | end 24 | return LUA_ERROR 25 | end 26 | -------------------------------------------------------------------------------- /data/monster/Frogs/azure frog.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /data/monster/Bosses/baron brute.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /data/monster/Insects/larva.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /data/monster/Blobs/death blob.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /data/monster/Arachnids/poison spider.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /data/monster/Misc/white deer.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /data/monster/Bosses/big boss trolliver.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /data/monster/Bio-Elementals/slime.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /data/monster/Insects/centipede.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /data/monster/Rats/cave rat.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /data/monster/Serpents/cobra.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /data/items/items.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /data/monster/Arena/greenhorn/rocky.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /data/monster/Felines/lion.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /data/monster/Crustaceans/crab.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /data/monster/Traps/eye of the seven.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /data/monster/Arena/greenhorn/axeitus headbanger.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /data/spells/scripts/custom/apocalypse.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | 3 | arr = { 4 | {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, 5 | {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, 6 | {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, 7 | {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, 8 | {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, 9 | {1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1}, 10 | {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, 11 | {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, 12 | {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, 13 | {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, 14 | {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, 15 | } 16 | 17 | local area = createCombatArea(arr) 18 | setCombatArea(combat, area) 19 | 20 | function spellCallback(param) 21 | if param.count > 0 or math.random(0, 1) == 1 then 22 | doSendMagicEffect(param.pos, CONST_ME_HITBYFIRE) 23 | doAreaCombatHealth(param.cid, COMBAT_FIREDAMAGE, param.pos, 0, -100, -100, CONST_ME_EXPLOSIONHIT) 24 | end 25 | 26 | if(param.count < 5) then 27 | param.count = param.count + 1 28 | addEvent(spellCallback, math.random(1000, 4000), param) 29 | end 30 | end 31 | 32 | function onTargetTile(cid, pos) 33 | local param = {} 34 | param.cid = cid 35 | param.pos = pos 36 | param.count = 0 37 | spellCallback(param) 38 | end 39 | 40 | setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile") 41 | 42 | function onCastSpell(cid, var) 43 | return doCombat(cid, combat, var) 44 | end -------------------------------------------------------------------------------- /data/monster/Arena/greenhorn/cursed gladiator.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /data/monster/Felines/tiger.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /data/monster/Arena/warlord/norgle glacierbeard.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /data/monster/Arena/scrapper/grimgor guteater.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /data/monster/Bosses/brutus bloodbeard.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /data/monster/Rats/rat.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /data/monster/Arena/greenhorn/colerian the barbarian.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /data/monster/Bears/panda.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /data/monster/Bosses/munster.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /data/monster/Crustaceans/blood crab.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /data/monster/Misc/yalahari.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /data/monster/Traps/lavahole.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /data/monster/Bears/bear.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /data/monster/Arena/scrapper/slim.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /data/monster/Bosses/ron the ripper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /data/monster/Annelids/rotworm.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /data/monster/Arena/scrapper/spirit of water.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /data/monster/Pirates/pirate skeleton.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /data/monster/Bears/polar bear.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /data/monster/Canines/war wolf.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /data/monster/Traps/flamethrower.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | --------------------------------------------------------------------------------