display 'you are dead message' on death, support speak/text messages in multiprotocol

This commit is contained in:
Eduardo Bart 2012-01-08 16:29:41 -02:00
parent fbaa7c8c43
commit c7619316bb
17 changed files with 602 additions and 468 deletions

View File

@ -56,10 +56,6 @@ function Game.onConnectionError(message)
errorBox.onOk = CharacterList.show
end
function Game.onDeath()
print('dead')
end
local function onApplicationClose()
print('close app')
if Game.isOnline() then

View File

@ -4,8 +4,6 @@ TextMessage = {}
importStyle 'textmessage.otui'
-- private variables
local bottomLabelWidget, centerLabelWidget
local MessageTypes = {
warning = { color = '#F55E5E', showOnConsole = true, showOnWindow = true, windowLocation = 'CenterLabel' },
eventAdvance = { color = '#FFFFFF', showOnConsole = true, showOnWindow = true, windowLocation = 'CenterLabel' },
@ -18,37 +16,13 @@ local MessageTypes = {
consoleRed = { color = '#F55E5E', showOnConsole = true, showOnWindow = false }
}
local MessageTypesMap = {
[12] = MessageTypes.consoleOrange,
[13] = MessageTypes.consoleOrange,
[14] = MessageTypes.warning,
[15] = MessageTypes.eventAdvance,
[15] = MessageTypes.eventDefault,
[16] = MessageTypes.statusDefault,
[17] = MessageTypes.infoDesc,
[18] = MessageTypes.statusSmall,
[19] = MessageTypes.consoleBlue,
[20] = MessageTypes.consoleRed,
--[[
[18] = MessageTypes.consoleRed,
[19] = MessageTypes.consoleOrange,
[20] = MessageTypes.consoleOrange,
[21] = MessageTypes.warning,
[22] = MessageTypes.eventAdvance,
[23] = MessageTypes.eventDefault,
[24] = MessageTypes.statusDefault,
[25] = MessageTypes.infoDesc,
[26] = MessageTypes.statusSmall,
[27] = MessageTypes.consoleBlue
]]--
}
-- private variables
local bottomLabelWidget
local centerLabelWidget
local bottomLabelHideEvent
local centerLabelHideEvent
-- private functions
local function displayMessage(msgtype, msg)
local function displayMessage(msgtype, msg, time)
if msgtype.showOnConsole then
-- TODO
end
@ -66,7 +40,11 @@ local function displayMessage(msgtype, msg)
label:setStyle(msgtype.windowLocation)
label:setForegroundColor(msgtype.color)
time = #msg * 75
if not time then
time = math.max(#msg * 75, 3000)
else
time = time * 1000
end
removeEvent(label.hideEvent)
label.hideEvent = scheduleEvent(function() label:setVisible(false) end, time)
end
@ -78,25 +56,33 @@ function TextMessage.create()
centerLabelWidget = createWidget('UILabel', Game.gameMapPanel)
end
function TextMessage.displayWarning(msg)
TextMessage.display(MessageTypes.warning, msg)
function TextMessage.displayStatus(msg, time)
displayMessage(MessageTypes.warning, msg)
end
function TextMessage.display(msgtypeid, msg)
local msgtype = MessageTypesMap[msgtypeid]
function TextMessage.displayEventAdvance(msg, time)
displayMessage(MessageTypes.eventAdvance, msg, time)
end
function TextMessage.display(msgtypedesc, msg)
local msgtype = MessageTypes[msgtypedesc]
if msgtype == nil then
error('unknown text msg type ' .. msgtypeid)
error('unknown text msg type ' .. msgtype)
return
end
displayMessage(msgtype, msg)
end
-- hooked events
function TextMessage.onTextMessage(msgtypeid, msg)
TextMessage.display(msgtypeid, msg)
local function onGameDeath()
TextMessage.displayEventAdvance('You are dead.', 10)
end
local function onGameTextMessage(msgtype, msg)
TextMessage.display(msgtype, msg)
end
connect(Game, { onLogin = TextMessage.create,
onLogout = TextMessage.destroy,
onTextMessage = TextMessage.onTextMessage })
onDeath = onGameDeath,
onTextMessage = onGameTextMessage })

View File

@ -39,9 +39,10 @@ FIND_PACKAGE(ZLIB REQUIRED)
IF(CMAKE_COMPILER_IS_GNUCXX)
SET(CXX_WARNS "-Wall -Wextra -Werror -Wno-unused-parameter -Wno-unused-but-set-variable -Wno-unused-variable -Wno-switch -Wno-missing-field-initializers")
SET(CMAKE_CXX_FLAGS "-std=gnu++0x -pipe ${CXX_WARNS}")
SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3 -ggdb3 -fno-inline")
SET(CMAKE_CXX_FLAGS_FULLDEBUG "-O0 -g3 -ggdb3 -fno-inline")
SET(CMAKE_CXX_FLAGS_DEBUG "-O1 -g -ggdb -fno-inline")
SET(CMAKE_CXX_FLAGS_RELEASE "-O2")
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O1 -g -ggdb -fno-inline")
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -ggdb")
SET(CMAKE_CXX_LINK_FLAGS "-static-libgcc -static-libstdc++ -Wl,--as-needed")
ENDIF(CMAKE_COMPILER_IS_GNUCXX)

View File

@ -7,6 +7,7 @@ ENDIF(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 6)
OPTION(NO_BOT_PROTECTION "Disables bot protection" OFF)
SET(PROTOCOL 862 CACHE "Protocol version" STRING)
ADD_DEFINITIONS(-DPROTOCOL=${PROTOCOL})
MESSAGE(STATUS "Protocol: " ${PROTOCOL})
IF(NO_BOT_PROTECTION)
ADD_DEFINITIONS(-DNO_BOT_PROTECTION)

View File

@ -31,28 +31,6 @@ namespace Otc
static const char* AppCompactName = "otclient";
static const char* AppVersion = "0.4.0";
static const char* CipsoftPublicRSA = "1321277432058722840622950990822933849527763264961655079678763618"
"4334395343554449668205332383339435179772895415509701210392836078"
"6959821132214473291575712138800495033169914814069637740318278150"
"2907336840325241747827401343576296990629870233111328210165697754"
"88792221429527047321331896351555606801473202394175817";
static const char* OtservPublicRSA = "1091201329673994292788609605089955415282375029027981291234687579"
"3726629149257644633073969600111060390723088861007265581882535850"
"3429057592827629436413108566029093628212635953836686562675849720"
"6207862794310902180176810615217550567108238764764442605581471797"
"07119674283982419152118103759076030616683978566631413";
static const int ClientVersion = 862;
static const int PicSignature = 0x4E119CBF;
enum OsTypes {
OsWindow = 1,
OsLinux = 2,
OsMac = 3,
OsBrowser = 4
};
enum DatOpts {
DatGround = 0,
DatGroundClip,
@ -91,165 +69,6 @@ namespace Otc
DatLastOpt = 255
};
enum LoginServerOpts {
LoginServerError = 10,
LoginServerMotd = 20,
LoginServerUpdateNeeded = 30,
LoginServerCharacterList = 100
};
enum GameServerOpts {
GameServerInitGame = 10,
GameServerLoginError = 20,
GameServerLoginAdvice = 21,
GameServerLoginWait = 22,
GameServerPing = 30,
GameServerChallange = 31,
GameServerDead = 40,
GameServerFullMap = 100,
GameServerMapTopRow = 101,
GameServerMapRightRow = 102,
GameServerMapBottomRow = 103,
GameServerMapLeftRow = 104,
GameServerTileData = 105,
GameServerCreateOnMap = 106,
GameServerChangeOnMap = 107,
GameServerDeleteOnMap = 108,
GameServerMoveCreature = 109,
GameServerOpenContainer = 110,
GameServerCloseContainer = 111,
GameServerCreateContainer = 112,
GameServerChangeInContainer = 113,
GameServerDeleteInContainer = 114,
GameServerSetInventory = 120,
GameServerDeleteInventory = 121,
GameServerNpcOffer = 122,
GameServerPlayerGoods = 123,
GameServerCloseNpcTrade = 124,
GameServerOwnOffer = 125,
GameServerCounterOffer = 126,
GameServerCloseTrade = 127,
GameServerAmbient = 130,
GameServerGraphicalEffect = 131,
GameServerTextEffect = 132, // absolate in last tibia?
GameServerMissleEffect = 133,
GameServerMarkCreature = 134,
GameServerTrappers = 135,
GameServerCreatureHealth = 140,
GameServerCreatureLight = 141,
GameServerCreatureOutfit = 142,
GameServerCreatureSpeed = 143,
GameServerCreatureSkull = 144,
GameServerCreatureParty = 145,
GameServerCreatureUnpass = 146,
GameServerEditText = 150,
GameServerEditList = 151,
GameServerPlayerData = 160,
GameServerPlayerSkills = 161,
GameServerPlayerState = 162,
GameServerClearTarget = 163,
GameServerSpellDelay = 164,
GameServerSpellGroupDelay = 165,
GameServerTalk = 170,
GameServerChannels = 171,
GameServerOpenChannel = 172,
GameServerPrivateChannel = 173,
GameServerRuleViolation = 174, // absolate in last tibia?
GameServerRuleViolation1 = 175, // absolate in last tibia?
GameServerRuleViolation2 = 176, // absolate in last tibia?
GameServerRuleViolation3 = 177, // absolate in last tibia?
GameServerOpenOwnChannel = 178,
GameServerCloseChannel = 179,
GameServerMessage = 180,
GameServerSnapBack = 181,
GameServerWait = 182,
GameServerTopFloor = 190,
GameServerBottomFloor = 191,
GameServerOutfit = 200,
GameServerBuddyData = 210,
GameServerBuddyLogin = 211,
GameServerBuddyLogout = 212,
GameServerTutorialHint = 220,
GameServerAutomapFlag = 221,
GameServerQuestLog = 240,
GameServerQuestLine = 241,
GameServerChannelEvent = 243,
GameServerObjectInfo = 244,
GameServerPlayerInventory = 245
};
enum ClientOpts {
ClientEnterAccount = 1,
ClientEnterGame = 10,
ClientQuitGame = 20,
ClientPingBack = 30,
ClientGoPath = 100,
ClientGoNorth = 101,
ClientGoEast = 102,
ClientGoSouth = 103,
ClientGoWest = 104,
ClientStop = 105,
ClientGoNorthEast = 106,
ClientGoSouthEast = 107,
ClientGoSouthWest = 108,
ClientGoNorthWest = 109,
ClientRotateNorth = 111,
ClientRotateEast = 112,
ClientRotateSouth = 113,
ClientRotateWest = 114,
ClientEquipObject = 119,
ClientMoveObject = 120,
ClientInspectNpcTrade = 121,
ClientBuyObject = 122,
ClientSellObject = 123,
ClientCloseNpcTrade = 124,
ClientTradeObject = 125,
ClientInspectTrade = 126,
ClientAcceptTrade = 127,
ClientRejectTrade = 128,
ClientUseObject = 130,
ClientUseTwoObjects = 131,
ClientUseOnCreature = 132,
ClientTurnObject = 133,
ClientCloseContainer = 135,
ClientUpContainer = 136,
ClientEditText = 137,
ClientEditList = 138,
ClientLook = 140,
ClientTalk = 150,
ClientGetChannels = 151,
ClientJoinChannel = 152,
ClientLeaveChannel = 153,
ClientPrivateChannel = 154,
ClientCloseNpcChannel = 158,
ClientSetTactics = 160,
ClientAttack = 161,
ClientFollow = 162,
ClientInviteToParty = 163,
ClientJoinParty = 164,
ClientRevokeInvitation = 165,
ClientPassLeadership = 166,
ClientLeaveParty = 167,
ClientShareExperience = 168,
ClientDisbandParty = 169,
ClientOpenChannel = 170,
ClientInviteToChannel = 171,
ClientExcludeFromChannel = 172,
ClientCancel = 190,
ClientRefreshContainer = 202,
ClientGetOutfit = 210,
ClientSetOutfit = 211,
ClientMount = 212,
ClientAddBuddy = 220,
ClientRemoveBuddy = 221,
ClientBugReport = 230,
ClientErrorFileEntry = 232,
ClientGetQuestLog = 240,
ClientGetQuestLine = 241,
ClientRuleViolationReport = 242,
ClientGetObjectInfo = 243
};
enum InventorySlots {
InventorySlotHead = 1,
InventorySlotNecklace,
@ -332,42 +151,6 @@ namespace Otc
FluidCoconutMilk = 15
};
enum SpeakClasses {
SpeakSay = 1, //normal talk
SpeakWhisper, //whispering - #w text
SpeakYell, //yelling - #y text
SpeakPrivatePlayerToNpc, //Player-to-NPC speaking(NPCs channel)
SpeakPrivateNpcToPlayer, //NPC-to-Player speaking
SpeakPrivate, //Players speaking privately to players
SpeakChannelYellow, //Yellow message in chat
SpeakChannelWhite, //White message in chat
#if PROTOCOL==860
SpeakReportChannel, //Reporting rule violation - Ctrl+R
SpeakReportAnswer, //Answering report
SpeakReportContinue, //Answering the answer of the report
#endif
SpeakBroadcast, //Broadcast a message - #b
SpeakChannelRed, //Talk red on chat - #c
SpeakPrivateRed, //Red private - @name@ text
SpeakChannelOrange, //Talk orange on text
#if PROTOCOL==860
SpeakUnk1,
SpeakChannelRed2, //Talk red anonymously on chat - #d
SpeakUnk2,
#endif
SpeakMonsterSay, //Talk orange
SpeakMonsterYell //Yell orange
};
enum CreaturesIdRange {
PlayerStartId = 0x10000000,
PlayerEndId = 0x40000000,
MonsterStartId = 0x40000000,
MonsterEndId = 0x80000000,
NpcStartId = 0x80000000,
NpcEndId = 0xffffffff
};
enum FightModes {
FightOffensive = 1,
FightBalanced = 2,

View File

@ -24,9 +24,11 @@
#include "localplayer.h"
#include "map.h"
#include "tile.h"
#include <otclient/net/protocolgame.h>
#include <framework/core/eventdispatcher.h>
#include <framework/ui/uimanager.h>
#include <otclient/luascript/luavaluecasts.h>
#include <otclient/core/statictext.h>
#include <otclient/net/protocolgame.h>
Game g_game;
@ -101,7 +103,18 @@ void Game::processDeath()
g_dispatcher.scheduleEvent(std::bind(&Game::forceLogout, &g_game), 5 * 1000);
}
void Game::processTextMessage(int type, const std::string& message)
void Game::processCreatureSpeak(const std::string& name, int level, const std::string& type, const std::string& message, int channelId, const Position& creaturePos)
{
if(creaturePos.isValid()) {
StaticTextPtr staticText = StaticTextPtr(new StaticText);
staticText->addMessage(name, type, message);
g_map.addThing(staticText, creaturePos);
}
g_lua.callGlobalField("Game", "onCreatureSpeak", name, level, type, message, channelId, creaturePos);
}
void Game::processTextMessage(const std::string& type, const std::string& message)
{
g_lua.callGlobalField("Game","onTextMessage", type, message);
}

View File

@ -45,7 +45,8 @@ public:
void processLogout();
void processDeath();
void processTextMessage(int type, const std::string& message);
void processTextMessage(const std::string& type, const std::string& message);
void processCreatureSpeak(const std::string& name, int level, const std::string& type, const std::string& message, int channelId, const Position& creaturePos);
void processInventoryChange(int slot, const ItemPtr& item);
void processAttackCancel();

View File

@ -100,8 +100,7 @@ bool LocalPlayer::canWalk(Otc::Direction direction)
Position newPos = m_position + Position::getPosFromDirection(direction);
TilePtr tile = g_map.getTile(newPos);
if(!tile->isWalkable()) {
// TODO: create enum for 17, white message on screen bottom and console.
g_game.processTextMessage(17, "Sorry, not possible.");
g_game.processTextMessage("statusSmall", "Sorry, not possible.");
return false;
}

View File

@ -40,16 +40,16 @@ void StaticText::draw(const Point& p, const Rect& visibleRect)
}
}
bool StaticText::addMessage(const std::string& name, int type, const std::string& message)
bool StaticText::addMessage(const std::string& name, const std::string& type, const std::string& message)
{
// First message
if(m_messages.size() == 0) {
m_name = name;
m_type = type;
m_messageType = type;
}
else {
// we can only add another message if it follows these conditions
if(m_name != name || m_type != type)
if(m_name != name || m_messageType != type)
return false;
}
@ -83,31 +83,31 @@ void StaticText::compose()
{
m_text.clear();
if(m_type == Otc::SpeakSay) {
if(m_messageType == "say") {
m_text += m_name;
m_text += " says:\n";
m_color = Color(239, 239, 0);
}
else if(m_type == Otc::SpeakWhisper) {
else if(m_messageType == "whisper") {
m_text += m_name;
m_text += " whispers:\n";
m_color = Color(239, 239, 0);
}
else if(m_type == Otc::SpeakYell) {
else if(m_messageType == "yell") {
m_text += m_name;
m_text += " yells:\n";
m_color = Color(239, 239, 0);
}
else if(m_type == Otc::SpeakMonsterSay || m_type == Otc::SpeakMonsterYell) {
else if(m_messageType == "monsterSay" || m_messageType == "monsterYell") {
m_color = Color(254, 101, 0);
}
else if(m_type == Otc::SpeakPrivateNpcToPlayer) {
else if(m_messageType == "npcToPlayer") {
m_text += m_name;
m_text += " says:\n";
m_color = Color(95, 247, 247);
}
else {
logWarning("unknown speak type: ", m_type);
logWarning("unknown speak type: ", m_messageType);
}
// Todo: add break lines

View File

@ -38,10 +38,10 @@ public:
void draw(const Point& p, const Rect& visibleRect);
std::string getName() { return m_name; }
int getMessageType() { return m_type; }
std::string getMessageType() { return m_messageType; }
std::string getFirstMessage() { return m_messages[0]; }
bool addMessage(const std::string& name, int type, const std::string& message);
bool addMessage(const std::string& name, const std::string& type, const std::string& message);
void removeMessage();
StaticTextPtr asStaticText() { return std::static_pointer_cast<StaticText>(shared_from_this()); }
@ -53,7 +53,7 @@ private:
Size m_textSize;
std::vector<std::string> m_messages;
std::string m_name, m_text;
int m_type;
std::string m_messageType;
Color m_color;
};

View File

@ -62,13 +62,16 @@ bool luavalue_cast(int index, Outfit& outfit)
void push_luavalue(const Position& pos)
{
g_lua.newTable();
g_lua.pushInteger(pos.x);
g_lua.setField("x");
g_lua.pushInteger(pos.y);
g_lua.setField("y");
g_lua.pushInteger(pos.z);
g_lua.setField("z");
if(pos.isValid()) {
g_lua.newTable();
g_lua.pushInteger(pos.x);
g_lua.setField("x");
g_lua.pushInteger(pos.y);
g_lua.setField("y");
g_lua.pushInteger(pos.z);
g_lua.setField("z");
} else
g_lua.pushNil();
}
bool luavalue_cast(int index, Position& pos)

View File

@ -25,6 +25,7 @@
#include <otclient/global.h>
#include <framework/net/declarations.h>
#include "protocolcodes.h"
class ProtocolLogin;
class ProtocolGame;

View File

@ -0,0 +1,355 @@
/*
* Copyright (c) 2010-2012 OTClient <https://github.com/edubart/otclient>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef PROTOCOLCODES_H
#define PROTOCOLCODES_H
#include <otclient/global.h>
#if PROTOCOL != 860 && PROTOCOL != 862
#error "the supplied protocol version is not supported"
#endif
namespace Proto {
#ifdef CIPSOFT_RSA
static const char* RSA = "1321277432058722840622950990822933849527763264961655079678763618"
"4334395343554449668205332383339435179772895415509701210392836078"
"6959821132214473291575712138800495033169914814069637740318278150"
"2907336840325241747827401343576296990629870233111328210165697754"
"88792221429527047321331896351555606801473202394175817";
#else
static const char* RSA = "1091201329673994292788609605089955415282375029027981291234687579"
"3726629149257644633073969600111060390723088861007265581882535850"
"3429057592827629436413108566029093628212635953836686562675849720"
"6207862794310902180176810615217550567108238764764442605581471797"
"07119674283982419152118103759076030616683978566631413";
#endif
static const int ClientVersion = PROTOCOL;
static const int PicSignature = 0x4E119CBF;
enum OsTypes {
OsWindow = 1,
OsLinux = 2,
OsMac = 3,
OsBrowser = 4
};
enum LoginServerOpts {
LoginServerError = 10,
LoginServerMotd = 20,
LoginServerUpdateNeeded = 30,
LoginServerCharacterList = 100
};
enum GameServerOpts {
GameServerInitGame = 10,
GameServerLoginError = 20,
GameServerLoginAdvice = 21,
GameServerLoginWait = 22,
GameServerPing = 30,
GameServerChallange = 31,
GameServerDead = 40,
GameServerFullMap = 100,
GameServerMapTopRow = 101,
GameServerMapRightRow = 102,
GameServerMapBottomRow = 103,
GameServerMapLeftRow = 104,
GameServerTileData = 105,
GameServerCreateOnMap = 106,
GameServerChangeOnMap = 107,
GameServerDeleteOnMap = 108,
GameServerMoveCreature = 109,
GameServerOpenContainer = 110,
GameServerCloseContainer = 111,
GameServerCreateContainer = 112,
GameServerChangeInContainer = 113,
GameServerDeleteInContainer = 114,
GameServerSetInventory = 120,
GameServerDeleteInventory = 121,
GameServerNpcOffer = 122,
GameServerPlayerGoods = 123,
GameServerCloseNpcTrade = 124,
GameServerOwnOffer = 125,
GameServerCounterOffer = 126,
GameServerCloseTrade = 127,
GameServerAmbient = 130,
GameServerGraphicalEffect = 131,
GameServerTextEffect = 132, // absolate in last tibia?
GameServerMissleEffect = 133,
GameServerMarkCreature = 134,
GameServerTrappers = 135,
GameServerCreatureHealth = 140,
GameServerCreatureLight = 141,
GameServerCreatureOutfit = 142,
GameServerCreatureSpeed = 143,
GameServerCreatureSkull = 144,
GameServerCreatureParty = 145,
GameServerCreatureUnpass = 146,
GameServerEditText = 150,
GameServerEditList = 151,
GameServerPlayerData = 160,
GameServerPlayerSkills = 161,
GameServerPlayerState = 162,
GameServerClearTarget = 163,
GameServerSpellDelay = 164,
GameServerSpellGroupDelay = 165,
GameServerTalk = 170,
GameServerChannels = 171,
GameServerOpenChannel = 172,
GameServerPrivateChannel = 173,
GameServerRuleViolation = 174, // absolate in last tibia?
GameServerRuleViolation1 = 175, // absolate in last tibia?
GameServerRuleViolation2 = 176, // absolate in last tibia?
GameServerRuleViolation3 = 177, // absolate in last tibia?
GameServerOpenOwnChannel = 178,
GameServerCloseChannel = 179,
GameServerMessage = 180,
GameServerSnapBack = 181,
GameServerWait = 182,
GameServerTopFloor = 190,
GameServerBottomFloor = 191,
GameServerOutfit = 200,
GameServerBuddyData = 210,
GameServerBuddyLogin = 211,
GameServerBuddyLogout = 212,
GameServerTutorialHint = 220,
GameServerAutomapFlag = 221,
GameServerQuestLog = 240,
GameServerQuestLine = 241,
GameServerChannelEvent = 243,
GameServerObjectInfo = 244,
GameServerPlayerInventory = 245
};
enum ClientOpts {
ClientEnterAccount = 1,
ClientEnterGame = 10,
ClientQuitGame = 20,
ClientPingBack = 30,
ClientGoPath = 100,
ClientGoNorth = 101,
ClientGoEast = 102,
ClientGoSouth = 103,
ClientGoWest = 104,
ClientStop = 105,
ClientGoNorthEast = 106,
ClientGoSouthEast = 107,
ClientGoSouthWest = 108,
ClientGoNorthWest = 109,
ClientRotateNorth = 111,
ClientRotateEast = 112,
ClientRotateSouth = 113,
ClientRotateWest = 114,
ClientEquipObject = 119,
ClientMoveObject = 120,
ClientInspectNpcTrade = 121,
ClientBuyObject = 122,
ClientSellObject = 123,
ClientCloseNpcTrade = 124,
ClientTradeObject = 125,
ClientInspectTrade = 126,
ClientAcceptTrade = 127,
ClientRejectTrade = 128,
ClientUseObject = 130,
ClientUseTwoObjects = 131,
ClientUseOnCreature = 132,
ClientTurnObject = 133,
ClientCloseContainer = 135,
ClientUpContainer = 136,
ClientEditText = 137,
ClientEditList = 138,
ClientLook = 140,
ClientTalk = 150,
ClientGetChannels = 151,
ClientJoinChannel = 152,
ClientLeaveChannel = 153,
ClientPrivateChannel = 154,
ClientCloseNpcChannel = 158,
ClientSetTactics = 160,
ClientAttack = 161,
ClientFollow = 162,
ClientInviteToParty = 163,
ClientJoinParty = 164,
ClientRevokeInvitation = 165,
ClientPassLeadership = 166,
ClientLeaveParty = 167,
ClientShareExperience = 168,
ClientDisbandParty = 169,
ClientOpenChannel = 170,
ClientInviteToChannel = 171,
ClientExcludeFromChannel = 172,
ClientCancel = 190,
ClientRefreshContainer = 202,
ClientGetOutfit = 210,
ClientSetOutfit = 211,
ClientMount = 212,
ClientAddBuddy = 220,
ClientRemoveBuddy = 221,
ClientBugReport = 230,
ClientErrorFileEntry = 232,
ClientGetQuestLog = 240,
ClientGetQuestLine = 241,
ClientRuleViolationReport = 242,
ClientGetObjectInfo = 243
};
enum SpeakTypes {
#if PROTOCOL==862
SpeakSay = 1,
SpeakWhisper,
SpeakYell,
SpeakPrivatePlayerToNpc,
SpeakPrivateNpcToPlayer,
SpeakPrivate,
SpeakChannelYellow,
SpeakChannelWhite,
SpeakBroadcast,
SpeakChannelRed,
SpeakPrivateRed,
SpeakChannelOrange,
SpeakMonsterSay,
SpeakMonsterYell
#elif PROTOCOL==860
SpeakSay = 1,
SpeakWhisper,
SpeakYell,
SpeakPrivatePlayerToNpc,
SpeakPrivateNpcToPlayer,
SpeakPrivate,
SpeakChannelYellow,
SpeakChannelWhite,
SpeakReportChannel,
SpeakReportAnswer,
SpeakReportContinue,
SpeakBroadcast,
SpeakChannelRed,
SpeakPrivateRed,
SpeakChannelOrange,
SpeakUnk1,
SpeakUnk2,
SpeakUnk3,
SpeakMonsterSay,
SpeakMonsterYell
#endif
};
enum MessageTypes {
#if PROTOCOL==860
MessageConsoleRed = 18,
MessageConsoleOrange1,
MessageConsoleOrange2,
MessageWarning,
MessageEventAdvance,
MessageEventDefault,
MessageStatusDefault,
MessageInfoDescription,
MessageStatusSmall,
MessageConsoleBlue
#elif PROTOCOL==862
MessageConsoleOrange1 = 12,
MessageConsoleOrange2,
MessageWarning,
MessageEventAdvance,
MessageEventDefault,
MessageStatusDefault,
MessageInfoDescription,
MessageStatusSmall,
MessageConsoleBlue,
MessageConsoleRed
#endif
};
enum CreaturesIdRange {
PlayerStartId = 0x10000000,
PlayerEndId = 0x40000000,
MonsterStartId = 0x40000000,
MonsterEndId = 0x80000000,
NpcStartId = 0x80000000,
NpcEndId = 0xffffffff
};
inline std::string translateSpeakType(int type) {
switch(type) {
case Proto::SpeakSay:
return "say";
case Proto::SpeakWhisper:
return "whisper";
case Proto::SpeakYell:
return "yell";
case Proto::SpeakMonsterSay:
return "monsterSay";
case Proto::SpeakMonsterYell:
return "monsterYell";
case Proto::SpeakPrivateNpcToPlayer:
return "npcToPlayer";
break;
case Proto::SpeakChannelYellow:
return "channelYellow";
case Proto::SpeakChannelWhite:
return "channelWhite";
case Proto::SpeakChannelRed:
return "channelRed";
case Proto::SpeakChannelOrange:
return "channelOrange";
case Proto::SpeakPrivate:
return "private";
case Proto::SpeakPrivatePlayerToNpc:
return "playerToNpc";
case Proto::SpeakBroadcast:
return "broadcast";
case Proto::SpeakPrivateRed:
return "privateRed";
default:
return "unknown";
}
}
inline std::string translateMessageType(int type) {
switch(type) {
case Proto::MessageConsoleRed:
return "consoleRed";
case Proto::MessageConsoleOrange1:
return "consoleOrange";
case Proto::MessageConsoleOrange2:
return "consoleOrange";
case Proto::MessageWarning:
return "warning";
case Proto::MessageEventAdvance:
return "eventAdvance";
case Proto::MessageEventDefault:
return "eventDefault";
case Proto::MessageStatusDefault:
return "statusDefault";
case Proto::MessageInfoDescription:
return "infoDescription";
case Proto::MessageStatusSmall:
return "statusSmall";
case Proto::MessageConsoleBlue:
return "consoleBlue";
default:
return "unknown";
}
}
}
#endif

View File

@ -32,8 +32,6 @@
#include <otclient/core/tile.h>
#include <otclient/luascript/luavaluecasts.h>
#include <framework/core/eventdispatcher.h>
#include <framework/graphics/particlemanager.h>
#include <otclient/core/statictext.h>
void ProtocolGame::parseMessage(InputMessage& msg)
{
@ -42,216 +40,216 @@ void ProtocolGame::parseMessage(InputMessage& msg)
uint8 opt = msg.getU8();
switch(opt) {
case Otc::GameServerInitGame:
case Proto::GameServerInitGame:
parsePlayerLogin(msg);
break;
case 0x0B:
parseGMActions(msg);
break;
case Otc::GameServerLoginError:
case Proto::GameServerLoginError:
parseLoginError(msg);
break;
case Otc::GameServerLoginAdvice:
case Proto::GameServerLoginAdvice:
parseFYIMessage(msg);
break;
case Otc::GameServerLoginWait:
case Proto::GameServerLoginWait:
parseWaitList(msg);
break;
case Otc::GameServerPing:
case Proto::GameServerPing:
parsePing(msg);
break;
//case Otc::GameServerChallange:
case Otc::GameServerDead:
//case Proto::GameServerChallange:
case Proto::GameServerDead:
parseDeath(msg);
break;
case Otc::GameServerFullMap:
case Proto::GameServerFullMap:
parseMapDescription(msg);
break;
case Otc::GameServerMapTopRow:
case Proto::GameServerMapTopRow:
parseMoveNorth(msg);
break;
case Otc::GameServerMapRightRow:
case Proto::GameServerMapRightRow:
parseMoveEast(msg);
break;
case Otc::GameServerMapBottomRow:
case Proto::GameServerMapBottomRow:
parseMoveSouth(msg);
break;
case Otc::GameServerMapLeftRow:
case Proto::GameServerMapLeftRow:
parseMoveWest(msg);
break;
case Otc::GameServerTileData:
case Proto::GameServerTileData:
parseUpdateTile(msg);
break;
case Otc::GameServerCreateOnMap:
case Proto::GameServerCreateOnMap:
parseTileAddThing(msg);
break;
case Otc::GameServerChangeOnMap:
case Proto::GameServerChangeOnMap:
parseTileTransformThing(msg);
break;
case Otc::GameServerDeleteOnMap:
case Proto::GameServerDeleteOnMap:
parseTileRemoveThing(msg);
break;
case Otc::GameServerMoveCreature:
case Proto::GameServerMoveCreature:
parseCreatureMove(msg);
break;
case Otc::GameServerOpenContainer:
case Proto::GameServerOpenContainer:
parseOpenContainer(msg);
break;
case Otc::GameServerCloseContainer:
case Proto::GameServerCloseContainer:
parseCloseContainer(msg);
break;
case Otc::GameServerCreateContainer:
case Proto::GameServerCreateContainer:
parseContainerAddItem(msg);
break;
case Otc::GameServerChangeInContainer:
case Proto::GameServerChangeInContainer:
parseContainerUpdateItem(msg);
break;
case Otc::GameServerDeleteInContainer:
case Proto::GameServerDeleteInContainer:
parseContainerRemoveItem(msg);
break;
case Otc::GameServerSetInventory:
case Proto::GameServerSetInventory:
parseAddInventoryItem(msg);
break;
case Otc::GameServerDeleteInventory:
case Proto::GameServerDeleteInventory:
parseRemoveInventoryItem(msg);
break;
case Otc::GameServerNpcOffer:
case Proto::GameServerNpcOffer:
parseOpenShopWindow(msg);
break;
case Otc::GameServerPlayerGoods:
case Proto::GameServerPlayerGoods:
parsePlayerCash(msg);
break;
case Otc::GameServerCloseNpcTrade:
case Proto::GameServerCloseNpcTrade:
parseCloseShopWindow(msg);
break;
case Otc::GameServerOwnOffer:
case Proto::GameServerOwnOffer:
parseSafeTradeRequest(msg);
break;
case Otc::GameServerCounterOffer:
case Proto::GameServerCounterOffer:
parseSafeTradeRequest(msg);
break;
case Otc::GameServerCloseTrade:
case Proto::GameServerCloseTrade:
parseSafeTradeClose(msg);
break;
case Otc::GameServerAmbient:
case Proto::GameServerAmbient:
parseWorldLight(msg);
break;
case Otc::GameServerGraphicalEffect:
case Proto::GameServerGraphicalEffect:
parseMagicEffect(msg);
break;
case Otc::GameServerTextEffect:
case Proto::GameServerTextEffect:
parseAnimatedText(msg);
break;
case Otc::GameServerMissleEffect:
case Proto::GameServerMissleEffect:
parseDistanceMissile(msg);
break;
case Otc::GameServerMarkCreature:
case Proto::GameServerMarkCreature:
parseCreatureSquare(msg);
break;
//case Otc::GameServerTrappers
case Otc::GameServerCreatureHealth:
//case Proto::GameServerTrappers
case Proto::GameServerCreatureHealth:
parseCreatureHealth(msg);
break;
case Otc::GameServerCreatureLight:
case Proto::GameServerCreatureLight:
parseCreatureLight(msg);
break;
case Otc::GameServerCreatureOutfit:
case Proto::GameServerCreatureOutfit:
parseCreatureOutfit(msg);
break;
case Otc::GameServerCreatureSpeed:
case Proto::GameServerCreatureSpeed:
parseCreatureSpeed(msg);
break;
case Otc::GameServerCreatureSkull:
case Proto::GameServerCreatureSkull:
parseCreatureSkulls(msg);
break;
case Otc::GameServerCreatureParty:
case Proto::GameServerCreatureParty:
parseCreatureShields(msg);
break;
// case Otc::GameServerCreatureUnpass
case Otc::GameServerEditText:
// case Proto::GameServerCreatureUnpass
case Proto::GameServerEditText:
parseItemTextWindow(msg);
break;
case Otc::GameServerEditList:
case Proto::GameServerEditList:
parseHouseTextWindow(msg);
break;
case Otc::GameServerPlayerData:
case Proto::GameServerPlayerData:
parsePlayerStats(msg);
break;
case Otc::GameServerPlayerSkills:
case Proto::GameServerPlayerSkills:
parsePlayerSkills(msg);
break;
case Otc::GameServerPlayerState:
case Proto::GameServerPlayerState:
parsePlayerIcons(msg);
break;
case Otc::GameServerClearTarget:
case Proto::GameServerClearTarget:
parsePlayerCancelAttack(msg);
break;
//case Otc::GameServerSpellDelay:
//case Otc::GameServerSpellGroupDelay:
case Otc::GameServerTalk:
//case Proto::GameServerSpellDelay:
//case Proto::GameServerSpellGroupDelay:
case Proto::GameServerTalk:
parseCreatureSpeak(msg);
break;
case Otc::GameServerChannels:
case Proto::GameServerChannels:
parseChannelList(msg);
break;
case Otc::GameServerOpenChannel:
case Proto::GameServerOpenChannel:
parseOpenChannel(msg);
break;
case Otc::GameServerPrivateChannel:
case Proto::GameServerPrivateChannel:
parseOpenPrivatePlayerChat(msg);
break;
case Otc::GameServerRuleViolation:
case Otc::GameServerRuleViolation1:
case Otc::GameServerRuleViolation2:
case Otc::GameServerRuleViolation3:
case Proto::GameServerRuleViolation:
case Proto::GameServerRuleViolation1:
case Proto::GameServerRuleViolation2:
case Proto::GameServerRuleViolation3:
parseOpenRuleViolation(msg);
break;
case Otc::GameServerOpenOwnChannel:
case Proto::GameServerOpenOwnChannel:
parseCreatePrivateChannel(msg);
break;
case Otc::GameServerCloseChannel:
case Proto::GameServerCloseChannel:
parseClosePrivateChannel(msg);
break;
case Otc::GameServerMessage:
case Proto::GameServerMessage:
parseTextMessage(msg);
break;
case Otc::GameServerSnapBack:
case Proto::GameServerSnapBack:
parseCancelWalk(msg);
break;
//case Otc::GameServerWait:
case Otc::GameServerTopFloor:
//case Proto::GameServerWait:
case Proto::GameServerTopFloor:
parseFloorChangeUp(msg);
break;
case Otc::GameServerBottomFloor:
case Proto::GameServerBottomFloor:
parseFloorChangeDown(msg);
break;
case Otc::GameServerOutfit:
case Proto::GameServerOutfit:
parseOutfitWindow(msg);
break;
case Otc::GameServerBuddyData:
case Proto::GameServerBuddyData:
parseVipState(msg);
break;
case Otc::GameServerBuddyLogin:
case Proto::GameServerBuddyLogin:
parseVipLogin(msg);
break;
case Otc::GameServerBuddyLogout:
case Proto::GameServerBuddyLogout:
parseVipLogout(msg);
break;
case Otc::GameServerTutorialHint:
case Proto::GameServerTutorialHint:
parseShowTutorial(msg);
break;
case Otc::GameServerAutomapFlag:
case Proto::GameServerAutomapFlag:
parseAddMarker(msg);
break;
case Otc::GameServerQuestLog:
case Proto::GameServerQuestLog:
parseQuestList(msg);
break;
case Otc::GameServerQuestLine:
case Proto::GameServerQuestLine:
parseQuestPartList(msg);
break;
//case Otc::GameServerChannelEvent:
//case Otc::GameServerObjectInfo:
//case Otc::GameServerPlayerInventory:
//case Proto::GameServerChannelEvent:
//case Proto::GameServerObjectInfo:
//case Proto::GameServerPlayerInventory:
default:
Fw::throwException("unknown opt byte ", (int)opt);
break;
@ -746,30 +744,30 @@ void ProtocolGame::parseCreatureSpeak(InputMessage& msg)
Position creaturePos;
switch(type) {
case Otc::SpeakSay:
case Otc::SpeakWhisper:
case Otc::SpeakYell:
case Otc::SpeakMonsterSay:
case Otc::SpeakMonsterYell:
case Otc::SpeakPrivateNpcToPlayer:
case Proto::SpeakSay:
case Proto::SpeakWhisper:
case Proto::SpeakYell:
case Proto::SpeakMonsterSay:
case Proto::SpeakMonsterYell:
case Proto::SpeakPrivateNpcToPlayer:
creaturePos = parsePosition(msg);
break;
case Otc::SpeakChannelYellow:
case Otc::SpeakChannelWhite:
case Otc::SpeakChannelRed:
case Proto::SpeakChannelYellow:
case Proto::SpeakChannelWhite:
case Proto::SpeakChannelRed:
#if PROTOCOL==860
case Otc::SpeakChannelRed2:
case Proto::SpeakUnk2:
#endif
case Otc::SpeakChannelOrange:
case Proto::SpeakChannelOrange:
channelId = msg.getU16();
break;
case Otc::SpeakPrivate:
case Otc::SpeakPrivatePlayerToNpc:
case Otc::SpeakBroadcast:
case Otc::SpeakPrivateRed:
case Proto::SpeakPrivate:
case Proto::SpeakPrivatePlayerToNpc:
case Proto::SpeakBroadcast:
case Proto::SpeakPrivateRed:
break;
#if PROTOCOL==860
case Otc::SpeakReportChannel:
case Proto::SpeakReportChannel:
msg.getU32();
break;
#endif
@ -779,16 +777,11 @@ void ProtocolGame::parseCreatureSpeak(InputMessage& msg)
}
std::string message = msg.getString();
std::string typeDesc = Proto::translateSpeakType(type);
g_dispatcher.addEvent([=] {
g_lua.callGlobalField("Game", "onCreatureSpeak", name, level, type, message, channelId, creaturePos);
g_game.processCreatureSpeak(name, level, typeDesc, message, channelId, creaturePos);
});
if(creaturePos.isValid()) {
StaticTextPtr staticText = StaticTextPtr(new StaticText);
staticText->addMessage(name, type, message);
g_map.addThing(staticText, creaturePos);
}
}
void ProtocolGame::parseChannelList(InputMessage& msg)
@ -840,9 +833,11 @@ void ProtocolGame::parseClosePrivateChannel(InputMessage& msg)
void ProtocolGame::parseTextMessage(InputMessage& msg)
{
uint8 type = msg.getU8();
std::string typeDesc = Proto::translateMessageType(type);
std::string message = msg.getString();
g_dispatcher.addEvent(std::bind(&Game::processTextMessage, &g_game, type, message));
g_dispatcher.addEvent(std::bind(&Game::processTextMessage, &g_game, typeDesc, message));
}
void ProtocolGame::parseCancelWalk(InputMessage& msg)
@ -1091,11 +1086,11 @@ ThingPtr ProtocolGame::internalGetThing(InputMessage& msg)
if(id == (uint32)m_localPlayer->getId())
creature = m_localPlayer->asCreature();
else if(id >= Otc::PlayerStartId && id < Otc::PlayerEndId)
else if(id >= Proto::PlayerStartId && id < Proto::PlayerEndId)
creature = PlayerPtr(new Player)->asCreature();
else if(id >= Otc::MonsterStartId && id < Otc::MonsterEndId)
else if(id >= Proto::MonsterStartId && id < Proto::MonsterEndId)
creature = CreaturePtr(new Creature);
else if(id >= Otc::NpcStartId && id < Otc::NpcEndId)
else if(id >= Proto::NpcStartId && id < Proto::NpcEndId)
creature = CreaturePtr(new Creature);
else
logFatal("creature id is invalid");

View File

@ -27,9 +27,9 @@ void ProtocolGame::sendLoginPacket(uint32 timestamp, uint8 unknown)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientEnterGame);
oMsg.addU16(Otc::OsLinux);
oMsg.addU16(Otc::ClientVersion);
oMsg.addU8(Proto::ClientEnterGame);
oMsg.addU16(Proto::OsLinux);
oMsg.addU16(Proto::ClientVersion);
oMsg.addU8(0); // first RSA byte must be 0
@ -52,7 +52,7 @@ void ProtocolGame::sendLoginPacket(uint32 timestamp, uint8 unknown)
oMsg.addPaddingBytes(128 - (29 + m_accountName.length() + m_characterName.length() + m_accountPassword.length()));
// encrypt with RSA
Rsa::encrypt((char*)oMsg.getBuffer() + 6 + oMsg.getMessageSize() - 128, 128, Otc::OtservPublicRSA);
Rsa::encrypt((char*)oMsg.getBuffer() + 6 + oMsg.getMessageSize() - 128, 128, Proto::RSA);
send(oMsg);
@ -62,14 +62,14 @@ void ProtocolGame::sendLoginPacket(uint32 timestamp, uint8 unknown)
void ProtocolGame::sendLogout()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientQuitGame);
oMsg.addU8(Proto::ClientQuitGame);
send(oMsg);
}
void ProtocolGame::sendPing()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientPingBack);
oMsg.addU8(Proto::ClientPingBack);
send(oMsg);
}
@ -78,98 +78,98 @@ void ProtocolGame::sendPing()
void ProtocolGame::sendWalkNorth()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientGoNorth);
oMsg.addU8(Proto::ClientGoNorth);
send(oMsg);
}
void ProtocolGame::sendWalkEast()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientGoEast);
oMsg.addU8(Proto::ClientGoEast);
send(oMsg);
}
void ProtocolGame::sendWalkSouth()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientGoSouth);
oMsg.addU8(Proto::ClientGoSouth);
send(oMsg);
}
void ProtocolGame::sendWalkWest()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientGoWest);
oMsg.addU8(Proto::ClientGoWest);
send(oMsg);
}
void ProtocolGame::sendStopAutowalk()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientStop);
oMsg.addU8(Proto::ClientStop);
send(oMsg);
}
void ProtocolGame::sendWalkNorthEast()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientGoNorthEast);
oMsg.addU8(Proto::ClientGoNorthEast);
send(oMsg);
}
void ProtocolGame::sendWalkSouthEast()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientGoSouthEast);
oMsg.addU8(Proto::ClientGoSouthEast);
send(oMsg);
}
void ProtocolGame::sendWalkSouthWest()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientGoSouthWest);
oMsg.addU8(Proto::ClientGoSouthWest);
send(oMsg);
}
void ProtocolGame::sendWalkNorthWest()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientGoNorthWest);
oMsg.addU8(Proto::ClientGoNorthWest);
send(oMsg);
}
void ProtocolGame::sendTurnNorth()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientRotateNorth);
oMsg.addU8(Proto::ClientRotateNorth);
send(oMsg);
}
void ProtocolGame::sendTurnEast()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientRotateEast);
oMsg.addU8(Proto::ClientRotateEast);
send(oMsg);
}
void ProtocolGame::sendTurnSouth()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientRotateSouth);
oMsg.addU8(Proto::ClientRotateSouth);
send(oMsg);
}
void ProtocolGame::sendTurnWest()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientRotateWest);
oMsg.addU8(Proto::ClientRotateWest);
send(oMsg);
}
void ProtocolGame::sendThrow(const Position& fromPos, int thingId, int stackpos, const Position& toPos, int count)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientMoveObject);
oMsg.addU8(Proto::ClientMoveObject);
addPosition(oMsg, fromPos);
oMsg.addU16(thingId);
oMsg.addU8(stackpos);
@ -181,7 +181,7 @@ void ProtocolGame::sendThrow(const Position& fromPos, int thingId, int stackpos,
void ProtocolGame::sendLookInShop(int thingId, int count)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientInspectNpcTrade);
oMsg.addU8(Proto::ClientInspectNpcTrade);
oMsg.addU16(thingId);
oMsg.addU8(count);
send(oMsg);
@ -190,7 +190,7 @@ void ProtocolGame::sendLookInShop(int thingId, int count)
void ProtocolGame::sendPlayerPurchase(int thingId, int count, int amount, bool ignoreCapacity, bool buyWithBackpack)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientBuyObject);
oMsg.addU8(Proto::ClientBuyObject);
oMsg.addU16(thingId);
oMsg.addU8(count);
oMsg.addU8(amount);
@ -202,7 +202,7 @@ void ProtocolGame::sendPlayerPurchase(int thingId, int count, int amount, bool i
void ProtocolGame::sendPlayerSale(int thingId, int count, int amount, bool ignoreEquipped)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientSellObject);
oMsg.addU8(Proto::ClientSellObject);
oMsg.addU16(thingId);
oMsg.addU8(count);
oMsg.addU8(amount);
@ -213,14 +213,14 @@ void ProtocolGame::sendPlayerSale(int thingId, int count, int amount, bool ignor
void ProtocolGame::sendCloseShop()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientCloseNpcTrade);
oMsg.addU8(Proto::ClientCloseNpcTrade);
send(oMsg);
}
void ProtocolGame::sendRequestTrade(const Position& pos, int thingId, int stackpos, int playerId)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientTradeObject);
oMsg.addU8(Proto::ClientTradeObject);
addPosition(oMsg, pos);
oMsg.addU16(thingId);
oMsg.addU8(stackpos);
@ -231,7 +231,7 @@ void ProtocolGame::sendRequestTrade(const Position& pos, int thingId, int stackp
void ProtocolGame::sendLookInTrade(bool counterOffer, int index)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientInspectTrade);
oMsg.addU8(Proto::ClientInspectTrade);
oMsg.addU8(counterOffer ? 0x01 : 0x00);
oMsg.addU8(index);
send(oMsg);
@ -240,21 +240,21 @@ void ProtocolGame::sendLookInTrade(bool counterOffer, int index)
void ProtocolGame::sendAcceptTrade()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientAcceptTrade);
oMsg.addU8(Proto::ClientAcceptTrade);
send(oMsg);
}
void ProtocolGame::sendRejectTrade()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientRejectTrade);
oMsg.addU8(Proto::ClientRejectTrade);
send(oMsg);
}
void ProtocolGame::sendUseItem(const Position& position, int itemId, int stackpos, int index)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientUseObject);
oMsg.addU8(Proto::ClientUseObject);
addPosition(oMsg, position);
oMsg.addU16(itemId);
oMsg.addU8(stackpos);
@ -265,7 +265,7 @@ void ProtocolGame::sendUseItem(const Position& position, int itemId, int stackpo
void ProtocolGame::sendUseItemEx(const Position& fromPos, int fromThingId, int fromStackpos, const Position& toPos, int toThingId, int toStackpos)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientUseTwoObjects);
oMsg.addU8(Proto::ClientUseTwoObjects);
addPosition(oMsg, fromPos);
oMsg.addU16(fromThingId);
oMsg.addU8(fromStackpos);
@ -278,7 +278,7 @@ void ProtocolGame::sendUseItemEx(const Position& fromPos, int fromThingId, int f
void ProtocolGame::sendUseItemCreature(const Position& pos, int thingId, int stackpos, int creatureId)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientUseOnCreature);
oMsg.addU8(Proto::ClientUseOnCreature);
addPosition(oMsg, pos);
oMsg.addU16(thingId);
oMsg.addU8(stackpos);
@ -289,7 +289,7 @@ void ProtocolGame::sendUseItemCreature(const Position& pos, int thingId, int sta
void ProtocolGame::sendRotateItem(const Position& pos, int thingId, int stackpos)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientTurnObject);
oMsg.addU8(Proto::ClientTurnObject);
addPosition(oMsg, pos);
oMsg.addU16(thingId);
oMsg.addU8(stackpos);
@ -299,7 +299,7 @@ void ProtocolGame::sendRotateItem(const Position& pos, int thingId, int stackpos
void ProtocolGame::sendCloseContainer(int containerId)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientCloseContainer);
oMsg.addU8(Proto::ClientCloseContainer);
oMsg.addU8(containerId);
send(oMsg);
}
@ -307,7 +307,7 @@ void ProtocolGame::sendCloseContainer(int containerId)
void ProtocolGame::sendUpContainer(int containerId)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientUpContainer);
oMsg.addU8(Proto::ClientUpContainer);
oMsg.addU8(containerId);
send(oMsg);
}
@ -315,7 +315,7 @@ void ProtocolGame::sendUpContainer(int containerId)
void ProtocolGame::sendTextWindow(int windowTextId, const std::string& text)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientEditText);
oMsg.addU8(Proto::ClientEditText);
oMsg.addU32(windowTextId);
oMsg.addString(text);
send(oMsg);
@ -324,7 +324,7 @@ void ProtocolGame::sendTextWindow(int windowTextId, const std::string& text)
void ProtocolGame::sendHouseWindow(int doorId, int id, const std::string& text)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientEditList);
oMsg.addU8(Proto::ClientEditList);
oMsg.addU8(doorId);
oMsg.addU32(id);
oMsg.addString(text);
@ -334,7 +334,7 @@ void ProtocolGame::sendHouseWindow(int doorId, int id, const std::string& text)
void ProtocolGame::sendLookAt(const Position& position, int thingId, int stackpos)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientLook);
oMsg.addU8(Proto::ClientLook);
addPosition(oMsg, position);
oMsg.addU16(thingId);
oMsg.addU8(stackpos);
@ -347,18 +347,18 @@ void ProtocolGame::sendTalk(int channelType, int channelId, const std::string& r
return;
OutputMessage oMsg;
oMsg.addU8(Otc::ClientTalk);
oMsg.addU8(Proto::ClientTalk);
assert(channelType >= 0);
oMsg.addU8(channelType);
switch(channelType) {
case Otc::SpeakPrivate:
case Otc::SpeakPrivateRed:
case Proto::SpeakPrivate:
case Proto::SpeakPrivateRed:
oMsg.addString(receiver);
break;
case Otc::SpeakChannelYellow:
case Otc::SpeakChannelRed:
case Proto::SpeakChannelYellow:
case Proto::SpeakChannelRed:
oMsg.addU16(channelId);
break;
}
@ -370,14 +370,14 @@ void ProtocolGame::sendTalk(int channelType, int channelId, const std::string& r
void ProtocolGame::sendGetChannels()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientGetChannels);
oMsg.addU8(Proto::ClientGetChannels);
send(oMsg);
}
void ProtocolGame::sendJoinChannel(int channelId)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientJoinChannel);
oMsg.addU8(Proto::ClientJoinChannel);
oMsg.addU16(channelId);
send(oMsg);
}
@ -385,7 +385,7 @@ void ProtocolGame::sendJoinChannel(int channelId)
void ProtocolGame::sendLeaveChannel(int channelId)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientLeaveChannel);
oMsg.addU8(Proto::ClientLeaveChannel);
oMsg.addU16(channelId);
send(oMsg);
}
@ -393,7 +393,7 @@ void ProtocolGame::sendLeaveChannel(int channelId)
void ProtocolGame::sendPrivateChannel(const std::string& receiver)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientPrivateChannel);
oMsg.addU8(Proto::ClientPrivateChannel);
oMsg.addString(receiver);
send(oMsg);
}
@ -406,14 +406,14 @@ void ProtocolGame::sendPrivateChannel(const std::string& receiver)
void ProtocolGame::sendCloseNpcChannel()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientCloseNpcChannel);
oMsg.addU8(Proto::ClientCloseNpcChannel);
send(oMsg);
}
void ProtocolGame::sendFightTatics(Otc::FightModes fightMode, Otc::ChaseModes chaseMode, bool safeFight)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientSetTactics);
oMsg.addU8(Proto::ClientSetTactics);
oMsg.addU8(fightMode);
oMsg.addU8(chaseMode);
oMsg.addU8(safeFight ? 0x01: 0x00);
@ -423,7 +423,7 @@ void ProtocolGame::sendFightTatics(Otc::FightModes fightMode, Otc::ChaseModes ch
void ProtocolGame::sendAttack(int creatureId)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientAttack);
oMsg.addU8(Proto::ClientAttack);
oMsg.addU32(creatureId);
oMsg.addU32(0);
oMsg.addU32(0);
@ -433,7 +433,7 @@ void ProtocolGame::sendAttack(int creatureId)
void ProtocolGame::sendFollow(int creatureId)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientFollow);
oMsg.addU8(Proto::ClientFollow);
oMsg.addU32(creatureId);
send(oMsg);
}
@ -441,7 +441,7 @@ void ProtocolGame::sendFollow(int creatureId)
void ProtocolGame::sendInviteToParty(int creatureId)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientInviteToParty);
oMsg.addU8(Proto::ClientInviteToParty);
oMsg.addU32(creatureId);
send(oMsg);
}
@ -449,7 +449,7 @@ void ProtocolGame::sendInviteToParty(int creatureId)
void ProtocolGame::sendJoinParty(int creatureId)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientJoinParty);
oMsg.addU8(Proto::ClientJoinParty);
oMsg.addU32(creatureId);
send(oMsg);
}
@ -457,7 +457,7 @@ void ProtocolGame::sendJoinParty(int creatureId)
void ProtocolGame::sendRevokeInvitation(int creatureId)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientRevokeInvitation);
oMsg.addU8(Proto::ClientRevokeInvitation);
oMsg.addU32(creatureId);
send(oMsg);
}
@ -465,7 +465,7 @@ void ProtocolGame::sendRevokeInvitation(int creatureId)
void ProtocolGame::sendPassLeadership(int creatureId)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientPassLeadership);
oMsg.addU8(Proto::ClientPassLeadership);
oMsg.addU32(creatureId);
send(oMsg);
}
@ -473,14 +473,14 @@ void ProtocolGame::sendPassLeadership(int creatureId)
void ProtocolGame::sendLeaveParty()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientLeaveParty);
oMsg.addU8(Proto::ClientLeaveParty);
send(oMsg);
}
void ProtocolGame::sendShareExperience(bool active, int unknown)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientShareExperience);
oMsg.addU8(Proto::ClientShareExperience);
oMsg.addU8(active ? 0x01 : 0x00);
oMsg.addU8(unknown);
send(oMsg);
@ -489,14 +489,14 @@ void ProtocolGame::sendShareExperience(bool active, int unknown)
void ProtocolGame::sendOpenChannel()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientOpenChannel);
oMsg.addU8(Proto::ClientOpenChannel);
send(oMsg);
}
void ProtocolGame::sendInviteToChannel(const std::string& name)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientInviteToChannel);
oMsg.addU8(Proto::ClientInviteToChannel);
oMsg.addString(name);
send(oMsg);
}
@ -504,7 +504,7 @@ void ProtocolGame::sendInviteToChannel(const std::string& name)
void ProtocolGame::sendExcludeFromChannel(const std::string& name)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientExcludeFromChannel);
oMsg.addU8(Proto::ClientExcludeFromChannel);
oMsg.addString(name);
send(oMsg);
}
@ -512,7 +512,7 @@ void ProtocolGame::sendExcludeFromChannel(const std::string& name)
void ProtocolGame::sendCancel()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientCancel);
oMsg.addU8(Proto::ClientCancel);
send(oMsg);
}
@ -521,21 +521,21 @@ void ProtocolGame::sendCancel()
void ProtocolGame::sendUpdateContainer()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientRefreshContainer);
oMsg.addU8(Proto::ClientRefreshContainer);
send(oMsg);
}
void ProtocolGame::sendGetOutfit()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientGetOutfit);
oMsg.addU8(Proto::ClientGetOutfit);
send(oMsg);
}
void ProtocolGame::sendSetOutfit(const Outfit& outfit)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientSetOutfit);
oMsg.addU8(Proto::ClientSetOutfit);
oMsg.addU16(outfit.getType());
oMsg.addU8(outfit.getHead());
@ -550,7 +550,7 @@ void ProtocolGame::sendSetOutfit(const Outfit& outfit)
void ProtocolGame::sendAddVip(const std::string& name)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientAddBuddy);
oMsg.addU8(Proto::ClientAddBuddy);
oMsg.addString(name);
send(oMsg);
}
@ -558,7 +558,7 @@ void ProtocolGame::sendAddVip(const std::string& name)
void ProtocolGame::sendRemoveVip(int playerId)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientRemoveBuddy);
oMsg.addU8(Proto::ClientRemoveBuddy);
oMsg.addU32(playerId);
send(oMsg);
}
@ -570,14 +570,14 @@ void ProtocolGame::sendRemoveVip(int playerId)
void ProtocolGame::sendGetQuestLog()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientGetQuestLog);
oMsg.addU8(Proto::ClientGetQuestLog);
send(oMsg);
}
void ProtocolGame::sendGetQuestLine(int questId)
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientGetQuestLine);
oMsg.addU8(Proto::ClientGetQuestLine);
oMsg.addU16(questId);
send(oMsg);
}

View File

@ -57,16 +57,16 @@ void ProtocolLogin::onRecv(InputMessage& inputMessage)
while(!inputMessage.eof()) {
uint8 opt = inputMessage.getU8();
switch(opt) {
case Otc::LoginServerError:
case Proto::LoginServerError:
parseError(inputMessage);
break;
case Otc::LoginServerMotd:
case Proto::LoginServerMotd:
parseMOTD(inputMessage);
break;
case Otc::LoginServerUpdateNeeded:
case Proto::LoginServerUpdateNeeded:
callLuaField("onError", "Client needs update.");
break;
case Otc::LoginServerCharacterList:
case Proto::LoginServerCharacterList:
parseCharacterList(inputMessage);
break;
default:
@ -89,13 +89,13 @@ void ProtocolLogin::sendLoginPacket()
{
OutputMessage oMsg;
oMsg.addU8(Otc::ClientEnterAccount);
oMsg.addU16(Otc::OsLinux);
oMsg.addU16(Otc::ClientVersion);
oMsg.addU8(Proto::ClientEnterAccount);
oMsg.addU16(Proto::OsLinux);
oMsg.addU16(Proto::ClientVersion);
oMsg.addU32(g_thingsType.getSignature()); // data signature
oMsg.addU32(g_sprites.getSignature()); // sprite signature
oMsg.addU32(Otc::PicSignature); // pic signature
oMsg.addU32(Proto::PicSignature); // pic signature
oMsg.addU8(0); // first RSA byte must be 0
@ -111,7 +111,7 @@ void ProtocolLogin::sendLoginPacket()
// complete the 128 bytes for rsa encryption with zeros
oMsg.addPaddingBytes(128 - (21 + m_accountName.length() + m_accountPassword.length()));
Rsa::encrypt((char*)oMsg.getBuffer() + InputMessage::DATA_POS + oMsg.getMessageSize() - 128, 128, Otc::OtservPublicRSA);
Rsa::encrypt((char*)oMsg.getBuffer() + InputMessage::DATA_POS + oMsg.getMessageSize() - 128, 128, Proto::RSA);
send(oMsg);
enableXteaEncryption();