Sheep Raid ( Event Manager only) [Release]

05/16/2018 23:00 Zanouu#1
[Only registered and activated users can see links. Click Here To Register...]
Code:
using OpenNos.Core;
using OpenNos.Domain;
using OpenNos.GameObject.Helpers;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reactive.Linq;
using System.Threading;
using OpenNos.GameObject.Networking;

namespace OpenNos.GameObject.Event.GAMES
{
	public static class Sheep
	{
		#region Methods

		public static void GenerateSheepGames()
		{
			Thread.Sleep(5 * 1000);
			ServerManager.Instance.Broadcast(UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("SHEEP_STARTED"), 1));
			ServerManager.Instance.Broadcast("qnaml 4 #guri^514 Veux-tu participer au raid de la Ferme des moutons ?");
			ServerManager.Instance.EventInWaiting = true;
			Thread.Sleep(30 * 1000);
			ServerManager.Instance.Sessions.Where(s => s.Character?.IsWaitingForEventSheep == false).ToList().ForEach(s => s.SendPacket("esf 1"));
			ServerManager.Instance.EventInWaiting = false;

			IEnumerable<ClientSession> sessions = ServerManager.Instance.Sessions.Where(s => s.Character?.IsWaitingForEventSheep == true && s.Character.MapInstance.MapInstanceType == MapInstanceType.BaseMapInstance);
			List<Tuple<MapInstance, byte>> maps = new List<Tuple<MapInstance, byte>>();
			MapInstance map = ServerManager.GenerateMapInstance(2009, MapInstanceType.EventSheepInstance, new InstanceBag());
			maps.Add(new Tuple<MapInstance, byte>(map, 1));
			if (map != null)
			{
				foreach (ClientSession sess in sessions)
				{
					ServerManager.Instance.TeleportOnRandomPlaceInMap(sess, map.MapInstanceId);
					sess.SendPacket("bsinfo 2 4 0 0");
				}
				ServerManager.Instance.Sessions.Where(s => s.Character != null).ToList().ForEach(s => s.Character.IsWaitingForEventSheep = false);
				ServerManager.Instance.StartedEvents.Remove(EventType.SHEEP);

			}

			foreach (Tuple<MapInstance, byte> mapinstance in maps)
			{

				if (mapinstance.Item1.Sessions.Count() < 1)
				{
					mapinstance.Item1.Broadcast(UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("INSTANTBATTLE_NOT_ENOUGH_PLAYERS"), 0));
					EventHelper.Instance.ScheduleEvent(TimeSpan.FromSeconds(5), new EventContainer(mapinstance.Item1, EventActionType.DISPOSEMAP, null));
					continue;
				}
				SheepThread task = new SheepThread();
				Observable.Timer(TimeSpan.FromSeconds(10)).Subscribe(X => task.Run(map));
			}
		}



		#endregion

		#region Classes

		public class SheepThread
		{

			public bool Spawn { get; set; }

			#region Members

			private MapInstance _map;

			#endregion

			#region Methods

			public void Run(MapInstance map)
			{
				_map = map;

				foreach (ClientSession session in _map.Sessions)
				{
					ServerManager.Instance.TeleportOnRandomPlaceInMap(session, map.MapInstanceId);
					if (session.Character.IsVehicled)
					{
						session.Character.RemoveVehicle();
					}
					if (session.Character.UseSp)
					{
						session.Character.LastSp = (DateTime.Now - Process.GetCurrentProcess().StartTime.AddSeconds(-50)).TotalSeconds;
						ItemInstance specialist = session.Character.Inventory.LoadBySlotAndType((byte)EquipmentType.Sp, InventoryType.Wear);
						if (specialist != null)
						{
							removeSP(session, specialist.ItemVNum);
						}
					}
					Spawn = true;
					session.Character.CanAttack = true;
					session.Character.Speed = 5;
					session.Character.IsVehicled = true;
					session.Character.IsCustomSpeed = true;
					session.Character.Morph = 1009;
					session.Character.ArenaWinner = 0;
					session.Character.MorphUpgrade = 0;
					session.Character.MorphUpgrade2 = 0;
					session.SendPacket(session.Character.GenerateCond());
					session.Character.LastSpeedChange = DateTime.Now;
					session.CurrentMapInstance?.Broadcast(session.Character.GenerateCMode());
					session.SendPacket($"eff_s 1 {session.Character.CharacterId} 4323");
					_map.Broadcast("srlst 0");
					session.SendPacket("say 1 -1 10 Dans 30 secondes Le raid de la Ferme des moutons commence bientôt.");
					Observable.Timer(TimeSpan.FromSeconds(30)).Subscribe(o =>
					{
						session.SendPacket("say 1 -1 10 Dans 10 secondes Le raid de la Ferme des moutons commence bientôt.");
					});
					Observable.Timer(TimeSpan.FromSeconds(35)).Subscribe(o =>
					{
						session.SendPacket("say 1 -1 10 Dans 5 secondes Le raid de la Ferme des moutons commence bientôt.");
					});
					Observable.Timer(TimeSpan.FromSeconds(36)).Subscribe(o =>
					{
						session.SendPacket("say 1 -1 10 Dans 4 secondes Le raid de la Ferme des moutons commence bientôt.");
					});
					Observable.Timer(TimeSpan.FromSeconds(37)).Subscribe(o =>
					{
						session.SendPacket("say 1 -1 10 Dans 3 secondes Le raid de la Ferme des moutons commence bientôt.");
					});
					Observable.Timer(TimeSpan.FromSeconds(38)).Subscribe(o =>
					{
						session.SendPacket("say 1 -1 10 Dans 2 secondes Le raid de la Ferme des moutons commence bientôt.");
					});
					Observable.Timer(TimeSpan.FromSeconds(39)).Subscribe(o =>
					{
						session.SendPacket("say 1 -1 10 Dans 1 secondes Le raid de la Ferme des moutons commence bientôt.");

					});
					Observable.Timer(TimeSpan.FromSeconds(50)).Subscribe(o =>
					{
						_map.Broadcast("srlst 3");
						_map.Broadcast("sh_o");
					});
					Observable.Timer(TimeSpan.FromMinutes(5)).Subscribe(o =>
					{

						End(session.Character);
					});
				}

				int i = 0;

				while (_map?.Sessions?.Any() == true)
				{
					runRound(i++);					
				}

				//ended
			}

			private static IEnumerable<Tuple<short, int, short, short>> generateDrop(Map map, short vnum, int amountofdrop, int amount)
			{
				List<Tuple<short, int, short, short>> dropParameters = new List<Tuple<short, int, short, short>>();
				for (int i = 0; i < amountofdrop; i++)
				{
					MapCell cell = map.GetRandomPosition();
					dropParameters.Add(new Tuple<short, int, short, short>(vnum, amount, cell.X, cell.Y));
				}
				return dropParameters;
			}

			private static void removeSP(ClientSession session, short vnum)
			{
				if (session?.HasSession == true && !session.Character.IsVehicled)
				{
					List<BuffType> bufftodisable = new List<BuffType> { BuffType.Bad, BuffType.Good, BuffType.Neutral };
					session.Character.DisableBuffs(BuffType.All);
					//session.Character.EquipmentBCards.RemoveAll(s => s.ItemVNum.Equals(vnum));
					session.Character.UseSp = false;
					session.Character.LoadSpeed();
					session.SendPacket(session.Character.GenerateCond());
					session.SendPacket(session.Character.GenerateLev());
					session.Character.SpCooldown = 30;
					if (session.Character.SkillsSp != null)
					{
						foreach (CharacterSkill ski in session.Character.SkillsSp.Where(s => !s.CanBeUsed()))
						{
							short time = ski.Skill.Cooldown;
							double temp = (ski.LastUse - DateTime.Now).TotalMilliseconds + (time * 100);
							temp /= 1000;
							session.Character.SpCooldown = temp > session.Character.SpCooldown ? (int)temp : session.Character.SpCooldown;
						}
					}
					session.SendPacket(session.Character.GenerateSay(string.Format(Language.Instance.GetMessageFromKey("STAY_TIME"), session.Character.SpCooldown), 11));
					session.SendPacket($"sd {session.Character.SpCooldown}");
					session.CurrentMapInstance?.Broadcast(session.Character.GenerateCMode());
					session.CurrentMapInstance?.Broadcast(UserInterfaceHelper.GenerateGuri(6, 1, session.Character.CharacterId), session.Character.PositionX, session.Character.PositionY);

					// ms_c
					session.SendPacket(session.Character.GenerateSki());
					session.SendPackets(session.Character.GenerateQuicklist());
					session.SendPacket(session.Character.GenerateStat());
					session.SendPacket(session.Character.GenerateStatChar());

					Observable.Timer(TimeSpan.FromMilliseconds(session.Character.SpCooldown * 1000)).Subscribe(o =>
					{
						session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("TRANSFORM_DISAPPEAR"), 11));
						session.SendPacket("sd 0");
					});
				}
			}

			private void End(Character character)
			{
				character.IsWaitingForGift = true;
				character.Point = 0;
				character.Point2 = 0;
				character.Point3 = 0;
				character.CanAttack = false;
				character.IsCustomSpeed = false;
				character.RemoveVehicle();
				Spawn = false;
				_map.Broadcast("srlst 4");
				_map.Broadcast("srlst 1");
			}

			private void runRound(int number)
			{
				int amount = 120 + (60 * number);

				int i = amount;
				while (i != 0)
				{
					SpawnSheep(number);
					Thread.Sleep(60000 / amount);
					i--;
				}
				Thread.Sleep(70 * 100);
			}

			private void SpawnSheep(int round)
			{
				if (_map != null)
				{
					if (Spawn == true)
					{
						MapCell cell = _map.Map.GetRandomPosition();

						int SheepId = _map.GetNextMonsterId();

						MapMonster sheep = new MapMonster { MonsterVNum = 9, MapX = cell.X, MapY = cell.Y, MapMonsterId = SheepId, IsHostile = false, IsMoving = true, ShouldRespawn = false };
						sheep.Initialize(_map);
						sheep.NoAggresiveIcon = true;
						_map.AddMonster(sheep);
						_map.Broadcast(sheep.GenerateIn());
					}
				}
			}

			#endregion
		}

		#endregion
	}
}
" PS : On achète pas nos sources Nous ! "

ENJOY :pimp:
05/16/2018 23:55 Blowa#2
Quote:
Originally Posted by Zanouu View Post
[Only registered and activated users can see links. Click Here To Register...]
" PS : On achète pas nos sources Nous ! "

ENJOY :pimp:
Well done m8, implementation could be improved but its a nice start :).

Thanks for your release, leechers will be able to suck it.
05/17/2018 00:07 redbull2905#3
It's funny that you talk about sucking Plowa and very ironic
05/17/2018 01:58 Glooby21#4
very nice @[Only registered and activated users can see links. Click Here To Register...] why you doesnt have a donation link?

regards Glooby21
07/18/2018 19:09 DeadBoy83#5
I do not understand how the script works. Can you explain it to me?
07/18/2018 19:23 Zanouu#6
" Script " ???

Is a Sheep Manager ( For Mini-game Sheep )
08/12/2018 21:09 AzoTheOriginal#7
How can i use it?
08/12/2018 23:58 Saber none#8
Quote:
Originally Posted by AzoTheOriginal View Post
How can i use it?
put it into the namespace OpenNos.GameObject.Event.GAMES :O
I am not sure if you need to create a new class, but even if you would need to do so its pretty easy to copy and paste xD