Charakter löschen Problem

11/16/2015 18:08 DerHeiligeJesus#1
Hey, ich hab ein kleines Problem und weiß auch nicht mehr wo ich suchen soll, wenn ich meinen Charakter lösche kann ich direkt einen neuen Charakter erstellen mit dem selben Namen und das ist schlecht, so kann ich die komplette Datenbank mit Charaktern gleicher Namen voll spammen. Gab es da nicht mal was das dieser nach 30 Tagen gelöscht wird und man erst dann den Namen wieder verwenden kann?
11/17/2015 17:52 xTwiLightx#2
Lösche Charaktere mit einer Query, die prüft ob isBlock auf 'D' gesetzt ist.

EDIT: Verlesen...


Offenbar tut die CHARACTER_STR da ihren Job und löscht einen Charakter direkt, statt nur isBlock auf 'D' zu setzen.


Schaue nach der Löschung per Client mal, ob der Char noch in der CHARACTER_TBL existiert.
11/18/2015 16:29 DerHeiligeJesus#3
Ja der Char ist noch in der CHARACTER_TBL nach einer Löschung, ich kann dann aber immer wieder direkt einen neuen Char mit dem gleichen Namen machen.

So würde das dann aussehen wenn ich den Char die ganze Zeit lösche und wieder einen neuen mit dem selben Namen erstelle :

[Only registered and activated users can see links. Click Here To Register...]

Keine Ahnung ob das vielleicht auch am Char löschen liegen kann?

EDIT:
isBlock wird auch auf D gesetzt wenn man den Char löscht, trotzdem kann ich immer wieder eienn neuen erstellen mit dem selben Namen.
11/18/2015 19:59 xTwiLightx#4
Wenn du in der Prozedur nach 'I1' suchst, findest du diese Abfrage?

Code:
	IF EXISTS(SELECT m_szName FROM CHARACTER_TBL WHERE m_szName = @im_szName AND serverindex = @iserverindex)
		BEGIN
			SELECT  fError = '0', fText = 'Character name already exists!' 
			RETURN
		END
	ELSE

Hier ist die Prüfung, ob der Charaktername bereits existiert.
11/19/2015 17:09 DerHeiligeJesus#5
Da ist bei mit nur das :

PHP Code:
IF @iGu 'I1'
    
BEGIN
    
IF EXISTS(SELECT m_szName FROM CHARACTER_TBL
          WHERE 
(( lower(m_szName) = lower(@im_szName) ) OR (playerslot = @iPlayerslot AND account = @iaccount  ) ) AND isblock 'F' AND serverindex = @iserverindex )
        
BEGIN
            SELECT  fError 
'0'fText 'Error 1!' 
            
RETURN
        
END
    
ELSE
        
BEGIN
            
DECLARE 
11/19/2015 18:59 xTwiLightx#6
Sieht eigentlich auch Ok aus - es dürfte zumindest kein Character erstellt werden.

Dann müsstest du im Source einmal schauen, was passiert wenn beim Call von der CHARACTER_STR mit 'I1' passiert, wenn er fError 0 bekommt.


Ich weiß die genaue Methode gerade nicht, aber ich meine, dass es qryCharacter oder so ähnlich war.
11/19/2015 19:54 DerHeiligeJesus#7
Wenn ich aber das mache :

PHP Code:
IF @iGu 'I1'
    
BEGIN
    
IF EXISTS(SELECT m_szName FROM CHARACTER_TBL WHERE m_szName = @im_szName AND serverindex = @iserverindex)
        
BEGIN
            SELECT  fError 
'0'fText 'Character name already exists!' 
            
RETURN
        
END
    
ELSE
    IF 
EXISTS(SELECT m_szName FROM CHARACTER_TBL
          WHERE 
(( lower(m_szName) = lower(@im_szName) ) OR (playerslot = @iPlayerslot AND account = @iaccount  ) ) AND isblock 'F' AND serverindex = @iserverindex )
        
BEGIN
            SELECT  fError 
'0'fText 'Error 1!' 
            
RETURN
        
END
    
ELSE
        
BEGIN
            
DECLARE 
dann funzt es, dann kann ich keinen char mit dem selben Namen mehr erstellenw enn er gelöscht wurde :D