├── .editorconfig ├── .gitignore ├── .travis.yml ├── Dockerfile ├── LICENSE ├── MySql_Schema.sql ├── README.md ├── config.lua ├── data ├── actions │ ├── actions.xml │ ├── lib │ │ └── actions.lua │ └── scripts │ │ ├── blueberry_bush.lua │ │ ├── decayto_item.lua │ │ ├── decrement.lua │ │ ├── default.lua │ │ ├── doors │ │ ├── door_locked.lua │ │ ├── door_open_horizontal.lua │ │ ├── door_open_vertical.lua │ │ ├── gateofexp_closed.lua │ │ └── questdoor_closed.lua │ │ ├── enchanting.lua │ │ ├── fishing_rod.lua │ │ ├── foods │ │ └── food.lua │ │ ├── furniture_package.lua │ │ ├── increment.lua │ │ ├── key.lua │ │ ├── liquids │ │ └── containers.lua │ │ ├── machete.lua │ │ ├── make_bread.lua │ │ ├── musical_instrument.lua │ │ ├── pick.lua │ │ ├── piggy_bank.lua │ │ ├── pumpkinhead.lua │ │ ├── rope.lua │ │ ├── scythe.lua │ │ ├── shovel.lua │ │ ├── spellbook.lua │ │ ├── system.lua │ │ ├── teleport.lua │ │ └── watch_clock.lua ├── admin.xml ├── creaturescripts │ ├── creaturescripts.xml │ ├── lib │ │ └── creaturescripts.lua │ └── scripts │ │ ├── exp_stage.lua │ │ ├── firstitems.lua │ │ ├── give_bag_after_death.lua │ │ ├── login.lua │ │ ├── lookplayer.lua │ │ ├── lootmessage.lua │ │ ├── record.lua │ │ ├── removeblesses.lua │ │ └── sendlogininfo.lua ├── global.lua ├── globalevents │ ├── globalevents.xml │ ├── lib │ │ └── globalevents.lua │ └── scripts │ │ └── serversave.lua ├── items │ ├── items.otb │ └── items.xml ├── lib │ ├── calculator.lua │ ├── db.lua │ ├── exp_stages.lua │ ├── functions.lua │ ├── house.lua │ └── lib.lua ├── monster │ ├── amazon.xml │ ├── ancient scarab.xml │ ├── assassin.xml │ ├── badger.xml │ ├── bandit.xml │ ├── banshee.xml │ ├── bat.xml │ ├── bear.xml │ ├── behemoth.xml │ ├── beholder.xml │ ├── black knight.xml │ ├── black sheep.xml │ ├── blue djinn.xml │ ├── bonebeast.xml │ ├── bosses │ │ ├── ashmunrah.xml │ │ ├── demodras.xml │ │ ├── dharalion.xml │ │ ├── dipthrah.xml │ │ ├── fernfang.xml │ │ ├── general murius.xml │ │ ├── grorlam.xml │ │ ├── mahrdis.xml │ │ ├── morguthis.xml │ │ ├── necropharus.xml │ │ ├── omruc.xml │ │ ├── orshabaal.xml │ │ ├── rahemos.xml │ │ ├── thalas.xml │ │ ├── the evil eye.xml │ │ ├── the halloween hare.xml │ │ ├── the horned fox.xml │ │ ├── the old widow.xml │ │ ├── tiquandas revenge.xml │ │ └── vashresamun.xml │ ├── bug.xml │ ├── butterfly blue.xml │ ├── butterfly purple.xml │ ├── butterfly red.xml │ ├── butterfly yellow.xml │ ├── butterfly.xml │ ├── carniphila.xml │ ├── cave rat.xml │ ├── centipede.xml │ ├── chicken.xml │ ├── cobra.xml │ ├── crab.xml │ ├── crocodile.xml │ ├── crypt shambler.xml │ ├── cyclops.xml │ ├── dark monk.xml │ ├── deer.xml │ ├── demon skeleton.xml │ ├── demon.xml │ ├── dog.xml │ ├── dragon lord.xml │ ├── dragon.xml │ ├── dwarf geomancer.xml │ ├── dwarf guard.xml │ ├── dwarf soldier.xml │ ├── dwarf.xml │ ├── dworc fleshhunter.xml │ ├── dworc venomsniper.xml │ ├── dworc voodoomaster.xml │ ├── efreet.xml │ ├── elder beholder.xml │ ├── elephant.xml │ ├── elf arcanist.xml │ ├── elf scout.xml │ ├── elf.xml │ ├── fire devil.xml │ ├── fire elemental.xml │ ├── flamingo.xml │ ├── frost troll.xml │ ├── gargoyle.xml │ ├── gazer.xml │ ├── ghost.xml │ ├── ghoul.xml │ ├── giant spider.xml │ ├── goblin.xml │ ├── green djinn.xml │ ├── hero.xml │ ├── hunter.xml │ ├── hyaena.xml │ ├── hydra.xml │ ├── kongra.xml │ ├── larva.xml │ ├── lich.xml │ ├── lion.xml │ ├── lizard sentinel.xml │ ├── lizard snakecharmer.xml │ ├── lizard templar.xml │ ├── marid.xml │ ├── merlkin.xml │ ├── minotaur archer.xml │ ├── minotaur guard.xml │ ├── minotaur mage.xml │ ├── minotaur.xml │ ├── monk.xml │ ├── monsters.xml │ ├── mummy.xml │ ├── necromancer.xml │ ├── orc berserker.xml │ ├── orc leader.xml │ ├── orc rider.xml │ ├── orc shaman.xml │ ├── orc spearman.xml │ ├── orc warlord.xml │ ├── orc warrior.xml │ ├── orc.xml │ ├── panda.xml │ ├── parrot.xml │ ├── pig.xml │ ├── poison spider.xml │ ├── polar bear.xml │ ├── priestess.xml │ ├── rabbit.xml │ ├── rat.xml │ ├── rotworm.xml │ ├── scarab.xml │ ├── scorpion.xml │ ├── serpent spawn.xml │ ├── sheep.xml │ ├── sibang.xml │ ├── skeleton.xml │ ├── skunk.xml │ ├── slime.xml │ ├── slime2.xml │ ├── smuggler.xml │ ├── snake.xml │ ├── special │ │ ├── deathslicer.xml │ │ ├── demongoblin.xml │ │ ├── flamethrower.xml │ │ ├── magicthrower.xml │ │ ├── orcraid.xml │ │ ├── orcwarlordraid.xml │ │ ├── plaguethrower.xml │ │ └── shredderthrower.xml │ ├── spider.xml │ ├── spit nettle.xml │ ├── stalker.xml │ ├── stone golem.xml │ ├── swamp troll.xml │ ├── tarantula.xml │ ├── terror bird.xml │ ├── tiger.xml │ ├── troll.xml │ ├── valkyrie.xml │ ├── vampire.xml │ ├── war wolf.xml │ ├── warlock.xml │ ├── wasp.xml │ ├── wild warrior.xml │ ├── winter wolf.xml │ ├── witch.xml │ ├── wolf.xml │ └── yeti.xml ├── movements │ ├── lib │ │ └── movements.lua │ ├── movements.xml │ └── scripts │ │ ├── citizen.lua │ │ ├── doors │ │ ├── door_close_horizontal.lua │ │ ├── door_close_vertical.lua │ │ └── onadd_lockeddoor.lua │ │ ├── increment.lua │ │ ├── switch_tile.lua │ │ └── trap.lua ├── npc │ ├── scripts │ │ ├── lib │ │ │ ├── custom modules.lua │ │ │ ├── npc.lua │ │ │ └── npcsystem │ │ │ │ ├── keywordhandler.lua │ │ │ │ ├── modules.lua │ │ │ │ ├── npchandler.lua │ │ │ │ ├── npcsystem.lua │ │ │ │ └── queue.lua │ │ └── test.lua │ └── test.xml ├── raids │ └── raids.xml ├── spells │ ├── lib │ │ └── spells.lua │ ├── scripts │ │ ├── attack │ │ │ ├── berserk.lua │ │ │ ├── energy_beam.lua │ │ │ ├── energy_field.lua │ │ │ ├── energy_strike.lua │ │ │ ├── energy_wall.lua │ │ │ ├── energy_wave.lua │ │ │ ├── energybomb.lua │ │ │ ├── envenom.lua │ │ │ ├── explosion.lua │ │ │ ├── fire_field.lua │ │ │ ├── fire_wall.lua │ │ │ ├── fire_wave.lua │ │ │ ├── fireball.lua │ │ │ ├── firebomb.lua │ │ │ ├── flame_strike.lua │ │ │ ├── force_strike.lua │ │ │ ├── great_energy_beam.lua │ │ │ ├── great_fireball.lua │ │ │ ├── heavy_magic_missile.lua │ │ │ ├── light_magic_missile.lua │ │ │ ├── poison_bomb.lua │ │ │ ├── poison_field.lua │ │ │ ├── poison_storm.lua │ │ │ ├── poison_wall.lua │ │ │ ├── soulfire.lua │ │ │ ├── sudden_death.lua │ │ │ └── ultimate_explosion.lua │ │ ├── healing │ │ │ ├── antidote.lua │ │ │ ├── antidote_rune.lua │ │ │ ├── heal_friend.lua │ │ │ ├── intense_healing.lua │ │ │ ├── intense_healing_rune.lua │ │ │ ├── light_healing.lua │ │ │ ├── mass_healing.lua │ │ │ ├── ultimate_healing.lua │ │ │ └── ultimate_healing_rune.lua │ │ ├── monster │ │ │ ├── djinn electrify area.lua │ │ │ ├── djinn electrify.lua │ │ │ ├── haste_ancientscarab.lua │ │ │ ├── haste_assassin.lua │ │ │ ├── haste_behemoth.lua │ │ │ ├── haste_darkmonk.lua │ │ │ ├── haste_dharalion.lua │ │ │ ├── haste_dworcvoodoomaster.lua │ │ │ ├── haste_fernfang.lua │ │ │ ├── haste_gazer.lua │ │ │ ├── haste_giantspider.lua │ │ │ ├── haste_grorlam.lua │ │ │ ├── haste_kongra.lua │ │ │ ├── haste_monk.lua │ │ │ ├── haste_morguthis.lua │ │ │ ├── haste_oldwidow.lua │ │ │ ├── haste_orcberserker.lua │ │ │ ├── haste_orcrider.lua │ │ │ ├── haste_orshabaal.lua │ │ │ ├── haste_scarab.lua │ │ │ ├── haste_serpentspawn.lua │ │ │ ├── haste_sibang.lua │ │ │ ├── haste_tarantula.lua │ │ │ ├── haste_tiger.lua │ │ │ ├── haste_wildwarrior.lua │ │ │ ├── paralyze_ancientscarab.lua │ │ │ ├── paralyze_ancientscarab2.lua │ │ │ ├── paralyze_ashmunrah.lua │ │ │ ├── paralyze_banshee.lua │ │ │ ├── paralyze_carniphila.lua │ │ │ ├── paralyze_dipthrah.lua │ │ │ ├── paralyze_dworcvoodoomaster.lua │ │ │ ├── paralyze_efreet.lua │ │ │ ├── paralyze_elderbeholder.lua │ │ │ ├── paralyze_evileye.lua │ │ │ ├── paralyze_hydra.lua │ │ │ ├── paralyze_lich.lua │ │ │ ├── paralyze_mahrdis.lua │ │ │ ├── paralyze_marid.lua │ │ │ ├── paralyze_morguthis.lua │ │ │ ├── paralyze_mummy.lua │ │ │ ├── paralyze_oldwidow.lua │ │ │ ├── paralyze_omruc.lua │ │ │ ├── paralyze_rahemos.lua │ │ │ ├── paralyze_serpentspawn.lua │ │ │ ├── paralyze_thalas.lua │ │ │ ├── paralyze_thalas2.lua │ │ │ ├── paralyze_vampire.lua │ │ │ ├── paralyze_vashresamun.lua │ │ │ ├── paralyze_warlock.lua │ │ │ ├── skills_dipthrah.lua │ │ │ └── skills_morguthis.lua │ │ └── support │ │ │ ├── animate_dead_rune.lua │ │ │ ├── cancel_invisibility.lua │ │ │ ├── challenge.lua │ │ │ ├── desintegrate_rune.lua │ │ │ ├── destroy_field_rune.lua │ │ │ ├── great_light.lua │ │ │ ├── haste.lua │ │ │ ├── invisible.lua │ │ │ ├── light.lua │ │ │ ├── magic_rope.lua │ │ │ ├── magic_shield.lua │ │ │ ├── magic_wall_rune.lua │ │ │ ├── paralyze_rune.lua │ │ │ ├── strong_haste.lua │ │ │ ├── ultimate_light.lua │ │ │ ├── undead_legion.lua │ │ │ └── wild_growth.lua │ └── spells.xml ├── talkactions │ ├── lib │ │ └── talkactions.lua │ ├── scripts │ │ ├── accessonlinelist.lua │ │ ├── banmanager.lua │ │ ├── broadcastclass.lua │ │ ├── buyhouse.lua │ │ ├── canuseshare.lua │ │ ├── closeserver.lua │ │ ├── createitembyid.lua │ │ ├── createitembyidfront.lua │ │ ├── createitembyname.lua │ │ ├── createitembynamefront.lua │ │ ├── floorchange.lua │ │ ├── frags.lua │ │ ├── gethouse.lua │ │ ├── getinfo.lua │ │ ├── gminvisible.lua │ │ ├── housecleaning.lua │ │ ├── houseinfo.lua │ │ ├── kickplayer.lua │ │ ├── leavehouse.lua │ │ ├── mc.lua │ │ ├── onlinelist.lua │ │ ├── openserver.lua │ │ ├── placemonster.lua │ │ ├── placesummon.lua │ │ ├── refreshmap.lua │ │ ├── reload.lua │ │ ├── removething.lua │ │ ├── saveserver.lua │ │ ├── serverinfo.lua │ │ ├── sethouseowner.lua │ │ ├── shareexp.lua │ │ ├── shutdown.lua │ │ ├── teleporthere.lua │ │ ├── teleportmasterpos.lua │ │ ├── teleportntiles.lua │ │ ├── teleportto.lua │ │ ├── teleporttotown.lua │ │ ├── testeffect.lua │ │ ├── war.lua │ │ └── znoteshop.lua │ └── talkactions.xml ├── vocations.xml ├── weapons │ ├── lib │ │ └── weapons.lua │ ├── scripts │ │ ├── explosive_arrow.lua │ │ └── poison_arrow.lua │ └── weapons.xml └── world │ ├── world-house.xml │ ├── world-spawn.xml │ └── world.otbm ├── docker-compose.yml ├── iconv.dll ├── libmySQL.dll ├── libxml2.dll ├── lua51.dll ├── mpir.dll ├── othire_win32_outdated.exe ├── source ├── AUTHORS ├── COMPILING ├── LICENSE ├── Makefile.am ├── README ├── README.DATABASE ├── account.h ├── actions.cpp ├── actions.h ├── admin.cpp ├── admin.h ├── allocator.cpp ├── allocator.h ├── autogen.sh ├── ban.cpp ├── ban.h ├── baseevents.cpp ├── baseevents.h ├── beds.cpp ├── beds.h ├── chat.cpp ├── chat.h ├── combat.cpp ├── combat.h ├── compiler │ ├── gcc.h │ ├── msvc.h │ └── workarounds.h ├── condition.cpp ├── condition.h ├── config.lua.dist ├── configmanager.cpp ├── configmanager.h ├── configure.ac ├── connection.cpp ├── connection.h ├── const.h ├── container.cpp ├── container.h ├── creature.cpp ├── creature.h ├── creatureevent.cpp ├── creatureevent.h ├── cylinder.cpp ├── cylinder.h ├── database.cpp ├── database.h ├── databasemysql.cpp ├── databasemysql.h ├── databaseodbc.cpp ├── databaseodbc.h ├── databasepgsql.cpp ├── databasepgsql.h ├── databasesqlite.cpp ├── databasesqlite.h ├── db.s3db ├── debian-packaging-plan.txt ├── debian │ ├── README.Debian │ ├── changelog │ ├── compat │ ├── control │ ├── copyright │ ├── dirs │ ├── docs │ ├── init.d │ ├── manpage.1.ex │ ├── manpage.sgml.ex │ ├── manpage.xml.ex │ ├── otserv.default.ex │ ├── otserv.doc-base.EX │ ├── postinst.ex │ ├── postrm.ex │ ├── preinst.ex │ ├── prerm.ex │ ├── rules │ └── watch.ex ├── definitions.h ├── depot.cpp ├── depot.h ├── enums.h ├── exception.cpp ├── exception.h ├── fileloader.cpp ├── fileloader.h ├── game.cpp ├── game.h ├── gendb.sh ├── globalevent.cpp ├── globalevent.h ├── guild.cpp ├── guild.h ├── house.cpp ├── house.h ├── housetile.cpp ├── housetile.h ├── ioaccount.cpp ├── ioaccount.h ├── iomap.h ├── iomapotbm.cpp ├── iomapotbm.h ├── iomapserialize.cpp ├── iomapserialize.h ├── ioplayer.cpp ├── ioplayer.h ├── item.cpp ├── item.h ├── itemloader.h ├── items.cpp ├── items.h ├── logger.cpp ├── logger.h ├── luascript.cpp ├── luascript.h ├── mailbox.cpp ├── mailbox.h ├── map.cpp ├── map.h ├── md5.cpp ├── md5.h ├── monster.cpp ├── monster.h ├── monsters.cpp ├── monsters.h ├── movement.cpp ├── movement.h ├── networkmessage.cpp ├── networkmessage.h ├── npc.cpp ├── npc.h ├── otpch.cpp ├── otpch.h ├── otserv.cpp ├── otserv.ico ├── otsystem.h ├── outputmessage.cpp ├── outputmessage.h ├── party.cpp ├── party.h ├── player.cpp ├── player.h ├── position.cpp ├── position.h ├── premake │ └── premake4.lua ├── protocol.cpp ├── protocol.h ├── protocolgame.cpp ├── protocolgame.h ├── protocollogin.cpp ├── protocollogin.h ├── raids.cpp ├── raids.h ├── rsa.cpp ├── rsa.h ├── scheduler.cpp ├── scheduler.h ├── schema.mysql ├── schema.pgsql ├── schema.sqlite ├── scriptmanager.cpp ├── scriptmanager.h ├── server.cpp ├── server.h ├── sha1.cpp ├── sha1.h ├── spawn.cpp ├── spawn.h ├── spells.cpp ├── spells.h ├── status.cpp ├── status.h ├── talkaction.cpp ├── talkaction.h ├── tasks.cpp ├── tasks.h ├── teleport.cpp ├── teleport.h ├── templates.h ├── thing.cpp ├── thing.h ├── tile.cpp ├── tile.h ├── tools.cpp ├── tools.h ├── town.h ├── trashholder.cpp ├── trashholder.h ├── vocation.cpp ├── vocation.h ├── waitlist.cpp ├── waitlist.h ├── waypoints.h ├── weapons.cpp └── weapons.h └── zlib1.dll /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | # General configuration 4 | [*] 5 | charset = utf-8 6 | end_of_line = lf 7 | indent_style = tab 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [**.{.cpp,.h}] 12 | # Options not ubiquitous, but useful 13 | indent_brace_style = K&R 14 | spaces_around_brackets = none 15 | 16 | [.travis.yml] 17 | indent_style = spaces 18 | indent_size = 2 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore build files 2 | *.o 3 | source/.deps/ 4 | source/Makefile 5 | source/Makefile.in 6 | source/aclocal.m4 7 | source/autom4te.cache/ 8 | source/config.h 9 | source/config.h.in 10 | source/config.log 11 | source/config.lua 12 | source/config.status 13 | source/configure 14 | source/depcomp 15 | source/install-sh 16 | source/missing 17 | source/otserv 18 | source/stamp-h1 19 | source/config.h.in~ 20 | 21 | # OS 22 | ._* 23 | .DS_Store 24 | Thumbs.db 25 | 26 | # Logs 27 | otlog.txt 28 | client_assertions.txt 29 | mem_dump.txt 30 | report.txt 31 | player_reports.txt -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: required 2 | dist: trusty 3 | 4 | language: cpp 5 | 6 | compiler: 7 | - gcc 8 | 9 | before_install: 10 | - sudo apt-get -qq update 11 | - sudo apt-get install -y autoconf build-essential pkg-config libboost-dev libgmp3-dev libxml2-dev liblua5.1-0-dev libmysqlclient-dev libcrypto++-dev ccache libboost-filesystem-dev libboost-regex-dev libboost-system-dev libboost-thread-dev libssl-dev lua5.1 libncurses5-dev 12 | 13 | script: 14 | - cd source 15 | - sh ./autogen.sh 16 | - ./configure --enable-mysql --enable-server-diag 17 | - make 18 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:latest 2 | 3 | COPY . /otserv/. 4 | 5 | RUN echo http://nl.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories && \ 6 | apk update && \ 7 | apk upgrade && \ 8 | apk add --no-cache autoconf build-base pkgconfig boost-dev gmp-dev libxml2-dev && \ 9 | apk add --no-cache automake lua lua-dev mariadb-dev crypto++ ccache 10 | cd /otserv/source && \ 11 | chmod +x autogen.sh && \ 12 | ./autogen.sh && \ 13 | ./configure --enable-mysql --enable-server-diag && \ 14 | make 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # OTHire [![Build Status](https://travis-ci.org/TwistedScorpio/OTHire.svg?branch=master)](https://travis-ci.org/TwistedScorpio/OTHire) 2 | 3 | # Update 2019 4 | - Please, consider working your projects and codebases on https://github.com/TwistedScorpio/Nostalrius 5 | 6 | OTHire is a free MMORPG emulation, that creates a own gameworld server, 7 | based on the CIPSoft's Tibia version **7.72**. 8 | It is a fork of the [OpenTibia Server](https://github.com/opentibia/server) project. 9 | 10 | ### Getting Started 11 | 12 | * Compatible AAC, ZnoteAAC [HERE](https://github.com/Znote/ZnoteAAC). 13 | * Flags calculator [HERE](https://diegorodriguesvieira.github.io/flags-calculator/). 14 | * MySql_Schema.sql default `account // password` is `123456 // tibia`. 15 | * For more information check our [Wiki](https://github.com/TwistedScorpio/OTHire/wiki). 16 | 17 | #### Using Docker 18 | 19 | If you want, you can use Docker to compile it. 20 | 21 | ``` 22 | $ docker-compose build 23 | ``` 24 | 25 | It will start a Alpine container, install dependencies and compile the current code from `source/` into the container. Works on any machine with Docker installed. 26 | 27 | ### Issues and Support 28 | 29 | If you need help, please visit [our OTLand forum thread](https://otland.net/threads/7-72-othire-0-0-3.246964/). 30 | We use the [issue tracker on GitHub](https://github.com/TwistedScorpio/OTHire/issues), 31 | where you can posts errors and bugs found and also suggest enhancements. 32 | -------------------------------------------------------------------------------- /data/actions/scripts/blueberry_bush.lua: -------------------------------------------------------------------------------- 1 | local ITEM_BLUEBERRY_EMPTY = 2786 2 | local ITEM_BLUEBERRY = 2677 3 | local ITEM_BLUEBERRY_COUNT = 3 4 | 5 | function onUse(cid, item, frompos, item2, topos) 6 | doTransformItem(item.uid, ITEM_BLUEBERRY_EMPTY) 7 | doCreateItem(ITEM_BLUEBERRY, ITEM_BLUEBERRY_COUNT, frompos) 8 | doDecayItem(item.uid) 9 | return true 10 | end -------------------------------------------------------------------------------- /data/actions/scripts/decayto_item.lua: -------------------------------------------------------------------------------- 1 | local ITEM_CANDELABRUM_ON = 2057 2 | local ITEM_CANDELABRUM_OFF = 2041 3 | 4 | function onUse(cid, item, frompos, item2, topos) 5 | 6 | if (isInArray(DECAYTO_ITEM_INCREMENT, item.itemid) ) then 7 | doTransformItem(item.uid, item.itemid + 1) 8 | elseif (item.itemid == ITEM_CANDELABRUM_ON) then 9 | doTransformItem(item.uid, ITEM_CANDELABRUM_OFF) 10 | else 11 | doTransformItem(item.uid, item.itemid - 1) 12 | end 13 | doDecayItem(item.uid) 14 | if item.actionid ~= 0 then 15 | doSetItemActionId(item.uid, item.actionid) 16 | end 17 | return true 18 | end 19 | -------------------------------------------------------------------------------- /data/actions/scripts/decrement.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, frompos, item2, topos) 2 | doTransformItem(item.uid, item.itemid - 1) 3 | if item.actionid ~= 0 then 4 | doSetItemActionId(item.uid, item.actionid) 5 | end 6 | doDecayItem(item.uid) 7 | return true 8 | end 9 | -------------------------------------------------------------------------------- /data/actions/scripts/default.lua: -------------------------------------------------------------------------------- 1 | function isBreakingTool(item) 2 | local t = getItemWeaponTypeByUID(item.uid) 3 | return (t == WEAPON_SWORD) or (t == WEAPON_CLUB) or (t == WEAPON_AXE) 4 | end 5 | 6 | function onUse(cid, item, frompos, item2, topos) 7 | if BREAKABLE_BY_WEAPONS[item2.itemid] ~= nil and isBreakingTool(item) then 8 | local chance = BREAKABLE_BY_WEAPONS[item2.itemid].chance or 20 9 | if math.random(100) <= chance then 10 | doTransformItem(item2.uid, BREAKABLE_BY_WEAPONS[item2.itemid].remainings) 11 | doDecayItem(item2.uid) 12 | if item2.actionid ~= 0 then 13 | doSetItemActionId(item2.uid, item2.actionid) 14 | end 15 | end 16 | doSendMagicEffect(topos, CONST_ME_POFF) 17 | return true 18 | end 19 | 20 | return false 21 | end 22 | -------------------------------------------------------------------------------- /data/actions/scripts/doors/door_locked.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, frompos, item2, topos) 2 | if(item.actionid == 0) then 3 | -- This is impossible to happen, but whatever. 4 | doTransformItem(item.uid, item.itemid+2) 5 | return true 6 | end 7 | 8 | doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.") 9 | return true 10 | end -------------------------------------------------------------------------------- /data/actions/scripts/doors/door_open_horizontal.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, frompos, item2, topos) 2 | -- Get the tile to move the things on the door to 3 | local nextTile = {x=frompos.x, y=frompos.y+1, z=frompos.z} 4 | 5 | -- Move all moveable things to the next tile 6 | doRelocate(frompos, nextTile) 7 | 8 | -- Transform the door 9 | -- doRelocate can trigger other scripts (stepOut) so the uid might be invalid 10 | if(isValidUID(item.uid)) then 11 | doTransformItem(item.uid, item.itemid-1) 12 | end 13 | 14 | return true 15 | end 16 | -------------------------------------------------------------------------------- /data/actions/scripts/doors/door_open_vertical.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, frompos, item2, topos) 2 | -- Get the tile to move the things on the door to 3 | local nextTile = {x=frompos.x+1, y=frompos.y, z=frompos.z} 4 | 5 | -- Move all moveable things to the next tile 6 | doRelocate(frompos, nextTile) 7 | 8 | -- Transform the door 9 | -- doRelocate can trigger other scripts (stepOut) so the uid might be invalid 10 | if(isValidUID(item.uid)) then 11 | doTransformItem(item.uid, item.itemid-1) 12 | end 13 | 14 | return true 15 | end 16 | -------------------------------------------------------------------------------- /data/actions/scripts/doors/questdoor_closed.lua: -------------------------------------------------------------------------------- 1 | -- Player with storage value of the item's actionid set to 1 can open 2 | 3 | function onUse(cid, item, frompos, item2, topos) 4 | if(item.actionid == 0) then 5 | -- Make it a normal door 6 | doTransformItem(item.uid, item.itemid+1) 7 | return true 8 | end 9 | 10 | local canEnter = (getPlayerStorageValue(cid, item.actionid) == 1) 11 | if not(canEnter) then 12 | doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "The door is sealed against unwanted intruders.") 13 | return true 14 | end 15 | 16 | doTransformItem(item.uid, item.itemid+1) 17 | local canGo = (queryTileAddThing(cid, frompos, bit.bor(2, 4)) == RETURNVALUE_NOERROR) --Veryfies if the player can go, ignoring blocking things 18 | if not(canGo) then 19 | return false 20 | end 21 | 22 | local dir = getDirectionTo(getPlayerPosition(cid), frompos) 23 | doMoveCreature(cid, dir) 24 | return true 25 | end -------------------------------------------------------------------------------- /data/actions/scripts/enchanting.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, fromPosition, itemEx, toPosition) 2 | if itemEx.itemid == 2147 and item.itemid == 2342 then 3 | doTransformItem(item.uid, 2343) 4 | doDecayItem(item.uid) 5 | doRemoveItem(itemEx.uid,1) 6 | doSendMagicEffect(toPosition, CONST_ME_MAGIC_RED) 7 | return true 8 | end 9 | return false 10 | end -------------------------------------------------------------------------------- /data/actions/scripts/foods/food.lua: -------------------------------------------------------------------------------- 1 | local MAX_FOOD = 1200 2 | 3 | function onUse(cid, item, frompos, item2, topos) 4 | if FOODS[item.itemid] == nil then 5 | return false 6 | end 7 | 8 | local size = FOODS[item.itemid][1] 9 | local sound = FOODS[item.itemid][2] 10 | 11 | if (getPlayerFood(cid) + size > MAX_FOOD) then 12 | doPlayerSendCancel(cid, "You are full.") 13 | return true 14 | end 15 | doPlayerFeed(cid, size) 16 | doRemoveItem(item.uid, 1) 17 | 18 | return true 19 | 20 | end -------------------------------------------------------------------------------- /data/actions/scripts/furniture_package.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, frompos, item2, topos) 2 | if (CONSTRUCTIONS[item.itemid] == nil) then 3 | return false 4 | elseif (frompos.x == CONTAINER_POSITION) then 5 | doPlayerSendCancel(cid, "You must put the construction kit on the floor first.") 6 | elseif not(House.getHouseByPos(frompos)) then 7 | doPlayerSendCancel(cid, "You must open the construction kit in your house.") 8 | else 9 | doTransformItem(item.uid, CONSTRUCTIONS[item.itemid]) 10 | if item.actionid ~= 0 then 11 | doSetItemActionId(item.uid, item.actionid) 12 | end 13 | doSendMagicEffect(frompos, CONST_ME_POFF) 14 | end 15 | 16 | return true 17 | end 18 | -------------------------------------------------------------------------------- /data/actions/scripts/increment.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, frompos, item2, topos) 2 | doTransformItem(item.uid, item.itemid + 1) 3 | if item.actionid ~= 0 then 4 | doSetItemActionId(item.uid, item.actionid) 5 | end 6 | doDecayItem(item.uid) 7 | return true 8 | end 9 | -------------------------------------------------------------------------------- /data/actions/scripts/key.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, frompos, item2, topos) 2 | if (item2.actionid == 0 or 3 | (isInArray(LOCKED_DOORS, item2.itemid) == false and 4 | isInArray(LOCKED_DOORS, item2.itemid-1) == false and 5 | isInArray(LOCKED_DOORS, item2.itemid-2) == false)) then 6 | return false 7 | end 8 | 9 | local canOpen = (item.actionid == 10000 or item.actionid == item2.actionid) 10 | if not(canOpen) then 11 | doPlayerSendCancel(cid, "The key does not match.") 12 | return true 13 | end 14 | 15 | -- Verify if you are opening or closing the door 16 | if(isInArray(LOCKED_DOORS, item2.itemid) ) then -- Opening 17 | doTransformItem(item2.uid, item2.itemid+2) 18 | elseif(isInArray(LOCKED_DOORS, item2.itemid-2) ) then -- Closing and Locking 19 | doTransformItem(item2.uid, item2.itemid-2) 20 | else -- Locking an already closed door 21 | doTransformItem(item2.uid, item2.itemid-1) 22 | end 23 | doSetItemActionId(item2.uid, item2.actionid) 24 | 25 | return true 26 | end 27 | -------------------------------------------------------------------------------- /data/actions/scripts/machete.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, frompos, item2, topos) 2 | return useMachete(cid, item, frompos, item2, topos) 3 | end 4 | -------------------------------------------------------------------------------- /data/actions/scripts/make_bread.lua: -------------------------------------------------------------------------------- 1 | local ITEM_WHEAT = 2694 2 | local ITEM_FLOUR = 2692 3 | local ITEM_DOUGH = 2693 4 | local ITEM_BREAD = 2689 5 | local ITEM_MILL = {1381, 1382, 1383, 1384} 6 | local TYPE_EMPTY = 0 7 | local TYPE_WATER = 1 8 | 9 | function onUse(cid, item, frompos, item2, topos) 10 | if(item.itemid == ITEM_WHEAT and isInArray(ITEM_MILL, item2.itemid) ) then 11 | doPlayerAddItem(cid, ITEM_FLOUR) 12 | doRemoveItem(item.uid, 1) 13 | return true 14 | elseif(item.itemid == ITEM_FLOUR and isItemFluidContainer(item2.itemid) and item2.type == TYPE_WATER) then 15 | doPlayerAddItem(cid, ITEM_DOUGH) 16 | doChangeTypeItem(item2.uid, TYPE_EMPTY) 17 | doRemoveItem(item.uid, 1) 18 | return true 19 | elseif(item.itemid == ITEM_DOUGH and isInArray(OVEN_ON, item2.itemid) ) then 20 | doPlayerAddItem(cid, ITEM_BREAD) 21 | doRemoveItem(item.uid, 1) 22 | return true 23 | end 24 | return false 25 | end -------------------------------------------------------------------------------- /data/actions/scripts/pick.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, fromPosition, itemEx, toPosition) 2 | return usePick(cid, item, fromPosition, itemEx, toPosition) 3 | end 4 | 5 | -------------------------------------------------------------------------------- /data/actions/scripts/piggy_bank.lua: -------------------------------------------------------------------------------- 1 | local BROKEN_PIGGY_BANK = 2115 2 | 3 | function onUse(cid, item, frompos, item2, topos) 4 | if math.random(1, 6) ~= 1 then 5 | doSendMagicEffect(frompos, CONST_ME_POFF) 6 | doPlayerAddItem(cid, ITEM_GOLD_COIN, 1) 7 | doTransformItem(item.uid, BROKEN_PIGGY_BANK) 8 | if item.actionid ~= 0 then 9 | doSetItemActionId(item.uid, item.actionid) 10 | end 11 | else 12 | doSendMagicEffect(frompos, CONST_ME_SOUND_YELLOW) 13 | doPlayerAddItem(cid, ITEM_PLATINUM_COIN, 1) 14 | end 15 | return true 16 | end 17 | -------------------------------------------------------------------------------- /data/actions/scripts/pumpkinhead.lua: -------------------------------------------------------------------------------- 1 | local PUMPKIN = 2683 2 | local PUMPKINHEAD_LIGHT_OFF = 2096 3 | local PUMPKINHEAD_LIGHT_ON = 2097 4 | local CANDLE = 2048 5 | local KNIFE = 2566 6 | 7 | function onUse(cid, item, frompos, item2, topos) 8 | if item.itemid == PUMPKINHEAD_LIGHT_OFF and item2.itemid == CANDLE then 9 | doTransformItem(item.uid, PUMPKINHEAD_LIGHT_ON) 10 | doRemoveItem(item2.uid) 11 | elseif item.itemid == KNIFE and item2.itemid == PUMPKIN then 12 | doTransformItem(item2.uid, PUMPKINHEAD_LIGHT_OFF) 13 | if item2.actionid ~= 0 then 14 | doSetItemActionId(item2.uid, item2.actionid) 15 | end 16 | else 17 | return false 18 | end 19 | 20 | return true 21 | end 22 | -------------------------------------------------------------------------------- /data/actions/scripts/rope.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, frompos, item2, topos) 2 | return useRope(cid, item, frompos, item2, topos) 3 | end 4 | -------------------------------------------------------------------------------- /data/actions/scripts/scythe.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, frompos, item2, topos) 2 | return useScythe(cid, item, frompos, item2, topos) 3 | end 4 | -------------------------------------------------------------------------------- /data/actions/scripts/shovel.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, frompos, item2, topos) 2 | return useShovel(cid, item, frompos, item2, topos) 3 | end 4 | -------------------------------------------------------------------------------- /data/actions/scripts/spellbook.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, frompos, item2, topos) 2 | local count = getPlayerInstantSpellCount(cid) 3 | local text = "" 4 | local t = {} 5 | 6 | for i=0, count-1 do 7 | local spell = getPlayerInstantSpellInfo(cid, i) 8 | if spell.level ~= 0 then 9 | if spell.manapercent > 0 then 10 | spell.mana = spell.manapercent .. "%" 11 | end 12 | 13 | table.insert(t, spell) 14 | end 15 | end 16 | 17 | table.sort(t, function(a, b) return a.level < b.level end) 18 | 19 | local prevLevel = -1 20 | for i,spell in ipairs(t) do 21 | local line = "" 22 | if prevLevel ~= spell.level then 23 | if i ~= 1 then 24 | line = "\n" 25 | end 26 | 27 | line = line .. "Spells for Level " .. spell.level .. "\n" 28 | prevLevel = spell.level 29 | end 30 | 31 | text = text .. line .. " " .. spell.words .. " - " .. spell.name .. " : " .. spell.mana .. "\n" 32 | end 33 | 34 | doShowTextDialog(cid, item.itemid, text) 35 | return true 36 | end -------------------------------------------------------------------------------- /data/actions/scripts/teleport.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, frompos, item2, topos) 2 | newPos = {x = frompos.x, y = frompos.y, z = frompos.z} 3 | if (isInArray(LADDER, item.itemid) ) then 4 | newPos.y = newPos.y + 1 5 | newPos.z = newPos.z - 1 6 | doTeleportThing(cid, newPos) 7 | else 8 | newPos.z = newPos.z + 1 9 | doTeleportThing(cid, newPos) 10 | end 11 | return true 12 | end -------------------------------------------------------------------------------- /data/actions/scripts/watch_clock.lua: -------------------------------------------------------------------------------- 1 | function onUse(cid, item, frompos, item2, topos) 2 | local tibiaTime = getTibiaTime() 3 | doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "The time is " .. tibiaTime.hours .. ":" .. tibiaTime.minutes .. ".") 4 | return true 5 | end -------------------------------------------------------------------------------- /data/admin.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /data/creaturescripts/creaturescripts.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /data/creaturescripts/lib/creaturescripts.lua: -------------------------------------------------------------------------------- 1 | function checkStageChange(cid) 2 | local playerLevel = getPlayerLevel(cid) 3 | 4 | if (playerLevel > stages[#stages].maxLevel) then 5 | setExperienceRate(cid, stages[#stages].multiplier) 6 | return true 7 | end 8 | 9 | for i = 1, #stages do 10 | if (playerLevel >= stages[i].minLevel and playerLevel <= stages[i].maxLevel) then 11 | setExperienceRate(cid, stages[i].multiplier) 12 | return true 13 | end 14 | end 15 | 16 | return false 17 | end -------------------------------------------------------------------------------- /data/creaturescripts/scripts/exp_stage.lua: -------------------------------------------------------------------------------- 1 | function onAdvance(cid, skill, oldLevel, newLevel) 2 | if (skill == LEVEL_EXPERIENCE) then 3 | checkStageChange(cid) 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /data/creaturescripts/scripts/give_bag_after_death.lua: -------------------------------------------------------------------------------- 1 | function onDie(cid, corpse) 2 | if isPlayer(cid) then 3 | -- if a player dies, set storage value to add bag at the relogin 4 | setPlayerStorageValue(cid, STORAGE_DEATH_BAG, 1) 5 | end 6 | end -------------------------------------------------------------------------------- /data/creaturescripts/scripts/lookplayer.lua: -------------------------------------------------------------------------------- 1 | function onLook(cid, thing, itemId) 2 | 3 | local settings = { 4 | anonymous = false, 5 | hiddenAccess = 2 6 | } 7 | 8 | if(isPlayer(thing.uid) and cid ~= thing.uid and getPlayerAccess(cid) < settings.hiddenAccess) then 9 | doPlayerSendTextMessage(thing.uid, MESSAGE_EVENT_DEFAULT, (settings.anonymous and "Someone" or getPlayerName(cid)) .. " is looking at you.") 10 | end 11 | 12 | return true 13 | end 14 | -------------------------------------------------------------------------------- /data/creaturescripts/scripts/record.lua: -------------------------------------------------------------------------------- 1 | function onLogin(cid) 2 | local PlayersRecordStorage = 14301 3 | local i = 1 4 | 5 | for _, pid in ipairs(getPlayersOnlineList()) do 6 | i = i + 1 7 | end 8 | local current = i - 1 9 | 10 | if getGlobalStorageValue(PlayersRecordStorage) == nil then 11 | setGlobalStorageValue(PlayersRecordStorage, 0) 12 | end 13 | 14 | oldRecord = getGlobalStorageValue(PlayersRecordStorage) 15 | 16 | if current > oldRecord then 17 | addEvent(doBroadcastMessage, 150, "New record: " .. current .. " players are logged in.", MESSAGE_STATUS_DEFAULT) 18 | setGlobalStorageValue(PlayersRecordStorage, current) 19 | end 20 | 21 | return true 22 | end 23 | -------------------------------------------------------------------------------- /data/creaturescripts/scripts/removeblesses.lua: -------------------------------------------------------------------------------- 1 | function onDie(cid, corpse) 2 | if isPlayer(cid) then 3 | -- Remove all blesses 4 | -- We can not remove blesses now, since onDie is called before removing experience 5 | -- So we will set storage to remove in onLogin 6 | setPlayerStorageValue(cid, STORAGE_REMOVE_BLESSES, 1) 7 | end 8 | end -------------------------------------------------------------------------------- /data/creaturescripts/scripts/sendlogininfo.lua: -------------------------------------------------------------------------------- 1 | function onLogin(cid) 2 | --Sends the login messages and also the teleport effect 3 | local loginMsg = getConfigValue('loginmsg') 4 | local lastLogin = getPlayerLastLogin(cid) 5 | local playerPos = getPlayerPosition(cid) 6 | local serverName = getConfigValue('servername') 7 | local str = "" 8 | 9 | if (string.len(loginMsg) ~= 0) then 10 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, loginMsg) 11 | end 12 | 13 | if (lastLogin ~= 0) then 14 | str = "Your last visit in " 15 | str = str .. serverName 16 | str = str .. ": " 17 | str = str .. os.date("%d %b %Y %X", lastLogin) 18 | str = str .. "." 19 | else 20 | str = "This is your first visit in " 21 | str = str .. serverName 22 | str = str .. ". Please choose an outfit." 23 | sendOutfitWindow(cid) 24 | end 25 | 26 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, str) 27 | 28 | if(isGmInvisible(cid) == false) then 29 | doSendMagicEffect(playerPos, CONST_ME_TELEPORT) 30 | end 31 | 32 | return true 33 | end -------------------------------------------------------------------------------- /data/globalevents/globalevents.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /data/globalevents/lib/globalevents.lua: -------------------------------------------------------------------------------- 1 | -- empty file -- -------------------------------------------------------------------------------- /data/globalevents/scripts/serversave.lua: -------------------------------------------------------------------------------- 1 | local function serverSave() 2 | doSaveServer(true) 3 | end 4 | 5 | local function secondSaveWarning() 6 | broadcastMessage("Server is saving game in one minute. Please mind it may freeze!", MESSAGE_STATUS_WARNING) 7 | addEvent(serverSave, 60000) 8 | end 9 | 10 | local function firstSaveWarning() 11 | broadcastMessage("Server is saving game in 3 minutes. Please mind it may freeze!", MESSAGE_STATUS_WARNING) 12 | addEvent(secondSaveWarning, 120000) 13 | end 14 | 15 | --function onThink(interval) <-- en caso de querer salvar por intervalos mas cortos 16 | function onTime() 17 | broadcastMessage("Server is saving game in 5 minutes. Please mind it may freeze!", MESSAGE_STATUS_WARNING) 18 | addEvent(firstSaveWarning, 120000) 19 | return true 20 | end 21 | -------------------------------------------------------------------------------- /data/items/items.otb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ezzz-dev/OTHire/1d9987cdbea118ad1a01a6f2bba66cc22c002d63/data/items/items.otb -------------------------------------------------------------------------------- /data/lib/exp_stages.lua: -------------------------------------------------------------------------------- 1 | --if you want to enable exp_stages, make sure that you have experience_stages = true at your config.lua 2 | 3 | stages = { 4 | {minLevel = 1, maxLevel = 40, multiplier = 60}, 5 | {minLevel = 41, maxLevel = 60, multiplier = 50}, 6 | {minLevel = 61, maxLevel = 80, multiplier = 40}, 7 | {minLevel = 81, maxLevel = 100, multiplier = 30} 8 | } -------------------------------------------------------------------------------- /data/lib/lib.lua: -------------------------------------------------------------------------------- 1 | -- Load Lua-made functions 2 | dofile(getDataDir() .. 'lib/functions.lua') 3 | 4 | -- Load House class 5 | dofile(getDataDir() .. 'lib/house.lua') 6 | 7 | -- Load Calculator class 8 | dofile(getDataDir() .. 'lib/calculator.lua') 9 | 10 | -- Load Exp Stages 11 | dofile(getDataDir() .. 'lib/exp_stages.lua') 12 | 13 | -- Load db file 14 | dofile(getDataDir() .. 'lib/db.lua') -------------------------------------------------------------------------------- /data/monster/badger.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /data/monster/bat.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /data/monster/bear.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /data/monster/black sheep.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /data/monster/bug.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /data/monster/butterfly blue.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /data/monster/butterfly purple.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /data/monster/butterfly red.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /data/monster/butterfly yellow.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /data/monster/butterfly.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /data/monster/cave rat.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /data/monster/centipede.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /data/monster/chicken.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /data/monster/cobra.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /data/monster/crab.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /data/monster/crocodile.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /data/monster/deer.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /data/monster/dog.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /data/monster/elephant.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /data/monster/fire elemental.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /data/monster/flamingo.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /data/monster/hyaena.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /data/monster/larva.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /data/monster/lion.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /data/monster/panda.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /data/monster/parrot.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /data/monster/pig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /data/monster/poison spider.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /data/monster/polar bear.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /data/monster/rabbit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /data/monster/rat.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /data/monster/scorpion.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /data/monster/sheep.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /data/monster/skunk.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /data/monster/slime.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /data/monster/slime2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /data/monster/snake.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /data/monster/special/deathslicer.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /data/monster/special/flamethrower.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /data/monster/special/magicthrower.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /data/monster/special/plaguethrower.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /data/monster/special/shredderthrower.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /data/monster/spider.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /data/monster/terror bird.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /data/monster/tiger.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /data/monster/war wolf.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /data/monster/wasp.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /data/monster/winter wolf.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /data/monster/wolf.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /data/movements/lib/movements.lua: -------------------------------------------------------------------------------- 1 | VERTICAL_OPENED_LEVEL_DOOR = {1228, 1246, 1260, 3550} 2 | VERTICAL_OPENED_QUEST_DOOR = {1224, 1242, 1256, 3552} 3 | HORIZONTAL_OPENED_LEVEL_DOOR = {1230, 1248, 1262, 3541} 4 | HORIZONTAL_OPENED_QUEST_DOOR = {1226, 1244, 1258, 3543} 5 | WALKABLE_wATER = {4820, 4821, 4822, 4823, 4824, 4825} -------------------------------------------------------------------------------- /data/movements/scripts/citizen.lua: -------------------------------------------------------------------------------- 1 | function onStepIn(cid, item, position, fromPosition) 2 | if(item.actionid > 30020 and item.actionid < 30100) then 3 | local townId = (item.actionid - 30020) 4 | local townPos = getTownTemplePosition(townId) 5 | doPlayerSetTown(cid, townId) 6 | doTeleportThing(cid, townPos) 7 | doSendMagicEffect(townPos, CONST_ME_TELEPORT) 8 | doSetCreatureDirection(cid, SOUTH) 9 | doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You are now citizen of " .. getTownNameById(townId) .. ".") 10 | end 11 | 12 | return true 13 | end -------------------------------------------------------------------------------- /data/movements/scripts/doors/door_close_horizontal.lua: -------------------------------------------------------------------------------- 1 | function onStepOut(cid, item, topos, frompos) 2 | if(item.actionid == 0) then 3 | -- This is not a special door 4 | return true 5 | end 6 | 7 | local movepos = {x=frompos.x, y=frompos.y+1, z=frompos.z} 8 | 9 | local maxAmountOfRealocationItens = 0 --unlimited 10 | if getTileStackItemsSize(frompos) + getTileStackItemsSize(movepos) > 100 then 11 | --If it is a very large stack, we only move creatures to avoid lag issues 12 | --As the door itself counts as an item, it is enough to set the parameter to 1 at doRelocate 13 | maxAmountOfRealocationItens = 1 14 | end 15 | 16 | doRelocate(frompos, movepos, false, maxAmountOfRealocationItens) 17 | 18 | local field = getTileItemByType(frompos, ITEM_TYPE_MAGICFIELD) 19 | if(field.itemid ~=0) then 20 | doRemoveItem(field.uid) 21 | end 22 | 23 | doTransformItem(item.uid, item.itemid-1) 24 | if item.actionid ~= 0 then 25 | doSetItemActionId(item.uid, item.actionid) 26 | end 27 | 28 | return true 29 | end 30 | -------------------------------------------------------------------------------- /data/movements/scripts/doors/door_close_vertical.lua: -------------------------------------------------------------------------------- 1 | function onStepOut(cid, item, topos, frompos) 2 | if(item.actionid == 0) then 3 | -- This is not a special door 4 | return true 5 | end 6 | 7 | local movepos = {x=frompos.x+1, y=frompos.y, z=frompos.z} 8 | 9 | local maxAmountOfRealocationItens = 0 --unlimited 10 | if getTileStackItemsSize(frompos) + getTileStackItemsSize(movepos) > 100 then 11 | --If it is a very large stack, we only move creatures to avoid lag issues 12 | --As the door itself counts as an item, it is enough to set the parameter to 1 at doRelocate 13 | maxAmountOfRealocationItens = 1 14 | end 15 | 16 | doRelocate(frompos, movepos, false, maxAmountOfRealocationItens) 17 | 18 | local field = getTileItemByType(frompos, ITEM_TYPE_MAGICFIELD) 19 | if(field.itemid ~=0) then 20 | doRemoveItem(field.uid) 21 | end 22 | 23 | doTransformItem(item.uid, item.itemid-1) 24 | if item.actionid ~= 0 then 25 | doSetItemActionId(item.uid, item.actionid) 26 | end 27 | 28 | return true 29 | end 30 | -------------------------------------------------------------------------------- /data/movements/scripts/doors/onadd_lockeddoor.lua: -------------------------------------------------------------------------------- 1 | function onAddItem(item, tile, pos) 2 | if(item.actionid == 0) then 3 | -- The door isn't locked. Transform it to its correct ID. 4 | doTransformItem(item.uid, item.itemid+1) 5 | end 6 | return true 7 | end -------------------------------------------------------------------------------- /data/movements/scripts/increment.lua: -------------------------------------------------------------------------------- 1 | function onStepIn(cid, item, pos) 2 | doTransformItem(item.uid, item.itemid + 1) 3 | if item.actionid ~= 0 then 4 | doSetItemActionId(item.uid, item.actionid) 5 | end 6 | doDecayItem(item.uid) 7 | return true 8 | end 9 | -------------------------------------------------------------------------------- /data/npc/scripts/lib/custom modules.lua: -------------------------------------------------------------------------------- 1 | local travelDiscounts = { 2 | ['postman'] = {price = 10, storage = STORAGE_POSTMAN_BOAT, value = 1} 3 | } 4 | 5 | function StdModule.travelDiscount(cid, discounts) 6 | local discountPrice, discount = 0 7 | if type(discounts) == 'string' then 8 | discount = travelDiscounts[discounts] 9 | if discount and getPlayerStorageValue(cid, discount.storage) >= discount.value then 10 | return discount.price 11 | end 12 | else 13 | for i = 1, #discounts do 14 | discount = travelDiscounts[discounts[i]] 15 | if discount and getPlayerStorageValue(cid, discount.storage) >= discount.value then 16 | discountPrice = discountPrice + discount.price 17 | end 18 | end 19 | end 20 | 21 | return discountPrice 22 | end -------------------------------------------------------------------------------- /data/npc/scripts/test.lua: -------------------------------------------------------------------------------- 1 | local keywordHandler = KeywordHandler:new() 2 | local npcHandler = NpcHandler:new(keywordHandler) 3 | NpcSystem.parseParameters(npcHandler) 4 | 5 | -- OTServ event handling functions start 6 | function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end 7 | function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end 8 | function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end 9 | function onThink() npcHandler:onThink() end 10 | 11 | npcHandler:setMessage(MESSAGE_FAREWELL, "Bye, bye.") 12 | 13 | function onPlayerGreet(cid) 14 | npcHandler:setMessage(MESSAGE_GREET, "Hey |PLAYERNAME|. What do you need?") 15 | return true 16 | end 17 | 18 | npcHandler:setCallback(CALLBACK_GREET, onPlayerGreet) 19 | npcHandler:setMessage(MESSAGE_PLACEDINQUEUE, "Hey, |PLAYERNAME|. Would ya mind not interruptin'? Thanks.") 20 | npcHandler:setMessage(MESSAGE_WALKAWAY, "Yeah, sod off...") 21 | 22 | function creatureSayCallback(cid, type, msg) 23 | if(npcHandler.focus ~= cid) then 24 | return false 25 | end 26 | 27 | if msgcontains(msg, "job") then 28 | npcHandler:say("No job really.") 29 | return true 30 | end 31 | if msgcontains(msg, "name") then 32 | npcHandler:say("I'm a test NPC.") 33 | return true 34 | end 35 | 36 | return true 37 | end 38 | 39 | npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) 40 | 41 | local focus = FocusModule:new() 42 | npcHandler:addModule(focus) -------------------------------------------------------------------------------- /data/npc/test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /data/raids/raids.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /data/spells/scripts/attack/berserk.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) 4 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA) 5 | 6 | local area = createCombatArea(AREA_SQUARE1X1) 7 | setCombatArea(combat, area) 8 | 9 | function onGetFormulaValues(cid, level, maglevel) 10 | min = -(level * 2.2) 11 | max = -(level * 3.85) 12 | -- min = -((level * 2) + (maglevel * 3)) * 1.4 13 | -- max = -((level * 2) + (maglevel * 3)) * 1.65 14 | return min, max 15 | end 16 | 17 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 18 | 19 | function onCastSpell(cid, var) 20 | return doCombat(cid, combat, var) 21 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/energy_beam.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_EXPLOSIONHIT) 4 | 5 | local area = createCombatArea(AREA_BEAM5, AREADIAGONAL_BEAM5) 6 | setCombatArea(combat, area) 7 | 8 | function onGetFormulaValues(cid, level, maglevel) 9 | local base = 60 10 | local variation = 20 11 | 12 | local min = math.max((base - variation), ((3 * maglevel + 2 * level) * (base - variation) / 100)) 13 | local max = math.max((base + variation), ((3 * maglevel + 2 * level) * (base + variation) / 100)) 14 | 15 | return -min, -max 16 | end 17 | 18 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 19 | 20 | function onCastSpell(cid, var) 21 | return doCombat(cid, combat, var) 22 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/energy_field.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYHIT) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) 5 | setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 1495) 6 | 7 | function onCastSpell(cid, var) 8 | return doCombat(cid, combat, var) 9 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/energy_strike.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_TELEPORT) 4 | 5 | function onGetFormulaValues(cid, level, maglevel) 6 | local base = 45 7 | local variation = 10 8 | 9 | local min = math.max((base - variation), ((3 * maglevel + 2 * level) * (base - variation) / 100)) 10 | local max = math.max((base + variation), ((3 * maglevel + 2 * level) * (base + variation) / 100)) 11 | 12 | return -min, -max 13 | end 14 | 15 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 16 | 17 | function onCastSpell(cid, var) 18 | return doCombat(cid, combat, var) 19 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/energy_wall.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYHIT) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) 5 | setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 1495) 6 | 7 | local area = createCombatArea(AREA_WALLFIELD, AREADIAGONAL_WALLFIELD) 8 | setCombatArea(combat, area) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/energy_wave.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_TELEPORT) 4 | 5 | local area = createCombatArea(AREA_SQUAREWAVE5, AREADIAGONAL_SQUAREWAVE5) 6 | setCombatArea(combat, area) 7 | 8 | function onGetFormulaValues(cid, level, maglevel) 9 | local base = 150 10 | local variation = 50 11 | 12 | local min = math.max((base - variation), ((3 * maglevel + 2 * level) * (base - variation) / 100)) 13 | local max = math.max((base + variation), ((3 * maglevel + 2 * level) * (base + variation) / 100)) 14 | 15 | return -min, -max 16 | end 17 | 18 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 19 | 20 | function onCastSpell(cid, var) 21 | return doCombat(cid, combat, var) 22 | end 23 | -------------------------------------------------------------------------------- /data/spells/scripts/attack/energybomb.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) 4 | setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 1495) 5 | 6 | local area = createCombatArea(AREA_SQUARE1X1) 7 | setCombatArea(combat, area) 8 | 9 | function onCastSpell(cid, var) 10 | return doCombat(cid, combat, var) 11 | end 12 | -------------------------------------------------------------------------------- /data/spells/scripts/attack/envenom.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_GREEN_RINGS) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISON) 5 | 6 | local condition = createConditionObject(CONDITION_POISON) 7 | setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) 8 | --[[ 9 | addDamageCondition(condition, 3, 2000, -25) 10 | addDamageCondition(condition, 3, 3000, -5) 11 | addDamageCondition(condition, 4, 4000, -4) 12 | addDamageCondition(condition, 6, 6000, -3) 13 | addDamageCondition(condition, 9, 8000, -2) 14 | addDamageCondition(condition, 12, 10000, -1) 15 | ]]-- 16 | setConditionParam(condition, CONDITION_PARAM_MINVALUE, 20) 17 | setConditionParam(condition, CONDITION_PARAM_MAXVALUE, 70) 18 | setConditionParam(condition, CONDITION_PARAM_STARTVALUE, 5) 19 | setConditionParam(condition, CONDITION_PARAM_TICKINTERVAL, 6000) 20 | setConditionParam(condition, CONDITION_PARAM_FORCEUPDATE, true) 21 | 22 | setCombatCondition(combat, condition) 23 | 24 | function onCastSpell(cid, var) 25 | return doCombat(cid, combat, var) 26 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/explosion.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) 4 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_EXPLOSIONAREA) 5 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) 6 | 7 | local area = createCombatArea(AREA_CROSS1X1) 8 | setCombatArea(combat, area) 9 | 10 | function onGetFormulaValues(cid, level, maglevel) 11 | local base = 60 12 | local variation = 40 13 | 14 | local min = math.max((base - variation), ((3 * maglevel + 2 * level) * (base - variation) / 100)) 15 | local max = math.max((base + variation), ((3 * maglevel + 2 * level) * (base + variation) / 100)) 16 | 17 | return -min, -max 18 | end 19 | 20 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 21 | 22 | function onCastSpell(cid, var) 23 | return doCombat(cid, combat, var) 24 | end 25 | -------------------------------------------------------------------------------- /data/spells/scripts/attack/fire_field.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) 5 | setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 1492) 6 | 7 | function onCastSpell(cid, var) 8 | return doCombat(cid, combat, var) 9 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/fire_wall.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) 5 | setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 1492) 6 | 7 | local area = createCombatArea(AREA_WALLFIELD, AREADIAGONAL_WALLFIELD) 8 | setCombatArea(combat, area) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/fire_wave.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE) 4 | 5 | local area = createCombatArea(AREA_WAVE4, AREADIAGONAL_WAVE4) 6 | setCombatArea(combat, area) 7 | 8 | function onGetFormulaValues(cid, level, maglevel) 9 | local base = 30 10 | local variation = 10 11 | 12 | local min = math.max((base - variation), ((3 * maglevel + 2 * level) * (base - variation) / 100)) 13 | local max = math.max((base + variation), ((3 * maglevel + 2 * level) * (base + variation) / 100)) 14 | 15 | return -min, -max 16 | end 17 | 18 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 19 | 20 | function onCastSpell(cid, var) 21 | return doCombat(cid, combat, var) 22 | end 23 | -------------------------------------------------------------------------------- /data/spells/scripts/attack/fireball.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) 5 | 6 | local area = createCombatArea(AREA_CIRCLE2X2) 7 | setCombatArea(combat, area) 8 | 9 | function onGetFormulaValues(cid, level, maglevel) 10 | local base = 20 11 | local variation = 5 12 | 13 | local min = math.max((base - variation), ((3 * maglevel + 2 * level) * (base - variation) / 100)) 14 | local max = math.max((base + variation), ((3 * maglevel + 2 * level) * (base + variation) / 100)) 15 | 16 | return -min, -max 17 | end 18 | 19 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 20 | 21 | function onCastSpell(cid, var) 22 | return doCombat(cid, combat, var) 23 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/firebomb.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) 5 | setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 1492) 6 | 7 | local area = createCombatArea(AREA_SQUARE1X1) 8 | setCombatArea(combat, area) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/flame_strike.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) 4 | 5 | function onGetFormulaValues(cid, level, maglevel) 6 | local base = 45 7 | local variation = 10 8 | 9 | local min = math.max((base - variation), ((3 * maglevel + 2 * level) * (base - variation) / 100)) 10 | local max = math.max((base + variation), ((3 * maglevel + 2 * level) * (base + variation) / 100)) 11 | 12 | return -min, -max 13 | end 14 | 15 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 16 | 17 | function onCastSpell(cid, var) 18 | return doCombat(cid, combat, var) 19 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/force_strike.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) 4 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA) 5 | 6 | function onGetFormulaValues(cid, level, maglevel) 7 | local base = 45 8 | local variation = 10 9 | 10 | local min = math.max((base - variation), ((3 * maglevel + 2 * level) * (base - variation) / 100)) 11 | local max = math.max((base + variation), ((3 * maglevel + 2 * level) * (base + variation) / 100)) 12 | 13 | return -min, -max 14 | end 15 | 16 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 17 | 18 | function onCastSpell(cid, var) 19 | return doCombat(cid, combat, var) 20 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/great_energy_beam.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_EXPLOSIONHIT) 4 | 5 | local area = createCombatArea(AREA_BEAM8, AREADIAGONAL_BEAM8) 6 | setCombatArea(combat, area) 7 | 8 | function onGetFormulaValues(cid, level, maglevel) 9 | local base = 120 10 | local variation = 80 11 | 12 | local min = math.max((base - variation), ((3 * maglevel + 2 * level) * (base - variation) / 100)) 13 | local max = math.max((base + variation), ((3 * maglevel + 2 * level) * (base + variation) / 100)) 14 | 15 | return -min, -max 16 | end 17 | 18 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 19 | 20 | function onCastSpell(cid, var) 21 | return doCombat(cid, combat, var) 22 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/great_fireball.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) 5 | 6 | local area = createCombatArea(AREA_CIRCLE3X3) 7 | setCombatArea(combat, area) 8 | 9 | function onGetFormulaValues(cid, level, maglevel) 10 | local base = 50 11 | local variation = 15 12 | 13 | local min = math.max((base - variation), ((3 * maglevel + 2 * level) * (base - variation) / 100)) 14 | local max = math.max((base + variation), ((3 * maglevel + 2 * level) * (base + variation) / 100)) 15 | 16 | return -min, -max 17 | end 18 | 19 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 20 | 21 | function onCastSpell(cid, var) 22 | return doCombat(cid, combat, var) 23 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/heavy_magic_missile.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_EXPLOSIONHIT) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) 5 | 6 | function onGetFormulaValues(cid, level, maglevel) 7 | local base = 30 8 | local variation = 10 9 | 10 | local min = math.max((base - variation), ((3 * maglevel + 2 * level) * (base - variation) / 100)) 11 | local max = math.max((base + variation), ((3 * maglevel + 2 * level) * (base + variation) / 100)) 12 | 13 | return -min, -max 14 | end 15 | 16 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 17 | 18 | function onCastSpell(cid, var) 19 | return doCombat(cid, combat, var) 20 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/light_magic_missile.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_EXPLOSIONHIT) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) 5 | 6 | function onGetFormulaValues(cid, level, maglevel) 7 | local base = 15 8 | local variation = 5 9 | 10 | local min = math.max((base - variation), ((3 * maglevel + 2 * level) * (base - variation) / 100)) 11 | local max = math.max((base + variation), ((3 * maglevel + 2 * level) * (base + variation) / 100)) 12 | 13 | return -min, -max 14 | end 15 | 16 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 17 | 18 | function onCastSpell(cid, var) 19 | return doCombat(cid, combat, var) 20 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/poison_bomb.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_GREEN_RINGS) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISON) 5 | setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 1496) 6 | 7 | local area = createCombatArea(AREA_SQUARE1X1) 8 | setCombatArea(combat, area) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/poison_field.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_GREEN_RINGS) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISON) 5 | setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 1496) 6 | 7 | function onCastSpell(cid, var) 8 | return doCombat(cid, combat, var) 9 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/poison_storm.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_GREEN_RINGS) 4 | 5 | local area = createCombatArea(AREA_CROSS6X6) 6 | setCombatArea(combat, area) 7 | 8 | local condition = createConditionObject(CONDITION_POISON) 9 | setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) 10 | addDamageCondition(condition, 2, 4000, -45) 11 | addDamageCondition(condition, 2, 4000, -40) 12 | addDamageCondition(condition, 2, 4000, -35) 13 | addDamageCondition(condition, 2, 4000, -30) 14 | addDamageCondition(condition, 3, 5000, -20) 15 | addDamageCondition(condition, 3, 5000, -10) 16 | addDamageCondition(condition, 3, 5000, -7) 17 | addDamageCondition(condition, 3, 5000, -5) 18 | addDamageCondition(condition, 4, 5000, -4) 19 | addDamageCondition(condition, 6, 5000, -3) 20 | addDamageCondition(condition, 9, 5000, -2) 21 | addDamageCondition(condition, 12, 5000, -1) 22 | setCombatCondition(combat, condition) 23 | 24 | function onGetFormulaValues(cid, level, maglevel) 25 | min = -((level * 2) + (maglevel * 3)) * 0.9 26 | max = -((level * 2) + (maglevel * 3)) * 1.5 27 | return min, max 28 | end 29 | 30 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 31 | 32 | function onCastSpell(cid, var) 33 | return doCombat(cid, combat, var) 34 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/poison_wall.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_GREEN_RINGS) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISON) 5 | setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 1496) 6 | 7 | local area = createCombatArea(AREA_WALLFIELD, AREADIAGONAL_WALLFIELD) 8 | setCombatArea(combat, area) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/soulfire.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) 5 | 6 | local condition = createConditionObject(CONDITION_FIRE) 7 | setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) 8 | addDamageCondition(condition, 3, 10000, -10) 9 | addDamageCondition(condition, 10, 10000, -5) 10 | setCombatCondition(combat, condition) 11 | 12 | function onCastSpell(cid, var) 13 | return doCombat(cid, combat, var) 14 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/sudden_death.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) 4 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA) 5 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_DEATH) 6 | 7 | function onGetFormulaValues(cid, level, maglevel) 8 | local base = 150 9 | local variation = 20 10 | 11 | local min = math.max((base - variation), ((3 * maglevel + 2 * level) * (base - variation) / 100)) 12 | local max = math.max((base + variation), ((3 * maglevel + 2 * level) * (base + variation) / 100)) 13 | 14 | return -min, -max 15 | end 16 | 17 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 18 | 19 | function onCastSpell(cid, var) 20 | return doCombat(cid, combat, var) 21 | end -------------------------------------------------------------------------------- /data/spells/scripts/attack/ultimate_explosion.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) 4 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_EXPLOSIONAREA) 5 | 6 | local area = createCombatArea(AREA_CROSS5X5) 7 | setCombatArea(combat, area) 8 | 9 | function onGetFormulaValues(cid, level, maglevel) 10 | local base = 250 11 | local variation = 50 12 | 13 | local min = math.max((base - variation), ((3 * maglevel + 2 * level) * (base - variation) / 100)) 14 | local max = math.max((base + variation), ((3 * maglevel + 2 * level) * (base + variation) / 100)) 15 | 16 | return -min, -max 17 | end 18 | 19 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 20 | 21 | function onCastSpell(cid, var) 22 | return doCombat(cid, combat, var) 23 | end -------------------------------------------------------------------------------- /data/spells/scripts/healing/antidote.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_POISON) 5 | 6 | function onCastSpell(cid, var) 7 | return doCombat(cid, combat, var) 8 | end -------------------------------------------------------------------------------- /data/spells/scripts/healing/antidote_rune.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, 1) 5 | setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_POISON) 6 | 7 | function onCastSpell(cid, var) 8 | return doCombat(cid, combat, var) 9 | end -------------------------------------------------------------------------------- /data/spells/scripts/healing/heal_friend.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 4 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 5 | setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) 6 | 7 | function onGetFormulaValues(cid, level, maglevel) 8 | local base = 120 9 | local variation = 40 10 | 11 | local min = math.max((base - variation), ((3 * maglevel + 2 * level) * (base - variation) / 100)) 12 | local max = math.max((base + variation), ((3 * maglevel + 2 * level) * (base + variation) / 100)) 13 | 14 | return min, max 15 | end 16 | 17 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 18 | 19 | function onCastSpell(cid, var) 20 | return doCombat(cid, combat, var) 21 | end -------------------------------------------------------------------------------- /data/spells/scripts/healing/intense_healing.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 4 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 5 | setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) 6 | 7 | function onGetFormulaValues(cid, level, maglevel) 8 | local base = 40 9 | local variation = 20 10 | 11 | local min = math.max((base - variation), ((3 * maglevel + 2 * level) * (base - variation) / 100)) 12 | local max = math.max((base + variation), ((3 * maglevel + 2 * level) * (base + variation) / 100)) 13 | 14 | return min, max 15 | end 16 | 17 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 18 | 19 | function onCastSpell(cid, var) 20 | return doCombat(cid, combat, var) 21 | end 22 | -------------------------------------------------------------------------------- /data/spells/scripts/healing/intense_healing_rune.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 4 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 5 | setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, 1) 6 | setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) 7 | 8 | function onGetFormulaValues(cid, level, maglevel) 9 | local base = 70 10 | local variation = 30 11 | 12 | local min = math.max((base - variation), ((3 * maglevel + 2 * level) * (base - variation) / 100)) 13 | local max = math.max((base + variation), ((3 * maglevel + 2 * level) * (base + variation) / 100)) 14 | 15 | return min, max 16 | end 17 | 18 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 19 | 20 | function onCastSpell(cid, var) 21 | return doCombat(cid, combat, var) 22 | end -------------------------------------------------------------------------------- /data/spells/scripts/healing/light_healing.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 4 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 5 | setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) 6 | 7 | function onGetFormulaValues(cid, level, maglevel) 8 | local base = 20 9 | local variation = 10 10 | 11 | local min = math.max((base - variation), ((3 * maglevel + 2 * level) * (base - variation) / 100)) 12 | local max = math.max((base + variation), ((3 * maglevel + 2 * level) * (base + variation) / 100)) 13 | 14 | return min, max 15 | end 16 | 17 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 18 | 19 | function onCastSpell(cid, var) 20 | return doCombat(cid, combat, var) 21 | end 22 | -------------------------------------------------------------------------------- /data/spells/scripts/healing/mass_healing.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 4 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 5 | setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) 6 | 7 | local area = createCombatArea(AREA_CIRCLE3X3) 8 | setCombatArea(combat, area) 9 | 10 | function onGetFormulaValues(cid, level, maglevel) 11 | local base = 200 12 | local variation = 40 13 | 14 | local min = math.max((base - variation), ((3 * maglevel + 2 * level) * (base - variation) / 100)) 15 | local max = math.max((base + variation), ((3 * maglevel + 2 * level) * (base + variation) / 100)) 16 | 17 | return min, max 18 | end 19 | 20 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 21 | 22 | function onCastSpell(cid, var) 23 | return doCombat(cid, combat, var) 24 | end -------------------------------------------------------------------------------- /data/spells/scripts/healing/ultimate_healing.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 4 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 5 | setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) 6 | 7 | function onGetFormulaValues(cid, level, maglevel) 8 | local base = 250 9 | local variation = 50 10 | 11 | local min = math.max((base - variation), ((3 * maglevel + 2 * level) * (base - variation) / 100)) 12 | local max = math.max((base + variation), ((3 * maglevel + 2 * level) * (base + variation) / 100)) 13 | 14 | return min, max 15 | end 16 | 17 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 18 | 19 | function onCastSpell(cid, var) 20 | return doCombat(cid, combat, var) 21 | end 22 | -------------------------------------------------------------------------------- /data/spells/scripts/healing/ultimate_healing_rune.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 4 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 5 | setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, 1) 6 | setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) 7 | 8 | function onGetFormulaValues(cid, level, maglevel) 9 | local base = 250 10 | local variation = 0 11 | 12 | local min = math.max((base - variation), ((3 * maglevel + 2 * level) * (base - variation) / 100)) 13 | local max = math.max((base + variation), ((3 * maglevel + 2 * level) * (base + variation) / 100)) 14 | 15 | return min, max 16 | end 17 | 18 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 19 | 20 | function onCastSpell(cid, var) 21 | return doCombat(cid, combat, var) 22 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/djinn electrify area.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYHIT) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) 5 | 6 | local condition = createConditionObject(CONDITION_ENERGY) 7 | setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) 8 | addDamageCondition(condition, 3, 10000, -25) 9 | setCombatCondition(combat, condition) 10 | 11 | local area = createCombatArea(AREA_SQUARE1X1) 12 | setCombatArea(combat, area) 13 | 14 | function onCastSpell(cid, var) 15 | return doCombat(cid, combat, var) 16 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/djinn electrify.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYHIT) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) 5 | 6 | local condition = createConditionObject(CONDITION_ENERGY) 7 | setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) 8 | addDamageCondition(condition, 3, 10000, -25) 9 | setCombatCondition(combat, condition) 10 | 11 | function onCastSpell(cid, var) 12 | return doCombat(cid, combat, var) 13 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/haste_ancientscarab.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 9*1000) 7 | setConditionFormula(condition, 0, 160, 0, 180) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/haste_assassin.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 3*1000) 7 | setConditionFormula(condition, 0, 110, 0, 130) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/haste_behemoth.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 8*1000) 7 | setConditionFormula(condition, 0, 80, 0, 100) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/haste_darkmonk.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 2*1000) 7 | setConditionFormula(condition, 0, 100, 0, 120) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/haste_dharalion.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 10*1000) 7 | setConditionFormula(condition, 0, 160, 0, 180) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/haste_dworcvoodoomaster.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 4*1000) 7 | setConditionFormula(condition, 0, 320, 0, 400) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/haste_fernfang.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 10*1000) 7 | setConditionFormula(condition, 0, 160, 0, 180) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/haste_gazer.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 4*1000) 7 | setConditionFormula(condition, 0, 196, 0, 200) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/haste_giantspider.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 20*1000) 7 | setConditionFormula(condition, 0, 120, 0, 140) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/haste_grorlam.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 6*1000) 7 | setConditionFormula(condition, 0, 180, 0, 200) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/haste_kongra.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 3*1000) 7 | setConditionFormula(condition, 0, 90, 0, 110) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/haste_monk.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 2*1000) 7 | setConditionFormula(condition, 0, 100, 0, 120) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/haste_morguthis.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 5*1000) 7 | setConditionFormula(condition, 0, 110, 0, 130) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/haste_oldwidow.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 6*1000) 7 | setConditionFormula(condition, 0, 220, 0, 400) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/haste_orcberserker.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 6*1000) 7 | setConditionFormula(condition, 0, 90, 0, 110) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/haste_orcrider.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 6*1000) 7 | setConditionFormula(condition, 0, 80, 0, 100) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/haste_orshabaal.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 7*1000) 7 | setConditionFormula(condition, 0, 180, 0, 200) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/haste_scarab.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 4*1000) 7 | setConditionFormula(condition, 0, 80, 0, 100) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/haste_serpentspawn.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 3*1000) 7 | setConditionFormula(condition, 0, 180, 0, 200) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/haste_sibang.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 3*1000) 7 | setConditionFormula(condition, 0, 140, 0, 160) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/haste_tarantula.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 2*1000) 7 | setConditionFormula(condition, 0, 160, 0, 220) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/haste_tiger.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 3*1000) 7 | setConditionFormula(condition, 0, 140, 0, 200) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/haste_wildwarrior.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 2*1000) 7 | setConditionFormula(condition, 0, 40, 0, 120) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_ancientscarab.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_POISONAREA) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISON) 5 | 6 | local condition = createConditionObject(CONDITION_PARALYZE) 7 | setConditionParam(condition, CONDITION_PARAM_TICKS, 25*1000) 8 | setConditionFormula(condition, 0, -160, 0, -200) 9 | setCombatCondition(combat, condition) 10 | 11 | function onCastSpell(cid, var) 12 | return doCombat(cid, combat, var) 13 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_ancientscarab2.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_POISONAREA) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISON) 5 | 6 | local condition = createConditionObject(CONDITION_PARALYZE) 7 | setConditionParam(condition, CONDITION_PARAM_TICKS, 20*1000) 8 | setConditionFormula(condition, 0, -120, 0, -200) 9 | setCombatCondition(combat, condition) 10 | 11 | local area = createCombatArea(AREA_CIRCLE3X3) 12 | setCombatArea(combat, area) 13 | 14 | function onCastSpell(cid, var) 15 | return doCombat(cid, combat, var) 16 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_ashmunrah.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 4 | 5 | local condition = createConditionObject(CONDITION_PARALYZE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 50*1000) 7 | setConditionFormula(condition, 0, -180, 0, -220) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_banshee.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 4 | 5 | local condition = createConditionObject(CONDITION_PARALYZE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 20*1000) 7 | setConditionFormula(condition, 0, -120, 0, -240) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_carniphila.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_POISONAREA) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISON) 5 | 6 | local condition = createConditionObject(CONDITION_PARALYZE) 7 | setConditionParam(condition, CONDITION_PARAM_TICKS, 30*1000) 8 | setConditionFormula(condition, 0, -210, 0, -320) 9 | setCombatCondition(combat, condition) 10 | 11 | function onCastSpell(cid, var) 12 | return doCombat(cid, combat, var) 13 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_dipthrah.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 4 | 5 | local condition = createConditionObject(CONDITION_PARALYZE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 50*1000) 7 | setConditionFormula(condition, 0, -140, 0, -220) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_dworcvoodoomaster.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 4 | 5 | local condition = createConditionObject(CONDITION_PARALYZE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 5*1000) 7 | setConditionFormula(condition, 0, -140, 0, -220) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_efreet.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 4 | 5 | local condition = createConditionObject(CONDITION_PARALYZE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 15*1000) 7 | setConditionFormula(condition, 0, -100, 0, -200) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_elderbeholder.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 4 | 5 | local condition = createConditionObject(CONDITION_PARALYZE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 20*1000) 7 | setConditionFormula(condition, 0, -140, 0, -220) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_evileye.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 4 | 5 | local condition = createConditionObject(CONDITION_PARALYZE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 20*1000) 7 | setConditionFormula(condition, 0, -160, 0, -220) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_hydra.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_GREEN_RINGS) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISON) 5 | 6 | local condition = createConditionObject(CONDITION_PARALYZE) 7 | setConditionParam(condition, CONDITION_PARAM_TICKS, 15*1000) 8 | setConditionFormula(condition, 0, -80, 0, -240) 9 | setCombatCondition(combat, condition) 10 | 11 | local area = createCombatArea(AREA_CIRCLE2X2) 12 | setCombatArea(combat, area) 13 | 14 | function onCastSpell(cid, var) 15 | return doCombat(cid, combat, var) 16 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_lich.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 4 | 5 | local condition = createConditionObject(CONDITION_PARALYZE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 30*1000) 7 | setConditionFormula(condition, 0, -150, 0, -230) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_mahrdis.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 4 | 5 | local condition = createConditionObject(CONDITION_PARALYZE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 50*1000) 7 | setConditionFormula(condition, 0, -140, 0, -220) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_marid.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 4 | 5 | local condition = createConditionObject(CONDITION_PARALYZE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 15*1000) 7 | setConditionFormula(condition, 0, -50, 0, -100) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_morguthis.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 4 | 5 | local condition = createConditionObject(CONDITION_PARALYZE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 50*1000) 7 | setConditionFormula(condition, 0, -180, 0, -220) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_mummy.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 4 | 5 | local condition = createConditionObject(CONDITION_PARALYZE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 10*1000) 7 | setConditionFormula(condition, 0, -80, 0, -240) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_oldwidow.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_POISONAREA) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISON) 5 | 6 | local condition = createConditionObject(CONDITION_PARALYZE) 7 | setConditionParam(condition, CONDITION_PARAM_TICKS, 25*1000) 8 | setConditionFormula(condition, 0, -160, 0, -200) 9 | setCombatCondition(combat, condition) 10 | 11 | function onCastSpell(cid, var) 12 | return doCombat(cid, combat, var) 13 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_omruc.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 4 | 5 | local condition = createConditionObject(CONDITION_PARALYZE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 50*1000) 7 | setConditionFormula(condition, 0, -180, 0, -220) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_rahemos.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 4 | 5 | local condition = createConditionObject(CONDITION_PARALYZE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 50*1000) 7 | setConditionFormula(condition, 0, -180, 0, -220) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_serpentspawn.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_GREEN_RINGS) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISON) 5 | 6 | local condition = createConditionObject(CONDITION_PARALYZE) 7 | setConditionParam(condition, CONDITION_PARAM_TICKS, 120*1000) 8 | setConditionFormula(condition, 0, -110, 0, -150) 9 | setCombatCondition(combat, condition) 10 | 11 | local area = createCombatArea(AREA_CIRCLE2X2) 12 | setCombatArea(combat, area) 13 | 14 | function onCastSpell(cid, var) 15 | return doCombat(cid, combat, var) 16 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_thalas.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 4 | 5 | local condition = createConditionObject(CONDITION_PARALYZE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 50*1000) 7 | setConditionFormula(condition, 0, -180, 0, -220) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_thalas2.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_POISONAREA) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISON) 5 | 6 | local condition = createConditionObject(CONDITION_PARALYZE) 7 | setConditionParam(condition, CONDITION_PARAM_TICKS, 12*1000) 8 | setConditionFormula(condition, 0, -120, 0, -200) 9 | setCombatCondition(combat, condition) 10 | 11 | local area = createCombatArea(AREA_CIRCLE3X3) 12 | setCombatArea(combat, area) 13 | 14 | function onCastSpell(cid, var) 15 | return doCombat(cid, combat, var) 16 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_vampire.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 4 | 5 | local condition = createConditionObject(CONDITION_PARALYZE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 30*1000) 7 | setConditionFormula(condition, 0, -100, 0, -180) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_vashresamun.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 4 | 5 | local condition = createConditionObject(CONDITION_PARALYZE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 50*1000) 7 | setConditionFormula(condition, 0, -140, 0, -220) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/paralyze_warlock.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_TYPE, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 4 | 5 | local condition = createConditionObject(CONDITION_PARALYZE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 40*1000) 7 | setConditionFormula(condition, 0, -120, 0, -200) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/skills_dipthrah.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY) 3 | 4 | local condition = createConditionObject(CONDITION_ATTRIBUTES) 5 | setConditionParam(condition, CONDITION_PARAM_TICKS, 40000) 6 | setConditionParam(condition, CONDITION_PARAM_SKILL_DISTANCEPERCENT, 50) 7 | setConditionParam(condition, CONDITION_PARAM_SKILL_SHIELDPERCENT, 50) 8 | setConditionParam(condition, CONDITION_PARAM_SKILL_MELEEPERCENT, 50) 9 | setConditionParam(condition, CONDITION_PARAM_SKILL_FISTPERCENT, 50) 10 | setCombatCondition(combat, condition) 11 | 12 | local area = createCombatArea(AREA_CIRCLE3X3) 13 | setCombatArea(combat, area) 14 | 15 | function onCastSpell(cid, var) 16 | return doCombat(cid, combat, var) 17 | end -------------------------------------------------------------------------------- /data/spells/scripts/monster/skills_morguthis.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local condition = createConditionObject(CONDITION_ATTRIBUTES) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 5000) 7 | setConditionParam(condition, CONDITION_PARAM_SKILL_DISTANCEPERCENT, 160) 8 | setConditionParam(condition, CONDITION_PARAM_SKILL_SHIELDPERCENT, 160) 9 | setConditionParam(condition, CONDITION_PARAM_SKILL_MELEEPERCENT, 160) 10 | setConditionParam(condition, CONDITION_PARAM_SKILL_FISTPERCENT, 160) 11 | setCombatCondition(combat, condition) 12 | 13 | function onCastSpell(cid, var) 14 | return doCombat(cid, combat, var) 15 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/animate_dead_rune.lua: -------------------------------------------------------------------------------- 1 | local function doTargetCorpse(cid, pos) 2 | local getPos = pos 3 | getPos.stackpos = 255 4 | corpse = getThingfromPos(getPos) 5 | if(corpse.uid > 0 and isCreature(corpse.uid) == false and isInArray(CORPSES, corpse.itemid) ) then 6 | doRemoveItem(corpse.uid) 7 | doPlayerSummonCreature(cid, "Skeleton", pos) 8 | doSendMagicEffect(pos, CONST_ME_MAGIC_BLUE) 9 | return LUA_NO_ERROR 10 | end 11 | 12 | doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) 13 | doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) 14 | return LUA_ERROR 15 | end 16 | 17 | function onCastSpell(cid, var) 18 | local pos = variantToPosition(var) 19 | if(pos.x ~= 0 and pos.y ~= 0 and pos.z ~= 0) then 20 | return doTargetCorpse(cid, pos) 21 | end 22 | 23 | doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) 24 | doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) 25 | return LUA_ERROR 26 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/cancel_invisibility.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 3 | setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_INVISIBLE) 4 | 5 | local area = createCombatArea(AREA_CIRCLE3X3) 6 | setCombatArea(combat, area) 7 | 8 | function onCastSpell(cid, var) 9 | return doCombat(cid, combat, var) 10 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/challenge.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 4 | 5 | local area = createCombatArea(AREA_SQUARE1X1) 6 | setCombatArea(combat, area) 7 | 8 | function onTargetCreature(cid, target) return doChallengeCreature(cid, target) end 9 | setCombatCallback(combat, CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature") 10 | 11 | function onCastSpell(cid, var) 12 | return doCombat(cid, combat, var) 13 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/desintegrate_rune.lua: -------------------------------------------------------------------------------- 1 | local function doRemoveObject(cid, pos, send) 2 | pos.stackpos = 255 3 | local object = getThingfromPos(pos) 4 | local playerPos = getCreaturePosition(cid) 5 | 6 | if(object.uid > 65535 and isCreature(object.uid) == false and isItemMoveable(object.itemid) and object.actionid == 0) then 7 | doRemoveItem(object.uid) 8 | doSendMagicEffect(pos, CONST_ME_POFF) 9 | doRemoveObject(cid, pos, true) 10 | return LUA_NO_ERROR 11 | elseif(not send) then 12 | doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) 13 | doSendMagicEffect(playerPos, CONST_ME_POFF) 14 | return LUA_ERROR 15 | end 16 | end 17 | 18 | function onCastSpell(cid, var) 19 | local pos = variantToPosition(var) 20 | if(pos.x ~= 0 and pos.y ~= 0 and pos.z ~= 0) then 21 | return doRemoveObject(cid, pos) 22 | end 23 | 24 | doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) 25 | doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) 26 | return LUA_ERROR 27 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/destroy_field_rune.lua: -------------------------------------------------------------------------------- 1 | function onCastSpell(cid, var) 2 | local position = variantToPosition(var) 3 | local creaturesSize = #getAllCreatures(position) 4 | local stackSize = getTileStackItemsSize(position) + creaturesSize 5 | local itemsTable = {} 6 | local removed = false 7 | 8 | if stackSize > 0 then 9 | for i=1,stackSize do 10 | position.stackpos = i 11 | itemsTable[i] = getTileThingByPos(position) 12 | end 13 | end 14 | 15 | if #itemsTable > 0 then 16 | for k, item in pairs(itemsTable) do 17 | if isInArray(FIELDS, item.itemid) then 18 | doRemoveItem(item.uid) 19 | removed = true 20 | end 21 | end 22 | end 23 | 24 | if removed then 25 | doSendMagicEffect(position, CONST_ME_POFF) 26 | return true 27 | end 28 | 29 | doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) 30 | doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) 31 | return false 32 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/great_light.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) 4 | 5 | local condition = createConditionObject(CONDITION_LIGHT) 6 | setConditionParam(condition, CONDITION_PARAM_LIGHT_LEVEL, 8) 7 | setConditionParam(condition, CONDITION_PARAM_LIGHT_COLOR, 215) 8 | setConditionParam(condition, CONDITION_PARAM_TICKS, ((11*60)+35)*1000) --11 minutes and 35 seconds(time in ms) 9 | setCombatCondition(combat, condition) 10 | 11 | function onCastSpell(cid, var) 12 | return doCombat(cid, combat, var) 13 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/haste.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 40000) 7 | setConditionFormula(condition, 0.3, -24, 0.3, -24) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/invisible.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) 4 | 5 | local condition = createConditionObject(CONDITION_INVISIBLE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 200000) 7 | setCombatCondition(combat, condition) 8 | 9 | function onCastSpell(cid, var) 10 | return doCombat(cid, combat, var) 11 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/light.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) 4 | 5 | local condition = createConditionObject(CONDITION_LIGHT) 6 | setConditionParam(condition, CONDITION_PARAM_LIGHT_LEVEL, 6) 7 | setConditionParam(condition, CONDITION_PARAM_LIGHT_COLOR, 215) 8 | setConditionParam(condition, CONDITION_PARAM_TICKS, ((6*60)+10)*1000) --3 minutes and 10 seconds(time in ms) 9 | setCombatCondition(combat, condition) 10 | 11 | function onCastSpell(cid, var) 12 | return doCombat(cid, combat, var) 13 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/magic_rope.lua: -------------------------------------------------------------------------------- 1 | local ROPE_SPOT = {384, 418} 2 | 3 | function onCastSpell(cid, var) 4 | local pos = getCreaturePosition(cid) 5 | pos.stackpos = 0 6 | local grounditem = getThingfromPos(pos) 7 | if isInArray(ROPE_SPOT, grounditem.itemid) == true then 8 | local newpos = pos 9 | local oldpos = getCreaturePosition(cid) 10 | newpos.y = newpos.y + 1 11 | newpos.z = newpos.z - 1 12 | doTeleportThing(cid, newpos) 13 | doSendMagicEffect(newpos, CONST_ME_TELEPORT) 14 | return LUA_NO_ERROR 15 | end 16 | doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) 17 | doSendMagicEffect(pos, CONST_ME_POFF) 18 | return LUA_ERROR 19 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/magic_shield.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) 4 | 5 | local condition = createConditionObject(CONDITION_MANASHIELD) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 200000) 7 | setCombatCondition(combat, condition) 8 | 9 | function onCastSpell(cid, var) 10 | return doCombat(cid, combat, var) 11 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/magic_wall_rune.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) 3 | setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 1497) 4 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 5 | 6 | function onCastSpell(cid, var) 7 | return doCombat(cid, combat, var) 8 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/paralyze_rune.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) 3 | 4 | local condition = createConditionObject(CONDITION_PARALYZE) 5 | setConditionParam(condition, CONDITION_PARAM_TICKS, 10000) 6 | setConditionFormula(condition, -1.0, 0, -1.0, 0) 7 | setCombatCondition(combat, condition) 8 | 9 | function onCastSpell(cid, var) 10 | return doCombat(cid, combat, var) 11 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/strong_haste.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) 4 | 5 | local condition = createConditionObject(CONDITION_HASTE) 6 | setConditionParam(condition, CONDITION_PARAM_TICKS, 20000) 7 | setConditionFormula(condition, 0.7, -56, 0.7, -56) 8 | setCombatCondition(combat, condition) 9 | 10 | function onCastSpell(cid, var) 11 | return doCombat(cid, combat, var) 12 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/ultimate_light.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 3 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) 4 | 5 | local condition = createConditionObject(CONDITION_LIGHT) 6 | setConditionParam(condition, CONDITION_PARAM_LIGHT_LEVEL, 10) 7 | setConditionParam(condition, CONDITION_PARAM_LIGHT_COLOR, 215) 8 | setConditionParam(condition, CONDITION_PARAM_TICKS, (33*60)*1000) --33 minutes(time in ms) 9 | setCombatCondition(combat, condition) 10 | 11 | function onCastSpell(cid, var) 12 | return doCombat(cid, combat, var) 13 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/undead_legion.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) 3 | 4 | local area = createCombatArea(AREA_CIRCLE3X3) 5 | setCombatArea(combat, area) 6 | 7 | function onTargetCorpse(cid, pos) 8 | local getPos = pos 9 | getPos.stackpos = 255 10 | corpse = getThingfromPos(getPos) 11 | if(corpse.uid > 0 and isCreature(corpse.uid) == false and isInArray(CORPSES, corpse.itemid) ) then 12 | doRemoveItem(corpse.uid) 13 | doPlayerSummonCreature(cid, "Skeleton", pos) 14 | end 15 | end 16 | setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetCorpse") 17 | 18 | function onCastSpell(cid, var) 19 | return doCombat(cid, combat, var) 20 | end -------------------------------------------------------------------------------- /data/spells/scripts/support/wild_growth.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) 3 | setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 1499) 4 | setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) 5 | 6 | function onCastSpell(cid, var) 7 | return doCombat(cid, combat, var) 8 | end -------------------------------------------------------------------------------- /data/talkactions/lib/talkactions.lua: -------------------------------------------------------------------------------- 1 | function serializeParam( param ) 2 | local values = {} 3 | for value in string.gmatch( param, "%s*([%s%w]+)%s*" ) do 4 | local _, _, isString = string.find( value, "(%a+)" ) 5 | if not( isString )then 6 | value = tonumber( value ) 7 | end 8 | table.insert( values, value ) 9 | end 10 | return values 11 | end -------------------------------------------------------------------------------- /data/talkactions/scripts/broadcastclass.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param, channel) 2 | if(param == "") then 3 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need to type the message that will be broadcasted.") 4 | return false 5 | end 6 | 7 | local t = string.explode(param, ";", 1) 8 | if(not t[2] or MESSAGE_TYPES[t[1]] == nil) then 9 | broadcastMessage(param) 10 | else 11 | broadcastMessage(t[2], MESSAGE_TYPES[t[1]]) 12 | end 13 | 14 | return false 15 | end 16 | -------------------------------------------------------------------------------- /data/talkactions/scripts/buyhouse.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | local lookPos = getPlayerLookPos(cid) 3 | local house = House.getHouseByPos(lookPos) 4 | if(house == nil) then 5 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You must be looking at a house to buy one.") 6 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, words) 7 | return false 8 | end 9 | 10 | if(house:buy(cid)) then 11 | doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE) 12 | else 13 | doSendMagicEffect(getThingPos(cid), CONST_ME_POFF) 14 | end 15 | 16 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, words) 17 | return false 18 | end 19 | -------------------------------------------------------------------------------- /data/talkactions/scripts/canuseshare.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | 3 | local members = getPartyMembers(cid) 4 | if not members then 5 | doPlayerSendCancel(cid, "You are not in a party.") 6 | return false 7 | end 8 | 9 | local boolean = not canUseSharedExperience(cid) 10 | doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You are " .. (boolean and "not" or "") .. " meeting the requirements to be benefited by party shared experience.") 11 | 12 | return false 13 | end 14 | -------------------------------------------------------------------------------- /data/talkactions/scripts/closeserver.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | doSetGameState(GAME_STATE_CLOSED) 3 | 4 | local casterRemoved = false 5 | for i, uid in ipairs(getPlayersOnlineList()) do 6 | if getPlayerFlagValue(uid, PLAYERFLAG_CANALWAYSLOGIN) == false then 7 | if uid == cid then 8 | casterRemoved = true 9 | end 10 | doRemoveCreature(uid) 11 | end 12 | end 13 | 14 | if(param == "serversave") then 15 | doSaveServer(true) 16 | else 17 | doSaveServer(false) 18 | end 19 | 20 | if not casterRemoved then 21 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Server is now closed.") 22 | end 23 | 24 | return false 25 | end 26 | -------------------------------------------------------------------------------- /data/talkactions/scripts/createitembyidfront.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | if(param == "") then 3 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need to type the parameter.") 4 | doSendMagicEffect(playerPos, CONST_ME_POFF) 5 | return false 6 | else 7 | param = string.explode(param, " ") 8 | end 9 | 10 | local playerPos = getPlayerPosition(cid) 11 | local direction = getCreatureLookDir(cid) 12 | if direction == NORTH then 13 | playerPos.y = playerPos.y - 1 14 | elseif direction == SOUTH then 15 | playerPos.y = playerPos.y + 1 16 | elseif direction == EAST then 17 | playerPos.x = playerPos.x + 1 18 | elseif direction == WEST then 19 | playerPos.x = playerPos.x - 1 20 | end 21 | 22 | local itemid = tonumber(param[1]) 23 | local itemcount = param[2] ~= nil and tonumber(param[2]) or 1 24 | local count = math.min(itemcount, 100) 25 | 26 | if isValidItemId(itemid) == false then 27 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid item id.") 28 | doSendMagicEffect(playerPos, CONST_ME_POFF) 29 | return false 30 | end 31 | 32 | local uidItem = doCreateItem(itemid, count, playerPos) 33 | if uidItem ~= false and uidItem ~= LUA_NULL then 34 | doDecayItem(uidItem) 35 | doSendMagicEffect(playerPos, CONST_ME_MAGIC_GREEN) 36 | return false 37 | else 38 | doSendMagicEffect(playerPos, CONST_ME_POFF) 39 | end 40 | 41 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Item could not be summoned.") 42 | return false 43 | end 44 | -------------------------------------------------------------------------------- /data/talkactions/scripts/floorchange.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | -- Get number of floors 3 | local nfloors = 1 4 | if(param ~= "" and tonumber(param)) then 5 | nfloors = math.max(0, tonumber(param)) 6 | end 7 | 8 | -- Change position 9 | local oldPos = getPlayerPosition(cid) 10 | if(oldPos == false) then 11 | return false 12 | end 13 | 14 | local newPos = getPlayerPosition(cid) 15 | if(newPos == false) then 16 | return false 17 | end 18 | 19 | if(words == "/up") then 20 | newPos.z = newPos.z - nfloors 21 | else 22 | newPos.z = newPos.z + nfloors 23 | end 24 | 25 | if(newPos.z < 0 or newPos.z >= 16) then 26 | return false 27 | end 28 | 29 | if(doTeleportThing(cid, newPos) and nfloors > 0) then 30 | if(isGmInvisible(cid) == false) then 31 | doSendMagicEffect(oldPos, CONST_ME_POFF) 32 | doSendMagicEffect(newPos, CONST_ME_TELEPORT) 33 | end 34 | end 35 | 36 | return false 37 | end 38 | -------------------------------------------------------------------------------- /data/talkactions/scripts/frags.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | local table = getPlayerUnjustKills(cid) 3 | local timestamp = getPlayerSkullEndTime(cid) 4 | local skulltype = getPlayerSkullType(cid) 5 | local dateTable = os.date("*t", timestamp) 6 | 7 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Day: " .. table.day .. " (red skull:" .. table.dayRedSkull .. ")") 8 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Week: " .. table.week .. " (red skull:" .. table.weekRedSkull .. ")") 9 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Month: " .. table.month .. " (red skull:" .. table.monthRedSkull .. ")") 10 | 11 | if (skulltype == 4) then 12 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You will loose your Red Skull at date : "..dateTable.day.."."..dateTable.month.."."..dateTable.year.." and approximately : "..dateTable.hour..":00 CEST ") 13 | end 14 | 15 | return false 16 | end 17 | -------------------------------------------------------------------------------- /data/talkactions/scripts/gethouse.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | if(param == "") then 3 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need to type the parameter.") 4 | return false 5 | end 6 | 7 | local guid = getPlayerGUIDByName(param) 8 | local str= "Player not found." 9 | if guid ~= LUA_NULL then 10 | str = getPlayerNameByGUID(guid) 11 | local house = House.getHouseByOwnerGUID(guid) 12 | if house ~= nil then 13 | str = str .. " owns house: " .. house:getName() 14 | else 15 | str = str .. " does not own any house." 16 | end 17 | end 18 | 19 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, str) 20 | return false 21 | end 22 | -------------------------------------------------------------------------------- /data/talkactions/scripts/getinfo.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | if(param == "") then 3 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need to type the parameter.") 4 | return false 5 | end 6 | 7 | local player = getPlayerByName(param) 8 | local str = "" 9 | if player ~= LUA_NULL then 10 | local pos = getPlayerPosition(player) 11 | 12 | str = str .. "Name: " .. getPlayerName(player) .. "\n" 13 | str = str .. "Access Level: " .. getPlayerAccess(player) .. "\n" 14 | str = str .. "Level: " .. getPlayerLevel(player) .. "\n" 15 | str = str .. "Magic Level: " .. getPlayerMagLevel(player) .. "\n" 16 | str = str .. "Speed: " .. getCreatureSpeed(player) .. "\n" 17 | str = str .. "Position: " .. "( " ..pos.x .. " / " .. pos.y .. " / " .. pos.z .. " )\n" 18 | str = str .. "Ip: " .. convertIntToIP(getPlayerIp(player)) 19 | else 20 | str = "Player not found." 21 | end 22 | 23 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, str) 24 | 25 | return false 26 | end 27 | -------------------------------------------------------------------------------- /data/talkactions/scripts/gminvisible.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | if (isPlayer(cid) and getPlayerFlagValue(cid, PLAYERFLAG_CANNOTBESEEN) == false) then 3 | doPlayerToogleGmInvisible(cid) 4 | end 5 | local pos = getPlayerPos(cid) 6 | if (isGmInvisible(cid) ) then 7 | doSendMagicEffect(pos, CONST_ME_POFF) 8 | doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You are now invisible.") 9 | else 10 | doSendMagicEffect(pos, CONST_ME_TELEPORT) 11 | doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You are now visible.") 12 | end 13 | return false 14 | end 15 | -------------------------------------------------------------------------------- /data/talkactions/scripts/housecleaning.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | if(param == "") then 3 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need to type the parameter.") 4 | return false 5 | end 6 | 7 | local townid = string.match(param, "(%d+)") 8 | local houselist = {} 9 | if townid == nil then 10 | houselist = getHouseList() 11 | else 12 | houselist = getHouseList(tonumber(townid)) 13 | end 14 | 15 | local f = 0 16 | local s = 0 17 | for i, house in ipairs(houselist) do 18 | if cleanHouse(house) then 19 | s = s + 1 20 | else 21 | f = f + 1 22 | end 23 | end 24 | 25 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "" .. s .. " house" .. (s > 1 and "s" or "") .. " cleaned (" .. f .. " failed)") 26 | return false 27 | end 28 | -------------------------------------------------------------------------------- /data/talkactions/scripts/houseinfo.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | local lookPos = getPlayerLookPos(cid) 3 | local house = House.getHouseByPos(lookPos) 4 | if(house == nil) then 5 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You must be looking to a house to get info.") 6 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, words) 7 | return false 8 | end 9 | 10 | local str = "House Info:\nAddress: " .. house:getName() .. "\nRent: " .. house:getRent() .. " gold\nSize: " .. house:getSize() .. "sqm.\n" 11 | str = str .. "Price: " .. house:getPrice() .. " gold." 12 | doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, str) 13 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, words) 14 | return false 15 | end -------------------------------------------------------------------------------- /data/talkactions/scripts/kickplayer.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | if(param == "") then 3 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need to type the parameter.") 4 | return false 5 | end 6 | 7 | local playerKick = getPlayerByName(param) 8 | if playerKick == cid or playerKick == LUA_NULL then 9 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This player does not exist.") 10 | return false 11 | end 12 | 13 | local playerKickAccess = getPlayerAccess(playerKick) 14 | if playerKickAccess < getPlayerAccess(cid) then 15 | if doRemoveCreature(playerKick) then 16 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player kicked.") 17 | else 18 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Could not kick player.") 19 | end 20 | else 21 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You can not kick this player.") 22 | end 23 | 24 | return false 25 | end 26 | -------------------------------------------------------------------------------- /data/talkactions/scripts/leavehouse.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | local house = House.getHouseByOwner(cid) 3 | if(house) then 4 | house:setOwner(0) 5 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have successfully left your house!") 6 | else 7 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You do not own a house!") 8 | end 9 | return false 10 | end -------------------------------------------------------------------------------- /data/talkactions/scripts/mc.lua: -------------------------------------------------------------------------------- 1 | -- othire mccheck 2 | function onSay(cid, words, param) 3 | 4 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Multiclient Check List:") 5 | 6 | local ipList = {} 7 | local players = getPlayersOnlineList() 8 | 9 | for i = 1, #players do 10 | local tmpPlayer = players[i] 11 | local ip = getPlayerIp(tmpPlayer) 12 | if ip ~= 0 then 13 | local list = ipList[ip] 14 | if not list then 15 | ipList[ip] = {} 16 | list = ipList[ip] 17 | end 18 | list[#list + 1] = tmpPlayer 19 | end 20 | end 21 | 22 | for ip, list in pairs(ipList) do 23 | local listLength = #list 24 | if listLength > 1 then 25 | local tmpPlayer = list[1] 26 | local message = ("%s: %s [%d]"):format(convertIntToIP(ip), getPlayerName(tmpPlayer), getPlayerLevel(tmpPlayer)) 27 | for i = 2, listLength do 28 | tmpPlayer = list[i] 29 | message = ("%s, %s [%d]"):format(message, getPlayerName(tmpPlayer), getPlayerLevel(tmpPlayer)) 30 | end 31 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, message .. ".") 32 | end 33 | end 34 | return false 35 | end -------------------------------------------------------------------------------- /data/talkactions/scripts/onlinelist.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | local onlineList = getPlayersOnlineList() 3 | 4 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Players Online:") 5 | 6 | local str = "" 7 | local j = 1 8 | local k = 0 9 | for i, uid in ipairs(onlineList) do 10 | --Player is not shown in list if he has SpecialVip flag 11 | if getPlayerFlagValue(uid, PLAYERFLAG_SPECIALVIP) == false then 12 | local name = getPlayerName(uid) 13 | if string.len(name) + string.len(str) > 255 then 14 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, str) 15 | str = name 16 | elseif j == 1 then 17 | str = name 18 | else 19 | str = str .. ", " .. name 20 | end 21 | j = j + 1 22 | else 23 | k = k + 1 24 | end 25 | end 26 | 27 | if str ~= "" then 28 | str = str .. "." 29 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, str) 30 | end 31 | 32 | local total = #onlineList - k 33 | if total == 1 then 34 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Total: 1 player online.") 35 | else 36 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Total: " .. total .. " players online.") 37 | end 38 | 39 | return false 40 | end 41 | -------------------------------------------------------------------------------- /data/talkactions/scripts/openserver.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | doSetGameState(GAME_STATE_NORMAL) 3 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Server is now open.") 4 | return false 5 | end 6 | -------------------------------------------------------------------------------- /data/talkactions/scripts/placemonster.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | if(param == "") then 3 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need to type the parameter.") 4 | return false 5 | end 6 | 7 | if isMonsterName(param) == false then 8 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "There isn't any monster named "..param..".") 9 | return false 10 | end 11 | 12 | local monster = doSummonCreature(param, getPlayerPosition(cid)) 13 | if monster ~= false then 14 | doSendMagicEffect(getCreaturePosition(monster), CONST_ME_MAGIC_RED) 15 | else 16 | doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHROOM) 17 | doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) 18 | end 19 | 20 | return false 21 | end 22 | -------------------------------------------------------------------------------- /data/talkactions/scripts/placesummon.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | if(param == "") then 3 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need to type the parameter.") 4 | return false 5 | end 6 | 7 | if isMonsterName(param) == false then 8 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "There isn't any monster named "..param..".") 9 | return false 10 | end 11 | 12 | local summon = doPlayerSummonCreature(cid, param, getPlayerPosition(cid)) 13 | if summon ~= false then 14 | doSendMagicEffect(getCreaturePosition(summon), CONST_ME_MAGIC_RED) 15 | else 16 | doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHROOM) 17 | doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) 18 | end 19 | 20 | return false 21 | end 22 | -------------------------------------------------------------------------------- /data/talkactions/scripts/refreshmap.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | doRefreshMap() 3 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Map refreshing was started.") 4 | return false 5 | end 6 | -------------------------------------------------------------------------------- /data/talkactions/scripts/removething.lua: -------------------------------------------------------------------------------- 1 | function onSay (cid, words, param) 2 | local amount = 1 3 | param = tonumber(param) 4 | if(param) then 5 | amount = tonumber(param) 6 | end 7 | 8 | local tmp = {} 9 | local toPos = getPlayerLookPos(cid) 10 | toPos.stackpos = 255 11 | tmp = getThingFromPos(toPos) 12 | if(tmp.uid ~= 0) then 13 | if(isCreature(tmp.uid) ) then 14 | doRemoveCreature(tmp.uid) 15 | else 16 | doRemoveItem(tmp.uid, math.min(math.max(1, tmp.type), amount)) 17 | end 18 | 19 | doSendMagicEffect(toPos, CONST_ME_MAGIC_RED) 20 | return false 21 | end 22 | 23 | toPos.stackpos = 254 24 | tmp = getThingFromPos(toPos) 25 | if(tmp.uid ~= 0) then 26 | doRemoveItem(tmp.uid, math.min(math.max(1, tmp.type), amount)) 27 | doSendMagicEffect(toPos, CONST_ME_MAGIC_RED) 28 | return false 29 | end 30 | 31 | toPos.stackpos = 253 32 | tmp = getThingFromPos(toPos) 33 | if(tmp.uid ~= 0) then 34 | doRemoveCreature(tmp.uid) 35 | doSendMagicEffect(toPos, CONST_ME_MAGIC_RED) 36 | return false 37 | end 38 | 39 | for i = 5, 1, -1 do 40 | toPos.stackpos = i 41 | tmp = getThingFromPos(toPos) 42 | if(tmp.uid ~= 0) then 43 | if(isCreature(tmp.uid) ) then 44 | doRemoveCreature(tmp.uid) 45 | else 46 | doRemoveItem(tmp.uid, math.min(math.max(1, tmp.type), amount)) 47 | end 48 | 49 | doSendMagicEffect(toPos, CONST_ME_MAGIC_RED) 50 | return false 51 | end 52 | end 53 | 54 | doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) 55 | return false 56 | end 57 | -------------------------------------------------------------------------------- /data/talkactions/scripts/saveserver.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | if doSaveServer(true) then 3 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Server has been saved.") 4 | else 5 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Server could not be saved.") 6 | end 7 | 8 | return false 9 | end 10 | -------------------------------------------------------------------------------- /data/talkactions/scripts/serverinfo.lua: -------------------------------------------------------------------------------- 1 | -- You should multiply rate values by player rate if you use stages 2 | local config = { 3 | rate_exp = getConfigValue('rate_exp'), 4 | rate_skill = getConfigValue('rate_skill'), 5 | rate_loot = getConfigValue('rate_loot'), 6 | rate_mag = getConfigValue('rate_mag'), 7 | rent_period = getConfigValue('houserentperiod'), 8 | protection_level = getConfigValue('min_pvp_level') 9 | } 10 | 11 | local function getWorldTypeName() 12 | local worldType = getWorldType() 13 | if worldType == WORLD_TYPE_NO_PVP then 14 | return "Non-PvP" 15 | elseif worldType == WORLD_TYPE_PVP then 16 | return "PvP" 17 | elseif worldType == WORLD_TYPE_PVP_ENFORCED then 18 | return "PvP-Enforced" 19 | else 20 | return "null" 21 | end 22 | end 23 | 24 | function onSay(cid, words, param) 25 | -- Add basic info 26 | local str = "Server Information:\n\n" 27 | str = str .. "World Type: " .. getWorldTypeName() .. "\n" 28 | str = str .. "Experience Rate: " .. config.rate_exp .. "x\n" 29 | str = str .. "Magic Rate: " .. config.rate_mag .. "x\n" 30 | str = str .. "Skill Rate: " .. config.rate_skill .. "x\n" 31 | str = str .. "Loot Rate: " .. config.rate_loot .. "x\n" 32 | str = str .. "Protection Level: " .. config.protection_level .. "\n" 33 | 34 | -- Add house renting info 35 | if(config.rent_period ~= "never") then 36 | str = str .. "\nHouse Rent: House rents are paid " .. config.rent_period .. "." 37 | end 38 | 39 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, str) 40 | return false 41 | end -------------------------------------------------------------------------------- /data/talkactions/scripts/sethouseowner.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | local playerPos = getPlayerPosition(cid) 3 | local house = House.getHouseByPos(playerPos) 4 | if house ~= nil then 5 | if param == "" then 6 | house:setOwner(0) 7 | else 8 | local guid = getPlayerGUIDByName(param) 9 | if guid ~= LUA_NULL then 10 | house:setOwner(guid) 11 | else 12 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player does not exist.") 13 | end 14 | end 15 | else 16 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You are not in a house.") 17 | end 18 | 19 | return false 20 | end 21 | -------------------------------------------------------------------------------- /data/talkactions/scripts/shareexp.lua: -------------------------------------------------------------------------------- 1 | local settings = { 2 | inFightBlock = true, 3 | onlyLeader = true 4 | } 5 | 6 | function onSay(cid, words, param) 7 | local members = getPartyMembers(cid) 8 | if not members then 9 | doPlayerSendCancel(cid, "You are not in a party.") 10 | return false 11 | end 12 | 13 | if settings.onlyLeader and not isPartyLeader(cid) then 14 | doPlayerSendCancel(cid, "Only party leader can enable or disable shared experience.") 15 | return false 16 | end 17 | 18 | if settings.inFightBlock and hasCondition(cid, CONDITION_INFIGHT) then 19 | doPlayerSendCancel(cid, "You need to be out of fight.") 20 | return false 21 | end 22 | 23 | local boolean = not isPartySharedExperienceActive(cid) 24 | if setPartySharedExperience(cid, boolean) then 25 | for _, pid in ipairs(members) do 26 | if not isPartyLeader(pid) then 27 | doPlayerSendTextMessage(pid, MESSAGE_EVENT_ADVANCE, "Shared Experience has been "..(boolean and "activated" or "deactivated")..".") 28 | end 29 | end 30 | else 31 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "There was an error. Try again in few seconds.") 32 | end 33 | 34 | return false 35 | end 36 | -------------------------------------------------------------------------------- /data/talkactions/scripts/shutdown.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | doSetGameState(GAME_STATE_SHUTDOWN) 3 | return false 4 | end 5 | -------------------------------------------------------------------------------- /data/talkactions/scripts/teleporthere.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | if(param == "") then 3 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need to type the parameter.") 4 | return false 5 | end 6 | 7 | local creature = getCreatureByName(param) 8 | if creature == cid or creature == LUA_NULL then 9 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Creature or player not found.") 10 | return false 11 | end 12 | 13 | local creatureAccess = 0 14 | if(isPlayer(creature) == true) then 15 | creatureAccess = getPlayerAccess(creature) 16 | end 17 | 18 | if creatureAccess <= getPlayerAccess(cid) then 19 | local playerPos = getPlayerPosition(cid) 20 | local oldCreaturePos = getCreaturePosition(creature) 21 | if(doTeleportThing(creature, playerPos)) then 22 | doSendMagicEffect(oldCreaturePos, CONST_ME_POFF) 23 | doSendMagicEffect(playerPos, CONST_ME_TELEPORT) 24 | else 25 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Can not teleport creature to your position.") 26 | end 27 | else 28 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You do not have access to do that.") 29 | end 30 | 31 | return false 32 | end 33 | -------------------------------------------------------------------------------- /data/talkactions/scripts/teleportmasterpos.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | local town_pos = getPlayerMasterPos(cid) 3 | local old_pos = getPlayerPosition(cid) 4 | if(doTeleportThing(cid, town_pos)) then 5 | if(isGmInvisible(cid) == false) then 6 | doSendMagicEffect(old_pos, CONST_ME_POFF) 7 | doSendMagicEffect(town_pos, CONST_ME_TELEPORT) 8 | end 9 | else 10 | doPlayerSendCancel(cid, "Can not teleport to that position. Check your master position.") 11 | end 12 | 13 | return false 14 | end 15 | -------------------------------------------------------------------------------- /data/talkactions/scripts/teleportntiles.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | if(param == "") then 3 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need to type the parameter.") 4 | return false 5 | end 6 | 7 | local ntiles = tonumber(param) 8 | if(ntiles == nil or ntiles <= 0) then 9 | return false 10 | end 11 | 12 | local oldPos = getPlayerPosition(cid) 13 | if(oldPos == false) then 14 | return false 15 | end 16 | 17 | local newPos = getPlayerPosition(cid) 18 | if(newPos == false) then 19 | return false 20 | end 21 | 22 | local lookDir = getPlayerLookDir(cid) 23 | 24 | if(lookDir == NORTH) then 25 | newPos.y = newPos.y - ntiles 26 | elseif(lookDir == SOUTH) then 27 | newPos.y = newPos.y + ntiles 28 | elseif(lookDir == EAST) then 29 | newPos.x = newPos.x + ntiles 30 | elseif(lookDir == WEST) then 31 | newPos.x = newPos.x - ntiles 32 | end 33 | 34 | if(newPos.x < 0 or newPos.x > 65535 or newPos.y < 0 or newPos.y > 65535) then 35 | return false 36 | end 37 | 38 | if(doTeleportThing(cid, newPos)) then 39 | if(isGmInvisible(cid) == false) then 40 | doSendMagicEffect(oldPos, CONST_ME_POFF) 41 | doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT) 42 | end 43 | else 44 | doPlayerSendCancel(cid, "Destination is not reachable.") 45 | end 46 | 47 | return false 48 | end 49 | -------------------------------------------------------------------------------- /data/talkactions/scripts/teleporttotown.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | if(param == "") then 3 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need to type the parameter.") 4 | return false 5 | end 6 | 7 | local townid = getTownIdByName(param) 8 | if(townid ~= LUA_NULL) then 9 | local new_pos = getTownTemplePosition(townid) 10 | local old_pos = getPlayerPosition(cid) 11 | if(doTeleportThing(cid, new_pos)) then 12 | if(isGmInvisible(cid) == false) then 13 | doSendMagicEffect(old_pos, CONST_ME_POFF) 14 | doSendMagicEffect(new_pos, CONST_ME_TELEPORT) 15 | end 16 | else 17 | doPlayerSendCancel(cid, "Town temple position is not well configured.") 18 | end 19 | else 20 | doPlayerSendCancel(cid, "Town does not exist.") 21 | end 22 | 23 | return false 24 | end 25 | -------------------------------------------------------------------------------- /data/talkactions/scripts/testeffect.lua: -------------------------------------------------------------------------------- 1 | function onSay(cid, words, param) 2 | if(param == "") then 3 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need to type the parameter.") 4 | return false 5 | else 6 | param = tonumber(param) 7 | end 8 | 9 | if param then 10 | doSendMagicEffect(getPlayerPosition(cid), param) 11 | else 12 | doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid parameter.") 13 | end 14 | 15 | return false 16 | end 17 | -------------------------------------------------------------------------------- /data/weapons/lib/weapons.lua: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ezzz-dev/OTHire/1d9987cdbea118ad1a01a6f2bba66cc22c002d63/data/weapons/lib/weapons.lua -------------------------------------------------------------------------------- /data/weapons/scripts/explosive_arrow.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) 3 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) 4 | setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) 5 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BURSTARROW) 6 | 7 | local area = createCombatArea( { {1, 1, 1}, {1, 3, 1}, {1, 1, 1} } ) 8 | setCombatArea(combat, area) 9 | 10 | function onGetFormulaValues(cid, level, maglevel) 11 | min = 0 12 | max = -((level * 2) + (maglevel * 3)) * 0.6 13 | return min, max 14 | end 15 | 16 | setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") 17 | 18 | function onUseWeapon(player, var) 19 | return doCombat(player, combat, var) 20 | end -------------------------------------------------------------------------------- /data/weapons/scripts/poison_arrow.lua: -------------------------------------------------------------------------------- 1 | local combat = createCombatObject() 2 | setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) 3 | setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_POISONDAMAGE) 4 | setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISONARROW) 5 | setCombatFormula(combat, COMBAT_FORMULA_SKILL, 0, 0, 1.0, 0) 6 | 7 | local condition = createConditionObject(CONDITION_POISON) 8 | setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) 9 | addDamageCondition(condition, 10, 2000, -1) 10 | setCombatCondition(combat, condition) 11 | 12 | function onUseWeapon(cid, var) 13 | return doCombat(cid, combat, var) 14 | end -------------------------------------------------------------------------------- /data/world/world-house.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /data/world/world.otbm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ezzz-dev/OTHire/1d9987cdbea118ad1a01a6f2bba66cc22c002d63/data/world/world.otbm -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | otserv: 5 | build: 6 | context: . 7 | dockerfile: Dockerfile 8 | ports: 9 | - "7171:7171" 10 | -------------------------------------------------------------------------------- /iconv.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ezzz-dev/OTHire/1d9987cdbea118ad1a01a6f2bba66cc22c002d63/iconv.dll -------------------------------------------------------------------------------- /libmySQL.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ezzz-dev/OTHire/1d9987cdbea118ad1a01a6f2bba66cc22c002d63/libmySQL.dll -------------------------------------------------------------------------------- /libxml2.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ezzz-dev/OTHire/1d9987cdbea118ad1a01a6f2bba66cc22c002d63/libxml2.dll -------------------------------------------------------------------------------- /lua51.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ezzz-dev/OTHire/1d9987cdbea118ad1a01a6f2bba66cc22c002d63/lua51.dll -------------------------------------------------------------------------------- /mpir.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ezzz-dev/OTHire/1d9987cdbea118ad1a01a6f2bba66cc22c002d63/mpir.dll -------------------------------------------------------------------------------- /othire_win32_outdated.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ezzz-dev/OTHire/1d9987cdbea118ad1a01a6f2bba66cc22c002d63/othire_win32_outdated.exe -------------------------------------------------------------------------------- /source/autogen.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | autoreconf -vfi -------------------------------------------------------------------------------- /source/db.s3db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ezzz-dev/OTHire/1d9987cdbea118ad1a01a6f2bba66cc22c002d63/source/db.s3db -------------------------------------------------------------------------------- /source/debian/README.Debian: -------------------------------------------------------------------------------- 1 | otserv for Debian 2 | ----------------- 3 | 4 | 5 | 6 | -- Ivan Vučica Tue, 24 Mar 2009 18:52:48 +0100 7 | -------------------------------------------------------------------------------- /source/debian/changelog: -------------------------------------------------------------------------------- 1 | otserv (0.6.3.SVN-1) unstable; urgency=low 2 | 3 | * Initial release (Closes: #nnnn) 4 | 5 | -- Ivan Vucica Tue, 24 Mar 2009 18:52:48 +0100 6 | -------------------------------------------------------------------------------- /source/debian/compat: -------------------------------------------------------------------------------- 1 | 7 2 | -------------------------------------------------------------------------------- /source/debian/control: -------------------------------------------------------------------------------- 1 | Source: otserv 2 | Section: games 3 | Priority: extra 4 | Maintainer: Ivan Vucica 5 | Build-Depends: debhelper (>= 7), autotools-dev 6 | Standards-Version: 3.8.0 7 | Homepage: http://opentibia.sf.net/ 8 | 9 | Package: otserv 10 | Architecture: any 11 | Depends: ${shlibs:Depends}, ${misc:Depends} 12 | Description: Server for 2D MMORPG 13 | OpenTibia Server, abbreviated OTServ or just OT is the main project 14 | of the OpenTibia. OpenTibia Server is a server designed for use 15 | primarily with the Tibia client designed by CipSoft GmbH but 16 | alternative clients are in development, most notably Yet Another 17 | Tibia Client. 18 | 19 | -------------------------------------------------------------------------------- /source/debian/copyright: -------------------------------------------------------------------------------- 1 | This package was debianized by Ivan Vučica on 2 | Tue, 24 Mar 2009 18:52:48 +0100. 3 | 4 | It was downloaded from 5 | 6 | Upstream Author(s): 7 | 8 | 9 | 10 | 11 | Copyright: 12 | 13 | 14 | 15 | 16 | License: 17 | 18 | 19 | 20 | The Debian packaging is copyright 2009, Ivan Vučica and 21 | is licensed under the GPL, see `/usr/share/common-licenses/GPL'. 22 | 23 | # Please also look if there are files or directories which have a 24 | # different copyright/license attached and list them here. 25 | -------------------------------------------------------------------------------- /source/debian/dirs: -------------------------------------------------------------------------------- 1 | usr/sbin 2 | -------------------------------------------------------------------------------- /source/debian/docs: -------------------------------------------------------------------------------- 1 | README 2 | README.DATABASE 3 | -------------------------------------------------------------------------------- /source/debian/otserv.default.ex: -------------------------------------------------------------------------------- 1 | # Defaults for otserv initscript 2 | # sourced by /etc/init.d/otserv 3 | # installed at /etc/default/otserv by the maintainer scripts 4 | 5 | # 6 | # This is a POSIX shell fragment 7 | # 8 | 9 | # Additional options that are passed to the Daemon. 10 | DAEMON_OPTS="" 11 | -------------------------------------------------------------------------------- /source/debian/otserv.doc-base.EX: -------------------------------------------------------------------------------- 1 | Document: otserv 2 | Title: Debian otserv Manual 3 | Author: 4 | Abstract: This manual describes what otserv is 5 | and how it can be used to 6 | manage online manuals on Debian systems. 7 | Section: unknown 8 | 9 | Format: debiandoc-sgml 10 | Files: /usr/share/doc/otserv/otserv.sgml.gz 11 | 12 | Format: postscript 13 | Files: /usr/share/doc/otserv/otserv.ps.gz 14 | 15 | Format: text 16 | Files: /usr/share/doc/otserv/otserv.text.gz 17 | 18 | Format: HTML 19 | Index: /usr/share/doc/otserv/html/index.html 20 | Files: /usr/share/doc/otserv/html/*.html 21 | -------------------------------------------------------------------------------- /source/debian/postinst.ex: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # postinst script for otserv 3 | # 4 | # see: dh_installdeb(1) 5 | 6 | set -e 7 | 8 | # summary of how this script can be called: 9 | # * `configure' 10 | # * `abort-upgrade' 11 | # * `abort-remove' `in-favour' 12 | # 13 | # * `abort-remove' 14 | # * `abort-deconfigure' `in-favour' 15 | # `removing' 16 | # 17 | # for details, see http://www.debian.org/doc/debian-policy/ or 18 | # the debian-policy package 19 | 20 | 21 | case "$1" in 22 | configure) 23 | ;; 24 | 25 | abort-upgrade|abort-remove|abort-deconfigure) 26 | ;; 27 | 28 | *) 29 | echo "postinst called with unknown argument \`$1'" >&2 30 | exit 1 31 | ;; 32 | esac 33 | 34 | # dh_installdeb will replace this with shell code automatically 35 | # generated by other debhelper scripts. 36 | 37 | #DEBHELPER# 38 | 39 | exit 0 40 | -------------------------------------------------------------------------------- /source/debian/postrm.ex: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # postrm script for otserv 3 | # 4 | # see: dh_installdeb(1) 5 | 6 | set -e 7 | 8 | # summary of how this script can be called: 9 | # * `remove' 10 | # * `purge' 11 | # * `upgrade' 12 | # * `failed-upgrade' 13 | # * `abort-install' 14 | # * `abort-install' 15 | # * `abort-upgrade' 16 | # * `disappear' 17 | # 18 | # for details, see http://www.debian.org/doc/debian-policy/ or 19 | # the debian-policy package 20 | 21 | 22 | case "$1" in 23 | purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) 24 | ;; 25 | 26 | *) 27 | echo "postrm called with unknown argument \`$1'" >&2 28 | exit 1 29 | ;; 30 | esac 31 | 32 | # dh_installdeb will replace this with shell code automatically 33 | # generated by other debhelper scripts. 34 | 35 | #DEBHELPER# 36 | 37 | exit 0 38 | -------------------------------------------------------------------------------- /source/debian/preinst.ex: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # preinst script for otserv 3 | # 4 | # see: dh_installdeb(1) 5 | 6 | set -e 7 | 8 | # summary of how this script can be called: 9 | # * `install' 10 | # * `install' 11 | # * `upgrade' 12 | # * `abort-upgrade' 13 | # for details, see http://www.debian.org/doc/debian-policy/ or 14 | # the debian-policy package 15 | 16 | 17 | case "$1" in 18 | install|upgrade) 19 | ;; 20 | 21 | abort-upgrade) 22 | ;; 23 | 24 | *) 25 | echo "preinst called with unknown argument \`$1'" >&2 26 | exit 1 27 | ;; 28 | esac 29 | 30 | # dh_installdeb will replace this with shell code automatically 31 | # generated by other debhelper scripts. 32 | 33 | #DEBHELPER# 34 | 35 | exit 0 36 | -------------------------------------------------------------------------------- /source/debian/prerm.ex: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # prerm script for otserv 3 | # 4 | # see: dh_installdeb(1) 5 | 6 | set -e 7 | 8 | # summary of how this script can be called: 9 | # * `remove' 10 | # * `upgrade' 11 | # * `failed-upgrade' 12 | # * `remove' `in-favour' 13 | # * `deconfigure' `in-favour' 14 | # `removing' 15 | # 16 | # for details, see http://www.debian.org/doc/debian-policy/ or 17 | # the debian-policy package 18 | 19 | 20 | case "$1" in 21 | remove|upgrade|deconfigure) 22 | ;; 23 | 24 | failed-upgrade) 25 | ;; 26 | 27 | *) 28 | echo "prerm called with unknown argument \`$1'" >&2 29 | exit 1 30 | ;; 31 | esac 32 | 33 | # dh_installdeb will replace this with shell code automatically 34 | # generated by other debhelper scripts. 35 | 36 | #DEBHELPER# 37 | 38 | exit 0 39 | -------------------------------------------------------------------------------- /source/debian/watch.ex: -------------------------------------------------------------------------------- 1 | # Example watch control file for uscan 2 | # Rename this file to "watch" and then you can run the "uscan" command 3 | # to check for upstream updates and more. 4 | # See uscan(1) for format 5 | 6 | # Compulsory line, this is a version 3 file 7 | version=3 8 | 9 | # Uncomment to examine a Webpage 10 | # 11 | #http://www.example.com/downloads.php otserv-(.*)\.tar\.gz 12 | 13 | # Uncomment to examine a Webserver directory 14 | #http://www.example.com/pub/otserv-(.*)\.tar\.gz 15 | 16 | # Uncommment to examine a FTP server 17 | #ftp://ftp.example.com/pub/otserv-(.*)\.tar\.gz debian uupdate 18 | 19 | # Uncomment to find new files on sourceforge, for devscripts >= 2.9 20 | # http://sf.net/otserv/otserv-(.*)\.tar\.gz 21 | 22 | # Uncomment to find new files on GooglePages 23 | # http://example.googlepages.com/foo.html otserv-(.*)\.tar\.gz 24 | -------------------------------------------------------------------------------- /source/otpch.cpp: -------------------------------------------------------------------------------- 1 | #include "otpch.h" 2 | -------------------------------------------------------------------------------- /source/otpch.h: -------------------------------------------------------------------------------- 1 | #ifdef __OTSERV_OTCP_H__ 2 | #error "Precompiled header should only be included once" 3 | #endif 4 | 5 | #define __OTSERV_OTCP_H__ 6 | 7 | // Definitions should be global. 8 | #include "definitions.h" 9 | 10 | #ifdef __USE_OTPCH__ 11 | 12 | #ifdef __WINDOWS__ 13 | #include 14 | #endif 15 | 16 | //libxml 17 | #include 18 | #include 19 | #include 20 | //boost 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | //std 30 | #include 31 | #include 32 | #include 33 | #include 34 | //lua 35 | extern "C" 36 | { 37 | #include 38 | #include 39 | #include 40 | } 41 | //otserv 42 | #include "thing.h" 43 | 44 | #endif 45 | 46 | -------------------------------------------------------------------------------- /source/otserv.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ezzz-dev/OTHire/1d9987cdbea118ad1a01a6f2bba66cc22c002d63/source/otserv.ico -------------------------------------------------------------------------------- /source/otsystem.h: -------------------------------------------------------------------------------- 1 | ////////////////////////////////////////////////////////////////////// 2 | // OpenTibia - an opensource roleplaying game 3 | ////////////////////////////////////////////////////////////////////// 4 | // 5 | ////////////////////////////////////////////////////////////////////// 6 | // This program is free software; you can redistribute it and/or 7 | // modify it under the terms of the GNU General Public License 8 | // as published by the Free Software Foundation; either version 2 9 | // of the License, or (at your option) any later version. 10 | // 11 | // This program is distributed in the hope that it will be useful, 12 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | // GNU General Public License for more details. 15 | // 16 | // You should have received a copy of the GNU General Public License 17 | // along with this program; if not, write to the Free Software Foundation, 18 | // Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 19 | ////////////////////////////////////////////////////////////////////// 20 | 21 | 22 | #ifndef __OTSERV_OTSYSTEM_H__ 23 | #define __OTSERV_OTSYSTEM_H__ 24 | 25 | #include "definitions.h" 26 | 27 | #include 28 | #include 29 | 30 | inline int64_t OTSYS_TIME() 31 | { 32 | timeb t; 33 | ftime(&t); 34 | return int64_t(t.millitm) + int64_t(t.time) * 1000; 35 | } 36 | 37 | #endif 38 | -------------------------------------------------------------------------------- /source/scriptmanager.h: -------------------------------------------------------------------------------- 1 | ////////////////////////////////////////////////////////////////////// 2 | // OpenTibia - an opensource roleplaying game 3 | ////////////////////////////////////////////////////////////////////// 4 | // 5 | ////////////////////////////////////////////////////////////////////// 6 | // This program is free software; you can redistribute it and/or 7 | // modify it under the terms of the GNU General Public License 8 | // as published by the Free Software Foundation; either version 2 9 | // of the License, or (at your option) any later version. 10 | // 11 | // This program is distributed in the hope that it will be useful, 12 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | // GNU General Public License for more details. 15 | // 16 | // You should have received a copy of the GNU General Public License 17 | // along with this program; if not, write to the Free Software Foundation, 18 | // Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 19 | ////////////////////////////////////////////////////////////////////// 20 | 21 | 22 | #ifndef __SCRIPTMANAGER_H__ 23 | #define __SCRIPTMANAGER_H__ 24 | 25 | class ScriptingManager 26 | { 27 | public: 28 | ~ScriptingManager(); 29 | static ScriptingManager* getInstance(){ 30 | static ScriptingManager instance; 31 | return &instance; 32 | } 33 | 34 | bool loadScriptSystems(); 35 | 36 | protected: 37 | ScriptingManager(); 38 | }; 39 | 40 | 41 | #endif 42 | -------------------------------------------------------------------------------- /source/tools.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ezzz-dev/OTHire/1d9987cdbea118ad1a01a6f2bba66cc22c002d63/source/tools.cpp -------------------------------------------------------------------------------- /zlib1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ezzz-dev/OTHire/1d9987cdbea118ad1a01a6f2bba66cc22c002d63/zlib1.dll --------------------------------------------------------------------------------