#pragma once class CAnimal; //这个类是技能的目标选择条件的类,为了不把技能的类扩大很多,把目标选择方面的 //代码放在这里,主要是判断技能是否生效 class CSkillCondition { public: //目标选择的条件 typedef bool (CSkillCondition::*TargetSelCondition)(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value ); //技能的训练和使用的条件 typedef INT_PTR (CSkillCondition::*SkillUseTrainCondition)(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume ); /* * Comments: 检测条件是否满足 * Param CAnimal * pSrcEntity: 施法者 * Param CAnimal * pTargetEntity:被施法者 * Param TARGETSELCONDITION & value: 技能的配置值 * bool needConsume: 是否要消耗,如果是,那么就消耗,否则不消耗 * @Return bool: 如果能够选中就返回true,否则返回false */ bool Check( CAnimal * pSrcEntity,CAnimal *pTargetEntity,TARGETSELCONDITION &value); /* * Comments:检测玩家的使用和训练的条件 * Param CActor * pActor:玩家的指针 * Param SKILLTRAINSPELLCONDITION & contition: 条件 * @Return INT_PTR:返回错误码 */ INT_PTR CheckUseTrainContion(CAnimal * pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume ); /* * Comments:检测玩家的技能施法条件 * Param CActor * pActor:玩家的指针 * Param SKILLTRAINSPELLCONDITION & contition: 条件 * @Return INT_PTR:返回错误码 */ INT_PTR CheckSpellContion(CAnimal * pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume); /* * Comments:检测玩家的技能升级条件 * Param CActor * pActor:玩家的指针 * Param SKILLTRAINSPELLCONDITION & contition: 条件 * @Return INT_PTR:返回错误码 */ INT_PTR CheckUpGradeContion(CAnimal * pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume); //错误的id inline bool IsError(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value) { return false; } //目标为敌人 inline bool IsEnermy(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //目标为友方 inline bool IsFriendly(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //目标为自己 inline bool IsSelf(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //目标为队伍成员 inline bool IsTeammate(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //目标为怪物 inline bool IsMonster(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //目标为玩家 inline bool IsActor(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //标等级 >= value, inline bool LevelAbove(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //目标等级 <= value inline bool LevelBelow(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //pk值低于数值,整数 inline bool PkBelow(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //pk值高于数值 ,整数 inline bool PkAbove(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //随机概率,5000表示百分之50概率,单位万分之1 inline bool Probalility(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //死亡 inline bool IsDeath(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //可攻击 inline bool CanAttack(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //就是自己的等级减目标的等级小于等于这个数值 inline bool LevelDisBelow(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); bool CircleDisBelow(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); bool RevertCircleDisBelow(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //就是目标的等级减自己的等级小于等于这个数值 inline bool RevertLevelDisBelow (CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //和目标的距离大于这个值 inline bool DistanceLarge(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //目标存在buff // value1=buff类型 , value2 =buff的组 inline bool WithBuff(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //目标不存在buff inline bool WithoutBuff(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); // 驯服成功 inline bool TrainOk(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //体力高于百分比,整数,用万分数表示,6000表示60% inline bool HpAbove(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //体力低于百分比,整数,用万分数表示,6000表示60% inline bool HpBelow(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //活力高于百分比,整数,用万分数表示,6000表示60% inline bool MpAbove(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); // 活力低于百分比 ,整数,用万分数表示,6000表示60% inline bool MpBelow (CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); // 帮派相同,value as bool inline bool SameGuild (CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //需要面向目标 inline bool FaceTarget(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //和目标的方向一致 inline bool TargetOneDir(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //是特定id的怪物 inline bool IsSpecialMonster(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //自身的hp比率高于一定的比率 inline bool SelfHpRateAbove(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //自身的hp比率低于一定的比例 inline bool SelfHpRateBelow(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //阵营相同 inline bool SelSameCamp(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //和自己是结拜的关系 inline bool SelfIsBrother(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //是自己的主人 inline bool IsMaster(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //是特定种类的怪物 inline bool IsSpecialTypeMonster(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //最大魔法攻击>= 一个值 inline bool IsMagicAttackMaxAbove(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //最大魔法攻击< 一个值 inline bool IsMagicAttackMaxBelow(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //最大道术攻击>= 一个值 inline bool IsWizardAttackMaxAbove(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //最大道术攻击< 一个值 inline bool IsWizardAttackMaxBelow(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //自身的材料的id inline bool IsSelfMetiralItemId(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //是否装备了指定的武器 inline bool IsSpeciaWeapon(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //目标是否是沙巴克成员 inline bool IsSbkMember(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //在副本里,并且副本id为 inline bool FbId(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //自身是怪物,并且怪物的id=value inline bool SelfSpecialMonster(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //模型的id=value inline bool IsModelId(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //场景里是否存在怪物 inline bool SceneHasMonster(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //场景不存在怪物 inline bool SceneWithoutMonster(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //自己的等级 <= value inline bool SelfLevelBelow(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //己的等级 > value inline bool SelfLevelAbove(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //自身的场景的id inline bool SelfSceneId(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //场景怪物数目<=value inline bool SceneMonsterCount(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //已经召唤出来的宠物的数目 inline bool MobPetCount(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //实体类型 inline bool EntityType(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //实体类型 inline bool EntityVocation(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //是否有特定的装备 inline bool HasSpecialEquip(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //目标转数 > value, inline bool CircleAbove(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //目标转数 <= value inline bool CircleBelow(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //自己身上有buff inline bool SelfWithBuff(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //自己身上没有buff inline bool SelfWithoutBuff(CAnimal * pSrcEntity,CAnimal *pTargetEntity,GAMEATTRVALUE &value); //自己的宠物 inline bool SelfJobPet(CAnimal * pSrcEntity, CAnimal * pTargetEntity, GAMEATTRVALUE & value); //自己的转数比目标转数 inline bool SelfCircleBelow(CAnimal * pSrcEntity, CAnimal * pTargetEntity, GAMEATTRVALUE & value); //目标转数比自己的转数 inline bool RevertCircleBelow(CAnimal * pSrcEntity, CAnimal * pTargetEntity, GAMEATTRVALUE & value); //判断怪物升级的等级数 inline bool MonsterLevelUpCheck(CAnimal * pSrcEntity, CAnimal * pTargetEntity, GAMEATTRVALUE & value); //判断场景是否有归属于自己的宠物 inline bool ScenceHasSelfPet(CAnimal * pSrcEntity, CAnimal * pTargetEntity, GAMEATTRVALUE & value); //判断自己技能等级是否大于等于目标人物等级 inline bool SelfSkillLevelAndTargetLevelAbove(CAnimal * pSrcEntity, CAnimal * pTargetEntity, GAMEATTRVALUE & value); //判断自己技能等级是否小于目标人物等级 inline bool SelfSkillLevelAndTargetLevelBelow(CAnimal * pSrcEntity, CAnimal * pTargetEntity, GAMEATTRVALUE & value); ////////////////////////////////技能的升级和训练的条件 //没有条件 inline INT_PTR UtConditionNone(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume); //等级必须大于等于一定的级别 inline INT_PTR UtConditionLevel(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume ); //金钱 inline INT_PTR UtConditionCoin(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume ); inline INT_PTR UtConditionFlyShoes(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition ,bool needConsume); //物品 inline INT_PTR UtConditionItem(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume); //经验 inline INT_PTR UtConditionExp(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume); //内功等级 inline INT_PTR UtConditionInternalWorkLevel(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume); //修为 inline INT_PTR UtConditionXiuwei(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume ); //职业 inline INT_PTR UtConditionVocation(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume ); //HP是否足够 inline INT_PTR UtConditionHp(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume ); //MP inline INT_PTR UtConditionMp(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume ); //目标存在 inline INT_PTR UtConditionTargetExist(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume ); //宠物id=value的数量= value,不包括自己 inline INT_PTR UtConditionTeamBrotherCount(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume); //消耗基础蓝的万分比 value表示基础蓝的万分比,比如8500表示85%,玩家的基础蓝表示等级带来的MaxMp,不包括buff,装备等附加的 inline INT_PTR UtConditionBaseMaxMpRate(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume); //消耗基础血的万分比 value表示基础血的万分比,比如8500表示85%,玩家的基础血表示等级带来的MaxHp,不包括buff,装备等附加的 inline INT_PTR UtConditionBaseMaxHpRate(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume); //在与玩家的战斗状态,value 1表示是 0表示否 inline INT_PTR UtConditionBattleState(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume); //需要帮派贡献 inline INT_PTR UtConditionGuildContr(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume); //需要帮派对应的技能等级达到 inline INT_PTR UtConditionGuildSkillLevel(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume); //Xp值的消耗 inline INT_PTR UtConditionXpValue(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume); //材料的耐久 inline INT_PTR UtConditionMatiralDura(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume); //消耗怒气值 inline INT_PTR UtConditionAngerValue(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume); //需要装备有挖矿工具 inline INT_PTR UtConditionDigTool(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume); //需要在特定区域才可以使用 inline INT_PTR UtConditionAreaProp(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume); //至少需要转生才可学习 inline INT_PTR UtConditionCircle(CAnimal * pActor, INT_PTR nSkillID, SKILLTRAINSPELLCONDITION &condition, bool needConsume); //与目标线距离 inline INT_PTR UtConditionLineDistance(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume ); //有目标并且目标的距离>=value inline INT_PTR UtConditionTargetDistanceAbove(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume ); //需要当前职业宠物数量>=value inline INT_PTR UtConditionHasJobPetCount(CAnimal *pActor,INT_PTR nSkillID,SKILLTRAINSPELLCONDITION &contition,bool needConsume ); //需要行会主殿等级 inline INT_PTR UtConditionGuildMainHall(CAnimal * pActor, INT_PTR nSkillId,SKILLTRAINSPELLCONDITION &contition ,bool needConsume); //需要行会科技等级 inline INT_PTR UtConditionGuildTech(CAnimal * pActor, INT_PTR nSkillId,SKILLTRAINSPELLCONDITION &contition ,bool needConsume); protected: static const TargetSelCondition Handlers[]; //目标的选择条件 static const SkillUseTrainCondition UseTrainHandlers[]; //使用和升级的条件 static const SkillUseTrainCondition SpellHandlers[]; //施法条件 static const SkillUseTrainCondition UpgradeHandlers[]; //升级条件 };