mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-24 22:14:36 +02:00
Server functionality
This commit is contained in:
parent
f4d1442a86
commit
0565c062e5
@ -75,7 +75,10 @@ void GameChatHandler::onNewLobbyMessageReceived(const std::string & senderName,
|
|||||||
|
|
||||||
lobby->card->chat->addNewMessage(formatted.toString());
|
lobby->card->chat->addNewMessage(formatted.toString());
|
||||||
if (lobby->card->chatMode != InfoCard::ChatMode::Enabled)
|
if (lobby->card->chatMode != InfoCard::ChatMode::Enabled)
|
||||||
lobby->card->setChat(InfoCard::ChatMode::Enabled);
|
{
|
||||||
|
lobby->card->setChat(InfoCard::ChatMode::Disabled);
|
||||||
|
lobby->toggleChat();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
chatHistory.push_back({senderName, messageText, TextOperations::getCurrentFormattedTimeLocal()});
|
chatHistory.push_back({senderName, messageText, TextOperations::getCurrentFormattedTimeLocal()});
|
||||||
|
@ -49,6 +49,7 @@
|
|||||||
#include "../../lib/filesystem/Filesystem.h"
|
#include "../../lib/filesystem/Filesystem.h"
|
||||||
#include "../../lib/mapping/CMapHeader.h"
|
#include "../../lib/mapping/CMapHeader.h"
|
||||||
#include "../../lib/mapping/CMapInfo.h"
|
#include "../../lib/mapping/CMapInfo.h"
|
||||||
|
#include "../../lib/networkPacks/PacksForLobby.h"
|
||||||
|
|
||||||
ISelectionScreenInfo::ISelectionScreenInfo(ESelectionScreen ScreenType)
|
ISelectionScreenInfo::ISelectionScreenInfo(ESelectionScreen ScreenType)
|
||||||
: screenType(ScreenType)
|
: screenType(ScreenType)
|
||||||
@ -402,8 +403,26 @@ PvPBox::PvPBox(const Rect & rect)
|
|||||||
pos += rect.topLeft();
|
pos += rect.topLeft();
|
||||||
setRedrawParent(true);
|
setRedrawParent(true);
|
||||||
|
|
||||||
buttonFlipCoin = std::make_shared<CButton>(Point(17, 160), AnimationPath::builtin("GSPBUT2.DEF"), CButton::tooltip("flip coin"), [](){ std::cout << "coin flip"; }, EShortcut::NONE);
|
buttonFlipCoin = std::make_shared<CButton>(Point(17, 160), AnimationPath::builtin("GSPBUT2.DEF"), CButton::tooltip("flip coin"), [](){
|
||||||
|
LobbyPvPAction lpa;
|
||||||
|
lpa.action = LobbyPvPAction::COIN;
|
||||||
|
CSH->sendLobbyPack(lpa);
|
||||||
|
}, EShortcut::NONE);
|
||||||
buttonFlipCoin->setTextOverlay("Flip coin2", EFonts::FONT_SMALL, Colors::WHITE);
|
buttonFlipCoin->setTextOverlay("Flip coin2", EFonts::FONT_SMALL, Colors::WHITE);
|
||||||
|
|
||||||
|
buttonRandomTown = std::make_shared<CButton>(Point(17, 184), AnimationPath::builtin("GSPBUT2.DEF"), CButton::tooltip("random town"), [](){
|
||||||
|
LobbyPvPAction lpa;
|
||||||
|
lpa.action = LobbyPvPAction::RANDOM_TOWN;
|
||||||
|
CSH->sendLobbyPack(lpa);
|
||||||
|
}, EShortcut::NONE);
|
||||||
|
buttonRandomTown->setTextOverlay("random town", EFonts::FONT_SMALL, Colors::WHITE);
|
||||||
|
|
||||||
|
buttonRandomTownVs = std::make_shared<CButton>(Point(17, 208), AnimationPath::builtin("GSPBUT2.DEF"), CButton::tooltip("random town vs"), [](){
|
||||||
|
LobbyPvPAction lpa;
|
||||||
|
lpa.action = LobbyPvPAction::RANDOM_TOWN_VS;
|
||||||
|
CSH->sendLobbyPack(lpa);
|
||||||
|
}, EShortcut::NONE);
|
||||||
|
buttonRandomTownVs->setTextOverlay("random town vs", EFonts::FONT_SMALL, Colors::WHITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
CFlagBox::CFlagBox(const Rect & rect)
|
CFlagBox::CFlagBox(const Rect & rect)
|
||||||
|
@ -147,6 +147,8 @@ class PvPBox : public CIntObject
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::shared_ptr<CButton> buttonFlipCoin;
|
std::shared_ptr<CButton> buttonFlipCoin;
|
||||||
|
std::shared_ptr<CButton> buttonRandomTown;
|
||||||
|
std::shared_ptr<CButton> buttonRandomTownVs;
|
||||||
|
|
||||||
PvPBox(const Rect & rect);
|
PvPBox(const Rect & rect);
|
||||||
};
|
};
|
||||||
|
@ -172,6 +172,7 @@ public:
|
|||||||
virtual void visitLobbySetDifficulty(LobbySetDifficulty & pack) {}
|
virtual void visitLobbySetDifficulty(LobbySetDifficulty & pack) {}
|
||||||
virtual void visitLobbyForceSetPlayer(LobbyForceSetPlayer & pack) {}
|
virtual void visitLobbyForceSetPlayer(LobbyForceSetPlayer & pack) {}
|
||||||
virtual void visitLobbyShowMessage(LobbyShowMessage & pack) {}
|
virtual void visitLobbyShowMessage(LobbyShowMessage & pack) {}
|
||||||
|
virtual void visitLobbyPvPAction(LobbyPvPAction & pack) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
VCMI_LIB_NAMESPACE_END
|
VCMI_LIB_NAMESPACE_END
|
||||||
|
@ -813,6 +813,11 @@ void LobbyShowMessage::visitTyped(ICPackVisitor & visitor)
|
|||||||
visitor.visitLobbyShowMessage(*this);
|
visitor.visitLobbyShowMessage(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LobbyPvPAction::visitTyped(ICPackVisitor & visitor)
|
||||||
|
{
|
||||||
|
visitor.visitLobbyPvPAction(*this);
|
||||||
|
}
|
||||||
|
|
||||||
void SetResources::applyGs(CGameState * gs) const
|
void SetResources::applyGs(CGameState * gs) const
|
||||||
{
|
{
|
||||||
assert(player.isValidPlayer());
|
assert(player.isValidPlayer());
|
||||||
|
@ -343,4 +343,19 @@ struct DLL_LINKAGE LobbyShowMessage : public CLobbyPackToPropagate
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct DLL_LINKAGE LobbyPvPAction : public CLobbyPackToServer
|
||||||
|
{
|
||||||
|
enum EAction : ui8 {
|
||||||
|
NONE, COIN, RANDOM_TOWN, RANDOM_TOWN_VS
|
||||||
|
} action = NONE;
|
||||||
|
|
||||||
|
|
||||||
|
void visitTyped(ICPackVisitor & visitor) override;
|
||||||
|
|
||||||
|
template <typename Handler> void serialize(Handler &h)
|
||||||
|
{
|
||||||
|
h & action;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
VCMI_LIB_NAMESPACE_END
|
VCMI_LIB_NAMESPACE_END
|
||||||
|
@ -59,6 +59,7 @@ void registerTypesLobbyPacks(Serializer &s)
|
|||||||
s.template registerType<CLobbyPackToServer, LobbySetDifficulty>();
|
s.template registerType<CLobbyPackToServer, LobbySetDifficulty>();
|
||||||
s.template registerType<CLobbyPackToServer, LobbyForceSetPlayer>();
|
s.template registerType<CLobbyPackToServer, LobbyForceSetPlayer>();
|
||||||
s.template registerType<CLobbyPackToServer, LobbySetExtraOptions>();
|
s.template registerType<CLobbyPackToServer, LobbySetExtraOptions>();
|
||||||
|
s.template registerType<CLobbyPackToServer, LobbyPvPAction>();
|
||||||
}
|
}
|
||||||
|
|
||||||
VCMI_LIB_NAMESPACE_END
|
VCMI_LIB_NAMESPACE_END
|
||||||
|
@ -93,4 +93,5 @@ public:
|
|||||||
void visitLobbySetSimturns(LobbySetSimturns & pack) override;
|
void visitLobbySetSimturns(LobbySetSimturns & pack) override;
|
||||||
void visitLobbySetDifficulty(LobbySetDifficulty & pack) override;
|
void visitLobbySetDifficulty(LobbySetDifficulty & pack) override;
|
||||||
void visitLobbyForceSetPlayer(LobbyForceSetPlayer & pack) override;
|
void visitLobbyForceSetPlayer(LobbyForceSetPlayer & pack) override;
|
||||||
|
void visitLobbyPvPAction(LobbyPvPAction & pack) override;
|
||||||
};
|
};
|
||||||
|
@ -18,6 +18,9 @@
|
|||||||
|
|
||||||
#include "../lib/campaign/CampaignState.h"
|
#include "../lib/campaign/CampaignState.h"
|
||||||
#include "../lib/serializer/Connection.h"
|
#include "../lib/serializer/Connection.h"
|
||||||
|
#include "../lib/mapping/CMapInfo.h"
|
||||||
|
#include "../lib/mapping/CMapHeader.h"
|
||||||
|
#include "../lib/CTownHandler.h"
|
||||||
|
|
||||||
void ClientPermissionsCheckerNetPackVisitor::visitForLobby(CPackForLobby & pack)
|
void ClientPermissionsCheckerNetPackVisitor::visitForLobby(CPackForLobby & pack)
|
||||||
{
|
{
|
||||||
@ -366,3 +369,29 @@ void ApplyOnServerNetPackVisitor::visitLobbyForceSetPlayer(LobbyForceSetPlayer &
|
|||||||
srv.si->playerInfos[pack.targetPlayerColor].connectedPlayerIDs.insert(pack.targetConnectedPlayer);
|
srv.si->playerInfos[pack.targetPlayerColor].connectedPlayerIDs.insert(pack.targetConnectedPlayer);
|
||||||
result = true;
|
result = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ApplyOnServerNetPackVisitor::visitLobbyPvPAction(LobbyPvPAction & pack)
|
||||||
|
{
|
||||||
|
std::set<FactionID> allowedFactions;
|
||||||
|
for(auto & player : srv.mi->mapHeader->players)
|
||||||
|
{
|
||||||
|
std::set<FactionID> tmpAllowedFactions = player.allowedFactions;
|
||||||
|
std::set_union(std::begin(tmpAllowedFactions), std::end(tmpAllowedFactions), std::begin(allowedFactions), std::end(allowedFactions), std::inserter(allowedFactions, std::begin(allowedFactions)));
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<FactionID> randomFactions;
|
||||||
|
std::sample(allowedFactions.begin(), allowedFactions.end(), std::back_inserter(randomFactions), 2, std::mt19937{std::random_device{}()});
|
||||||
|
|
||||||
|
switch(pack.action) {
|
||||||
|
case LobbyPvPAction::COIN:
|
||||||
|
srv.announceTxt("Coin - " + std::to_string(std::rand()%2));
|
||||||
|
break;
|
||||||
|
case LobbyPvPAction::RANDOM_TOWN:
|
||||||
|
srv.announceTxt("Faction - " + VLC->townh->getById(randomFactions[0])->getNameTranslated());
|
||||||
|
break;
|
||||||
|
case LobbyPvPAction::RANDOM_TOWN_VS:
|
||||||
|
srv.announceTxt("Factions - " + VLC->townh->getById(randomFactions[0])->getNameTranslated() + " vs. " + VLC->townh->getById(randomFactions[randomFactions.size() > 1 ? 1 : 0])->getNameTranslated());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user