2011-08-27 15:11:39 +00:00
|
|
|
/* (c) Shereef Marzouk. See "licence DDRace.txt" and the readme.txt in the root of the distribution for more information. */
|
|
|
|
#include "gamecontext.h"
|
|
|
|
#include <engine/shared/config.h>
|
|
|
|
#include <engine/server/server.h>
|
|
|
|
#include <game/server/teams.h>
|
|
|
|
#include <game/server/gamemodes/DDRace.h>
|
|
|
|
#include <game/version.h>
|
|
|
|
#include <game/generated/nethash.cpp>
|
|
|
|
#if defined(CONF_SQL)
|
2011-12-25 13:51:04 +00:00
|
|
|
#include <game/server/score/sql_score.h>
|
2011-08-27 15:11:39 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
bool CheckClientID(int ClientID);
|
|
|
|
|
|
|
|
void CGameContext::ConCredits(IConsole::IResult *pResult, void *pUserData)
|
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
CGameContext *pSelf = (CGameContext *) pUserData;
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "credit",
|
|
|
|
"Teeworlds Team takes most of the credits also");
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "credit",
|
|
|
|
"This mod was originally created by \'3DA\'");
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "credit",
|
|
|
|
"Now it is maintained & re-coded by:");
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "credit",
|
|
|
|
"\'[Egypt]GreYFoX@GTi\' and \'[BlackTee]den\'");
|
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"credit",
|
|
|
|
"Others Helping on the code: \'heinrich5991\', \'ravomavain\', \'Trust o_0 Aeeeh ?!\', \'noother\', \'<3 fisted <3\' & \'LemonFace\'");
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "credit",
|
|
|
|
"Documentation: Zeta-Hoernchen & Learath2, Entities: Fisico");
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "credit",
|
|
|
|
"Code (in the past): \'3DA\' and \'Fluxid\'");
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "credit",
|
|
|
|
"Please check the changelog on DDRace.info.");
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "credit",
|
|
|
|
"Also the commit log on github.com/GreYFoX/teeworlds .");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void CGameContext::ConInfo(IConsole::IResult *pResult, void *pUserData)
|
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
CGameContext *pSelf = (CGameContext *) pUserData;
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "info",
|
|
|
|
"DDRace Mod. Version: " GAME_VERSION);
|
2011-08-27 15:11:39 +00:00
|
|
|
#if defined( GIT_SHORTREV_HASH )
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "info",
|
|
|
|
"Git revision hash: " GIT_SHORTREV_HASH);
|
2011-08-27 15:11:39 +00:00
|
|
|
#endif
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "info",
|
|
|
|
"Official site: DDRace.info");
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "info",
|
|
|
|
"For more Info /cmdlist");
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "info",
|
|
|
|
"Or visit DDRace.info");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void CGameContext::ConHelp(IConsole::IResult *pResult, void *pUserData)
|
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
CGameContext *pSelf = (CGameContext *) pUserData;
|
2011-08-27 15:11:39 +00:00
|
|
|
|
2011-12-25 13:51:04 +00:00
|
|
|
if (pResult->NumArguments() == 0)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "help",
|
|
|
|
"/cmdlist will show a list of all chat commands");
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "help",
|
|
|
|
"/help + any command will show you the help for this command");
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "help",
|
|
|
|
"Example /help settings will display the help about ");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
const char *pArg = pResult->GetString(0);
|
2011-12-25 13:51:04 +00:00
|
|
|
const IConsole::CCommandInfo *pCmdInfo =
|
|
|
|
pSelf->Console()->GetCommandInfo(pArg, CFGFLAG_SERVER, false);
|
|
|
|
if (pCmdInfo && pCmdInfo->m_pHelp)
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "help",
|
|
|
|
pCmdInfo->m_pHelp);
|
2011-08-27 15:11:39 +00:00
|
|
|
else
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"help",
|
|
|
|
"Command is either unknown or you have given a blank command without any parameters.");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void CGameContext::ConSettings(IConsole::IResult *pResult, void *pUserData)
|
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
CGameContext *pSelf = (CGameContext *) pUserData;
|
2011-08-27 15:11:39 +00:00
|
|
|
|
2011-12-25 13:51:04 +00:00
|
|
|
if (pResult->NumArguments() == 0)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"setting",
|
|
|
|
"to check a server setting say /settings and setting's name, setting names are:");
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "setting",
|
|
|
|
"teams, cheats, collision, hooking, endlesshooking, me, ");
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "setting",
|
|
|
|
"hitting, oldlaser, timeout, votes, pause and scores");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
const char *pArg = pResult->GetString(0);
|
|
|
|
char aBuf[256];
|
|
|
|
float ColTemp;
|
|
|
|
float HookTemp;
|
|
|
|
pSelf->m_Tuning.Get("player_collision", &ColTemp);
|
|
|
|
pSelf->m_Tuning.Get("player_hooking", &HookTemp);
|
2011-12-25 13:51:04 +00:00
|
|
|
if (str_comp(pArg, "teams") == 0)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
str_format(
|
|
|
|
aBuf,
|
|
|
|
sizeof(aBuf),
|
|
|
|
"%s %s",
|
|
|
|
g_Config.m_SvTeam == 1 ?
|
|
|
|
"Teams are available on this server" :
|
|
|
|
!g_Config.m_SvTeam ?
|
|
|
|
"Teams are not available on this server" :
|
|
|
|
"You have to be in a team to play on this server", /*g_Config.m_SvTeamStrict ? "and if you die in a team all of you die" : */
|
|
|
|
"and if you die in a team only you die");
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "settings",
|
|
|
|
aBuf);
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
else if (str_comp(pArg, "collision") == 0)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"settings",
|
|
|
|
ColTemp ?
|
|
|
|
"Players can collide on this server" :
|
|
|
|
"Players Can't collide on this server");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
else if (str_comp(pArg, "hooking") == 0)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"settings",
|
|
|
|
HookTemp ?
|
|
|
|
"Players can hook each other on this server" :
|
|
|
|
"Players Can't hook each other on this server");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
else if (str_comp(pArg, "endlesshooking") == 0)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"settings",
|
|
|
|
g_Config.m_SvEndlessDrag ?
|
|
|
|
"Players can hook time is unlimited" :
|
|
|
|
"Players can hook time is limited");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
else if (str_comp(pArg, "hitting") == 0)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"settings",
|
|
|
|
g_Config.m_SvHit ?
|
|
|
|
"Player's weapons affect each other" :
|
|
|
|
"Player's weapons has no affect on each other");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
else if (str_comp(pArg, "oldlaser") == 0)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"settings",
|
|
|
|
g_Config.m_SvOldLaser ?
|
|
|
|
"Lasers can hit you if you shot them and that they pull you towards the bounce origin (Like DDRace Beta)" :
|
|
|
|
"Lasers can't hit you if you shot them, and they pull others towards the shooter");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
else if (str_comp(pArg, "me") == 0)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"settings",
|
|
|
|
g_Config.m_SvSlashMe ?
|
|
|
|
"Players can use /me commands the famous IRC Command" :
|
|
|
|
"Players Can't use the /me command");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
else if (str_comp(pArg, "timeout") == 0)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
str_format(aBuf, sizeof(aBuf),
|
|
|
|
"The Server Timeout is currently set to %d",
|
|
|
|
g_Config.m_ConnTimeout);
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "settings",
|
|
|
|
aBuf);
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
else if (str_comp(pArg, "votes") == 0)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"settings",
|
|
|
|
g_Config.m_SvVoteKick ?
|
|
|
|
"Players can use Callvote menu tab to kick offenders" :
|
|
|
|
"Players Can't use the Callvote menu tab to kick offenders");
|
|
|
|
if (g_Config.m_SvVoteKick)
|
|
|
|
str_format(
|
|
|
|
aBuf,
|
|
|
|
sizeof(aBuf),
|
|
|
|
"Players are banned for %d second(s) if they get voted off",
|
|
|
|
g_Config.m_SvVoteKickBantime);
|
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"settings",
|
|
|
|
g_Config.m_SvVoteKickBantime ?
|
|
|
|
aBuf :
|
|
|
|
"Players are just kicked and not banned if they get voted off");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
else if (str_comp(pArg, "pause") == 0)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"settings",
|
|
|
|
g_Config.m_SvPauseable ?
|
|
|
|
g_Config.m_SvPauseTime ?
|
|
|
|
"/pause is available on this server and it pauses your time too" :
|
|
|
|
"/pause is available on this server but it doesn't pause your time"
|
|
|
|
:"/pause is NOT available on this server");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
else if (str_comp(pArg, "scores") == 0)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"settings",
|
|
|
|
g_Config.m_SvHideScore ?
|
|
|
|
"Scores are private on this server" :
|
|
|
|
"Scores are public on this server");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void CGameContext::ConRules(IConsole::IResult *pResult, void *pUserData)
|
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
CGameContext *pSelf = (CGameContext *) pUserData;
|
2011-08-27 15:11:39 +00:00
|
|
|
bool Printed = false;
|
2011-12-25 13:51:04 +00:00
|
|
|
if (g_Config.m_SvDDRaceRules)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "rules",
|
|
|
|
"No blocking.");
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "rules",
|
|
|
|
"No insulting / spamming.");
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "rules",
|
|
|
|
"No fun voting / vote spamming.");
|
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"rules",
|
|
|
|
"Breaking any of these rules will result in a penalty, decided by server admins.");
|
2011-08-27 15:11:39 +00:00
|
|
|
Printed = true;
|
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
if (g_Config.m_SvRulesLine1[0])
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "rules",
|
|
|
|
g_Config.m_SvRulesLine1);
|
2011-08-27 15:11:39 +00:00
|
|
|
Printed = true;
|
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
if (g_Config.m_SvRulesLine2[0])
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "rules",
|
|
|
|
g_Config.m_SvRulesLine2);
|
2011-08-27 15:11:39 +00:00
|
|
|
Printed = true;
|
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
if (g_Config.m_SvRulesLine3[0])
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "rules",
|
|
|
|
g_Config.m_SvRulesLine3);
|
2011-08-27 15:11:39 +00:00
|
|
|
Printed = true;
|
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
if (g_Config.m_SvRulesLine4[0])
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "rules",
|
|
|
|
g_Config.m_SvRulesLine4);
|
2011-08-27 15:11:39 +00:00
|
|
|
Printed = true;
|
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
if (g_Config.m_SvRulesLine5[0])
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "rules",
|
|
|
|
g_Config.m_SvRulesLine5);
|
2011-08-27 15:11:39 +00:00
|
|
|
Printed = true;
|
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
if (g_Config.m_SvRulesLine6[0])
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "rules",
|
|
|
|
g_Config.m_SvRulesLine6);
|
2011-08-27 15:11:39 +00:00
|
|
|
Printed = true;
|
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
if (g_Config.m_SvRulesLine7[0])
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "rules",
|
|
|
|
g_Config.m_SvRulesLine7);
|
2011-08-27 15:11:39 +00:00
|
|
|
Printed = true;
|
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
if (g_Config.m_SvRulesLine8[0])
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "rules",
|
|
|
|
g_Config.m_SvRulesLine8);
|
|
|
|
Printed = true;
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
if (g_Config.m_SvRulesLine9[0])
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "rules",
|
|
|
|
g_Config.m_SvRulesLine9);
|
|
|
|
Printed = true;
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
if (g_Config.m_SvRulesLine10[0])
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "rules",
|
|
|
|
g_Config.m_SvRulesLine10);
|
2011-08-27 15:11:39 +00:00
|
|
|
Printed = true;
|
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
if (!Printed)
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "rules",
|
|
|
|
"No Rules Defined, Kill em all!!");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void CGameContext::ConTogglePause(IConsole::IResult *pResult, void *pUserData)
|
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
CGameContext *pSelf = (CGameContext *) pUserData;
|
|
|
|
if (!CheckClientID(pResult->m_ClientID))
|
|
|
|
return;
|
2011-08-27 15:11:39 +00:00
|
|
|
char aBuf[128];
|
|
|
|
|
|
|
|
CPlayer *pPlayer = pSelf->m_apPlayers[pResult->m_ClientID];
|
2011-12-25 13:51:04 +00:00
|
|
|
if (!pPlayer)
|
2011-08-27 15:11:39 +00:00
|
|
|
return;
|
|
|
|
|
2011-12-25 13:51:04 +00:00
|
|
|
if (g_Config.m_SvPauseable)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
|
|
|
CCharacter* pChr = pPlayer->GetCharacter();
|
2011-12-25 13:51:04 +00:00
|
|
|
if (!pPlayer->GetTeam() && pChr
|
|
|
|
&& (!pChr->GetWeaponGot(WEAPON_NINJA) || pChr->m_FreezeTime)
|
|
|
|
&& pChr->IsGrounded() && pChr->m_Pos == pChr->m_PrevPos
|
|
|
|
&& !pPlayer->m_InfoSaved)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
if (pPlayer->m_LastSetTeam
|
|
|
|
+ pSelf->Server()->TickSpeed() * g_Config.m_SvPauseFrequency
|
|
|
|
<= pSelf->Server()->Tick())
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
|
|
|
pPlayer->SaveCharacter();
|
|
|
|
pPlayer->m_InfoSaved = true;
|
|
|
|
pPlayer->SetTeam(TEAM_SPECTATORS);
|
|
|
|
}
|
|
|
|
else
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"pause", "You can\'t pause that often.");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
else if (pPlayer->GetTeam() == TEAM_SPECTATORS && pPlayer->m_InfoSaved
|
|
|
|
&& pPlayer->m_ForcePauseTime == 0)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
|
|
|
pPlayer->m_PauseInfo.m_Respawn = true;
|
|
|
|
pPlayer->SetTeam(TEAM_RED);
|
|
|
|
pPlayer->m_InfoSaved = false;
|
|
|
|
//pPlayer->LoadCharacter();//TODO:Check if this system Works
|
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
else if (pChr)
|
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"pause",
|
|
|
|
pChr->GetWeaponGot(WEAPON_NINJA) ?
|
|
|
|
"You can't use /pause while you are a ninja" :
|
|
|
|
(!pChr->IsGrounded()) ?
|
|
|
|
"You can't use /pause while you are a in air" :
|
|
|
|
"You can't use /pause while you are moving");
|
|
|
|
else if (pPlayer->m_ForcePauseTime > 0)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
str_format(aBuf, sizeof(aBuf),
|
|
|
|
"You have been force-paused. %ds left.",
|
|
|
|
pPlayer->m_ForcePauseTime / pSelf->Server()->TickSpeed());
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "pause",
|
|
|
|
aBuf);
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
else if (pPlayer->m_ForcePauseTime < 0)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "pause",
|
|
|
|
"You have been force-paused.");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
|
|
|
else
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "pause",
|
|
|
|
"No pause data saved.");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
|
|
|
else
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "pause",
|
|
|
|
"Pause isn't allowed on this server.");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void CGameContext::ConTop5(IConsole::IResult *pResult, void *pUserData)
|
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
CGameContext *pSelf = (CGameContext *) pUserData;
|
|
|
|
if (!CheckClientID(pResult->m_ClientID))
|
|
|
|
return;
|
2011-08-27 15:11:39 +00:00
|
|
|
|
2011-09-07 22:51:55 +00:00
|
|
|
#if defined(CONF_SQL)
|
2011-12-25 13:51:04 +00:00
|
|
|
if(pSelf->m_apPlayers[pResult->m_ClientID] && g_Config.m_SvUseSQL)
|
|
|
|
if(pSelf->m_apPlayers[pResult->m_ClientID]->m_LastSQLQuery + pSelf->Server()->TickSpeed() >= pSelf->Server()->Tick())
|
|
|
|
return;
|
2011-09-07 22:51:55 +00:00
|
|
|
#endif
|
|
|
|
|
2011-12-25 13:51:04 +00:00
|
|
|
if (g_Config.m_SvHideScore)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "top5",
|
|
|
|
"Showing the top 5 is not allowed on this server.");
|
2011-08-27 15:11:39 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2011-12-25 13:51:04 +00:00
|
|
|
if (pResult->NumArguments() > 0)
|
|
|
|
pSelf->Score()->ShowTop5(pResult, pResult->m_ClientID, pUserData,
|
|
|
|
pResult->GetInteger(0));
|
|
|
|
else
|
|
|
|
pSelf->Score()->ShowTop5(pResult, pResult->m_ClientID, pUserData);
|
2011-09-07 22:51:55 +00:00
|
|
|
|
|
|
|
#if defined(CONF_SQL)
|
2011-12-25 13:51:04 +00:00
|
|
|
if(pSelf->m_apPlayers[pResult->m_ClientID] && g_Config.m_SvUseSQL)
|
|
|
|
pSelf->m_apPlayers[pResult->m_ClientID]->m_LastSQLQuery = pSelf->Server()->Tick();
|
2011-09-07 22:51:55 +00:00
|
|
|
#endif
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
2011-08-31 10:30:18 +00:00
|
|
|
|
2011-08-27 15:11:39 +00:00
|
|
|
#if defined(CONF_SQL)
|
|
|
|
void CGameContext::ConTimes(IConsole::IResult *pResult, void *pUserData)
|
|
|
|
{
|
|
|
|
if(!CheckClientID(pResult->m_ClientID)) return;
|
2011-08-31 22:30:37 +00:00
|
|
|
CGameContext *pSelf = (CGameContext *)pUserData;
|
2011-08-27 15:11:39 +00:00
|
|
|
|
2011-09-07 22:51:55 +00:00
|
|
|
#if defined(CONF_SQL)
|
2011-12-25 13:51:04 +00:00
|
|
|
if(pSelf->m_apPlayers[pResult->m_ClientID] && g_Config.m_SvUseSQL)
|
|
|
|
if(pSelf->m_apPlayers[pResult->m_ClientID]->m_LastSQLQuery + pSelf->Server()->TickSpeed() >= pSelf->Server()->Tick())
|
|
|
|
return;
|
2011-09-07 22:51:55 +00:00
|
|
|
#endif
|
|
|
|
|
2011-08-27 15:11:39 +00:00
|
|
|
if(g_Config.m_SvUseSQL)
|
|
|
|
{
|
|
|
|
CSqlScore *pScore = (CSqlScore *)pSelf->Score();
|
|
|
|
CPlayer *pPlayer = pSelf->m_apPlayers[pResult->m_ClientID];
|
|
|
|
if(!pPlayer)
|
|
|
|
return;
|
|
|
|
|
|
|
|
if(pResult->NumArguments() == 0)
|
|
|
|
{
|
|
|
|
pScore->ShowTimes(pPlayer->GetCID(),1);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
else if(pResult->NumArguments() < 3)
|
|
|
|
{
|
|
|
|
if (pResult->NumArguments() == 1)
|
|
|
|
{
|
|
|
|
if(pResult->GetInteger(0) != 0)
|
|
|
|
pScore->ShowTimes(pPlayer->GetCID(),pResult->GetInteger(0));
|
|
|
|
else
|
|
|
|
pScore->ShowTimes(pPlayer->GetCID(), (str_comp(pResult->GetString(0), "me") == 0) ? pSelf->Server()->ClientName(pResult->m_ClientID) : pResult->GetString(0),1);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
else if (pResult->GetInteger(1) != 0)
|
|
|
|
{
|
|
|
|
pScore->ShowTimes(pPlayer->GetCID(), (str_comp(pResult->GetString(0), "me") == 0) ? pSelf->Server()->ClientName(pResult->m_ClientID) : pResult->GetString(0),pResult->GetInteger(1));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
|
2011-09-02 08:45:26 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "times", "/times needs 0, 1 or 2 parameter. 1. = name, 2. = start number");
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "times", "Example: /times, /times me, /times Hans, /times \"Papa Smurf\" 5");
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "times", "Bad: /times Papa Smurf 5 # Good: /times \"Papa Smurf\" 5 ");
|
2011-09-07 22:51:55 +00:00
|
|
|
|
|
|
|
#if defined(CONF_SQL)
|
|
|
|
if(pSelf->m_apPlayers[pResult->m_ClientID] && g_Config.m_SvUseSQL)
|
|
|
|
pSelf->m_apPlayers[pResult->m_ClientID]->m_LastSQLQuery = pSelf->Server()->Tick();
|
|
|
|
#endif
|
2011-12-25 13:51:04 +00:00
|
|
|
}
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
void CGameContext::ConRank(IConsole::IResult *pResult, void *pUserData)
|
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
CGameContext *pSelf = (CGameContext *) pUserData;
|
|
|
|
if (!CheckClientID(pResult->m_ClientID))
|
|
|
|
return;
|
2011-08-27 15:11:39 +00:00
|
|
|
|
2011-09-07 22:51:55 +00:00
|
|
|
#if defined(CONF_SQL)
|
2011-12-25 13:51:04 +00:00
|
|
|
if(pSelf->m_apPlayers[pResult->m_ClientID] && g_Config.m_SvUseSQL)
|
|
|
|
if(pSelf->m_apPlayers[pResult->m_ClientID]->m_LastSQLQuery + pSelf->Server()->TickSpeed() >= pSelf->Server()->Tick())
|
|
|
|
return;
|
2011-09-07 22:51:55 +00:00
|
|
|
#endif
|
|
|
|
|
2011-08-27 15:11:39 +00:00
|
|
|
CPlayer *pPlayer = pSelf->m_apPlayers[pResult->m_ClientID];
|
2011-12-25 13:51:04 +00:00
|
|
|
if (!pPlayer)
|
2011-08-27 15:11:39 +00:00
|
|
|
return;
|
|
|
|
|
2011-12-25 13:51:04 +00:00
|
|
|
if (pResult->NumArguments() > 0)
|
|
|
|
if (!g_Config.m_SvHideScore)
|
|
|
|
pSelf->Score()->ShowRank(pResult->m_ClientID, pResult->GetString(0),
|
|
|
|
true);
|
2011-08-27 15:11:39 +00:00
|
|
|
else
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"rank",
|
|
|
|
"Showing the rank of other players is not allowed on this server.");
|
2011-08-27 15:11:39 +00:00
|
|
|
else
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Score()->ShowRank(pResult->m_ClientID,
|
|
|
|
pSelf->Server()->ClientName(pResult->m_ClientID));
|
2011-09-07 22:51:55 +00:00
|
|
|
|
|
|
|
#if defined(CONF_SQL)
|
2011-12-25 13:51:04 +00:00
|
|
|
if(pSelf->m_apPlayers[pResult->m_ClientID] && g_Config.m_SvUseSQL)
|
|
|
|
pSelf->m_apPlayers[pResult->m_ClientID]->m_LastSQLQuery = pSelf->Server()->Tick();
|
2011-09-07 22:51:55 +00:00
|
|
|
#endif
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void CGameContext::ConJoinTeam(IConsole::IResult *pResult, void *pUserData)
|
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
CGameContext *pSelf = (CGameContext *) pUserData;
|
|
|
|
if (!CheckClientID(pResult->m_ClientID))
|
|
|
|
return;
|
2011-08-27 15:11:39 +00:00
|
|
|
|
2011-12-25 13:51:04 +00:00
|
|
|
if (pSelf->m_VoteCloseTime && pSelf->m_VoteCreator == pResult->m_ClientID)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"join",
|
|
|
|
"You are running a vote please try again after the vote is done!");
|
2011-08-27 15:11:39 +00:00
|
|
|
return;
|
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
else if (g_Config.m_SvTeam == 0)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "join",
|
|
|
|
"Admin has disabled teams");
|
2011-08-27 15:11:39 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
else if (g_Config.m_SvTeam == 2)
|
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"join",
|
|
|
|
"You must join to any team and play with anybody or you will not play");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
|
|
|
CPlayer *pPlayer = pSelf->m_apPlayers[pResult->m_ClientID];
|
|
|
|
|
2011-12-25 13:51:04 +00:00
|
|
|
if (pResult->NumArguments() > 0)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
if (pPlayer->GetCharacter() == 0)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "join",
|
|
|
|
"You can't change teams while you are dead/a spectator.");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
if (pPlayer->m_Last_Team
|
|
|
|
+ pSelf->Server()->TickSpeed()
|
|
|
|
* g_Config.m_SvTeamChangeDelay
|
|
|
|
> pSelf->Server()->Tick())
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "join",
|
|
|
|
"You can\'t join teams that fast!");
|
2011-12-25 11:20:10 +00:00
|
|
|
}
|
2011-12-25 13:51:04 +00:00
|
|
|
else if (((CGameControllerDDRace*) pSelf->m_pController)->m_Teams.SetCharacterTeam(
|
|
|
|
pPlayer->GetCID(), pResult->GetInteger(0)))
|
2011-12-25 11:20:10 +00:00
|
|
|
{
|
|
|
|
char aBuf[512];
|
2011-12-25 13:51:04 +00:00
|
|
|
str_format(aBuf, sizeof(aBuf), "%s joined team %d",
|
|
|
|
pSelf->Server()->ClientName(pPlayer->GetCID()),
|
|
|
|
pResult->GetInteger(0));
|
2011-12-25 11:20:10 +00:00
|
|
|
pSelf->SendChat(-1, CGameContext::CHAT_ALL, aBuf);
|
|
|
|
pPlayer->m_Last_Team = pSelf->Server()->Tick();
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "join",
|
|
|
|
"You cannot join this team at this time");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
char aBuf[512];
|
2011-12-25 13:51:04 +00:00
|
|
|
if (!pPlayer->IsPlaying())
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"join",
|
|
|
|
"You can't check your team while you are dead/a spectator.");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
str_format(
|
|
|
|
aBuf,
|
|
|
|
sizeof(aBuf),
|
|
|
|
"You are in team %d",
|
|
|
|
((CGameControllerDDRace*) pSelf->m_pController)->m_Teams.m_Core.Team(
|
|
|
|
pResult->m_ClientID));
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "join",
|
|
|
|
aBuf);
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void CGameContext::ConMe(IConsole::IResult *pResult, void *pUserData)
|
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
CGameContext *pSelf = (CGameContext *) pUserData;
|
|
|
|
if (!CheckClientID(pResult->m_ClientID))
|
|
|
|
return;
|
2011-08-27 15:11:39 +00:00
|
|
|
|
|
|
|
char aBuf[256 + 24];
|
|
|
|
|
2011-12-25 13:51:04 +00:00
|
|
|
str_format(aBuf, 256 + 24, "'%s' %s",
|
|
|
|
pSelf->Server()->ClientName(pResult->m_ClientID),
|
|
|
|
pResult->GetString(0));
|
|
|
|
if (g_Config.m_SvSlashMe)
|
2011-08-27 15:11:39 +00:00
|
|
|
pSelf->SendChat(-2, CGameContext::CHAT_ALL, aBuf, pResult->m_ClientID);
|
|
|
|
else
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"me",
|
|
|
|
"/me is disabled on this server, admin can enable it by using sv_slash_me");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
|
|
|
|
2011-12-25 13:51:04 +00:00
|
|
|
void CGameContext::ConToggleEyeEmote(IConsole::IResult *pResult,
|
|
|
|
void *pUserData)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
CGameContext *pSelf = (CGameContext *) pUserData;
|
|
|
|
if (!CheckClientID(pResult->m_ClientID))
|
|
|
|
return;
|
2011-08-27 15:11:39 +00:00
|
|
|
|
|
|
|
CPlayer *pPlayer = pSelf->m_apPlayers[pResult->m_ClientID];
|
2011-12-25 13:51:04 +00:00
|
|
|
if (!pPlayer)
|
2011-08-27 15:11:39 +00:00
|
|
|
return;
|
|
|
|
CCharacter* pChr = pPlayer->GetCharacter();
|
2011-12-25 13:51:04 +00:00
|
|
|
if (!pChr)
|
2011-08-27 15:11:39 +00:00
|
|
|
return;
|
|
|
|
|
|
|
|
pChr->m_EyeEmote = !pChr->m_EyeEmote;
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"emote",
|
|
|
|
(pChr->m_EyeEmote) ?
|
|
|
|
"You can now use the preset eye emotes." :
|
|
|
|
"You don't have any eye emotes, remember to bind some. (until you die)");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void CGameContext::ConEyeEmote(IConsole::IResult *pResult, void *pUserData)
|
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
CGameContext *pSelf = (CGameContext *) pUserData;
|
|
|
|
if (g_Config.m_SvEmotionalTees == -1)
|
|
|
|
{
|
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "emote",
|
|
|
|
"Server admin disabled emotes.");
|
2011-11-08 12:04:57 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2011-12-25 13:51:04 +00:00
|
|
|
if (!CheckClientID(pResult->m_ClientID))
|
|
|
|
return;
|
2011-08-27 15:11:39 +00:00
|
|
|
|
|
|
|
CPlayer *pPlayer = pSelf->m_apPlayers[pResult->m_ClientID];
|
2011-12-25 13:51:04 +00:00
|
|
|
if (!pPlayer)
|
2011-08-27 15:11:39 +00:00
|
|
|
return;
|
|
|
|
CCharacter* pChr = pPlayer->GetCharacter();
|
2011-12-25 13:51:04 +00:00
|
|
|
if (!pChr)
|
2011-08-27 15:11:39 +00:00
|
|
|
return;
|
|
|
|
|
|
|
|
if (pResult->NumArguments() == 0)
|
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"emote",
|
|
|
|
"Emote commands are: /emote surprise /emote blink /emote close /emote angry /emote happy /emote pain");
|
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"emote",
|
|
|
|
"Example: /emote surprise 10 for 10 seconds or /emote surprise (default 1 second)");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (pChr)
|
|
|
|
{
|
|
|
|
if (!str_comp(pResult->GetString(0), "angry"))
|
|
|
|
pChr->m_DefEmote = EMOTE_ANGRY;
|
|
|
|
else if (!str_comp(pResult->GetString(0), "blink"))
|
|
|
|
pChr->m_DefEmote = EMOTE_BLINK;
|
|
|
|
else if (!str_comp(pResult->GetString(0), "close"))
|
|
|
|
pChr->m_DefEmote = EMOTE_BLINK;
|
|
|
|
else if (!str_comp(pResult->GetString(0), "happy"))
|
|
|
|
pChr->m_DefEmote = EMOTE_HAPPY;
|
|
|
|
else if (!str_comp(pResult->GetString(0), "pain"))
|
|
|
|
pChr->m_DefEmote = EMOTE_PAIN;
|
|
|
|
else if (!str_comp(pResult->GetString(0), "surprise"))
|
|
|
|
pChr->m_DefEmote = EMOTE_SURPRISE;
|
|
|
|
else if (!str_comp(pResult->GetString(0), "normal"))
|
|
|
|
pChr->m_DefEmote = EMOTE_NORMAL;
|
|
|
|
else
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"emote", "Unknown emote... Say /emote");
|
2011-08-27 15:11:39 +00:00
|
|
|
|
|
|
|
int Duration = 1;
|
|
|
|
if (pResult->NumArguments() > 1)
|
|
|
|
Duration = pResult->GetInteger(1);
|
|
|
|
|
2011-12-25 13:51:04 +00:00
|
|
|
pChr->m_DefEmoteReset = pSelf->Server()->Tick()
|
|
|
|
+ Duration * pSelf->Server()->TickSpeed();
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-09-02 22:28:56 +00:00
|
|
|
void CGameContext::ConShowOthers(IConsole::IResult *pResult, void *pUserData)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
CGameContext *pSelf = (CGameContext *) pUserData;
|
|
|
|
if (!CheckClientID(pResult->m_ClientID))
|
|
|
|
return;
|
2011-08-27 15:11:39 +00:00
|
|
|
|
|
|
|
CPlayer *pPlayer = pSelf->m_apPlayers[pResult->m_ClientID];
|
2011-12-25 13:51:04 +00:00
|
|
|
if (!pPlayer)
|
2011-08-27 15:11:39 +00:00
|
|
|
return;
|
2011-12-25 13:51:04 +00:00
|
|
|
if (g_Config.m_SvShowOthers)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
if (pPlayer->m_IsUsingDDRaceClient)
|
2011-08-27 15:11:39 +00:00
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
if (pResult->NumArguments())
|
2011-08-27 15:11:39 +00:00
|
|
|
pPlayer->m_ShowOthers = pResult->GetInteger(0);
|
|
|
|
else
|
|
|
|
pPlayer->m_ShowOthers = !pPlayer->m_ShowOthers;
|
|
|
|
}
|
|
|
|
else
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"showotherschat",
|
|
|
|
"Showing players from other teams is only available with DDRace Client, http://DDRace.info");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
|
|
|
else
|
2011-12-25 13:51:04 +00:00
|
|
|
pSelf->Console()->Print(
|
|
|
|
IConsole::OUTPUT_LEVEL_STANDARD,
|
|
|
|
"showotherschat",
|
|
|
|
"Showing players from other teams is disabled by the server admin");
|
2011-08-27 15:11:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
bool CheckClientID(int ClientID)
|
|
|
|
{
|
2011-12-25 13:51:04 +00:00
|
|
|
dbg_assert(ClientID >= 0 || ClientID < MAX_CLIENTS,
|
|
|
|
"The Client ID is wrong");
|
|
|
|
if (ClientID < 0 || ClientID >= MAX_CLIENTS)
|
|
|
|
return false;
|
2011-08-27 15:11:39 +00:00
|
|
|
return true;
|
|
|
|
}
|