void CMobEntity::OnMobSkillFinished(CMobSkillState& state, action_t& action) { auto PSkill = state.GetSkill(); auto PTarget = static_cast<CBattleEntity*>(state.GetTarget()); static_cast<CMobController*>(PAI->GetController())->TapDeaggroTime(); // store the skill used m_UsedSkillIds[PSkill->getID()] = GetMLevel(); PAI->TargetFind->reset(); float distance = PSkill->getDistance(); uint8 findFlags = 0; if (PSkill->getFlag() & SKILLFLAG_HIT_ALL) { findFlags |= FINDFLAGS_HIT_ALL; } // Mob buff abilities also hit monster's pets if (PSkill->getValidTargets() == TARGET_SELF) { findFlags |= FINDFLAGS_PET; } action.id = id; if (objtype == TYPE_PET && static_cast<CPetEntity*>(this)->getPetType() == PETTYPE_JUG_PET && static_cast<CPetEntity*>(this)->getPetType() == PETTYPE_AUTOMATON) action.actiontype = ACTION_PET_MOBABILITY_FINISH; else if (PSkill->getID() < 256) action.actiontype = ACTION_WEAPONSKILL_FINISH; else action.actiontype = ACTION_MOBABILITY_FINISH; action.actionid = PSkill->getID(); if (PTarget && PAI->TargetFind->isWithinRange(&PTarget->loc.p, distance)) { if (PSkill->isAoE()) { PAI->TargetFind->findWithinArea(PTarget, (AOERADIUS)PSkill->getAoe(), PSkill->getRadius(), findFlags); } else if (PSkill->isConal()) { float angle = 45.0f; PAI->TargetFind->findWithinCone(PTarget, distance, angle, findFlags); } else { PAI->TargetFind->findSingleTarget(PTarget, findFlags); } } else { action.actiontype = ACTION_MOBABILITY_INTERRUPT; actionList_t& actionList = action.getNewActionList(); actionList.ActionTargetID = id; actionTarget_t& actionTarget = actionList.getNewActionTarget(); actionTarget.animation = PSkill->getID(); return; } uint16 actionsLength = PAI->TargetFind->m_targets.size(); PSkill->setTotalTargets(actionsLength); PSkill->setTP(state.GetSpentTP()); PSkill->setHPP(GetHPP()); uint16 msg = 0; uint16 defaultMessage = PSkill->getMsg(); bool first {true}; for (auto&& PTarget : PAI->TargetFind->m_targets) { actionList_t& list = action.getNewActionList(); list.ActionTargetID = PTarget->id; actionTarget_t& target = list.getNewActionTarget(); list.ActionTargetID = PTarget->id; target.reaction = REACTION_HIT; target.speceffect = SPECEFFECT_HIT; target.animation = PSkill->getAnimationID(); target.messageID = PSkill->getMsg(); // reset the skill's message back to default PSkill->setMsg(defaultMessage); if (objtype == TYPE_PET && static_cast<CPetEntity*>(this)->getPetType() != PETTYPE_JUG_PET) { target.animation = PSkill->getPetAnimationID(); target.param = luautils::OnPetAbility(PTarget, this, PSkill, PMaster, &action); } else { target.param = luautils::OnMobWeaponSkill(PTarget, this, PSkill); } if (msg == 0) { msg = PSkill->getMsg(); } else { msg = PSkill->getAoEMsg(); } target.messageID = msg; if (PSkill->hasMissMsg()) { target.reaction = REACTION_MISS; target.speceffect = SPECEFFECT_NONE; if (msg = PSkill->getAoEMsg()) msg = 282; } else { target.reaction = REACTION_HIT; } if (target.speceffect & SPECEFFECT_HIT) { target.speceffect = SPECEFFECT_RECOIL; target.knockback = PSkill->getKnockback(); if (first && (PSkill->getSkillchain() != 0)) { CWeaponSkill* PWeaponSkill = battleutils::GetWeaponSkill(PSkill->getSkillchain()); if (PWeaponSkill) { SUBEFFECT effect = battleutils::GetSkillChainEffect(PTarget, PWeaponSkill); if (effect != SUBEFFECT_NONE) { int32 skillChainDamage = battleutils::TakeSkillchainDamage(this, PTarget, target.param); if (skillChainDamage < 0) { target.addEffectParam = -skillChainDamage; target.addEffectMessage = 384 + effect; } else { target.addEffectParam = skillChainDamage; target.addEffectMessage = 287 + effect; } target.additionalEffect = effect; } } first = false; } } PTarget->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_DETECTABLE); } }
int main(int argc, char **argv){ int rank,size,i,j; MPI_Status status; //MPI_Request *request; char **pCrackL; char *dados; //char *dadosS; //char **saltL; PassSlice *slices; char fileName[] = "input.in"; int qtPTC=0; //char *t; FILE *file; char src[14]; int TP = 1; //MPI_File fh; //int filesize; //I_MPI_MT_MEMCPY=1; //int tDes = getDes(); MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD,&rank); MPI_Comm_size(MPI_COMM_WORLD,&size); //qtPTC = atoi(argv[1]); //pCrackL=(char*)malloc(qtPTC*getTDes()*sizeof(char)); //saltL=(char*)malloc(qtPTC*getTS()*sizeof(char)); if(rank == 0){ file = fopen(fileName,"r"); for(i=0 ; fscanf(file,"%s",src)!=EOF ; i++ ); fseek(file,0,SEEK_SET); qtPTC = i; dados = (char*)malloc(qtPTC*(getTDes()+1)*sizeof(char)); if(dados==NULL)exit(0); pCrackL = (char**)malloc(sizeof(char*)*(qtPTC+1)); if(pCrackL==NULL)exit(0); for(i = 0 ; i < qtPTC ; i++)pCrackL[i]=&(dados[i*(getTDes()+1)]); for(i=0 ; i < (qtPTC-1) ; i++ ){ fscanf(file,"%s",pCrackL[i]); } fclose(file); setTP(TP); for(i = 0 ; i < getTP() ; i++){ slices = initSlices(size-1); /*for(i=0;i<size-1;i++){ printf("%i\n",slices[i].interval); printf("%i\n",slices[i].tPass); printf("%s\n",slices[i].begin); printf("%s\n",slices[i].end); }*/ for(j=1;j<size;j++){ MPI_Send(&TP,1,MPI_INT,i,2,MPI_COMM_WORLD); MPI_Send(slices[i].begin,TP,MPI_CHAR,i,0,MPI_COMM_WORLD); MPI_Send(&slices[i].interval,1,MPI_UNSIGNED_LONG,i,1,MPI_COMM_WORLD); } TP++; setTP(TP); } } else { MPI_Recv(&TP,1,MPI_INT,0,2,MPI_COMM_WORLD,&status); MPI_Recv(slices[rank].begin,TP,MPI_CHAR,0,0,MPI_COMM_WORLD,&status); MPI_Recv(&slices[rank].interval,1,MPI_UNSIGNED_LONG,0,1,MPI_COMM_WORLD,&status); } MPI_Bcast (&qtPTC, 1, MPI_INT, 0, MPI_COMM_WORLD); if(rank!=0){ dados = (char*)malloc(qtPTC*(getTDes()+1)*sizeof(char)); if(dados==NULL)exit(0); pCrackL = (char**)malloc(sizeof(char*)*(qtPTC+1)); if(pCrackL==NULL)exit(0); for(i = 0 ; i < qtPTC ; i++)pCrackL[i]=&(dados[i*(getTDes()+1)]); } //pCrackL=(char*)malloc(qtPTC*getTDes()*sizeof(char)); //MPI_Bcast (&qtPTC, 1, MPI_INT, 0, MPI_COMM_WORLD); //MPI_Barrier(MPI_COMM_WORLD); //MPI_Bcast (dados, qtPTC*(getTDes()+1), MPI_CHAR, 0, MPI_COMM_WORLD); //for(i=0;i<qtPTC;i++)pCrackL[i] = &dados[i*(getTDes()+1)]; //MPI_Bcast (saltL, qtPTC*getTS(), MPI_CHAR, 0, MPI_COMM_WORLD); //for(i = 0 ; i < qtPTC ; i++){ //printf("%i %i \n",qtPTC,rank); //} //printf("%s\n",pCrackL[0]); //setTp(1); //openMP(pCrackL, saltL, qtPTC); MPI_Finalize(); return 0; }