├── .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 [](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