annuncio

Comprimi
Ancora nessun annuncio.

Per i GM

Comprimi
Questa discussione è chiusa.
X
X
 
  • Filtro
  • Ora
  • Visualizza
Elimina tutto
nuovi messaggi

  • Per i GM

    Tempo fa Gramoz scrisse di un sistema per far leggere alla map di Steam le ally tra gilde, ho visto solo ora che l'autore di UOS mi ha mandato un messaggio con scritto questo se può in qualche modo esservi utile:

    This can be implemented by server administrators, modifying server scripts to send alliance members along with guild members. I have not tested but the changes below should work:

    Scripts/Misc/MapUO.cs
    codice:
        using System;
        using System.Collections.Generic;
        using Server;
        using Server.Network;
        using Server.Mobiles;
        using Server.Engines.PartySystem;
        using Server.Guilds;
         
        namespace Server.Misc
        {
        public static partial class MapUO
        {
        private static class Settings
        {
        public const bool PartyTrack = true;
        public const bool GuildTrack = true;
        public const bool GuildHitsPercent	= true;
        public const bool AllianceTrack = true;
        }
         
        public static void Initialize()
        {
        if ( Settings.PartyTrack )
        ProtocolExtensions.Register( 0x00, true, new OnPacketReceive( OnPartyTrack ) );
         
        if ( Settings.GuildTrack )
        ProtocolExtensions.Register( 0x01, true, new OnPacketReceive( OnGuildTrack ) );
        }
         
        private static void OnPartyTrack( NetState state, PacketReader pvSrc )
        {
        Mobile from = state.Mobile;
        Party party = Party.Get( from );
         
        if ( party != null )
        {
        Packets.PartyTrack packet = new Packets.PartyTrack( from, party );
         
        if ( packet.UnderlyingStream.Length > 8 )
        state.Send( packet );
        }
        }
         
        private static void OnGuildTrack( NetState state, PacketReader pvSrc )
        {
        Mobile from = state.Mobile;
        Guild guild = from.Guild as Guild;
         
        if ( guild != null )
        {
        bool locations = pvSrc.ReadByte() != 0;
         
        List<Mobile> members = new List<Mobile>( guild.Members );
         
        if ( Settings.AllianceTrack )
        {
        if ( Guild.NewGuildSystem )
        {
        AllianceInfo info = guild.Alliance;
         
        if ( info != null )
        {
        foreach ( Guild g in info.Members )
        members.AddRange( g.Members );
        }
        }
        else
        {
        foreach ( Guild g in guild.Allies )
        members.AddRange( g.Members );
        }
        }
         
        Packets.GuildTrack packet = new Packets.GuildTrack( from, members, locations );
         
        if ( packet.UnderlyingStream.Length > ( locations ? 9 : 5 ) )
        state.Send( packet );
        }
        else
        state.Send( new Packets.GuildTrack() );
        }
         
        private static class Packets
        {
        public sealed class PartyTrack : ProtocolExtension
        {
        public PartyTrack( Mobile from, Party party ) : base( 0x01, ( ( party.Members.Count - 1 ) * 9 ) + 4 )
        {
        for ( int i = 0; i < party.Members.Count; ++i )
        {
        PartyMemberInfo pmi = (PartyMemberInfo)party.Members[i];
         
        if ( pmi == null || pmi.Mobile == from )
        continue;
         
        Mobile mob = pmi.Mobile;
         
        if ( Utility.InUpdateRange( from, mob ) && from.CanSee( mob ) )
        continue;
         
        m_Stream.Write( (int) mob.Serial );
        m_Stream.Write( (short) mob.X );
        m_Stream.Write( (short) mob.Y );
        m_Stream.Write( (byte) ( mob.Map == null ? 0 : mob.Map.MapID ) );
        }
         
        m_Stream.Write( (int) 0 );
        }
        }
         
        public sealed class GuildTrack : ProtocolExtension
        {
        public GuildTrack() : base( 0x02, 5 )
        {
        m_Stream.Write( (byte) 0 );
        m_Stream.Write( (int) 0 );
        }
         
        public GuildTrack( Mobile from, List<Mobile> members, bool locations ) : base( 0x02, ( ( members.Count ) * ( locations ? 10 : 4 ) ) + 5 )
        {
        m_Stream.Write( (byte) ( locations ? 1 : 0 ) );
         
        for ( int i = 0; i < members.Count; ++i )
        {
        Mobile mob = members[i];
         
        if ( mob == null || mob == from || mob.NetState == null )
        continue;
         
        if ( locations && Utility.InUpdateRange( from, mob ) && from.CanSee( mob ) )
        continue;
         
        m_Stream.Write( (int) mob.Serial );
         
        if ( locations )
        {
        m_Stream.Write( (short) mob.X );
        m_Stream.Write( (short) mob.Y );
        m_Stream.Write( (byte) ( mob.Map == null ? 0 : mob.Map.MapID ) );
         
        if ( Settings.GuildHitsPercent && mob.Alive )
        m_Stream.Write( (byte) ( mob.Hits / Math.Max( mob.HitsMax, 1.0 ) * 100 ) );
        else
        m_Stream.Write( (byte) 0 );
        }
        }
         
        m_Stream.Write( (int) 0 );
        }
        }
        }
        }
        }
    Scripts/Misc/Guild.cs
    codice:
        	#region Alliances
        public class AllianceInfo
        {
        ....
        public List<Guild> Members
        {
        get { return m_Members; }
        }
        }
        #endregion
        ...
    updated, I was using an old guild system alliance definition, now it should work with both old/new guild system.

  • #2
    ora viene flora e ti dice che tu non sei qualificato nel dare consigli ai tecnici

    Commenta


    • #3
      Lo aveva appunto già segnalato...e avevo già risposto.

      Le modifiche sono già state fatte ed è in fase di test sul TC per evitare che ci siano incompatibilità. Abbiamo già abbastanza cose da risolvere e non vorremmo aggiungerne un'altra solo per non aver testato come si deve ^^

      Chiudo

      Onision

      Commenta

      Sto operando...
      X