Here's a simple account creator.
Just throw it in your Accounts folder and make your account =P
(What? I was bored =P)
Just throw it in your Accounts folder and make your account =P
(What? I was bored =P)
case "@scroll":
{
switch (args[1].ToLower())
{
case "tc":
Client.Teleport(1002, 431, 379);
break;
case "pc":
Client.Teleport(1011, 190, 271);
break;
case "am":
Client.Teleport(1020, 567, 576);
break;
case "dc":
Client.Teleport(1000, 500, 650);
break;
case "bi":
Client.Teleport(1015, 723, 573);
break;
case "ma":
Client.Teleport(1036, 200, 200);
break;
case "arena":
Client.Teleport(1005, 52, 69);
break;
}
break;
}
ChangeDirection = 79,
case DataPacket.ChangeDirection:
ChangeDirection(Client, cPacket);
break;
public static void ChangeDirection(GameClient Client, DataPacket Packet)
{
ushort Direction = (ushort)(Packet.wParam3);
ushort Client_X = (ushort)(Packet.wParam1);
ushort Client_Y = (ushort)(Packet.wParam2);
if (Enum.IsDefined(typeof(ConquerAngle), (ConquerAngle)Direction))
{
if (Client.Entity.X == Client_X && Client.Entity.Y == Client_Y)
{
Client.Entity.Facing = (ConquerAngle)Direction;
Packet.UID = Client.Entity.UID;
Client.SendScreen(Packet, false);
}
}
else
Client.Socket.Disconnect(); // INVALID_DIRECTION (No Such Facing Direction)
}
ChangeAction = 81,
case DataPacket.ChangeAction:
ChangeAction(Client, cPacket);
break;
public static void ChangeAction(GameClient Client, DataPacket Packet)
{
ushort Action = (ushort)(Packet.dwParam);
ushort Client_X = (ushort)(Packet.wParam1);
ushort Client_Y = (ushort)(Packet.wParam2);
if (Enum.IsDefined(typeof(ConquerAction), (ConquerAction)Action))
{
if (Client.Entity.X == Client_X && Client.Entity.Y == Client_Y)
{
Client.Entity.Action = (ConquerAction)Action;
Packet.UID = Client.Entity.UID;
Client.SendScreen(Packet, false);
}
}
else
Client.Socket.Disconnect(); // INVALID_ACTION (No Such Action)
}
ChangePkMode = 96,
case DataPacket.ChangePkMode:
ChangePkMode(Client, cPacket);
break;
public static void ChangePkMode(GameClient Client, DataPacket Packet)
{
ushort Client_PkMode = (ushort)(Packet.dwParam);
if (Enum.IsDefined(typeof(PkMode), (PkMode)Client_PkMode))
{
Client.Entity.PkMode = (PkMode)Client_PkMode;
Client.Send(Packet);
}
else
Client.Socket.Disconnect(); // INVALID_PK_MODE (No Such Pk Mode)
}
public enum PkMode : byte
{
PK = 0,
Peace = 1,
Team = 2,
Capture = 3
}
private ushort m_PkMode;
public PkMode PkMode
{
get
{
return (PkMode)this.m_PkMode;
}
set
{
this.m_PkMode = (ushort)value;
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConquerServer_Basic
{
public interface ITeam
{
GameClient Leader { get; set; }
GameClient[] Members { get; set; }
bool ForbidTeam { get; set; }
bool PickupGold { get; set; }
bool PickupItems { get; set; }
}
public class Team : ITeam
{
private GameClient _Leader;
private GameClient[] _Members = new GameClient[4];
private bool _ForbidTeam = false;
private bool _PickupGold = true;
private bool _PickupItems = false;
public Team(GameClient Leader) { _Leader = Leader; }
public GameClient Leader
{
get
{
return _Leader;
}
set
{
_Leader = value;
}
}
public GameClient[] Members
{
get
{
return _Members;
}
set
{
_Members = value;
}
}
public bool ForbidTeam
{
get
{
return _ForbidTeam;
}
set
{
_ForbidTeam = value;
}
}
public bool PickupGold
{
get
{
return _PickupGold;
}
set
{
_PickupGold = value;
}
}
public bool PickupItems
{
get
{
return _PickupItems;
}
set
{
_PickupItems = value;
}
}
public bool isTeamFull()
{
foreach (GameClient Player in _Members)
{
if (Player == null)
return false;
}
return true;
}
public void SendPacketToTeam(byte[] Packet, GameClient Client, bool SendToSelf)
{
foreach (GameClient Player in _Members)
{
if (Player != null)
{
if (Player == Client)
{
if (SendToSelf)
Player.Send(Packet);
}
else
Player.Send(Packet);
}
}
if (Leader == Client)
{
if (SendToSelf)
Leader.Send(Packet);
}
else
Leader.Send(Packet);
}
public void SendPacketToTeam(byte[] Packet)
{
foreach (GameClient Player in _Members)
{
if (Player != null)
Player.Send(Packet);
}
Leader.Send(Packet);
}
public void TeamClose()
{
foreach (GameClient Player in _Members)
{
if (Player != null)
Player.Entity.Team = null;
}
}
public void AddMember(GameClient Client)
{
if (!isTeamFull())
{
for (int Counter = 0; Counter < _Members.Length; Counter++)
{
if (_Members[Counter] == null)
{
_Members[Counter] = Client;
Client.Send(PacketBuilder.PlayerJoinTeam(_Leader));
foreach (GameClient Player in _Members)
{
if (Player != null)
Client.Send(PacketBuilder.PlayerJoinTeam(Player));
}
SendPacketToTeam(PacketBuilder.PlayerJoinTeam(Client));
break;
}
}
}
}
public void RemoveMember(uint UID, bool Kicked)
{
for (int Counter = 0; Counter < _Members.Length; Counter++)
{
if (_Members[Counter].Entity.UID == UID)
{
if(Kicked)
SendPacketToTeam(new TeamPacket(TeamPacket.Kick, _Members[Counter].Entity.UID).Serialize());
else
SendPacketToTeam(new TeamPacket(TeamPacket.ExitTeam, _Members[Counter].Entity.UID).Serialize());
_Members[Counter].Entity.Team = null;
string KickName = _Members[Counter].Entity.Name;
_Members[Counter] = null;
if(Kicked)
SendPacketToTeam(new MessagePacket(KickName + " was kicked from the team!", 0xFFFFFF, MessagePacket.TopLeft).Serialize());
else
SendPacketToTeam(new MessagePacket(KickName + " has left the team!", 0xFFFFFF, MessagePacket.TopLeft).Serialize());
break;
}
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConquerServer_Basic
{
public class TeamPacket : IClassPacket
{
public const ushort
Create = 0,
JoinRequest = 1,
ExitTeam = 2,
AcceptInvitation = 3,
InviteRequest = 4,
AcceptJoinRequest = 5,
Dismiss = 6,
Kick = 7,
ForbidJoining = 8,
UnforbidJoining = 9,
LootMoneyOff = 10,
LootMoneyOn = 11,
LootItemsOff = 12,
LootItemsOn = 13;
private byte[] Packet;
public TeamPacket()
{
Packet = new byte[12];
PacketBuilder.WriteUInt16(12, Packet, 0);
PacketBuilder.WriteUInt16(1023, Packet, 2);
}
public TeamPacket(uint _ID, uint _PlayerUID)
{
Packet = new byte[12];
PacketBuilder.WriteUInt16(12, Packet, 0);
PacketBuilder.WriteUInt16(1023, Packet, 2);
ID = _ID;
PlayerUID = _PlayerUID;
}
public uint ID
{
get { return BitConverter.ToUInt32(Packet, 4); }
set { PacketBuilder.WriteUInt32(value, Packet, 4); }
}
public uint PlayerUID
{
get { return BitConverter.ToUInt32(Packet, 8); }
set { PacketBuilder.WriteUInt32(value, Packet, 8); }
}
public byte[] Serialize()
{
return Packet;
}
public void Deserialize(byte[] Bytes)
{
Packet = Bytes;
}
}
}
case 1023:
{
Team(Client, Packet);
break;
}
public static void Team(GameClient Client, byte[] Packet)
{
TeamPacket cPacket = new TeamPacket();
SyncPacket sync;
cPacket.Deserialize(Packet);
switch (cPacket.ID)
{
case TeamPacket.Create:
if (Client.Entity.Team == null)
{
Client.Entity.Team = new Team(Client);
Client.Send(Packet);
Client.Entity.StatusFlag += 64;
sync = new SyncPacket(1);
sync.UID = Client.Identifier;
sync[0] = SyncPacket.Data.Create(SyncPacket.RaiseFlag, Client.Entity.StatusFlag);
Client.SendScreen(sync, true);
}
break;
case TeamPacket.Dismiss:
if (Client.Entity.Team != null)
{
Client.Entity.Team.SendPacketToTeam(Packet);
Client.Entity.Team.TeamClose();
Client.Entity.Team = null;
Client.Entity.StatusFlag -= 64;
sync = new SyncPacket(1);
sync.UID = Client.Identifier;
sync[0] = SyncPacket.Data.Create(SyncPacket.RaiseFlag, Client.Entity.StatusFlag);
Client.SendScreen(sync, true);
}
break;
case TeamPacket.InviteRequest:
if (Client.Entity.Team != null)
{
if (Client.Entity.Team.Leader == Client)
{
if (!Client.Entity.Team.isTeamFull())
{
foreach (IMapObject obj in Client.Screen.Objects)
{
if (obj.MapObjType == MapObjectType.Player)
{
if ((obj.Owner as GameClient).Entity.UID == cPacket.PlayerUID)
{
if ((obj.Owner as GameClient).Entity.Team == null)
{
cPacket.PlayerUID = Client.Entity.UID;
(obj.Owner as GameClient).Send(cPacket.Serialize());
}
else
Client.Send(new MessagePacket((obj.Owner as GameClient).Entity.Name + " is in another Team!", 0xFFFFFF, MessagePacket.TopLeft).Serialize());
}
}
}
}
}
}
break;
case TeamPacket.JoinRequest:
if (Client.Entity.Team == null)
{
foreach (IMapObject obj in Client.Screen.Objects)
{
if (obj.MapObjType == MapObjectType.Player)
{
if ((obj.Owner as GameClient).Entity.UID == cPacket.PlayerUID)
{
if ((obj.Owner as GameClient).Entity.Team != null)
{
if (!(obj.Owner as GameClient).Entity.Team.ForbidTeam)
{
if (!(obj.Owner as GameClient).Entity.Team.isTeamFull())
{
cPacket.PlayerUID = Client.Entity.UID;
(obj.Owner as GameClient).Send(cPacket.Serialize());
}
else
Client.Send(new MessagePacket("Team is full!", 0xFFFFFF, MessagePacket.TopLeft).Serialize());
}
else
Client.Send(new MessagePacket("The team doesn't accept new members.", 0xFFFFFF, MessagePacket.TopLeft).Serialize());
}
else
Client.Send(new MessagePacket((obj.Owner as GameClient).Entity.Name + " has no Team!", 0xFFFFFF, MessagePacket.TopLeft).Serialize());
}
}
}
}
break;
case TeamPacket.Kick:
if (Client.Entity.Team != null)
{
if (Client.Entity.Team.Leader == Client)
{
Client.Entity.Team.SendPacketToTeam(Packet);
Client.Entity.Team.RemoveMember(cPacket.PlayerUID, true);
}
}
break;
case TeamPacket.ForbidJoining:
if (Client.Entity.Team != null)
{
if (Client.Entity.Team.Leader == Client)
{
Client.Entity.Team.ForbidTeam = true;
}
}
break;
case TeamPacket.UnforbidJoining:
if (Client.Entity.Team != null)
{
if (Client.Entity.Team.Leader == Client)
{
Client.Entity.Team.ForbidTeam = false;
}
}
break;
case TeamPacket.LootMoneyOn:
if (Client.Entity.Team != null)
{
if (Client.Entity.Team.Leader == Client)
{
Client.Entity.Team.PickupGold = true;
}
}
break;
case TeamPacket.LootMoneyOff:
if (Client.Entity.Team != null)
{
if (Client.Entity.Team.Leader == Client)
{
Client.Entity.Team.PickupGold = false;
}
}
break;
case TeamPacket.LootItemsOn:
if (Client.Entity.Team != null)
{
if (Client.Entity.Team.Leader == Client)
{
Client.Entity.Team.PickupItems = true;
}
}
break;
case TeamPacket.LootItemsOff:
if (Client.Entity.Team != null)
{
if (Client.Entity.Team.Leader == Client)
{
Client.Entity.Team.PickupItems = false;
}
}
break;
case TeamPacket.ExitTeam:
if (Client.Entity.Team != null)
{
if (Client.Entity.Team.Leader != Client)
{
Client.Entity.Team.SendPacketToTeam(Packet);
Client.Entity.Team.RemoveMember(cPacket.PlayerUID, false);
}
}
break;
case TeamPacket.AcceptInvitation:
if (Client.Entity.Team == null)
{
foreach (IMapObject obj in Client.Screen.Objects)
{
if (obj.MapObjType == MapObjectType.Player)
{
if ((obj.Owner as GameClient).Entity.UID == cPacket.PlayerUID)
{
cPacket.PlayerUID = Client.Entity.UID;
Team PlayersTeam = (obj.Owner as GameClient).Entity.Team;
if (PlayersTeam != null)
{
if (!PlayersTeam.isTeamFull())
{
PlayersTeam.AddMember(Client);
Client.Entity.Team = PlayersTeam;
}
}
}
}
}
}
break;
case TeamPacket.AcceptJoinRequest:
if (Client.Entity.Team != null)
{
foreach (IMapObject obj in Client.Screen.Objects)
{
if (obj.MapObjType == MapObjectType.Player)
{
if ((obj.Owner as GameClient).Entity.UID == cPacket.PlayerUID)
{
cPacket.PlayerUID = Client.Entity.UID;
Team PlayersTeam = (obj.Owner as GameClient).Entity.Team;
if (PlayersTeam == null)
{
if (!Client.Entity.Team.isTeamFull())
{
Client.Entity.Team.AddMember((obj.Owner as GameClient));
(obj.Owner as GameClient).Entity.Team = Client.Entity.Team;
}
}
}
}
}
}
break;
}
}
private Team m_Team;
public Team Team
{
get
{
return this.m_Team;
}
set
{
this.m_Team = value;
}
}
public static void GameDisconnect(HybridWinsockClient Sender, object param)
{
GameClient Client = (GameClient)Sender.Wrapper;
if (Client != null)
{
if (Client.AuthPhase >= AuthPhases.GameComplete)
{
try
{
if (Client.Entity.Team != null)
{
if (Client.Entity.Team.Leader == Client)
{
Client.Entity.Team.SendPacketToTeam(new TeamPacket(TeamPacket.Dismiss, Client.Entity.UID).Serialize());
Client.Entity.Team.TeamClose();
}
else
{
Client.Entity.Team.RemoveMember(Client.Entity.UID, false);
Client.Entity.Team = null;
}
}
DataPacket remove = new DataPacket(true);
remove.UID = Client.Identifier;
remove.ID = DataPacket.RemoveEntity;
Client.SendScreen(remove, false);
}
finally
{
Database.SaveCharacter(Client);
Kernel.GamePool.ThreadSafeRemove<uint, GameClient>(Client.Identifier);
}
}
}
}
wrtr.Write("Character", "RebornCount", Client.Entity.Reborn);
SaveCharacter(Client);
wrtr.Write("Character", "RebornCount", Client.Entity.Reborn);
SaveInventory(Client);
private static void LoadEquips(GameClient Client)
{
IniFile rdr = new IniFile(DatabasePath + @"\Equips\" + Client.Username + ".ini");
for (sbyte i = 0; i < Client.Equipment.Count; i++)
{
ItemDataPacket LoadedEquip;
if (ItemDataPacket.Parse(rdr.ReadString("Equips", "Item[" + i.ToString() + "]", String.Empty), out LoadedEquip))
{
Client.Equip(LoadedEquip, (ushort)(i + 1));
}
}
}
private static void SaveEquips(GameClient Client)
{
IniFile wrtr = new IniFile(DatabasePath + @"\Equips\" + Client.Username + ".ini");
lock (Client.Equipment)
{
foreach (KeyValuePair<ushort, IConquerItem> DE in Client.Equipment)
{
wrtr.Write("Equips", "Item[" + (DE.Key - 1).ToString() + "]", DE.Value.ToString());
}
}
}
Client.Send(PacketBuilder.CharacterInfo(Client));
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConquerServer_Basic
{
public interface IShop
{
uint ID { get; set; }
string Name { get; set; }
ushort Type { get; set; }
ushort MoneyType { get; set; }
ushort ItemAmount { get; set; }
uint[] Items { get; set; }
}
public class Shop : IShop
{
private uint _ID;
private string _Name;
private ushort _Type;
private ushort _MoneyType;
private ushort _ItemAmount;
private uint[] _Items;
public uint ID { get { return this._ID; } set { this._ID = value; } }
public string Name { get { return this._Name; } set { this._Name = value; } }
public ushort Type { get { return this._Type; } set { this._Type = value; } }
public ushort MoneyType { get { return this._MoneyType; } set { this._MoneyType = value; } }
public ushort ItemAmount { get { return this._ItemAmount; } set { this._ItemAmount = value; } }
public uint[] Items { get { return this._Items; } set { this._Items = value; } }
}
}
public static Dictionary<uint, IShop> Shops = new Dictionary<uint, IShop>();
public static void LoadDatabase()
{
#if HYBRID_BUILD
// This is just so I don't need to include the database in the rar anymore :P
DatabasePath = @"C:\Users\User\Desktop\Users\ConquerServer_Basic_Rev3\bin\Debug\Database";
#else
DatabasePath = (Application.StartupPath + @"\Database");
#endif
foreach (string file in Directory.GetFiles(DatabasePath + "\\cq_npc\\"))
{
IniFile cq_npc = new IniFile(file);
INpc npc = new NpcSpawnPacket();
npc.UID = cq_npc.ReadUInt32("cq_npc", "id", 0);
npc.X = cq_npc.ReadUInt16("cq_npc", "cellx", 0);
npc.Y = cq_npc.ReadUInt16("cq_npc", "celly", 0);
npc.MapID = cq_npc.ReadUInt16("cq_npc", "mapid", 0);
npc.Type = cq_npc.ReadUInt16("cq_npc", "lookface", 0);
npc.Facing = (ConquerAngle)cq_npc.ReadUInt16("cq_npc", "type", 0);
npc.StatusFlag = cq_npc.ReadUInt16("cq_npc", "sort", 0);
GetNpcDictionary:
Dictionary<uint, INpc> npcs;
if (Kernel.Npcs.TryGetValue(npc.MapID, out npcs))
{
npcs.Add(npc.UID, npc);
}
else
{
npcs = new Dictionary<uint, INpc>();
Kernel.Npcs.Add(npc.MapID, npcs);
goto GetNpcDictionary;
}
}
//Add Shop Items
IniFile Shop = new IniFile(DatabasePath + "\\Misc\\Shop.ini");
ushort ShopCount = Shop.ReadUInt16("Header", "Amount", 0);
for (ushort i = 0; i < ShopCount; i++)
{
IShop new_shop = new Shop();
new_shop.ID = Shop.ReadUInt32("Shop" + i.ToString(), "ID", 0);
new_shop.Name = Shop.ReadString("Shop" + i.ToString(), "Name", "");
new_shop.Type = Shop.ReadUInt16("Shop" + i.ToString(), "Type", 1);
new_shop.MoneyType = Shop.ReadUInt16("Shop" + i.ToString(), "MoneyType", 0);
uint ItemAmount = Shop.ReadUInt16("Shop" + i.ToString(), "ItemAmount", 0);
new_shop.Items = new uint[ItemAmount];
for (ushort e = 0; e < ItemAmount; e++)
{
uint ItemID = Shop.ReadUInt32("Shop" + i.ToString(), "Item" + e.ToString(), 0);
new_shop.Items[e] = ItemID;
}
Kernel.Shops.Add(new_shop.ID, new_shop);
}
Console.WriteLine("Database Loaded");
}
Use the 0x3F9 Packet... Or as it is named in this - "SyncPacket"Quote:
quick question.....
for things like the job npcs or a job command is there certain way the packet should be called or is it just
i know this works well but i just want to make sure its the right wayCode:Client.Send(PacketBuilder.CharacterInfo(Client));
public static uint IPAddressToLong(string IPAddr)
{
System.Net.IPAddress oIP = System.Net.IPAddress.Parse(IPAddr);
byte[] byteIP = oIP.GetAddressBytes();
uint ip = (uint)byteIP[0] << 24;
ip += (uint)byteIP[1] << 16;
ip += (uint)byteIP[2] << 8;
ip += (uint)byteIP[3];
return ip;
}
public static bool CheckIP(string IP)
{
uint ClientIPNew = IPAddressToLong(IP);
foreach (KeyValuePair<uint, IBanCountryIP> pBannedIP in Kernel.CountryBanIP)
{
if (ClientIPNew >= pBannedIP.Value.IP_Range1 && ClientIPNew <= pBannedIP.Value.IP_Range2)
return false;
}
return true;
}
public static void AuthConnect(HybridWinsockClient Sender, object param)
{
if (CheckIP(Sender.Connection.RemoteEndPoint.ToString().Split(':')[0]) && Kernel.CountryBanIP.Count > 0)
Sender.Wrapper = new AuthClient(Sender);
else
Sender.Connection.Disconnect(false);
}
public static void LoadBannedCountryCodes()
{
string[] CountryIP = File.ReadAllLines(DatabasePath + @"\Misc\BannedCountry.ini");
if (CountryIP.Length > 0)
{
for (int i = 0; i < CountryIP.Length; i++)
{
string[] CountryIPRange = CountryIP[i].Split(' ');
if (CountryIPRange.Length == 2)
{
IBanCountryIP IP = new BanCountryIP();
IP.ID = (uint)i;
IP.IP_Range1 = Program.IPAddressToLong(CountryIPRange[0]);
IP.IP_Range2 = Program.IPAddressToLong(CountryIPRange[1]);
Kernel.CountryBanIP.Add(IP.ID, IP);
}
}
Console.WriteLine("Banned Countries has Loaded");
}
}
Database.LoadBannedCountryCodes();
public static Dictionary<uint, IBanCountryIP> CountryBanIP = new Dictionary<uint, IBanCountryIP>();
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConquerServer_Basic
{
public interface IBanCountryIP
{
uint ID { get; set; }
uint IP_Range1 { get; set; }
uint IP_Range2 { get; set; }
}
public class BanCountryIP : IBanCountryIP
{
private uint _ID;
private uint _IP_Range1;
private uint _IP_Range2;
public uint ID { get { return this._ID; } set { this._ID = value; } }
public uint IP_Range1 { get { return this._IP_Range1; } set { this._IP_Range1 = value; } }
public uint IP_Range2 { get { return this._IP_Range2; } set { this._IP_Range2 = value; } }
}
}
private static void SaveInventory(GameClient Client)
{
IniFile wrtr = new IniFile(DatabasePath + @"\Inventory\" + Client.Username + ".ini");
// I use a foreach loop because the Inventory
// variables length can change at any time technically
// seeing as it's in sync with the dictionary, but not
// neccicarly with the function calling it
// this is rare -- but I've had it happen.
sbyte i = 0;
foreach (IConquerItem Item in Client.Inventory)
{
wrtr.Write("Inventory", "Item[" + i.ToString() + "]", Item.ToString());
}
wrtr.Write("Inventory", "Count", i.ToString());
}
private static void SaveInventory(GameClient Client)
{
IniFile wrtr = new IniFile(DatabasePath + @"\Inventory\" + Client.Username + ".ini");
// I use a foreach loop because the Inventory
// variables length can change at any time technically
// seeing as it's in sync with the dictionary, but not
// neccicarly with the function calling it
// this is rare -- but I've had it happen.
sbyte i = 0;
foreach (IConquerItem Item in Client.Inventory)
{
wrtr.Write("Inventory", "Item[" + i.ToString() + "]", Item.ToString());
i++;
}
wrtr.Write("Inventory", "Count", i.ToString());
}