[c++] Cod4 rcon



  • hi könnt mir jemand sagen wieso des prog mit der funktion probs hat und abstürzt

    void ParsePLAYERDATA(string DATA) {
    
    	ListView_DeleteAllItems(hWndLV1);
    	playerL.clear();
    	string NAME;
    	string SCORE;
    	string PING;
    	string GUID;
    
    	string::size_type p1;
    	string::size_type p2;
    	string tmp;
    	string tmp5;
    	string buf;
    	string trash;
    
    	tmp5 = DATA;
    
    	p2 = tmp5.find_first_of("\n", 0);
    	trash += tmp5.substr(0, p2);
    
    	tmp5 = tmp5.substr(p2 + 1, tmp5.length() - (p2 + 1));
    
    	p2 = tmp5.find_first_of("\n", 0);
    	trash += tmp5.substr(0, p2);
    
    	tmp5 = tmp5.substr(p2 + 1, tmp5.length() - (p2 + 1));
    
    	p2 = tmp5.find_first_of('\n', 0);
    
    	trash += tmp5.substr(1, p2 - 2);
    
    	tmp5 = tmp5.substr(p2 + 1, tmp5.length() - (p2 + 1));
    
    	tmp = tmp5;
    
    	trash = "";
    
    	while (1) {
    
    		string daten;
    
    		p1 = tmp.find_first_of("\n", 0);
    
    		if (p1 == string::npos) {
    			break;
    		}
    
    		daten += tmp.substr(0, p1);
    
    		tmp = tmp.substr(p1 + 1, tmp.length() - (p1 + 1));
    
    		SCORE += daten.substr(4, 5);
    		PING += daten.substr(11, 4);
    		GUID += daten.substr(15, 32);
    		NAME += daten.substr(48, 15);
    
    		playerL.push_back(new Player(NAME.c_str(), SCORE.c_str(), PING.c_str(),
    				GUID.c_str()));
    
    		NAME.clear();
    		SCORE.clear();
    		PING.clear();
    		GUID.clear();
    		daten.clear();
    
    	}
    
    	char szText[150];
    	int size2;
    	size2 = playerL.size();
    
    	for (int i = 0; i < size2; i++) {
    		LVITEM lvi;
    		memset(&lvi, 0, sizeof(lvi));
    		lvi.mask = LVIF_TEXT;
    		lvi.cchTextMax = 300;
    		lvi.iItem = i;
    		lvi.iSubItem = 0;
    		string name;
    		name += playerL.at(i)->getName();
    		sprintf(szText, "%s", name.c_str());
    
    		lvi.pszText = szText;
    		ListView_InsertItem(hWndLV1,(LPARAM)&lvi);
    
    		lvi.iSubItem = 1;
    		string score;
    		score += playerL.at(i)->getScore();
    		sprintf(szText, "%s", score.c_str());
    		lvi.pszText = szText;
    		ListView_SetItem(hWndLV1,(LPARAM)&lvi);
    
    		lvi.iSubItem = 2;
    		string ping;
    		ping += playerL.at(i)->getPing();
    		sprintf(szText, "%s", ping.c_str());
    		lvi.pszText = szText;
    		ListView_SetItem(hWndLV1,(LPARAM)&lvi);
    
    		lvi.iSubItem = 3;
    		string guid;
    		guid += playerL.at(i)->getGuid();
    		sprintf(szText, "%s", guid.c_str());
    		lvi.pszText = szText;
    		ListView_SetItem(hWndLV1,(LPARAM)&lvi);
    	}
    }
    

    thx



  • hab für den eintrag nur wenig zeit gehabt wär net wenn ir jemand helfen will dann schick ich ihm mal den ganzen source code

    thx



  • Was soll das Programm den überhaupt machen ?



  • dDas Programm ruft server informationen ab z.B. über spieler etc..
    Man kann damit player kicken bannen map changen etc,,
    nur ist mein c+++ (is ja nur hobby) eher ***** schlecht
    kannste mir mal diene e-mail sagen dann würd ichs dir ma schicken?



  • Was hast du denn schon getan (damit wir nicht alles doppelt machen)?



  • Sobald der hierhin kommt bleibt er in der Schleife

    while (1) { 
    
            string daten; 
    
            p1 = tmp.find_first_of("\n", 0); 
    
            if (p1 == string::npos) { 
                break; 
            } 
    
            daten += tmp.substr(0, p1); 
    
            tmp = tmp.substr(p1 + 1, tmp.length() - (p1 + 1)); 
    
            SCORE += daten.substr(4, 5); 
            PING += daten.substr(11, 4); 
            GUID += daten.substr(15, 32); 
            NAME += daten.substr(48, 15); 
    
            playerL.push_back(new Player(NAME.c_str(), SCORE.c_str(), PING.c_str(), 
                    GUID.c_str())); 
    
            NAME.clear(); 
            SCORE.clear(); 
            PING.clear(); 
            GUID.clear(); 
            daten.clear(); 
    
        }
    

    Hast du z.b. mal mit einem Debugger gekuckt ob der Überhaupt diesen Code verwendet O_o

    char szText[150]; 
        int size2; 
        size2 = playerL.size(); 
    
        for (int i = 0; i < size2; i++) { 
            LVITEM lvi; 
            memset(&lvi, 0, sizeof(lvi)); 
            lvi.mask = LVIF_TEXT; 
            lvi.cchTextMax = 300; 
            lvi.iItem = i; 
            lvi.iSubItem = 0; 
            string name; 
            name += playerL.at(i)->getName(); 
            sprintf(szText, "%s", name.c_str()); 
    
            lvi.pszText = szText; 
            ListView_InsertItem(hWndLV1,(LPARAM)&lvi); 
    
            lvi.iSubItem = 1; 
            string score; 
            score += playerL.at(i)->getScore(); 
            sprintf(szText, "%s", score.c_str()); 
            lvi.pszText = szText; 
            ListView_SetItem(hWndLV1,(LPARAM)&lvi); 
    
            lvi.iSubItem = 2; 
            string ping; 
            ping += playerL.at(i)->getPing(); 
            sprintf(szText, "%s", ping.c_str()); 
            lvi.pszText = szText; 
            ListView_SetItem(hWndLV1,(LPARAM)&lvi); 
    
            lvi.iSubItem = 3; 
            string guid; 
            guid += playerL.at(i)->getGuid(); 
            sprintf(szText, "%s", guid.c_str()); 
            lvi.pszText = szText; 
            ListView_SetItem(hWndLV1,(LPARAM)&lvi); 
        }
    


  • so arbeit is rum ^^
    wenn cih daheim bin schilder ich ma genau was da net ganz einbahnfrei läuft

    thx (das ihr wenigstens geantwortet habt.. bei meinem beknackten eintrag) 🙂



  • ja verwendet er ich geb dir ma den source code mit .exe ja?
    dann kannste ma sehen ich hab auch eine test funktion eingebaut normalerweise muss er ja erstma die daten vom server empfangen und mit der test funtktion liest er se aus na .txt und da gehts einbahnfrei

    bis gleich ^^ (wenn die bahn net wieder zu spät kommt)



  • Verwende mal weniger Namen wie tmp..1..2..3..bla. Mehr Schreiben, aber mehr Übersicht.
    Und sag mal konkret, was gemacht werden soll.



  • so erstma gescheit regestriert..
    Erstma thx das ihr mir helfen wollt ich würd gerne weiter erklären muss aber erstma weg morgen dann wieder
    UND danke 🙂



  • Das ist ein c++ Problem, das hat mit Winapi nix zu tun, der Teil für den Listview schein in Ordnung zu sein. Bis auf:

    lvi.cchTextMax = 300;
    

    das brauchst du nur, wenn du Listviewiteminformationen ausliest, damit gibst du an wie groß der Buffer ist auf den

    lvi.pszText
    

    zeigt

    Ich denke du hast dir den Querybuffer auch mal in eine Datei geschrieben, um zu sehen wie der String aufgebaut ist. Also beim Q3 Serverquery wird am Schluß nochmal ein "\n" angehängt, also eine Leerzeile praktisch. Da ich keinen Schimmer von c++ habe kann ich aber auch nicht sagen ob hier dein Problem liegt.

    @help0r
    er will einen String parsen und nach Name, Score, Ping, etc zerlegen und mit den Daten einen Listview aktualisieren. (einfügen sieht anderst aus, falls das das Ziel ist)



  • ^^ THY an alle...
    Mein Problem hat sich erledigt ich hab den string einfach falsch zerlegt und es kam auch nicht der ganze string an.

    Trotzdem nochma thx

    PS: nur für den fall das es jemanden interessiert was zerlegt werden sollte:

    ÿÿÿÿprint
    map: mp_pipeline
    num score ping guid name lastmsg address qport rate
    --- ----- ---- -------------------------------- --------------- ------- --------------------- ----- -----
    0 3 93 727fcaba55b4f67b68a64191053438e8 ^3CoDHQ 1JD7 50 24.93.10.111:-3200 -4994 25000
    1 17 85 gjhhg39048ghdhngujhogugh9034zhg7 WalKing Dead 50 24.93.10.111:-3200 -4994 25000
    2 10 65 jdgh93h3uo4g340gh934hg934hg4h9hg |GO|Hunter 50 24.93.10.111:-3200 -4994 25000

    so ungefähr


Anmelden zum Antworten