Go Back   EQEmulator Home > EQEmulator Forums > Development > Development::Development

Development::Development Forum for development topics and for those interested in EQEMu development. (Not a support forum)

Reply
 
Thread Tools Display Modes
  #1  
Old 02-25-2013, 07:40 AM
myeqsf
Fire Beetle
 
Join Date: Oct 2006
Posts: 6
Default

How unlock mercs slot one more?
Reply With Quote
  #2  
Old 02-25-2013, 08:18 AM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

Quote:
Originally Posted by myeqsf View Post
How unlock mercs slot one more?
That is not possible yet in EQEmu. The only client we have that can even support that option is RoF. And there are probably some new packets that deal with owning multiple mercs that we have not yet looked into.
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote
  #3  
Old 02-26-2013, 05:00 AM
myeqsf
Fire Beetle
 
Join Date: Oct 2006
Posts: 6
Smile

Quote:
Originally Posted by trevius View Post
That is not possible yet in EQEmu. The only client we have that can even support that option is RoF. And there are probably some new packets that deal with owning multiple mercs that we have not yet looked into.
I realize its an enormous amount of work, and i appreciate your efforts.
Reply With Quote
  #4  
Old 02-26-2013, 08:47 AM
Armm
Sarnak
 
Join Date: Feb 2013
Posts: 70
Default

I had level 85 characters, not sure what level the spell is but the spell haste cleric buff yes. If you have pets in the group who dont have pet affinity ( and thus cant get buffs) the cleric chain casts it. If you give the characters pet affinity, the buff sticks on pets and the clerics stop casting it.
Reply With Quote
  #5  
Old 03-01-2014, 10:30 PM
Yummy
Sarnak
 
Join Date: Feb 2014
Posts: 71
Default

Quote:
Originally Posted by myeqsf View Post
How unlock mercs slot one more?
Quote:
Originally Posted by trevius View Post
That is not possible yet in EQEmu. The only client we have that can even support that option is RoF. And there are probably some new packets that deal with owning multiple mercs that we have not yet looked into.
Quote:
Originally Posted by myeqsf View Post
I realize its an enormous amount of work, and i appreciate your efforts.
Is there support for more than one mercenary slot today?

The above quotes are from February 2013.

If so, how?
Reply With Quote
  #6  
Old 02-25-2013, 11:59 AM
bad_captain
Developer
 
Join Date: Feb 2009
Location: Cincinnati, OH
Posts: 512
Default

I haven't tested it specifically, but mercs have a specialattks field. They also have an attack_count field. I'm pretty sure I've at least seen my merc triple, but I'd have to look. I dont think there's any data in the specialattks field, whereas attack_count should match where client get double, triple, and quad attacks. I know there will be a lot of little things that need tweaked, but I am focusing on the major issues right now.

The best way to test is to parse or do some debugging to see for sure.
Reply With Quote
  #7  
Old 02-26-2013, 01:44 AM
bad_captain
Developer
 
Join Date: Feb 2009
Location: Cincinnati, OH
Posts: 512
Default

I'm working on the dismiss/suspend issue. I'm not sure why that broke, but I'm working on it.

I'll check out the duplicate save entries as well.

About the spell, do you mean Blessing of Loyalty, the spell haste buff? I'll have to look more into this, as I don't see this issue at 65. What level and what kind of pet?

Thanks for the feedback.


Edit: I think I've fixed the duplicate saves, and will try to commit tomorrow after more testing.

Last edited by bad_captain; 02-26-2013 at 01:50 AM..
Reply With Quote
  #8  
Old 02-26-2013, 10:07 AM
bad_captain
Developer
 
Join Date: Feb 2009
Location: Cincinnati, OH
Posts: 512
Default

Gotcha. Thanks, that should give me what I need. I was using pet affinity, so that's why I didn't see it.

Now, a good question would be why a level 85 character wouldn't have pet affinity..
Reply With Quote
  #9  
Old 02-26-2013, 05:01 PM
Armm
Sarnak
 
Join Date: Feb 2013
Posts: 70
Default

For servers that pets can be used by all classes Yes i will likely change AA but i thought id let you know because ive seen it happen on bots also.

Thank you for your willingness to converse about this stuff. It is appreciated.
Reply With Quote
  #10  
Old 02-27-2013, 07:25 PM
Armm
Sarnak
 
Join Date: Feb 2013
Posts: 70
Default

I am not sure if this is the right place for this but since it happens only when i am trying to purchase a fungusman or orc tier 2 journeyman healer. Right after i purchase them the zone crashes... debug info below (this is using ROF client)

Code:
---------------------------------------------
[02.27. - 17:15:14] Starting Log: logs/crash_zone_3860.log
[02.27. - 17:15:14] EXCEPTION_ACCESS_VIOLATION
[02.27. - 17:15:14] SymInit: Symbol-SearchPath: '.;C:\EQEMU;C:\EQEMU;C:\Windows;C:\Windows\system32;SRV*C:\websymbols*http://msdl.microsoft.com/download/symbols;', symOptions: 530, UserName: 'Administrator' 
[02.27. - 17:15:14] OS-Version: 6.2.9200 () 0x110-0x3 
[02.27. - 17:15:14] C:\EQEMU\zone.exe:zone.exe (00D00000), size: 24731648 (result: 0), SymType: 'PDB', PDB: 'C:\EQEMU\zone.exe' 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\ntdll.dll:ntdll.dll (777D0000), size: 1404928 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\ntdll.dll', fileVersion: 6.2.9200.16420 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\KERNEL32.DLL:KERNEL32.DLL (76680000), size: 1245184 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\KERNEL32.DLL', fileVersion: 6.2.9200.16384 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\KERNELBASE.dll:KERNELBASE.dll (77420000), size: 679936 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\KERNELBASE.dll', fileVersion: 6.2.9200.16451 
[02.27. - 17:15:14] C:\Windows\system32\apphelp.dll:apphelp.dll (71850000), size: 684032 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\system32\apphelp.dll', fileVersion: 6.2.9200.16420 
[02.27. - 17:15:14] C:\Windows\AppPatch\AcLayers.DLL:AcLayers.DLL (70530000), size: 2555904 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\AppPatch\AcLayers.DLL', fileVersion: 6.2.9200.16420 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\msvcrt.dll:msvcrt.dll (75440000), size: 724992 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\msvcrt.dll', fileVersion: 7.0.9200.16384 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\USER32.dll:USER32.dll (76E50000), size: 1138688 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\USER32.dll', fileVersion: 6.2.9200.16420 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\GDI32.dll:GDI32.dll (76A10000), size: 1036288 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\GDI32.dll', fileVersion: 6.2.9200.16433 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\SHELL32.dll:SHELL32.dll (75500000), size: 17588224 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\SHELL32.dll', fileVersion: 6.2.9200.16496 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\SHLWAPI.dll:SHLWAPI.dll (76F70000), size: 262144 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\SHLWAPI.dll', fileVersion: 6.2.9200.16384 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\OLEAUT32.dll:OLEAUT32.dll (774D0000), size: 569344 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\OLEAUT32.dll', fileVersion: 6.2.9200.16384 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\MPR.dll:MPR.dll (727D0000), size: 77824 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\MPR.dll', fileVersion: 6.2.9200.16384 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\SETUPAPI.dll:SETUPAPI.dll (75020000), size: 1765376 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\SETUPAPI.dll', fileVersion: 6.2.9200.16496 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\sfc.dll:sfc.dll (746B0000), size: 12288 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\sfc.dll', fileVersion: 6.2.9200.16384 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\WINSPOOL.DRV:WINSPOOL.DRV (719D0000), size: 393216 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\WINSPOOL.DRV', fileVersion: 6.2.9200.16384 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\RPCRT4.dll:RPCRT4.dll (751D0000), size: 704512 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\RPCRT4.dll', fileVersion: 6.2.9200.16384 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\combase.dll:combase.dll (77150000), size: 1269760 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\combase.dll', fileVersion: 6.2.9200.16420 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\CFGMGR32.dll:CFGMGR32.dll (76C10000), size: 286720 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\CFGMGR32.dll', fileVersion: 6.2.9200.16384 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\DEVOBJ.dll:DEVOBJ.dll (768E0000), size: 122880 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\DEVOBJ.dll', fileVersion: 6.2.9200.16384 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\SspiCli.dll:SspiCli.dll (74E60000), size: 114688 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\SspiCli.dll', fileVersion: 6.2.9200.16420 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\sfc_os.DLL:sfc_os.DLL (71900000), size: 57344 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\sfc_os.DLL', fileVersion: 6.2.9200.16384 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\CRYPTBASE.dll:CRYPTBASE.dll (74E50000), size: 36864 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\CRYPTBASE.dll', fileVersion: 6.2.9200.16384 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\sechost.dll:sechost.dll (74F80000), size: 212992 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\sechost.dll', fileVersion: 6.2.9200.16384 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\bcryptPrimitives.dll:bcryptPrimitives.dll (74DF0000), size: 331776 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\bcryptPrimitives.dll', fileVersion: 6.2.9200.16384 
[02.27. - 17:15:14] C:\Windows\system32\IMM32.DLL:IMM32.DLL (76E10000), size: 131072 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\system32\IMM32.DLL', fileVersion: 6.2.9200.16384 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\MSCTF.dll:MSCTF.dll (74E80000), size: 905216 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\MSCTF.dll', fileVersion: 6.2.9200.16496 
[02.27. - 17:15:14] C:\Perl\bin\perl512.dll:perl512.dll (28000000), size: 1273856 (result: 0), SymType: '-exported-', PDB: 'C:\Perl\bin\perl512.dll', fileVersion: 5.12.3.1204 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\WS2_32.dll:WS2_32.dll (76BC0000), size: 327680 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\WS2_32.dll', fileVersion: 6.2.9200.16384 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\VERSION.dll:VERSION.dll (73840000), size: 32768 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\VERSION.dll', fileVersion: 6.2.9200.16384 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\ADVAPI32.dll:ADVAPI32.dll (76B10000), size: 712704 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\ADVAPI32.dll', fileVersion: 6.2.9200.16384 
[02.27. - 17:15:14] C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.9200.16384_none_bf100cd445f4d954\COMCTL32.dll:COMCTL32.dll (76900000), size: 552960 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.9200.16384_none_bf100cd445f4d954\COMCTL32.dll', fileVersion: 5.82.9200.16384 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\NSI.dll:NSI.dll (74F60000), size: 32768 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\NSI.dll', fileVersion: 6.2.9200.16384 
[02.27. - 17:15:14] C:\Windows\system32\napinsp.dll:napinsp.dll (74D00000), size: 65536 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\system32\napinsp.dll', fileVersion: 6.2.9200.16384 
[02.27. - 17:15:14] C:\Windows\system32\NLAapi.dll:NLAapi.dll (74CF0000), size: 65536 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\system32\NLAapi.dll', fileVersion: 6.2.9200.16420 
[02.27. - 17:15:14] C:\Windows\System32\mswsock.dll:mswsock.dll (74DA0000), size: 303104 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\System32\mswsock.dll', fileVersion: 6.2.9200.16433 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\DNSAPI.dll:DNSAPI.dll (74C70000), size: 479232 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\DNSAPI.dll', fileVersion: 6.2.9200.16420 
[02.27. - 17:15:14] C:\Windows\System32\winrnr.dll:winrnr.dll (74C60000), size: 36864 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\System32\winrnr.dll', fileVersion: 6.2.9200.16384 
[02.27. - 17:15:14] C:\Windows\System32\rasadhlp.dll:rasadhlp.dll (731D0000), size: 28672 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\System32\rasadhlp.dll', fileVersion: 6.2.9200.16384 
[02.27. - 17:15:14] C:\EQEMU\EMuShareMem.DLL:EMuShareMem.DLL (71910000), size: 622592 (result: 0), SymType: 'PDB', PDB: 'C:\EQEMU\EMuShareMem.DLL' 
[02.27. - 17:15:14] C:\Perl\lib\auto\Cwd\Cwd.dll:Cwd.dll (10000000), size: 20480 (result: 0), SymType: '-exported-', PDB: 'C:\Perl\lib\auto\Cwd\Cwd.dll' 
[02.27. - 17:15:14] C:\Perl\lib\auto\DBI\DBI.dll:DBI.dll (03020000), size: 98304 (result: 0), SymType: '-exported-', PDB: 'C:\Perl\lib\auto\DBI\DBI.dll' 
[02.27. - 17:15:14] C:\Perl\lib\auto\List\Util\Util.dll:Util.dll (04CC0000), size: 28672 (result: 0), SymType: '-exported-', PDB: 'C:\Perl\lib\auto\List\Util\Util.dll' 
[02.27. - 17:15:14] C:\Perl\lib\auto\Filter\Util\Call\Call.dll:Call.dll (04CD0000), size: 20480 (result: 0), SymType: '-exported-', PDB: 'C:\Perl\lib\auto\Filter\Util\Call\Call.dll' 
[02.27. - 17:15:14] C:\Perl\lib\auto\IO\IO.dll:IO.dll (04CE0000), size: 24576 (result: 0), SymType: '-exported-', PDB: 'C:\Perl\lib\auto\IO\IO.dll' 
[02.27. - 17:15:14] C:\Windows\System32\fwpuclnt.dll:fwpuclnt.dll (740E0000), size: 258048 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\System32\fwpuclnt.dll', fileVersion: 6.2.9200.16465 
[02.27. - 17:15:14] C:\Windows\SYSTEM32\dbghelp.dll:dbghelp.dll (71170000), size: 1216512 (result: 0), SymType: '-exported-', PDB: 'C:\Windows\SYSTEM32\dbghelp.dll', fileVersion: 6.2.9200.16384 
[02.27. - 17:15:14] c:\eqemu\eqemuserver\zone\client_packet.cpp (13639): Client::Handle_OP_MercenaryHire 
[02.27. - 17:15:14] c:\eqemu\eqemuserver\zone\client_packet.cpp (472): Client::HandlePacket 
[02.27. - 17:15:14] c:\eqemu\eqemuserver\zone\client_process.cpp (712): Client::Process 
[02.27. - 17:15:14] c:\eqemu\eqemuserver\zone\entity.cpp (509): EntityList::MobProcess 
[02.27. - 17:15:14] c:\eqemu\eqemuserver\zone\net.cpp (492): main 
[02.27. - 17:15:14] f:\dd\vctools\crt_bld\self_x86\crt\src\crt0.c (278): __tmainCRTStartup 
[02.27. - 17:15:14] f:\dd\vctools\crt_bld\self_x86\crt\src\crt0.c (189): mainCRTStartup 
[02.27. - 17:15:14] ERROR: SymGetLineFromAddr64, GetLastError: 487 (Address: 766A8543) 
[02.27. - 17:15:14] 766A8543 (KERNEL32): (filename not available): BaseThreadInitThunk 
[02.27. - 17:15:14] ERROR: SymGetLineFromAddr64, GetLastError: 487 (Address: 7782AC69) 
[02.27. - 17:15:14] 7782AC69 (ntdll): (filename not available): RtlInitializeExceptionChain 
[02.27. - 17:15:14] ERROR: SymGetLineFromAddr64, GetLastError: 487 (Address: 7782AC3C) 
[02.27. - 17:15:14] 7782AC3C (ntdll): (filename not available): RtlInitializeExceptionChain
Reply With Quote
  #11  
Old 02-27-2013, 07:32 PM
Armm
Sarnak
 
Join Date: Feb 2013
Posts: 70
Default

Happens whenever you purchase a merc and you are over level 85. Somewhat expected but i was suprised it crashed the zone. FYI
Reply With Quote
  #12  
Old 02-28-2013, 03:25 AM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

Odd, I thought I had fixed that particular crash and committed the fix, but maybe I only fixed it on my own server and forgot to commit it.

The problem is that in the handling for hiring a merc in client_packet.cpp, it makes the call to LoadMerc(), and then spawns the merc without first making sure it actually got one returned. I highlighted the line below where the issue is. We just need an "if (merc)" added right below that line to prevent the crash.
Code:
void Client::Handle_OP_MercenaryHire(const EQApplicationPacket *app)
{
// The payload is 16 bytes. First four bytes are the Merc ID (Template ID)
if(app->size != sizeof(MercenaryMerchantRequest_Struct))
{
LogFile->write(EQEMuLog::Debug, "Size mismatch in OP_MercenaryHire expected %i got %i", sizeof(MercenaryMerchantRequest_Struct), app->size);

DumpPacket(app);

return;
}

MercenaryMerchantRequest_Struct* mmrq = (MercenaryMerchantRequest_Struct*) app->pBuffer;
uint32 merc_template_id = mmrq->MercID;
uint32 merchant_id = mmrq->MercMerchantID;
uint32 merc_unk1 = mmrq->MercUnk01;
uint32 merc_unk2 = mmrq->MercUnk02;

DumpPacket(app);

if(MERC_DEBUG > 0)
Message(7, "Mercenary Debug: Template ID (%i), Merchant ID (%i), Unknown1 (%i), Unknown2 (%i)", merc_template_id, merchant_id, merc_unk1, merc_unk2);

//HirePending = true;
SetHoTT(0);
SendTargetCommand(0);

MercTemplate* merc_template = zone->GetMercTemplate(merc_template_id);

if(merc_template) {

if (GetMercID()) {
// 6 - You must dismiss the mercenary before hiring a new one.
SendMercMerchantResponsePacket(6);
}
else
{
// 0 is approved hire request
SendMercMerchantResponsePacket(0);

// Set time remaining to max on Hire
GetEPP().mercTimerRemaining = RuleI(Mercs, UpkeepIntervalMS);

// Get merc, assign it to client & spawn
Merc* merc = Merc::LoadMerc(this, merc_template, merchant_id);
SpawnMerc(merc);
}
}

}
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote
  #13  
Old 02-28-2013, 09:37 AM
bad_captain
Developer
 
Join Date: Feb 2009
Location: Cincinnati, OH
Posts: 512
Default

I have this fix in (as well as others) , I just need some time to merge in all the recent changes and commit. The issue is there is only merc data through lvl 85. On my next stat update, I'll try to add merc data through lvl 100, since RoF can be used.

I've just been crazy busy and haven't had a chance to commit (I've also been trying to track down the depop bug).
Reply With Quote
  #14  
Old 03-01-2013, 01:24 AM
bad_captain
Developer
 
Join Date: Feb 2009
Location: Cincinnati, OH
Posts: 512
Default

It should no longer crash if a merc can't spawn, but I will have to add in mercs to 100 when I get a chance. It's more of an issue for spells and such for those levels as I have a script I use to generate the stats, but I'll see what i can do.
Reply With Quote
  #15  
Old 03-01-2013, 08:52 AM
Armm
Sarnak
 
Join Date: Feb 2013
Posts: 70
Default

Thank you for that update! I hear yah on the crazy busy.
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 09:49 AM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3