Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  1 2 >  
Ответить в эту темуОткрыть новую тему
> Дождь С Молнией
Atheist
сообщение 23.6.2006, 11:35
Сообщение #1


********

Master
Сообщений: 1.272
Регистрация: 1.3.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 5.330



Вобщим при дожде молния может попасть в плеера...
просто меняйте weather.cs
скрипт не мой...пользуйте радуйтесь
Код

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

namespace Server.Misc
{
    public class Weather
    {
 private static Map[] m_Facets;
 private static Hashtable m_WeatherByFacet = new Hashtable();

 public static void Initialize()
 {
     m_Facets = new Map[]{ Map.Felucca, Map.Trammel };

     /* Static weather:
   *
   * Format:
   *   AddWeather( temperature, chanceOfPercipitation, chanceOfExtremeTemperature, <area ...> );
   */

     // ice island
     AddWeather( -15, 100, 5, new Rectangle2D( 3850, 160, 390, 320 ), new Rectangle2D( 3900, 480, 380, 180 ), new Rectangle2D( 4160, 660, 150, 110 ) );

     // covetous entrance, around vesper and minoc
     AddWeather( +15,  50, 5, new Rectangle2D( 2425, 725, 250, 250 ) );

     // despise entrance, north of britain
     AddWeather( +15,  50, 5, new Rectangle2D( 1245, 1045, 250, 250 ) );


     /* Dynamic weather:
   *
   * Format:
   *   AddDynamicWeather( temperature, chanceOfPercipitation, chanceOfExtremeTemperature, moveSpeed, width, height, bounds );
   */

     for ( int i = 0; i < 15; ++i )
   AddDynamicWeather( +15, 100, 5, 8, 400, 400, new Rectangle2D( 0, 0, 5120, 4096 ) );
 }

 public static ArrayList GetWeatherList( Map facet )
 {
     if ( facet == null )
   return null;

     ArrayList list = (ArrayList)m_WeatherByFacet[facet];

     if ( list == null )
   m_WeatherByFacet[facet] = list = new ArrayList();

     return list;
 }

 public static void AddDynamicWeather( int temperature, int chanceOfPercipitation, int chanceOfExtremeTemperature, int moveSpeed, int width, int height, Rectangle2D bounds )
 {
     for ( int i = 0; i < m_Facets.Length; ++i )
     {
   Rectangle2D area = new Rectangle2D();
   bool isValid = false;

   for ( int j = 0; j < 10; ++j )
   {
       area = new Rectangle2D( bounds.X + Utility.Random( bounds.Width - width ), bounds.Y + Utility.Random( bounds.Height - height ), width, height );

       if ( !CheckWeatherConflict( m_Facets[i], null, area ) )
     isValid = true;

       if ( isValid )
     break;
   }

   if ( !isValid )
       continue;

   Weather w = new Weather( m_Facets[i], new Rectangle2D[]{ area }, temperature, chanceOfPercipitation, chanceOfExtremeTemperature, TimeSpan.FromSeconds( 30.0 ) );

   w.m_Bounds = bounds;
   w.m_MoveSpeed = moveSpeed;
     }
 }

 public static void AddWeather( int temperature, int chanceOfPercipitation, int chanceOfExtremeTemperature, params Rectangle2D[] area )
 {
     for ( int i = 0; i < m_Facets.Length; ++i )
   new Weather( m_Facets[i], area, temperature, chanceOfPercipitation, chanceOfExtremeTemperature, TimeSpan.FromSeconds( 30.0 ) );
 }

 public static bool CheckWeatherConflict( Map facet, Weather exclude, Rectangle2D area )
 {
     ArrayList list = GetWeatherList( facet );

     if ( list == null )
   return false;

     for ( int i = 0; i < list.Count; ++i )
     {
   Weather w = (Weather)list[i];

   if ( w != exclude && w.IntersectsWith( area ) )
       return true;
     }

     return false;
 }

 private Map m_Facet;
 private Rectangle2D[] m_Area;
 private int m_Temperature;
 private int m_ChanceOfPercipitation;
 private int m_ChanceOfExtremeTemperature;

 public Map Facet{ get{ return m_Facet; } }
 public Rectangle2D[] Area{ get{ return m_Area; } set{ m_Area = value; } }
 public int Temperature{ get{ return m_Temperature; } set{ m_Temperature = value; } }
 public int ChanceOfPercipitation{ get{ return m_ChanceOfPercipitation; } set{ m_ChanceOfPercipitation = value; } }
 public int ChanceOfExtremeTemperature{ get{ return m_ChanceOfExtremeTemperature; } set{ m_ChanceOfExtremeTemperature = value; } }

 // For dynamic weather:
 private Rectangle2D m_Bounds;
 private int m_MoveSpeed;
 private int m_MoveAngleX, m_MoveAngleY;

 public Rectangle2D Bounds{ get{ return m_Bounds; } set{ m_Bounds = value; } }
 public int MoveSpeed{ get{ return m_MoveSpeed; } set{ m_MoveSpeed = value; } }
 public int MoveAngleX{ get{ return m_MoveAngleX; } set{ m_MoveAngleX = value; } }
 public int MoveAngleY{ get{ return m_MoveAngleY; } set{ m_MoveAngleY = value; } }

 public static bool CheckIntersection( Rectangle2D r1, Rectangle2D r2 )
 {
     if ( r1.X >= (r2.X + r2.Width) )
   return false;

     if ( r2.X >= (r1.X + r1.Width) )
   return false;

     if ( r1.Y >= (r2.Y + r2.Height) )
   return false;

     if ( r2.Y >= (r1.Y + r1.Height) )
   return false;

     return true;
 }

 public static bool CheckContains( Rectangle2D big, Rectangle2D small )
 {
     if ( small.X < big.X )
   return false;

     if ( small.Y < big.Y )
   return false;

     if ( (small.X + small.Width) > (big.X + big.Width) )
   return false;

     if ( (small.Y + small.Height) > (big.Y + big.Height) )
   return false;

     return true;
 }

 public virtual bool IntersectsWith( Rectangle2D area )
 {
     for ( int i = 0; i < m_Area.Length; ++i )
     {
   if ( CheckIntersection( area, m_Area[i] ) )
       return true;
     }

     return false;
 }

 public Weather( Map facet, Rectangle2D[] area, int temperature, int chanceOfPercipitation, int chanceOfExtremeTemperature, TimeSpan interval )
 {
     m_Facet = facet;
     m_Area = area;
     m_Temperature = temperature;
     m_ChanceOfPercipitation = chanceOfPercipitation;
     m_ChanceOfExtremeTemperature = chanceOfExtremeTemperature;

     ArrayList list = GetWeatherList( facet );

     if ( list != null )
   list.Add( this );

     Timer.DelayCall( TimeSpan.FromSeconds( (0.2+(Utility.RandomDouble()*0.8)) * interval.TotalSeconds ), interval, new TimerCallback( OnTick ) );
 }

 public virtual void Reposition()
 {
     if ( m_Area.Length == 0 )
   return;

     int width = m_Area[0].Width;
     int height = m_Area[0].Height;

     Rectangle2D area = new Rectangle2D();
     bool isValid = false;

     for ( int j = 0; j < 10; ++j )
     {
   area = new Rectangle2D( m_Bounds.X + Utility.Random( m_Bounds.Width - width ), m_Bounds.Y + Utility.Random( m_Bounds.Height - height ), width, height );

   if ( !CheckWeatherConflict( m_Facet, this, area ) )
       isValid = true;

   if ( isValid )
       break;
     }

     if ( !isValid )
   return;

     m_Area[0] = area;
 }

 public virtual void RecalculateMovementAngle()
 {
     double angle = Utility.RandomDouble() * Math.PI * 2.0;

     double cos = Math.Cos( angle );
     double sin = Math.Sin( angle );

     m_MoveAngleX = (int)(100 * cos);
     m_MoveAngleY = (int)(100 * sin);
 }

 public virtual void MoveForward()
 {
     if ( m_Area.Length == 0 )
   return;

     for ( int i = 0; i < 5; ++i ) // try 5 times to find a valid spot
     {
   int xOffset = (m_MoveSpeed * m_MoveAngleX) / 100;
   int yOffset = (m_MoveSpeed * m_MoveAngleY) / 100;

   Rectangle2D oldArea = m_Area[0];
   Rectangle2D newArea = new Rectangle2D( oldArea.X + xOffset, oldArea.Y + yOffset, oldArea.Width, oldArea.Height );

   if ( !CheckWeatherConflict( m_Facet, this, newArea ) && CheckContains( m_Bounds, newArea ) )
   {
       m_Area[0] = newArea;
       break;
   }

   RecalculateMovementAngle();
     }
 }

 private int m_Stage;
 private bool m_Active;
 private bool m_ExtremeTemperature;

 public virtual void OnTick()
 {
     if ( m_Stage == 0 )
     {
   m_Active = ( m_ChanceOfPercipitation > Utility.Random( 100 ) );
   m_ExtremeTemperature = ( m_ChanceOfExtremeTemperature > Utility.Random( 100 ) );

   if ( m_MoveSpeed > 0 )
   {
       Reposition();
       RecalculateMovementAngle();
   }
     }

     if ( m_Active )
     {
   if ( m_Stage > 0 && m_MoveSpeed > 0 )
       MoveForward();

   int type, density, temperature;

   temperature = m_Temperature;

   if ( m_ExtremeTemperature )
       temperature *= -1;

   if ( m_Stage < 15 )
   {
       density = m_Stage * 5;
   }
   else
   {
       density = 150 - (m_Stage * 5);

       if ( density < 10 )
     density = 10;
       else if ( density > 70 )
     density = 70;
   }

   if ( density == 0 )
       type = 0xFE;
   else if ( temperature > 0 )
       type = 0;
   else
       type = 2;

   ArrayList states = NetState.Instances;

   Packet weatherPacket = null;

   for ( int i = 0; i < states.Count; ++i )
   {
       NetState ns = (NetState)states[i];
       Mobile mob = ns.Mobile;

       if ( mob == null || mob.Map != m_Facet )
     continue;

       bool contains = ( m_Area.Length == 0 );

       for ( int j = 0; !contains && j < m_Area.Length; ++j )
     contains = m_Area[j].Contains( mob.Location );

       if ( !contains )
     continue;

       if ( weatherPacket == null )
     weatherPacket = new Server.Network.Weather( type, density, temperature );

       ns.Send( weatherPacket );

       if ( temperature > 10 )
     {
         switch (Utility.Random( 100 ))
         {
       case 0: ((PlayerMobile)mob).BoltEffect( 0 ); break;
       case 1: ((PlayerMobile)mob).BoltEffect( 0 ); break;
       case 2: ((PlayerMobile)mob).BoltEffect( 0 ); break;
       case 3: ((PlayerMobile)mob).BoltEffect( 0 ); break;
       case 4: ((PlayerMobile)mob).BoltEffect( 0 ); break;
       default: break;
         }
         return;
     }
   }
     }

     m_Stage++;
     m_Stage %= 30;
 }
    }

    public class WeatherMap : MapItem
    {
 [Constructable]
 public WeatherMap()
 {
     Name = "weather map";
     SetDisplay( 0, 0, 5119, 4095, 400, 400 );
 }

 public override void OnDoubleClick( Mobile from )
 {
     Map facet = from.Map;

     if ( facet == null )
   return;

     ArrayList list = Weather.GetWeatherList( facet );

     ClearPins();

     for ( int i = 0; i < list.Count; ++i )
     {
   Weather w = (Weather)list[i];

   for ( int j = 0; j < w.Area.Length; ++j )
       AddWorldPin( w.Area[j].X + (w.Area[j].Width/2), w.Area[j].Y + (w.Area[j].Height/2) );
     }

     base.OnDoubleClick( from );
 }

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

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

     writer.Write( (int) 0 );
 }

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

     int version = reader.ReadInt();
 }
    }
}


--------------------
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Beyonder
сообщение 27.6.2006, 9:42
Сообщение #2


*****

Journeyman
Сообщений: 303
Регистрация: 24.5.2005
Группа: Пользователи
Наличность: 0
Пользователь №: 3.739



Скрипт хороший, но честно говоря его можно сократить раза в 2.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Lanceril
сообщение 27.6.2006, 9:45
Сообщение #3


*****

Воскресший из бана :)
Сообщений: 437
Регистрация: 11.10.2004
Группа: Пользователи
Наличность: 0
Пользователь №: 2.401



Видно что писал его человек из мира Сферы )))
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Natsu
сообщение 13.8.2006, 0:24
Сообщение #4


**

Neophyte
Сообщений: 46
Регистрация: 9.8.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 7.181



СТранно , но у меня не пашет (
Может реализован токо для RunUo 1.0 ? ) а не 2.0
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Atheist
сообщение 14.8.2006, 6:18
Сообщение #5


********

Master
Сообщений: 1.272
Регистрация: 1.3.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 5.330



угу на ранку 1 было...тогда еще 2 не было


--------------------
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Barracoon
сообщение 14.8.2006, 10:34
Сообщение #6


*******

Adept
Сообщений: 1.169
Регистрация: 21.1.2006
Группа: Пользователи
Наличность: 0
Из: Vladivostok
Пользователь №: 4.839



Цитата(Atheist @ 14.8.2006, 14:18)
угу на ранку 1 было...
Точнее под RE... Эхх... Может какую-нибудь табличку с указанием версии прилепить к каждому топику? А то счас начнут на 2.0 выкладывать - потом фиг разбереш (IMG:style_emoticons/default/sad.gif)
Цитата(Atheist @ 14.8.2006, 14:18)
тогда еще 2 не было
Была, только ей мало кто пользовался... 2.0 появилась 15 июня... почти за полмесяца до создания этого топика...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Atheist
сообщение 14.8.2006, 14:23
Сообщение #7


********

Master
Сообщений: 1.272
Регистрация: 1.3.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 5.330



Было бы лучше если бы просто писали на какую версию...


--------------------
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Mylciber
сообщение 16.8.2006, 2:45
Сообщение #8


******

😎 Elden
Сообщений: 530
Регистрация: 18.12.2005
Группа: Пользователи
Наличность: 0
Пользователь №: 4.596



А на сферу 56 реал написать такой же скрипт?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DihlofozzZ
сообщение 16.8.2006, 3:09
Сообщение #9


***********

Администратор форума
Сообщений: 5.602
Регистрация: 8.3.2003
Группа: Администраторы
Наличность: 0
Из: Москва Россия
Пользователь №: 237



можно под 56б


--------------------
С уважением Администратор Форума.
Контактный Email: dihlofozzz@uokit.com


Topic Closed
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Veter
сообщение 16.8.2006, 3:14
Сообщение #10


******

Creative
Сообщений: 688
Регистрация: 16.9.2004
Группа: Пользователи
Наличность: 0
Из: Латвия
Пользователь №: 2.279
Возраст: 26



а как безболезнено перейти из рки на 56бшку ?


--------------------
Jericho PVP - Уже открылись
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DihlofozzZ
сообщение 16.8.2006, 3:51
Сообщение #11


***********

Администратор форума
Сообщений: 5.602
Регистрация: 8.3.2003
Группа: Администраторы
Наличность: 0
Из: Москва Россия
Пользователь №: 237



это уже в другую тему и в другой раздел

зы если с Рки на 56б то практически только ядро менять надо, вот вопрос если с 55и на 56б это да... (IMG:style_emoticons/default/smile.gif)


--------------------
С уважением Администратор Форума.
Контактный Email: dihlofozzz@uokit.com


Topic Closed
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Atheist
сообщение 16.8.2006, 5:54
Сообщение #12


********

Master
Сообщений: 1.272
Регистрация: 1.3.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 5.330



Без проблем на сферу...это было написано сначала на 56...)))


--------------------
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Juzzver
сообщение 2.11.2008, 14:57
Сообщение #13


**********

Модератор RunUO
Сообщений: 3.425
Регистрация: 1.11.2008
Группа: Супермодераторы
Наличность: 22567
Из: Северная Корея
Пользователь №: 11.273



А Скрипт реально хорош я бы его вставил если бы он канал на Ранку 2,0


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Juzzver
сообщение 14.12.2008, 4:24
Сообщение #14


**********

Модератор RunUO
Сообщений: 3.425
Регистрация: 1.11.2008
Группа: Супермодераторы
Наличность: 22567
Из: Северная Корея
Пользователь №: 11.273



Может у когото есть возможность переписать его на вторую ранку? А то я неимею понятия как это исполнить...


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 14.12.2008, 10:47
Сообщение #15


********

Master
Сообщений: 1.377
Регистрация: 7.8.2006
Группа: Пользователи
Наличность: 3057
Пользователь №: 7.166



Вскрытие показало, что это дефолтный скрипт RunUO, в котором в методе void OnTick() добавили строки
Код
if( temperature > 10 )
{
    switch( Utility.Random( 100 ) )
    {
        case 0: ( (PlayerMobile)mob ).BoltEffect( 0 ); break;
        case 1: ( (PlayerMobile)mob ).BoltEffect( 0 ); break;
        case 2: ( (PlayerMobile)mob ).BoltEffect( 0 ); break;
        case 3: ( (PlayerMobile)mob ).BoltEffect( 0 ); break;
        case 4: ( (PlayerMobile)mob ).BoltEffect( 0 ); break;
        default: break;
    }

    return; // Непонятно зачем...
}

Поэтому идем в Misc\Weather.cs и после строки ns.Send( weatherPacket ); делаем
Цитата
ns.Send( weatherPacket );

if( temperature > 10 && Utility.Random( 100 ) < 5 ) // Добавленный код
mob.BoltEffect( 0 );


}

Packet.Release( weatherPacket );

P.S. Администраторы, модераторы, люди, человеки, когда в code тегах начнут работать все остальные теги ?

Когда это сделают администраторы -

Напиши в разделе - Вопросы и предложения...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Juzzver
сообщение 14.12.2008, 19:31
Сообщение #16


**********

Модератор RunUO
Сообщений: 3.425
Регистрация: 1.11.2008
Группа: Супермодераторы
Наличность: 22567
Из: Северная Корея
Пользователь №: 11.273



Еще вопросик, а можно ли самому делать дождь через команду? Я посмотрел нету подобной команды... Что скажете?


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 14.12.2008, 19:40
Сообщение #17


********

Master
Сообщений: 1.377
Регистрация: 7.8.2006
Группа: Пользователи
Наличность: 3057
Пользователь №: 7.166



Можно. Также как это сделано в Weather, отправкой "погодного" пакета
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Juzzver
сообщение 14.12.2008, 22:32
Сообщение #18


**********

Модератор RunUO
Сообщений: 3.425
Регистрация: 1.11.2008
Группа: Супермодераторы
Наличность: 22567
Из: Северная Корея
Пользователь №: 11.273



Так каким же способом осуществить - это через команду?


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Juzzver
сообщение 15.12.2008, 22:32
Сообщение #19


**********

Модератор RunUO
Сообщений: 3.425
Регистрация: 1.11.2008
Группа: Супермодераторы
Наличность: 22567
Из: Северная Корея
Пользователь №: 11.273



Подскажите, а можно же настроить что бы демедж сносило, токо как ??


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 15.12.2008, 22:39
Сообщение #20


********

Master
Сообщений: 1.377
Регистрация: 7.8.2006
Группа: Пользователи
Наличность: 3057
Пользователь №: 7.166



Код
mob.Damage( 5 ); // где 5 количество урона

Куда это добавить придумай сам
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

2 страниц V  1 2 >
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 27.4.2024, 22:43
Designed by Nickostyle