From 902ce06e880360d6a0682c279ca22c6d0e95c031 Mon Sep 17 00:00:00 2001 From: BeniS Date: Mon, 9 Jul 2012 23:37:47 +1200 Subject: [PATCH] Fixed an issue with the battle list filter. More work on the minimap, interface changes, fixed direction controls, fixed reseting, fixed some draw things (needs some more work to finish). Fixed a bug in the battle list causing Battle.onFollow(creature) to execute when there was no follow. --- .gitignore | 1 + modules/game_battle/battle.lua | 5 +- modules/game_minimap/compass.png | Bin 16462 -> 6792 bytes modules/game_minimap/floor_down.png | Bin 0 -> 4437 bytes modules/game_minimap/floor_up.png | Bin 0 -> 4438 bytes modules/game_minimap/minimap.lua | 34 ++++++----- modules/game_minimap/minimap.otui | 81 +++++++++++++++++++++---- modules/game_minimap/zoom_in.png | Bin 0 -> 4454 bytes modules/game_minimap/zoom_out.png | Bin 0 -> 4230 bytes src/otclient/core/game.cpp | 13 +++- src/otclient/core/mapview.cpp | 36 ++++++++--- src/otclient/core/mapview.h | 2 + src/otclient/net/protocolgameparse.cpp | 1 + 13 files changed, 135 insertions(+), 38 deletions(-) create mode 100644 modules/game_minimap/floor_down.png create mode 100644 modules/game_minimap/floor_up.png create mode 100644 modules/game_minimap/zoom_in.png create mode 100644 modules/game_minimap/zoom_out.png diff --git a/.gitignore b/.gitignore index 4b2deb73..657dde36 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ CMakeLists.txt.user* /modules/myotclientrc.lua !.gitignore otclient.map +otclient.layout diff --git a/modules/game_battle/battle.lua b/modules/game_battle/battle.lua index dcf882e8..899b6c89 100644 --- a/modules/game_battle/battle.lua +++ b/modules/game_battle/battle.lua @@ -130,13 +130,13 @@ function Battle.doCreatureFitFilters(creature) local hideSkulls = hideSkullsButton:isChecked() local hideParty = hidePartyButton:isChecked() - if hidePlayers and not creature:asMonster() and not creature:asNpc() then + if hidePlayers and creature:asPlayer() then return false elseif hideNPCs and creature:asNpc() then return false elseif hideMonsters and creature:asMonster() then return false - elseif hideSkulls and creature:getSkull() == SkullNone then + elseif hideSkulls and creature:asPlayer() and creature:getSkull() == SkullNone then return false elseif hideParty and creature:getShield() > ShieldWhiteBlue then return false @@ -359,6 +359,7 @@ function Battle.checkBattleButton(battleButton) end if battleButton.isTarget or battleButton.isFollowed then + -- set new last battle button switched if lastBattleButtonSwitched and lastBattleButtonSwitched ~= battleButton then lastBattleButtonSwitched.isTarget = false lastBattleButtonSwitched.isFollowed = false diff --git a/modules/game_minimap/compass.png b/modules/game_minimap/compass.png index 8754c3a0e662849fa4df170643ccbdc2ed9ec335..3de73991c82e5b79ee856667b83e584a76846212 100644 GIT binary patch literal 6792 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 diff --git a/modules/game_minimap/floor_down.png b/modules/game_minimap/floor_down.png new file mode 100644 index 0000000000000000000000000000000000000000..b508610e006ce97606878b0a5a5d15deef532948 GIT binary patch literal 4437 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 czK#DI0JmTT+U*`Tr2qf`07*qoM6N<$f=f= fromPosition.x and position.y >= fromPosition.y and position.x <= toPosition.x and position.y <= toPosition.y) end @@ -111,32 +126,23 @@ compassZones.west = {x = 0, y = 30, posx = -1, posy = 0} compassZones.north = {x = 30, y = 0, posx = 0, posy = -1} compassZones.south = {x = 30, y = 57, posx = 0, posy = 1} compassZones.east = {x = 57, y = 30, posx = 1, posy = 0} -compassZones.center = {x = 30, y = 30, posx = 0, posy = 0, center = true} function Minimap.compassClick(self, mousePos) local compassPos = self:getRect() local pos = {x = mousePos.x-compassPos.x, y = mousePos.y-compassPos.y} local move = {x = 0, y = 0} - local center = false for i,v in pairs(compassZones) do local lowPos = {x = v.x-15, y = v.y-15} local highPos = {x = v.x+15, y = v.y+15} if Minimap.isClickInRange(pos, lowPos, highPos) then move.x = move.x + v.posx * minimapWidget:getZoom()/10 move.y = move.y + v.posy * minimapWidget:getZoom()/10 - if v.center then center = true end break end end - if center then - local player = g_game.getLocalPlayer() - if not player then return end - minimapWidget:followCreature(player) - else - local cameraPos = minimapWidget:getCameraPosition() - local pos = {x = cameraPos.x + move.x, y = cameraPos.y + move.y, z = cameraPos.z} - minimapWidget:setCameraPosition(pos) - end + local cameraPos = minimapWidget:getCameraPosition() + local pos = {x = cameraPos.x + move.x, y = cameraPos.y + move.y, z = cameraPos.z} + minimapWidget:setCameraPosition(pos) end function Minimap.onButtonClick(id) diff --git a/modules/game_minimap/minimap.otui b/modules/game_minimap/minimap.otui index fea6e717..a1308aef 100644 --- a/modules/game_minimap/minimap.otui +++ b/modules/game_minimap/minimap.otui @@ -1,3 +1,30 @@ +MapControl < Button + size: 16 16 + + $pressed: + image-clip: 0 0 16 16 + + $hover !pressed: + image-clip: 0 16 16 16 + + $!pressed !hover: + image-clip: 0 32 16 16 + + $disabled: + image-color: #ffffff88 + +FloorUpControl < MapControl + image-source: /game_minimap/floor_up.png + +FloorDownControl < MapControl + image-source: /game_minimap/floor_down.png + +//ZoomOutControl < MapControl + //image-source: /game_minimap/zoom_out.png + +//ZoomInControl < MapControl + //image-source: /game_minimap/zoom_in.png + MiniWindow id: minimapWindow !text: tr('Minimap') @@ -17,46 +44,74 @@ MiniWindow UIButton id: compass image-source: /game_minimap/compass.png + color: #ffffff anchors.left: minimap.right anchors.top: minimap.top size: 60 60 + margin-top: 3 margin-left: 5 @onClick: function(...) Minimap.compassClick(...) end + UIButton + id: compassReset + text: Reset + font: verdana-11px-rounded + anchors.left: compass.left + anchors.top: compass.top + margin-top: 25 + margin-left: 14 + @onClick: function(...) Minimap.center(...) end + $pressed: + color: #eb9f4f88 + margin-top: 26 + margin-left: 15 + + $hover !pressed: + color: #eb9f4f + + $!pressed !hover: + color: #ffffff + margin-top: 25 + margin-left: 14 + + $disabled: + image-color: #ffffff88 + Button id: zoomOut text: - - size: 20 20 + font: terminus-14px-bold + size: 16 16 anchors.left: minimap.right anchors.top: compass.bottom - margin-top: 5 - margin-left: 15 + margin-top: 10 + margin-left: 10 + enabled: true @onClick: Minimap.onButtonClick(self:getId()) Button id: zoomIn text: + - size: 20 20 + size: 16 16 anchors.left: zoomOut.left anchors.top: zoomOut.bottom - margin-top: 2 + margin-top: 4 + enabled: true @onClick: Minimap.onButtonClick(self:getId()) - Button + FloorUpControl id: levelUp - text: /\ - size: 20 20 anchors.left: zoomOut.right anchors.top: zoomOut.top - margin-left: 2 + margin-left: 15 + enabled: true @onClick: Minimap.onButtonClick(self:getId()) - Button + FloorDownControl id: levelDown - text: \/ - size: 20 20 anchors.left: zoomIn.right anchors.top: zoomIn.top - margin-left: 2 + margin-left: 15 + enabled: true @onClick: Minimap.onButtonClick(self:getId()) diff --git a/modules/game_minimap/zoom_in.png b/modules/game_minimap/zoom_in.png new file mode 100644 index 0000000000000000000000000000000000000000..5bec5146cee9c724b8a6fae827dc5b2e9f8ae622 GIT binary patch literal 4454 zcmV-s5t;6ZP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000J&NklP%abr+WgWy6VI5CqjVvK^5dG#dy{JyWh$Guf`T-?r> z*XR_~?$+T}opXLwa_-zYc7FSv%@7<~IK(Nc0!BLlq@8A9(U4hW8kL2QeQrtq`1OYe z-IdN9AtK%(fT|*1z!D;WD3;m)ScYiiS{beB(93Ks(iBKmWMW`Oj+u=s1_Gjj)4=jU z5Y3n>;*@MqOa{@b)`;sMDI;|xAndH~u(k9shd%fbOdPNN=1C3=|3EpvfC=C{77Xhs z-g(;1=7dWPK{KJ5vV7YL$M3uY=N$EO3smDVeVGTzWbep@$GQQJ8Im*7B$~kh)kw3m zh2%u1(?L~XIwtN6NM4XoQFWHFV8kNhB}YUW)~=LnRUbtK;=+WxkKI8C0TH2p^8K7Y zJEoKlZWoSSd7jnxW+r63nPG8;_LjN(GhbkSzDL#R&tpkBqvmbUQoKuQK{lZ$QUAu1KeIobc%{81}T9k9s>~}4M)8EyQk@OD#-Az zdq2d=(c@so#pnOR=09H|R0Z{L!csCs3~+cuAq)E#u99B(1|4Y_TpMxKeV_eDkAn!8 zo_U&um%mMasYj^#EZu&9lu87{lO1M}q7Ztw^_i0yeJ$Ay`*?kHy0>z0b&lS`t>g+Q zY9tj{7QCefi3t-WVI=jK^N4myxeZYHMbL`ujVxt*9x0J#f{#ITXHl_xu)zZ&5D z8P;FTbx0g6B<9V<)Eq832}xz%A*h$&bi zH3n0d$dZ>AUwo1EAAWwb>KNVmK(8C zjSt^PQFyfUh}X7-4cg8D#NOmVF=>#-Q4|HT{lsH~{=wdy6cM~42qFSrz~Wv2#o}8$ zm^lWQbm(<@F*2(lDwZ;qjWml~yI^Dt6T!QJ{f7N0&Hs^xXh# z%yo&oL!|0M0@T12NN{+|ZDZtFWV*2hsb=`vI`w3Hy%OuufZfe))If`hPFR65Vl;S3 z4KU;4zbh_>k5i|H-F-t&9X|fwQa}deBf- z!piDAQjZC_WN_0S#2RU0>wzeu9-O;*51O%&do_5EbOSWT+#yFge};`$euddPdth~D zIuiWuwB!4AMr?xf4yppz5%w=U3%LOic#8))8a9QgE_pFCu6*s2n?;pyJ%*F8uhV;D;gfBC5;4^W;sMN#-S6@k3L0~2eF00bc#K{LU5p??z|^vVv-3}PbVTMxVn^~N^OJ@q72A^+2Zo%In#Y!BN^@fpQZ z!Kvj7jQ;#3oHt&*d;<>_d(2zG;(beIK_mO5wiZwAQVi6>RfzK8&%MdfBMzTbA&a?IVAMvlh z{(_u^V*3i^YQSQRn1>uOlqUJsgWkdtI$B3!0)bv9aboouEY%=_&U+FSk`+h7LO??A s?H-_e|BN9fZ}Ff7LJdg%x(ELm0O_-zH@JRl<^TWy07*qoM6N<$g31_0oB#j- literal 0 HcmV?d00001 diff --git a/modules/game_minimap/zoom_out.png b/modules/game_minimap/zoom_out.png new file mode 100644 index 0000000000000000000000000000000000000000..9da7a4f17e6e97b0705d7e954a6762d6c8319234 GIT binary patch literal 4230 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 literal 0 HcmV?d00001 diff --git a/src/otclient/core/game.cpp b/src/otclient/core/game.cpp index 3b4978c0..c5ca88c8 100644 --- a/src/otclient/core/game.cpp +++ b/src/otclient/core/game.cpp @@ -241,6 +241,8 @@ void Game::processCreatureMove(const CreaturePtr& creature, const Position& oldP { // animate walk creature->walk(oldPos, newPos); + + g_lua.callGlobalField("g_game", "onCreatureMove", creature, oldPos, newPos); } void Game::processCreatureTeleport(const CreaturePtr& creature) @@ -251,6 +253,8 @@ void Game::processCreatureTeleport(const CreaturePtr& creature) // locks the walk for a while when teleporting if(creature == m_localPlayer) m_localPlayer->lockWalk(); + + g_lua.callGlobalField("g_game", "onCreatureTeleport", creature); } void Game::processChannelList(const std::vector>& channelList) @@ -528,6 +532,8 @@ void Game::forceWalk(Otc::Direction direction) default: break; } + + g_lua.callGlobalField("g_game", "onForceWalk", direction); } void Game::turn(Otc::Direction direction) @@ -736,8 +742,11 @@ void Game::cancelAttackAndFollow() m_localPlayer->lockWalk(); - setAttackingCreature(nullptr); - setFollowingCreature(nullptr); + if(isAttacking()) + setAttackingCreature(nullptr); + if(isFollowing()) + setFollowingCreature(nullptr); + m_protocolGame->sendCancelAttackAndFollow(); } diff --git a/src/otclient/core/mapview.cpp b/src/otclient/core/mapview.cpp index c15dbdc6..47cfc313 100644 --- a/src/otclient/core/mapview.cpp +++ b/src/otclient/core/mapview.cpp @@ -127,7 +127,7 @@ void MapView::draw(const Rect& rect) Point drawOffset = ((m_drawDimension - m_visibleDimension - Size(1,1)).toPoint()/2) * m_tileSize; - if(m_followingCreature) + if(isFollowingCreature()) drawOffset += m_followingCreature->getWalkOffset() * scaleFactor; Size srcSize = rect.size(); @@ -210,11 +210,32 @@ void MapView::draw(const Rect& rect) } } else if(m_viewMode > NEAR_VIEW) { // draw a cross in the center instead of our creature + /* + Known Issue: Changing Z axis causes the cross to go off a little bit. + */ Rect vRect(0, 0, 2, 10); Rect hRect(0, 0, 10, 2); - vRect.moveCenter(rect.center()); - hRect.moveCenter(rect.center()); g_painter->setColor(Color::white); + + if(!m_follow && m_followingCreature) + { + Position pos = m_followingCreature->getPosition(); + Point p = transformPositionTo2D(pos, cameraPosition) - drawOffset; + p.x = p.x * horizontalStretchFactor; + p.y = p.y * verticalStretchFactor; + p += rect.topLeft(); + + vRect.setX(p.x); vRect.setY(p.y - 4); + hRect.setX(p.x - 4); hRect.setY(p.y); + + hRect.setWidth(10); hRect.setHeight(2); + vRect.setWidth(2); vRect.setHeight(10); + } + else { + vRect.moveCenter(rect.center()); + hRect.moveCenter(rect.center()); + } + g_painter->drawFilledRect(vRect); g_painter->drawFilledRect(hRect); } @@ -525,14 +546,15 @@ void MapView::optimizeForSize(const Size& visibleSize) void MapView::followCreature(const CreaturePtr& creature) { + m_follow = true; m_followingCreature = creature; requestVisibleTilesCacheUpdate(); } void MapView::setCameraPosition(const Position& pos) { + m_follow = false; m_customCameraPosition = pos; - m_followingCreature = nullptr; requestVisibleTilesCacheUpdate(); } @@ -623,8 +645,9 @@ int MapView::calcLastVisibleFloor() Position MapView::getCameraPosition() { - if(m_followingCreature) + if(isFollowingCreature()) return m_followingCreature->getPosition(); + return m_customCameraPosition; } @@ -641,13 +664,12 @@ TilePtr MapView::getTile(const Point& mousePos, const Rect& mapRect) float scaleFactor = m_tileSize / (float)Otc::TILE_PIXELS; - float horizontalStretchFactor = visibleSize.width() / (float)mapRect.width(); float verticalStretchFactor = visibleSize.height() / (float)mapRect.height(); Point tilePos2D = Point(relativeMousePos.x * horizontalStretchFactor, relativeMousePos.y * verticalStretchFactor); - if(m_followingCreature) + if(isFollowingCreature()) tilePos2D += m_followingCreature->getWalkOffset() * scaleFactor; tilePos2D /= m_tileSize; diff --git a/src/otclient/core/mapview.h b/src/otclient/core/mapview.h index 817a7630..a71dbbce 100644 --- a/src/otclient/core/mapview.h +++ b/src/otclient/core/mapview.h @@ -89,6 +89,7 @@ public: // camera related void followCreature(const CreaturePtr& creature); CreaturePtr getFollowingCreature() { return m_followingCreature; } + bool isFollowingCreature() { return m_followingCreature && m_follow; } void setCameraPosition(const Position& pos); Position getCameraPosition(); @@ -141,6 +142,7 @@ private: Boolean m_drawTexts; Boolean m_smooth; Boolean m_drawMinimapColors; + Boolean m_follow; std::vector m_cachedVisibleTiles; std::vector m_cachedFloorVisibleCreatures; EventPtr m_updateTilesCacheEvent; diff --git a/src/otclient/net/protocolgameparse.cpp b/src/otclient/net/protocolgameparse.cpp index c455d6e8..6d5fd20a 100644 --- a/src/otclient/net/protocolgameparse.cpp +++ b/src/otclient/net/protocolgameparse.cpp @@ -511,6 +511,7 @@ void ProtocolGame::parseCreatureMove(const InputMessagePtr& msg) // update map tiles if(!g_map.removeThing(thing)) g_logger.traceError("could not remove thing"); + g_map.addThing(thing, newPos); }