本文整理汇总了C#中MUDEngine.CharData.Move方法的典型用法代码示例。如果您正苦于以下问题:C# CharData.Move方法的具体用法?C# CharData.Move怎么用?C# CharData.Move使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MUDEngine.CharData
的用法示例。
在下文中一共展示了CharData.Move方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ReturnToLoad
public static void ReturnToLoad( CharData ch )
{
if( !ch || !ch.InRoom )
return;
if( ch.InRoom.Area != Room.GetRoom( ch.LoadRoomIndexNumber ).Area )
return;
Exit.Direction dir = FindPath( ch.InRoom.IndexNumber, ch.LoadRoomIndexNumber, ch, -40000, true );
if( dir == Exit.Direction.invalid )
{
return;
}
if( ch.InRoom.ExitData[ (int)dir ].HasFlag( Exit.ExitFlag.closed ) &&
!ch.IsAffected( Affect.AFFECT_PASS_DOOR ) && !ch.HasInnate( Race.RACE_PASSDOOR ) )
{
CommandType.Interpret(ch, "unlock " + dir.ToString());
CommandType.Interpret(ch, "open " + dir.ToString());
return;
}
ch.Move( dir );
if( !ch.InRoom )
{
string text = "Return_to_load: no ch._inRoom! Mob #" + ch.MobileTemplate.IndexNumber + ", _name: " +
ch.Name + ". Placing mob in limbo (mob.AddToRoom()).";
Log.Error( text, 0 );
ch.AddToRoom( Room.GetRoom( StaticRooms.GetRoomNumber("ROOM_NUMBER_LIMBO") ) );
ImmortalChat.SendImmortalChat(ch, ImmortalChat.IMMTALK_SPAM, 0, text);
return;
}
return;
}
示例2: Flee
//.........这里部分代码省略.........
ch.SendText("You give up when you realize there's nowhere to flee to.\r\n");
}
// Panicked people can flee when not fighting.
CharData victim = ch.Fighting;
if (!victim)
{
if (ch.CurrentPosition == Position.fighting)
{
ch.CurrentPosition = Position.standing;
}
}
if (ch.IsAffected(Affect.AFFECT_BERZERK))
{
ch.SendText("You can't flee, you're in a &+RBl&n&+ro&+Ro&n&+rd&+L Rage&n!!\r\n");
return;
}
if (ch.IsAffected( Affect.AFFECT_BOUND))
{
ch.SendText("You are bound! You can't move!\r\n");
SocketConnection.Act("$n&n tries to flee, but is tied up!",
ch, null, null, SocketConnection.MessageTarget.room);
return;
}
if (ch.IsAffected( Affect.AFFECT_HOLD) ||
ch.IsAffected( Affect.AFFECT_MINOR_PARA))
{
ch.SendText("You can't move!\r\n");
SocketConnection.Act("$n&n tries to flee, but $e can't move!",
ch, null, null, SocketConnection.MessageTarget.room);
return;
}
// You should almost always be able to flee when not fighting.
if (ch.CurrentPosition == Position.standing)
{
chances = 30;
}
else
{
chances = 6;
}
Room wasIn = ch.InRoom;
for (attempt = 0; attempt < chances; attempt++)
{
Exit exit;
Exit.Direction door = Database.RandomDoor();
if ((exit = wasIn.GetExit(door)) == null || !exit.TargetRoom
|| exit.TargetRoom == wasIn || exit.HasFlag(Exit.ExitFlag.closed)
|| (ch.IsNPC() && (Room.GetRoom(exit.IndexNumber).HasFlag(RoomTemplate.ROOM_NO_MOB)
|| (ch.HasActionBit(MobTemplate.ACT_STAY_AREA) && exit.TargetRoom.Area != ch.InRoom.Area))))
{
continue;
}
if (ch.Riding && ch.Riding.Fighting)
{
Combat.StopFighting(ch.Riding, true);
}
// Just to keep the damned messages from being wacky...
ch.SetAffectBit(Affect.AFFECT_IS_FLEEING);
ch.Move(door);
ch.RemoveAffect(Affect.AFFECT_IS_FLEEING);
if (ch.InRoom == wasIn)
{
break;
}
Room nowIn = ch.InRoom;
ch.InRoom = wasIn;
SocketConnection.Act("$n&n panics and attempts to flee...", ch, null, null, SocketConnection.MessageTarget.room, true);
string text;
if (ch.CheckSneak())
{
SocketConnection.Act("$n&n has fled!", ch, null, null, SocketConnection.MessageTarget.room);
}
else
{
text = String.Format("$n&n flees {0}ward.", door.ToString());
SocketConnection.Act(text, ch, null, null, SocketConnection.MessageTarget.room, true);
}
ch.InRoom = nowIn;
text = String.Format("You flee {0}ward!\r\n", door.ToString());
ch.SendText(text);
Combat.StopFighting(ch, true);
return;
}
SocketConnection.Act("$n&n tries to flee but can't make it out of here!", ch, null, null, SocketConnection.MessageTarget.room, true);
ch.SendText("&+WYour escape is blocked!\r\n");
return;
}
示例3: HuntVictim
//.........这里部分代码省略.........
if (ch.Hunting != null && ch.Hunting.Who == tmp)
found = true;
}
if (!found || !CharData.CanSee(ch, ch.Hunting.Who))
{
if (!ch.IsAffected(Affect.AFFECT_TRACK))
CommandType.Interpret(ch, "say Damn! My prey is gone!");
else
{
ch.SendText("The trail seems to disappear.\r\n");
ch.RemoveAffect(Affect.AFFECT_TRACK);
}
Combat.StopHunting(ch);
return;
}
if (ch.InRoom == ch.Hunting.Who.InRoom)
{
if (ch.Fighting)
{
return;
}
FoundPrey(ch, ch.Hunting.Who);
return;
}
ch.WaitState(Skill.SkillList["track"].Delay);
Exit.Direction dir = FindPath(ch.InRoom.IndexNumber, ch.Hunting.Who.InRoom.IndexNumber, ch, -40000, true);
if (dir == Exit.Direction.invalid)
{
if (!ch.IsAffected(Affect.AFFECT_TRACK))
{
SocketConnection.Act("$n&n says 'Damn! Lost $M!'", ch, null, ch.Hunting.Who, SocketConnection.MessageTarget.room);
}
else
{
ch.SendText("You lose the trail.\r\n");
ch.RemoveAffect(Affect.AFFECT_TRACK);
Combat.StopHunting(ch);
}
return;
}
/*
* Give a random direction if the mob misses the die roll.
*/
if (MUDMath.NumberPercent() > 75) /* @ 25% */
{
do
{
dir = Database.RandomDoor();
}
while (!(ch.InRoom.ExitData[(int)dir]) || !(ch.InRoom.ExitData[(int)dir].TargetRoom));
}
if (ch.InRoom.ExitData[(int)dir].HasFlag(Exit.ExitFlag.closed))
{
CommandType.Interpret(ch, "open " + dir.ToString());
return;
}
ImmortalChat.SendImmortalChat(null, ImmortalChat.IMMTALK_HUNTING, 0, String.Format("{0}&n leaves room {1} to the {2}.",
ch.ShortDescription, ch.InRoom.IndexNumber, dir.ToString()));
if (ch.IsAffected(Affect.AFFECT_TRACK))
{
SocketConnection.Act(String.Format("You sense $N&n's trail {0} from here...", dir.ToString()),
ch, null, ch.Hunting.Who, SocketConnection.MessageTarget.character);
}
ch.Move(dir);
if (ch.IsAffected(Affect.AFFECT_TRACK))
SocketConnection.Act("$n&n peers around looking for tracks.", ch, null, null, SocketConnection.MessageTarget.room);
if (!ch.Hunting)
{
if (!ch.InRoom)
{
string text = String.Empty;
text = String.Format("Hunt_victim: no ch.in_room! Mob #{0}, _name: {1}. Placing mob in limbo (ch.AddToRoom()).",
ch.MobileTemplate.IndexNumber, ch.Name);
Log.Error(text, 0);
ch.AddToRoom(Room.GetRoom(StaticRooms.GetRoomNumber("ROOM_NUMBER_LIMBO")));
text = String.Format("{0}&n has gone to limbo while hunting {1}.", ch.ShortDescription, ch.Hunting.Name);
ImmortalChat.SendImmortalChat(null, ImmortalChat.IMMTALK_HUNTING, 0, text);
return;
}
CommandType.Interpret(ch, "say Damn! Lost my prey!");
return;
}
if (ch.InRoom == ch.Hunting.Who.InRoom)
{
FoundPrey(ch, ch.Hunting.Who);
}
return;
}
catch (Exception ex)
{
Log.Error("Exception in HuntVictim: " + ex.ToString());
}
}
示例4: Drag
/// <summary>
/// Used for dragging corpses into another room.
/// </summary>
/// <param name="ch"></param>
/// <param name="str"></param>
public static void Drag(CharData ch, string[] str)
{
if( ch == null ) return;
Object obj;
Object obj2;
if (ch.IsAffected( Affect.AFFECT_HOLD) ||
ch.IsAffected(Affect.AFFECT_MINOR_PARA))
{
ch.SendText("You can't move!\r\n");
return;
}
if (str.Length == 0)
{
ch.SendText("Drag which what where?\r\n");
return;
}
if (str.Length == 0)
{
ch.SendText("You need to specify a direction.\r\n");
return;
}
if (!ch.IsNPC() && ch.HasActionBit(PC.PLAYER_MEMORIZING))
{
ch.RemoveActionBit(PC.PLAYER_MEMORIZING);
ch.SendText("You abandon your studies.\r\n");
}
if (!(obj = ch.GetObjHere(str[0])))
{
ch.SendText("You do not see that here.\r\n");
return;
}
if (obj.ItemType != ObjTemplate.ObjectType.npc_corpse && obj.ItemType != ObjTemplate.ObjectType.pc_corpse)
{
ch.SendText("You can only drag corpses.\r\n");
return;
}
if (str.Length > 2 && str[1] == "enter")
{
if ((obj2 = ch.GetObjHere(str[3])))
{
switch (obj2.ItemType)
{
case ObjTemplate.ObjectType.teleport:
case ObjTemplate.ObjectType.portal:
if (obj2.ItemType == ObjTemplate.ObjectType.teleport && !CommandType.CheckCommandTrigger("enter", obj2.Values[1]))
{
ch.SendText("Nothing happens.\r\n");
return;
};
Room location;
if (Macros.IsSet(obj2.Values[3], ObjTemplate.PORTAL_RANDOM))
{
location = Movement.GetRandomRoom();
}
else
{
location = Room.GetRoom(obj2.Values[0]);
}
if (!location)
{
ch.SendText("That portal doesn't seem to go anywhere.\r\n");
return;
}
SocketConnection.Act("You drag the $p&n into $P&n.", ch, obj, obj2, SocketConnection.MessageTarget.character);
SocketConnection.Act("$n&n drags the $p&n into $P&n.", ch, obj, obj2, SocketConnection.MessageTarget.room);
if (obj2.Values[2] >= 0)
{
obj2.Values[2] -= 2;
if (obj2.Values[2] <= 0)
{
SocketConnection.Act("$p&n fades into nothingness.", ch, obj2, null, SocketConnection.MessageTarget.room);
obj2.RemoveFromRoom();
}
}
obj.RemoveFromRoom();
ch.RemoveFromRoom();
ch.AddToRoom(location);
obj.AddToRoom(location);
if (obj2.ItemType == ObjTemplate.ObjectType.portal)
{
SocketConnection.Act("$n&n steps out of $P&n dragging the $p&n.", ch, obj, obj2, SocketConnection.MessageTarget.room);
}
else
{
SocketConnection.Act("$n&n appears from elsewhere, dragging the $p&n.", ch, obj, null, SocketConnection.MessageTarget.room);
}
CommandType.Interpret(ch, "look auto");
//.........这里部分代码省略.........
示例5: East
/// <summary>
/// Travel east.
/// </summary>
/// <param name="ch"></param>
/// <param name="str"></param>
public static void East(CharData ch, string[] str)
{
if (ch == null)
return;
ch.Move(Exit.Direction.east);
return;
}
示例6: Down
/// <summary>
/// Travel down.
/// </summary>
/// <param name="ch"></param>
/// <param name="str"></param>
public static void Down(CharData ch, string[] str)
{
if (ch == null)
return;
ch.Move(Exit.Direction.down);
return;
}
示例7: Climb
/// <summary>
/// Command to climb something.
/// </summary>
/// <param name="ch"></param>
/// <param name="str"></param>
public static void Climb(CharData ch, string[] str)
{
if( ch == null ) return;
int chance;
if (!ch.HasSkill("climb"))
{
ch.SendText("You lack the skills to climb anything.\r\n");
return;
}
if (str.Length == 0)
{
ch.SendText("Climb what?\r\n");
return;
}
Object obj = ch.GetObjHere(str[0]);
if (!obj)
{
ch.SendText("Uhh... what exactly did you want to climb!?\r\n");
return;
}
if (obj.ItemType != ObjTemplate.ObjectType.wall)
{
ch.SendText("That wasn't exactly designed for climbing.\r\n");
return;
}
if (ch.IsNPC())
{
chance = ch.Level * 3 / 2 + 20;
}
else
{
chance = ((PC)ch).SkillAptitude["climb"];
}
// Agility helps.
chance += ch.GetCurrAgi() / 10;
switch (obj.ObjIndexData.IndexNumber)
{
case StaticObjects.OBJECT_NUMBER_WALL_STONE:
chance += 5;
break;
case StaticObjects.OBJECT_NUMBER_WALL_IRON:
chance -= 15;
break;
default:
ch.SendText("That wasn't exactly designed for climbing.\r\n");
return;
}
// Maximum chance of 98%
if (chance > 98)
{
chance = 98;
}
if (MUDMath.NumberPercent() >= chance)
{
ch.SendText("You try to climb it, but you fall on your ass!\r\n");
ch.CurrentPosition = Position.sitting;
ch.WaitState(5);
return;
}
ch.SendText("With great skill, you scale the wall!\r\n");
// Value 0 of a wall object is the direction that has been walled...
// This means that they should move in that direction. We leave it up to
// move_char to make sure that there is actually an exit in that direction.
// we use the climbing bit to allow them to pass the walls in move_char.
ch.SetAffectBit(Affect.AFFECT_CLIMBING);
ch.Move((Exit.Direction)obj.Values[0]);
ch.RemoveAffect(Affect.AFFECT_CLIMBING);
return;
}
示例8: TrackCommand
/// <summary>
/// Player track command.
/// </summary>
/// <param name="ch"></param>
/// <param name="str"></param>
public static void TrackCommand(CharData ch, string[] str)
{
if( ch == null ) return;
CharData victim;
if (ch.IsAffected(Affect.AFFECT_TRACK))
{
ch.SendText("You stop tracking.\r\n");
Combat.StopHunting(ch);
ch.RemoveAffect(Affect.AFFECT_TRACK);
return;
}
if (!ch.HasSkill("track"))
{
ch.SendText("You couldn't track an &+Lelephant&n in your own bedroom.\r\n");
return;
}
if (str.Length == 0)
{
ch.SendText("Whom are you trying to track?\r\n");
return;
}
if (ch.Riding)
{
ch.SendText("You can't sniff a trail mounted.\r\n");
return;
}
if (ch.FlightLevel != 0)
{
ch.SendText("You find tracks on the _ground_!\r\n");
return;
}
if (ch.InRoom.IsWater())
{
ch.SendText("You can't track through water.\r\n");
return;
}
if (ch.CurrentPosition != Position.standing)
{
if (ch.CurrentPosition == Position.fighting)
ch.SendText("You're too busy fighting .\r\n");
else
ch.SendText("You must be standing to track!\r\n");
return;
}
/* only imps can hunt to different areas */
bool area = (ch.GetTrust() < Limits.LEVEL_OVERLORD);
if (area)
{
victim = ch.GetCharInArea(str[0]);
}
else
{
victim = ch.GetCharWorld(str[0]);
}
if (!victim || (!victim.IsNPC() && (ch.IsRacewar(victim)) && !ch.IsImmortal()))
{
ch.SendText("You can't find a trail of anyone like that.\r\n");
return;
}
if (ch.InRoom == victim.InRoom)
{
SocketConnection.Act("You're already in $N&n's room!", ch, null, victim, SocketConnection.MessageTarget.character);
return;
}
/*
* Deduct some movement.
*/
if (ch.CurrentMoves > 2)
{
ch.CurrentMoves -= 3;
}
else
{
ch.SendText("You're too exhausted to hunt anyone!\r\n");
return;
}
SocketConnection.Act("$n carefully sniffs the air.", ch, null, null, SocketConnection.MessageTarget.room);
ch.WaitState(Skill.SkillList["track"].Delay);
Exit.Direction direction = Track.FindPath(ch.InRoom.IndexNumber, victim.InRoom.IndexNumber, ch, -40000, area);
if (direction == Exit.Direction.invalid)
//.........这里部分代码省略.........
示例9: SouthWest
/// <summary>
/// Travel southwest.
/// </summary>
/// <param name="ch"></param>
/// <param name="str"></param>
public static void SouthWest(CharData ch, string[] str)
{
if (ch == null)
return;
ch.Move(Exit.Direction.southwest);
return;
}
示例10: North
/// <summary>
/// Travel north.
/// </summary>
/// <param name="ch"></param>
/// <param name="str"></param>
public static void North(CharData ch, string[] str)
{
if (ch == null)
return;
ch.Move(Exit.Direction.north);
return;
}