Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Nbc
- #region FreezeWar
- case 52004:
- {
- switch (npcRequest.OptionID)
- {
- case 0:
- {
- dialog.Text("Freez War is a skill based team event. Hitting the enemy team will lock ");
- dialog.Text(" them in a block of ice. Hitting frozen team players will unfreeze them.. When ");
- dialog.Text("an entire team is frozen at the same time, they will lose the round. All");
- dialog.Text(" players are rewarded with ConquerPoints.");
- dialog.Text("First team who won 5 rounds will win or the team with the most points after 10 minutes.");
- dialog.Option("Sign~me~up", 1);
- dialog.Option("I`ll~think~it~over.", 255);
- dialog.Send();
- break;
- }
- case 1:
- {
- if (!client.Spells.ContainsKey(1046) && !client.Spells.ContainsKey(1045) && !client.Spells.ContainsKey(11005))
- {
- dialog.Text("must eliminate the other. Only FastBlade/ScentSword spell first!");
- dialog.Option("I`ll~think~about~it.", 255);
- dialog.Send();
- return;
- }
- client.Player.RemoveFlag((ulong)MsgUpdate.Flags.Ride);
- client.Player.Hitpoints = 1;
- ushort x = Convert.ToUInt16(Kernel.Random.Next(71, 74));
- ushort y = Convert.ToUInt16(Kernel.Random.Next(71, 74));
- {
- client.Player.PKMode = Game.Enums.PKMode.PK;
- client.Send(new MsgAction(true)
- {
- UID = client.Player.UID,
- ID = MsgAction.Mode.ChangePKMode,
- dwParam = (uint)client.Player.PKMode
- });
- client.Player.Teleport(1505, x, y);
- }
- }
- break;
- }
- #endregion
- internal static void Create()
- {
- Game.Features.Tournaments.Add(TournamentType.FreezeWar, new FreezeWar(TournamentType.FreezeWar));
- }
- Player
- public uint PDinamycID { get; set; }
- public uint DynamicID { get; set; }
- public Features.Tournaments.FreezeWar.Team.TeamType FreezeTeamType { get; set; }
- in class StatusFlagsBigVector32
- public class StatusFlagsBigVector32 : Extensions.BitVector32
- {
- public const int PermanentFlag = 60 * 60 * 24 * 30;
- GameMap
- public uint ID { get; private set; }
- public GameMap(int width, int height, int m_id)
- {
- Clients = new ConcurrentDictionary<uint, Client.GameClient>();
- this.cells = new MapFlagType[width, height];
- this.bounds = new System.Drawing.Size(width, height);
- this.ID = (uint)m_id;
- }
- public uint GenerateDynamicID()
- {
- return DinamicIDS.Next;
- }
- and
- private bool Update = false;
- private Client.GameClient[] Users = new Client.GameClient[0];
- public Client.GameClient[] Values
- {
- get
- {
- if (Update)
- {
- Users = Clients.Values.ToArray();
- Update = false;
- }
- return Users;
- }
- set { }
- }
- GameState
- public unsafe void Send(ServerBase.Packet msg)
- {
- try
- {
- if (Fake || Socket.Alive == false)
- return;
- Packet.Send(msg);
- }
- catch (Exception e)
- {
- Console.WriteLine(e);
- }
- }
- and
- public void CreateBoxDialog(string Text)
- {
- using (var rec = new ServerBase.Packet())
- {
- var stream = rec.GetStream();
- Game.MsgNpc.Dialog dialog = new Game.MsgNpc.Dialog(this, stream);
- dialog.CreateMessageBox(Text).FinalizeDialog(true);
- }
- }
- Packet
- private Packet stream;
- public Packet GetStream();
- public Packet();
- MsgTalk
- public unsafe ServerBase.Packet GetArray(Packet stream, uint Rank = 0)
- {
- stream.InitWriter();
- stream.Write(Extensions.Time32.Now.Value);//4
- stream.Write( this.Color);//8
- stream.Write((uint)this.ChatType);//12
- stream.Write(MessageUID1);//16
- stream.Write(MessageUID2);//20
- stream.Write(Mesh);//24
- stream.Write((uint)Rank);//28
- stream.Write((byte)0);//32
- stream.Write((byte)0);
- stream.Write(_From, _To, string.Empty, __Message, string.Empty, string.Empty, ServerName);
- stream.Finalize(GamePackets.Chat);
- return stream;
- }
- Player
- public bool ContainFlag(Network.GamePackets.MsgUpdate.Flags Flag)
- {
- return BitVector.ContainFlag((int)Flag);
- }
- and
- public void AddSpecialGarment(Packet stream, uint ID)
- {
- /* if (SpecialGarment == 0)
- {
- MsgGameItem gitem;
- if (Owner.Equipment.TryGetEquip(Flags.ConquerItem.Garment, out gitem))
- {
- Owner.Send(stream.ItemUsageCreate(MsgItemUsuagePacket.ItemUsuageID.Unequip, gitem.UID, (ushort)Flags.ConquerItem.Garment, 0, 0, 0, 0));
- }
- }
- else
- */
- // Owner.Send(stream.ItemUsageCreate(MsgItemUsuagePacket.ItemUsuageID.Unequip, uint.MaxValue - 1, (ushort)Flags.ConquerItem.Garment, 0, 0, 0, 0));
- SpecialGarment = ID;
- GarmentId = SpecialGarment;
- Owner.Send(stream.ItemUsageCreate(ItemUsuagePacket.ItemUsuageID.Equip,uint.MaxValue -1,(ushort)Flags.ConquerItem.Garment, 0, 0, 0, 0));
- Game.MsgServer.MsgGameItem item = new MsgGameItem();
- item.ITEM_ID = ID;
- item.Mode = Flags.ItemMode.AddItem;
- item.UID = uint.MaxValue - 1;
- item.Color = Flags.Color.Red;
- item.Position = (ushort)Flags.ConquerItem.Garment;
- item.Durability = Database.Server.ItemsBase[ID].Durability;
- item.Send(Owner, stream);
- Owner.Equipment.AppendItems(true, Owner.Equipment.CurentEquip, stream);
- View.SendView(GetArray(stream, false), false);
- }
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using AurionConquer.Game.Attacking;
- using AurionConquer.ServerBase;
- using AurionConquer.Client;
- using System.Drawing;
- using AurionConquer.Network.GamePackets;
- using CO2_CORE_DLL.Map;
- namespace AurionConquer.Game.Features.Tournaments
- {
- public class FreezeWar
- {
- public const uint MapID = 1505;
- public class Team
- {
- public enum TeamType : byte
- {
- None = 0,
- Blue = 1,
- Red = 2
- }
- public TeamType Type;
- public FreezeWar Freeze;
- public uint Score = 0;
- public Team(TeamType _type, FreezeWar _freeze)
- {
- Freeze = _freeze;
- Type = _type;
- }
- public Client.GameState[] Players()
- {
- return Freeze.Map.Values.Where(p => p.Player.DynamicID == Freeze.DinamicID
- && p.Player.Map == Freeze.Map.ID
- && p.Player.FreezeTeamType == Type && p.Socket.Alive).ToArray();
- }
- public int Count
- {
- get { return Players().Length; }
- }
- public bool FullFreeze()
- {
- var freezePlayers = Players().Where(p => p.Player.ContainFlag(Network.GamePackets.MsgUpdate.Flags.Freeze)).Count();
- return freezePlayers == Count;
- }
- public void TeleportPlayers(Client.GameState user)
- {
- switch (Type)
- {
- case TeamType.Blue:
- {
- user.Teleport(153, 105, 1505, Freeze.DinamicID);
- break;
- }
- case TeamType.Red:
- {
- user.Teleport(165, 245, 1505, Freeze.DinamicID);
- break;
- }
- }
- }
- public void AddPlayer(Packet stream, Client.GameState user)
- {
- user.Player.FreezeTeamType = Type;
- switch (Type)
- {
- case TeamType.Blue:
- {
- user.Player.AddSpecialGarment(stream, 185825);
- break;
- }
- case TeamType.Red:
- {
- user.Player.AddSpecialGarment(stream, 185625);
- break;
- }
- }
- user.Player.AddFlag(Network.GamePackets.MsgUpdate.Flags.Freeze,StatusFlagsBigVector32.PermanentFlag, true);
- }
- }
- public ProcesType Process { get; set; }
- public DateTime StartTimer = new DateTime();
- public DateTime ScoreStamp = new DateTime();
- public DateTime InfoTimer = new DateTime();
- public GameMap Map;
- public uint DinamicID, Secounds = 0;
- //public KillerSystem KillSystem;
- public TournamentType Type { get; set; }
- public DateTime StampTeleport = new DateTime();
- public bool onTeleport = false;
- public FreezeWar(TournamentType _type)
- {
- Type = _type;
- Process = ProcesType.Dead;
- }
- public Team Team1;
- public Team Team2;
- public void Open()
- {
- if (Process == ProcesType.Dead)
- {
- onTeleport = false;
- Team1 = new Team(Team.TeamType.Blue, this);
- Team2 = new Team(Team.TeamType.Red, this);
- //KillSystem = new KillerSystem();
- Map = Database.Server.ServerMaps[MapID];
- DinamicID = Map.GenerateDynamicID();
- #if Arabic
- MsgSchedules.SendInvitation("FreezeWar", "ConquerPoints", 260, 135, 1002, 0, 60);
- #else
- Kernel.SendInvitation("FreezeWar", "ConquerPoints", 260, 135, 1002, 0, 60);
- #endif
- StartTimer = DateTime.Now;
- InfoTimer = DateTime.Now;
- Secounds = 60;
- Process = ProcesType.Idle;
- }
- }
- public bool Join(Client.GameState user, Packet stream)
- {
- if (Process == ProcesType.Idle)
- {
- if (Team1.Count < Team2.Count)
- {
- Team1.AddPlayer(stream, user);
- Team1.TeleportPlayers(user);
- }
- else
- {
- Team2.AddPlayer(stream, user);
- Team2.TeleportPlayers(user);
- }
- return true;
- }
- return false;
- }
- public void CheckUp()
- {
- if (Process == ProcesType.Idle)
- {
- if (DateTime.Now > StartTimer.AddMinutes(1))
- {
- #if Arabic
- MsgSchedules.SendSysMesage("FreezeWar has started! signup are now closed.", MsgServer.MsgMessage.ChatMode.Center, MsgServer.MsgMessage.MsgColor.red);
- #else
- Kernel.SendWorldMessage(new MsgTalk("FreezeWar has started! signup are now closed.", Color.Red, MsgTalk.Center));
- #endif
- Process = ProcesType.Alive;
- StartTimer = DateTime.Now;
- foreach (var user in Team1.Players())
- user.Player.RemoveFlag((ulong)(Network.GamePackets.MsgUpdate.Flags.Freeze));
- foreach (var user in Team2.Players())
- user.Player.RemoveFlag((ulong)(Network.GamePackets.MsgUpdate.Flags.Freeze));
- }
- else if (DateTime.Now > InfoTimer.AddSeconds(10))
- {
- Secounds -= 10;
- #if Arabic
- MsgSchedules.SendSysMesage("[FreezeWar] Fight starts in " + Secounds.ToString() + " Secounds.", MsgServer.MsgMessage.ChatMode.Center, MsgServer.MsgMessage.MsgColor.red);
- #else
- Kernel.SendWorldMessage(new MsgTalk("[FreezeWar] Fight starts in " + Secounds.ToString() + " Secounds.", Color.Red, MsgTalk.Center));
- #endif
- InfoTimer = DateTime.Now;
- }
- }
- if (Process == ProcesType.Alive)
- {
- if (onTeleport)
- {
- if (DateTime.Now > StampTeleport)
- {
- foreach (var user in Team1.Players())
- {
- user.Player.RemoveFlag((ulong)(Network.GamePackets.MsgUpdate.Flags.Freeze));
- Team1.TeleportPlayers(user);
- }
- foreach (var user in Team2.Players())
- {
- user.Player.RemoveFlag((ulong)(Network.GamePackets.MsgUpdate.Flags.Freeze));
- Team2.TeleportPlayers(user);
- }
- onTeleport = false;
- }
- }
- else
- {
- DateTime Now = DateTime.Now;
- if (Team1.FullFreeze())
- FinishRound(Team2);
- else if (Team2.FullFreeze())
- FinishRound(Team1);
- if (Team1.Score == 5)
- {
- FinishTournament(Team1);
- return;
- }
- else if (Team2.Score == 5)
- {
- FinishTournament(Team2);
- return;
- }
- if (Team1.Count == 0)
- FinishTournament(Team2);
- else if (Team2.Count == 0)
- FinishTournament(Team1);
- if (Now > StartTimer.AddMinutes(10))
- {
- if (Team1.Score > Team2.Score)
- {
- #if Arabic
- 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);
- #else
- Kernel.SendWorldMessage(new MsgTalk("FreezeWar has ended." + Team1.Type.ToString() + " has won ! All Players of FreezeWar has teleported to TwinCity.", Color.Red, MsgTalk.Center));
- #endif
- FinishTournament(Team1);
- }
- else if (Team2.Score >= Team1.Score)
- {
- #if Arabic
- MsgSchedules.SendSysMesage("FreezeWar has ended." + Team2.Type.ToString() + " All Players of FreezeWar has teleported to TwinCity.", MsgServer.MsgMessage.ChatMode.Center, MsgServer.MsgMessage.MsgColor.red);
- #else
- Kernel.SendWorldMessage(new MsgTalk("FreezeWar has ended." + Team2.Type.ToString() + " All Players of FreezeWar has teleported to TwinCity.", Color.Red, MsgTalk.Center));
- #endif
- FinishTournament(Team2);
- }
- Process = ProcesType.Dead;
- }
- if (Now > ScoreStamp)
- {
- using (var rec = Packet())
- {
- var stream = rec.GetStream();
- Network.GamePackets.MsgTalk msg = new Network.GamePackets.MsgTalk("FreezeWar: Time Left: " + FinishTimer() + "", System.Drawing.Color.Yellow, 2105);
- SendMapPacket(msg.GetArray(stream));
- if (Team1.Score >= Team2.Score)
- {
- msg = new Network.GamePackets.MsgTalk("BlueTeam Score: " + Team1.Score + "", System.Drawing.Color.Yellow, 2105);
- SendMapPacket(msg.GetArray(stream));
- msg = new Network.GamePackets.MsgTalk("RedTeam Score: " + Team2.Score + "", System.Drawing.Color.Yellow, 2105);
- SendMapPacket(msg.GetArray(stream));
- }
- }
- ScoreStamp = Now.AddSeconds(4);
- }
- }
- }
- }
- public void SendMapPacket(ServerBase.Packet stream)
- {
- foreach (var user in MapPlayers())
- user.Send(stream);
- }
- public string FinishTimer()
- {
- TimeSpan Start = new TimeSpan(DateTime.Now.Ticks);
- TimeSpan Finish = new TimeSpan(StartTimer.AddMinutes(10).Ticks);
- string message = "" + (Finish.Minutes - Start.Minutes).ToString() + " : " + (Finish.Seconds - Start.Seconds).ToString() + "";
- return message;
- }
- public void FinishTournament(Team Winner)
- {
- Kernel.SendWorldMessage(new MsgTalk("FreezeWar has ended." + Winner.Type.ToString() + " All Players of FreezeWar has teleported to TwinCity.", Color.Red, MsgTalk.Talk));
- foreach (var user in Winner.Players())
- {
- user.Player.Teleport(260, 135, 1002);
- user.Player.ConquerPoints += 1200;
- user.CreateBoxDialog("Your team won and received 1200 ConquerPoints.");
- }
- Team losser;
- if (Team1 == Winner)
- losser = Team2;
- else
- losser = Team1;
- foreach (var user in losser.Players())
- {
- user.Player.Teleport(260, 135, 1002);
- #if Arabic
- user.CreateBoxDialog("Your team lose : ( .Better luck next time.");
- #else
- user.CreateBoxDialog("Your team lose : ( .Better luck next time.");
- #endif
- }
- Process = ProcesType.Dead;
- }
- public void FinishRound(Team winner)
- {
- onTeleport = true;
- StampTeleport = DateTime.Now.AddSeconds(5);
- winner.Score += 1;
- using (var rec = new Packet())
- {
- var stream = rec.GetStream();
- #if Arabic
- 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);
- SendMapPacket(msg.GetArray(stream));
- msg = new MsgServer.MsgMessage("The next round will start in 5 seconds.", MsgServer.MsgMessage.MsgColor.red, MsgServer.MsgMessage.ChatMode.System);
- SendMapPacket(msg.GetArray(stream));
- #else
- Network.GamePackets.MsgTalk msg = new Network.GamePackets.MsgTalk("" + winner.Type.ToString() + " has won this round. The next round has started.", Color.Red, MsgTalk.Talk);
- SendMapPacket(msg.GetArray(stream));
- msg = new Network.GamePackets.MsgTalk("The next round will start in 5 seconds.", Color.Red, MsgTalk.Talk);
- SendMapPacket(msg.GetArray(stream));
- #endif
- }
- foreach (var user in Team1.Players())
- user.Player.AddFlag(Network.GamePackets.MsgUpdate.Flags.Freeze, 10, false);
- foreach (var user in Team2.Players())
- user.Player.AddFlag(Network.GamePackets.MsgUpdate.Flags.Freeze, 10, false);
- }
- public bool InTournament(Client.GameState user)
- {
- if (Map == null)
- return false;
- return user.Map == Map.ID && user.Player.DynamicID == DinamicID;
- }
- public Client.GameState[] MapPlayers()
- {
- return Map.Values.Where(p => p.Player.DynamicID == DinamicID && p.Player.Map == MapID).ToArray();
- }
- }
- public enum TournamentType : byte
- {
- None = 0,
- FreezeWar = 10,
- }
- public enum ProcesType : byte
- {
- Alive = 1,
- Idle = 2,
- Dead = 3
- }
- }
- Handle
- search
- public static bool CanUseSpell(SpellInformation spell, Client.GameState client)
- under
- if (Constants.SSFB.Contains(client.Player.FreezeWar))
- {
- if (client.Player.ContainsFlag((ulong)(MsgUpdate.Flags.XPList)))
- {
- client.Player.RemoveFlag((ulong)MsgUpdate.Flags.XPList);
- }
- if (spell.ID != 1045 && spell.ID != 1046 && spell.ID != 11005)//SS and FB only to attack!
- {
- client.Send("You have to use manual linear skills(FastBlade/ScentSword)");
- return false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement