实例介绍
【实例简介】
【实例截图】
【核心代码】
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using FluorineFx.IO; using FluorineFx.Messaging.Messages; using System.Text.RegularExpressions;//处理正则表达式的命名空间 using System.Net.Sockets; using System.Net; using System.Threading; using System.IO; using Games; namespace rxsg { public partial class sgForm : Form { public Sanguo sg = new Sanguo(); public string passUrl = ""; public Sanguo.CampaignArmy tArmy = new Sanguo.CampaignArmy(); public Dictionary<int, Double> mResource = new Dictionary<int, Double>(); public bool selectCity = false; public int MarchLevel = 0; public int CarryLevel = 0; public int ReinLevel = 0; public int DakLevel = 0; public int HeroSpeedAddOn = 0, Heroid = 0; public Point Sourcesite, Targetsite; public long mPathTime = 0, mRestTime = 0; public long UseFood = 0, totalCarry = 0; public Dictionary<int, List<object[]>> GrowTable = new Dictionary<int, List<object[]>>(); public Dictionary<int, List<object>> TimerList = new Dictionary<int, List<object>>(); public Dictionary<int, System.Threading.Timer> TimerTable = new Dictionary<int, System.Threading.Timer>(); public List<object> tmpList = new List<object>(); public List<int> GrowCityBuildList = new List<int>(); public int[] row, zhanl_row; public System.Threading.Timer tmpTimer; public static int count = 0; public sgForm() { InitializeComponent(); } private void sgForm_FormClosed(object sender, FormClosedEventArgs e) { Application.Exit(); } private void timer1_Tick(object sender, EventArgs e) { if (sg.mHooked == false) sg.HookNetwork(); else { timer1.Enabled = false; string gameserver = Sanguo.IECookieString; gameserver = gameserver.Substring(gameserver.IndexOf("Referer: "));// gameserver.IndexOf("); gameserver = gameserver.Substring(0, gameserver.IndexOf("BloodWar")); Sanguo.GameUIAddress = gameserver.Replace("Referer: ", ""); textBox2.AppendText(Sanguo.GameUIAddress "\r\n"); if (Sanguo.MsgPassword.Equals("WAIGUASB")) { Sanguo.GetNewHead(Sanguo.GameUIAddress); sg.Getswf(); WebBrowser web = new WebBrowser(); web.Navigate(@"c:\rxsg\html\app1.html"); bool isFinish = false; textBox2.AppendText(Sanguo.swfPassfile "\r\n"); while (isFinish == false) { Application.DoEvents(); if (web.Document.GetElementById("code").GetAttribute("value").Equals("abc")) isFinish = false; else { isFinish = true; Sanguo.MsgPassword = web.Document.GetElementById("code").GetAttribute("value"); textBox2.AppendText(Sanguo.MsgPassword "\r\n"); web.Dispose(); } Thread.Sleep(0); } } sg.GetUserCities(); for (int i = 0; i < sg.LoginUser.UserCities.Length; i ) { sg.GetCityInfo(sg.LoginUser.UserCities[i].cityid); com.Items.Add(sg.LoginUser.UserCities[i].name); } this.Text = "欢迎 " "【" sg.LoginUser.username "】" " 使用" this.Text; this.Text = " " "编号:" sg.LoginUser.UserID; sg.setArmyInfo(); } } private void com_TextChanged_1(object sender, EventArgs e) { if (sg.LoginUser.UserCities[com.SelectedIndex].Technology.ContainsKey("12")) MarchLevel = Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Technology["12"]); //as TechInfo).Level : 0 if (sg.LoginUser.UserCities[com.SelectedIndex].Technology.ContainsKey("13")) ReinLevel = Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Technology["13"]); if(sg.LoginUser.UserCities[com.SelectedIndex].Technology.ContainsKey("16")) CarryLevel=Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Technology["16"]); tArmy.init(); Sourcesite = Sanguo.Cid2Point(Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].cityid)); Targetsite = Sanguo.Cid2Point(Convert.ToInt32(Target_Y.Value) * 1000 Convert.ToInt32(Target_X.Value)); Heroscom.Items.Clear(); Heroscom.Items.Add("――"); foreach (var tmpBuild in sg.LoginUser.UserCities[com.SelectedIndex].Builders.Values) { if ((tmpBuild as Sanguo.BuildInfo).BuildID == 18) { DakLevel = (tmpBuild as Sanguo.BuildInfo).level; break; } } S1.Text = "民夫:" Convert.ToString(sg.LoginUser.UserCities[com.SelectedIndex].Army["1"]); S2.Text = "义兵:" Convert.ToString(sg.LoginUser.UserCities[com.SelectedIndex].Army["2"]); S3.Text = "斥候:" Convert.ToString(sg.LoginUser.UserCities[com.SelectedIndex].Army["3"]); S4.Text = "长枪兵:" Convert.ToString(sg.LoginUser.UserCities[com.SelectedIndex].Army["4"]); S5.Text = "刀盾兵:" Convert.ToString(sg.LoginUser.UserCities[com.SelectedIndex].Army["5"]); S6.Text = "弓箭兵:" Convert.ToString(sg.LoginUser.UserCities[com.SelectedIndex].Army["6"]); S7.Text = "轻骑兵:" Convert.ToString(sg.LoginUser.UserCities[com.SelectedIndex].Army["7"]); S8.Text = "铁骑兵:" Convert.ToString(sg.LoginUser.UserCities[com.SelectedIndex].Army["8"]); S9.Text = "辎重车:" Convert.ToString(sg.LoginUser.UserCities[com.SelectedIndex].Army["9"]); S10.Text = "床弩:" Convert.ToString(sg.LoginUser.UserCities[com.SelectedIndex].Army["10"]); S11.Text = "冲车:" Convert.ToString(sg.LoginUser.UserCities[com.SelectedIndex].Army["11"]); S12.Text = "投石车:" Convert.ToString(sg.LoginUser.UserCities[com.SelectedIndex].Army["12"]); r1.Text = "粮食:" sg.LoginUser.UserCities[com.SelectedIndex].resources["food"]; r2.Text = "木材:" sg.LoginUser.UserCities[com.SelectedIndex].resources["wood"]; r3.Text = "石料:" sg.LoginUser.UserCities[com.SelectedIndex].resources["rock"]; r4.Text = "铁锭:" sg.LoginUser.UserCities[com.SelectedIndex].resources["iron"]; r5.Text = "黄金:" sg.LoginUser.UserCities[com.SelectedIndex].resources["gold"]; Heroscom.SelectedIndex = 0; if (sg.LoginUser.UserCities[com.SelectedIndex].Heros != null) for(int i=0;i<sg.LoginUser.UserCities[com.SelectedIndex].Heros.Length;i ) if ((string)sg.LoginUser.UserCities[com.SelectedIndex].Heros[i]["state"] == "0") Heroscom.Items.Add(sg.LoginUser.UserCities[com.SelectedIndex].Heros[i]["name"]); selectCity = true; mResource.Clear(); for (int i = 0; i < 5; i ) mResource.Add(i, 0); mRestTime = Convert.ToInt64(Rest_Hours.Value) * 3600 Convert.ToInt64(Rest_Min.Value) * 60; } private void Army1_Leave(object sender, EventArgs e) { if (!selectCity) { Army1.Value = 0; return; } if (this.Army1.Value > Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Army["1"])) this.Army1.Value = Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Army["1"]); tArmy.ArmyInfo["1"] = Convert.ToString(this.Army1.Value); ArmyIsNull(); UseFood = sg.TroopFoodUse(tArmy, mPathTime mRestTime); totalCarry = sg.TroopCarry(tArmy, CarryLevel); fooduse.Text = "出征耗粮:" Convert.ToString(UseFood); food_rest.Text = "剩余空间:" Convert.ToString(totalCarry - UseFood); } private void Army2_Leave(object sender, EventArgs e) { if (!selectCity) { Army2.Value = 0; return; } if (this.Army2.Value > Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Army["2"])) this.Army2.Value = Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Army["2"]); tArmy.ArmyInfo["2"] = Convert.ToString(this.Army2.Value); ArmyIsNull(); UseFood = sg.TroopFoodUse(tArmy, mPathTime mRestTime); totalCarry = sg.TroopCarry(tArmy, CarryLevel); fooduse.Text = "出征耗粮:" Convert.ToString(UseFood); food_rest.Text = "剩余空间:" Convert.ToString(totalCarry - UseFood); } private void Army3_Leave(object sender, EventArgs e) { if (!selectCity) { Army3.Value = 0; return; } if (this.Army3.Value > Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Army["3"])) this.Army3.Value = Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Army["3"]); tArmy.ArmyInfo["3"] = Convert.ToString(this.Army3.Value); ArmyIsNull(); UseFood = sg.TroopFoodUse(tArmy, mPathTime mRestTime); totalCarry = sg.TroopCarry(tArmy, CarryLevel); fooduse.Text = "出征耗粮:" Convert.ToString(UseFood); food_rest.Text = "剩余空间:" Convert.ToString(totalCarry - UseFood); } private void Army4_Leave(object sender, EventArgs e) { if (!selectCity) { Army4.Value = 0; return; } if (this.Army4.Value > Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Army["4"])) this.Army4.Value = Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Army["4"]); tArmy.ArmyInfo["4"] = Convert.ToString(this.Army4.Value); ArmyIsNull(); UseFood = sg.TroopFoodUse(tArmy, mPathTime mRestTime); totalCarry = sg.TroopCarry(tArmy, CarryLevel); fooduse.Text = "出征耗粮:" Convert.ToString(UseFood); food_rest.Text = "剩余空间:" Convert.ToString(totalCarry - UseFood); } private void Army5_Leave(object sender, EventArgs e) { if (!selectCity) { Army5.Value = 0; return; } if (this.Army5.Value > Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Army["5"])) this.Army5.Value = Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Army["5"]); tArmy.ArmyInfo["5"] = Convert.ToString(this.Army5.Value); ArmyIsNull(); UseFood = sg.TroopFoodUse(tArmy, mPathTime mRestTime); totalCarry = sg.TroopCarry(tArmy, CarryLevel); fooduse.Text = "出征耗粮:" Convert.ToString(UseFood); food_rest.Text = "剩余空间:" Convert.ToString(totalCarry - UseFood); } private void Army6_Leave(object sender, EventArgs e) { if (!selectCity) { Army6.Value = 0; return; } if (this.Army6.Value > Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Army["6"])) this.Army6.Value = Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Army["6"]); tArmy.ArmyInfo["6"] = Convert.ToString(this.Army6.Value); ArmyIsNull(); UseFood = sg.TroopFoodUse(tArmy, mPathTime mRestTime); totalCarry = sg.TroopCarry(tArmy, CarryLevel); fooduse.Text = "出征耗粮:" Convert.ToString(UseFood); food_rest.Text = "剩余空间:" Convert.ToString(totalCarry - UseFood); } private void Army7_Leave(object sender, EventArgs e) { if (!selectCity) { Army7.Value = 0; return; } if (this.Army7.Value > Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Army["7"])) this.Army7.Value = Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Army["7"]); tArmy.ArmyInfo["7"] = Convert.ToString(this.Army7.Value); ArmyIsNull(); UseFood = sg.TroopFoodUse(tArmy, mPathTime mRestTime); totalCarry = sg.TroopCarry(tArmy, CarryLevel); fooduse.Text = "出征耗粮:" Convert.ToString(UseFood); food_rest.Text = "剩余空间:" Convert.ToString(totalCarry - UseFood); } private void Army8_Leave(object sender, EventArgs e) { if (!selectCity) { Army8.Value = 0; return; } if (this.Army8.Value > Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Army["8"])) this.Army8.Value = Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Army["8"]); tArmy.ArmyInfo["8"] = Convert.ToString(this.Army8.Value); ArmyIsNull(); UseFood = sg.TroopFoodUse(tArmy, mPathTime mRestTime); totalCarry = sg.TroopCarry(tArmy, CarryLevel); fooduse.Text = "出征耗粮:" Convert.ToString(UseFood); food_rest.Text = "剩余空间:" Convert.ToString(totalCarry - UseFood); } private void Army9_Leave(object sender, EventArgs e) { if (!selectCity) { Army9.Value = 0; return; } if (this.Army9.Value > Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Army["9"])) this.Army9.Value = Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Army["9"]); tArmy.ArmyInfo["9"] = Convert.ToString(this.Army9.Value); ArmyIsNull(); UseFood = sg.TroopFoodUse(tArmy, mPathTime mRestTime); totalCarry = sg.TroopCarry(tArmy, CarryLevel); fooduse.Text = "出征耗粮:" Convert.ToString(UseFood); food_rest.Text = "剩余空间:" Convert.ToString(totalCarry - UseFood); } private void Army10_Leave(object sender, EventArgs e) { if (!selectCity) { Army10.Value = 0; return; } if (this.Army10.Value > Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Army["10"])) this.Army10.Value = Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Army["10"]); tArmy.ArmyInfo["10"] = Convert.ToString(this.Army10.Value); ArmyIsNull(); UseFood = sg.TroopFoodUse(tArmy, mPathTime mRestTime); totalCarry = sg.TroopCarry(tArmy, CarryLevel); fooduse.Text = "出征耗粮:" Convert.ToString(UseFood); food_rest.Text = "剩余空间:" Convert.ToString(totalCarry - UseFood); } private void Army11_Leave(object sender, EventArgs e) { if (!selectCity) { Army11.Value = 0; return; } if (this.Army11.Value > Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Army["11"])) this.Army11.Value = Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Army["11"]); tArmy.ArmyInfo["11"] = Convert.ToString(this.Army11.Value); ArmyIsNull(); UseFood = sg.TroopFoodUse(tArmy, mPathTime mRestTime); totalCarry = sg.TroopCarry(tArmy, CarryLevel); fooduse.Text = "出征耗粮:" Convert.ToString(UseFood); food_rest.Text = "剩余空间:" Convert.ToString(totalCarry - UseFood); } private void Army12_ValueChanged(object sender, EventArgs e) { if (!selectCity) { Army12.Value = 0; return; } if (this.Army12.Value > Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Army["12"])) this.Army12.Value = Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Army["12"]); tArmy.ArmyInfo["12"] = Convert.ToString(this.Army12.Value); ArmyIsNull(); UseFood = sg.TroopFoodUse(tArmy, mPathTime mRestTime); totalCarry = sg.TroopCarry(tArmy, CarryLevel); fooduse.Text = "出征耗粮:" Convert.ToString(UseFood); food_rest.Text = "剩余空间:" Convert.ToString(totalCarry - UseFood); } private void Res5_Leave(object sender, EventArgs e) { if (this.Res0.Value > Convert.ToDecimal(sg.LoginUser.UserCities[com.SelectedIndex].resources["gold"])) this.Res0.Value = Convert.ToDecimal(sg.LoginUser.UserCities[com.SelectedIndex].resources["gold"]); mResource[0] = Convert.ToDouble(this.Res0.Value); } private void Res1_Leave(object sender, EventArgs e) { if (this.Res1.Value > Convert.ToDecimal(sg.LoginUser.UserCities[com.SelectedIndex].resources["food"])) this.Res0.Value = Convert.ToDecimal(sg.LoginUser.UserCities[com.SelectedIndex].resources["food"]); mResource[1] = Convert.ToDouble(this.Res1.Value); } private void Res2_Leave(object sender, EventArgs e) { if (this.Res2.Value > Convert.ToDecimal(sg.LoginUser.UserCities[com.SelectedIndex].resources["wood"])) this.Res2.Value = Convert.ToDecimal(sg.LoginUser.UserCities[com.SelectedIndex].resources["wood"]); mResource[2] = Convert.ToDouble(this.Res2.Value); } private void Res3_Leave(object sender, EventArgs e) { if (this.Res3.Value > Convert.ToDecimal(sg.LoginUser.UserCities[com.SelectedIndex].resources["rock"])) this.Res3.Value = Convert.ToDecimal(sg.LoginUser.UserCities[com.SelectedIndex].resources["rock"]); mResource[3] = Convert.ToDouble(this.Res3.Value); } private void Res4_Leave(object sender, EventArgs e) { if (this.Res4.Value > Convert.ToDecimal(sg.LoginUser.UserCities[com.SelectedIndex].resources["iron"])) this.Res4.Value = Convert.ToDecimal(sg.LoginUser.UserCities[com.SelectedIndex].resources["iron"]); mResource[4] = Convert.ToDouble(this.Res4.Value); } private void button1_Click(object sender, EventArgs e) { bool mArmyCount = false; foreach (var value in tArmy.ArmyInfo.Values) { if (Convert.ToInt32(value) > 0) mArmyCount = true; } if (Heroscom.SelectedIndex == 0) { if (troopcom.SelectedIndex == 3 || troopcom.SelectedIndex == 4) { MessageBox.Show("必须选择将领才能占领或掠夺!","出征错误"); return; } } if (Flag.Checked) if (MessageBox.Show("确定你使用军旗?", "军旗的使用", MessageBoxButtons.OKCancel) == DialogResult.Cancel) { Flag.Checked = false; return; } if (!mArmyCount) { MessageBox.Show("必须选择士兵!", "出征错误"); return; } int TargetCity = Convert.ToInt32(Target_Y.Value) * 1000 Convert.ToInt32(Target_X.Value); if (totalCarry - UseFood - Convert.ToInt64(Res0.Value) - Convert.ToInt64(Res1.Value) - Convert.ToInt64(Res2.Value) - Convert.ToInt64(Res3.Value) - Convert.ToInt64(Res4.Value) < 0) { MessageBox.Show("你的军队载重不足,无法带上这么多资源。", "出征错误"); return; } if (chuzh.Checked) { count = count 1; tmpList = sg.GetTroopParam(troopcom.SelectedIndex, sg.LoginUser.UserCities[com.SelectedIndex], TargetCity, Heroid, tArmy, mRestTime, Flag.Checked, Convert.ToInt64(Res0.Value), Convert.ToInt64(Res1.Value), Convert.ToInt64(Res2.Value), Convert.ToInt64(Res3.Value), Convert.ToInt64(Res4.Value)); int interval = Convert.ToInt32(Circle.Value * 60000); TimerList.Add(count, tmpList); tmpTimer = new System.Threading.Timer(new TimerCallback(Timer_Tick),TimerList[count], 0, interval); TimerTable.Add(count, tmpTimer); string[] tmpInfo = new string[8]; tmpInfo[0] = com.Text; tmpInfo[1] = Heroscom.Text; tmpInfo[2] = "(" Convert.ToString(Target_X.Value) "," Convert.ToString(Target_Y.Value) ")"; tmpInfo[3] = ""; tmpInfo[4] = ""; tmpInfo[5] = troopcom.Text; tmpInfo[6] = Convert.ToString(Circle.Value); tmpInfo[7] = Convert.ToString(count); chuzh_Grid.Rows.Add(tmpInfo); } else { sg.Troop(troopcom.SelectedIndex, sg.LoginUser.UserCities[com.SelectedIndex], TargetCity, Heroid, tArmy, mRestTime, Flag.Checked, Convert.ToInt64(Res0.Value), Convert.ToInt64(Res1.Value), Convert.ToInt64(Res2.Value), Convert.ToInt64(Res3.Value), Convert.ToInt64(Res4.Value)); chuz_Box.AppendText(sg.str "\r\n"); } } void ArmyIsNull( ) { int SoldierId = 1; bool ArmyisNull = true; for (int i = 0; i <= 11; i ) if (Convert.ToInt32(tArmy.ArmyInfo[Convert.ToString(sg.sortArmy[i])]) != 0) { SoldierId = sg.sortArmy[i]; ArmyisNull = false; break; } if (ArmyisNull) pathtime.Text = "单程时间:00:00:00"; else { Sanguo.ArmyInfo tmpSoldier=sg.Soldier1; switch (SoldierId) { case 1: tmpSoldier = sg.Soldier1; break; case 2: tmpSoldier = sg.Soldier2; break; case 3: tmpSoldier = sg.Soldier3; break; case 4: tmpSoldier = sg.Soldier4; break; case 5: tmpSoldier = sg.Soldier5; break; case 6: tmpSoldier = sg.Soldier6; break; case 7: tmpSoldier = sg.Soldier7; break; case 8: tmpSoldier = sg.Soldier8; break; case 9: tmpSoldier = sg.Soldier9; break; case 10: tmpSoldier = sg.Soldier10; break; case 11: tmpSoldier = sg.Soldier11; break; case 12: tmpSoldier = sg.Soldier12; break; } mPathTime = sg.EvalMarchTime(troopcom.SelectedIndex, Sourcesite, Targetsite, MarchLevel, ReinLevel, HeroSpeedAddOn, DakLevel, tmpSoldier); pathtime.Text = "单程时间:" Convert.ToString(mPathTime mRestTime); } } private void Rest_Hours_ValueChanged(object sender, EventArgs e) { mRestTime = Convert.ToInt64(Rest_Hours.Value) * 3600 Convert.ToInt64(Rest_Min.Value) * 60; pathtime.Text = "单程时间:" Convert.ToString(mPathTime mRestTime); UseFood = sg.TroopFoodUse(tArmy, mPathTime mRestTime); totalCarry = sg.TroopCarry(tArmy, CarryLevel); fooduse.Text = "出征耗粮:" Convert.ToString(UseFood); food_rest.Text = "剩余空间:" Convert.ToString(totalCarry - UseFood); } private void Rest_Min_ValueChanged(object sender, EventArgs e) { mRestTime = Convert.ToInt64(Rest_Hours.Value) * 3600 Convert.ToInt64(Rest_Min.Value) * 60; pathtime.Text = "单程时间:" Convert.ToString(mPathTime mRestTime); UseFood = sg.TroopFoodUse(tArmy, mPathTime mRestTime); totalCarry = sg.TroopCarry(tArmy, CarryLevel); fooduse.Text = "出征耗粮:" Convert.ToString(UseFood); food_rest.Text = "剩余空间:" Convert.ToString(totalCarry - UseFood); } private void Target_X_ValueChanged(object sender, EventArgs e) { if (!selectCity) return; Targetsite = Sanguo.Cid2Point(Convert.ToInt32(Target_Y.Value) * 1000 Convert.ToInt32(Target_X.Value)); ArmyIsNull(); UseFood = sg.TroopFoodUse(tArmy, mPathTime mRestTime); totalCarry = sg.TroopCarry(tArmy, CarryLevel); fooduse.Text = "出征耗粮:" Convert.ToString(UseFood); food_rest.Text = "剩余空间:" Convert.ToString(totalCarry - UseFood); } private void Target_Y_ValueChanged(object sender, EventArgs e) { if (!selectCity) return; Targetsite = Sanguo.Cid2Point(Convert.ToInt32(Target_Y.Value) * 1000 Convert.ToInt32(Target_X.Value)); ArmyIsNull(); UseFood = sg.TroopFoodUse(tArmy, mPathTime mRestTime); totalCarry = sg.TroopCarry(tArmy, CarryLevel); fooduse.Text = "出征耗粮:" Convert.ToString(UseFood); food_rest.Text = "剩余空间:" Convert.ToString(totalCarry - UseFood); } private void troopcom_TextChanged(object sender, EventArgs e) { if (!selectCity) return; ArmyIsNull(); UseFood = sg.TroopFoodUse(tArmy, mPathTime mRestTime); totalCarry = sg.TroopCarry(tArmy, CarryLevel); fooduse.Text = "出征耗粮:" Convert.ToString(UseFood); food_rest.Text = "剩余空间:" Convert.ToString(totalCarry - UseFood); } private void Heroscom_TextChanged(object sender, EventArgs e) { if (!selectCity) return; if (Heroscom.SelectedIndex > 0) { for (int i = 0; i < sg.LoginUser.UserCities[com.SelectedIndex].Heros.Length; i ) if ((string)sg.LoginUser.UserCities[com.SelectedIndex].Heros[i]["state"] == "0" && (string)sg.LoginUser.UserCities[com.SelectedIndex].Heros[i]["name"] == Heroscom.Text) { Heroid = Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Heros[i]["heroid"]); HeroSpeedAddOn = Convert.ToInt32(sg.LoginUser.UserCities[com.SelectedIndex].Heros[i]["speed"]); break; } } else { Heroid = 0; HeroSpeedAddOn = 0; } ArmyIsNull(); UseFood = sg.TroopFoodUse(tArmy, mPathTime mRestTime); totalCarry = sg.TroopCarry(tArmy, CarryLevel); fooduse.Text = "出征耗粮:" Convert.ToString(UseFood); food_rest.Text = "剩余空间:" Convert.ToString(totalCarry - UseFood); } private void Timer_Tick(object sender) { sg.str = "没有出征"; List<object> t1 = (sender as List<object>); sg.Troop(t1); if (sg.str.IndexOf("出征成功") < 0) this.BeginInvoke(new chuzhen(chuzhGrid)); this.BeginInvoke(new chuzhen(chuzhInfo)); } public delegate void chuzhen(); void chuzhInfo() { chuz_Box.AppendText(sg.str "\r\n"); } void chuzhGrid() { int tmpRowCount = chuzh_Grid.Rows.Count; chuzh_Grid.Rows.Remove(chuzh_Grid.Rows[tmpRowCount - 1]); TimerList.Remove(tmpRowCount); TimerTable[tmpRowCount].Dispose(); TimerTable.Remove(tmpRowCount); count--; } private void button2_Click(object sender, EventArgs e) { if (chuzh_Grid.Rows.Count < 1) return; int tmpRow = chuzh_Grid.Rows.IndexOf(chuzh_Grid.CurrentRow); int tmpcount = Convert.ToInt32(chuzh_Grid.Rows[tmpRow].Cells[7].Value); chuzh_Grid.Rows.Remove(chuzh_Grid.CurrentRow); TimerList.Remove(tmpcount); TimerTable[tmpcount].Change(-1, -1); TimerTable[tmpcount].Dispose(); TimerTable.Remove(tmpcount); count--; } private void RefreshBtn_Click(object sender, EventArgs e) { Sanguo.TroopInfo[] tmpTroop = sg.GetArmyTroops(); CityCom.Items.Clear(); for (int i = 0; i < sg.LoginUser.UserCities.Length; i ) { sg.LoginUser.UserCities[i].TroopArmyCount = 0; CityCom.Items.Add(sg.LoginUser.UserCities[i].name); } if(tmpTroop!=null) for (int i = 0; i < tmpTroop.Length; i ) { sg.LoginUser.UserCities[Convert.ToInt32(sg.LoginUser.CitySort[Convert.ToString(tmpTroop[i].cid)])].TroopArmyCount ; } tmpTroop = sg.GetStayTroops(); if (tmpTroop != null) for (int i = 0; i < tmpTroop.Length; i ) sg.LoginUser.UserCities[Convert.ToInt32(sg.LoginUser.CitySort[Convert.ToString(tmpTroop[i].cid)])].TroopArmyCount ; dateTimeP.Value = DateTime.Now.AddHours(1); } private void CityCom_TextChanged(object sender, EventArgs e) { FoodArmyGrid.Rows.Clear(); int tmpIndex = CityCom.SelectedIndex; Point T1 = Sanguo.Cid2Point(Convert.ToInt32(sg.LoginUser.UserCities[tmpIndex].cityid)); long food_add = Convert.ToInt64(sg.LoginUser.UserCities[CityCom.SelectedIndex].resources["food_add"]); long food_army_use = Convert.ToInt64(sg.LoginUser.UserCities[CityCom.SelectedIndex].resources["food_army_use"]); long food_use = food_add - food_army_use; foodshchan.Text = Convert.ToString(food_use); if (food_use < 0) { carryfood.Text = Convert.ToString(Math.Ceiling(Math.Abs(food_use) * (zhengafter.Value zhenbefore.Value) / 3600)); } else carryfood.Text = "0"; string[] tmpInfo = new string[8]; long[] carrySpeed = new long[sg.LoginUser.UserCities.Length - 1]; row = new int[sg.LoginUser.UserCities.Length - 1]; int k = 0; Dictionary<int, long> tmpDict = new Dictionary<int, long>(); for (int i = 0; i < sg.LoginUser.UserCities.Length; i ) { if (i != tmpIndex) { int level = 0; foreach (var tmpB in sg.LoginUser.UserCities[i].Builders.Values) { if ((tmpB as Sanguo.BuildInfo).BuildID == 8) { level = (tmpB as Sanguo.BuildInfo).level; break; } } int tmpDakLevel = 0; foreach (var tmpBuild in sg.LoginUser.UserCities[i].Builders.Values) { if ((tmpBuild as Sanguo.BuildInfo).BuildID == 18) { tmpDakLevel = (tmpBuild as Sanguo.BuildInfo).level; break; } } Point S1 = Sanguo.Cid2Point(Convert.ToInt32(sg.LoginUser.UserCities[i].cityid)); int RLevel = 0; if (sg.LoginUser.UserCities[i].Technology.ContainsKey("13")) RLevel = Convert.ToInt32(sg.LoginUser.UserCities[i].Technology["13"]); long tmpPathTime = sg.EvalMarchTime(TroopType.SelectedIndex, S1, T1, 0, RLevel, 0, tmpDakLevel, sg.Soldier9); DateTime now = DateTime.Now; DateTime end = now.AddSeconds(tmpPathTime); string tmptme = Convert.ToString(end - now); double zzcsl = Math.Ceiling(Convert.ToInt64(carryfood.Text) / (5000 * (1 Convert.ToInt32(sg.LoginUser.UserCities[CityCom.SelectedIndex].Technology["16"]) * 0.1))); tmpInfo[0] = sg.LoginUser.UserCities[i].name; tmpInfo[1] = Convert.ToString(sg.LoginUser.UserCities[i].resources["food"]); tmpInfo[2] = Convert.ToString(level - sg.LoginUser.UserCities[i].TroopArmyCount); tmpInfo[3] = "0"; tmpInfo[4] = Convert.ToString(sg.LoginUser.UserCities[i].Army["9"]); tmpInfo[5] = Convert.ToString(zzcsl); tmpInfo[6] = Convert.ToString(tmptme); tmpInfo[7] = Convert.ToString(i); FoodArmyGrid.Rows.Add(tmpInfo); carrySpeed[k] = tmpPathTime; tmpDict.Add(k, tmpPathTime); k ; } } Sanguo.fastsort(carrySpeed, 0, carrySpeed.Length - 1); for (int i = 0; i < carrySpeed.Length; i ) { foreach (var item in tmpDict) if (item.Value == carrySpeed[i]) row[i] = item.Key; } ListSortDirection sortDirection = ListSortDirection.Ascending; FoodArmyGrid.Sort(Column7, sortDirection); } private void chuzhBtn_Click(object sender, EventArgs e) { if (CityCom.Text == "") { MessageBox.Show("请选择养兵城池"); return; } DateTime ArriveTime = DateTime.Parse(dateTimeP.Text); ArriveTime = ArriveTime.AddSeconds(-Convert.ToInt32(zhenbefore.Value)); long timeoffSet = Convert.ToInt64(sg.GetServerTime(sg.LoginUser.UserCities[CityCom.SelectedIndex].cityid).ReslutValue); string tmptime = ""; long timeoff = 0; int Cityzzcsl = 0; int carrycount = 0; int carryzzcsl = Convert.ToInt32(FoodArmyGrid.Rows[0].Cells[5].Value); Sanguo.CampaignArmy tmpArmy = new Sanguo.CampaignArmy(); tmpArmy.init(); for (int i = 0; i < row.Length; i ) { if (Convert.ToInt32(FoodArmyGrid.Rows[i].Cells[3].Value) == 0) continue; if (Convert.ToInt32(FoodArmyGrid.Rows[i].Cells[3].Value) > Convert.ToInt32(FoodArmyGrid.Rows[i].Cells[2].Value)) FoodArmyGrid.Rows[i].Cells[3].Value = FoodArmyGrid.Rows[i].Cells[2].Value; sg.str = ""; tmptime = (string)FoodArmyGrid.Rows[i].Cells[6].Value; string[] t = tmptime.Split(':'); long t1 = Convert.ToInt32(t[0]) * 3600 Convert.ToInt32(t[1]) * 60 Convert.ToInt32(t[2]); timeoff = Convert.ToInt64(Sanguo.ConvertDateTimeInt(ArriveTime.AddSeconds(carrycount * 3600)) - Sanguo.ConvertDateTimeInt(DateTime.Now.AddSeconds(t1 timeoffSet))); if (timeoff < 0) { MessageBox.Show("不能在指定的时间把粮食运输到指定的城池"); return; } Cityzzcsl = Convert.ToInt32(FoodArmyGrid.Rows[i].Cells[4].Value); long CityFood_rest = Convert.ToInt32(FoodArmyGrid.Rows[i].Cells[1].Value); int pXiabiao = Convert.ToInt32(FoodArmyGrid.Rows[i].Cells[7].Value); int pClevel = Convert.ToInt32(sg.LoginUser.UserCities[pXiabiao].Technology["16"]); for (int j = 1; j <= Convert.ToInt32(FoodArmyGrid.Rows[i].Cells[3].Value); j ) { if (CityFood_rest < Convert.ToInt32(carryfood.Text)) break; timeoff = Convert.ToInt64(Sanguo.ConvertDateTimeInt(ArriveTime.AddSeconds(carrycount * 3600)) - Sanguo.ConvertDateTimeInt(DateTime.Now.AddSeconds(t1 timeoffSet))); while (sg.TroopCarry(carryzzcsl, pClevel) - sg.TroopFoodUse(carryzzcsl, t1 timeoff) < Convert.ToInt64(carryfood.Text)) carryzzcsl ; if (Cityzzcsl < carryzzcsl) break; tmpArmy.ArmyInfo["9"] = Convert.ToString(carryzzcsl); sg.Troop(TroopType.SelectedIndex, sg.LoginUser.UserCities[pXiabiao], sg.LoginUser.UserCities[CityCom.SelectedIndex].cityid, 0, tmpArmy, timeoff, false, 0, Convert.ToDouble(carryfood.Text), 0, 0, 0); if (sg.str.IndexOf("出征成功") > -1) { carrycount ; Cityzzcsl = Cityzzcsl - carryzzcsl; CityFood_rest = CityFood_rest - Convert.ToInt64(carryfood.Text); Mess.AppendText(sg.str "\r\n"); } Thread.Sleep(1000); } } } private void RefreshBtn2_Click(object sender, EventArgs e) { zhanlGridRefresh(); chuzhBtn2.Enabled = true; } private void SolderType_SelectedValueChanged(object sender, EventArgs e) { zhanlGridRefresh(); } void zhanlGridRefresh() { zhanlGrid.Rows.Clear(); Sanguo.TroopInfo[] tmpTroop = sg.GetArmyTroops(); for (int i = 0; i < sg.LoginUser.UserCities.Length; i ) sg.LoginUser.UserCities[i].TroopArmyCount = 0; if (tmpTroop != null) for (int i = 0; i < tmpTroop.Length; i ) sg.LoginUser.UserCities[Convert.ToInt32(sg.LoginUser.CitySort[Convert.ToString(tmpTroop[i].cid)])].TroopArmyCount ; tmpTroop = sg.GetStayTroops(); if (tmpTroop != null) for (int i = 0; i < tmpTroop.Length; i ) sg.LoginUser.UserCities[Convert.ToInt32(sg.LoginUser.CitySort[Convert.ToString(tmpTroop[i].cid)])].TroopArmyCount ; dateTimeP2.Value = DateTime.Now.AddHours(1); Point T1 = Sanguo.Cid2Point(Convert.ToInt32(zhanlY.Value) * 1000 Convert.ToInt32(zhanlX.Value)); string[] tmpInfo = new string[7]; long[] carrySpeed = new long[sg.LoginUser.UserCities.Length]; zhanl_row = new int[sg.LoginUser.UserCities.Length]; Dictionary<int, long> tmpDict = new Dictionary<int, long>(); for (int i = 0; i < sg.LoginUser.UserCities.Length; i ) { int level = 0; foreach (var tmpB in sg.LoginUser.UserCities[i].Builders.Values) { if ((tmpB as Sanguo.BuildInfo).BuildID == 8) { level = (tmpB as Sanguo.BuildInfo).level; break; } } int tmpHerosCount = 0; if (sg.LoginUser.UserCities[i].Heros!=null) for (int j = 0; j < sg.LoginUser.UserCities[i].Heros.Length; j ) if ((string)sg.LoginUser.UserCities[i].Heros[j]["state"] == "0") tmpHerosCount ; int tmpMarchLevel = 0, tmpReinLevel = 0; if (sg.LoginUser.UserCities[i].Technology.ContainsKey("12")) tmpMarchLevel = Convert.ToInt32(sg.LoginUser.UserCities[i].Technology["12"]); //as TechInfo).Level : 0 if (sg.LoginUser.UserCities[i].Technology.ContainsKey("13")) tmpReinLevel = Convert.ToInt32(sg.LoginUser.UserCities[i].Technology["13"]); Point S1 = Sanguo.Cid2Point(Convert.ToInt32(sg.LoginUser.UserCities[i].cityid)); long tmpPathTime = 0; if (SolderType.SelectedIndex == 1) tmpPathTime = sg.EvalMarchTime(4, S1, T1, tmpMarchLevel, tmpReinLevel, 0, 0, sg.Soldier9); else tmpPathTime = sg.EvalMarchTime(4, S1, T1, tmpMarchLevel, tmpReinLevel, 0, 0, sg.Soldier7); DateTime now = DateTime.Now; DateTime end = now.AddSeconds(tmpPathTime); string tmptme = Convert.ToString(end - now); tmpInfo[0] = sg.LoginUser.UserCities[i].name; tmpInfo[1] = Convert.ToString(tmpHerosCount); if (level - sg.LoginUser.UserCities[i].TroopArmyCount >= tmpHerosCount) tmpInfo[2] = Convert.ToString(tmpHerosCount); else tmpInfo[2] = Convert.ToString(level - sg.LoginUser.UserCities[i].TroopArmyCount); tmpInfo[3] = "0"; tmpInfo[4] = Convert.ToString(sg.LoginUser.UserCities[i].Army["9"]); tmpInfo[5] = Convert.ToString(tmptme); tmpInfo[6] = Convert.ToString(sg.LoginUser.UserCities[i].resources["food"]); //tmpInfo[7] = Convert.ToString(i); zhanlGrid.Rows.Add(tmpInfo); carrySpeed[i] = tmpPathTime; tmpDict.Add(i, tmpPathTime); } Sanguo.fastsort(carrySpeed, 0, carrySpeed.Length - 1); for (int i = 0; i < carrySpeed.Length; i ) { foreach (var item in tmpDict) if (item.Value == carrySpeed[i]) zhanl_row[i] = item.Key; } ListSortDirection sortDirection = ListSortDirection.Ascending; zhanlGrid.Sort(Column14, sortDirection); } private void zhanlX_Leave(object sender, EventArgs e) { zhanlGrid.Rows.Clear(); chuzhBtn2.Enabled = false; } private void zhanlY_Leave(object sender, EventArgs e) { zhanlGrid.Rows.Clear(); chuzhBtn2.Enabled = false; } private void CityInfoBtn_Click(object sender, EventArgs e) { for(int i=0;i<sg.LoginUser.UserCities.Length;i ) sg.GetCityInfo(sg.LoginUser.UserCities[i].cityid); } private void chuzhBtn2_Click(object sender, EventArgs e) { DateTime ArriveTime = DateTime.Parse(dateTimeP2.Text); ArriveTime = ArriveTime.AddSeconds(-Convert.ToInt32(zhengdianq.Value)); long timeoffSet = Convert.ToInt64(sg.GetServerTime(sg.LoginUser.UserCities[0].cityid).ReslutValue); string tmptime = ""; long timeoff = 0; int carrycount = 0; Dictionary<int, int> tmpHeros = new Dictionary<int, int>(); int T1 = Convert.ToInt32(zhanlY.Value) * 1000 Convert.ToInt32(zhanlX.Value); Sanguo.CampaignArmy tmpArmy=new Sanguo.CampaignArmy(); tmpArmy.init(); if (IsForever.Checked) { for (int i = 0; i < zhanl_row.Length; i ) { if (Convert.ToInt32(zhanlGrid.Rows[i].Cells[3].Value) == 0) continue; if (Convert.ToInt32(zhanlGrid.Rows[i].Cells[3].Value) > Convert.ToInt32(zhanlGrid.Rows[i].Cells[2].Value)) zhanlGrid.Rows[i].Cells[3].Value = zhanlGrid.Rows[i].Cells[2].Value; int tmpHerosCount = 0; for (int k = 0; k < sg.LoginUser.UserCities[zhanl_row[i]].Heros.Length; k ) if ((string)sg.LoginUser.UserCities[zhanl_row[i]].Heros[k]["state"] == "0") { tmpHeros.Add(tmpHerosCount 1, Convert.ToInt32(sg.LoginUser.UserCities[zhanl_row[i]].Heros[k]["heroid"])); tmpHerosCount ; } for (int j = 1; j <= Convert.ToInt32(zhanlGrid.Rows[i].Cells[3].Value); j ) { sg.str = ""; tmpArmy.ArmyInfo["7"] = Convert.ToString(1); sg.Troop(4, sg.LoginUser.UserCities[zhanl_row[i]], T1, tmpHeros[j], tmpArmy, 0, false, 0, 0, 0, 0, 0); if (sg.str.IndexOf("出征成功") > -1) carrycount ; Mess1.AppendText(sg.str "\r\n"); Thread.Sleep(1000); } tmpHeros.Clear(); } return; } for (int i = 0; i < zhanl_row.Length; i ) { if (Convert.ToInt32(zhanlGrid.Rows[i].Cells[3].Value) == 0) continue; if (Convert.ToInt32(zhanlGrid.Rows[i].Cells[3].Value) > Convert.ToInt32(zhanlGrid.Rows[i].Cells[2].Value)) zhanlGrid.Rows[i].Cells[3].Value = zhanlGrid.Rows[i].Cells[2].Value; tmptime = (string)zhanlGrid.Rows[i].Cells[5].Value; long t1 = 0; if (tmptime.IndexOf(".") > -1) { t1 = Convert.ToInt64(tmptime.Substring(0, tmptime.IndexOf(".") - 1)) * 3600 * 24; tmptime = tmptime.Substring(tmptime.IndexOf(".") 1); string[] t = tmptime.Split(':'); t1=t1 Convert.ToInt32(t[0]) * 3600 Convert.ToInt32(t[1]) * 60 Convert.ToInt32(t[2]); } else { string[] t = tmptime.Split(':'); t1 = Convert.ToInt32(t[0]) * 3600 Convert.ToInt32(t[1]) * 60 Convert.ToInt32(t[2]); } timeoff = Convert.ToInt64(Sanguo.ConvertDateTimeInt(ArriveTime.AddSeconds(carrycount * 3600)) - Sanguo.ConvertDateTimeInt(DateTime.Now.AddSeconds(t1 timeoffSet))); if (timeoff < 0) { MessageBox.Show("不能在指定的时间到达指定的城池"); return; } int tmpHerosCount = 0; for (int k = 0; k < sg.LoginUser.UserCities[zhanl_row[i]].Heros.Length; k ) if ((string)sg.LoginUser.UserCities[zhanl_row[i]].Heros[k]["state"] == "0") { tmpHeros.Add(tmpHerosCount 1, Convert.ToInt32(sg.LoginUser.UserCities[zhanl_row[i]].Heros[k]["heroid"])); tmpHerosCount ; } for (int j = 1; j <= Convert.ToInt32(zhanlGrid.Rows[i].Cells[3].Value); j ) { sg.str = ""; timeoff = Convert.ToInt64(Sanguo.ConvertDateTimeInt(ArriveTime.AddSeconds(carrycount * 3600)) - Sanguo.ConvertDateTimeInt(DateTime.Now.AddSeconds(t1 timeoffSet))); if (SolderType.SelectedIndex == 1) tmpArmy.ArmyInfo["9"] = Convert.ToString(1); else tmpArmy.ArmyInfo["7"] = Convert.ToString(1); sg.Troop(4, sg.LoginUser.UserCities[zhanl_row[i]], T1, tmpHeros[j], tmpArmy, timeoff, false, 0, 0, 0, 0, 0); if (sg.str.IndexOf("出征成功") > -1) carrycount ; Mess1.AppendText(sg.str "\r\n"); Thread.Sleep(1000); } tmpHeros.Clear(); } } private void IsForever_CheckedChanged(object sender, EventArgs e) { if (IsForever.Checked) SolderType.Enabled = false; else SolderType.Enabled = true; } private void RefreshBtn3_Click(object sender, EventArgs e) { GrowTree.Nodes.Clear(); for (int i = 0; i < sg.LoginUser.UserCities.Length; i ) { TreeNode tmpNode = new TreeNode(sg.LoginUser.UserCities[i].name "(" sg.LoginUser.UserCities[i].Builders.Count.ToString() "建筑)"); GrowTree.Nodes.Add(tmpNode); bool IsGrow = false; foreach (var item in sg.LoginUser.UserCities[i].Builders.Values) { Sanguo.BuildInfo tmpBuildInfo = (item as Sanguo.BuildInfo); GrowTree.Nodes[i].Nodes.Add(tmpBuildInfo.bname tmpBuildInfo.level.ToString() "级"); if (tmpBuildInfo.level < 9) IsGrow = true; } if (IsGrow) GrowTree.Nodes[i].BackColor = Color.Red; } } private void GrowTree_AfterCheck(object sender, TreeViewEventArgs e) { if (e.Node.Checked) foreach(TreeNode node in e.Node.Nodes) node.Checked = true; else foreach (TreeNode node in e.Node.Nodes) node.Checked = false; } private void GrowBtn_Click(object sender, EventArgs e) { string[] tmpstr = new string[8]; for (int i = 0; i < GrowTree.Nodes.Count; i ) { bool IsParentOwn = false; foreach (var tmpKey in GrowTable.Keys) if (tmpKey == i) IsParentOwn = true; if (IsParentOwn == false) { List<object[]> tmpGrowList = new List<object[]>(); for (int j = 0; j < GrowTree.Nodes[i].Nodes.Count; j ) if (GrowTree.Nodes[i].Nodes[j].Checked) { int TargetLevel = Convert.ToInt32(GrowLevel.Value); Sanguo.BuildInfo tmpBuild = (sg.LoginUser.UserCities[i].Builders[j.ToString()] as Sanguo.BuildInfo); if (tmpBuild.level >= TargetLevel) continue; tmpstr[0] = sg.LoginUser.UserCities[i].name; tmpstr[1] = sg.LoginUser.UserCities[i].cityid.ToString(); tmpstr[2] = tmpBuild.bname; tmpstr[3] = Convert.ToString(tmpBuild.id); tmpstr[4] = Convert.ToString(tmpBuild.level); tmpstr[5] = Convert.ToString(GrowLevel.Value); tmpstr[6] = Convert.ToString(i); tmpstr[7] = Convert.ToString(j); GrowGrid.Rows.Add(tmpstr); object[] tmpObjcet = new object[] { j, tmpstr[2], tmpstr[3], tmpBuild.level, TargetLevel, true }; tmpGrowList.Add(tmpObjcet); } if (tmpGrowList.Count > 0) GrowTable.Add(i, tmpGrowList); } else for (int j = 0; j < GrowTree.Nodes[i].Nodes.Count; j ) { bool IsChildOwn = false; if (GrowTree.Nodes[i].Nodes[j].Checked) { for(int k=0;k<GrowTable[i].Count;k ) if (j == Convert.ToInt32(GrowTable[i][k][0])) { IsChildOwn = true; break; } if(IsChildOwn) continue; int TargetLevel = Convert.ToInt32(GrowLevel.Value); Sanguo.BuildInfo tmpBuild = (sg.LoginUser.UserCities[i].Builders[j.ToString()] as Sanguo.BuildInfo); if (tmpBuild.level >= TargetLevel) continue; tmpstr[0] = sg.LoginUser.UserCities[i].name; tmpstr[1] = sg.LoginUser.UserCities[i].cityid.ToString(); tmpstr[2] = tmpBuild.bname; tmpstr[3] = Convert.ToString(tmpBuild.id); tmpstr[4] = Convert.ToString(tmpBuild.level); tmpstr[5] = Convert.ToString(GrowLevel.Value); tmpstr[6] = Convert.ToString(i); tmpstr[7] = Convert.ToString(j); GrowGrid.Rows.Add(tmpstr); object[] tmpObjcet = new object[] { j, tmpstr[2], tmpstr[3], tmpBuild.level, TargetLevel, true }; GrowTable[i].Add(tmpObjcet); } } } } private void GrowStartBtn_Click(object sender, EventArgs e) { if (GrowGrid.Rows.Count < 1) { MessageBox.Show("请选择要升级的建筑物!"); return; } foreach (var tmpDict in GrowTable.Keys) { bool IsGrow = true; for (int j = 0; j < GrowCityBuildList.Count; j ) if (GrowCityBuildList[j] == tmpDict) { IsGrow = false; break; } if (IsGrow == false) continue; GrowCityBuildList.Add(tmpDict); AsyncEventHandler growBld = new AsyncEventHandler(GrowBuild); growBld.BeginInvoke(tmpDict, null, null); Thread.Sleep(500); } } public delegate void AsyncEventHandler(int DictKey); void GrowBuild(int DictKey) { int pCityId = sg.LoginUser.UserCities[DictKey].cityid; List<long> tmpTimeList = new List<long>(); int i = 0; bool IsGrowth = true; while (i < (GrowTable[DictKey] as List<object[]>).Count) { object[] tmpObject = sg.GetCityBuilding(pCityId); string tmpBuildType = Convert.ToString((GrowTable[DictKey] as List<object[]>)[i][1]); Sanguo.BuildInfo tmpBuilding = sg.LoginUser.UserCities[DictKey].Builders[Convert.ToString((GrowTable[DictKey] as List<object[]>)[i][0])] as Sanguo.BuildInfo; for (int j = 0; j < tmpObject.Length; j ) if (tmpBuilding.XY == Convert.ToInt32((tmpObject[j] as FluorineFx.ASObject)["xy"])) { (sg.LoginUser.UserCities[DictKey].Builders[Convert.ToString((GrowTable[DictKey] as List<object[]>)[i][0])] as Sanguo.BuildInfo).state = Convert.ToInt32((tmpObject[j] as FluorineFx.ASObject)["state"]); (GrowTable[DictKey] as List<object[]>)[i][3] = Convert.ToInt32((tmpObject[j] as FluorineFx.ASObject)["level"]); if ((GrowTable[DictKey] as List<object[]>)[i][3] == (GrowTable[DictKey] as List<object[]>)[i][4]) (GrowTable[DictKey] as List<object[]>)[i][5] = false; } else continue; for (int j = 0; j < (GrowTable[DictKey] as List<object[]>).Count; j ) { if (Convert.ToBoolean((GrowTable[DictKey] as List<object[]>)[i][5])) break; IsGrowth = false; } if (IsGrowth == false) { string end = "升级建筑结束!"; this.Invoke(new showInfo(GrowInfo), end); break; } if (Convert.ToBoolean((GrowTable[DictKey] as List<object[]>)[i][5]) == false) { i ; if (i == (GrowTable[DictKey] as List<object[]>).Count) { Thread.Sleep(10000); i = 0; } continue; } if ((sg.LoginUser.UserCities[DictKey].Builders[Convert.ToString((GrowTable[DictKey] as List<object[]>)[i][0])] as Sanguo.BuildInfo).state == 1) { i ; if (i == (GrowTable[DictKey] as List<object[]>).Count) { Thread.Sleep(1000); i = 0; } continue; } int IsInnerOrOut = 1; if (tmpBuildType.Equals("农田") || tmpBuildType.Equals("伐木场") || tmpBuildType.Equals("采石场") || tmpBuildType.Equals("铁矿")) IsInnerOrOut = 0; string GrowMessage = ""; Object[] tmpOb = sg.GetBuildingInfo(pCityId, tmpBuilding, IsInnerOrOut); bool IsResourceNeed = true; for (int j = 0; j < tmpOb.Length; j ) { if (Convert.ToInt64(sg.LoginUser.UserCities[DictKey].resources["food"]) - Convert.ToInt64(tmpOb[0]) < 0) IsResourceNeed = false; if (Convert.ToInt64(sg.LoginUser.UserCities[DictKey].resources["wood"]) - Convert.ToInt64(tmpOb[1]) < 0) IsResourceNeed = false; if (Convert.ToInt64(sg.LoginUser.UserCities[DictKey].resources["rock"]) - Convert.ToInt64(tmpOb[2]) < 0) IsResourceNeed = false; if (Convert.ToInt64(sg.LoginUser.UserCities[DictKey].resources["iron"]) - Convert.ToInt64(tmpOb[3]) < 0) IsResourceNeed = false; } string tmpstr = ""; if (IsResourceNeed == false) { GrowMessage = "升级建筑失败,失败原因:资源不足"; tmpstr = Convert.ToString(DateTime.Now) " " sg.LoginUser.UserCities[DictKey].name (GrowTable[DictKey] as List<object[]>)[i][1] (GrowTable[DictKey] as List<object[]>)[i][2] GrowMessage "\r\n"; this.Invoke(new showInfo(GrowInfo), tmpstr); i ; if (i == (GrowTable[DictKey] as List<object[]>).Count) { Thread.Sleep(10000); i = 0; } continue; } GrowMessage = sg.StartUpgradeBuilding(tmpBuilding, pCityId, IsInnerOrOut); tmpstr = Convert.ToString(DateTime.Now) " " sg.LoginUser.UserCities[DictKey].name (GrowTable[DictKey] as List<object[]>)[i][1] (GrowTable[DictKey] as List<object[]>)[i][2] GrowMessage "\r\n"; this.Invoke(new showInfo(GrowInfo), tmpstr); if (GrowMessage.Equals("升级成功!")) { tmpTimeList.Add(Convert.ToInt64(tmpOb[4])); i ; if (i == (GrowTable[DictKey] as List<object[]>).Count) i = 0; } else { if (tmpTimeList.Count == 0) { object[] tmpObje = sg.GetCityBuilding(sg.LoginUser.UserCities[DictKey].cityid); for (int j = 0; j < tmpObje.Length; j ) if (Convert.ToInt32((tmpObje[j] as FluorineFx.ASObject)["state"]) == 1) tmpTimeList.Add(Convert.ToInt64((tmpObje[j] as FluorineFx.ASObject)["state_timeleft"])); else continue; } long restTime = tmpTimeList.Min(); tmpTimeList.Remove(restTime); for (int j = 0; j < tmpTimeList.Count; j ) { tmpTimeList[j] = tmpTimeList[j] - restTime; if (tmpTimeList[j] == 0) tmpTimeList.Remove(0); } Thread.Sleep(Convert.ToInt32(restTime 1) * 1000); } Thread.Sleep(800); } } public delegate void showInfo(string growInfo); void GrowInfo(string Info) { Mess2.AppendText(Info); } private void sgForm_Load(object sender, EventArgs e) { if (!System.IO.Directory.Exists(@"C:\rxsg\html")) System.IO.Directory.CreateDirectory(@"C:\rxsg\html"); if (File.Exists(@"C:\rxsg\html\app1.html") && File.Exists(@"C:\rxsg\html\app.swf")) return; String sourcePath = System.Windows.Forms.Application.StartupPath "\\html"; String targetPath = "c:\\rxsg\\html"; string[] files = Directory.GetFiles(sourcePath); if (files.Length > 0) foreach (string s in files) File.Copy(s, targetPath s.Substring(s.LastIndexOf("\\"))); } public void CopyFiles(string varFromDirectory, string varToDirectory)//实现从一个目录下完整拷贝到另一个目录下。 { Directory.CreateDirectory(varToDirectory); string[] directories = Directory.GetDirectories(varFromDirectory);//取文件夹下所有文件夹名,放入数组; if (directories.Length > 0) foreach (string d in directories) { CopyFiles(d, varToDirectory d.Substring(d.LastIndexOf("\\")));//递归拷贝文件和文件夹 } string[] files = Directory.GetFiles(varFromDirectory);//取文件夹下所有文件名,放入数组; if (files.Length > 0) foreach (string s in files) File.Copy(s, varToDirectory s.Substring(s.LastIndexOf("\\"))); } private void zhenbefore_ValueChanged(object sender, EventArgs e) { long food_add = Convert.ToInt64(sg.LoginUser.UserCities[CityCom.SelectedIndex].resources["food_add"]); long food_army_use = Convert.ToInt64(sg.LoginUser.UserCities[CityCom.SelectedIndex].resources["food_army_use"]); long food_use = food_add - food_army_use; foodshchan.Text = Convert.ToString(food_use); if (food_use < 0) { carryfood.Text = Convert.ToString(Math.Ceiling(Math.Abs(food_use) * (zhengafter.Value zhenbefore.Value) / 3600)); } else carryfood.Text = "0"; } private void zhengafter_ValueChanged(object sender, EventArgs e) { long food_add = Convert.ToInt64(sg.LoginUser.UserCities[CityCom.SelectedIndex].resources["food_add"]); long food_army_use = Convert.ToInt64(sg.LoginUser.UserCities[CityCom.SelectedIndex].resources["food_army_use"]); long food_use = food_add - food_army_use; foodshchan.Text = Convert.ToString(food_use); if (food_use < 0) { carryfood.Text = Convert.ToString(Math.Ceiling(Math.Abs(food_use) * (zhengafter.Value zhenbefore.Value) / 3600)); } else carryfood.Text = "0"; } } }
好例子网口号:伸出你的我的手 — 分享!
网友评论
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)