Add network ai tester for linear race
This commit is contained in:
parent
2c35b0f03c
commit
b3bffacb40
@ -1,5 +1,5 @@
|
|||||||
# Modify this file to change the last-modified date when you add/remove a file.
|
# Modify this file to change the last-modified date when you add/remove a file.
|
||||||
# This will then trigger a new cmake run automatically.
|
# This will then trigger a new cmake run automatically.
|
||||||
file(GLOB_RECURSE STK_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/*.hpp")
|
file(GLOB_RECURSE STK_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/*.hpp")
|
||||||
file(GLOB_RECURSE STK_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/*.cpp")
|
file(GLOB_RECURSE STK_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/*.cpp")
|
||||||
file(GLOB_RECURSE STK_SHADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "data/shaders/*")
|
file(GLOB_RECURSE STK_SHADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "data/shaders/*")
|
||||||
|
@ -48,6 +48,7 @@ AIBaseController::AIBaseController(AbstractKart *kart)
|
|||||||
|
|
||||||
void AIBaseController::reset()
|
void AIBaseController::reset()
|
||||||
{
|
{
|
||||||
|
m_enabled_network_ai = false;
|
||||||
m_stuck = false;
|
m_stuck = false;
|
||||||
m_collision_ticks.clear();
|
m_collision_ticks.clear();
|
||||||
} // reset
|
} // reset
|
||||||
|
@ -43,6 +43,7 @@ private:
|
|||||||
bool m_stuck;
|
bool m_stuck;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
bool m_enabled_network_ai;
|
||||||
|
|
||||||
/** Length of the kart, storing it here saves many function calls. */
|
/** Length of the kart, storing it here saves many function calls. */
|
||||||
float m_kart_length;
|
float m_kart_length;
|
||||||
@ -106,6 +107,7 @@ public:
|
|||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
virtual void saveState(BareNetworkString *buffer) const OVERRIDE;
|
virtual void saveState(BareNetworkString *buffer) const OVERRIDE;
|
||||||
virtual void rewindTo(BareNetworkString *buffer) OVERRIDE;
|
virtual void rewindTo(BareNetworkString *buffer) OVERRIDE;
|
||||||
|
void setNetworkAI(bool val) { m_enabled_network_ai = val; }
|
||||||
|
|
||||||
}; // AIBaseController
|
}; // AIBaseController
|
||||||
|
|
||||||
|
@ -103,6 +103,8 @@ public:
|
|||||||
/** Get a pointer on the kart controls. */
|
/** Get a pointer on the kart controls. */
|
||||||
virtual KartControl* getControls() { return m_controls; }
|
virtual KartControl* getControls() { return m_controls; }
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
void setControls(KartControl* kc) { m_controls = kc; }
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
/** Only local players can get achievements. */
|
/** Only local players can get achievements. */
|
||||||
virtual bool canGetAchievements () const { return false; }
|
virtual bool canGetAchievements () const { return false; }
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
122
src/karts/controller/network_ai_controller.cpp
Normal file
122
src/karts/controller/network_ai_controller.cpp
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
//
|
||||||
|
// SuperTuxKart - a fun racing game with go-kart
|
||||||
|
// Copyright (C) 2018 SuperTuxKart-Team
|
||||||
|
//
|
||||||
|
// This program is free software; you can redistribute it and/or
|
||||||
|
// modify it under the terms of the GNU General Public License
|
||||||
|
// as published by the Free Software Foundation; either version 3
|
||||||
|
// of the License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program; if not, write to the Free Software
|
||||||
|
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
#include "karts/controller/network_ai_controller.hpp"
|
||||||
|
#include "graphics/camera.hpp"
|
||||||
|
#include "karts/abstract_kart.hpp"
|
||||||
|
#include "karts/controller/kart_control.hpp"
|
||||||
|
#include "karts/controller/skidding_ai.hpp"
|
||||||
|
#include "modes/world.hpp"
|
||||||
|
#include "network/protocols/game_protocol.hpp"
|
||||||
|
#include "network/network_config.hpp"
|
||||||
|
#include "network/rewind_manager.hpp"
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
const int UPDATE_FREQUENCY = 30;
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
NetworkAIController::NetworkAIController(AbstractKart *kart,
|
||||||
|
int local_player_id,
|
||||||
|
SkiddingAI* ai)
|
||||||
|
: PlayerController(kart)
|
||||||
|
{
|
||||||
|
m_ai_controller = ai;
|
||||||
|
m_ai_controls = new KartControl;
|
||||||
|
Camera::createCamera(kart, local_player_id);
|
||||||
|
ai->setControls(m_ai_controls);
|
||||||
|
} // NetworkAIController
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
NetworkAIController::~NetworkAIController()
|
||||||
|
{
|
||||||
|
delete m_ai_controls;
|
||||||
|
} // ~NetworkAIController
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
void NetworkAIController::update(int ticks)
|
||||||
|
{
|
||||||
|
if (!RewindManager::get()->isRewinding())
|
||||||
|
{
|
||||||
|
if (World::getWorld()->isStartPhase() ||
|
||||||
|
World::getWorld()->getTicksSinceStart() > m_prev_update_ticks)
|
||||||
|
{
|
||||||
|
m_prev_update_ticks = World::getWorld()->getTicksSinceStart() +
|
||||||
|
UPDATE_FREQUENCY;
|
||||||
|
m_ai_controller->update(UPDATE_FREQUENCY);
|
||||||
|
convertAIToPlayerActions();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PlayerController::update(ticks);
|
||||||
|
} // update
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
void NetworkAIController::reset()
|
||||||
|
{
|
||||||
|
m_prev_update_ticks = 0;
|
||||||
|
m_ai_controller->reset();
|
||||||
|
m_ai_controller->setNetworkAI(true);
|
||||||
|
m_ai_controls->reset();
|
||||||
|
PlayerController::reset();
|
||||||
|
} // reset
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
void NetworkAIController::convertAIToPlayerActions()
|
||||||
|
{
|
||||||
|
std::vector<std::pair<PlayerAction, int> > all_actions;
|
||||||
|
if (m_ai_controls->getSteer() < 0.0f)
|
||||||
|
{
|
||||||
|
all_actions.emplace_back(PA_STEER_LEFT,
|
||||||
|
fabsf(m_ai_controls->getSteer()) * 32768);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
all_actions.emplace_back(PA_STEER_RIGHT,
|
||||||
|
fabsf(m_ai_controls->getSteer()) * 32768);
|
||||||
|
}
|
||||||
|
all_actions.emplace_back(PA_ACCEL,
|
||||||
|
m_ai_controls->getAccel() * 32768);
|
||||||
|
all_actions.emplace_back(PA_BRAKE,
|
||||||
|
m_ai_controls->getBrake() ? 32768 : 0);
|
||||||
|
all_actions.emplace_back(PA_FIRE,
|
||||||
|
m_ai_controls->getFire() ? 32768 : 0);
|
||||||
|
all_actions.emplace_back(PA_NITRO,
|
||||||
|
m_ai_controls->getNitro() ? 32768 : 0);
|
||||||
|
all_actions.emplace_back(PA_DRIFT,
|
||||||
|
m_ai_controls->getSkidControl() == KartControl::SC_NONE ?
|
||||||
|
0 : 32768);
|
||||||
|
all_actions.emplace_back(PA_RESCUE,
|
||||||
|
m_ai_controls->getRescue() ? 32768 : 0);
|
||||||
|
|
||||||
|
for (const auto& a : all_actions)
|
||||||
|
{
|
||||||
|
if (!PlayerController::action(a.first, a.second, /*dry_run*/true))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (NetworkConfig::get()->isNetworking() &&
|
||||||
|
NetworkConfig::get()->isClient() &&
|
||||||
|
!RewindManager::get()->isRewinding())
|
||||||
|
{
|
||||||
|
if (auto gp = GameProtocol::lock())
|
||||||
|
{
|
||||||
|
gp->controllerAction(m_kart->getWorldKartId(),
|
||||||
|
a.first, a.second,
|
||||||
|
m_steer_val_l, m_steer_val_r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PlayerController::action(a.first, a.second, false);
|
||||||
|
}
|
||||||
|
} // convertAIToPlayerActions
|
42
src/karts/controller/network_ai_controller.hpp
Normal file
42
src/karts/controller/network_ai_controller.hpp
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
//
|
||||||
|
// SuperTuxKart - a fun racing game with go-kart
|
||||||
|
// Copyright (C) 2018 SuperTuxKart-Team
|
||||||
|
//
|
||||||
|
// This program is free software; you can redistribute it and/or
|
||||||
|
// modify it under the terms of the GNU General Public License
|
||||||
|
// as published by the Free Software Foundation; either version 3
|
||||||
|
// of the License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program; if not, write to the Free Software
|
||||||
|
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
#ifndef HEADER_NETWORK_AI_CONTROLLER_HPP
|
||||||
|
#define HEADER_NETWORK_AI_CONTROLLER_HPP
|
||||||
|
|
||||||
|
#include "karts/controller/player_controller.hpp"
|
||||||
|
|
||||||
|
class AbstractKart;
|
||||||
|
class SkiddingAI;
|
||||||
|
|
||||||
|
class NetworkAIController : public PlayerController
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
int m_prev_update_ticks;
|
||||||
|
SkiddingAI* m_ai_controller;
|
||||||
|
KartControl* m_ai_controls;
|
||||||
|
void convertAIToPlayerActions();
|
||||||
|
public:
|
||||||
|
NetworkAIController(AbstractKart *kart, int local_player_id,
|
||||||
|
SkiddingAI* ai);
|
||||||
|
virtual ~NetworkAIController();
|
||||||
|
virtual void update(int ticks) OVERRIDE;
|
||||||
|
virtual void reset() OVERRIDE;
|
||||||
|
}; // class NetworkAIController
|
||||||
|
|
||||||
|
#endif // HEADER_PLAYER_CONTROLLER_HPP
|
@ -221,6 +221,8 @@ unsigned int SkiddingAI::getNextSector(unsigned int index)
|
|||||||
void SkiddingAI::update(int ticks)
|
void SkiddingAI::update(int ticks)
|
||||||
{
|
{
|
||||||
float dt = stk_config->ticks2Time(ticks);
|
float dt = stk_config->ticks2Time(ticks);
|
||||||
|
m_controls->setRescue(false);
|
||||||
|
|
||||||
// This is used to enable firing an item backwards.
|
// This is used to enable firing an item backwards.
|
||||||
m_controls->setLookBack(false);
|
m_controls->setLookBack(false);
|
||||||
m_controls->setNitro(false);
|
m_controls->setNitro(false);
|
||||||
@ -293,7 +295,11 @@ void SkiddingAI::update(int ticks)
|
|||||||
// If the kart needs to be rescued, do it now (and nothing else)
|
// If the kart needs to be rescued, do it now (and nothing else)
|
||||||
if(isStuck() && !m_kart->getKartAnimation())
|
if(isStuck() && !m_kart->getKartAnimation())
|
||||||
{
|
{
|
||||||
new RescueAnimation(m_kart);
|
// For network AI controller
|
||||||
|
if (m_enabled_network_ai)
|
||||||
|
m_controls->setRescue(true);
|
||||||
|
else
|
||||||
|
new RescueAnimation(m_kart);
|
||||||
AIBaseLapController::update(ticks);
|
AIBaseLapController::update(ticks);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2085,6 +2091,11 @@ void SkiddingAI::handleRaceStart()
|
|||||||
{
|
{
|
||||||
if( m_start_delay < 0 )
|
if( m_start_delay < 0 )
|
||||||
{
|
{
|
||||||
|
if (m_enabled_network_ai)
|
||||||
|
{
|
||||||
|
m_start_delay = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
// Each kart starts at a different, random time, and the time is
|
// Each kart starts at a different, random time, and the time is
|
||||||
// smaller depending on the difficulty.
|
// smaller depending on the difficulty.
|
||||||
m_start_delay = stk_config->time2Ticks(
|
m_start_delay = stk_config->time2Ticks(
|
||||||
@ -2122,7 +2133,11 @@ void SkiddingAI::handleRescue(const float dt)
|
|||||||
m_time_since_stuck += dt;
|
m_time_since_stuck += dt;
|
||||||
if(m_time_since_stuck > 2.0f)
|
if(m_time_since_stuck > 2.0f)
|
||||||
{
|
{
|
||||||
new RescueAnimation(m_kart);
|
// For network AI controller
|
||||||
|
if (m_enabled_network_ai)
|
||||||
|
m_controls->setRescue(true);
|
||||||
|
else
|
||||||
|
new RescueAnimation(m_kart);
|
||||||
m_time_since_stuck=0.0f;
|
m_time_since_stuck=0.0f;
|
||||||
} // m_time_since_stuck > 2.0f
|
} // m_time_since_stuck > 2.0f
|
||||||
}
|
}
|
||||||
|
24
src/main.cpp
24
src/main.cpp
@ -610,6 +610,8 @@ void cmdLineHelp()
|
|||||||
" (in format x.x.x.x:xxx(port)), the port should be its\n"
|
" (in format x.x.x.x:xxx(port)), the port should be its\n"
|
||||||
" public port.\n"
|
" public port.\n"
|
||||||
" --server-id=n Server id in stk addons for --connect-now.\n"
|
" --server-id=n Server id in stk addons for --connect-now.\n"
|
||||||
|
" --network-ai=n Numbers of AI for connecting to linear race server, used\n"
|
||||||
|
" together with --connect-now.\n"
|
||||||
" --login=s Automatically log in (set the login).\n"
|
" --login=s Automatically log in (set the login).\n"
|
||||||
" --password=s Automatically log in (set the password).\n"
|
" --password=s Automatically log in (set the password).\n"
|
||||||
" --init-user Save the above login and password (if set) in config.\n"
|
" --init-user Save the above login and password (if set) in config.\n"
|
||||||
@ -1272,14 +1274,28 @@ int handleCmdLine(bool has_server_config, bool has_parent_process)
|
|||||||
|
|
||||||
if (CommandLine::has("--connect-now", &s))
|
if (CommandLine::has("--connect-now", &s))
|
||||||
{
|
{
|
||||||
TransportAddress server_addr(s);
|
|
||||||
NetworkConfig::get()->setIsWAN();
|
NetworkConfig::get()->setIsWAN();
|
||||||
NetworkConfig::get()->setIsServer(false);
|
NetworkConfig::get()->setIsServer(false);
|
||||||
|
if (CommandLine::has("--network-ai", &n))
|
||||||
|
{
|
||||||
|
NetworkConfig::get()->setNetworkAITester(true);
|
||||||
|
PlayerManager::get()->createGuestPlayers(n);
|
||||||
|
for (int i = 0; i < n; i++)
|
||||||
|
{
|
||||||
|
NetworkConfig::get()->addNetworkPlayer(
|
||||||
|
NULL, PlayerManager::get()->getPlayer(i),
|
||||||
|
PLAYER_DIFFICULTY_NORMAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NetworkConfig::get()->addNetworkPlayer(
|
||||||
|
input_manager->getDeviceManager()->getLatestUsedDevice(),
|
||||||
|
PlayerManager::getCurrentPlayer(), PLAYER_DIFFICULTY_NORMAL);
|
||||||
|
}
|
||||||
|
TransportAddress server_addr(s);
|
||||||
auto server = std::make_shared<Server>(0, L"", 0, 0, 0, 0, server_addr,
|
auto server = std::make_shared<Server>(0, L"", 0, 0, 0, 0, server_addr,
|
||||||
!server_password.empty(), false);
|
!server_password.empty(), false);
|
||||||
NetworkConfig::get()->addNetworkPlayer(
|
|
||||||
input_manager->getDeviceManager()->getLatestUsedDevice(),
|
|
||||||
PlayerManager::getCurrentPlayer(), PLAYER_DIFFICULTY_NORMAL);
|
|
||||||
NetworkConfig::get()->doneAddingNetworkPlayers();
|
NetworkConfig::get()->doneAddingNetworkPlayers();
|
||||||
STKHost::create();
|
STKHost::create();
|
||||||
auto cts = std::make_shared<ConnectToServer>(server);
|
auto cts = std::make_shared<ConnectToServer>(server);
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
#include "karts/controller/soccer_ai.hpp"
|
#include "karts/controller/soccer_ai.hpp"
|
||||||
#include "karts/controller/spare_tire_ai.hpp"
|
#include "karts/controller/spare_tire_ai.hpp"
|
||||||
#include "karts/controller/test_ai.hpp"
|
#include "karts/controller/test_ai.hpp"
|
||||||
|
#include "karts/controller/network_ai_controller.hpp"
|
||||||
#include "karts/controller/network_player_controller.hpp"
|
#include "karts/controller/network_player_controller.hpp"
|
||||||
#include "karts/kart.hpp"
|
#include "karts/kart.hpp"
|
||||||
#include "karts/kart_model.hpp"
|
#include "karts/kart_model.hpp"
|
||||||
@ -387,15 +388,22 @@ std::shared_ptr<AbstractKart> World::createKart
|
|||||||
{
|
{
|
||||||
case RaceManager::KT_PLAYER:
|
case RaceManager::KT_PLAYER:
|
||||||
{
|
{
|
||||||
controller = new LocalPlayerController(new_kart.get(), local_player_id,
|
if (NetworkConfig::get()->isNetworkAITester())
|
||||||
difficulty);
|
|
||||||
const PlayerProfile* p = StateManager::get()
|
|
||||||
->getActivePlayer(local_player_id)->getConstProfile();
|
|
||||||
if (p && p->getDefaultKartColor() > 0.0f)
|
|
||||||
{
|
{
|
||||||
ri->setHue(p->getDefaultKartColor());
|
controller = new NetworkAIController(new_kart.get(),
|
||||||
|
local_player_id, new SkiddingAI(new_kart.get()));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
controller = new LocalPlayerController(new_kart.get(),
|
||||||
|
local_player_id, difficulty);
|
||||||
|
const PlayerProfile* p = StateManager::get()
|
||||||
|
->getActivePlayer(local_player_id)->getConstProfile();
|
||||||
|
if (p && p->getDefaultKartColor() > 0.0f)
|
||||||
|
{
|
||||||
|
ri->setHue(p->getDefaultKartColor());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_num_players ++;
|
m_num_players ++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -54,6 +54,7 @@ NetworkConfig::NetworkConfig()
|
|||||||
m_client_port = UserConfigParams::m_random_client_port ?
|
m_client_port = UserConfigParams::m_random_client_port ?
|
||||||
0 : stk_config->m_client_port;
|
0 : stk_config->m_client_port;
|
||||||
m_joined_server_version = 0;
|
m_joined_server_version = 0;
|
||||||
|
m_network_ai_tester = false;
|
||||||
} // NetworkConfig
|
} // NetworkConfig
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@ -65,14 +65,17 @@ private:
|
|||||||
/** True if this host is a server, false otherwise. */
|
/** True if this host is a server, false otherwise. */
|
||||||
bool m_is_server;
|
bool m_is_server;
|
||||||
|
|
||||||
/** The LAN port on which a client is waiting for a server connection. */
|
|
||||||
uint16_t m_client_port;
|
|
||||||
/** True if a client should connect to the first server it finds and
|
/** True if a client should connect to the first server it finds and
|
||||||
* immediately start a race. */
|
* immediately start a race. */
|
||||||
bool m_auto_connect;
|
bool m_auto_connect;
|
||||||
|
|
||||||
bool m_done_adding_network_players;
|
bool m_done_adding_network_players;
|
||||||
|
|
||||||
|
bool m_network_ai_tester;
|
||||||
|
|
||||||
|
/** The LAN port on which a client is waiting for a server connection. */
|
||||||
|
uint16_t m_client_port;
|
||||||
|
|
||||||
/** Used by wan server. */
|
/** Used by wan server. */
|
||||||
uint32_t m_cur_user_id;
|
uint32_t m_cur_user_id;
|
||||||
std::string m_cur_user_token;
|
std::string m_cur_user_token;
|
||||||
@ -154,7 +157,7 @@ public:
|
|||||||
{
|
{
|
||||||
for (auto& p : m_network_players)
|
for (auto& p : m_network_players)
|
||||||
{
|
{
|
||||||
if (std::get<0>(p) == device)
|
if (std::get<0>(p) == device && !m_network_ai_tester)
|
||||||
return false;
|
return false;
|
||||||
if (std::get<1>(p) == profile)
|
if (std::get<1>(p) == profile)
|
||||||
return false;
|
return false;
|
||||||
@ -192,6 +195,10 @@ public:
|
|||||||
* requested. */
|
* requested. */
|
||||||
bool isAutoConnect() const { return m_auto_connect; }
|
bool isAutoConnect() const { return m_auto_connect; }
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
void setNetworkAITester(bool b) { m_network_ai_tester = b; }
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
bool isNetworkAITester() const { return m_network_ai_tester; }
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
void setCurrentUserId(uint32_t id) { m_cur_user_id = id ; }
|
void setCurrentUserId(uint32_t id) { m_cur_user_id = id ; }
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
void setCurrentUserToken(const std::string& t) { m_cur_user_token = t; }
|
void setCurrentUserToken(const std::string& t) { m_cur_user_token = t; }
|
||||||
|
Loading…
Reference in New Issue
Block a user