Files
Main/Assets/Code/Logic/RedPointSystem/RedPointCondition.cs
2025-01-25 04:38:09 +08:00

464 lines
11 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using Thousandto.Cfg.Data;
using Thousandto.Code.Center;
namespace Thousandto.Code.Logic
{
//红点条件类型
public enum RedPointConditionType
{
Item, //物品
FightPower, //战斗力
Level, //玩家等级
Task, //完成任务
Variable, //某个变量
Custom, //自定义
XianPo, //仙魄
TaskSubmit, //提交任务
Equip, //装备对比
ChangeJob, //装备对比
Count
}
public interface RedPointConditionBase
{
int ID { get; }
RedPointConditionType Type { get; }
bool IsReach { get; }
}
//物品条件,判断物品数量是否满足
public class RedPointItemCondition : RedPointConditionBase
{
public int ItemID { get; private set; }
public long ItemCount { get; private set; }
public int CoinID { get; private set; }
public int Price { get; private set; }
public RedPointItemCondition(int itemID, long itemCount, int coinId = 0, int price = 0)
{
ItemID = itemID;
ItemCount = itemCount;
CoinID = coinId;
Price = price;
}
public int ID
{
get
{
return ItemID;
}
}
public RedPointConditionType Type
{
get
{
return RedPointConditionType.Item;
}
}
public bool IsReach
{
get
{
var haveCount = GameCenter.ItemContianerSystem.GetItemCountFromCfgId(ItemID);
if (haveCount >= ItemCount)
return true;
else
{
if (CoinID > 0)
{
var coinCount = GameCenter.ItemContianerSystem.GetItemCountFromCfgId(CoinID);
return coinCount >= (ItemCount - haveCount) * Price;
}
}
return false;
}
}
}
//战斗力条件,判断战斗力是否达成
public class RedPointFightPowerCondition : RedPointConditionBase
{
public int FightPower { get; private set; }
public RedPointFightPowerCondition(int fightPower)
{
FightPower = fightPower;
}
public int ID
{
get
{
return 0;
}
}
public RedPointConditionType Type
{
get
{
return RedPointConditionType.FightPower;
}
}
public bool IsReach
{
get
{
var lp = GameCenter.GameSceneSystem.GetLocalPlayer();
if (lp != null && lp.FightPower >= FightPower)
return true;
return false;
}
}
}
//等级条件,判断等级是否达成
public class RedPointLevelCondition : RedPointConditionBase
{
public int Level { get; private set; }
public RedPointLevelCondition(int level)
{
Level = level;
}
public int ID
{
get
{
return 0;
}
}
public RedPointConditionType Type
{
get
{
return RedPointConditionType.Level;
}
}
public bool IsReach
{
get
{
return GameCenter.GameSceneSystem.GetLocalPlayerLevel() >= Level;
}
}
}
//任务条件,判断任务是否完成
public class RedPointTaskCondition : RedPointConditionBase
{
private int _taskID = 0;
public RedPointTaskCondition(int taskID)
{
_taskID = taskID;
}
public RedPointTaskCondition(string taskIDs, char spitChar = '_')
{
var taskParams = taskIDs.Split(spitChar);
if(taskParams.Length >= 2)
{
var lp = GameCenter.GameSceneSystem.GetLocalPlayer();
int camp = 0;
//if(lp != null)
//{
// switch(lp.PropMoudle.BirthGroup)
// {
// case 1:
// camp = 0;
// break;
// case 2:
// camp = 1;
// break;
// }
//}
_taskID = int.Parse(taskParams[camp]);
}
}
public int ID
{
get
{
return 0;
}
}
public bool IsReach
{
get
{
return GameCenter.TaskManager.IsMainTaskOver(_taskID);
}
}
public RedPointConditionType Type
{
get
{
return RedPointConditionType.Task;
}
}
}
public class RedPointVariableCondition : RedPointConditionBase
{
private int _ID;
private int _value;
public RedPointVariableCondition(string need)
{
var needParams = need.Split('_');
if (needParams != null && needParams.Length >= 2)
{
int type = 0;
int value = 0;
if (int.TryParse(needParams[0], out type) && int.TryParse(needParams[1], out value))
{
_ID = type;
_value = value;
return;
}
}
_ID = FunctionVariableIdCode.PlayerLevel;
_value = -1;
}
public int ID
{
get
{
return 0;
}
}
public bool IsReach
{
get
{
return VariableSystem.IsVariableReach(_ID, _value);
}
}
public RedPointConditionType Type
{
get
{
return RedPointConditionType.Variable;
}
}
}
//自定义条件,由外部自定义达成情况
public class RedPointCustomCondition : RedPointConditionBase
{
public bool ShowRedPoint { get; private set; }
public RedPointCustomCondition(bool showRedPoint)
{
ShowRedPoint = showRedPoint;
}
public int ID
{
get
{
return 0;
}
}
public bool IsReach
{
get
{
return ShowRedPoint;
}
}
public RedPointConditionType Type
{
get
{
return RedPointConditionType.Custom;
}
}
}
//仙魄条件,判断仙魄数量是否满足
public class RedPointXianPoCondition : RedPointConditionBase
{
public int ItemID { get; private set; }
public long ItemCount { get; private set; }
public RedPointXianPoCondition(int itemID, long itemCount)
{
ItemID = itemID;
ItemCount = itemCount;
}
public int ID
{
get
{
return ItemID;
}
}
public RedPointConditionType Type
{
get
{
return RedPointConditionType.XianPo;
}
}
public bool IsReach
{
get
{
var haveCount = GameCenter.LuaSystem.Adaptor.GetXianPoCountByCfgId(ItemID);
if (haveCount >= ItemCount)
return true;
return false;
}
}
}
//任务可提交条件,判断任务是否可以提交
public class RedPointTaskSubmitCondition : RedPointConditionBase
{
public int TaskId { get; private set; }
public RedPointTaskSubmitCondition(int taskId)
{
TaskId = taskId;
}
public int ID
{
get
{
return TaskId;
}
}
public RedPointConditionType Type
{
get
{
return RedPointConditionType.TaskSubmit;
}
}
public bool IsReach
{
get
{
if(GameCenter.TaskManager.CanSubmitTask(TaskId) && GameCenter.TaskManager.GetBehaviorType(TaskId) != 0)
return true;
return false;
}
}
}
public static class CompaireType
{
public const int Dayu = 1;
public const int Xiaoyu = 2;
public const int DayuDengyu = 3;
public const int XiaoyuDengyu = 4;
public const int Dengyu = 5;
public const int Budengyu = 6;
}
//装备条件,判断是否有更好装备
public class RedPointEquipCondition : RedPointConditionBase
{
public long ItemCount { get; private set; }
public string ConditionKey { get; private set; }
public RedPointEquipCondition(int power = 0, int count = 1, int classLv = 0, int qua = 0, int quaType = 3, int degree = 0, int degType = 3,
int occ = -1, int occType = 5, int star=0, int starType = 3, string part = "-1")
{
if (occ == -1) {
var _lp = GameCenter.GameSceneSystem.GetLocalPlayer();
if (_lp != null)
occ = _lp.IntOcc;
else
UnityEngine.Debug.LogError("新建装备红点逻辑错误没找到lp");
}
ItemCount = count;
ConditionKey = string.Format("{0}_{1}_{2}_{3}_{4}_{5}_{6}_{7}_{8}_{9}_{10}", qua, quaType, degree, degType, occ, occType, star, starType, power, classLv, part);
}
public int ID
{
get
{
return 0;
}
}
public RedPointConditionType Type
{
get
{
return RedPointConditionType.Equip;
}
}
public bool IsReach
{
get
{
var haveCount = GameCenter.RedPointSystem.EquipConditionsReachCount(ConditionKey);
if (haveCount >= ItemCount)
return true;
return false;
}
}
}
//转职等级条件,判断转职等级是否达成
public class RedPointChangeJobCondition : RedPointConditionBase
{
public int Level { get; private set; }
public RedPointChangeJobCondition(int level)
{
Level = level;
}
public int ID
{
get
{
return 0;
}
}
public RedPointConditionType Type
{
get
{
return RedPointConditionType.ChangeJob;
}
}
public bool IsReach
{
get
{
var _lp = GameCenter.GameSceneSystem.GetLocalPlayer();
if (_lp != null)
return _lp.ChangeJobLevel >= Level;
return false;
}
}
}
}