예제 #1
0
 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);
 }
예제 #2
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;
                }
            }
        }
    }
예제 #3
0
    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);
    }
예제 #4
0
 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();
             }
         }
     }
 }
예제 #5
0
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);
}