41 if (!szInputQuery)
return true;
43 if (
SCharCount(
'|', szInputQuery))
return false;
51 fObjInput(fObjInput), fUppercase(fUppercase), pTarget(pScriptTarget), iPlr(iPlr), BackIndex(-1), fProcessed(false)
74 delete pKeyHistoryDown;
76 delete pKeyNickComplete;
77 delete pKeyPlrControl;
78 delete pKeyGamepadControl;
80 if (
this==pInstance) pInstance=
nullptr;
109 BaseDlg::OnClosed(
fOK);
118 auto *szInputText =
const_cast<char *
>(pEdt->GetText());
152 bool C4ChatInputDialog::KeyHistoryUpDown(
bool fUp)
157 if (!szPrevInput || !*szPrevInput)
167 bool C4ChatInputDialog::KeyPlrControl(
const C4KeyCodeEx &key)
175 bool C4ChatInputDialog::KeyGamepadControlDown(
const C4KeyCodeEx &key)
184 bool C4ChatInputDialog::KeyGamepadControlUp(
const C4KeyCodeEx &key)
193 bool C4ChatInputDialog::KeyGamepadControlPressed(
const C4KeyCodeEx &key)
202 bool C4ChatInputDialog::KeyBackspaceClose()
210 bool C4ChatInputDialog::KeyCompleteNick()
212 if (!
pEdit)
return false;
213 char IncompleteNick[256+1];
216 if (!*IncompleteNick)
return false;
250 for (
auto & cnt : BackBuffer) cnt[0]=0;
259 while ((pCmd = pCommands))
261 pCommands = pCmd->
Next;
270 if (!pDlg)
return false;
297 if (
GetTypeIn()->IsScriptQueried())
return false;
316 const char *szMsg =
nullptr;
317 int32_t iToPlayer = -1;
331 szMsg = szText[0] ==
'^' ? szText+1 :
332 szText[0] ==
'/' ? szText+6 : szText+5;
343 if (!pToPlr)
return false;
346 iToPlayer = pToPlr->
Number;
347 szMsg = szText + 10 +
SLen(szText);
348 if (szMsg > szText +
SLen(szText))
return false;
376 SCopy(szText, OSTR, 400);
377 char *pEnd = OSTR +
SLen(OSTR) - 1;
378 if (*pEnd !=
'"') { *++pEnd =
'"'; *++pEnd = 0; }
382 else if (szText[0] ==
'/')
405 const char *szEnd = szMsg +
SLen(szMsg) - 1;
410 if (eMsgType ==
C4CMT_Say) { ++szMsg; szEnd--; }
431 const int32_t MaxCommandLen = 20;
432 char szCmdName[MaxCommandLen + 1];
433 SCopyUntil(szCommand + 1, szCmdName,
' ', MaxCommandLen);
435 const char *pCmdPar =
SSearch(szCommand,
" ");
436 if (!pCmdPar) pCmdPar =
"";
460 int iSepPos =
SCharPos(
' ', pCmdPar, 0);
462 int32_t idLocalClient = -1;
468 sPlrName.
Copy(pCmdPar, iSepPos);
469 pCmdPar += iSepPos+1; int32_t
id=0;
496 if (sscanf(pCmdPar,
"%x", &dwNewClr) != 1)
503 dwNewClr |= 0xff000000;
504 if (!dwNewClr) ++dwNewClr;
525 else if (pCmdPar && *pCmdPar && (!sscanf(pCmdPar,
"%d", &iTimeout) || iTimeout<0))
532 pLobby->
Start(iTimeout);
554 if (
SEqual(szCmdName,
"help"))
556 Log(
LoadResStr(pLobby ?
"IDS_TEXT_COMMANDSAVAILABLEDURINGLO" :
"IDS_TEXT_COMMANDSAVAILABLEDURINGGA"));
559 LogF(
"/start [time] - %s",
LoadResStr(
"IDS_TEXT_STARTTHEROUNDWITHSPECIFIE"));
561 LogF(
"/alert - %s",
LoadResStr(
"IDS_TEXT_ALERTTHEHOSTIFTHEHOSTISAW"));
562 LogF(
"/joinplr [filename] - %s",
LoadResStr(
"IDS_TEXT_JOINALOCALPLAYERFROMTHESP"));
563 LogF(
"/plrclr [player] [RGB] - %s",
LoadResStr(
"IDS_TEXT_CHANGETHECOLOROFTHESPECIF"));
564 LogF(
"/plrclr [RGB] - %s",
LoadResStr(
"IDS_TEXT_CHANGEYOUROWNPLAYERCOLOR"));
568 LogF(
"/fast [x] - %s",
LoadResStr(
"IDS_TEXT_SETTOFASTMODESKIPPINGXFRA"));
570 LogF(
"/chart - %s",
LoadResStr(
"IDS_TEXT_DISPLAYNETWORKSTATISTICS"));
571 LogF(
"/nodebug - %s",
LoadResStr(
"IDS_TEXT_PREVENTDEBUGMODEINTHISROU"));
572 LogF(
"/script [script] - %s",
LoadResStr(
"IDS_TEXT_EXECUTEASCRIPTCOMMAND"));
573 LogF(
"/screenshot [zoom] - %s",
LoadResStr(
"IDS_TEXT_SAFEZOOMEDFULLSCREENSHOT"));
575 LogF(
"/kick [client] - %s",
LoadResStr(
"IDS_TEXT_KICKTHESPECIFIEDCLIENT"));
576 LogF(
"/observer [client] - %s",
LoadResStr(
"IDS_TEXT_SETTHESPECIFIEDCLIENTTOOB"));
577 LogF(
"/me [action] - %s",
LoadResStr(
"IDS_TEXT_PERFORMANACTIONINYOURNAME"));
578 LogF(
"/sound [sound] - %s",
LoadResStr(
"IDS_TEXT_PLAYASOUNDFROMTHEGLOBALSO"));
580 LogF(
"/team [message] - %s",
LoadResStr(
"IDS_MSG_SENDAPRIVATEMESSAGETOYOUR"));
581 LogF(
"/set comment [comment] - %s",
LoadResStr(
"IDS_TEXT_SETANEWNETWORKCOMMENT"));
582 LogF(
"/set password [password] - %s",
LoadResStr(
"IDS_TEXT_SETANEWNETWORKPASSWORD"));
583 LogF(
"/set maxplayer [number] - %s",
LoadResStr(
"IDS_TEXT_SETANEWMAXIMUMNUMBEROFPLA"));
589 if (
SEqual(szCmdName,
"script"))
598 if (
SEqual(szCmdName,
"set"))
600 if (
SEqual2(pCmdPar,
"maxplayer "))
604 if (atoi(pCmdPar+10) == 0 && !
SEqual(pCmdPar+10,
"0"))
606 Log(
"Syntax: /set maxplayer count");
615 if (
SEqual2(pCmdPar,
"comment ") ||
SEqual(pCmdPar,
"comment"))
624 if (
SEqual2(pCmdPar,
"password ") ||
SEqual(pCmdPar,
"password"))
635 if (
SEqual(szCmdName,
"netgetscen"))
654 if (
SEqual(szCmdName,
"clear"))
672 if (
SEqual(szCmdName,
"kick"))
693 if (
SEqual(szCmdName,
"fast"))
697 if ((iFS=atoi(pCmdPar)) == 0)
return false;
706 if (
SEqual(szCmdName,
"slow"))
714 if (
SEqual(szCmdName,
"nodebug"))
722 if (
SEqual(szCmdName,
"activate") ||
SEqual(szCmdName,
"deactivate") ||
SEqual(szCmdName,
"observer"))
735 if (szCmdName[0] ==
'a')
750 if (
SEqual(szCmdName,
"centralctrl") ||
SEqual(szCmdName,
"decentralctrl") ||
SEqual(szCmdName,
"asyncctrl"))
760 if (
SEqual(szCmdName,
"chart"))
764 if (
SEqual(szCmdName,
"screenshot"))
766 double zoom = atof(pCmdPar);
767 if (zoom<=0) zoom = 2;
773 if (
SEqual(szCmdName,
"todo"))
776 if (!pCmdPar || !*pCmdPar)
return false;
779 bool success =
false;
780 for (
auto & i : todo_filenames)
800 if (!todo_file.
Close())
continue;
841 pCmd->
Next = pCommands; pCommands = pCmd;
847 if (
SEqual(pCmd->Name, strName))
868 if (!szMessage || !szMessage[0])
return;
872 if (
SEqual(BackBuffer[i], szMessage))
875 for (cnt=i; cnt>0; cnt--)
SCopy(BackBuffer[cnt-1],BackBuffer[cnt]);
883 return BackBuffer[iIndex];
C4Application Application
C4GraphicsSystem GraphicsSystem
C4GraphicsResource GraphicsResource
bool C4Group_CopyItem(const char *source, const char *target, bool no_sorting, bool reset_attributes)
const char * LoadResStrNoAmp(const char *id)
const char * LoadResStr(const char *id)
bool Log(const char *szMessage)
bool LogF(const char *strMessage,...)
unsigned int SCharCount(char cTarget, const char *szInStr, const char *cpUntil)
const char * SSearch(const char *szString, const char *szIndex)
int SCharPos(char cTarget, const char *szInStr, int iIndex)
bool SEqual2(const char *szStr1, const char *szStr2)
void SCopy(const char *szSource, char *sTarget, size_t iMaxL)
bool SEqualNoCase(const char *szStr1, const char *szStr2, int iLen)
void SCopyUntil(const char *szSource, char *sTarget, char cUntil, int iMaxL, int iIndex)
void SCapitalize(char *str)
bool SEqual2NoCase(const char *szStr1, const char *szStr2, int iLen)
bool IsWhiteSpace(char cChar)
bool SEqual(const char *szStr1, const char *szStr2)
size_t SLen(const char *sptr)
StdStrBuf FormatString(const char *szFmt,...)
bool WildcardMatch(const char *szWildcard, const char *szString)
char * GetFilename(char *szPath)
bool ItemExists(const char *szItemName)
void CtrlRemove(const C4Client *pClient, const char *szReason)
C4Client * getClientByName(const char *szName) const
int32_t GetClientID() const
C4PlayerInfo * GetPlayerInfoByID(int32_t id) const
char AltTodoFilename[CFG_MaxString+1]
char TodoFilename[CFG_MaxString+1]
char UserDataPath[CFG_MaxString+1]
const char * AtUserDataPath(const char *filename)
C4ConfigDeveloper Developer
ValidatedStdCopyStrBuf< C4InVal::VAL_Comment > Comment
void SetDelOnClose(bool fToVal=true)
bool GetCurrentWord(char *szTargetBuf, int32_t iMaxTargetBufLen)
bool InsertText(const char *szText, bool fUser)
bool ShowRemoveDlg(Dialog *pDlg)
void DoInput(C4PacketType eCtrlType, C4ControlPacket *pPkt, C4ControlDeliveryType eDelivery)
bool DoKeyboardInput(C4KeyCode vk_code, C4KeyEventType event_type, bool alt, bool ctrl, bool shift, bool repeated, class C4GUI::Dialog *for_dialog=nullptr, bool fPlrCtrlOnly=false, int32_t strength=-1)
char ScenarioFilename[_MAX_PATH_LEN]
C4PlayerInfoList & PlayerInfos
C4GameParameters & Parameters
void Start(int32_t iCountdownTime)
void OnError(const char *szErrMsg)
const C4Network2ResCore * getResCore() const
bool SaveScreenshot(bool save_all, float zoom_factor_all)
std::unique_ptr< C4MessageBoard > MessageBoard
StdStrBuf GetFullName() const
char Script[_MAX_FNAME_LEN+30]
C4MessageBoardCommand * Next
void CompileFunc(StdCompiler *pComp)
C4Network2Client * GetLocal() const
C4Network2Players Players
C4Network2ResList ResList
void AbortLobbyCountdown()
class C4GameLobby::MainDlg * GetLobby() const
void InvalidateReference()
void Vote(C4ControlVoteType eType, bool fApprove=true, int32_t iData=0)
void SetCtrlMode(int32_t iCtrlMode)
void SetPassword(const char *szToPassword)
C4Network2ClientList Clients
void StartLobbyCountdown(int32_t iCountdownTime)
bool JoinLocalPlayer(const char *szLocalPlayerFilename, bool initial=false)
void RequestPlayerInfoUpdate(const class C4ClientPlayerInfos &rRequest)
const char * getFile() const
C4Network2Res::Ref getRefRes(int32_t iResID)
const char * GetName() const
bool MarkMessageBoardQueryAnswered(C4Object *pForObj)
void SetOriginalColor(DWORD dwUseClr)
const char * GetName() const
C4PlayerInfo * GetPrimaryInfoByClientID(int32_t iClientID) const
C4PlayerInfo * GetNextPlayerInfoByID(int32_t id) const
C4ClientPlayerInfos * GetClientInfoByPlayerID(int32_t id) const
C4Player * GetAtClient(int iClient, int iIndex=0) const
C4Player * GetByName(const char *szName, int iExcluding=NO_OWNER) const
C4Player * Get(int iPlayer) const
C4Player * GetLocalByIndex(int iIndex) const
bool IsTeamVisible() const
bool Close(StdBuf **ppMemory=nullptr)
bool WriteString(const char *szStr)
bool Append(const char *szFilename, bool text=false)
bool GetTextExtent(const char *szText, int32_t &rsx, int32_t &rsy, bool fCheckMarkup=true)
virtual bool Separator(Sep eSep=SEP_SEP)
void Value(const T &rStruct)
int Replace(const char *szOld, const char *szNew, size_t iStartSearch=0)
const char * getData() const
void Format(const char *szFmt,...) GNUC_FORMAT_ATTRIBUTE_O
void LobbyError(const char *szErrorMsg)
void CopyValidated(const char *szFromVal)