You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
4.7 KiB
130 lines
4.7 KiB
3 years ago
|
using System;
|
||
|
|
||
|
namespace ET
|
||
|
{
|
||
|
[FriendClass(typeof(Item))]
|
||
|
public static class StoreHelper
|
||
|
{
|
||
|
public static async ETTask<int> GetStore(Unit unit)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
M2C_GetStore resp = await unit.ZoneScene().GetComponent<SessionComponent>().Session.Call(new C2M_GetStore{}) as M2C_GetStore;
|
||
|
if (resp.Error != ErrorCode.ERR_Success)
|
||
|
{
|
||
|
Log.Error(resp.Error.ToString());
|
||
|
return resp.Error;
|
||
|
}
|
||
|
|
||
|
StoreComponent component = unit.GetOrAddComponent<StoreComponent>();
|
||
|
component.Dispose();
|
||
|
component = unit.GetOrAddComponent<StoreComponent>();
|
||
|
foreach (var v in resp.Store)
|
||
|
{
|
||
|
var item = new Item();
|
||
|
item.FromMessage(v);
|
||
|
component.Add(item.ConfigId,item.Amount,item.Id);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
catch (Exception e)
|
||
|
{
|
||
|
Console.WriteLine(e);
|
||
|
throw;
|
||
|
}
|
||
|
await ETTask.CompletedTask;
|
||
|
return ErrorCode.ERR_Success;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 获取指定合成表内指定ID道具的目前最大可制作数量
|
||
|
/// </summary>
|
||
|
/// <param name="unit"></param>
|
||
|
/// <param name="synthesisId"></param>
|
||
|
/// <returns></returns>
|
||
|
public static int GetMaximumSythesisNum(Unit unit, int synthesisId)
|
||
|
{
|
||
|
if (synthesisId <= 0) return 0;
|
||
|
var sc = unit.GetComponent<StoreComponent>();
|
||
|
SynthesisConfig config = SynthesisConfigCategory.Instance.Get(synthesisId);
|
||
|
int result = 0;
|
||
|
for(int i = 0; i < config.ItemId.Length; i++)
|
||
|
{
|
||
|
int subMatId = config.ItemId[i];
|
||
|
int subRequire = config.ItemNum[i];
|
||
|
long curStoreRemain = sc.GetItemNum(subMatId);
|
||
|
int makableNum = (int)(curStoreRemain / subRequire);
|
||
|
result = i == 0 ? makableNum : Math.Min(result, makableNum);
|
||
|
}
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
public static async ETTask<int> UseItem(Unit unit, int configId, int amount, long id = 0)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
Log.Debug("UseItem:" + configId);
|
||
|
M2C_UseItem resp = await unit.ZoneScene().GetComponent<SessionComponent>().Session
|
||
|
.Call(new C2M_UseItem() { ConfigId = configId, Amount = amount ,Id = id}) as M2C_UseItem;
|
||
|
if (resp.Error != ErrorCode.ERR_Success)
|
||
|
{
|
||
|
Log.Error(resp.Error.ToString());
|
||
|
return resp.Error;
|
||
|
}
|
||
|
StoreOperate.UseItem(unit, configId, amount, id);
|
||
|
}
|
||
|
catch (Exception e)
|
||
|
{
|
||
|
Console.WriteLine(e);
|
||
|
throw;
|
||
|
}
|
||
|
|
||
|
await ETTask.CompletedTask;
|
||
|
return ErrorCode.ERR_Success;
|
||
|
}
|
||
|
|
||
|
public static async ETTask<int> DropItem(Unit unit, int configId, int amount)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
M2C_DropItem resp = await unit.ZoneScene().GetComponent<SessionComponent>().Session.Call(new C2M_DropItem(){ ConfigId = configId, Amount = amount}) as M2C_DropItem;
|
||
|
if (resp.Error != ErrorCode.ERR_Success)
|
||
|
{
|
||
|
Log.Error(resp.Error.ToString());
|
||
|
return resp.Error;
|
||
|
}
|
||
|
StoreOperate.DropItem(unit, configId, amount);
|
||
|
}
|
||
|
catch (Exception e)
|
||
|
{
|
||
|
Console.WriteLine(e);
|
||
|
throw;
|
||
|
}
|
||
|
await ETTask.CompletedTask;
|
||
|
return ErrorCode.ERR_Success;
|
||
|
}
|
||
|
|
||
|
public static async ETTask<int> UseSaplingItem(Unit unit, int itemId, float posX, float posY)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
M2C_UseSaplingItem resp = await unit.ZoneScene().GetComponent<SessionComponent>().Session.Call(new C2M_UseSaplingItem(){ ItemId = itemId, X = posX, Y = posY}) as M2C_UseSaplingItem;
|
||
|
if (resp.Error != ErrorCode.ERR_Success)
|
||
|
{
|
||
|
Log.Error(resp.Error.ToString());
|
||
|
return resp.Error;
|
||
|
}
|
||
|
|
||
|
var res = StoreOperate.UseSaplingItem(unit, itemId, posX, posY);
|
||
|
Game.EventSystem.Publish(new EventType.AfterCreateResource(){Unit = unit, Resource = res});
|
||
|
}
|
||
|
catch (Exception e)
|
||
|
{
|
||
|
Console.WriteLine(e);
|
||
|
throw;
|
||
|
}
|
||
|
|
||
|
return ErrorCode.ERR_Success;
|
||
|
}
|
||
|
}
|
||
|
}
|