public void UpdateStats(Mobile toUpdate, string outcome) { DataRow existingRow = duelstoneTable.Rows.Find(((int)toUpdate.Serial).ToString()); string killed, killedBy, stonesUsed; string stringNumber = ""; string updatePlayerString = ""; int points = int.Parse(existingRow.ItemArray[2].ToString()), won = int.Parse(existingRow.ItemArray[3].ToString()), lost = int.Parse(existingRow.ItemArray[4].ToString()); int joined = won + lost; int repeatedNumber = 0, moneyCost = 0; //Set MoneyEarned int moneyEarned = 0; int.TryParse(existingRow.ItemArray[5].ToString(), out moneyEarned); #region Set Stone Name stonesUsed = existingRow.ItemArray[8].ToString(); string stoneName = ""; if (stoneToUpdate.StoneType.ToString() == "Money1vs1") stoneName = "Money 1vs1"; else if (stoneToUpdate.StoneType.ToString() == "Loot1vs1") stoneName = "Loot 1vs1"; if (stoneToUpdate.StoneType.ToString() == "Money2vs2") stoneName = "Money 2vs2"; else if (stoneToUpdate.StoneType.ToString() == "Loot2vs2") stoneName = "Loot 2vs2"; if (stoneName.Contains("Money")) { stoneName += " (" + stoneToUpdate.DuelCost + ")"; moneyCost = stoneToUpdate.DuelCost; } #endregion if (stonesUsed.Contains("*" + stoneName)) { while ((stonesUsed.IndexOf("*" + stoneName) - 1) >= 0 && ';' != stonesUsed[(stonesUsed.IndexOf("*" + stoneName) - 1)]) { stringNumber = stringNumber.Insert(0, stonesUsed[(stonesUsed.IndexOf("*" + stoneName) - 1)].ToString()); if ((stonesUsed.IndexOf("*" + stoneName) - 1) >= 0) stonesUsed = stonesUsed.Remove(stonesUsed.IndexOf("*" + stoneName) - 1, 1); } int.TryParse(stringNumber.ToString(), out repeatedNumber); repeatedNumber++; stonesUsed = stonesUsed.Insert(stonesUsed.IndexOf("*" + stoneName), repeatedNumber.ToString()); } else stonesUsed += "1*" + stoneName + ";"; if (outcome == "won") { killed = existingRow.ItemArray[6].ToString(); stringNumber = ""; //Update Kills if (killed.Contains("*" + ((int)this.personWhoLost.Serial).ToString())) { while ((killed.IndexOf("*" + ((int)this.personWhoLost.Serial).ToString()) - 1) >= 0 && ';' != killed[(killed.IndexOf("*" + ((int)this.personWhoLost.Serial).ToString()) - 1)]) { stringNumber = stringNumber.Insert(0, killed[(killed.IndexOf("*" + ((int)this.personWhoLost.Serial).ToString()) - 1)].ToString()); if ((killed.IndexOf("*" + ((int)this.personWhoLost.Serial).ToString()) - 1) >= 0) killed = killed.Remove(killed.IndexOf("*" + ((int)this.personWhoLost.Serial).ToString()) - 1, 1); } int.TryParse(stringNumber.ToString(), out repeatedNumber); repeatedNumber++; killed = killed.Insert(killed.IndexOf("*" + ((int)this.personWhoLost.Serial).ToString()), repeatedNumber.ToString()); } else killed += "1*" + ((int)this.personWhoLost.Serial).ToString() + ";"; bool updatePoints = false; if (usingPointSystem || joined <= 15) { points++; updatePoints = true; } //Update guildladder if (this.personWhoLost.Guild != null && this.personWhoLost.Guild != null && this.personWhoLost.Guild != this.personWhoLost.Guild) Server.Misc.Guilds.GuildLadderUpdate.UpdateLadder(this.personWhoWon, this.personWhoLost, updatePoints); won++; moneyEarned += moneyCost; updatePlayerString = "UPDATE " + tableName + " SET " + "Name = '" + toUpdate.Name.ToString() + "', " + "Points = " + points + ", " + "Won = " + won + ", " + "MoneyEarned = " + moneyEarned + ", " + "Killed = '" + killed + "', "+ "StonesUsed = '" + stonesUsed +"' " + "WHERE Mobile = " + ((int)toUpdate.Serial).ToString(); } else if (outcome == "lost") { killedBy = existingRow.ItemArray[7].ToString(); stringNumber = ""; //Update Killers if (killedBy.Contains("*" + ((int)this.personWhoWon.Serial).ToString())) { while ((killedBy.IndexOf("*" + ((int)this.personWhoWon.Serial).ToString()) - 1) >= 0 && ';' != killedBy[(killedBy.IndexOf("*" + ((int)this.personWhoWon.Serial).ToString()) - 1)]) { stringNumber = stringNumber.Insert(0, killedBy[(killedBy.IndexOf("*" + ((int)this.personWhoWon.Serial).ToString()) - 1)].ToString()); if ((killedBy.IndexOf("*" + ((int)this.personWhoWon.Serial).ToString()) - 1) >= 0) killedBy = killedBy.Remove(killedBy.IndexOf("*" + ((int)this.personWhoWon.Serial).ToString()) - 1, 1); } int.TryParse(stringNumber.ToString(), out repeatedNumber); repeatedNumber++; killedBy = killedBy.Insert(killedBy.IndexOf("*" + ((int)this.personWhoWon.Serial).ToString()), repeatedNumber.ToString()); } else killedBy += "1*" + ((int)this.personWhoWon.Serial).ToString() + ";"; //Set Points: loserPoints = points; if (usingPointSystem) points--; lost++; moneyEarned -= moneyCost; updatePlayerString = "UPDATE " + tableName + " SET " + "Name = '" + toUpdate.Name.ToString() + "', " + "Points = " + points + ", " + "Lost = " + lost + ", " + "MoneyEarned = " + moneyEarned + ", " + "KilledBy = '" + killedBy + "', " + "StonesUsed = '" + stonesUsed +"' "+ "WHERE Mobile = " + ((int)toUpdate.Serial).ToString(); } OdbcCommand updateCommand = stoneDbConnecton.CreateCommand(); updateCommand.CommandText = updatePlayerString; updateCommand.ExecuteNonQuery(); }