Version sẽ là 99b+ 1 version củ mà nhiều người đã biết, nhưng đã có darklord có thể là xem là tạm được, chứ viết mãi cái 97 chán lắm !
Thế ở đây ko ai hứng thú àh ! cũng buồn nhỉ ?
Làm cũng ko khó mấy đâu , c# bây giờ khác c++ rồi ... dể hiểu hơn và hướng đối tượng kĩ hơn, nó cũng ít lệnh hơn java nên học tương đối nhanh mà ?
Gởi lên đây 1 đoạn mã c# xử lí thành viên khi có kết nối ( credit to lothei not me ^^ )
using System;
namespace MuServer
{
public class PlayerConnecting
{
/// <summary>
/// Waiting for login packet
/// </summary>
/// <param name="pck"></param>
/// <param name="pl"></param>
public static void Analyse(byte[] pck,Player pl)
{
// Login packet
if(pck.Length==49 && pck[0]==0xC3 && pck[2]==241 && pck[3]==1)
PlayerConnecting.CheckLogin(pck,pl);
}
public static void CheckLogin(byte[] pck,Player pl)
{
string login="",password="";
EncDec.CryptDecrypt3Bytes(pck,4,10); // Decrypt name
EncDec.CryptDecrypt3Bytes(pck,14,10); // Decrypt password
for(int i=0;i<10;i++)
{
if( pck[i+4]>32 )
login+= ((char)(pck[i+4])).ToString();
if( pck[i+14]>32 )
password+= ((char)(pck[i+14])).ToString();
}
if(AllPlayers.LoginConnected(login,pl))
{
pl.SendDecData(new byte[]{193,005,241,001,002}); // Error packet, we should put the good one here
pl.DisconnectPlayer(); // Maybe we should do something else here
return;
}
login=DB.NoInjection(login); // Make sure player isnt trying to do sql injection
password=DB.NoInjection(password);
DB db=new DB();
if(db.QuerySelect("members","login= '" + login+"'")<=0) // Check login
{
pl.SendDecData(new byte[]{193,005,241,001,002}); // Error packet, we should put the good one here
pl.DisconnectPlayer(); // Maybe we should do something else here
return;
}
if(db.Res[0]["password"].ToString()!=password) // Check password
{
pl.SendDecData(new byte[]{193,005,241,001,002}); // Error packet, we should put the good one here
pl.DisconnectPlayer(); // Maybe we should do something else here
return;
}
pl.Login=login;
PlayerConnecting.GetAllInfo(pl,db.Res);
pl.State=Player.PlayerState.SelectingChar;
pl.SendDecData(new byte[]{193,005,241,001,001}); // Login ok packet
Debug.Print("Player ID ("+pl.Login+"): "+pl.ID.ToString()+" selecting char",Debug.DebugLevel.AllEvent);
}
public static void GetAllInfo(Player pl,System.Data.DataRowCollection Res)
{
pl.DbID=int.Parse(Res[0]["ID"].ToString());
/*
* We should add everything needed from database
* */
}
}
}