void MonsterActive::response(void) { StyObj obj(identity,MONSTER_STYLE_TYPE); vector<string> herId; Point heroPt; Hero *perHero; Nbox *box; if(map_now == NULL) { return; } box = map_now->getBox(); if(box == NULL || !isAlive) { return; } /*判断任务是否还在*/ if(judgeTask()) { cout<<"the task mon of the task is illeay:"<<endl; return; } if(!isPlayOver()) { // cout<<"it is playCd time:"<<endl; return; } memset(otherMsg,'\0',MONSTER_MSG_LENGTH + 1); box->getStaInSrcVec(obj); /*处理延时性技能*/ hitedSkiFun(); /*地图没人,判断是否已眩晕*/ if(!dizz) { stopMove(); return; } /*回血功能*/ recoverBloodSelf(); /*boss逃跑*/ if(flgRun) { /*判断是否已定身*/ if(!skiBody) { stopMove(); return; } } else { /*仇恨范围搜寻*/ schRge(); /*如果仇恨列表不为空*/ if(!enmityValues.empty()) { /*这个是从仇恨列表里面得到的最高值,至于怎么得到的,则要看仇恨计算*/ perHero = getHero(perHerId); if(perHero == NULL || !perHero->getLifeStation()) { return; } heroPt = perHero->getLogPt(); /*攻击距离判断*/ int fight_state = attackRangePoint(pt,perHero->getLocation(),attack_range); if(fight_state != 1) { /*判断是否已定身*/ if(!skiBody) { stopMove(); return; } /*如果人物没动,则这次就不必要再寻一次路*/ if(jdgSmePt(heroPt)) { findAttWay(heroPt); isPersuitHero = true; } } else { stopMove(); exchageHat(herId); if(attackPoint && useSkill(herId)) { return; } attPerHero(otherMsg,sizeof(otherMsg),perHero); box->sentBoxMsg(otherMsg); } } else { /*如果上次正在追人,而这次仇恨没人,则立即停下来*/ if(isPersuitHero) { stopMove(); isPersuitHero = false; } /*归位*/ if(Rec) { /*判断是否已定身*/ if(!skiBody) { stopMove(); return; } if(perLstPt == logic_pt) { Rec = false; return; } /*避免多次寻路*/ if(keyPath.empty()) { findSlfWay(perLstPt); } } } } if(perLstPt == logic_pt) { Rec = false; } else { Rec = true; } }
void MonsterAttRed::response(void) { StyObj obj(identity,MONSTER_STYLE_TYPE); vector<string> herId; Point heroPt; Hero *perHero; Nbox *box; if(map_now == NULL) { return; } box = map_now->getBox(); if(box == NULL || !isAlive) { return; } /*判断任务是否还在*/ if(judgeTask()) { cout<<"the task mon of the task is illeay:"<<endl; return; } if(!isPlayOver()) { // cout<<"it is playCd time:"<<endl; return; } memset(otherMsg,'\0',MONSTER_MSG_LENGTH + 1); box->getStaInSrcVec(obj); /*处理延时性技能*/ hitedSkiFun(); /*判断地图是否有人,怪物是否已眩晕*/ if(!dizz) { stopMove(); return; } /*回血功能*/ recoverBloodSelf(); /*这个是从仇恨列表里面得到的最高值,至于怎么得到的,则要看仇恨计算*/ if(flgRun) { /*判断是否已定身*/ if(!skiBody) { stopMove(); return; } } else { /*终究还是专打红名了 add by chenzhen 201301300950*/ redSchRge(); if(!enmityValues.empty()) { chageEny(((*(enmityValues.begin())).id)); /*这个是从仇恨列表里面得到的最高值,至于怎么得到的,则要看仇恨计算*/ perHero = getHero(perHerId); if(perHero == NULL || !perHero->getLifeStation()) { return; } heroPt = perHero->getLogPt(); int fight_state = attackRangePoint(pt,perHero->getLocation(),attack_range); if(fight_state != 1) { /*判断是否已定身*/ if(!skiBody) { stopMove(); return; } /*如果人物没动,则这次就不必要再寻一次路*/ if(jdgSmePt(heroPt)) { findAttWay(heroPt); isPersuitHero = true; } isInPatrol = false; } else { stopMove(); exchageHat(herId); if(attackPoint && useSkill(herId)) { return; } attPerHero(otherMsg,sizeof(otherMsg),perHero); box->sentBoxMsg(otherMsg); } } else { /*如果上次正在追人,而这次仇恨没人,则立即停下来*/ if(isPersuitHero) { stopMove(); isPersuitHero = false; } /*回血功能*/ // recoverBloodSelf(); if(Rec && !isInPatrol) { /*判断是否已定身*/ if(!skiBody) { stopMove(); return; } if(logic_pt == perLstPt) { Rec = false; return; } /*避免多次寻路*/ if(keyPath.empty()) { findAttWay(perLstPt,false); } } else { if(!isInPatrol) { /*模糊反应*/ if(!judgeGoFor()) { stopMove(); return; } } /*判断是否已定身*/ if(!skiBody) { stopMove(); return; } /*生成寻路终点*/ getEnd(); if(logic_pt == endFinPt) { Rec = true; isInPatrol = false; return; } /*避免多次寻路*/ if(keyPath.empty()) { findSlfWay(endFinPt); } } } } if(perLstPt == logic_pt) { Rec = false; } else { Rec = true; } }