Register for your free account! | Forgot your password?

Go Back   elitepvpers > Popular Games > Metin2 > Metin2 Private Server > Metin2 PServer Guides & Strategies
You last visited: Today at 18:39

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Python] Whisperblock (Datenbankspeicherung)

Discussion on [Python] Whisperblock (Datenbankspeicherung) within the Metin2 PServer Guides & Strategies forum part of the Metin2 Private Server category.

Reply
 
Old   #1


 
elite*gold: 0
Join Date: Feb 2010
Posts: 7,221
Received Thanks: 6,758
[Python] Whisperblock (Datenbankspeicherung)

Heya,
da ich seit Tagen nun damit gekämpft habe, ob ich das überhaupt releasen sollte beziehungsweise ein Tutorial drüber machen sollte, habe ich mich nun doch dafür entschlossen.

In diesem Tutorial oder Release, seht es wie ihr wollt, geht es nicht einfach darum etwas public zu machen, was dann jeder benutzen kann wie er will, es geht hier um eine wirkliche Lehrstunde, in der ihr ein wenig mit PHP, sowie urllib und Python in Verbindungen kommt, wen es nicht interessiert kann sich auch einfach den Source rauskopieren ohne alles zu lesen.

Was genau geht hier nun vor sich?
- User entblocken / blocken
- Geblockte User in Datenbank
- Benachrichtigung des Blocks


Sourcecodes (py):
- root -> uiwhisper.py

Zu erst einmal löscht ihr alles aus der Datei raus was nach "self.ignoreButton.Hide()" aussieht, einfach rauslöschen, dadurch wird der Button dann schonmal angezeigt.

Nun geht ihr in die Methode "IgnoreTarget" und löscht den gesamten Inhalt der Methode und ersetzt ihn mit meinem.

Code:
        player_name = player.GetName() # Spielernamen auslesen
        ignored_player_name = self.targetName # Namen des Chatpartners auslesen
        read = urllib.urlopen("http://future3.eu/whisper_block.php?do=select&player_name=" + player_name + "").read() # Via urllib und meiner PHP Datei geblockte Spieler auslesen
        if read.find(ignored_player_name) == -1: # Wenn Spieler nicht gefunden dann "Block"-Funktion ausführen
            block = urllib.urlopen("http://future3.eu/whisper_block.php?do=add&player_name=" + player_name + "&ignored_player_name=" + ignored_player_name + "") # Via urllibg und meiner PHP Datei einen Spieler blocken und in die Datenabank eintragen
            chat.AppendChat(chat.CHAT_TYPE_INFO, "Der Spieler " + ignored_player_name + " wurde blockiert, du wirst von ihm keine Nachrichten mehr empfangen!") # Infonachricht, dass du jemanden geblockt hast
            net.SendWhisperPacket(ignored_player_name, "Der Spieler " + player_name + " hat dich soeben geblockt!") # PN an den geblockten User, dass er geblockt wurde
            self.ignoreButton.SetText("Entblocken") # Button Text zu "Entblocken" ändern
        else: # Wenn Spieler gefunden die "Entblock"-Funktion ausführen
            unblock = urllib.urlopen("http://future3.eu/whisper_block.php?do=remove&player_name=" + player_name + "&ignored_player_name=" + ignored_player_name + "") # Via urllibg und meiner PHP Datei einen Spieler entblocken und aus der Datenbank löschen
            chat.AppendChat(chat.CHAT_TYPE_INFO, "Der Spieler " + ignored_player_name + " wurde entblockt, er kann dir nun wieder Nachrichten schicken!") # Infonachricht, dass du jemanden entblockt hast
            net.SendWhisperPacket(ignored_player_name, "Der Spieler " + player_name + " hat dich soeben entblockt!") # PN an den entblockten User, dass er entblockt wurde
            self.ignoreButton.SetText("Blocken") # Button Text zu "Blocken" ändern
Das war's auch schon soweit in der "uiwhisper.py"-Datei! Nun geht's weiter mit der "game.py", ebenfalls in der root Datei in die Methode "OnRecvWhisper" um abzufragen, ob du eine Nachricht von einem geblockten Spieler empfängst. Löscht einfach den gesamten Inhalt der Funktion und fügt meinen ein.

Code:
        if mode == chat.WHISPER_TYPE_GM: # Wenn Nachricht von einem GM kommt dann trotzdem empfangen, egal ob geblockt oder nicht
            self.interface.RegisterGameMasterName(name)
            chat.AppendWhisper(mode, name, line)
            self.interface.RecvWhisper(name)
        else: # Wenn Nachricht von einem User
            player_name = player.GetName() # Eigenen Spielernamen auslesen
            read = urllib.urlopen("http://future3.eu/whisper_block.php?do=select&player_name=" + player_name + "").read() # Geblockten Spieler via urllib + PHP auslesen
            if read.find(name) != -1: # Wenn Spieler in der Liste steht und er geblockt ist
                chat.AppendChat(chat.CHAT_TYPE_INFO, "Der Spieler " + name + " hat versucht dich zu kontaktieren.") # Infonachricht, dass du kontaktiert wurdest
                net.SendWhisperPacket(name, "Du kannst diesem Spieler keine Nachrichten senden, da er dich blockiert hat.") # Private Nachricht an den geblockten Spieler, dass er geblockt ist
            else: # Wenn Spieler nicht drin steht und daher nicht geblockt ist Nachricht empfangen
                chat.AppendWhisper(mode, name, line)
                self.interface.RecvWhisper(name)
Das war's eigentlich auch schon Clientside, natürlich solltet ihr die urllib.pyc eingefügt und überall importiert haben. Nun geht's weiter mit dem PHP Teil, bitte vergesst nicht eure Links zu ändern, keine Angst, "future3.eu" ist keine Serverdomain, zumindest ist kein Server darauf zu finden.

Sourcecodes (php):
- whisper_block.php

Nun geht's um die PHP Datei, in welcher alles geregelt wird, das blocken, auslesen und entblocken, natürlich auch hier wieder alles kommentiert.

Code:
<?PHP
    if ($_GET['do'] == "select") # Wenn GET Parameter "Select" ist zum auslesen
    {
        if (!$_GET['player_name'] == "") # Solange der Spielername Parameter nicht leer ist
        {
            $player_name = $_GET['player_name']; # GET Parameter des Spielers auslesen
            mysql_connect("ip", "user", "pw); # Datenbankverbindung herstellen
            mysql_select_db("urllib"); # Datenbank auswählen
            $blocked_players = mysql_query("SELECT ignored_player_name FROM whisper_block WHERE player_name = '$player_name'"); # Alle ignorierten Spieler des Users auslesen
            while ($row = mysql_fetch_object($blocked_players)) # Solange User gefunden werden
            {
                echo "$row->ignored_player_name <br>"; # Spieler mit Zeilenumbruch ausgeben
            }
            mysql_free_result($blocked_players); # Ergebnis wieder freigeben
        }
    }
    elseif ($_GET['do'] == "remove") # Wenn GET Parameter "remove" ist zum löschen
    {
        if (!$_GET['player_name'] == "") # Solange der Spielername Parameter nicht leer ist
        {
            if (!$_GET['ignored_player_name'] == "") # Solange der Spielername des ignorierten nicht leer ist
            {
                $player_name = $_GET['player_name'];   # GET Parameter des Spielers auslesen
                $ignored_player_name = $_GET['ignored_player_name'];  # GET Parameter des ignorierten Spielers auslesen
            mysql_connect("ip", "user", "pw); # Datenbankverbindung herstellen
                mysql_select_db("urllib"); # Datenbank auswählen
                mysql_query("DELETE FROM whisper_block WHERE player_name = '$player_name' AND ignored_player_name = '$ignored_player_name'"); # Spieler aus Datenbank löschen
            }
        }
    }
    elseif ($_GET['do'] == "add") # Wenn GET Parameter "add" ist zum einfügen
    {
        if (!$_GET['player_name'] == "") # Solange der Spielername Parameter nicht leer ist
        {
            if (!$_GET['ignored_player_name'] == "") # Solange der Spielername des ignorierten nicht leer ist
            {
                $player_name = $_GET['player_name']; # GET Parameter des Spielers auslesen
                $ignored_player_name = $_GET['ignored_player_name'];   # GET Parameter des ignorierten Spielers auslesen
            mysql_connect("ip", "user", "pw); # Datenbankverbindung herstellen
                mysql_select_db("urllib"); # Datenbank auswählen
                mysql_query("INSERT INTO whisper_block (player_name, ignored_player_name) VALUES ('$player_name','$ignored_player_name')"); # Spieler in die Datenbank einfügen
            }
        }
    }
?>
So, das war's nun auch im PHP Teil, das einzige, was ihr nun noch braucht ist die Datenbank selbst und natürlich auch hier eure MySQL Daten eintragen! ;-)

Sourcecodes (MySQL):
- urllib.whisper_block.myd

Code:
CREATE TABLE `whisper_block` (
  `player_name` varchar(16) NOT NULL,
  `ignored_player_name` varchar(16) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Ich denke mal, dass dieses "Tutorial" recht einfach zu verstehen ist und für jeden machbar sein sollte, ausbessern könnt ihr es natürlich wie ihr wollt, dieses Feature wird als erstes auf Future3 zu sehen sein damit auch jeder weiß, von wem es ist :>

Wünsche euch viel Spaß damit,
Best Regards

-> SoNiice
#SoNiice is offline  
Thanks
14 Users
Old 11/27/2012, 02:39   #2
 
elite*gold: 0
Join Date: Aug 2012
Posts: 52
Received Thanks: 13
Wie soll es auf Future3 zum ersten mal zu sehen sein wenn Future3 nicht online ist, das Feature aber releasd? Wenn es jetzt jemand einbaut, ist es ja wo anders zuerst...oder verstehe ich da was falsch?

Aber es ist ein sehr gutes Release und sehr gut erklärt. Danke

Mfg.
Shazey is offline  
Old 11/27/2012, 03:27   #3
 
ebert.tonna's Avatar
 
elite*gold: 50
Join Date: Nov 2009
Posts: 865
Received Thanks: 1,229
Quote:
Quote:
natürlich solltet ihr die urllib.pyc eingefügt und überall importiert haben
Das mit der urllib musste mal genau erklären weil das nicht nur mit copy und paste zumachen ist, da fehlen auch ja noch datein die auch noch in die root reinmüssen, sonst erkennt der ja die funktion nicht.
ebert.tonna is offline  
Old 11/27/2012, 03:59   #4
 
elite*gold: 200
Join Date: Oct 2012
Posts: 318
Received Thanks: 594
Seh ich das falsch, oder kann man einfach über den aufruf der .php mit gewissen Parametern einfach andere Playernamen eintragen und so die Chats für andere Spieler blocken?

Oder sich selbst wieder entblocken?
Code:
h t t p ://future3.eu/whisper_block.php?do=remove&player_name=SoNiice&ignored_player_name=Profizocker94
Edit: Was ist wenn die .php gedowned wird? Ist dann kein ordentliches Whispern mehr möglich?
Prσfizσckєr94 is offline  
Thanks
2 Users
Old 11/27/2012, 06:23   #5
 
elite*gold: 0
Join Date: Nov 2011
Posts: 478
Received Thanks: 790
Naja wenn man den Link hat kann man viel unsinn anstellen :P
Zymos is offline  
Thanks
1 User
Old 11/27/2012, 06:47   #6
 
elite*gold: 21
Join Date: Oct 2012
Posts: 374
Received Thanks: 524
da sollte eine überprüftung rein wie zb beim wartungsmod das er ne txt ausließt wo man das aktiviern und deaktivieren kann.. bzw wenn er die txt dann nicht laden kann weil hp down is sollas einrach ignorieren wäre das möglich soniice`?

und ja man kann mist baun

tzd danke..
Analyze™ is offline  
Thanks
1 User
Old 11/27/2012, 09:02   #7
 
elite*gold: 139
Join Date: Sep 2010
Posts: 583
Received Thanks: 545
gutes braaaaa
.XXShuzZzle is offline  
Old 11/27/2012, 10:15   #8

 
.Raicon's Avatar
 
elite*gold: 0
Join Date: Sep 2009
Posts: 1,033
Received Thanks: 1,168
Webspace down und das wars Wird lauter Errors regnen, wenn die PHP Datei nicht erreichbar ist. Gibt noch etwas bessere Methoden, die sowas umgehen könnten trozdem danke fürs teilen!

LG Raicon
.Raicon is offline  
Old 11/27/2012, 12:16   #9


 
elite*gold: 0
Join Date: Feb 2010
Posts: 7,221
Received Thanks: 6,758
Ich rieche Undankbarkeit - Wie gesagt, was ihr damit macht, ist mir relativ latte, baut es aus wie Lust und Laune habt.

Quote:
Originally Posted by Prσfizσckєr94 View Post
Seh ich das falsch, oder kann man einfach über den aufruf der .php mit gewissen Parametern einfach andere Playernamen eintragen und so die Chats für andere Spieler blocken?

Oder sich selbst wieder entblocken?
Code:
h t t p ://future3.eu/whisper_block.php?do=remove&player_name=SoNiice&ignored_player_name=Profizocker94
Edit: Was ist wenn die .php gedowned wird? Ist dann kein ordentliches Whispern mehr möglich?
An sich hast du Recht, ich habe bei mir noch eine Abfrage mit drin, ob mein Host überhaupt erreichbar ist oder nicht, hier ist nur das Whispern drin.
___

Und ja, im Endeffekt kannst andere Spieler blocken etc. wenn man den Link weiß.
#SoNiice is offline  
Old 11/27/2012, 13:40   #10
 
.Aza''s Avatar
 
elite*gold: 0
The Black Market: 110/0/3
Join Date: Jan 2012
Posts: 7,868
Received Thanks: 7,712
Nette Idee und so.
Danke marcel.
.Aza' is offline  
Old 11/27/2012, 13:47   #11
 
elite*gold: 0
Join Date: Jan 2010
Posts: 1,916
Received Thanks: 538
naja man könnte doch per .htacess oder wie die datei heißt machen, dass niemand auf diese datei zugreifen kann außer der root server..
'oShet is offline  
Thanks
1 User
Old 11/27/2012, 13:48   #12
 
elite*gold: 1
Join Date: Apr 2012
Posts: 928
Received Thanks: 2,486
Quote:
Originally Posted by SoNiice View Post
Ich rieche Undankbarkeit - Wie gesagt, was ihr damit macht, ist mir relativ latte, baut es aus wie Lust und Laune habt.



An sich hast du Recht, ich habe bei mir noch eine Abfrage mit drin, ob mein Host überhaupt erreichbar ist oder nicht, hier ist nur das Whispern drin.
___

Und ja, im Endeffekt kannst andere Spieler blocken etc. wenn man den Link weiß.

Dass ist keine Undankbarkeit das ist Kritik.

Man kann die Kritik annehmen oder mich gleich wegen dem Post anflammen, ist mir relativ.
.Awesoome' is offline  
Thanks
2 Users
Old 11/27/2012, 14:18   #13


 
elite*gold: 0
Join Date: Feb 2010
Posts: 7,221
Received Thanks: 6,758
Quote:
Originally Posted by .Awesoome' View Post
Dass ist keine Undankbarkeit das ist Kritik.

Man kann die Kritik annehmen oder mich gleich wegen dem Post anflammen, ist mir relativ.
Kritik und Undankbarkeit landen so ziemlich auf der selben Stufe, das was hier gepostet wird ist überwiegend keine Kritik, mehr eine Undankbarkeit getarnt mit ein wenig Kritik, welche absolut unpassend ist, ich mein' - Warum schreibe ich denn extra rein, ihr könnt damit anfangen was IHR wollt, dann brauch man doch nicht die Sourcehilfen kritisieren, welche lediglich ein Ansatz für weiteres ist, aber auch so funktionieren würde.

Quote:
Originally Posted by ebert.tonna View Post
Das mit der urllib musste mal genau erklären weil das nicht nur mit copy und paste zumachen ist, da fehlen auch ja noch datein die auch noch in die root reinmüssen, sonst erkennt der ja die funktion nicht.
Zur urllib habe ich genug erklärt, urlliby.pyc in den lib Ordner und urllib importieren.
#SoNiice is offline  
Old 11/28/2012, 01:16   #14
 
elite*gold: 21
Join Date: Oct 2012
Posts: 374
Received Thanks: 524
PHP Code:
import dbg
import os

command 
os.system('ping euredomain/ip'### euredomain/ip durch die ipadresse ersetzen oder durch die domain zb google.de
if command == 0:
    
dbg.LogBox("TRUE")
else:
    
dbg.LogBox ("FALSE"
ist ein ansatz aber geht jedesmal cmd auf und pingt kurz an...
Analyze™ is offline  
Thanks
1 User
Old 11/28/2012, 02:43   #15


 
elite*gold: 0
Join Date: Feb 2010
Posts: 7,221
Received Thanks: 6,758
Mit der socket Methode von Python geht's einfacher.
#SoNiice is offline  
Reply


Similar Threads Similar Threads
[Python-Modul]EXP-Donator (kompatibel mit Python Loader)
11/23/2013 - Metin2 Hacks, Bots, Cheats, Exploits & Macros - 27 Replies
Moin, da man mich danach gefragt hat und ich sowieso mal ein Beispiel für die Benutzung meines Python Loaders veröffentlichen wollte, habe ich die Gelegenheit genutzt und euch eben einen EXP-Spendebot geschrieben. Man kann ihn einfach mit dem oben verlinkten Python Module Loader laden und ihn mit F5 aktivieren/deaktivieren. Sobald ihr mehr als 99 Erfahrungspunkte habt (man kann nur in 100er Schritten spenden), werden alle Erfahrungspunkte an eure Gilde gespendet. Wer Lust hat und...
Metin2 - Python - Wie Python Hacks verschlüsseln und Server überprüfen (GF/PServe)
09/23/2012 - Metin2 - 2 Replies
Ich wollte fragen, wie man Python Hacks am besten Verschlüsselt ? und wie man feststellen kann ob man auf einem GF / Pserver spielt. ?
python
10/23/2011 - Metin2 Private Server - 0 Replies
Hey Com ich wollte fragen wer mir bei dem switchbot von python helfen kann und die 2.0V geben kann wer so nett ist bitte skyp!:handsdown::handsdown::handsdown:
Python + Eric Python IDE installieren ?!
07/05/2011 - General Coding - 0 Replies
hat sich erledigt.
Whisperblock
05/24/2007 - World of Warcraft - 2 Replies
Ich habe von einem Addon gehört das whisper blockt von leuten die nicht zu der Gilde usw gehören. Kennt das jemand?



All times are GMT +2. The time now is 18:39.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.