本文整理汇总了C#中MUDEngine.CharData.IsNPC方法的典型用法代码示例。如果您正苦于以下问题:C# CharData.IsNPC方法的具体用法?C# CharData.IsNPC怎么用?C# CharData.IsNPC使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MUDEngine.CharData
的用法示例。
在下文中一共展示了CharData.IsNPC方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: MakeDrunk
/// <summary>
/// Makes a string look drunk.
/// </summary>
/// <param name="inputString"></param>
/// <param name="ch"></param>
/// <returns></returns>
public static string MakeDrunk( string inputString, CharData ch )
{
int drunklevel = 0;
if (!ch.IsNPC())
{
drunklevel = ((PC)ch).Drunk;
}
// Nothing to do here.
if (drunklevel == 0)
{
return inputString;
}
string output = String.Empty;
// Check how drunk a person is...
for (int pos = 0; pos < inputString.Length; pos++)
{
char temp = inputString[pos];
if ((char.ToUpper(temp) >= 'A') && (char.ToUpper(temp) <= 'Z'))
{
int drunkpos = char.ToUpper(temp) - 'A';
if (drunklevel > _drunkSubstitution[drunkpos]._minDrunkLevel)
{
int randomnum = MUDMath.NumberRange(0, _drunkSubstitution[drunkpos]._numReplacements);
output += _drunkSubstitution[drunkpos]._replacement[randomnum];
}
else
{
output += temp;
}
}
else
{
if (drunklevel < 4)
{
output += MUDMath.FuzzyNumber(temp);
}
else if ((temp >= '0') && (temp <= '9'))
{
output += MUDMath.NumberRange(0, 9).ToString();
}
else
{
output += temp;
}
}
}
return ( output );
}
示例2: AppendFile
/// <summary>
/// Appends a string to a file.
/// </summary>
/// <param name="ch"></param>
/// <param name="file"></param>
/// <param name="str"></param>
public static void AppendFile( CharData ch, string file, string str )
{
if( ch == null || String.IsNullOrEmpty(file) || String.IsNullOrEmpty(str) || ch.IsNPC() )
{
return;
}
FileStream fp = File.OpenWrite( file );
StreamWriter sw = new StreamWriter( fp );
sw.WriteLine( "[{0}] {1}: {2}\n", ch.InRoom ? MUDString.PadInt(ch.InRoom.IndexNumber,5) : MUDString.PadInt(0,5),
ch.Name, str );
sw.Flush();
sw.Close();
return;
}
示例3: Hold
/// <summary>
/// Place an object in your hand.
/// </summary>
/// <param name="ch"></param>
/// <param name="str"></param>
public static void Hold(CharData ch, string[] str)
{
if( ch == null ) return;
Object obj;
if (ch.IsAffected( Affect.AFFECT_HOLD) ||
ch.IsAffected( Affect.AFFECT_MINOR_PARA))
{
ch.SendText("You can't move!\r\n");
return;
}
if (!ch.IsNPC() && ch.IsAffected( Affect.AFFECT_WRAITHFORM))
{
ch.SendText("You may not wear, wield, or hold anything in &+Wghoul&n form.\r\n");
return;
}
if (str.Length == 0 || (obj = ch.GetObjCarrying(str[0])) == null)
{
ch.SendText("Hold what now?\r\n");
return;
}
// Light items are automatically holdable.
if (!obj.HasWearFlag(ObjTemplate.WEARABLE_HOLD) && obj.ItemType != ObjTemplate.ObjectType.light)
{
ch.SendText("You can't hold that!\r\n");
return;
}
if (obj.ItemType == ObjTemplate.ObjectType.weapon || obj.ItemType == ObjTemplate.ObjectType.ranged_weapon)
{
ch.SendText("You WIELD weapons, they're useless if you hold them.\r\n");
return;
}
if (!obj.IsWearableBy(ch))
return;
if (Object.EquipInHand(ch, obj, Object.EQUIP_HOLD))
{
SocketConnection.Act("You hold $p&n.", ch, obj, null, SocketConnection.MessageTarget.character);
SocketConnection.Act("$n&n holds $p&n.", ch, obj, null, SocketConnection.MessageTarget.room);
}
return;
}
示例4: Bash
/// <summary>
/// Bash. Usable to initiate combat and during combat.
/// </summary>
/// <param name="ch"></param>
/// <param name="str"></param>
public static void Bash(CharData ch, string[] str)
{
if( ch == null ) return;
int chance;
/* Check player's level and class, mobs can use this skill */
if ((!ch.HasSkill("bash")))
{
ch.SendText("You'd better leave that to those with more skills.\r\n");
return;
}
if (ch.IsBlind() && !ch.Fighting)
{
return;
}
/* Verify a target. */
CharData victim = ch.Fighting;
if (str.Length != 0)
{
victim = ch.GetCharRoom(str[0]);
if (!victim || victim.CurrentPosition == Position.dead)
{
ch.SendText("They aren't anywhere to be found.\r\n");
return;
}
}
else
{
if (!victim || victim.CurrentPosition == Position.dead)
{
ch.SendText("You aren't fighting anyone.\r\n");
return;
}
}
/* Bash self? Ok! */
// Toned down the damage cuz you can't really bash yourself
// like you could with someone else.
if (victim == ch)
{
ch.SendText("You throw yourself to the ground!\r\n");
SocketConnection.Act("$N&n knocks $mself to the ground.", ch, null, victim, SocketConnection.MessageTarget.room_vict);
ch.CurrentPosition = Position.kneeling;
ch.WaitState((Skill.SkillList["bash"].Delay * 8) / 10);
Combat.InflictDamage(ch, ch, MUDMath.NumberRange(1, 3), "bash", ObjTemplate.WearLocation.none,
AttackType.DamageType.bludgeon);
return;
}
/* Check size of ch vs. victim. */
/* If ch is too small. */
if (ch.CurrentSize < victim.CurrentSize)
{
SocketConnection.Act("$N&n is too big for you to bash!", ch, null, victim, SocketConnection.MessageTarget.character);
return;
}
/* Ch 2 or more sizes larger than victim => bad! */
if (ch.CurrentSize - 2 > victim.CurrentSize)
{
SocketConnection.Act("You nearly topple over as you try to bash $N&n.", ch, null, victim, SocketConnection.MessageTarget.character);
SocketConnection.Act("$n&n nearly topples over as $e attempts to bash you.", ch, null, victim, SocketConnection.MessageTarget.victim);
SocketConnection.Act("$n&n nearly topples over as $e attempts to bash $N&n.", ch, null, victim, SocketConnection.MessageTarget.room_vict);
ch.WaitState((Skill.SkillList["bash"].Delay));
ch.CurrentPosition = Position.kneeling;
if (victim.Fighting == null)
{
Combat.SetFighting(victim, ch);
}
return;
}
/* Lag to basher from bash. Pets get more lag because pets are cheesy */
if (!ch.IsNPC())
{
ch.WaitState(MUDMath.FuzzyNumber(Skill.SkillList["bash"].Delay));
}
else
{
ch.WaitState((Skill.SkillList["bash"].Delay * 6 / 5));
}
/* Base chance to bash, followed by chance modifications. */
if (ch.IsNPC())
{
chance = (ch.Level * 3) / 2 + 15;
}
else
{
chance = ((PC)ch).SkillAptitude["bash"] - 5;
}
if (victim.CurrentPosition < Position.fighting)
//.........这里部分代码省略.........
示例5: GuildWithdraw
/// <summary>
/// Take money from your guild bank account.
/// </summary>
/// <param name="ch"></param>
/// <param name="str"></param>
public static void GuildWithdraw(CharData ch, string[] str)
{
if( ch == null ) return;
string arg = String.Empty;
if (ch.IsNPC())
return;
Guild guild = ((PC)ch).GuildMembership;
if (guild == null)
{
ch.SendText("You're not in a guild!\r\n");
return;
}
if (((PC)ch).GuildRank < Guild.Rank.deputy)
{
ch.SendText("You'll have to be promoted before you can withdraw from the guild.\r\n");
return;
}
if (str.Length == 0)
{
ch.SendText("Withdraw what?\r\n");
return;
}
if (MUDString.IsNumber(str[0]))
{
int amount;
Int32.TryParse(str[0], out amount);
if (amount <= 0)
{
ch.SendText("Sorry, you can't do that.\r\n");
return;
}
if ("copper".StartsWith(arg, StringComparison.CurrentCultureIgnoreCase))
{
if (guild.GuildBankAccount.Copper < amount)
{
ch.SendText("The guild doesen't have that many &n&+ycopper&n coins.\r\n");
return;
}
ch.ReceiveCopper(amount);
guild.GuildBankAccount.Copper -= amount;
}
else if ("silver".StartsWith(arg, StringComparison.CurrentCultureIgnoreCase))
{
if (guild.GuildBankAccount.Silver < amount)
{
ch.SendText("The guild doesen't have that many &n&+wsilver&n coins.\r\n");
return;
}
ch.ReceiveSilver(amount);
guild.GuildBankAccount.Silver -= amount;
}
else if ("gold".StartsWith(arg, StringComparison.CurrentCultureIgnoreCase))
{
if (guild.GuildBankAccount.Gold < amount)
{
ch.SendText("The guild doesen't have that many &+Ygold&n coins.\r\n");
return;
}
ch.ReceiveGold(amount);
guild.GuildBankAccount.Gold -= amount;
}
else if ("platinum".StartsWith(arg, StringComparison.CurrentCultureIgnoreCase))
{
if (guild.GuildBankAccount.Platinum < amount)
{
ch.SendText("The guild doesen't have that many &+Wplatinum&n coins.\r\n");
return;
}
ch.ReceivePlatinum(amount);
guild.GuildBankAccount.Platinum -= amount;
}
else
{
ch.SendText("You don't have any idea what you are trying to do, do you?\r\n");
return;
}
guild.Save();
CharData.SavePlayer(ch);
ch.SendText("You make a withdrawal.\r\n");
}
else
{
ch.SendText("&+LSyntax: &+RWithdraw &n&+r<&+L# of coins&n&+r> <&+Lcoin type&n&+r>&n\r\n");
}
//.........这里部分代码省略.........
示例6: Guard
/// <summary>
/// Guard someone - try to prevent them from becoming the target of attacks.
/// </summary>
/// <param name="ch"></param>
/// <param name="str"></param>
public static void Guard(CharData ch, string[] str)
{
if( ch == null ) return;
CharData worldChar;
if (ch.IsNPC())
return;
if (!ch.HasSkill("guard"))
{
ch.SendText("Guard!? You can't even protect yourself!\r\n");
return;
}
if (str.Length == 0)
{
if (!((PC)ch).Guarding)
{
ch.SendText("Guard who?\r\n");
return;
}
if (!((PC)ch).Guarding)
{
string buf = "You are guarding " + (((PC)ch).Guarding.IsNPC() ?
((PC)ch).Guarding.ShortDescription : ((PC)ch).Guarding.Name) + ".\r\n";
ch.SendText(buf);
return;
}
}
if (!MUDString.StringsNotEqual(str[0], "who"))
{
if (!((PC)ch).Guarding)
{
ch.SendText("You are not guarding anyone.\r\n");
}
else
{
SocketConnection.Act("You are guarding $N&n.", ch, null, ((PC)ch).Guarding, SocketConnection.MessageTarget.character);
}
foreach (CharData it in Database.CharList)
{
worldChar = it;
if (worldChar.IsNPC())
{
continue;
}
if (((PC)worldChar).Guarding && ((PC)worldChar).Guarding == ch)
{
SocketConnection.Act("$N&n is guarding you.", ch, null, worldChar, SocketConnection.MessageTarget.character);
}
}
return;
}
CharData victim = ch.GetCharRoom(str[0]);
if (!victim)
{
ch.SendText("You don't see them here.\r\n");
return;
}
if (victim == ch)
{
ch.SendText("You no longer guard anyone.\r\n");
((PC)ch).Guarding = null;
return;
}
if (ch.IsClass(CharClass.Names.paladin) && victim.IsEvil())
{
ch.SendText("Their blackened soul is hardly worth the effort.\r\n");
return;
}
if (((PC)ch).Guarding)
{
SocketConnection.Act("$N&n stops guarding you.", ((PC)ch).Guarding, null, ch, SocketConnection.MessageTarget.character);
SocketConnection.Act("You stop guarding $N&n.", ch, null, ((PC)ch).Guarding, SocketConnection.MessageTarget.character);
}
((PC)ch).Guarding = victim;
SocketConnection.Act("You now guard $N&n.", ch, null, victim, SocketConnection.MessageTarget.character);
SocketConnection.Act("$n&n is now guarding you.", ch, null, victim, SocketConnection.MessageTarget.victim);
return;
}
示例7: Goto
/// <summary>
/// Teleport to another location.
/// </summary>
/// <param name="ch"></param>
/// <param name="str"></param>
public static void Goto(CharData ch, string[] str)
{
if( ch == null ) return;
CharData realChar = ch.GetChar();
if (!realChar.Authorized("goto") || !ch.IsImmortal())
{
return;
}
if (str.Length == 0)
{
ch.SendText("Goto where?\r\n");
return;
}
Room location = Room.FindLocation(ch, str[0]);
if (!location)
{
ch.SendText("No such location.\r\n");
return;
}
if (location.IsPrivate())
{
ch.SendText("That room is private right now.\r\n");
return;
}
if (ch.Fighting)
{
Combat.StopFighting(ch, true);
}
if (!ch.HasActionBit(PC.PLAYER_WIZINVIS))
{
if (!ch.IsNPC() && ((PC)ch).ImmortalData.DisappearMessage.Length > 0)
{
SocketConnection.Act("$T", ch, null, ((PC)ch).ImmortalData.DisappearMessage, SocketConnection.MessageTarget.room);
}
else
{
SocketConnection.Act("$n disappears in a puff of smoke.", ch, null, null, SocketConnection.MessageTarget.room);
}
}
ch.RemoveFromRoom();
ch.AddToRoom(location);
if (!ch.HasActionBit(PC.PLAYER_WIZINVIS))
{
if (!ch.IsNPC() && ((PC)ch).ImmortalData.AppearMessage.Length > 0)
{
SocketConnection.Act("$T", ch, null, ((PC)ch).ImmortalData.AppearMessage, SocketConnection.MessageTarget.room);
}
else
{
SocketConnection.Act("$n appears in a swirling mist", ch, null, null, SocketConnection.MessageTarget.room);
}
}
CommandType.Interpret(ch, "look auto");
return;
}
示例8: Ban
/// <summary>
/// Immortal command to ban a site from the game.
/// </summary>
/// <param name="ch"></param>
/// <param name="str"></param>
public static void Ban(CharData ch, string[] str)
{
if( ch == null ) return;
BanData ban;
if (ch.IsNPC())
{
return;
}
CharData realChar = ch.GetChar();
if (!realChar.Authorized("ban"))
{
return;
}
if (str.Length == 0)
{
string text = "Banned sites:\r\n";
foreach (BanData it in Database.BanList)
{
ban = it;
text += ban.Name;
text += "\r\n";
}
ch.SendText(text);
return;
}
foreach (BanData it in Database.BanList)
{
ban = it;
if (!MUDString.StringsNotEqual(str[0], ban.Name))
{
ch.SendText("That site is already banned!\r\n");
return;
}
}
ban = new BanData();
ban.Name = str[0];
Database.BanList.Add(ban);
ch.SendText("Done.\r\n");
Event.UpdateBans();
return;
}
示例9: Endurance
public static void Endurance(CharData ch, string[] str)
{
if( ch == null ) return;
string arg = String.Empty;
int amount;
if (ch.IsNPC() || ((PC)ch).SkillAptitude["endurance"] == 0)
{
ch.SendText("Try all you will, but you're still your plain self.\r\n");
return;
}
if (!MUDString.StringsNotEqual(arg, "off"))
{
if (ch.HasAffect( Affect.AffectType.skill, "endurance"))
{
//strip the affect
ch.AffectStrip( Affect.AffectType.skill, "endurance");
}
else
{
ch.SendText("You are not using endurance.\r\n");
}
return;
}
if (((PC)ch).SkillAptitude["endurance"] >= 95)
amount = 15;
else if (((PC)ch).SkillAptitude["endurance"] >= 60)
amount = 10;
else
amount = 5;
Affect af = new Affect(Affect.AffectType.skill, "endurance", 5 * ch.Level, Affect.Apply.move, amount, Affect.AFFECT_MOVEMENT_INCREASED);
ch.AddAffect(af);
ch.SendText("You feel the endurance of the mountains in your muscles!\r\n");
}
示例10: Emote
/// <summary>
/// Emote - act like you've just performed an action.
/// </summary>
/// <param name="ch"></param>
/// <param name="str"></param>
public static void Emote(CharData ch, string[] str)
{
if( ch == null ) return;
if (!ch.IsNPC() && ch.HasActionBit(PC.PLAYER_NO_EMOTE))
{
ch.SendText("You are unable to emote.\r\n");
return;
}
if (ch.CurrentPosition == Position.fighting || ch.Fighting)
{
ch.SendText("You can't emote in combat.\r\n");
return;
}
if (str.Length == 0)
{
ch.SendText("Emote what?\r\n");
return;
}
string text = String.Join(" ", str );
if (text[(text.Length - 1)] != '.')
{
text += ".";
}
foreach (CharData roomChar in ch.InRoom.People)
{
if (roomChar == ch)
continue;
SocketConnection.Act("$n $t", ch, SocketConnection.TranslateText(text, ch, roomChar), roomChar, SocketConnection.MessageTarget.victim);
}
// MOBtrigger = false;
SocketConnection.Act("$n $T", ch, null, text, SocketConnection.MessageTarget.character);
return;
}
示例11: Attributes
/// <summary>
/// Shows a character's attribute screen.
/// </summary>
/// <param name="ch"></param>
/// <param name="str"></param>
public static void Attributes(CharData ch, string[] str)
{
if( ch == null ) return;
string buf1 = String.Empty;
if (ch.IsNPC())
{
ch.SendText("&nYour attributes are as would be expected for an NPC.\r\n");
return;
}
if (ch.IsImmortal() && str.Length != 0)
{
CharData worldChar = ch.GetCharWorld(str[0]);
if (!worldChar)
{
ch.SendText("No such person.\r\n");
return;
}
if (worldChar.IsNPC())
{
ch.SendText("NPCs don't have skills!\r\n");
return;
}
}
string buf = String.Format(
"&+WName: &+G{0}&n &+WLevel: {1}&n\r\n",
MUDString.PadStr(ch.Name, 17),
ch.Level);
buf1 += buf;
buf = String.Format(
"&+WRace:&n {0} &+WClass:&n {1} &n&+WSex:&n {2}\r\n",
MUDString.PadStr(Race.RaceList[ch.GetRace()].ColorName, 16),
MUDString.PadStr(ch.CharacterClass.WholistName, 16),
System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(ch.GetSexString()));
buf1 += buf;
// Break a player's size into strings when we get around to it
// -- Xangis
if (!ch.IsNPC())
{
buf = String.Format(
"&+WHeight:&n {0} inches &+WWeight:&n {1} pounds &+WSize:&n {2}\r\n",
MUDString.PadInt(((PC)ch).Height, 3),
MUDString.PadInt(((PC)ch).Weight, 5),
Race.SizeString(ch.CurrentSize));
}
else
{
buf = String.Format("&+WSize:&n {0}\r\n", ch.CurrentSize);
}
buf1 += buf;
TimeSpan time = TimeSpan.FromTicks(ch.TimePlayed.Ticks) + (DateTime.Now - ch.LogonTime);
int days = (int)time.TotalHours / 24;
time = (time - TimeSpan.FromDays(days));
int hours = (int)time.TotalHours;
time = (time - TimeSpan.FromHours(hours));
int minutes = (int)time.TotalMinutes;
// Age is a hack until we get it coded - Xangis
buf = String.Format(
"\r\n&+BAge:&n {0} years. &+BPlaying Time:&n {1} days {2} hours {3} minutes.\r\n",
MUDString.PadInt(ch.GetAge(), 3), days, hours, minutes);
buf1 += buf;
// Need to create a function to display character status strings
buf = String.Format("&+BStatus:&n {0}", System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(Position.PositionString(ch.CurrentPosition)));
if (!ch.IsNPC() && ch.IsAffected(Affect.AFFECT_BERZERK))
{
buf += ", &+Rberzerk&n";
}
if (!ch.IsNPC() && ch.HasActionBit(PC.PLAYER_MEMORIZING))
{
buf += ", Memorizing";
}
if (ch.IsAffected(Affect.AFFECT_CASTING))
{
buf += ", Casting";
}
if (ch.IsAffected(Affect.AFFECT_SINGING))
{
buf += ", Singing";
}
if (!ch.IsNPC() && ch.HasActionBit(PC.PLAYER_MEDITATING))
{
buf += ", Meditating";
}
if (!ch.IsNPC() && ch.HasActionBit(PC.PLAYER_CAMPING))
{ /* This is ugly and should be moved to its own function */
buf += ", Camping";
}
//.........这里部分代码省略.........
示例12: Echo
/// <summary>
/// Immortal command to echo content to the whole MUD.
/// </summary>
/// <param name="ch"></param>
/// <param name="str"></param>
public static void Echo(CharData ch, string[] str)
{
if( ch == null ) return;
CharData realChar = ch.GetChar();
if (!realChar.Authorized("echo"))
{
return;
}
if (str.Length == 0 || String.IsNullOrEmpty(str[0]))
{
ch.SendText("Echo what?\r\n");
return;
}
string colorCode = String.Empty;
if (!ch.IsNPC() && ((PC)ch).ImmortalData != null)
colorCode = ((PC)ch).ImmortalData.ImmortalColor;
string content = colorCode + String.Join(" ", str) + "&n\r\n";
SocketConnection.SendToAllChar(content);
return;
}
示例13: Eat
/// <summary>
/// Eat something.
/// </summary>
/// <param name="ch"></param>
/// <param name="str"></param>
public static void Eat(CharData ch, string[] str)
{
if( ch == null ) return;
Object obj;
if (ch.IsBlind())
return;
if (ch.Fighting || ch.CurrentPosition == Position.fighting)
{
ch.SendText("You can't eat while you're fighting!\r\n");
return;
}
if (str.Length == 0)
{
ch.SendText("Eat what?\r\n");
return;
}
if (!(obj = ch.GetObjCarrying(str[0])))
{
ch.SendText("You do not have that item.\r\n");
return;
}
if (!ch.IsImmortal())
{
if (obj.ItemType != ObjTemplate.ObjectType.food && obj.ItemType != ObjTemplate.ObjectType.pill)
{
ch.SendText("That's not edible.\r\n");
return;
}
if (!ch.IsNPC() && ((PC)ch).Hunger > 40)
{
ch.SendText("You are too full to eat more.\r\n");
return;
}
}
SocketConnection.Act("You consume $p&n.", ch, obj, null, SocketConnection.MessageTarget.character);
SocketConnection.Act("$n&n inhales $p&n.", ch, obj, null, SocketConnection.MessageTarget.room);
switch (obj.ItemType)
{
case ObjTemplate.ObjectType.food:
if (!ch.IsNPC())
{
int condition = ((PC)ch).Hunger;
if (!ch.IsUndead())
{
ch.AdjustHunger(obj.Values[0]);
}
if (((PC)ch).Hunger > 40)
{
ch.SendText("You are full.\r\n");
}
else if (condition == 0 && ((PC)ch).Hunger > 0)
{
ch.SendText("You are no longer hungry.\r\n");
}
}
if (obj.Values[3] != 0 && !CharData.CheckImmune(ch, Race.DamageType.poison))
{
/* The shit was poisoned! */
Affect af = new Affect();
SocketConnection.Act("$n chokes and gags.", ch, null, null, SocketConnection.MessageTarget.room);
ch.SendText("You choke and gag.\r\n");
af.Type = Affect.AffectType.spell;
af.Value = "poison";
af.Duration = 2 * obj.Values[0];
af.AddModifier(Affect.Apply.strength, -(obj.Level / 7 + 2));
af.SetBitvector(Affect.AFFECT_POISON);
ch.CombineAffect(af);
}
break;
case ObjTemplate.ObjectType.pill:
{
for (int i = 1; i <= 4; i++)
{
String spellName = SpellNumberToTextMap.GetSpellNameFromNumber(obj.Values[i]);
if (String.IsNullOrEmpty(spellName))
{
Log.Error("Eat: Spell number " + obj.Values[i] + " not found for pill object " + obj.ObjIndexNumber + ". Make sure it's in the SpellNumberToTextMap.");
}
Spell spell = StringLookup.SpellLookup(spellName);
if (!spell)
{
//.........这里部分代码省略.........
示例14: Drop
//.........这里部分代码省略.........
}
*/
ch.SendText("Done.\r\n");
SocketConnection.Act("$n&n drops some &n&+wcoins&n.", ch, null, null, SocketConnection.MessageTarget.room);
return;
}
if (str[0] != "all" && MUDString.IsPrefixOf("all.", str[0]))
{
/* 'drop iobj' */
Object iobj = ch.GetObjCarrying(str[0]);
if (!iobj)
{
ch.SendText("You do not have that item.\r\n");
return;
}
if (!ch.CanDropObject(iobj))
{
ch.SendText("You can't release your grip on it.\r\n");
return;
}
iobj.RemoveFromChar();
iobj.AddToRoom(ch.InRoom);
// Prevent item duping - Xangis
CharData.SavePlayer(ch);
iobj.FlyLevel = ch.FlightLevel;
SocketConnection.Act("You drop $p&n.", ch, iobj, null, SocketConnection.MessageTarget.character);
SocketConnection.Act("$n&n discards $p&n.", ch, iobj, null, SocketConnection.MessageTarget.room);
if (iobj.HasFlag(ObjTemplate.ITEM_TRANSIENT))
{
SocketConnection.Act("$p&n crumbles to dust.", ch, iobj, null, SocketConnection.MessageTarget.all);
iobj.RemoveFromWorld();
}
else if (ch.InRoom.TerrainType == TerrainType.lava && !iobj.HasFlag(ObjTemplate.ITEM_NOBURN))
{
SocketConnection.Act("$p&n melts as it sinks into the &+RLava&n.", ch, iobj, null, SocketConnection.MessageTarget.all);
if (!ch.IsNPC())
{
((PC)ch).Destroyed.AddItem(iobj);
}
iobj.RemoveFromWorld();
}
}
else
{
/* 'drop all' or 'drop all.obj' */
bool found = false;
for (int i = ch.Carrying.Count - 1; i >= 0 ; i--)
{
Object obj = ch.Carrying[i];
if ( (str.Length < 2 || MUDString.NameContainedIn(str[0].Substring(4), obj.Name))
&& CharData.CanSeeObj(ch, obj)
&& obj.WearLocation == ObjTemplate.WearLocation.none
&& ch.CanDropObject(obj))
{
found = true;
obj.RemoveFromChar();
obj.AddToRoom(ch.InRoom);
SocketConnection.Act("You drop $p&n.", ch, obj, null, SocketConnection.MessageTarget.character);
SocketConnection.Act("$n&n drops $p&n.", ch, obj, null, SocketConnection.MessageTarget.room);
if (obj.HasFlag(ObjTemplate.ITEM_TRANSIENT))
{
SocketConnection.Act("$p&n crumbles to dust.", ch, obj, null, SocketConnection.MessageTarget.all);
if (!ch.IsNPC())
{
((PC)ch).Destroyed.AddItem(obj);
}
obj.RemoveFromWorld();
}
else if (ch.InRoom.TerrainType == TerrainType.lava && !obj.HasFlag(ObjTemplate.ITEM_NOBURN))
{
SocketConnection.Act("$p&n melts as it sinks into the &+RLava&n.", ch, obj, null, SocketConnection.MessageTarget.all);
if (!ch.IsNPC())
{
((PC)ch).Destroyed.AddItem(obj);
}
obj.RemoveFromWorld();
}
}
}
if (!found)
{
if (str.Length > 1)
{
ch.SendText("You are not carrying anything.");
}
else
{
SocketConnection.Act("You are not carrying any $T&n.",
ch, null, str[0].Substring(4), SocketConnection.MessageTarget.character);
}
}
}
return;
}
示例15: Drink
/// <summary>
/// Ingest a liquid.
/// </summary>
/// <param name="ch"></param>
/// <param name="str"></param>
public static void Drink(CharData ch, string[] str)
{
if( ch == null ) return;
Object obj = null;
if (ch.IsBlind())
{
return;
}
if (ch.Fighting || ch.CurrentPosition == Position.fighting)
{
ch.SendText("You can't drink while you're fighting!\r\n");
return;
}
if (str.Length == 0 && ch.InRoom != null)
{
foreach (Object iobj in ch.InRoom.Contents)
{
if (iobj.ItemType == ObjTemplate.ObjectType.drink_container)
{
obj = iobj;
break;
}
}
if (!obj)
{
ch.SendText("Drink what?\r\n");
return;
}
}
else
{
if (!(obj = ch.GetObjHere(str[0])))
{
ch.SendText("You can't find it.\r\n");
return;
}
}
// Allow bards to get twice as drunk as other classes - Xangis
if (!ch.IsNPC() && !ch.IsImmortal()
&& ((PC)ch).Drunk > 15 && ch.IsClass(CharClass.Names.bard)
&& MUDMath.NumberPercent() < ch.GetCurrAgi() - ((PC)ch).Drunk)
{
ch.SendText("You fail to reach your mouth. *Hic*\r\n");
return;
}
if (!ch.IsNPC() && !ch.IsImmortal()
&& ((PC)ch).Drunk > 25 && ch.IsClass(CharClass.Names.bard)
&& MUDMath.NumberPercent() < ch.GetCurrAgi() - ((PC)ch).Drunk)
{
ch.SendText("You fail to reach your mouth. *Hic*\r\n");
return;
}
switch (obj.ItemType)
{
default:
ch.SendText("You can't drink from that.\r\n");
break;
case ObjTemplate.ObjectType.drink_container:
// -1 Means a container never goes empty.
if (obj.Values[1] <= 0 && obj.Values[1] != -1)
{
ch.SendText("It is already &+Lempty&n.\r\n");
return;
}
/* No drinking if you're full */
if ((!ch.IsImmortal()) && (
(!ch.IsNPC() && ((PC)ch).Thirst > 40) ||
(!ch.IsNPC() && ((PC)ch).Hunger > 50)))
{
ch.SendText("You couldn't possibly drink any more.\r\n");
return;
}
int liquid;
if ((liquid = obj.Values[2]) >= Liquid.Table.Length)
{
Log.Error("Drink: bad liquid number {0}.", liquid);
liquid = obj.Values[2] = 0;
}
SocketConnection.Act("You drink $T from $p&n.",
ch, obj, Liquid.Table[liquid].Name, SocketConnection.MessageTarget.character);
SocketConnection.Act("$n&n drinks $T from $p&n.",
ch, obj, Liquid.Table[liquid].Name, SocketConnection.MessageTarget.room);
//.........这里部分代码省略.........