├── .dockerignore ├── .gitattributes ├── .github └── workflows │ └── build-vcpkg.yml ├── .gitignore ├── AUTHORS ├── BUGS ├── CMakeLists.txt ├── Dockerfile ├── ISSUE_TEMPLATE.md ├── LICENSE ├── README.md ├── data ├── cursors │ ├── cursors.otml │ ├── horizontalcursor.png │ ├── targetcursor.png │ ├── textcursor.png │ └── verticalcursor.png ├── fonts │ ├── sans-bold-16px.otfont │ ├── sans-bold-16px_cp1252.png │ ├── terminus-10px.otfont │ ├── terminus-10px.png │ ├── terminus-14px-bold.otfont │ ├── terminus-14px-bold.png │ ├── verdana-11px-antialised.otfont │ ├── verdana-11px-antialised_cp1250.png │ ├── verdana-11px-antialised_cp1252.png │ ├── verdana-11px-monochrome.otfont │ ├── verdana-11px-monochrome_cp1250.png │ ├── verdana-11px-monochrome_cp1252.png │ ├── verdana-11px-rounded.otfont │ ├── verdana-11px-rounded_cp1250.png │ └── verdana-11px-rounded_cp1252.png ├── images │ ├── background.png │ ├── clienticon.png │ ├── flags │ │ ├── de.png │ │ ├── en.png │ │ ├── es.png │ │ ├── pl.png │ │ ├── pt.png │ │ └── sv.png │ ├── game │ │ ├── battle │ │ │ ├── battle_monsters.png │ │ │ ├── battle_npcs.png │ │ │ ├── battle_party.png │ │ │ ├── battle_players.png │ │ │ └── battle_skulls.png │ │ ├── combatmodes │ │ │ ├── chasemode.png │ │ │ ├── fightbalanced.png │ │ │ ├── fightdefensive.png │ │ │ ├── fightoffensive.png │ │ │ ├── mount.png │ │ │ ├── redfistmode.png │ │ │ ├── safefight.png │ │ │ ├── whitedovemode.png │ │ │ ├── whitehandmode.png │ │ │ └── yellowhandmode.png │ │ ├── console │ │ │ ├── channels.png │ │ │ ├── clearchannel.png │ │ │ ├── closechannel.png │ │ │ ├── ignore.png │ │ │ ├── leftarrow.png │ │ │ ├── rightarrow.png │ │ │ ├── say.png │ │ │ ├── whisper.png │ │ │ └── yell.png │ │ ├── creaturetype │ │ │ ├── summon_other.png │ │ │ └── summon_own.png │ │ ├── dangerous.png │ │ ├── emblems │ │ │ ├── emblem_blue.png │ │ │ ├── emblem_green.png │ │ │ ├── emblem_member.png │ │ │ ├── emblem_other.png │ │ │ └── emblem_red.png │ │ ├── minimap │ │ │ ├── cross.png │ │ │ ├── flag0.png │ │ │ ├── flag1.png │ │ │ ├── flag10.png │ │ │ ├── flag11.png │ │ │ ├── flag12.png │ │ │ ├── flag13.png │ │ │ ├── flag14.png │ │ │ ├── flag15.png │ │ │ ├── flag16.png │ │ │ ├── flag17.png │ │ │ ├── flag18.png │ │ │ ├── flag19.png │ │ │ ├── flag2.png │ │ │ ├── flag3.png │ │ │ ├── flag4.png │ │ │ ├── flag5.png │ │ │ ├── flag6.png │ │ │ ├── flag7.png │ │ │ ├── flag8.png │ │ │ ├── flag9.png │ │ │ ├── flagcheckbox.png │ │ │ ├── floor_down.png │ │ │ ├── floor_up.png │ │ │ ├── zoom_in.png │ │ │ └── zoom_out.png │ │ ├── npcicons │ │ │ ├── icon_chat.png │ │ │ ├── icon_quest.png │ │ │ ├── icon_trade.png │ │ │ └── icon_tradequest.png │ │ ├── shields │ │ │ ├── shield_blue.png │ │ │ ├── shield_blue_not_shared.png │ │ │ ├── shield_blue_shared.png │ │ │ ├── shield_blue_white.png │ │ │ ├── shield_gray.png │ │ │ ├── shield_yellow.png │ │ │ ├── shield_yellow_not_shared.png │ │ │ ├── shield_yellow_shared.png │ │ │ └── shield_yellow_white.png │ │ ├── skull_socket.png │ │ ├── skulls │ │ │ ├── skull_black.png │ │ │ ├── skull_green.png │ │ │ ├── skull_orange.png │ │ │ ├── skull_red.png │ │ │ ├── skull_white.png │ │ │ └── skull_yellow.png │ │ ├── slots │ │ │ ├── ammo-blessed.png │ │ │ ├── ammo.png │ │ │ ├── back-blessed.png │ │ │ ├── back.png │ │ │ ├── body-blessed.png │ │ │ ├── body.png │ │ │ ├── feet-blessed.png │ │ │ ├── feet.png │ │ │ ├── finger-blessed.png │ │ │ ├── finger.png │ │ │ ├── head-blessed.png │ │ │ ├── head.png │ │ │ ├── left-hand-blessed.png │ │ │ ├── left-hand.png │ │ │ ├── legs-blessed.png │ │ │ ├── legs.png │ │ │ ├── neck-blessed.png │ │ │ ├── neck.png │ │ │ ├── purse.png │ │ │ ├── right-hand-blessed.png │ │ │ └── right-hand.png │ │ ├── spells │ │ │ ├── cooldowns.png │ │ │ └── defaultspells.png │ │ ├── states │ │ │ ├── bleeding.png │ │ │ ├── burning.png │ │ │ ├── cursed.png │ │ │ ├── dazzled.png │ │ │ ├── drowning.png │ │ │ ├── drunk.png │ │ │ ├── electrified.png │ │ │ ├── freezing.png │ │ │ ├── haste.png │ │ │ ├── hungry.png │ │ │ ├── logout_block.png │ │ │ ├── magic_shield.png │ │ │ ├── poisoned.png │ │ │ ├── protection_zone.png │ │ │ ├── protection_zone_block.png │ │ │ ├── slowed.png │ │ │ └── strengthened.png │ │ └── viplist │ │ │ ├── icons.png │ │ │ └── vipcheckbox.png │ ├── optionstab │ │ ├── audio.png │ │ ├── console.png │ │ ├── game.png │ │ └── graphics.png │ ├── topbuttons │ │ ├── audio.png │ │ ├── audio_mute.png │ │ ├── battle.png │ │ ├── combatcontrols.png │ │ ├── cooldowns.png │ │ ├── healthinfo.png │ │ ├── hotkeys.png │ │ ├── inventory.png │ │ ├── login.png │ │ ├── logout.png │ │ ├── minimap.png │ │ ├── modulemanager.png │ │ ├── motd.png │ │ ├── options.png │ │ ├── particles.png │ │ ├── questlog.png │ │ ├── skills.png │ │ ├── spelllist.png │ │ ├── terminal.png │ │ ├── unjustifiedpoints.png │ │ └── viplist.png │ └── ui │ │ ├── arrow_horizontal.png │ │ ├── arrow_vertical.png │ │ ├── button.png │ │ ├── button_popupmenu.png │ │ ├── button_rounded.png │ │ ├── button_square.png │ │ ├── button_top.png │ │ ├── button_top_blink.png │ │ ├── button_topgame.png │ │ ├── checkbox.png │ │ ├── colorbox.png │ │ ├── combobox.png │ │ ├── combobox_rounded.png │ │ ├── combobox_square.png │ │ ├── icon_add.png │ │ ├── item-blessed.png │ │ ├── item.png │ │ ├── menubox.png │ │ ├── miniwindow.png │ │ ├── miniwindow_buttons.png │ │ ├── panel_bottom.png │ │ ├── panel_container.png │ │ ├── panel_content.png │ │ ├── panel_flat.png │ │ ├── panel_lightflat.png │ │ ├── panel_map.png │ │ ├── panel_side.png │ │ ├── panel_top.png │ │ ├── progressbar.png │ │ ├── scrollbar.png │ │ ├── separator_horizontal.png │ │ ├── separator_vertical.png │ │ ├── spinbox.png │ │ ├── spinbox_down.png │ │ ├── spinbox_up.png │ │ ├── tabbutton_rounded.png │ │ ├── tabbutton_square.png │ │ ├── textedit.png │ │ ├── window.png │ │ └── window_headless.png ├── locales │ ├── de.lua │ ├── en.lua │ ├── es.lua │ ├── pl.lua │ ├── pt.lua │ └── sv.lua ├── particles │ ├── particle.png │ └── particles.otps ├── sounds │ └── startup.ogg ├── styles │ ├── 10-buttons.otui │ ├── 10-checkboxes.otui │ ├── 10-comboboxes.otui │ ├── 10-creaturebuttons.otui │ ├── 10-creatures.otui │ ├── 10-items.otui │ ├── 10-labels.otui │ ├── 10-listboxes.otui │ ├── 10-panels.otui │ ├── 10-progressbars.otui │ ├── 10-scrollbars.otui │ ├── 10-separators.otui │ ├── 10-splitters.otui │ ├── 10-textedits.otui │ ├── 10-windows.otui │ ├── 20-imageview.otui │ ├── 20-popupmenus.otui │ ├── 20-spinboxes.otui │ ├── 20-tabbars.otui │ ├── 20-tables.otui │ ├── 20-topmenu.otui │ ├── 30-inputboxes.otui │ ├── 30-messageboxes.otui │ ├── 30-minimap.otui │ └── 30-miniwindow.otui └── things │ └── .gitignore ├── init.lua ├── mods ├── .gitignore └── README.txt ├── modules ├── .project │ └── modules.sublime-project ├── client │ ├── client.lua │ └── client.otmod ├── client_background │ ├── background.lua │ ├── background.otmod │ └── background.otui ├── client_entergame │ ├── characterlist.lua │ ├── characterlist.otui │ ├── entergame.lua │ ├── entergame.otmod │ ├── entergame.otui │ └── waitinglist.otui ├── client_locales │ ├── locales.lua │ ├── locales.otmod │ ├── locales.otui │ └── neededtranslations.lua ├── client_modulemanager │ ├── modulemanager.lua │ ├── modulemanager.otmod │ └── modulemanager.otui ├── client_options │ ├── audio.otui │ ├── console.otui │ ├── game.otui │ ├── graphics.otui │ ├── options.lua │ ├── options.otmod │ └── options.otui ├── client_serverlist │ ├── addserver.lua │ ├── addserver.otui │ ├── serverlist.lua │ ├── serverlist.otmod │ └── serverlist.otui ├── client_styles │ ├── styles.lua │ └── styles.otmod ├── client_terminal │ ├── commands.lua │ ├── terminal.lua │ ├── terminal.otmod │ └── terminal.otui ├── client_topmenu │ ├── topmenu.lua │ ├── topmenu.otmod │ └── topmenu.otui ├── corelib │ ├── bitwise.lua │ ├── config.lua │ ├── const.lua │ ├── corelib.otmod │ ├── globals.lua │ ├── inputmessage.lua │ ├── keyboard.lua │ ├── math.lua │ ├── mouse.lua │ ├── net.lua │ ├── outputmessage.lua │ ├── settings.lua │ ├── string.lua │ ├── struct.lua │ ├── table.lua │ ├── ui │ │ ├── effects.lua │ │ ├── tooltip.lua │ │ ├── uibutton.lua │ │ ├── uicheckbox.lua │ │ ├── uicombobox.lua │ │ ├── uiimageview.lua │ │ ├── uiinputbox.lua │ │ ├── uilabel.lua │ │ ├── uimessagebox.lua │ │ ├── uiminiwindow.lua │ │ ├── uiminiwindowcontainer.lua │ │ ├── uimovabletabbar.lua │ │ ├── uipopupmenu.lua │ │ ├── uipopupscrollmenu.lua │ │ ├── uiprogressbar.lua │ │ ├── uiradiogroup.lua │ │ ├── uiresizeborder.lua │ │ ├── uiscrollarea.lua │ │ ├── uiscrollbar.lua │ │ ├── uispinbox.lua │ │ ├── uisplitter.lua │ │ ├── uitabbar.lua │ │ ├── uitable.lua │ │ ├── uitextedit.lua │ │ ├── uiwidget.lua │ │ └── uiwindow.lua │ └── util.lua ├── game_battle │ ├── battle.lua │ ├── battle.otmod │ ├── battle.otui │ └── battlebutton.otui ├── game_bugreport │ ├── bugreport.lua │ ├── bugreport.otmod │ └── bugreport.otui ├── game_combatcontrols │ ├── combatcontrols.lua │ ├── combatcontrols.otmod │ └── combatcontrols.otui ├── game_console │ ├── channelswindow.otui │ ├── communicationwindow.otui │ ├── console.lua │ ├── console.otmod │ ├── console.otui │ └── violationwindow.otui ├── game_containers │ ├── container.otui │ ├── containers.lua │ └── containers.otmod ├── game_cooldown │ ├── cooldown.lua │ ├── cooldown.otmod │ └── cooldown.otui ├── game_healthinfo │ ├── healthinfo.lua │ ├── healthinfo.otmod │ └── healthinfo.otui ├── game_hotkeys │ ├── hotkeys_manager.lua │ ├── hotkeys_manager.otmod │ └── hotkeys_manager.otui ├── game_interface │ ├── gameinterface.lua │ ├── gameinterface.otui │ ├── interface.otmod │ ├── styles │ │ └── countwindow.otui │ └── widgets │ │ ├── uigamemap.lua │ │ └── uiitem.lua ├── game_inventory │ ├── inventory.lua │ ├── inventory.otmod │ └── inventory.otui ├── game_market │ ├── market.lua │ ├── market.otmod │ ├── market.otui │ ├── marketoffer.lua │ ├── marketprotocol.lua │ ├── offerstatistic.lua │ └── ui │ │ ├── general │ │ ├── amountwindow.otui │ │ ├── marketbuttons.otui │ │ ├── marketcombobox.otui │ │ └── markettabs.otui │ │ ├── marketoffers.otui │ │ ├── marketoffers │ │ ├── browse.otui │ │ ├── itemdetails.otui │ │ ├── itemoffers.otui │ │ ├── itemstats.otui │ │ └── overview.otui │ │ ├── myoffers.otui │ │ └── myoffers │ │ ├── currentoffers.otui │ │ ├── itemoffers.otui │ │ └── offerhistory.otui ├── game_minimap │ ├── flagwindow.otui │ ├── minimap.lua │ ├── minimap.otmod │ └── minimap.otui ├── game_modaldialog │ ├── modaldialog.lua │ ├── modaldialog.otmod │ └── modaldialog.otui ├── game_npctrade │ ├── npctrade.lua │ ├── npctrade.otmod │ └── npctrade.otui ├── game_outfit │ ├── outfit.lua │ ├── outfit.otmod │ └── outfitwindow.otui ├── game_playerdeath │ ├── deathwindow.otui │ ├── playerdeath.lua │ └── playerdeath.otmod ├── game_playermount │ ├── playermount.lua │ └── playermount.otmod ├── game_playertrade │ ├── playertrade.lua │ ├── playertrade.otmod │ └── tradewindow.otui ├── game_questlog │ ├── questlinewindow.otui │ ├── questlog.lua │ ├── questlog.otmod │ └── questlogwindow.otui ├── game_ruleviolation │ ├── ruleviolation.lua │ ├── ruleviolation.otmod │ └── ruleviolation.otui ├── game_skills │ ├── skills.lua │ ├── skills.otmod │ └── skills.otui ├── game_spelllist │ ├── spelllist.lua │ ├── spelllist.otmod │ └── spelllist.otui ├── game_textmessage │ ├── textmessage.lua │ ├── textmessage.otmod │ └── textmessage.otui ├── game_textwindow │ ├── textwindow.lua │ ├── textwindow.otmod │ └── textwindow.otui ├── game_things │ ├── .gitignore │ ├── things.lua │ └── things.otmod ├── game_unjustifiedpoints │ ├── unjustifiedpoints.lua │ ├── unjustifiedpoints.otmod │ └── unjustifiedpoints.otui ├── game_viplist │ ├── addvip.otui │ ├── editvip.otui │ ├── viplist.lua │ ├── viplist.otmod │ └── viplist.otui └── gamelib │ ├── const.lua │ ├── creature.lua │ ├── game.lua │ ├── gamelib.otmod │ ├── market.lua │ ├── player.lua │ ├── position.lua │ ├── protocol.lua │ ├── protocolgame.lua │ ├── protocollogin.lua │ ├── spells.lua │ ├── textmessages.lua │ ├── thing.lua │ ├── ui │ ├── uicreaturebutton.lua │ └── uiminimap.lua │ └── util.lua ├── otclientrc.lua ├── src ├── client │ ├── CMakeLists.txt │ ├── animatedtext.cpp │ ├── animatedtext.h │ ├── animator.cpp │ ├── animator.h │ ├── client.cpp │ ├── client.h │ ├── const.h │ ├── container.cpp │ ├── container.h │ ├── creature.cpp │ ├── creature.h │ ├── creatures.cpp │ ├── creatures.h │ ├── declarations.h │ ├── effect.cpp │ ├── effect.h │ ├── game.cpp │ ├── game.h │ ├── global.h │ ├── houses.cpp │ ├── houses.h │ ├── item.cpp │ ├── item.h │ ├── itemtype.cpp │ ├── itemtype.h │ ├── lightview.cpp │ ├── lightview.h │ ├── localplayer.cpp │ ├── localplayer.h │ ├── luafunctions.cpp │ ├── luavaluecasts.cpp │ ├── luavaluecasts.h │ ├── map.cpp │ ├── map.h │ ├── mapio.cpp │ ├── mapview.cpp │ ├── mapview.h │ ├── minimap.cpp │ ├── minimap.h │ ├── missile.cpp │ ├── missile.h │ ├── outfit.cpp │ ├── outfit.h │ ├── player.cpp │ ├── player.h │ ├── position.h │ ├── protocolcodes.cpp │ ├── protocolcodes.h │ ├── protocolgame.cpp │ ├── protocolgame.h │ ├── protocolgameparse.cpp │ ├── protocolgamesend.cpp │ ├── shadermanager.cpp │ ├── shadermanager.h │ ├── spritemanager.cpp │ ├── spritemanager.h │ ├── statictext.cpp │ ├── statictext.h │ ├── thing.cpp │ ├── thing.h │ ├── thingtype.cpp │ ├── thingtype.h │ ├── thingtypemanager.cpp │ ├── thingtypemanager.h │ ├── tile.cpp │ ├── tile.h │ ├── towns.cpp │ ├── towns.h │ ├── uicreature.cpp │ ├── uicreature.h │ ├── uiitem.cpp │ ├── uiitem.h │ ├── uimap.cpp │ ├── uimap.h │ ├── uimapanchorlayout.cpp │ ├── uimapanchorlayout.h │ ├── uiminimap.cpp │ ├── uiminimap.h │ ├── uiprogressrect.cpp │ ├── uiprogressrect.h │ ├── uisprite.cpp │ └── uisprite.h ├── framework │ ├── CMakeLists.txt │ ├── cmake │ │ ├── FindDirectX.cmake │ │ ├── FindEGL.cmake │ │ ├── FindGLEW.cmake │ │ ├── FindGMP.cmake │ │ ├── FindICU.cmake │ │ ├── FindLua.cmake │ │ ├── FindLuaJIT.cmake │ │ ├── FindMySQL.cmake │ │ ├── FindOgg.cmake │ │ ├── FindOpenAL.cmake │ │ ├── FindOpenGLES1.cmake │ │ ├── FindOpenGLES2.cmake │ │ ├── FindOpenSSL.cmake │ │ ├── FindPhysFS.cmake │ │ ├── FindPkgMacros.cmake │ │ ├── FindVorbis.cmake │ │ ├── FindVorbisFile.cmake │ │ ├── FindZLIB.cmake │ │ ├── cotire.cmake │ │ ├── i486-mingw32_toolchain.cmake │ │ ├── i586-mingw32msvc_toolchain.cmake │ │ └── i686-w64-mingw32_toolchain.cmake │ ├── const.h │ ├── core │ │ ├── adaptativeframecounter.cpp │ │ ├── adaptativeframecounter.h │ │ ├── application.cpp │ │ ├── application.h │ │ ├── asyncdispatcher.cpp │ │ ├── asyncdispatcher.h │ │ ├── binarytree.cpp │ │ ├── binarytree.h │ │ ├── clock.cpp │ │ ├── clock.h │ │ ├── config.cpp │ │ ├── config.h │ │ ├── configmanager.cpp │ │ ├── configmanager.h │ │ ├── consoleapplication.cpp │ │ ├── consoleapplication.h │ │ ├── declarations.h │ │ ├── event.cpp │ │ ├── event.h │ │ ├── eventdispatcher.cpp │ │ ├── eventdispatcher.h │ │ ├── filestream.cpp │ │ ├── filestream.h │ │ ├── graphicalapplication.cpp │ │ ├── graphicalapplication.h │ │ ├── inputevent.h │ │ ├── logger.cpp │ │ ├── logger.h │ │ ├── module.cpp │ │ ├── module.h │ │ ├── modulemanager.cpp │ │ ├── modulemanager.h │ │ ├── resourcemanager.cpp │ │ ├── resourcemanager.h │ │ ├── scheduledevent.cpp │ │ ├── scheduledevent.h │ │ ├── timer.cpp │ │ └── timer.h │ ├── global.h │ ├── graphics │ │ ├── animatedtexture.cpp │ │ ├── animatedtexture.h │ │ ├── apngloader.cpp │ │ ├── apngloader.h │ │ ├── bitmapfont.cpp │ │ ├── bitmapfont.h │ │ ├── cachedtext.cpp │ │ ├── cachedtext.h │ │ ├── coordsbuffer.cpp │ │ ├── coordsbuffer.h │ │ ├── declarations.h │ │ ├── fontmanager.cpp │ │ ├── fontmanager.h │ │ ├── framebuffer.cpp │ │ ├── framebuffer.h │ │ ├── framebuffermanager.cpp │ │ ├── framebuffermanager.h │ │ ├── glutil.h │ │ ├── graphics.cpp │ │ ├── graphics.h │ │ ├── hardwarebuffer.cpp │ │ ├── hardwarebuffer.h │ │ ├── image.cpp │ │ ├── image.h │ │ ├── ogl │ │ │ ├── painterogl.cpp │ │ │ ├── painterogl.h │ │ │ ├── painterogl1.cpp │ │ │ ├── painterogl1.h │ │ │ ├── painterogl2.cpp │ │ │ ├── painterogl2.h │ │ │ └── painterogl2_shadersources.h │ │ ├── painter.cpp │ │ ├── painter.h │ │ ├── paintershaderprogram.cpp │ │ ├── paintershaderprogram.h │ │ ├── particle.cpp │ │ ├── particle.h │ │ ├── particleaffector.cpp │ │ ├── particleaffector.h │ │ ├── particleeffect.cpp │ │ ├── particleeffect.h │ │ ├── particleemitter.cpp │ │ ├── particleemitter.h │ │ ├── particlemanager.cpp │ │ ├── particlemanager.h │ │ ├── particlesystem.cpp │ │ ├── particlesystem.h │ │ ├── particletype.cpp │ │ ├── particletype.h │ │ ├── shader.cpp │ │ ├── shader.h │ │ ├── shaderprogram.cpp │ │ ├── shaderprogram.h │ │ ├── texture.cpp │ │ ├── texture.h │ │ ├── texturemanager.cpp │ │ ├── texturemanager.h │ │ └── vertexarray.h │ ├── input │ │ ├── mouse.cpp │ │ └── mouse.h │ ├── luaengine │ │ ├── declarations.h │ │ ├── lbitlib.cpp │ │ ├── lbitlib.h │ │ ├── luabinder.h │ │ ├── luaexception.cpp │ │ ├── luaexception.h │ │ ├── luainterface.cpp │ │ ├── luainterface.h │ │ ├── luaobject.cpp │ │ ├── luaobject.h │ │ ├── luavaluecasts.cpp │ │ └── luavaluecasts.h │ ├── luafunctions.cpp │ ├── net │ │ ├── connection.cpp │ │ ├── connection.h │ │ ├── declarations.h │ │ ├── inputmessage.cpp │ │ ├── inputmessage.h │ │ ├── outputmessage.cpp │ │ ├── outputmessage.h │ │ ├── protocol.cpp │ │ ├── protocol.h │ │ ├── protocolhttp.cpp │ │ ├── protocolhttp.h │ │ ├── server.cpp │ │ └── server.h │ ├── otml │ │ ├── declarations.h │ │ ├── otml.h │ │ ├── otmldocument.cpp │ │ ├── otmldocument.h │ │ ├── otmlemitter.cpp │ │ ├── otmlemitter.h │ │ ├── otmlexception.cpp │ │ ├── otmlexception.h │ │ ├── otmlnode.cpp │ │ ├── otmlnode.h │ │ ├── otmlparser.cpp │ │ └── otmlparser.h │ ├── pch.h │ ├── platform │ │ ├── crashhandler.h │ │ ├── platform.cpp │ │ ├── platform.h │ │ ├── platformwindow.cpp │ │ ├── platformwindow.h │ │ ├── unixcrashhandler.cpp │ │ ├── unixplatform.cpp │ │ ├── win32crashhandler.cpp │ │ ├── win32platform.cpp │ │ ├── win32window.cpp │ │ ├── win32window.h │ │ ├── x11window.cpp │ │ └── x11window.h │ ├── sound │ │ ├── combinedsoundsource.cpp │ │ ├── combinedsoundsource.h │ │ ├── declarations.h │ │ ├── oggsoundfile.cpp │ │ ├── oggsoundfile.h │ │ ├── soundbuffer.cpp │ │ ├── soundbuffer.h │ │ ├── soundchannel.cpp │ │ ├── soundchannel.h │ │ ├── soundfile.cpp │ │ ├── soundfile.h │ │ ├── soundmanager.cpp │ │ ├── soundmanager.h │ │ ├── soundsource.cpp │ │ ├── soundsource.h │ │ ├── streamsoundsource.cpp │ │ └── streamsoundsource.h │ ├── sql │ │ ├── database.cpp │ │ ├── database.h │ │ ├── declarations.h │ │ ├── mysql.cpp │ │ └── mysql.h │ ├── stdext │ │ ├── any.h │ │ ├── boolean.h │ │ ├── cast.h │ │ ├── compiler.h │ │ ├── demangle.cpp │ │ ├── demangle.h │ │ ├── dumper.h │ │ ├── dynamic_storage.h │ │ ├── exception.h │ │ ├── format.h │ │ ├── math.cpp │ │ ├── math.h │ │ ├── net.cpp │ │ ├── net.h │ │ ├── packed_any.h │ │ ├── packed_storage.h │ │ ├── shared_object.h │ │ ├── shared_ptr.h │ │ ├── stdext.h │ │ ├── string.cpp │ │ ├── string.h │ │ ├── thread.h │ │ ├── time.cpp │ │ ├── time.h │ │ ├── traits.h │ │ └── types.h │ ├── ui │ │ ├── declarations.h │ │ ├── ui.h │ │ ├── uianchorlayout.cpp │ │ ├── uianchorlayout.h │ │ ├── uiboxlayout.cpp │ │ ├── uiboxlayout.h │ │ ├── uigridlayout.cpp │ │ ├── uigridlayout.h │ │ ├── uihorizontallayout.cpp │ │ ├── uihorizontallayout.h │ │ ├── uilayout.cpp │ │ ├── uilayout.h │ │ ├── uimanager.cpp │ │ ├── uimanager.h │ │ ├── uiparticles.cpp │ │ ├── uiparticles.h │ │ ├── uitextedit.cpp │ │ ├── uitextedit.h │ │ ├── uitranslator.cpp │ │ ├── uitranslator.h │ │ ├── uiverticallayout.cpp │ │ ├── uiverticallayout.h │ │ ├── uiwidget.cpp │ │ ├── uiwidget.h │ │ ├── uiwidgetbasestyle.cpp │ │ ├── uiwidgetimage.cpp │ │ └── uiwidgettext.cpp │ ├── util │ │ ├── color.cpp │ │ ├── color.h │ │ ├── crypt.cpp │ │ ├── crypt.h │ │ ├── databuffer.h │ │ ├── matrix.h │ │ ├── point.h │ │ ├── rect.h │ │ └── size.h │ └── xml │ │ ├── tinystr.cpp │ │ ├── tinystr.h │ │ ├── tinyxml.cpp │ │ ├── tinyxml.h │ │ ├── tinyxmlerror.cpp │ │ └── tinyxmlparser.cpp ├── main.cpp ├── otcicon.ico └── otcicon.rc ├── tools ├── gen_lang_template.sh ├── gen_needed_translations.sh ├── gimp-bitmap-generator │ └── generate_bitmap_font.py ├── katepart-syntax │ ├── README │ ├── lua.xml │ └── otml.xml ├── lua-binding-generator │ └── generate_lua_bindings.lua ├── make_snapshot.sh └── tfs_extendedopcode.patch └── vc14 ├── arch32.props ├── arch64.props ├── debug.props ├── otclient.sln ├── otclient.vcxproj ├── otclient.vcxproj.filters ├── register_otclient_boost_env.bat ├── register_otclient_sdk_env.bat ├── release.props └── settings.props /.dockerignore: -------------------------------------------------------------------------------- 1 | /build/ 2 | Dockerfile 3 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Normalize source code before commits 2 | *.lua eol=lf 3 | *.txt eol=lf 4 | *.ot* eol=lf 5 | *.cpp eol=lf 6 | *.h eol=lf 7 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | See https://github.com/edubart/otclient/graphs/contributors 2 | -------------------------------------------------------------------------------- /BUGS: -------------------------------------------------------------------------------- 1 | See https://github.com/edubart/otclient/issues 2 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu@sha256:b88f8848e9a1a4e4558ba7cfc4acc5879e1d0e7ac06401409062ad2627e6fb58 AS builder 2 | 3 | RUN apt-get update; \ 4 | apt-get install -y \ 5 | build-essential \ 6 | cmake \ 7 | git-core \ 8 | libboost-atomic1.65-dev \ 9 | libboost-chrono1.65-dev \ 10 | libboost-date-time1.65-dev \ 11 | libboost-filesystem1.65-dev \ 12 | libboost-system1.65-dev \ 13 | libboost-thread1.65-dev \ 14 | libglew-dev \ 15 | liblua5.1-0-dev \ 16 | libncurses5-dev \ 17 | libopenal-dev \ 18 | libssl-dev \ 19 | libvorbis-dev \ 20 | zlib1g-dev; \ 21 | apt-get clean && apt-get autoclean 22 | 23 | WORKDIR / 24 | RUN git clone --branch release-3.0.2 --depth 1 https://github.com/icculus/physfs.git 25 | WORKDIR /physfs/build/ 26 | RUN cmake .. 27 | RUN make -j$(nproc) 28 | RUN make install 29 | 30 | COPY ./src/ /otclient/src/. 31 | COPY CMakeLists.txt /otclient/. 32 | WORKDIR /otclient/build/ 33 | RUN cmake -DCMAKE_CXX_LINK_FLAGS=-no-pie -DCMAKE_BUILD_TYPE=Release .. 34 | RUN make -j$(nproc) 35 | 36 | FROM ubuntu@sha256:b88f8848e9a1a4e4558ba7cfc4acc5879e1d0e7ac06401409062ad2627e6fb58 37 | RUN apt-get update; \ 38 | apt-get install -y \ 39 | libglew2.0 \ 40 | libopenal1; \ 41 | apt-get clean && apt-get autoclean 42 | COPY --from=builder /otclient/build/otclient /otclient/bin/otclient 43 | COPY ./data/ /otclient/data/. 44 | COPY ./mods/ /otclient/mods/. 45 | COPY ./modules/ /otclient/modules/. 46 | COPY ./init.lua /otclient/. 47 | WORKDIR /otclient 48 | CMD ["./bin/otclient"] 49 | -------------------------------------------------------------------------------- /ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ### Before creating an issue, please ensure: 4 | - [ ] This is a bug in the software that resides in this repository, and not a 5 | support matter (use https://otland.net/forums/otclient.494/ for support) 6 | - [ ] This issue is reproducible without changes to the code in this repository 7 | 8 | ### Steps to reproduce (include any configuration/script required to reproduce) 9 | 1. 10 | 2. 11 | 3. 12 | 13 | ### Expected behaviour 14 | 15 | 16 | ### Actual behaviour 17 | 18 | 19 | ### Environment 20 | 23 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | OTClient is made available under the MIT License 2 | 3 | Copyright (c) 2010-2020 OTClient 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /data/cursors/cursors.otml: -------------------------------------------------------------------------------- 1 | Cursors 2 | target: 3 | image: targetcursor 4 | hot-spot: 9 9 5 | horizontal: 6 | image: horizontalcursor 7 | hot-spot: 9 4 8 | vertical: 9 | image: verticalcursor 10 | hot-spot: 4 9 11 | text: 12 | image: textcursor 13 | hot-spot: 4 9 14 | -------------------------------------------------------------------------------- /data/cursors/horizontalcursor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/cursors/horizontalcursor.png -------------------------------------------------------------------------------- /data/cursors/targetcursor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/cursors/targetcursor.png -------------------------------------------------------------------------------- /data/cursors/textcursor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/cursors/textcursor.png -------------------------------------------------------------------------------- /data/cursors/verticalcursor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/cursors/verticalcursor.png -------------------------------------------------------------------------------- /data/fonts/sans-bold-16px.otfont: -------------------------------------------------------------------------------- 1 | Font 2 | name: sans-bold-16px 3 | texture: sans-bold-16px_cp1252 4 | height: 20 5 | glyph-size: 24 24 6 | space-width: 3 7 | -------------------------------------------------------------------------------- /data/fonts/sans-bold-16px_cp1252.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/fonts/sans-bold-16px_cp1252.png -------------------------------------------------------------------------------- /data/fonts/terminus-10px.otfont: -------------------------------------------------------------------------------- 1 | Font 2 | name: terminus-10px 3 | texture: terminus-10px 4 | height: 12 5 | y-offset: 0 6 | glyph-size: 16 16 7 | fixed-glyph-width: 6 8 | space-width: 6 9 | -------------------------------------------------------------------------------- /data/fonts/terminus-10px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/fonts/terminus-10px.png -------------------------------------------------------------------------------- /data/fonts/terminus-14px-bold.otfont: -------------------------------------------------------------------------------- 1 | Font 2 | name: terminus-14px-bold 3 | texture: terminus-14px-bold 4 | height: 16 5 | y-offset: 2 6 | glyph-size: 16 16 7 | fixed-glyph-width: 8 8 | space-width: 8 9 | -------------------------------------------------------------------------------- /data/fonts/terminus-14px-bold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/fonts/terminus-14px-bold.png -------------------------------------------------------------------------------- /data/fonts/verdana-11px-antialised.otfont: -------------------------------------------------------------------------------- 1 | Font 2 | name: verdana-11px-antialised 3 | texture: verdana-11px-antialised_cp1252 4 | height: 14 5 | glyph-size: 16 16 6 | space-width: 4 7 | default: true 8 | -------------------------------------------------------------------------------- /data/fonts/verdana-11px-antialised_cp1250.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/fonts/verdana-11px-antialised_cp1250.png -------------------------------------------------------------------------------- /data/fonts/verdana-11px-antialised_cp1252.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/fonts/verdana-11px-antialised_cp1252.png -------------------------------------------------------------------------------- /data/fonts/verdana-11px-monochrome.otfont: -------------------------------------------------------------------------------- 1 | Font 2 | name: verdana-11px-monochrome 3 | texture: verdana-11px-monochrome_cp1252 4 | height: 14 5 | glyph-size: 16 16 6 | space-width: 3 7 | -------------------------------------------------------------------------------- /data/fonts/verdana-11px-monochrome_cp1250.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/fonts/verdana-11px-monochrome_cp1250.png -------------------------------------------------------------------------------- /data/fonts/verdana-11px-monochrome_cp1252.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/fonts/verdana-11px-monochrome_cp1252.png -------------------------------------------------------------------------------- /data/fonts/verdana-11px-rounded.otfont: -------------------------------------------------------------------------------- 1 | Font 2 | name: verdana-11px-rounded 3 | texture: verdana-11px-rounded_cp1252 4 | height: 16 5 | glyph-size: 16 16 6 | y-offset: -2 7 | spacing: -1 -3 8 | space-width: 4 9 | -------------------------------------------------------------------------------- /data/fonts/verdana-11px-rounded_cp1250.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/fonts/verdana-11px-rounded_cp1250.png -------------------------------------------------------------------------------- /data/fonts/verdana-11px-rounded_cp1252.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/fonts/verdana-11px-rounded_cp1252.png -------------------------------------------------------------------------------- /data/images/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/background.png -------------------------------------------------------------------------------- /data/images/clienticon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/clienticon.png -------------------------------------------------------------------------------- /data/images/flags/de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/flags/de.png -------------------------------------------------------------------------------- /data/images/flags/en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/flags/en.png -------------------------------------------------------------------------------- /data/images/flags/es.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/flags/es.png -------------------------------------------------------------------------------- /data/images/flags/pl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/flags/pl.png -------------------------------------------------------------------------------- /data/images/flags/pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/flags/pt.png -------------------------------------------------------------------------------- /data/images/flags/sv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/flags/sv.png -------------------------------------------------------------------------------- /data/images/game/battle/battle_monsters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/battle/battle_monsters.png -------------------------------------------------------------------------------- /data/images/game/battle/battle_npcs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/battle/battle_npcs.png -------------------------------------------------------------------------------- /data/images/game/battle/battle_party.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/battle/battle_party.png -------------------------------------------------------------------------------- /data/images/game/battle/battle_players.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/battle/battle_players.png -------------------------------------------------------------------------------- /data/images/game/battle/battle_skulls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/battle/battle_skulls.png -------------------------------------------------------------------------------- /data/images/game/combatmodes/chasemode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/combatmodes/chasemode.png -------------------------------------------------------------------------------- /data/images/game/combatmodes/fightbalanced.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/combatmodes/fightbalanced.png -------------------------------------------------------------------------------- /data/images/game/combatmodes/fightdefensive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/combatmodes/fightdefensive.png -------------------------------------------------------------------------------- /data/images/game/combatmodes/fightoffensive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/combatmodes/fightoffensive.png -------------------------------------------------------------------------------- /data/images/game/combatmodes/mount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/combatmodes/mount.png -------------------------------------------------------------------------------- /data/images/game/combatmodes/redfistmode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/combatmodes/redfistmode.png -------------------------------------------------------------------------------- /data/images/game/combatmodes/safefight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/combatmodes/safefight.png -------------------------------------------------------------------------------- /data/images/game/combatmodes/whitedovemode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/combatmodes/whitedovemode.png -------------------------------------------------------------------------------- /data/images/game/combatmodes/whitehandmode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/combatmodes/whitehandmode.png -------------------------------------------------------------------------------- /data/images/game/combatmodes/yellowhandmode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/combatmodes/yellowhandmode.png -------------------------------------------------------------------------------- /data/images/game/console/channels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/console/channels.png -------------------------------------------------------------------------------- /data/images/game/console/clearchannel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/console/clearchannel.png -------------------------------------------------------------------------------- /data/images/game/console/closechannel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/console/closechannel.png -------------------------------------------------------------------------------- /data/images/game/console/ignore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/console/ignore.png -------------------------------------------------------------------------------- /data/images/game/console/leftarrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/console/leftarrow.png -------------------------------------------------------------------------------- /data/images/game/console/rightarrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/console/rightarrow.png -------------------------------------------------------------------------------- /data/images/game/console/say.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/console/say.png -------------------------------------------------------------------------------- /data/images/game/console/whisper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/console/whisper.png -------------------------------------------------------------------------------- /data/images/game/console/yell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/console/yell.png -------------------------------------------------------------------------------- /data/images/game/creaturetype/summon_other.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/creaturetype/summon_other.png -------------------------------------------------------------------------------- /data/images/game/creaturetype/summon_own.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/creaturetype/summon_own.png -------------------------------------------------------------------------------- /data/images/game/dangerous.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/dangerous.png -------------------------------------------------------------------------------- /data/images/game/emblems/emblem_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/emblems/emblem_blue.png -------------------------------------------------------------------------------- /data/images/game/emblems/emblem_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/emblems/emblem_green.png -------------------------------------------------------------------------------- /data/images/game/emblems/emblem_member.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/emblems/emblem_member.png -------------------------------------------------------------------------------- /data/images/game/emblems/emblem_other.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/emblems/emblem_other.png -------------------------------------------------------------------------------- /data/images/game/emblems/emblem_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/emblems/emblem_red.png -------------------------------------------------------------------------------- /data/images/game/minimap/cross.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/cross.png -------------------------------------------------------------------------------- /data/images/game/minimap/flag0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/flag0.png -------------------------------------------------------------------------------- /data/images/game/minimap/flag1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/flag1.png -------------------------------------------------------------------------------- /data/images/game/minimap/flag10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/flag10.png -------------------------------------------------------------------------------- /data/images/game/minimap/flag11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/flag11.png -------------------------------------------------------------------------------- /data/images/game/minimap/flag12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/flag12.png -------------------------------------------------------------------------------- /data/images/game/minimap/flag13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/flag13.png -------------------------------------------------------------------------------- /data/images/game/minimap/flag14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/flag14.png -------------------------------------------------------------------------------- /data/images/game/minimap/flag15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/flag15.png -------------------------------------------------------------------------------- /data/images/game/minimap/flag16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/flag16.png -------------------------------------------------------------------------------- /data/images/game/minimap/flag17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/flag17.png -------------------------------------------------------------------------------- /data/images/game/minimap/flag18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/flag18.png -------------------------------------------------------------------------------- /data/images/game/minimap/flag19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/flag19.png -------------------------------------------------------------------------------- /data/images/game/minimap/flag2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/flag2.png -------------------------------------------------------------------------------- /data/images/game/minimap/flag3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/flag3.png -------------------------------------------------------------------------------- /data/images/game/minimap/flag4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/flag4.png -------------------------------------------------------------------------------- /data/images/game/minimap/flag5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/flag5.png -------------------------------------------------------------------------------- /data/images/game/minimap/flag6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/flag6.png -------------------------------------------------------------------------------- /data/images/game/minimap/flag7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/flag7.png -------------------------------------------------------------------------------- /data/images/game/minimap/flag8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/flag8.png -------------------------------------------------------------------------------- /data/images/game/minimap/flag9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/flag9.png -------------------------------------------------------------------------------- /data/images/game/minimap/flagcheckbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/flagcheckbox.png -------------------------------------------------------------------------------- /data/images/game/minimap/floor_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/floor_down.png -------------------------------------------------------------------------------- /data/images/game/minimap/floor_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/floor_up.png -------------------------------------------------------------------------------- /data/images/game/minimap/zoom_in.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/zoom_in.png -------------------------------------------------------------------------------- /data/images/game/minimap/zoom_out.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/minimap/zoom_out.png -------------------------------------------------------------------------------- /data/images/game/npcicons/icon_chat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/npcicons/icon_chat.png -------------------------------------------------------------------------------- /data/images/game/npcicons/icon_quest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/npcicons/icon_quest.png -------------------------------------------------------------------------------- /data/images/game/npcicons/icon_trade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/npcicons/icon_trade.png -------------------------------------------------------------------------------- /data/images/game/npcicons/icon_tradequest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/npcicons/icon_tradequest.png -------------------------------------------------------------------------------- /data/images/game/shields/shield_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/shields/shield_blue.png -------------------------------------------------------------------------------- /data/images/game/shields/shield_blue_not_shared.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/shields/shield_blue_not_shared.png -------------------------------------------------------------------------------- /data/images/game/shields/shield_blue_shared.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/shields/shield_blue_shared.png -------------------------------------------------------------------------------- /data/images/game/shields/shield_blue_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/shields/shield_blue_white.png -------------------------------------------------------------------------------- /data/images/game/shields/shield_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/shields/shield_gray.png -------------------------------------------------------------------------------- /data/images/game/shields/shield_yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/shields/shield_yellow.png -------------------------------------------------------------------------------- /data/images/game/shields/shield_yellow_not_shared.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/shields/shield_yellow_not_shared.png -------------------------------------------------------------------------------- /data/images/game/shields/shield_yellow_shared.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/shields/shield_yellow_shared.png -------------------------------------------------------------------------------- /data/images/game/shields/shield_yellow_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/shields/shield_yellow_white.png -------------------------------------------------------------------------------- /data/images/game/skull_socket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/skull_socket.png -------------------------------------------------------------------------------- /data/images/game/skulls/skull_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/skulls/skull_black.png -------------------------------------------------------------------------------- /data/images/game/skulls/skull_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/skulls/skull_green.png -------------------------------------------------------------------------------- /data/images/game/skulls/skull_orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/skulls/skull_orange.png -------------------------------------------------------------------------------- /data/images/game/skulls/skull_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/skulls/skull_red.png -------------------------------------------------------------------------------- /data/images/game/skulls/skull_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/skulls/skull_white.png -------------------------------------------------------------------------------- /data/images/game/skulls/skull_yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/skulls/skull_yellow.png -------------------------------------------------------------------------------- /data/images/game/slots/ammo-blessed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/slots/ammo-blessed.png -------------------------------------------------------------------------------- /data/images/game/slots/ammo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/slots/ammo.png -------------------------------------------------------------------------------- /data/images/game/slots/back-blessed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/slots/back-blessed.png -------------------------------------------------------------------------------- /data/images/game/slots/back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/slots/back.png -------------------------------------------------------------------------------- /data/images/game/slots/body-blessed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/slots/body-blessed.png -------------------------------------------------------------------------------- /data/images/game/slots/body.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/slots/body.png -------------------------------------------------------------------------------- /data/images/game/slots/feet-blessed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/slots/feet-blessed.png -------------------------------------------------------------------------------- /data/images/game/slots/feet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/slots/feet.png -------------------------------------------------------------------------------- /data/images/game/slots/finger-blessed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/slots/finger-blessed.png -------------------------------------------------------------------------------- /data/images/game/slots/finger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/slots/finger.png -------------------------------------------------------------------------------- /data/images/game/slots/head-blessed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/slots/head-blessed.png -------------------------------------------------------------------------------- /data/images/game/slots/head.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/slots/head.png -------------------------------------------------------------------------------- /data/images/game/slots/left-hand-blessed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/slots/left-hand-blessed.png -------------------------------------------------------------------------------- /data/images/game/slots/left-hand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/slots/left-hand.png -------------------------------------------------------------------------------- /data/images/game/slots/legs-blessed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/slots/legs-blessed.png -------------------------------------------------------------------------------- /data/images/game/slots/legs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/slots/legs.png -------------------------------------------------------------------------------- /data/images/game/slots/neck-blessed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/slots/neck-blessed.png -------------------------------------------------------------------------------- /data/images/game/slots/neck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/slots/neck.png -------------------------------------------------------------------------------- /data/images/game/slots/purse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/slots/purse.png -------------------------------------------------------------------------------- /data/images/game/slots/right-hand-blessed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/slots/right-hand-blessed.png -------------------------------------------------------------------------------- /data/images/game/slots/right-hand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/slots/right-hand.png -------------------------------------------------------------------------------- /data/images/game/spells/cooldowns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/spells/cooldowns.png -------------------------------------------------------------------------------- /data/images/game/spells/defaultspells.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/spells/defaultspells.png -------------------------------------------------------------------------------- /data/images/game/states/bleeding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/states/bleeding.png -------------------------------------------------------------------------------- /data/images/game/states/burning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/states/burning.png -------------------------------------------------------------------------------- /data/images/game/states/cursed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/states/cursed.png -------------------------------------------------------------------------------- /data/images/game/states/dazzled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/states/dazzled.png -------------------------------------------------------------------------------- /data/images/game/states/drowning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/states/drowning.png -------------------------------------------------------------------------------- /data/images/game/states/drunk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/states/drunk.png -------------------------------------------------------------------------------- /data/images/game/states/electrified.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/states/electrified.png -------------------------------------------------------------------------------- /data/images/game/states/freezing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/states/freezing.png -------------------------------------------------------------------------------- /data/images/game/states/haste.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/states/haste.png -------------------------------------------------------------------------------- /data/images/game/states/hungry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/states/hungry.png -------------------------------------------------------------------------------- /data/images/game/states/logout_block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/states/logout_block.png -------------------------------------------------------------------------------- /data/images/game/states/magic_shield.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/states/magic_shield.png -------------------------------------------------------------------------------- /data/images/game/states/poisoned.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/states/poisoned.png -------------------------------------------------------------------------------- /data/images/game/states/protection_zone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/states/protection_zone.png -------------------------------------------------------------------------------- /data/images/game/states/protection_zone_block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/states/protection_zone_block.png -------------------------------------------------------------------------------- /data/images/game/states/slowed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/states/slowed.png -------------------------------------------------------------------------------- /data/images/game/states/strengthened.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/states/strengthened.png -------------------------------------------------------------------------------- /data/images/game/viplist/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/viplist/icons.png -------------------------------------------------------------------------------- /data/images/game/viplist/vipcheckbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/game/viplist/vipcheckbox.png -------------------------------------------------------------------------------- /data/images/optionstab/audio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/optionstab/audio.png -------------------------------------------------------------------------------- /data/images/optionstab/console.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/optionstab/console.png -------------------------------------------------------------------------------- /data/images/optionstab/game.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/optionstab/game.png -------------------------------------------------------------------------------- /data/images/optionstab/graphics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/optionstab/graphics.png -------------------------------------------------------------------------------- /data/images/topbuttons/audio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/topbuttons/audio.png -------------------------------------------------------------------------------- /data/images/topbuttons/audio_mute.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/topbuttons/audio_mute.png -------------------------------------------------------------------------------- /data/images/topbuttons/battle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/topbuttons/battle.png -------------------------------------------------------------------------------- /data/images/topbuttons/combatcontrols.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/topbuttons/combatcontrols.png -------------------------------------------------------------------------------- /data/images/topbuttons/cooldowns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/topbuttons/cooldowns.png -------------------------------------------------------------------------------- /data/images/topbuttons/healthinfo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/topbuttons/healthinfo.png -------------------------------------------------------------------------------- /data/images/topbuttons/hotkeys.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/topbuttons/hotkeys.png -------------------------------------------------------------------------------- /data/images/topbuttons/inventory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/topbuttons/inventory.png -------------------------------------------------------------------------------- /data/images/topbuttons/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/topbuttons/login.png -------------------------------------------------------------------------------- /data/images/topbuttons/logout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/topbuttons/logout.png -------------------------------------------------------------------------------- /data/images/topbuttons/minimap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/topbuttons/minimap.png -------------------------------------------------------------------------------- /data/images/topbuttons/modulemanager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/topbuttons/modulemanager.png -------------------------------------------------------------------------------- /data/images/topbuttons/motd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/topbuttons/motd.png -------------------------------------------------------------------------------- /data/images/topbuttons/options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/topbuttons/options.png -------------------------------------------------------------------------------- /data/images/topbuttons/particles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/topbuttons/particles.png -------------------------------------------------------------------------------- /data/images/topbuttons/questlog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/topbuttons/questlog.png -------------------------------------------------------------------------------- /data/images/topbuttons/skills.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/topbuttons/skills.png -------------------------------------------------------------------------------- /data/images/topbuttons/spelllist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/topbuttons/spelllist.png -------------------------------------------------------------------------------- /data/images/topbuttons/terminal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/topbuttons/terminal.png -------------------------------------------------------------------------------- /data/images/topbuttons/unjustifiedpoints.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/topbuttons/unjustifiedpoints.png -------------------------------------------------------------------------------- /data/images/topbuttons/viplist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/topbuttons/viplist.png -------------------------------------------------------------------------------- /data/images/ui/arrow_horizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/arrow_horizontal.png -------------------------------------------------------------------------------- /data/images/ui/arrow_vertical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/arrow_vertical.png -------------------------------------------------------------------------------- /data/images/ui/button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/button.png -------------------------------------------------------------------------------- /data/images/ui/button_popupmenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/button_popupmenu.png -------------------------------------------------------------------------------- /data/images/ui/button_rounded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/button_rounded.png -------------------------------------------------------------------------------- /data/images/ui/button_square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/button_square.png -------------------------------------------------------------------------------- /data/images/ui/button_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/button_top.png -------------------------------------------------------------------------------- /data/images/ui/button_top_blink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/button_top_blink.png -------------------------------------------------------------------------------- /data/images/ui/button_topgame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/button_topgame.png -------------------------------------------------------------------------------- /data/images/ui/checkbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/checkbox.png -------------------------------------------------------------------------------- /data/images/ui/colorbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/colorbox.png -------------------------------------------------------------------------------- /data/images/ui/combobox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/combobox.png -------------------------------------------------------------------------------- /data/images/ui/combobox_rounded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/combobox_rounded.png -------------------------------------------------------------------------------- /data/images/ui/combobox_square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/combobox_square.png -------------------------------------------------------------------------------- /data/images/ui/icon_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/icon_add.png -------------------------------------------------------------------------------- /data/images/ui/item-blessed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/item-blessed.png -------------------------------------------------------------------------------- /data/images/ui/item.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/item.png -------------------------------------------------------------------------------- /data/images/ui/menubox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/menubox.png -------------------------------------------------------------------------------- /data/images/ui/miniwindow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/miniwindow.png -------------------------------------------------------------------------------- /data/images/ui/miniwindow_buttons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/miniwindow_buttons.png -------------------------------------------------------------------------------- /data/images/ui/panel_bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/panel_bottom.png -------------------------------------------------------------------------------- /data/images/ui/panel_container.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/panel_container.png -------------------------------------------------------------------------------- /data/images/ui/panel_content.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/panel_content.png -------------------------------------------------------------------------------- /data/images/ui/panel_flat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/panel_flat.png -------------------------------------------------------------------------------- /data/images/ui/panel_lightflat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/panel_lightflat.png -------------------------------------------------------------------------------- /data/images/ui/panel_map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/panel_map.png -------------------------------------------------------------------------------- /data/images/ui/panel_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/panel_side.png -------------------------------------------------------------------------------- /data/images/ui/panel_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/panel_top.png -------------------------------------------------------------------------------- /data/images/ui/progressbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/progressbar.png -------------------------------------------------------------------------------- /data/images/ui/scrollbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/scrollbar.png -------------------------------------------------------------------------------- /data/images/ui/separator_horizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/separator_horizontal.png -------------------------------------------------------------------------------- /data/images/ui/separator_vertical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/separator_vertical.png -------------------------------------------------------------------------------- /data/images/ui/spinbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/spinbox.png -------------------------------------------------------------------------------- /data/images/ui/spinbox_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/spinbox_down.png -------------------------------------------------------------------------------- /data/images/ui/spinbox_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/spinbox_up.png -------------------------------------------------------------------------------- /data/images/ui/tabbutton_rounded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/tabbutton_rounded.png -------------------------------------------------------------------------------- /data/images/ui/tabbutton_square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/tabbutton_square.png -------------------------------------------------------------------------------- /data/images/ui/textedit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/textedit.png -------------------------------------------------------------------------------- /data/images/ui/window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/window.png -------------------------------------------------------------------------------- /data/images/ui/window_headless.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/images/ui/window_headless.png -------------------------------------------------------------------------------- /data/locales/de.lua: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/locales/de.lua -------------------------------------------------------------------------------- /data/locales/en.lua: -------------------------------------------------------------------------------- 1 | locale = { 2 | name = "en", 3 | charset = "cp1252", 4 | languageName = "English", 5 | 6 | formatNumbers = true, 7 | decimalSeperator = '.', 8 | thousandsSeperator = ',', 9 | 10 | -- translations are not needed because everything is already in english 11 | translation = {} 12 | } 13 | 14 | modules.client_locales.installLocale(locale) 15 | -------------------------------------------------------------------------------- /data/locales/es.lua: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/locales/es.lua -------------------------------------------------------------------------------- /data/locales/pt.lua: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/locales/pt.lua -------------------------------------------------------------------------------- /data/locales/sv.lua: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/locales/sv.lua -------------------------------------------------------------------------------- /data/particles/particle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/particles/particle.png -------------------------------------------------------------------------------- /data/particles/particles.otps: -------------------------------------------------------------------------------- 1 | Particle 2 | name: groupcooldown_particle 3 | 4 | duration: 0.4 5 | min-position-radius: 0 6 | max-position-radius: 32 7 | min-position-angle: 0 8 | max-position-angle: 360 9 | velocity: 10 10 | min-velocity-angle: 0 11 | max-velocity-angle: 360 12 | colors: #ffffff00 #ffffffff #fff13000 13 | colors-stops: 0 0.1 1 14 | size: 1 1 15 | texture: /particles/particle 16 | composition-mode: normal 17 | 18 | Effect 19 | name: groupcooldown-effect 20 | description: Effect for group cooldowns in the cooldown module 21 | 22 | System 23 | position: 0 0 24 | 25 | Emitter 26 | position: 0 0 27 | delay: 0.06 28 | duration: 0.2 29 | burst-rate: 350 30 | burst-count: 50 31 | particle-type: groupcooldown_particle 32 | 33 | AttractionAffector 34 | position: 0 0 35 | acceleration: 1000 36 | 37 | -------------------------------------------------------------------------------- /data/sounds/startup.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/data/sounds/startup.ogg -------------------------------------------------------------------------------- /data/styles/10-checkboxes.otui: -------------------------------------------------------------------------------- 1 | CheckBox < UICheckBox 2 | size: 16 16 3 | text-align: left 4 | text-offset: 18 1 5 | color: #dfdfdf 6 | image-color: #dfdfdfff 7 | image-rect: 0 0 15 15 8 | image-source: /images/ui/checkbox 9 | 10 | $hover !disabled: 11 | color: #ffffff 12 | 13 | $!checked: 14 | image-clip: 0 0 15 15 15 | 16 | $hover !checked: 17 | image-clip: 0 15 15 15 18 | 19 | $checked: 20 | image-clip: 0 30 15 15 21 | 22 | $hover checked: 23 | image-clip: 0 45 15 15 24 | 25 | $disabled: 26 | image-color: #dfdfdf88 27 | color: #dfdfdf88 28 | opacity: 0.8 29 | 30 | ColorBox < UICheckBox 31 | size: 16 16 32 | image-color: #dfdfdfff 33 | image-source: /images/ui/colorbox 34 | 35 | $checked: 36 | image-clip: 16 0 16 16 37 | 38 | $!checked: 39 | image-clip: 0 0 16 16 40 | 41 | ButtonBox < UICheckBox 42 | font: verdana-11px-antialised 43 | color: #dfdfdfff 44 | size: 106 23 45 | text-offset: 0 0 46 | text-align: center 47 | image-source: /images/ui/button 48 | image-color: #dfdfdf 49 | image-clip: 0 0 22 23 50 | image-border: 3 51 | 52 | $hover !disabled: 53 | image-clip: 0 23 22 23 54 | 55 | $checked: 56 | image-clip: 0 46 22 23 57 | color: #dfdfdf 58 | 59 | $disabled: 60 | color: #dfdfdf88 61 | image-color: #dfdfdf88 62 | 63 | ButtonBoxRounded < ButtonBox 64 | image-source: /images/ui/button_rounded -------------------------------------------------------------------------------- /data/styles/10-creaturebuttons.otui: -------------------------------------------------------------------------------- 1 | CreatureButton < UICreatureButton 2 | height: 20 3 | margin-bottom: 5 4 | 5 | UICreature 6 | id: creature 7 | size: 20 20 8 | anchors.left: parent.left 9 | anchors.top: parent.top 10 | phantom: true 11 | 12 | UIWidget 13 | id: spacer 14 | width: 5 15 | anchors.left: creature.right 16 | anchors.top: creature.top 17 | phantom: true 18 | 19 | UIWidget 20 | id: skull 21 | height: 11 22 | anchors.left: spacer.right 23 | anchors.top: spacer.top 24 | phantom: true 25 | 26 | UIWidget 27 | id: emblem 28 | height: 11 29 | anchors.left: skull.right 30 | anchors.top: creature.top 31 | phantom: true 32 | 33 | Label 34 | id: label 35 | anchors.left: emblem.right 36 | anchors.top: creature.top 37 | color: #888888 38 | margin-left: 2 39 | phantom: true 40 | 41 | LifeProgressBar 42 | id: lifeBar 43 | height: 5 44 | anchors.left: spacer.right 45 | anchors.right: parent.right 46 | anchors.top: label.bottom 47 | margin-top: 2 48 | phantom: true 49 | -------------------------------------------------------------------------------- /data/styles/10-creatures.otui: -------------------------------------------------------------------------------- 1 | Creature < UICreature 2 | size: 80 80 3 | padding: 1 4 | image-source: /images/ui/panel_flat 5 | image-border: 1 6 | border-width: 1 7 | border-color: alpha 8 | 9 | $checked: 10 | border-color: white 11 | -------------------------------------------------------------------------------- /data/styles/10-items.otui: -------------------------------------------------------------------------------- 1 | Item < UIItem 2 | size: 34 34 3 | padding: 1 4 | image-source: /images/ui/item 5 | font: verdana-11px-rounded 6 | border-color: white 7 | color: white 8 | 9 | $disabled: 10 | color: #646464 11 | -------------------------------------------------------------------------------- /data/styles/10-labels.otui: -------------------------------------------------------------------------------- 1 | Label < UILabel 2 | font: verdana-11px-antialised 3 | color: #dfdfdf 4 | 5 | $disabled: 6 | color: #dfdfdf88 7 | 8 | FlatLabel < UILabel 9 | font: verdana-11px-antialised 10 | color: #dfdfdf 11 | size: 86 20 12 | text-offset: 3 3 13 | image-source: /images/ui/panel_flat 14 | image-border: 1 15 | 16 | $disabled: 17 | color: #dfdfdf88 18 | 19 | MenuLabel < Label 20 | 21 | GameLabel < UILabel 22 | font: verdana-11px-antialised 23 | color: #dfdfdf 24 | -------------------------------------------------------------------------------- /data/styles/10-listboxes.otui: -------------------------------------------------------------------------------- 1 | TextList < UIScrollArea 2 | layout: verticalBox 3 | border-width: 1 4 | border-color: #272727 5 | background-color: #636363 6 | padding: 1 7 | auto-focus: none 8 | 9 | HorizontalList < UIScrollArea 10 | layout: horizontalBox 11 | border-width: 1 12 | border-color: #272727 13 | background-color: #636363 14 | 15 | VerticalList < UIScrollArea 16 | layout: verticalBox 17 | border-width: 1 18 | border-color: #272727 19 | background-color: #636363 -------------------------------------------------------------------------------- /data/styles/10-panels.otui: -------------------------------------------------------------------------------- 1 | Panel < UIWidget 2 | phantom: true 3 | auto-focus: first 4 | 5 | ScrollablePanel < UIScrollArea 6 | phantom: true 7 | auto-focus: first 8 | 9 | FlatPanel < Panel 10 | image-source: /images/ui/panel_flat 11 | image-border: 1 12 | 13 | ScrollableFlatPanel < ScrollablePanel 14 | image-source: /images/ui/panel_flat 15 | image-border: 1 16 | 17 | LightFlatPanel < Panel 18 | image-source: /images/ui/panel_lightflat 19 | image-border: 1 20 | -------------------------------------------------------------------------------- /data/styles/10-progressbars.otui: -------------------------------------------------------------------------------- 1 | ProgressBar < UIProgressBar 2 | height: 16 3 | background-color: red 4 | image-source: /images/ui/progressbar 5 | image-border: 1 6 | font: verdana-11px-rounded 7 | text-offset: 0 2 8 | 9 | $!on: 10 | visible: false 11 | margin-top: 0 12 | margin-bottom: 0 13 | height: 0 14 | 15 | LifeProgressBar < UIProgressBar 16 | height: 16 17 | background-color: green 18 | border: 1 black 19 | font: verdana-11px-rounded 20 | text-offset: 0 2 21 | margin: 2 22 | 23 | ProgressRect < UIProgressRect 24 | anchors.fill: parent 25 | phantom: true 26 | color: white 27 | background-color: #00000088 28 | font: verdana-11px-rounded 29 | -------------------------------------------------------------------------------- /data/styles/10-separators.otui: -------------------------------------------------------------------------------- 1 | HorizontalSeparator < UIWidget 2 | image-source: /images/ui/separator_horizontal 3 | image-border: 1 4 | height: 2 5 | phantom: true 6 | focusable: false 7 | 8 | VerticalSeparator < UIWidget 9 | image-source: /images/ui/separator_vertical 10 | image-border: 1 11 | width: 2 12 | phantom: true 13 | focusable: false 14 | -------------------------------------------------------------------------------- /data/styles/10-splitters.otui: -------------------------------------------------------------------------------- 1 | Splitter < UISplitter 2 | size: 4 4 3 | opacity: 0 4 | background: #ffffff44 5 | 6 | ResizeBorder < UIResizeBorder 7 | size: 4 4 8 | opacity: 0 9 | background: #ffffff44 -------------------------------------------------------------------------------- /data/styles/10-textedits.otui: -------------------------------------------------------------------------------- 1 | TextEdit < UITextEdit 2 | font: verdana-11px-antialised 3 | color: #272727 4 | size: 86 22 5 | text-offset: 0 4 6 | opacity: 1 7 | padding: 4 8 | image-source: /images/ui/textedit 9 | image-border: 1 10 | selection-color: #272727 11 | selection-background-color: #cccccc 12 | $disabled: 13 | color: #27272788 14 | opacity: 0.5 15 | 16 | PasswordTextEdit < TextEdit 17 | text-hidden: true 18 | 19 | MultilineTextEdit < TextEdit 20 | multiline: true 21 | -------------------------------------------------------------------------------- /data/styles/10-windows.otui: -------------------------------------------------------------------------------- 1 | Window < UIWindow 2 | font: verdana-11px-antialised 3 | size: 200 200 4 | opacity: 1 5 | color: #dfdfdf 6 | text-offset: 0 6 7 | text-align: top 8 | image-source: /images/ui/window 9 | image-border: 6 10 | image-border-top: 27 11 | padding-top: 36 12 | padding-left: 16 13 | padding-right: 16 14 | padding-bottom: 16 15 | 16 | $disabled: 17 | color: #dfdfdf88 18 | 19 | $dragging: 20 | opacity: 0.8 21 | 22 | HeadlessWindow < UIWindow 23 | image-source: /images/ui/window_headless 24 | image-border: 5 25 | padding: 5 26 | 27 | MainWindow < Window 28 | anchors.centerIn: parent -------------------------------------------------------------------------------- /data/styles/20-imageview.otui: -------------------------------------------------------------------------------- 1 | ImageView < UIImageView 2 | image-smooth: false 3 | image-fixed-ratio: true 4 | draggable: true 5 | border-width: 2 6 | border-color: #000000 7 | -------------------------------------------------------------------------------- /data/styles/20-spinboxes.otui: -------------------------------------------------------------------------------- 1 | SpinBox < TextEdit 2 | __class: UISpinBox 3 | text-align: left 4 | size: 86 22 5 | padding: 0 6 | padding-left: 2 7 | 8 | Button 9 | id: up 10 | size: 11 11 11 | image-source: /images/ui/spinbox_up 12 | image-border: 1 13 | image-clip: 0 0 10 10 14 | anchors.top: parent.top 15 | anchors.right: parent.right 16 | 17 | $hover: 18 | image-clip: 0 10 10 10 19 | $pressed: 20 | image-clip: 0 20 10 10 21 | 22 | Button 23 | id: down 24 | size: 11 11 25 | image-source: /images/ui/spinbox_down 26 | image-border: 1 27 | image-clip: 0 0 10 10 28 | anchors.bottom: parent.bottom 29 | anchors.right: parent.right 30 | 31 | $hover: 32 | image-clip: 0 10 10 10 33 | $pressed: 34 | image-clip: 0 20 10 10 35 | -------------------------------------------------------------------------------- /data/styles/20-tables.otui: -------------------------------------------------------------------------------- 1 | Table < UITable 2 | layout: verticalBox 3 | header-column-style: TableHeaderColumn 4 | header-row-style: TableHeaderRow 5 | column-style: TableColumn 6 | row-style: TableRow 7 | 8 | TableData < UIScrollArea 9 | layout: verticalBox 10 | 11 | TableRow < UITableRow 12 | layout: horizontalBox 13 | height: 10 14 | text-wrap: true 15 | focusable: true 16 | even-background-color: alpha 17 | odd-background-color: #00000022 18 | 19 | $focus: 20 | background-color: #294f6d 21 | color: #ffffff 22 | 23 | TableColumn < Label 24 | width: 30 25 | text-wrap: true 26 | focusable: false 27 | 28 | TableHeaderRow < Label 29 | layout: horizontalBox 30 | focusable: false 31 | height: 10 32 | text-wrap: true 33 | 34 | TableHeaderColumn < UITableHeaderColumn 35 | font: verdana-11px-antialised 36 | background-color: alpha 37 | color: #dfdfdfff 38 | height: 23 39 | focusable: true 40 | text-offset: 0 0 41 | image-source: /images/ui/button 42 | image-color: #dfdfdf 43 | image-clip: 0 0 22 23 44 | image-border: 3 45 | padding: 5 10 5 10 46 | enabled: false 47 | focusable: false 48 | 49 | $hover !disabled: 50 | image-clip: 0 23 22 23 51 | 52 | $pressed: 53 | image-clip: 0 46 22 23 54 | text-offset: 1 1 55 | 56 | $disabled: 57 | color: #dfdfdf88 58 | opacity: 0.8 59 | 60 | SortableTableHeaderColumn < TableHeaderColumn 61 | enabled: true 62 | focusable: true -------------------------------------------------------------------------------- /data/styles/20-topmenu.otui: -------------------------------------------------------------------------------- 1 | TopButton < UIButton 2 | size: 26 26 3 | image-source: /images/ui/button_top 4 | image-clip: 0 0 26 26 5 | image-border: 3 6 | image-color: #ffffffff 7 | icon-color: #ffffffff 8 | 9 | $on: 10 | image-source: /images/ui/button_top_blink 11 | 12 | $hover !disabled: 13 | image-color: #ffffff99 14 | image-clip: 26 0 26 26 15 | 16 | $pressed: 17 | image-clip: 52 0 26 26 18 | 19 | $disabled: 20 | image-color: #ffffff44 21 | icon-color: #ffffff44 22 | 23 | TopToggleButton < UIButton 24 | size: 26 26 25 | image-source: /images/ui/button_topgame 26 | image-clip: 26 0 26 26 27 | image-color: #ffffffff 28 | image-border: 3 29 | icon-color: #ffffffff 30 | 31 | $on: 32 | image-clip: 0 0 26 26 33 | image-color: #ffffffff 34 | icon-color: #ffffffff 35 | 36 | TopMenuButtonsPanel < Panel 37 | layout: 38 | type: horizontalBox 39 | spacing: 4 40 | fit-children: true 41 | padding: 6 4 42 | 43 | TopMenuPanel < Panel 44 | height: 36 45 | image-source: /images/ui/panel_top 46 | image-repeated: true 47 | focusable: false 48 | 49 | TopMenuFrameCounterLabel < Label 50 | font: verdana-11px-rounded 51 | color: white 52 | margin-top: 4 53 | margin-left: 5 54 | 55 | TopMenuPingLabel < Label 56 | font: verdana-11px-rounded 57 | -------------------------------------------------------------------------------- /data/styles/30-inputboxes.otui: -------------------------------------------------------------------------------- 1 | InputBoxLabel < Label 2 | fixed-size: true 3 | text-align: left 4 | InputBoxLineEdit < TextEdit 5 | InputBoxTextEdit < MultilineTextEdit 6 | text-wrap: true 7 | InputBoxSpinBox < SpinBox 8 | InputBoxCheckBox < CheckBox 9 | InputBoxComboBox < ComboBox 10 | InputBoxComboBoxPopupMenu < ComboBoxPopupMenu 11 | InputBoxComboBoxPopupMenuButton < ComboBoxPopupMenuButton 12 | InputBoxButton < Button 13 | margin-left: 10 14 | fixed-size: true 15 | 16 | InputBoxButtonsPanel < Panel 17 | height: 20 18 | margin-top: 4 19 | focusable: false 20 | layout: 21 | type: horizontalBox 22 | align-right: true 23 | 24 | InputBoxWindow < MainWindow 25 | __class: UIInputBox 26 | width: 260 27 | layout: 28 | type: verticalBox 29 | fit-children: true 30 | spacing: 2 -------------------------------------------------------------------------------- /data/styles/30-messageboxes.otui: -------------------------------------------------------------------------------- 1 | MessageBoxLabel < Label 2 | id: messageBoxLabel 3 | anchors.horizontalCenter: parent.horizontalCenter 4 | anchors.top: parent.top 5 | text-wrap: true 6 | text-auto-resize: true 7 | 8 | MessageBoxButtonHolder < UIWidget 9 | id: buttonHolder 10 | margin-top: 10 11 | anchors.bottom: parent.bottom 12 | 13 | MessageBoxButton < Button 14 | margin-left: 10 15 | width: 80 16 | -------------------------------------------------------------------------------- /data/things/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /mods/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !/README.txt 3 | !.gitignore 4 | -------------------------------------------------------------------------------- /mods/README.txt: -------------------------------------------------------------------------------- 1 | This folder work exactly as modules folder, however is intended to place only mods here. 2 | -------------------------------------------------------------------------------- /modules/.project/modules.sublime-project: -------------------------------------------------------------------------------- 1 | { 2 | "folders": 3 | [ 4 | { 5 | "path": "..", 6 | "folder_exclude_patterns": [".*", "*.*~"], 7 | "file_exclude_patterns": [".*", "*.*~"] 8 | } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /modules/client/client.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: client 3 | description: Initialize the client and setups its main window 4 | author: edubart 5 | website: https://github.com/edubart/otclient 6 | reloadable: false 7 | sandboxed: true 8 | scripts: [ client ] 9 | @onLoad: init() 10 | @onUnload: terminate() 11 | 12 | load-later: 13 | - client_styles 14 | - client_locales 15 | - client_topmenu 16 | - client_background 17 | - client_options 18 | - client_entergame 19 | - client_terminal 20 | - client_modulemanager 21 | - client_serverlist 22 | -------------------------------------------------------------------------------- /modules/client_background/background.lua: -------------------------------------------------------------------------------- 1 | -- private variables 2 | local background 3 | local clientVersionLabel 4 | 5 | -- public functions 6 | function init() 7 | background = g_ui.displayUI('background') 8 | background:lower() 9 | 10 | clientVersionLabel = background:getChildById('clientVersionLabel') 11 | clientVersionLabel:setText(g_app.getName() .. ' ' .. g_app.getVersion() .. '\n' .. 12 | 'Rev ' .. g_app.getBuildRevision() .. ' ('.. g_app.getBuildCommit() .. ')\n' .. 13 | 'Built on ' .. g_app.getBuildDate() .. '\n' .. g_app.getBuildCompiler()) 14 | 15 | if not g_game.isOnline() then 16 | addEvent(function() g_effects.fadeIn(clientVersionLabel, 1500) end) 17 | end 18 | 19 | connect(g_game, { onGameStart = hide }) 20 | connect(g_game, { onGameEnd = show }) 21 | end 22 | 23 | function terminate() 24 | disconnect(g_game, { onGameStart = hide }) 25 | disconnect(g_game, { onGameEnd = show }) 26 | 27 | g_effects.cancelFade(background:getChildById('clientVersionLabel')) 28 | background:destroy() 29 | 30 | Background = nil 31 | end 32 | 33 | function hide() 34 | background:hide() 35 | end 36 | 37 | function show() 38 | background:show() 39 | end 40 | 41 | function hideVersionLabel() 42 | background:getChildById('clientVersionLabel'):hide() 43 | end 44 | 45 | function setVersionText(text) 46 | clientVersionLabel:setText(text) 47 | end 48 | 49 | function getBackground() 50 | return background 51 | end -------------------------------------------------------------------------------- /modules/client_background/background.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: client_background 3 | description: Handles the background of the login screen 4 | author: edubart 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ background ] 8 | dependencies: [ client_topmenu ] 9 | @onLoad: init() 10 | @onUnload: terminate() 11 | -------------------------------------------------------------------------------- /modules/client_background/background.otui: -------------------------------------------------------------------------------- 1 | Panel 2 | id: background 3 | image-source: /images/background 4 | image-smooth: true 5 | image-fixed-ratio: true 6 | anchors.top: topMenu.bottom 7 | anchors.left: parent.left 8 | anchors.right: parent.right 9 | anchors.bottom: parent.bottom 10 | margin-top: 1 11 | focusable: false 12 | 13 | UILabel 14 | id: clientVersionLabel 15 | background-color: #00000099 16 | anchors.right: parent.right 17 | anchors.bottom: parent.bottom 18 | text-align: center 19 | text-auto-resize: true 20 | width: 120 21 | padding: 2 22 | color: #ffffff 23 | font: verdana-11px-monochrome 24 | -------------------------------------------------------------------------------- /modules/client_entergame/entergame.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: client_entergame 3 | description: Manages enter game and character list windows 4 | author: edubart 5 | website: https://github.com/edubart/otclient 6 | 7 | dependencies: 8 | - client_topmenu 9 | 10 | @onLoad: | 11 | dofile 'entergame' 12 | dofile 'characterlist' 13 | EnterGame.init() 14 | CharacterList.init() 15 | 16 | @onUnload: | 17 | EnterGame.terminate() 18 | CharacterList.terminate() 19 | -------------------------------------------------------------------------------- /modules/client_entergame/waitinglist.otui: -------------------------------------------------------------------------------- 1 | MainWindow 2 | id: waitingWindow 3 | !text: tr('Waiting List') 4 | size: 260 180 5 | @onEscape: CharacterList.cancelWait() 6 | 7 | Label 8 | id: infoLabel 9 | anchors.top: parent.top 10 | anchors.bottom: progressBar.top 11 | anchors.left: parent.left 12 | anchors.right: parent.right 13 | text-wrap: true 14 | 15 | ProgressBar 16 | id: progressBar 17 | height: 15 18 | background-color: #4444ff 19 | anchors.bottom: timeLabel.top 20 | anchors.left: parent.left 21 | anchors.right: parent.right 22 | margin-bottom: 10 23 | 24 | Label 25 | id: timeLabel 26 | anchors.bottom: separator.bottom 27 | anchors.left: parent.left 28 | anchors.right: parent.right 29 | margin-bottom: 10 30 | 31 | HorizontalSeparator 32 | id: separator 33 | anchors.left: parent.left 34 | anchors.right: parent.right 35 | anchors.bottom: next.top 36 | margin-bottom: 10 37 | 38 | Button 39 | id: buttonCancel 40 | !text: tr('Cancel') 41 | width: 64 42 | anchors.right: parent.right 43 | anchors.bottom: parent.bottom 44 | @onClick: CharacterList.cancelWait() -------------------------------------------------------------------------------- /modules/client_locales/locales.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: client_locales 3 | description: Translates texts to selected language 4 | author: baxnie, edubart 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ locales ] 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | -------------------------------------------------------------------------------- /modules/client_locales/locales.otui: -------------------------------------------------------------------------------- 1 | LocalesMainLabel < Label 2 | font: sans-bold-16px 3 | 4 | LocalesButton < UIWidget 5 | size: 96 96 6 | image-size: 96 96 7 | image-smooth: true 8 | text-offset: 0 96 9 | font: verdana-11px-antialised 10 | 11 | UIWindow 12 | id: localesWindow 13 | background-color: #000000 14 | opacity: 0.90 15 | clipping: true 16 | anchors.fill: parent 17 | 18 | LocalesMainLabel 19 | !text: tr('Select your language') 20 | text-auto-resize: true 21 | anchors.horizontalCenter: parent.horizontalCenter 22 | anchors.verticalCenter: parent.verticalCenter 23 | margin-top: -100 24 | 25 | Panel 26 | id: localesPanel 27 | margin-top: 50 28 | anchors.horizontalCenter: parent.horizontalCenter 29 | anchors.top: prev.bottom 30 | anchors.bottom: parent.bottom 31 | layout: 32 | type: grid 33 | cell-size: 96 128 34 | cell-spacing: 32 35 | flow: true 36 | -------------------------------------------------------------------------------- /modules/client_modulemanager/modulemanager.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: client_modulemanager 3 | description: Manage other modules 4 | author: edubart 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ modulemanager ] 8 | dependencies: [ client_topmenu ] 9 | @onLoad: init() 10 | @onUnload: terminate() 11 | -------------------------------------------------------------------------------- /modules/client_options/audio.otui: -------------------------------------------------------------------------------- 1 | Panel 2 | OptionCheckBox 3 | id: enableAudio 4 | !text: tr('Enable audio') 5 | 6 | OptionCheckBox 7 | id: enableMusicSound 8 | !text: tr('Enable music sound') 9 | 10 | Label 11 | id: musicSoundVolumeLabel 12 | !text: tr('Music volume: %d', 100) 13 | anchors.left: parent.left 14 | anchors.right: parent.right 15 | anchors.top: prev.bottom 16 | margin-top: 6 17 | @onSetup: | 18 | local value = modules.client_options.getOption('musicSoundVolume') 19 | self:setText(tr('Music volume: %d', value)) 20 | 21 | OptionScrollbar 22 | id: musicSoundVolume 23 | anchors.left: parent.left 24 | anchors.right: parent.right 25 | anchors.top: prev.bottom 26 | margin-top: 3 27 | minimum: 0 28 | maximum: 100 29 | -------------------------------------------------------------------------------- /modules/client_options/console.otui: -------------------------------------------------------------------------------- 1 | Panel 2 | OptionCheckBox 3 | id: showInfoMessagesInConsole 4 | !text: tr('Show info messages in console') 5 | 6 | OptionCheckBox 7 | id: showEventMessagesInConsole 8 | !text: tr('Show event messages in console') 9 | 10 | OptionCheckBox 11 | id: showStatusMessagesInConsole 12 | !text: tr('Show status messages in console') 13 | 14 | OptionCheckBox 15 | id: showTimestampsInConsole 16 | !text: tr('Show timestamps in console') 17 | 18 | OptionCheckBox 19 | id: showLevelsInConsole 20 | !text: tr('Show levels in console') 21 | 22 | OptionCheckBox 23 | id: showPrivateMessagesInConsole 24 | !text: tr('Show private messages in console') 25 | 26 | OptionCheckBox 27 | id: showPrivateMessagesOnScreen 28 | !text: tr('Show private messages on screen') -------------------------------------------------------------------------------- /modules/client_options/options.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: client_options 3 | description: Create the options window 4 | author: edubart, BeniS 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ options ] 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | -------------------------------------------------------------------------------- /modules/client_options/options.otui: -------------------------------------------------------------------------------- 1 | OptionCheckBox < CheckBox 2 | @onCheckChange: modules.client_options.setOption(self:getId(), self:isChecked()) 3 | height: 16 4 | 5 | $first: 6 | anchors.left: parent.left 7 | anchors.right: parent.right 8 | anchors.top: parent.top 9 | 10 | $!first: 11 | anchors.left: parent.left 12 | anchors.right: parent.right 13 | anchors.top: prev.bottom 14 | margin-top: 2 15 | 16 | OptionScrollbar < HorizontalScrollBar 17 | step: 1 18 | @onValueChange: modules.client_options.setOption(self:getId(), self:getValue()) 19 | 20 | MainWindow 21 | id: optionsWindow 22 | !text: tr('Options') 23 | size: 480 340 24 | 25 | @onEnter: modules.client_options.hide() 26 | @onEscape: modules.client_options.hide() 27 | 28 | TabBarVertical 29 | id: optionsTabBar 30 | anchors.top: parent.top 31 | anchors.left: parent.left 32 | anchors.bottom: parent.bottom 33 | 34 | Panel 35 | id: optionsTabContent 36 | anchors.top: optionsTabBar.top 37 | anchors.left: optionsTabBar.right 38 | anchors.right: parent.right 39 | anchors.bottom: optionsTabBar.bottom 40 | margin-left: 10 41 | 42 | Button 43 | !text: tr('Ok') 44 | width: 64 45 | anchors.right: parent.right 46 | anchors.bottom: parent.bottom 47 | @onClick: modules.client_options.hide() 48 | -------------------------------------------------------------------------------- /modules/client_serverlist/addserver.lua: -------------------------------------------------------------------------------- 1 | AddServer = {} 2 | 3 | -- private variables 4 | local addServerWindow = nil 5 | 6 | -- public functions 7 | function AddServer.init() 8 | addServerWindow = g_ui.displayUI('addserver') 9 | end 10 | 11 | function AddServer.terminate() 12 | addServerWindow:destroy() 13 | end 14 | 15 | function AddServer.add() 16 | local host = addServerWindow:getChildById('host'):getText() 17 | local port = addServerWindow:getChildById('port'):getText() 18 | local protocol = addServerWindow:getChildById('protocol'):getCurrentOption().text 19 | 20 | local added, error = ServerList.add(host, port, protocol) 21 | if not added then 22 | displayErrorBox(tr('Error'), tr(error)) 23 | else 24 | AddServer.hide() 25 | end 26 | end 27 | 28 | function AddServer.show() 29 | addServerWindow:show() 30 | addServerWindow:raise() 31 | addServerWindow:focus() 32 | addServerWindow:lock() 33 | end 34 | 35 | function AddServer.hide() 36 | addServerWindow:hide() 37 | addServerWindow:unlock() 38 | end -------------------------------------------------------------------------------- /modules/client_serverlist/serverlist.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: client_serverlist 3 | description: Manages a server list of previously entered servers 4 | author: BeniS 5 | website: https://github.com/edubart/otclient 6 | 7 | dependencies: 8 | - client_entergame 9 | 10 | @onLoad: | 11 | dofile 'serverlist' 12 | dofile 'addserver' 13 | ServerList.init() 14 | AddServer.init() 15 | 16 | @onUnload: | 17 | ServerList.terminate() 18 | AddServer.terminate() 19 | -------------------------------------------------------------------------------- /modules/client_styles/styles.lua: -------------------------------------------------------------------------------- 1 | function init() 2 | local files 3 | files = g_resources.listDirectoryFiles('/styles') 4 | for _,file in pairs(files) do 5 | if g_resources.isFileType(file, 'otui') then 6 | g_ui.importStyle('/styles/' .. file) 7 | end 8 | end 9 | 10 | files = g_resources.listDirectoryFiles('/fonts') 11 | for _,file in pairs(files) do 12 | if g_resources.isFileType(file, 'otfont') then 13 | g_fonts.importFont('/fonts/' .. file) 14 | end 15 | end 16 | 17 | files = g_resources.listDirectoryFiles('/particles') 18 | for _,file in pairs(files) do 19 | if g_resources.isFileType(file, 'otps')then 20 | g_particles.importParticle('/particles/' .. file) 21 | end 22 | end 23 | 24 | g_mouse.loadCursors('/cursors/cursors') 25 | end 26 | 27 | function terminate() 28 | end 29 | 30 | -------------------------------------------------------------------------------- /modules/client_styles/styles.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: client_styles 3 | description: Load client fonts and styles 4 | author: edubart 5 | website: https://github.com/edubart/otclient 6 | scripts: [ styles ] 7 | sandboxed: true 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | -------------------------------------------------------------------------------- /modules/client_terminal/terminal.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: client_terminal 3 | description: Terminal for executing lua functions 4 | author: edubart 5 | website: https://github.com/edubart/otclient 6 | scripts: [ terminal ] 7 | sandboxed: true 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | -------------------------------------------------------------------------------- /modules/client_topmenu/topmenu.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: client_topmenu 3 | description: Create the top menu 4 | author: edubart 5 | website: https://github.com/edubart/otclient 6 | scripts: [ topmenu ] 7 | sandboxed: true 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | 11 | -------------------------------------------------------------------------------- /modules/client_topmenu/topmenu.otui: -------------------------------------------------------------------------------- 1 | TopMenuPanel 2 | id: topMenu 3 | anchors.top: parent.top 4 | anchors.left: parent.left 5 | anchors.right: parent.right 6 | 7 | TopMenuButtonsPanel 8 | id: leftButtonsPanel 9 | anchors.top: parent.top 10 | anchors.bottom: parent.bottom 11 | anchors.left: parent.left 12 | 13 | TopMenuButtonsPanel 14 | id: leftGameButtonsPanel 15 | anchors.top: parent.top 16 | anchors.bottom: parent.bottom 17 | anchors.left: prev.right 18 | visible: false 19 | 20 | TopMenuFrameCounterLabel 21 | id: fpsLabel 22 | text-auto-resize: true 23 | anchors.top: parent.top 24 | anchors.left: leftGameButtonsPanel.right 25 | 26 | TopMenuPingLabel 27 | color: white 28 | id: pingLabel 29 | text-auto-resize: true 30 | anchors.top: fpsLabel.bottom 31 | anchors.left: fpsLabel.left 32 | 33 | TopMenuButtonsPanel 34 | id: rightButtonsPanel 35 | anchors.top: parent.top 36 | anchors.bottom: parent.bottom 37 | anchors.right: parent.right 38 | padding-left: 0 39 | 40 | TopMenuButtonsPanel 41 | id: rightGameButtonsPanel 42 | anchors.top: parent.top 43 | anchors.bottom: parent.bottom 44 | anchors.right: prev.left 45 | visible: false 46 | -------------------------------------------------------------------------------- /modules/corelib/bitwise.lua: -------------------------------------------------------------------------------- 1 | Bit = {} 2 | 3 | function Bit.bit(p) 4 | return 2 ^ p 5 | end 6 | 7 | function Bit.hasBit(x, p) 8 | return x % (p + p) >= p 9 | end 10 | 11 | function Bit.setbit(x, p) 12 | return Bit.hasBit(x, p) and x or x + p 13 | end 14 | 15 | function Bit.clearbit(x, p) 16 | return Bit.hasBit(x, p) and x - p or x 17 | end -------------------------------------------------------------------------------- /modules/corelib/corelib.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: corelib 3 | description: Contains core lua classes, functions and constants used by other modules 4 | author: OTClient team 5 | website: https://github.com/edubart/otclient 6 | reloadable: false 7 | 8 | @onLoad: | 9 | dofile 'math' 10 | dofile 'string' 11 | dofile 'table' 12 | dofile 'bitwise' 13 | dofile 'struct' 14 | 15 | dofile 'const' 16 | dofile 'util' 17 | dofile 'globals' 18 | dofile 'config' 19 | dofile 'settings' 20 | dofile 'keyboard' 21 | dofile 'mouse' 22 | dofile 'net' 23 | 24 | dofiles 'classes' 25 | dofiles 'ui' 26 | 27 | dofile 'inputmessage' 28 | dofile 'outputmessage' -------------------------------------------------------------------------------- /modules/corelib/globals.lua: -------------------------------------------------------------------------------- 1 | -- @docvars @{ 2 | 3 | -- root widget 4 | rootWidget = g_ui.getRootWidget() 5 | modules = package.loaded 6 | 7 | -- G is used as a global table to save variables in memory between reloads 8 | G = G or {} 9 | 10 | -- @} 11 | 12 | -- @docfuncs @{ 13 | 14 | function scheduleEvent(callback, delay) 15 | local event = g_dispatcher.scheduleEvent(callback, delay) 16 | -- must hold a reference to the callback, otherwise it would be collected 17 | event._callback = callback 18 | return event 19 | end 20 | 21 | function addEvent(callback, front) 22 | local event = g_dispatcher.addEvent(callback, front) 23 | -- must hold a reference to the callback, otherwise it would be collected 24 | event._callback = callback 25 | return event 26 | end 27 | 28 | function cycleEvent(callback, interval) 29 | local event = g_dispatcher.cycleEvent(callback, interval) 30 | -- must hold a reference to the callback, otherwise it would be collected 31 | event._callback = callback 32 | return event 33 | end 34 | 35 | function periodicalEvent(eventFunc, conditionFunc, delay, autoRepeatDelay) 36 | delay = delay or 30 37 | autoRepeatDelay = autoRepeatDelay or delay 38 | 39 | local func 40 | func = function() 41 | if conditionFunc and not conditionFunc() then 42 | func = nil 43 | return 44 | end 45 | eventFunc() 46 | scheduleEvent(func, delay) 47 | end 48 | 49 | scheduleEvent(function() 50 | func() 51 | end, autoRepeatDelay) 52 | end 53 | 54 | function removeEvent(event) 55 | if event then 56 | event:cancel() 57 | event._callback = nil 58 | end 59 | end 60 | 61 | -- @} -------------------------------------------------------------------------------- /modules/corelib/inputmessage.lua: -------------------------------------------------------------------------------- 1 | function InputMessage:getData() 2 | local dataType = self:getU8() 3 | if dataType == NetworkMessageTypes.Boolean then 4 | return numbertoboolean(self:getU8()) 5 | elseif dataType == NetworkMessageTypes.U8 then 6 | return self:getU8() 7 | elseif dataType == NetworkMessageTypes.U16 then 8 | return self:getU16() 9 | elseif dataType == NetworkMessageTypes.U32 then 10 | return self:getU32() 11 | elseif dataType == NetworkMessageTypes.U64 then 12 | return self:getU64() 13 | elseif dataType == NetworkMessageTypes.NumberString then 14 | return tonumber(self:getString()) 15 | elseif dataType == NetworkMessageTypes.String then 16 | return self:getString() 17 | elseif dataType == NetworkMessageTypes.Table then 18 | return self:getTable() 19 | else 20 | perror('Unknown data type ' .. dataType) 21 | end 22 | return nil 23 | end 24 | 25 | function InputMessage:getTable() 26 | local ret = {} 27 | local size = self:getU16() 28 | for i=1,size do 29 | local index = self:getData() 30 | local value = self:getData() 31 | ret[index] = value 32 | end 33 | return ret 34 | end 35 | 36 | function InputMessage:getColor() 37 | local color = {} 38 | color.r = self:getU8() 39 | color.g = self:getU8() 40 | color.b = self:getU8() 41 | color.a = self:getU8() 42 | return color 43 | end 44 | 45 | function InputMessage:getPosition() 46 | local position = {} 47 | position.x = self:getU16() 48 | position.y = self:getU16() 49 | position.z = self:getU8() 50 | return position 51 | end 52 | -------------------------------------------------------------------------------- /modules/corelib/math.lua: -------------------------------------------------------------------------------- 1 | -- @docclass math 2 | 3 | local U8 = 2^8 4 | local U16 = 2^16 5 | local U32 = 2^32 6 | local U64 = 2^64 7 | 8 | function math.round(num, idp) 9 | local mult = 10^(idp or 0) 10 | if num >= 0 then 11 | return math.floor(num * mult + 0.5) / mult 12 | else 13 | return math.ceil(num * mult - 0.5) / mult 14 | end 15 | end 16 | 17 | function math.isu8(num) 18 | return math.isinteger(num) and num >= 0 and num < U8 19 | end 20 | 21 | function math.isu16(num) 22 | return math.isinteger(num) and num >= U8 and num < U16 23 | end 24 | 25 | function math.isu32(num) 26 | return math.isinteger(num) and num >= U16 and num < U32 27 | end 28 | 29 | function math.isu64(num) 30 | return math.isinteger(num) and num >= U32 and num < U64 31 | end 32 | 33 | function math.isinteger(num) 34 | return ((type(num) == 'number') and (num == math.floor(num))) 35 | end 36 | -------------------------------------------------------------------------------- /modules/corelib/mouse.lua: -------------------------------------------------------------------------------- 1 | -- @docclass 2 | function g_mouse.bindAutoPress(widget, callback, delay, button) 3 | local button = button or MouseLeftButton 4 | connect(widget, { onMousePress = function(widget, mousePos, mouseButton) 5 | if mouseButton ~= button then 6 | return false 7 | end 8 | local startTime = g_clock.millis() 9 | callback(widget, mousePos, mouseButton, 0) 10 | periodicalEvent(function() 11 | callback(widget, g_window.getMousePosition(), mouseButton, g_clock.millis() - startTime) 12 | end, function() 13 | return g_mouse.isPressed(mouseButton) 14 | end, 30, delay) 15 | return true 16 | end }) 17 | end 18 | 19 | function g_mouse.bindPressMove(widget, callback) 20 | connect(widget, { onMouseMove = function(widget, mousePos, mouseMoved) 21 | if widget:isPressed() then 22 | callback(mousePos, mouseMoved) 23 | return true 24 | end 25 | end }) 26 | end 27 | 28 | function g_mouse.bindPress(widget, callback, button) 29 | connect(widget, { onMousePress = function(widget, mousePos, mouseButton) 30 | if not button or button == mouseButton then 31 | callback(mousePos, mouseButton) 32 | return true 33 | end 34 | return false 35 | end }) 36 | end 37 | -------------------------------------------------------------------------------- /modules/corelib/net.lua: -------------------------------------------------------------------------------- 1 | function translateNetworkError(errcode, connecting, errdesc) 2 | local text 3 | if errcode == 111 then 4 | text = tr('Connection refused, the server might be offline or restarting.\nPlease try again later.') 5 | elseif errcode == 110 then 6 | text = tr('Connection timed out. Either your network is failing or the server is offline.') 7 | elseif errcode == 1 then 8 | text = tr('Connection failed, the server address does not exist.') 9 | elseif connecting then 10 | text = tr('Connection failed.') 11 | else 12 | text = tr('Your connection has been lost.\nEither your network or the server went down.') 13 | end 14 | text = text .. ' ' .. tr('(ERROR %d)', errcode) 15 | return text 16 | end 17 | -------------------------------------------------------------------------------- /modules/corelib/settings.lua: -------------------------------------------------------------------------------- 1 | g_settings = makesingleton(g_configs.getSettings()) 2 | 3 | -- Reserved for future functionality 4 | -------------------------------------------------------------------------------- /modules/corelib/string.lua: -------------------------------------------------------------------------------- 1 | -- @docclass string 2 | 3 | function string:split(delim) 4 | local start = 1 5 | local results = {} 6 | while true do 7 | local pos = string.find(self, delim, start, true) 8 | if not pos then 9 | break 10 | end 11 | table.insert(results, string.sub(self, start, pos-1)) 12 | start = pos + string.len(delim) 13 | end 14 | table.insert(results, string.sub(self, start)) 15 | table.removevalue(results, '') 16 | return results 17 | end 18 | 19 | function string:starts(start) 20 | return string.sub(self, 1, #start) == start 21 | end 22 | 23 | function string:ends(test) 24 | return test =='' or string.sub(self,-string.len(test)) == test 25 | end 26 | 27 | function string:trim() 28 | return string.match(self, '^%s*(.*%S)') or '' 29 | end 30 | 31 | function string:explode(sep, limit) 32 | if type(sep) ~= 'string' or tostring(self):len() == 0 or sep:len() == 0 then 33 | return {} 34 | end 35 | 36 | local i, pos, tmp, t = 0, 1, "", {} 37 | for s, e in function() return string.find(self, sep, pos) end do 38 | tmp = self:sub(pos, s - 1):trim() 39 | table.insert(t, tmp) 40 | pos = e + 1 41 | 42 | i = i + 1 43 | if limit ~= nil and i == limit then 44 | break 45 | end 46 | end 47 | 48 | tmp = self:sub(pos):trim() 49 | table.insert(t, tmp) 50 | return t 51 | end 52 | 53 | function string:contains(str, checkCase, start, plain) 54 | if(not checkCase) then 55 | self = self:lower() 56 | str = str:lower() 57 | end 58 | return string.find(self, str, start and start or 1, plain == nil and true or false) 59 | end 60 | -------------------------------------------------------------------------------- /modules/corelib/ui/uibutton.lua: -------------------------------------------------------------------------------- 1 | -- @docclass 2 | UIButton = extends(UIWidget, "UIButton") 3 | 4 | function UIButton.create() 5 | local button = UIButton.internalCreate() 6 | button:setFocusable(false) 7 | return button 8 | end 9 | 10 | function UIButton:onMouseRelease(pos, button) 11 | return self:isPressed() 12 | end 13 | -------------------------------------------------------------------------------- /modules/corelib/ui/uicheckbox.lua: -------------------------------------------------------------------------------- 1 | -- @docclass 2 | UICheckBox = extends(UIWidget, "UICheckBox") 3 | 4 | function UICheckBox.create() 5 | local checkbox = UICheckBox.internalCreate() 6 | checkbox:setFocusable(false) 7 | checkbox:setTextAlign(AlignLeft) 8 | return checkbox 9 | end 10 | 11 | function UICheckBox:onClick() 12 | self:setChecked(not self:isChecked()) 13 | end 14 | -------------------------------------------------------------------------------- /modules/corelib/ui/uilabel.lua: -------------------------------------------------------------------------------- 1 | -- @docclass 2 | UILabel = extends(UIWidget, "UILabel") 3 | 4 | function UILabel.create() 5 | local label = UILabel.internalCreate() 6 | label:setPhantom(true) 7 | label:setFocusable(false) 8 | label:setTextAlign(AlignLeft) 9 | return label 10 | end 11 | -------------------------------------------------------------------------------- /modules/corelib/ui/uiwidget.lua: -------------------------------------------------------------------------------- 1 | -- @docclass UIWidget 2 | 3 | function UIWidget:setMargin(...) 4 | local params = {...} 5 | if #params == 1 then 6 | self:setMarginTop(params[1]) 7 | self:setMarginRight(params[1]) 8 | self:setMarginBottom(params[1]) 9 | self:setMarginLeft(params[1]) 10 | elseif #params == 2 then 11 | self:setMarginTop(params[1]) 12 | self:setMarginRight(params[2]) 13 | self:setMarginBottom(params[1]) 14 | self:setMarginLeft(params[2]) 15 | elseif #params == 4 then 16 | self:setMarginTop(params[1]) 17 | self:setMarginRight(params[2]) 18 | self:setMarginBottom(params[3]) 19 | self:setMarginLeft(params[4]) 20 | end 21 | end 22 | -------------------------------------------------------------------------------- /modules/corelib/ui/uiwindow.lua: -------------------------------------------------------------------------------- 1 | -- @docclass 2 | UIWindow = extends(UIWidget, "UIWindow") 3 | 4 | function UIWindow.create() 5 | local window = UIWindow.internalCreate() 6 | window:setTextAlign(AlignTopCenter) 7 | window:setDraggable(true) 8 | window:setAutoFocusPolicy(AutoFocusFirst) 9 | return window 10 | end 11 | 12 | function UIWindow:onKeyDown(keyCode, keyboardModifiers) 13 | if keyboardModifiers == KeyboardNoModifier then 14 | if keyCode == KeyEnter then 15 | signalcall(self.onEnter, self) 16 | elseif keyCode == KeyEscape then 17 | signalcall(self.onEscape, self) 18 | end 19 | end 20 | end 21 | 22 | function UIWindow:onFocusChange(focused) 23 | if focused then self:raise() end 24 | end 25 | 26 | function UIWindow:onDragEnter(mousePos) 27 | self:breakAnchors() 28 | self.movingReference = { x = mousePos.x - self:getX(), y = mousePos.y - self:getY() } 29 | return true 30 | end 31 | 32 | function UIWindow:onDragLeave(droppedWidget, mousePos) 33 | -- TODO: auto detect and reconnect anchors 34 | end 35 | 36 | function UIWindow:onDragMove(mousePos, mouseMoved) 37 | local pos = { x = mousePos.x - self.movingReference.x, y = mousePos.y - self.movingReference.y } 38 | self:setPosition(pos) 39 | self:bindRectToParent() 40 | end 41 | -------------------------------------------------------------------------------- /modules/game_battle/battle.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_battle 3 | description: Manage battle window 4 | author: andrefaramir, BeniS 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ battle ] 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | -------------------------------------------------------------------------------- /modules/game_battle/battlebutton.otui: -------------------------------------------------------------------------------- 1 | BattleButton < CreatureButton 2 | &isBattleButton: true -------------------------------------------------------------------------------- /modules/game_bugreport/bugreport.lua: -------------------------------------------------------------------------------- 1 | -- TODO: find another hotkey for this. Ctrl+Z will be reserved to undo on textedits. 2 | HOTKEY = 'Ctrl+Z' 3 | 4 | bugReportWindow = nil 5 | bugTextEdit = nil 6 | 7 | function init() 8 | g_ui.importStyle('bugreport') 9 | 10 | bugReportWindow = g_ui.createWidget('BugReportWindow', rootWidget) 11 | bugReportWindow:hide() 12 | 13 | bugTextEdit = bugReportWindow:getChildById('bugTextEdit') 14 | 15 | g_keyboard.bindKeyDown(HOTKEY, show) 16 | end 17 | 18 | function terminate() 19 | g_keyboard.unbindKeyDown(HOTKEY) 20 | bugReportWindow:destroy() 21 | end 22 | 23 | function doReport() 24 | g_game.reportBug(bugTextEdit:getText()) 25 | bugReportWindow:hide() 26 | modules.game_textmessage.displayGameMessage(tr('Bug report sent.')) 27 | end 28 | 29 | function show() 30 | if g_game.isOnline() then 31 | bugTextEdit:setText('') 32 | bugReportWindow:show() 33 | bugReportWindow:raise() 34 | bugReportWindow:focus() 35 | end 36 | end 37 | -------------------------------------------------------------------------------- /modules/game_bugreport/bugreport.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_bugreport 3 | description: Bug report interface (Ctrl+Z) 4 | author: edubart 5 | website: https://github.com/edubart/otclient 6 | scripts: [ bugreport ] 7 | sandboxed: true 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | -------------------------------------------------------------------------------- /modules/game_bugreport/bugreport.otui: -------------------------------------------------------------------------------- 1 | BugReportWindow < MainWindow 2 | !text: tr('Report Bug') 3 | size: 280 250 4 | @onEscape: self:hide() 5 | 6 | Label 7 | id: bugLabel 8 | !text: tr('Please use this dialog to only report bugs. Do not report rule violations here!') 9 | text-wrap: true 10 | text-auto-resize: true 11 | anchors.top: parent.top 12 | anchors.left: parent.left 13 | anchors.right: parent.right 14 | 15 | MultilineTextEdit 16 | id: bugTextEdit 17 | anchors.top: bugLabel.bottom 18 | anchors.left: parent.left 19 | anchors.right: parent.right 20 | anchors.bottom: sendButton.top 21 | margin-top: 4 22 | margin-bottom: 8 23 | 24 | Button 25 | id: sendButton 26 | !text: tr('Send') 27 | anchors.bottom: cancelButton.bottom 28 | anchors.right: cancelButton.left 29 | margin-right: 10 30 | width: 80 31 | &onClick: doReport 32 | 33 | Button 34 | id: cancelButton 35 | !text: tr('Cancel') 36 | anchors.bottom: parent.bottom 37 | anchors.right: parent.right 38 | width: 80 39 | @onClick: self:getParent():hide() 40 | -------------------------------------------------------------------------------- /modules/game_combatcontrols/combatcontrols.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_combatcontrols 3 | description: Combat controls window 4 | author: edubart, BeniS 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ combatcontrols ] 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | -------------------------------------------------------------------------------- /modules/game_console/channelswindow.otui: -------------------------------------------------------------------------------- 1 | ChannelListLabel < Label 2 | font: verdana-11px-monochrome 3 | background-color: alpha 4 | text-offset: 2 0 5 | focusable: true 6 | 7 | $focus: 8 | background-color: #ffffff22 9 | color: #ffffff 10 | 11 | MainWindow 12 | id: channelsWindow 13 | !text: tr('Channels') 14 | size: 250 238 15 | @onEscape: self:destroy() 16 | 17 | TextList 18 | id: channelList 19 | vertical-scrollbar: channelsScrollBar 20 | anchors.fill: parent 21 | anchors.bottom: next.top 22 | margin-bottom: 10 23 | padding: 1 24 | focusable: false 25 | 26 | Label 27 | id: openPrivateChannelWithLabel 28 | !text: tr('Open a private message channel') .. ':' 29 | anchors.left: parent.left 30 | anchors.right: parent.right 31 | anchors.bottom: next.top 32 | text-align: center 33 | margin-bottom: 2 34 | 35 | TextEdit 36 | id: openPrivateChannelWith 37 | anchors.left: parent.left 38 | anchors.right: parent.right 39 | anchors.bottom: next.top 40 | margin-bottom: 10 41 | 42 | Button 43 | id: buttonOpen 44 | !text: tr('Open') 45 | width: 64 46 | anchors.right: next.left 47 | anchors.bottom: parent.bottom 48 | margin-right: 10 49 | @onClick: self:getParent():onEnter() 50 | 51 | Button 52 | id: buttonCancel 53 | !text: tr('Cancel') 54 | width: 64 55 | anchors.right: parent.right 56 | anchors.bottom: parent.bottom 57 | @onClick: self:getParent():destroy() 58 | 59 | VerticalScrollBar 60 | id: channelsScrollBar 61 | anchors.top: channelList.top 62 | anchors.bottom: channelList.bottom 63 | anchors.right: channelList.right 64 | step: 14 65 | pixels-scroll: true 66 | -------------------------------------------------------------------------------- /modules/game_console/console.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_console 3 | description: Manage chat window 4 | author: edubart, andrefaramir, baxnie, sn4ake, BeniS 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ console ] 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | -------------------------------------------------------------------------------- /modules/game_console/violationwindow.otui: -------------------------------------------------------------------------------- 1 | MainWindow 2 | id: ignoreWindow 3 | !text: tr('Report Rule Violation') 4 | size: 300 240 5 | 6 | Label 7 | !text: tr('Please state the rule violation in one clear sentence and wait for a reply from a gamemaster. Please note that your message will disappear if you close the channel.') 8 | text-wrap: true 9 | text-auto-resize: true 10 | anchors.left: parent.left 11 | anchors.right: parent.right 12 | anchors.top: parent.top 13 | 14 | TextEdit 15 | id: text 16 | text-wrap: true 17 | multiline: true 18 | anchors.top: prev.bottom 19 | anchors.bottom: next.top 20 | anchors.left: parent.left 21 | anchors.right: parent.right 22 | margin: 8 0 23 | max-length: 255 24 | 25 | Button 26 | id: buttonOk 27 | !text: tr('Ok') 28 | width: 64 29 | anchors.right: next.left 30 | anchors.bottom: parent.bottom 31 | margin-right: 10 32 | @onClick: self:getParent():onEnter() 33 | 34 | Button 35 | id: buttonCancel 36 | !text: tr('Cancel') 37 | width: 64 38 | anchors.right: parent.right 39 | anchors.bottom: parent.bottom 40 | @onClick: self:getParent():onEscape() -------------------------------------------------------------------------------- /modules/game_containers/container.otui: -------------------------------------------------------------------------------- 1 | PageButton < Button 2 | size: 30 18 3 | margin: 1 4 | 5 | 6 | ContainerWindow < MiniWindow 7 | height: 150 8 | 9 | UIItem 10 | id: containerItemWidget 11 | virtual: true 12 | size: 16 16 13 | anchors.top: parent.top 14 | anchors.left: parent.left 15 | margin-top: 4 16 | margin-left: 4 17 | 18 | UIButton 19 | id: upButton 20 | anchors.top: minimizeButton.top 21 | anchors.right: minimizeButton.left 22 | margin-right: 3 23 | size: 14 14 24 | image-source: /images/ui/miniwindow_buttons 25 | image-clip: 42 0 14 14 26 | 27 | $hover: 28 | image-clip: 42 14 14 14 29 | 30 | $pressed: 31 | image-clip: 42 28 14 14 32 | 33 | Panel 34 | id: pagePanel 35 | anchors.left: parent.left 36 | anchors.right: parent.right 37 | anchors.top: miniwindowTopBar.bottom 38 | height: 20 39 | margin: 2 3 0 3 40 | background: #00000066 41 | visible: false 42 | 43 | Label 44 | id: pageLabel 45 | anchors.top: parent.top 46 | anchors.horizontalCenter: parent.horizontalCenter 47 | margin-top: 2 48 | text-auto-resize: true 49 | 50 | PageButton 51 | id: prevPageButton 52 | text: < 53 | anchors.top: parent.top 54 | anchors.left: parent.left 55 | 56 | PageButton 57 | id: nextPageButton 58 | text: > 59 | anchors.top: parent.top 60 | anchors.right: parent.right 61 | 62 | MiniWindowContents 63 | padding-right: 0 64 | layout: 65 | type: grid 66 | cell-size: 34 34 67 | flow: true 68 | -------------------------------------------------------------------------------- /modules/game_containers/containers.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_containers 3 | description: Manage containers 4 | author: edubart, baxnie 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [containers] 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | -------------------------------------------------------------------------------- /modules/game_cooldown/cooldown.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_cooldown 3 | description: Spellcooldowns 4 | author: OTClient team 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ cooldown ] 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | -------------------------------------------------------------------------------- /modules/game_healthinfo/healthinfo.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_healthinfo 3 | description: Displays health, mana points, soul points, and conditions 4 | author: edubart, BeniS 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ healthinfo ] 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | -------------------------------------------------------------------------------- /modules/game_hotkeys/hotkeys_manager.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_hotkeys 3 | description: Manage client hotkeys 4 | author: andrefaramir, BeniS 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ hotkeys_manager ] 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | -------------------------------------------------------------------------------- /modules/game_interface/interface.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_interface 3 | description: Create the game interface, where the ingame stuff starts 4 | author: OTClient team 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ widgets/uigamemap, widgets/uiitem, gameinterface ] 8 | load-later: 9 | - game_hotkeys 10 | - game_questlog 11 | - game_textmessage 12 | - game_console 13 | - game_outfit 14 | - game_healthinfo 15 | - game_skills 16 | - game_inventory 17 | - game_combatcontrols 18 | - game_containers 19 | - game_viplist 20 | - game_battle 21 | - game_minimap 22 | - game_npctrade 23 | - game_textwindow 24 | - game_playertrade 25 | - game_bugreport 26 | - game_playerdeath 27 | - game_playermount 28 | - game_ruleviolation 29 | - game_market 30 | - game_spelllist 31 | - game_cooldown 32 | - game_modaldialog 33 | - game_unjustifiedpoints 34 | @onLoad: init() 35 | @onUnload: terminate() 36 | -------------------------------------------------------------------------------- /modules/game_interface/styles/countwindow.otui: -------------------------------------------------------------------------------- 1 | CountWindow < MainWindow 2 | id: countWindow 3 | !text: tr('Move Stackable Item') 4 | size: 196 90 5 | 6 | SpinBox 7 | id: spinBox 8 | anchors.left: parent.left 9 | anchors.top: parent.top 10 | width: 1 11 | height: 1 12 | phantom: true 13 | margin-top: 2 14 | focusable: true 15 | 16 | Item 17 | id: item 18 | anchors.left: parent.left 19 | anchors.top: parent.top 20 | margin-top: 2 21 | margin-left: -4 22 | focusable: false 23 | virtual: true 24 | 25 | HorizontalScrollBar 26 | id: countScrollBar 27 | anchors.left: prev.right 28 | anchors.right: parent.right 29 | anchors.top: prev.top 30 | margin-left: 10 31 | margin-top: -2 32 | focusable: false 33 | 34 | Button 35 | id: buttonCancel 36 | !text: tr('Cancel') 37 | height: 20 38 | anchors.left: countScrollBar.horizontalCenter 39 | anchors.right: countScrollBar.right 40 | anchors.top: countScrollBar.bottom 41 | margin-top: 7 42 | focusable: false 43 | 44 | Button 45 | id: buttonOk 46 | !text: tr('Ok') 47 | height: 20 48 | anchors.right: countScrollBar.horizontalCenter 49 | anchors.left: countScrollBar.left 50 | anchors.top: countScrollBar.bottom 51 | margin-top: 7 52 | margin-right: 6 53 | focusable: false 54 | -------------------------------------------------------------------------------- /modules/game_inventory/inventory.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_inventory 3 | description: View local player equipments window 4 | author: baxnie, edubart, BeniS 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ inventory ] 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | -------------------------------------------------------------------------------- /modules/game_market/market.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_market 3 | description: Global item market system 4 | author: BeniS 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ offerstatistic, marketoffer, marketprotocol, market ] 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | -------------------------------------------------------------------------------- /modules/game_market/market.otui: -------------------------------------------------------------------------------- 1 | MarketWindow < MainWindow 2 | id: marketWindow 3 | !text: tr('Market') 4 | size: 700 530 5 | 6 | @onEscape: Market.close() 7 | 8 | // Main Panel Window 9 | 10 | MarketTabBar 11 | id: mainTabBar 12 | width: 164 13 | height: 25 14 | anchors.top: parent.top 15 | anchors.left: parent.left 16 | 17 | Panel 18 | id: mainTabContent 19 | anchors.top: prev.bottom 20 | anchors.left: parent.left 21 | anchors.right: parent.right 22 | anchors.bottom: parent.bottom 23 | padding: 3 24 | border-width: 1 25 | border-color: #000000 26 | margin-bottom: 20 27 | 28 | Label 29 | id: balanceLabel 30 | !text: tr('Balance') .. ':' 31 | font: verdana-11px-rounded 32 | text-offset: 0 2 33 | anchors.top: parent.top 34 | anchors.right: parent.right 35 | 36 | Button 37 | id: closeButton 38 | !text: tr('Close') 39 | anchors.top: mainTabContent.bottom 40 | anchors.horizontalCenter: mainTabContent.horizontalCenter 41 | margin-top: 5 42 | width: 110 43 | @onClick: Market.close() 44 | 45 | Button 46 | id: refreshOffersButton 47 | !text: tr('Refresh Offers') 48 | anchors.top: mainTabContent.bottom 49 | anchors.right: mainTabContent.right 50 | margin-top: 5 51 | width: 110 52 | @onClick: Market.refreshOffers() 53 | 54 | Button 55 | id: resetButton 56 | !text: tr('Reset Market') 57 | !tooltip: tr('Reset selection, filters & search') 58 | anchors.top: mainTabContent.bottom 59 | anchors.left: mainTabContent.left 60 | margin-top: 5 61 | width: 110 62 | @onClick: Market.reset() -------------------------------------------------------------------------------- /modules/game_market/ui/general/amountwindow.otui: -------------------------------------------------------------------------------- 1 | AmountWindow < MainWindow 2 | id: amountWindow 3 | !text: tr('Amount') 4 | size: 270 90 5 | 6 | Item 7 | id: item 8 | text-offset: 0 22 9 | text-align: right 10 | anchors.left: parent.left 11 | anchors.top: parent.top 12 | margin-top: 2 13 | margin-left: -4 14 | focusable: false 15 | virtual: true 16 | 17 | HorizontalScrollBar 18 | id: amountScrollBar 19 | anchors.left: prev.right 20 | anchors.right: parent.right 21 | anchors.top: prev.top 22 | margin-left: 10 23 | margin-top: -2 24 | 25 | Button 26 | id: buttonCancel 27 | !text: tr('Cancel') 28 | height: 20 29 | anchors.left: amountScrollBar.horizontalCenter 30 | anchors.right: amountScrollBar.right 31 | anchors.top: amountScrollBar.bottom 32 | margin-top: 7 33 | focusable: false 34 | 35 | Button 36 | id: buttonOk 37 | !text: tr('Ok') 38 | height: 20 39 | anchors.right: amountScrollBar.horizontalCenter 40 | anchors.left: amountScrollBar.left 41 | anchors.top: amountScrollBar.bottom 42 | margin-top: 7 43 | margin-right: 6 44 | focusable: false 45 | -------------------------------------------------------------------------------- /modules/game_market/ui/general/marketbuttons.otui: -------------------------------------------------------------------------------- 1 | MarketButtonBox < ButtonBoxRounded 2 | font: verdana-11px-rounded 3 | color: #f55e5ebb 4 | size: 106 22 5 | text-offset: 0 2 6 | text-align: center 7 | 8 | $checked: 9 | color: white 10 | 11 | $disabled: 12 | color: #666666ff 13 | image-color: #ffffff88 14 | -------------------------------------------------------------------------------- /modules/game_market/ui/general/marketcombobox.otui: -------------------------------------------------------------------------------- 1 | MarketComboBoxPopupMenuButton < ComboBoxRoundedPopupMenuButton 2 | height: 18 3 | font: verdana-11px-rounded 4 | text-offset: 2 2 5 | 6 | MarketComboBoxPopupMenuSeparator < UIWidget 7 | image-source: /images/combobox_rounded 8 | image-repeated: true 9 | image-clip: 1 59 89 1 10 | height: 1 11 | phantom: true 12 | 13 | MarketComboBoxPopupMenu < ComboBoxRoundedPopupMenu 14 | 15 | MarketComboBox < ComboBoxRounded 16 | font: verdana-11px-rounded 17 | size: 86 20 18 | text-offset: 3 2 19 | -------------------------------------------------------------------------------- /modules/game_market/ui/general/markettabs.otui: -------------------------------------------------------------------------------- 1 | MarketTabBar < TabBar 2 | MarketTabBarPanel < TabBarPanel 3 | MarketTabBarButton < TabBarButton 4 | size: 20 25 5 | font: verdana-11px-rounded 6 | text-offset: 0 2 7 | 8 | $!first: 9 | anchors.left: prev.right 10 | margin-left: 0 11 | 12 | $hover !checked: 13 | color: #ffffff 14 | 15 | $checked: 16 | color: #ffffff 17 | 18 | $on !checked: 19 | color: #f55e5e 20 | 21 | MarketRightTabBar < TabBar 22 | MarketRightTabBarPanel < TabBarPanel 23 | MarketRightTabBarButton < TabBarButton 24 | size: 20 25 25 | font: verdana-11px-rounded 26 | text-offset: 0 2 27 | color: #929292 28 | 29 | $first: 30 | anchors.right: parent.right 31 | anchors.left: none 32 | 33 | $!first: 34 | anchors.right: prev.left 35 | anchors.left: none 36 | 37 | $hover !checked: 38 | color: #ffffff 39 | 40 | $checked: 41 | color: #ffffff 42 | 43 | $on !checked: 44 | color: #f55e5e 45 | -------------------------------------------------------------------------------- /modules/game_market/ui/marketoffers/itemdetails.otui: -------------------------------------------------------------------------------- 1 | DetailsTableRow < TableRow 2 | font: verdana-11px-monochrome 3 | focusable: true 4 | color: #cccccc 5 | height: 45 6 | focusable: false 7 | padding: 2 8 | even-background-color: alpha 9 | odd-background-color: alpha 10 | 11 | DetailsTableColumn < TableColumn 12 | font: verdana-11px-monochrome 13 | background-color: alpha 14 | text-offset: 5 2 15 | color: #cccccc 16 | width: 100 17 | focusable: false 18 | 19 | Panel 20 | background-color: #22283399 21 | margin: 1 22 | 23 | Table 24 | id: detailsTable 25 | anchors.top: parent.top 26 | anchors.bottom: parent.bottom 27 | anchors.left: parent.left 28 | anchors.right: parent.right 29 | margin-top: 63 30 | margin-left: 6 31 | margin-bottom: 85 32 | margin-right: 6 33 | padding: 1 34 | focusable: false 35 | background-color: #222833 36 | border-width: 1 37 | border-color: #191f27 38 | table-data: detailsTableData 39 | row-style: DetailsTableRow 40 | column-style: DetailsTableColumn 41 | 42 | TableData 43 | id: detailsTableData 44 | anchors.top: detailsTable.top 45 | anchors.bottom: detailsTable.bottom 46 | anchors.left: detailsTable.left 47 | anchors.right: detailsTable.right 48 | vertical-scrollbar: detailsTableScrollBar 49 | 50 | VerticalScrollBar 51 | id: detailsTableScrollBar 52 | anchors.top: detailsTable.top 53 | anchors.bottom: detailsTable.bottom 54 | anchors.right: detailsTable.right 55 | step: 28 56 | pixels-scroll: true -------------------------------------------------------------------------------- /modules/game_market/ui/marketoffers/overview.otui: -------------------------------------------------------------------------------- 1 | Panel 2 | background-color: #22283399 3 | margin: 1 4 | 5 | Label 6 | !text: tr('Reserved for more functionality later.') 7 | anchors.top: parent.top 8 | anchors.left: parent.left 9 | anchors.right: parent.right 10 | margin-top: 6 11 | margin-left: 6 12 | margin-right: 6 13 | font: verdana-11px-rounded 14 | text-offset: 0 2 15 | height: 50 16 | text-wrap: true -------------------------------------------------------------------------------- /modules/game_market/ui/myoffers.otui: -------------------------------------------------------------------------------- 1 | Panel 2 | 3 | MarketTabBar 4 | id: offersTabBar 5 | width: 187 6 | height:25 7 | anchors.top: parent.top 8 | anchors.left: parent.left 9 | anchors.right: parent.right 10 | 11 | Panel 12 | id: offersTabContent 13 | anchors.top: prev.bottom 14 | anchors.left: prev.left 15 | anchors.right: prev.right 16 | anchors.bottom: parent.bottom 17 | -------------------------------------------------------------------------------- /modules/game_market/ui/myoffers/itemoffers.otui: -------------------------------------------------------------------------------- 1 | Panel 2 | background-color: #22283399 3 | margin: 1 4 | 5 | Label 6 | !text: tr('Item Offers') 7 | anchors.top: parent.top 8 | anchors.left: parent.left 9 | margin-left: 10 10 | -------------------------------------------------------------------------------- /modules/game_market/ui/myoffers/offerhistory.otui: -------------------------------------------------------------------------------- 1 | Panel 2 | background-color: #22283399 3 | margin: 1 4 | 5 | Label 6 | !text: tr('Offer History') 7 | anchors.top: parent.top 8 | anchors.left: parent.left 9 | margin-left: 10 10 | -------------------------------------------------------------------------------- /modules/game_minimap/minimap.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_minimap 3 | description: Manage minimap 4 | author: edubart, BeniS 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ minimap ] 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | -------------------------------------------------------------------------------- /modules/game_minimap/minimap.otui: -------------------------------------------------------------------------------- 1 | MiniWindow 2 | id: minimapWindow 3 | !text: tr('Minimap') 4 | height: 150 5 | icon: /images/topbuttons/minimap 6 | @onClose: modules.game_minimap.onMiniWindowClose() 7 | &save: true 8 | 9 | Label 10 | text: ? 11 | text-align: center 12 | phantom: false 13 | !tooltip: tr('Hold left mouse button to navigate\nScroll mouse middle button to zoom\nRight mouse button to create map marks\nPress Ctrl+Shift+M to view the entire game map') 14 | anchors.top: minimizeButton.top 15 | anchors.right: minimizeButton.left 16 | margin-right: 3 17 | size: 14 14 18 | 19 | MiniWindowContents 20 | Minimap 21 | id: minimap 22 | anchors.fill: parent 23 | 24 | ResizeBorder 25 | anchors.right: parent.right 26 | anchors.top: parent.top 27 | anchors.bottom: parent.bottom 28 | enabled: true 29 | -------------------------------------------------------------------------------- /modules/game_modaldialog/modaldialog.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_modaldialog 3 | description: Show and process modal dialogs 4 | author: Summ 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | dependencies: [ game_interface ] 8 | scripts: [ modaldialog ] 9 | @onLoad: init() 10 | @onUnload: terminate() 11 | -------------------------------------------------------------------------------- /modules/game_modaldialog/modaldialog.otui: -------------------------------------------------------------------------------- 1 | ChoiceListLabel < Label 2 | font: verdana-11px-monochrome 3 | background-color: alpha 4 | text-offset: 2 0 5 | focusable: true 6 | 7 | $focus: 8 | background-color: #00000055 9 | color: #ffffff 10 | 11 | ChoiceList < TextList 12 | id: choiceList 13 | vertical-scrollbar: choiceScrollBar 14 | anchors.fill: parent 15 | anchors.top: prev.bottom 16 | anchors.bottom: next.top 17 | margin-top: 4 18 | margin-bottom: 10 19 | focusable: false 20 | visible: false 21 | 22 | ChoiceScrollBar < VerticalScrollBar 23 | id: choiceScrollBar 24 | anchors.top: choiceList.top 25 | anchors.bottom: choiceList.bottom 26 | anchors.right: choiceList.right 27 | step: 14 28 | pixels-scroll: true 29 | visible: false 30 | 31 | ModalButton < Button 32 | text-auto-resize: true 33 | margin-top: 2 34 | margin-bottom: 2 35 | margin-left: 2 36 | 37 | $pressed: 38 | text-offset: 0 0 39 | 40 | ModalDialog < MainWindow 41 | id: modalDialog 42 | size: 280 97 43 | &minimumWidth: 200 44 | &maximumWidth: 600 45 | &minimumChoices: 4 46 | &maximumChoices: 10 47 | 48 | Label 49 | id: messageLabel 50 | anchors.top: parent.top 51 | anchors.left: parent.left 52 | text-align: left 53 | text-auto-resize: true 54 | text-wrap: true 55 | 56 | ChoiceList 57 | 58 | HorizontalSeparator 59 | anchors.left: parent.left 60 | anchors.right: parent.right 61 | anchors.bottom: next.top 62 | 63 | Panel 64 | id: buttonsPanel 65 | anchors.left: parent.left 66 | anchors.right: parent.right 67 | anchors.bottom: parent.bottom 68 | height: 24 69 | layout: horizontalBox 70 | align-right: true 71 | 72 | ChoiceScrollBar 73 | -------------------------------------------------------------------------------- /modules/game_npctrade/npctrade.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_npctrade 3 | description: NPC trade interface 4 | author: andrefaramir, baxnie 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ npctrade ] 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | -------------------------------------------------------------------------------- /modules/game_outfit/outfit.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_outfit 3 | description: Change local player outfit 4 | author: baxnie, edubart 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ outfit ] 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | -------------------------------------------------------------------------------- /modules/game_playerdeath/deathwindow.otui: -------------------------------------------------------------------------------- 1 | DeathWindow < MainWindow 2 | id: deathWindow 3 | !text: tr('You are dead') 4 | &baseWidth: 350 5 | &baseHeight: 15 6 | 7 | Label 8 | id: labelText 9 | width: 550 10 | height: 140 11 | anchors.left: parent.left 12 | anchors.top: parent.top 13 | margin-left: 10 14 | margin-top: 2 15 | 16 | Button 17 | id: buttonOk 18 | !text: tr('Ok') 19 | width: 64 20 | anchors.left: parent.left 21 | anchors.bottom: parent.bottom 22 | margin-left: 160 23 | 24 | Button 25 | id: buttonCancel 26 | !text: tr('Cancel') 27 | width: 64 28 | anchors.left: prev.right 29 | anchors.bottom: parent.bottom 30 | margin-left: 5 31 | -------------------------------------------------------------------------------- /modules/game_playerdeath/playerdeath.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_playerdeath 3 | description: Manage player deaths 4 | author: BeniS, edubart 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ playerdeath ] 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | -------------------------------------------------------------------------------- /modules/game_playermount/playermount.lua: -------------------------------------------------------------------------------- 1 | function init() 2 | connect(g_game, { 3 | onGameStart = online, 4 | onGameEnd = offline 5 | }) 6 | if g_game.isOnline() then online() end 7 | end 8 | 9 | function terminate() 10 | disconnect(g_game, { 11 | onGameStart = online, 12 | onGameEnd = offline 13 | }) 14 | offline() 15 | end 16 | 17 | function online() 18 | if g_game.getFeature(GamePlayerMounts) then 19 | g_keyboard.bindKeyDown('Ctrl+R', toggleMount) 20 | end 21 | end 22 | 23 | function offline() 24 | if g_game.getFeature(GamePlayerMounts) then 25 | g_keyboard.unbindKeyDown('Ctrl+R') 26 | end 27 | end 28 | 29 | function toggleMount() 30 | local player = g_game.getLocalPlayer() 31 | if player then 32 | player:toggleMount() 33 | end 34 | end 35 | 36 | function mount() 37 | local player = g_game.getLocalPlayer() 38 | if player then 39 | player:mount() 40 | end 41 | end 42 | 43 | function dismount() 44 | local player = g_game.getLocalPlayer() 45 | if player then 46 | player:dismount() 47 | end 48 | end 49 | -------------------------------------------------------------------------------- /modules/game_playermount/playermount.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_playermount 3 | description: Manage player mounts 4 | author: BeniS 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ playermount ] 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | -------------------------------------------------------------------------------- /modules/game_playertrade/playertrade.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_playertrade 3 | description: Allow to trade items with players 4 | author: edubart 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ playertrade ] 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | -------------------------------------------------------------------------------- /modules/game_questlog/questlinewindow.otui: -------------------------------------------------------------------------------- 1 | MissionLabel < Label 2 | font: verdana-11px-monochrome 3 | background-color: alpha 4 | text-offset: 2 0 5 | focusable: true 6 | 7 | $focus: 8 | background-color: #ffffff22 9 | color: #ffffff 10 | 11 | QuestLineWindow < MainWindow 12 | id: questLineWindow 13 | !text: tr('Quest Log') 14 | size: 500 400 15 | @onEscape: self:destroy() 16 | 17 | TextList 18 | id: missionList 19 | anchors.top: parent.top 20 | anchors.left: parent.left 21 | anchors.right: missionListScrollBar.left 22 | height: 100 23 | padding: 1 24 | focusable: false 25 | vertical-scrollbar: missionListScrollBar 26 | 27 | VerticalScrollBar 28 | id: missionListScrollBar 29 | anchors.top: parent.top 30 | anchors.right: parent.right 31 | height: 100 32 | step: 14 33 | pixels-scroll: true 34 | 35 | FlatLabel 36 | id: missionDescription 37 | anchors.top: missionList.bottom 38 | anchors.left: parent.left 39 | anchors.right: missionListScrollBar.right 40 | anchors.bottom: closeButton.top 41 | margin-bottom: 10 42 | margin-top: 10 43 | text-wrap: true 44 | 45 | Button 46 | id: closeButton 47 | anchors.bottom: parent.bottom 48 | anchors.right: parent.right 49 | !text: tr('Close') 50 | width: 90 51 | @onClick: self:getParent():destroy() 52 | -------------------------------------------------------------------------------- /modules/game_questlog/questlog.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_questlog 3 | description: View game quests status 4 | author: edubart 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ questlog ] 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | -------------------------------------------------------------------------------- /modules/game_questlog/questlogwindow.otui: -------------------------------------------------------------------------------- 1 | QuestLabel < Label 2 | font: verdana-11px-monochrome 3 | text-offset: 2 0 4 | focusable: true 5 | color: #aaaaaa 6 | background-color: alpha 7 | 8 | $on: 9 | color: #00aa00 10 | $!on: 11 | color: #aaaaaa 12 | 13 | $focus: 14 | background-color: #444444 15 | 16 | $on focus: 17 | color: #00ff00 18 | $!on focus: 19 | color: #ffffff 20 | 21 | QuestLogWindow < MainWindow 22 | id: questLogWindow 23 | !text: tr('Quest Log') 24 | size: 500 400 25 | @onEscape: self:destroy() 26 | 27 | TextList 28 | id: questList 29 | anchors.top: parent.top 30 | anchors.bottom: closeButton.top 31 | anchors.left: parent.left 32 | anchors.right: questListScrollBar.left 33 | margin-bottom: 10 34 | focusable: false 35 | vertical-scrollbar: questListScrollBar 36 | 37 | VerticalScrollBar 38 | id: questListScrollBar 39 | anchors.top: parent.top 40 | anchors.bottom: closeButton.top 41 | anchors.right: parent.right 42 | margin-bottom: 10 43 | step: 14 44 | pixels-scroll: true 45 | 46 | Button 47 | id: closeButton 48 | anchors.bottom: parent.bottom 49 | anchors.right: parent.right 50 | !text: tr('Close') 51 | width: 90 52 | @onClick: self:getParent():destroy() 53 | -------------------------------------------------------------------------------- /modules/game_ruleviolation/ruleviolation.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_ruleviolation 3 | description: Rule violation interface (Ctrl+Y) 4 | author: andrefaramir 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ ruleviolation ] 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | -------------------------------------------------------------------------------- /modules/game_skills/skills.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_skills 3 | description: Manage skills window 4 | author: baxnie, edubart 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ skills ] 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | dependencies: 11 | - game_interface 12 | -------------------------------------------------------------------------------- /modules/game_spelllist/spelllist.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_spelllist 3 | description: View available spells 4 | author: Summ, Edubart 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ spelllist ] 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | -------------------------------------------------------------------------------- /modules/game_textmessage/textmessage.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_textmessage 3 | description: Manage game text messages 4 | author: edubart 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ textmessage ] 8 | @onLoad: init() 9 | @onUnload: terminate() -------------------------------------------------------------------------------- /modules/game_textmessage/textmessage.otui: -------------------------------------------------------------------------------- 1 | TextMessageLabel < UILabel 2 | font: verdana-11px-rounded 3 | text-align: center 4 | text-wrap: true 5 | text-auto-resize: true 6 | margin-bottom: 2 7 | visible: false 8 | 9 | Panel 10 | anchors.fill: gameMapPanel 11 | anchors.bottom: gameMapPanel.bottom 12 | focusable: false 13 | 14 | Panel 15 | id: centerTextMessagePanel 16 | layout: 17 | type: verticalBox 18 | fit-children: true 19 | width: 360 20 | anchors.centerIn: parent 21 | 22 | TextMessageLabel 23 | id: highCenterLabel 24 | TextMessageLabel 25 | id: middleCenterLabel 26 | TextMessageLabel 27 | id: lowCenterLabel 28 | 29 | TextMessageLabel 30 | id: privateLabel 31 | anchors.top: parent.top 32 | anchors.bottom: centerTextMessagePanel.top 33 | anchors.horizontalCenter: parent.horizontalCenter 34 | text-auto-resize: false 35 | width: 275 36 | 37 | TextMessageLabel 38 | id: statusLabel 39 | anchors.bottom: parent.bottom 40 | anchors.left: parent.left 41 | anchors.right: parent.right 42 | -------------------------------------------------------------------------------- /modules/game_textwindow/textwindow.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_textwindow 3 | description: Allow to edit text books and lists 4 | author: edubart, BeniS 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | dependencies: [ game_interface ] 8 | scripts: [ textwindow ] 9 | @onLoad: init() 10 | @onUnload: terminate() 11 | -------------------------------------------------------------------------------- /modules/game_textwindow/textwindow.otui: -------------------------------------------------------------------------------- 1 | TextWindow < MainWindow 2 | id: textWindow 3 | size: 300 280 4 | 5 | Item 6 | id: textItem 7 | virtual: true 8 | anchors.top: parent.top 9 | anchors.left: parent.left 10 | 11 | Label 12 | id: description 13 | anchors.top: parent.top 14 | anchors.left: textItem.right 15 | anchors.right: parent.right 16 | margin-left: 8 17 | text-auto-resize: true 18 | text-align: left 19 | text-wrap: true 20 | 21 | MultilineTextEdit 22 | id: text 23 | anchors.top: textScroll.top 24 | anchors.left: parent.left 25 | anchors.right: textScroll.left 26 | anchors.bottom: textScroll.bottom 27 | vertical-scrollbar: textScroll 28 | text-wrap: true 29 | 30 | VerticalScrollBar 31 | id: textScroll 32 | anchors.top: description.bottom 33 | anchors.bottom: okButton.top 34 | anchors.right: parent.right 35 | margin-top: 10 36 | margin-bottom: 10 37 | step: 16 38 | pixels-scroll: true 39 | 40 | Button 41 | id: okButton 42 | !text: tr('Ok') 43 | anchors.bottom: parent.bottom 44 | anchors.right: next.left 45 | margin-right: 10 46 | width: 60 47 | 48 | Button 49 | id: cancelButton 50 | !text: tr('Cancel') 51 | anchors.bottom: parent.bottom 52 | anchors.right: parent.right 53 | width: 60 54 | -------------------------------------------------------------------------------- /modules/game_things/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /modules/game_things/things.lua: -------------------------------------------------------------------------------- 1 | filename = nil 2 | loaded = false 3 | 4 | function init() 5 | connect(g_game, { onClientVersionChange = load }) 6 | end 7 | 8 | function terminate() 9 | disconnect(g_game, { onClientVersionChange = load }) 10 | end 11 | 12 | function setFileName(name) 13 | filename = name 14 | end 15 | 16 | function isLoaded() 17 | return loaded 18 | end 19 | 20 | function load() 21 | local version = g_game.getClientVersion() 22 | 23 | local datPath, sprPath 24 | if filename then 25 | datPath = resolvepath('/things/' .. filename) 26 | sprPath = resolvepath('/things/' .. filename) 27 | else 28 | datPath = resolvepath('/things/' .. version .. '/Tibia') 29 | sprPath = resolvepath('/things/' .. version .. '/Tibia') 30 | end 31 | 32 | local errorMessage = '' 33 | if not g_things.loadDat(datPath) then 34 | errorMessage = errorMessage .. tr("Unable to load dat file, please place a valid dat in '%s'", datPath) .. '\n' 35 | end 36 | if not g_sprites.loadSpr(sprPath) then 37 | errorMessage = errorMessage .. tr("Unable to load spr file, please place a valid spr in '%s'", sprPath) 38 | end 39 | 40 | loaded = (errorMessage:len() == 0) 41 | 42 | if errorMessage:len() > 0 then 43 | local messageBox = displayErrorBox(tr('Error'), errorMessage) 44 | addEvent(function() messageBox:raise() messageBox:focus() end) 45 | 46 | disconnect(g_game, { onClientVersionChange = load }) 47 | g_game.setClientVersion(0) 48 | g_game.setProtocolVersion(0) 49 | connect(g_game, { onClientVersionChange = load }) 50 | end 51 | end 52 | -------------------------------------------------------------------------------- /modules/game_things/things.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_things 3 | description: Contains things spr and dat 4 | reloadable: false 5 | sandboxed: true 6 | scripts: [things] 7 | @onLoad: init() 8 | @onUnload: terminate() 9 | -------------------------------------------------------------------------------- /modules/game_unjustifiedpoints/unjustifiedpoints.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_unjustifiedpoints 3 | description: View unjustified points 4 | author: Summ 5 | sandboxed: true 6 | scripts: [ unjustifiedpoints ] 7 | @onLoad: init() 8 | @onUnload: terminate() 9 | -------------------------------------------------------------------------------- /modules/game_viplist/addvip.otui: -------------------------------------------------------------------------------- 1 | MainWindow 2 | size: 256 128 3 | !text: tr('Add to VIP list') 4 | @onEnter: modules.game_viplist.addVip() 5 | @onEscape: modules.game_viplist.destroyAddWindow() 6 | 7 | Label 8 | !text: tr('Please enter a character name') .. ':' 9 | anchors.top: parent.top 10 | anchors.left: parent.left 11 | anchors.right: parent.right 12 | 13 | TextEdit 14 | id: name 15 | anchors.top: prev.bottom 16 | anchors.left: parent.left 17 | anchors.right: parent.right 18 | margin-top: 4 19 | 20 | HorizontalSeparator 21 | anchors.left: parent.left 22 | anchors.right: parent.right 23 | anchors.bottom: next.top 24 | margin-bottom: 10 25 | 26 | Button 27 | !text: tr('Ok') 28 | width: 64 29 | anchors.right: next.left 30 | anchors.bottom: parent.bottom 31 | margin-right: 10 32 | @onClick: modules.game_viplist.addVip() 33 | 34 | Button 35 | !text: tr('Cancel') 36 | width: 64 37 | anchors.right: parent.right 38 | anchors.bottom: parent.bottom 39 | @onClick: modules.game_viplist.destroyAddWindow() 40 | -------------------------------------------------------------------------------- /modules/game_viplist/viplist.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: game_viplist 3 | description: Manage vip list window 4 | author: baxnie, edubart 5 | website: https://github.com/edubart/otclient 6 | sandboxed: true 7 | scripts: [ viplist ] 8 | @onLoad: init() 9 | @onUnload: terminate() 10 | -------------------------------------------------------------------------------- /modules/game_viplist/viplist.otui: -------------------------------------------------------------------------------- 1 | VipListLabel < GameLabel 2 | margin-top: 2 3 | text-offset: 16 0 4 | image-rect: 0 0 12 12 5 | image-clip: 0 0 12 12 6 | image-source: /images/game/viplist/icons 7 | font: verdana-11px-monochrome 8 | phantom: false 9 | 10 | $first: 11 | margin-top: 5 12 | 13 | MiniWindow 14 | id: vipWindow 15 | !text: tr('VIP List') 16 | height: 100 17 | icon: /images/topbuttons/viplist 18 | @onClose: modules.game_viplist.onMiniWindowClose() 19 | &save: true 20 | 21 | MiniWindowContents 22 | layout: verticalBox 23 | padding-left: 5 24 | padding-right: 5 25 | &onMousePress: modules.game_viplist.onVipListMousePress 26 | -------------------------------------------------------------------------------- /modules/gamelib/gamelib.otmod: -------------------------------------------------------------------------------- 1 | Module 2 | name: gamelib 3 | description: Contains game related classes 4 | author: OTClient team 5 | website: https://github.com/edubart/otclient 6 | 7 | dependencies: 8 | - game_things 9 | 10 | @onLoad: | 11 | dofile 'const' 12 | dofile 'util' 13 | dofile 'protocol' 14 | dofile 'protocollogin' 15 | dofile 'protocolgame' 16 | dofile 'position' 17 | dofile 'game' 18 | 19 | dofile 'creature' 20 | dofile 'player' 21 | dofile 'market' 22 | dofile 'textmessages' 23 | dofile 'thing' 24 | dofile 'spells' 25 | 26 | dofiles 'ui' 27 | -------------------------------------------------------------------------------- /modules/gamelib/position.lua: -------------------------------------------------------------------------------- 1 | Position = {} 2 | 3 | function Position.equals(pos1, pos2) 4 | return pos1.x == pos2.x and pos1.y == pos2.y and pos1.z == pos2.z 5 | end 6 | 7 | function Position.greaterThan(pos1, pos2, orEqualTo) 8 | if orEqualTo then 9 | return pos1.x >= pos2.x or pos1.y >= pos2.y or pos1.z >= pos2.z 10 | else 11 | return pos1.x > pos2.x or pos1.y > pos2.y or pos1.z > pos2.z 12 | end 13 | end 14 | 15 | function Position.lessThan(pos1, pos2, orEqualTo) 16 | if orEqualTo then 17 | return pos1.x <= pos2.x or pos1.y <= pos2.y or pos1.z <= pos2.z 18 | else 19 | return pos1.x < pos2.x or pos1.y < pos2.y or pos1.z < pos2.z 20 | end 21 | end 22 | 23 | function Position.isInRange(pos1, pos2, xRange, yRange) 24 | return math.abs(pos1.x-pos2.x) <= xRange and math.abs(pos1.y-pos2.y) <= yRange and pos1.z == pos2.z; 25 | end 26 | 27 | function Position.isValid(pos) 28 | return not (pos.x == 65535 and pos.y == 65535 and pos.z == 255) 29 | end 30 | 31 | function Position.distance(pos1, pos2) 32 | return math.sqrt(math.pow((pos2.x - pos1.x), 2) + math.pow((pos2.y - pos1.y), 2)) 33 | end 34 | 35 | function Position.manhattanDistance(pos1, pos2) 36 | return math.abs(pos2.x - pos1.x) + math.abs(pos2.y - pos1.y) 37 | end -------------------------------------------------------------------------------- /modules/gamelib/protocolgame.lua: -------------------------------------------------------------------------------- 1 | local opcodeCallbacks = {} 2 | local extendedCallbacks = {} 3 | 4 | function ProtocolGame:onOpcode(opcode, msg) 5 | for i, callback in pairs(opcodeCallbacks) do 6 | if i == opcode then 7 | callback(self, msg) 8 | return true 9 | end 10 | end 11 | return false 12 | end 13 | 14 | function ProtocolGame:onExtendedOpcode(opcode, buffer) 15 | local callback = extendedCallbacks[opcode] 16 | if callback then 17 | callback(self, opcode, buffer) 18 | end 19 | end 20 | 21 | function ProtocolGame.registerOpcode(opcode, callback) 22 | if opcodeCallbacks[opcode] then 23 | error('opcode ' .. opcode .. ' already registered will be overriden') 24 | end 25 | 26 | opcodeCallbacks[opcode] = callback 27 | end 28 | 29 | function ProtocolGame.unregisterOpcode(opcode) 30 | opcodeCallbacks[opcode] = nil 31 | end 32 | 33 | function ProtocolGame.registerExtendedOpcode(opcode, callback) 34 | if not callback or type(callback) ~= 'function' then 35 | error('Invalid callback.') 36 | end 37 | 38 | if opcode < 0 or opcode > 255 then 39 | error('Invalid opcode. Range: 0-255') 40 | end 41 | 42 | if extendedCallbacks[opcode] then 43 | error('Opcode is already taken.') 44 | end 45 | 46 | extendedCallbacks[opcode] = callback 47 | end 48 | 49 | function ProtocolGame.unregisterExtendedOpcode(opcode) 50 | if opcode < 0 or opcode > 255 then 51 | error('Invalid opcode. Range: 0-255') 52 | end 53 | 54 | if not extendedCallbacks[opcode] then 55 | error('Opcode is not registered.') 56 | end 57 | 58 | extendedCallbacks[opcode] = nil 59 | end 60 | -------------------------------------------------------------------------------- /modules/gamelib/textmessages.lua: -------------------------------------------------------------------------------- 1 | local messageModeCallbacks = {} 2 | 3 | function g_game.onTextMessage(messageMode, message) 4 | local callbacks = messageModeCallbacks[messageMode] 5 | if not callbacks or #callbacks == 0 then 6 | perror(string.format('Unhandled onTextMessage message mode %i: %s', messageMode, message)) 7 | return 8 | end 9 | 10 | for _, callback in pairs(callbacks) do 11 | callback(messageMode, message) 12 | end 13 | end 14 | 15 | function registerMessageMode(messageMode, callback) 16 | if not messageModeCallbacks[messageMode] then 17 | messageModeCallbacks[messageMode] = {} 18 | end 19 | 20 | table.insert(messageModeCallbacks[messageMode], callback) 21 | return true 22 | end 23 | 24 | function unregisterMessageMode(messageMode, callback) 25 | if not messageModeCallbacks[messageMode] then 26 | return false 27 | end 28 | 29 | return table.removevalue(messageModeCallbacks[messageMode], callback) 30 | end 31 | -------------------------------------------------------------------------------- /modules/gamelib/thing.lua: -------------------------------------------------------------------------------- 1 | ThingCategoryItem = 0 2 | ThingCategoryCreature = 1 3 | ThingCategoryEffect = 2 4 | ThingCategoryMissile = 3 5 | ThingInvalidCategory = 4 6 | ThingLastCategory = ThingInvalidCategory 7 | 8 | ThingAttrGround = 0 9 | ThingAttrGroundBorder = 1 10 | ThingAttrOnBottom = 2 11 | ThingAttrOnTop = 3 12 | ThingAttrContainer = 4 13 | ThingAttrStackable = 5 14 | ThingAttrForceUse = 6 15 | ThingAttrMultiUse = 7 16 | ThingAttrWritable = 8 17 | ThingAttrWritableOnce = 9 18 | ThingAttrFluidContainer = 10 19 | ThingAttrSplash = 11 20 | ThingAttrNotWalkable = 12 21 | ThingAttrNotMoveable = 13 22 | ThingAttrBlockProjectile = 14 23 | ThingAttrNotPathable = 15 24 | ThingAttrPickupable = 16 25 | ThingAttrHangable = 17 26 | ThingAttrHookSouth = 18 27 | ThingAttrHookEast = 19 28 | ThingAttrRotateable = 20 29 | ThingAttrLight = 21 30 | ThingAttrDontHide = 22 31 | ThingAttrTranslucent = 23 32 | ThingAttrDisplacement = 24 33 | ThingAttrElevation = 25 34 | ThingAttrLyingCorpse = 26 35 | ThingAttrAnimateAlways = 27 36 | ThingAttrMinimapColor = 28 37 | ThingAttrLensHelp = 29 38 | ThingAttrFullGround = 30 39 | ThingAttrLook = 31 40 | ThingAttrCloth = 32 41 | ThingAttrMarket = 33 42 | ThingAttrNoMoveAnimation = 253 -- >= 1010, value = 16 43 | ThingAttrChargeable = 254 -- deprecated 44 | ThingLastAttr = 255 45 | 46 | SpriteMaskRed = 1 47 | SpriteMaskGreen = 2 48 | SpriteMaskBlue = 3 49 | SpriteMaskYellow = 4 -------------------------------------------------------------------------------- /modules/gamelib/util.lua: -------------------------------------------------------------------------------- 1 | function postostring(pos) 2 | return pos.x .. " " .. pos.y .. " " .. pos.z 3 | end 4 | 5 | function dirtostring(dir) 6 | for k,v in pairs(Directions) do 7 | if v == dir then 8 | return k 9 | end 10 | end 11 | end 12 | 13 | function comma_value(n) 14 | local left,num,right = string.match(n,'^([^%d]*%d)(%d*)(.-)$') 15 | return left..(num:reverse():gsub('(%d%d%d)','%1,'):reverse())..right 16 | end 17 | -------------------------------------------------------------------------------- /otclientrc.lua: -------------------------------------------------------------------------------- 1 | -- this file is loaded after all modules are loaded and initialized 2 | -- you can place any custom user code here 3 | 4 | print 'Startup done :]' 5 | 6 | -------------------------------------------------------------------------------- /src/client/client.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2010-2020 OTClient 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy 5 | * of this software and associated documentation files (the "Software"), to deal 6 | * in the Software without restriction, including without limitation the rights 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | * copies of the Software, and to permit persons to whom the Software is 9 | * furnished to do so, subject to the following conditions: 10 | * 11 | * The above copyright notice and this permission notice shall be included in 12 | * all copies or substantial portions of the Software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | * THE SOFTWARE. 21 | */ 22 | 23 | #ifndef CLIENT_H 24 | #define CLIENT_H 25 | 26 | #include "global.h" 27 | 28 | class Client 29 | { 30 | public: 31 | void init(std::vector& args); 32 | void terminate(); 33 | void registerLuaFunctions(); 34 | }; 35 | 36 | extern Client g_client; 37 | 38 | #endif 39 | -------------------------------------------------------------------------------- /src/client/global.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2010-2020 OTClient 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy 5 | * of this software and associated documentation files (the "Software"), to deal 6 | * in the Software without restriction, including without limitation the rights 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | * copies of the Software, and to permit persons to whom the Software is 9 | * furnished to do so, subject to the following conditions: 10 | * 11 | * The above copyright notice and this permission notice shall be included in 12 | * all copies or substantial portions of the Software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | * THE SOFTWARE. 21 | */ 22 | 23 | #ifndef CLIENT_GLOBAL_H 24 | #define CLIENT_GLOBAL_H 25 | 26 | #include 27 | 28 | // widely used headers 29 | #include "const.h" 30 | #include "position.h" 31 | 32 | #endif 33 | -------------------------------------------------------------------------------- /src/client/player.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2010-2020 OTClient 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy 5 | * of this software and associated documentation files (the "Software"), to deal 6 | * in the Software without restriction, including without limitation the rights 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | * copies of the Software, and to permit persons to whom the Software is 9 | * furnished to do so, subject to the following conditions: 10 | * 11 | * The above copyright notice and this permission notice shall be included in 12 | * all copies or substantial portions of the Software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | * THE SOFTWARE. 21 | */ 22 | 23 | #include "player.h" 24 | -------------------------------------------------------------------------------- /src/client/player.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2010-2020 OTClient 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy 5 | * of this software and associated documentation files (the "Software"), to deal 6 | * in the Software without restriction, including without limitation the rights 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | * copies of the Software, and to permit persons to whom the Software is 9 | * furnished to do so, subject to the following conditions: 10 | * 11 | * The above copyright notice and this permission notice shall be included in 12 | * all copies or substantial portions of the Software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | * THE SOFTWARE. 21 | */ 22 | 23 | #ifndef PLAYER_H 24 | #define PLAYER_H 25 | 26 | #include "creature.h" 27 | 28 | // @bindclass 29 | class Player : public Creature 30 | { 31 | public: 32 | Player() { } 33 | virtual ~Player() { } 34 | 35 | PlayerPtr asPlayer() { return static_self_cast(); } 36 | bool isPlayer() { return true; } 37 | }; 38 | 39 | #endif 40 | -------------------------------------------------------------------------------- /src/framework/cmake/FindEGL.cmake: -------------------------------------------------------------------------------- 1 | # Try to find the EGL library 2 | # EGL_FOUND - system has EGL 3 | # EGL_INCLUDE_DIR - the EGL include directory 4 | # EGL_LIBRARY - the EGL library 5 | 6 | FIND_PATH(EGL_INCLUDE_DIR NAMES EGL/egl.h) 7 | SET(_EGL_STATIC_LIBS libEGL.a) 8 | SET(_EGL_SHARED_LIBS libEGL.dll.a EGL) 9 | #IF(USE_STATIC_LIBS) 10 | # FIND_LIBRARY(EGL_LIBRARY NAMES ${_EGL_STATIC_LIBS} ${_EGL_SHARED_LIBS}) 11 | #ELSE() 12 | FIND_LIBRARY(EGL_LIBRARY NAMES ${_EGL_SHARED_LIBS} ${_EGL_STATIC_LIBS}) 13 | #ENDIF() 14 | INCLUDE(FindPackageHandleStandardArgs) 15 | FIND_PACKAGE_HANDLE_STANDARD_ARGS(EGL DEFAULT_MSG EGL_LIBRARY EGL_INCLUDE_DIR) 16 | MARK_AS_ADVANCED(EGL_LIBRARY EGL_INCLUDE_DIR) 17 | -------------------------------------------------------------------------------- /src/framework/cmake/FindGLEW.cmake: -------------------------------------------------------------------------------- 1 | # Try to find the GLEW library 2 | # GLEW_FOUND - system has GLEW 3 | # GLEW_INCLUDE_DIR - the GLEW include directory 4 | # GLEW_LIBRARY - the GLEW library 5 | 6 | FIND_PATH(GLEW_INCLUDE_DIR NAMES GL/glew.h) 7 | SET(_GLEW_STATIC_LIBS libGLEW.a libglew32.a) 8 | SET(_GLEW_SHARED_LIBS libGLEW.dll.a libglew32.dll.a GLEW glew32) 9 | IF(USE_STATIC_LIBS) 10 | FIND_LIBRARY(GLEW_LIBRARY NAMES ${_GLEW_STATIC_LIBS} ${_GLEW_SHARED_LIBS}) 11 | ELSE() 12 | FIND_LIBRARY(GLEW_LIBRARY NAMES ${_GLEW_SHARED_LIBS} ${_GLEW_STATIC_LIBS}) 13 | ENDIF() 14 | INCLUDE(FindPackageHandleStandardArgs) 15 | FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLEW DEFAULT_MSG GLEW_LIBRARY GLEW_INCLUDE_DIR) 16 | MARK_AS_ADVANCED(GLEW_LIBRARY GLEW_INCLUDE_DIR) -------------------------------------------------------------------------------- /src/framework/cmake/FindGMP.cmake: -------------------------------------------------------------------------------- 1 | # Try to find the GMP library 2 | # GMP_FOUND - system has GMP 3 | # GMP_INCLUDE_DIR - the GMP include directory 4 | # GMP_LIBRARY - the GMP library 5 | 6 | FIND_PATH(GMP_INCLUDE_DIR NAMES gmp.h) 7 | SET(_GMP_STATIC_LIBS libgmp.a) 8 | SET(_GMP_SHARED_LIBS libgmp.dll.a gmp) 9 | IF(USE_STATIC_LIBS) 10 | FIND_LIBRARY(GMP_LIBRARY NAMES ${_GMP_STATIC_LIBS} ${_GMP_SHARED_LIBS}) 11 | ELSE() 12 | FIND_LIBRARY(GMP_LIBRARY NAMES ${_GMP_SHARED_LIBS} ${_GMP_STATIC_LIBS}) 13 | ENDIF() 14 | INCLUDE(FindPackageHandleStandardArgs) 15 | FIND_PACKAGE_HANDLE_STANDARD_ARGS(GMP DEFAULT_MSG GMP_LIBRARY GMP_INCLUDE_DIR) 16 | MARK_AS_ADVANCED(GMP_LIBRARY GMP_INCLUDE_DIR) 17 | -------------------------------------------------------------------------------- /src/framework/cmake/FindICU.cmake: -------------------------------------------------------------------------------- 1 | # Try to find the ICU library 2 | # ICU_FOUND - system has ICU 3 | # ICU_INCLUDE_DIR - the ICU include directory 4 | # ICU_LIBRARY - the ICU library 5 | 6 | FIND_PATH(ICU_INCLUDE_DIR NAMES unicode/utf8.h) 7 | SET(_ICUIO_STATIC_LIBS libicuio.a) 8 | SET(_ICUIO_SHARED_LIBS libicuio.dll.a icuio) 9 | SET(_ICUI18N_STATIC_LIBS libicui18n.a) 10 | SET(_ICUI18N_SHARED_LIBS libicui18n.dll.a icui18n) 11 | SET(_ICUUC_STATIC_LIBS libicuuc.a) 12 | SET(_ICUUC_SHARED_LIBS libicuuc.dll.a icuuc) 13 | SET(_ICUDATA_STATIC_LIBS libicudata.a) 14 | SET(_ICUDATA_SHARED_LIBS libicudata.dll.a icudata) 15 | IF(USE_STATIC_LIBS) 16 | FIND_LIBRARY(ICUIO_LIBRARY NAMES ${_ICUIO_STATIC_LIBS} ${_ICUIO_SHARED_LIBS}) 17 | FIND_LIBRARY(ICUI18N_LIBRARY NAMES ${_ICUI18N_STATIC_LIBS} ${_ICUI18N_SHARED_LIBS}) 18 | FIND_LIBRARY(ICUUC_LIBRARY NAMES ${_ICUUC_STATIC_LIBS} ${_ICUUC_SHARED_LIBS}) 19 | FIND_LIBRARY(ICUDATA_LIBRARY NAMES ${_ICUDATA_STATIC_LIBS} ${_ICUDATA_SHARED_LIBS}) 20 | ELSE() 21 | FIND_LIBRARY(ICUIO_LIBRARY NAMES ${_ICUIO_SHARED_LIBS} ${_ICUIO_STATIC_LIBS}) 22 | FIND_LIBRARY(ICUI18N_LIBRARY NAMES ${_ICUI18N_SHARED_LIBS} ${_ICUI18N_STATIC_LIBS}) 23 | FIND_LIBRARY(ICUUC_LIBRARY NAMES ${_ICUUC_SHARED_LIBS} ${_ICUUC_STATIC_LIBS}) 24 | FIND_LIBRARY(ICUDATA_LIBRARY NAMES ${_ICUDATA_SHARED_LIBS} ${_ICUDATA_STATIC_LIBS}) 25 | ENDIF() 26 | SET(ICU_LIBRARIES ${ICUIO_LIBRARY} ${ICUI18N_LIBRARY} ${ICUUC_LIBRARY} ${ICUDATA_LIBRARY}) 27 | INCLUDE(FindPackageHandleStandardArgs) 28 | FIND_PACKAGE_HANDLE_STANDARD_ARGS(ICU DEFAULT_MSG ICU_LIBRARIES ICU_INCLUDE_DIR) 29 | MARK_AS_ADVANCED(ICU_LIBRARIES ICU_INCLUDE_DIR) -------------------------------------------------------------------------------- /src/framework/cmake/FindLua.cmake: -------------------------------------------------------------------------------- 1 | # Try to find the lua library 2 | # LUA_FOUND - system has lua 3 | # LUA_INCLUDE_DIR - the lua include directory 4 | # LUA_LIBRARY - the lua library 5 | # LUA_LIBRARIES - the lua library and it's dependencies 6 | 7 | FIND_PATH(LUA_INCLUDE_DIR NAMES lua.h PATH_SUFFIXES lua51 lua5-1 lua5.1 lua) 8 | FIND_LIBRARY(LUA_LIBRARY NAMES) 9 | SET(_LUA_STATIC_LIBS liblua51.a liblua5.1.a liblua-5.1.a liblua.a) 10 | SET(_LUA_SHARED_LIBS lua51 lua5.1 lua-5.1 lua) 11 | IF(USE_STATIC_LIBS) 12 | FIND_LIBRARY(LUA_LIBRARY NAMES ${_LUA_STATIC_LIBS} ${_LUA_SHARED_LIBS}) 13 | ELSE() 14 | FIND_LIBRARY(LUA_LIBRARY NAMES ${_LUA_SHARED_LIBS} ${_LUA_STATIC_LIBS}) 15 | ENDIF() 16 | INCLUDE(FindPackageHandleStandardArgs) 17 | FIND_PACKAGE_HANDLE_STANDARD_ARGS(Lua DEFAULT_MSG LUA_LIBRARY LUA_INCLUDE_DIR) 18 | MARK_AS_ADVANCED(LUA_LIBRARY LUA_INCLUDE_DIR) 19 | -------------------------------------------------------------------------------- /src/framework/cmake/FindLuaJIT.cmake: -------------------------------------------------------------------------------- 1 | # Try to find the lua library 2 | # LUAJIT_FOUND - system has lua 3 | # LUAJIT_INCLUDE_DIR - the lua include directory 4 | # LUAJIT_LIBRARY - the lua library 5 | 6 | FIND_PATH(LUAJIT_INCLUDE_DIR NAMES luajit.h PATH_SUFFIXES luajit luajit-2.0 luajit-2.1) 7 | SET(_LUAJIT_STATIC_LIBS libluajit-5.1.a libluajit.a liblua51.a) 8 | SET(_LUAJIT_SHARED_LIBS luajit-5.1 luajit lua51) 9 | IF(USE_STATIC_LIBS) 10 | FIND_LIBRARY(LUAJIT_LIBRARY NAMES ${_LUAJIT_STATIC_LIBS} ${_LUAJIT_SHARED_LIBS}) 11 | ELSE() 12 | FIND_LIBRARY(LUAJIT_LIBRARY NAMES ${_LUAJIT_SHARED_LIBS} ${_LUAJIT_STATIC_LIBS}) 13 | ENDIF() 14 | INCLUDE(FindPackageHandleStandardArgs) 15 | FIND_PACKAGE_HANDLE_STANDARD_ARGS(LuaJIT DEFAULT_MSG LUAJIT_LIBRARY LUAJIT_INCLUDE_DIR) 16 | MARK_AS_ADVANCED(LUAJIT_LIBRARY LUAJIT_INCLUDE_DIR) 17 | -------------------------------------------------------------------------------- /src/framework/cmake/FindMySQL.cmake: -------------------------------------------------------------------------------- 1 | # Try to find the mysql library 2 | # MYSQL_FOUND - system has mysql 3 | # MYSQL_INCLUDE_DIR - the mysql include directory 4 | # MYSQL_LIBRARY - the mysql library 5 | 6 | FIND_PATH(MYSQL_INCLUDE_DIR NAMES mysql.h PATH_SUFFIXES mysql) 7 | IF(WIN32) 8 | SET(_MYSQL_STATIC_LIBS libmysql.a libmysql_r.a) 9 | SET(_MYSQL_SHARED_LIBS libmysql.dll.a libmysql_r.dll.a libmysql libmysql_r) 10 | ELSE() 11 | SET(_MYSQL_STATIC_LIBS libmysqlclient.a libmysqlclient_r.a) 12 | SET(_MYSQL_SHARED_LIBS libmysqlclient.dll.a libmysqlclient_r.dll.a mysqlclient mysqlclient_r) 13 | ENDIF() 14 | 15 | IF(USE_STATIC_LIBS) 16 | FIND_LIBRARY(MYSQL_LIBRARY NAMES ${_MYSQL_STATIC_LIBS} ${_MYSQL_SHARED_LIBS}) 17 | ELSE() 18 | FIND_LIBRARY(MYSQL_LIBRARY NAMES ${_MYSQL_SHARED_LIBS} ${_MYSQL_STATIC_LIBS}) 19 | ENDIF() 20 | INCLUDE(FindPackageHandleStandardArgs) 21 | FIND_PACKAGE_HANDLE_STANDARD_ARGS(MySQL DEFAULT_MSG MYSQL_LIBRARY MYSQL_INCLUDE_DIR) 22 | MARK_AS_ADVANCED(MYSQL_LIBRARY MYSQL_INCLUDE_DIR) 23 | 24 | -------------------------------------------------------------------------------- /src/framework/cmake/FindOgg.cmake: -------------------------------------------------------------------------------- 1 | # Try to find the OGG library 2 | # OGG_FOUND - system has OGG 3 | # OGG_INCLUDE_DIR - the OGG include directory 4 | # OGG_LIBRARY - the OGG library 5 | 6 | FIND_PATH(OGG_INCLUDE_DIR NAMES ogg/ogg.h) 7 | SET(_OGG_STATIC_LIBS libogg.a) 8 | SET(_OGG_SHARED_LIBS libogg.dll.a ogg) 9 | IF(USE_STATIC_LIBS) 10 | FIND_LIBRARY(OGG_LIBRARY NAMES ${_OGG_STATIC_LIBS} ${_OGG_SHARED_LIBS}) 11 | ELSE() 12 | FIND_LIBRARY(OGG_LIBRARY NAMES ${_OGG_SHARED_LIBS} ${_OGG_STATIC_LIBS}) 13 | ENDIF() 14 | INCLUDE(FindPackageHandleStandardArgs) 15 | FIND_PACKAGE_HANDLE_STANDARD_ARGS(Ogg DEFAULT_MSG OGG_LIBRARY OGG_INCLUDE_DIR) 16 | MARK_AS_ADVANCED(OGG_LIBRARY OGG_INCLUDE_DIR) 17 | -------------------------------------------------------------------------------- /src/framework/cmake/FindOpenAL.cmake: -------------------------------------------------------------------------------- 1 | # Try to find the OPENAL library 2 | # OPENAL_FOUND - system has OPENAL 3 | # OPENAL_INCLUDE_DIR - the OPENAL include directory 4 | # OPENAL_LIBRARY - the OPENAL library 5 | 6 | SET(OPENAL_APPLE_PATHS ~/Library/Frameworks /Library/Frameworks) 7 | FIND_PATH(OPENAL_INCLUDE_DIR al.h PATH_SUFFIXES AL OpenAL PATHS ${OPENAL_APPLE_PATHS}) 8 | SET(_OPENAL_STATIC_LIBS libOpenAL.a libal.a libopenal.a libOpenAL32.a) 9 | SET(_OPENAL_SHARED_LIBS libOpenAL.dll.a libal.dll.a libopenal.dll.a libOpenAL32.dll.a OpenAL al openal OpenAL32) 10 | IF(USE_STATIC_LIBS) 11 | FIND_LIBRARY(OPENAL_LIBRARY NAMES ${_OPENAL_STATIC_LIBS} ${_OPENAL_SHARED_LIBS} PATHS ${OPENAL_APPLE_PATHS}) 12 | ELSE() 13 | FIND_LIBRARY(OPENAL_LIBRARY NAMES ${_OPENAL_SHARED_LIBS} ${_OPENAL_STATIC_LIBS} PATHS ${OPENAL_APPLE_PATHS}) 14 | ENDIF() 15 | INCLUDE(FindPackageHandleStandardArgs) 16 | FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenAL DEFAULT_MSG OPENAL_LIBRARY OPENAL_INCLUDE_DIR) 17 | MARK_AS_ADVANCED(OPENAL_LIBRARY OPENAL_INCLUDE_DIR) 18 | -------------------------------------------------------------------------------- /src/framework/cmake/FindOpenGLES1.cmake: -------------------------------------------------------------------------------- 1 | # Try to find the OpenGLES2 library 2 | # OPENGLES1_FOUND - system has OpenGL ES 1.0 3 | # OPENGLES1_INCLUDE_DIR - the OpenGL ES 1.0 include directory 4 | # OPENGLES1_LIBRARY - the OpenGL ES 1.0 library 5 | 6 | FIND_PATH(OPENGLES1_INCLUDE_DIR NAMES GLES/gl.h) 7 | SET(_OPENGLES1_STATIC_LIBS libGLESv1_CM.a libGLES_CM.a) 8 | SET(_OPENGLES1_SHARED_LIBS libGLESv1_CM.dll.a libGLES_CM.dll.a GLESv1_CM GLES_CM) 9 | #IF(USE_STATIC_LIBS) 10 | # FIND_LIBRARY(OPENGLES1_LIBRARY NAMES ${_OPENGLES1_STATIC_LIBS} ${_OPENGLES1_SHARED_LIBS}) 11 | #ELSE() 12 | FIND_LIBRARY(OPENGLES1_LIBRARY NAMES ${_OPENGLES1_SHARED_LIBS} ${_OPENGLES1_STATIC_LIBS}) 13 | #ENDIF() 14 | INCLUDE(FindPackageHandleStandardArgs) 15 | FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenGLES2 DEFAULT_MSG OPENGLES1_LIBRARY OPENGLES1_INCLUDE_DIR) 16 | MARK_AS_ADVANCED(OPENGLES1_LIBRARY OPENGLES1_INCLUDE_DIR) 17 | -------------------------------------------------------------------------------- /src/framework/cmake/FindOpenGLES2.cmake: -------------------------------------------------------------------------------- 1 | # Try to find the OpenGLES2 library 2 | # OPENGLES2_FOUND - system has OpenGL ES 2.0 3 | # OPENGLES2_INCLUDE_DIR - the OpenGL ES 2.0 include directory 4 | # OPENGLES2_LIBRARY - the OpenGL ES 2.0 library 5 | 6 | FIND_PATH(OPENGLES2_INCLUDE_DIR NAMES GLES2/gl2.h) 7 | SET(_OPENGLES2_STATIC_LIBS libGLESv2.a) 8 | SET(_OPENGLES2_SHARED_LIBS libGLESv2.dll.a GLESv2) 9 | #IF(USE_STATIC_LIBS) 10 | # FIND_LIBRARY(OPENGLES2_LIBRARY NAMES ${_OPENGLES2_STATIC_LIBS} ${_OPENGLES2_SHARED_LIBS}) 11 | #ELSE() 12 | FIND_LIBRARY(OPENGLES2_LIBRARY NAMES ${_OPENGLES2_SHARED_LIBS} ${_OPENGLES2_STATIC_LIBS}) 13 | #ENDIF() 14 | INCLUDE(FindPackageHandleStandardArgs) 15 | FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenGLES2 DEFAULT_MSG OPENGLES2_LIBRARY OPENGLES2_INCLUDE_DIR) 16 | MARK_AS_ADVANCED(OPENGLES2_LIBRARY OPENGLES2_INCLUDE_DIR) 17 | -------------------------------------------------------------------------------- /src/framework/cmake/FindOpenSSL.cmake: -------------------------------------------------------------------------------- 1 | # Try to find the OpenSSL library 2 | # OPENSSL_FOUND - system has OpenSSL 3 | # OPENSSL_INCLUDE_DIR - the OpenSSL include directory 4 | # OPENSSL_LIBRARY - the OpenSSL library 5 | 6 | FIND_PATH(OPENSSL_INCLUDE_DIR NAMES openssl/ssl.h PATH_SUFFIXES include openssl-1.0) 7 | SET(_OPENSSL_STATIC_LIBS libssl.a ssl.a) 8 | SET(_OPENSSL_SHARED_LIBS libssl ssl) 9 | SET(_OPENSSL_CRYPTO_STATIC_LIBS libcrypto.a crypto.a) 10 | SET(_OPENSSL_CRYPTO_SHARED_LIBS libcrypto crypto) 11 | IF(USE_STATIC_LIBS) 12 | FIND_LIBRARY(OPENSSL_LIBRARY NAMES ${_OPENSSL_STATIC_LIBS} ${_OPENSSL_SHARED_LIBS} PATH_SUFFIXES openssl-1.0) 13 | FIND_LIBRARY(OPENSSL_CRYPTO_LIBRARY NAMES ${_OPENSSL_CRYPTO_STATIC_LIBS} ${_OPENSSL_CRYPTO_SHARED_LIBS} PATH_SUFFIXES openssl-1.0) 14 | ELSE() 15 | FIND_LIBRARY(OPENSSL_LIBRARY NAMES ${_OPENSSL_SHARED_LIBS} ${_OPENSSL_STATIC_LIBS} PATH_SUFFIXES openssl-1.0) 16 | FIND_LIBRARY(OPENSSL_CRYPTO_LIBRARY NAMES ${_OPENSSL_CRYPTO_SHARED_LIBS} ${_OPENSSL_CRYPTO_STATIC_LIBS} PATH_SUFFIXES openssl-1.0) 17 | ENDIF() 18 | SET(OPENSSL_LIBRARIES ${OPENSSL_LIBRARY} ${OPENSSL_CRYPTO_LIBRARY}) 19 | INCLUDE(FindPackageHandleStandardArgs) 20 | FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenSSL DEFAULT_MSG OPENSSL_LIBRARIES OPENSSL_INCLUDE_DIR) 21 | MARK_AS_ADVANCED(OPENSSL_LIBRARIES OPENSSL_LIBRARY OPENSSL_CRYPTO_LIBRARY OPENSSL_INCLUDE_DIR) 22 | -------------------------------------------------------------------------------- /src/framework/cmake/FindPhysFS.cmake: -------------------------------------------------------------------------------- 1 | # Try to find the PHYSFS library 2 | # PHYSFS_FOUND - system has PHYSFS 3 | # PHYSFS_INCLUDE_DIR - the PHYSFS include directory 4 | # PHYSFS_LIBRARY - the PHYSFS library 5 | 6 | FIND_PATH(PHYSFS_INCLUDE_DIR physfs.h PATH_SUFFIXES physfs) 7 | SET(_PHYSFS_STATIC_LIBS libphysfs.a) 8 | SET(_PHYSFS_SHARED_LIBS libphysfs.dll.a physfs) 9 | IF(USE_STATIC_LIBS) 10 | FIND_LIBRARY(PHYSFS_LIBRARY NAMES ${_PHYSFS_STATIC_LIBS} ${_PHYSFS_SHARED_LIBS}) 11 | ELSE() 12 | FIND_LIBRARY(PHYSFS_LIBRARY NAMES ${_PHYSFS_SHARED_LIBS} ${_PHYSFS_STATIC_LIBS}) 13 | ENDIF() 14 | INCLUDE(FindPackageHandleStandardArgs) 15 | FIND_PACKAGE_HANDLE_STANDARD_ARGS(PhysFS DEFAULT_MSG PHYSFS_LIBRARY PHYSFS_INCLUDE_DIR) 16 | MARK_AS_ADVANCED(PHYSFS_LIBRARY PHYSFS_INCLUDE_DIR) 17 | -------------------------------------------------------------------------------- /src/framework/cmake/FindVorbis.cmake: -------------------------------------------------------------------------------- 1 | # Try to find the VORBIS library 2 | # VORBIS_FOUND - system has VORBIS 3 | # VORBIS_INCLUDE_DIR - the VORBIS include directory 4 | # VORBIS_LIBRARY - the VORBIS library 5 | 6 | FIND_PATH(VORBIS_INCLUDE_DIR NAMES vorbis/codec.h) 7 | SET(_VORBIS_STATIC_LIBS libvorbis.a) 8 | SET(_VORBIS_SHARED_LIBS libvorbis.dll.a vorbis) 9 | IF(USE_STATIC_LIBS) 10 | FIND_LIBRARY(VORBIS_LIBRARY NAMES ${_VORBIS_STATIC_LIBS} ${_VORBIS_SHARED_LIBS}) 11 | ELSE() 12 | FIND_LIBRARY(VORBIS_LIBRARY NAMES ${_VORBIS_SHARED_LIBS} ${_VORBIS_STATIC_LIBS}) 13 | ENDIF() 14 | INCLUDE(FindPackageHandleStandardArgs) 15 | FIND_PACKAGE_HANDLE_STANDARD_ARGS(Vorbis DEFAULT_MSG VORBIS_LIBRARY VORBIS_INCLUDE_DIR) 16 | MARK_AS_ADVANCED(VORBIS_LIBRARY VORBIS_INCLUDE_DIR) 17 | -------------------------------------------------------------------------------- /src/framework/cmake/FindVorbisFile.cmake: -------------------------------------------------------------------------------- 1 | # Try to find the VORBISFILE library 2 | # VORBISFILE_FOUND - system has VORBISFILE 3 | # VORBISFILE_INCLUDE_DIR - the VORBISFILE include directory 4 | # VORBISFILE_LIBRARY - the VORBISFILE library 5 | 6 | FIND_PATH(VORBISFILE_INCLUDE_DIR NAMES vorbis/vorbisfile.h) 7 | SET(_VORBISFILE_STATIC_LIBS libvorbisfile.a) 8 | SET(_VORBISFILE_SHARED_LIBS libvorbisfile.dll.a vorbisfile) 9 | IF(USE_STATIC_LIBS) 10 | FIND_LIBRARY(VORBISFILE_LIBRARY NAMES ${_VORBISFILE_STATIC_LIBS} ${_VORBISFILE_SHARED_LIBS}) 11 | ELSE() 12 | FIND_LIBRARY(VORBISFILE_LIBRARY NAMES ${_VORBISFILE_SHARED_LIBS} ${_VORBISFILE_STATIC_LIBS}) 13 | ENDIF() 14 | INCLUDE(FindPackageHandleStandardArgs) 15 | FIND_PACKAGE_HANDLE_STANDARD_ARGS(VorbisFile DEFAULT_MSG VORBISFILE_LIBRARY VORBISFILE_INCLUDE_DIR) 16 | MARK_AS_ADVANCED(VORBISFILE_LIBRARY VORBISFILE_INCLUDE_DIR) 17 | -------------------------------------------------------------------------------- /src/framework/cmake/FindZLIB.cmake: -------------------------------------------------------------------------------- 1 | # Try to find the ZLIB library 2 | # ZLIB_FOUND - system has ZLIB 3 | # ZLIB_INCLUDE_DIR - the ZLIB include directory 4 | # ZLIB_LIBRARY - the ZLIB library 5 | 6 | FIND_PATH(ZLIB_INCLUDE_DIR NAMES zlib.h) 7 | SET(_ZLIB_STATIC_LIBS libz.a libzlib.a zlib1.a) 8 | SET(_ZLIB_SHARED_LIBS libz.dll.a zdll zlib zlib1 z) 9 | IF(USE_STATIC_LIBS) 10 | FIND_LIBRARY(ZLIB_LIBRARY NAMES ${_ZLIB_STATIC_LIBS} ${_ZLIB_SHARED_LIBS}) 11 | ELSE() 12 | FIND_LIBRARY(ZLIB_LIBRARY NAMES ${_ZLIB_SHARED_LIBS} ${_ZLIB_STATIC_LIBS}) 13 | ENDIF() 14 | INCLUDE(FindPackageHandleStandardArgs) 15 | FIND_PACKAGE_HANDLE_STANDARD_ARGS(ZLIB DEFAULT_MSG ZLIB_LIBRARY ZLIB_INCLUDE_DIR) 16 | MARK_AS_ADVANCED(ZLIB_LIBRARY ZLIB_INCLUDE_DIR) -------------------------------------------------------------------------------- /src/framework/cmake/i486-mingw32_toolchain.cmake: -------------------------------------------------------------------------------- 1 | SET(CMAKE_SYSTEM_NAME Windows) 2 | SET(CMAKE_C_COMPILER i486-mingw32-gcc) 3 | SET(CMAKE_CXX_COMPILER i486-mingw32-g++) 4 | SET(CMAKE_RC_COMPILER i486-mingw32-windres) 5 | SET(CMAKE_FIND_ROOT_PATH /usr/i486-mingw32) 6 | SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 7 | SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 8 | SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) -------------------------------------------------------------------------------- /src/framework/cmake/i586-mingw32msvc_toolchain.cmake: -------------------------------------------------------------------------------- 1 | SET(CMAKE_SYSTEM_NAME Windows) 2 | SET(CMAKE_C_COMPILER i586-mingw32msvc-gcc) 3 | SET(CMAKE_CXX_COMPILER i586-mingw32msvc-g++) 4 | SET(CMAKE_RC_COMPILER i586-mingw32msvc-windres) 5 | SET(CMAKE_FIND_ROOT_PATH /usr/i586-mingw32msvc) 6 | SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 7 | SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 8 | SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 9 | -------------------------------------------------------------------------------- /src/framework/cmake/i686-w64-mingw32_toolchain.cmake: -------------------------------------------------------------------------------- 1 | SET(CMAKE_SYSTEM_NAME Windows) 2 | SET(CMAKE_C_COMPILER i686-w64-mingw32-gcc) 3 | SET(CMAKE_CXX_COMPILER i686-w64-mingw32-g++) 4 | SET(CMAKE_RC_COMPILER i686-w64-mingw32-windres) 5 | SET(CMAKE_FIND_ROOT_PATH /usr/i686-w64-mingw32) 6 | SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 7 | SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 8 | SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 9 | -------------------------------------------------------------------------------- /src/framework/core/clock.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2010-2020 OTClient 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy 5 | * of this software and associated documentation files (the "Software"), to deal 6 | * in the Software without restriction, including without limitation the rights 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | * copies of the Software, and to permit persons to whom the Software is 9 | * furnished to do so, subject to the following conditions: 10 | * 11 | * The above copyright notice and this permission notice shall be included in 12 | * all copies or substantial portions of the Software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | * THE SOFTWARE. 21 | */ 22 | 23 | #include "clock.h" 24 | 25 | Clock g_clock; 26 | 27 | Clock::Clock() 28 | { 29 | m_currentMicros = 0; 30 | m_currentMillis = 0; 31 | m_currentSeconds = 0; 32 | } 33 | 34 | void Clock::update() 35 | { 36 | m_currentMicros = stdext::micros(); 37 | m_currentMillis = m_currentMicros / 1000; 38 | m_currentSeconds = m_currentMicros / 1000000.0f; 39 | } 40 | -------------------------------------------------------------------------------- /src/framework/core/consoleapplication.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2010-2013 OTClient 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy 5 | * of this software and associated documentation files (the "Software"), to deal 6 | * in the Software without restriction, including without limitation the rights 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | * copies of the Software, and to permit persons to whom the Software is 9 | * furnished to do so, subject to the following conditions: 10 | * 11 | * The above copyright notice and this permission notice shall be included in 12 | * all copies or substantial portions of the Software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | * THE SOFTWARE. 21 | */ 22 | 23 | 24 | #ifndef CONSOLEAPPLICATION_H 25 | #define CONSOLEAPPLICATION_H 26 | 27 | #include "application.h" 28 | 29 | class ConsoleApplication : public Application 30 | { 31 | public: 32 | void run(); 33 | 34 | int getFps() { return m_frameCounter.getLastFps(); } 35 | 36 | protected: 37 | AdaptativeFrameCounter m_frameCounter; 38 | }; 39 | 40 | extern ConsoleApplication g_app; 41 | 42 | #endif 43 | -------------------------------------------------------------------------------- /src/framework/core/timer.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2010-2020 OTClient 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy 5 | * of this software and associated documentation files (the "Software"), to deal 6 | * in the Software without restriction, including without limitation the rights 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | * copies of the Software, and to permit persons to whom the Software is 9 | * furnished to do so, subject to the following conditions: 10 | * 11 | * The above copyright notice and this permission notice shall be included in 12 | * all copies or substantial portions of the Software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | * THE SOFTWARE. 21 | */ 22 | 23 | 24 | #include "timer.h" 25 | #include "clock.h" 26 | 27 | void Timer::restart() 28 | { 29 | m_startTicks = g_clock.millis(); 30 | m_stopped = false; 31 | } 32 | 33 | ticks_t Timer::ticksElapsed() 34 | { 35 | return g_clock.millis() - m_startTicks; 36 | } 37 | -------------------------------------------------------------------------------- /src/framework/graphics/painter.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2010-2020 OTClient 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy 5 | * of this software and associated documentation files (the "Software"), to deal 6 | * in the Software without restriction, including without limitation the rights 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | * copies of the Software, and to permit persons to whom the Software is 9 | * furnished to do so, subject to the following conditions: 10 | * 11 | * The above copyright notice and this permission notice shall be included in 12 | * all copies or substantial portions of the Software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | * THE SOFTWARE. 21 | */ 22 | 23 | #include "painter.h" 24 | #include "graphics.h" 25 | 26 | #include 27 | 28 | Painter *g_painter = nullptr; 29 | 30 | Painter::Painter() 31 | { 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/framework/luaengine/declarations.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2010-2020 OTClient 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy 5 | * of this software and associated documentation files (the "Software"), to deal 6 | * in the Software without restriction, including without limitation the rights 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | * copies of the Software, and to permit persons to whom the Software is 9 | * furnished to do so, subject to the following conditions: 10 | * 11 | * The above copyright notice and this permission notice shall be included in 12 | * all copies or substantial portions of the Software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | * THE SOFTWARE. 21 | */ 22 | 23 | #ifndef FRAMEWORK_LUA_DECLARATIONS_H 24 | #define FRAMEWORK_LUA_DECLARATIONS_H 25 | 26 | #include 27 | 28 | #include 29 | 30 | class LuaInterface; 31 | class LuaObject; 32 | 33 | typedef std::function LuaCppFunction; 34 | typedef std::unique_ptr LuaCppFunctionPtr; 35 | typedef stdext::shared_object_ptr LuaObjectPtr; 36 | 37 | #endif 38 | -------------------------------------------------------------------------------- /src/framework/luaengine/lbitlib.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2010-2020 OTClient 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy 5 | * of this software and associated documentation files (the "Software"), to deal 6 | * in the Software without restriction, including without limitation the rights 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | * copies of the Software, and to permit persons to whom the Software is 9 | * furnished to do so, subject to the following conditions: 10 | * 11 | * The above copyright notice and this permission notice shall be included in 12 | * all copies or substantial portions of the Software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | * THE SOFTWARE. 21 | */ 22 | 23 | #ifndef LBITLIB_520_BACKPORT4_H 24 | #define LBITLIB_520_BACKPORT4_H 25 | 26 | struct lua_State; 27 | 28 | int luaopen_bit32 (lua_State *L); 29 | 30 | #endif 31 | -------------------------------------------------------------------------------- /src/framework/net/server.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2010-2020 OTClient 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy 5 | * of this software and associated documentation files (the "Software"), to deal 6 | * in the Software without restriction, including without limitation the rights 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | * copies of the Software, and to permit persons to whom the Software is 9 | * furnished to do so, subject to the following conditions: 10 | * 11 | * The above copyright notice and this permission notice shall be included in 12 | * all copies or substantial portions of the Software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | * THE SOFTWARE. 21 | */ 22 | 23 | #ifndef SERVER_H 24 | #define SERVER_H 25 | 26 | #include "declarations.h" 27 | #include 28 | 29 | class Server : public LuaObject 30 | { 31 | public: 32 | Server(int port); 33 | static ServerPtr create(int port); 34 | bool isOpen() { return m_isOpen; } 35 | void close(); 36 | 37 | void acceptNext(); 38 | 39 | private: 40 | stdext::boolean m_isOpen; 41 | asio::ip::tcp::acceptor m_acceptor; 42 | }; 43 | 44 | #endif 45 | -------------------------------------------------------------------------------- /src/framework/otml/declarations.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2010-2020 OTClient 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy 5 | * of this software and associated documentation files (the "Software"), to deal 6 | * in the Software without restriction, including without limitation the rights 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | * copies of the Software, and to permit persons to whom the Software is 9 | * furnished to do so, subject to the following conditions: 10 | * 11 | * The above copyright notice and this permission notice shall be included in 12 | * all copies or substantial portions of the Software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | * THE SOFTWARE. 21 | */ 22 | 23 | #ifndef FRAMEWORK_OTML_DECLARATIONS_H 24 | #define FRAMEWORK_OTML_DECLARATIONS_H 25 | 26 | #include 27 | 28 | class OTMLNode; 29 | class OTMLDocument; 30 | class OTMLParser; 31 | class OTMLEmitter; 32 | 33 | typedef stdext::shared_object_ptr OTMLNodePtr; 34 | typedef stdext::shared_object_ptr OTMLDocumentPtr; 35 | typedef std::vector OTMLNodeList; 36 | 37 | #endif 38 | -------------------------------------------------------------------------------- /src/framework/otml/otml.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2010-2020 OTClient 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy 5 | * of this software and associated documentation files (the "Software"), to deal 6 | * in the Software without restriction, including without limitation the rights 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | * copies of the Software, and to permit persons to whom the Software is 9 | * furnished to do so, subject to the following conditions: 10 | * 11 | * The above copyright notice and this permission notice shall be included in 12 | * all copies or substantial portions of the Software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | * THE SOFTWARE. 21 | */ 22 | 23 | #ifndef OTML_H 24 | #define OTML_H 25 | 26 | #include "otmldocument.h" 27 | #include "otmlnode.h" 28 | 29 | #endif -------------------------------------------------------------------------------- /src/framework/otml/otmlemitter.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2010-2020 OTClient 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy 5 | * of this software and associated documentation files (the "Software"), to deal 6 | * in the Software without restriction, including without limitation the rights 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | * copies of the Software, and to permit persons to whom the Software is 9 | * furnished to do so, subject to the following conditions: 10 | * 11 | * The above copyright notice and this permission notice shall be included in 12 | * all copies or substantial portions of the Software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | * THE SOFTWARE. 21 | */ 22 | 23 | #ifndef OTMLEMITTER_H 24 | #define OTMLEMITTER_H 25 | 26 | #include "declarations.h" 27 | 28 | class OTMLEmitter 29 | { 30 | public: 31 | /// Emits a node and it's children to a std::string 32 | static std::string emitNode(const OTMLNodePtr& node, int currentDepth = -1); 33 | }; 34 | 35 | #endif 36 | -------------------------------------------------------------------------------- /src/framework/platform/crashhandler.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2010-2020 OTClient 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy 5 | * of this software and associated documentation files (the "Software"), to deal 6 | * in the Software without restriction, including without limitation the rights 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | * copies of the Software, and to permit persons to whom the Software is 9 | * furnished to do so, subject to the following conditions: 10 | * 11 | * The above copyright notice and this permission notice shall be included in 12 | * all copies or substantial portions of the Software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | * THE SOFTWARE. 21 | */ 22 | 23 | #ifndef CRASHHANDLER_H 24 | #define CRASHHANDLER_H 25 | 26 | #ifdef CRASH_HANDLER 27 | void installCrashHandler(); 28 | #endif 29 | 30 | #endif 31 | -------------------------------------------------------------------------------- /src/framework/platform/platform.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2010-2020 OTClient 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy 5 | * of this software and associated documentation files (the "Software"), to deal 6 | * in the Software without restriction, including without limitation the rights 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | * copies of the Software, and to permit persons to whom the Software is 9 | * furnished to do so, subject to the following conditions: 10 | * 11 | * The above copyright notice and this permission notice shall be included in 12 | * all copies or substantial portions of the Software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | * THE SOFTWARE. 21 | */ 22 | 23 | #include "platform.h" 24 | 25 | Platform g_platform; 26 | -------------------------------------------------------------------------------- /src/framework/stdext/boolean.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2010-2020 OTClient 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy 5 | * of this software and associated documentation files (the "Software"), to deal 6 | * in the Software without restriction, including without limitation the rights 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | * copies of the Software, and to permit persons to whom the Software is 9 | * furnished to do so, subject to the following conditions: 10 | * 11 | * The above copyright notice and this permission notice shall be included in 12 | * all copies or substantial portions of the Software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | * THE SOFTWARE. 21 | */ 22 | 23 | #ifndef BOOLEAN_H 24 | #define BOOLEAN_H 25 | 26 | namespace stdext { 27 | 28 | template 29 | struct boolean { 30 | boolean() : v(def) { } 31 | operator bool &() { return v; } 32 | operator bool const &() const { return v; } 33 | bool& operator=(const bool& o) { v = o; return v; } 34 | private: 35 | bool v; 36 | }; 37 | 38 | } 39 | 40 | #endif 41 | -------------------------------------------------------------------------------- /src/framework/stdext/net.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2010-2020 OTClient 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy 5 | * of this software and associated documentation files (the "Software"), to deal 6 | * in the Software without restriction, including without limitation the rights 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | * copies of the Software, and to permit persons to whom the Software is 9 | * furnished to do so, subject to the following conditions: 10 | * 11 | * The above copyright notice and this permission notice shall be included in 12 | * all copies or substantial portions of the Software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | * THE SOFTWARE. 21 | */ 22 | 23 | #ifndef STDEXT_NET_H 24 | #define STDEXT_NET_H 25 | 26 | #include "types.h" 27 | #include 28 | #include 29 | 30 | namespace stdext { 31 | std::string ip_to_string(uint32 ip); 32 | uint32 string_to_ip(const std::string& string); 33 | std::vector listSubnetAddresses(uint32 address, uint8 mask); 34 | } 35 | 36 | #endif 37 | -------------------------------------------------------------------------------- /src/framework/ui/ui.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2010-2020 OTClient 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy 5 | * of this software and associated documentation files (the "Software"), to deal 6 | * in the Software without restriction, including without limitation the rights 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | * copies of the Software, and to permit persons to whom the Software is 9 | * furnished to do so, subject to the following conditions: 10 | * 11 | * The above copyright notice and this permission notice shall be included in 12 | * all copies or substantial portions of the Software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | * THE SOFTWARE. 21 | */ 22 | 23 | #ifndef UI_H 24 | #define UI_H 25 | 26 | #include "uimanager.h" 27 | #include "uiwidget.h" 28 | #include "uitextedit.h" 29 | #include "uilayout.h" 30 | #include "uihorizontallayout.h" 31 | #include "uiverticallayout.h" 32 | #include "uigridlayout.h" 33 | #include "uianchorlayout.h" 34 | #include "uiparticles.h" 35 | 36 | #endif 37 | -------------------------------------------------------------------------------- /src/framework/ui/uitranslator.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2010-2020 OTClient 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy 5 | * of this software and associated documentation files (the "Software"), to deal 6 | * in the Software without restriction, including without limitation the rights 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | * copies of the Software, and to permit persons to whom the Software is 9 | * furnished to do so, subject to the following conditions: 10 | * 11 | * The above copyright notice and this permission notice shall be included in 12 | * all copies or substantial portions of the Software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | * THE SOFTWARE. 21 | */ 22 | 23 | #ifndef TRANSLATOR_H 24 | #define TRANSLATOR_H 25 | 26 | #include "../const.h" 27 | #include 28 | 29 | namespace Fw { 30 | 31 | AlignmentFlag translateAlignment(std::string aligment); 32 | AnchorEdge translateAnchorEdge(std::string anchorEdge); 33 | WidgetState translateState(std::string state); 34 | AutoFocusPolicy translateAutoFocusPolicy(std::string policy); 35 | 36 | }; 37 | 38 | #endif 39 | -------------------------------------------------------------------------------- /src/otcicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edubart/otclient/dab86e610991092fe8b2471f7de55a7c986b3cd2/src/otcicon.ico -------------------------------------------------------------------------------- /src/otcicon.rc: -------------------------------------------------------------------------------- 1 | IDI_ICON1 ICON DISCARDABLE "otcicon.ico" -------------------------------------------------------------------------------- /tools/gen_lang_template.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #best use ./gen_lang_template >> ../data/locales/XX.lua 3 | #it wont run if you type "sh gen_lang_template", type "./gen_lang_template.sh" instead 4 | #based on gen_needed_translations.sh 5 | echo '-- generated by ./tools/gen_lang_template.sh' 6 | echo 'locale ={' 7 | echo ' name="",' 8 | echo ' languageName="",' 9 | echo ' translation = {' 10 | cat <(find -L ../ \( -name "*.lua" -o -name "*.otui" \) -exec grep -oE "tr\\('(\\\\'|[^'])*'" {} \;) \ 11 | <(find -L ../ \( -name "*.lua" -o -name "*.otui" \) -exec grep -oE "tr\\(\"(\\\\\"|[^\"])*\"" {} \;) \ 12 | | sort | uniq | sed "s/^tr(.\(.*\).$/ [\"\1\"] = \"\",/" 13 | echo ' }' 14 | echo '}' 15 | echo 'modules.client_locales.installLocale(locale)' 16 | -------------------------------------------------------------------------------- /tools/gen_needed_translations.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo '-- generated by ./tools/gen_needed_translations.sh' 3 | echo 'neededTranslations = {' 4 | cat <(find -L \( -name "*.lua" -o -name "*.otui" \) -exec grep -oE "tr\\('(\\\\'|[^'])*'" {} \;) \ 5 | <(find -L \( -name "*.lua" -o -name "*.otui" \) -exec grep -oE "tr\\(\"(\\\\\"|[^\"])*\"" {} \;) \ 6 | | sort | uniq | sed "s/^tr(.\(.*\).$/ \"\1\",/" 7 | echo '}' 8 | -------------------------------------------------------------------------------- /tools/katepart-syntax/README: -------------------------------------------------------------------------------- 1 | Syntax for OTML files for kate/kwrite/kdevelop 2 | Place the xml files in $HOME/.kde4/share/apps/katepart/syntax/ 3 | 4 | After installing the files to go in "Configure Kate->Editor Component->Open/Save->Mode & Filetypes" 5 | select "Markup/OTML" and add "kate: space-indent on; indent-width 2;" in Variables field, 6 | do the same for "Scripts/Lua". -------------------------------------------------------------------------------- /vc14/arch32.props: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | true 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /vc14/arch64.props: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | Speed 8 | true 9 | StreamingSIMDExtensions2 10 | Fast 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /vc14/debug.props: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | $(ProjectDir)../ 7 | true 8 | 9 | 10 | 11 | false 12 | false 13 | EnableFastChecks 14 | MultiThreadedDebugDLL 15 | $(IntDir)\obj_r\%(RelativeDir) 16 | /bigobj%(AdditionalOptions) 17 | 18 | 19 | $(OTCLIENT_LIBDEPS_D) 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /vc14/otclient.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.23107.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "otclient", "otclient.vcxproj", "{17A8F78F-1FFB-4128-A3B3-59CC6C19D89A}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Win32 = Debug|Win32 11 | Debug|x64 = Debug|x64 12 | Release|Win32 = Release|Win32 13 | Release|x64 = Release|x64 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {17A8F78F-1FFB-4128-A3B3-59CC6C19D89A}.Debug|Win32.ActiveCfg = Debug|Win32 17 | {17A8F78F-1FFB-4128-A3B3-59CC6C19D89A}.Debug|Win32.Build.0 = Debug|Win32 18 | {17A8F78F-1FFB-4128-A3B3-59CC6C19D89A}.Debug|x64.ActiveCfg = Debug|x64 19 | {17A8F78F-1FFB-4128-A3B3-59CC6C19D89A}.Debug|x64.Build.0 = Debug|x64 20 | {17A8F78F-1FFB-4128-A3B3-59CC6C19D89A}.Release|Win32.ActiveCfg = Release|Win32 21 | {17A8F78F-1FFB-4128-A3B3-59CC6C19D89A}.Release|Win32.Build.0 = Release|Win32 22 | {17A8F78F-1FFB-4128-A3B3-59CC6C19D89A}.Release|x64.ActiveCfg = Release|x64 23 | {17A8F78F-1FFB-4128-A3B3-59CC6C19D89A}.Release|x64.Build.0 = Release|x64 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | EndGlobal 29 | -------------------------------------------------------------------------------- /vc14/register_otclient_boost_env.bat: -------------------------------------------------------------------------------- 1 | setx BOOST_ROOT_OTCLIENT %CD% -------------------------------------------------------------------------------- /vc14/register_otclient_sdk_env.bat: -------------------------------------------------------------------------------- 1 | setx OTCLIENTSDKDir %CD% -------------------------------------------------------------------------------- /vc14/release.props: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | $(ProjectDir)../ 7 | false 8 | 9 | 10 | 11 | Full 12 | $(IntDir)\obj_r\%(RelativeDir) 13 | 14 | 15 | UseLinkTimeCodeGeneration 16 | 17 | 18 | 19 | 20 | 21 | --------------------------------------------------------------------------------