RunUo.Korean.Forum RunUo.Korean.Forum
RunUo(·±À¯¿À)¿¡ °üÇÑ Çѱ¹ Æ÷·³ »çÀÌÆ®
 

¹«±â¿¡ slayer ¿É¼Ç ¼öÁ¤ ¶Ç´Â Ãß°¡ ¹æ¹ý Á» ¾Ë·ÁÁÖ¼¼¿ä
Click here to go to the original topic

 
       RunUo.Korean.Forum -> Script Support
ÀÌÀü ±Û :: ´ÙÀ½ ±Û  
±Û ¾´ÀÌ ¸Þ¼¼Áö ³»¿ë
plls21



°¡ÀÔÀÏ: 2008³â 09¿ù 26ÀÏ
°Ô½Ã¹°: 1

±Û ÀÛ¼º½Ã°£ : 2011-09-23 ±Ý 3:04 am    Á¦¸ñ: ¹«±â¿¡ slayer ¿É¼Ç ¼öÁ¤ ¶Ç´Â Ãß°¡ ¹æ¹ý Á» ¾Ë·ÁÁÖ¼¼¿ä  

runuo 2.2¸¦ »ç¿ëÇϰí nerun's distro rev52¸¦ »ç¿ëÇϰí ÀÖ½À´Ï´Ù

¼­¹ö¸¦ ±¸µ¿ÇϱäÇߴµ¥ ÀÌ°Í Àú°Í »ý°¢ÇÏ´ø Áß¿¡ ¿¹Àü ¾î´À ¼­¹ö¿¡¼­ º¸¾Ò´ø
slayer°¡ »ý°¢³ª¼­ ¼öÁ¤ ÇÏ´øÁß µµÀúÈ÷ ¹æ¹ýÀ» Àß ¸ð¸£°Ú¾î¼­ Áú¹® ÇÕ´Ï´Ù

µ¿¹°·ù(µ¿¹°, µå·¡°ï, µîµî)ÀÇ °¡Á×À» ¹þ±â¸é °¡Á×¹«´õ±â(hides)°¡ ½Ãü¿¡ ³Ö¾îÁö°í ±×°É °¡À§·Î ÀÚ¸£¸é °¡Á×Á¶°¢(leather)ÀÌ µÇ¾î ½Ãü¿¡ ³²½À´Ï´Ù.
¹°·Ð °¡Á×¹«´õ±â¸¦ °¡¹æ¿¡ ³Ö°í °¡À§·Î ÀÚ¸£¸é °¡¹æ¿¡ °¡Á×Á¶°¢µéÀÌ ³²±äÇÏÁÒ

±Ùµ¥ ¾î´À ¼­¹ö¿¡¼­´Â °¡Á× ½½·¹ÀÌ¾î´ø°¡ ÇÏ´Â ¿É¼ÇÀÌ ¹«±â¿¡ ºÙ¾î¼­ ¸÷ÀÇ ½Ãü¿¡ ±× ¹«±â¸¦ »ç¿ëÇϸé(´õºíŬ¸¯ ÈÄ ½Ãü Ŭ¸¯) °ð¹Ù·Î °¡Á×Á¶°¢(Leather)µéÀÌ ³» °¡¹æ¿¡ µé¾î¿À´Â °ÍÀ» »ç¿ëÇÑ ÀûÀÌ ÀÖ½À´Ï´Ù.

ÀÌ ¿É¼ÇÀ» Á¦°¡ ±¸µ¿ÇÑ ¼­¹ö¿¡¼­µµ Àû¿ëÇÏ°í ½ÍÀºµ¥ ¾îµð¸¦ ¾î¶»°Ô ¼öÁ¤ÇؾßÇÒÁö ¸ð¸£°Ú¾î¿ä

ÈȾ °Ç Scripts\Items\Weapons\slayergroup.cs¿Í Scripts\Items\Weapons\slayerentry.cs, ±×¸®°í Scripts\Items\Weapons\slayername.cs ÀÔ´Ï´Ù.

±âÁ¸ÀÇ ½½·¹À̾ ¼öÁ¤Çصµ »ó°ü¾ø°í, ±×°Ô Á» º¹ÀâÇÏ¸é °¡Á×½½·¹À̾ Ãß°¡ÇÏ°í ½Í½À´Ï´Ù

¸¹Àº °í¼ö´ÔµéÀÇ µµ¿ò ºÎŹ µå¸³´Ï´Ù.

Scripts\Items\Weapons\slayergroup.cs
ÄÚµå : 
using System;
using Server;
using Server.Mobiles;

namespace Server.Items
{
   public class SlayerGroup
   {
      private static SlayerEntry[] m_TotalEntries;
      private static SlayerGroup[] m_Groups;

      public static SlayerEntry[] TotalEntries
      {
         get{ return m_TotalEntries; }
      }

      public static SlayerGroup[] Groups
      {
         get{ return m_Groups; }
      }

      public static SlayerEntry GetEntryByName( SlayerName name )
      {
         int v = (int)name;

         if ( v >= 0 && v < m_TotalEntries.Length )
            return m_TotalEntries[v];

         return null;
      }

      public static SlayerName GetLootSlayerType( Type type )
      {
         for ( int i = 0; i < m_Groups.Length; ++i )
         {
            SlayerGroup group = m_Groups[i];
            Type[] foundOn = group.FoundOn;

            bool inGroup = false;

            for ( int j = 0; foundOn != null && !inGroup && j < foundOn.Length; ++j )
               inGroup = ( foundOn[j] == type );

            if ( inGroup )
            {
               int index = Utility.Random( 1 + group.Entries.Length );

               if ( index == 0 )
                  return group.m_Super.Name;

               return group.Entries[index - 1].Name;
            }
         }

         return SlayerName.Silver;
      }

      static SlayerGroup()
      {
         SlayerGroup humanoid = new SlayerGroup();
         SlayerGroup undead = new SlayerGroup();
         SlayerGroup elemental = new SlayerGroup();
         SlayerGroup abyss = new SlayerGroup();
         SlayerGroup arachnid = new SlayerGroup();
         SlayerGroup reptilian = new SlayerGroup();
         SlayerGroup fey = new SlayerGroup();

         humanoid.Opposition = new SlayerGroup[]{ undead };
         humanoid.FoundOn = new Type[]{ typeof( BoneKnight ), typeof( Lich ), typeof( LichLord ) };
         humanoid.Super = new SlayerEntry( SlayerName.Repond, typeof( ArcticOgreLord ), typeof( Cyclops ), typeof( Ettin ), typeof( EvilMage ), typeof( EvilMageLord ), typeof( FrostTroll ), typeof( MeerCaptain ), typeof( MeerEternal ), typeof( MeerMage ), typeof( MeerWarrior ), typeof( Ogre ), typeof( OgreLord ), typeof( Orc ), typeof( OrcBomber ), typeof( OrcBrute ), typeof( OrcCaptain ), /*typeof( OrcChopper ), typeof( OrcScout ),*/ typeof( OrcishLord ), typeof( OrcishMage ), typeof( Ratman ), typeof( RatmanArcher ), typeof( RatmanMage ), typeof( SavageRider ), typeof( SavageShaman ), typeof( Savage ), typeof( Titan ), typeof( Troll ) );
         humanoid.Entries = new SlayerEntry[]
            {
               new SlayerEntry( SlayerName.OgreTrashing, typeof( Ogre ), typeof( OgreLord ), typeof( ArcticOgreLord ) ),
               new SlayerEntry( SlayerName.OrcSlaying, typeof( Orc ), typeof( OrcBomber ), typeof( OrcBrute ), typeof( OrcCaptain ),/* typeof( OrcChopper ), typeof( OrcScout ),*/ typeof( OrcishLord ), typeof( OrcishMage ) ),
               new SlayerEntry( SlayerName.TrollSlaughter, typeof( Troll ), typeof( FrostTroll ) )
            };

         undead.Opposition = new SlayerGroup[]{ humanoid };
         undead.Super = new SlayerEntry( SlayerName.Silver, typeof( AncientLich ), typeof( Bogle ), typeof( BoneKnight ), typeof( BoneMagi ),/* typeof( DarkGuardian ), */typeof( DarknightCreeper ), typeof( FleshGolem ), typeof( Ghoul ), typeof( GoreFiend ), typeof( HellSteed ), typeof( LadyOfTheSnow ), typeof( Lich ), typeof( LichLord ), typeof( Mummy ), typeof( PestilentBandage ), typeof( Revenant ), typeof( RevenantLion ), typeof( RottingCorpse ), typeof( Shade ), typeof( ShadowKnight ), typeof( SkeletalKnight ), typeof( SkeletalMage ), typeof( SkeletalMount ), typeof( Skeleton ), typeof( Spectre ), typeof( Wraith ), typeof( Zombie ) );
         undead.Entries = new SlayerEntry[0];

         fey.Opposition = new SlayerGroup[]{ abyss };
         fey.Super = new SlayerEntry( SlayerName.Fey, typeof( Centaur ), typeof( EtherealWarrior ), typeof( Kirin ), typeof( LordOaks ), typeof( Pixie ), typeof( Silvani ), typeof( Treefellow ), typeof( Unicorn ), typeof( Wisp ), typeof( MLDryad ), typeof( Satyr ) );
         fey.Entries = new SlayerEntry[0];

         elemental.Opposition = new SlayerGroup[]{ abyss };
         elemental.FoundOn = new Type[]{ typeof( Balron ), typeof( Daemon ) };
         elemental.Super = new SlayerEntry( SlayerName.ElementalBan, typeof( ToxicElemental ), typeof( AgapiteElemental ), typeof( AirElemental ), typeof( SummonedAirElemental ), typeof( BloodElemental ), typeof( BronzeElemental ), typeof( CopperElemental ), typeof( CrystalElemental ), typeof( DullCopperElemental ), typeof( EarthElemental ), typeof( SummonedEarthElemental ), typeof( Efreet ), typeof( FireElemental ), typeof( SummonedFireElemental ), typeof( GoldenElemental ), typeof( IceElemental ), typeof( KazeKemono ), typeof( PoisonElemental ), typeof( RaiJu ), typeof( SandVortex ), typeof( ShadowIronElemental ), typeof( SnowElemental ), typeof( ValoriteElemental ), typeof( VeriteElemental ), typeof( WaterElemental ), typeof( SummonedWaterElemental ) );
         elemental.Entries = new SlayerEntry[]
            {
               new SlayerEntry( SlayerName.BloodDrinking, typeof( BloodElemental ) ),
               new SlayerEntry( SlayerName.EarthShatter, typeof( AgapiteElemental ), typeof( BronzeElemental ), typeof( CopperElemental ), typeof( DullCopperElemental ), typeof( EarthElemental ), typeof( SummonedEarthElemental ), typeof( GoldenElemental ), typeof( ShadowIronElemental ), typeof( ValoriteElemental ), typeof( VeriteElemental ) ),
               new SlayerEntry( SlayerName.ElementalHealth, typeof( PoisonElemental ) ),
               new SlayerEntry( SlayerName.FlameDousing, typeof( FireElemental ), typeof( SummonedFireElemental ) ),
               new SlayerEntry( SlayerName.SummerWind, typeof( SnowElemental ), typeof( IceElemental ) ),
               new SlayerEntry( SlayerName.Vacuum, typeof( AirElemental ), typeof( SummonedAirElemental ) ),
               new SlayerEntry( SlayerName.WaterDissipation, typeof( WaterElemental ), typeof( SummonedWaterElemental ) )
            };

         abyss.Opposition = new SlayerGroup[]{ elemental, fey };
         abyss.FoundOn = new Type[]{ typeof( BloodElemental ) };

         if( Core.AOS )
         {
            abyss.Super = new SlayerEntry( SlayerName.Exorcism, typeof( AbysmalHorror ), typeof( ArcaneDaemon ), typeof( Balron ), typeof( BoneDemon ), typeof( ChaosDaemon ), typeof( Daemon ), typeof( SummonedDaemon ), typeof( DemonKnight ), typeof( Devourer ), typeof( EnslavedGargoyle ), typeof( FanDancer ), typeof( FireGargoyle ), typeof( Gargoyle ), typeof( GargoyleDestroyer ), typeof( GargoyleEnforcer ), typeof( Gibberling ), typeof( HordeMinion ), typeof( IceFiend ), typeof( Imp ), typeof( Impaler ), typeof( Moloch ), typeof( Oni ), typeof( Ravager ), typeof( Semidar ), typeof( StoneGargoyle ), typeof( Succubus ), typeof( TsukiWolf ) );
   
            abyss.Entries = new SlayerEntry[]
               {
                  // Daemon Dismissal & Balron Damnation have been removed and moved up to super slayer on OSI.
                  new SlayerEntry( SlayerName.GargoylesFoe, typeof( EnslavedGargoyle ), typeof( FireGargoyle ), typeof( Gargoyle ), typeof( GargoyleDestroyer ), typeof( GargoyleEnforcer ), typeof( StoneGargoyle ) ),
               };
         }
         else
         {
            abyss.Super = new SlayerEntry( SlayerName.Exorcism, typeof( AbysmalHorror ), typeof( Balron ), typeof( BoneDemon ), typeof( ChaosDaemon ), typeof( Daemon ), typeof( SummonedDaemon ), typeof( DemonKnight ), typeof( Devourer ), typeof( Gargoyle ), typeof( FireGargoyle ), typeof( Gibberling ), typeof( HordeMinion ), typeof( IceFiend ), typeof( Imp ), typeof( Impaler ), typeof( Ravager ), typeof( StoneGargoyle ), typeof( ArcaneDaemon ), typeof( EnslavedGargoyle ), typeof( GargoyleDestroyer ), typeof( GargoyleEnforcer ), typeof( Moloch ) );

            abyss.Entries = new SlayerEntry[]
               {
                  new SlayerEntry( SlayerName.DaemonDismissal, typeof( AbysmalHorror ), typeof( Balron ), typeof( BoneDemon ), typeof( ChaosDaemon ), typeof( Daemon ), typeof( SummonedDaemon ), typeof( DemonKnight ), typeof( Devourer ), typeof( Gibberling ), typeof( HordeMinion ), typeof( IceFiend ), typeof( Imp ), typeof( Impaler ), typeof( Ravager ), typeof( ArcaneDaemon ), typeof( Moloch ) ),
                  new SlayerEntry( SlayerName.GargoylesFoe, typeof( FireGargoyle ), typeof( Gargoyle ), typeof( StoneGargoyle ), typeof( EnslavedGargoyle ), typeof( GargoyleDestroyer ), typeof( GargoyleEnforcer ) ),
                  new SlayerEntry( SlayerName.BalronDamnation, typeof( Balron ) )
               };
         }

         arachnid.Opposition = new SlayerGroup[]{ reptilian };
         arachnid.FoundOn = new Type[]{ typeof( AncientWyrm ), typeof( GreaterDragon ), typeof( Dragon ), typeof( OphidianMatriarch ), typeof( ShadowWyrm ) };
         arachnid.Super = new SlayerEntry( SlayerName.ArachnidDoom, typeof( DreadSpider ), typeof( FrostSpider ), typeof( GiantBlackWidow ), typeof( GiantSpider ), typeof( Mephitis ), typeof( Scorpion ), typeof( TerathanAvenger ), typeof( TerathanDrone ), typeof( TerathanMatriarch ), typeof( TerathanWarrior ) );
         arachnid.Entries = new SlayerEntry[]
            {
               new SlayerEntry( SlayerName.ScorpionsBane, typeof( Scorpion ) ),
               new SlayerEntry( SlayerName.SpidersDeath, typeof( DreadSpider ), typeof( FrostSpider ), typeof( GiantBlackWidow ), typeof( GiantSpider ), typeof( Mephitis ) ),
               new SlayerEntry( SlayerName.Terathan, typeof( TerathanAvenger ), typeof( TerathanDrone ), typeof( TerathanMatriarch ), typeof( TerathanWarrior ) )
            };

         reptilian.Opposition = new SlayerGroup[]{ arachnid };
         reptilian.FoundOn = new Type[]{ typeof( TerathanAvenger ), typeof( TerathanMatriarch ) };
         reptilian.Super = new SlayerEntry( SlayerName.ReptilianDeath, typeof( AncientWyrm ), typeof( DeepSeaSerpent ), typeof( GreaterDragon ), typeof( Dragon ), typeof( Drake ), typeof( GiantIceWorm ), typeof( IceSerpent ), typeof( GiantSerpent ), typeof( Hiryu ), typeof( IceSnake ), typeof( JukaLord ), typeof( JukaMage ), typeof( JukaWarrior ), typeof( LavaSerpent ), typeof( LavaSnake ), typeof( LesserHiryu ), typeof( Lizardman ), typeof( OphidianArchmage ), typeof( OphidianKnight ), typeof( OphidianMage ), typeof( OphidianMatriarch ), typeof( OphidianWarrior ), typeof( SeaSerpent ), typeof( Serado ), typeof( SerpentineDragon ), typeof( ShadowWyrm ), typeof( SilverSerpent ), typeof( SkeletalDragon ), typeof( Snake ), typeof( SwampDragon ), typeof( WhiteWyrm ), typeof( Wyvern ), typeof( Yamandon ) );
         reptilian.Entries = new SlayerEntry[]
            {
               new SlayerEntry( SlayerName.DragonSlaying, typeof( AncientWyrm ), typeof( GreaterDragon ), typeof( Dragon ), typeof( Drake ), typeof( Hiryu ), typeof( LesserHiryu ), typeof( SerpentineDragon ), typeof( ShadowWyrm ), typeof( SkeletalDragon ), typeof( SwampDragon ), typeof( WhiteWyrm ), typeof( Wyvern ) ),
               new SlayerEntry( SlayerName.LizardmanSlaughter, typeof( Lizardman ) ),
               new SlayerEntry( SlayerName.Ophidian, typeof( OphidianArchmage ), typeof( OphidianKnight ), typeof( OphidianMage ), typeof( OphidianMatriarch ), typeof( OphidianWarrior ) ),
               new SlayerEntry( SlayerName.SnakesBane, typeof( DeepSeaSerpent ), typeof( GiantIceWorm ), typeof( GiantSerpent ), typeof( IceSerpent ), typeof( IceSnake ), typeof( LavaSerpent ), typeof( LavaSnake ), typeof( SeaSerpent ), typeof( Serado ), typeof( SilverSerpent ), typeof( Snake ), typeof( Yamandon ) )
            };

         m_Groups = new SlayerGroup[]
            {
               humanoid,
               undead,
               elemental,
               abyss,
               arachnid,
               reptilian,
               fey
            };

         m_TotalEntries = CompileEntries( m_Groups );
      }

      private static SlayerEntry[] CompileEntries( SlayerGroup[] groups )
      {
         SlayerEntry[] entries = new SlayerEntry[28];

         for ( int i = 0; i < groups.Length; ++i )
         {
            SlayerGroup g = groups[i];

            g.Super.Group = g;

            entries[(int)g.Super.Name] = g.Super;

            for ( int j = 0; j < g.Entries.Length; ++j )
            {
               g.Entries[j].Group = g;
               entries[(int)g.Entries[j].Name] = g.Entries[j];
            }
         }

         return entries;
      }

      private SlayerGroup[] m_Opposition;
      private SlayerEntry m_Super;
      private SlayerEntry[] m_Entries;
      private Type[] m_FoundOn;

      public SlayerGroup[] Opposition{ get{ return m_Opposition; } set{ m_Opposition = value; } }
      public SlayerEntry Super{ get{ return m_Super; } set{ m_Super = value; } }
      public SlayerEntry[] Entries{ get{ return m_Entries; } set{ m_Entries = value; } }
      public Type[] FoundOn{ get{ return m_FoundOn; } set{ m_FoundOn = value; } }

      public bool OppositionSuperSlays( Mobile m )
      {
         for( int i = 0; i < Opposition.Length; i++ )
         {
            if ( Opposition[i].Super.Slays( m ) )
               return true;
         }

         return false;
      }

      public SlayerGroup()
      {
      }
   }
}


Scripts\Items\Weapons\slayerentry.cs
ÄÚµå : 
using System;
using Server;
using Server.Mobiles;

namespace Server.Items
{
   public class SlayerEntry
   {
      private SlayerGroup m_Group;
      private SlayerName m_Name;
      private Type[] m_Types;

      public SlayerGroup Group{ get{ return m_Group; } set{ m_Group = value; } }
      public SlayerName Name{ get{ return m_Name; } }
      public Type[] Types{ get{ return m_Types; } }

      private static int[] m_AosTitles = new int[]
         {
            1060479, // undead slayer
            1060470, // orc slayer
            1060480, // troll slayer
            1060468, // ogre slayer
            1060472, // repond slayer
            1060462, // dragon slayer
            1060478, // terathan slayer
            1060475, // snake slayer
            1060467, // lizardman slayer
            1060473, // reptile slayer
            1060460, // demon slayer
            1060466, // gargoyle slayer
            1017396, // Balron Damnation
            1060461, // demon slayer
            1060469, // ophidian slayer
            1060477, // spider slayer
            1060474, // scorpion slayer
            1060458, // arachnid slayer
            1060465, // fire elemental slayer
            1060481, // water elemental slayer
            1060457, // air elemental slayer
            1060471, // poison elemental slayer
            1060463, // earth elemental slayer
            1060459, // blood elemental slayer
            1060476, // snow elemental slayer
            1060464, // elemental slayer
            1070855  // fey slayer
         };

      private static int[] m_OldTitles = new int[]
         {
            1017384, // Silver
            1017385, // Orc Slaying
            1017386, // Troll Slaughter
            1017387, // Ogre Thrashing
            1017388, // Repond
            1017389, // Dragon Slaying
            1017390, // Terathan
            1017391, // Snake's Bane
            1017392, // Lizardman Slaughter
            1017393, // Reptilian Death
            1017394, // Daemon Dismissal
            1017395, // Gargoyle's Foe
            1017396, // Balron Damnation
            1017397, // Exorcism
            1017398, // Ophidian
            1017399, // Spider's Death
            1017400, // Scorpion's Bane
            1017401, // Arachnid Doom
            1017402, // Flame Dousing
            1017403, // Water Dissipation
            1017404, // Vacuum
            1017405, // Elemental Health
            1017406, // Earth Shatter
            1017407, // Blood Drinking
            1017408, // Summer Wind
            1017409, // Elemental Ban
            1070855  // fey slayer
         };

      public int Title
      {
         get
         {
            int[] titles = ( Core.AOS ? m_AosTitles : m_OldTitles );

            return titles[(int)m_Name - 1];
         }
      }

      public SlayerEntry( SlayerName name, params Type[] types )
      {
         m_Name = name;
         m_Types = types;
      }

      public bool Slays( Mobile m )
      {
         Type t = m.GetType();

         for ( int i = 0; i < m_Types.Length; ++i )
         {
            if ( m_Types[i] == t )
               return true;
         }

         return false;
      }
   }
}


Scripts\Items\Weapons\slayername.cs
ÄÚµå : 
using System;

namespace Server.Items
{
   public enum SlayerName
   {
      None,
      Silver,
      OrcSlaying,
      TrollSlaughter,
      OgreTrashing,
      Repond,
      DragonSlaying,
      Terathan,
      SnakesBane,
      LizardmanSlaughter,
      ReptilianDeath,
      DaemonDismissal,
      GargoylesFoe,
      BalronDamnation,
      Exorcism,
      Ophidian,
      SpidersDeath,
      ScorpionsBane,
      ArachnidDoom,
      FlameDousing,
      WaterDissipation,
      Vacuum,
      ElementalHealth,
      EarthShatter,
      BloodDrinking,
      SummerWind,
      ElementalBan, // Bane?
      Fey
   }
}
¸Ç À§·Î °¡±â  
 
       RunUo.Korean.Forum -> Script Support
ÇöÀçÆäÀÌÁö : 1/1


Powered by phpBB Search Engine Indexer
Powered by phpBB © 2001, 2002 phpBB Group