QuestBook
Napsal: 31.08.2010 16:20:56
Pri poklikani na svitek na paperdollu otevre questbook. Ucini questbook neviditelnym v baglu pokud je zobrazen jako "maly" (pro zmenu zpet na velky je treba a) odstranit skript b) smazat UO.WaitMenu( "Moznosti Quest Booku", "Vypis hotovych questu" );)
Kód: Vybrat vše
using System;
using System.Linq;
using Phoenix.Communication;
using Phoenix.WorldData;
namespace Phoenix.Scripts {
public class QuestBook {
private const ushort BookGraphic = 0x1EA7;
private const ushort BookAltGraphic = 0x0FBE;
private const ushort BookColor = 0x0B7A;
[ClientMessageHandler( 0xb8 )]
public CallbackResult OnProfileRequest( byte[] data, CallbackResult prevResult ) {
UOItem book = World.Player.Backpack.Items.Where( i => i.Color == BookColor && ( i.Graphic == BookGraphic || i.Graphic == BookAltGraphic ) ).FirstOrDefault();
if ( book.Exist ) {
UO.WaitMenu( "Moznosti Quest Booku", "Vypis hotovych questu" );
book.Use();
}
return CallbackResult.Eat;
}
[ServerMessageHandler( 0x3c, Priority = CallbackPriority.Lowest )]
public CallbackResult OnAddMultipleItems( byte[] data, CallbackResult prevResult ) {
PacketReader reader = new PacketReader( data );
reader.Skip( 3 ); // opcode, size
ushort itemCount = reader.ReadUInt16();
for ( int i = 0; i < itemCount; i++ ) {
reader.Skip( 4 ); // serial
ushort graphic = reader.ReadUInt16();
reader.Skip( 7 ); // offset, amount, x, y
uint container = reader.ReadUInt32();
ushort color = reader.ReadUInt16();
if ( graphic != BookGraphic || color != BookColor || container != World.Player.Backpack )
continue;
PacketWriter writer = new PacketWriter( 0x3c );
writer.WriteBlockSize();
writer.Write( ( ushort )( itemCount - 1 ) );
byte[] buffer = new byte[ ( itemCount - 1 ) * 19 ];
Array.Copy( data, 5, buffer, 0, data.Length - 5 - 19 );
int currentOffset = 5 + i * 19;
int lastOffset = 5 + ( itemCount - 1 ) * 19;
if ( currentOffset != lastOffset )
Array.Copy( data, lastOffset, buffer, currentOffset - 5, 19 );
writer.Write( buffer );
Core.SendToClient( writer.GetBytes(), false );
return CallbackResult.Sent;
}
return prevResult;
}
[ServerMessageHandler( 0x25, Priority = CallbackPriority.Lowest )]
public CallbackResult OnItemAddedToContainer( byte[] data, CallbackResult prevResult ) {
PacketReader reader = new PacketReader( data );
reader.Skip( 1 ); // opcode
uint serial = reader.ReadUInt32();
ushort graphic = reader.ReadUInt16();
reader.Skip( 7 ); // offset, stack, x, y
uint container = reader.ReadUInt32();
ushort color = reader.ReadUInt16();
if ( graphic == BookGraphic && color == BookColor && container == World.Player.Backpack ) {
if ( World.GetItem( serial ).Exist )
UO.Hide( serial );
return CallbackResult.Eat;
}
return CallbackResult.Normal;
}
}
}