Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
114 changes: 83 additions & 31 deletions src/ModifyWeapons/Commands.cs
Original file line number Diff line number Diff line change
Expand Up @@ -373,10 +373,10 @@ public static void CMD(CommandArgs args)
var ItemVal = new Dictionary<string, string>();
Parse(args.Parameters, out ItemVal, 3);

if (UpdateItem(acc.Name, item.type, ItemVal)) // 更新玩家的指定物品属性
var datas = DB.GetData(acc.Name);
if (UpdateItem(acc.Name, item.type, ItemVal) && datas != null) // 更新玩家的指定物品属性
{
// 播报给执行者
var datas = DB.GetData(acc.Name);
if (datas.Dict.TryGetValue(acc.Name, out var dataList))
{
foreach (var data2 in dataList.Where(d => d.type == item.type))
Expand Down Expand Up @@ -665,6 +665,11 @@ private static void HelpCmd(TSPlayer plr)
public static void SetItem(TSPlayer plr, Database.PlayerData? data, int damage, int stack, byte prefix, float scale, float knockBack, int useTime, int useAnimation,
int shoot, float shootSpeed, int ammo, int useAmmo, Color color)
{
if (data == null)
{
return;
}

var item = TShock.Utils.GetItemById(plr.SelectedItem.type);
var MyIndex = new TSPlayer(plr.Index);
var MyItem = Item.NewItem(null, (int)MyIndex.X, (int)MyIndex.Y, item.width, item.height, item.type, item.stack);
Expand Down Expand Up @@ -697,6 +702,11 @@ public static void SetItem(TSPlayer plr, Database.PlayerData? data, int damage,
#region 只给指定名字物品方法
private static void OnlyItem(Item item, Database.PlayerData? datas, TSPlayer? plr2)
{
if (datas == null || plr2 == null)
{
return;
}

if (!Configuration.Instance.OnlyGiveItemName)
{
if (datas.Dict.TryGetValue(plr2.Name, out var DataList))
Expand Down Expand Up @@ -788,14 +798,7 @@ public static void MyNewItem(TSPlayer plr, Item item, Item newItem, int damage,
{
newItem.playerIndexTheItemIsReservedFor = plr.Index;

if (plr.SelectedItem.type == item.type)
{
newItem.prefix = plr.SelectedItem.prefix;
}
else
{
newItem.prefix = prefix;
}
newItem.prefix = plr.SelectedItem.type == item.type ? plr.SelectedItem.prefix : prefix;

newItem.damage = damage;
newItem.stack = stack;
Expand Down Expand Up @@ -1093,21 +1096,19 @@ private static void UpdatePT(string name, Item item, Dictionary<string, string>
}

var plr = TShock.Players.FirstOrDefault(p => p != null && p.IsLoggedIn && p.Active && p.Name == name);
if (plr != null)
{
plr.SendMessage(mess.ToString(), 255, 244, 150);
}
plr?.SendMessage(mess.ToString(), 255, 244, 150);
}
#endregion

#region 解析输入参数的属性名2 用于/mw up指令修改玩家已存在的修改物品中指定物品属性
public static bool UpdateItem(string name, int id, Dictionary<string, string> itemValues)
{

var mess = new StringBuilder();
mess.Append($"修改数值:");

var datas = DB.GetData(name);
if (datas.Dict.ContainsKey(name))
if (datas != null && datas.Dict.ContainsKey(name))
{
var data = datas.Dict[name];
var item = data.FirstOrDefault(i => i.type == id);
Expand Down Expand Up @@ -1364,7 +1365,7 @@ private static void ShowReadItem(TSPlayer plr, List<int> ReItem)
private static void ListItem(TSPlayer plr, int page)
{
var data = DB.GetData(plr.Name);
if (data.Dict.TryGetValue(plr.Name, out var list) && list.Count > 0)
if (data != null && data.Dict.TryGetValue(plr.Name, out var list) && list.Count > 0)
{
var Size = 1; // 每页显示一个物品
var Total = list.Count; // 总页数等于物品总数
Expand Down Expand Up @@ -1453,19 +1454,70 @@ public static Dictionary<string, object> CompareItem(Database.PlayerData.ItemDat
}

var diff = new Dictionary<string, object>();
if (Data.type != type) diff.Add($"{Lang.GetItemNameValue(Data.type)}", Data.type);
if (Data.stack != stack) diff.Add(GetString("数量"), Data.stack);
if (Data.prefix != prefix) diff.Add(GetString("前缀"), pr);
if (Data.damage != damage) diff.Add(GetString("伤害"), Data.damage);
if (Data.scale != scale) diff.Add(GetString("大小"), Data.scale);
if (Data.knockBack != knockBack) diff.Add(GetString("击退"), Data.knockBack);
if (Data.useTime != useTime) diff.Add(GetString("用速"), Data.useTime);
if (Data.useAnimation != useAnimation) diff.Add(GetString("攻速"), Data.useAnimation);
if (Data.shoot != shoot) diff.Add(GetString("弹幕"), Data.shoot);
if (Data.shootSpeed != shootSpeed) diff.Add(GetString("射速"), Data.shootSpeed);
if (Data.ammo != ammo) diff.Add(GetString("弹药"), Data.ammo);
if (Data.useAmmo != useAmmo) diff.Add(GetString("发射器"), Data.useAmmo);
if (Data.color != color) diff.Add(GetString("颜色"), ColorToHex(Data.color));
if (Data.type != type)
{
diff.Add($"{Lang.GetItemNameValue(Data.type)}", Data.type);
}

if (Data.stack != stack)
{
diff.Add(GetString("数量"), Data.stack);
}

if (Data.prefix != prefix)
{
diff.Add(GetString("前缀"), pr);
}

if (Data.damage != damage)
{
diff.Add(GetString("伤害"), Data.damage);
}

if (Data.scale != scale)
{
diff.Add(GetString("大小"), Data.scale);
}

if (Data.knockBack != knockBack)
{
diff.Add(GetString("击退"), Data.knockBack);
}

if (Data.useTime != useTime)
{
diff.Add(GetString("用速"), Data.useTime);
}

if (Data.useAnimation != useAnimation)
{
diff.Add(GetString("攻速"), Data.useAnimation);
}

if (Data.shoot != shoot)
{
diff.Add(GetString("弹幕"), Data.shoot);
}

if (Data.shootSpeed != shootSpeed)
{
diff.Add(GetString("射速"), Data.shootSpeed);
}

if (Data.ammo != ammo)
{
diff.Add(GetString("弹药"), Data.ammo);
}

if (Data.useAmmo != useAmmo)
{
diff.Add(GetString("发射器"), Data.useAmmo);
}

if (Data.color != color)
{
diff.Add(GetString("颜色"), ColorToHex(Data.color));
}

return diff;
}
Expand Down Expand Up @@ -1549,7 +1601,7 @@ private static void SendAllLists(TSPlayer plr, Item item, bool flag, HashSet<str
foreach (var other in name)
{
var datas = DB.GetData(other);
if (datas.Dict.TryGetValue(other, out var dataList))
if (datas != null && datas.Dict.TryGetValue(other, out var dataList))
{
foreach (var data2 in dataList.Where(d => d.type == item.type))
{
Expand Down Expand Up @@ -1619,7 +1671,7 @@ private static void SendAllLists(TSPlayer plr, Item item, bool flag, HashSet<str
#region 获取手上物品信息方法
private static void HandText(TSPlayer plr, Item Sel, Database.PlayerData? data, KeyValuePair<string, List<Database.PlayerData.ItemData>> ItemData)
{
if (!data.Join)
if (data != null && !data.Join)
{
plr.SendSuccessMessage(GetString("重读开关:[c/E8585B:未开启]"));
}
Expand Down
13 changes: 3 additions & 10 deletions src/ModifyWeapons/Database.cs
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ public bool DeleteData(string name)
#region 移除所有玩家的指定物品方法
public bool RemovePwData(int type)
{
var AllData = GetAll();
var AllData = this.GetAll();
var flag = false;

foreach (var data in AllData)
Expand All @@ -180,21 +180,14 @@ public bool RemovePwData(int type)
}

// 更新玩家数据
if (UpdateData(data))
if (this.UpdateData(data))
{
flag = true;
}
}
}

if (flag)
{
return true;
}
else
{
return false;
}
return flag;
}
#endregion

Expand Down
14 changes: 12 additions & 2 deletions src/ModifyWeapons/ModifyWeapons.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public class Plugin : LazyPlugin
#region 插件信息
public override string Name => "修改武器";
public override string Author => "羽学";
public override Version Version => new Version(1, 2, 7);
public override Version Version => new Version(1, 2, 7, 1);
public override string Description => "修改玩家物品数据并自动储存重读,可使用/mw指令给予玩家指定属性的物品";
#endregion

Expand Down Expand Up @@ -276,8 +276,18 @@ public static void PublicWeaponsMess()
}

var datas = DB.GetData(plr.Name);
if (datas == null)
{
continue;
}

var data = datas.Dict[plr.Name].FirstOrDefault(d => d.type == item.type);
if (data != null)
if (data == null)
{
continue;
}

else if (data != null)
{
var diffs = CompareItem2(item, data.type, data.stack, data.prefix, data.damage, data.scale,
data.knockBack, data.useTime, data.useAnimation, data.shoot, data.shootSpeed,
Expand Down
3 changes: 3 additions & 0 deletions src/ModifyWeapons/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
## 更新日志

```
v1.2.7.1
修复空引用

v1.2.7
修复了/reload后导致玩家所有修改武器被公用武器覆盖的BUG
修复了"公用武器已更新"提示语,仅在数据未同步下会播报
Expand Down
Loading