void ResetOrbs() { me->RemoveDynObject(SPELL_RING_OF_BLUE_FLAMES); for (uint8 i = 0; i < 4; ++i) if (GameObject* pOrb = GetOrb(i)) pOrb->SetUInt32Value(GAMEOBJECT_FACTION, 0); }
void EmpowerOrb(bool all) { GameObject* pOrbEmpowered = GetOrb(OrbsEmpowered); if (!pOrbEmpowered) return; if (all) { me->RemoveDynObject(SPELL_RING_OF_BLUE_FLAMES); for (uint8 i = 0; i < 4; ++i) { if (GameObject* pOrb = GetOrb(i)) { pOrb->CastSpell(me, SPELL_RING_OF_BLUE_FLAMES); pOrb->SetUInt32Value(GAMEOBJECT_FACTION, 35); pOrb->setActive(true); pOrb->Refresh(); } } DoScriptText(SAY_KALECGOS_ENCOURAGE, me); } else { if (GameObject* pOrb = GetOrb(urand(0,3))) { pOrb->CastSpell(me, SPELL_RING_OF_BLUE_FLAMES); pOrb->SetUInt32Value(GAMEOBJECT_FACTION, 35); pOrb->setActive(true); pOrb->Refresh(); OrbsEmpowered = (OrbsEmpowered+1)%4; ++EmpowerCount; switch(EmpowerCount) { case 1: DoScriptText(SAY_KALEC_ORB_READY1, me); break; case 2: DoScriptText(SAY_KALEC_ORB_READY2, me); break; case 3: DoScriptText(SAY_KALEC_ORB_READY3, me); break; case 4: DoScriptText(SAY_KALEC_ORB_READY4, me); break; } } } }
void Reset() { OrbsEmpowered = 0; EmpowerCount = 0; me->AddUnitMovementFlag(MOVEFLAG_ONTRANSPORT | MOVEFLAG_LEVITATING); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->setActive(true); for (uint8 i = 0; i < 4; ++i) if (GameObject* pOrb = GetOrb(i)) pOrb->SetGoType(GAMEOBJECT_TYPE_BUTTON); }
void SetRingOfBlueFlames() { me->RemoveDynObject(SPELL_RING_OF_BLUE_FLAMES); for (uint8 i = 0; i < 4; ++i) { if (GameObject* pOrb = GetOrb(i)) { if (pOrb->GetUInt32Value(GAMEOBJECT_FACTION) == 35) { pOrb->CastSpell(me, SPELL_RING_OF_BLUE_FLAMES); pOrb->setActive(true); pOrb->Refresh(); } } } }
void ChartAspectRelation() { int ca[cAspect + 1], co[objMax]; char sz[cchSzDef]; int pcut = 30000000, icut=0, jcut=0, phi, ihi=0, jhi=0, ahi=0, p, i, j, k, count = 0, m; real ip, jp, rPowSum = 0.0; char ignoreT[objMax]; real power2[oNormOpt+1]; PrintHeader(); /* Display chart info */ for (m = 0; m <= cObjOpt; m++) ignoreT[m] = FIgnore(m); for (i = 0; i <= oNormOpt; i++) power2[i] = rObjInf[i]; if (us.nRel == rcTransit) { for (m = 0; m <= cObjOpt; m++) ignoreT[m] = FIgnore2(m); for (i = 0; i <= oNormOpt; i++) power2[i] = rTransitInf[i]; } else { if (us.nRel == rcDual) for (i = 0; i <= oNormOpt; i++) power2[i] = ppower2[i]; if (us.nRel == rcProgress) { for (m = 0; m <= cObjOpt; m++) ignoreT[m] = FIgnore3(m); for (i = 0; i<= oNormOpt; i++) power2[i] = ppower1[i]; } } ClearB((lpbyte)ca, (cAspect + 1)*(int)sizeof(int)); ClearB((lpbyte)co, objMax*(int)sizeof(int)); loop { phi = -1; /* Search for the next most powerful aspect in the aspect grid. */ for (i = 0; i <= cObjOpt; i++) if (!FIgnore(i)) for (j = 0; j <= cObjOpt; j++) if (!FIgnore(j)&& !(FIgnoreS(i)&&FIgnoreS(j))) if ((k = grid->n[i][j])) { ip = FStar(i) ? 2.5 : (power2[i]*rObjInf[i]/13.0); jp = FStar(j) ? 2.5 : (ppower1[j]*rObjInf[j]/13.0); p = (int)(rAspInf[k]*(sqrt)(ip*jp)* (1.0-RAbs((real)(grid->v[i][j]))/3600.0/GetOrb(i, j, k))*500.0); if (us.fParallel) p = p / 4; if ((p < pcut || (p == pcut && (i > icut || (i == icut && j > jcut)))) && p > phi) { ihi = i; jhi = j; phi = p; ahi = k; } } if (phi < 0) /* Exit when no less powerful aspect found. */ break; pcut = phi; icut = ihi; jcut = jhi; count++; /* Display the current aspect. */ #ifdef INTERPRET if (us.fInterpret) { /* Interpret it if -I in effect. */ InterpretAspectRelation(jhi, ihi); continue; } #endif rPowSum += (real)phi/500.0; ca[ahi]++; co[jhi]++; co[ihi]++; sprintf(sz, "%5d: ", count); PrintSz(sz); PrintAspect(jhi, SFromZ(cp1.obj[jhi]), (int)RSgn(cp1.dir[jhi]), ahi, ihi, SFromZ(cp2.obj[ihi]), (int)RSgn(cp2.dir[ihi]), 'A'); k = grid->v[ihi][jhi]; AnsiColor(k < 0 ? kWhite : kLtGray); sprintf(sz, us.fSeconds ?"- orb: %c%d,%02d'%02d\"":"- orb: %c%d:%02d'", us.fAppSep ? (k < 0 ? 'a' : 's') : (k < 0 ? '-' : '+'), abs(k)/3600,(abs(k)%3600)/60 ,abs(k)%60); PrintSz(sz); AnsiColor(kDkGreen); sprintf(sz, " power:%6.2f\n", (real)phi/500.0); PrintSz(sz); AnsiColor(kDefault); } PrintAspectSummary(ca, co, count, rPowSum); }