Beispiel #1
0
		public override EActResults Do(Creature _creature)
		{
			Point delta;
			if (!TryGetParameter(out delta))
			{
				delta = KeyTranslator.GetDirection(GetFirstParameter<ConsoleKey>());
			}

			if (delta.QLenght > 1)
			{
				throw new ApplicationException("Элементарное перемещение длиннее чем 1");
			}

			if (delta == Point.Zero)
			{
				_creature.AddActToPool(new WaitAct());
				return EActResults.ACT_REPLACED;
			}

			var cell = _creature[delta];

			if (cell.GetIsPassableBy(_creature) > 0)
			{
				World.TheWorld.CreatureManager.MoveCreatureOnDelta(_creature, delta);

				var mess = "";
				if (_creature.IsAvatar)
				{
					var thing = cell.Thing;
					if (thing != null)
					{
						mess += EALSentence.NONE.GetString(thing.GetName(_creature));
					}
					var items = cell.Items.ToArray();
					if (items.Length > 0)
					{
						if (items.Length == 1)
						{
							mess += (mess == "" ? "" : ", ") + EALSentence.NONE.GetString(items[0].GetName(_creature));
						}
						else
						{
							mess += (mess == "" ? "" : ", ") + "вещи";
						}
					}
					if (mess != "")
					{
						MessageManager.SendMessage(this, mess);
					}
				}
				return EActResults.DONE;
			}
			{
				var thing = cell.Thing;
				if (thing != null && thing.Is<ClosedDoor>() && thing.IsLockedFor(cell, _creature))
				{
					_creature.InsertActToPool(new OpenAct(), delta);
					return EActResults.ACT_REPLACED;
				}

				if (_creature.IsAvatar)
				{
					var creature = cell.Creature;
					XMessage mess;
					if (creature != null && World.TheWorld.Avatar.Tactic != ETactics.PEACEFULL)
					{
						bool isMoveToAct;
						if(!TryGetParameter(out isMoveToAct) || !isMoveToAct)
						{
							_creature.AddActToPool(new AtackAct(), delta);
							return EActResults.ACT_REPLACED;

							////Если это не перемещение на дальнее расстояние
							//return World.TheWorld.BattleProcessor.Atack(_creature, creature);
						}
					}
					else
					{
						if (creature != null)
						{
							mess = new XMessage(EALTurnMessage.CELL_IS_OCCUPIED_BY, _creature, creature);
						}
						else if (thing != null)
						{
							mess = new XMessage(EALTurnMessage.CELL_IS_OCCUPIED_BY, _creature, thing);
						}
						else
						{
							mess = new XMessage(EALTurnMessage.CELL_IS_OCCUPIED_BY, _creature, cell.Terrain.AsNoun());
						}
						MessageManager.SendXMessage(this, mess);
					}
				}
				return EActResults.QUICK_FAIL;
			}
		}