mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-04-02 19:42:05 -04:00
Added the combo and proc systems Added scripts for most weaponskill and spells as well as some abilities and status effects Added support for multihit attacks Added AbilityState for abilities Added hiteffects that change based on an attack's parameters Added positionals Changed how targeting works for battlecommands Fixed bug that occurred when moving or swapping hotbar commands Fixed bug that occurred when losing status effects
71 lines
2.2 KiB
C#
71 lines
2.2 KiB
C#
using System;
|
|
using System.Net.Sockets;
|
|
|
|
using FFXIVClassic.Common;
|
|
using System.Collections.Concurrent;
|
|
using System.Net;
|
|
using System.Collections.Generic;
|
|
using FFXIVClassic_Map_Server.packets.WorldPackets.Send;
|
|
|
|
namespace FFXIVClassic_Map_Server.dataobjects
|
|
{
|
|
class ZoneConnection
|
|
{
|
|
//Connection stuff
|
|
public Socket socket;
|
|
public byte[] buffer;
|
|
private BlockingCollection<SubPacket> SendPacketQueue = new BlockingCollection<SubPacket>(1000);
|
|
public int lastPartialSize = 0;
|
|
|
|
public void QueuePacket(SubPacket subpacket)
|
|
{
|
|
if(SendPacketQueue.Count == 1000)
|
|
FlushQueuedSendPackets();
|
|
|
|
SendPacketQueue.Add(subpacket);
|
|
}
|
|
|
|
public void FlushQueuedSendPackets()
|
|
{
|
|
if (socket == null || !socket.Connected)
|
|
return;
|
|
|
|
while (SendPacketQueue.Count > 0)
|
|
{
|
|
SubPacket packet = SendPacketQueue.Take();
|
|
|
|
byte[] packetBytes = packet.GetBytes();
|
|
|
|
try
|
|
{
|
|
socket.Send(packetBytes);
|
|
}
|
|
catch (Exception e)
|
|
{ Program.Log.Error("Weird case, socket was d/ced: {0}", e); }
|
|
}
|
|
}
|
|
|
|
public String GetAddress()
|
|
{
|
|
return String.Format("{0}:{1}", (socket.RemoteEndPoint as IPEndPoint).Address, (socket.RemoteEndPoint as IPEndPoint).Port);
|
|
}
|
|
|
|
public bool IsConnected()
|
|
{
|
|
return (socket.Poll(1, SelectMode.SelectRead) && socket.Available == 0);
|
|
}
|
|
|
|
public void Disconnect()
|
|
{
|
|
if (socket.Connected)
|
|
socket.Disconnect(false);
|
|
}
|
|
|
|
public void RequestZoneChange(uint sessionId, uint destinationZoneId, byte spawnType, float spawnX, float spawnY, float spawnZ, float spawnRotation)
|
|
{
|
|
WorldRequestZoneChangePacket.BuildPacket(sessionId, destinationZoneId, spawnType, spawnX, spawnY, spawnZ, spawnRotation).DebugPrintSubPacket();
|
|
QueuePacket(WorldRequestZoneChangePacket.BuildPacket(sessionId, destinationZoneId, spawnType, spawnX, spawnY, spawnZ, spawnRotation));
|
|
}
|
|
}
|
|
}
|