/// <summary> /// Default constructor. /// </summary> public Object() { ++_numObjects; _createdBy = null; _itemType = ObjTemplate.ObjectType.trash; _material = 0; _size = 0; _volume = 0; _craftsmanship = 0; _wearLocation = 0; _weight = 0; _cost = 0; _level = 1; _timer = -1; _condition = 100; _flyLevel = CharData.FlyLevel.ground; int count; for( count = 0; count < Limits.NUM_ITEM_EXTRA_VECTORS; ++count ) _extraFlags[ count ] = 0; for (count = 0; count < Limits.NUM_USE_FLAGS_VECTORS; ++count) _antiFlags[count] = 0; for (count = 0; count < Limits.NUM_WEAR_FLAGS_VECTORS; ++count) _wearFlags[count] = 0; for (count = 0; count < Limits.NUM_AFFECT_VECTORS; ++count) _affectedBy[ count ] = 0; for( count = 0; count < 8; ++count ) _values[ count ] = 0; }
void SetObjectFlyLevel(Object obj, CharData.FlyLevel newLevel) { obj.FlyLevel = newLevel; if (newLevel < 0 || newLevel > CharData.FlyLevel.high) { Log.Error("SetObjectFlyLevel: level out of range", 0); return; } foreach (Object item in obj.Contains) { SetObjectFlyLevel(item, newLevel); } return; }
void SetFlyLevel(CharData ch, CharData.FlyLevel new_level) { if (new_level < 0 || new_level > CharData.FlyLevel.high) { Log.Error("SetFlyLevel: level out of range", 0); return; } ch.FlightLevel = new_level; foreach (Object obj in ch.Carrying) { obj.FlyLevel = new_level; } return; }
/// <summary> /// Creates an object and initializes it to the parent object values. /// </summary> /// <param name="indexData"></param> public Object( ObjTemplate indexData ) { if( indexData == null ) { Log.Error( "Object.Object(ObjIndex *) called with null ObjIndex.", 0 ); return; } ++_numObjects; _objIndexNumber = indexData.IndexNumber; _objIndexData = indexData; _wearLocation = ObjTemplate.WearLocation.none; _flyLevel = 0; _level = 1; _timer = -1; _createdBy = null; _extraDescription = indexData.ExtraDescriptions; _name = indexData.Name; _shortDescription = indexData.ShortDescription; _fullDescription = indexData.FullDescription; _specFun = indexData.SpecFun; _itemType = indexData.ItemType; int count; for( count = 0; count < Limits.NUM_ITEM_EXTRA_VECTORS; ++count ) _extraFlags[ count ] = indexData.ExtraFlags[ count ]; for( count = 0; count < Limits.NUM_AFFECT_VECTORS; ++count ) { _affectedBy[ count ] = indexData.AffectedBy[ count ]; } _wearFlags = indexData.WearFlags; _antiFlags = indexData.UseFlags; _material = indexData.Material; _size = indexData.Size; _volume = indexData.Volume; _craftsmanship = indexData.CraftsmanshipLevel; for( count = 0; count < 8; ++count ) _values[ count ] = indexData.Values[ count ]; _weight = indexData.Weight; _cost = indexData.Cost; _condition = indexData.Condition; _trap = indexData.Trap; // Create vehicle data for vehicles that are created. The // bulk of the data is stored in the object - Xangis if( _itemType == ObjTemplate.ObjectType.vehicle || _itemType == ObjTemplate.ObjectType.ship ) { Vehicle vehicle = new Vehicle(); if( _itemType == ObjTemplate.ObjectType.ship ) vehicle.Type = Vehicle.VehicleType.ship_any_water; else vehicle.Type = Vehicle.VehicleType.flat_land; // need to create virtual rooms for the rest of the data vehicle.HullPoints = _values[ 5 ]; vehicle.FlyLevel = 0; vehicle.Direction = 0; vehicle.Speed = 0; vehicle.Occupants = 0; vehicle.MovementTimer = 0; vehicle.MovementDelay = 0; vehicle.MovementPointer = 0; vehicle.MovementScript = String.Empty; vehicle.ParentObject = this; vehicle.EntryRoomTemplateNumber = _values[ 1 ]; vehicle.ControlPanelRoomTemplateNumber = _values[ 2 ]; } ++indexData.QuantityLoaded; --indexData.Scarcity; Database.ObjectList.Add( this ); return; }
/// <summary> /// Give an obj to a char. /// </summary> /// <param name="ch"></param> public void ObjToChar( CharData ch ) { ch.Carrying.Add(this); _carriedBy = ch; ch.CarryNumber += 1; ch.CarryWeight += GetWeight(); if( HasFlag( ObjTemplate.ITEM_LIT ) ) ch.InRoom.Light++; _flyLevel = ch.FlightLevel; }
/// <summary> /// Gets the scan info for the provided room. /// </summary> /// <param name="ch"></param> /// <param name="room"></param> /// <param name="buffer"></param> /// <param name="flyLevel"></param> /// <returns></returns> public static int ScanThisRoom(CharData ch, Room room, string buffer, CharData.FlyLevel flyLevel) { int numberFound = 0; string levelMsg; int diff = flyLevel - ch.FlightLevel; switch (diff) { case -3: levelMsg = String.Format("&n who is very far beneath you."); break; case -2: levelMsg = String.Format("&n who is not far beneath you."); break; case -1: levelMsg = String.Format("&n who is close by beneath you."); break; case 1: levelMsg = String.Format("&n who is flying close by above you."); break; case 2: levelMsg = String.Format("&n who is flying not far above you."); break; case 3: levelMsg = String.Format("&n who is flying very far above you."); break; default: levelMsg = String.Format("&n who is an unknown distance away from you."); break; } foreach (CharData target in room.People) { if (target.FlightLevel == flyLevel) { Visibility visibility = Look.HowSee(ch, target); switch (visibility) { case Visibility.sense_hidden: case Visibility.invisible: case Visibility.too_dark: default: break; case Visibility.visible: buffer += (target.ShowNameTo(ch, true)); buffer += levelMsg; buffer += "&n\r\n"; numberFound++; break; case Visibility.sense_infravision: buffer += "&+rYou sense a being within the darkness"; buffer += levelMsg; buffer += "&n\r\n"; numberFound++; break; } } } return(numberFound); }