Demande d'aide pour corrigée un script

Demande d'aide pour corrigée un script

Post by Sharon, la vagabonde - November 20, 2006 at 7:36 AM

Bon, j'ai pu testé ces sorts et y'en a qui sont vraiment buger...
Faut comprendre que la magie druidique est une toute nouvelle magie et non une magie "officiel", donc pour cela qu'il a quelques bugs.

Donc si quelqu'un pourrait me donnée un coup de main pour faire quelques petites changements... Surtout s'ils ont un serveur test pour vérifier si tous va bien après la correction...

Une mise a jour s'en vien bientot, faudrait que se soit corrigée avant cela.

D'abords, le livre de druide.... Seul la classe druide peut l'ouvrir.
J'aimerait que n'importe quel classe puisse l'ouvrir [suprimée la ligne est sans danger ?] Ou bien, mettre un minimum de 1 point d'aptitude en magie naturel pour l'ouvrir.

using System;
using Server.Mobiles;
using Server.Network;
using Server.Gumps;
using Server.Spells;
using Server.RaceSystem;

namespace Server.Items
{
public class DruidSpellbook : Spellbook
{
public override SpellbookType SpellbookType{ get{ return SpellbookType.Druid; } }
public override int BookOffset{ get{ return 551; } }
public override int BookCount{ get{ return 16; } }

  public override Item Dupe( int amount )  
  {  
     Spellbook book = new DruidSpellbook();

     book.Content = this.Content;

     return base.Dupe( book, amount );  
  }

  [Constructable]  
  public DruidSpellbook() : this( (ulong)0 )  
  {  
  }

  [Constructable]  
  public DruidSpellbook( ulong content ) : base( content, 0xEFA )  
  {  
     Hue = 1415;  
     Name = "Livre de nature";  
  }

  public override void OnDoubleClick( Mobile from )  
  {  

\t\t if ( ((RacePlayerMobile)from).Classe == ClasseType.Druide)
\t\t {
\t\t\tif ( from.InRange( GetWorldLocation(), 1 ) )
\t\t\t{
\t\t\t\tfrom.CloseGump( typeof( DruidSpellbookGump ) );
\t\t\t\tfrom.SendGump( new DruidSpellbookGump( from, this ) );
\t\t\t}
\t\t }
\t\t else
\t\t {
\t\t\t from.SendMessage("Vous ne comprenez rien...");
\t\t }
}

  public DruidSpellbook( Serial serial ) : base( serial )  
  {  
  }

  public override void Serialize( GenericWriter writer )  
  {  
     base.Serialize( writer );

     writer.Write( (int) 0 ); // version  
  }

  public override void Deserialize( GenericReader reader )  
  {  
     base.Deserialize( reader );

     int version = reader.ReadInt();  
  }  

}
}

Le 2e a modifier: Source de vie
Je vien de voir qu'il a un espèce de timer qui ne limite qu'a 1 heal tous les 20 a 60 secondes... En plus, cela heal tous autour, meme les ennemis/monstres...

Ce que je voudrais faire:

using System;
using System.Collections;
using Server.Network;
using Server.Items;
using Server.Mobiles;
using Server.Targeting;
using Server.Spells.Druid;

namespace Server.Spells.Druid
{
public class SpringOfLifeSpell : DruidSpell
{
private static SpellInfo m_Info = new SpellInfo(
"Source de vie", "En Sepa Aete",
SpellCircle.Fourth,
204,
9061,
false,
Reagent.SpringWater
);

  public override double CastDelay{ get{ return 1.0; } }  
  public override double RequiredSkill{ get{ return 5.0; } }  
  public override int RequiredMana{ get{ return 10; } }

  public SpringOfLifeSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info )  
  {  
  }

  public override void OnCast()  
  {  
       if (Caster is RacePlayerMobile) { int apt_besoin = 8;  
      RacePlayerMobile Casteur = (RacePlayerMobile)Caster;  
      if &#40;Casteur&#46;Magie_naturelle < apt_besoin&#41;  
      &#123;  
          Casteur&#46;SendMessage&#40;"Vos mains tremblent, vous ratez votre sort&#46;"&#41;;  
          Casteur&#46;SendMessage&#40;"Vous avez besoin de minimum " + apt_besoin + " en magie naturelle&#46;"&#41;;  
          return;  
      &#125;  
     &#125;Caster&#46;Target = new InternalTarget&#40; this &#41;;  
  &#125;

  public void Target&#40; IPoint3D p &#41;  
  &#123;  
     if &#40; !Caster&#46;CanSee&#40; p &#41; &#41;  
     &#123;  
        Caster&#46;SendLocalizedMessage&#40; 500237 &#41;; // Target can not be seen&#46;  
     &#125;  
     else if &#40; CheckSequence&#40;&#41; &#41;  
     &#123;  
        SpellHelper&#46;Turn&#40; Caster, p &#41;;

        SpellHelper&#46;GetSurfaceTop&#40; ref p &#41;;

        ArrayList targets = new ArrayList&#40;&#41;;

        IPooledEnumerable eable = Caster&#46;Map&#46;GetMobilesInRange&#40; new Point3D&#40; p &#41;, 3 &#41;;

        foreach &#40; Mobile m in eable &#41;  
        &#123;  
           if &#40; Caster&#46;CanBeBeneficial&#40; m, false &#41; &#41;  
              targets&#46;Add&#40; m &#41;;  
        &#125;

        eable&#46;Free&#40;&#41;;

        Effects&#46;PlaySound&#40; p, Caster&#46;Map, 0x11 &#41;;

        int val = &#40;int&#41;&#40;Caster&#46;Skills&#91;CastSkill&#93;&#46;Value/20&#46;0 + 5&#41;;

        if &#40; targets&#46;Count > 0 &#41;  
        &#123;  
           for &#40; int i = 0; i < targets&#46;Count; ++i &#41;  
           &#123;  
              Mobile m = &#40;Mobile&#41;targets&#91;i&#93;;

              if &#40; m&#46;BeginAction&#40; typeof&#40; SpringOfLifeSpell &#41; &#41; &#41;  
              &#123;  
                 Caster&#46;DoBeneficial&#40; m &#41;;  
                 m&#46;FixedParticles&#40; 0x375A, 9, 20, 5027, EffectLayer&#46;Head &#41;;

                 int toHeal = &#40;int&#41;&#40;Caster&#46;Skills&#91;DamageSkill&#93;&#46;Value * 0&#46;8&#41;;  
                 toHeal += Utility&#46;Random&#40; 1, 15 &#41;;

                 m&#46;Heal&#40; toHeal &#41;;

                 new InternalTimer&#40; m, Caster, val &#41;&#46;Start&#40;&#41;;  
                 m&#46;FixedParticles&#40; 0x375A, 9, 20, 5027, EffectLayer&#46;Waist &#41;;  
                 m&#46;PlaySound&#40; 0xAF &#41;;  
              &#125;  
           &#125;  
        &#125;  
     &#125;

     FinishSequence&#40;&#41;;  
  &#125;

  private class InternalTimer &#58; Timer  
  &#123;  
     private Mobile m_Owner;  
     private int m_Val;

     public InternalTimer&#40; Mobile target, Mobile caster, int val &#41; &#58; base&#40; TimeSpan&#46;FromSeconds&#40; 0 &#41; &#41;  
     &#123;  
        double time = caster&#46;Skills&#91;SkillName&#46;AnimalLore&#93;&#46;Value * 1&#46;2;  
        if &#40; time > 300 &#41;  
           time = 300;  
        Delay = TimeSpan&#46;FromSeconds&#40; time &#41;;  
        Priority = TimerPriority&#46;TwoFiftyMS;

        m_Owner = target;  
        m_Val = val;  
     &#125;

     protected override void OnTick&#40;&#41;  
     &#123;  
        m_Owner&#46;EndAction&#40; typeof&#40; SpringOfLifeSpell &#41; &#41;;  
      
         
     &#125;  
  &#125;

  private class InternalTarget &#58; Target  
  &#123;  
     private SpringOfLifeSpell m_Owner;

     public InternalTarget&#40; SpringOfLifeSpell owner &#41; &#58; base&#40; 12, true, TargetFlags&#46;None &#41;  
     &#123;  
        m_Owner = owner;  
     &#125;

     protected override void OnTarget&#40; Mobile from, object o &#41;  
     &#123;  
        IPoint3D p = o as IPoint3D;

        if &#40; p != null &#41;  
           m_Owner&#46;Target&#40; p &#41;;  
     &#125;

     protected override void OnTargetFinish&#40; Mobile from &#41;  
     &#123;  
        m_Owner&#46;FinishSequence&#40;&#41;;  
     &#125;  
  &#125;  

}
}

Et le dernier pour le moment: Eruption
Eruption est très bon, mais blesse tous le monde autour, y comprit le casteur de sort et les allié... Rendant donc le sort vraiment innutile.

Ce que j'aimerais faire:

using System;
using System.Collections;
using Server.Network;
using Server.Items;
using Server.Targeting;
using Server.Mobiles;

namespace Server.Spells.Druid
{
public class VolcanicEruptionSpell : DruidSpell
{
private static SpellInfo m_Info = new SpellInfo(
"Eruption", "Vauk Ohm En Tia Crur",
SpellCircle.Eighth,
245,
9042,
false,
Reagent.SulfurousAsh,
Reagent.DestroyingAngel
);

  public override double CastDelay&#123; get&#123; return 2&#46;0; &#125; &#125;  
  public override double RequiredSkill&#123; get&#123; return 60&#46;0; &#125; &#125;  
  public override int RequiredMana&#123; get&#123; return 60; &#125; &#125;

  public VolcanicEruptionSpell&#40; Mobile caster, Item scroll &#41; &#58; base&#40; caster, scroll, m_Info &#41;  
  &#123;  
  &#125;

  public override void OnCast&#40;&#41;  
  &#123;  
       if &#40;Caster is RacePlayerMobile&#41; &#123; int apt_besoin = 37;  
      RacePlayerMobile Casteur = &#40;RacePlayerMobile&#41;Caster;  
      if &#40;Casteur&#46;Magie_naturelle < apt_besoin&#41;  
      &#123;  
          Casteur&#46;SendMessage&#40;"Vos mains tremblent, vous ratez votre sort&#46;"&#41;;  
          Casteur&#46;SendMessage&#40;"Vous avez besoin de minimum " + apt_besoin + " en magie naturelle&#46;"&#41;;  
          return;  
      &#125;  
     &#125;Caster&#46;Target = new InternalTarget&#40; this &#41;;  
  &#125;

  public void Target&#40; IPoint3D p &#41;  
  &#123;  
     if &#40; !Caster&#46;CanSee&#40; p &#41; &#41;  
     &#123;  
        Caster&#46;SendLocalizedMessage&#40; 500237 &#41;; // Target can not be seen&#46;  
     &#125;  
     else if &#40; SpellHelper&#46;CheckTown&#40; p, Caster &#41; && CheckSequence&#40;&#41; &#41;  
     &#123;  
        SpellHelper&#46;Turn&#40; Caster, p &#41;;

        if &#40; p is Item &#41;  
           p = &#40;&#40;Item&#41;p&#41;&#46;GetWorldLocation&#40;&#41;;

        double damage = Utility&#46;Random&#40; 27, 22 &#41;;

        ArrayList targets = new ArrayList&#40;&#41;;

        IPooledEnumerable eable = Caster&#46;Map&#46;GetMobilesInRange&#40; new Point3D&#40; p &#41;, 1 + &#40;int&#41;&#40;Caster&#46;Skills&#91;DamageSkill&#93;&#46;Value / 10&#46;0&#41; &#41;;

        foreach &#40; Mobile m in eable &#41;  
        &#123;  
           if &#40; SpellHelper&#46;ValidIndirectTarget&#40; Caster, m &#41; && Caster&#46;CanBeHarmful&#40; m, false &#41; &#41;  
              targets&#46;Add&#40; m &#41;;  
        &#125;

        eable&#46;Free&#40;&#41;;

        if &#40; targets&#46;Count > 0 &#41;  
        &#123;  
           //damage /= targets&#46;Count; // ~ divides damage between targets, kinda sux

           for &#40; int i = 0; i < targets&#46;Count; ++i &#41;  
           &#123;  
              Mobile m = &#40;Mobile&#41;targets&#91;i&#93;;

              double toDeal = damage;

              if &#40; CheckResisted&#40; m &#41; &#41;  
              &#123;  
                 toDeal *= 0&#46;7;

                 m&#46;SendLocalizedMessage&#40; 501783 &#41;; // You feel yourself resisting magical energy&#46;  
              &#125;

              Caster&#46;DoHarmful&#40; m &#41;;  
              SpellHelper&#46;Damage&#40; this, m, toDeal, 50, 100, 0, 0, 0 &#41;;

              m&#46;FixedParticles&#40; 0x3709, 20, 10, 5044, EffectLayer&#46;RightFoot &#41;;  
              m&#46;PlaySound&#40; 0x21F &#41;;  
              m&#46;FixedParticles&#40; 0x36BD, 10, 30, 5052, EffectLayer&#46;Head &#41;;  
              m&#46;PlaySound&#40; 0x208 &#41;;

           &#125;  
        &#125;  
     &#125;

     FinishSequence&#40;&#41;;  
  &#125;

  private class InternalTarget &#58; Target  
  &#123;  
     private VolcanicEruptionSpell m_Owner;

     public InternalTarget&#40; VolcanicEruptionSpell owner &#41; &#58; base&#40; 12, true, TargetFlags&#46;None &#41;  
     &#123;  
        m_Owner = owner;  
     &#125;

     protected override void OnTarget&#40; Mobile from, object o &#41;  
     &#123;  
        IPoint3D p = o as IPoint3D;

        if &#40; p != null &#41;  
           m_Owner&#46;Target&#40; p &#41;;  
     &#125;

     protected override void OnTargetFinish&#40; Mobile from &#41;  
     &#123;  
        m_Owner&#46;FinishSequence&#40;&#41;;  
     &#125;  
  &#125;  

}
}


Post by Orkah, Ad - November 20, 2006 at 10:05 AM

Il serait bien aussi de rectifier ceci. Sertain sort druinique demande de la Magery pour leur efficasité. Ex: Creux et peux être d'autre sort, je ne le sais pas, je n'est pas accets a ceux ci.

Donc un druide na pas de Magery ce qui est un peux ridicule. Peux être modifié cela pour du spiritisme ? ceci rajouterait un + a la classe en leur permettent de se gérir avec le spiritisme, ou tout simplement se fier au % En Druinisme que le joueur a (Nécromancie).

Aussi, le sort Invocation d'animal, ces bien joli qu'il soit Ramdom mais pour le role play ces plutot poche. Créé un menu comme le sort de stranformation des mage. Ce qui permeterait de choisir l'animal que l'on peux invoquer, plus notre % en druinique est élevé plus les animal invocable son puissent. Ou un menu très simple comme celui de Nécromancie pour plus de fasilité de scriptage. Le Maxium ne devrait pas dépassé la puissence d'un loup sombre, pour resté raisonable.

Cinon pour en revenir au sujet principal, je conait rien en script donc je ne pourait pas t'être util pour cela, désolé mais jespère que ces informations vous seront util.


Post by Mr. Morgathys - November 20, 2006 at 10:17 AM

Une question me trotte à la tête.
Est ce vraiment ça place qu'un joueur joue dans les codes, sur les effets des sorts du serveur, affiché sur le forum publique ?

Je suis peu être dans le champs


Post by Sharon, la vagabonde - November 20, 2006 at 10:19 AM

Le bonus pour les druides est Connaissance animal
+2 Connaissance animal devrait remplacée le +1 soin animal dans la magie naturel


Post by Conan - November 20, 2006 at 5:40 PM

Il y'a un forum exprès pour ce genre de discution, je peut savoir ce que ça fabriquait dans le forum "bugs et problèmes" ?


Post by Feydanith, dit la Carpe - November 20, 2006 at 8:01 PM

Parce qu'ici on ne s'occupe que des artisanats


Post by Sharon, la vagabonde - November 20, 2006 at 8:41 PM

Sa je dissais a Mélodie, mais elle dissait que s'était pas a sa place ici et voulait rien s'avoir... J'avais crée un topic demandant la meme chose ici meme, mais il a été effacée...

Donc seul autre endroit je voyais c'est le forum bugs et problème...
J'iras pas demander correction sur le forum RunUO tous de meme...


Post by Coordinateur Apoc - November 21, 2006 at 5:47 AM

Pour le Livre de Druide dans mon script la ligne n'existe pas donc ca ira, les script qu'on ta donné devait dater de longtemps.


Post by Sharon, la vagabonde - November 21, 2006 at 7:57 AM

Non puisque in-game, faut obligatoirement etre druide pour ouvrir le livre de druide [Test a l'appuis]

Donc sa doit etre le meme script qui est ici présentement
Regarde dans: DruidSpellBook.cs

Mais c'est surtout "Source de vie" que j'aimerait corrigée, meme si on mettrait le meme script que le sort great heal sauf sous un autre nom. Car le heal des druides actuel est plutot innéficase comparrer a Great Heal qui est 1000 fois plus pratique [Faut dire qu'un seul heal aux 1-5 minutes et qu'en plus, heal les ennemis...]


Post by Sharon, la vagabonde - November 23, 2006 at 3:09 AM

Quelqu'un sait comment corrigée cela ou si faut que je trouve un scripteur ailleurs ?


Post by Ex-Mélodie - November 23, 2006 at 12:22 PM

Ben.. Apoc t'a repondu que je sache non ?