Merge branch 'azerothcore:master' into Playerbot

This commit is contained in:
ZhengPeiRu21
2023-03-23 09:07:11 -06:00
committed by GitHub
12 changed files with 189 additions and 34 deletions

View File

@@ -2284,14 +2284,6 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
}
break;
}
case SMART_ACTION_SET_GO_STATE:
{
for (WorldObject* target : targets)
if (IsGameObject(target))
target->ToGameObject()->SetGoState((GOState)e.action.goState.state);
break;
}
case SMART_ACTION_EXIT_VEHICLE:
{
for (WorldObject* target : targets)

View File

@@ -725,7 +725,7 @@ bool SmartAIMgr::CheckUnusedActionParams(SmartScriptHolder const& e)
case SMART_ACTION_SET_CORPSE_DELAY: return sizeof(SmartAction::corpseDelay);
case SMART_ACTION_DISABLE_EVADE: return sizeof(SmartAction::disableEvade);
case SMART_ACTION_GO_SET_GO_STATE: return sizeof(SmartAction::goState);
case SMART_ACTION_SET_CAN_FLY: return sizeof(SmartAction::setFly);
// case SMART_ACTION_SET_CAN_FLY: return sizeof(SmartAction::setFly);
// case SMART_ACTION_REMOVE_AURAS_BY_TYPE: return sizeof(SmartAction::auraType);
case SMART_ACTION_SET_SIGHT_DIST: return sizeof(SmartAction::sightDistance);
case SMART_ACTION_FLEE: return sizeof(SmartAction::flee);
@@ -741,7 +741,7 @@ bool SmartAIMgr::CheckUnusedActionParams(SmartScriptHolder const& e)
// case SMART_ACTION_DESPAWN_SPAWNGROUP: return sizeof(SmartAction::groupSpawn);
// case SMART_ACTION_RESPAWN_BY_SPAWNID: return sizeof(SmartAction::respawnData);
// case SMART_ACTION_INVOKER_CAST: return sizeof(SmartAction::cast);
// case SMART_ACTION_PLAY_CINEMATIC: return sizeof(SmartAction::cinematic);
case SMART_ACTION_PLAY_CINEMATIC: return sizeof(SmartAction::cinematic);
case SMART_ACTION_SET_MOVEMENT_SPEED: return sizeof(SmartAction::movementSpeed);
//case SMART_ACTION_PLAY_SPELL_VISUAL_KIT: return sizeof(SmartAction::raw);
// case SMART_ACTION_OVERRIDE_LIGHT: return sizeof(SmartAction::overrideLight);
@@ -751,7 +751,6 @@ bool SmartAIMgr::CheckUnusedActionParams(SmartScriptHolder const& e)
case SMART_ACTION_SET_HEALTH_PCT: return sizeof(SmartAction::setHealthPct);
//case SMART_ACTION_CREATE_CONVERSATION: return sizeof(SmartAction::raw);
case SMART_ACTION_MOVE_TO_POS_TARGET: return sizeof(SmartAction::moveToPos);
case SMART_ACTION_SET_GO_STATE: return sizeof(SmartAction::goState);
case SMART_ACTION_EXIT_VEHICLE: return NO_PARAMS;
case SMART_ACTION_SET_UNIT_MOVEMENT_FLAGS: return sizeof(SmartAction::movementFlag);
case SMART_ACTION_SET_COMBAT_DISTANCE: return sizeof(SmartAction::combatDistance);
@@ -1890,7 +1889,6 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_ACTION_SUMMON_CREATURE_GROUP:
case SMART_ACTION_RISE_UP:
case SMART_ACTION_MOVE_TO_POS_TARGET:
case SMART_ACTION_SET_GO_STATE:
case SMART_ACTION_EXIT_VEHICLE:
case SMART_ACTION_SET_UNIT_MOVEMENT_FLAGS:
case SMART_ACTION_SET_COMBAT_DISTANCE:

View File

@@ -526,7 +526,7 @@ enum SMART_ACTION
SMART_ACTION_TALK = 1, // groupID from creature_text, duration to wait before TEXT_OVER event is triggered, use first target from targetlist as invoker, useTalkTarget (0/1) - use target as talk target
SMART_ACTION_SET_FACTION = 2, // FactionId (or 0 for default)
SMART_ACTION_MORPH_TO_ENTRY_OR_MODEL = 3, // Creature_template entry(param1) OR ModelId (param2) (or 0 for both to demorph)
SMART_ACTION_SOUND = 4, // SoundId, onlySelf
SMART_ACTION_SOUND = 4, // SoundId, onlySelf, distance
SMART_ACTION_PLAY_EMOTE = 5, // EmoteId
SMART_ACTION_FAIL_QUEST = 6, // QuestID
SMART_ACTION_OFFER_QUEST = 7, // QuestID, directAdd
@@ -572,7 +572,7 @@ enum SMART_ACTION
SMART_ACTION_SET_VISIBILITY = 47, // on/off
SMART_ACTION_SET_ACTIVE = 48, // on/off
SMART_ACTION_ATTACK_START = 49, //
SMART_ACTION_SUMMON_GO = 50, // GameObjectID, DespawnTime in s
SMART_ACTION_SUMMON_GO = 50, // GameObjectID, DespawnTime, targetSummon, summonType (0 time or summoner dies/1 time)
SMART_ACTION_KILL_UNIT = 51, //
SMART_ACTION_ACTIVATE_TAXI = 52, // TaxiID
SMART_ACTION_WP_START = 53, // run/walk, pathID, canRepeat, quest, despawntime, reactState
@@ -637,7 +637,7 @@ enum SMART_ACTION
SMART_ACTION_GAME_EVENT_START = 112, // GameEventId
SMART_ACTION_START_CLOSEST_WAYPOINT = 113, // wp1, wp2, wp3, wp4, wp5, wp6, wp7
SMART_ACTION_RISE_UP = 114, // distance
SMART_ACTION_RANDOM_SOUND = 115, // SoundId1, SoundId2, SoundId3, SoundId4, onlySelf
SMART_ACTION_RANDOM_SOUND = 115, // SoundId1, SoundId2, SoundId3, SoundId4, onlySelf, distance
SMART_ACTION_SET_CORPSE_DELAY = 116, // timer
SMART_ACTION_DISABLE_EVADE = 117, // 0/1 (1 = disabled, 0 = enabled)
SMART_ACTION_GO_SET_GO_STATE = 118, // state
@@ -657,18 +657,18 @@ enum SMART_ACTION
SMART_ACTION_DESPAWN_SPAWNGROUP = 132, /// @todo: NOT SUPPORTED YET
SMART_ACTION_RESPAWN_BY_SPAWNID = 133, /// @todo: NOT SUPPORTED YET
// SMART_ACTION_INVOKER_CAST = 134, /// @todo: solve name conflicts
SMART_ACTION_PLAY_CINEMATIC = 135, // entry, cinematic
SMART_ACTION_PLAY_CINEMATIC = 135, // entry
SMART_ACTION_SET_MOVEMENT_SPEED = 136, // movementType, speedInteger, speedFraction
SMART_ACTION_SET_HEALTH_PCT = 142, // percent
SMART_ACTION_TC_END = 199, // placeholder
// AC-only SmartActions:
// AC-only SmartActions:
SMART_ACTION_AC_START = 200, // placeholder
SMART_ACTION_MOVE_TO_POS_TARGET = 201, // pointId
SMART_ACTION_SET_GO_STATE = 202, // state
// SMART_ACTION_SET_GO_STATE = 202, // state // Replaced by SMART_ACTION_GO_SET_GO_STATE
SMART_ACTION_EXIT_VEHICLE = 203, // none
SMART_ACTION_SET_UNIT_MOVEMENT_FLAGS = 204, // flags
SMART_ACTION_SET_COMBAT_DISTANCE = 205, // combatDistance

View File

@@ -824,7 +824,7 @@ int32 Player::getMaxTimer(MirrorTimerType timer)
{
if (!IsAlive())
return DISABLED_MIRROR_TIMER;
return 1 * IN_MILLISECONDS;
return 2002;
}
default:
return 0;
@@ -920,7 +920,7 @@ void Player::HandleDrowning(uint32 time_diff)
m_MirrorTimer[FIRE_TIMER] -= time_diff;
if (m_MirrorTimer[FIRE_TIMER] < 0)
{
m_MirrorTimer[FIRE_TIMER] += 1 * IN_MILLISECONDS;
m_MirrorTimer[FIRE_TIMER] += 2002;
// Calculate and deal damage
/// @todo: Check this formula
uint32 damage = urand(600, 700);

View File

@@ -29,6 +29,7 @@ enum eTexts
SAY_SUMMON_SKELETONS = 2,
SAY_FROST_TOMB_EMOTE = 4,
SAY_DEATH = 5,
SAY_KILL = 6,
};
enum eNPCs
@@ -140,14 +141,13 @@ public:
pInstance->SetData(DATA_KELESETH, NOT_STARTED);
}
void MoveInLineOfSight(Unit* /*who*/) override {}
/*void KilledUnit(Unit * victim)
void KilledUnit(Unit* victim) override
{
if (victim == me)
return;
DoScriptText(SAY_KILL, me);
}*/
if (victim->IsPlayer())
{
Talk(SAY_KILL);
}
}
void JustDied(Unit* /*killer*/) override
{

View File

@@ -135,7 +135,7 @@ struct npc_raging_flames : public ScriptedAI
if (TempSummon* summon = me->ToTempSummon())
if (Creature* summoner = summon->GetSummonerCreatureBase())
if (summoner->IsAIEnabled)
if (Unit* target = summoner->AI()->SelectTarget(SelectTargetMethod::Random, 1, 100.0f, true, false))
if (Unit* target = summoner->AI()->SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true, false))
me->AddThreat(target, 1000000.0f);
}

View File

@@ -37,12 +37,19 @@ enum Spells
SPELL_ARCANE_TORRENT = 36022,
SPELL_MANA_TAP = 36021,
SPELL_DOMINATION = 35280,
SPELL_ETHEREAL_TELEPORT = 34427,
SPELL_GREATER_INVISIBILITY = 34426,
SPELL_SUMMON_NETHER_WRAITH_1 = 35285,
SPELL_SUMMON_NETHER_WRAITH_2 = 35286,
SPELL_SUMMON_NETHER_WRAITH_3 = 35287,
SPELL_SUMMON_NETHER_WRAITH_4 = 35288,
};
enum Misc
{
ACTION_BRIDGE_MOB_DEATH = 1, // Used by SAI
};
struct boss_pathaleon_the_calculator : public BossAI
{
boss_pathaleon_the_calculator(Creature* creature) : BossAI(creature, DATA_PATHALEON_THE_CALCULATOR)
@@ -53,6 +60,21 @@ struct boss_pathaleon_the_calculator : public BossAI
});
}
void Reset() override
{
_Reset();
if (instance->GetPersistentData(DATA_BRIDGE_MOB_DEATH_COUNT) < 4)
{
DoCastSelf(SPELL_GREATER_INVISIBILITY);
}
}
bool CanAIAttack(Unit const* /*target*/) const override
{
return instance->GetPersistentData(DATA_BRIDGE_MOB_DEATH_COUNT) >= 4;
}
void JustEngagedWith(Unit* /*who*/) override
{
_JustEngagedWith();
@@ -86,18 +108,48 @@ struct boss_pathaleon_the_calculator : public BossAI
context.Repeat(15s);
}).Schedule(25s, [this](TaskContext context)
{
Talk(SAY_DOMINATION);
DoCastRandomTarget(SPELL_DOMINATION, 1, 50.0f);
if (DoCastRandomTarget(SPELL_DOMINATION, 1, 50.0f) == SPELL_CAST_OK)
{
Talk(SAY_DOMINATION);
}
context.Repeat(30s);
}).Schedule(8s, [this](TaskContext context)
{
DoCastAOE(SPELL_ARCANE_EXPLOSION);
context.Repeat(12s);
});
if (IsHeroic())
{
scheduler.Schedule(8s, [this](TaskContext context)
{
DoCastAOE(SPELL_ARCANE_EXPLOSION);
context.Repeat(12s);
});
}
Talk(SAY_AGGRO);
}
void DoAction(int32 actionId) override
{
if (actionId == ACTION_BRIDGE_MOB_DEATH)
{
uint8 mobCount = instance->GetPersistentData(DATA_BRIDGE_MOB_DEATH_COUNT);
instance->StorePersistentData(DATA_BRIDGE_MOB_DEATH_COUNT, ++mobCount);
if (mobCount >= 4)
{
DoCastSelf(SPELL_ETHEREAL_TELEPORT);
Talk(SAY_APPEAR);
scheduler.Schedule(2s, [this](TaskContext)
{
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY1H);
}).Schedule(25s, [this](TaskContext)
{
DoZoneInCombat();
});
}
}
}
void KilledUnit(Unit* victim) override
{
if (victim->IsPlayer())

View File

@@ -63,6 +63,7 @@ enum SpellIds
enum DataIndex
{
DATA_BRIDGE_MOB_DEATH_COUNT,
MAX_DATA_INDEXES
};