Jump to content
TrinityCore

Dreadii

Members
  • Posts

    120
  • Joined

  • Last visited

Recent Profile Visitors

4623 profile views

Dreadii's Achievements

Newbie

Newbie (1/14)

2

Reputation

  1. You really want to get more people into emulation by literally rewriting everything and breaking everything AND expecting professional coding standards from an open source community project? Please wake up. This wont happen. You cannot invite less experienced people while expecting them to work like a master-degree full-time nerd. Considering the fact that most people just left the emulation scene because they have grown up, changed their life or went private special snowflake mode your suggested changes will have no positive impact at all. Even if the core would make it until there most people would just leech it and do private projects as they always do.
  2. i preffer vc++ 2010 more than 2009. for TC... for any other c++ programms i use c++ 2009
  3. the 2nd error is that the sign for _DoAggroPulse isn't found so i think the sign must be added but no idea where and how oke i have dropped the _DoAggroPulse script, no compile error but now lets see that the script will work Update: hmpf i need the sql for algalon and the planetarium cause he said no aggro sounds etc cause missing texts and object i think
  4. hmmm i have generated code with cmake, than i have added the script in the sourcefolder, i have deleted all in the cmake build directory, i have rerun cmake to generate the new files have started compiling but every time 12 succes 2errors libs and authserver builded but worldserver is missing every time i found 2 error messages at the code: 10>..\..\..\..\mike2011lp-DreamCore-132f92b\src\server\scripts\Northrend\Ulduar\ulduar\boss_algalon.cpp(285): error C2065: 'GO_GIFT_OF_THE_OBSERVER': nichtdeklarierter Bezeichner 10>..\..\..\..\mike2011lp-DreamCore-132f92b\src\server\scripts\Northrend\Ulduar\ulduar\boss_algalon.cpp(336): error C3861: "_DoAggroPulse": Bezeichner wurde nicht gefunden. and at the end: 13>LINK : fatal error LNK1181: Eingabedatei "..\scripts\Release\scripts.lib" kann nicht geöffnet werden. 14>------ Erstellen gestartet: Projekt: ALL_BUILD, Konfiguration: Release Win32 ------ 14> Building Custom Rule C:/Users/Game Profil/Desktop/mike2011lp-DreamCore-132f92b/CMakeLists.txt 14> CMake does not need to re-run because C:\Users\Game Profil\Desktop\nyanynacore\CMakeFiles\generate.stamp is up-to-date. 15>------ Erstellen übersprungen: Projekt: INSTALL, Konfiguration: Release Win32 ------ 15>Für diese Projektmappenkonfiguration wurde kein zu erstellendes Projekt ausgewählt. ========== Erstellen: 12 erfolgreich, Fehler bei 2, 0 aktuell, 1 übersprungen ==========
  5. so i have it understand: 1.) rum cmake and compile the core normaly 2.) after compile delete the "CmakeFiles" in the build folder 3.)add the algalon script in the ulduar folder of the source folder 4.) run cmake again and generate codes again 5.) start compiling again 6.) the wordlsevrer.exe in the release folder got then the script included ?
  6. do i have to delete the Cmake folder in the sourcecode folder or in the folder where i try to compile ?
  7. Hiho, I have a not so funny problem with my core: I have added a full script for algalon in ulduar. I thought I only have to delete the old script and paste the new. allyright i've done it. i have run cmake, and start compiling. But every try i got this error: 13>LINK : fatal error LNK1181: Eingabedatei "..\scripts\Release\scripts.lib" kann nicht geöffnet werden. here the boss_algalon.cpp script, I gonna try to compile: /* * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/> * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see <http://www.gnu.org/licenses/>. */ #include "ScriptPCH.h" #include "ulduar.h" enum Spells { SPELL_ASCEND = 64487, SPELL_BERSERK = 47008, SPELL_BIG_BANG_10 = 64443, SPELL_BIG_BANG_25 = 64584, SPELL_COSMIC_SMASH_10 = 62301, SPELL_COSMIC_SMASH_25 = 64598, SPELL_PHASE_PUNCH = 64412, SPELL_PHASE_PUNCH_PHASE = 64417, SPELL_QUANTUM_STRIKE_10 = 64395, SPELL_QUANTUM_STRIKE_25 = 64592, SPELL_BLACK_HOLE_CREDIT = 65312, SPELL_BLACK_HOLE_EXPLOSION_10 = 64122, SPELL_BLACK_HOLE_EXPLOSION_25 = 65108, SPELL_BLACK_HOLE_SPAWN_VISUAL = 62003, SPELL_BLACK_HOLE_STATE = 64135, SPELL_BLACK_HOLE_TRIGGER = 62185, SPELL_BLACK_HOLE_PHASE = 62168, SPELL_DESPAWN_BLACK_HOLE = 64391, SPELL_ARCANE_BARAGE_10 = 64599, SPELL_ARCANE_BARAGE_25 = 64607, SPELL_VOID_ZONE_VISUAL = 64469, SPELL_DUAL_WIELD = 42459, SPELL_BOSS_FINISHED = 65184, }; enum Creatures { CREATURE_COLLAPSING_STAR = 32955, CREATURE_BLACK_HOLE = 32953, CREATURE_LIVING_CONSTELLATION = 33052, CREATURE_DARK_MATTER = 33089, CREATURE_AZEROTH = 34246, CREATURE_COSMIC_SMASH_TRIGGER = 33104, CREATURE_COSMIC_SMASH_TARGET = 33105 }; enum Yells { SAY_AGGRO = -1603000, SAY_SLAY_1 = -1603001, SAY_SLAY_2 = -1603002, SAY_ENGAGED_FOR_FIRST_TIME = -1603003, SAY_PHASE_2 = -1603004, SAY_SUMMON_COLLAPSING_STAR = -1603005, SAY_DEATH_1 = -1603006, SAY_DEATH_2 = -1603007, SAY_DEATH_3 = -1603008, SAY_DEATH_4 = -1603009, SAY_DEATH_5 = -1603010, SAY_BERSERK = -1603011, SAY_BIG_BANG_1 = -1603012, SAY_BIG_BANG_2 = -1603013, SAY_TIMER_1 = -1603014, SAY_TIMER_2 = -1603015, SAY_TIMER_3 = -1603016, SAY_SUMMON_1 = -1603017, SAY_SUMMON_2 = -1603018, SAY_SUMMON_3 = -1603019, }; enum Events { EVENT_NONE, EVENT_ASCEND, EVENT_BERSERK, EVENT_BIGBANG, EVENT_COSMICSMASH, EVENT_PHASEPUNCH, EVENT_QUANTUMSTRIKE, EVENT_COLLAPSINGSTAR, EVENT_LIVINGCONSTELLATION }; static Position Locations[]= { {1632.36f, -310.09f, 417.33f, 0.0f}, // room center {1632.44f, -301.55f, 417.33f, 0.0f}, // azeroth {1632.36f, -310.09f, 385.0f, 0.0f} // cosmic smash trigger }; static Position constellationLocations[]= { {1649.30f, -295.34f, 458.13f, 0.0f}, {1612.22f, -294.84f, 458.13f, 0.0f}, {1629.95f, -327.90f, 458.13f, 0.0f} }; class boss_algalon : public CreatureScript { public: boss_algalon() : CreatureScript("boss_algalon") { } CreatureAI* GetAI(Creature* pCreature) const { return new boss_algalonAI(pCreature); } struct boss_algalonAI : public BossAI { boss_algalonAI(Creature* c) : BossAI(c, TYPE_ALGALON) { summon = false; // spell gets triggered from caster, should be triggered from destination? SpellEntry* tempSpell; tempSpell = GET_SPELL(RAID_MODE(62311, 64596)); if (tempSpell) tempSpell->rangeIndex = 13; //tempSpell = GET_SPELL(64597); //if (tempSpell) // tempSpell->EffectImplicitTargetA[0] = TARGET_UNIT_NEARBY_ENTRY; } uint8 starCount; uint32 phase; uint32 stepTimer; uint32 step; bool summon; void Reset() { _Reset(); if (summon) me->setFaction(7); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); phase = 1; stepTimer = 0; starCount = 0; DoCast(me, SPELL_DUAL_WIELD, true); } void EnterCombat(Unit* who) { _EnterCombat(); me->setFaction(14); if (summon) { me->InterruptSpell(CURRENT_CHANNELED_SPELL); DoZoneInCombat(); } else { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->SetReactState(REACT_PASSIVE); step = 1; } events.ScheduleEvent(EVENT_BERSERK, 6*MINUTE*IN_MILLISECONDS); events.ScheduleEvent(EVENT_BIGBANG, 90*IN_MILLISECONDS); events.ScheduleEvent(EVENT_PHASEPUNCH, 15*IN_MILLISECONDS); events.ScheduleEvent(EVENT_QUANTUMSTRIKE, urand(4*IN_MILLISECONDS, 14*IN_MILLISECONDS)); events.ScheduleEvent(EVENT_COSMICSMASH, 25*IN_MILLISECONDS); events.ScheduleEvent(EVENT_COLLAPSINGSTAR, 15*IN_MILLISECONDS); events.ScheduleEvent(EVENT_LIVINGCONSTELLATION, 50*IN_MILLISECONDS); } void FinishEncounter() { if (instance) instance->DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, SPELL_BOSS_FINISHED); } void KilledUnit(Unit * /*victim*/) { DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2), me); } void JumpToNextStep(uint32 timer) { stepTimer = timer; ++step; } void SummonCollapsingStars() { DoScriptText(SAY_SUMMON_COLLAPSING_STAR, me); for (uint8 i = starCount; i < 4; ++i) { float x, y, angle; angle = float(2 * M_PI * rand_norm()); x = Locations[0].GetPositionX() + 15.0f * cos(angle); y = Locations[0].GetPositionY() + 15.0f * sin(angle); if (Creature* collapsingStar = me->SummonCreature(CREATURE_COLLAPSING_STAR, x, y, Locations[0].GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3*IN_MILLISECONDS)) { ++starCount; collapsingStar->SetReactState(REACT_PASSIVE); collapsingStar->GetMotionMaster()->MoveRandom(20.0f); collapsingStar->SetInCombatWithZone(); } } } void SummonLivingConstallations() { for (uint8 i = 0; i < 3; ++i) { if (Creature* livingConstellation = me->SummonCreature(CREATURE_LIVING_CONSTELLATION, constellationLocations[i], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1*IN_MILLISECONDS)) { livingConstellation->SetInCombatWithZone(); if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) livingConstellation->AI()->AttackStart(target); } } } void JustSummoned(Creature* summon) { summons.Summon(summon); } void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) { switch (summon->GetEntry()) { case CREATURE_COLLAPSING_STAR: --starCount; me->SummonCreature(CREATURE_BLACK_HOLE, summon->GetPositionX(), summon->GetPositionY(), summon->GetPositionZ()); break; default: break; } } void SpellHitTarget(Unit* target, const SpellEntry* spell) { if (spell->Id == SPELL_PHASE_PUNCH) if (Aura* phasePunch = target->GetAura(SPELL_PHASE_PUNCH)) if (phasePunch->GetStackAmount() > 4) { target->CastSpell(target, SPELL_PHASE_PUNCH_PHASE, true); target->CombatStop(); target->getHostileRefManager().deleteReferences(); } } void UpdateAI(const uint32 diff) { if (!UpdateVictim()) return; if (phase == 1 && HealthBelowPct(20)) { phase = 2; DoScriptText(SAY_PHASE_2, me); summons.DespawnAll(); events.CancelEvent(EVENT_COLLAPSINGSTAR); events.CancelEvent(EVENT_LIVINGCONSTELLATION); //SummonUnstableBlackHoles(); } if (HealthBelowPct(2)) { me->SummonGameObject(GO_GIFT_OF_THE_OBSERVER, 1634.258667f, -295.101166f,417.321381f,0,0,0,0,0,0); // All of them. or random? DoScriptText(SAY_DEATH_1, me); DoScriptText(SAY_DEATH_2, me); DoScriptText(SAY_DEATH_3, me); DoScriptText(SAY_DEATH_4, me); DoScriptText(SAY_DEATH_5, me); me->DisappearAndDie(); _JustDied(); return; } if (!summon) { if (stepTimer <= diff) { switch (step) { case 1: DoScriptText(SAY_SUMMON_1, me); JumpToNextStep(7500); break; case 2: DoScriptText(SAY_SUMMON_2, me); JumpToNextStep(6000); break; case 3: DoScriptText(SAY_SUMMON_3, me); JumpToNextStep(11000); break; case 4: DoScriptText(SAY_ENGAGED_FOR_FIRST_TIME, me); JumpToNextStep(11000); break; case 5: DoScriptText(SAY_AGGRO, me); JumpToNextStep(7000); break; case 6: me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->SetReactState(REACT_AGGRESSIVE); summon = true; break; } } else stepTimer -= diff; return; } _DoAggroPulse(diff); events.Update(diff); if (me->HasUnitState(UNIT_STAT_CASTING)) return; while (uint32 eventId = events.ExecuteEvent()) { switch (eventId) { case EVENT_BIGBANG: DoScriptText(RAND(SAY_BIG_BANG_1, SAY_BIG_BANG_2), me); DoCast(me->getVictim(), RAID_MODE(SPELL_BIG_BANG_10, SPELL_BIG_BANG_25)); events.ScheduleEvent(EVENT_BIGBANG, 90*IN_MILLISECONDS); break; case EVENT_PHASEPUNCH: DoCast(me->getVictim(), SPELL_PHASE_PUNCH, true); events.ScheduleEvent(EVENT_PHASEPUNCH, 15*IN_MILLISECONDS); break; case EVENT_QUANTUMSTRIKE: DoCast(me->getVictim(), RAID_MODE(SPELL_QUANTUM_STRIKE_10, SPELL_QUANTUM_STRIKE_25)); events.ScheduleEvent(EVENT_QUANTUMSTRIKE, urand(4*IN_MILLISECONDS, 14*IN_MILLISECONDS)); break; case EVENT_COSMICSMASH: DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0), RAID_MODE(SPELL_COSMIC_SMASH_10, SPELL_COSMIC_SMASH_25)); events.ScheduleEvent(EVENT_COSMICSMASH, 25*IN_MILLISECONDS); break; case EVENT_COLLAPSINGSTAR: SummonCollapsingStars(); events.ScheduleEvent(EVENT_COLLAPSINGSTAR, 45*IN_MILLISECONDS); break; case EVENT_LIVINGCONSTELLATION: SummonLivingConstallations(); events.ScheduleEvent(EVENT_LIVINGCONSTELLATION, 50*IN_MILLISECONDS); break; case EVENT_BERSERK: DoScriptText(SAY_BERSERK, me); DoCast(me, SPELL_BERSERK, true); events.ScheduleEvent(EVENT_ASCEND, 3*IN_MILLISECONDS); break; case EVENT_ASCEND: DoCast(me, SPELL_ASCEND); events.ScheduleEvent(EVENT_ASCEND, 10*IN_MILLISECONDS); break; default: break; } } DoMeleeAttackIfReady(); EnterEvadeIfOutOfCombatArea(diff); } }; }; class mob_collapsing_star : public CreatureScript { public: mob_collapsing_star() : CreatureScript("mob_collapsing_star") { } CreatureAI* GetAI(Creature* pCreature) const { return new mob_collapsing_starAI(pCreature); } struct mob_collapsing_starAI : public ScriptedAI { mob_collapsing_starAI(Creature* pCreature) : ScriptedAI(pCreature) { } uint32 loseHealthTimer; void Reset() { loseHealthTimer = 1*IN_MILLISECONDS; } void JustDied(Unit * /*killer*/) { DoCast(SPELL_BLACK_HOLE_CREDIT); DoCast(me, RAID_MODE(SPELL_BLACK_HOLE_EXPLOSION_10, SPELL_BLACK_HOLE_EXPLOSION_25), true); } void UpdateAI(const uint32 diff) { if (loseHealthTimer <= diff) { me->DealDamage(me, me->CountPctFromMaxHealth(1)); loseHealthTimer = 1*IN_MILLISECONDS; } else loseHealthTimer -= diff; } }; }; class npc_living_constellation : public CreatureScript { public: npc_living_constellation() : CreatureScript("npc_living_constellation") { } CreatureAI* GetAI(Creature* pCreature) const { return new npc_living_constellationAI(pCreature); } struct npc_living_constellationAI : public ScriptedAI { npc_living_constellationAI(Creature* pCreature) : ScriptedAI(pCreature) { } uint32 arcaneBarrageTimer; void Reset() { me->SetFlying(true); me->SetSpeed(MOVE_FLIGHT, 0.7f); arcaneBarrageTimer = urand(5*IN_MILLISECONDS, 10*IN_MILLISECONDS); } void MoveInLineOfSight(Unit* who) { ScriptedAI::MoveInLineOfSight(who); if (who->GetTypeId() != TYPEID_UNIT) return; if (who->GetEntry() == CREATURE_BLACK_HOLE && who->GetDistance(me) < 5.0f) { who->ToCreature()->CastSpell(who, SPELL_DESPAWN_BLACK_HOLE, true); who->ToCreature()->ForcedDespawn(1*IN_MILLISECONDS); me->DealDamage(me, me->GetHealth()); } } void UpdateAI(const uint32 diff) { if (arcaneBarrageTimer <= diff) { DoCast(RAID_MODE(SPELL_ARCANE_BARAGE_10, SPELL_ARCANE_BARAGE_25)); arcaneBarrageTimer = 5*IN_MILLISECONDS; } else arcaneBarrageTimer -= diff; } }; }; class npc_black_hole : public CreatureScript { public: npc_black_hole() : CreatureScript("npc_black_hole") { } CreatureAI* GetAI(Creature* pCreature) const { return new npc_black_holeAI(pCreature); } struct npc_black_holeAI : public Scripted_NoMovementAI { npc_black_holeAI(Creature* pCreature) : Scripted_NoMovementAI(pCreature) { DoCast(me, SPELL_BLACK_HOLE_SPAWN_VISUAL, true); DoCast(me, SPELL_BLACK_HOLE_STATE, true); DoCast(me, SPELL_BLACK_HOLE_TRIGGER, true); DoCast(me, SPELL_VOID_ZONE_VISUAL, true); me->setFaction(14); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); me->SetReactState(REACT_PASSIVE); me->SetInCombatWithZone(); } void SpellHitTarget(Unit* target, const SpellEntry* spell) { if (spell->Id == SPELL_BLACK_HOLE_PHASE) { target->CombatStop(); target->getHostileRefManager().deleteReferences(); } } }; }; class go_planetarium_access : public GameObjectScript { public: go_planetarium_access() : GameObjectScript("go_planetarium_access") { } bool OnGossipHello(Player* player, GameObject* go) { InstanceScript* pInstance = go->GetInstanceScript(); if (player->HasItemCount(45796, 1) || player->HasItemCount(45798, 1)) { pInstance->SetBossState(TYPE_ALGALON, SPECIAL); go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1); go->SetGoState(GO_STATE_ACTIVE); } return true; } }; // cast spell effects on same target class spell_cosmic_smash : public SpellScriptLoader { public: spell_cosmic_smash() : SpellScriptLoader("spell_cosmic_smash") { } class spell_cosmic_smash_SpellScript : public SpellScript { PrepareSpellScript(spell_cosmic_smash_SpellScript); void FilterTargetsInitial(std::list<Unit*>& unitList) { sharedUnitList = unitList; } void FilterTargetsSubsequent(std::list<Unit*>& unitList) { unitList = sharedUnitList; } void Register() { OnUnitTargetSelect += SpellUnitTargetFn(spell_cosmic_smash_SpellScript::FilterTargetsInitial, EFFECT_0, TARGET_UNIT_AREA_ENEMY_SRC); OnUnitTargetSelect += SpellUnitTargetFn(spell_cosmic_smash_SpellScript::FilterTargetsSubsequent, EFFECT_1, TARGET_UNIT_AREA_ENEMY_SRC); } std::list<Unit*> sharedUnitList; }; SpellScript* GetSpellScript() const { return new spell_cosmic_smash_SpellScript(); } }; // set trigger summon location class spell_cosmic_smash_summon_trigger : public SpellScriptLoader { public: spell_cosmic_smash_summon_trigger() : SpellScriptLoader("spell_cosmic_smash_summon_trigger") { } class spell_cosmic_smash_summon_trigger_SpellScript : public SpellScript { PrepareSpellScript(spell_cosmic_smash_summon_trigger_SpellScript); void HandleScript(SpellEffIndex effIndex) { PreventHitDefaultEffect(effIndex); GetCaster()->SummonCreature(CREATURE_COSMIC_SMASH_TRIGGER, Locations[2], TEMPSUMMON_TIMED_DESPAWN, 7900); } void Register() { OnEffect += SpellEffectFn(spell_cosmic_smash_summon_trigger_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SUMMON); } }; SpellScript* GetSpellScript() const { return new spell_cosmic_smash_summon_trigger_SpellScript(); } }; // set target summon location class spell_cosmic_smash_summon_target : public SpellScriptLoader { public: spell_cosmic_smash_summon_target() : SpellScriptLoader("spell_cosmic_smash_summon_target") { } class spell_cosmic_smash_summon_target_SpellScript : public SpellScript { PrepareSpellScript(spell_cosmic_smash_summon_target_SpellScript); void HandleScript(SpellEffIndex effIndex) { PreventHitDefaultEffect(effIndex); GetCaster()->SummonCreature(CREATURE_COSMIC_SMASH_TARGET, GetCaster()->GetPositionX(), GetCaster()->GetPositionY(), GetCaster()->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN, 10*IN_MILLISECONDS); } void Register() { OnEffect += SpellEffectFn(spell_cosmic_smash_summon_target_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SUMMON); } }; SpellScript* GetSpellScript() const { return new spell_cosmic_smash_summon_target_SpellScript(); } }; // set damage based on proximity class spell_cosmic_smash_dmg : public SpellScriptLoader { public: spell_cosmic_smash_dmg() : SpellScriptLoader("spell_cosmic_smash_dmg") { } class spell_cosmic_smash_dmg_SpellScript : public SpellScript { PrepareSpellScript(spell_cosmic_smash_dmg_SpellScript); void CalcDamage(SpellEffIndex /*effIndex*/) { if (!GetHitUnit() || !GetTargetDest()) return; float distance = GetHitUnit()->GetExactDist2d(GetTargetDest()); if (distance < 3.4f) return; SetHitDamage(int32(GetHitDamage() * 10.0f / pow(distance, 1.9f))); } void Register() { OnEffect += SpellEffectFn(spell_cosmic_smash_dmg_SpellScript::CalcDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); } }; SpellScript* GetSpellScript() const { return new spell_cosmic_smash_dmg_SpellScript(); } }; void AddSC_boss_algalon() { new boss_algalon(); new mob_collapsing_star(); new npc_living_constellation(); new npc_black_hole(); new go_planetarium_access(); new spell_cosmic_smash(); new spell_cosmic_smash_summon_trigger(); new spell_cosmic_smash_summon_target(); new spell_cosmic_smash_dmg(); }
×
×
  • Create New...