Merge pull request #485 from CoderCow/general-devel-cc
Some Region Command Changes and General Improvements
This commit is contained in:
commit
f3f5f9e3e2
5 changed files with 588 additions and 238 deletions
|
|
@ -2835,26 +2835,66 @@ namespace TShockAPI
|
||||||
{
|
{
|
||||||
if (args.Parameters.Count > 1)
|
if (args.Parameters.Count > 1)
|
||||||
{
|
{
|
||||||
string regionName = String.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1));
|
string regionName = args.Parameters[1];
|
||||||
Region r = TShock.Regions.GetRegionByName(regionName);
|
Region region = TShock.Regions.GetRegionByName(regionName);
|
||||||
|
if (region == null)
|
||||||
if (r == null)
|
|
||||||
{
|
{
|
||||||
args.Player.SendMessage("Region {0} does not exist");
|
args.Player.SendErrorMessage("Region {0} does not exist.", regionName);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
args.Player.SendMessage(r.Name + ": P: " + r.DisableBuild + " X: " + r.Area.X + " Y: " + r.Area.Y + " W: " +
|
int pageNumber;
|
||||||
r.Area.Width + " H: " + r.Area.Height);
|
if (!PaginationTools.TryParsePageNumber(args.Parameters, 2, args.Player, out pageNumber))
|
||||||
foreach (int s in r.AllowedIDs)
|
break;
|
||||||
{
|
|
||||||
var user = TShock.Users.GetUserByID(s);
|
List<string> lines = new List<string>
|
||||||
args.Player.SendMessage(r.Name + ": " + (user != null ? user.Name : "Unknown"));
|
{
|
||||||
|
string.Format("X: {0}; Y: {1}; W: {2}; H: {3}, Z: {4}", region.Area.X, region.Area.Y, region.Area.Width, region.Area.Height, region.Z),
|
||||||
|
string.Concat("Owner: ", region.Owner),
|
||||||
|
string.Concat("Protected: ", region.DisableBuild.ToString()),
|
||||||
|
};
|
||||||
|
|
||||||
|
if (region.AllowedIDs.Count > 0)
|
||||||
|
{
|
||||||
|
IEnumerable<string> sharedUsersSelector = region.AllowedIDs.Select(userId =>
|
||||||
|
{
|
||||||
|
User user = TShock.Users.GetUserByID(userId);
|
||||||
|
if (user != null)
|
||||||
|
return user.Name;
|
||||||
|
else
|
||||||
|
return string.Concat("{ID: ", userId, "}");
|
||||||
|
});
|
||||||
|
List<string> extraLines = PaginationTools.BuildLinesFromTerms(sharedUsersSelector.Distinct());
|
||||||
|
extraLines[0] = "Shared with: " + extraLines[0];
|
||||||
|
lines.AddRange(extraLines);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lines.Add("Region is not shared with any users.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (region.AllowedGroups.Count > 0)
|
||||||
|
{
|
||||||
|
List<string> extraLines = PaginationTools.BuildLinesFromTerms(region.AllowedGroups.Distinct());
|
||||||
|
extraLines[0] = "Shared with groups: " + extraLines[0];
|
||||||
|
lines.AddRange(extraLines);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lines.Add("Region is not shared with any groups.");
|
||||||
|
}
|
||||||
|
|
||||||
|
PaginationTools.SendPage(
|
||||||
|
args.Player, pageNumber, lines, new PaginationTools.Settings
|
||||||
|
{
|
||||||
|
HeaderFormat = string.Format("Information About Region \"{0}\" ({{0}}/{{1}}):", region.Name),
|
||||||
|
FooterFormat = "Type /region info {0} for more information."
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
args.Player.SendMessage("Invalid syntax! Proper syntax: /region info [name]", Color.Red);
|
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /region info [name]");
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
@ -2937,17 +2977,41 @@ namespace TShockAPI
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "help":
|
case "help":
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
args.Player.SendMessage("Avialable region commands:", Color.Green);
|
int pageNumber;
|
||||||
args.Player.SendMessage("/region set [1/2] /region define [name] /region protect [name] [true/false]",
|
int pageParamIndex = 0;
|
||||||
Color.Yellow);
|
if (args.Parameters.Count > 1)
|
||||||
args.Player.SendMessage("/region name (provides region name)", Color.Yellow);
|
pageParamIndex = 1;
|
||||||
args.Player.SendMessage("/region delete [name] /region clear (temporary region)", Color.Yellow);
|
if (!PaginationTools.TryParsePageNumber(args.Parameters, pageParamIndex, args.Player, out pageNumber))
|
||||||
args.Player.SendMessage("/region allow [name] [regionname]", Color.Yellow);
|
return;
|
||||||
args.Player.SendMessage("/region resize [regionname] [u/d/l/r] [amount]", Color.Yellow);
|
|
||||||
break;
|
PaginationTools.SendPage(
|
||||||
|
args.Player, pageNumber, new[]
|
||||||
|
{
|
||||||
|
"set [1/2] - Sets the temporary region points.",
|
||||||
|
"clear - Clears the temporary region points.",
|
||||||
|
"define [name] - Defines the region.",
|
||||||
|
"delete [name] - Deletes the given region.",
|
||||||
|
"name - Shows the name of the region at the given point.",
|
||||||
|
"list - Lists all regions.",
|
||||||
|
"resize [region] [u/d/l/r] [amount] - Resizes a region.",
|
||||||
|
"allow [user] [region] - Allows a user to a region.",
|
||||||
|
"remove [user] [region] - Removes a user from a region.",
|
||||||
|
"allowg [group] [region] - Allows a user group to a region.",
|
||||||
|
"removeg [group] [region] - Removes a user group from a region.",
|
||||||
|
"info [region] - Displays several information about the given region.",
|
||||||
|
"protect [name] [true/false] - Sets whether the tiles inside the region are protected or not.",
|
||||||
|
"z [name] [#] - Sets the z-order of the region.",
|
||||||
|
},
|
||||||
|
new PaginationTools.Settings
|
||||||
|
{
|
||||||
|
HeaderFormat = "Available Region Sub-Commands ({0}/{1}):",
|
||||||
|
FooterFormat = "Type /region {0} for more sub-commands."
|
||||||
|
}
|
||||||
|
);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -381,30 +381,36 @@ namespace TShockAPI.DB
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool AddNewUser(string regionName, String userName)
|
public bool AddNewUser(string regionName, string userName)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
string MergedIDs = string.Empty;
|
string mergedIDs = string.Empty;
|
||||||
using (
|
using (
|
||||||
var reader = database.QueryReader("SELECT * FROM Regions WHERE RegionName=@0 AND WorldID=@1", regionName,
|
var reader = database.QueryReader("SELECT UserIds FROM Regions WHERE RegionName=@0 AND WorldID=@1", regionName,
|
||||||
Main.worldID.ToString()))
|
Main.worldID.ToString()))
|
||||||
{
|
{
|
||||||
if (reader.Read())
|
if (reader.Read())
|
||||||
MergedIDs = reader.Get<string>("UserIds");
|
mergedIDs = reader.Get<string>("UserIds");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(MergedIDs))
|
string userIdToAdd = Convert.ToString(TShock.Users.GetUserID(userName));
|
||||||
MergedIDs = Convert.ToString(TShock.Users.GetUserID(userName));
|
string[] ids = mergedIDs.Split(',');
|
||||||
else
|
// Is the user already allowed to the region?
|
||||||
MergedIDs = MergedIDs + "," + Convert.ToString(TShock.Users.GetUserID(userName));
|
if (ids.Contains(userIdToAdd))
|
||||||
|
return true;
|
||||||
|
|
||||||
int q = database.Query("UPDATE Regions SET UserIds=@0 WHERE RegionName=@1 AND WorldID=@2", MergedIDs,
|
if (string.IsNullOrEmpty(mergedIDs))
|
||||||
|
mergedIDs = userIdToAdd;
|
||||||
|
else
|
||||||
|
mergedIDs = string.Concat(mergedIDs, ",", userIdToAdd);
|
||||||
|
|
||||||
|
int q = database.Query("UPDATE Regions SET UserIds=@0 WHERE RegionName=@1 AND WorldID=@2", mergedIDs,
|
||||||
regionName, Main.worldID.ToString());
|
regionName, Main.worldID.ToString());
|
||||||
foreach (var r in Regions)
|
foreach (var r in Regions)
|
||||||
{
|
{
|
||||||
if (r.Name == regionName && r.WorldID == Main.worldID.ToString())
|
if (r.Name == regionName && r.WorldID == Main.worldID.ToString())
|
||||||
r.setAllowedIDs(MergedIDs);
|
r.setAllowedIDs(mergedIDs);
|
||||||
}
|
}
|
||||||
return q != 0;
|
return q != 0;
|
||||||
}
|
}
|
||||||
|
|
@ -467,27 +473,33 @@ namespace TShockAPI.DB
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool AllowGroup(string regionName, string groups)
|
public bool AllowGroup(string regionName, string groupName)
|
||||||
{
|
{
|
||||||
string groupsNew = "";
|
string mergedGroups = "";
|
||||||
using (
|
using (
|
||||||
var reader = database.QueryReader("SELECT * FROM Regions WHERE RegionName=@0 AND WorldID=@1", regionName,
|
var reader = database.QueryReader("SELECT Groups FROM Regions WHERE RegionName=@0 AND WorldID=@1", regionName,
|
||||||
Main.worldID.ToString()))
|
Main.worldID.ToString()))
|
||||||
{
|
{
|
||||||
if (reader.Read())
|
if (reader.Read())
|
||||||
groupsNew = reader.Get<string>("Groups");
|
mergedGroups = reader.Get<string>("Groups");
|
||||||
}
|
}
|
||||||
if (groupsNew != "")
|
|
||||||
groupsNew += ",";
|
|
||||||
groupsNew += groups;
|
|
||||||
|
|
||||||
int q = database.Query("UPDATE Regions SET Groups=@0 WHERE RegionName=@1 AND WorldID=@2", groupsNew,
|
string[] groups = mergedGroups.Split(',');
|
||||||
|
// Is the group already allowed to the region?
|
||||||
|
if (groups.Contains(groupName))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (mergedGroups != "")
|
||||||
|
mergedGroups += ",";
|
||||||
|
mergedGroups += groupName;
|
||||||
|
|
||||||
|
int q = database.Query("UPDATE Regions SET Groups=@0 WHERE RegionName=@1 AND WorldID=@2", mergedGroups,
|
||||||
regionName, Main.worldID.ToString());
|
regionName, Main.worldID.ToString());
|
||||||
|
|
||||||
Region r = GetRegionByName(regionName);
|
Region r = GetRegionByName(regionName);
|
||||||
if (r != null)
|
if (r != null)
|
||||||
{
|
{
|
||||||
r.SetAllowedGroups(groupsNew);
|
r.SetAllowedGroups(mergedGroups);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
253
TShockAPI/PaginationTools.cs
Normal file
253
TShockAPI/PaginationTools.cs
Normal file
|
|
@ -0,0 +1,253 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace TShockAPI {
|
||||||
|
public static class PaginationTools {
|
||||||
|
public delegate Tuple<string, Color> LineFormatterDelegate(object lineData, int lineIndex, int pageNumber);
|
||||||
|
|
||||||
|
#region [Nested: Settings Class]
|
||||||
|
public class Settings {
|
||||||
|
public bool IncludeHeader { get; set; }
|
||||||
|
|
||||||
|
private string headerFormat;
|
||||||
|
public string HeaderFormat
|
||||||
|
{
|
||||||
|
get { return this.headerFormat; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value == null)
|
||||||
|
throw new ArgumentNullException();
|
||||||
|
|
||||||
|
this.headerFormat = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Color HeaderTextColor { get; set; }
|
||||||
|
public bool IncludeFooter { get; set; }
|
||||||
|
|
||||||
|
private string footerFormat;
|
||||||
|
public string FooterFormat
|
||||||
|
{
|
||||||
|
get { return this.footerFormat; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value == null)
|
||||||
|
throw new ArgumentNullException();
|
||||||
|
|
||||||
|
this.footerFormat = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Color FooterTextColor { get; set; }
|
||||||
|
public string NothingToDisplayString { get; set; }
|
||||||
|
public LineFormatterDelegate LineFormatter { get; set; }
|
||||||
|
public Color LineTextColor { get; set; }
|
||||||
|
|
||||||
|
private int maxLinesPerPage;
|
||||||
|
|
||||||
|
public int MaxLinesPerPage
|
||||||
|
{
|
||||||
|
get { return this.maxLinesPerPage; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value <= 0)
|
||||||
|
throw new ArgumentException("The value has to be greater than zero.");
|
||||||
|
|
||||||
|
this.maxLinesPerPage = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int pageLimit;
|
||||||
|
|
||||||
|
public int PageLimit
|
||||||
|
{
|
||||||
|
get { return this.pageLimit; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value < 0)
|
||||||
|
throw new ArgumentException("The value has to be greater than or equal to zero.");
|
||||||
|
|
||||||
|
this.pageLimit = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Settings()
|
||||||
|
{
|
||||||
|
this.IncludeHeader = true;
|
||||||
|
this.headerFormat = "Page {0} of {1}";
|
||||||
|
this.HeaderTextColor = Color.Green;
|
||||||
|
this.IncludeFooter = true;
|
||||||
|
this.footerFormat = "Type /<command> {0} for more.";
|
||||||
|
this.FooterTextColor = Color.Yellow;
|
||||||
|
this.NothingToDisplayString = null;
|
||||||
|
this.LineFormatter = null;
|
||||||
|
this.LineTextColor = Color.White;
|
||||||
|
this.maxLinesPerPage = 4;
|
||||||
|
this.pageLimit = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
public static void SendPage(
|
||||||
|
TSPlayer player, int pageNumber, IEnumerable dataToPaginate, int dataToPaginateCount, Settings settings = null)
|
||||||
|
{
|
||||||
|
if (settings == null)
|
||||||
|
settings = new Settings();
|
||||||
|
|
||||||
|
if (dataToPaginateCount == 0)
|
||||||
|
{
|
||||||
|
if (settings.NothingToDisplayString != null)
|
||||||
|
player.SendMessage(settings.NothingToDisplayString, settings.HeaderTextColor);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int pageCount = ((dataToPaginateCount - 1) / settings.MaxLinesPerPage) + 1;
|
||||||
|
if (settings.PageLimit > 0 && pageCount > settings.PageLimit)
|
||||||
|
pageCount = settings.PageLimit;
|
||||||
|
if (pageNumber > pageCount)
|
||||||
|
pageNumber = pageCount;
|
||||||
|
|
||||||
|
if (settings.IncludeHeader)
|
||||||
|
player.SendMessage(string.Format(settings.HeaderFormat, pageNumber, pageCount), settings.HeaderTextColor);
|
||||||
|
|
||||||
|
int listOffset = (pageNumber - 1) * settings.MaxLinesPerPage;
|
||||||
|
int offsetCounter = 0;
|
||||||
|
int lineCounter = 0;
|
||||||
|
foreach (object lineData in dataToPaginate)
|
||||||
|
{
|
||||||
|
if (lineData == null)
|
||||||
|
continue;
|
||||||
|
if (offsetCounter++ < listOffset)
|
||||||
|
continue;
|
||||||
|
if (lineCounter++ == settings.MaxLinesPerPage)
|
||||||
|
break;
|
||||||
|
|
||||||
|
string lineMessage;
|
||||||
|
Color lineColor = settings.LineTextColor;
|
||||||
|
if (lineData is Tuple<string, Color>)
|
||||||
|
{
|
||||||
|
var lineFormat = (Tuple<string, Color>)lineData;
|
||||||
|
lineMessage = lineFormat.Item1;
|
||||||
|
lineColor = lineFormat.Item2;
|
||||||
|
}
|
||||||
|
else if (settings.LineFormatter != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Tuple<string, Color> lineFormat = settings.LineFormatter(lineData, offsetCounter, pageNumber);
|
||||||
|
if (lineFormat == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
lineMessage = lineFormat.Item1;
|
||||||
|
lineColor = lineFormat.Item2;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException(
|
||||||
|
"The method referenced by LineFormatter has thrown an exception. See inner exception for details.", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lineMessage = lineData.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lineMessage != null)
|
||||||
|
player.SendMessage(lineMessage, lineColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lineCounter == 0)
|
||||||
|
{
|
||||||
|
if (settings.NothingToDisplayString != null)
|
||||||
|
player.SendMessage(settings.NothingToDisplayString, settings.HeaderTextColor);
|
||||||
|
}
|
||||||
|
else if (settings.IncludeFooter && pageNumber + 1 <= pageCount)
|
||||||
|
{
|
||||||
|
player.SendMessage(string.Format(settings.FooterFormat, pageNumber + 1, pageNumber, pageCount), settings.FooterTextColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void SendPage(TSPlayer player, int pageNumber, IList dataToPaginate, Settings settings = null)
|
||||||
|
{
|
||||||
|
PaginationTools.SendPage(player, pageNumber, dataToPaginate, dataToPaginate.Count, settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<string> BuildLinesFromTerms(
|
||||||
|
IEnumerable terms, Func<object, string> termFormatter = null, string separator = ", ", int maxCharsPerLine = 80)
|
||||||
|
{
|
||||||
|
List<string> lines = new List<string>();
|
||||||
|
StringBuilder lineBuilder = new StringBuilder();
|
||||||
|
foreach (object term in terms)
|
||||||
|
{
|
||||||
|
if (term == null && termFormatter == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
string termString;
|
||||||
|
if (termFormatter != null)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
termString = termFormatter(term);
|
||||||
|
|
||||||
|
if (termString == null)
|
||||||
|
continue;
|
||||||
|
} catch (Exception ex)
|
||||||
|
{
|
||||||
|
throw new ArgumentException(
|
||||||
|
"The method represented by termFormatter has thrown an exception. See inner exception for details.", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
termString = term.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool goesOnNextLine = (lineBuilder.Length + termString.Length > maxCharsPerLine);
|
||||||
|
if (!goesOnNextLine)
|
||||||
|
{
|
||||||
|
if (lineBuilder.Length > 0) {
|
||||||
|
lineBuilder.Append(separator);
|
||||||
|
}
|
||||||
|
lineBuilder.Append(termString);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// A separator should always be at the end of a line as we know it is followed by another line.
|
||||||
|
lineBuilder.Append(separator);
|
||||||
|
lines.Add(lineBuilder.ToString());
|
||||||
|
lineBuilder.Clear();
|
||||||
|
|
||||||
|
lineBuilder.Append(termString);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (lineBuilder.Length > 0)
|
||||||
|
lines.Add(lineBuilder.ToString());
|
||||||
|
|
||||||
|
return lines;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool TryParsePageNumber(
|
||||||
|
List<string> commandParameters, int expectedParamterIndex, TSPlayer errorMessageReceiver, out int pageNumber)
|
||||||
|
{
|
||||||
|
pageNumber = 1;
|
||||||
|
if (commandParameters.Count <= expectedParamterIndex)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
string pageNumberRaw = commandParameters[expectedParamterIndex];
|
||||||
|
if (!int.TryParse(pageNumberRaw, out pageNumber) || pageNumber < 1)
|
||||||
|
{
|
||||||
|
if (errorMessageReceiver != null)
|
||||||
|
errorMessageReceiver.SendErrorMessage(string.Format("\"{0}\" is not a valid page number.", pageNumberRaw));
|
||||||
|
|
||||||
|
pageNumber = 1;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -604,21 +604,41 @@ namespace TShockAPI
|
||||||
SendMessage(msg, Color.Yellow);
|
SendMessage(msg, Color.Yellow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendInfoMessage(string format, params object[] args)
|
||||||
|
{
|
||||||
|
SendInfoMessage(string.Format(format, args));
|
||||||
|
}
|
||||||
|
|
||||||
public virtual void SendSuccessMessage(string msg)
|
public virtual void SendSuccessMessage(string msg)
|
||||||
{
|
{
|
||||||
SendMessage(msg, Color.Green);
|
SendMessage(msg, Color.Green);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendSuccessMessage(string format, params object[] args)
|
||||||
|
{
|
||||||
|
SendSuccessMessage(string.Format(format, args));
|
||||||
|
}
|
||||||
|
|
||||||
public virtual void SendWarningMessage(string msg)
|
public virtual void SendWarningMessage(string msg)
|
||||||
{
|
{
|
||||||
SendMessage(msg, Color.OrangeRed);
|
SendMessage(msg, Color.OrangeRed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendWarningMessage(string format, params object[] args)
|
||||||
|
{
|
||||||
|
SendWarningMessage(string.Format(format, args));
|
||||||
|
}
|
||||||
|
|
||||||
public virtual void SendErrorMessage(string msg)
|
public virtual void SendErrorMessage(string msg)
|
||||||
{
|
{
|
||||||
SendMessage(msg, Color.Red);
|
SendMessage(msg, Color.Red);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendErrorMessage(string format, params object[] args)
|
||||||
|
{
|
||||||
|
SendErrorMessage(string.Format(format, args));
|
||||||
|
}
|
||||||
|
|
||||||
[Obsolete("Use SendErrorMessage, SendInfoMessage, or SendWarningMessage, or a custom color instead.")]
|
[Obsolete("Use SendErrorMessage, SendInfoMessage, or SendWarningMessage, or a custom color instead.")]
|
||||||
public virtual void SendMessage(string msg)
|
public virtual void SendMessage(string msg)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,203 +1,204 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
<ProductVersion>8.0.30703</ProductVersion>
|
<ProductVersion>8.0.30703</ProductVersion>
|
||||||
<SchemaVersion>2.0</SchemaVersion>
|
<SchemaVersion>2.0</SchemaVersion>
|
||||||
<ProjectGuid>{49606449-072B-4CF5-8088-AA49DA586694}</ProjectGuid>
|
<ProjectGuid>{49606449-072B-4CF5-8088-AA49DA586694}</ProjectGuid>
|
||||||
<OutputType>Library</OutputType>
|
<OutputType>Library</OutputType>
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>TShockAPI</RootNamespace>
|
<RootNamespace>TShockAPI</RootNamespace>
|
||||||
<AssemblyName>TShockAPI</AssemblyName>
|
<AssemblyName>TShockAPI</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<IsWebBootstrapper>false</IsWebBootstrapper>
|
<IsWebBootstrapper>false</IsWebBootstrapper>
|
||||||
<PublishUrl>publish\</PublishUrl>
|
<PublishUrl>publish\</PublishUrl>
|
||||||
<Install>true</Install>
|
<Install>true</Install>
|
||||||
<InstallFrom>Disk</InstallFrom>
|
<InstallFrom>Disk</InstallFrom>
|
||||||
<UpdateEnabled>false</UpdateEnabled>
|
<UpdateEnabled>false</UpdateEnabled>
|
||||||
<UpdateMode>Foreground</UpdateMode>
|
<UpdateMode>Foreground</UpdateMode>
|
||||||
<UpdateInterval>7</UpdateInterval>
|
<UpdateInterval>7</UpdateInterval>
|
||||||
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
|
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
|
||||||
<UpdatePeriodically>false</UpdatePeriodically>
|
<UpdatePeriodically>false</UpdatePeriodically>
|
||||||
<UpdateRequired>false</UpdateRequired>
|
<UpdateRequired>false</UpdateRequired>
|
||||||
<MapFileExtensions>true</MapFileExtensions>
|
<MapFileExtensions>true</MapFileExtensions>
|
||||||
<ApplicationRevision>0</ApplicationRevision>
|
<ApplicationRevision>0</ApplicationRevision>
|
||||||
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
||||||
<UseApplicationTrust>false</UseApplicationTrust>
|
<UseApplicationTrust>false</UseApplicationTrust>
|
||||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
<DebugType>full</DebugType>
|
<DebugType>full</DebugType>
|
||||||
<Optimize>false</Optimize>
|
<Optimize>false</Optimize>
|
||||||
<OutputPath>bin\Debug\</OutputPath>
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<DocumentationFile>bin\Debug\TShockAPI.XML</DocumentationFile>
|
<DocumentationFile>bin\Debug\TShockAPI.XML</DocumentationFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
<DebugType>pdbonly</DebugType>
|
<DebugType>pdbonly</DebugType>
|
||||||
<Optimize>true</Optimize>
|
<Optimize>true</Optimize>
|
||||||
<OutputPath>bin\Release\</OutputPath>
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
<DefineConstants>TRACE;COMPAT_SIGS</DefineConstants>
|
<DefineConstants>TRACE;COMPAT_SIGS</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<DocumentationFile>bin\Release\TShockAPI.XML</DocumentationFile>
|
<DocumentationFile>bin\Release\TShockAPI.XML</DocumentationFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="HttpServer">
|
<Reference Include="HttpServer">
|
||||||
<HintPath>..\HttpBins\HttpServer.dll</HintPath>
|
<HintPath>..\HttpBins\HttpServer.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Mono.Data.Sqlite">
|
<Reference Include="Mono.Data.Sqlite">
|
||||||
<HintPath>..\SqlBins\Mono.Data.Sqlite.dll</HintPath>
|
<HintPath>..\SqlBins\Mono.Data.Sqlite.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="MySql.Data, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
|
<Reference Include="MySql.Data, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\SqlBins\MySql.Data.dll</HintPath>
|
<HintPath>..\SqlBins\MySql.Data.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="MySql.Web, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
|
<Reference Include="MySql.Web, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\SqlBins\MySql.Web.dll</HintPath>
|
<HintPath>..\SqlBins\MySql.Web.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Newtonsoft.Json">
|
<Reference Include="Newtonsoft.Json">
|
||||||
<HintPath>.\Newtonsoft.Json.dll</HintPath>
|
<HintPath>.\Newtonsoft.Json.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
<Reference Include="System.Xml.Linq" />
|
<Reference Include="System.Xml.Linq" />
|
||||||
<Reference Include="System.Data.DataSetExtensions" />
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
<Reference Include="System.Data" />
|
<Reference Include="System.Data" />
|
||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
<Reference Include="TerrariaServer">
|
<Reference Include="TerrariaServer">
|
||||||
<HintPath>..\TerrariaServerBins\TerrariaServer.exe</HintPath>
|
<HintPath>..\TerrariaServerBins\TerrariaServer.exe</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="BackupManager.cs" />
|
<Compile Include="BackupManager.cs" />
|
||||||
<Compile Include="DB\RegionManager.cs" />
|
<Compile Include="DB\RegionManager.cs" />
|
||||||
<Compile Include="Hooks\GeneralHooks.cs" />
|
<Compile Include="Hooks\GeneralHooks.cs" />
|
||||||
<Compile Include="Hooks\PlayerHooks.cs" />
|
<Compile Include="Hooks\PlayerHooks.cs" />
|
||||||
<Compile Include="PluginUpdater\PluginUpdaterThread.cs" />
|
<Compile Include="PaginationTools.cs" />
|
||||||
<Compile Include="PluginUpdater\PluginVersionCheck.cs" />
|
<Compile Include="PluginUpdater\PluginUpdaterThread.cs" />
|
||||||
<Compile Include="PluginUpdater\VersionInfo.cs" />
|
<Compile Include="PluginUpdater\PluginVersionCheck.cs" />
|
||||||
<Compile Include="SaveManager.cs" />
|
<Compile Include="PluginUpdater\VersionInfo.cs" />
|
||||||
<Compile Include="DB\BanManager.cs" />
|
<Compile Include="SaveManager.cs" />
|
||||||
<Compile Include="DB\InventoryManager.cs" />
|
<Compile Include="DB\BanManager.cs" />
|
||||||
<Compile Include="DB\IQueryBuilder.cs" />
|
<Compile Include="DB\InventoryManager.cs" />
|
||||||
<Compile Include="DB\ItemManager.cs" />
|
<Compile Include="DB\IQueryBuilder.cs" />
|
||||||
<Compile Include="DB\SqlColumn.cs" />
|
<Compile Include="DB\ItemManager.cs" />
|
||||||
<Compile Include="DB\SqlTable.cs" />
|
<Compile Include="DB\SqlColumn.cs" />
|
||||||
<Compile Include="DB\SqlValue.cs" />
|
<Compile Include="DB\SqlTable.cs" />
|
||||||
<Compile Include="Extensions\DbExt.cs" />
|
<Compile Include="DB\SqlValue.cs" />
|
||||||
<Compile Include="DB\GroupManager.cs" />
|
<Compile Include="Extensions\DbExt.cs" />
|
||||||
<Compile Include="DB\UserManager.cs" />
|
<Compile Include="DB\GroupManager.cs" />
|
||||||
<Compile Include="Extensions\RandomExt.cs" />
|
<Compile Include="DB\UserManager.cs" />
|
||||||
<Compile Include="Extensions\StringExt.cs" />
|
<Compile Include="Extensions\RandomExt.cs" />
|
||||||
<Compile Include="GeoIPCountry.cs" />
|
<Compile Include="Extensions\StringExt.cs" />
|
||||||
<Compile Include="HandlerList.cs" />
|
<Compile Include="GeoIPCountry.cs" />
|
||||||
<Compile Include="IPackable.cs" />
|
<Compile Include="HandlerList.cs" />
|
||||||
<Compile Include="Commands.cs" />
|
<Compile Include="IPackable.cs" />
|
||||||
<Compile Include="ConfigFile.cs" />
|
<Compile Include="Commands.cs" />
|
||||||
<Compile Include="FileTools.cs" />
|
<Compile Include="ConfigFile.cs" />
|
||||||
<Compile Include="GetDataHandlers.cs" />
|
<Compile Include="FileTools.cs" />
|
||||||
<Compile Include="Group.cs" />
|
<Compile Include="GetDataHandlers.cs" />
|
||||||
<Compile Include="Extensions\LinqExt.cs" />
|
<Compile Include="Group.cs" />
|
||||||
<Compile Include="Log.cs" />
|
<Compile Include="Extensions\LinqExt.cs" />
|
||||||
<Compile Include="Net\BaseMsg.cs" />
|
<Compile Include="Log.cs" />
|
||||||
<Compile Include="Net\DisconnectMsg.cs" />
|
<Compile Include="Net\BaseMsg.cs" />
|
||||||
<Compile Include="Net\NetTile.cs" />
|
<Compile Include="Net\DisconnectMsg.cs" />
|
||||||
<Compile Include="Net\ProjectileRemoveMsg.cs" />
|
<Compile Include="Net\NetTile.cs" />
|
||||||
<Compile Include="Net\SpawnMsg.cs" />
|
<Compile Include="Net\ProjectileRemoveMsg.cs" />
|
||||||
<Compile Include="Net\WorldInfoMsg.cs" />
|
<Compile Include="Net\SpawnMsg.cs" />
|
||||||
<Compile Include="PacketBufferer.cs" />
|
<Compile Include="Net\WorldInfoMsg.cs" />
|
||||||
<Compile Include="Permissions.cs" />
|
<Compile Include="PacketBufferer.cs" />
|
||||||
<Compile Include="RconHandler.cs" />
|
<Compile Include="Permissions.cs" />
|
||||||
<Compile Include="DB\RememberedPosManager.cs" />
|
<Compile Include="RconHandler.cs" />
|
||||||
<Compile Include="Resources.Designer.cs">
|
<Compile Include="DB\RememberedPosManager.cs" />
|
||||||
<AutoGen>True</AutoGen>
|
<Compile Include="Resources.Designer.cs">
|
||||||
<DesignTime>True</DesignTime>
|
<AutoGen>True</AutoGen>
|
||||||
<DependentUpon>Resources.resx</DependentUpon>
|
<DesignTime>True</DesignTime>
|
||||||
</Compile>
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
<Compile Include="Rest\Rest.cs" />
|
</Compile>
|
||||||
<Compile Include="Rest\RestCommand.cs" />
|
<Compile Include="Rest\Rest.cs" />
|
||||||
<Compile Include="Rest\RestManager.cs" />
|
<Compile Include="Rest\RestCommand.cs" />
|
||||||
<Compile Include="Rest\RestObject.cs" />
|
<Compile Include="Rest\RestManager.cs" />
|
||||||
<Compile Include="Rest\RestVerbs.cs" />
|
<Compile Include="Rest\RestObject.cs" />
|
||||||
<Compile Include="Rest\SecureRest.cs" />
|
<Compile Include="Rest\RestVerbs.cs" />
|
||||||
<Compile Include="StatTracker.cs" />
|
<Compile Include="Rest\SecureRest.cs" />
|
||||||
<Compile Include="Utils.cs" />
|
<Compile Include="StatTracker.cs" />
|
||||||
<Compile Include="TShock.cs" />
|
<Compile Include="Utils.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="TShock.cs" />
|
||||||
<Compile Include="TSPlayer.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="UpdateManager.cs" />
|
<Compile Include="TSPlayer.cs" />
|
||||||
<Compile Include="DB\WarpsManager.cs" />
|
<Compile Include="UpdateManager.cs" />
|
||||||
</ItemGroup>
|
<Compile Include="DB\WarpsManager.cs" />
|
||||||
<ItemGroup>
|
</ItemGroup>
|
||||||
<None Include="config\groups.txt" />
|
<ItemGroup>
|
||||||
<None Include="TShockAPI.licenseheader" />
|
<None Include="config\groups.txt" />
|
||||||
</ItemGroup>
|
<None Include="TShockAPI.licenseheader" />
|
||||||
<ItemGroup>
|
</ItemGroup>
|
||||||
<None Include="config\users.txt" />
|
<ItemGroup>
|
||||||
</ItemGroup>
|
<None Include="config\users.txt" />
|
||||||
<ItemGroup>
|
</ItemGroup>
|
||||||
<EmbeddedResource Include="Resources.resx">
|
<ItemGroup>
|
||||||
<Generator>ResXFileCodeGenerator</Generator>
|
<EmbeddedResource Include="Resources.resx">
|
||||||
<SubType>Designer</SubType>
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
<SubType>Designer</SubType>
|
||||||
</EmbeddedResource>
|
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||||
</ItemGroup>
|
</EmbeddedResource>
|
||||||
<ItemGroup>
|
</ItemGroup>
|
||||||
<BootstrapperPackage Include=".NETFramework,Version=v4.0">
|
<ItemGroup>
|
||||||
<Visible>False</Visible>
|
<BootstrapperPackage Include=".NETFramework,Version=v4.0">
|
||||||
<ProductName>Microsoft .NET Framework 4 %28x86 and x64%29</ProductName>
|
<Visible>False</Visible>
|
||||||
<Install>true</Install>
|
<ProductName>Microsoft .NET Framework 4 %28x86 and x64%29</ProductName>
|
||||||
</BootstrapperPackage>
|
<Install>true</Install>
|
||||||
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
|
</BootstrapperPackage>
|
||||||
<Visible>False</Visible>
|
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
|
||||||
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
|
<Visible>False</Visible>
|
||||||
<Install>false</Install>
|
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
|
||||||
</BootstrapperPackage>
|
<Install>false</Install>
|
||||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
|
</BootstrapperPackage>
|
||||||
<Visible>False</Visible>
|
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
|
||||||
<ProductName>.NET Framework 3.5 SP1</ProductName>
|
<Visible>False</Visible>
|
||||||
<Install>false</Install>
|
<ProductName>.NET Framework 3.5 SP1</ProductName>
|
||||||
</BootstrapperPackage>
|
<Install>false</Install>
|
||||||
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
|
</BootstrapperPackage>
|
||||||
<Visible>False</Visible>
|
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
|
||||||
<ProductName>Windows Installer 3.1</ProductName>
|
<Visible>False</Visible>
|
||||||
<Install>true</Install>
|
<ProductName>Windows Installer 3.1</ProductName>
|
||||||
</BootstrapperPackage>
|
<Install>true</Install>
|
||||||
</ItemGroup>
|
</BootstrapperPackage>
|
||||||
<ItemGroup>
|
</ItemGroup>
|
||||||
<Content Include="config\itembans.txt" />
|
<ItemGroup>
|
||||||
</ItemGroup>
|
<Content Include="config\itembans.txt" />
|
||||||
<ItemGroup />
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<ItemGroup />
|
||||||
<PropertyGroup>
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<PreBuildEvent>
|
<PropertyGroup>
|
||||||
</PreBuildEvent>
|
<PreBuildEvent>
|
||||||
</PropertyGroup>
|
</PreBuildEvent>
|
||||||
<PropertyGroup>
|
</PropertyGroup>
|
||||||
<PostBuildEvent>"$(ProjectDir)postbuild.bat"</PostBuildEvent>
|
<PropertyGroup>
|
||||||
</PropertyGroup>
|
<PostBuildEvent>"$(ProjectDir)postbuild.bat"</PostBuildEvent>
|
||||||
<ProjectExtensions>
|
</PropertyGroup>
|
||||||
<VisualStudio>
|
<ProjectExtensions>
|
||||||
<UserProperties BuildVersion_UpdateAssemblyVersion="True" BuildVersion_UpdateFileVersion="True" BuildVersion_BuildAction="Both" BuildVersion_BuildVersioningStyle="None.None.None.MonthAndDayStamp" BuildVersion_StartDate="2011/6/17" BuildVersion_IncrementBeforeBuild="False" />
|
<VisualStudio>
|
||||||
</VisualStudio>
|
<UserProperties BuildVersion_IncrementBeforeBuild="False" BuildVersion_StartDate="2011/6/17" BuildVersion_BuildVersioningStyle="None.None.None.MonthAndDayStamp" BuildVersion_BuildAction="Both" BuildVersion_UpdateFileVersion="True" BuildVersion_UpdateAssemblyVersion="True" />
|
||||||
</ProjectExtensions>
|
</VisualStudio>
|
||||||
|
</ProjectExtensions>
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
<Target Name="BeforeBuild">
|
<Target Name="BeforeBuild">
|
||||||
</Target>
|
</Target>
|
||||||
<Target Name="AfterBuild">
|
<Target Name="AfterBuild">
|
||||||
</Target>
|
</Target>
|
||||||
-->
|
-->
|
||||||
</Project>
|
</Project>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue