public static GameObject Add( int gameObjectId, float X, float Y, float Z, float O, ushort MapId ) { GameObject go = new GameObject( gameObjectId, X, Y, Z, MapId ); go.Orientation = O; // allGameObjects.Add( go ); return go; }
void OnCommand( string cmd ) { if ( Player.AccessLevel == AccessLevels.PlayerLevel ) { string lower = cmd.ToLower(); if ( lower.StartsWith( ".help" ) ) { SendMessage( "Command lists" ); SendMessage( ".whois" ); SendMessage( ".mount" ); SendMessage( ".unmount" ); } else if ( lower.StartsWith( ".whois" ) ) { foreach( Account a in World.allConnectedAccounts ) { if ( a.SelectedChar != null ) SendMessage( a.SelectedChar.Name + " is online at ( " + a.SelectedChar.X.ToString() + "; " + a.SelectedChar.Y.ToString() + "; "+ a.SelectedChar.Z.ToString() + ") " ); } SendMessage( "User online : " + World.allConnectedAccounts.Count.ToString() ); } else if ( lower.StartsWith( ".mount" ) ) { if ( selection != null && selection is Mobile ) { if ( World.MountsList[ ( selection as Mobile ).Id ] != null ) Mount( selection as Mobile ); } } else if ( lower.StartsWith( ".unmount" ) ) { if ( this.MountModel != 0 ) UnMount(); } } else if ( Player.AccessLevel == AccessLevels.Admin ) { string lower = cmd.ToLower(); if ( lower.StartsWith( ".importspawner" ) ) { ImportSpawner(); } else if ( lower.StartsWith( ".exportspawner" ) ) { ExportSpawner(); } else if ( lower.StartsWith( ".import" ) ) { ImportWad(); } else if ( lower.StartsWith( ".help" ) ) { SendMessage( "Command lists" ); SendMessage( ".help" ); SendMessage( ".Addnpc [MobName|MobId] [amount] [faction]" ); SendMessage( ".AddItem ItemName [amount]" ); SendMessage( ".Addgo GameObjectNumber" ); SendMessage( ".AddSpawner [MobName|MobId] amount frequency" ); SendMessage( ".AddGoSpawner GameObjectId frequency [classname]" ); SendMessage( ".kill" ); SendMessage( ".nuke" ); SendMessage( ".info" ); SendMessage( ".where" ); SendMessage( ".remove" ); SendMessage( ".set xp Amount" ); SendMessage( ".set faction FactionNumber" ); SendMessage( ".set godmode [on/off]" ); SendMessage( ".set turbo [on/off]" ); SendMessage( ".password NewPassword" ); SendMessage( ".grant [account|selected char] AccessLevel" ); SendMessage( ".go LocationName | [ X Y Z MapId ]" ); SendMessage( ".addlocation LocationName" ); SendMessage( ".restart XMinutes" ); SendMessage( ".whois" ); SendMessage( ".broadcast Message" ); SendMessage( ".hide" ); SendMessage( ".unhide" ); SendMessage( ".docgen" ); SendMessage( ".removego" ); SendMessage( ".armagedon" ); SendMessage( ".mount" ); SendMessage( ".unmount" ); } else if ( lower.StartsWith( ".mount" ) ) { if ( selection != null && selection is Mobile ) { if ( World.MountsList[ ( selection as Mobile ).Id ] != null ) Mount( selection as Mobile ); } } else if ( lower.StartsWith( ".test" ) ) { string []tt = cmd.Split( new char[]{ ' ' } ); if ( tt.Length != 3 ) { SendMessage( "Usage : .test MobName1 MobName2" ); return; } if ( testCombatStarted ) { SendMessage( "A fight test is not finished yet !!" ); return; } //tt[ 1 ] = "SilverwingWarrior"; //tt[ 2 ] = "RazorHillGrunt"; ConstructorInfo ct1 = Utility.FindConstructor( tt[ 1 ] , Utility.externAsm[ "creatures" ] ); ConstructorInfo ct2 = Utility.FindConstructor( tt[ 2 ] , Utility.externAsm[ "creatures" ] ); testCombatStarted = true; for(int t = 0;t < 50;t++ ) { BaseCreature bc = (BaseCreature)ct1.Invoke( null ); bc.Faction = Factions.Alliance; World.Add( bc, -13210f + (float)( Utility.Random( 50 ) - 25 ), 267.6f+ (float)( Utility.Random( 50 ) - 25 ), 22f, 0 ); team1.Add( bc ); bc = (BaseCreature)ct2.Invoke( null ); bc.Faction = Factions.Horde; World.Add( bc, -13210f + (float)( Utility.Random( 50 ) - 25 ), 287.6f+ (float)( Utility.Random( 50 ) - 25 ), 22f, 0 ); team2.Add( bc ); } MobBalance mb = new MobBalance( this ); } else if ( lower.StartsWith( ".." ) ) { string []ss = lower.Split( new char[] { ' ' } ); ff = (uint)Convert.ToInt32( ss[ 1 ] ); SendMessage("num = " + ff.ToString("X8" )); /* if ( selection is Mobile ) ( selection as Mobile ).SendSmallUpdateToPlayerNearMe( new int[] { (int)UpdateFields.UNIT_DYNAMIC_FLAGS }, new object[] { ff } ); */ SendSmallUpdate( new int[]{ (int)UpdateFields.UNIT_FIELD_FACTIONTEMPLATE }, new object[]{ ff } ); } else if ( lower.StartsWith( ".close" ) ) { MainConsole.StopAllThread(); } else if ( lower.StartsWith( ".mars" ) ) {/* Hashtable hy = null; hy = World.mapZones.GetZoneHash( MapId, ZoneId, X, Y );//(Hashtable)World.mapZones.Azeroth[ MapId * 1024 + ZoneId ]; for(float x = X - 16;x < X + 16;x+=MapZones.UNITSIZE ) { for(float y = Y - 16;y < Y + 16;y++ ) { int coordy = (int)( y / ( MapZones.UNITSIZE * 0.5f ) ); int coordx = (int)( x / MapZones.UNITSIZE ); bool decal = false;; if ( (int)( coordy & 1 ) == 1 ) { decal = true; coordx -= (int)( MapZones.UNITSIZE * 0.5f ); } uint cx = (uint)( coordx + 0x8000 ); uint cy = (uint)( coordy + 0x8000 ); object o = hy[ (uint)( ( coordx << 16 ) + coordy ) ]; if ( o != null ) { float xx = (float)coordx * ( MapZones.UNITSIZE ); float yy = (float)coordy * MapZones.UNITSIZE * 0.5f; if ( decal ) { xx += MapZones.UNITSIZE * 0.5f; } GameObject go = World.Add( 621682, xx, yy, (float)o, MapId ); World.allSpawners[ linkedSpawner ].Bind( go ); } } } account.RefreshMobileList( true );*/ MapPoint mp = World.mapZones.NearestPoint( null, MapId, ZoneId, X, Y ); SendMessage( "X=" + mp.x.ToString() + " Y=" + mp.y.ToString() ); GameObject go = World.Add( 621682, mp.x , mp.y, mp.z, 0, MapId ); World.allSpawners[ linkedSpawner ].Bind( go ); account.RefreshMobileList( true ); //MainConsole.StopAllThread(); // Mobile.GetDirection( this, selection as Mobile ); // return; // p.Kill(); //for(float xxa = X - 10;xxa < //string []ss = lower.Split( new char[] { ' ' } ); //uint xff = (uint)Convert.ToUInt32( ss[ 1 ] ); // Items[ 24 ].SendSmallUpdate( new int[]{ (int)UpdateFields.ITEM_FIELD_FLAGS }, new object[]{ xff }, this ); /* Converter.ToBytes( cast.id, tempBuff, ref offset ); Converter.ToBytes( (byte)1, tempBuff, ref offset ); ToAllPlayerNear( OpCodes.SMSG_CAST_RESULT, tempBuff, offset ); offset = 4;*/ /*Converter.ToBytes( 6, tempBuff, ref offset ); Converter.ToBytes( (byte)2, tempBuff, ref offset ); Converter.ToBytes( (byte)xff, tempBuff, ref offset ); Converter.ToBytes( msg, tempBuff, ref offset ); ToAllPlayerNear( OpCodes.SMSG_CAST_RESULT, tempBuff, offset );*/ cast.id = 8613; cast.type = 2; //SpellFaillure( ( SpellFailedReason )xff ); /* int ff2 = (int)Convert.ToInt32( ss[ 2 ] ); SendMessage("num = " + xff.ToString("X8" )); int offset = 4; Converter.ToBytes( 1, tempBuff, ref offset ); Converter.ToBytes( xff, tempBuff, ref offset ); Converter.ToBytes( ff2, tempBuff, ref offset ); if ( selection is Mobile ) this.Send( OpCodes.SMSG_SET_FACTION_STANDING, tempBuff, offset ); */ // ReputationAdjustments[ World.FactionAssociated[ Factions.Stormwind ] ] = (int)xff; // this.Player.RefreshFactionReactions(); // ( selection as Mobile ).SendSmallUpdateToPlayerNearMe( new int[] { (int)UpdateFields.UNIT_FIELD_FLAGS }, new object[] { ff } ); } else if ( lower.StartsWith( ".mare" ) ) { /* if ( selection ==null ) return; string []ss = lower.Split( new char[] { ' ' } ); int ff1 = Convert.ToInt32( ss[ 1 ] ); // int ff2 = Convert.ToInt32( ss[ 2 ] ); SendMessage("num = " + ff1.ToString("X8" )); int offset = 4; Converter.ToBytes( selection.Guid, tempBuff, ref offset ); Converter.ToBytes( ff1, tempBuff, ref offset ); this.Send( OpCodes.SMSG_AI_REACTION, tempBuff, offset ); return;*/ /* if ( selection is Mobile ) ( selection as Mobile ).SendSmallUpdateToPlayerNearMe( new int[] { (int)UpdateFields.PLAYER_FLAGS }, new object[] { ff } ); */ /* for(int z = 0;z < 32;z++ ) zones[ z ] = 0; for(int z = 0; z < 32 * 32;z++) { if ( z >= ff1 && z < ff2 ) { int e = z % 32; int n = ( z / 32 ); zones[ n ] |= (uint)( 1 << ( e ) ); } } for(int z = 0;z < 32;z++ ) { this.SendSmallUpdate( new int[] { (int)UpdateFields.PLAYER_EXPLORED_ZONES_1 + z }, new object[] { zones[ z ] } ); }*/ } else if ( lower.StartsWith( ".marb" ) ) { string []ss = lower.Split( new char[] { ' ' } ); ff = (uint)Convert.ToInt32( ss[ 1 ] ); SendMessage("num = " + ff.ToString("X8" )); if ( selection is Mobile ) ( selection as Mobile ).SendSmallUpdateToPlayerNearMe( new int[] { (int)UpdateFields.PLAYER_FIELD_BYTES }, new object[] { ff } ); } else if ( lower.StartsWith( ".marf" ) ) { string []ss = lower.Split( new char[] { ' ' } ); ff = (uint)Convert.ToInt32( ss[ 1 ] ); SendMessage("num = " + ff.ToString("X8" )); if ( selection is Mobile ) ( selection as Mobile ).SendSmallUpdateToPlayerNearMe( new int[] { (int)UpdateFields.UNIT_NPC_FLAGS }, new object[] { ff } ); } /*else if ( lower.StartsWith( ".s" ) ) { string []ss = lower.Split( new char[] { ' ' } ); SpellFaillure( (Server.SpellFailedReason)Convert.ToInt32( ss[ 1 ] ) ); }*/ /* else if ( lower.StartsWith( ".s" ) ) { string []ss = lower.Split( new char[] { ' ' } ); if ( ss.Length > 1 ) ff |= (uint)( 1 << Convert.ToInt32( ss[ 1 ] ) ); if ( selection is Character ) ( selection as Character ).SendSmallUpdateToPlayerNearMe( new int[] { (int)UpdateFields.UNIT_FIELD_FLAGS }, new object[] { ff } ); else ( selection as Mobile ).SendSmallUpdateToPlayerNearMe( new int[] { (int)UpdateFields.UNIT_FIELD_FLAGS }, new object[] { ff } ); Console.WriteLine("rage = {0}", ff.ToString("X8" )); } else if ( lower.StartsWith( ".u" ) ) { string []ss = lower.Split( new char[] { ' ' } ); if ( ss.Length > 1 ) ff &= (uint)0xffffffff ^ (uint)( 1 << Convert.ToInt32( ss[ 1 ] ) ); if ( selection is Character ) ( selection as Character ).SendSmallUpdateToPlayerNearMe( new int[] { (int)UpdateFields.UNIT_FIELD_FLAGS }, new object[] { ff } ); else ( selection as Mobile ).SendSmallUpdateToPlayerNearMe( new int[] { (int)UpdateFields.UNIT_FIELD_FLAGS }, new object[] { ff } ); Console.WriteLine("rage = {0}", ff.ToString("X8" )); } */ else if ( lower.StartsWith( ".unmount" ) ) { if ( this.MountModel != 0 ) UnMount(); } else if ( lower.StartsWith( ".set faction" ) ) { string []tt = cmd.Split( new char[]{ ' ' } ); if ( selection is Mobile ) { if ( tt.Length == 3 ) { int fac = Convert.ToInt32( tt[ 2 ] ); ( selection as Mobile ).SendSmallUpdateToPlayerNearMe( new int[]{ (int)UpdateFields.UNIT_FIELD_FACTIONTEMPLATE }, new object[]{ (int)fac } ); } else SendMessage("Usage : .set faction FACTION_NUMBER" ); } else SendMessage("You must select a mobile first !" ); } else if ( lower.StartsWith( ".removego" ) ) { Object nearest = null; float nearestdist = float.MaxValue; foreach( Object o in World.allGameObjects ) { float dist = Distance( o ); if ( dist < nearestdist ) { nearestdist = dist; nearest = o; } } if ( nearest != null ) World.Remove( nearest, this ); } else if ( lower.StartsWith( ".docgen" ) ) { SendMessage("Documentation is being generated, please wait."); Console.WriteLine( "Documentation is being generated, please wait." ); DateTime startTime = DateTime.Now; Docs.Document(); DateTime endTime = DateTime.Now; Console.WriteLine("Documentation has been completed. The entire process took {0:F1} seconds.", (endTime - startTime).TotalSeconds ); SendMessage("Documentation has been completed. The entire process took " + (endTime - startTime).TotalSeconds.ToString( "F1" ) + " seconds." ); return; } else if ( lower == ".hide" ) { this.Visible = InvisibilityLevel.GM; AuraEffect st = gmInvisibilityAura; Aura aura = new Aura(); aura.OnRelease = new Aura.AuraReleaseDelegate( OnGMInvisibilityEnded ); AddAura( st, aura ); } else if ( lower.StartsWith( ".unhide" ) ) { this.Visible = InvisibilityLevel.Visible; this.ReleaseAura( gmInvisibilityAura ); } else if ( lower.StartsWith( ".whois" ) ) { foreach( Account a in World.allConnectedAccounts ) { if ( a.SelectedChar != null ) SendMessage( a.Username.ToString() + " : " + a.SelectedChar.Name + " is online at ( " + a.SelectedChar.X.ToString() + "; " + a.SelectedChar.Y.ToString() + "; "+ a.SelectedChar.Z.ToString() + ") " ); else SendMessage( a.Username.ToString() + " : [loggout]" ); } SendMessage( "User online : " + World.allConnectedAccounts.Count.ToString() ); } else if ( lower.StartsWith( ".broadcast " ) ) { string tt = cmd.Remove( 0, 11 ); foreach( Account a in World.allConnectedAccounts ) { if ( a.SelectedChar != null ) SendMessage( a.Username.ToString() + ", " + tt ); } } else if ( lower.StartsWith( ".restart " ) ) { string []tt = cmd.Split( new char[]{ ' ' } ); if ( tt.Length == 2 ) { World.Restart( Convert.ToInt32( tt[ 1 ] ) ); } else SendMessage( "Usage : .restart minutes" ); } else if ( lower.StartsWith( ".addlocation " ) ) { string []tt = cmd.Split( new char[]{ ' ' } ); if ( tt.Length == 2 ) { TextReader tr = new StreamReader( "./scripts/Globals/Locations.cs" ); string txt = tr.ReadToEnd(); tr.Close(); TextWriter tw = new StreamWriter( "./scripts/Globals/Locations.cs" ); int i = txt.IndexOf( "#region Locations" ); string ne = "\t\t\tWorld.Locations[ \"" + tt[ 1 ] + "\" ] = new Position( " + X.ToString() + "f, " + Y.ToString() + "f, " + Z.ToString() + "f, 0 );" + tw.NewLine; tw.Write( txt.Substring( 0, i + "#region Locations".Length ) ); tw.Write( tw.NewLine + ne ); tw.Write( txt.Substring( i + "#region Locations".Length ) ); // txt.Insert( i + "#region Locations".Length + 2, ne ); // tw.Write( txt ); tw.Close(); SendMessage( "Done : " + ne ); } else SendMessage( "Usage : .addlocation LocationName" ); } else if ( lower.StartsWith( ".zone" ) ) { string []tt = cmd.Split( new char[]{ ' ' } ); this.ZoneUpdateRequested( Convert.ToInt32( tt[ 1 ] ) ); } else if ( lower.StartsWith( ".grant " ) ) { string acclevel = lower.Remove( 0, 7 ); string []tt = acclevel.Split( new char[]{ ' ' } ); Account acc = null; if ( tt.Length == 1 ) { if ( selection is Character ) { acclevel = tt[ 0 ]; acc = ( selection as Character ).Player; } else { SendMessage( "Can only be used on character" ); return; } } else { if ( tt.Length > 2 || tt.Length == 0 ) { SendMessage( "Usage : .grant [Account] AccessLevel" ); return; } acclevel = tt[ 1 ]; acc = World.allAccounts.FindByUserName( tt[ 0 ].ToUpper() ); if ( acc == null ) { SendMessage( tt[ 0 ] + " account not found !" ); return; } } if ( acclevel == "admin" ) { SendMessage( "The account " + acc.Username + " is now an administrator" ); acc.AccessLevel = AccessLevels.Admin; } else if ( acclevel == "gm" ) { SendMessage( "The account " + acc.Username + " is now a game master" ); acc.AccessLevel = AccessLevels.GM; } else if ( acclevel == "player" ) { SendMessage( "The account " + acc.Username + " have now player access level" ); acc.AccessLevel = AccessLevels.PlayerLevel; } else SendMessage( acclevel + " is not a valid access level !" ); } else if ( lower.StartsWith( ".password " ) ) { string []tt = cmd.Split( new char[]{ ' ' } ); if ( tt.Length < 2 ) { SendMessage( "Usage : .password NewPassword" ); return; } Player.Password = tt[ 1 ]; SendMessage( "Your new password is : " + tt[ 1 ] ); SendMessage( "Don't forget it !" ); } else if ( lower.StartsWith( ".info" ) ) { if ( selection != null ) { string ret = ""; if ( selection is BaseSpawner ) { ( selection as BaseSpawner ).DisplayInfo( this ); // ret += "Spawner for " + ( selection as BaseSpawner ).Name; // SendMessage( ret ); return; } else if ( selection is Character ) ret += "Player : "; else if ( ( selection as Mobile ).SummonedBy != null ) ret += "Summoned creature : "; else ret += "Creature : "; Mobile mob = ( selection as Mobile ); ret += mob.Name + " Faction : " + mob.Faction.ToString(); SendMessage( ret ); ret = "Pos : " + mob.X.ToString() + ", " + mob.Y.ToString() + ", " + selection.Z.ToString() + ", " + selection.MapId.ToString(); SendMessage( ret ); ret = "HitPoints : " + mob.HitPoints.ToString() + " / " + mob.BaseHitPoints.ToString(); SendMessage( ret ); ret = "Mana : " + mob.Mana.ToString() + " / " + mob.BaseMana.ToString(); SendMessage( ret ); ret = "Level : " + mob.Level.ToString() + " / " + mob.Exp.ToString() + " Xp"; SendMessage( ret ); } else SendMessage( "You must select a mobile before" ); } else if ( lower.StartsWith( ".kill" ) ) { if ( selection != null && selection is Mobile ) { ( selection as Mobile ).LooseHits( this, ( selection as Mobile ).HitPoints, true ); } } else if ( lower.StartsWith( ".addgospawner" ) ) { GameObjectSpawner bc = null; string []tt = cmd.Split( new char[]{ ' ' } ); if ( tt.Length == 3 ) { try { if ( Utility.FindConstructor( tt[ 1 ] ) != null ) { ConstructorInfo cttest = Utility.FindConstructor( tt[ 1 ] ); GameObject go = (GameObject)cttest.Invoke( null ); if ( go.DefaultModel == 0 ) { SendMessage( "This class does not implement the DefaultModel property !" ); return; } bc = new GameObjectSpawner(); bc.Init( tt[ 1 ], Convert.ToInt32( tt[ 2 ] ) ); World.Add( bc, X, Y, Z, MapId ); } else { bc = new GameObjectSpawner(); int id = Convert.ToInt32( tt[ 1 ] ); bc.Init( id, Convert.ToInt32( tt[ 2 ] ) ); World.Add( bc, X, Y, Z, MapId ); } } catch( Exception ) { } } else if ( tt.Length == 4 ) { try { bc = new GameObjectSpawner(); int id = Convert.ToInt32( tt[ 1 ] ); bc.Init( id, Convert.ToInt32( tt[ 2 ] ), tt[ 3 ] ); World.Add( bc, X, Y, Z, MapId ); } catch( Exception ) { } } else SendMessage( "usage : .addgospawner gameobjectname frequency [gameobjectclass]" ); if ( bc != null )// Ajoute le spawner dans la liste des autres spawnpoints { if ( this.linkedSpawner == -1 )// No spawner near the player { } else { int num = World.allSpawners.Count - 1; ArrayList al = new ArrayList(); World.regSpawners[ num ] = al; for(int t = 0;t < num;t++ ) { BaseSpawner bs2 = World.allSpawners[ t ] as BaseSpawner; if ( bc.MapId != bs2.MapId ) continue; if ( bc.QuickDistance( bs2 ) < 150 * 150 ) al.Add( t ); } foreach( int i in al ) { ( World.regSpawners[ i ] as ArrayList ).Add( num ); } } } } else if ( lower.StartsWith( ".armagedon" ) ) { MobileList newMobs = new MobileList(); int n = 0; foreach( Mobile m in World.allMobiles ) if ( m is Character ) { newMobs.Add( m ); } else n++; n += World.allSpawners.Count; LinkedSpawner = -1; World.allSpawners.Clear(); World.allMobiles = newMobs; Player.RefreshMobileList( true ); SendMessage( n.ToString() + " mobs/spawners removed !" ); } else if ( lower.StartsWith( ".nuke" ) ) { MobileList newMobs = new MobileList(); int n = 0; foreach( Mobile m in World.allMobiles ) if ( m is Character )//|| m is BaseSpawner ) { newMobs.Add( m ); } else n++; World.allSpawners.Clear(); World.allMobiles = newMobs; SendMessage( n.ToString() + " mobs removed !" ); } else if ( lower.StartsWith( ".set godmode on" ) ) { if ( selection != null && selection is Mobile ) { ( selection as Mobile ).GodMode = true; } else GodMode = true; } else if ( lower.StartsWith( ".set godmode off" ) ) { if ( selection != null && selection is Mobile ) { ( selection as Mobile ).GodMode = false; } else GodMode = false; } else if ( lower.StartsWith( ".set turbo on" ) ) { RunSpeed = 40f; this.ChangeRunSpeed( 40f ); } else if ( lower.StartsWith( ".set turbo off" ) ) { RunSpeed = 7f; this.ChangeRunSpeed( 7f ); /* int offset = 4; Converter.ToBytes( 1, tempBuff, ref offset ); Converter.ToBytes( (byte)0, tempBuff, ref offset ); WalkSpeed = 4.777f; RunSpeed = 7f; this.PrepareUpdateData( tempBuff, ref offset , UpdateType.UpdateFull, false ); this.Send( OpCodes.SMSG_UPDATE_OBJECT, tempBuff, offset );*/ } else if ( lower.StartsWith( ".guid" ) ) { if ( selection == null ) SendMessage( "Guid : " + Guid.ToString( "X16" ) ); else SendMessage( "Guid : " + selection.Guid.ToString( "X16" ) ); } else if ( lower.StartsWith( ".addspawner" ) ) { string []tt = cmd.Split( new char[]{ ' ' } ); if ( tt.Length == 4 ) { ConstructorInfo ct = null; try { MobileSpawner bc = new MobileSpawner(); try { int mid = (int)Convert.ToInt32( tt[ 1 ] ); ct = World.MobilePool( mid ); } catch(Exception) { ct = Utility.FindConstructor( tt[ 1 ], Utility.externAsm[ "creatures" ] ); if ( ct == null ) ct = Utility.FindConstructor( tt[ 1 ] ); } BaseCreature b = (BaseCreature)ct.Invoke( null ); float rec = float.MaxValue; foreach( BaseSpawner bs in World.allSpawners ) { float xx = X - bs.X; float yy = Y - bs.Y; xx *= xx; yy *= yy; xx += xx; if ( xx < rec && bs.MapId == MapId ) { rec = xx; bc.ZoneId = bs.ZoneId; bc.MapId = bs.MapId; } } //MapPoint mp = World.mapZones.NearestPoint( bc.MapId, bc.ZoneId, X, Y ); bc.RealX = X; bc.RealY = Y; bc.RealZ = Z; bc.Model = b.Model; bc.Id = 99999999 - b.Id; bc.Orientation = Orientation; bc.Init( ct, b.Id, Convert.ToInt32( tt[ 3 ] ), Convert.ToInt32( tt[ 2 ] ) ); World.Add( bc, X, Y, Z, MapId ); if ( this.linkedSpawner == -1 )// No spawner near the player { } else { int num = World.allSpawners.Count - 1; ArrayList al = new ArrayList(); World.regSpawners[ num ] = al; for(int t = 0;t < num;t++ ) { BaseSpawner bs2 = World.allSpawners[ t ] as BaseSpawner; if ( bc.MapId != bs2.MapId ) continue; if ( bc.QuickDistance( bs2 ) < 150 * 150 ) al.Add( t ); } foreach( int i in al ) { ( World.regSpawners[ i ] as ArrayList ).Add( num ); } } bc.ForceRespawn(); Player.RefreshMobileList( true ); } catch( Exception ) { } } else SendMessage( "usage : .addspawner mobname amount frequency" ); } else if ( lower.StartsWith( ".set xp" ) ) { string []tt = cmd.Split( new char[]{ ' ' } ); if ( tt.Length == 3 ) { Character c = selection as Character; if ( c == null ) c = this; try { uint a = Convert.ToUInt32( tt[ 2 ] ) - c.Exp; c.EarnXP( (int)a ); } catch( Exception ) { this.SendMessage( "usage : .set xp amount" ); } } } else if ( lower.StartsWith( ".debug" ) ) { if ( selection != null ) { if ( selection is BaseCreature ) { BaseCreature bc = selection as BaseCreature; if ( bc.DebugSniffer != null ) { bc.DebugSniffer = null; SendMessage( "Debug Off" ); return; } else { bc.DebugSniffer = this; SendMessage( "Debug On" ); } } } } #region TRAJETS !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! else if ( lower.StartsWith( ".hidepath" ) ) { ArrayList toRemove = new ArrayList(); foreach( GameObject go in World.allGameObjects ) if ( go.Id >= 621680 && go.Id <= 621683 ) toRemove.Add( go ); foreach( GameObject go in toRemove ) World.allGameObjects.Remove( go ); this.account.RefreshMobileList( true ); } else if ( lower.StartsWith( ".showpath" ) ) { foreach( Trajet tr in World.trajets ) { bool start = true; foreach( Coord c in tr ) { GameObject go; if ( Distance( c.x, c.y, c.z ) < 400 * 400 ) { if ( c is Intersection ) { go = World.Add( 621682, c.x, c.y, c.z, MapId ); } else { if ( start ) go = World.Add( 621681, c.x, c.y, c.z, MapId ); else go = World.Add( 621680, c.x, c.y, c.z, MapId ); } } start = false; } } this.account.RefreshMobileList( true ); } else if ( lower.StartsWith( ".delpath" ) ) { if ( startTrajetFlag != null ) DestroyObject( startTrajetFlag.Guid ); World.RemoveTrajet( path ); path.Clear(); path = null;//World.AllocateTrajet(); SendMessage( "Path is removed" ); } else if ( lower.StartsWith( ".startpath" ) ) { if ( selection is MobileSpawner ) { World.trajets.Dirty = true; if ( startTrajetFlag != null ) DestroyObject( startTrajetFlag.Guid ); path = World.AllocateTrajet(); ( selection as MobileSpawner ).TrajetGuid = path.Guid; startTrajetFlag = World.Add( 621681, X, Y, Z, MapId ); foreach( Object o in this.KnownObjects ) if ( o is BaseCreature ) { if ( ( o as BaseCreature ).SpawnerLink == selection ) { ( o as BaseCreature ).Freeze = true; } } //startTrajetFlag.Decay = DateTime.Now.Add( TimeSpan.FromMinutes( 15.0 ) ); SendMessage( "Start a new path for the spawner" ); } else SendMessage( "You must select a spawner before starting a new path" ); } else if ( lower.StartsWith( ".endpath" ) ) { if ( startTrajetFlag != null ) { World.Remove( startTrajetFlag, this ); } if ( path != null && path.Count > 1 ) { path[ 0 ].previous = path[ path.Count - 1 ]; path[ path.Count - 1 ].next = path[ 0 ]; } foreach( Object o in this.KnownObjects ) if ( o is BaseCreature ) { if ( ( o as BaseCreature ).SpawnerLink == selection ) { ( o as BaseCreature ).Freeze = true; } } path = null; SendMessage( "Path loop completed" ); } #endregion TRAJETS !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! else if ( lower.StartsWith( ".cast " ) ) { string []tt = cmd.Split( new char[]{ ' ' } ); if ( selection != null && selection is Mobile ) { try { int i = Convert.ToInt32( tt[ 1 ] ); ( selection as Mobile ).FakeCast( i, this ); } catch( Exception ) { SendMessage( "Invalid spell id !" ); } } else SendMessage( "You must target a mobile !" ); } else if ( lower.StartsWith( ".additem " ) ) { string []tt = cmd.Split( new char[]{ ' ' } ); if ( tt.Length == 3 ) { try { CreateAndAddObject( tt[ 1 ], Convert.ToInt32( tt[ 2 ] ) ); } catch( Exception ) { this.SendMessage( "usage : .additem ItemName [number]" ); } } else if ( tt.Length == 2 ) CreateAndAddObject( tt[ 1 ] ); else this.SendMessage( "usage : .additem ItemName [number]" ); } else if ( lower.StartsWith( ".addgo " ) ) { try { cmd = cmd.Remove( 0, 7 ); string []tt = cmd.Split( new char[]{ ' ' } ); int i = Convert.ToInt32( tt[ 0 ] ); if ( GameObjectDescription.all[ i ]== null ) { SendMessage( "Unknow Game object " + i.ToString() ); return; } GameObject go = null; if ( World.GameObjectsAssociated.Exist( i ) ) { go = World.Add( i, Utility.ClassName( World.GameObjectsAssociated[ i ].ToString() ), X, Y, Z, MapId ); go.Id = i; } else go = World.Add( i, X, Y, Z, MapId ); if ( this.linkedSpawner == -1 ) { SendMessage( "You cannot place a game object here, first place a spawner !" ); } else { World.allSpawners[ linkedSpawner ].Bind( go ); account.RefreshMobileList( true ); } } catch( Exception ) { } } else if ( lower.StartsWith( ".where" ) ) { SendMessage( "X = " + X.ToString() + ", Y = " + Y.ToString() + ", Z = " + Z.ToString() + " mapId = " + this.MapId.ToString() ); } else if ( lower == ".remove" ) { if ( selection != null ) { selection.Delete(); if ( selection.Guid > 0xF100000000000000 ) { World.allSpawners.Remove( selection as BaseSpawner ); SendMessage( "Spawnpoint deleted" ); this.linkedSpawner = -1; } else { World.allMobiles.Remove( selection as Mobile ); SendMessage( ( selection as Mobile ).Name + " deleted" ); } account.HeartBeat(); } } else if ( lower.StartsWith( ".addnpc " ) ) { //SendMessage( cmd ); string []cmds = cmd.Split( new char[]{ ' ' } ); if ( cmds.Length < 2 ) { SendMessage( "Usage : .addnpc NpcName [howmany]" ); return; } Factions fact = Factions.NoFaction; int n = 1; if ( cmds.Length == 3 ) { try { n = Convert.ToInt32( cmds[ 2 ] ); } catch(Exception) { } } if ( cmds.Length == 4 ) { try { fact = (Factions)Convert.ToInt32( cmds[ 3 ] ); } catch(Exception) { } } for(int t = 0;t < n;t++ ) { ConstructorInfo ct = null; try { int mid = (int)Convert.ToInt32( cmds[ 1 ] ); ct = World.MobilePool( mid ); } catch(Exception) { ct = Utility.FindConstructor( cmds[ 1 ] , Utility.externAsm[ "creatures" ] ); if ( ct == null ) ct = Utility.FindConstructor( cmds[ 1 ] ); } if ( ct == null ) { SendMessage( cmds[ 1 ] + " is not a valid Npc !!!" ); return; } BaseCreature bc = null; try { bc = (BaseCreature)ct.Invoke( null ); } catch( Exception e ) { // Console.WriteLine( "{0}\n{1}\n{2}\n", e.Message, e.Source, e.StackTrace ); SendMessage( e.Message ); SendMessage( e.Source ); SendMessage( e.StackTrace ); return; } bc.X = X; bc.Y = Y; bc.Z = Z; bc.ZoneId = ZoneId; bc.MapId = MapId; bc.InitStats(); float nearest = float.MaxValue; BaseSpawner nearSpawner = null; foreach( BaseSpawner bs in World.allSpawners ) if ( bs.Distance( this ) < nearest ) { nearest = bs.Distance( this ); nearSpawner = bs; } if ( nearSpawner != null ) nearSpawner.Bind( bc ); World.allMobiles.Add( bc, true ); if ( fact != Factions.NoFaction ) bc.Faction = fact; Player.RefreshMobileList( true ); } } else if ( lower.StartsWith( ".move" ) ) { byte []b4 = new byte[] {0x00, 0x31, 0x96, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x32, 0x36, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x57, 0x65, 0x6C, 0x63, 0x6F, 0x6D, 0x65, 0x20, 0x74, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64, 0x20, 0x6F, 0x66, 0x20, 0x57, 0x61, 0x72, 0x63, 0x72, 0x61, 0x66, 0x74, 0x00, 0x00}; int offset = 9; Converter.ToBytes( Guid, b4, ref offset ); Player.Handler.Send( 0x96, b4 ); foreach( Mobile m in World.allMobiles ) if ( !( m is Character ) ) m.MovementHeartBeat( account.Handler, this ); } else if ( lower.StartsWith( ".save" ) ) { MainConsole.world.SaveGame(); } else if ( lower.StartsWith( ".load" ) ) { } else /* if (lower.StartsWith( ".stest" )) { ConstructorInfo ct1 = Utility.FindConstructor( "RazorHillGrunt" , Utility.externAsm ); for(int i = 0;i < 400;i+=30 ) for(int t = i;t < i + 30;t++ ) { BaseCreature bc = (BaseCreature)ct1.Invoke( null ); bc.Faction = (Factions)t; bc.Name = "Faction " + t.ToString(); bc.Id = t + 65000; World.Add( bc, -13234f + (float)( t / 30 ) * 2, 238f+ (float)( t % 30 ) * 2, 22f, 0 ); bc.Freeze = true; } } else*/ if ( lower.StartsWith( ".mark" ) ) { mark = new Position( X, Y, Z, MapId ); SendMessage( "Mark at " + X.ToString() + ", " + Y.ToString() + ", " + Z.ToString() + ", " + MapId.ToString() ); } else if ( lower.StartsWith( ".recall" ) ) { if ( mark == null ) SendMessage( "You must mark a location first !" ); else Teleport( mark.X, mark.Y, mark.Z, mark.MapId ); } else if ( lower.StartsWith( ".go " ) ) { cmd = cmd.Remove( 0, 4 ); string []val = cmd.Split( new char[]{' '} ); if ( !( val.Length != 4 || val.Length != 2 ) ) { SendMessage( "Need at 1 or 4 parameters !" ); SendMessage( "usage : .go X Y Z MapId or .go Location" ); return; } if ( val.Length == 1 && World.Locations[ val[ 0 ] ] == null ) { SendMessage( val[ 0 ] + " is an unknown location" ); return; } if ( val.Length == 1 ) { Position pos = (Position)World.Locations[ val[ 0 ] ]; Teleport( pos.X, pos.Y, pos.Z, pos.MapId ); } else Teleport( Convert.ToSingle( val[ 0 ] ), Convert.ToSingle( val[ 1 ] ), Convert.ToSingle( val[ 2 ] ), Convert.ToInt32( val[ 3 ] ) ); } else if ( onCommand != null && !onCommand( this, cmd ) ) return; else SendMessage( "Unknown command !" ); } }
public void UseMining(Mobile.Casting cast, Character c, GameObject go ) { Hashtable diff = new Hashtable(); diff[ 18 ] = 25; diff[ 19 ] = 50; diff[ 20 ] = 75; diff[ 21 ] = 100; diff[ 22 ] = 125; diff[ 25 ] = 150; diff[ 38 ] = 0;// Copper diff[ 39 ] = 50;// Tin diff[ 40 ] = 100;// Silver diff[ 41 ] = 150;// Iron diff[ 42 ] = 200;// Gold int rdiff = CurrentVal(c) - (int)diff[ (int)go.Sound[ 0 ] ]; int res = StrSkillCheck( c, rdiff ); if ( res > 50 ) { if ( Current < Cap( c ) && c.SkillUp( Current, rdiff, 1 ) ) { Current++; c.SendSkillUpdate(); } c.SpellSuccess(); float reussite = (float)res; reussite = reussite / 10f; // string str = "Reussite : " + reussite.ToString(); // c.SendMessage( str ); if( !go.CheckLoot( c, reussite ) ) c.SpellFaillure( SpellFailedReason.FailedAttempt ); } else { // Console.WriteLine("SPELL RESULT :{0}", result ); c.SpellFaillure( SpellFailedReason.FailedAttempt ); } }
public static void OnUseHandler( BaseAbility ba, Mobile c, GameObject go ) { go.OnUse( c ); }
/// <summary> /// Initializes a new instance of <see cref='GameObjects'/> containing any array of <see cref='GameObject'/> objects. /// </summary> /// <param name='val'> /// A array of <see cref='GameObject'/> objects with which to intialize the collection /// </param> public GameObjects(GameObject[] val) { dirty = true; this.AddRange(val); }
public void UseHerbalist(Mobile.Casting cast, Character c, GameObject go ) { Hashtable diff = new Hashtable(); diff[ 29 ] = 0; diff[ 8 ] = 20; diff[ 9 ] = 50; diff[ 10 ] = 75; diff[ 11 ] = 100; diff[ 26 ] = 125; diff[ 27 ] = 150; diff[ 35 ] = 140; diff[ 45 ] = 125; diff[ 47 ] = 160; diff[ 48 ] = 215; diff[ 49 ] = 185; diff[ 50 ] = 205; diff[ 51 ] = 195; int rdiff = CurrentVal(c) - (int)diff[ (int)go.Sound[ 0 ] ]; int res = IqSkillCheck( c, rdiff ); if ( res > 50 ) { if ( Current < Cap( c ) && c.SkillUp( Current, rdiff, 1 ) ) { Current++; c.SendSkillUpdate(); //c.SendSmallUpdate( new int[]{ Index, Index + 1, Index + 2 }, new object[]{ (int)Id, (short)CurrentVal(c), (short)Cap( c ), (int)0 } ); } c.SpellSuccess(); float reussite = (float)res; reussite = reussite / 10f; string str = "Reussite : " + reussite.ToString(); c.SendMessage( str ); if ( !go.CheckLoot( c, reussite ) ) c.SpellFaillure( SpellFailedReason.FailedAttempt ); } else { // Console.WriteLine("SPELL RESULT :{0}", result ); c.SpellFaillure( SpellFailedReason.FailedAttempt ); } }
/// <summary> /// Inserts a <see cref='GameObject'/> into the <see cref='GameObjects'/> at the specified index. /// </summary> /// <param name='index'>The zero-based index where <paramref name='val'/> should be inserted.</param> /// <param name='val'>The <see cref='GameObject'/> to insert.</param> /// <seealso cref='GameObjects.Add'/> public void Insert(int index, GameObject val) { dirty = true; List.Insert(index, val); }
/// <summary> /// Removes a specific <see cref='GameObject'/> from the <see cref='GameObjects'/>. /// </summary> /// <param name='val'>The <see cref='GameObject'/> to remove from the <see cref='GameObjects'/>.</param> /// <exception cref='ArgumentException'><paramref name='val'/> is not found in the Collection.</exception> public void Remove(GameObject val) { dirty = true; List.Remove(val); }
/// <summary> /// Copies the <see cref='GameObjects'/> values to a one-dimensional <see cref='Array'/> instance at the /// specified index. /// </summary> /// <param name='array'>The one-dimensional <see cref='Array'/> that is the destination of the values copied from <see cref='GameObjects'/>.</param> /// <param name='index'>The index in <paramref name='array'/> where copying begins.</param> /// <exception cref='ArgumentException'> /// <para><paramref name='array'/> is multidimensional.</para> /// <para>-or-</para> /// <para>The number of elements in the <see cref='GameObjects'/> is greater than /// the available space between <paramref name='arrayIndex'/> and the end of /// <paramref name='array'/>.</para> /// </exception> /// <exception cref='ArgumentNullException'><paramref name='array'/> is <see langword='null'/>. </exception> /// <exception cref='ArgumentOutOfRangeException'><paramref name='arrayIndex'/> is less than <paramref name='array'/>'s lowbound. </exception> /// <seealso cref='Array'/> public void CopyTo(GameObject[] array, int index) { dirty = true; List.CopyTo(array, index); }
/// <summary> /// Returns the index of a <see cref='GameObject'/> in /// the <see cref='GameObjects'/>. /// </summary> /// <param name='val'>The <see cref='GameObject'/> to locate.</param> /// <returns> /// The index of the <see cref='GameObject'/> of <paramref name='val'/> in the /// <see cref='GameObjects'/>, if found; otherwise, -1. /// </returns> /// <seealso cref='GameObjects.Contains'/> public int IndexOf(GameObject val) { return List.IndexOf(val); }
/// <summary> /// Gets a value indicating whether the /// <see cref='GameObjects'/> contains the specified <see cref='GameObject'/>. /// </summary> /// <param name='val'>The <see cref='GameObject'/> to locate.</param> /// <returns> /// <see langword='true'/> if the <see cref='GameObject'/> is contained in the collection; /// otherwise, <see langword='false'/>. /// </returns> /// <seealso cref='GameObjects.IndexOf'/> public bool Contains(GameObject val) { return List.Contains(val); }
/// <summary> /// Copies the elements of an array to the end of the <see cref='GameObjects'/>. /// </summary> /// <param name='val'> /// An array of type <see cref='GameObject'/> containing the objects to add to the collection. /// </param> /// <seealso cref='GameObjects.Add'/> public void AddRange(GameObject[] val) { dirty = true; for (int i = 0; i < val.Length; i++) { this.Add(val[i]); } }
/// <summary> /// Adds a <see cref='GameObject'/> with the specified value to the /// <see cref='GameObjects'/>. /// </summary> /// <param name='val'>The <see cref='GameObject'/> to add.</param> /// <returns>The index at which the new element was inserted.</returns> /// <seealso cref='GameObjects.AddRange'/> public int Add(GameObject val) { dirty = true; return List.Add(val); }
//Checks if two objects have collided, returning true if they have or false if they haven't //Collision detection is based upon the radius of the objects and the distance between them /// <summary> /// checkCollision() checks the collision between two GameObjects. /// </summary> /// <param name="object2">An instance to a GameObject</param> /// <returns>True, if first GameObject collided with second GameObject or false, otherwise.</returns> /// <remarks>Collision detection is based upon the radius of the objects and the distance between them.</remarks> public virtual bool checkCollision(GameObject object2) { //if (this == object2) return false; float distance = (float)(Math.Sqrt(Math.Pow((this.x - object2.x), 2) + Math.Pow(this.y - object2.y, 2))); if (distance < this.radius + object2.radius) return true; return false; }
public override void OnTick() { if ( CurrentAmount > 0 ) return; TimeSpan ts = DateTime.Now.Subtract( LastSpawn ); int compteur = (int)ts.TotalSeconds; if ( compteur > Frequency ) { if ( CurrentAmount == 0 && gameObjectHandler != null )// Game Object { go = World.Add( defaultModel, gameObjectHandler, X, Y, Z, Orientation, MapId ); go.SpawnerLink = this; go.Id = defaultModel; go.ZoneId = ZoneId; go.Orientation = this.Orientation; Bind( go ); LastSpawn = DateTime.Now; } else { GameObject go = World.Add( defaultModel, X, Y, Z, Orientation, MapId ); go.SpawnerLink = this; go.ZoneId = ZoneId; go.Orientation = this.Orientation; Bind( go ); LastSpawn = DateTime.Now; } return; } }