我目前正在尝试解决此问题,我遇到的是控制台发出错误的数据,如果有人知道如何解决此问题。
如果你可以加我skype我的是Bradley.dale4
错误在第247行,即。
if (Tamer.DigimonList[3] == null) qry.Add("mercenary3", null);
接受客户:151.226.122.217:60417 27 System.IndexOutOfRangeException:索引超出了范围 阵列。在Digital_World.SqlDB.SaveTamer(客户端客户端)中 C:\ Users \ Digimon Master \ Dropbox \ Digimon Master 项目\ DMOFrosty' sPost \服务器\ ServerBuildingSection \ DigitalWorld \数据库 - Game.cs:第247行连接已关闭。
守则
public static void SaveTamer(Client client)
{
int lastChar = -1, charId = -1;
try
{
using (MySqlConnection con = Connect())
using (MySqlCommand cmd = new MySqlCommand("SELECT * FROM `acct` WHERE `accountId` = @acct", con))
{
cmd.Parameters.AddWithValue("@acct", client.AccountID);
using (MySqlDataReader dr = cmd.ExecuteReader(System.Data.CommandBehavior.SingleRow))
if (dr.HasRows && dr.Read())
{
lastChar = (int)dr["lastChar"];
if (lastChar != -1)
{
charId = (int)dr[string.Format("char{0}", lastChar + 1)];
}
}
}
if (lastChar != -1)
{
Character Tamer = client.Tamer;
using (MySqlConnection con = Connect())
{
Query qry = new Query(Query.QueryMode.UPDATE, "chars", new Tuple<string, object>("characterId", Tamer.CharacterId));
qry.Add("charModel", (int)Tamer.Model);
qry.Add("charName", Tamer.Name);
qry.Add("charLv", Tamer.Level);
qry.Add("experience", Tamer.EXP);
qry.Add("money", Tamer.Money);
qry.Add("partner", Tamer.DigimonList[0].DigiId);
if (Tamer.DigimonList[1] == null) qry.Add("mercenary1", null);
else qry.Add("mercenary1", Tamer.DigimonList[1].DigiId);
if (Tamer.DigimonList[2] == null) qry.Add("mercenary2", null);
else qry.Add("mercenary2", Tamer.DigimonList[2].DigiId);
if (Tamer.DigimonList.Length >= 3)
{
if (Tamer.DigimonList[3] == null) qry.Add("mercenary3", null);
else qry.Add("mercenary3", Tamer.DigimonList[3].DigiId);
}
qry.Add("map", Tamer.Location.Map);
qry.Add("x", Tamer.Location.PosX);
qry.Add("y", Tamer.Location.PosY);
qry.Add("inventoryLimit", Tamer.InventorySize);
qry.Add("storageLimit", Tamer.StorageSize);
qry.Add("archiveLimit", Tamer.ArchiveSize);
qry.Add("maxHP", Tamer.MaxHP);
qry.Add("maxDS", Tamer.MaxDS);
qry.Add("HP", Tamer.HP);
qry.Add("DS", Tamer.DS);
qry.Add("AT", Tamer.AT);
qry.Add("DE", Tamer.DE);
qry.Add("MS", Tamer.MS);
qry.Add("Fatigue", Tamer.Fatigue);
qry.Add("incubator", Tamer.Incubator);
qry.Add("incubatorLevel", Tamer.IncubatorLevel);
BinaryFormatter f = new BinaryFormatter();
using (MemoryStream m = new MemoryStream())
{
f.Serialize(m, Tamer.ArchivedDigimon);
qry.Add("archive", m.ToArray());
}
//Trying to add cashvault and tempvault
qry.Add("inventory", Tamer.Inventory.Serialize());
qry.Add("equipment", Tamer.Equipment.Serialize());
qry.Add("storage", Tamer.Storage.Serialize());
qry.Add("quests", Tamer.Quests.Serialize());
using (MySqlCommand cmd = qry.GetCommand(con))
{
cmd.ExecuteNonQuery();
}
}
for (int i = 0; i < Tamer.DigimonList.Length; i++)
{
if (Tamer.DigimonList[i] != null)
SaveDigimon(Tamer.DigimonList[i]);
}
}
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
答案 0 :(得分:0)
这意味着您的阵列上没有第4个(索引从零开始)项。在执行if条件之前,您应首先检查数组计数。
<强>更新强> 您的条件应为&#34;如果您的数组计数等于4&#34;
if (Tamer.DigimonList.Length == 4)
{
if (Tamer.DigimonList[3] == null) qry.Add("mercenary3", null);
else qry.Add("mercenary3", Tamer.DigimonList[3].DigiId);
}