diff --git a/modules/game_textbooks/textbooks.lua b/modules/game_textbooks/textbooks.lua index 21cd6d88..a04e6e94 100644 --- a/modules/game_textbooks/textbooks.lua +++ b/modules/game_textbooks/textbooks.lua @@ -3,7 +3,7 @@ TextBooks = {} local function onGameEditText(id, itemId, maxLength, text, writter, time) local textWindow = createWidget('TextWindow', rootWidget) - local writeable = maxLength ~= #text + local writeable = (maxLength ~= #text) and maxLength > 0 local textItem = textWindow:getChildById('textItem') local description = textWindow:getChildById('description') local textEdit = textWindow:getChildById('text') @@ -33,13 +33,40 @@ local function onGameEditText(id, itemId, maxLength, text, writter, time) end description:setText(desc) + + if not writeable then + textWindow:setText(tr('Show Text')) + cancelButton:hide() + else + textWindow:setText(tr('Edit Text')) + end + okButton.onClick = function() - g_game.editText(id, textEdit:getText()) + if writeable then + g_game.editText(id, textEdit:getText()) + end textWindow:destroy() end end -local function onGameEditList(listId, id, text) +local function onGameEditList(id, doorId, text) + local textWindow = createWidget('TextWindow', rootWidget) + + local textEdit = textWindow:getChildById('text') + local description = textWindow:getChildById('description') + local okButton = textWindow:getChildById('okButton') + local cancelButton = textWindow:getChildById('cancelButton') + + textEdit:setMaxLength(8192) + textEdit:setText(text) + textEdit:setEnabled(true) + description:setText(tr('Enter one text per line.')) + textWindow:setText(tr('Edit List')) + + okButton.onClick = function() + g_game.editList(id, doorId, textEdit:getText()) + textWindow:destroy() + end end function TextBooks.init() diff --git a/modules/game_textbooks/textwindow.otui b/modules/game_textbooks/textwindow.otui index 11fd8f81..3624bf79 100644 --- a/modules/game_textbooks/textwindow.otui +++ b/modules/game_textbooks/textwindow.otui @@ -1,13 +1,12 @@ TextWindow < MainWindow id: textWindow - !text: tr('Edit Text') size: 280 280 @onEscape: self:destroy() UIItem id: textItem virtual: true - item-id: 2816 + item-id: 173 size: 32 32 anchors.top: parent.top anchors.left: parent.left diff --git a/src/otclient/core/game.cpp b/src/otclient/core/game.cpp index b69453f9..93e415ec 100644 --- a/src/otclient/core/game.cpp +++ b/src/otclient/core/game.cpp @@ -394,14 +394,14 @@ void Game::processCloseTrade() g_lua.callGlobalField("g_game", "onCloseTrade"); } -void Game::processEditText(int id, int itemId, int maxLength, const std::string& text, const std::string& writter, const std::string& date) +void Game::processEditText(uint id, int itemId, int maxLength, const std::string& text, const std::string& writter, const std::string& date) { g_lua.callGlobalField("g_game", "onEditText", id, itemId, maxLength, text, writter, date); } -void Game::processEditList(int listId, int id, const std::string& text) +void Game::processEditList(uint id, int doorId, const std::string& text) { - g_lua.callGlobalField("g_game", "onEditList", listId, id, text); + g_lua.callGlobalField("g_game", "onEditList", id, doorId, text); } void Game::processQuestLog(const std::vector>& questList) @@ -973,11 +973,11 @@ void Game::editText(uint id, const std::string& text) m_protocolGame->sendEditText(id, text); } -void Game::editList(int listId, uint id, const std::string& text) +void Game::editList(uint id, int doorId, const std::string& text) { if(!canPerformGameAction()) return; - m_protocolGame->sendEditList(listId, id, text); + m_protocolGame->sendEditList(id, doorId, text); } void Game::reportBug(const std::string& comment) diff --git a/src/otclient/core/game.h b/src/otclient/core/game.h index 84d526b7..fc9e32c0 100644 --- a/src/otclient/core/game.h +++ b/src/otclient/core/game.h @@ -114,8 +114,8 @@ protected: void processCloseTrade(); // edit text/list - void processEditText(int id, int itemId, int maxLength, const std::string& text, const std::string& writter, const std::string& date); - void processEditList(int listId, int id, const std::string& text); + void processEditText(uint id, int itemId, int maxLength, const std::string& text, const std::string& writter, const std::string& date); + void processEditList(uint id, int doorId, const std::string& text); // questlog void processQuestLog(const std::vector>& questList); @@ -218,7 +218,7 @@ public: // house window and editable items related void editText(uint id, const std::string& text); - void editList(int listId, uint id, const std::string& text); + void editList(uint id, int doorId, const std::string& text); // reports void reportBug(const std::string& comment); diff --git a/src/otclient/net/protocolgame.h b/src/otclient/net/protocolgame.h index e14440fb..2aa89027 100644 --- a/src/otclient/net/protocolgame.h +++ b/src/otclient/net/protocolgame.h @@ -72,7 +72,7 @@ public: void sendCloseContainer(int containerId); void sendUpContainer(int containerId); void sendEditText(uint id, const std::string& text); - void sendEditList(int listId, uint id, const std::string& text); + void sendEditList(uint id, int doorId, const std::string& text); void sendLook(const Position& position, int thingId, int stackpos); void sendTalk(Otc::SpeakType speakType, int channelId, const std::string& receiver, const std::string& message); void sendRequestChannels(); diff --git a/src/otclient/net/protocolgameparse.cpp b/src/otclient/net/protocolgameparse.cpp index 9d926c80..06336520 100644 --- a/src/otclient/net/protocolgameparse.cpp +++ b/src/otclient/net/protocolgameparse.cpp @@ -718,7 +718,7 @@ void ProtocolGame::parseCreatureTurn(InputMessage& msg) void ProtocolGame::parseEditText(InputMessage& msg) { - int id = msg.getU32(); + uint id = msg.getU32(); int itemId = msg.getU16(); int maxLength = msg.getU16(); std::string text = msg.getString(); @@ -730,11 +730,11 @@ void ProtocolGame::parseEditText(InputMessage& msg) void ProtocolGame::parseEditList(InputMessage& msg) { - int listId = msg.getU8(); - int id = msg.getU32(); + int doorId = msg.getU8(); + uint id = msg.getU32(); const std::string& text = msg.getString(); - g_game.processEditList(listId, id, text); + g_game.processEditList(id, doorId, text); } void ProtocolGame::parsePlayerStats(InputMessage& msg) diff --git a/src/otclient/net/protocolgamesend.cpp b/src/otclient/net/protocolgamesend.cpp index e4752e89..e1f07a1e 100644 --- a/src/otclient/net/protocolgamesend.cpp +++ b/src/otclient/net/protocolgamesend.cpp @@ -366,11 +366,11 @@ void ProtocolGame::sendEditText(uint id, const std::string& text) send(msg); } -void ProtocolGame::sendEditList(int listId, uint id, const std::string& text) +void ProtocolGame::sendEditList(uint id, int doorId, const std::string& text) { OutputMessage msg; msg.addU8(Proto::ClientEditList); - msg.addU8(listId); + msg.addU8(doorId); msg.addU32(id); msg.addString(text); send(msg);