TreasureMaps
Datum: 27/07/2011 14:25:21
Staženo: 812x
Popis:
Více info: http://www.darkparadise.cz/Forum/viewtopic.php?f=67&t=4123
Autor: Wizzy
V jurnálu napíše souřadnice mapy...
Po otevreni mapy to vyhodi sipku k mistu kde je
,track
- vypinani sipky k mape
Příkazy:
- ,track
- ,track "ushort x" " ushort y"
Kód:
using System;
using Phoenix.Communication;
namespace Phoenix.Scripts
{
public class Tracker
{
private const float MapSizeMultiplier = 3f;
private const ushort MapZoom = 720;
[Command]
public void Track()
{
Track(false, 0, 0);
}
[Command]
public void Track(ushort x, ushort y)
{
Track(true, x, y);
}
private void Track(bool enable, ushort x, ushort y)
{
PacketWriter writer = new PacketWriter(0xba);
writer.Write(enable ? (byte)0x1 : (byte)0x0);
writer.Write(x);
writer.Write(y);
Core.SendToClient(writer.GetBytes());
}
[ServerMessageHandler(0x90)]
public CallbackResult OnMapInfo(byte[] data, CallbackResult prevResult)
{
PacketReader reader = new PacketReader(data);
reader.Skip(1); // opcode
uint serial = reader.ReadUInt32();
ushort gump = reader.ReadUInt16();
ushort ux = reader.ReadUInt16();
ushort uy = reader.ReadUInt16();
ushort lx = reader.ReadUInt16();
ushort ly = reader.ReadUInt16();
ushort width = reader.ReadUInt16();
ushort height = reader.ReadUInt16();
ushort x = (ushort)(ux + 180 * (lx - ux > 361 ? -1 : 1));
ushort y = (ushort)(uy + 180 * (ly - uy > 361 ? -1 : 1));
UO.PrintInformation("Map is located at {0},{1}", x, y);
Track(x, y);
PacketWriter writer = new PacketWriter(0x90);
writer.Write(serial);
writer.Write(gump);
writer.Write((ushort)(x - MapZoom));
writer.Write((ushort)(y - MapZoom));
writer.Write((ushort)(x + MapZoom));
writer.Write((ushort)(y + MapZoom));
writer.Write((ushort)(width * MapSizeMultiplier));
writer.Write((ushort)(height * MapSizeMultiplier));
Core.SendToClient(writer.GetBytes());
return CallbackResult.Sent;
}
[ServerMessageHandler(0x56)]
public CallbackResult OnPinInfo(byte[] data, CallbackResult prevResult)
{
if (data[5] > 4)
return prevResult;
ushort x = ByteConverter.BigEndian.ToUInt16(data, 7);
ushort y = ByteConverter.BigEndian.ToUInt16(data, 9);
Array.Copy(ByteConverter.BigEndian.GetBytes((ushort)(x * MapSizeMultiplier)), 0, data, 7, 2);
Array.Copy(ByteConverter.BigEndian.GetBytes((ushort)(y * MapSizeMultiplier)), 0, data, 9, 2);
return prevResult;
}
[ClientMessageHandler(0x56)]
public CallbackResult OnPinAction(byte[] data, CallbackResult prevResult)
{
if (data[5] > 4)
return prevResult;
ushort x = ByteConverter.BigEndian.ToUInt16(data, 7);
ushort y = ByteConverter.BigEndian.ToUInt16(data, 9);
Array.Copy(ByteConverter.BigEndian.GetBytes((ushort)(x / MapSizeMultiplier)), 0, data, 7, 2);
Array.Copy(ByteConverter.BigEndian.GetBytes((ushort)(y / MapSizeMultiplier)), 0, data, 9, 2);
return prevResult;
}
}
}

