|
should it look at it in PacketHandler.cs?
Can You Help Me Whats Wrong With This Code
private static void PickupItem(FloorItem floorItem, Client.GameState client)
{
if (client.Screen.TryGetFloorItem(floorItem.UID, out floorItem) && !client.Trade.InTrade)
{
if (client.Entity.X == floorItem.X && client.Entity.Y == floorItem.Y)
{
uint owner = floorItem.Owner.Entity.UID;
if ((owner != 0 && owner == client.Entity.UID) || owner == 0 || Time32.Now >= floorItem.OnFloor.AddSeconds(ServerBase.Constants. FloorItemAvailableAfter))
{
goto Jump;
}
else if (client.Team != null)
{
if (client.Team.IsTeammate(owner))
{
if (client.Team.PickupItems && floorItem.ValueType == FloorItem.FloorValueType.Item)
{
if (floorItem.ItemID != 1088000 && floorItem.ItemID != 1088001)
{
goto Jump;
}
}
else if (client.Team.PickupMoney && floorItem.ValueType != FloorItem.FloorValueType.Item)
{
goto Jump;
}
}
}
client.Send(ServerBase.Constants.FloorItemNotAvail able);
return;
Jump:
FloorItem pickupAnimation = new FloorItem(true);
if (floorItem.ValueType != FloorItem.FloorValueType.Item)
client.Map.RemoveFloorItem(floorItem);
pickupAnimation.Type = FloorItem.Animation;
pickupAnimation.UID = client.Entity.UID;
pickupAnimation.X = client.Entity.X;
pickupAnimation.Y = client.Entity.Y;
if (floorItem.PickedUpAlready)
return;
floorItem.PickedUpAlready = true;
switch (floorItem.ValueType)
{
case FloorItem.FloorValueType.Item:
{
if (client.Inventory.Count <= 39)
{
client.SendScreen(pickupAnimation, false);
if (floorItem.Item.MobDropped)
client.Inventory.Add(floorItem.Item, Game.Enums.ItemUse.CreateAndAdd);
else
client.Inventory.Add(floorItem.Item, Game.Enums.ItemUse.Add);
floorItem.Type = FloorItem.Remove;
client.RemoveScreenSpawn(floorItem, true);
client.Send(ServerBase.Constants.PickupItem(Databa se.ConquerItemInformation.BaseInformations[floorItem.Item.ID].Name));
}
else
client.Send(ServerBase.Constants.FullInventory);
break;
}
case FloorItem.FloorValueType.Money:
{
client.Send(ServerBase.Constants.PickupGold(floorI tem.Value));
client.SendScreen(pickupAnimation, false);
client.Entity.Money += floorItem.Value;
floorItem.Type = FloorItem.Remove;
client.RemoveScreenSpawn(floorItem, true);
break;
}
case FloorItem.FloorValueType.ConquerPoints:
{
client.Send(ServerBase.Constants.PickupConquerPoin ts(floorItem.Value));
client.SendScreen(pickupAnimation, false);
client.Entity.ConquerPoints += (uint)Math.Min(floorItem.Value, 30);
floorItem.Type = FloorItem.Remove;
client.RemoveScreenSpawn(floorItem, true);
break;
}
}
return;
}
}
}
private static void DropItem(ItemUsage itemUsage, Client.GameState client)
{
Interfaces.IConquerItem item = null;
if (client.Inventory.TryGetItem(itemUsage.UID, out item))
{
if (item.ID == 0)
return;
Database.ConquerItemInformation infos = new Database.ConquerItemInformation(item.ID, 0);
if (item.Lock != 0 || item.Suspicious)
return;
if (infos.BaseInformation.Type == Database.ConquerItemBaseInformation.ItemType.Dropa ble && !item.Bound)
{
ushort X = client.Entity.X, Y = client.Entity.Y;
if (client.Map.SelectCoordonates(ref X, ref Y))
{
FloorItem floorItem = new FloorItem(true);
floorItem.Item = item;
floorItem.ItemID = item.ID;
floorItem.ItemColor = item.Color;
floorItem.MapID = client.Map.ID;
floorItem.MapObjType = Game.MapObjectType.Item;
floorItem.X = X;
floorItem.Y = Y;
floorItem.Type = FloorItem.Drop;
floorItem.OnFloor = Time32.Now;
floorItem.UID = FloorItem.FloorUID.Next;
floorItem.Owner = client;
while (client.Map.Npcs.ContainsKey(floorItem.UID))
floorItem.UID = FloorItem.FloorUID.Next;
client.SendScreenSpawn(floorItem, true);
client.Map.AddFloorItem(floorItem);
ushort stack = item.StackSize;
item.StackSize = 0;
client.Inventory.Remove(item, Game.Enums.ItemUse.Remove);
item.StackSize = stack;
}
}
else
client.Inventory.Remove(item, Game.Enums.ItemUse.Delete);
}
}
|