Custom Boss Text Say via Script und DB

enum Yells
{
//List of text id’s. The text is stored in database, also in a localized version
//(if translation not exist for the textId, default english text will be used)
//Not required to define in this way, but simplify if changes are needed.
//These texts must be added to the creature texts of the npc for which the script is assigned.
SAY_AGGRO = 0, // “Let the games begin.”
SAY_RANDOM = 1, // “I see endless suffering. I see torment. I see rage. I see everything.”,
// “Muahahahaha”,
// “These mortal infedels my lord, they have invaded your sanctum and seek to steal your secrets.”,
// “You are already dead.”,
// “Where to go? What to do? So many choices that all end in pain, end in death.”
SAY_BERSERK = 2, // “$N, I sentance you to death!”
SAY_PHASE = 3, // “The suffering has just begun!”
SAY_DANCE = 4, // “I always thought I was a good dancer.”
SAY_SALUTE = 5, // “Move out Soldier!”
SAY_EVADE = 6 // “Help $N! I’m under attack!”
};

Wo in der Datenbank muss ich das wie einfügen, damit der Boss auch die gewünschten Texte ausgibt ?

http://collab.kpsn.org/display/tc/creature_text

Okay, das habe ich nun herausgefunden, allerdings spammt er den Text permanennt wenn eine Person gestorben ist. Woran kann dies genau liegen ?

Ohne code kann man da nur munteres rätselraten spielen ^^

https://github.com/TrinityCore/TrinityCore/blob/master/src/server/scripts/Examples/example_creature.cpp

Spamt er im Sekundentakt oder mit einem gewissen delay?

Wenn zweiteres solltest du dir evtl. mal den teil angucken:

//Out of combat timers
if (!me->GetVictim())
{
    //Random Say timer
    if (m_uiSayTimer <= uiDiff)
    {
        //Random switch between 5 outcomes
        Talk(SAY_RANDOM);

        m_uiSayTimer = 45000;                      //Say something agian in 45 seconds
    }
    else
        m_uiSayTimer -= uiDiff;

Er spammt durchgehend, ohne Pause …

ich denke du hast die function “void UpdateAI(uint32 diff)” genutzt.

diese function wird alle 50ms aufgerufen. also 20* je sekunde.

man muß sich also überlegen wie man verschiedene aktionen eines NPC koordiniert.

eine Möglichkeit ware verschiedene Counter dafür anzulegen.

uint32 m_timer; // also ein zeit zähler

uint32 m_phase; // und ein struktur zähler

die Function “void UpdateAI( uint32 diff)” übergibt ein ms zeit wert. normalerweise also 50. Da die core aber OOP ausgeführt wird, kann dieser Wert bei vielen eingeloggten playern durchaus einbrechen und viel grosser ausfallen. Um z.B. einmal je Sekunde eine Aktion zu machen könnte man folgende Sequence benutzen…

if (m_timer<=diff)

{

m_timer=1000;  // vorbereitung für die action in der nächsten sekunde

DoWork();          // Deine Funktion mit Deiner arbeit

}

else

m_timer-diff;

void DoWork()

{

 m_phase++;

 switch (m_phase)

 {

       case 1:

            Talk(0);                

            break;

       case 2:

            Talk(1);

            break;

 }

}

unsere DoWork() wird nur einmal jede sekunde aufgerufen !!!

Und durch die m_phase werden nur in den ersten 2 Sekunden einmal text1 und dann text2 ausgegeben,

danach kommt nichts mehr, weil die m_phase zwar weiter erhöht wird, aber nirgend dafür eine (switch case) Aktion bereitgestellt wird…

Ich hoffe ich konnte es etwas erläutern.

ansonsten bitte etwas code senden… dann können wir besser antworten…