Advertisement
Guest User

Untitled

a guest
Dec 15th, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.30 KB | None | 0 0
  1.  
  2.  
  3.  
  4. Nbc
  5.  
  6. #region FreezeWar
  7. case 52004:
  8. {
  9. switch (npcRequest.OptionID)
  10. {
  11. case 0:
  12. {
  13. dialog.Text("Freez War is a skill based team event. Hitting the enemy team will lock ");
  14. dialog.Text(" them in a block of ice. Hitting frozen team players will unfreeze them.. When ");
  15. dialog.Text("an entire team is frozen at the same time, they will lose the round. All");
  16. dialog.Text(" players are rewarded with ConquerPoints.");
  17. dialog.Text("First team who won 5 rounds will win or the team with the most points after 10 minutes.");
  18. dialog.Option("Sign~me~up", 1);
  19. dialog.Option("I`ll~think~it~over.", 255);
  20. dialog.Send();
  21.  
  22. break;
  23. }
  24. case 1:
  25. {
  26. if (!client.Spells.ContainsKey(1046) && !client.Spells.ContainsKey(1045) && !client.Spells.ContainsKey(11005))
  27. {
  28. dialog.Text("must eliminate the other. Only FastBlade/ScentSword spell first!");
  29. dialog.Option("I`ll~think~about~it.", 255);
  30. dialog.Send();
  31. return;
  32. }
  33. client.Player.RemoveFlag((ulong)MsgUpdate.Flags.Ride);
  34. client.Player.Hitpoints = 1;
  35. ushort x = Convert.ToUInt16(Kernel.Random.Next(71, 74));
  36. ushort y = Convert.ToUInt16(Kernel.Random.Next(71, 74));
  37. {
  38. client.Player.PKMode = Game.Enums.PKMode.PK;
  39. client.Send(new MsgAction(true)
  40. {
  41. UID = client.Player.UID,
  42. ID = MsgAction.Mode.ChangePKMode,
  43. dwParam = (uint)client.Player.PKMode
  44. });
  45. client.Player.Teleport(1505, x, y);
  46. }
  47. }
  48. break;
  49. }
  50. #endregion
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60. internal static void Create()
  61. {
  62. Game.Features.Tournaments.Add(TournamentType.FreezeWar, new FreezeWar(TournamentType.FreezeWar));
  63. }
  64.  
  65.  
  66.  
  67. Player
  68.  
  69.  
  70. public uint PDinamycID { get; set; }
  71. public uint DynamicID { get; set; }
  72. public Features.Tournaments.FreezeWar.Team.TeamType FreezeTeamType { get; set; }
  73.  
  74.  
  75.  
  76.  
  77. in class StatusFlagsBigVector32
  78.  
  79. public class StatusFlagsBigVector32 : Extensions.BitVector32
  80. {
  81. public const int PermanentFlag = 60 * 60 * 24 * 30;
  82.  
  83.  
  84.  
  85. GameMap
  86.  
  87. public uint ID { get; private set; }
  88. public GameMap(int width, int height, int m_id)
  89. {
  90. Clients = new ConcurrentDictionary<uint, Client.GameClient>();
  91. this.cells = new MapFlagType[width, height];
  92. this.bounds = new System.Drawing.Size(width, height);
  93.  
  94. this.ID = (uint)m_id;
  95. }
  96.  
  97. public uint GenerateDynamicID()
  98. {
  99. return DinamicIDS.Next;
  100. }
  101.  
  102. and
  103.  
  104. private bool Update = false;
  105. private Client.GameClient[] Users = new Client.GameClient[0];
  106. public Client.GameClient[] Values
  107. {
  108. get
  109. {
  110. if (Update)
  111. {
  112. Users = Clients.Values.ToArray();
  113. Update = false;
  114. }
  115. return Users;
  116. }
  117. set { }
  118. }
  119.  
  120.  
  121.  
  122. GameState
  123.  
  124. public unsafe void Send(ServerBase.Packet msg)
  125. {
  126. try
  127. {
  128. if (Fake || Socket.Alive == false)
  129. return;
  130.  
  131. Packet.Send(msg);
  132.  
  133. }
  134. catch (Exception e)
  135. {
  136. Console.WriteLine(e);
  137. }
  138. }
  139.  
  140.  
  141.  
  142.  
  143. and
  144.  
  145. public void CreateBoxDialog(string Text)
  146. {
  147. using (var rec = new ServerBase.Packet())
  148. {
  149. var stream = rec.GetStream();
  150.  
  151. Game.MsgNpc.Dialog dialog = new Game.MsgNpc.Dialog(this, stream);
  152. dialog.CreateMessageBox(Text).FinalizeDialog(true);
  153. }
  154. }
  155.  
  156.  
  157.  
  158.  
  159. Packet
  160.  
  161. private Packet stream;
  162. public Packet GetStream();
  163. public Packet();
  164.  
  165.  
  166. MsgTalk
  167.  
  168. public unsafe ServerBase.Packet GetArray(Packet stream, uint Rank = 0)
  169. {
  170. stream.InitWriter();
  171.  
  172. stream.Write(Extensions.Time32.Now.Value);//4
  173. stream.Write( this.Color);//8
  174. stream.Write((uint)this.ChatType);//12
  175.  
  176. stream.Write(MessageUID1);//16
  177. stream.Write(MessageUID2);//20
  178. stream.Write(Mesh);//24
  179. stream.Write((uint)Rank);//28
  180. stream.Write((byte)0);//32
  181. stream.Write((byte)0);
  182. stream.Write(_From, _To, string.Empty, __Message, string.Empty, string.Empty, ServerName);
  183. stream.Finalize(GamePackets.Chat);
  184. return stream;
  185.  
  186. }
  187.  
  188.  
  189. Player
  190.  
  191. public bool ContainFlag(Network.GamePackets.MsgUpdate.Flags Flag)
  192. {
  193. return BitVector.ContainFlag((int)Flag);
  194. }
  195.  
  196.  
  197. and
  198.  
  199. public void AddSpecialGarment(Packet stream, uint ID)
  200. {
  201. /* if (SpecialGarment == 0)
  202. {
  203. MsgGameItem gitem;
  204. if (Owner.Equipment.TryGetEquip(Flags.ConquerItem.Garment, out gitem))
  205. {
  206. Owner.Send(stream.ItemUsageCreate(MsgItemUsuagePacket.ItemUsuageID.Unequip, gitem.UID, (ushort)Flags.ConquerItem.Garment, 0, 0, 0, 0));
  207. }
  208. }
  209. else
  210. */
  211. // Owner.Send(stream.ItemUsageCreate(MsgItemUsuagePacket.ItemUsuageID.Unequip, uint.MaxValue - 1, (ushort)Flags.ConquerItem.Garment, 0, 0, 0, 0));
  212.  
  213. SpecialGarment = ID;
  214. GarmentId = SpecialGarment;
  215.  
  216.  
  217. Owner.Send(stream.ItemUsageCreate(ItemUsuagePacket.ItemUsuageID.Equip,uint.MaxValue -1,(ushort)Flags.ConquerItem.Garment, 0, 0, 0, 0));
  218.  
  219. Game.MsgServer.MsgGameItem item = new MsgGameItem();
  220. item.ITEM_ID = ID;
  221. item.Mode = Flags.ItemMode.AddItem;
  222. item.UID = uint.MaxValue - 1;
  223. item.Color = Flags.Color.Red;
  224. item.Position = (ushort)Flags.ConquerItem.Garment;
  225. item.Durability = Database.Server.ItemsBase[ID].Durability;
  226. item.Send(Owner, stream);
  227. Owner.Equipment.AppendItems(true, Owner.Equipment.CurentEquip, stream);
  228. View.SendView(GetArray(stream, false), false);
  229. }
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239. using System;
  240. using System.Collections.Generic;
  241. using System.Linq;
  242. using System.Text;
  243. using AurionConquer.Game.Attacking;
  244. using AurionConquer.ServerBase;
  245. using AurionConquer.Client;
  246. using System.Drawing;
  247. using AurionConquer.Network.GamePackets;
  248. using CO2_CORE_DLL.Map;
  249.  
  250. namespace AurionConquer.Game.Features.Tournaments
  251. {
  252. public class FreezeWar
  253. {
  254. public const uint MapID = 1505;
  255.  
  256. public class Team
  257. {
  258. public enum TeamType : byte
  259. {
  260. None = 0,
  261. Blue = 1,
  262. Red = 2
  263. }
  264.  
  265. public TeamType Type;
  266. public FreezeWar Freeze;
  267. public uint Score = 0;
  268. public Team(TeamType _type, FreezeWar _freeze)
  269. {
  270. Freeze = _freeze;
  271. Type = _type;
  272. }
  273. public Client.GameState[] Players()
  274. {
  275. return Freeze.Map.Values.Where(p => p.Player.DynamicID == Freeze.DinamicID
  276. && p.Player.Map == Freeze.Map.ID
  277. && p.Player.FreezeTeamType == Type && p.Socket.Alive).ToArray();
  278. }
  279. public int Count
  280. {
  281. get { return Players().Length; }
  282. }
  283. public bool FullFreeze()
  284. {
  285. var freezePlayers = Players().Where(p => p.Player.ContainFlag(Network.GamePackets.MsgUpdate.Flags.Freeze)).Count();
  286. return freezePlayers == Count;
  287. }
  288. public void TeleportPlayers(Client.GameState user)
  289. {
  290. switch (Type)
  291. {
  292. case TeamType.Blue:
  293. {
  294. user.Teleport(153, 105, 1505, Freeze.DinamicID);
  295. break;
  296. }
  297. case TeamType.Red:
  298. {
  299. user.Teleport(165, 245, 1505, Freeze.DinamicID);
  300. break;
  301. }
  302. }
  303. }
  304. public void AddPlayer(Packet stream, Client.GameState user)
  305. {
  306. user.Player.FreezeTeamType = Type;
  307. switch (Type)
  308. {
  309.  
  310. case TeamType.Blue:
  311. {
  312.  
  313. user.Player.AddSpecialGarment(stream, 185825);
  314. break;
  315. }
  316. case TeamType.Red:
  317. {
  318. user.Player.AddSpecialGarment(stream, 185625);
  319. break;
  320. }
  321. }
  322. user.Player.AddFlag(Network.GamePackets.MsgUpdate.Flags.Freeze,StatusFlagsBigVector32.PermanentFlag, true);
  323. }
  324.  
  325. }
  326. public ProcesType Process { get; set; }
  327. public DateTime StartTimer = new DateTime();
  328. public DateTime ScoreStamp = new DateTime();
  329. public DateTime InfoTimer = new DateTime();
  330. public GameMap Map;
  331. public uint DinamicID, Secounds = 0;
  332. //public KillerSystem KillSystem;
  333. public TournamentType Type { get; set; }
  334. public DateTime StampTeleport = new DateTime();
  335. public bool onTeleport = false;
  336. public FreezeWar(TournamentType _type)
  337. {
  338. Type = _type;
  339. Process = ProcesType.Dead;
  340. }
  341.  
  342.  
  343. public Team Team1;
  344. public Team Team2;
  345.  
  346. public void Open()
  347. {
  348. if (Process == ProcesType.Dead)
  349. {
  350. onTeleport = false;
  351. Team1 = new Team(Team.TeamType.Blue, this);
  352. Team2 = new Team(Team.TeamType.Red, this);
  353.  
  354. //KillSystem = new KillerSystem();
  355. Map = Database.Server.ServerMaps[MapID];
  356. DinamicID = Map.GenerateDynamicID();
  357. #if Arabic
  358. MsgSchedules.SendInvitation("FreezeWar", "ConquerPoints", 260, 135, 1002, 0, 60);
  359. #else
  360. Kernel.SendInvitation("FreezeWar", "ConquerPoints", 260, 135, 1002, 0, 60);
  361. #endif
  362.  
  363. StartTimer = DateTime.Now;
  364. InfoTimer = DateTime.Now;
  365. Secounds = 60;
  366. Process = ProcesType.Idle;
  367. }
  368. }
  369. public bool Join(Client.GameState user, Packet stream)
  370. {
  371. if (Process == ProcesType.Idle)
  372. {
  373. if (Team1.Count < Team2.Count)
  374. {
  375. Team1.AddPlayer(stream, user);
  376. Team1.TeleportPlayers(user);
  377. }
  378. else
  379. {
  380. Team2.AddPlayer(stream, user);
  381. Team2.TeleportPlayers(user);
  382. }
  383. return true;
  384. }
  385. return false;
  386. }
  387. public void CheckUp()
  388. {
  389. if (Process == ProcesType.Idle)
  390. {
  391. if (DateTime.Now > StartTimer.AddMinutes(1))
  392. {
  393. #if Arabic
  394. MsgSchedules.SendSysMesage("FreezeWar has started! signup are now closed.", MsgServer.MsgMessage.ChatMode.Center, MsgServer.MsgMessage.MsgColor.red);
  395. #else
  396. Kernel.SendWorldMessage(new MsgTalk("FreezeWar has started! signup are now closed.", Color.Red, MsgTalk.Center));
  397. #endif
  398.  
  399. Process = ProcesType.Alive;
  400. StartTimer = DateTime.Now;
  401.  
  402.  
  403. foreach (var user in Team1.Players())
  404. user.Player.RemoveFlag((ulong)(Network.GamePackets.MsgUpdate.Flags.Freeze));
  405. foreach (var user in Team2.Players())
  406. user.Player.RemoveFlag((ulong)(Network.GamePackets.MsgUpdate.Flags.Freeze));
  407. }
  408. else if (DateTime.Now > InfoTimer.AddSeconds(10))
  409. {
  410. Secounds -= 10;
  411. #if Arabic
  412. MsgSchedules.SendSysMesage("[FreezeWar] Fight starts in " + Secounds.ToString() + " Secounds.", MsgServer.MsgMessage.ChatMode.Center, MsgServer.MsgMessage.MsgColor.red);
  413.  
  414. #else
  415. Kernel.SendWorldMessage(new MsgTalk("[FreezeWar] Fight starts in " + Secounds.ToString() + " Secounds.", Color.Red, MsgTalk.Center));
  416.  
  417. #endif
  418. InfoTimer = DateTime.Now;
  419.  
  420. }
  421. }
  422. if (Process == ProcesType.Alive)
  423. {
  424. if (onTeleport)
  425. {
  426. if (DateTime.Now > StampTeleport)
  427. {
  428. foreach (var user in Team1.Players())
  429. {
  430. user.Player.RemoveFlag((ulong)(Network.GamePackets.MsgUpdate.Flags.Freeze));
  431. Team1.TeleportPlayers(user);
  432.  
  433. }
  434. foreach (var user in Team2.Players())
  435. {
  436. user.Player.RemoveFlag((ulong)(Network.GamePackets.MsgUpdate.Flags.Freeze));
  437. Team2.TeleportPlayers(user);
  438. }
  439. onTeleport = false;
  440. }
  441. }
  442. else
  443. {
  444. DateTime Now = DateTime.Now;
  445. if (Team1.FullFreeze())
  446. FinishRound(Team2);
  447. else if (Team2.FullFreeze())
  448. FinishRound(Team1);
  449.  
  450. if (Team1.Score == 5)
  451. {
  452. FinishTournament(Team1);
  453. return;
  454. }
  455. else if (Team2.Score == 5)
  456. {
  457. FinishTournament(Team2);
  458. return;
  459. }
  460. if (Team1.Count == 0)
  461. FinishTournament(Team2);
  462. else if (Team2.Count == 0)
  463. FinishTournament(Team1);
  464.  
  465. if (Now > StartTimer.AddMinutes(10))
  466. {
  467. if (Team1.Score > Team2.Score)
  468. {
  469. #if Arabic
  470. MsgSchedules.SendSysMesage("FreezeWar has ended." + Team1.Type.ToString() + " has won ! All Players of FreezeWar has teleported to TwinCity.", MsgServer.MsgMessage.ChatMode.Center, MsgServer.MsgMessage.MsgColor.red);
  471.  
  472. #else
  473. Kernel.SendWorldMessage(new MsgTalk("FreezeWar has ended." + Team1.Type.ToString() + " has won ! All Players of FreezeWar has teleported to TwinCity.", Color.Red, MsgTalk.Center));
  474.  
  475. #endif
  476. FinishTournament(Team1);
  477. }
  478. else if (Team2.Score >= Team1.Score)
  479. {
  480. #if Arabic
  481. MsgSchedules.SendSysMesage("FreezeWar has ended." + Team2.Type.ToString() + " All Players of FreezeWar has teleported to TwinCity.", MsgServer.MsgMessage.ChatMode.Center, MsgServer.MsgMessage.MsgColor.red);
  482.  
  483. #else
  484. Kernel.SendWorldMessage(new MsgTalk("FreezeWar has ended." + Team2.Type.ToString() + " All Players of FreezeWar has teleported to TwinCity.", Color.Red, MsgTalk.Center));
  485.  
  486. #endif
  487. FinishTournament(Team2);
  488. }
  489.  
  490.  
  491.  
  492. Process = ProcesType.Dead;
  493. }
  494.  
  495. if (Now > ScoreStamp)
  496. {
  497. using (var rec = Packet())
  498. {
  499. var stream = rec.GetStream();
  500. Network.GamePackets.MsgTalk msg = new Network.GamePackets.MsgTalk("FreezeWar: Time Left: " + FinishTimer() + "", System.Drawing.Color.Yellow, 2105);
  501. SendMapPacket(msg.GetArray(stream));
  502. if (Team1.Score >= Team2.Score)
  503. {
  504. msg = new Network.GamePackets.MsgTalk("BlueTeam Score: " + Team1.Score + "", System.Drawing.Color.Yellow, 2105);
  505. SendMapPacket(msg.GetArray(stream));
  506. msg = new Network.GamePackets.MsgTalk("RedTeam Score: " + Team2.Score + "", System.Drawing.Color.Yellow, 2105);
  507. SendMapPacket(msg.GetArray(stream));
  508. }
  509.  
  510. }
  511. ScoreStamp = Now.AddSeconds(4);
  512. }
  513. }
  514. }
  515. }
  516. public void SendMapPacket(ServerBase.Packet stream)
  517. {
  518. foreach (var user in MapPlayers())
  519. user.Send(stream);
  520. }
  521. public string FinishTimer()
  522. {
  523. TimeSpan Start = new TimeSpan(DateTime.Now.Ticks);
  524. TimeSpan Finish = new TimeSpan(StartTimer.AddMinutes(10).Ticks);
  525. string message = "" + (Finish.Minutes - Start.Minutes).ToString() + " : " + (Finish.Seconds - Start.Seconds).ToString() + "";
  526. return message;
  527. }
  528. public void FinishTournament(Team Winner)
  529. {
  530. Kernel.SendWorldMessage(new MsgTalk("FreezeWar has ended." + Winner.Type.ToString() + " All Players of FreezeWar has teleported to TwinCity.", Color.Red, MsgTalk.Talk));
  531.  
  532. foreach (var user in Winner.Players())
  533. {
  534. user.Player.Teleport(260, 135, 1002);
  535. user.Player.ConquerPoints += 1200;
  536. user.CreateBoxDialog("Your team won and received 1200 ConquerPoints.");
  537. }
  538. Team losser;
  539. if (Team1 == Winner)
  540. losser = Team2;
  541. else
  542. losser = Team1;
  543. foreach (var user in losser.Players())
  544. {
  545. user.Player.Teleport(260, 135, 1002);
  546. #if Arabic
  547. user.CreateBoxDialog("Your team lose : ( .Better luck next time.");
  548. #else
  549. user.CreateBoxDialog("Your team lose : ( .Better luck next time.");
  550. #endif
  551.  
  552. }
  553. Process = ProcesType.Dead;
  554. }
  555. public void FinishRound(Team winner)
  556. {
  557. onTeleport = true;
  558. StampTeleport = DateTime.Now.AddSeconds(5);
  559. winner.Score += 1;
  560. using (var rec = new Packet())
  561. {
  562. var stream = rec.GetStream();
  563. #if Arabic
  564. Game.MsgServer.MsgMessage msg = new MsgServer.MsgMessage("" + winner.Type.ToString() + " has won this round. The next round has started.", MsgServer.MsgMessage.MsgColor.red, MsgServer.MsgMessage.ChatMode.System);
  565. SendMapPacket(msg.GetArray(stream));
  566. msg = new MsgServer.MsgMessage("The next round will start in 5 seconds.", MsgServer.MsgMessage.MsgColor.red, MsgServer.MsgMessage.ChatMode.System);
  567. SendMapPacket(msg.GetArray(stream));
  568. #else
  569. Network.GamePackets.MsgTalk msg = new Network.GamePackets.MsgTalk("" + winner.Type.ToString() + " has won this round. The next round has started.", Color.Red, MsgTalk.Talk);
  570. SendMapPacket(msg.GetArray(stream));
  571. msg = new Network.GamePackets.MsgTalk("The next round will start in 5 seconds.", Color.Red, MsgTalk.Talk);
  572. SendMapPacket(msg.GetArray(stream));
  573. #endif
  574.  
  575. }
  576. foreach (var user in Team1.Players())
  577. user.Player.AddFlag(Network.GamePackets.MsgUpdate.Flags.Freeze, 10, false);
  578. foreach (var user in Team2.Players())
  579. user.Player.AddFlag(Network.GamePackets.MsgUpdate.Flags.Freeze, 10, false);
  580. }
  581. public bool InTournament(Client.GameState user)
  582. {
  583. if (Map == null)
  584. return false;
  585. return user.Map == Map.ID && user.Player.DynamicID == DinamicID;
  586. }
  587. public Client.GameState[] MapPlayers()
  588. {
  589. return Map.Values.Where(p => p.Player.DynamicID == DinamicID && p.Player.Map == MapID).ToArray();
  590. }
  591. }
  592. public enum TournamentType : byte
  593. {
  594. None = 0,
  595. FreezeWar = 10,
  596. }
  597. public enum ProcesType : byte
  598. {
  599. Alive = 1,
  600. Idle = 2,
  601. Dead = 3
  602. }
  603. }
  604.  
  605.  
  606.  
  607.  
  608.  
  609.  
  610. Handle
  611.  
  612. search
  613. public static bool CanUseSpell(SpellInformation spell, Client.GameState client)
  614.  
  615. under
  616.  
  617. if (Constants.SSFB.Contains(client.Player.FreezeWar))
  618. {
  619. if (client.Player.ContainsFlag((ulong)(MsgUpdate.Flags.XPList)))
  620. {
  621. client.Player.RemoveFlag((ulong)MsgUpdate.Flags.XPList);
  622. }
  623. if (spell.ID != 1045 && spell.ID != 1046 && spell.ID != 11005)//SS and FB only to attack!
  624. {
  625. client.Send("You have to use manual linear skills(FastBlade/ScentSword)");
  626. return false;
  627. }
  628. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement