using System;
using System.Collections.Generic;
using System.IO;
namespace Conquer_Online_Server.Database
{
public class MonsterInformation
{
private struct SpecialItemDrop
{
public int ItemID, Rate, Discriminant, Map;
}
private static List<SpecialItemDrop> SpecialItemDropList = new List<SpecialItemDrop>();
public Game.Entity Owner;
public uint ExcludeFromSend = 0;
private bool LabirinthDrop = false;
public uint ID;
public ushort Mesh;
public byte Level;
public string Name;
public uint Hitpoints;
public ushort ViewRange;
public ushort AttackRange;
public int RespawnTime;
public uint MinAttack, MaxAttack;
public byte AttackType;
public ushort SpellID;
public uint InSight;
public bool Boss, SuperBoss;
public Time32 LastMove;
public int MoveSpeed;
public int RunSpeed;
public int OwnItemID, OwnItemRate;
public int HPPotionID, MPPotionID;
public int AttackSpeed;
public int MinimumSpeed
{
get
{
int min = 10000000;
if (min > MoveSpeed)
min = MoveSpeed;
if (min > RunSpeed)
min = RunSpeed;
if (min > AttackSpeed)
min = AttackSpeed;
return min;
}
}
public uint ExtraExperience;
public uint MinMoneyDropAmount;
public uint MaxMoneyDropAmount;
public ushort BoundX, BoundY;
public ushort BoundCX, BoundCY;
public static SafeDictionary<byte, List<uint>> ItemDropCache = new SafeDictionary<byte, List<uint>>(3000);
public static SafeDictionary<byte, List<uint>> SoulItemCache = new SafeDictionary<byte, List<uint>>(3000);
public void SendScreen(byte[] buffer)
{
foreach (Client.GameState client in Program.Values)
{
if (client != null)
{
if (client.Entity.UID != ExcludeFromSend)
{
if (ServerBase.Kernel.GetDistance(client.Entity.X, client.Entity.Y, Owner.X, Owner.Y) > 18)
{
continue;
}
client.Send(buffer);
}
}
}
}
public void SendScreen(Interfaces.IPacket buffer)
{
SendScreen(buffer.ToArray());
}
public void SendScreenSpawn(Interfaces.IMapObject _object)
{
foreach (Client.GameState client in Program.Values)
{
if (client != null)
{
if (client.Entity.UID != ExcludeFromSend)
{
if (client.Map.ID == Owner.MapID)
{
if (ServerBase.Kernel.GetDistance(client.Entity.X, client.Entity.Y, Owner.X, Owner.Y) > 25)
{
continue;
}
_object.SendSpawn(client, false);
}
}
}
}
}
public void Drop(Game.Entity killer)
{
#region Cps Drop
if (Game.Entity.ChanceSuccess(10000000))
{
killer.ConquerPoints += 5;
killer.Owner.Send(new Network.GamePackets.Message("Has Matado al Monstruo y has conseguido 5CPs!", System.Drawing.Color.Yellow, 2005));
}
#endregion
if (Name == "SnowBanshee")
{
byte times = (byte)ServerBase.Kernel.Random.Next(1, 3);
byte ref_times = (byte)ServerBase.Kernel.Random.Next(1, 6);
for (byte i = 0; i < times; i++)
{
uint Uid = 0;
byte type = (byte)ServerBase.Kernel.Random.Next(1, 21);
switch (type)
{
case 1: Uid = 822052; break;
case 2: Uid = 822053; break;
case 3: Uid = 822054; break;
case 4: Uid = 822055; break;
case 5: Uid = 800413; break;
case 6: Uid = 800414; break;
case 7: Uid = 800014; break;
case 8: Uid = 800015; break;
case 9: Uid = 800016; break;
case 10: Uid = 800512; break;
case 11: Uid = 800613; break;
case 12: Uid = 800415; break;
case 13: Uid = 800420; break;
case 14: Uid = 800513; break;
case 15: Uid = 800017; break;
case 16: Uid = 820052; break;
case 17: Uid = 820053; break;
case 18: Uid = 820054; break;
case 19: Uid = 820055; break;
case 20: Uid = 820056; break;
}
if (Uid != 0)
{
ushort X = Owner.X, Y = Owner.Y;
Game.Map Map = ServerBase.Kernel.Maps[Owner.MapID];
if (Map.SelectCoordonates(ref X, ref Y))
{
Network.GamePackets.FloorItem floorItem = new Network.GamePackets.FloorItem(true);
floorItem.Item = new Network.GamePackets.ConquerItem(true);
floorItem.Item.Color = (Conquer_Online_Server.Game.Enums.Color)ServerBase .Kernel.Random.Next(4, 8);
floorItem.Item.ID = Uid;
floorItem.Item.MaximDurability = floorItem.Item.Durability = 65535;
floorItem.Item.UID = Network.GamePackets.ConquerItem.ItemUID.Next;
floorItem.ValueType = Network.GamePackets.FloorItem.FloorValueType.Item;
floorItem.ItemID = Uid;
floorItem.MapID = Owner.MapID;
floorItem.MapObjType = Game.MapObjectType.Item;
floorItem.X = X;
floorItem.Y = Y;
floorItem.Type = Network.GamePackets.FloorItem.Drop;
floorItem.OnFloor = Time32.Now;
floorItem.ItemColor = floorItem.Item.Color;
floorItem.UID = Network.GamePackets.FloorItem.FloorUID.Next;
while (Map.Npcs.ContainsKey(floorItem.UID))
floorItem.UID = Network.GamePackets.FloorItem.FloorUID.Next;
Map.AddFloorItem(floorItem);
SendScreenSpawn(floorItem);
}
}
}
}
if (Name == "LavaBeast")
{
byte times = (byte)ServerBase.Kernel.Random.Next(1, 3);
byte ref_times = (byte)ServerBase.Kernel.Random.Next(1, 6);
for (byte i = 0; i < times; i++)
{
uint Uid = 0;
byte type = (byte)ServerBase.Kernel.Random.Next(1, 21);
switch (type)
{
case 1: Uid = 720666; break;
case 2: Uid = 720662; break;
case 3: Uid = 720667; break;
case 4: Uid = 720685; break;
case 5: Uid = 720666; break;
case 6: Uid = 720662; break;
case 7: Uid = 720667; break;
case 8: Uid = 720685; break;
case 9: Uid = 720685; break;
case 10: Uid = 720685; break;
}
if (Uid != 0)
{
ushort X = Owner.X, Y = Owner.Y;
Game.Map Map = ServerBase.Kernel.Maps[Owner.MapID];
if (Map.SelectCoordonates(ref X, ref Y))
{
Network.GamePackets.FloorItem floorItem = new Network.GamePackets.FloorItem(true);
floorItem.Item = new Network.GamePackets.ConquerItem(true);
floorItem.Item.Color = (Conquer_Online_Server.Game.Enums.Color)ServerBase .Kernel.Random.Next(4, 8);
floorItem.Item.ID = Uid;
floorItem.Item.MaximDurability = floorItem.Item.Durability = 65535;
floorItem.Item.UID = Network.GamePackets.ConquerItem.ItemUID.Next;
floorItem.ValueType = Network.GamePackets.FloorItem.FloorValueType.Item;
floorItem.ItemID = Uid;
floorItem.MapID = Owner.MapID;
floorItem.MapObjType = Game.MapObjectType.Item;
floorItem.X = X;
floorItem.Y = Y;
floorItem.Type = Network.GamePackets.FloorItem.Drop;
floorItem.OnFloor = Time32.Now;
floorItem.ItemColor = floorItem.Item.Color;
floorItem.UID = Network.GamePackets.FloorItem.FloorUID.Next;
while (Map.Npcs.ContainsKey(floorItem.UID))
floorItem.UID = Network.GamePackets.FloorItem.FloorUID.Next;
Map.AddFloorItem(floorItem);
SendScreenSpawn(floorItem);
}
}
}
}
if (Name == "TeratoDragon")
{
byte times = (byte)ServerBase.Kernel.Random.Next(1, 3);
byte ref_times = (byte)ServerBase.Kernel.Random.Next(1, 6);
for (byte i = 0; i < times; i++)
{
uint Uid = 0;
byte type = (byte)ServerBase.Kernel.Random.Next(1, 21);
switch (type)
{
case 1: Uid = 822052; break;
case 2: Uid = 822053; break;
case 3: Uid = 822054; break;
case 4: Uid = 822055; break;
case 5: Uid = 800413; break;
case 6: Uid = 800414; break;
case 7: Uid = 800014; break;
case 8: Uid = 800015; break;
case 9: Uid = 800016; break;
case 10: Uid = 800512; break;
case 11: Uid = 800613; break;
case 12: Uid = 800415; break;
case 13: Uid = 800420; break;
case 14: Uid = 800513; break;
case 15: Uid = 800017; break;
case 16: Uid = 820052; break;
case 17: Uid = 820053; break;
case 18: Uid = 820054; break;
case 19: Uid = 820055; break;
case 20: Uid = 820056; break;
case 21: Uid = 820057; break;
case 22: Uid = 723006; break;
}
if (Uid != 0)
{
ushort X = Owner.X, Y = Owner.Y;
Game.Map Map = ServerBase.Kernel.Maps[Owner.MapID];
if (Map.SelectCoordonates(ref X, ref Y))
{
Network.GamePackets.FloorItem floorItem = new Network.GamePackets.FloorItem(true);
floorItem.Item = new Network.GamePackets.ConquerItem(true);
floorItem.Item.Color = (Conquer_Online_Server.Game.Enums.Color)ServerBase .Kernel.Random.Next(4, 8);
floorItem.Item.ID = Uid;
floorItem.Item.MaximDurability = floorItem.Item.Durability = 65535;
floorItem.Item.UID = Network.GamePackets.ConquerItem.ItemUID.Next;
floorItem.ValueType = Network.GamePackets.FloorItem.FloorValueType.Item;
floorItem.ItemID = Uid;
floorItem.MapID = Owner.MapID;
floorItem.MapObjType = Game.MapObjectType.Item;
floorItem.X = X;
floorItem.Y = Y;
floorItem.Type = Network.GamePackets.FloorItem.Drop;
floorItem.OnFloor = Time32.Now;
floorItem.ItemColor = floorItem.Item.Color;
floorItem.UID = Network.GamePackets.FloorItem.FloorUID.Next;
while (Map.Npcs.ContainsKey(floorItem.UID))
floorItem.UID = Network.GamePackets.FloorItem.FloorUID.Next;
Map.AddFloorItem(floorItem);
SendScreenSpawn(floorItem);
}
}
}
}
if (Owner.Name.Contains("Guard"))
return;
if (SuperBoss)
{
int num = ServerBase.Kernel.Random.Next(5);
for (int c = 0; c < num; c++)
{
var infos = Database.ConquerItemInformation.BaseInformations[720028];
ushort X = Owner.X, Y = Owner.Y;
Game.Map Map = ServerBase.Kernel.Maps[Owner.MapID];
if (Map.SelectCoordonates(ref X, ref Y))
{
Network.GamePackets.FloorItem floorItem = new Network.GamePackets.FloorItem(true);
floorItem.Item = new Network.GamePackets.ConquerItem(true);
floorItem.Item.Color = (Conquer_Online_Server.Game.Enums.Color)ServerBase .Kernel.Random.Next(4, 8);
floorItem.Item.ID = 720028;
floorItem.Item.MaximDurability = infos.Durability;
floorItem.Item.MobDropped = true;
if (!Network.PacketHandler.IsEquipment(720028) && infos.ConquerPointsWorth == 0)
{
floorItem.Item.StackSize = 1;
floorItem.Item.MaxStackSize = infos.StackSize;
}
floorItem.ValueType = Network.GamePackets.FloorItem.FloorValueType.Item;
floorItem.ItemID = (uint)720028;
floorItem.MapID = Owner.MapID;
floorItem.MapObjType = Game.MapObjectType.Item;
floorItem.X = X;
floorItem.Y = Y;
floorItem.Type = Network.GamePackets.FloorItem.Drop;
floorItem.OnFloor = Time32.Now;
floorItem.ItemColor = floorItem.Item.Color;
floorItem.UID = Network.GamePackets.FloorItem.FloorUID.Next;
while (Map.Npcs.ContainsKey(floorItem.UID))
floorItem.UID = Network.GamePackets.FloorItem.FloorUID.Next;
Map.AddFloorItem(floorItem);
SendScreenSpawn(floorItem);
}
}
for (int c = 0; c < num / 2; c++)
{
var infos = Database.ConquerItemInformation.BaseInformations[1088000];
ushort X = Owner.X, Y = Owner.Y;
Game.Map Map = ServerBase.Kernel.Maps[Owner.MapID];
if (Map.SelectCoordonates(ref X, ref Y))
{
Network.GamePackets.FloorItem floorItem = new Network.GamePackets.FloorItem(true);
floorItem.Item = new Network.GamePackets.ConquerItem(true);
floorItem.Item.Color = (Conquer_Online_Server.Game.Enums.Color)ServerBase .Kernel.Random.Next(4, 8);
floorItem.Item.ID = (uint)1088000;
floorItem.Item.MaximDurability = infos.Durability;
floorItem.Item.MobDropped = true;
if (!Network.PacketHandler.IsEquipment(1088000) && infos.ConquerPointsWorth == 0)
{
floorItem.Item.StackSize = 1;
floorItem.Item.MaxStackSize = infos.StackSize;
}
floorItem.ValueType = Network.GamePackets.FloorItem.FloorValueType.Item;
floorItem.ItemID = (uint)1088000;
floorItem.MapID = Owner.MapID;
floorItem.MapObjType = Game.MapObjectType.Item;
floorItem.X = X;
floorItem.Y = Y;
floorItem.Type = Network.GamePackets.FloorItem.Drop;
floorItem.OnFloor = Time32.Now;
floorItem.ItemColor = floorItem.Item.Color;
floorItem.UID = Network.GamePackets.FloorItem.FloorUID.Next;
while (Map.Npcs.ContainsKey(floorItem.UID))
floorItem.UID = Network.GamePackets.FloorItem.FloorUID.Next;
Map.AddFloorItem(floorItem);
SendScreenSpawn(floorItem);
}
}
int times = 50;
byte lvl = Owner.Level;
if (LabirinthDrop)
lvl = 20;
List<uint> itemdroplist = ItemDropCache[lvl];
if (Boss || SuperBoss)
itemdroplist = SoulItemCache[lvl];
retry:
times--;
int generateItemId = ServerBase.Kernel.Random.Next(itemdroplist.Count);
uint id = itemdroplist[generateItemId];
first of all i duno what base you working on so i can't shoot in the dark to tell you to add it
but simply search for the following
killer.ConquerPoints += 10;
if you found many try to figure out which is the cp drop >.>
then simply change it to
killer.ConquerPoints += 1000;
Normally a question-thread isn't closed just because it has been solved, as it can help other members in the future, and people don't like to go into closed threads that much; yet if you really want a thread to be closed, or a post to be deleted, please use the search function so that we -Moderators- can get an instant notification. Thank you.
Normally a question-thread isn't closed just because it has been solved, as it can help other members in the future, and people don't like to go into closed threads that much; yet if you really want a thread to be closed, or a post to be deleted, please use the search function so that we -Moderators- can get an instant notification. Thank you.
Well, I guess I can't go against that. You have a point, so perhaps keep threads open, unless they are going against the rules or anything.
[5375] Why Item drop stop working? 03/09/2012 - CO2 Private Server - 2 Replies i got a problem, idk why but items drop stop working, only work if Guards kill monsters.
how can i fix that?
well I had fix that, but while item drop is fixed I cant make drop cps per monster
[HELP] Drop CPS on 5375 11/13/2011 - CO2 Private Server - 18 Replies Hi all.
How i can put more cps on drop of monsters on my sourcer 5375?
Anyone can help me?
Thx.
[5375] Why Item drop stop working? 10/20/2011 - CO2 Private Server - 2 Replies i got a problem, idk why but items\ drop stop working, only work if Guards kill monsters.
how can i fix that?
[5375] Why Item drop stop working? 10/15/2011 - CO2 Programming - 1 Replies i got a problem, idk why but items drop stop working, only work if Guards kill monsters.
how can i fix that?
DarkCity||Drop 100 cps ||5375 ||vps ||Features a powerful|| Log in now|| 08/23/2011 - CO2 PServer Archive - 23 Replies http://www.saudinokia.com/vb/images/uploads/30283_ 97674744056d2e99e.gif
http://i251.photobucket.com/albums/gg305/LaShiNOOO OO/For%20Topics/11wf2mf3.gif
server 5375
Dark City
UpDate 5518 Soon
http://i251.photobucket.com/albums/gg305/LaShiNOO OOO/For%20Topics/af6ef6b5db.gif
Features
http://www.saudinokia.com/vb/images/uploads/30283_ 3175547440c570f2ad.gif
http://img842.imageshack.us/img842/6414/whalutyv. png