From e5f05983591f9a0a534a00dc8bf20c7f82c502da Mon Sep 17 00:00:00 2001 From: Matt Gomez Date: Tue, 22 Dec 2020 07:13:04 -0600 Subject: [PATCH] 12.60 Support update to lasted from otservbr --- config.lua.dist | 7 +- data/XML/familiars.xml | 32 ++ data/XML/mounts.xml | 352 +++++++++--------- data/XML/outfits.xml | 332 +++++++++-------- data/events/events.xml | 2 +- data/events/scripts/player.lua | 4 + data/items/items.otb | Bin 1669520 -> 1673725 bytes data/items/items.xml | 20 +- data/lib/core/player.lua | 36 -- data/lib/core/quests.lua | 8 +- data/lib/core/storages.lua | 46 +-- data/lib/others/daily_reward_lib.lua | 8 + data/migrations/10.lua | 3 + data/migrations/9.lua | 8 +- .../scripts/daily_reward/daily_reward.lua | 48 ++- data/monster/constructs/biting_book.lua | 6 +- data/monster/constructs/clay_guardian.lua | 2 +- .../constructs/damaged_worker_golem.lua | 2 +- data/monster/constructs/diamond_servant.lua | 4 +- .../constructs/diamond_servant_replica.lua | 4 +- .../constructs/enraged_crystal_golem.lua | 6 +- data/monster/constructs/eternal_guardian.lua | 2 +- data/monster/constructs/glooth_golem.lua | 4 +- data/monster/constructs/golden_servant.lua | 4 +- .../constructs/golden_servant_replica.lua | 2 +- data/monster/constructs/ice_golem.lua | 4 +- data/monster/constructs/infected_weeper.lua | 4 +- data/monster/constructs/lava_golem.lua | 4 +- data/monster/constructs/magma_crawler.lua | 4 +- data/monster/constructs/metal_gargoyle.lua | 2 +- data/monster/constructs/orewalker.lua | 2 +- data/monster/constructs/rustheap_golem.lua | 4 +- data/monster/constructs/stone_devourer.lua | 4 +- data/monster/constructs/stone_golem.lua | 2 +- data/monster/constructs/war_golem.lua | 6 +- data/monster/constructs/weeper.lua | 4 +- data/monster/constructs/worker_golem.lua | 2 +- data/monster/dawnport/dawn_scorpion.lua | 2 +- data/monster/dawnport/scar_tribe_shaman.lua | 2 +- data/monster/dawnport/woodling.lua | 4 +- data/monster/demons/askarak_demon.lua | 4 +- data/monster/demons/askarak_lord.lua | 4 +- data/monster/demons/askarak_prince.lua | 4 +- data/monster/demons/dark_torturer.lua | 6 +- data/monster/demons/dawnfire_asura.lua | 6 +- data/monster/demons/demon.lua | 6 +- data/monster/demons/demon_outcast.lua | 4 +- data/monster/demons/destroyer.lua | 2 +- data/monster/demons/diabolic_imp.lua | 4 +- data/monster/demons/fire_devil.lua | 2 +- data/monster/demons/floating_savant.lua | 2 +- data/monster/demons/frost_flower_asura.lua | 4 +- data/monster/demons/grimeleech.lua | 4 +- data/monster/demons/hellfire_fighter.lua | 2 +- data/monster/demons/hellflayer.lua | 6 +- data/monster/demons/hellhound.lua | 4 +- data/monster/demons/hellspawn.lua | 6 +- data/monster/demons/juggernaut.lua | 6 +- data/monster/demons/midnight_asura.lua | 6 +- data/monster/demons/plaguesmith.lua | 4 +- data/monster/demons/shaburak_demon.lua | 4 +- data/monster/demons/shaburak_lord.lua | 4 +- data/monster/demons/shaburak_prince.lua | 4 +- data/monster/demons/shadow_hound.lua | 2 +- data/monster/demons/true_midnight_asura.lua | 6 +- data/monster/demons/vexclaw.lua | 6 +- data/monster/dragons/dragon_hatchling.lua | 6 +- data/monster/dragons/dragon_lord.lua | 16 +- .../monster/dragons/dragon_lord_hatchling.lua | 6 +- data/monster/dragons/draken_abomination.lua | 4 +- data/monster/dragons/draken_elite.lua | 6 +- data/monster/dragons/draken_spellweaver.lua | 4 +- data/monster/dragons/draken_warmaster.lua | 6 +- data/monster/dragons/elder_wyrm.lua | 6 +- data/monster/dragons/frost_dragon.lua | 4 +- .../dragons/frost_dragon_hatchling.lua | 6 +- data/monster/dragons/ghastly_dragon.lua | 2 +- data/monster/dragons/haunted_dragon.lua | 2 +- data/monster/dragons/hydra.lua | 6 +- data/monster/dragons/wyrm.lua | 6 +- data/monster/elementals/cliff_strider.lua | 4 +- data/monster/elementals/earth_elemental.lua | 4 +- data/monster/elementals/energy_elemental.lua | 4 +- data/monster/elementals/fire_elemental.lua | 2 +- .../elementals/high_voltage_elemental.lua | 4 +- data/monster/elementals/ironblight.lua | 4 +- .../elementals/knowledge_elemental.lua | 8 +- data/monster/elementals/lava_lurker.lua | 2 +- .../elementals/massive_earth_elemental.lua | 2 +- .../elementals/massive_energy_elemental.lua | 4 +- .../elementals/massive_fire_elemental.lua | 2 +- .../elementals/massive_water_elemental.lua | 4 +- data/monster/elementals/raging_fire.lua | 2 +- .../elementals/ravenous_lava_lurker.lua | 2 +- data/monster/elementals/water_elemental.lua | 4 +- .../extra_dimensional/breach_brood.lua | 4 +- .../extra_dimensional/dread_intruder.lua | 2 +- .../extra_dimensional/reality_reaver.lua | 4 +- .../stabilizing_dread_intruder.lua | 2 +- data/monster/extra_dimensional/yielothax.lua | 4 +- data/monster/giants/behemoth.lua | 4 +- data/monster/giants/ogre_rowdy.lua | 4 +- data/monster/giants/ogre_ruffian.lua | 6 +- data/monster/giants/ogre_sage.lua | 4 +- data/monster/humanoids/broken_shaper.lua | 2 +- data/monster/humanoids/chakoya_toolshaper.lua | 6 +- .../monster/humanoids/chakoya_tribewarden.lua | 6 +- data/monster/humanoids/dworc_fleshhunter.lua | 2 +- data/monster/humanoids/dworc_venomsniper.lua | 2 +- data/monster/humanoids/dworc_voodoomaster.lua | 2 +- data/monster/humanoids/enslaved_dwarf.lua | 2 +- data/monster/humanoids/firestarter.lua | 2 +- data/monster/humanoids/lost_berserker.lua | 4 +- data/monster/humanoids/mooh'tah_warrior.lua | 6 +- data/monster/humanoids/moohtant.lua | 2 +- data/monster/humanoids/orc_leader.lua | 2 +- data/monster/humanoids/orc_warlord.lua | 2 +- data/monster/humanoids/shaper_matriarch.lua | 4 +- .../humanoids/soul-broken_harbinger.lua | 4 +- data/monster/humans/acolyte_of_darkness.lua | 4 +- data/monster/humans/blood_hand.lua | 2 +- data/monster/humans/blood_priest.lua | 2 +- data/monster/humans/cobra_assassin.lua | 2 +- data/monster/humans/cobra_vizier.lua | 2 +- data/monster/humans/glooth_bandit.lua | 2 +- data/monster/humans/glooth_brigand.lua | 2 +- data/monster/humans/hero.lua | 4 +- data/monster/humans/infernalist.lua | 6 +- data/monster/humans/mutated_human.lua | 2 +- data/monster/humans/necromancer.lua | 2 +- data/monster/humans/pirate_cutthroat.lua | 4 +- data/monster/humans/shadow_pupil.lua | 2 +- data/monster/humans/vicious_squire.lua | 4 +- data/monster/humans/warlock.lua | 6 +- data/monster/humans/witch.lua | 2 +- data/monster/lycanthropes/werebadger.lua | 4 +- data/monster/lycanthropes/werebear.lua | 4 +- data/monster/lycanthropes/wereboar.lua | 4 +- data/monster/lycanthropes/werefox.lua | 4 +- data/monster/lycanthropes/werehyaena.lua | 2 +- data/monster/lycanthropes/werewolf.lua | 4 +- data/monster/magicals/armadile.lua | 2 +- data/monster/magicals/brain_squid.lua | 8 +- data/monster/magicals/braindeath.lua | 4 +- data/monster/magicals/burning_book.lua | 4 +- data/monster/magicals/crypt_warden.lua | 6 +- data/monster/magicals/crystalcrusher.lua | 2 +- data/monster/magicals/cursed_book.lua | 4 +- data/monster/magicals/dragonling.lua | 4 +- data/monster/magicals/energetic_book.lua | 6 +- .../magicals/energuardian_of_tales.lua | 6 +- data/monster/magicals/feversleep.lua | 2 +- data/monster/magicals/flying_book.lua | 2 +- data/monster/magicals/forest_fury.lua | 6 +- data/monster/magicals/frazzlemaw.lua | 6 +- data/monster/magicals/gargoyle.lua | 2 +- data/monster/magicals/guardian_of_tales.lua | 6 +- data/monster/magicals/guzzlemaw.lua | 6 +- data/monster/magicals/icecold_book.lua | 2 +- data/monster/magicals/lumbering_carnivor.lua | 6 +- data/monster/magicals/medusa.lua | 2 +- data/monster/magicals/menacing_carnivor.lua | 2 +- data/monster/magicals/midnight_panther.lua | 2 +- data/monster/magicals/nightmare.lua | 2 +- data/monster/magicals/nightmare_scion.lua | 2 +- data/monster/magicals/phantasm.lua | 2 +- data/monster/magicals/phantasm_summon.lua | 2 +- data/monster/magicals/rage_squid.lua | 6 +- data/monster/magicals/retching_horror.lua | 4 +- data/monster/magicals/shiversleep.lua | 2 +- data/monster/magicals/shock_head.lua | 4 +- data/monster/magicals/sight_of_surrender.lua | 6 +- data/monster/magicals/silencer.lua | 2 +- data/monster/magicals/spiky_carnivor.lua | 6 +- data/monster/magicals/terrorsleep.lua | 2 +- data/monster/magicals/thanatursus.lua | 2 +- data/monster/magicals/weakened_frazzlemaw.lua | 6 +- data/monster/mammals/mammoth.lua | 6 +- data/monster/mammals/merlkin.lua | 2 +- data/monster/mammals/mutated_bat.lua | 2 +- data/monster/mammals/mutated_rat.lua | 2 +- data/monster/mammals/mutated_tiger.lua | 2 +- data/monster/mammals/roaring_lion.lua | 2 +- data/monster/mammals/sibang.lua | 2 +- data/monster/mammals/thornfire_wolf.lua | 2 +- data/monster/mammals/vulcongra.lua | 4 +- data/monster/plants/carniphila.lua | 2 +- data/monster/plants/glooth_anemone.lua | 2 +- data/monster/plants/humongous_fungus.lua | 4 +- data/monster/plants/leaf_golem.lua | 2 +- data/monster/plants/omnivora.lua | 2 +- data/monster/plants/wilting_leaf_golem.lua | 2 +- .../cults_of_tibia/goldhanded_cultist.lua | 4 +- .../quests/cults_of_tibia/misguided_thief.lua | 2 +- .../cults_of_tibia/orc_cult_fanatic.lua | 2 +- .../baleful_bunny.lua | 6 +- data/monster/reptiles/cobra.lua | 2 +- data/monster/reptiles/lizard_chosen.lua | 2 +- .../monster/reptiles/lizard_dragon_priest.lua | 4 +- data/monster/reptiles/lizard_high_guard.lua | 2 +- data/monster/reptiles/lizard_legionnaire.lua | 4 +- data/monster/reptiles/lizard_magistratus.lua | 4 +- data/monster/reptiles/lizard_noble.lua | 4 +- data/monster/reptiles/lizard_sentinel.lua | 2 +- data/monster/reptiles/lizard_snakecharmer.lua | 2 +- data/monster/reptiles/lizard_templar.lua | 2 +- data/monster/reptiles/lizard_zaogun.lua | 6 +- data/monster/reptiles/sea_serpent.lua | 6 +- data/monster/reptiles/seacrest_serpent.lua | 8 +- data/monster/reptiles/serpent_spawn.lua | 2 +- data/monster/reptiles/stonerefiner.lua | 4 +- data/monster/reptiles/wyvern.lua | 2 +- data/monster/reptiles/young_sea_serpent.lua | 6 +- data/monster/slimes/defiler.lua | 2 +- data/monster/slimes/devourer.lua | 2 +- data/monster/slimes/glooth_blob.lua | 2 +- data/monster/slimes/ink_blob.lua | 6 +- data/monster/slimes/slime.lua | 2 +- data/monster/slimes/squidgy_slime.lua | 2 +- data/monster/undeads/bane_of_light.lua | 2 +- data/monster/undeads/banshee.lua | 4 +- data/monster/undeads/betrayed_wraith.lua | 6 +- data/monster/undeads/blightwalker.lua | 4 +- data/monster/undeads/blood_beast.lua | 4 +- data/monster/undeads/bonebeast.lua | 2 +- data/monster/undeads/burster_spectre.lua | 2 +- data/monster/undeads/crypt_shambler.lua | 2 +- data/monster/undeads/cursed_prospector.lua | 2 +- data/monster/undeads/demon_skeleton.lua | 4 +- data/monster/undeads/elder_mummy.lua | 2 +- data/monster/undeads/falcon_knight.lua | 2 +- data/monster/undeads/falcon_paladin.lua | 2 +- data/monster/undeads/ghost.lua | 2 +- data/monster/undeads/grave_guard.lua | 4 +- data/monster/undeads/gravedigger.lua | 2 +- data/monster/undeads/grim_reaper.lua | 2 +- data/monster/undeads/hand_of_cursed_fate.lua | 6 +- data/monster/undeads/lich.lua | 4 +- data/monster/undeads/lost_soul.lua | 4 +- data/monster/undeads/mummy.lua | 2 +- data/monster/undeads/ripper_spectre.lua | 2 +- data/monster/undeads/rot_elemental.lua | 2 +- data/monster/undeads/spectre.lua | 2 +- data/monster/undeads/tarnished_spirit.lua | 2 +- data/monster/undeads/undead_dragon.lua | 4 +- .../undeads/undead_elite_gladiator.lua | 4 +- data/monster/undeads/undead_gladiator.lua | 2 +- data/monster/undeads/vampire.lua | 2 +- data/monster/undeads/vampire_bride.lua | 2 +- data/monster/undeads/vampire_viscount.lua | 2 +- data/monster/undeads/vicious_manbat.lua | 2 +- data/monster/undeads/zombie.lua | 4 +- data/monster/vermins/ancient_scarab.lua | 2 +- data/monster/vermins/brimstone_bug.lua | 2 +- data/monster/vermins/cave_devourer.lua | 4 +- data/monster/vermins/centipede.lua | 2 +- data/monster/vermins/chasm_spawn.lua | 2 +- data/monster/vermins/crawler.lua | 2 +- data/monster/vermins/deepworm.lua | 4 +- data/monster/vermins/diremaw.lua | 6 +- data/monster/vermins/drillworm.lua | 6 +- data/monster/vermins/hibernal_moth.lua | 2 +- data/monster/vermins/hive_overseer.lua | 6 +- data/monster/vermins/insectoid_worker.lua | 2 +- data/monster/vermins/kollos.lua | 4 +- data/monster/vermins/lancer_beetle.lua | 2 +- data/monster/vermins/larva.lua | 2 +- data/monster/vermins/poison_spider.lua | 2 +- data/monster/vermins/scarab.lua | 2 +- data/monster/vermins/scorpion.lua | 2 +- data/monster/vermins/spidris.lua | 2 +- data/monster/vermins/spidris_elite.lua | 2 +- data/monster/vermins/spitter.lua | 2 +- data/monster/vermins/swarmer.lua | 2 +- data/monster/vermins/tarantula.lua | 2 +- data/monster/vermins/tunnel_tyrant.lua | 8 +- data/monster/vermins/wasp.lua | 2 +- data/monster/vermins/waspoid.lua | 2 +- data/monster/vermins/wiggler.lua | 2 +- data/npc/Naji.xml | 6 +- data/npc/scripts/bank.lua | 2 +- data/npc/scripts/default.lua | 16 +- .../scripts/creaturescripts/others/summon.lua | 6 +- .../globalevents/others/check_mount.lua | 1 + data/scripts/lib/register_actions.lua | 40 +- data/scripts/weapons/scripts/burst_arrow.lua | 1 + .../scripts/weapons/scripts/diamond_arrow.lua | 19 +- data/scripts/weapons/scripts/viper_star.lua | 1 + data/spells/scripts/summon/summons.lua | 34 +- data/startup/others/bitwise_flags.lua | 19 + data/startup/others/hireling_lib.lua | 3 +- data/startup/others/others.lua | 1 + data/startup/tables/item.lua | 67 ++++ data/startup/tables/tile.lua | 11 + src/CMakeLists.txt | 1 + src/configmanager.cpp | 2 + src/configmanager.h | 1 + src/const.h | 12 +- src/definitions.h | 4 +- src/enums.h | 23 +- src/familiars.cpp | 76 ++++ src/familiars.h | 64 ++++ src/game.cpp | 28 +- src/groups.cpp | 1 + src/guild.h | 7 + src/ioguild.cpp | 15 +- src/ioguild.h | 1 + src/iologindata.cpp | 10 + src/iomap.h | 4 +- src/luascript.cpp | 103 ++++- src/luascript.h | 7 + src/mounts.cpp | 4 +- src/mounts.h | 10 +- src/otserv.cpp | 6 + src/outfit.cpp | 3 +- src/outfit.h | 7 +- src/player.cpp | 85 ++++- src/player.h | 40 +- src/protocolgame.cpp | 191 +++++++--- src/protocolgame.h | 5 +- 320 files changed, 1763 insertions(+), 1002 deletions(-) create mode 100644 data/XML/familiars.xml create mode 100644 data/migrations/10.lua create mode 100644 data/startup/others/bitwise_flags.lua create mode 100644 src/familiars.cpp create mode 100644 src/familiars.h diff --git a/config.lua.dist b/config.lua.dist index aeed08347..b8494909f 100644 --- a/config.lua.dist +++ b/config.lua.dist @@ -43,8 +43,8 @@ maxItem = 2000 maxContainer = 100 --- Version -clientVersion = 1251 -clientVersionStr = "12.51" +clientVersion = 1260 +clientVersionStr = "12.60" -- Depot Limit freeDepotLimit = 2000 @@ -54,6 +54,9 @@ depotBoxes = 18 -- GameStore gamestoreByModules = true +-- NOTE: Access only for Premium Account +onlyPremiumAccount = false + -- Customs weatherRain = false thunderEffect = false diff --git a/data/XML/familiars.xml b/data/XML/familiars.xml new file mode 100644 index 000000000..3c446167b --- /dev/null +++ b/data/XML/familiars.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/XML/mounts.xml b/data/XML/mounts.xml index 3ad7a4807..399620d05 100644 --- a/data/XML/mounts.xml +++ b/data/XML/mounts.xml @@ -1,177 +1,181 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/XML/outfits.xml b/data/XML/outfits.xml index 2691e78df..546ac69bb 100644 --- a/data/XML/outfits.xml +++ b/data/XML/outfits.xml @@ -12,89 +12,91 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -108,87 +110,89 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/events/events.xml b/data/events/events.xml index ceff2b6cb..1664ade00 100644 --- a/data/events/events.xml +++ b/data/events/events.xml @@ -20,7 +20,7 @@ - + diff --git a/data/events/scripts/player.lua b/data/events/scripts/player.lua index c20d1b796..f03ada764 100644 --- a/data/events/scripts/player.lua +++ b/data/events/scripts/player.lua @@ -514,6 +514,10 @@ function Player:onItemMoved(item, count, fromPosition, toPosition, fromCylinder, end function Player:onMoveCreature(creature, fromPosition, toPosition) + if creature:isPlayer() and creature:getStorageValue(Storage.isTraining) == 1 and self:getGroup():hasFlag(PlayerFlag_CanPushAllCreatures) == false then + self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE) + return false + end return true end diff --git a/data/items/items.otb b/data/items/items.otb index 950834c45fa2826fc5c6ec9c1535a6ae30294271..e4b58863d36abf0aef55e4ac3568e7e14333406b 100644 GIT binary patch delta 35992 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 delta 12143 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 diff --git a/data/items/items.xml b/data/items/items.xml index bf59b3b5a..18a71b26d 100644 --- a/data/items/items.xml +++ b/data/items/items.xml @@ -46731,9 +46731,10 @@ - - + + + @@ -46850,6 +46851,8 @@ + + @@ -46997,21 +47000,24 @@ - + - + + + + @@ -48315,9 +48321,7 @@ - - - + @@ -51009,7 +51013,7 @@ - + diff --git a/data/lib/core/player.lua b/data/lib/core/player.lua index f8437e6d0..0d79362bb 100644 --- a/data/lib/core/player.lua +++ b/data/lib/core/player.lua @@ -259,42 +259,6 @@ function Player.isMage(self) self:getVocation():getId()) end --- Impact Analyser -function Player.sendHealingImpact(self, healAmmount) - -- TODO: Migrate to protocolgame.cpp - local msg = NetworkMessage() - msg:addByte(0xCC) -- DEC: 204 - msg:addByte(0) -- 0 = healing / 1 = damage (boolean) - msg:addU32(healAmmount) -- unsigned int - msg:sendToPlayer(self) -end - -function Player.sendDamageImpact(self, damage) - -- TODO: Migrate to protocolgame.cpp - local msg = NetworkMessage() - msg:addByte(0xCC) -- DEC: 204 - msg:addByte(1) -- 0 = healing / 1 = damage (boolean) - msg:addU32(damage) -- unsigned int - msg:sendToPlayer(self) -end - --- Loot Analyser -function Player.sendLootStats(self, item) - local msg = NetworkMessage() - msg:addByte(0xCF) -- loot analyser bit - msg:addItem(item, self) -- item userdata - msg:addString(getItemName(item:getId())) - msg:sendToPlayer(self) -end - --- Supply Analyser -function Player.sendWaste(self, item) - local msg = NetworkMessage() - msg:addByte(0xCE) -- waste bit - msg:addItemId(item) -- itemId - msg:sendToPlayer(self) -end - local ACCOUNT_STORAGES = {} function Player.getAccountStorage(self, accountId, key, forceUpdate) local accountId = self:getAccountId() diff --git a/data/lib/core/quests.lua b/data/lib/core/quests.lua index 8fd131af5..31a51c43e 100644 --- a/data/lib/core/quests.lua +++ b/data/lib/core/quests.lua @@ -1842,27 +1842,27 @@ if not Quests then }, [86] = { name = "Turmoil of War", - storageId = 65049, + storageId = Storage.KillingInTheNameOf.BudrikMinos, missionId = 10166, startValue = 0, endValue = 5000, description = function(player) return string.format( "Budrik asked you to kill 5000 minotaurs for him. You already killed %d minotaurs.", - (math.max(player:getStorageValue(65049), 0)) + (math.max(player:getStorageValue(Storage.KillingInTheNameOf.BudrikMinosCount), 0)) ) end }, [87] = { name = "Paw and Fur: Necromancers and Priestess", - storageId = 65050, + storageId = Storage.KillingInTheNameOf.LugriNecromancers, missionId = 10167, startValue = 0, endValue = 4000, description = function(player) return string.format( "You already hunted %d/4000 necromancers and priestess.", - (math.max(player:getStorageValue(65050), 0)) + (math.max(player:getStorageValue(Storage.KillingInTheNameOf.LugriNecromancerCount), 0)) ) end } diff --git a/data/lib/core/storages.lua b/data/lib/core/storages.lua index 301f875e9..5f1eabad4 100644 --- a/data/lib/core/storages.lua +++ b/data/lib/core/storages.lua @@ -166,47 +166,51 @@ Storage = { Recovering = 50018 }, Fourth = { - Moe = 50019 + Moe = 50019, + MoeTimer = 50020 }, Fifth = { - Memories = 50020 + Memories = 50021, + MemoriesShards = 50022 }, Sixth = { - Favor = 50021 + Favor = 50023, + FourMasks = 50024, + BlessedStatues = 50025 }, Set = { - Ritual = 50022 + Ritual = 50026 }, Eighth = { - Yonan = 50023, - Narsai = 50024, - Shimun = 50025, - Tefrit = 50026 + Yonan = 50027, + Narsai = 50028, + Shimun = 50029, + Tefrit = 50030 }, Nine = { - Owl = 50027 + Owl = 50031 }, Tem = { - Bleeds = 50028 + Bleeds = 50032 }, Eleven = { - Basin = 50029 + Basin = 50033 }, Twelve = { - Boss = 50030, - Bragrumol = 50031, - Mozradek = 50032, - Xogixath = 50033 + Boss = 50034, + Bragrumol = 50035, + Mozradek = 50036, + Xogixath = 50037 }, Thirteen = { - Fafnar = 50034, - Lyre = 50035, - Presente = 50036 + Fafnar = 50038, + Lyre = 50039, + Presente = 50040 }, Fourteen = { - Remains = 50037 + Remains = 50041 }, - UrmahlulluTimer = 50038 + UrmahlulluTimer = 50042 }, TheSecretLibrary = { -- Reserved storage from 50050 - 50069 @@ -2185,7 +2189,7 @@ Storage = { -- update 12.20 GraveDanger = {}, HandOfTheInquisitionOutfits = {}, - Kilmaresh = {}, + -- Kilmaresh = {}, done earlier in the file GraveDanger = {}, -- update 12.30 FeasterOfSouls = {}, diff --git a/data/lib/others/daily_reward_lib.lua b/data/lib/others/daily_reward_lib.lua index b5e1bf404..dabd64917 100644 --- a/data/lib/others/daily_reward_lib.lua +++ b/data/lib/others/daily_reward_lib.lua @@ -49,6 +49,14 @@ function Player.getCollectionTokens(self) return math.max(self:getStorageValue(DailyReward.storages.collectionTokens), 0) end +function Player.getJokerTokens(self) + return math.max(self:getStorageValue(DailyReward.storages.jokerTokens), 0) +end + +function Player.setJokerTokens(self, value) + self:setStorageValue(DailyReward.storages.jokerTokens, value) +end + function Player.setCollectionTokens(self, value) self:setStorageValue(DailyReward.storages.collectionTokens, value) end diff --git a/data/migrations/10.lua b/data/migrations/10.lua new file mode 100644 index 000000000..2c7477d68 --- /dev/null +++ b/data/migrations/10.lua @@ -0,0 +1,3 @@ +function onUpdateDatabase() + return false -- true = There are others migrations file | false = this is the last migration file +end diff --git a/data/migrations/9.lua b/data/migrations/9.lua index 2c7477d68..ee47c62af 100644 --- a/data/migrations/9.lua +++ b/data/migrations/9.lua @@ -1,3 +1,9 @@ function onUpdateDatabase() - return false -- true = There are others migrations file | false = this is the last migration file + print("> Updating database to version 10 (Mount Colors and familiars)") + db.query("ALTER TABLE `players` ADD `lookmountbody` tinyint(3) unsigned NOT NULL DEFAULT '0'") + db.query("ALTER TABLE `players` ADD `lookmountfeet` tinyint(3) unsigned NOT NULL DEFAULT '0'") + db.query("ALTER TABLE `players` ADD `lookmounthead` tinyint(3) unsigned NOT NULL DEFAULT '0'") + db.query("ALTER TABLE `players` ADD `lookmountlegs` tinyint(3) unsigned NOT NULL DEFAULT '0'") + db.query("ALTER TABLE `players` ADD `lookfamiliarstype` int(11) unsigned NOT NULL DEFAULT '0'") + return true end diff --git a/data/modules/scripts/daily_reward/daily_reward.lua b/data/modules/scripts/daily_reward/daily_reward.lua index fe5e17af9..0286f66a2 100644 --- a/data/modules/scripts/daily_reward/daily_reward.lua +++ b/data/modules/scripts/daily_reward/daily_reward.lua @@ -1,7 +1,7 @@ DailyRewardSystem = { Developer = "Westwol, Marcosvf132", - Version = "1.2", - lastUpdate = "26/09/2020 - 02:00", + Version = "1.3", + lastUpdate = "12/10/2020 - 20:30", ToDo = "Move this system to CPP" } @@ -19,6 +19,8 @@ local ClientPackets = { OpenRewardWall = 0xD8, OpenRewardHistory = 0xD9, SelectReward = 0xDA, + CollectionResource = 0x14, + JokerResource = 0x15 } --[[-- Constants @@ -78,10 +80,12 @@ DailyReward = { nextRewardTime = 14899, collectionTokens = 14901, staminaBonus = 14902, + jokerTokens = 14903, -- Global lastServerSave = 14110, avoidDouble = 13412, - notifyReset = 13413 + notifyReset = 13413, + avoidDoubleJoker = 13414 }, strikeBonuses = { @@ -239,7 +243,8 @@ DailyReward.loadDailyReward = function(playerId, source) source = REWARD_FROM_PANEL end - player:sendCollectionResource(player:getCollectionTokens()) + player:sendCollectionResource(ClientPackets.JokerResource, player:getJokerTokens()) + player:sendCollectionResource(ClientPackets.CollectionResource, player:getCollectionTokens()) player:sendDailyReward() player:sendOpenRewardWall(source) player:sendDailyRewardCollectionState(0) @@ -308,15 +313,30 @@ DailyReward.init = function(playerId) if not player then return false end + + if player:getJokerTokens() < 3 and tonumber(os.date("%m")) ~= player:getStorageValue(DailyReward.storages.avoidDoubleJoker) then + player:setStorageValue(DailyReward.storages.avoidDoubleJoker, tonumber(os.date("%m"))) + player:setJokerTokens(player:getJokerTokens() + 1) + end + + local timeMath = Game.getLastServerSave() - player:getNextRewardTime() if player:getNextRewardTime() < Game.getLastServerSave() then if player:getStorageValue(DailyReward.storages.notifyReset) ~= Game.getLastServerSave() then - player:setStreakLevel(0) player:setStorageValue(DailyReward.storages.notifyReset, Game.getLastServerSave()) - if player:getLastLoginSaved() > 0 then -- message wont appear at first character login - player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You just lost your daily reward streak.") + timeMath = math.ceil(timeMath/(DailyReward.serverTimeThreshold)) + if player:getJokerTokens() >= timeMath then + player:setJokerTokens(player:getJokerTokens() - timeMath) + player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You lost " .. timeMath .. " joker tokens to prevent loosing your streak.") + else + player:setStreakLevel(0) + if player:getLastLoginSaved() > 0 then -- message wont appear at first character login + player:setJokerTokens(-(player:getJokerTokens())) + player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You just lost your daily reward streak.") + end end end end + -- Daily reward golden icon if DailyReward.isRewardTaken(player:getId()) then player:sendDailyRewardCollectionState(0) @@ -349,21 +369,27 @@ function Player.sendOpenRewardWall(self, shrine) if DailyReward.isRewardTaken(self:getId()) then -- state (player already took reward? but just make sure noone wpe) msg:addByte(1) msg:addString("Sorry, you have already taken your daily reward or you are unable to collect it.") -- Unknown message - msg:addU32(0) --timeLeft to pickUp reward without loosing streak + if self:getJokerTokens() > 0 then + msg:addByte(1) + msg:addU16(self:getJokerTokens()) + else + msg:addByte(0) + end else msg:addByte(0) + msg:addByte(2) msg:addU32(Game.getLastServerSave() + DailyReward.serverTimeThreshold) --timeLeft to pickUp reward without loosing streak + msg:addU16(self:getJokerTokens()) end msg:addU16(self:getStreakLevel()) -- day strike - msg:addU16(24) -- unknown msg:sendToPlayer(self) end -function Player.sendCollectionResource(self, value) +function Player.sendCollectionResource(self, byte, value) -- TODO: Migrate to protocolgame.cpp local msg = NetworkMessage() msg:addByte(0xEE) -- resource byte - msg:addByte(0x14) + msg:addByte(byte) msg:addU64(value) msg:sendToPlayer(self) end diff --git a/data/monster/constructs/biting_book.lua b/data/monster/constructs/biting_book.lua index 18ba29295..f0f130162 100644 --- a/data/monster/constructs/biting_book.lua +++ b/data/monster/constructs/biting_book.lua @@ -59,9 +59,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/constructs/clay_guardian.lua b/data/monster/constructs/clay_guardian.lua index 06be95cf7..510a46b88 100644 --- a/data/monster/constructs/clay_guardian.lua +++ b/data/monster/constructs/clay_guardian.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/constructs/damaged_worker_golem.lua b/data/monster/constructs/damaged_worker_golem.lua index 778dc32f2..f2d837a95 100644 --- a/data/monster/constructs/damaged_worker_golem.lua +++ b/data/monster/constructs/damaged_worker_golem.lua @@ -60,7 +60,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/constructs/diamond_servant.lua b/data/monster/constructs/diamond_servant.lua index 1e72a2eea..91a347ebc 100644 --- a/data/monster/constructs/diamond_servant.lua +++ b/data/monster/constructs/diamond_servant.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 100, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/constructs/diamond_servant_replica.lua b/data/monster/constructs/diamond_servant_replica.lua index 961601827..6a3a45605 100644 --- a/data/monster/constructs/diamond_servant_replica.lua +++ b/data/monster/constructs/diamond_servant_replica.lua @@ -58,9 +58,9 @@ monster.flags = { runHealth = 100, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/constructs/enraged_crystal_golem.lua b/data/monster/constructs/enraged_crystal_golem.lua index f0c39755d..8cdbd6c64 100644 --- a/data/monster/constructs/enraged_crystal_golem.lua +++ b/data/monster/constructs/enraged_crystal_golem.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/constructs/eternal_guardian.lua b/data/monster/constructs/eternal_guardian.lua index 3ef012a63..0f22ce8cd 100644 --- a/data/monster/constructs/eternal_guardian.lua +++ b/data/monster/constructs/eternal_guardian.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/constructs/glooth_golem.lua b/data/monster/constructs/glooth_golem.lua index 4df939066..a1fe5e7ee 100644 --- a/data/monster/constructs/glooth_golem.lua +++ b/data/monster/constructs/glooth_golem.lua @@ -62,9 +62,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/constructs/golden_servant.lua b/data/monster/constructs/golden_servant.lua index 3ba188815..6c57ed05c 100644 --- a/data/monster/constructs/golden_servant.lua +++ b/data/monster/constructs/golden_servant.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 50, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/constructs/golden_servant_replica.lua b/data/monster/constructs/golden_servant_replica.lua index ee832030e..a11794ff9 100644 --- a/data/monster/constructs/golden_servant_replica.lua +++ b/data/monster/constructs/golden_servant_replica.lua @@ -60,7 +60,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/constructs/ice_golem.lua b/data/monster/constructs/ice_golem.lua index d41d3196e..2e4f4a6cb 100644 --- a/data/monster/constructs/ice_golem.lua +++ b/data/monster/constructs/ice_golem.lua @@ -60,8 +60,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/constructs/infected_weeper.lua b/data/monster/constructs/infected_weeper.lua index a370f81c7..9ce599d43 100644 --- a/data/monster/constructs/infected_weeper.lua +++ b/data/monster/constructs/infected_weeper.lua @@ -60,8 +60,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/constructs/lava_golem.lua b/data/monster/constructs/lava_golem.lua index 3f3a0c260..1c79a64f8 100644 --- a/data/monster/constructs/lava_golem.lua +++ b/data/monster/constructs/lava_golem.lua @@ -60,8 +60,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/constructs/magma_crawler.lua b/data/monster/constructs/magma_crawler.lua index a467226ea..494c4d39c 100644 --- a/data/monster/constructs/magma_crawler.lua +++ b/data/monster/constructs/magma_crawler.lua @@ -60,8 +60,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/constructs/metal_gargoyle.lua b/data/monster/constructs/metal_gargoyle.lua index d7966b71b..5bfb02334 100644 --- a/data/monster/constructs/metal_gargoyle.lua +++ b/data/monster/constructs/metal_gargoyle.lua @@ -64,7 +64,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/constructs/orewalker.lua b/data/monster/constructs/orewalker.lua index 2afcfff58..dbadd9433 100644 --- a/data/monster/constructs/orewalker.lua +++ b/data/monster/constructs/orewalker.lua @@ -61,7 +61,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/constructs/rustheap_golem.lua b/data/monster/constructs/rustheap_golem.lua index 295bf8494..68709c292 100644 --- a/data/monster/constructs/rustheap_golem.lua +++ b/data/monster/constructs/rustheap_golem.lua @@ -62,9 +62,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/constructs/stone_devourer.lua b/data/monster/constructs/stone_devourer.lua index eb853d865..ba6984a7c 100644 --- a/data/monster/constructs/stone_devourer.lua +++ b/data/monster/constructs/stone_devourer.lua @@ -62,8 +62,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/constructs/stone_golem.lua b/data/monster/constructs/stone_golem.lua index 8f4e3058d..ba8ca2afd 100644 --- a/data/monster/constructs/stone_golem.lua +++ b/data/monster/constructs/stone_golem.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/constructs/war_golem.lua b/data/monster/constructs/war_golem.lua index 2ef68427e..002450f5d 100644 --- a/data/monster/constructs/war_golem.lua +++ b/data/monster/constructs/war_golem.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/constructs/weeper.lua b/data/monster/constructs/weeper.lua index 331645ed4..4f42a574c 100644 --- a/data/monster/constructs/weeper.lua +++ b/data/monster/constructs/weeper.lua @@ -60,8 +60,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/constructs/worker_golem.lua b/data/monster/constructs/worker_golem.lua index 9f130d87f..79913454e 100644 --- a/data/monster/constructs/worker_golem.lua +++ b/data/monster/constructs/worker_golem.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/dawnport/dawn_scorpion.lua b/data/monster/dawnport/dawn_scorpion.lua index c2c18ae5c..ed1e8cfc2 100644 --- a/data/monster/dawnport/dawn_scorpion.lua +++ b/data/monster/dawnport/dawn_scorpion.lua @@ -47,7 +47,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/dawnport/scar_tribe_shaman.lua b/data/monster/dawnport/scar_tribe_shaman.lua index 911751e04..e4b95824b 100644 --- a/data/monster/dawnport/scar_tribe_shaman.lua +++ b/data/monster/dawnport/scar_tribe_shaman.lua @@ -46,7 +46,7 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/dawnport/woodling.lua b/data/monster/dawnport/woodling.lua index 200ae3413..f79f77e4e 100644 --- a/data/monster/dawnport/woodling.lua +++ b/data/monster/dawnport/woodling.lua @@ -97,9 +97,9 @@ monster.elements = { } monster.immunities = { - {type = "paralyze", condition = false}, + {type = "paralyze", condition = true}, {type = "outfit", condition = false}, - {type = "invisible", condition = false}, + {type = "invisible", condition = true}, {type = "bleed", condition = false} } diff --git a/data/monster/demons/askarak_demon.lua b/data/monster/demons/askarak_demon.lua index 6c6633cb9..cca884461 100644 --- a/data/monster/demons/askarak_demon.lua +++ b/data/monster/demons/askarak_demon.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/demons/askarak_lord.lua b/data/monster/demons/askarak_lord.lua index cf52f5b5f..7ef6bda42 100644 --- a/data/monster/demons/askarak_lord.lua +++ b/data/monster/demons/askarak_lord.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/demons/askarak_prince.lua b/data/monster/demons/askarak_prince.lua index 90c409ab4..bf827448f 100644 --- a/data/monster/demons/askarak_prince.lua +++ b/data/monster/demons/askarak_prince.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/demons/dark_torturer.lua b/data/monster/demons/dark_torturer.lua index 0b6446cee..cd32cf7b8 100644 --- a/data/monster/demons/dark_torturer.lua +++ b/data/monster/demons/dark_torturer.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/demons/dawnfire_asura.lua b/data/monster/demons/dawnfire_asura.lua index 232ec7aef..e6d44d6a4 100644 --- a/data/monster/demons/dawnfire_asura.lua +++ b/data/monster/demons/dawnfire_asura.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/demons/demon.lua b/data/monster/demons/demon.lua index 30a49f37d..5993fb4be 100644 --- a/data/monster/demons/demon.lua +++ b/data/monster/demons/demon.lua @@ -64,9 +64,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/demons/demon_outcast.lua b/data/monster/demons/demon_outcast.lua index c4b971f07..24f3e06b1 100644 --- a/data/monster/demons/demon_outcast.lua +++ b/data/monster/demons/demon_outcast.lua @@ -62,8 +62,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/demons/destroyer.lua b/data/monster/demons/destroyer.lua index 732573679..53bde72fd 100644 --- a/data/monster/demons/destroyer.lua +++ b/data/monster/demons/destroyer.lua @@ -61,7 +61,7 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, canWalkOnPoison = false, pet = false diff --git a/data/monster/demons/diabolic_imp.lua b/data/monster/demons/diabolic_imp.lua index 7d0a67615..19d05d3df 100644 --- a/data/monster/demons/diabolic_imp.lua +++ b/data/monster/demons/diabolic_imp.lua @@ -63,8 +63,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/demons/fire_devil.lua b/data/monster/demons/fire_devil.lua index 8a100495b..539c6fc4e 100644 --- a/data/monster/demons/fire_devil.lua +++ b/data/monster/demons/fire_devil.lua @@ -60,7 +60,7 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/demons/floating_savant.lua b/data/monster/demons/floating_savant.lua index 7c842b77a..029b097d7 100644 --- a/data/monster/demons/floating_savant.lua +++ b/data/monster/demons/floating_savant.lua @@ -59,7 +59,7 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/demons/frost_flower_asura.lua b/data/monster/demons/frost_flower_asura.lua index 4d62709b6..bcff69080 100644 --- a/data/monster/demons/frost_flower_asura.lua +++ b/data/monster/demons/frost_flower_asura.lua @@ -58,9 +58,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/demons/grimeleech.lua b/data/monster/demons/grimeleech.lua index 6fcf03bac..00dea2786 100644 --- a/data/monster/demons/grimeleech.lua +++ b/data/monster/demons/grimeleech.lua @@ -2,7 +2,7 @@ local mType = Game.createMonsterType("Grimeleech") local monster = {} monster.description = "a grimeleech" -monster.experience = 6560 +monster.experience = 7216 monster.outfit = { lookType = 855, lookHead = 0, @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/demons/hellfire_fighter.lua b/data/monster/demons/hellfire_fighter.lua index 3254c9530..f9acde9ff 100644 --- a/data/monster/demons/hellfire_fighter.lua +++ b/data/monster/demons/hellfire_fighter.lua @@ -60,7 +60,7 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/demons/hellflayer.lua b/data/monster/demons/hellflayer.lua index 80057e991..5e99075c1 100644 --- a/data/monster/demons/hellflayer.lua +++ b/data/monster/demons/hellflayer.lua @@ -2,7 +2,7 @@ local mType = Game.createMonsterType("Hellflayer") local monster = {} monster.description = "a hellflayer" -monster.experience = 4375 +monster.experience = 11000 monster.outfit = { lookType = 856, lookHead = 0, @@ -62,8 +62,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/demons/hellhound.lua b/data/monster/demons/hellhound.lua index aa21f0889..5a13ff41e 100644 --- a/data/monster/demons/hellhound.lua +++ b/data/monster/demons/hellhound.lua @@ -63,8 +63,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/demons/hellspawn.lua b/data/monster/demons/hellspawn.lua index 8782d8042..71524084b 100644 --- a/data/monster/demons/hellspawn.lua +++ b/data/monster/demons/hellspawn.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/demons/juggernaut.lua b/data/monster/demons/juggernaut.lua index 58df92ff9..2809fca81 100644 --- a/data/monster/demons/juggernaut.lua +++ b/data/monster/demons/juggernaut.lua @@ -2,7 +2,7 @@ local mType = Game.createMonsterType("Juggernaut") local monster = {} monster.description = "a juggernaut" -monster.experience = 4900 +monster.experience = 11200 monster.outfit = { lookType = 244, lookHead = 0, @@ -63,8 +63,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/demons/midnight_asura.lua b/data/monster/demons/midnight_asura.lua index 0eaeea1fe..5bb9842c2 100644 --- a/data/monster/demons/midnight_asura.lua +++ b/data/monster/demons/midnight_asura.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/demons/plaguesmith.lua b/data/monster/demons/plaguesmith.lua index eec2d9e64..60f6c0c7f 100644 --- a/data/monster/demons/plaguesmith.lua +++ b/data/monster/demons/plaguesmith.lua @@ -63,8 +63,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/demons/shaburak_demon.lua b/data/monster/demons/shaburak_demon.lua index 6cd4bf9ca..62824126d 100644 --- a/data/monster/demons/shaburak_demon.lua +++ b/data/monster/demons/shaburak_demon.lua @@ -61,8 +61,8 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnEnergy = true, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/demons/shaburak_lord.lua b/data/monster/demons/shaburak_lord.lua index 14854c7c4..86941351c 100644 --- a/data/monster/demons/shaburak_lord.lua +++ b/data/monster/demons/shaburak_lord.lua @@ -61,8 +61,8 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnEnergy = true, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/demons/shaburak_prince.lua b/data/monster/demons/shaburak_prince.lua index 30c860d0d..59c8408d2 100644 --- a/data/monster/demons/shaburak_prince.lua +++ b/data/monster/demons/shaburak_prince.lua @@ -61,8 +61,8 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnEnergy = true, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/demons/shadow_hound.lua b/data/monster/demons/shadow_hound.lua index daf177491..048cb72a0 100644 --- a/data/monster/demons/shadow_hound.lua +++ b/data/monster/demons/shadow_hound.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/demons/true_midnight_asura.lua b/data/monster/demons/true_midnight_asura.lua index b31209684..b62edf543 100644 --- a/data/monster/demons/true_midnight_asura.lua +++ b/data/monster/demons/true_midnight_asura.lua @@ -58,9 +58,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/demons/vexclaw.lua b/data/monster/demons/vexclaw.lua index 634743dcf..bc5627d69 100644 --- a/data/monster/demons/vexclaw.lua +++ b/data/monster/demons/vexclaw.lua @@ -2,7 +2,7 @@ local mType = Game.createMonsterType("Vexclaw") local monster = {} monster.description = "a vexclaw" -monster.experience = 5680 +monster.experience = 6248 monster.outfit = { lookType = 854, lookHead = 0, @@ -62,8 +62,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/dragons/dragon_hatchling.lua b/data/monster/dragons/dragon_hatchling.lua index 88ebb84cc..4e5098396 100644 --- a/data/monster/dragons/dragon_hatchling.lua +++ b/data/monster/dragons/dragon_hatchling.lua @@ -62,9 +62,9 @@ monster.flags = { runHealth = 20, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/dragons/dragon_lord.lua b/data/monster/dragons/dragon_lord.lua index b1fdb5c98..7507c4b5a 100644 --- a/data/monster/dragons/dragon_lord.lua +++ b/data/monster/dragons/dragon_lord.lua @@ -36,7 +36,7 @@ monster.health = 1900 monster.maxHealth = 1900 monster.race = "blood" monster.corpse = 5984 -monster.speed = 200 +monster.speed = 100 monster.summonCost = 0 monster.maxSummons = 0 @@ -67,9 +67,9 @@ monster.flags = { runHealth = 300, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } @@ -112,14 +112,14 @@ monster.loot = { monster.attacks = { {name ="melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -230}, - {name ="combat", interval = 2000, chance = 20, type = COMBAT_FIREDAMAGE, minDamage = -100, maxDamage = -200, range = 7, radius = 4, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREAREA, target = true}, + {name ="combat", interval = 2000, chance = 30, type = COMBAT_FIREDAMAGE, minDamage = -100, maxDamage = -220, range = 7, radius = 4, shootEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREAREA, target = true}, {name ="firefield", interval = 2000, chance = 10, range = 7, radius = 4, shootEffect = CONST_ANI_FIRE, target = true}, - {name ="combat", interval = 2000, chance = 15, type = COMBAT_FIREDAMAGE, minDamage = -150, maxDamage = -230, length = 8, spread = 3, effect = CONST_ME_FIREAREA, target = false} + {name ="combat", interval = 2000, chance = 22, type = COMBAT_FIREDAMAGE, minDamage = -150, maxDamage = -270, length = 8, spread = 3, effect = CONST_ME_FIREAREA, target = false} } monster.defenses = { - defense = 35, - armor = 35, + defense = 34, + armor = 34, {name ="combat", interval = 2000, chance = 15, type = COMBAT_HEALING, minDamage = 57, maxDamage = 93, effect = CONST_ME_MAGIC_BLUE, target = false} } diff --git a/data/monster/dragons/dragon_lord_hatchling.lua b/data/monster/dragons/dragon_lord_hatchling.lua index f165b4286..61f1296f3 100644 --- a/data/monster/dragons/dragon_lord_hatchling.lua +++ b/data/monster/dragons/dragon_lord_hatchling.lua @@ -62,9 +62,9 @@ monster.flags = { runHealth = 30, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/dragons/draken_abomination.lua b/data/monster/dragons/draken_abomination.lua index 8d1e66806..9dc3e2178 100644 --- a/data/monster/dragons/draken_abomination.lua +++ b/data/monster/dragons/draken_abomination.lua @@ -59,8 +59,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/dragons/draken_elite.lua b/data/monster/dragons/draken_elite.lua index 0f22f6935..7ea6dd5d5 100644 --- a/data/monster/dragons/draken_elite.lua +++ b/data/monster/dragons/draken_elite.lua @@ -58,9 +58,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/dragons/draken_spellweaver.lua b/data/monster/dragons/draken_spellweaver.lua index f8f8be841..3f5df3823 100644 --- a/data/monster/dragons/draken_spellweaver.lua +++ b/data/monster/dragons/draken_spellweaver.lua @@ -59,8 +59,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/dragons/draken_warmaster.lua b/data/monster/dragons/draken_warmaster.lua index 3825b055f..33e476399 100644 --- a/data/monster/dragons/draken_warmaster.lua +++ b/data/monster/dragons/draken_warmaster.lua @@ -58,9 +58,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/dragons/elder_wyrm.lua b/data/monster/dragons/elder_wyrm.lua index 9249afec6..36707a295 100644 --- a/data/monster/dragons/elder_wyrm.lua +++ b/data/monster/dragons/elder_wyrm.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 250, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/dragons/frost_dragon.lua b/data/monster/dragons/frost_dragon.lua index 02d6bf0ed..9edd3464a 100644 --- a/data/monster/dragons/frost_dragon.lua +++ b/data/monster/dragons/frost_dragon.lua @@ -63,8 +63,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/dragons/frost_dragon_hatchling.lua b/data/monster/dragons/frost_dragon_hatchling.lua index 6eb1a02d3..4c6df36f5 100644 --- a/data/monster/dragons/frost_dragon_hatchling.lua +++ b/data/monster/dragons/frost_dragon_hatchling.lua @@ -62,9 +62,9 @@ monster.flags = { runHealth = 80, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/dragons/ghastly_dragon.lua b/data/monster/dragons/ghastly_dragon.lua index 2b9b09d8e..24d2f779e 100644 --- a/data/monster/dragons/ghastly_dragon.lua +++ b/data/monster/dragons/ghastly_dragon.lua @@ -64,7 +64,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/dragons/haunted_dragon.lua b/data/monster/dragons/haunted_dragon.lua index 2cc59fd34..64e480a0f 100644 --- a/data/monster/dragons/haunted_dragon.lua +++ b/data/monster/dragons/haunted_dragon.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/dragons/hydra.lua b/data/monster/dragons/hydra.lua index bc7ac767b..6add69343 100644 --- a/data/monster/dragons/hydra.lua +++ b/data/monster/dragons/hydra.lua @@ -66,9 +66,9 @@ monster.flags = { runHealth = 300, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/dragons/wyrm.lua b/data/monster/dragons/wyrm.lua index 2249fb6fa..0a9e0ca41 100644 --- a/data/monster/dragons/wyrm.lua +++ b/data/monster/dragons/wyrm.lua @@ -62,9 +62,9 @@ monster.flags = { runHealth = 1, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/elementals/cliff_strider.lua b/data/monster/elementals/cliff_strider.lua index 1ec864138..6f073b19e 100644 --- a/data/monster/elementals/cliff_strider.lua +++ b/data/monster/elementals/cliff_strider.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/elementals/earth_elemental.lua b/data/monster/elementals/earth_elemental.lua index 584b4de24..d2036da7c 100644 --- a/data/monster/elementals/earth_elemental.lua +++ b/data/monster/elementals/earth_elemental.lua @@ -62,9 +62,9 @@ monster.flags = { runHealth = 80, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/elementals/energy_elemental.lua b/data/monster/elementals/energy_elemental.lua index 86974daa5..6f4595b22 100644 --- a/data/monster/elementals/energy_elemental.lua +++ b/data/monster/elementals/energy_elemental.lua @@ -61,8 +61,8 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnEnergy = true, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/elementals/fire_elemental.lua b/data/monster/elementals/fire_elemental.lua index 875c5d6e6..a6106a57b 100644 --- a/data/monster/elementals/fire_elemental.lua +++ b/data/monster/elementals/fire_elemental.lua @@ -61,7 +61,7 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/elementals/high_voltage_elemental.lua b/data/monster/elementals/high_voltage_elemental.lua index f3e0d6e37..7b04a4702 100644 --- a/data/monster/elementals/high_voltage_elemental.lua +++ b/data/monster/elementals/high_voltage_elemental.lua @@ -61,8 +61,8 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnEnergy = true, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/elementals/ironblight.lua b/data/monster/elementals/ironblight.lua index 0ea2a685a..da52792e3 100644 --- a/data/monster/elementals/ironblight.lua +++ b/data/monster/elementals/ironblight.lua @@ -62,8 +62,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/elementals/knowledge_elemental.lua b/data/monster/elementals/knowledge_elemental.lua index f777855a3..866322e21 100644 --- a/data/monster/elementals/knowledge_elemental.lua +++ b/data/monster/elementals/knowledge_elemental.lua @@ -2,7 +2,7 @@ local mType = Game.createMonsterType("Knowledge Elemental") local monster = {} monster.description = "a knowledge elemental" -monster.experience = 10710 +monster.experience = 10603 monster.outfit = { lookType = 1065, lookHead = 0, @@ -58,9 +58,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/elementals/lava_lurker.lua b/data/monster/elementals/lava_lurker.lua index 5f6be3d6a..b18688302 100644 --- a/data/monster/elementals/lava_lurker.lua +++ b/data/monster/elementals/lava_lurker.lua @@ -62,7 +62,7 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/elementals/massive_earth_elemental.lua b/data/monster/elementals/massive_earth_elemental.lua index 2dcdff10c..108150c97 100644 --- a/data/monster/elementals/massive_earth_elemental.lua +++ b/data/monster/elementals/massive_earth_elemental.lua @@ -64,7 +64,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/elementals/massive_energy_elemental.lua b/data/monster/elementals/massive_energy_elemental.lua index be97e601b..ea5087d55 100644 --- a/data/monster/elementals/massive_energy_elemental.lua +++ b/data/monster/elementals/massive_energy_elemental.lua @@ -61,8 +61,8 @@ monster.flags = { runHealth = 1, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnEnergy = true, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/elementals/massive_fire_elemental.lua b/data/monster/elementals/massive_fire_elemental.lua index 94791a70f..700bc5d8c 100644 --- a/data/monster/elementals/massive_fire_elemental.lua +++ b/data/monster/elementals/massive_fire_elemental.lua @@ -60,7 +60,7 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/elementals/massive_water_elemental.lua b/data/monster/elementals/massive_water_elemental.lua index bf0d5e109..60c59d3d8 100644 --- a/data/monster/elementals/massive_water_elemental.lua +++ b/data/monster/elementals/massive_water_elemental.lua @@ -63,8 +63,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/elementals/raging_fire.lua b/data/monster/elementals/raging_fire.lua index ad9bdf163..4b3ccd4d3 100644 --- a/data/monster/elementals/raging_fire.lua +++ b/data/monster/elementals/raging_fire.lua @@ -60,7 +60,7 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/elementals/ravenous_lava_lurker.lua b/data/monster/elementals/ravenous_lava_lurker.lua index e73db890d..37e96396a 100644 --- a/data/monster/elementals/ravenous_lava_lurker.lua +++ b/data/monster/elementals/ravenous_lava_lurker.lua @@ -62,7 +62,7 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/elementals/water_elemental.lua b/data/monster/elementals/water_elemental.lua index 5ba67f1ec..14aa0956c 100644 --- a/data/monster/elementals/water_elemental.lua +++ b/data/monster/elementals/water_elemental.lua @@ -64,8 +64,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/extra_dimensional/breach_brood.lua b/data/monster/extra_dimensional/breach_brood.lua index 69b2e48a2..7d82d9f27 100644 --- a/data/monster/extra_dimensional/breach_brood.lua +++ b/data/monster/extra_dimensional/breach_brood.lua @@ -61,8 +61,8 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnEnergy = true, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/extra_dimensional/dread_intruder.lua b/data/monster/extra_dimensional/dread_intruder.lua index e5100289f..5dee73dd7 100644 --- a/data/monster/extra_dimensional/dread_intruder.lua +++ b/data/monster/extra_dimensional/dread_intruder.lua @@ -61,7 +61,7 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, canWalkOnPoison = false, pet = false diff --git a/data/monster/extra_dimensional/reality_reaver.lua b/data/monster/extra_dimensional/reality_reaver.lua index 96fdc904b..6e303c34f 100644 --- a/data/monster/extra_dimensional/reality_reaver.lua +++ b/data/monster/extra_dimensional/reality_reaver.lua @@ -61,8 +61,8 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnEnergy = true, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/extra_dimensional/stabilizing_dread_intruder.lua b/data/monster/extra_dimensional/stabilizing_dread_intruder.lua index fab636c51..07aaef1a8 100644 --- a/data/monster/extra_dimensional/stabilizing_dread_intruder.lua +++ b/data/monster/extra_dimensional/stabilizing_dread_intruder.lua @@ -61,7 +61,7 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, canWalkOnPoison = false, pet = false diff --git a/data/monster/extra_dimensional/yielothax.lua b/data/monster/extra_dimensional/yielothax.lua index 47667ed61..922dbb0b5 100644 --- a/data/monster/extra_dimensional/yielothax.lua +++ b/data/monster/extra_dimensional/yielothax.lua @@ -62,8 +62,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/giants/behemoth.lua b/data/monster/giants/behemoth.lua index 1cc3aa229..6a4d80081 100644 --- a/data/monster/giants/behemoth.lua +++ b/data/monster/giants/behemoth.lua @@ -62,8 +62,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/giants/ogre_rowdy.lua b/data/monster/giants/ogre_rowdy.lua index efde57df0..12625a424 100644 --- a/data/monster/giants/ogre_rowdy.lua +++ b/data/monster/giants/ogre_rowdy.lua @@ -60,8 +60,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/giants/ogre_ruffian.lua b/data/monster/giants/ogre_ruffian.lua index bf1b0600d..36deb66ff 100644 --- a/data/monster/giants/ogre_ruffian.lua +++ b/data/monster/giants/ogre_ruffian.lua @@ -59,9 +59,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/giants/ogre_sage.lua b/data/monster/giants/ogre_sage.lua index 7b8d7495d..e054a3a1c 100644 --- a/data/monster/giants/ogre_sage.lua +++ b/data/monster/giants/ogre_sage.lua @@ -60,8 +60,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/humanoids/broken_shaper.lua b/data/monster/humanoids/broken_shaper.lua index 6fa8b9601..4a34db5dc 100644 --- a/data/monster/humanoids/broken_shaper.lua +++ b/data/monster/humanoids/broken_shaper.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/humanoids/chakoya_toolshaper.lua b/data/monster/humanoids/chakoya_toolshaper.lua index 76edb5ca5..c049266da 100644 --- a/data/monster/humanoids/chakoya_toolshaper.lua +++ b/data/monster/humanoids/chakoya_toolshaper.lua @@ -58,9 +58,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/humanoids/chakoya_tribewarden.lua b/data/monster/humanoids/chakoya_tribewarden.lua index 09fd67b59..0cc3126d7 100644 --- a/data/monster/humanoids/chakoya_tribewarden.lua +++ b/data/monster/humanoids/chakoya_tribewarden.lua @@ -58,9 +58,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/humanoids/dworc_fleshhunter.lua b/data/monster/humanoids/dworc_fleshhunter.lua index 8be88a040..6b638991f 100644 --- a/data/monster/humanoids/dworc_fleshhunter.lua +++ b/data/monster/humanoids/dworc_fleshhunter.lua @@ -60,7 +60,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/humanoids/dworc_venomsniper.lua b/data/monster/humanoids/dworc_venomsniper.lua index 59bae4c70..cd787a484 100644 --- a/data/monster/humanoids/dworc_venomsniper.lua +++ b/data/monster/humanoids/dworc_venomsniper.lua @@ -60,7 +60,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/humanoids/dworc_voodoomaster.lua b/data/monster/humanoids/dworc_voodoomaster.lua index d3d8f4207..fafc77c9c 100644 --- a/data/monster/humanoids/dworc_voodoomaster.lua +++ b/data/monster/humanoids/dworc_voodoomaster.lua @@ -61,7 +61,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/humanoids/enslaved_dwarf.lua b/data/monster/humanoids/enslaved_dwarf.lua index ccfa5c225..ccc47e78c 100644 --- a/data/monster/humanoids/enslaved_dwarf.lua +++ b/data/monster/humanoids/enslaved_dwarf.lua @@ -62,7 +62,7 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/humanoids/firestarter.lua b/data/monster/humanoids/firestarter.lua index 6401b9e85..58c4d6613 100644 --- a/data/monster/humanoids/firestarter.lua +++ b/data/monster/humanoids/firestarter.lua @@ -59,7 +59,7 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/humanoids/lost_berserker.lua b/data/monster/humanoids/lost_berserker.lua index dc6473c35..1f9d81c9d 100644 --- a/data/monster/humanoids/lost_berserker.lua +++ b/data/monster/humanoids/lost_berserker.lua @@ -62,8 +62,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/humanoids/mooh'tah_warrior.lua b/data/monster/humanoids/mooh'tah_warrior.lua index 3e0796c75..2813f263a 100644 --- a/data/monster/humanoids/mooh'tah_warrior.lua +++ b/data/monster/humanoids/mooh'tah_warrior.lua @@ -59,9 +59,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/humanoids/moohtant.lua b/data/monster/humanoids/moohtant.lua index 27b791535..6a192f44f 100644 --- a/data/monster/humanoids/moohtant.lua +++ b/data/monster/humanoids/moohtant.lua @@ -61,7 +61,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/humanoids/orc_leader.lua b/data/monster/humanoids/orc_leader.lua index eb844d030..7de138ac9 100644 --- a/data/monster/humanoids/orc_leader.lua +++ b/data/monster/humanoids/orc_leader.lua @@ -61,7 +61,7 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/humanoids/orc_warlord.lua b/data/monster/humanoids/orc_warlord.lua index 01829ed13..1345b6441 100644 --- a/data/monster/humanoids/orc_warlord.lua +++ b/data/monster/humanoids/orc_warlord.lua @@ -61,7 +61,7 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/humanoids/shaper_matriarch.lua b/data/monster/humanoids/shaper_matriarch.lua index ebb7a1afe..3fcc453c3 100644 --- a/data/monster/humanoids/shaper_matriarch.lua +++ b/data/monster/humanoids/shaper_matriarch.lua @@ -61,8 +61,8 @@ monster.flags = { runHealth = 15, healthHidden = false, isBlockable = false, - canWalkOnEnergy = true, - canWalkOnFire = true, + canWalkOnEnergy = false, + canWalkOnFire = false, canWalkOnPoison = true, pet = false } diff --git a/data/monster/humanoids/soul-broken_harbinger.lua b/data/monster/humanoids/soul-broken_harbinger.lua index 7c8972718..9637fa8c2 100644 --- a/data/monster/humanoids/soul-broken_harbinger.lua +++ b/data/monster/humanoids/soul-broken_harbinger.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/humans/acolyte_of_darkness.lua b/data/monster/humans/acolyte_of_darkness.lua index e135f6f59..2aa5894d2 100644 --- a/data/monster/humans/acolyte_of_darkness.lua +++ b/data/monster/humans/acolyte_of_darkness.lua @@ -59,8 +59,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/humans/blood_hand.lua b/data/monster/humans/blood_hand.lua index 533d19ce3..f9992feb0 100644 --- a/data/monster/humans/blood_hand.lua +++ b/data/monster/humans/blood_hand.lua @@ -60,7 +60,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/humans/blood_priest.lua b/data/monster/humans/blood_priest.lua index e9934fca5..7c138d1a6 100644 --- a/data/monster/humans/blood_priest.lua +++ b/data/monster/humans/blood_priest.lua @@ -60,7 +60,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/humans/cobra_assassin.lua b/data/monster/humans/cobra_assassin.lua index d2821e517..fb5b1a0b4 100644 --- a/data/monster/humans/cobra_assassin.lua +++ b/data/monster/humans/cobra_assassin.lua @@ -2,7 +2,7 @@ local mType = Game.createMonsterType("Cobra Assassin") local monster = {} monster.description = "a cobra assassin" -monster.experience = 7560 +monster.experience = 8316 monster.outfit = { lookType = 1217, lookHead = 2, diff --git a/data/monster/humans/cobra_vizier.lua b/data/monster/humans/cobra_vizier.lua index acdd2336c..f312b00d8 100644 --- a/data/monster/humans/cobra_vizier.lua +++ b/data/monster/humans/cobra_vizier.lua @@ -2,7 +2,7 @@ local mType = Game.createMonsterType("Cobra Vizier") local monster = {} monster.description = "a cobra vizier" -monster.experience = 7920 +monster.experience = 9108 monster.outfit = { lookType = 1217, lookHead = 19, diff --git a/data/monster/humans/glooth_bandit.lua b/data/monster/humans/glooth_bandit.lua index e5c18f0d2..81f7cee70 100644 --- a/data/monster/humans/glooth_bandit.lua +++ b/data/monster/humans/glooth_bandit.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/humans/glooth_brigand.lua b/data/monster/humans/glooth_brigand.lua index 0b547604c..5c0183626 100644 --- a/data/monster/humans/glooth_brigand.lua +++ b/data/monster/humans/glooth_brigand.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/humans/hero.lua b/data/monster/humans/hero.lua index d6c60b7d8..4c30f3df4 100644 --- a/data/monster/humans/hero.lua +++ b/data/monster/humans/hero.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/humans/infernalist.lua b/data/monster/humans/infernalist.lua index cab2d7ced..2a45c0368 100644 --- a/data/monster/humans/infernalist.lua +++ b/data/monster/humans/infernalist.lua @@ -58,9 +58,9 @@ monster.flags = { runHealth = 900, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/humans/mutated_human.lua b/data/monster/humans/mutated_human.lua index 7dd826bf7..196346432 100644 --- a/data/monster/humans/mutated_human.lua +++ b/data/monster/humans/mutated_human.lua @@ -60,7 +60,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/humans/necromancer.lua b/data/monster/humans/necromancer.lua index a2261a319..d246e124a 100644 --- a/data/monster/humans/necromancer.lua +++ b/data/monster/humans/necromancer.lua @@ -61,7 +61,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/humans/pirate_cutthroat.lua b/data/monster/humans/pirate_cutthroat.lua index f3a5b0ad5..28c422f61 100644 --- a/data/monster/humans/pirate_cutthroat.lua +++ b/data/monster/humans/pirate_cutthroat.lua @@ -58,9 +58,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/humans/shadow_pupil.lua b/data/monster/humans/shadow_pupil.lua index 024170729..d026b19b0 100644 --- a/data/monster/humans/shadow_pupil.lua +++ b/data/monster/humans/shadow_pupil.lua @@ -60,7 +60,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/humans/vicious_squire.lua b/data/monster/humans/vicious_squire.lua index 7389a0168..343becc36 100644 --- a/data/monster/humans/vicious_squire.lua +++ b/data/monster/humans/vicious_squire.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/humans/warlock.lua b/data/monster/humans/warlock.lua index db4b9dbf9..d0341e951 100644 --- a/data/monster/humans/warlock.lua +++ b/data/monster/humans/warlock.lua @@ -59,9 +59,9 @@ monster.flags = { runHealth = 900, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/humans/witch.lua b/data/monster/humans/witch.lua index d7025ba4a..94a43cd73 100644 --- a/data/monster/humans/witch.lua +++ b/data/monster/humans/witch.lua @@ -61,7 +61,7 @@ monster.flags = { runHealth = 30, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, canWalkOnPoison = false, pet = false diff --git a/data/monster/lycanthropes/werebadger.lua b/data/monster/lycanthropes/werebadger.lua index bf8b533d3..df6b13b19 100644 --- a/data/monster/lycanthropes/werebadger.lua +++ b/data/monster/lycanthropes/werebadger.lua @@ -62,9 +62,9 @@ monster.flags = { runHealth = 275, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/lycanthropes/werebear.lua b/data/monster/lycanthropes/werebear.lua index 01297cb3f..53af6fecc 100644 --- a/data/monster/lycanthropes/werebear.lua +++ b/data/monster/lycanthropes/werebear.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 275, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/lycanthropes/wereboar.lua b/data/monster/lycanthropes/wereboar.lua index d0bba1940..062fd067a 100644 --- a/data/monster/lycanthropes/wereboar.lua +++ b/data/monster/lycanthropes/wereboar.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 275, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/lycanthropes/werefox.lua b/data/monster/lycanthropes/werefox.lua index 58be6ca9d..782d2ebfa 100644 --- a/data/monster/lycanthropes/werefox.lua +++ b/data/monster/lycanthropes/werefox.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/lycanthropes/werehyaena.lua b/data/monster/lycanthropes/werehyaena.lua index cf8334a2e..b2f20288e 100644 --- a/data/monster/lycanthropes/werehyaena.lua +++ b/data/monster/lycanthropes/werehyaena.lua @@ -45,7 +45,7 @@ monster.flags = { runHealth = 30, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = true, canWalkOnPoison = true, pet = false diff --git a/data/monster/lycanthropes/werewolf.lua b/data/monster/lycanthropes/werewolf.lua index 78d0957cf..33df0ea04 100644 --- a/data/monster/lycanthropes/werewolf.lua +++ b/data/monster/lycanthropes/werewolf.lua @@ -58,9 +58,9 @@ monster.flags = { runHealth = 300, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/armadile.lua b/data/monster/magicals/armadile.lua index 78b0c92d8..ddafc167c 100644 --- a/data/monster/magicals/armadile.lua +++ b/data/monster/magicals/armadile.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/brain_squid.lua b/data/monster/magicals/brain_squid.lua index e425f8c95..1b62d3901 100644 --- a/data/monster/magicals/brain_squid.lua +++ b/data/monster/magicals/brain_squid.lua @@ -2,7 +2,7 @@ local mType = Game.createMonsterType("Brain Squid") local monster = {} monster.description = "a brain squid" -monster.experience = 17850 +monster.experience = 17672 monster.outfit = { lookType = 1059, lookHead = 97, @@ -58,9 +58,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/braindeath.lua b/data/monster/magicals/braindeath.lua index 75de0645d..3a67a45c4 100644 --- a/data/monster/magicals/braindeath.lua +++ b/data/monster/magicals/braindeath.lua @@ -62,8 +62,8 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = true, - canWalkOnFire = true, + canWalkOnEnergy = false, + canWalkOnFire = false, canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/burning_book.lua b/data/monster/magicals/burning_book.lua index feed96986..04eb97434 100644 --- a/data/monster/magicals/burning_book.lua +++ b/data/monster/magicals/burning_book.lua @@ -59,8 +59,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/crypt_warden.lua b/data/monster/magicals/crypt_warden.lua index 97595ec9d..98caa4381 100644 --- a/data/monster/magicals/crypt_warden.lua +++ b/data/monster/magicals/crypt_warden.lua @@ -58,9 +58,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/crystalcrusher.lua b/data/monster/magicals/crystalcrusher.lua index 6cd8f0a85..c1bf7a09f 100644 --- a/data/monster/magicals/crystalcrusher.lua +++ b/data/monster/magicals/crystalcrusher.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/cursed_book.lua b/data/monster/magicals/cursed_book.lua index 9705a1f0f..ca7897ac1 100644 --- a/data/monster/magicals/cursed_book.lua +++ b/data/monster/magicals/cursed_book.lua @@ -59,8 +59,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/dragonling.lua b/data/monster/magicals/dragonling.lua index 6e821fa3f..693c6db76 100644 --- a/data/monster/magicals/dragonling.lua +++ b/data/monster/magicals/dragonling.lua @@ -62,8 +62,8 @@ monster.flags = { runHealth = 900, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnEnergy = true, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/magicals/energetic_book.lua b/data/monster/magicals/energetic_book.lua index 9afb2ef72..dab7ecc83 100644 --- a/data/monster/magicals/energetic_book.lua +++ b/data/monster/magicals/energetic_book.lua @@ -2,7 +2,7 @@ local mType = Game.createMonsterType("Energetic Book") local monster = {} monster.description = "an energetic book" -monster.experience = 12155 +monster.experience = 12034 monster.outfit = { lookType = 1061, lookHead = 15, @@ -58,8 +58,8 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnEnergy = true, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/magicals/energuardian_of_tales.lua b/data/monster/magicals/energuardian_of_tales.lua index e58d295ce..546a78398 100644 --- a/data/monster/magicals/energuardian_of_tales.lua +++ b/data/monster/magicals/energuardian_of_tales.lua @@ -2,7 +2,7 @@ local mType = Game.createMonsterType("Energuardian of Tales") local monster = {} monster.description = "an energuardian of tales" -monster.experience = 11475 +monster.experience = 11361 monster.outfit = { lookType = 1063, lookHead = 66, @@ -58,8 +58,8 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnEnergy = true, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/magicals/feversleep.lua b/data/monster/magicals/feversleep.lua index c3f7cc8c6..b6d8b4050 100644 --- a/data/monster/magicals/feversleep.lua +++ b/data/monster/magicals/feversleep.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/flying_book.lua b/data/monster/magicals/flying_book.lua index ef7b19ca1..e31eedf4f 100644 --- a/data/monster/magicals/flying_book.lua +++ b/data/monster/magicals/flying_book.lua @@ -60,7 +60,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/forest_fury.lua b/data/monster/magicals/forest_fury.lua index 885f2b68f..df94e5ea8 100644 --- a/data/monster/magicals/forest_fury.lua +++ b/data/monster/magicals/forest_fury.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/frazzlemaw.lua b/data/monster/magicals/frazzlemaw.lua index 557962416..a66d1d1c1 100644 --- a/data/monster/magicals/frazzlemaw.lua +++ b/data/monster/magicals/frazzlemaw.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/gargoyle.lua b/data/monster/magicals/gargoyle.lua index 40fa2f79f..bd5d91beb 100644 --- a/data/monster/magicals/gargoyle.lua +++ b/data/monster/magicals/gargoyle.lua @@ -62,7 +62,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/guardian_of_tales.lua b/data/monster/magicals/guardian_of_tales.lua index 9950b0e0e..6bd3bc836 100644 --- a/data/monster/magicals/guardian_of_tales.lua +++ b/data/monster/magicals/guardian_of_tales.lua @@ -58,9 +58,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/guzzlemaw.lua b/data/monster/magicals/guzzlemaw.lua index 6bb7f0e91..f3b232ace 100644 --- a/data/monster/magicals/guzzlemaw.lua +++ b/data/monster/magicals/guzzlemaw.lua @@ -62,9 +62,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/icecold_book.lua b/data/monster/magicals/icecold_book.lua index db1e50cad..5c9c93137 100644 --- a/data/monster/magicals/icecold_book.lua +++ b/data/monster/magicals/icecold_book.lua @@ -59,7 +59,7 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = true, - canWalkOnFire = false, + canWalkOnFire = true, canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/lumbering_carnivor.lua b/data/monster/magicals/lumbering_carnivor.lua index d8cc72626..7e2ac4cf5 100644 --- a/data/monster/magicals/lumbering_carnivor.lua +++ b/data/monster/magicals/lumbering_carnivor.lua @@ -2,7 +2,7 @@ local mType = Game.createMonsterType("Lumbering Carnivor") local monster = {} monster.description = "a Lumbering Carnivor" -monster.experience = 1320 +monster.experience = 1452 monster.outfit = { lookType = 1139, lookHead = 79, @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/medusa.lua b/data/monster/magicals/medusa.lua index 6c4cfb45c..8f247b408 100644 --- a/data/monster/magicals/medusa.lua +++ b/data/monster/magicals/medusa.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/menacing_carnivor.lua b/data/monster/magicals/menacing_carnivor.lua index 83f86befd..40bae0d89 100644 --- a/data/monster/magicals/menacing_carnivor.lua +++ b/data/monster/magicals/menacing_carnivor.lua @@ -2,7 +2,7 @@ local mType = Game.createMonsterType("Menacing Carnivor") local monster = {} monster.description = "a Menacing Carnivor" -monster.experience = 1920 +monster.experience = 2112 monster.outfit = { lookType = 1139, lookHead = 128, diff --git a/data/monster/magicals/midnight_panther.lua b/data/monster/magicals/midnight_panther.lua index 012b49d4a..3bbccb00d 100644 --- a/data/monster/magicals/midnight_panther.lua +++ b/data/monster/magicals/midnight_panther.lua @@ -58,7 +58,7 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, canWalkOnPoison = false, pet = false diff --git a/data/monster/magicals/nightmare.lua b/data/monster/magicals/nightmare.lua index aefc97e41..c0d15e2ab 100644 --- a/data/monster/magicals/nightmare.lua +++ b/data/monster/magicals/nightmare.lua @@ -64,7 +64,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/nightmare_scion.lua b/data/monster/magicals/nightmare_scion.lua index 4b1945b15..d74937f90 100644 --- a/data/monster/magicals/nightmare_scion.lua +++ b/data/monster/magicals/nightmare_scion.lua @@ -64,7 +64,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/phantasm.lua b/data/monster/magicals/phantasm.lua index aabec56f2..b2235552b 100644 --- a/data/monster/magicals/phantasm.lua +++ b/data/monster/magicals/phantasm.lua @@ -60,7 +60,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/phantasm_summon.lua b/data/monster/magicals/phantasm_summon.lua index 52c48a6ba..2f51c9dcf 100644 --- a/data/monster/magicals/phantasm_summon.lua +++ b/data/monster/magicals/phantasm_summon.lua @@ -47,7 +47,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/rage_squid.lua b/data/monster/magicals/rage_squid.lua index 9aa356c24..7491abc35 100644 --- a/data/monster/magicals/rage_squid.lua +++ b/data/monster/magicals/rage_squid.lua @@ -58,9 +58,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/retching_horror.lua b/data/monster/magicals/retching_horror.lua index 03f495fad..aa6d582c0 100644 --- a/data/monster/magicals/retching_horror.lua +++ b/data/monster/magicals/retching_horror.lua @@ -2,7 +2,7 @@ local mType = Game.createMonsterType("Retching Horror") local monster = {} monster.description = "a retching horror" -monster.experience = 3900 +monster.experience = 4100 monster.outfit = { lookType = 588, lookHead = 0, @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/shiversleep.lua b/data/monster/magicals/shiversleep.lua index f944adcf1..06adefdfc 100644 --- a/data/monster/magicals/shiversleep.lua +++ b/data/monster/magicals/shiversleep.lua @@ -50,7 +50,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/shock_head.lua b/data/monster/magicals/shock_head.lua index a058141de..f73cfbfe0 100644 --- a/data/monster/magicals/shock_head.lua +++ b/data/monster/magicals/shock_head.lua @@ -62,8 +62,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/sight_of_surrender.lua b/data/monster/magicals/sight_of_surrender.lua index 24af2dbee..06579aa43 100644 --- a/data/monster/magicals/sight_of_surrender.lua +++ b/data/monster/magicals/sight_of_surrender.lua @@ -62,9 +62,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/silencer.lua b/data/monster/magicals/silencer.lua index 539943183..859d0d446 100644 --- a/data/monster/magicals/silencer.lua +++ b/data/monster/magicals/silencer.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/spiky_carnivor.lua b/data/monster/magicals/spiky_carnivor.lua index db148fdd8..0efd60ccc 100644 --- a/data/monster/magicals/spiky_carnivor.lua +++ b/data/monster/magicals/spiky_carnivor.lua @@ -2,7 +2,7 @@ local mType = Game.createMonsterType("Spiky Carnivor") local monster = {} monster.description = "a Spiky Carnivor" -monster.experience = 1500 +monster.experience = 1650 monster.outfit = { lookType = 1133, lookHead = 85, @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/terrorsleep.lua b/data/monster/magicals/terrorsleep.lua index 4856f7d28..4d0e9223d 100644 --- a/data/monster/magicals/terrorsleep.lua +++ b/data/monster/magicals/terrorsleep.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/magicals/thanatursus.lua b/data/monster/magicals/thanatursus.lua index d5b396176..f106a51ec 100644 --- a/data/monster/magicals/thanatursus.lua +++ b/data/monster/magicals/thanatursus.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = true, canWalkOnFire = true, - canWalkOnPoison = true, + canWalkOnPoison = false, pet = false } diff --git a/data/monster/magicals/weakened_frazzlemaw.lua b/data/monster/magicals/weakened_frazzlemaw.lua index abd71cf44..f3d07ceba 100644 --- a/data/monster/magicals/weakened_frazzlemaw.lua +++ b/data/monster/magicals/weakened_frazzlemaw.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/mammals/mammoth.lua b/data/monster/mammals/mammoth.lua index 506f2a565..286716ff6 100644 --- a/data/monster/mammals/mammoth.lua +++ b/data/monster/mammals/mammoth.lua @@ -58,9 +58,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/mammals/merlkin.lua b/data/monster/mammals/merlkin.lua index a624fa978..31ab5037d 100644 --- a/data/monster/mammals/merlkin.lua +++ b/data/monster/mammals/merlkin.lua @@ -60,7 +60,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/mammals/mutated_bat.lua b/data/monster/mammals/mutated_bat.lua index dd362aac4..58367eede 100644 --- a/data/monster/mammals/mutated_bat.lua +++ b/data/monster/mammals/mutated_bat.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/mammals/mutated_rat.lua b/data/monster/mammals/mutated_rat.lua index c179f4f51..48d7553a9 100644 --- a/data/monster/mammals/mutated_rat.lua +++ b/data/monster/mammals/mutated_rat.lua @@ -62,7 +62,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/mammals/mutated_tiger.lua b/data/monster/mammals/mutated_tiger.lua index 9478de028..17a81868e 100644 --- a/data/monster/mammals/mutated_tiger.lua +++ b/data/monster/mammals/mutated_tiger.lua @@ -61,7 +61,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/mammals/roaring_lion.lua b/data/monster/mammals/roaring_lion.lua index fa157a580..d886b6124 100644 --- a/data/monster/mammals/roaring_lion.lua +++ b/data/monster/mammals/roaring_lion.lua @@ -59,7 +59,7 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/mammals/sibang.lua b/data/monster/mammals/sibang.lua index 751c6aa80..6f01e19db 100644 --- a/data/monster/mammals/sibang.lua +++ b/data/monster/mammals/sibang.lua @@ -60,7 +60,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/mammals/thornfire_wolf.lua b/data/monster/mammals/thornfire_wolf.lua index dbe5a390c..e929f9562 100644 --- a/data/monster/mammals/thornfire_wolf.lua +++ b/data/monster/mammals/thornfire_wolf.lua @@ -59,7 +59,7 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/mammals/vulcongra.lua b/data/monster/mammals/vulcongra.lua index f64fc922f..13115372a 100644 --- a/data/monster/mammals/vulcongra.lua +++ b/data/monster/mammals/vulcongra.lua @@ -62,8 +62,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/plants/carniphila.lua b/data/monster/plants/carniphila.lua index a657976fc..73d8dbd78 100644 --- a/data/monster/plants/carniphila.lua +++ b/data/monster/plants/carniphila.lua @@ -62,7 +62,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/plants/glooth_anemone.lua b/data/monster/plants/glooth_anemone.lua index bf4dfbc7f..177b8f49e 100644 --- a/data/monster/plants/glooth_anemone.lua +++ b/data/monster/plants/glooth_anemone.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/plants/humongous_fungus.lua b/data/monster/plants/humongous_fungus.lua index 0fe237e6a..db5862cf4 100644 --- a/data/monster/plants/humongous_fungus.lua +++ b/data/monster/plants/humongous_fungus.lua @@ -61,8 +61,8 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = true, - canWalkOnFire = true, + canWalkOnEnergy = false, + canWalkOnFire = false, canWalkOnPoison = true, pet = false } diff --git a/data/monster/plants/leaf_golem.lua b/data/monster/plants/leaf_golem.lua index 021ceb0eb..c763528df 100644 --- a/data/monster/plants/leaf_golem.lua +++ b/data/monster/plants/leaf_golem.lua @@ -64,7 +64,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/plants/omnivora.lua b/data/monster/plants/omnivora.lua index 52809701e..cd2bdf6e5 100644 --- a/data/monster/plants/omnivora.lua +++ b/data/monster/plants/omnivora.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/plants/wilting_leaf_golem.lua b/data/monster/plants/wilting_leaf_golem.lua index f7fb75715..dbf43ad13 100644 --- a/data/monster/plants/wilting_leaf_golem.lua +++ b/data/monster/plants/wilting_leaf_golem.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/quests/cults_of_tibia/goldhanded_cultist.lua b/data/monster/quests/cults_of_tibia/goldhanded_cultist.lua index 4a2efcf09..9f1b9f9a1 100644 --- a/data/monster/quests/cults_of_tibia/goldhanded_cultist.lua +++ b/data/monster/quests/cults_of_tibia/goldhanded_cultist.lua @@ -61,8 +61,8 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnEnergy = true, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/quests/cults_of_tibia/misguided_thief.lua b/data/monster/quests/cults_of_tibia/misguided_thief.lua index ebb5dd7e4..f614f2777 100644 --- a/data/monster/quests/cults_of_tibia/misguided_thief.lua +++ b/data/monster/quests/cults_of_tibia/misguided_thief.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/quests/cults_of_tibia/orc_cult_fanatic.lua b/data/monster/quests/cults_of_tibia/orc_cult_fanatic.lua index 9d888925f..cc9c65356 100644 --- a/data/monster/quests/cults_of_tibia/orc_cult_fanatic.lua +++ b/data/monster/quests/cults_of_tibia/orc_cult_fanatic.lua @@ -62,7 +62,7 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/quests/the_percht_queens_island/baleful_bunny.lua b/data/monster/quests/the_percht_queens_island/baleful_bunny.lua index 786b4db1e..480b7c388 100644 --- a/data/monster/quests/the_percht_queens_island/baleful_bunny.lua +++ b/data/monster/quests/the_percht_queens_island/baleful_bunny.lua @@ -58,9 +58,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/reptiles/cobra.lua b/data/monster/reptiles/cobra.lua index 694b450ab..a5d82a92f 100644 --- a/data/monster/reptiles/cobra.lua +++ b/data/monster/reptiles/cobra.lua @@ -61,7 +61,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/reptiles/lizard_chosen.lua b/data/monster/reptiles/lizard_chosen.lua index a44329ebc..94386ffd5 100644 --- a/data/monster/reptiles/lizard_chosen.lua +++ b/data/monster/reptiles/lizard_chosen.lua @@ -60,7 +60,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/reptiles/lizard_dragon_priest.lua b/data/monster/reptiles/lizard_dragon_priest.lua index 669e310a7..f8a9ff758 100644 --- a/data/monster/reptiles/lizard_dragon_priest.lua +++ b/data/monster/reptiles/lizard_dragon_priest.lua @@ -60,8 +60,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/reptiles/lizard_high_guard.lua b/data/monster/reptiles/lizard_high_guard.lua index 14c52093a..bc606845b 100644 --- a/data/monster/reptiles/lizard_high_guard.lua +++ b/data/monster/reptiles/lizard_high_guard.lua @@ -61,7 +61,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/reptiles/lizard_legionnaire.lua b/data/monster/reptiles/lizard_legionnaire.lua index 863e88013..aeeec2014 100644 --- a/data/monster/reptiles/lizard_legionnaire.lua +++ b/data/monster/reptiles/lizard_legionnaire.lua @@ -60,8 +60,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/reptiles/lizard_magistratus.lua b/data/monster/reptiles/lizard_magistratus.lua index 46b648850..a58f306a9 100644 --- a/data/monster/reptiles/lizard_magistratus.lua +++ b/data/monster/reptiles/lizard_magistratus.lua @@ -59,8 +59,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/reptiles/lizard_noble.lua b/data/monster/reptiles/lizard_noble.lua index f3764d8c3..4fc7e51cd 100644 --- a/data/monster/reptiles/lizard_noble.lua +++ b/data/monster/reptiles/lizard_noble.lua @@ -59,8 +59,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/reptiles/lizard_sentinel.lua b/data/monster/reptiles/lizard_sentinel.lua index 807acf551..5225cb3de 100644 --- a/data/monster/reptiles/lizard_sentinel.lua +++ b/data/monster/reptiles/lizard_sentinel.lua @@ -60,7 +60,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/reptiles/lizard_snakecharmer.lua b/data/monster/reptiles/lizard_snakecharmer.lua index 4429435f7..9e929efad 100644 --- a/data/monster/reptiles/lizard_snakecharmer.lua +++ b/data/monster/reptiles/lizard_snakecharmer.lua @@ -60,7 +60,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/reptiles/lizard_templar.lua b/data/monster/reptiles/lizard_templar.lua index b4f9fcc1e..920fa1c9d 100644 --- a/data/monster/reptiles/lizard_templar.lua +++ b/data/monster/reptiles/lizard_templar.lua @@ -61,7 +61,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/reptiles/lizard_zaogun.lua b/data/monster/reptiles/lizard_zaogun.lua index 1f5d37ec4..3e319aa74 100644 --- a/data/monster/reptiles/lizard_zaogun.lua +++ b/data/monster/reptiles/lizard_zaogun.lua @@ -58,9 +58,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/reptiles/sea_serpent.lua b/data/monster/reptiles/sea_serpent.lua index 429bee09e..acf10441d 100644 --- a/data/monster/reptiles/sea_serpent.lua +++ b/data/monster/reptiles/sea_serpent.lua @@ -58,9 +58,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/reptiles/seacrest_serpent.lua b/data/monster/reptiles/seacrest_serpent.lua index 13aab4339..3ee4c4842 100644 --- a/data/monster/reptiles/seacrest_serpent.lua +++ b/data/monster/reptiles/seacrest_serpent.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } @@ -114,7 +114,7 @@ monster.defenses = { defense = 31, armor = 22, {name ="combat", interval = 2000, chance = 15, type = COMBAT_HEALING, minDamage = 145, maxDamage = 200, effect = CONST_ME_SOUND_BLUE, target = false}, - {name ="melee", interval = 2000, chance = 10, minDamage = 0, maxDamage = 0, effect = CONST_ME_DRAWBLOOD} + {name ="melee", interval = 2000, chance = 10, minDamage = 0, maxDamage = 0} } monster.elements = { diff --git a/data/monster/reptiles/serpent_spawn.lua b/data/monster/reptiles/serpent_spawn.lua index 0137ad0ac..a0297d28d 100644 --- a/data/monster/reptiles/serpent_spawn.lua +++ b/data/monster/reptiles/serpent_spawn.lua @@ -62,7 +62,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/reptiles/stonerefiner.lua b/data/monster/reptiles/stonerefiner.lua index ee3d78e4c..8a9b1f760 100644 --- a/data/monster/reptiles/stonerefiner.lua +++ b/data/monster/reptiles/stonerefiner.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/reptiles/wyvern.lua b/data/monster/reptiles/wyvern.lua index 32bbd13a2..a0215bd24 100644 --- a/data/monster/reptiles/wyvern.lua +++ b/data/monster/reptiles/wyvern.lua @@ -64,7 +64,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/reptiles/young_sea_serpent.lua b/data/monster/reptiles/young_sea_serpent.lua index 48076cf50..39f915fed 100644 --- a/data/monster/reptiles/young_sea_serpent.lua +++ b/data/monster/reptiles/young_sea_serpent.lua @@ -58,9 +58,9 @@ monster.flags = { runHealth = 400, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/slimes/defiler.lua b/data/monster/slimes/defiler.lua index a95da4e56..5fe7792fe 100644 --- a/data/monster/slimes/defiler.lua +++ b/data/monster/slimes/defiler.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/slimes/devourer.lua b/data/monster/slimes/devourer.lua index 8f2fd98dd..bf1acb4bb 100644 --- a/data/monster/slimes/devourer.lua +++ b/data/monster/slimes/devourer.lua @@ -64,7 +64,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/slimes/glooth_blob.lua b/data/monster/slimes/glooth_blob.lua index 8e2a9e892..b97d09a63 100644 --- a/data/monster/slimes/glooth_blob.lua +++ b/data/monster/slimes/glooth_blob.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/slimes/ink_blob.lua b/data/monster/slimes/ink_blob.lua index 79b7c5be2..11e92fb0f 100644 --- a/data/monster/slimes/ink_blob.lua +++ b/data/monster/slimes/ink_blob.lua @@ -58,9 +58,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/slimes/slime.lua b/data/monster/slimes/slime.lua index 2aa3be1e6..e319a68d1 100644 --- a/data/monster/slimes/slime.lua +++ b/data/monster/slimes/slime.lua @@ -65,7 +65,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/slimes/squidgy_slime.lua b/data/monster/slimes/squidgy_slime.lua index 5550cad79..088cdeec7 100644 --- a/data/monster/slimes/squidgy_slime.lua +++ b/data/monster/slimes/squidgy_slime.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/bane_of_light.lua b/data/monster/undeads/bane_of_light.lua index e2193c5a0..cefa5b6f5 100644 --- a/data/monster/undeads/bane_of_light.lua +++ b/data/monster/undeads/bane_of_light.lua @@ -59,7 +59,7 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/undeads/banshee.lua b/data/monster/undeads/banshee.lua index a51df5d3b..4a7025719 100644 --- a/data/monster/undeads/banshee.lua +++ b/data/monster/undeads/banshee.lua @@ -64,8 +64,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/betrayed_wraith.lua b/data/monster/undeads/betrayed_wraith.lua index f6439b1fc..df918a8cd 100644 --- a/data/monster/undeads/betrayed_wraith.lua +++ b/data/monster/undeads/betrayed_wraith.lua @@ -58,9 +58,9 @@ monster.flags = { runHealth = 300, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/blightwalker.lua b/data/monster/undeads/blightwalker.lua index 12a924082..9e91436be 100644 --- a/data/monster/undeads/blightwalker.lua +++ b/data/monster/undeads/blightwalker.lua @@ -61,8 +61,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/blood_beast.lua b/data/monster/undeads/blood_beast.lua index 035cb9df9..a53042072 100644 --- a/data/monster/undeads/blood_beast.lua +++ b/data/monster/undeads/blood_beast.lua @@ -62,9 +62,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/bonebeast.lua b/data/monster/undeads/bonebeast.lua index f1cb20f90..3b570b0df 100644 --- a/data/monster/undeads/bonebeast.lua +++ b/data/monster/undeads/bonebeast.lua @@ -61,7 +61,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/burster_spectre.lua b/data/monster/undeads/burster_spectre.lua index ee9fb54ba..94701f2f4 100644 --- a/data/monster/undeads/burster_spectre.lua +++ b/data/monster/undeads/burster_spectre.lua @@ -128,7 +128,7 @@ monster.elements = { {type = COMBAT_LIFEDRAIN, percent = 0}, {type = COMBAT_MANADRAIN, percent = 0}, {type = COMBAT_DROWNDAMAGE, percent = 0}, - {type = COMBAT_ICEDAMAGE, percent = 30}, + {type = COMBAT_ICEDAMAGE, percent = 70}, {type = COMBAT_HOLYDAMAGE , percent = 0}, {type = COMBAT_DEATHDAMAGE , percent = 0} } diff --git a/data/monster/undeads/crypt_shambler.lua b/data/monster/undeads/crypt_shambler.lua index d36da933b..5f78aa1b4 100644 --- a/data/monster/undeads/crypt_shambler.lua +++ b/data/monster/undeads/crypt_shambler.lua @@ -62,7 +62,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/cursed_prospector.lua b/data/monster/undeads/cursed_prospector.lua index 78242f374..ff4c77b4c 100644 --- a/data/monster/undeads/cursed_prospector.lua +++ b/data/monster/undeads/cursed_prospector.lua @@ -2,7 +2,7 @@ local mType = Game.createMonsterType("Cursed Prospector") local monster = {} monster.description = "Cursed Prospector" -monster.experience = 4200 +monster.experience = 5250 monster.outfit = { lookType = 1268, lookHead = 0, diff --git a/data/monster/undeads/demon_skeleton.lua b/data/monster/undeads/demon_skeleton.lua index 89f05fefe..503561313 100644 --- a/data/monster/undeads/demon_skeleton.lua +++ b/data/monster/undeads/demon_skeleton.lua @@ -63,8 +63,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/elder_mummy.lua b/data/monster/undeads/elder_mummy.lua index dc220c7d5..1ecf7559c 100644 --- a/data/monster/undeads/elder_mummy.lua +++ b/data/monster/undeads/elder_mummy.lua @@ -62,7 +62,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/falcon_knight.lua b/data/monster/undeads/falcon_knight.lua index 495fcb7c2..c43cc7dd7 100644 --- a/data/monster/undeads/falcon_knight.lua +++ b/data/monster/undeads/falcon_knight.lua @@ -2,7 +2,7 @@ local mType = Game.createMonsterType("Falcon Knight") local monster = {} monster.description = "a falcon knight" -monster.experience = 4500 +monster.experience = 5985 monster.outfit = { lookType = 1071, lookHead = 57, diff --git a/data/monster/undeads/falcon_paladin.lua b/data/monster/undeads/falcon_paladin.lua index 955244fec..7d7e90daa 100644 --- a/data/monster/undeads/falcon_paladin.lua +++ b/data/monster/undeads/falcon_paladin.lua @@ -2,7 +2,7 @@ local mType = Game.createMonsterType("Falcon Paladin") local monster = {} monster.description = "a falcon paladin" -monster.experience = 4920 +monster.experience = 6544 monster.outfit = { lookType = 1071, lookHead = 57, diff --git a/data/monster/undeads/ghost.lua b/data/monster/undeads/ghost.lua index 4f8ddd2a0..f329f5e3b 100644 --- a/data/monster/undeads/ghost.lua +++ b/data/monster/undeads/ghost.lua @@ -62,7 +62,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/grave_guard.lua b/data/monster/undeads/grave_guard.lua index 14e128094..c0db7b002 100644 --- a/data/monster/undeads/grave_guard.lua +++ b/data/monster/undeads/grave_guard.lua @@ -62,8 +62,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/gravedigger.lua b/data/monster/undeads/gravedigger.lua index a88470a12..fb38e8ed2 100644 --- a/data/monster/undeads/gravedigger.lua +++ b/data/monster/undeads/gravedigger.lua @@ -62,7 +62,7 @@ monster.flags = { runHealth = 200, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, canWalkOnPoison = false, pet = false diff --git a/data/monster/undeads/grim_reaper.lua b/data/monster/undeads/grim_reaper.lua index 09971521a..333f2d17b 100644 --- a/data/monster/undeads/grim_reaper.lua +++ b/data/monster/undeads/grim_reaper.lua @@ -64,7 +64,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/hand_of_cursed_fate.lua b/data/monster/undeads/hand_of_cursed_fate.lua index 97771a85b..6c0980ce5 100644 --- a/data/monster/undeads/hand_of_cursed_fate.lua +++ b/data/monster/undeads/hand_of_cursed_fate.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 3500, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/lich.lua b/data/monster/undeads/lich.lua index ddbcc9b73..68fdd3678 100644 --- a/data/monster/undeads/lich.lua +++ b/data/monster/undeads/lich.lua @@ -62,9 +62,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/lost_soul.lua b/data/monster/undeads/lost_soul.lua index 19e98982a..bc804f5b8 100644 --- a/data/monster/undeads/lost_soul.lua +++ b/data/monster/undeads/lost_soul.lua @@ -60,8 +60,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/mummy.lua b/data/monster/undeads/mummy.lua index 707b9880e..8da2be20f 100644 --- a/data/monster/undeads/mummy.lua +++ b/data/monster/undeads/mummy.lua @@ -61,7 +61,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/ripper_spectre.lua b/data/monster/undeads/ripper_spectre.lua index 7bd519333..6d96d76c5 100644 --- a/data/monster/undeads/ripper_spectre.lua +++ b/data/monster/undeads/ripper_spectre.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/rot_elemental.lua b/data/monster/undeads/rot_elemental.lua index 8873cf0a9..4ea90b5f6 100644 --- a/data/monster/undeads/rot_elemental.lua +++ b/data/monster/undeads/rot_elemental.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/spectre.lua b/data/monster/undeads/spectre.lua index 7ca778853..8d85c2022 100644 --- a/data/monster/undeads/spectre.lua +++ b/data/monster/undeads/spectre.lua @@ -61,7 +61,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/tarnished_spirit.lua b/data/monster/undeads/tarnished_spirit.lua index 043511e2f..9ca441852 100644 --- a/data/monster/undeads/tarnished_spirit.lua +++ b/data/monster/undeads/tarnished_spirit.lua @@ -60,7 +60,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/undead_dragon.lua b/data/monster/undeads/undead_dragon.lua index 07a5543a1..b2cf338be 100644 --- a/data/monster/undeads/undead_dragon.lua +++ b/data/monster/undeads/undead_dragon.lua @@ -64,8 +64,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/undead_elite_gladiator.lua b/data/monster/undeads/undead_elite_gladiator.lua index 2592a013b..ac79ea1fc 100644 --- a/data/monster/undeads/undead_elite_gladiator.lua +++ b/data/monster/undeads/undead_elite_gladiator.lua @@ -58,8 +58,8 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnEnergy = true, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/undeads/undead_gladiator.lua b/data/monster/undeads/undead_gladiator.lua index cd2d85a6c..8e6de2f18 100644 --- a/data/monster/undeads/undead_gladiator.lua +++ b/data/monster/undeads/undead_gladiator.lua @@ -59,7 +59,7 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, + canWalkOnFire = true, canWalkOnPoison = false, pet = false } diff --git a/data/monster/undeads/vampire.lua b/data/monster/undeads/vampire.lua index 485bb41c6..56c013fac 100644 --- a/data/monster/undeads/vampire.lua +++ b/data/monster/undeads/vampire.lua @@ -64,7 +64,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/vampire_bride.lua b/data/monster/undeads/vampire_bride.lua index a8092cd82..25aef9e31 100644 --- a/data/monster/undeads/vampire_bride.lua +++ b/data/monster/undeads/vampire_bride.lua @@ -62,7 +62,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/vampire_viscount.lua b/data/monster/undeads/vampire_viscount.lua index db5b9e24e..2f55ddb9b 100644 --- a/data/monster/undeads/vampire_viscount.lua +++ b/data/monster/undeads/vampire_viscount.lua @@ -62,7 +62,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/vicious_manbat.lua b/data/monster/undeads/vicious_manbat.lua index 08a82c63b..63fea706c 100644 --- a/data/monster/undeads/vicious_manbat.lua +++ b/data/monster/undeads/vicious_manbat.lua @@ -62,7 +62,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/undeads/zombie.lua b/data/monster/undeads/zombie.lua index d1254a42c..6fe64bfcf 100644 --- a/data/monster/undeads/zombie.lua +++ b/data/monster/undeads/zombie.lua @@ -60,9 +60,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/ancient_scarab.lua b/data/monster/vermins/ancient_scarab.lua index 8f6dec6a7..0c76f290a 100644 --- a/data/monster/vermins/ancient_scarab.lua +++ b/data/monster/vermins/ancient_scarab.lua @@ -64,7 +64,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/brimstone_bug.lua b/data/monster/vermins/brimstone_bug.lua index 9369a00ec..4049df1e4 100644 --- a/data/monster/vermins/brimstone_bug.lua +++ b/data/monster/vermins/brimstone_bug.lua @@ -60,7 +60,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/cave_devourer.lua b/data/monster/vermins/cave_devourer.lua index 84d3e04a4..1297587df 100644 --- a/data/monster/vermins/cave_devourer.lua +++ b/data/monster/vermins/cave_devourer.lua @@ -2,7 +2,7 @@ local mType = Game.createMonsterType("Cave Devourer") local monster = {} monster.description = "a cave devourer" -monster.experience = 2800 +monster.experience = 2380 monster.outfit = { lookType = 1036, lookHead = 0, @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/centipede.lua b/data/monster/vermins/centipede.lua index 651a18537..6e97e5c59 100644 --- a/data/monster/vermins/centipede.lua +++ b/data/monster/vermins/centipede.lua @@ -62,7 +62,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/chasm_spawn.lua b/data/monster/vermins/chasm_spawn.lua index c4a30064e..8994184ea 100644 --- a/data/monster/vermins/chasm_spawn.lua +++ b/data/monster/vermins/chasm_spawn.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/crawler.lua b/data/monster/vermins/crawler.lua index dd9596a55..32b544015 100644 --- a/data/monster/vermins/crawler.lua +++ b/data/monster/vermins/crawler.lua @@ -61,7 +61,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/deepworm.lua b/data/monster/vermins/deepworm.lua index e62f87e2d..8fa190e14 100644 --- a/data/monster/vermins/deepworm.lua +++ b/data/monster/vermins/deepworm.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, + canWalkOnEnergy = true, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/diremaw.lua b/data/monster/vermins/diremaw.lua index d8ea1a1e0..60be01e1f 100644 --- a/data/monster/vermins/diremaw.lua +++ b/data/monster/vermins/diremaw.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/drillworm.lua b/data/monster/vermins/drillworm.lua index f6c616e87..5035349b3 100644 --- a/data/monster/vermins/drillworm.lua +++ b/data/monster/vermins/drillworm.lua @@ -58,9 +58,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/hibernal_moth.lua b/data/monster/vermins/hibernal_moth.lua index 5bec261c1..49887a9bb 100644 --- a/data/monster/vermins/hibernal_moth.lua +++ b/data/monster/vermins/hibernal_moth.lua @@ -62,7 +62,7 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = true, - canWalkOnFire = true, + canWalkOnFire = false, canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/hive_overseer.lua b/data/monster/vermins/hive_overseer.lua index 9405085e6..8e65d9c76 100644 --- a/data/monster/vermins/hive_overseer.lua +++ b/data/monster/vermins/hive_overseer.lua @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/insectoid_worker.lua b/data/monster/vermins/insectoid_worker.lua index f61e2ba66..b01c6cc96 100644 --- a/data/monster/vermins/insectoid_worker.lua +++ b/data/monster/vermins/insectoid_worker.lua @@ -60,7 +60,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/kollos.lua b/data/monster/vermins/kollos.lua index cb61b84fd..df068b3c6 100644 --- a/data/monster/vermins/kollos.lua +++ b/data/monster/vermins/kollos.lua @@ -59,8 +59,8 @@ monster.flags = { healthHidden = false, isBlockable = false, canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/lancer_beetle.lua b/data/monster/vermins/lancer_beetle.lua index b8f9d9b3d..cc0e586e9 100644 --- a/data/monster/vermins/lancer_beetle.lua +++ b/data/monster/vermins/lancer_beetle.lua @@ -61,7 +61,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/larva.lua b/data/monster/vermins/larva.lua index c5742b1da..acea0935f 100644 --- a/data/monster/vermins/larva.lua +++ b/data/monster/vermins/larva.lua @@ -62,7 +62,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/poison_spider.lua b/data/monster/vermins/poison_spider.lua index 1e86b719c..31cb41421 100644 --- a/data/monster/vermins/poison_spider.lua +++ b/data/monster/vermins/poison_spider.lua @@ -60,7 +60,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/scarab.lua b/data/monster/vermins/scarab.lua index 6e7c6adfb..8a49c1b32 100644 --- a/data/monster/vermins/scarab.lua +++ b/data/monster/vermins/scarab.lua @@ -61,7 +61,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/scorpion.lua b/data/monster/vermins/scorpion.lua index 64115d116..b8969e5f8 100644 --- a/data/monster/vermins/scorpion.lua +++ b/data/monster/vermins/scorpion.lua @@ -65,7 +65,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/spidris.lua b/data/monster/vermins/spidris.lua index 9bc40e8b7..bf8e70315 100644 --- a/data/monster/vermins/spidris.lua +++ b/data/monster/vermins/spidris.lua @@ -60,7 +60,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/spidris_elite.lua b/data/monster/vermins/spidris_elite.lua index 77c09c043..d6c0606ac 100644 --- a/data/monster/vermins/spidris_elite.lua +++ b/data/monster/vermins/spidris_elite.lua @@ -61,7 +61,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/spitter.lua b/data/monster/vermins/spitter.lua index 6980a8ab2..cc756fba5 100644 --- a/data/monster/vermins/spitter.lua +++ b/data/monster/vermins/spitter.lua @@ -60,7 +60,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/swarmer.lua b/data/monster/vermins/swarmer.lua index 23ed62bdd..7ecdc5a55 100644 --- a/data/monster/vermins/swarmer.lua +++ b/data/monster/vermins/swarmer.lua @@ -60,7 +60,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/tarantula.lua b/data/monster/vermins/tarantula.lua index fa3f71a2b..ac406bdcc 100644 --- a/data/monster/vermins/tarantula.lua +++ b/data/monster/vermins/tarantula.lua @@ -65,7 +65,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/tunnel_tyrant.lua b/data/monster/vermins/tunnel_tyrant.lua index ba926d9cf..18f7dd7b1 100644 --- a/data/monster/vermins/tunnel_tyrant.lua +++ b/data/monster/vermins/tunnel_tyrant.lua @@ -2,7 +2,7 @@ local mType = Game.createMonsterType("Tunnel Tyrant") local monster = {} monster.description = "a tunnel tyrant" -monster.experience = 4000 +monster.experience = 3400 monster.outfit = { lookType = 1035, lookHead = 0, @@ -61,9 +61,9 @@ monster.flags = { runHealth = 0, healthHidden = false, isBlockable = false, - canWalkOnEnergy = false, - canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnEnergy = true, + canWalkOnFire = true, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/wasp.lua b/data/monster/vermins/wasp.lua index 137f40fae..93d5dff89 100644 --- a/data/monster/vermins/wasp.lua +++ b/data/monster/vermins/wasp.lua @@ -63,7 +63,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/waspoid.lua b/data/monster/vermins/waspoid.lua index 5c2942965..b8a187f7e 100644 --- a/data/monster/vermins/waspoid.lua +++ b/data/monster/vermins/waspoid.lua @@ -60,7 +60,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/monster/vermins/wiggler.lua b/data/monster/vermins/wiggler.lua index 2879d9e0f..c506b8af6 100644 --- a/data/monster/vermins/wiggler.lua +++ b/data/monster/vermins/wiggler.lua @@ -61,7 +61,7 @@ monster.flags = { isBlockable = false, canWalkOnEnergy = false, canWalkOnFire = false, - canWalkOnPoison = false, + canWalkOnPoison = true, pet = false } diff --git a/data/npc/Naji.xml b/data/npc/Naji.xml index 5cd9430a6..c4ba6fb12 100644 --- a/data/npc/Naji.xml +++ b/data/npc/Naji.xml @@ -1,5 +1,5 @@ - - - + + + diff --git a/data/npc/scripts/bank.lua b/data/npc/scripts/bank.lua index 1d3901f62..94c243ea1 100644 --- a/data/npc/scripts/bank.lua +++ b/data/npc/scripts/bank.lua @@ -514,7 +514,7 @@ local function creatureSayCallback(cid, type, msg) elseif npcHandler.topic[cid] == 13 then if msgcontains(msg, 'yes') then if not player:transferMoneyTo(transfer[cid], count[cid]) then - npcHandler:say('You cannot transfer money to this account.', cid) + npcHandler:say("I'm afraid this character only holds a junior account at our bank. Do not worry, though. Once he has chosen his vocation or is no longer on Dawnport, his account will be upgraded.", cid) else npcHandler:say('Very well. You have transferred ' .. count[cid] .. ' gold to ' .. transfer[cid] ..'.', cid) transfer[cid] = nil diff --git a/data/npc/scripts/default.lua b/data/npc/scripts/default.lua index 36d042db2..90c025f58 100644 --- a/data/npc/scripts/default.lua +++ b/data/npc/scripts/default.lua @@ -2,9 +2,17 @@ local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) -function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end -function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end -function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end -function onThink() npcHandler:onThink() end +function onCreatureAppear(cid) + npcHandler:onCreatureAppear(cid) +end +function onCreatureDisappear(cid) + npcHandler:onCreatureDisappear(cid) +end +function onCreatureSay(cid, type, msg) + npcHandler:onCreatureSay(cid, type, msg) +end +function onThink() + npcHandler:onThink() +end npcHandler:addModule(FocusModule:new()) diff --git a/data/scripts/creaturescripts/others/summon.lua b/data/scripts/creaturescripts/others/summon.lua index a481f82c2..505db1760 100644 --- a/data/scripts/creaturescripts/others/summon.lua +++ b/data/scripts/creaturescripts/others/summon.lua @@ -1,7 +1,11 @@ local summon = { + [VOCATION.ID.SORCERER] = {name = "thundergiant"}, [VOCATION.ID.MASTER_SORCERER] = {name = "thundergiant"}, + [VOCATION.ID.DRUID] = {name = "grovebeast"}, [VOCATION.ID.ELDER_DRUID] = {name = "grovebeast"}, + [VOCATION.ID.PALADIN] = {name = "emberwing"}, [VOCATION.ID.ROYAL_PALADIN] = {name = "emberwing"}, + [VOCATION.ID.KNIGHT] = {name = "skullfrost"}, [VOCATION.ID.ELITE_KNIGHT] = {name = "skullfrost"} } @@ -14,7 +18,7 @@ function summonLogin.onLogin(player) local petTimeLeft = player:getStorageValue(summonStorage) - player:getLastLogout() if petTimeLeft > 0 then - if vocation and vocation:getId() then + if vocation and vocation:getId() and isPremium(player) then summonName = vocation.name end end diff --git a/data/scripts/globalevents/others/check_mount.lua b/data/scripts/globalevents/others/check_mount.lua index f50dcee6c..a450784d9 100644 --- a/data/scripts/globalevents/others/check_mount.lua +++ b/data/scripts/globalevents/others/check_mount.lua @@ -1,4 +1,5 @@ local mountIds = {22, 25, 26} + local rentedMounts = GlobalEvent("rentedmounts") function rentedMounts.onThink(interval) local players = Game.getPlayers() diff --git a/data/scripts/lib/register_actions.lua b/data/scripts/lib/register_actions.lua index 19950002e..ad5122f6c 100644 --- a/data/scripts/lib/register_actions.lua +++ b/data/scripts/lib/register_actions.lua @@ -330,7 +330,41 @@ function onUsePick(player, item, fromPosition, target, toPosition, isHotkey) end target:getPosition():sendMagicEffect(CONST_ME_BLOCKHIT) target:remove(1) - end + elseif target.itemid == 11227 then + target:remove(1) + toPosition:sendMagicEffect(CONST_ME_POFF) + player:addItem(2152, 10) + elseif target.itemid == 7200 then + target:transform(7236) + target:decay() + toPosition:sendMagicEffect(CONST_ME_HITAREA) + elseif target.itemid == 468 then + target:transform(469) + target:decay() + toPosition:sendMagicEffect(CONST_ME_HITAREA) + elseif target.itemid == 6299 and target.actionid > 0 then + target:transform(482) + target:decay() + toPosition:sendMagicEffect(CONST_ME_HITAREA) + elseif target.itemid == 23712 then + target:transform(23713) + target:decay() + toPosition:sendMagicEffect(CONST_ME_HITAREA) + elseif target.itemid == 481 then + target:transform(482) + target:decay() + toPosition:sendMagicEffect(CONST_ME_HITAREA) + elseif target.itemid == 483 then + target:transform(484) + target:decay() + toPosition:sendMagicEffect(CONST_ME_HITAREA) + elseif target.itemid == 7932 then + target:transform(7933) + target:decay() + toPosition:sendMagicEffect(CONST_ME_HITAREA) + else + return false + end return true end @@ -374,8 +408,10 @@ function onUseScythe(player, item, fromPosition, target, toPosition, isHotkey) target:transform(2737) target:decay() Game.createItem(2694, 1, toPosition) + else + return false + end return onDestroyItem(player, item, fromPosition, target, toPosition, isHotkey) - end end function onUseKitchenKnife(player, item, fromPosition, target, toPosition, isHotkey) diff --git a/data/scripts/weapons/scripts/burst_arrow.lua b/data/scripts/weapons/scripts/burst_arrow.lua index 89bf3d214..a86b7f933 100644 --- a/data/scripts/weapons/scripts/burst_arrow.lua +++ b/data/scripts/weapons/scripts/burst_arrow.lua @@ -7,6 +7,7 @@ local area = createCombatArea({ local combat = Combat() combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_EXPLOSIONAREA) +combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BURSTARROW) combat:setParameter(COMBAT_PARAM_BLOCKARMOR, true) combat:setFormula(COMBAT_FORMULA_SKILL, 0, 0, 1, 0) combat:setArea(area) diff --git a/data/scripts/weapons/scripts/diamond_arrow.lua b/data/scripts/weapons/scripts/diamond_arrow.lua index d59371645..c88603af1 100644 --- a/data/scripts/weapons/scripts/diamond_arrow.lua +++ b/data/scripts/weapons/scripts/diamond_arrow.lua @@ -6,18 +6,19 @@ local area = createCombatArea({ {0, 1, 1, 1, 0}, }) - local combat = Combat() - combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) - combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_ENERGYHIT) - combat:setParameter(COMBAT_PARAM_BLOCKARMOR, true) - combat:setFormula(COMBAT_FORMULA_SKILL, 0, 0, 1, 0) - combat:setArea(area) +local combat = Combat() +combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) +combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_ENERGYHIT) +combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_DIAMONDARROW) +combat:setParameter(COMBAT_PARAM_BLOCKARMOR, true) +combat:setFormula(COMBAT_FORMULA_SKILL, 0, 0, 1, 0) +combat:setArea(area) local diamondArrow = Weapon(WEAPON_AMMO) - function diamondArrow.onUseWeapon(player, variant) - return combat:execute(player, variant) - end +function diamondArrow.onUseWeapon(player, variant) + return combat:execute(player, variant) +end diamondArrow:id(29057) diamondArrow:level(150) diff --git a/data/scripts/weapons/scripts/viper_star.lua b/data/scripts/weapons/scripts/viper_star.lua index 810da4300..853aa12f3 100644 --- a/data/scripts/weapons/scripts/viper_star.lua +++ b/data/scripts/weapons/scripts/viper_star.lua @@ -1,5 +1,6 @@ local combat = Combat() combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) +combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_GREENSTAR) combat:setParameter(COMBAT_PARAM_BLOCKARMOR, true) combat:setFormula(COMBAT_FORMULA_SKILL, 0, 0, 1, 0) diff --git a/data/spells/scripts/summon/summons.lua b/data/spells/scripts/summon/summons.lua index 27ed401d0..0e4ad76bd 100644 --- a/data/spells/scripts/summon/summons.lua +++ b/data/spells/scripts/summon/summons.lua @@ -1,15 +1,17 @@ local setting = { - [VOCATION.ID.MASTER_SORCERER] = {name = "thundergiant"}, - [VOCATION.ID.ELDER_DRUID] = {name = "grovebeast"}, - [VOCATION.ID.ROYAL_PALADIN] = {name = "emberwing"}, - [VOCATION.ID.ELITE_KNIGHT] = {name = "skullfrost"} + [VOCATION.CLIENT_ID.SORCERER] = {name = "thundergiant"}, + [VOCATION.CLIENT_ID.DRUID] = {name = "grovebeast"}, + [VOCATION.CLIENT_ID.PALADIN] = {name = "emberwing"}, + [VOCATION.CLIENT_ID.KNIGHT] = {name = "skullfrost"} } function removePet(creatureId) - local c = Creature(creatureId) - if not c then return false end + local creature = Creature(creatureId) + if not creature then + return true + end - c:remove() + creature:remove() end local combat = createCombatObject() @@ -20,21 +22,27 @@ local area = createCombatArea(AREA_CIRCLE1X1) setCombatArea(combat, area) function onCastSpell(player, variant) - if not player then return false end + if not player or not isPremium(player) then + player:getPosition():sendMagicEffect(CONST_ME_POFF) + player:sendCancelMessage("You need a premium account.") + return false + end if #player:getSummons() >= 1 then player:sendCancelMessage("You can't have other summons.") player:getPosition():sendMagicEffect(CONST_ME_POFF) - return false + return false end - local vocationId = setting[player:getVocation():getId()] + local vocation = setting[player:getVocation():getClientId()] local summonName = nil - if vocationId then - summonName = vocationId.name + if vocation then + summonName = vocation.name end - if not summonName then return false end + if not summonName then + return true + end local mySummon = Game.createMonster(summonName, player:getPosition(), true, false) if not mySummon then diff --git a/data/startup/others/bitwise_flags.lua b/data/startup/others/bitwise_flags.lua new file mode 100644 index 000000000..c6e6b6c07 --- /dev/null +++ b/data/startup/others/bitwise_flags.lua @@ -0,0 +1,19 @@ +-- Lua 5.1 doesn't have support for bitwise operations + +function testFlag(set, flag) + return set % (2*flag) >= flag +end + +function setFlag(set, flag) + if set % (2*flag) >= flag then + return set + end + return set + flag +end + +function clearFlag(set, flag) + if set % (2*flag) >= flag then + return set - flag + end + return set +end \ No newline at end of file diff --git a/data/startup/others/hireling_lib.lua b/data/startup/others/hireling_lib.lua index 3e808cf4a..c46ecbffa 100644 --- a/data/startup/others/hireling_lib.lua +++ b/data/startup/others/hireling_lib.lua @@ -338,8 +338,7 @@ function Hireling:spawn() npc:setName(self:getName()) local creature = Creature(npc) creature:setOutfit(self:getOutfit()) - -- figure later the right SpeechBubble - npc:setSpeechBubble(SPEECHBUBBLE_NORMAL) + npc:setSpeechBubble(7) npc:place(self:getPosition()) creature:getPosition():sendMagicEffect(CONST_ME_TELEPORT) diff --git a/data/startup/others/others.lua b/data/startup/others/others.lua index 3d5b810aa..5bf063313 100644 --- a/data/startup/others/others.lua +++ b/data/startup/others/others.lua @@ -1,2 +1,3 @@ +dofile('data/startup/others/bitwise_flags.lua') dofile('data/startup/others/functions.lua') dofile('data/startup/others/hireling_lib.lua') diff --git a/data/startup/tables/item.lua b/data/startup/tables/item.lua index 6778c626c..a48b18d86 100644 --- a/data/startup/tables/item.lua +++ b/data/startup/tables/item.lua @@ -42,6 +42,18 @@ ItemAction = { {x = 33398, y = 32640, z = 6}, {x = 33395, y = 32667, z = 6} } + }, + -- Kilmaresh + -- First mission + -- data\scripts\quests\kilmaresh\1-fafnars-wrath\6-mind-travel.lua + [40004] = { + itemId = 1495, + itemPos = { + { x = 33915, y = 31635, z = 9 }, + { x = 33920, y = 31638, z = 9 }, + { x = 33909, y = 31642, z = 9 }, + { x = 33916, y = 31642, z = 9 } + } } } @@ -162,5 +174,60 @@ ItemUnique = { [40028] = { itemId = 36319, itemPos = {x = 33395, y = 32660, z = 6} + }, + + -- Kilmaresh + -- First mission + -- data\scripts\quests\kilmaresh\1-fafnars-wrath\2-ambassadors-treason.lua + [40029] = { + itemId = 36199, + itemPos = {x = 33955, y = 31502, z = 4} + }, + [40030] = { + itemId = 36200, + itemPos = {x = 33955, y = 31501, z = 3} + }, + [40031] = { + itemId = 7729, + itemPos = {x = 33956, y = 31504, z = 3} + }, + -- Four Masks + [40032] = { -- Ivory mask + itemId = 36104, + itemPos = {x = 33879, y = 31490, z = 6} + }, + + [40033] = { -- Gryphon mask + itemId = 36465, + itemPos = {x = 33841, y = 31682, z = 3} + }, + [40034] = { -- Silver mask + itemId = 36557, + itemPos = {x = 33780, y = 31664, z = 7} + }, + [40035] = { -- Mirror mask + itemId = 1417, + itemPos = {x = 33793, y = 31553, z = 8} + }, + -- Blessing the statues + [40036] = { + itemId = 35997, + itemPos = {x = 33854, y = 31521, z = 9} + }, + [40037] = { + itemId = 35997, + itemPos = {x = 33879, y = 31545, z = 9} + }, + [40038] = { + itemId = 35996, + itemPos = {x = 33891, y = 31504, z = 9} + }, + [40039] = { + itemId = 35997, + itemPos = {x = 33853, y = 31464, z = 9} + }, + [40040] = { + itemId = 35996, + itemPos = {x = 33874, y = 31433, z = 9} } } diff --git a/data/startup/tables/tile.lua b/data/startup/tables/tile.lua index 26f3afebf..a55c45a47 100644 --- a/data/startup/tables/tile.lua +++ b/data/startup/tables/tile.lua @@ -261,6 +261,17 @@ TileAction = { {x = 33250, y = 32268, z = 6} } }, + + -- Kilmaresh + -- First mission + -- + [50307] = { + itemId = false, + itemPos = { + { x = 33956, y = 31503, z = 2 }, + { x = 33957, y = 31503, z = 2 } + } + } } TileUnique = { diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 18af1a7fa..ac6fb5f2c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -21,6 +21,7 @@ set(otxserver_SRC ${CMAKE_CURRENT_LIST_DIR}/depotchest.cpp ${CMAKE_CURRENT_LIST_DIR}/depotlocker.cpp ${CMAKE_CURRENT_LIST_DIR}/events.cpp + ${CMAKE_CURRENT_LIST_DIR}/familiars.cpp ${CMAKE_CURRENT_LIST_DIR}/fileloader.cpp ${CMAKE_CURRENT_LIST_DIR}/game.cpp ${CMAKE_CURRENT_LIST_DIR}/gamestore.cpp diff --git a/src/configmanager.cpp b/src/configmanager.cpp index 43d5e6150..b3f0bfff6 100644 --- a/src/configmanager.cpp +++ b/src/configmanager.cpp @@ -173,6 +173,8 @@ bool ConfigManager::load() boolean[WEATHER_RAIN] = getGlobalBoolean(L, "weatherRain", false); boolean[WEATHER_THUNDER] = getGlobalBoolean(L, "thunderEffect", false); + boolean[ONLY_PREMIUM_ACCOUNT] = getGlobalBoolean(L, "onlyPremiumAccount", false); + string[DEFAULT_PRIORITY] = getGlobalString(L, "defaultPriority", "high"); string[SERVER_NAME] = getGlobalString(L, "serverName", ""); string[OWNER_NAME] = getGlobalString(L, "ownerName", ""); diff --git a/src/configmanager.h b/src/configmanager.h index 757bd718c..372ffa9bb 100644 --- a/src/configmanager.h +++ b/src/configmanager.h @@ -57,6 +57,7 @@ class ConfigManager ONLY_INVITED_CAN_MOVE_HOUSE_ITEMS, WEATHER_RAIN, WEATHER_THUNDER, + ONLY_PREMIUM_ACCOUNT, LAST_BOOLEAN_CONFIG /* this must be the last one */ }; diff --git a/src/const.h b/src/const.h index 9d0c8175a..be7836705 100644 --- a/src/const.h +++ b/src/const.h @@ -652,18 +652,20 @@ static constexpr int32_t STORAGEVALUE_PROMOTION = 30018; static constexpr int32_t STORAGEVALUE_EMOTE = 30019; static constexpr int32_t STORAGEVALUE_DAILYREWARD = 14898; static constexpr int32_t STORAGEVALUE_BESTIARYKILLCOUNT = 61305000; // Can get up to 2000 storages! -//Reserved player storage key ranges; -//[10000000 - 20000000]; +// Reserved player storage key ranges; +// [10000000 - 20000000]; static constexpr int32_t PSTRG_RESERVED_RANGE_START = 10000000; static constexpr int32_t PSTRG_RESERVED_RANGE_SIZE = 10000000; -//[1000 - 1500]; +// [1000 - 1500]; static constexpr int32_t PSTRG_OUTFITS_RANGE_START = (PSTRG_RESERVED_RANGE_START + 1000); static constexpr int32_t PSTRG_OUTFITS_RANGE_SIZE = 500; -//[2001 - 2011]; +// [2001 - 2011]; static constexpr int32_t PSTRG_MOUNTS_RANGE_START = (PSTRG_RESERVED_RANGE_START + 2001); static constexpr int32_t PSTRG_MOUNTS_RANGE_SIZE = 10; static constexpr int32_t PSTRG_MOUNTS_CURRENTMOUNT = (PSTRG_MOUNTS_RANGE_START + 10); - +// [3000 - 3500]; +static constexpr int32_t PSTRG_FAMILIARS_RANGE_START = (PSTRG_RESERVED_RANGE_START + 3000); +static constexpr int32_t PSTRG_FAMILIARS_RANGE_SIZE = 500; #define IS_IN_KEYRANGE(key, range) (key >= PSTRG_##range##_START && ((key - PSTRG_##range##_START) <= PSTRG_##range##_SIZE)) diff --git a/src/definitions.h b/src/definitions.h index facb45f6b..fdc7e67d3 100644 --- a/src/definitions.h +++ b/src/definitions.h @@ -24,8 +24,8 @@ static constexpr auto STATUS_SERVER_NAME = "OTX Server"; static constexpr auto STATUS_SERVER_VERSION = "5"; static constexpr auto STATUS_SERVER_DEVELOPERS = "OTServBR, Mark Samman, OTX Server Team and The Forgotten Server Developers"; -static constexpr auto CLIENT_VERSION = 1251; -static constexpr auto CLIENT_VERSION_STR = "12.51"; +static constexpr auto CLIENT_VERSION = 1260; +static constexpr auto CLIENT_VERSION_STR = "12.60"; static constexpr auto AUTHENTICATOR_DIGITS = 6U; static constexpr auto AUTHENTICATOR_PERIOD = 30U; diff --git a/src/enums.h b/src/enums.h index 1cce85856..8bf82b10c 100644 --- a/src/enums.h +++ b/src/enums.h @@ -146,6 +146,7 @@ enum OperatingSystem_t : uint8_t { CLIENTOS_LINUX = 1, CLIENTOS_WINDOWS = 2, CLIENTOS_FLASH = 3, + CLIENTOS_NEW_LINUX = 4, CLIENTOS_NEW_WINDOWS = 5, CLIENTOS_NEW_MAC = 6, @@ -466,7 +467,16 @@ enum PlayerSex_t : uint8_t { }; enum Vocation_t : uint16_t { - VOCATION_NONE = 0 + VOCATION_NONE = 0, + VOCATION_SORCERER = 1, + VOCATION_DRUID = 2, + VOCATION_PALADIN = 3, + VOCATION_KNIGHT = 4, + VOCATION_MASTER_SORCERER = 5, + VOCATION_ELDER_DRUID = 6, + VOCATION_ROYAL_PALADIN = 7, + VOCATION_ELITE_KNIGHT = 8, + VOCATION_LAST = VOCATION_ELITE_KNIGHT }; enum ReturnValue { @@ -655,6 +665,11 @@ struct Outfit_t { uint8_t lookLegs = 0; uint8_t lookFeet = 0; uint8_t lookAddons = 0; + uint8_t lookMountHead = 0; + uint8_t lookMountBody = 0; + uint8_t lookMountLegs = 0; + uint8_t lookMountFeet = 0; + uint16_t lookFamiliarsType = 0; }; enum LightState_t { @@ -846,6 +861,12 @@ enum InspectObjectTypes : uint8_t { INSPECT_CYCLOPEDIA = 3 }; +enum ImpactAnalyzerAndTracker_t : uint8_t { + ANALYZER_HEAL = 0, + ANALYZER_DAMAGE_DEALT = 1, + ANALYZER_DAMAGE_RECEIVED = 2 +}; + enum CyclopediaCharacterInfoType_t : uint8_t { CYCLOPEDIA_CHARACTERINFO_BASEINFORMATION = 0, CYCLOPEDIA_CHARACTERINFO_GENERALSTATS = 1, diff --git a/src/familiars.cpp b/src/familiars.cpp new file mode 100644 index 000000000..22d1b630e --- /dev/null +++ b/src/familiars.cpp @@ -0,0 +1,76 @@ +/** + * The Forgotten Server - a free and open-source MMORPG server emulator + * Copyright (C) 2019 Mark Samman + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "otpch.h" +#include "familiars.h" +#include "pugicast.h" +#include "tools.h" + +bool Familiars::loadFromXml() { + pugi::xml_document doc; + pugi::xml_parse_result result = doc.load_file("data/XML/familiars.xml"); + if (!result) { + printXMLError("Error - Familiars::loadFromXml", "data/XML/familiars.xml", result); + return false; + } + + for (auto familiarsNode : doc.child("familiars").children()) { + pugi::xml_attribute attr; + if ((attr = familiarsNode.attribute("enabled")) && !attr.as_bool()) { + continue; + } + + if (!(attr = familiarsNode.attribute("vocation"))) { + std::cout << "[Warning - Familiars::loadFromXml] Missing familiar vocation." << std::endl; + continue; + } + + uint16_t vocation = pugi::cast(attr.value()); + if (vocation > VOCATION_LAST) { + std::cout << "[Warning - Familiars::loadFromXml] Invalid familiar vocation " << vocation << "." << std::endl; + continue; + } + + pugi::xml_attribute lookTypeAttribute = familiarsNode.attribute("lookType"); + if (!lookTypeAttribute) { + std::cout << "[Warning - Familiars::loadFromXml] Missing looktype on familiar." << std::endl; + continue; + } + + familiars[vocation].emplace_back( + familiarsNode.attribute("name").as_string(), + pugi::cast(lookTypeAttribute.value()), + familiarsNode.attribute("premium").as_bool(), + familiarsNode.attribute("unlocked").as_bool(true), + familiarsNode.attribute("type").as_string()); + } + for (uint16_t vocation = VOCATION_NONE; vocation <= VOCATION_LAST; ++vocation) { + familiars[vocation].shrink_to_fit(); + } + return true; +} + +const Familiar* Familiars::getFamiliarByLookType(uint16_t vocation, uint16_t lookType) const { + for (const Familiar& familiar : familiars[vocation]) { + if (familiar.lookType == lookType) { + return &familiar; + } + } + return nullptr; +} diff --git a/src/familiars.h b/src/familiars.h new file mode 100644 index 000000000..921c0fd6f --- /dev/null +++ b/src/familiars.h @@ -0,0 +1,64 @@ +/** + * The Forgotten Server - a free and open-source MMORPG server emulator + * Copyright (C) 2019 Mark Samman + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef SRC_FAMILIARS_H_ +#define SRC_FAMILIARS_H_ + +#include +#include +#include + +#include "enums.h" + +struct Familiar { + Familiar(std::string initName, uint16_t initLookType, bool initPremium, bool initUnlocked, std::string initType) : + name(initName), lookType(initLookType), premium(initPremium), unlocked(initUnlocked), + type(initType) {} + + std::string name; + uint16_t lookType; + bool premium; + bool unlocked; + std::string type; +}; + +struct ProtocolFamiliars { + ProtocolFamiliars(const std::string& initName, uint16_t initLookType) : + name(initName), lookType(initLookType) {} + + const std::string& name; + uint16_t lookType; +}; + +class Familiars { + public: + static Familiars& getInstance() { + static Familiars instance; + return instance; + } + bool loadFromXml(); + const std::vector& getFamiliars(uint16_t vocation) const { + return familiars[vocation]; + } + const Familiar* getFamiliarByLookType(uint16_t vocation, uint16_t lookType) const; + private: + std::vector familiars[VOCATION_LAST + 1]; +}; + +#endif // SRC_FAMILIARS_H_ diff --git a/src/game.cpp b/src/game.cpp index 19c62a93c..97118a97a 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -538,6 +538,10 @@ void Game::saveGameState() IOLoginData::savePlayer(it.second); } + for (const auto& it : guilds) { + IOGuild::saveGuild(it.second); + } + Map::save(); g_databaseTasks.flush(); @@ -5437,7 +5441,7 @@ bool Game::combatChangeHealth(Creature* attacker, Creature* target, CombatDamage if (realHealthChange > 0 && !target->isInGhostMode()) { if (targetPlayer) { - targetPlayer->updateImpactTracker(realHealthChange, true); + targetPlayer->updateImpactTracker(COMBAT_HEALING, realHealthChange); } std::stringstream ss; @@ -5673,7 +5677,7 @@ bool Game::combatChangeHealth(Creature* attacker, Creature* target, CombatDamage if (realDamage > 0) { if (Monster* targetMonster = target->getMonster()) { if (attackerPlayer && attackerPlayer->getPlayer()) { - attackerPlayer->updateImpactTracker(realDamage, false); + attackerPlayer->updateImpactTracker(damage.secondary.type, damage.secondary.value); } if (targetMonster->israndomStepping()) { @@ -5784,6 +5788,22 @@ bool Game::combatChangeHealth(Creature* attacker, Creature* target, CombatDamage } if (message.primary.color != TEXTCOLOR_NONE || message.secondary.color != TEXTCOLOR_NONE) { + if (attackerPlayer) { + attackerPlayer->updateImpactTracker(damage.primary.type, damage.primary.value); + if (damage.secondary.type != COMBAT_NONE) { + attackerPlayer->updateImpactTracker(damage.secondary.type, damage.secondary.value); + } + } + if (targetPlayer) { + std::string cause = "(other)"; + if (attacker) { + cause = attacker->getName(); + } + targetPlayer->updateInputAnalyzer(damage.primary.type, damage.primary.value, cause); + if (damage.secondary.type != COMBAT_NONE) { + attackerPlayer->updateInputAnalyzer(damage.secondary.type, damage.secondary.value, cause); + } + } std::stringstream ss; ss << realDamage << (realDamage != 1 ? " hitpoints" : " hitpoint"); @@ -8182,6 +8202,10 @@ void Game::addGuild(Guild* guild) void Game::removeGuild(uint32_t guildId) { + auto it = guilds.find(guildId); + if (it != guilds.end()) { + IOGuild::saveGuild(it->second); + } guilds.erase(guildId); } diff --git a/src/groups.cpp b/src/groups.cpp index 0d86f2e9b..b02141b3f 100644 --- a/src/groups.cpp +++ b/src/groups.cpp @@ -116,6 +116,7 @@ bool Groups::load() groups.push_back(group); } + groups.shrink_to_fit(); return true; } diff --git a/src/guild.h b/src/guild.h index 63224d263..c9cac3f01 100644 --- a/src/guild.h +++ b/src/guild.h @@ -55,6 +55,12 @@ class Guild void setMemberCount(uint32_t count) { memberCount = count; } + uint64_t getBankBalance() const { + return bankBalance; + } + void setBankBalance(uint64_t balance) { + bankBalance = balance; + } const std::vector& getRanks() const { return ranks; @@ -76,6 +82,7 @@ class Guild std::list membersOnline; std::vector ranks; std::string name; + uint64_t bankBalance = 0; std::string motd; uint32_t id; uint32_t memberCount = 0; diff --git a/src/ioguild.cpp b/src/ioguild.cpp index ed48b1456..bc63bf2c3 100644 --- a/src/ioguild.cpp +++ b/src/ioguild.cpp @@ -27,10 +27,10 @@ Guild* IOGuild::loadGuild(uint32_t guildId) { Database& db = Database::getInstance(); std::ostringstream query; - query << "SELECT `name` FROM `guilds` WHERE `id` = " << guildId; + query << "SELECT `name`, `balance` FROM `guilds` WHERE `id` = " << guildId; if (DBResult_ptr result = db.storeQuery(query.str())) { Guild* guild = new Guild(guildId, result->getString("name")); - + guild->setBankBalance(result->getNumber("balance")); query.str(std::string()); query << "SELECT `id`, `name`, `level` FROM `guild_ranks` WHERE `guild_id` = " << guildId; @@ -44,6 +44,17 @@ Guild* IOGuild::loadGuild(uint32_t guildId) return nullptr; } +void IOGuild::saveGuild(Guild* guild) { + if (!guild) + return; + Database& db = Database::getInstance(); + std::ostringstream updateQuery; + updateQuery << "UPDATE `guilds` SET "; + updateQuery << "`balance` = " << guild->getBankBalance(); + updateQuery << " WHERE `id` = " << guild->getId(); + db.executeQuery(updateQuery.str()); +} + uint32_t IOGuild::getGuildIdByName(const std::string& name) { Database& db = Database::getInstance(); diff --git a/src/ioguild.h b/src/ioguild.h index 66e43392f..4d4c936a3 100644 --- a/src/ioguild.h +++ b/src/ioguild.h @@ -27,6 +27,7 @@ class IOGuild { public: static Guild* loadGuild(uint32_t guildId); + static void saveGuild(Guild* guild); static uint32_t getGuildIdByName(const std::string& name); static void getWarList(uint32_t guildId, GuildWarVector& guildWarVector); }; diff --git a/src/iologindata.cpp b/src/iologindata.cpp index 9383f5717..9475b7660 100644 --- a/src/iologindata.cpp +++ b/src/iologindata.cpp @@ -381,6 +381,11 @@ bool IOLoginData::loadPlayer(Player* player, DBResult_ptr result) player->defaultOutfit.lookLegs = result->getNumber("looklegs"); player->defaultOutfit.lookFeet = result->getNumber("lookfeet"); player->defaultOutfit.lookAddons = result->getNumber("lookaddons"); + player->defaultOutfit.lookMountHead = result->getNumber("lookmounthead"); + player->defaultOutfit.lookMountBody = result->getNumber("lookmountbody"); + player->defaultOutfit.lookMountLegs = result->getNumber("lookmountlegs"); + player->defaultOutfit.lookMountFeet = result->getNumber("lookmountfeet"); + player->defaultOutfit.lookFamiliarsType = result->getNumber("lookfamiliarstype"); player->currentOutfit = player->defaultOutfit; if (g_game.getWorldType() != WORLD_TYPE_PVP_ENFORCED) { @@ -882,6 +887,11 @@ bool IOLoginData::savePlayer(Player* player) query << "`looklegs` = " << static_cast(player->defaultOutfit.lookLegs) << ','; query << "`looktype` = " << player->defaultOutfit.lookType << ','; query << "`lookaddons` = " << static_cast(player->defaultOutfit.lookAddons) << ','; + query << "`lookmountbody` = " << static_cast(player->defaultOutfit.lookMountBody) << ','; + query << "`lookmountfeet` = " << static_cast(player->defaultOutfit.lookMountFeet) << ','; + query << "`lookmounthead` = " << static_cast(player->defaultOutfit.lookMountHead) << ','; + query << "`lookmountlegs` = " << static_cast(player->defaultOutfit.lookMountLegs) << ','; + query << "`lookfamiliarstype` = " << player->defaultOutfit.lookFamiliarsType << ','; query << "`maglevel` = " << player->magLevel << ','; query << "`mana` = " << player->mana << ','; query << "`manamax` = " << player->manaMax << ','; diff --git a/src/iomap.h b/src/iomap.h index a05d09e40..d9047429f 100644 --- a/src/iomap.h +++ b/src/iomap.h @@ -20,6 +20,8 @@ #ifndef FS_IOMAP_H_8085D4B1037A44288494A52FDBB775E4 #define FS_IOMAP_H_8085D4B1037A44288494A52FDBB775E4 +#include + #include "item.h" #include "map.h" #include "house.h" @@ -144,7 +146,7 @@ class IOMap } void setLastErrorString(std::string error) { - errorString = error; + errorString = std::move(error); } private: diff --git a/src/luascript.cpp b/src/luascript.cpp index 7821e8f4d..beb4469c3 100644 --- a/src/luascript.cpp +++ b/src/luascript.cpp @@ -785,6 +785,11 @@ Position LuaScriptInterface::getPosition(lua_State* L, int32_t arg) Outfit_t LuaScriptInterface::getOutfit(lua_State* L, int32_t arg) { Outfit_t outfit; + outfit.lookMountFeet = getField(L, arg, "lookMountFeet"); + outfit.lookMountLegs = getField(L, arg, "lookMountLegs"); + outfit.lookMountBody = getField(L, arg, "lookMountBody"); + outfit.lookMountHead = getField(L, arg, "lookMountHead"); + outfit.lookFamiliarsType = getField(L, arg, "lookFamiliarsType"); outfit.lookMount = getField(L, arg, "lookMount"); outfit.lookAddons = getField(L, arg, "lookAddons"); @@ -796,7 +801,7 @@ Outfit_t LuaScriptInterface::getOutfit(lua_State* L, int32_t arg) outfit.lookTypeEx = getField(L, arg, "lookTypeEx"); outfit.lookType = getField(L, arg, "lookType"); - lua_pop(L, 8); + lua_pop(L, 13); return outfit; } @@ -946,7 +951,7 @@ void LuaScriptInterface::pushPosition(lua_State* L, const Position& position, in void LuaScriptInterface::pushOutfit(lua_State* L, const Outfit_t& outfit) { - lua_createtable(L, 0, 8); + lua_createtable(L, 0, 13); setField(L, "lookType", outfit.lookType); setField(L, "lookTypeEx", outfit.lookTypeEx); setField(L, "lookHead", outfit.lookHead); @@ -955,6 +960,11 @@ void LuaScriptInterface::pushOutfit(lua_State* L, const Outfit_t& outfit) setField(L, "lookFeet", outfit.lookFeet); setField(L, "lookAddons", outfit.lookAddons); setField(L, "lookMount", outfit.lookMount); + setField(L, "lookMountHead", outfit.lookMountHead); + setField(L, "lookMountBody", outfit.lookMountBody); + setField(L, "lookMountLegs", outfit.lookMountLegs); + setField(L, "lookMountFeet", outfit.lookMountFeet); + setField(L, "lookFamiliarsType", outfit.lookFamiliarsType); } void LuaScriptInterface::pushLoot(lua_State* L, const std::vector& lootList) @@ -2627,6 +2637,10 @@ void LuaScriptInterface::registerFunctions() registerMethod("Player", "removeMount", LuaScriptInterface::luaPlayerRemoveMount); registerMethod("Player", "hasMount", LuaScriptInterface::luaPlayerHasMount); + registerMethod("Player", "addFamiliar", LuaScriptInterface::luaPlayerAddFamiliar); + registerMethod("Player", "removeFamiliar", LuaScriptInterface::luaPlayerRemoveFamiliar); + registerMethod("Player", "hasFamiliar", LuaScriptInterface::luaPlayerHasFamiliar); + registerMethod("Player", "getPremiumDays", LuaScriptInterface::luaPlayerGetPremiumDays); registerMethod("Player", "addPremiumDays", LuaScriptInterface::luaPlayerAddPremiumDays); registerMethod("Player", "removePremiumDays", LuaScriptInterface::luaPlayerRemovePremiumDays); @@ -2776,6 +2790,9 @@ void LuaScriptInterface::registerFunctions() registerMethod("Guild", "getName", LuaScriptInterface::luaGuildGetName); registerMethod("Guild", "getMembersOnline", LuaScriptInterface::luaGuildGetMembersOnline); + registerMethod("Guild", "getBankBalance", LuaScriptInterface::luaGuildGetBankBalance); + registerMethod("Guild", "setBankBalance", LuaScriptInterface::luaGuildSetBankBalance); + registerMethod("Guild", "addRank", LuaScriptInterface::luaGuildAddRank); registerMethod("Guild", "getRankById", LuaScriptInterface::luaGuildGetRankById); registerMethod("Guild", "getRankByLevel", LuaScriptInterface::luaGuildGetRankByLevel); @@ -10732,6 +10749,42 @@ int LuaScriptInterface::luaPlayerHasMount(lua_State* L) { return 1; } +int LuaScriptInterface::luaPlayerAddFamiliar(lua_State* L) { + // player:addFamiliar(lookType) + Player* player = getUserdata(L, 1); + if (player) { + player->addFamiliar(getNumber(L, 2)); + pushBoolean(L, true); + } else { + lua_pushnil(L); + } + return 1; +} + +int LuaScriptInterface::luaPlayerRemoveFamiliar(lua_State* L) { + // player:removeFamiliar(lookType) + Player* player = getUserdata(L, 1); + if (player) { + uint16_t lookType = getNumber(L, 2); + pushBoolean(L, player->removeFamiliar(lookType)); + } else { + lua_pushnil(L); + } + return 1; +} + +int LuaScriptInterface::luaPlayerHasFamiliar(lua_State* L) { + // player:hasFamiliar(lookType) + Player* player = getUserdata(L, 1); + if (player) { + uint16_t lookType = getNumber(L, 2); + pushBoolean(L, player->canFamiliar(lookType)); + } else { + lua_pushnil(L); + } + return 1; +} + int LuaScriptInterface::luaPlayerGetPremiumDays(lua_State* L) { // player:getPremiumDays() @@ -12386,6 +12439,37 @@ int LuaScriptInterface::luaGuildGetMembersOnline(lua_State* L) return 1; } +int LuaScriptInterface::luaGuildGetBankBalance(lua_State* L) { + // guild:getBankBalance() + Guild* guild = getUserdata(L, 1); + if (guild) { + lua_pushnumber(L, guild->getBankBalance()); + } else { + lua_pushnil(L); + } + return 1; +} + +int LuaScriptInterface::luaGuildSetBankBalance(lua_State* L) { + // guild:setBankBalance(bankBalance) + Guild* guild = getUserdata(L, 1); + if (!guild) { + lua_pushnil(L); + return 1; + } + + int64_t balance = getNumber(L, 2); + if (balance < 0) { + reportErrorFunc("Invalid bank balance value."); + lua_pushnil(L); + return 1; + } + + guild->setBankBalance(balance); + pushBoolean(L, true); + return 1; +} + int LuaScriptInterface::luaGuildAddRank(lua_State* L) { // guild:addRank(id, name, level) @@ -14324,14 +14408,19 @@ int LuaScriptInterface::luaConditionSetFormula(lua_State* L) return 1; } -int LuaScriptInterface::luaConditionSetOutfit(lua_State* L) -{ +int LuaScriptInterface::luaConditionSetOutfit(lua_State* L) { // condition:setOutfit(outfit) - // condition:setOutfit(lookTypeEx, lookType, lookHead, lookBody, lookLegs, lookFeet[, lookAddons[, lookMount]]) + // condition:setOutfit(lookTypeEx, lookType, lookHead, lookBody, lookLegs, lookFeet[, + // lookAddons[, lookMount[, lookMountHead[, lookMountBody[, lookMountLegs[, lookMountFeet[, lookFamiliarsType]]]]]]]) Outfit_t outfit; if (isTable(L, 2)) { outfit = getOutfit(L, 2); } else { + outfit.lookFamiliarsType = getNumber(L, 14, outfit.lookFamiliarsType); + outfit.lookMountFeet = getNumber(L, 13, outfit.lookMountFeet); + outfit.lookMountLegs = getNumber(L, 12, outfit.lookMountLegs); + outfit.lookMountBody = getNumber(L, 11, outfit.lookMountBody); + outfit.lookMountHead = getNumber(L, 10, outfit.lookMountHead); outfit.lookMount = getNumber(L, 9, outfit.lookMount); outfit.lookAddons = getNumber(L, 8, outfit.lookAddons); outfit.lookFeet = getNumber(L, 7); @@ -15474,8 +15563,8 @@ int LuaScriptInterface::luaMonsterTypeAddSummon(lua_State* L) if (monsterType) { summonBlock_t summon; summon.name = getString(L, 2); - summon.chance = getNumber(L, 3); - summon.speed = getNumber(L, 4); + summon.speed = getNumber(L, 3); + summon.chance = getNumber(L, 4); monsterType->info.summons.push_back(summon); pushBoolean(L, true); } else { diff --git a/src/luascript.h b/src/luascript.h index f6628e3a8..10e7e2fcf 100644 --- a/src/luascript.h +++ b/src/luascript.h @@ -1020,6 +1020,10 @@ class LuaScriptInterface static int luaPlayerRemoveMount(lua_State* L); static int luaPlayerHasMount(lua_State* L); + static int luaPlayerAddFamiliar(lua_State* L); + static int luaPlayerRemoveFamiliar(lua_State* L); + static int luaPlayerHasFamiliar(lua_State* L); + static int luaPlayerGetPremiumDays(lua_State* L); static int luaPlayerAddPremiumDays(lua_State* L); static int luaPlayerRemovePremiumDays(lua_State* L); @@ -1170,6 +1174,9 @@ class LuaScriptInterface static int luaGuildGetName(lua_State* L); static int luaGuildGetMembersOnline(lua_State* L); + static int luaGuildGetBankBalance(lua_State* L); + static int luaGuildSetBankBalance(lua_State* L); + static int luaGuildAddRank(lua_State* L); static int luaGuildGetRankById(lua_State* L); static int luaGuildGetRankByLevel(lua_State* L); diff --git a/src/mounts.cpp b/src/mounts.cpp index ce10d9710..3f69ef69d 100644 --- a/src/mounts.cpp +++ b/src/mounts.cpp @@ -16,6 +16,7 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include #include "otpch.h" @@ -45,7 +46,8 @@ bool Mounts::loadFromXml() pugi::cast(mountNode.attribute("clientid").value()), mountNode.attribute("name").as_string(), pugi::cast(mountNode.attribute("speed").value()), - mountNode.attribute("premium").as_bool() + mountNode.attribute("premium").as_bool(), + mountNode.attribute("type").as_string() ); } mounts.shrink_to_fit(); diff --git a/src/mounts.h b/src/mounts.h index 71bb4f735..2d6299086 100644 --- a/src/mounts.h +++ b/src/mounts.h @@ -20,16 +20,22 @@ #ifndef FS_MOUNTS_H_73716D11906A4C5C9F4A7B68D34C9BA6 #define FS_MOUNTS_H_73716D11906A4C5C9F4A7B68D34C9BA6 +#include +#include + struct Mount { - Mount(uint8_t initId, uint16_t initClientId, std::string initName, int32_t initSpeed, bool initPremium) : - name(std::move(initName)), speed(initSpeed), clientId(initClientId), id(initId), premium(initPremium) {} + Mount(uint8_t initId, uint16_t initClientId, std::string initName, int32_t initSpeed, bool initPremium, + std::string initType) : + name(initName), speed(initSpeed), clientId(initClientId), id(initId), premium(initPremium), + type(initType) {} std::string name; int32_t speed; uint16_t clientId; uint8_t id; bool premium; + std::string type; }; class Mounts diff --git a/src/otserv.cpp b/src/otserv.cpp index d2f5f1afd..1a0600052 100644 --- a/src/otserv.cpp +++ b/src/otserv.cpp @@ -268,6 +268,12 @@ void mainLoader(int, char*[], ServiceManager* services) { return; } + std::cout << ">> Loading familiars" << std::endl; + if (!Familiars::getInstance().loadFromXml()) { + startupErrorMessage("Unable to load familiars!"); + return; + } + g_game.loadBoostedCreature(); std::cout << ">> Checking world type... " << std::flush; diff --git a/src/outfit.cpp b/src/outfit.cpp index d63075384..232560410 100644 --- a/src/outfit.cpp +++ b/src/outfit.cpp @@ -60,7 +60,8 @@ bool Outfits::loadFromXml() outfitNode.attribute("name").as_string(), pugi::cast(lookTypeAttribute.value()), outfitNode.attribute("premium").as_bool(), - outfitNode.attribute("unlocked").as_bool(true) + outfitNode.attribute("unlocked").as_bool(true), + outfitNode.attribute("from").as_string() ); } for (uint8_t sex = PLAYERSEX_FEMALE; sex <= PLAYERSEX_LAST; ++sex) { diff --git a/src/outfit.h b/src/outfit.h index 4dc9744f4..ae680c545 100644 --- a/src/outfit.h +++ b/src/outfit.h @@ -20,16 +20,19 @@ #ifndef FS_OUTFIT_H_C56E7A707E3F422C8C93D9BE09916AA3 #define FS_OUTFIT_H_C56E7A707E3F422C8C93D9BE09916AA3 +#include + #include "enums.h" struct Outfit { - Outfit(std::string initName, uint16_t initLookType, bool initPremium, bool initUnlocked) : - name(std::move(initName)), lookType(initLookType), premium(initPremium), unlocked(initUnlocked) {} + Outfit(std::string initName, uint16_t initLookType, bool initPremium, bool initUnlocked, std::string initFrom) : + name(initName), lookType(initLookType), premium(initPremium), unlocked(initUnlocked), from(initFrom) {} std::string name; uint16_t lookType; bool premium; bool unlocked; + std::string from; }; struct ProtocolOutfit { diff --git a/src/player.cpp b/src/player.cpp index bacea705f..707fbbbef 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -665,6 +665,10 @@ void Player::addStorageValue(const uint32_t key, const int32_t value, const bool return; } else if (IS_IN_KEYRANGE(key, MOUNTS_RANGE)) { // do nothing + } else if (IS_IN_KEYRANGE(key, FAMILIARS_RANGE)) { + familiars.emplace_back( + value >> 16); + return; } else { std::cout << "Warning: unknown reserved key: " << key << " player: " << getName() << std::endl; return; @@ -4096,10 +4100,15 @@ bool Player::canLogout() void Player::genReservedStorageRange() { - //generate outfits range - uint32_t base_key = PSTRG_OUTFITS_RANGE_START; + // generate outfits range + uint32_t outfits_key = PSTRG_OUTFITS_RANGE_START; for (const OutfitEntry& entry : outfits) { - storageMap[++base_key] = (entry.lookType << 16) | entry.addons; + storageMap[++outfits_key] = (entry.lookType << 16) | entry.addons; + } + // generate familiars range + uint32_t familiar_key = PSTRG_FAMILIARS_RANGE_START; + for (const FamiliarEntry& entry : familiars) { + storageMap[++familiar_key] = (entry.lookType << 16); } } @@ -4165,6 +4174,76 @@ bool Player::getOutfitAddons(const Outfit& outfit, uint8_t& addons) const return true; } +bool Player::canFamiliar(uint32_t lookType) const { + if (group->access) { + return true; + } + + const Familiar* familiar = Familiars::getInstance().getFamiliarByLookType(getVocationId(), lookType); + if (!familiar) { + return false; + } + + if (familiar->premium && !isPremium()) { + return false; + } + + if (familiar->unlocked) { + return true; + } + + for (const FamiliarEntry& familiarEntry : familiars) { + if (familiarEntry.lookType != lookType) { + continue; + } + } + return false; +} + +void Player::addFamiliar(uint16_t lookType) { + for (FamiliarEntry& familiarEntry : familiars) { + if (familiarEntry.lookType == lookType) { + return; + } + } + familiars.emplace_back(lookType); +} + +bool Player::removeFamiliar(uint16_t lookType) { + for (auto it = familiars.begin(), end = familiars.end(); it != end; ++it) { + FamiliarEntry& entry = *it; + if (entry.lookType == lookType) { + familiars.erase(it); + return true; + } + } + return false; +} + +bool Player::getFamiliar(const Familiar& familiar) const { + if (group->access) { + return true; + } + + if (familiar.premium && !isPremium()) { + return false; + } + + for (const FamiliarEntry& familiarEntry : familiars) { + if (familiarEntry.lookType != familiar.lookType) { + continue; + } + + return true; + } + + if (!familiar.unlocked) { + return false; + } + + return true; +} + void Player::setSex(PlayerSex_t newSex) { sex = newSex; diff --git a/src/player.h b/src/player.h index 9214ca909..52529cce8 100644 --- a/src/player.h +++ b/src/player.h @@ -27,6 +27,7 @@ #include "depotchest.h" #include "depotlocker.h" #include "enums.h" +#include "familiars.h" #include "gamestore.h" #include "groups.h" #include "guild.h" @@ -109,6 +110,11 @@ struct OutfitEntry { uint8_t addons; }; +struct FamiliarEntry { + constexpr explicit FamiliarEntry(uint16_t initLookType) : lookType(initLookType) {} + uint16_t lookType; +}; + struct Skill { uint64_t tries = 0; uint16_t level = 10; @@ -870,6 +876,11 @@ class Player final : public Creature, public Cylinder bool removeOutfitAddon(uint16_t lookType, uint8_t addons); bool getOutfitAddons(const Outfit& outfit, uint8_t& addons) const; + bool canFamiliar(uint32_t lookType) const; + void addFamiliar(uint16_t lookType); + bool removeFamiliar(uint16_t lookType); + bool getFamiliar(const Familiar& familiar) const; + bool canLogout(); bool hasKilled(const Player* player) const; @@ -1629,19 +1640,22 @@ class Player final : public Creature, public Cylinder return false; } - void updateSupplyTracker(const Item* item) - { - if (client) { - client->sendUpdateSupplyTracker(item); - } - } + void updateSupplyTracker(const Item* item) { + if (client) { + client->sendUpdateSupplyTracker(item); + } + } - void updateImpactTracker(int32_t quantity, bool isHeal) - { - if (client) { - client->sendUpdateImpactTracker(quantity, isHeal); - } - } + void updateImpactTracker(CombatType_t type, int32_t amount) { + if (client) { + client->sendUpdateImpactTracker(type, amount); + } + } + void updateInputAnalyzer(CombatType_t type, int32_t amount, std::string target) { + if (client) { + client->sendUpdateInputAnalyzer(type, amount, target); + } + } void updateLootTracker(Item* item) { @@ -1835,6 +1849,8 @@ class Player final : public Creature, public Cylinder std::vector quickLootListClientIds; std::vector outfits; + std::vector familiars; + GuildWarVector guildWarVector; std::vector shopItemList; diff --git a/src/protocolgame.cpp b/src/protocolgame.cpp index 43ccbb046..13758f671 100644 --- a/src/protocolgame.cpp +++ b/src/protocolgame.cpp @@ -66,10 +66,7 @@ void ProtocolGame::AddItem(NetworkMessage& msg, uint16_t id, uint8_t count) msg.addByte(fluidMap[count & 7]); } else if (it.isContainer() && player->getOperatingSystem() <= CLIENTOS_NEW_MAC) { msg.addByte(0x00); - } - - if (it.isAnimation) { - msg.addByte(0xFE); // random phase (0xFF for async) + msg.addByte(0x00); } } @@ -106,10 +103,9 @@ void ProtocolGame::AddItem(NetworkMessage& msg, const Item* item) } else { msg.addByte(0x00); } - } - if (it.isAnimation) { - msg.addByte(0xFE); // random phase (0xFF for async) + // Quiver ammo count + msg.addByte(0x00); } } @@ -157,6 +153,13 @@ void ProtocolGame::login(const std::string& name, uint32_t accountId, OperatingS return; } + if (g_config.getBoolean(ConfigManager::ONLY_PREMIUM_ACCOUNT) + && !player->isPremium() + && (player->getGroup()->id < 4 || player->getAccountType() < account::ACCOUNT_TYPE_GAMEMASTER)) { + disconnectClient("Your premium time for this account is out.\n\nTo play please buy additional premium time from our website"); + return; + } + if (g_config.getBoolean(ConfigManager::ONE_PLAYER_ON_ACCOUNT) && player->getAccountType() < account::ACCOUNT_TYPE_GAMEMASTER && g_game.getPlayerByAccount(player->getAccount())) { @@ -361,6 +364,12 @@ void ProtocolGame::onRecvFirstMessage(NetworkMessage& msg) return; } + if (operatingSystem == CLIENTOS_NEW_LINUX) { + // TODO: check what new info for linux is send + msg.getString(); + msg.getString(); + } + std::string accountName = sessionKey.substr(0, pos); if (accountName.empty()) { disconnectClient("You must enter your account name."); @@ -377,6 +386,13 @@ void ProtocolGame::onRecvFirstMessage(NetworkMessage& msg) return; } + if (clientVersion != CLIENT_VERSION) { + std::ostringstream ss; + ss << "Only clients with protocol " << CLIENT_VERSION_STR << " allowed!"; + disconnectClient(ss.str()); + return; + } + if (g_game.getGameState() == GAME_STATE_STARTUP) { disconnectClient("Gameworld is starting up. Please wait."); return; @@ -882,13 +898,18 @@ void ProtocolGame::parseSetOutfit(NetworkMessage& msg) outfitType = msg.getByte(); Outfit_t newOutfit; newOutfit.lookType = msg.get(); - newOutfit.lookHead = msg.getByte(); - newOutfit.lookBody = msg.getByte(); - newOutfit.lookLegs = msg.getByte(); - newOutfit.lookFeet = msg.getByte(); + newOutfit.lookHead = std::min(132, msg.getByte()); + newOutfit.lookBody = std::min(132, msg.getByte()); + newOutfit.lookLegs = std::min(132, msg.getByte()); + newOutfit.lookFeet = std::min(132, msg.getByte()); newOutfit.lookAddons = msg.getByte(); if (outfitType == 0) { newOutfit.lookMount = msg.get(); + newOutfit.lookMountHead = std::min(132, msg.getByte()); + newOutfit.lookMountBody = std::min(132, msg.getByte()); + newOutfit.lookMountLegs = std::min(132, msg.getByte()); + newOutfit.lookMountFeet = std::min(132, msg.getByte()); + newOutfit.lookFamiliarsType = msg.get(); } else if (outfitType == 1) { //This value probably has something to do with try outfit variable inside outfit window dialog //if try outfit is set to 2 it expects uint32_t value after mounted and disable mounts from outfit window dialog @@ -1276,10 +1297,8 @@ void ProtocolGame::parseHighscores(NetworkMessage& msg) uint32_t vocation = msg.get(); uint16_t page = 1; const std::string worldName = msg.getString(); - #if CLIENT_VERSION >= 1260 - msg.getByte();//Game World Category - msg.getByte();//BattlEye World Type - #endif + msg.getByte(); // Game World Category + msg.getByte(); // BattlEye World Type if (type == HIGHSCORE_GETENTRIES) { page = std::max(1, msg.get()); } @@ -1305,10 +1324,8 @@ void ProtocolGame::sendHighscores(const std::vector& charact msg.addString(g_config.getString(ConfigManager::SERVER_NAME)); // First World msg.addString(g_config.getString(ConfigManager::SERVER_NAME)); // Selected World - #if CLIENT_VERSION >= 1260 - msg.addByte(0xFF);//Game World Category: 0xFF(-1) - Selected World - msg.addByte(0xFF);//BattlEye World Type - #endif + msg.addByte(0); // Game World Category: 0xFF(-1) - Selected World + msg.addByte(0); // BattlEye World Type auto vocationPosition = msg.getBufferPosition(); uint8_t vocations = 1; @@ -1939,6 +1956,12 @@ void ProtocolGame::sendCreatureOutfit(const Creature* creature, const Outfit_t& msg.addByte(0x8E); msg.add(creature->getID()); AddOutfit(msg, outfit); + if (outfit.lookMount != 0) { + msg.addByte(outfit.lookMountHead); + msg.addByte(outfit.lookMountBody); + msg.addByte(outfit.lookMountLegs); + msg.addByte(outfit.lookMountFeet); + } writeToOutputBuffer(msg); } @@ -2352,12 +2375,18 @@ void ProtocolGame::sendCyclopediaCharacterOutfitsMounts() { if (!player->getOutfitAddons(outfit, addons)) { continue; } - outfitSize++; + const std::string from = outfit.from; + ++outfitSize; msg.add(outfit.lookType); msg.addString(outfit.name); msg.addByte(addons); - msg.addByte(CYCLOPEDIA_CHARACTERINFO_OUTFITTYPE_NONE); + if (from == "store") + msg.addByte(CYCLOPEDIA_CHARACTERINFO_OUTFITTYPE_STORE); + else if (from == "quest") + msg.addByte(CYCLOPEDIA_CHARACTERINFO_OUTFITTYPE_QUEST); + else + msg.addByte(CYCLOPEDIA_CHARACTERINFO_OUTFITTYPE_NONE); if (outfit.lookType == currentOutfit.lookType) { msg.add(1000); } else { @@ -2375,20 +2404,53 @@ void ProtocolGame::sendCyclopediaCharacterOutfitsMounts() { auto startMounts = msg.getBufferPosition(); msg.skipBytes(2); for (const Mount& mount : g_game.mounts.getMounts()) { + const std::string type = mount.type; if (player->hasMount(&mount)) { - mountSize++; + ++mountSize; msg.add(mount.clientId); msg.addString(mount.name); - msg.addByte(CYCLOPEDIA_CHARACTERINFO_OUTFITTYPE_NONE); + if (type == "store") + msg.addByte(CYCLOPEDIA_CHARACTERINFO_OUTFITTYPE_STORE); + else if (type == "quest") + msg.addByte(CYCLOPEDIA_CHARACTERINFO_OUTFITTYPE_QUEST); + else + msg.addByte(CYCLOPEDIA_CHARACTERINFO_OUTFITTYPE_NONE); msg.add(1000); } } + if (mountSize > 0) { + msg.addByte(currentOutfit.lookMountHead); + msg.addByte(currentOutfit.lookMountBody); + msg.addByte(currentOutfit.lookMountLegs); + msg.addByte(currentOutfit.lookMountFeet); + } + + uint16_t familiarsSize = 0; + auto startFamiliars = msg.getBufferPosition(); + msg.skipBytes(2); + const auto& familiars = Familiars::getInstance().getFamiliars(player->getVocationId()); + for (const Familiar& familiar : familiars) { + const std::string type = familiar.type; + if (!player->getFamiliar(familiar)) { + continue; + } + ++familiarsSize; + msg.add(familiar.lookType); + msg.addString(familiar.name); + if (type == "quest") + msg.addByte(CYCLOPEDIA_CHARACTERINFO_OUTFITTYPE_QUEST); + else + msg.addByte(CYCLOPEDIA_CHARACTERINFO_OUTFITTYPE_NONE); + msg.add(0); + } msg.setBufferPosition(startOutfits); msg.add(outfitSize); msg.setBufferPosition(startMounts); msg.add(mountSize); + msg.setBufferPosition(startFamiliars); + msg.add(familiarsSize); writeToOutputBuffer(msg); } @@ -2526,9 +2588,10 @@ void ProtocolGame::sendBasicData() std::list spellsList = g_spells->getSpellsByVocation(player->getVocationId()); msg.add(spellsList.size()); - for (uint8_t sid : spellsList) { + for (uint16_t sid : spellsList) { msg.addByte(sid); } + msg.addByte(0); // bool - determine whether magic shield is active or not writeToOutputBuffer(msg); } @@ -4225,6 +4288,12 @@ void ProtocolGame::sendOutfitWindow() AddOutfit(msg, currentOutfit); + msg.addByte(currentOutfit.lookMountHead); + msg.addByte(currentOutfit.lookMountBody); + msg.addByte(currentOutfit.lookMountLegs); + msg.addByte(currentOutfit.lookMountFeet); + msg.add(currentOutfit.lookFamiliarsType); + std::vector protocolOutfits; if (player->isAccessPlayer()) { static const std::string gamemasterOutfitName = "Game Master"; @@ -4256,20 +4325,39 @@ void ProtocolGame::sendOutfitWindow() msg.addByte(0x00); } - std::vector mounts; - for (const Mount& mount : g_game.mounts.getMounts()) { + std::vector protocolMounts; + const auto& mounts = g_game.mounts.getMounts(); + protocolMounts.reserve(mounts.size()); + for (const Mount& mount : mounts) { if (player->hasMount(&mount)) { - mounts.push_back(&mount); + protocolMounts.push_back(&mount); } } - msg.add(mounts.size()); - for (const Mount* mount : mounts) { + msg.add(protocolMounts.size()); + for (const Mount* mount : protocolMounts) { msg.add(mount->clientId); msg.addString(mount->name); msg.addByte(0x00); } + std::vector protocolFamiliars; + const auto& familiars = Familiars::getInstance().getFamiliars(player->getVocationId()); + protocolFamiliars.reserve(familiars.size()); + for (const Familiar& familiar : familiars) { + if (!player->getFamiliar(familiar)) { + continue; + } + protocolFamiliars.emplace_back(familiar.name, familiar.lookType); + } + + msg.add(protocolFamiliars.size()); + for (const ProtocolFamiliars& familiar : protocolFamiliars) { + msg.add(familiar.lookType); + msg.addString(familiar.name); + msg.addByte(0x00); + } + msg.addByte(0x00); //Try outfit msg.addByte(mounted ? 0x01 : 0x00); @@ -4582,7 +4670,14 @@ void ProtocolGame::AddCreature(NetworkMessage& msg, const Creature* creature, bo msg.addByte(creature->getDirection()); if (!creature->isInGhostMode() && !creature->isInvisible()) { - AddOutfit(msg, creature->getCurrentOutfit()); + const Outfit_t& outfit = creature->getCurrentOutfit(); + AddOutfit(msg, outfit); + if (outfit.lookMount != 0) { + msg.addByte(outfit.lookMountHead); + msg.addByte(outfit.lookMountBody); + msg.addByte(outfit.lookMountLegs); + msg.addByte(outfit.lookMountFeet); + } } else { static Outfit_t outfit; AddOutfit(msg, outfit); @@ -4678,6 +4773,9 @@ void ProtocolGame::AddPlayerStats(NetworkMessage& msg) msg.add(player->getExpBoostStamina()); // xp boost time (seconds) msg.addByte(1); // enables exp boost in the store + + msg.add(0); // remaining mana shield + msg.add(0); // total mana shield } void ProtocolGame::AddPlayerSkills(NetworkMessage& msg) @@ -4903,19 +5001,28 @@ void ProtocolGame::sendUpdateSupplyTracker(const Item* item) writeToOutputBuffer(msg); } -void ProtocolGame::sendUpdateImpactTracker(int32_t quantity, bool isHeal) - { - if (!player) { - return; - } - - NetworkMessage msg; +void ProtocolGame::sendUpdateImpactTracker(CombatType_t type, int32_t amount) { + NetworkMessage msg; msg.addByte(0xCC); - msg.addByte(isHeal ? 0x0 : 0x01); - msg.add(quantity); - - writeToOutputBuffer(msg); - } + if (type == COMBAT_HEALING) { + msg.addByte(ANALYZER_HEAL); + msg.add(amount); + } else { + msg.addByte(ANALYZER_DAMAGE_DEALT); + msg.add(amount); + msg.addByte(getCipbiaElement(type)); + } + writeToOutputBuffer(msg); +} +void ProtocolGame::sendUpdateInputAnalyzer(CombatType_t type, int32_t amount, std::string target) { + NetworkMessage msg; + msg.addByte(0xCC); + msg.addByte(ANALYZER_DAMAGE_RECEIVED); + msg.add(amount); + msg.addByte(getCipbiaElement(type)); + msg.addString(target); + writeToOutputBuffer(msg); +} void ProtocolGame::sendUpdateLootTracker(Item* item) { diff --git a/src/protocolgame.h b/src/protocolgame.h index a437766ef..d03d95ec8 100644 --- a/src/protocolgame.h +++ b/src/protocolgame.h @@ -20,6 +20,8 @@ #ifndef FS_PROTOCOLGAME_H_FACA2A2D1A9348B78E8FD7E8003EBB87 #define FS_PROTOCOLGAME_H_FACA2A2D1A9348B78E8FD7E8003EBB87 +#include + #include "protocol.h" #include "chat.h" #include "creature.h" @@ -365,7 +367,8 @@ class ProtocolGame final : public Protocol //analyzers void sendKillTrackerUpdate(Container* corpse, const std::string& name, const Outfit_t creatureOutfit); void sendUpdateSupplyTracker(const Item* item); - void sendUpdateImpactTracker(int32_t quantity, bool isHeal); + void sendUpdateImpactTracker(CombatType_t type, int32_t amount); + void sendUpdateInputAnalyzer(CombatType_t type, int32_t amount, std::string target); void sendUpdateLootTracker(Item* item); // Hotkey equip/dequip item