Add report player function in dialog
This commit is contained in:
parent
e97e84f194
commit
bb3566ac81
@ -73,7 +73,8 @@ public:
|
|||||||
LE_LIVE_JOIN, // Client live join or spectate
|
LE_LIVE_JOIN, // Client live join or spectate
|
||||||
LE_LIVE_JOIN_ACK, // Server tell client live join or spectate succeed
|
LE_LIVE_JOIN_ACK, // Server tell client live join or spectate succeed
|
||||||
LE_KART_INFO, // Client or server exchange new kart info
|
LE_KART_INFO, // Client or server exchange new kart info
|
||||||
LE_CLIENT_BACK_LOBBY // Client tell server to go back lobby
|
LE_CLIENT_BACK_LOBBY, // Client tell server to go back lobby
|
||||||
|
LE_REPORT_USER // Client report user in server (like abusive behaviour)
|
||||||
};
|
};
|
||||||
|
|
||||||
enum RejectReason : uint8_t
|
enum RejectReason : uint8_t
|
||||||
|
@ -24,9 +24,11 @@
|
|||||||
#include "guiengine/widgets/icon_button_widget.hpp"
|
#include "guiengine/widgets/icon_button_widget.hpp"
|
||||||
#include "guiengine/widgets/label_widget.hpp"
|
#include "guiengine/widgets/label_widget.hpp"
|
||||||
#include "guiengine/widgets/ribbon_widget.hpp"
|
#include "guiengine/widgets/ribbon_widget.hpp"
|
||||||
|
#include "guiengine/widgets/text_box_widget.hpp"
|
||||||
#include "online/online_profile.hpp"
|
#include "online/online_profile.hpp"
|
||||||
#include "network/protocols/lobby_protocol.hpp"
|
#include "network/protocols/lobby_protocol.hpp"
|
||||||
#include "network/stk_host.hpp"
|
#include "network/stk_host.hpp"
|
||||||
|
#include "states_screens/dialogs/general_text_field_dialog.hpp"
|
||||||
#include "states_screens/state_manager.hpp"
|
#include "states_screens/state_manager.hpp"
|
||||||
#include "utils/translation.hpp"
|
#include "utils/translation.hpp"
|
||||||
|
|
||||||
@ -78,6 +80,8 @@ void NetworkUserDialog::beforeAddingWidgets()
|
|||||||
|
|
||||||
m_kick_widget = getWidget<IconButtonWidget>("decline");
|
m_kick_widget = getWidget<IconButtonWidget>("decline");
|
||||||
assert(m_kick_widget != NULL);
|
assert(m_kick_widget != NULL);
|
||||||
|
m_kick_widget->setImage(file_manager->getAsset(FileManager::GUI_ICON,
|
||||||
|
"remove.png"), IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE);
|
||||||
|
|
||||||
//I18N: In the network user dialog
|
//I18N: In the network user dialog
|
||||||
m_kick_widget->setText(_("Kick"));
|
m_kick_widget->setText(_("Kick"));
|
||||||
@ -123,7 +127,18 @@ void NetworkUserDialog::beforeAddingWidgets()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
getWidget<IconButtonWidget>("remove")->setVisible(false);
|
getWidget<IconButtonWidget>("remove")->setVisible(false);
|
||||||
getWidget<IconButtonWidget>("enter")->setVisible(false);
|
m_report_widget = getWidget<IconButtonWidget>("enter");
|
||||||
|
assert(m_report_widget != NULL);
|
||||||
|
if (m_host_id != STKHost::get()->getMyHostId())
|
||||||
|
{
|
||||||
|
// I18N: In the network user dialog,
|
||||||
|
// report player about for example abusive behaviour in game
|
||||||
|
m_report_widget->setText(_("Report player"));
|
||||||
|
m_report_widget->setImage(file_manager->getAsset(FileManager::GUI_ICON,
|
||||||
|
"red_mark.png"), IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
m_report_widget->setVisible(false);
|
||||||
} // beforeAddingWidgets
|
} // beforeAddingWidgets
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
@ -145,6 +160,28 @@ void NetworkUserDialog::onUpdate(float dt)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// It's unsafe to delete from inside the event handler so we do it here
|
// It's unsafe to delete from inside the event handler so we do it here
|
||||||
|
if (m_open_report_textbox)
|
||||||
|
{
|
||||||
|
// I18N: In the network player dialog, instruction for reporting player
|
||||||
|
core::stringw t = _("Tell server administrator about this player (%s):", m_name);
|
||||||
|
uint32_t host_id = m_host_id;
|
||||||
|
ModalDialog::dismiss();
|
||||||
|
new GeneralTextFieldDialog(t.c_str(),
|
||||||
|
[] (const irr::core::stringw& text) {},
|
||||||
|
[host_id] (GUIEngine::LabelWidget* lw,
|
||||||
|
GUIEngine::TextBoxWidget* tb)->bool
|
||||||
|
{
|
||||||
|
core::stringw info = tb->getText();
|
||||||
|
if (info.empty())
|
||||||
|
return false;
|
||||||
|
NetworkString report(PROTOCOL_LOBBY_ROOM);
|
||||||
|
report.addUInt8(LobbyProtocol::LE_REPORT_USER)
|
||||||
|
.addUInt32(host_id).encodeString(info);
|
||||||
|
STKHost::get()->sendToServer(&report, true/*reliable*/);
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (m_self_destroy)
|
if (m_self_destroy)
|
||||||
{
|
{
|
||||||
ModalDialog::dismiss();
|
ModalDialog::dismiss();
|
||||||
@ -165,6 +202,11 @@ GUIEngine::EventPropagation
|
|||||||
m_self_destroy = true;
|
m_self_destroy = true;
|
||||||
return GUIEngine::EVENT_BLOCK;
|
return GUIEngine::EVENT_BLOCK;
|
||||||
}
|
}
|
||||||
|
else if (selection == m_report_widget->m_properties[PROP_ID])
|
||||||
|
{
|
||||||
|
m_open_report_textbox = true;
|
||||||
|
return GUIEngine::EVENT_BLOCK;
|
||||||
|
}
|
||||||
else if (selection == m_friend_widget->m_properties[PROP_ID])
|
else if (selection == m_friend_widget->m_properties[PROP_ID])
|
||||||
{
|
{
|
||||||
XMLRequest *request = new XMLRequest();
|
XMLRequest *request = new XMLRequest();
|
||||||
|
@ -53,7 +53,7 @@ private:
|
|||||||
|
|
||||||
const bool m_allow_change_team;
|
const bool m_allow_change_team;
|
||||||
|
|
||||||
bool m_self_destroy;
|
bool m_self_destroy, m_open_report_textbox;
|
||||||
|
|
||||||
std::shared_ptr<bool> m_fetched_ranking;
|
std::shared_ptr<bool> m_fetched_ranking;
|
||||||
|
|
||||||
@ -73,6 +73,7 @@ private:
|
|||||||
|
|
||||||
GUIEngine::IconButtonWidget* m_handicap_widget;
|
GUIEngine::IconButtonWidget* m_handicap_widget;
|
||||||
|
|
||||||
|
GUIEngine::IconButtonWidget* m_report_widget;
|
||||||
public:
|
public:
|
||||||
NetworkUserDialog(uint32_t host_id, uint32_t online_id, uint8_t local_id,
|
NetworkUserDialog(uint32_t host_id, uint32_t online_id, uint8_t local_id,
|
||||||
const core::stringw& name, bool allow_change_team,
|
const core::stringw& name, bool allow_change_team,
|
||||||
@ -80,6 +81,7 @@ public:
|
|||||||
: ModalDialog(0.8f,0.8f), m_host_id(host_id), m_online_id(online_id),
|
: ModalDialog(0.8f,0.8f), m_host_id(host_id), m_online_id(online_id),
|
||||||
m_local_id(local_id), m_per_player_difficulty(d), m_name(name),
|
m_local_id(local_id), m_per_player_difficulty(d), m_name(name),
|
||||||
m_allow_change_team(allow_change_team), m_self_destroy(false),
|
m_allow_change_team(allow_change_team), m_self_destroy(false),
|
||||||
|
m_open_report_textbox(false),
|
||||||
m_fetched_ranking(std::make_shared<bool>(false))
|
m_fetched_ranking(std::make_shared<bool>(false))
|
||||||
{
|
{
|
||||||
loadFromFile("online/user_info_dialog.stkgui");
|
loadFromFile("online/user_info_dialog.stkgui");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user