Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[TuT] Ban System ctrl+y na twój serwer!


Gość Maxikk

Rekomendowane odpowiedzi

Opublikowano

Witam w tym tutorialu pokaże jak zrobić system banowania na dni godziny z powodem :) tak więc zaczynamy...

 

 

 

Otwieramy source naszego silnika i szukamy pliku game.cpp następnie go edytujemy i szukamy tej linijki:

 

if (attackedPlayer->skullType == SKULL_NONE)
       {
           player->skullKills++;
           std::string justice(std::string("Warning! The murder of ") + attackedPlayer->getName() + " was not justified!");
           player->sendTextMessage(MSG_RED_INFO, justice.c_str());

 

pod linijka którą podałem wyżej wklejamy ten oto kod:

 

#ifdef HUCZU_BAN_SYSTEM
           if (player->skullKills >= g_config.BAN_UNJUST)
           {
               banPlayer(player, "Przekroczono limit zabijania graczy", "AccountBan", "2", 0);
           }else
#endif //HUCZU_BAN_SYSTEM

 

w tym samym pliku szukamy tej linijki:

 

creatureThrowRune(player, attackedCreature->pos, runeAreaSpell);
       player->addManaSpent(mana);
       player->mana -= mana;
   }
}

 

pod linijką podaną wyżej dodajemy:

 

#ifdef HUCZU_BAN_SYSTEM
void Game::banPlayer(Player *player, std::string reason, std::string action, std::string comment, unsigned char IPban)
{
   int bantime = 0;
   if(player){
       if(action == "BanNaDni")
       bantime = atoi(comment.c_str()) * 86400; // ban na dni : )

       if(action != "BanNaDni")
       bantime = atoi(comment.c_str()) * 3600/*86400*/; //ban na godziny 

       if(player->finalwarning == 1)
       player->deleted = 1;

       if(action == "Namelock/AccountBan+FinalWarning"){
       player->namelock = 1;
       player->finalwarning = 1;
       }
       if(action == "AccountBan+FinalWarning")
       player->finalwarning = 1;

       if(action == "Namelock")
       player->namelock = 1;

       if(reason == "Przekroczono limit zabijania graczy")
       bantime = g_config.getGlobalNumber("pkbandays",3) * 3600;

       player->banned = 1;
       player->comment = comment;
       player->reason = reason;
       player->action = action;
#ifdef USING_VISUAL_2005
       player->banstart = _time32(NULL);
#else
       player->banstart = std::time(NULL);
#endif
       player->banend = player->banstart + bantime;
       time_t endBan = player->banend;
       player->banrealtime = ctime(&endBan);
       if(IPban != 0){
           std::pair<unsigned long, unsigned long> IpNetMask;
IpNetMask.first = player->lastip;
IpNetMask.second = 0xFFFFFFFF;
if(IpNetMask.first > 0)
   bannedIPs.push_back(IpNetMask);
       }
       std::stringstream ban;
       ban << "Zostales zbanowany za " << reason << "!";
       player->sendTextMessage(MSG_INFO, ban.str().c_str());
       player->kickPlayer();
    }
}
#endif //HUCZU_BAN_SYSTEM

 

Zapisujemy oraz zamykamy plik i przechodzimy do pliku game.h w pliku game.h szukamy tej o to linijki:

 

class Game {
public:
   Game();
 ~Game();

 

pod linijką którą podałem wyżej wklejamy tą:

 

#ifdef HUCZU_BAN_SYSTEM    
   void banPlayer(Player *player, std::string reason, std::string action, std::string comment, unsigned char IPban);
#endif //HUCZU_BAN_SYSTEM

 

Zapisujamy oraz zamykamy plik i przechodzimy do pliku ioplayerxml.cpp w pliku ioplayerxml.cpp szukamy tej o to linijki:

 

nodeValue = (char*)xmlGetProp(p, (const xmlChar *) "z");
               if(nodeValue) {
                   player->pos.z=atoi(nodeValue);
                   xmlFreeOTSERV(nodeValue);
               }
               else
                   isLoaded = false;
           }

 

Pod linijką podaną wyżej wklejamy tą:

 

#ifdef HUCZU_BAN_SYSTEM              
      else if(str=="ban")
{
   nodeValue = (char*)xmlGetProp(p, (const xmlChar *) "banned");
   if(nodeValue) {
    player->banned=atoi(nodeValue);
    xmlFreeOTSERV(nodeValue);
   }
   else
    isLoaded = false;

   nodeValue = (char*)xmlGetProp(p, (const xmlChar *) "banstart");
   if(nodeValue) {
    player->banstart=atoi(nodeValue);
    xmlFreeOTSERV(nodeValue);
   }
   else
    isLoaded = false;

   nodeValue = (char*)xmlGetProp(p, (const xmlChar *) "banend");
   if(nodeValue) {
    player->banend=atoi(nodeValue);
    xmlFreeOTSERV(nodeValue);
   }
   else
    isLoaded = false;

   nodeValue = (char*)xmlGetProp(p, (const xmlChar *) "comment");
   if(nodeValue) {
    player->comment=nodeValue;
    xmlFreeOTSERV(nodeValue);
   }
   else
    isLoaded = false;

   nodeValue = (char*)xmlGetProp(p, (const xmlChar *) "reason");
   if(nodeValue) {
    player->reason=nodeValue;
    xmlFreeOTSERV(nodeValue);
   }
   else
    isLoaded = false;

   nodeValue = (char*)xmlGetProp(p, (const xmlChar *) "action");
   if(nodeValue) {
    player->action=nodeValue;
    xmlFreeOTSERV(nodeValue);
   }
   else
    isLoaded = false;

   nodeValue = (char*)xmlGetProp(p, (const xmlChar *) "deleted");
   if(nodeValue) {
    player->deleted=atoi(nodeValue);
    xmlFreeOTSERV(nodeValue);
   }
   else
    isLoaded = false;

   nodeValue = (char*)xmlGetProp(p, (const xmlChar *) "finalwarning");
   if(nodeValue) {
    player->finalwarning=atoi(nodeValue);
    xmlFreeOTSERV(nodeValue);
   }
   else
    isLoaded = false;

   nodeValue = (char*)xmlGetProp(p, (const xmlChar *) "banrealtime");
   if(nodeValue) {
    player->banrealtime=nodeValue;
    xmlFreeOTSERV(nodeValue);
   }
   else
    isLoaded = false;

      nodeValue = (char*)xmlGetProp(root, (const xmlChar *) "namelock");
       if(nodeValue) {
           player->namelock=atoi(nodeValue);
           xmlFreeOTSERV(nodeValue);
       }
       else
           isLoaded = false;
}
#endif //HUCZU_BAN_SYSTEM

 

w tym samym pliku szukamy tego tekstu:

 

pn = xmlNewNode(NULL,(const xmlChar*)"mana");
   sb << player->mana;      xmlSetProp(pn, (const xmlChar*) "now", (const xmlChar*)sb.str().c_str());        sb.str("");
   sb << player->manamax;   xmlSetProp(pn, (const xmlChar*) "max", (const xmlChar*)sb.str().c_str());        sb.str("");
   sb << player->manaspent; xmlSetProp(pn, (const xmlChar*) "spent", (const xmlChar*)sb.str().c_str());      sb.str("");
   xmlAddChild(root, pn);

 

i pod tym tekstem dodajemy to:

 

#ifdef HUCZU_BAN_SYSTEM      
   pn = xmlNewNode(NULL,(const xmlChar*)"ban");
   sb << player->banned;     xmlSetProp(pn, (const xmlChar*) "banned", (const xmlChar*)sb.str().c_str());    sb.str("");
   sb << player->banstart;    xmlSetProp(pn, (const xmlChar*) "banstart", (const xmlChar*)sb.str().c_str()); sb.str("");
   sb << player->banend;     xmlSetProp(pn, (const xmlChar*) "banend", (const xmlChar*)sb.str().c_str());    sb.str("");
   sb << player->comment;     xmlSetProp(pn, (const xmlChar*) "comment", (const xmlChar*)sb.str().c_str()); sb.str("");
   sb << player->reason;     xmlSetProp(pn, (const xmlChar*) "reason", (const xmlChar*)sb.str().c_str());    sb.str("");
   sb << player->action;     xmlSetProp(pn, (const xmlChar*) "action", (const xmlChar*)sb.str().c_str());    sb.str("");
   sb << player->deleted;     xmlSetProp(pn, (const xmlChar*) "deleted", (const xmlChar*)sb.str().c_str());    sb.str("");
   sb << player->finalwarning;     xmlSetProp(pn, (const xmlChar*) "finalwarning", (const xmlChar*)sb.str().c_str());    sb.str("");
   sb << player->banrealtime;     xmlSetProp(pn, (const xmlChar*) "banrealtime", (const xmlChar*)sb.str().c_str());    sb.str("");
   sb << player->namelock;           xmlSetProp(root, (const xmlChar*) "namelock", (const xmlChar*)sb.str().c_str());  sb.str("");
   xmlAddChild(root, pn);
#endif //HUCZU_BAN_SYSTEM

 

Zapisujemy oraz zamykamy plik i przechodzimy do pliku otserv.cpp w pliku otserv.cpp szukamy tego tekstu:

 

if(playerexist && !g_config.getGlobalNumber("allowclones", 0)){
                           #ifdef __DEBUG_PLAYERS__
                           std::cout << "reject player... (already logged in)" << std::endl;
                           #endif
                           msg.Reset();
                           msg.AddByte(0x14);
                           msg.AddString("You are already logged in.");
                           msg.WriteToSocket(s);
                       }

 

pot powyższym tekstem dodajemy ten oto tekst:

 

#ifdef HUCZU_BAN_SYSTEM
                         long long timeNow = std::time(NULL); // VISUAL
                       else if (player->banned && timeNow < player->banend){
                           msg.Reset();
                           msg.AddByte(0x14);
                           time_t endBan = player->banend;
                           std::stringstream txt;
                           if(player->deleted == 0) // checks if not deleted
                           txt << "Twoja postac zostala zablokowana! Powod: " << player->reason << ".\nTwoj ban zostanie zdjety " << ctime(&endBan) << "Sprobuj zalogowac sie po tej dacie.";
                           if(player->namelock != 0) // gdy namelock
                           txt << "Dostales rowniez namelocka. Zmien swoj nick na stronie.";
                           if(player->deleted != 0)// deleted == 1
                           txt << "Twoja postac zostala usunieta z serwera!\nNigdy nie zostanie juz odbanowana!";
                            msg.AddString(txt.str().c_str());
                            msg.WriteToSocket(s);
                        }
                        else if(player->banned && timeNow > player->banend && player->deleted == 0){  
                           player->banned = 0;
                           player->comment = "";
                           player->reason = "";
                           player->action = "";
                           IOPlayer::instance()->savePlayer(player);
                           msg.Reset();
                           msg.AddByte(0x14);
                           msg.AddString("Zostales odbanowany. Mozesz sie teraz zalogowac.");
                           msg.WriteToSocket(s);
                       }
                       else if(player->namelock != 0){
                       msg.Reset();
                       msg.AddByte(0x14);
                       msg.AddString("Posiadasz namelocka. Zmien swoj nick na stronie.");
                       msg.WriteToSocket(s);
                       }
#endif //HUCZU_BAN_SYSTEM

 

Zapisujemy i zamykamy plik i przechodzimy do pliku player.cpp w pliku player.cpp szukamy tej o to linijki:

 

guildId    = 0;

 

pod linijką podaną wyżej dodajemy:

 

#ifdef HUCZU_BAN_SYSTEM
   banned     = 0;  
   banstart = 0;  
   banend     = 0;  
   comment    = "";
   reason     = "";
   action     = "";
   deleted = 0;
   finalwarning = 0;
   banrealtime = "";
   namelock = 0;
#endif //HUCZU_BAN_SYSTEM

 

Zapisujemy i zamykamy następnie przechodzimy do pliku player.h i w nim szukamy tej o to linijki:

 

void kickPlayer();

 

pod linijką podaną wyżej wklejamy to:

 

#ifdef HUCZU_BAN_SYSTEM      
   int banned , banstart, banend, deleted, finalwarning;
   std::string comment, reason, action, banrealtime;
   unsigned char namelock;
#endif //HUCZU_BAN_SYSTEM

 

Zapisujemy i zamykamy następnie przechodzimy do pliku protocol76.cpp i w nim szukamy tej linijki:

 

case 0x99: // close Channel
       parseCloseChannel(msg);
       break;

 

pod linijką podaną wyżej dodajemy to:

 

#ifdef HUCZU_BAN_SYSTEM    
   case 0xe7:
       parseGM(msg);
       break;
#endif //HUCZU_BAN_SYSTEM

 

Następnie zamień to:

 

/*msg.AddByte(0x00);//TODO?. GM actions
    msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);
    msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);
    msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);
    msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);
    msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);
    msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);
msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);
    msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);
*/

 

na to:

 

#ifdef HUCZU_BAN_SYSTEM
std::stringstream myIP2;
           std::string myIP;
           unsigned char ip[4];
           *(unsigned long*)&ip = player->getIP();
           myIP2 << (unsigned int)ip[0] << "." << (unsigned int)ip[1] <<
            "." << (unsigned int)ip[2] << "." << (unsigned int)ip[3];
           myIP = myIP2.str();
if(add_player->access >= 1){
    msg.AddByte(0x0B);
    msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);
    msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);
    msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);
    msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);
    msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);
    msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);
msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);
    msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);msg.AddByte(0xFF);
       }
#endif //HUCZU_BAN_SYSTEM

 

na samym końcu protocol76.cpp dodaj:

 

#ifdef HUCZU_BAN_SYSTEM  
void Protocol76::parseGM(NetworkMessage &msg)
{
std::string name2 = msg.GetString();
int reason = msg.GetByte();
std::string comment = msg.GetString();
int action = msg.GetByte();
unsigned char IPban = msg.GetByte();
Creature *c = game->getCreatureByName(name2.c_str());
Player *bannedPlayer = dynamic_cast<Player*>(c);
if(player && bannedPlayer){
std::stringstream myIP2;
std::string myIP, Reason, Action;
unsigned char ip[4];
*(unsigned long*)&ip = bannedPlayer->getIP();
myIP2 << (unsigned int)ip[0] << "." << (unsigned int)ip[1] <<
    "." << (unsigned int)ip[2] << "." << (unsigned int)ip[3];
myIP = myIP2.str();
    if(player->access > bannedPlayer->access || myIP != "localhost"){
        if(comment.size() > 0 && comment.size() < 9999){
           switch(reason){
            case 0: Reason = "Spamowanie"; break;
            case 1: Reason = "Destruktywne zachowanie"; break;
            case 2: Reason = "Pisanie niezgodnie z tematem na kanalach"; break;
            case 3: Reason = "Hackowanie"; break;
            case 4: Reason = "Handel/Wymiana Postaciami"; break;
            case 5: Reason = "Reklama nie zwiazana z serwerem"; break;
            case 6: Reason = "Wykorzystywanie bledow serwera"; break;
            case 7: Reason = "Uzywanie Macro/Botow"; break;
            case 8: Reason = "Podawanie sie za czlonka ekipy"; break;
            case 9: Reason = "Multi-clienting"; break;
            default: Reason = "Zlamanie Regulaminu"; break;
           }
           switch(action){
            case 0: Action = "BanNaDni"; break;
            case 1: Action = "Namelock"; break;
            case 2: Action = "AccountBan"; break;
            case 3: Action = "Namelock/AccountBan"; break;
            case 4: Action = "AccountBan+FinalWarning"; break;
            case 5: Action = "Namelock/AccountBan+FinalWarning"; break;
            default: Action = "Nieznana akcja"; break;
           }
           std::stringstream Yourtxt;
           Yourtxt << name2 << " zostal zbanowany za " << Reason << ".";
           if(IPban != 1)
            Yourtxt << " Otrzymal tez bana na IP.";
           game->
           banPlayer(bannedPlayer, Reason, Action, comment,IPban);
           for(AutoList<Player>::listiterator it = Player::listPlayer.list.begin(); it != Player::listPlayer.list.end(); ++it){
                                              Player* player = dynamic_cast<Player*>(it->second);
                                              if(player && player->access > 0)
                                              (*it).second->sendTextMessage(MSG_RED_INFO, Yourtxt.str().c_str());
                                              }
   char buf[64];
   time_t ticks = time(0);
#ifdef USING_VISUAL_2005
       tm now;
       localtime_s(&now, &ticks);
       strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M", &now);
#else
       strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M", localtime(&ticks));
#endif //USING_VISUAL_2005
   std::ofstream out("data/logs/bans.xml", std::ios::app);
   out << "<ban " << "czas=\"" << buf << "\" banujacy=\"" << player->getName() << "\" nick_zbanowanego=\""  << bannedPlayer->getName() << "\" powod=\"" << Reason << "\" akcja=\"" << Action << "\" czas_bana=\"" << comment << "\"/>" << std::endl;
   out.close();
        }else
           player->sendTextMessage(MSG_RED_INFO, "W comment wpisz ilosc dni.");
    }else
        player->sendTextMessage(MSG_RED_INFO, "Wybacz ale tej osoby nie zbanujesz bo jest wyzsza ranga.");
}else
    player->sendTextMessage(MSG_RED_INFO, "Postac o tym imieniu nie jest zalogowana.");
}
#endif //HUCZU_BAN_SYSTEM

 

oraz na samym początku dodaj:

 

#include <fstream>

 

Zapisujemy i zamykamy plik następnie przechodzimy do pliku protocol76.h i pod tym tekstem:

 

void parseUseItem(NetworkMessage &msg);

 

dodaj:

 

[/code]#ifdef HUCZU_BAN_SYSTEM

void parseGM(NetworkMessage &msg);

unsigned char IPban;

#endif //HUCZU_BAN_SYSTEM

[/code]

 

Następnie wciśnij ALT+P przejdź w zakładkę parametry i dodaj to:

 

-DHUCZU_BAN_SYSTEM

 

 

System Napisał Huczu

Udostępnił: Maxikk

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...