donomong
°¡ÀÔÀÏ: 2006³â 07¿ù 01ÀÏ
°Ô½Ã¹°: 23
|
±Û ÀÛ¼º½Ã°£ : 2006-07-13 ¸ñ 6:53 pm Á¦¸ñ: ´ç±Ù´Ô²²¼ ¿Ã·ÁÁֽй®°ÔÀÌÆ® ¼öÁ¤... |
|
|
'´ç±Ùºôµå'ÀÇ ½ºÅ©¸³À» ºô·Á¾²°íÀִµ¥¿ä,,
¹®°ÔÀÌÆ® ³»¿ëÀ» ¾Æ·¡ ÄÚµåó·³ ¹Ù²ãºÁµµ
ÀÌÀü¿¡ ÀÖ´ø ¸ñ·Ï(ÀÌ°è µîµî..)¸¸ °è¼Ó ¶ß³×¿ä..
¿ø·¡ ¹Ù²î°Å³ª,¾È¶ß°Å³ª,¿¡·¯°¡¶°¾ß Á¤»óÀÏÅÙµ¥..
´ëü ÀÌÀ¯°¡ ¸Ö±î¿ä?
ÄÚµå :
using System;
using System.Collections;
using Server;
using Server.Gumps;
using Server.Network;
using Server.Mobiles;
namespace Server.Items
{
public class PublicMoongate : Item
{
[Constructable]
public PublicMoongate() : base( 0xF6C )
{
Movable = false;
Light = LightType.Circle300;
}
public PublicMoongate( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( !from.Player )
return;
if ( from.InRange( GetWorldLocation(), 1 ) )
UseGate( from );
else
from.SendLocalizedMessage( 500446 ); // That is too far away.
}
public override bool OnMoveOver( Mobile m )
{
return !m.Player || UseGate( m );
}
public bool UseGate( Mobile m )
{
if ( m.Criminal )
{
m.SendLocalizedMessage( 1005561, "", 0x22 ); // Thou'rt a criminal and cannot escape so easily.
return false;
}
else if ( Server.Spells.SpellHelper.CheckCombat( m ) )
{
m.SendLocalizedMessage( 1005564, "", 0x22 ); // Wouldst thou flee during the heat of battle??
return false;
}
else if ( m.Spell != null )
{
m.SendLocalizedMessage( 1049616 ); // You are too busy to do that at the moment.
return false;
}
else
{
m.CloseGump( typeof( DangeonMoongateGump ) );
m.CloseGump( typeof( MoongateGump ) );
m.SendGump( new MoongateGump( m, this ) );
if ( !m.Hidden || m.AccessLevel == AccessLevel.Player )
Effects.PlaySound( m.Location, m.Map, 0x20E );
return true;
}
}
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();
}
public static void Initialize()
{
Server.Commands.Register( "MoonGen", AccessLevel.Administrator, new CommandEventHandler( MoonGen_OnCommand ) );
}
[Usage( "MoonGen" )]
[Description( "Generates public moongates. Removes all old moongates." )]
public static void MoonGen_OnCommand( CommandEventArgs e )
{
DeleteAll();
int count = 0;
count += MoonGen( PMList.Trammel );
count += MoonGen( PMList.Felucca );
count += MoonGen( PMList.Ilshenar );
count += MoonGen( PMList.Malas );
count += MoonGen( PMList.Tokuno );
World.Broadcast( 0x35, true, "{0} moongates generated.", count );
}
private static void DeleteAll()
{
ArrayList list = new ArrayList();
foreach ( Item item in World.Items.Values )
{
if ( item is PublicMoongate )
list.Add( item );
}
foreach ( Item item in list )
item.Delete();
if ( list.Count > 0 )
World.Broadcast( 0x35, true, "{0} moongates removed.", list.Count );
}
private static int MoonGen( PMList list )
{
foreach ( PMEntry entry in list.Entries )
{
Item item = new PublicMoongate();
item.MoveToWorld( entry.Location, list.Map );
// if ( entry.Number == 1060642 ) // Umbra
// item.Hue = 0x497;
}
return list.Entries.Length;
}
}
public class PMEntry
{
private Point3D m_Location;
private string m_Number; //********************
public Point3D Location
{
get
{
return m_Location;
}
}
public string Number
{
get
{
return m_Number;
}
}
public PMEntry( Point3D loc, string number )
{
m_Location = loc;
m_Number = number;
}
}
public class PMList
{
private string m_Number, m_SelNumber;
private Map m_Map;
private PMEntry[] m_Entries;
public string Number
{
get
{
return m_Number;
}
}
public string SelNumber
{
get
{
return m_SelNumber;
}
}
public Map Map
{
get
{
return m_Map;
}
}
public PMEntry[] Entries
{
get
{
return m_Entries;
}
}
public PMList( string number, string selNumber, Map map, PMEntry[] entries )
{
m_Number = number;
m_SelNumber = selNumber;
m_Map = map;
m_Entries = entries;
}
public static readonly PMList Felucca =
new PMList( "µ¨·ç½Ã¾Æ ¿µÁö", "", Map.Felucca, new PMEntry[]
{
new PMEntry( new Point3D( 5259, 3987, 37 ), "µ¨·ç½Ã¾Æ" ),
//new PMEntry( new Point3D( 2229, 1226, 0 ), "ºê¸®Æ°" ),
//new PMEntry( new Point3D( 4300, 968, 5 ), "Ä«¿Â" ),
//new PMEntry( new Point3D( 2012, 2756, 20 ), "¿ÀÄ«" ),
//new PMEntry( new Point3D( 787, 2243, 0 ), "Çϵå·Ï" ),
//new PMEntry( new Point3D( 1828, 2948,-20), "1012008"), // Trinsic
//new PMEntry( new Point3D( 643, 2067, 5 ), "1012009" ), // Skara Brae
//new PMEntry( new Point3D( 3563, 2139, 34), "1012010" ), // Magincia
//new PMEntry( new Point3D( 2711, 2234, 0 ), "1019001" ) // Buccaneer's Den
} );
public static readonly PMList Tokuno =
new PMList( "ÅäÄí³ë ¸·ºÎ", "", Map.Tokuno, new PMEntry[]
{
new PMEntry( new Point3D( 728, 1255, 30 ), "Á¨Åä" ),
//new PMEntry( new Point3D( 802, 1204, 25 ), "Å©¸®Áî" ),
//new PMEntry( new Point3D( 613, 424, 40 ), "·¹Å°³×" )
} );
public static readonly PMList Malas =
new PMList( "·ç³ª ¿Õ±¹", "", Map.Malas, new PMEntry[]
{
new PMEntry( new Point3D( 1015, 527, -64 ), "·ç³ª" ),
//new PMEntry( new Point3D( 2033, 1333, -88 ), "ÇÁÁö" )
} );
public static readonly PMList Ilshenar =
new PMList( "¼û°ÜÁø ´ë·ú", "", Map.Ilshenar, new PMEntry[]
{
new PMEntry( new Point3D( 1117, 406, -75 ), "¼û°ÜÁ³´ø Àå¼Ò" ), // Compassion
//new PMEntry( new Point3D( 843, 1175, -56 ), "µµ½ÃÀÇ ÈçÀû" ), // Honesty
//new PMEntry( new Point3D( 1249, 571, -16 ), "Àΰ£ÀÇ ÈçÀû" ), // Honor
//new PMEntry( new Point3D( 1363, 1105, -26 ), "Ä·ÇÁÀÇ ÈçÀû" ), // Humility
//new PMEntry( new Point3D( 987, 1011, -32 ), "1012019" ), // Justice
//new PMEntry( new Point3D( 1174, 1286, -30 ), "1012020" ), // Sacrifice
//new PMEntry( new Point3D( 1532, 1340, - 3 ), "1012021" ), // Spirituality
//new PMEntry( new Point3D( 528, 216, -45 ), "1012022" ), // Valor
//new PMEntry( new Point3D( 1721, 218, 96 ), "1019000" ) // Chaos
} );
public static readonly PMList[] UORLists = new PMList[] { Trammel, Felucca };
public static readonly PMList[] UORlistsYoung = new PMList[] { Trammel };
public static readonly PMList[] LBRLists = new PMList[] { Trammel, Felucca, Ilshenar };
public static readonly PMList[] LBRListsYoung = new PMList[] { Trammel, Ilshenar };
public static readonly PMList[] AOSLists = new PMList[] { Trammel, Felucca, Malas, Ilshenar };
public static readonly PMList[] AOSListsYoung = new PMList[] { Trammel, Malas, Ilshenar };
public static readonly PMList[] SELists = new PMList[] { Trammel, Felucca, Tokuno, Malas, Ilshenar };
public static readonly PMList[] SEListsYoung = new PMList[] { Trammel, Tokuno, Malas, Ilshenar };
public static readonly PMList[] RedLists = new PMList[] { Felucca };
public static readonly PMList[] SigilLists = new PMList[] { Felucca };
}
public class MoongateGump : Gump
{
private Mobile m_Mobile;
private Item m_Moongate;
private PMList[] m_Lists;
public MoongateGump( Mobile mobile, Item moongate ) : base( 100, 100 )
{
m_Mobile = mobile;
m_Moongate = moongate;
PMList[] checkLists;
if ( mobile.Player )
{
if ( Factions.Sigil.ExistsOn( mobile ) )
{
checkLists = PMList.SigilLists;
}
else if ( mobile.Kills >= 5 )
{
checkLists = PMList.RedLists;
}
else
{
int flags = mobile.NetState == null ? 0 : mobile.NetState.Flags;
bool young = mobile is PlayerMobile ? ((PlayerMobile)mobile).Young : false;
if ( Core.SE && (flags & 0x10) != 0 )
checkLists = young ? PMList.SEListsYoung : PMList.SELists;
else if ( Core.AOS && (flags & 0x8) != 0 )
checkLists = young ? PMList.AOSListsYoung : PMList.AOSLists;
else if ( (flags & 0x4) != 0 )
checkLists = young ? PMList.LBRListsYoung : PMList.LBRLists;
else
checkLists = young ? PMList.UORlistsYoung : PMList.UORLists;
}
}
else
{
checkLists = PMList.SELists;
}
m_Lists = new PMList[checkLists.Length];
for ( int i = 0; i < m_Lists.Length; ++i )
m_Lists[i] = checkLists[i];
for ( int i = 0; i < m_Lists.Length; ++i )
{
if ( m_Lists[i].Map == mobile.Map )
{
PMList temp = m_Lists[i];
m_Lists[i] = m_Lists[0];
m_Lists[0] = temp;
break;
}
}
AddPage( 0 );
AddBackground( 0, 0, 380, 280, 5054 );
AddButton( 10, 210, 4005, 4007, 1, GumpButtonType.Reply, 0 );
AddHtml( 45, 210, 140, 25, "À̵¿", false, false ); // OKAY
AddButton( 10, 235, 4005, 4007, 0, GumpButtonType.Reply, 0 );
AddHtml( 45, 235, 140, 25, "Ãë¼Ò", false, false ); // CANCEL
AddHtml( 5, 5, 200, 20, "¸ñÀûÁö¸¦ ¼±ÅÃÇØÁÖ¼¼¿ä.", false, false ); // Pick your destination:
for ( int i = 0; i < checkLists.Length; ++i )
{
AddButton( 10, 35 + (i * 25), 2117, 2118, 0, GumpButtonType.Page, Array.IndexOf( m_Lists, checkLists[i] ) + 1 );
AddHtml( 30, 35 + (i * 25), 150, 20, checkLists[i].Number, false, false );
}
for ( int i = 0; i < m_Lists.Length; ++i )
RenderPage( i, Array.IndexOf( checkLists, m_Lists[i] ) );
}
private void RenderPage( int index, int offset )
{
PMList list = m_Lists[index];
AddPage( index + 1 );
AddButton( 10, 35 + (offset * 25), 2117, 2118, 0, GumpButtonType.Page, index + 1 );
AddHtml( 30, 35 + (offset * 25), 150, 20, list.SelNumber, false, false );
PMEntry[] entries = list.Entries;
for ( int i = 0; i < entries.Length; ++i )
{
AddRadio( 200, 35 + (i * 25), 210, 211, false, (index * 100) + i );
AddHtml( 225, 35 + (i * 25), 150, 20, entries[i].Number, false, false );
}
}
public override void OnResponse( NetState state, RelayInfo info )
{
if ( info.ButtonID == 0 ) // Cancel
return;
else if ( m_Mobile.Deleted || m_Moongate.Deleted || m_Mobile.Map == null )
return;
int[] switches = info.Switches;
if ( switches.Length == 0 )
return;
int switchID = switches[0];
int listIndex = switchID / 100;
int listEntry = switchID % 100;
if ( listIndex < 0 || listIndex >= m_Lists.Length )
return;
PMList list = m_Lists[listIndex];
if ( listEntry < 0 || listEntry >= list.Entries.Length )
return;
PMEntry entry = list.Entries[listEntry];
if ( !m_Mobile.InRange( m_Moongate.GetWorldLocation(), 1 ) || m_Mobile.Map != m_Moongate.Map )
{
m_Mobile.SendLocalizedMessage( 1019002 ); // You are too far away to use the gate.
}
else if ( m_Mobile.Player && m_Mobile.Kills >= 5 && list.Map != Map.Felucca )
{
m_Mobile.SendLocalizedMessage( 1019004 ); // You are not allowed to travel there.
}
else if ( Factions.Sigil.ExistsOn( m_Mobile ) && list.Map != Factions.Faction.Facet )
{
m_Mobile.SendLocalizedMessage( 1019004 ); // You are not allowed to travel there.
}
else if ( m_Mobile.Criminal )
{
m_Mobile.SendLocalizedMessage( 1005561, "", 0x22 ); // Thou'rt a criminal and cannot escape so easily.
}
else if ( Server.Spells.SpellHelper.CheckCombat( m_Mobile ) )
{
m_Mobile.SendLocalizedMessage( 1005564, "", 0x22 ); // Wouldst thou flee during the heat of battle??
}
else if ( m_Mobile.Spell != null )
{
m_Mobile.SendLocalizedMessage( 1049616 ); // You are too busy to do that at the moment.
}
else if ( m_Mobile.Map == list.Map && m_Mobile.InRange( entry.Location, 1 ) )
{
m_Mobile.SendLocalizedMessage( 1019003 ); // You are already there.
}
else
{
BaseCreature.TeleportPets( m_Mobile, entry.Location, list.Map );
m_Mobile.Combatant = null;
m_Mobile.Warmode = false;
m_Mobile.Hidden = true;
m_Mobile.MoveToWorld( entry.Location, list.Map );
Effects.PlaySound( entry.Location, list.Map, 0x1FE );
}
}
}
}
|
|