UO Chile

Classic Ultima Online – uochile.homeip.net

Implementación de las reglas de los Young en Felucca

Después de un poco de craneo, algo de codigo y un resto de testeo, implementé las reglas de los Youngs en Felucca:

  • Los youngs no pueden ser atacados por jugadores viejos y vice versa.
  • Los youngs no pueden ser atacados por monstruos a menos que ellos inicien el combate.
  • Los youngs no pueden realizar actos beneficos sobre jugadores viejos.
  • Los jugadores viejos si pueden realizar actos beneficos sobre los youngs.
  • Los youngs si pueden realizar actos beneficos entre si, pero no atacarse.

Mas algunas reglas especiales del server:

  • Los youngs y pks pueden viajar usando Recall, Sacred Journey y Moongates hacia cualquier destino (viajar a Felucca no impone ninguna limitación).

Por si a alguien le interesa implementar este sistema, el codigo es el siguiente: Reemplazar los dos metodos (beneficial y harmful) en Notoriety.cs, el codigo relevante esta en rojo (para modificar Recall, Sacred Journey y Moongates solo basta comentar las lineas correspondientes -las que tienen el texto ‘you cannot travel, etc’ en los codigos de cada hechizo). El codigo siguiente es válido para cualquier mapa con reglas de Felucca:

public static bool Mobile_AllowBeneficial( Mobile from, Mobile target )
 {
 if( from == null || target == null || from.AccessLevel > AccessLevel.Player || target.AccessLevel > AccessLevel.Player )
 return true;

 Map map = from.Map;

 #region Factions
 Faction targetFaction = Faction.Find( target, true );

 if( (!Core.ML || map == Faction.Facet) && targetFaction != null )
 {
 if( Faction.Find( from, true ) != targetFaction )
 return false;
 }
 #endregion

 #region Youngs en Felucca
 // Young protegidos en Felucca

 if (from.Player && target.Player && ((PlayerMobile)from).Young && !((PlayerMobile)target).Young)
 return false;   // Youngs no pueden ayudar a jugadores viejos (comprobarlo)
 //--------------------------------
 #endregion

 if ( map != null && (map.Rules & MapRules.BeneficialRestrictions) == 0 )
 return true; // In felucca, anything goes

 if( !from.Player )
 return true; // NPCs have no restrictions

 if( target is BaseCreature && !((BaseCreature)target).Controlled )
 return false; // Players cannot heal uncontrolled mobiles

 if( from is PlayerMobile && ((PlayerMobile)from).Young && (!(target is PlayerMobile) || !((PlayerMobile)target).Young) )
 return false; // Young players cannot perform beneficial actions towards older players

 Guild fromGuild = from.Guild as Guild;
 Guild targetGuild = target.Guild as Guild;

 if( fromGuild != null && targetGuild != null && (targetGuild == fromGuild || fromGuild.IsAlly( targetGuild )) )
 return true; // Guild members can be beneficial

 return CheckBeneficialStatus( GetGuildStatus( from ), GetGuildStatus( target ) );
 }

 public static bool Mobile_AllowHarmful( Mobile from, Mobile target )
 {
 if( from == null || target == null || from.AccessLevel > AccessLevel.Player || target.AccessLevel > AccessLevel.Player )
 return true;

 #region Youngs en Felucca

 BaseCreature bcreature = from as BaseCreature;
 if (!from.Player && !(bcreature != null && bcreature.GetMaster() != null && bcreature.GetMaster().AccessLevel == AccessLevel.Player))
 {
 if (!CheckAggressor(from.Aggressors, target) && !CheckAggressed(from.Aggressed, target) && target is PlayerMobile && ((PlayerMobile)target).CheckYoungProtection(from))
 return false;   // Uncontrolled NPCs are only restricted by the young system

 }

 if (from.Player && target.Player && (((PlayerMobile)target).Young || ((PlayerMobile)from).Young))
 return false;   // Jugadores viejos no pueden atacar a Youngs y vice versa

 //--------------------
 #endregion

 Map map = from.Map;

 if( map != null && (map.Rules & MapRules.HarmfulRestrictions) == 0 )
 return true; // In felucca, anything goes

 BaseCreature bc = from as BaseCreature;

 if( !from.Player && !(bc != null && bc.GetMaster() != null && bc.GetMaster().AccessLevel == AccessLevel.Player ) )
 {
 if( !CheckAggressor( from.Aggressors, target ) && !CheckAggressed( from.Aggressed, target ) && target is PlayerMobile && ((PlayerMobile)target).CheckYoungProtection( from ) )
 return false;

 return true; // Uncontrolled NPCs are only restricted by the young system
 }

 Guild fromGuild = GetGuildFor( from.Guild as Guild, from );
 Guild targetGuild = GetGuildFor( target.Guild as Guild, target );

 if( fromGuild != null && targetGuild != null && (fromGuild == targetGuild || fromGuild.IsAlly( targetGuild ) || fromGuild.IsEnemy( targetGuild )) )
 return true; // Guild allies or enemies can be harmful

 if( target is BaseCreature && (((BaseCreature)target).Controlled || (((BaseCreature)target).Summoned && from != ((BaseCreature)target).SummonMaster)) )
 return false; // Cannot harm other controlled mobiles

 if( target.Player )
 return false; // Cannot harm other players

 if( !(target is BaseCreature && ((BaseCreature)target).InitialInnocent) )
 {
 if( Notoriety.Compute( from, target ) == Notoriety.Innocent )
 return false; // Cannot harm innocent mobiles
 }

 return true;
 }
posted by Kamon in Cambios al servidor and have No Comments
Tags:

Place your comment

Please fill your data and comment below.
Name
Email
Website
Your comment