本文整理汇总了C#中MUDEngine.CharData.GetCopper方法的典型用法代码示例。如果您正苦于以下问题:C# CharData.GetCopper方法的具体用法?C# CharData.GetCopper怎么用?C# CharData.GetCopper使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MUDEngine.CharData
的用法示例。
在下文中一共展示了CharData.GetCopper方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GuildDonate
public static void GuildDonate(CharData ch, string[] str)
{
if( ch == null ) return;
Coins coin = new Coins();
int coinage;
bool success = false;
if (ch.IsNPC())
{
return;
}
Guild guild = ((PC)ch).GuildMembership;
if (guild == null)
{
ch.SendText("You're not in a guild!\r\n");
return;
}
if (str.Length == 0)
{
ch.SendText("Deposit what?\r\n");
return;
}
if (!coin.FillFromString(str, ch))
{
ch.SendText("&+LSyntax: &+RSoc deposit &n&+r<&+L# of coins&n&+r> <&+Lcoin type&n&+r>&n\r\n");
return;
}
if (coin.Copper == 0 && coin.Silver == 0 && coin.Gold == 0 && coin.Platinum == 0)
{
ch.SendText("You have none of that type of &+Lcoin&n yet.\r\n");
return;
}
for (coinage = 0; coinage < 4; coinage++)
{
switch (coinage)
{
case 0: //copper
if (coin.Copper < 0)
{
ch.SendText("You can't deposit a debt!\r\n");
continue;
}
if (coin.Copper > ch.GetCopper())
{
ch.SendText("You don't have that much &+ycopper&n coin!\r\n");
continue;
}
if (coin.Copper == 0)
continue;
ch.SpendCopper(coin.Copper);
success = true;
break;
case 1: //silver
if (coin.Silver < 0)
{
ch.SendText("You can't deposit a debt!\r\n");
continue;
}
if (coin.Silver > ch.GetSilver())
{
ch.SendText("You don't have that much &+wsilver&n coin!\r\n");
continue;
}
if (coin.Silver == 0)
continue;
ch.SpendSilver(coin.Silver);
success = true;
break;
case 2: //gold
if (coin.Gold < 0)
{
ch.SendText("You can't deposit a debt!\r\n");
continue;
}
if (coin.Gold > ch.GetGold())
{
ch.SendText("You don't have that much &+Ygold&n coin!\r\n");
continue;
}
if (coin.Gold == 0)
continue;
ch.SpendGold(coin.Gold);
success = true;
break;
case 3: //platinum
if (coin.Platinum < 0)
{
ch.SendText("You can't deposit a debt!\r\n");
continue;
}
if (coin.Platinum > ch.GetPlatinum())
{
ch.SendText("You don't have that much &+Wplatinum&n coin!\r\n");
continue;
}
if (coin.Platinum == 0)
continue;
//.........这里部分代码省略.........
示例2: Drop
/// <summary>
/// Drop an item.
/// </summary>
/// <param name="ch"></param>
/// <param name="str"></param>
public static void Drop(CharData ch, string[] str)
{
if( ch == null ) return;
Object cash;
if (ch.IsAffected( Affect.AFFECT_HOLD) || ch.IsAffected( Affect.AFFECT_MINOR_PARA))
{
ch.SendText("You muscles won't respond!\r\n");
return;
}
if (str.Length == 0)
{
ch.SendText("Drop what?\r\n");
return;
}
if (MUDString.IsNumber(str[0]))
{
/* 'drop NNNN coins' */
int amount;
Int32.TryParse(str[0], out amount);
if (amount <= 0)
{
ch.SendText("Sorry, you can't do that.\r\n");
return;
}
if (str.Length < 2)
{
ch.SendText("That's fine, but *what* do you want to drop?\r\n");
return;
}
if ("copper".StartsWith(str[1], StringComparison.CurrentCultureIgnoreCase))
{
if (ch.GetCopper() < amount)
{
ch.SendText("You haven't got that many &n&+ycopper&n coins.\r\n");
return;
}
ch.SpendCopper(amount);
cash = Object.CreateMoney(amount, 0, 0, 0);
cash.AddToRoom(ch.InRoom);
cash.FlyLevel = ch.FlightLevel;
}
else if ("silver".StartsWith(str[1], StringComparison.CurrentCultureIgnoreCase))
{
if (ch.GetSilver() < amount)
{
ch.SendText("You haven't got that many &n&+wsilver&n coins.\r\n");
return;
}
ch.SpendSilver(amount);
(Object.CreateMoney(0, amount, 0, 0)).AddToRoom(ch.InRoom);
}
else if ("gold".StartsWith(str[1], StringComparison.CurrentCultureIgnoreCase))
{
if (ch.GetGold() < amount)
{
ch.SendText("You haven't got that many &+Ygold&n coins.\r\n");
return;
}
ch.SpendGold(amount);
(Object.CreateMoney(0, 0, amount, 0)).AddToRoom(ch.InRoom);
}
else if ("platinum".StartsWith(str[1], StringComparison.CurrentCultureIgnoreCase))
{
if (ch.GetPlatinum() < amount)
{
ch.SendText("You haven't got that many &+Wplatinum&n coins.\r\n");
return;
}
ch.SpendPlatinum(amount);
(Object.CreateMoney(0, 0, 0, amount)).AddToRoom(ch.InRoom);
}
else
{
ch.SendText("They haven't minted that type of &+Lcoin&n yet.\r\n");
return;
}
/* Disabled merging of coin types. This should eventually be re-enabled
for ( obj = ch.in_room.contents; obj; obj = obj_next )
{
obj_next = obj.next_content;
switch ( obj.pIndexData.vnum )
{
case StaticObjects.OBJECT_NUMBER_MONEY_ONE:
amount += 1;
obj.ExtractFromWorld();;
//.........这里部分代码省略.........
示例3: Give
/// <summary>
/// Give an item to someone.
/// </summary>
/// <param name="ch"></param>
/// <param name="str"></param>
public static void Give(CharData ch, string[] str)
{
if( ch == null ) return;
CharData victim;
string arg1 = String.Empty;
string arg2 = String.Empty;
if (String.IsNullOrEmpty(arg1) || String.IsNullOrEmpty(arg2))
{
ch.SendText("Give what to whom?\r\n");
return;
}
if (MUDString.IsNumber(arg1))
{
/* 'give NNNN coins victim' */
string buf;
string arg3 = String.Empty;
int amount;
Int32.TryParse(arg1, out amount);
if (amount <= 0)
{
ch.SendText("Sorry, you can't do that.\r\n");
return;
}
if (String.IsNullOrEmpty(arg3))
{
ch.SendText("Give what to whom?\r\n");
return;
}
victim = ch.GetCharRoom(arg3);
if (victim == null)
{
ch.SendText("They aren't here.\r\n");
return;
}
if (!MUDString.IsPrefixOf(arg2, "copper"))
{
if (ch.GetCopper() < amount)
{
ch.SendText("You haven't got that many &+ycopper&n coins.\r\n");
return;
}
ch.SpendCopper(amount);
SocketConnection.Act("You give $N&n some &+ycopper&n.", ch, null, victim, SocketConnection.MessageTarget.character);
buf = String.Format("$n&n gives you {0} &+ycopper&n.", amount);
SocketConnection.Act(buf, ch, null, victim, SocketConnection.MessageTarget.victim);
SocketConnection.Act("$n&n gives $N&n some &+ycopper&n.", ch, null, victim, SocketConnection.MessageTarget.everyone_but_victim);
// prog_bribe_trigger( victim, ch, amount );
if (!ch.CheckQuest(victim, null, amount))
{
victim.ReceiveCopper(amount);
}
// Prevent money duping
CharData.SavePlayer(ch);
CharData.SavePlayer(victim);
return;
}
if (!MUDString.IsPrefixOf(arg2, "silver"))
{
if (ch.GetSilver() < amount)
{
ch.SendText("You haven't got that many silver coins.\r\n");
return;
}
ch.SpendSilver(amount);
SocketConnection.Act("You give $N&n some silver.", ch, null, victim, SocketConnection.MessageTarget.character);
buf = String.Format("$n&n gives you {0} silver.", amount);
SocketConnection.Act(buf, ch, null, victim, SocketConnection.MessageTarget.victim);
SocketConnection.Act("$n&n gives $N&n some silver.", ch, null, victim, SocketConnection.MessageTarget.everyone_but_victim);
// prog_bribe_trigger( victim, ch, amount * 10);
if (!ch.CheckQuest(victim, null, (amount * 10)))
victim.ReceiveSilver(amount);
// Prevent money duping
CharData.SavePlayer(ch);
CharData.SavePlayer(victim);
return;
}
if (!MUDString.IsPrefixOf(arg2, "gold"))
{
if (ch.GetGold() < amount)
{
ch.SendText("You haven't got that many &+Ygold&n coins.\r\n");
return;
}
ch.SpendGold(amount);
SocketConnection.Act("You give $N&n some &+Ygold&n.", ch, null, victim, SocketConnection.MessageTarget.character);
buf = String.Format("$n&n gives you {0} &+Ygold&n.", amount);
SocketConnection.Act(buf, ch, null, victim, SocketConnection.MessageTarget.victim);
SocketConnection.Act("$n&n gives $N&n some &+Ygold&n.", ch, null, victim, SocketConnection.MessageTarget.everyone_but_victim);
//.........这里部分代码省略.........
示例4: Split
/// <summary>
/// This modified version for the 4-type coin system by Xangis
/// </summary>
/// <param name="ch"></param>
/// <param name="str"></param>
public static void Split(CharData ch, string[] str)
{
if( ch == null ) return;
int members = 0;
int coinage;
bool success = false;
Coins coin = new Coins();
if (!ch.GroupLeader)
{
ch.SendText("Split with yourself? How generous!\r\n");
return;
}
if (str.Length == 0)
{
ch.SendText("Split how much?\r\n");
return;
}
if (!coin.FillFromString(str, ch))
{
ch.SendText("Try 'split <number/all> <coin type>' or 'split all.coins' \r\n");
return;
}
if (coin.Copper == 0 && coin.Silver == 0 && coin.Gold == 0 && coin.Platinum == 0)
{
ch.SendText("Try sharing some actual coins!\r\n");
return;
}
foreach (CharData groupChar in ch.InRoom.People)
{
if (groupChar.IsSameGroup(ch))
{
members++;
}
}
if (members < 2)
{
ch.SendText("Just keep it all.\r\n");
Log.Error("Commandsplit: managed to find a group of 1 person\r\n", 0);
return;
}
for (coinage = 0; coinage < 4; coinage++)
{
switch (coinage)
{
case 0: //copper
if (coin.Copper <= 0)
continue; //quietly ignore errors
int share;
int extra;
string buf;
if (coin.Copper <= ch.GetCopper())
{
share = coin.Copper / members;
extra = coin.Copper % members;
if (share == 0)
continue;
ch.SpendCopper(coin.Copper);
buf = String.Format(
"You split {0} &+ycopper&n. Your share is {1} coins.\r\n", coin.Copper, share + extra);
ch.SendText(buf);
buf = String.Format("$n splits some &+ycopper&n. Your share is {0} coins.",
share);
foreach (CharData groupChar in ch.InRoom.People)
{
if (groupChar != ch && groupChar.IsSameGroup(ch))
{
SocketConnection.Act(buf, ch, null, groupChar, SocketConnection.MessageTarget.victim);
groupChar.ReceiveCopper(share);
}
else if (groupChar == ch)
groupChar.ReceiveCopper(share + extra);
}
success = true;
continue;
}
ch.SendText("You don't have that much &+ycopper&n coin!\r\n");
break;
case 1: //silver
if (coin.Silver <= 0)
continue; //quietly ignore errors
if (coin.Silver <= ch.GetSilver())
{
share = coin.Silver / members;
extra = coin.Silver % members;
if (share == 0)
continue;
ch.SpendSilver(coin.Silver);
buf = String.Format(
"You split {0} &+wsilver&n. Your share is {1} coins.\r\n", coin.Silver, share + extra);
ch.SendText(buf);
//.........这里部分代码省略.........
示例5: Deposit
/// <summary>
/// Put coins into a bank account.
/// </summary>
/// <param name="ch"></param>
/// <param name="str"></param>
public static void Deposit(CharData ch, string[] str)
{
if( ch == null ) return;
int coinage;
bool success = false;
Coins coin = new Coins();
if (ch.IsNPC())
{
ch.SendText("NPCs do not have bank accounts!\r\n");
return;
}
if (!ch.InRoom || !ch.InRoom.HasFlag(RoomTemplate.ROOM_BANK))
{
ch.SendText("You're not in a bank!\r\n");
return;
}
if (str.Length == 0)
{
ch.SendText("Deposit what?\r\n");
return;
}
if (!coin.FillFromString(str, ch))
{
ch.SendText("&+LSyntax: &+RDeposit &n&+r<&+L# of coins&n&+r> <&+Lcoin type&n&+r>&n\r\n");
return;
}
if (coin.Copper == 0 && coin.Silver == 0 && coin.Gold == 0 && coin.Platinum == 0)
{
ch.SendText("You have none of that type of &+Lcoin&n yet.\r\n");
return;
}
for (coinage = 0; coinage < 4; coinage++)
{
switch (coinage)
{
case 0: //copper
if (coin.Copper < 0)
{
ch.SendText("You can't deposit a debt!\r\n");
continue;
}
if (coin.Copper > ch.GetCopper())
{
ch.SendText("You don't have that much &+ycopper&n coin!\r\n");
continue;
}
if (coin.Copper == 0)
continue;
ch.SpendCopper(coin.Copper);
((PC)ch).Bank.Copper += coin.Copper;
success = true;
break;
case 1: //silver
if (coin.Silver < 0)
{
ch.SendText("You can't deposit a debt!\r\n");
continue;
}
if (coin.Silver > ch.GetSilver())
{
ch.SendText("You don't have that much &+wsilver&n coin!\r\n");
continue;
}
if (coin.Silver == 0)
continue;
ch.SpendSilver(coin.Silver);
((PC)ch).Bank.Silver += coin.Silver;
success = true;
break;
case 2: //gold
if (coin.Gold < 0)
{
ch.SendText("You can't deposit a debt!\r\n");
continue;
}
if (coin.Gold > ch.GetGold())
{
ch.SendText("You don't have that much &+Ygold&n coin!\r\n");
continue;
}
if (coin.Gold == 0)
continue;
ch.SpendGold(coin.Gold);
((PC)ch).Bank.Gold += coin.Gold;
success = true;
break;
case 3: //platinum
if (coin.Platinum < 0)
{
ch.SendText("You can't deposit a debt!\r\n");
continue;
//.........这里部分代码省略.........
示例6: Score
/// <summary>
/// Shows a character's score screen.
/// </summary>
/// <param name="ch"></param>
/// <param name="str"></param>
public static void Score(CharData ch, string[] str)
{
if( ch == null ) return;
string text = String.Empty;
if (ch == null)
{
Log.Error("Command.Score(): null ch.", 0);
return;
}
Affect prev;
text += "&+WName: &+G" + ch.Name + "&n" + (ch.IsNPC() ? String.Empty : ((PC)ch).Title) + "\r\n";
text += "&+WRace:&n " + MUDString.PadStr(Race.RaceList[ch.GetRace()].ColorName, 16);
text += "&+WClass:&n " + MUDString.PadStr(ch.CharacterClass.WholistName, 32) + "&n\r\n";
text += "&+WLevel: " + MUDString.PadInt(ch.Level, 5) + " Played: " + (ch.TimePlayed.Hours) + " hours &+WSex: ";
text += System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(ch.GetSexString()) + "\r\n";
if (ch.Fighting == null)
{
text += "&+WExperience: &+B" + StringConversion.ExperienceString(ch) + "&n\r\n\r\n";
}
text += "&+WCurrent/Max Health: [&n&+g" + MUDString.PadInt(ch.Hitpoints, 5) + "&+W / &n&+g" + MUDString.PadInt(ch.GetMaxHit(), 5);
text += "&+W] Coins: Carried In Bank\r\n";
text += "&+WCurrent/Max Moves: [&n&+g" + MUDString.PadInt(ch.CurrentMoves, 5) + "&+W / &n&+g" + MUDString.PadInt(ch.MaxMoves, 5);
text += "&+W] &+WPlatinum " + MUDString.PadInt(ch.GetPlatinum(), 5) + " ";
text += (ch.IsNPC() ? 0 : ((PC)ch).Bank.Platinum) + "\r\n";
text += "Current/Max Mana: [&n&+g" + MUDString.PadInt(ch.CurrentMana, 5) + "&+W / &n&+g" + MUDString.PadInt(ch.MaxMana, 5);
text += "&+W] &+YGold " + MUDString.PadInt(ch.GetGold(), 5) + " " + (ch.IsNPC() ? 0 : ((PC)ch).Bank.Gold) + "\r\n";
text += " &n&+wSilver " + MUDString.PadInt(ch.GetSilver(), 5) + " ";
text += (ch.IsNPC() ? 0 : ((PC)ch).Bank.Silver) + "\r\n";
text += "&+WFrags: &+W" + MUDString.PadInt((ch.IsNPC() ? 0 : ((PC)ch).Frags), 3) + "&n &n&+yCopper ";
text += MUDString.PadInt(ch.GetCopper(), 5) + " " + (ch.IsNPC() ? 0 : ((PC)ch).Bank.Copper) + "\r\n";
if (!ch.IsNPC())
{
text += "&+WTotal Deaths: &+W" + MUDString.PadInt(((PC)ch).MobDeaths + ((PC)ch).PlayerDeaths, 5) + "&n &+WMobs Killed: &+W";
text += MUDString.PadInt(((PC)ch).MobKills, 5) + "&n\r\n&+WPlayers Killed: &+W" + MUDString.PadInt(((PC)ch).PlayerKills, 5);
text += "&n &+WPlayer Deaths: &+W" + MUDString.PadInt(((PC)ch).PlayerDeaths, 5) + "&n\r\n";
}
if (!ch.IsNPC())
{
int divisor = ((PC)ch).Created.Quantity;
if (divisor == 0)
divisor = 1;
text += String.Format("&+WItems Created: &n{0} &+WTotal Value: &n{1} &+WBest: &n{2} &+WAvg: &n{3}\r\n",
MUDString.PadInt(((PC)ch).Created.Quantity, 5),
MUDString.PadInt(((PC)ch).Created.TotalCost, 5),
MUDString.PadInt(((PC)ch).Created.MaxCost, 5),
MUDString.PadInt((((PC)ch).Created.TotalCost / divisor), 5));
divisor = ((PC)ch).Destroyed.Quantity;
if (divisor == 0)
divisor = 1;
text += String.Format("&+WItems Destroyed: &n{0} &+WTotal Value: &n{1} &+WBest: &n{2} &+WAvg: &n{3}\r\n",
MUDString.PadInt(((PC)ch).Destroyed.Quantity, 5),
MUDString.PadInt(((PC)ch).Destroyed.TotalCost, 5),
MUDString.PadInt(((PC)ch).Destroyed.MaxCost, 5),
MUDString.PadInt((((PC)ch).Destroyed.TotalCost / divisor), 5));
}
if (!ch.IsNPC())
{
text += "&+WTotal Score: &+W" + ((PC)ch).Score + "&n\r\n";
}
if (ch.IsClass(CharClass.Names.monk) || ch.IsClass(CharClass.Names.mystic))
{
text += "&+WTradition: &+B" + TraditionData.Names[((PC)ch).Tradition] + "&n\r\n";
text += "&+WTraining Points: &+B" + (ch.IsNPC() ? 0 : ((PC)ch).SkillPoints) + "&n\r\n";
}
if (ch.Followers != null && ch.Followers.Count > 0)
{
text += "&+BFollowers:&n\r\n";
foreach (CharData follower in ch.Followers)
{
if (follower == null)
{
continue;
}
text += follower.ShowNameTo(ch, true) + " &n\r\n";
}
text += "\r\n";
}
if (ch.IsAffected( Affect.AFFECT_POISON))
{
text += "&+GYou are poisoned.&n\r\n";
}
if ((ch.IsAffected( Affect.AFFECT_DETECT_MAGIC) || ch.IsImmortal())
&& MUDString.StringsNotEqual(BitvectorFlagType.AffectString(ch.AffectedBy, true), "none"))
{
text += "&+BEnchantments: &+W" + BitvectorFlagType.AffectString(ch.AffectedBy, true) + "&n\r\n\r\n";
}
//.........这里部分代码省略.........
示例7: CloneMobile
/// <summary>
/// Creates a duplicate of a mobile minus its inventory.
/// </summary>
/// <param name="parent"></param>
/// <param name="clone"></param>
public static void CloneMobile( CharData parent, CharData clone )
{
int i;
if( parent == null || clone == null || !parent.IsNPC() )
return;
// Fix values.
clone.Name = parent.Name;
clone.ShortDescription = parent.ShortDescription;
clone.FullDescription = parent.FullDescription;
clone.Description = parent.Description;
clone.Gender = parent.Gender;
clone.CharacterClass = parent.CharacterClass;
clone.SetPermRace( parent.GetRace() );
clone.Level = parent.Level;
clone.TrustLevel = 0;
clone.SpecialFunction = parent.SpecialFunction;
clone.SpecialFunctionNames = parent.SpecialFunctionNames;
clone.Timer = parent.Timer;
clone.Wait = parent.Wait;
clone.Hitpoints = parent.Hitpoints;
clone.MaxHitpoints = parent.MaxHitpoints;
clone.CurrentMana = parent.CurrentMana;
clone.MaxMana = parent.MaxMana;
clone.CurrentMoves = parent.CurrentMoves;
clone.MaxMoves = parent.MaxMoves;
clone.SetCoins( parent.GetCopper(), parent.GetSilver(), parent.GetGold(), parent.GetPlatinum() );
clone.ExperiencePoints = parent.ExperiencePoints;
clone.ActionFlags = parent.ActionFlags;
clone.Affected = parent.Affected;
clone.CurrentPosition = parent.CurrentPosition;
clone.Alignment = parent.Alignment;
clone.Hitroll = parent.Hitroll;
clone.Damroll = parent.Damroll;
clone.Wimpy = parent.Wimpy;
clone.Deaf = parent.Deaf;
clone.Hunting = parent.Hunting;
clone.Hating = parent.Hating;
clone.Fearing = parent.Fearing;
clone.Resistant = parent.Resistant;
clone.Immune = parent.Immune;
clone.Susceptible = parent.Susceptible;
clone.CurrentSize = parent.CurrentSize;
clone.PermStrength = parent.PermStrength;
clone.PermIntelligence = parent.PermIntelligence;
clone.PermWisdom = parent.PermWisdom;
clone.PermDexterity = parent.PermDexterity;
clone.PermConstitution = parent.PermConstitution;
clone.PermAgility = parent.PermAgility;
clone.PermCharisma = parent.PermCharisma;
clone.PermPower = parent.PermPower;
clone.PermLuck = parent.PermLuck;
clone.ModifiedStrength = parent.ModifiedStrength;
clone.ModifiedIntelligence = parent.ModifiedIntelligence;
clone.ModifiedWisdom = parent.ModifiedWisdom;
clone.ModifiedDexterity = parent.ModifiedDexterity;
clone.ModifiedConstitution = parent.ModifiedConstitution;
clone.ModifiedAgility = parent.ModifiedAgility;
clone.ModifiedCharisma = parent.ModifiedCharisma;
clone.ModifiedPower = parent.ModifiedPower;
clone.ModifiedLuck = parent.ModifiedLuck;
clone.ArmorPoints = parent.ArmorPoints;
//clone._mpactnum = parent._mpactnum;
for (i = 0; i < 6; i++)
{
clone.SavingThrows[i] = parent.SavingThrows[i];
}
// Now add the affects.
foreach (Affect affect in parent.Affected)
{
clone.AddAffect(affect);
}
}
示例8: MakeCorpse
/// <summary>
/// Turns a character into a corpse.
///
/// TODO: Add a corpse to the corpse list when a corpse is created.
/// TODO: Also remove corpses from the corpse list when a corpse decays.
/// </summary>
/// <param name="ch"></param>
static void MakeCorpse( CharData ch )
{
Object corpse;
string name;
int corpseIndexNumber;
int timer;
int level;
// Need a bailout here if undead corpses are supposed to disintegrate.
if( LeavesNoCorpse( ch ) )
{
return;
}
// Different corpse settings for players and mobs - Xangis
if( ch.IsNPC() )
{
corpseIndexNumber = StaticObjects.OBJECT_NUMBER_CORPSE_NPC;
name = ch.ShortDescription;
timer = MUDMath.NumberRange( 15, 30 );
level = ch.Level; // Corpse level
}
else
{
corpseIndexNumber = StaticObjects.OBJECT_NUMBER_CORPSE_PC;
name = ch.Name;
timer = MUDMath.NumberRange( 180, 240 ) + ( ch.Level * 2 );
level = ch.Level; // Corpse level
}
/*
* This longwinded corpse creation routine comes about because
* we dont want anything created AFTER a corpse to be placed
* INSIDE a corpse. This had caused crashes from ObjectUpdate()
* in Object.Extract().
*/
if( ch.GetCash() > 0 )
{
Object coins = Object.CreateMoney( ch.GetCopper(), ch.GetSilver(), ch.GetGold(), ch.GetPlatinum() );
corpse = Database.CreateObject( Database.GetObjTemplate( corpseIndexNumber ), 0 );
corpse.AddToObject( coins );
ch.SetCoins( 0, 0, 0, 0 );
}
else
{
corpse = Database.CreateObject( Database.GetObjTemplate( corpseIndexNumber ), 0 );
}
corpse.Timer = timer;
corpse.Values[ 0 ] = (int)Race.RaceList[ ch.GetRace() ].BodyParts;
corpse.Level = level; // corpse level
string buf = String.Format( "corpse of {0}", name );
corpse.Name = buf;
buf = String.Format( corpse.ShortDescription, name );
corpse.ShortDescription = buf;
buf = String.Format( corpse.FullDescription, name );
corpse.FullDescription = buf;
Object obj;
for(int i = (ch.Carrying.Count - 1); i >= 0; i-- )
{
obj = ch.Carrying[i];
// Remove items flagged inventory-only from all corpses.
if (obj.HasFlag(ObjTemplate.ITEM_INVENTORY))
{
Log.Trace("Removing inventory-item " + obj + " from character before creating corpse: " + corpse);
obj.RemoveFromWorld();
}
else
{
if (ch.IsNPC() && ch.MobileTemplate.ShopData
&& obj.WearLocation == ObjTemplate.WearLocation.none)
{
obj.RemoveFromChar();
obj.RemoveFromWorld();
}
else
{
obj.RemoveFromChar();
corpse.AddToObject(obj);
}
}
}
corpse.AddToRoom( ch.InRoom );
if( !corpse.InRoom )
{
//.........这里部分代码省略.........
示例9: LeavesNoCorpse
/// <summary>
/// Checks whether the mob should leave a corpse when it dies. If so, returns
/// true. Otherwise, it prints a message, if appropriate, and returns false.
/// </summary>
/// <param name="ch"></param>
/// <returns></returns>
static bool LeavesNoCorpse( CharData ch )
{
string msg = String.Empty;
bool noCorpse = false;
if( ch.IsUndead() )
{
noCorpse = true;
msg = String.Format( "$n&N crumbles to dust." );
}
else if( ch.IsElemental() )
{
noCorpse = true;
msg = String.Format( "$n&n returns to the elements from which it formed." );
}
if( noCorpse )
{
SocketConnection.Act( msg, ch, null, null, SocketConnection.MessageTarget.room );
if( ch.GetCash() > 0 )
{
Object coins = Object.CreateMoney( ch.GetCopper(), ch.GetSilver(), ch.GetGold(), ch.GetPlatinum() );
coins.AddToRoom( ch.InRoom );
}
for( int i = (ch.Carrying.Count-1); i >= 0; i-- )
{
Object obj = ch.Carrying[i];
obj.RemoveFromChar();
obj.AddToRoom( ch.InRoom );
}
}
return noCorpse;
}
示例10: FillFromString
/// <summary>
/// Fills a coin structure based on some input text. Valid inputs include:
/// 3 platinum
/// all.coins
/// 1 p
/// 2 p 3 copper all.gold
/// all.silver
/// all.g
/// a
/// </summary>
/// <param name="str"></param>
/// <param name="ch"></param>
/// <returns></returns>
public bool FillFromString( string[] str, CharData ch )
{
Copper = 0;
Silver = 0;
Gold = 0;
Platinum = 0;
if( ch == null || str.Length < 1 || String.IsNullOrEmpty(str[0] ))
{
return false;
}
int currentNumber = 0;
for (int i = 0; i < str.Length; i++)
{
if ("all.coins".StartsWith(str[i]))
{
Copper = ch.GetCopper();
Silver = ch.GetSilver();
Gold = ch.GetGold();
Platinum = ch.GetPlatinum();
return true;
}
else if ("all.copper".StartsWith(str[i]))
{
Copper = ch.GetCopper();
}
else if ("all.silver".StartsWith(str[i]))
{
Silver = ch.GetSilver();
}
else if ("all.gold".StartsWith(str[i]))
{
Gold = ch.GetGold();
}
else if ("all.platinum".StartsWith(str[i]))
{
Platinum = ch.GetPlatinum();
}
else if ("copper".StartsWith(str[i]))
{
Copper = currentNumber;
}
else if ("silver".StartsWith(str[i]))
{
Silver = currentNumber;
}
else if ("gold".StartsWith(str[i]))
{
Gold = currentNumber;
}
else if ("platinum".StartsWith(str[i]))
{
Platinum = currentNumber;
}
// Treat it as a number.
else
{
Int32.TryParse(str[i], out currentNumber);
}
}
if (Copper > 0 || Silver > 0 || Gold > 0 || Platinum > 0)
{
return true;
}
return false;
}