Hilfe beim ändern



  • Guten Tag,

    Ich bräuchte hilfe um etwas zu ändern. Ich bin noch ziemlicher Anfänger beim Programmieren mit C++. Hier erstmal der Code:

    #include "whitelist.hpp"
    #include <string.h>
    #include <sstream>
    #include <fstream>
    #include <list>
    #include <engine/e_config.h>
    #include <engine/e_server_interface.h>
    
    class wlist_item
    {
    	public:
    		wlist_item(std::string name, std::string ip)
    		{
    			this->wuser_name = name;
    			this->wuser_ip = ip;
    		}
    		std::string wuser_name;
    		std::string wuser_ip;
    		std::string name() { return this->wuser_name; }
    		std::string ip() { return this->wuser_ip; }
    };
    
    std::list<wlist_item> whitelist;
    
    void wlist_load()
    {
    	std::fstream f;
    	f.open(config.sv_whitelist, std::ios::in);
    	whitelist.clear();
    	while (!f.eof() && !f.fail())
    	{
    		std::string tmpname;
    		std::string tmpip;
    		std::getline(f, tmpname);
    		if(!f.eof() && tmpname!="")
    		{
    			std::getline(f, tmpip);
    			whitelist.push_back(*new wlist_item(tmpname, tmpip));
    		}
    	}
    	f.close();
    }
    
    void wlist_save()
    {
    	std::fstream f;
    	f.open(config.sv_whitelist, std::ios::out);
    	if(!f.fail())
    		for(std::list<wlist_item>::iterator i=whitelist.begin(); i!=whitelist.end(); i++)
    			f << i->name() << std::endl << i->ip() << std::endl;
    	f.close();
    }
    
    void wlist_show()
    {
    	dbg_msg("server", "Whitelisted users:");
    
    	for(std::list<wlist_item>::iterator i=whitelist.begin(); i!=whitelist.end(); i++)
    	{
    			dbg_msg("server", "User: %s", i->name().c_str());
    			dbg_msg("server", "IP..: %s", i->ip().c_str());
    			dbg_msg("server", "-------------");
    	}
    }
    
    void wlist_add(int id)
    {
    	if (!is_wlist(id))
    	{
    		whitelist.push_back(*new wlist_item(server_clientname(id), get_range(id)));
    		wlist_save();
    	}
    }
    
    void wlist_remove(const char *s)
    {
    	std::list<wlist_item> wtmp;
    
    	for(std::list<wlist_item>::iterator i=whitelist.begin(); i!=whitelist.end(); i++)
    		wtmp.push_back(*new wlist_item(i->name(), i->ip()));
    
    	whitelist.clear();
    
    	for(std::list<wlist_item>::iterator i=wtmp.begin(); i!=wtmp.end(); i++)
    		if (i->name() != s)
    			whitelist.push_back(*new wlist_item(i->name(), i->ip()));
    
    	wlist_save();
    }
    
    bool is_wlist(int id)
    {
    	for(std::list<wlist_item>::iterator i=whitelist.begin(); i!=whitelist.end(); i++)
    	{
    		if (i->name() == server_clientname(id) && i->ip() == get_range(id))
    			return true;
    	}
    	return false;
    }
    
    std::string get_range(int id)
    {
    	char ip_buf[128];
    	server_getip_range(id, ip_buf);
    	return ip_buf;
    }
    

    Also wenn dieser befehl:

    void wlist_save()
    {
    	std::fstream f;
    	f.open(config.sv_whitelist, std::ios::out);
    	if(!f.fail())
    		for(std::list<wlist_item>::iterator i=whitelist.begin(); i!=whitelist.end(); i++)
    			f << i->name() << std::endl << i->ip() << std::endl;
    	f.close();
    

    ausgeführt wird: speichert er im Spiel die aktuelle position.

    Mit dieser Funktion:

    void wlist_load()
    {
    	std::fstream f;
    	f.open(config.sv_whitelist, std::ios::in);
    	whitelist.clear();
    	while (!f.eof() && !f.fail())
    	{
    		std::string tmpname;
    		std::string tmpip;
    		std::getline(f, tmpname);
    		if(!f.eof() && tmpname!="")
    		{
    			std::getline(f, tmpip);
    			whitelist.push_back(*new wlist_item(tmpname, tmpip));
    		}
    	}
    	f.close();
    }
    

    wird die position wieder geladen.
    Im spiel muss man /load und /save eingeben. Ich möchte aber das man diesn Vorgang öfter machen kann also das ich z.B. /save 1 , /save 2 usw eingeben kann und dann auch /load 1 , /load 2 usw.

    Kann mier da einer helfen?



  • kann keienr helfen?


Anmelden zum Antworten