void CChat::ConChat(IConsole::IResult *pResult, void *pUserData) { const char *pMode = pResult->GetString(0); if(str_comp(pMode, "all") == 0) ((CChat*)pUserData)->EnableMode(0); else if(str_comp(pMode, "team") == 0) ((CChat*)pUserData)->EnableMode(1); else ((CChat*)pUserData)->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "console", "expected all or team as mode"); }
void CFriends::SetOnline(const char *pName, const char *pClan, NETADDR ServerAddr) { for(int i = 0; i < m_NumFriends; i++) { if(!str_comp(m_aFriends[i].m_aClan, pClan) && !str_comp(m_aFriends[i].m_aName, pName)) { m_aFriends[i].m_Online = true; m_aFriends[i].m_ServerAddr = ServerAddr;; } } }
void CFriends::RemoveFriend(const char *pName, const char *pClan) { for(int i = 0; i < m_NumFriends; ++i) { if(!str_comp(m_aFriends[i].m_aName, pName) && !str_comp(m_aFriends[i].m_aClan, pClan)) { RemoveFriend(i); return; } } }
void CGameClient::OnRender() { /*Graphics()->Clear(1,0,0); menus->render_background(); return;*/ /* Graphics()->Clear(1,0,0); Graphics()->MapScreen(0,0,100,100); Graphics()->QuadsBegin(); Graphics()->SetColor(1,1,1,1); Graphics()->QuadsDraw(50, 50, 30, 30); Graphics()->QuadsEnd(); return;*/ // update the local character and spectate position UpdatePositions(); // dispatch all input to systems DispatchInput(); // render all systems for(int i = 0; i < m_All.m_Num; i++) m_All.m_paComponents[i]->OnRender(); // clear new tick flags m_NewTick = false; m_NewPredictedTick = false; // check if client info has to be resent if(m_LastSendInfo && Client()->State() == IClient::STATE_ONLINE && m_Snap.m_LocalClientID >= 0 && !m_pMenus->IsActive() && m_LastSendInfo+time_freq()*6 < time_get()) { // resend if client info differs if(str_comp(g_Config.m_PlayerName, m_aClients[m_Snap.m_LocalClientID].m_aName) || str_comp(g_Config.m_PlayerClan, m_aClients[m_Snap.m_LocalClientID].m_aClan) || g_Config.m_PlayerCountry != m_aClients[m_Snap.m_LocalClientID].m_Country) { SendInfo(false); } for(int p = 0; p < NUM_SKINPARTS; p++) { if(str_comp(gs_apSkinVariables[p], m_aClients[m_Snap.m_LocalClientID].m_aaSkinPartNames[p])) SendInfo(false); else if(*gs_apUCCVariables[p] != m_aClients[m_Snap.m_LocalClientID].m_aUseCustomColors[p] || *gs_apColorVariables[p] != m_aClients[m_Snap.m_LocalClientID].m_aSkinPartColors[p]) { SendInfo(false); } } m_LastSendInfo = 0; } }
void CGameContext::ConTimes(IConsole::IResult *pResult, void *pUserData) { if(!CheckClientID(pResult->m_ClientID)) return; CGameContext *pSelf = (CGameContext *)pUserData; #if defined(CONF_SQL) 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; #endif 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; } } 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 "); #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 } }
void CGameClient::OnRender() { /*Graphics()->Clear(1,0,0); menus->render_background(); return;*/ /* Graphics()->Clear(1,0,0); Graphics()->MapScreen(0,0,100,100); Graphics()->QuadsBegin(); Graphics()->SetColor(1,1,1,1); Graphics()->QuadsDraw(50, 50, 30, 30); Graphics()->QuadsEnd(); return;*/ // update the local character and spectate position UpdatePositions(); // dispatch all input to systems DispatchInput(); // render all systems for(int i = 0; i < m_All.m_Num; i++) m_All.m_paComponents[i]->OnRender(); // clear new tick flags m_NewTick = false; m_NewPredictedTick = false; // check if client info has to be resent if(m_LastSendInfo && Client()->State() == IClient::STATE_ONLINE && m_Snap.m_LocalClientID >= 0 && !m_pMenus->IsActive() && m_LastSendInfo+time_freq()*5 < time_get()) { // resend if client info differs if(str_comp(g_Config.m_PlayerName, m_aClients[m_Snap.m_LocalClientID].m_aName) || str_comp(g_Config.m_PlayerClan, m_aClients[m_Snap.m_LocalClientID].m_aClan) || g_Config.m_PlayerCountry != m_aClients[m_Snap.m_LocalClientID].m_Country || str_comp(g_Config.m_PlayerSkin, m_aClients[m_Snap.m_LocalClientID].m_aSkinName) || (m_Snap.m_pGameInfoObj && !(m_Snap.m_pGameInfoObj->m_GameFlags&GAMEFLAG_TEAMS) && // no teamgame? (g_Config.m_PlayerUseCustomColor != m_aClients[m_Snap.m_LocalClientID].m_UseCustomColor || g_Config.m_PlayerColorBody != m_aClients[m_Snap.m_LocalClientID].m_ColorBody || g_Config.m_PlayerColorFeet != m_aClients[m_Snap.m_LocalClientID].m_ColorFeet))) { SendInfo(false); } m_LastSendInfo = 0; } }
void CUpdater::AddFileToRemove(const char *pFile) { // Remove it from download list for (int i=0; i<m_vToDownload.size();) { if (str_comp(m_vToDownload[i].c_str(), pFile) == 0) m_vToDownload.remove_index(i); else ++i; } // Check if already in the list for (int i=0; i<m_vToRemove.size(); i++) if (str_comp(m_vToRemove[i].c_str(), pFile) == 0) return; m_vToRemove.add(pFile); }
void CMenus::DemolistOnUpdate(bool Reset) { CALLSTACK_ADD(); if (Reset) g_Config.m_UiDemoSelected[0] = '\0'; else { bool Found = false; int SelectedIndex = -1; // search for selected index for(sorted_array<CDemoItem>::range r = m_lDemos.all(); !r.empty(); r.pop_front()) { SelectedIndex++; if (str_comp(g_Config.m_UiDemoSelected, r.front().m_aName) == 0) { Found = true; break; } } if (Found) m_DemolistSelectedIndex = SelectedIndex; } m_DemolistSelectedIndex = Reset ? m_lDemos.size() > 0 ? 0 : -1 : m_DemolistSelectedIndex >= m_lDemos.size() ? m_lDemos.size()-1 : m_DemolistSelectedIndex; m_DemolistSelectedIsDir = m_DemolistSelectedIndex < 0 ? false : m_lDemos[m_DemolistSelectedIndex].m_IsDir; }
void CGhost::OnMessage(int MsgType, void *pRawMsg) { // check for messages from server if(MsgType == NETMSGTYPE_SV_KILLMSG) { CNetMsg_Sv_KillMsg *pMsg = (CNetMsg_Sv_KillMsg *)pRawMsg; if(pMsg->m_Victim == m_pClient->m_Snap.m_LocalClientID) { if(m_Recording) StopRecord(); StopRender(); m_LastDeathTick = Client()->GameTick(); } } else if(MsgType == NETMSGTYPE_SV_CHAT) { CNetMsg_Sv_Chat *pMsg = (CNetMsg_Sv_Chat *)pRawMsg; if(pMsg->m_ClientID == -1 && m_Recording) { char aName[MAX_NAME_LENGTH]; int Time = CRaceHelper::TimeFromFinishMessage(pMsg->m_pMessage, aName, sizeof(aName)); if(Time > 0 && str_comp(aName, m_pClient->m_aClients[m_pClient->m_Snap.m_LocalClientID].m_aName) == 0) { StopRecord(Time); StopRender(); } } } }
int CServer::TrySetClientName(int ClientID, const char *pName) { char aTrimmedName[64]; // trim the name str_copy(aTrimmedName, StrLtrim(pName), sizeof(aTrimmedName)); StrRtrim(aTrimmedName); char aBuf[256]; str_format(aBuf, sizeof(aBuf), "'%s' -> '%s'", pName, aTrimmedName); Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "server", aBuf); pName = aTrimmedName; // check for empty names if(!pName[0]) return -1; // make sure that two clients doesn't have the same name for(int i = 0; i < MAX_CLIENTS; i++) if(i != ClientID && m_aClients[i].m_State >= CClient::STATE_READY) { if(str_comp(pName, m_aClients[i].m_aName) == 0) return -1; } // set the client name str_copy(m_aClients[ClientID].m_aName, pName, MAX_NAME_LENGTH); return 0; }
const char *CScoreboard::GetClanName(int Team) { int ClanPlayers = 0; const char *pClanName = 0; for(int i = 0; i < MAX_CLIENTS; i++) { if(!m_pClient->m_aClients[i].m_Active || m_pClient->m_aClients[i].m_Team != Team) continue; if(!pClanName) { pClanName = m_pClient->m_aClients[i].m_aClan; ClanPlayers++; } else { if(str_comp(m_pClient->m_aClients[i].m_aClan, pClanName) == 0) ClanPlayers++; else return 0; } } if(ClanPlayers > 1 && pClanName[0]) return pClanName; else return 0; }
void CBackground::LoadBackground() { if(time_get()-m_LastLoad < 10*time_freq()) return; if(m_Loaded && m_pMap == m_pBackgroundMap) m_pMap->Unload(); m_Loaded = false; m_pMap = m_pBackgroundMap; m_pLayers->m_pLayers = m_pBackgroundLayers; m_pImages = m_pBackgroundImages; str_format(m_aMapName, sizeof(m_aMapName), "%s", g_Config.m_ClBackgroundEntities); char aBuf[128]; str_format(aBuf, sizeof(aBuf), "maps/%s", g_Config.m_ClBackgroundEntities); if(m_pMap->Load(aBuf)) { m_pLayers->m_pLayers->InitBackground(m_pMap); m_pImages->LoadBackground(m_pMap); RenderTools()->RenderTilemapGenerateSkip(m_pLayers->m_pLayers); m_Loaded = true; } else if(str_comp(g_Config.m_ClBackgroundEntities, CURRENT) == 0) { m_pMap = Kernel()->RequestInterface<IEngineMap>(); m_pLayers->m_pLayers = GameClient()->Layers(); m_pImages = GameClient()->m_pMapimages; m_Loaded = true; } m_LastLoad = time_get(); }
float CMenus::RenderSettingsControlsMisc(CUIRect View, void *pUser) { CMenus *pSelf = (CMenus*)pUser; // this is kinda slow, but whatever for(int i = 0; i < g_KeyCount; i++) gs_aKeys[i].m_KeyId = 0; for(int KeyId = 0; KeyId < KEY_LAST; KeyId++) { const char *pBind = pSelf->m_pClient->m_pBinds->Get(KeyId); if(!pBind[0]) continue; for(int i = 0; i < g_KeyCount; i++) if(str_comp(pBind, gs_aKeys[i].m_pCommand) == 0) { gs_aKeys[i].m_KeyId = KeyId; break; } } int NumOptions = 14; int StartOption = 17; float ButtonHeight = 20.0f; float Spaceing = 2.0f; float BackgroundHeight = (float)NumOptions*ButtonHeight+(float)NumOptions*Spaceing; View.HSplitTop(BackgroundHeight, &View, 0); pSelf->RenderTools()->DrawUIRect(&View, vec4(0.0f, 0.0f, 0.0f, 0.25f), CUI::CORNER_B, 5.0f); pSelf->UiDoGetButtons(StartOption, StartOption+NumOptions, View, ButtonHeight, Spaceing); return BackgroundHeight; }
int CMapImages::GetEntities() { CServerInfo Info; Client()->GetServerInfo(&Info); if(m_EntitiesTextures == -1 || str_comp(m_aEntitiesGameType, Info.m_aGameType)) { // DDNet default to prevent delay in seeing entities char file[64] = "ddnet"; if(IsDDNet(&Info)) str_copy(file, "ddnet", sizeof(file)); else if(IsDDRace(&Info)) str_copy(file, "ddrace", sizeof(file)); else if(IsRace(&Info)) str_copy(file, "race", sizeof(file)); else if(IsFNG(&Info)) str_copy(file, "fng", sizeof(file)); else if(IsVanilla(&Info)) str_copy(file, "vanilla", sizeof(file)); char path[64]; str_format(path, sizeof(path), "editor/entities_clear/%s.png", file); if(m_EntitiesTextures >= 0) Graphics()->UnloadTexture(m_EntitiesTextures); m_EntitiesTextures = Graphics()->LoadTexture(path, IStorage::TYPE_ALL, CImageInfo::FORMAT_AUTO, 0); str_copy(m_aEntitiesGameType, Info.m_aGameType, sizeof(m_aEntitiesGameType)); } return m_EntitiesTextures; }
void *ReplaceImageItem(void *pItem, int Type, const char *pImgName, const char *pImgFile, CMapItemImage *pNewImgItem) { if(Type != MAPITEMTYPE_IMAGE) return pItem; CMapItemImage *pImgItem = (CMapItemImage *)pItem; char *pName = (char *)g_DataReader.GetData(pImgItem->m_ImageName); if(str_comp(pImgName, pName) != 0) return pItem; dbg_msg("map_replace_image", "found image '%s'", pImgName); CImageInfo ImgInfo; if(!LoadPNG(&ImgInfo, pImgFile)) return 0; *pNewImgItem = *pImgItem; pNewImgItem->m_Width = ImgInfo.m_Width; pNewImgItem->m_Height = ImgInfo.m_Height; int PixelSize = ImgInfo.m_Format == CImageInfo::FORMAT_RGB ? 3 : 4; g_NewNameID = pImgItem->m_ImageName; IStorage::StripPathAndExtension(pImgFile, g_aNewName, sizeof(g_aNewName)); g_NewDataID = pImgItem->m_ImageData; g_pNewData = ImgInfo.m_pData; g_NewDataSize = ImgInfo.m_Width * ImgInfo.m_Height * PixelSize; return (void *)pNewImgItem; }
static int FindFileCallback(const char *pName, int IsDir, int Type, void *pUser) { CFindCBData Data = *static_cast<CFindCBData *>(pUser); if(IsDir) { if(pName[0] == '.') return 0; // search within the folder char aBuf[MAX_PATH_LENGTH]; char aPath[MAX_PATH_LENGTH]; str_format(aPath, sizeof(aPath), "%s/%s", Data.pPath, pName); Data.pPath = aPath; fs_listdir(Data.pStorage->GetPath(Type, aPath, aBuf, sizeof(aBuf)), FindFileCallback, Type, &Data); if(Data.pBuffer[0]) return 1; } else if(!str_comp(pName, Data.pFilename)) { // found the file = end str_format(Data.pBuffer, Data.BufferSize, "%s/%s", Data.pPath, Data.pFilename); return 1; } return 0; }
void CFriends::AddFriend(const char *pName, const char *pClan) { if(m_NumFriends == MAX_FRIENDS || (pName[0] == 0 && pClan[0] == 0)) return; // make sure we don't have the friend already for(int i = 0; i < m_NumFriends; ++i) { if(!str_comp(m_aFriends[i].m_aName, pName) && !str_comp(m_aFriends[i].m_aClan, pClan)) return; } str_copy(m_aFriends[m_NumFriends].m_aName, pName, sizeof(m_aFriends[m_NumFriends].m_aName)); str_copy(m_aFriends[m_NumFriends].m_aClan, pClan, sizeof(m_aFriends[m_NumFriends].m_aClan)); ++m_NumFriends; }
void CMenus::DemolistPopulate() { m_lDemos.clear(); if(!str_comp(m_aCurrentDemoFolder, "demos")) m_DemolistStorageType = IStorage::TYPE_ALL; Storage()->ListDirectory(m_DemolistStorageType, m_aCurrentDemoFolder, DemolistFetchCallback, this); }
int MaplistCallback(const char *pName, int IsDir, int DirType, void *pUser) { int l = str_length(pName); if(l < 4 || IsDir || str_comp(pName+l-4, ".map") != 0) return 0; char aBuf[128]; str_format(aBuf, sizeof(aBuf), "maps/%s", pName); if(!s_pEngineMap->Load(aBuf)) return 0; unsigned MapCrc = s_pEngineMap->Crc(); s_pEngineMap->Unload(); IOHANDLE MapFile = s_pStorage->OpenFile(aBuf, IOFLAG_READ, DirType); unsigned MapSize = io_length(MapFile); io_close(MapFile); char aMapName[8]; str_copy(aMapName, pName, min((int)sizeof(aMapName),l-3)); str_format(aBuf, sizeof(aBuf), "\t{\"%s\", {0x%02x, 0x%02x, 0x%02x, 0x%02x}, {0x%02x, 0x%02x, 0x%02x, 0x%02x}},\n", aMapName, (MapCrc>>24)&0xff, (MapCrc>>16)&0xff, (MapCrc>>8)&0xff, MapCrc&0xff, (MapSize>>24)&0xff, (MapSize>>16)&0xff, (MapSize>>8)&0xff, MapSize&0xff); io_write(s_File, aBuf, str_length(aBuf)); return 0; }
const char *CScoreboard::GetClanName(int Team) { int ClanPlayers = 0; const char *pClanName = 0; for(int i = 0; i < MAX_CLIENTS; i++) { const CNetObj_PlayerInfo *pInfo = m_pClient->m_Snap.m_paInfoByScore[i]; if(!pInfo || pInfo->m_Team != Team) continue; if(!pClanName) { pClanName = m_pClient->m_aClients[pInfo->m_ClientID].m_aClan; ClanPlayers++; } else { if(str_comp(m_pClient->m_aClients[pInfo->m_ClientID].m_aClan, pClanName) == 0) ClanPlayers++; else return 0; } } if(ClanPlayers > 1 && pClanName[0]) return pClanName; else return 0; }
int CServer::TrySetClientName(int ClientID, const char *pName) { char aTrimmedName[64]; // trim the name str_copy(aTrimmedName, StrLtrim(pName), sizeof(aTrimmedName)); StrRtrim(aTrimmedName); dbg_msg("", "'%s' -> '%s'", pName, aTrimmedName); pName = aTrimmedName; // check for empty names if(!pName[0]) return -1; // make sure that two clients doesn't have the same name for(int i = 0; i < MAX_CLIENTS; i++) if(i != ClientID && m_aClients[i].m_State >= CClient::STATE_READY) { if(str_comp(pName, m_aClients[i].m_aName) == 0) return -1; } // set the client name str_copy(m_aClients[ClientID].m_aName, pName, MAX_NAME_LENGTH); return 0; }
void CGameContext::ConTimeout(IConsole::IResult *pResult, void *pUserData) { CGameContext *pSelf = (CGameContext *) pUserData; if (!CheckClientID(pResult->m_ClientID)) return; CPlayer *pPlayer = pSelf->m_apPlayers[pResult->m_ClientID]; if (!pPlayer) return; for(int i = 0; i < pSelf->Server()->MaxClients(); i++) { if (i == pResult->m_ClientID) continue; if (!pSelf->m_apPlayers[i]) continue; if (str_comp(pSelf->m_apPlayers[i]->m_TimeoutCode, pResult->GetString(0))) continue; if (((CServer *)pSelf->Server())->m_NetServer.SetTimedOut(i, pResult->m_ClientID)) { ((CServer *)pSelf->Server())->DelClientCallback(pResult->m_ClientID, "Timeout Protection used", ((CServer *)pSelf->Server())); ((CServer *)pSelf->Server())->m_aClients[i].m_Authed = CServer::AUTHED_NO; if (pSelf->m_apPlayers[i]->GetCharacter()) ((CGameContext *)(((CServer *)pSelf->Server())->GameServer()))->SendTuningParams(i, pSelf->m_apPlayers[i]->GetCharacter()->m_TuneZone); return; } } ((CServer *)pSelf->Server())->m_NetServer.SetTimeoutProtected(pResult->m_ClientID); str_copy(pPlayer->m_TimeoutCode, pResult->GetString(0), sizeof(pPlayer->m_TimeoutCode)); }
bool CServerBrowser::SortCompareName(int Index1, int Index2) const { CServerEntry *a = m_ppServerlist[Index1]; CServerEntry *b = m_ppServerlist[Index2]; // make sure empty entries are listed last return (a->m_GotInfo && b->m_GotInfo) || (!a->m_GotInfo && !b->m_GotInfo) ? str_comp(a->m_Info.m_aName, b->m_Info.m_aName) < 0 : a->m_GotInfo ? true : false; }
int CTeeFiles::TeeFileScan(const char *pName, int IsDir, int DirType, void *pUser) { CTeeFiles *pSelf = (CTeeFiles*)pUser; int l = str_length(pName); if(l < 4 || IsDir || str_comp(pName+l-4, ".tee") != 0) return 0; char aBuf[512]; char aFileName[41]; char aFilePath[512]; char aTeeEntry[NUM_TEE_ENTRIES][32]; str_format(aFilePath, sizeof(aFilePath), "xclient/teefiles/%s", pName); str_format(aFileName, sizeof(aFileName), pName); IOHANDLE File = pSelf->Storage()->OpenFile(aFilePath, IOFLAG_READ, IStorage::TYPE_SAVE); if(File) { char *pLine; CLineReader lr; lr.Init(File); for(int i = 0; i < NUM_TEE_ENTRIES; i++) { if(!(pLine = lr.Get())) { str_format(aBuf, sizeof(aBuf), "failed to read '%s' at line %d", aFileName, i); pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "console", aBuf); io_close(File); mem_zero(aTeeEntry[i], sizeof(aTeeEntry[i])); break; } str_format(aTeeEntry[i], sizeof(aTeeEntry[i]), pLine); } io_close(File); } else { str_format(aBuf, sizeof(aBuf), "failed to open '%s'", aFileName); pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "console", aBuf); return 1; } CTee Tee; str_format(Tee.m_aFilename, sizeof(Tee.m_aFilename), aFileName); str_format(Tee.m_aName, sizeof(Tee.m_aName), aTeeEntry[TEE_NAME]); str_format(Tee.m_aClan, sizeof(Tee.m_aClan), aTeeEntry[TEE_CLAN]); str_format(Tee.m_aSkin, sizeof(Tee.m_aSkin), aTeeEntry[TEE_SKIN]); Tee.m_UseCustomColor = str_toint(aTeeEntry[TEE_USECUSTOMCOLOR]); Tee.m_ColorBody = str_toint(aTeeEntry[TEE_COLORBODY]); Tee.m_ColorFeet = str_toint(aTeeEntry[TEE_COLORFEET]); Tee.m_Country = str_toint(aTeeEntry[TEE_COUNTRY]); pSelf->m_aTees.add(Tee); return 0; }
void CConsole::DeregisterTemp(const char *pName) { if(!m_pFirstCommand) return; CCommand *pRemoved = 0; // remove temp entry from command list if(m_pFirstCommand->m_Temp && str_comp(m_pFirstCommand->m_pName, pName) == 0) { pRemoved = m_pFirstCommand; m_pFirstCommand = m_pFirstCommand->m_pNext; } else { for(CCommand *pCommand = m_pFirstCommand; pCommand->m_pNext; pCommand = pCommand->m_pNext) if(pCommand->m_pNext->m_Temp && str_comp(pCommand->m_pNext->m_pName, pName) == 0) { pRemoved = pCommand->m_pNext; pCommand->m_pNext = pCommand->m_pNext->m_pNext; break; } } // add to recycle list if(pRemoved) { pRemoved->m_pNext = m_pRecycleList; m_pRecycleList = pRemoved; } unsigned hash = str_quickhash(pName); std::pair<hash_map_t::const_iterator, hash_map_t::const_iterator> range = commands.equal_range(hash); //hash_map_t::const_iterator it = commands.lower_bound(hash), end = commands.upper_bound(hash); hash_map_t::const_iterator it = range.first, end = range.second; while(it != end) { if(it->second->m_Temp && str_comp(it->second->m_pName, pName) == 0) it = commands.erase(it); else ++it; } }
void CGameContext::ConEyeEmote(IConsole::IResult *pResult, void *pUserData) { CGameContext *pSelf = (CGameContext *) pUserData; if (g_Config.m_SvEmotionalTees == -1) { pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "emote", "Server admin disabled emotes."); return; } if (!CheckClientID(pResult->m_ClientID)) return; CPlayer *pPlayer = pSelf->m_apPlayers[pResult->m_ClientID]; if (!pPlayer) return; if (pResult->NumArguments() == 0) { 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)"); } else { if(pPlayer->m_LastEyeEmote + g_Config.m_SvEyeEmoteChangeDelay * pSelf->Server()->TickSpeed() >= pSelf->Server()->Tick()) return; if (!str_comp(pResult->GetString(0), "angry")) pPlayer->m_DefEmote = EMOTE_ANGRY; else if (!str_comp(pResult->GetString(0), "blink")) pPlayer->m_DefEmote = EMOTE_BLINK; else if (!str_comp(pResult->GetString(0), "close")) pPlayer->m_DefEmote = EMOTE_BLINK; else if (!str_comp(pResult->GetString(0), "happy")) pPlayer->m_DefEmote = EMOTE_HAPPY; else if (!str_comp(pResult->GetString(0), "pain")) pPlayer->m_DefEmote = EMOTE_PAIN; else if (!str_comp(pResult->GetString(0), "surprise")) pPlayer->m_DefEmote = EMOTE_SURPRISE; else if (!str_comp(pResult->GetString(0), "normal")) pPlayer->m_DefEmote = EMOTE_NORMAL; else pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "emote", "Unknown emote... Say /emote"); int Duration = 1; if (pResult->NumArguments() > 1) Duration = pResult->GetInteger(1); pPlayer->m_DefEmoteReset = pSelf->Server()->Tick() + Duration * pSelf->Server()->TickSpeed(); pPlayer->m_LastEyeEmote = pSelf->Server()->Tick(); } }
int CSkins::FindSkinPart(int Part, const char *pName, bool AllowSpecialPart) { for(int i = 0; i < m_aaSkinParts[Part].size(); i++) { if(str_comp(m_aaSkinParts[Part][i].m_aName, pName) == 0 && ((m_aaSkinParts[Part][i].m_Flags&SKINFLAG_SPECIAL) == 0 || AllowSpecialPart)) return i; } return -1; }
void CGameContext::CheckPureTuning() { // might not be created yet during start up if(!m_pController) return; if( str_comp(m_pController->m_pGameType, "DM")==0 || str_comp(m_pController->m_pGameType, "TDM")==0 || str_comp(m_pController->m_pGameType, "CTF")==0) { CTuningParams p; if(mem_comp(&p, &m_Tuning, sizeof(p)) != 0) { Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server", "resetting tuning due to pure server"); m_Tuning = p; } } }
CInterfaceInfo *FindInterfaceInfo(const char *pName) { for(int i = 0; i < m_NumInterfaces; i++) { if(str_comp(pName, m_aInterfaces[i].m_aName) == 0) return &m_aInterfaces[i]; } return 0x0; }
int CTeeFiles::Find(const char *pName) { for(int i = 0; i < m_aTees.size(); i++) { if(str_comp(m_aTees[i].m_aFilename, pName) == 0) return i; } return -1; }