Ok so lets start.The things we will need to edit to make this custom cinematics to work are following dbc files and yes core :
FileData.dbc ,Movie.dbc, MovieFileData.dbc MovieVariations.dbc and CharacterHandler.cpp (on some cores ) + Extended Script or just change packet
Now i keep using Taliis for this kind of job so i would suggestion you too to use it.Open all dbc into it and have targeted FileData.dbc
As you can see there are 3 columns
0: Id -> which point to third column in MovieVariation.dbc
1: Name of the avi
2: Expansion flags if we can say like that
Now edit it and insert your own .avi informations
Like me
id for 1 higher
name as you can see it is Preview.avi
and in third column leave it as 14.

Now open Movie.dbc
first column is id of your movie, pick any number i have 20 and 21
second column is full path to your movie *Notice you can store it anywhere as long you include it into patch*
third column volume of the movie i guess? for each record is 100 so i have left that at 100

Now open MovieVariation.dbc
As you can see there are 3 columns but what do they mean? o.O
first is random number pic any number that you want
second column is ID-(First Column of Movie.dbc)
and last says if movieid for moviefiledata-> which points to resolutions and location of the movie.Put here 1 higher number or two.

Now last Open MovieFileData.dbc
Here we have 2 columns
First Represent ID ->(MovieVariation.dbc column 3)
second resolution of the movie it self 800 or 1024 so if your video is rendered in 800x600 then put it 800 if it is 1024x720 then put 1024.

Now we have finished editing of dbc files, but how we are going to see that movie in game? For that we need first to remove Cinematic Sequence check in core.For this most cores have this implemented in CharaterHandler.cpp
so go there and search for something like this
if(plr->m_FirstLogin or search for SMSG_TRIGGER_CINEMATIC
Quote
//Show cinematic at the first time that player login
if (!pCurrChar->getCinematic())
{
pCurrChar->setCinematic(1);
if (ChrClassesEntry const* cEntry = sChrClassesStore.LookupEntry(pCurrChar->getClass()))
{
if (cEntry->CinematicSequence)
pCurrChar->SendCinematicStart(cEntry->CinematicSequence);
else if (ChrRacesEntry const* rEntry = sChrRacesStore.LookupEntry(pCurrChar->getRace()))
pCurrChar->SendCinematicStart(rEntry->CinematicSequence);
// send new char string if not empty
if (!sWorld.GetNewCharString().empty())
chH.PSendSysMessage(sWorld.GetNewCharString().c_str());
}
}
if (!pCurrChar->getCinematic())
{
pCurrChar->setCinematic(1);
if (ChrClassesEntry const* cEntry = sChrClassesStore.LookupEntry(pCurrChar->getClass()))
{
if (cEntry->CinematicSequence)
pCurrChar->SendCinematicStart(cEntry->CinematicSequence);
else if (ChrRacesEntry const* rEntry = sChrRacesStore.LookupEntry(pCurrChar->getRace()))
pCurrChar->SendCinematicStart(rEntry->CinematicSequence);
// send new char string if not empty
if (!sWorld.GetNewCharString().empty())
chH.PSendSysMessage(sWorld.GetNewCharString().c_str());
}
}
with this
Quote
if (!pCurrChar->getCinematic())
pCurrChar->setCinematic(1);
pCurrChar->setCinematic(1);
Then search for
Quote
if (pCurrChar->HasAtLoginFlag(AT_LOGIN_FIRST))
pCurrChar->RemoveAtLoginFlag(AT_LOGIN_FIRST);
pCurrChar->RemoveAtLoginFlag(AT_LOGIN_FIRST);
with this
Quote
if (pCurrChar->HasAtLoginFlag(AT_LOGIN_FIRST))
{
pCurrChar->SendMovieStart(put here id of your movie or any other movie in wow :D);
pCurrChar->RemoveAtLoginFlag(AT_LOGIN_FIRST);
}
{
pCurrChar->SendMovieStart(put here id of your movie or any other movie in wow :D);
pCurrChar->RemoveAtLoginFlag(AT_LOGIN_FIRST);
}
And Also for Trinity and MaNGOS you will need to remove cinematic.cpp from project and from scriptloader
Now for Arcemu and ascent based emulators you will only need to do one thing
go to CharacterHandler.cpp and search for
Quote
if(plr->m_FirstLogin)
{
uint32 introid = plr->info->introid;
OutPacket(SMSG_TRIGGER_CINEMATIC, 4, &introid);
{
uint32 introid = plr->info->introid;
OutPacket(SMSG_TRIGGER_CINEMATIC, 4, &introid);
and replace it with this
Quote
if(plr->m_FirstLogin)
{
/*uint32 introid = plr->info->introid;
OutPacket(SMSG_TRIGGER_CINEMATIC, 4, &introid);*/
{
/*uint32 introid = plr->info->introid;
OutPacket(SMSG_TRIGGER_CINEMATIC, 4, &introid);*/
Now we will create a one easy script just to send a SMSG_TRIGGER_MOVIE packet and using hook it will trigger it on character creation :) Dont forget also to put all cinematic sequences in db as 1
so here is a little command for that too
Quote
Update playercreateinfo set introid =1;
Now for Script you can use this
Quote
#include "StdAfx.h"
#include "Setup.h"
void OnEnterWorld(Player* pPlayer) //when player enters zone
{
uint32 movieid = 20;
pPlayer->GetSession()->OutPacket(SMSG_TRIGGER_MOVIE, 4, &movieid);
}
void SetupOnEnter(ScriptMgr * mgr)
{
mgr->register_hook(SERVER_HOOK_EVENT_ON_FIRST_ENTER_WORLD, OnEnterWorld);
}
#include "Setup.h"
void OnEnterWorld(Player* pPlayer) //when player enters zone
{
uint32 movieid = 20;
pPlayer->GetSession()->OutPacket(SMSG_TRIGGER_MOVIE, 4, &movieid);
}
void SetupOnEnter(ScriptMgr * mgr)
{
mgr->register_hook(SERVER_HOOK_EVENT_ON_FIRST_ENTER_WORLD, OnEnterWorld);
}
Add it and compile it inside the core :)
And after all of this you should have something like this just your video playing in game :D
Custom Intro Preview
Oh :D Dont worry i havent forgot about rendering and using proper codec for this video. For your video to be played in wow you will need to convert it using xvid codec.Now idk too much what program to use but i have used Total Video Converted and it worked fine as you can see.Dont forget to install lastest codec packs from ffddshow and just in case install xvid codec too :)
-Eatos-














