Commit 081717dd authored by nanahira's avatar nanahira

Merge branch 'patch-chat-reverse' into develop

parents 0ca71d8e ab78457a
...@@ -861,31 +861,17 @@ void DuelClient::HandleSTOCPacketLan(unsigned char* data, unsigned int len) { ...@@ -861,31 +861,17 @@ void DuelClient::HandleSTOCPacketLan(unsigned char* data, unsigned int len) {
case STOC_CHAT: { case STOC_CHAT: {
STOC_Chat* pkt = (STOC_Chat*)pdata; STOC_Chat* pkt = (STOC_Chat*)pdata;
int player = pkt->player; int player = pkt->player;
auto play_sound = false;
if(player < 4) { if(player < 4) {
if(!mainGame->dInfo.isTag) { auto localplayer = mainGame->ChatLocalPlayer(player);
if(mainGame->dInfo.isInDuel) { player = localplayer & 0xf;
player = mainGame->LocalPlayer(player); if(!(localplayer & 0x10))
if(player == 1 && mainGame->chkIgnore1->isChecked()) play_sound = true;
break; if(play_sound && mainGame->chkIgnore1->isChecked())
} break;
} else {
if(mainGame->dInfo.isInDuel && !mainGame->dInfo.isFirst)
player ^= 2;
if(player == 0)
player = 0;
else if(player == 1)
player = 2;
else if(player == 2)
player = 1;
else if(player == 3)
player = 3;
else
player = 10;
if(mainGame->dInfo.isStarted && (player == 1 || player == 3) && mainGame->chkIgnore1->isChecked())
break;
}
} else { } else {
if(player == 8) { //system custom message. if(player == 8) { //system custom message.
play_sound = true;
if(mainGame->chkIgnore1->isChecked()) if(mainGame->chkIgnore1->isChecked())
break; break;
} else if(player < 11 || player > 19) { } else if(player < 11 || player > 19) {
...@@ -897,7 +883,7 @@ void DuelClient::HandleSTOCPacketLan(unsigned char* data, unsigned int len) { ...@@ -897,7 +883,7 @@ void DuelClient::HandleSTOCPacketLan(unsigned char* data, unsigned int len) {
wchar_t msg[256]; wchar_t msg[256];
BufferIO::CopyWStr(pkt->msg, msg, 256); BufferIO::CopyWStr(pkt->msg, msg, 256);
mainGame->gMutex.lock(); mainGame->gMutex.lock();
mainGame->AddChatMsg(msg, player); mainGame->AddChatMsg(msg, player, play_sound);
mainGame->gMutex.unlock(); mainGame->gMutex.unlock();
break; break;
} }
......
...@@ -62,7 +62,6 @@ private: ...@@ -62,7 +62,6 @@ private:
static unsigned char response_buf[SIZE_RETURN_VALUE]; static unsigned char response_buf[SIZE_RETURN_VALUE];
static unsigned int response_len; static unsigned int response_len;
static unsigned int watching; static unsigned int watching;
static unsigned char selftype;
static bool is_host; static bool is_host;
static event_base* client_base; static event_base* client_base;
static bufferevent* client_bev; static bufferevent* client_bev;
...@@ -82,7 +81,7 @@ public: ...@@ -82,7 +81,7 @@ public:
static unsigned short temp_port; static unsigned short temp_port;
static unsigned short temp_ver; static unsigned short temp_ver;
static bool try_needed; static bool try_needed;
static unsigned char selftype;
static bool StartClient(unsigned int ip, unsigned short port, bool create_game = true); static bool StartClient(unsigned int ip, unsigned short port, bool create_game = true);
static void ConnectTimeout(evutil_socket_t fd, short events, void* arg); static void ConnectTimeout(evutil_socket_t fd, short events, void* arg);
static void StopClient(bool is_exiting = false); static void StopClient(bool is_exiting = false);
......
...@@ -1890,7 +1890,7 @@ void Game::AddLog(const wchar_t* msg, int param) { ...@@ -1890,7 +1890,7 @@ void Game::AddLog(const wchar_t* msg, int param) {
lstLog->setSelected(-1); lstLog->setSelected(-1);
} }
} }
void Game::AddChatMsg(const wchar_t* msg, int player) { void Game::AddChatMsg(const wchar_t* msg, int player, bool play_sound) {
for(int i = 7; i > 0; --i) { for(int i = 7; i > 0; --i) {
chatMsg[i] = chatMsg[i - 1]; chatMsg[i] = chatMsg[i - 1];
chatTiming[i] = chatTiming[i - 1]; chatTiming[i] = chatTiming[i - 1];
...@@ -1901,23 +1901,22 @@ void Game::AddChatMsg(const wchar_t* msg, int player) { ...@@ -1901,23 +1901,22 @@ void Game::AddChatMsg(const wchar_t* msg, int player) {
chatType[0] = player; chatType[0] = player;
if(gameConf.hide_player_name && player < 4) if(gameConf.hide_player_name && player < 4)
player = 10; player = 10;
if(play_sound)
soundManager.PlaySoundEffect(SOUND_CHAT);
switch(player) { switch(player) {
case 0: //from host case 0: //from host
chatMsg[0].append(dInfo.hostname); chatMsg[0].append(dInfo.hostname);
chatMsg[0].append(L": "); chatMsg[0].append(L": ");
break; break;
case 1: //from client case 1: //from client
soundManager.PlaySoundEffect(SOUND_CHAT);
chatMsg[0].append(dInfo.clientname); chatMsg[0].append(dInfo.clientname);
chatMsg[0].append(L": "); chatMsg[0].append(L": ");
break; break;
case 2: //host tag case 2: //host tag
soundManager.PlaySoundEffect(SOUND_CHAT);
chatMsg[0].append(dInfo.hostname_tag); chatMsg[0].append(dInfo.hostname_tag);
chatMsg[0].append(L": "); chatMsg[0].append(L": ");
break; break;
case 3: //client tag case 3: //client tag
soundManager.PlaySoundEffect(SOUND_CHAT);
chatMsg[0].append(dInfo.clientname_tag); chatMsg[0].append(dInfo.clientname_tag);
chatMsg[0].append(L": "); chatMsg[0].append(L": ");
break; break;
...@@ -1926,7 +1925,6 @@ void Game::AddChatMsg(const wchar_t* msg, int player) { ...@@ -1926,7 +1925,6 @@ void Game::AddChatMsg(const wchar_t* msg, int player) {
chatMsg[0].append(L": "); chatMsg[0].append(L": ");
break; break;
case 8: //system custom message, no prefix. case 8: //system custom message, no prefix.
soundManager.PlaySoundEffect(SOUND_CHAT);
chatMsg[0].append(L"[System]: "); chatMsg[0].append(L"[System]: ");
break; break;
case 9: //error message case 9: //error message
...@@ -2083,6 +2081,45 @@ int Game::LocalPlayer(int player) const { ...@@ -2083,6 +2081,45 @@ int Game::LocalPlayer(int player) const {
int pid = player ? 1 : 0; int pid = player ? 1 : 0;
return dInfo.isFirst ? pid : 1 - pid; return dInfo.isFirst ? pid : 1 - pid;
} }
int Game::OppositePlayer(int player) const {
if(dInfo.isTag) {
if(player == 0)
return 2;
if(player == 1)
return 3;
if(player == 2)
return 0;
if(player == 3)
return 1;
return player;
} else
return 1 - player;
}
int Game::ChatLocalPlayer(int player) const {
if(player > 3)
return player;
bool is_self;
if(dInfo.isStarted || is_siding) {
if(dInfo.isInDuel)
// when in duel
player = mainGame->dInfo.isFirst ? player : OppositePlayer(player);
else {
// when changing side or waiting tp result
auto selftype_boundary = dInfo.isTag ? 2 : 1;
if(DuelClient::selftype >= selftype_boundary)
player = OppositePlayer(player);
}
if(dInfo.isTag) {
is_self = (player & 0x2) == 0 && (player & 0x1) == (DuelClient::selftype & 0x1);
} else {
is_self = (player == 0);
}
return player | (is_self ? 0x10 : 0);
} else {
// when in lobby
return player | (player == DuelClient::selftype ? 0x10 : 0);
}
}
const wchar_t* Game::LocalName(int local_player) { const wchar_t* Game::LocalName(int local_player) {
return local_player == 0 ? dInfo.hostname : dInfo.clientname; return local_player == 0 ? dInfo.hostname : dInfo.clientname;
} }
......
...@@ -197,7 +197,7 @@ public: ...@@ -197,7 +197,7 @@ public:
void ShowCardInfo(int code, bool resize = false); void ShowCardInfo(int code, bool resize = false);
void ClearCardInfo(int player = 0); void ClearCardInfo(int player = 0);
void AddLog(const wchar_t* msg, int param = 0); void AddLog(const wchar_t* msg, int param = 0);
void AddChatMsg(const wchar_t* msg, int player); void AddChatMsg(const wchar_t* msg, int player, bool play_sound = false);
void ClearChatMsg(); void ClearChatMsg();
void AddDebugMsg(const char* msgbuf); void AddDebugMsg(const char* msgbuf);
void ErrorLog(const char* msgbuf); void ErrorLog(const char* msgbuf);
...@@ -208,6 +208,8 @@ public: ...@@ -208,6 +208,8 @@ public:
void CloseDuelWindow(); void CloseDuelWindow();
int LocalPlayer(int player) const; int LocalPlayer(int player) const;
int OppositePlayer(int player) const;
int ChatLocalPlayer(int player) const;
const wchar_t* LocalName(int local_player); const wchar_t* LocalName(int local_player);
const char* GetLocaleDir(const char* dir); const char* GetLocaleDir(const char* dir);
const wchar_t* GetLocaleDirWide(const char* dir); const wchar_t* GetLocaleDirWide(const char* dir);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment