scriptdev2 / scriptdev2-cata

ScriptDev2 for Cataclysm

Home Page:http://www.scriptdev2.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Argaloth and Occuthar.

opened this issue · comments

97213(Focused Fire) And Eye Occuthar 96920 need core support.
Consuming(88954 and 95173) With every second ticking this dot must stronger.
88972(Fel Firestorm) need core support.
Please see - thanks advance.

Thanks. I will submit both of these to Acid and core once Cata will be updated (eta: probably this weekend).

Unfortunately for forum cmangos I blocked by your ISP, for what reason I do not know.

Poke @cyberium about the forum block issue

Blocked some adress from ukrain and china because of spam bot, maybe a little bit too much, you could try now.

Sorry, I'm probably wrong to put it. You are absolutely nothing to do. This is my internet - a provider that gives me access to the Internet has made it to the registry, which prohibits to go there.

I reviews the scripts that you submitted and they look good.
But there are some things missing. Also the boss should not despawn on evade (I don't understand why did you add this action).

In order for this to be complete (so we can add it to Acid) I still need the script for http://www.wowhead.com/npc=55869 and http://www.wowhead.com/npc=56350 and the instance script (door handling + encounter in progress). Thanks

In fact When evading should despawn. On the official servers, so as to leave in despawn if output of the room.
Example - boss Halion in Ruby Sanctum.
Alizabal scripted in the acid will not be there like Lord Marrowgar ICC has a phase charging.
Too whirlwind and also constantly makes the charge to a random enemy.
Disciple of Hate - Well, there is not a problem.

That's true, but this should be a general functionality handled in the core for all raid and dungeon bosses.
We should never implement despawn and respawn mechanics in scripts, unless it's really mandatory. That's why I only added this to Halion and Kalecgos and Trial of the Crusader.

It might be still possible to implement Alizabal in Acid, using phases and threat handling. Howerver I don't know all the details, so I'm not sure if this will work. I will probably make a test with this the following days.

One more observation:
For spell which have an entry in SpellDifficulty.dbc please add only the event for normal. The core will select the right entry for 25 man and heroic.

You can try to run this script. Please let me know if it works fine:

-- Creature id: 47120
UPDATE creature_template SET AIName='EventAI' WHERE entry=47120;
DELETE FROM creature_ai_scripts WHERE creature_id=47120;
INSERT INTO creature_ai_scripts VALUES 
('4712001','47120','0','0','100','6','300000','300000','0','0','11','47008','0','3','1','-53','0','0','0','0','0','0','Argaloth - Cast Berserk and Emote'),
('4712002','47120','0','0','100','7','10000','10000','24000','24000','11','88954','0','0','0','0','0','0','0','0','0','0','Argaloth - Cast Consuming Darkness'),
('4712003','47120','0','0','100','7','15000','15000','15000','15000','11','88942','0','0','0','0','0','0','0','0','0','0','Argaloth - Cast Meteor Slash'),
('4712004','47120','2','0','100','6','66','0','0','0','11','88972','0','1','1','-54','0','0','0','0','0','0','Argaloth - Cast Fel Firestorm and Emote at 66% health'),
('4712005','47120','2','0','100','6','33','0','0','0','11','88972','0','1','1','-54','0','0','0','0','0','0','Argaloth - Cast Fel Firestorm and Emote at 33% health');

-- Creature id: 47829
UPDATE creature_template SET AIName='EventAI' WHERE entry=47829;
DELETE FROM creature_ai_scripts WHERE creature_id=47829;
INSERT INTO creature_ai_scripts VALUES 
('4782901','47829','11','0','100','6','0','0','0','0','11','88973','0','0','0','0','0','0','0','0','0','0','Fel Flames - Cast Fel Firestorm on Spawned');


-- Creature id: 52363
UPDATE creature_template SET AIName='EventAI' WHERE entry=52363;
DELETE FROM creature_ai_scripts WHERE creature_id=52363;
INSERT INTO creature_ai_scripts VALUES 
('5236301','52363','0','0','100','6','300000','300000','0','0','11','47008','0','3','1','-53','0','0','0','0','0','0','Occu\'thar - Cast Berserk and Emote'),
('5236302','52363','0','0','100','7','5000','5000','25000','25000','11','96913','0','0','0','0','0','0','0','0','0','0','Occu\'thar - Cast Searing Shadow'),
('5236303','52363','0','0','100','7','15000','15000','30000','40000','11','96872','0','0','0','0','0','0','0','0','0','0','Occu\'thar - Cast Focused Fire'),
('5236304','52363','0','0','100','7','22000','22000','60000','60000','11','96920','0','0','0','0','0','0','0','0','0','0','Occu\'thar - Cast Eyes of Occu\'thar'),
('5236305','52363','30','0','100','7','5','52369','0','0','11','96884','6','1','0','0','0','0','0','0','0','0','Occu\'thar - Cast Focused Fire on Received AI event from Eyestalk');

-- Creature id: 52369
UPDATE creature_template SET AIName='EventAI' WHERE entry=52369;
DELETE FROM creature_ai_scripts WHERE creature_id=52369;
INSERT INTO creature_ai_scripts VALUES 
('5236901','52369','11','0','100','6','0','0','0','0','45','5','100','0','0','0','0','0','0','0','0','0','Eyestalk - Send AI Event on Spawned');

-- Creature id: 52389
UPDATE creature_template SET AIName='EventAI' WHERE entry=52389;
DELETE FROM creature_ai_scripts WHERE creature_id=52389;
INSERT INTO creature_ai_scripts VALUES 
('5238901','52389','11','0','100','6','0','0','0','0','11','96995','0','0','0','0','0','0','0','0','0','0','Eye of Occu\'thar - Cast Eye of Occu\'thar Visual on Spawned'),
('5238902','52389','0','0','100','7','10000','10000','10000','10000','11','96968','0','0','0','0','0','0','0','0','0','0','Eye of Occu\'thar - Cast Occu\'thar\'s Destruction'),
('5238903','52389','4','0','100','6','0','0','0','0','11','96942','6','0','0','0','0','0','0','0','0','0','Eye of Occu\'thar - Cast Gaze of Occu\'thar on Aggro');


-- Creature id: 55869
UPDATE creature_template SET AIName='EventAI' WHERE entry=55869;
DELETE FROM creature_ai_scripts WHERE creature_id=55869;
INSERT INTO creature_ai_scripts VALUES 
('5586901','55869','10','0','100','6','0','45','0','0','1','-55','0','0','0','0','0','0','0','0','0','0','Alizabal - Yell Intro'),
('5586902','55869','4','0','100','6','0','0','0','0','1','-56','0','0','0','0','0','0','0','0','0','0','Alizabal - Yell on Aggro'),
('5586903','55869','0','0','100','6','300000','300000','0','0','11','47008','0','3','0','0','0','0','0','0','0','0','Alizabal - Cast Berserk'),
('5586904','55869','0','0','100','39','5000','5000','15000','15000','11','104936','1','0','11','105065','0','0','0','0','0','0','Alizabal - Cast Skewer or Seething Hate'),
('5586905','55869','0','0','100','7','25000','25000','25000','25000','11','106248','0','0','0','0','0','0','0','0','0','0','Alizabal - Cast Blade dance'),
('5586906','55869','5','0','100','7','0','0','0','0','1','-59','-60','-61','0','0','0','0','0','0','0','0','Alizabal - Yell on Kill'),
('5586907','55869','6','0','100','6','0','0','0','0','1','-58','0','0','0','0','0','0','0','0','0','0','Alizabal - Yell on Death'),
('5586908','55869','21','0','100','6','0','0','0','0','1','-57','0','0','0','0','0','0','0','0','0','0','Alizabal - Yell on Reached Home');

-- Creature id: 56350
UPDATE creature_template SET AIName='EventAI' WHERE entry=56350;
DELETE FROM creature_ai_scripts WHERE creature_id=56350;
INSERT INTO creature_ai_scripts VALUES 
('5635001','56350','0','0','100','7','15000','15000','15000','15000','11','105859','1','0','0','0','0','0','0','0','0','0','Disciple of Hate - Cast Run Through'),
('5635002','56350','0','0','100','7','25000','25000','25000','25000','11','105855','0','0','0','0','0','0','0','0','0','0','Disciple of Hate - Cast Whirl of Blades');

-- Texts
DELETE FROM creature_ai_texts WHERE entry IN (-53, -54, -55, -56, -57, -58, -59, -60, -61);
INSERT INTO `creature_ai_texts` (`entry`,`content_default`,`sound`,`type`,`language`,`comment`,`emote`) VALUES 
('-53','%s goes into a berserker rage!','0','3','0','Generic - Emote Berserk','0'),
('-54','%s begins to cast Fel Firestorm!','0','3','0','Argaloth - Emote Fel Firestorm','0'),
('-55','How I HATE this place. My captors may be long-dead, but don\'t think I won\'t take it all out on you miserable treasure-hunters.','25779','1','0','Alizabal - Say Intro','0'),
('-56','I hate adventurers.','25777','1','0','Alizabal - Say Aggro','0'),
('-57','I hate incompetent raiders.','25780','1','0','Alizabal - Say Wipe','0'),
('-58','I hate... every one of you...','25778','1','0','Alizabal - Say Death','0'),
('-59','I still hate you.','25781','1','0','Alizabal - Say Slay 1','0'),
('-60','Do you hate me? Good.','25782','1','0','Alizabal - Say Slay 2','0'),
('-61','I hate mercy.','25783','1','0','Alizabal - Say Slay 3','0');

-- Script target
DELETE FROM spell_script_target WHERE entry=96931;
INSERT INTO spell_script_target VALUES
(96931, 1, 52389, 0);
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index 8fcf248..2858d19 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -2949,6 +2949,16 @@ void Spell::EffectDummy(SpellEffectEntry const* effect)
                     m_caster->CastSpell(unitTarget, 74454, true, NULL, NULL, m_caster->GetObjectGuid(), m_spellInfo);
                     return;
                 }
+                case 105065:                                // Seething Hate
+                case 108090:                                // Seething Hate (h)
+                case 106248:                                // Blade Dance
+                {
+                    if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER)
+                        return;
+
+                    m_caster->CastSpell(unitTarget, effect->CalculateSimpleValue(), true);
+                    return;
+                }
             }
             break;
         }
@@ -8975,6 +8985,14 @@ void Spell::EffectScriptEffect(SpellEffectEntry const* effect)
                     unitTarget->CastSpell(m_caster, effect->CalculateSimpleValue(), true);
                     return;
                 }
+                case 96931:                                 // Eyes of Occu'thar
+                {
+                    if (!unitTarget)
+                        return;
+
+                    m_caster->CastSpell(unitTarget, effect->CalculateSimpleValue(), true);
+                    return;
+                }
             }
             break;
         }

Wow, thank you, I'll see soon.
On the differences SpellDifficulty.dbc: I have just in case, just to yourself then do not forget.
I hate incompetent raiders. When I first heard this phrase, long laughter fell! exactly in exactly about some fans to stand in the fire. 😆
Also please see MangosS3 commits - more fixes spells on Cataclysm.
https://github.com/mangosR2/mangos3/commits/master

mangosR2/mangos3@8e41856
Baradin Hold fixes spell too. Hmm interesting.

Some parts of that commit are correct. But I'm not sure about the dummy and script effect implementation. We need to check a sniff in order to confirm this.

Also, some parts of the scripts that I provided are not working properly because of some core limitations. That we need to debug and understand.

Well done! I tested your script, I can say that he is better than mine! Thanks!
But there is only one - Argaloth when aggro immediately begins to cast fel firestorm.
DBM data store:
function mod:UNIT_HEALTH(uId)
if self:GetUnitCreatureId(uId) == 47120 then
local h = UnitHealth(uId) / UnitHealthMax(uId) * 100
if h > 75 or h > 45 and h < 55 then
prewarnedFirestorm = false
elseif not prewarnedFirestorm and (h > 69 and h < 72 or h > 35 and h < 38) then
warnFirestormSoon:Show()
prewarnedFirestorm = true
end
end
end

About
case 105065: // Seething Hate

  •            case 108090:                                // Seething Hate (h)
    
  •            case 106248:                                // Blade Dance
    
  •            {
    
  •                if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER)
    
  •                    return;
    
    They has the attribute AttributesEx3: 0x00000100 (SPELL_ATTR_EX3_UNK8)
    Cast only on player, why should they hang additional checks in the kernel?
    Please tell me how to make tags like you to read was understandable? Thanks advance.

Also need a method to display frames at the start of the encounter.
Example:
UpdateSpecialEncounterState(ENCOUNTER_FRAME_ENGAGE, prince->GetObjectGuid());
https://github.com/mangosR2/scriptdev2/blob/master/scripts/northrend/icecrown_citadel/icecrown_citadel/instance_icecrown_citadel.cpp#L393

I don't know what the "UpdateSpecialEncounterState" is. Probably you should explain what it should do, and we'll implemented if required.

It's just raid frames. Showing under the radar in the right corner.

Isn't this one specific only to Cata? Probably it needs to be added to core then.

// size of this packet is at most 15 (usually less)
    WorldPacket data(SMSG_INSTANCE_ENCOUNTER, 15);

    data << uint32(state->lastCommand);

    switch (state->lastCommand)
    {
        case ENCOUNTER_FRAME_ENGAGE:
        case ENCOUNTER_FRAME_DISENGAGE:
        case ENCOUNTER_FRAME_UPDATE_PRIORITY:
            data << state->guid.WriteAsPacked();
            data << uint8(state->data1);
            break;
        case ENCOUNTER_FRAME_ADD_TIMER:
        case ENCOUNTER_FRAME_ENABLE_OBJECTIVE:
        case ENCOUNTER_FRAME_DISABLE_OBJECTIVE:
            data << uint8(state->data1);
            break;
        case ENCOUNTER_FRAME_UPDATE_OBJECTIVE:
            data << uint8(state->data1);
            data << uint8(state->data2);
            break;
        case ENCOUNTER_FRAME_UNK7:
        default:
            break;
    }

    dungeon->SendToPlayers(&data);

Actually, this is also sent in Wotlk... so yes, we might have to implement this in core, but I won't want this to be script dependent. Probably we should link it to LFG manager.

In that particular case yes. But the opcode that it's sent does more than that.
Currently I see that both R2 and TC only send this for ICC stuff.

However this looks like it's appearing in other instances as well (checked on Ulduar), so I'm thinking that probably we should make this a generic thing for rank 3 (only raid maybe?) bosses.-> poke @Schmoozerd about this as well.

Also it looks like there are other encounter states sent which I couldn't find yet.

diff --git a/src/game/InstanceData.cpp b/src/game/InstanceData.cpp
index 34e8a00..584ddef 100644
--- a/src/game/InstanceData.cpp
+++ b/src/game/InstanceData.cpp
@@ -52,3 +52,36 @@ bool InstanceData::CheckConditionCriteriaMeet(Player const* /*source*/, uint32 i
                   instance->GetId(), instance_condition_id, uint32(conditionSourceType));
     return false;
 }
+
+void InstanceData::SendEncounterUnit(uint32 type, Unit* source /*= NULL*/, uint8 param1 /*= 0*/, uint8 param2 /*= 0*/)
+{
+    // size of this packet is at most 15 (usually less)
+    WorldPacket data(SMSG_INSTANCE_ENCOUNTER, 15);
+    data << uint32(type);
+
+    switch (type)
+    {
+        case ENCOUNTER_FRAME_ENGAGE:
+        case ENCOUNTER_FRAME_DISENGAGE:
+        case ENCOUNTER_FRAME_UPDATE_PRIORITY:
+            if (!source)
+                return;
+            data << source->GetObjectGuid().WriteAsPacked();
+            data << uint8(param1);
+            break;
+        case ENCOUNTER_FRAME_ADD_TIMER:
+        case ENCOUNTER_FRAME_ENABLE_OBJECTIVE:
+        case ENCOUNTER_FRAME_DISABLE_OBJECTIVE:
+            data << uint8(param1);
+            break;
+        case ENCOUNTER_FRAME_UPDATE_OBJECTIVE:
+            data << uint8(param1);
+            data << uint8(param2);
+            break;
+        case ENCOUNTER_FRAME_UNK7:
+        default:
+            break;
+    }
+
+    instance->SendToPlayers(&data);
+}
diff --git a/src/game/InstanceData.h b/src/game/InstanceData.h
index fb66165..7fb019e 100644
--- a/src/game/InstanceData.h
+++ b/src/game/InstanceData.h
@@ -49,6 +49,18 @@ enum InstanceConditionIDs                                   // Suggested values
     INSTANCE_CONDITION_ID_ULDUAR            = 33113,
 };

+enum EncounterFrameType                                     // only raid UI specific
+{
+    ENCOUNTER_FRAME_ENGAGE                  = 0,
+    ENCOUNTER_FRAME_DISENGAGE               = 1,
+    ENCOUNTER_FRAME_UPDATE_PRIORITY         = 2,
+    ENCOUNTER_FRAME_ADD_TIMER               = 3,
+    ENCOUNTER_FRAME_ENABLE_OBJECTIVE        = 4,
+    ENCOUNTER_FRAME_UPDATE_OBJECTIVE        = 5,
+    ENCOUNTER_FRAME_DISABLE_OBJECTIVE       = 6,
+    ENCOUNTER_FRAME_UNK7                    = 7             // sorting encounter units
+};
+
 class MANGOS_DLL_SPEC InstanceData
 {
     public:
@@ -119,6 +131,9 @@ class MANGOS_DLL_SPEC InstanceData
         // This is used for such things are heroic loot
         // See ObjectMgr.h enum ConditionSource for possible values of conditionSourceType
         virtual bool CheckConditionCriteriaMeet(Player const* source, uint32 instance_condition_id, WorldObject const* conditionSource, uint32 conditionSourceType) const;
+
+        // Special UI unit frame - sent mostly for raid bosses
+        void SendEncounterUnit(uint32 type, Unit* source = NULL, uint8 param1 = 0, uint8 param2 = 0);
 };

 #endif

In Ulduar not seen in ICC, Ruby Sanctum seen. In Cata instance too. Dungeon and raid too Cataclysm.

Sniff doesn't lie. In Ulduar it happens, but the sniff version is 434. I think that for 4.x it's done for a lot of raid bosses.

However in 335 Ulduar sniff it's not set. In ICC 335 I can find it only in certain bosses, and for RS I haven't checked.

Also for 335 it's not clear what all the other encounter frames do, apart from 0 and 1.
So far I could only find 0, 1 and 7 in sniffs.

enum EncounterFrameType                                     // only raid UI specific
{
    ENCOUNTER_FRAME_ENGAGE                  = 0,
    ENCOUNTER_FRAME_DISENGAGE               = 1,
    ENCOUNTER_FRAME_UPDATE_PRIORITY         = 2,
    ENCOUNTER_FRAME_ADD_TIMER               = 3,
    ENCOUNTER_FRAME_ENABLE_OBJECTIVE        = 4,
    ENCOUNTER_FRAME_UPDATE_OBJECTIVE        = 5,
    ENCOUNTER_FRAME_DISABLE_OBJECTIVE       = 6,
    ENCOUNTER_FRAME_UNK7                    = 7             // sorting encounter units
};

Mainly used:
ENCOUNTER_FRAME_ENGAGE = 0,
ENCOUNTER_FRAME_DISENGAGE = 1,
In Ulduar no frame, it is a mistake Sniffen. Sorry, but I believe my eyes.
ICC has frame(no all bosses), Ruby Sanctum - boss Halion has frame.
Cata instance too.
P.S: With Worldstate also there is a problem - for example the Light of Dawn, just not displayed, Hyjal Summit work nice DBC looked - like recording there.
Problem only Cata 4.3.4.

In Ulduar no frame, it is a mistake Sniffen. Sorry, but I believe my eyes.

Sniff is never wrong. In 434 Ulduar has frames for all bosses.