Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 21:45

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

Advertisement



epvp*coders project #0001

Discussion on epvp*coders project #0001 within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: May 2005
Posts: 2,922
Received Thanks: 106
epvp*coders project #0001
Codename : Loki



.:: Status ::.
AccountServer Emulator : 100%
CharServer Emulator : 100%
ZoneServer Emulator : 3%

Source :

Wer versuchen will den Server mal aufzusetzen sollte am besten noch n MySQL Server laufen haben und da folgendes Script ausführen.
Man sollte außerdem noch einen User anlegen mit den Benutzerdaten loki/magicalmirror. Außer ihr änderts halt im Code.

Code:
# MySQL-Front 3.2 (Build 14.8)

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES latin1 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='SYSTEM' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE */;
/*!40101 SET SQL_MODE='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES */;
/*!40103 SET SQL_NOTES='ON' */;


# Host: localhost  Database: loki
# ------------------------------------------------------
# Server version 5.0.22-community-nt

DROP DATABASE IF EXISTS `loki`;
CREATE DATABASE `loki` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `loki`;

#
# Table structure for table accounts
#

CREATE TABLE `accounts` (
 `AccountID` int(11) NOT NULL default '0',
 `Username` text NOT NULL,
 `Password` text NOT NULL,
 `SessionID1` int(11) NOT NULL default '0',
 `SessionID2` int(11) NOT NULL default '0',
 `Registration_Date` datetime NOT NULL default '0000-00-00 00:00:00',
 `LastIP` text NOT NULL,
 PRIMARY KEY (`AccountID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

#
# Dumping data for table accounts
#

INSERT INTO `accounts` VALUES (10000,'cyrus','master',76741,0,'0000-00-00 00:00:00','127.0.0.1');

#
# Table structure for table characters
#

CREATE TABLE `characters` (
 `CharID` int(11) NOT NULL auto_increment,
 `CharSlot` int(11) default '0',
 `AccountID` int(11) default '0',
 `CharName` text,
 `Class` int(11) default '0',
 `BaseExp` int(11) default '0',
 `BaseLevel` int(11) default '0',
 `JobExp` int(11) default '0',
 `JobLevel` int(11) default '0',
 `State` int(11) default '0',
 `Ailments` int(11) default '0',
 `Option_` int(11) default '0',
 `Zeny` int(11) default '0',
 `HP` int(11) default '0',
 `MaxHP` int(11) default '0',
 `SP` int(11) default '0',
 `MaxSP` int(11) default '0',
 `Karma` int(11) default '0',
 `Manner` int(11) default '0',
 `StatusPoints` int(11) default '0',
 `SkillPoints` int(11) default '0',
 `HairColor` int(11) default '0',
 `HairStyle` int(11) default '0',
 `STR` int(11) default '0',
 `AGI` int(11) default '0',
 `DEX` int(11) default '0',
 `INT_` int(11) default '0',
 `LUK` int(11) default '0',
 `VIT` int(11) default '0',
 `HeadTop` int(11) default '0',
 `HeadMid` int(11) default '0',
 `HeadBtm` int(11) default '0',
 `ClothesColor` int(11) default '0',
 PRIMARY KEY (`CharID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

#
# Dumping data for table characters
#

INSERT INTO `characters` VALUES (9,0,10000,'CyRuS',0,0,1,0,1,0,0,0,800,50,50,20,20,0,0,0,0,0,1,9,9,9,1,1,1,0,0,0,0);
INSERT INTO `characters` VALUES (11,1,10000,'CyRuS2',0,0,1,0,1,0,0,0,800,50,50,20,20,0,0,0,0,0,1,9,9,9,1,1,1,0,0,0,0);

#
# Table structure for table serverinfo
#

CREATE TABLE `serverinfo` (
 `id` int(11) NOT NULL auto_increment,
 `ServerType` int(11) default NULL,
 `ServerName` text,
 `ServerPort` int(11) default NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

#
# Dumping data for table serverinfo
#

INSERT INTO `serverinfo` VALUES (1,1,'Loki - Main',4500);

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

.:: ChangeLog ::.

Quote:
Originally posted by old








Feedbacks :

PS: Ich arbeite nun alleine an dem Projekt, da ich mich auf meine "Mitarbeiter" nicht verlassen konnte.
Ich werde das nun auch alleine durchziehen, is einfacher so als wenn ich mich dauernd auf irgendwen verlassen muss und am Ende nix kommt.
CyRuSTheViRuS is offline  
Old 07/11/2006, 20:01   #2
 
elite*gold: 0
Join Date: May 2005
Posts: 2,922
Received Thanks: 106
Update 11.07.06
---------------------
AccountServer funktioniert nun.
Base endgültig fertiggestellt.
Jegliche Funktionen und Methoden (SQL, MultiThreading, Socket...) wurden erneut überarbeitet.
AccountServer kann mehrere hundert Anfragen in wenigen Sekunden bearbeiten. Die Frage ob MySQL dann noch mithällt is ne andere ;D
CyRuSTheViRuS is offline  
Old 07/13/2006, 16:01   #3
 
elite*gold: 0
Join Date: May 2005
Posts: 2,922
Received Thanks: 106
Update 13.07.06
---------------------
Da ich wenig Zeit während der Woche habe, solang ich noch keine Ferien hab, nur ein kleines Update.

Threading überarbeitet...
-AccountServer hat beim warten auf Verbindungen ab und zu gelaggt.
Multiple CharServer Support eingebaut (Siehe Screenshot)
CyRuSTheViRuS is offline  
Old 07/16/2006, 17:28   #4
 
elite*gold: 0
Join Date: May 2005
Posts: 2,922
Received Thanks: 106
Update 16.07.06
---------------------
AccountServer abgeschlossen!
-Wird nur noch bei Gelegenheit auf Bugs untersucht und geupdated.
CharacterServer angefangen
-Charliste kann nun angezeigt werden (siehe Screenshot)

ToDo:
-Character erstellen
-Character löschen
CyRuSTheViRuS is offline  
Old 07/20/2006, 11:09   #5
 
elite*gold: 0
Join Date: May 2005
Posts: 2,922
Received Thanks: 106
Update 20.07.06 . 2
---------------------
CharacterServer abgeschlossen
-Wird nur noch bei bedarf auf bugs gefixt
ZoneServer begonnen
Auth funzt.
Man kann schonmal ingame stehen (siehe Screenshot)



Update 20.07.06
---------------------
CharacterServer überarbeitet
-Krims Krams ... Funktionen neugeschrieben usw usw
Character anzeigen funktioniert nun (siehe Screenshot)
Character erstellen auch (siehe Screenshot)
Das Lösch Feature wird wahrscheinlich schnell eingebaut sein.
Dannach gehts gleich weiter mit ZoneServer

ToDo:
-Character löschen
-ZoneServer
CyRuSTheViRuS is offline  
Old 09/21/2006, 15:45   #6
 
elite*gold: 0
Join Date: May 2005
Posts: 2,922
Received Thanks: 106
Joa, hier mal der Source, für alle die es interessiert.
Vorweg noch etwas :
Mein Coding-Stil ist vielleicht nicht perfekt oder optimal, reicht mir aber aus.
Codeoptimierung liegt da bis jetzt nicht wirklich vor nur in sofern wie ichs während dem Coden vorgenommen habe.
Tipps, Vorschläge (die den Code) betreffen können gerne gepostet werden.

Source:
CyRuSTheViRuS is offline  
Old 09/21/2006, 17:40   #7
 
elite*gold: 0
Join Date: Mar 2006
Posts: 111
Received Thanks: 0
Hi Virus, ich finde es gut das du den Quellcode veröffentlicht hast :-)

Quote:
Originally posted by CyRuSTheViRuS@Sep 21 2006, 15:45
Tipps, Vorschläge (die den Code) betreffen können gerne gepostet werden.
Hmm ok :

Punkt 1:

Diverse SQL-Injection Lücken (z. B. folge Username) - auch wenn sich da nicht sehr viel Code einschleusen lässt.
Mir persönlich gefällt der SqlHelper den du verwenden kannst, das ganze würde beispielsweise so Aussehen (C#):
Code:
return ( int )SqlHelper.ExecuteScalar(
  Configuration.DatabaseConnection,
  CommandType.Text,
  @"
  	SELECT COUNT([Text]) FROM dbo.CategoryNames
  	WHERE [Text] = @CatName
  ",
  new SqlParameter( "@CatName", catName )
  ) > 0;
Damit ist auch keine SQL Injection mehr möglich.


Punkt 2:

Deine Konfigurationen, beispielsweise die DatabaseConnection (die du mehrfach in irgendwelchen Funktionen setzt), kann in die "App.Config" und du greifst mit
Code:
ConfigurationSettings.AppSettings[ "DatabaseConnection" ];
darauf zu. Optimal eine Configuration.cs/vb und da eine Property :-)


Punkt 3:

Da es sich um eine WinForm handelt, kannst du ruhig die DBConnection beim Start öffnen und beim beenden der Applikation schließen. Bei Multithreading sollte man auf die Verfügbarkeit in den jeweiligen Threads achten.
Hier ist auch ganz gut eine Property zu gebrauchen. Beim get prüfst du ob du schon eine hast und gibst die zurück, wenn nicht, dann erstellst du eine und gibst _die_ zurück ;-)


Punkt 4:

Funktionen die so ähnlich heissen wie "out6A00", "out6900" (von deiner verwendeten Konvention sollten die sowieso groß anfangen ), solltet du vermeiden. Wie wäre es vorne mit "SendPacket" und stehen die Byte 6A und 69 nicht für bestimmte Aktionen? - die könnte man in den Namen mit einbringen.


Punkt 5:

Hier erstmal ein Codeschnipsel wie du deine Charstruct ausliest:

Code:
    Dim CharacterName As String
...
    Player.Charname = CharacterName
    Player.STR = Packet.GetValue(26)
    Player.AGI = Packet.GetValue(27)
    Player.VIT = Packet.GetValue(28)
    Player.INT = Packet.GetValue(29)
    Player.DEX = Packet.GetValue(30)
    Player.LUK = Packet.GetValue(31)
Du könntest deine "Charakter" struct was die Größe angeht direkt der struct vom Spiel anpassen (z. B. richtige Datentypen, exakte Arraylänge beim Charnamen). So müsstest du nach dem Empfang des Packets einfach nur ab Beginn der struct mit der struct länge (müsste unter VB wohl auch sizeof sein) in deine struct einlesen und damit wäre der Teil mit weniger als 5 Zeilen erledigt :-)


Punkt 6:

Soweit ich das richtig gesehen habe, hast du ziemlich viel Code der in allen 3 Projekten verwendet wird und bei Änderungen müsstest du demnach an 3 Stellen das updaten. Du könntest z. B. eine neue Assembly erstellen, in der du den Code auslagerst und die von allen Projekten eingebunden wird.



Ich hoffe das waren einige brauchbare Vorschläge.
SilonVier is offline  
Old 09/21/2006, 18:43   #8
 
elite*gold: 0
Join Date: May 2005
Posts: 2,922
Received Thanks: 106
Jo die Vorschläge bzw Tipps sind sehr brauchbar, danke dir erstmal und werde sie auf jedenfall berücksichtigen sobald ich mich mal wieder an das Projekt bzw etwas neues mache.
CyRuSTheViRuS is offline  
Old 11/30/2006, 04:26   #9
 
elite*gold: 0
Join Date: Nov 2006
Posts: 6
Received Thanks: 0
LOL
.Unknow. is offline  
Old 11/30/2006, 04:30   #10
 
evulhotdog's Avatar
 
elite*gold: 0
Join Date: Aug 2005
Posts: 1,466
Received Thanks: 56
i would like test this, also play it
evulhotdog is offline  
Old 01/03/2007, 16:36   #11
 
elite*gold: 0
Join Date: Apr 2006
Posts: 29
Received Thanks: 0
nur ma so ne frage kommt da noch was oder is der jetzt auf eis gesetzt ??
css_cheatos is offline  
Reply


Similar Threads Similar Threads
epvp*coders project #0002 Feedback
10/19/2006 - Ragnarok Online - 58 Replies
eROA elitepvpers Ragnarok Online Assistant Also will bald ma nen ROA-änliches Tool für RO coden. Wollt ma fragen was ihr davon haltet, ob ihrs nutzen würdet und was euch so einfällt. Was ich bisher für Ideen habe : -Autoloot -Auto-NPC-Chat continuieiaweraxyxnseing (ka wie das heisst XD) -HP Anzeige bei Monstern
epvp*coders project #0001 Feedbacks
09/02/2006 - General Coding - 17 Replies
Alle Feedbacks zum epvp*coders project #0001 können hier gepostet und diskutiert werden. Jegliche OT-/Spamgespräche werden ohne Vorwarnung gelöscht und User wird verwarnt, danke.



All times are GMT +1. The time now is 21:45.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

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