Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

Season 9 Episode 1 Kor

Evolution Team
Joined
Apr 26, 2014
Messages
634
Reaction score
382
Hello all,
I had decided to start a project with Season 9 Episode 1 Kor Version.
Currectly now i'm trying first to build all basic stuff before going on GameServer Coding.

This project will be open source to all :)
All who want to join are welcomed.

Steps how does this development going:
1. Configurate server files
2. Translate server files
3. Create plugins
4. Translate client files
5. Configurate client files
6. Create client plugin

So basicly i will start with information that is required:
//==========================================================
//--------------- Season 9 Episode 1 ---------------------//
//--------------- Protocol : Kor -----------------------//
//---- Credits: Th3AnG3L, DarkHaziel, Ashlay, NanoGuy ----//
//==========================================================




//==========================
//-- Server Configs
//==========================
-->> Organize Server Files - 99%
-->> Setup Database - 90%
-->> Running Server - 100%
-->> Running Client - 100%
-->> NON MD5 Support Database - 100%
-->> NON MD5 Support JoinServer - 100%
-->> CashShop Server - 100%
-->> Fix GameServer Path Files Read - 100%
-->> Fix GameServerCS Path Files Read - 100%
-->> Import Mu2003_Event_DB in MuOnline - 100%
-->> Import MuLog in MuOnline - 100%
-->> Import Ranking in MuOnline - 100%
-->> EventServer Connection - 100%
-->> RankingServer Connection - 100%
-->> ShopServer Connection - 100%
-->> MapServerInfo Corrected - 100%
-->> Message_kor.wtf - 99% English
-->> CashShop Errors in GameServer - 100%
-->> AppointItemDrop.txt - 100%
-->> GameServer>Options>Reload Options - 100%
-->> RankingServer Disconnect GameServer - 100%
-->> Castle Siege: by clicking the crash of the main gate. - 0%
-->> Inventory expansion - 100%
-->> Bau expansion - 100%
-->> Protocol Core Korean - 100%
-->> Create Characters - 100%
-->> Enter World - 100%
-->> Elf NPC Quests - 100%
-->> Map Moves - 100%
-->> Quests - 100%


//==========================
//-- Customs
//==========================
-->> SQL Connection
-->> Plugin Added
-->> Bau Extension
-->> Inventory Extension


//==========================
//-- Server Fixes
//==========================
-->> Fixed Log "ALG: %d, ENC: %d, DEC: %d, Serial: %d, %d"
-->> Fixed Log "Failed %d"
-->> Fixed Log "ALG: %d, ENC: %d, DEC: %d, Serial: %d"
-->> Fixed Log "Failed %d"
-->> Fixed Log "Attack Packet Debug "
-->> Fixed Log "Magic : %d"
-->> Fixed Log "Magic : %d"
-->> Fixed Log "LogAddTD Muum"
-->> Fixed Log "LogAddTD Muum"
-->> Fixed Log "LogAddTD Muum"
-->> Fixed Crash Dump File
-->> Fixed Destroy Giocp
-->> Fixed Nick authority Webzen
-->> Fixed "error-L1 : HackCheck [%s][%s] 0x%x 0x%x"
-->> Fixed "[Security][Breach] Account[%s] Character[%s] Code[%d]"
-->> Fixed Log "ALG: %d, ENC: %d, DEC: %d, Serial: %d"
-->> Fixed Log "[Shield] ݯ֥ %d µС:%d"
-->> Fixed Log "Attack Packet"
-->> Fixed "NpcTalk NPCNumber %d"
-->> Fixed "Muun Logs"
-->> Fixed "AppointItemDrop.txt Reload Error"
-->> Fixed "CheckSum"
-->> Fixed "Invalid Socket"
-->> Fixed "GM Move Key M"
-->> Fixed "Remove Potion Limit"
-->> Fixed "Personal ID"
-->> Fixed "Guild ID"
-->> Fixed "Allow Excellent + Ancient"
-->> Fixed "Allow Exelent + Socket"
-->> Fixed "Allow Jewel of Harmony + Ancient"
-->> Fixed "Options +28"


Requirements:
--> SQL SERVER 2008 R2
--> Windows Server 2008 SP1
--> Windows 7
--> .Net Framework 4.0
--> C++ Red. 2013

Server Files:

Client Files:

Credits:
WebZen
TeamWGO (Present Repack)
NanoGuy (Present .pdb files)
jhnjonny (sorry if i mistake name, fix gameservers paths)
ashlay (offsets)
DarkHaziel (offsets)
magtjr (vault and inventory + Haziel)
and maybe you..
 
Last edited:
Experienced Elementalist
Joined
Jul 29, 2012
Messages
286
Reaction score
265
Hello all,
I had decided to start a project with Season 9 Episode 1 Kor Version.
Currectly now i'm trying first to build all basic stuff before going on GameServer Coding.

This project will be open source to all :)
All who want to join are welcomed.

Steps how does this development going:
1. Configurate server files
2. Translate server files
3. Create plugins
4. Translate client files
5. Configurate client files
6. Create client plugin

So basicly i will start with information that is required:

------> 12.01.16
--> Organize Server Files - 30%
--> Setup Database - 80%
--> Running Server - 100%
--> Running Client - 0%
--> NON MD5 Support Database - 100%
--> NON MD5 Support JoinServer - 100%
--> CashShop Server - 0%
--> Fix GameServer Path Files Read - 100%
--> Import Mu2003_Event_DB in MuOnline - 100%
--> Import MuLog in MuOnline - 100%
--> Import Ranking in MuOnline - 100%
--> EventServer Connection - 100%
--> RankingServer Connection - 100%
--> ShopServer Connection - 100%
--> MapServerInfo Corrected - 100%
--> Message_kor.wtf - 99% English


------> Data Folder Fixes:
--> Monster 414 Fix
--> Monster 450 Fix
--> Monster 451 Fix




------> Procedures Missing:
--> WZ_UserSettingInfo_Save
--> WZ_UserSettingInfo_Load
--> WZ_DeleteUserSettingInfo
--> WZ_ITL_UpdateGuildEnterCount
--> WZ_ITL_UpdateGuildPoint
--> WZ_ITL_GiveReward
--> WZ_ITL_UpdateUserPoint
--> WZ_ITL_UserRewardRenew
--> WZ_ITL_RenewGuildRank
--> WZ_ITL_GetGuildRank
--> WZ_ITL_GetUserRewardList
--> WZ_ITL_GetTournament
--> WZ_ITL_GetGuildCnt
--> WZ_ITL_GetUserEnterCnt

------> Bugs to Fix:
--> CashShop Errors in GameServer - Need Fix
--> AppointItemDrop.txt - Need Fix
--> GameServer>Options>Reload Options - Need Fix Errors
--> RankingServer Disconnect - Need Fix
--> GameServer_CS Read Files Path

Requirements:
--> SQL SERVER 2008 R2
--> Windows Server 2008 SP1
--> Windows 7
--> .Net Framework 4.0
--> C++ Red. 2013

Server Files:

Client Files:

Credits:
WebZen
TeamWGO (Present Repack)
NanoGuy (Present .pdb files)
jhnjonny (sorry if i mistake name, fix gameservers paths)
and maybe you..

--> WZ_UserSettingInfo_Save
--> WZ_UserSettingInfo_Load
--> WZ_DeleteUserSettingInfo
--> WZ_ITL_UpdateGuildEnterCount
--> WZ_ITL_UpdateGuildPoint
--> WZ_ITL_GiveReward
--> WZ_ITL_UpdateUserPoint
--> WZ_ITL_UserRewardRenew
--> WZ_ITL_RenewGuildRank
--> WZ_ITL_GetGuildRank
--> WZ_ITL_GetUserRewardList
--> WZ_ITL_GetTournament
--> WZ_ITL_GetGuildCnt
--> WZ_ITL_GetUserEnterCnt
can be easily restored you have .pdb for dataserver

--> CashShop Errors in GameServer - Need Fix
--> AppointItemDrop.txt - Need Fix
--> GameServer>Options>Reload Options - Need Fix Errors
--> RankingServer Disconnect - Need Fix
--> GameServer_CS Read Files Path
were fixed long time ago but GOOD LUCK with the dev :)
 
Last edited:
Experienced Elementalist
Joined
Apr 16, 2013
Messages
241
Reaction score
59
Quero participar dessa dev se possivel, ja estou trabalhando com a season 9 a alguns meses, se quiser ajuda estou a disposição.
I want to participate to this possible, since I'm working with season 9 a few months, if you want help I am available
 
Evolution Team
Joined
Apr 26, 2014
Messages
634
Reaction score
382
@NanoGuy i didnt see somewhere to has them fixed or may im wrong but the result i see is that gameserver gives response for error so it will need an fix , about dataservers yes, i just writed "What to do" so i did not miss something
 
Experienced Elementalist
Joined
Apr 16, 2013
Messages
241
Reaction score
59
--> WZ_UserSettingInfo_Save
--> WZ_UserSettingInfo_Load
--> WZ_DeleteUserSettingInfo
--> WZ_ITL_UpdateGuildEnterCount
--> WZ_ITL_UpdateGuildPoint
--> WZ_ITL_GiveReward
--> WZ_ITL_UpdateUserPoint
--> WZ_ITL_UserRewardRenew
--> WZ_ITL_RenewGuildRank
--> WZ_ITL_GetGuildRank
--> WZ_ITL_GetUserRewardList
--> WZ_ITL_GetTournament
--> WZ_ITL_GetGuildCnt
--> WZ_ITL_GetUserEnterCnt
can be easily restored you have .pdb for dataserver

--> CashShop Errors in GameServer - Need Fix
--> AppointItemDrop.txt - Need Fix
--> GameServer>Options>Reload Options - Need Fix Errors
--> RankingServer Disconnect - Need Fix
--> GameServer_CS Read Files Path
were fixed long time ago but GOOD LUCK with the dev :)

Ja procurei decompiland o dataserver, porém só achei o nome delas, não consegui refaze-las, poderia ajudar? são as procedures que fazem o illusion temple funcionar.
Already tried descompilando the dataserver, but only found the name of them, I could not redo them, could help? are the procedures that make the illusion temple work.
 
Evolution Team
Joined
Apr 26, 2014
Messages
634
Reaction score
382
if someone else knows something else that needs fix, or configs to write it here
 
Experienced Elementalist
Joined
Apr 16, 2013
Messages
241
Reaction score
59
Castle Siege: by clicking the crash of the main gate.
Inventory expansion does not work
Bau expansion does not work
Are those who remember now.
 
Joined
Jun 27, 2010
Messages
940
Reaction score
1,193
here are almost all offsets needed for disable debuglogs need to check some offsets.

thanks to jhnjohnny help me to find many offsets
//==========================================================================
//-- Degbug Logs
//==========================================================================
//Disable DebugOutput
Utilits.SetRetn(oDebugOutput);
//"error-L1 : HackCheck [%s][%s] 0x%x 0x%x"
Utilits.SetRetn(oCGClientMsg);
//Utilits.SetByte(g_nDebugViewFlag,0x00);
//"[Security][Breach] Account[%s] Character[%s] Code[%d]"
Utilits.SetRetn(oGuarditBreach);
// duck crap message about test
Utilits.SetNop(oTestMessagebox,5);
//Decrypt1> ALG: %d, ENC: %d, DEC: %d, Serial: %d
Utilits.SetNop(oDecrypt1,6);
//[Shield] ݯ֥ %d µС:%d
Utilits.SetNop(oShieldLog,5);
//"Ѹݓ : %d,%d"
//Utilits.SetNop(oStrangeLog,6);
//[TEST2] C => S Attack Packet
Utilits.SetNop(oAttackPacketLog,6);
//[CGMagicAttack] : Magic : %d
Utilits.SetNop(oMagicAttackLog,6);
//NpcTalk NPCNumber %d
Utilits.SetNop(oNpcTalkLog,6);
//00AC552F C705 84FB5809 0 MOV DWORD PTR DS:[g_bAbilityDebug],1
Utilits.SetByte(0x00AC552F+6,0x00);
//00A7D500 55 PUSH EBP ; GameServer_2008.DebugOutput(aIndex,msg)
//Utilits.SetByte(0x00A7D500,0xC3);
//00B2DB29 A3 40F85809 MOV DWORD PTR DS:[g_nDebugViewFlag],EAX ( -> 0)
Utilits.SetByte(0x00B2DB29+5,0x00);
//00B2EA4E C705 ACFB5809 0 MOV DWORD PTR DS:[g_AccessoryOptionFlag],0 (-> 1)
Utilits.SetByte(0x00B2EA4E+6,0x01);
//--
//Muun Logs
Utilits.SetNop(0x00CF200E,5);
Utilits.SetNop(0x00CF9056,5);
Utilits.SetNop(0x00CF90BC,5);
Utilits.SetNop(0x00CFC1C1,5);
Utilits.SetNop(0x00CFDF4E,5);
//MsgOutput(lpTargetObj->m_Index, "[ӯгЭȭ - ڦ߮؂] %d", v22);
Utilits.SetNop(0x00A98841,5);
//j__sprintf(&v259, "đ յۭȮؼ %.2f ==> އf յۭȮؼ %.2f", v261, v262);
Utilits.SetNop(0x00AA099B,5);
//_wsprintfA(message, "[ƫȕ|e üߩ ܳƂ: %d (1:üߩܳƂ/0:۱üߩܳƂ]", lpObj->m_JoinUnityBattile);
Utilits.SetNop(0x00D25F1A,5);
//qmemcpy(szEffectName, "ڃ-Ѹѝ؂/ض؂ µС %d/%d", 0x1Au);
//qmemcpy(szEffectName[6], "ڃ-Ėի Ѹѝ؂ µС %d/%d", 0x1Au);
Utilits.SetNop(0x00CF946D,5);
//CXMasAttackEvent::_SendDebugMsg
Utilits.SetRetn(0x00907F60);
//Debug Message on gs close
BYTE GSCloseH[25] = { 0x90, 0x90, 0x90, 0x90, 0x90,
0x90, 0x90, 0x90, 0x90, 0x90,
0x90, 0x90, 0x90, 0x90, 0x90,
0x90, 0x90, 0x90, 0x90, 0x90,
0x90, 0x90, 0x90, 0x90, 0x90};
memcpy((int*) oGSClose0,GSCloseH,sizeof(GSCloseH));
Utilits.SetByte(oGSClose1,0xEB);
Utilits.SetByte(oGSClose2,0xEB);
Utilits.SetByte(oGSClose3+5,0x00);

offsets
#define oCGClientMsg 0x008520C0//ok
#define oGuarditBreach 0x00895930//ok
#define g_bAbilityDebug0 0x00AC5539//
//#define g_bAbilityDebug1 0x00430984
#define g_bAbilityDebug2 0x00A9930C
#define oShieldLog 0x00A7E161//5nop
//#define oStrangeLog 0x005A8901

#define oAttackPacketLog 0x0084BD3B
#define oMagicAttackLog 0x00879D84//
#define oDebugOutput 0x00A7D500
#define oDecrypt1 0x0097F77B
#define oTestMessagebox 0x00B41647
#define oNpcTalkLog 0x00B7EF27
#define og_AccessoryOptionFlag0 0x00A98D89
#define og_AccessoryOptionFlag1 0x00A98E53
#define g_nDebugViewFlag 0x00B2DB10+6

if people here collaborate and not just leech I can contribute more...
 
Evolution Team
Joined
Apr 26, 2014
Messages
634
Reaction score
382
that is the main reason for this topic, to make all people work something not to wait only.
thanks for taking a part of this will be usefull
 
Newbie Spellweaver
Joined
Apr 25, 2013
Messages
65
Reaction score
113
My contribution to the project!:eek:tt::eek:tt::eek:tt::eek:tt:

//==========================
//-- Fix Clear Debug Log Paint :)
//==========================
SetNop(0x0097F774,6); // "Decrypt1> ALG: %d, ENC: %d, DEC: %d, Serial: %d, %d"
SetNop(0x0097F791,6); // "Decrypt1> Failed %d"
SetNop(0x0097FAA3,6); // "Decrypt2> ALG: %d, ENC: %d, DEC: %d, Serial: %d"
SetNop(0x0097FAC0,6); // "Decrypt2> Failed %d"
SetNop(0x0084BD3B,6); // [TEST2] C => S Attack Packet Debug
SetNop(0x00879D7F,6); // [CGMagicAttack] : Magic : %d
SetNop(0x0087D256,6); // [CGBeattackRecv]: Magic : %d
SetNop(0x00CF3808,6); // 00CF3808 FF15 5CE3C608 CALL DWORD PTR DS:[8C6E35C] => LogAddTD Muum
SetNop(0x00CF38C6,6); // 00CF38C6 FF15 5CE3C608 CALL DWORD PTR DS:[8C6E35C] => LogAddTD Muum
SetNop(0x00CF8885,6); // 00CF8885 FF15 5CE3C608 CALL DWORD PTR DS:[8C6E35C] => LogAddTD Muum

//==========================
//-- Fix No Crash Dump File
//==========================
BYTE Dump = GetPrivateProfileIntA("Fixes","WriteDump",0,ACT_Common);
if( Dump <= 0 )
{
*(BYTE*)(0x007E2519) = 0xC3; //007E2519 . E9 92162300 JMP GameServ.00A13BB0
}

//==========================
//-- Fix Destroy Giocp
//==========================
*(BYTE*)(0x007D0BD4) = 0xC3;

//==========================
//-- Fix Delete char Without ID
//==========================

BYTE PersonalID = GetPrivateProfileIntA("Fixes","BypassWithoutID",0,ACT_Common);
if( PersonalID <= 0 )
{
SetNop(0x00852A4A,5);
}

//==========================
//-- Fix Autoridade do nick Webzen
//==========================
*(BYTE*)(0x00A1E84B+6) = 0x01;
*(BYTE*)(0x00A1E88C+6) = 0x01;
*(BYTE*)(0x00A1E8F4+6) = 0x01;



Credits: DarkHaziel
 
Last edited:
Evolution Team
Joined
Apr 26, 2014
Messages
634
Reaction score
382
DarkHaziel, maybe you had organized muserver to share ?
 
Experienced Elementalist
Joined
Apr 16, 2013
Messages
241
Reaction score
59
Minha singela contribuição expansão de inventario e bau
My simple contribution expansion of inventory and bau

Code:
void _CGUseItemRecv(PMSG_USEITEM* lpMsg,int aIndex)//?CGUseItemRecv@@YAXPAUPMSG_USEITEM@@H@Z 0087f580
{
    OBJECTSTRUCT *lpObj = (OBJECTSTRUCT*)OBJECT_POINTER(aIndex);
    CItem* DTitem = &lpObj->pInventory[lpMsg->inventoryPos];
    CItem* DTadd  = &lpObj->pInventory[lpMsg->invenrotyTarget];
    
 if( DTitem->m_Type == ITEMGET(14,162) )
        { //EXPANSÃO DO INVENTARIO
            cSQL.ExecQuery("SELECT ExtendedInvenCount FROM Character WHERE Name='%s'",lpObj->Name);
            cSQL.Fetch();
            epObj[aIndex].ExpandIvent = cSQL.GetAsInteger("ExtendedInvenCount");
            cSQL.Close();
            if(epObj[aIndex].ExpandIvent < 3)
            {
            cSQL.ExecQuery("UPDATE CHARACTER SET ExtendedInvenCount = ExtendedInvenCount + 1  WHERE Name = '%s'",lpObj->Name);
            cSQL.Fetch();
            cSQL.Close();
            
            GCServerMsgStringSend("Parabens seu inventario foi expandido.Você será relogado",aIndex,1);
            DeleteRecv(aIndex,lpMsg->inventoryPos,lpMsg->invenrotyTarget);
            gObjCloseSet(aIndex,1);
            }
            else
            {
            GCServerMsgStringSend("Você ja possui o maximo de inventario que é 2",aIndex,1);
            DeleteRecv(aIndex,lpMsg->inventoryPos,lpMsg->invenrotyTarget);
            }
        }
  if( DTitem->m_Type == ITEMGET(14,163))
        {//EXPANSÃO DO BAU
            cSQL.ExecQuery("SELECT ExtendedWarehouseCount FROM AccountCharacter WHERE Id='%s'",lpObj->AccountID);
            cSQL.Fetch();
            epObj[aIndex].ExpandBau = cSQL.GetAsInteger("ExtendedWarehouseCount");
            cSQL.Close();
            if(epObj[aIndex].ExpandBau < 1)            
            {
                cSQL.ExecQuery("UPDATE AccountCharacter SET ExtendedWarehouseCount=1 WHERE Id ='%s'",lpObj->Name);
                cSQL.Fetch();
                cSQL.Close();
                MsgOutput(aIndex,"%d, %d",epObj[aIndex].ExpandBau,lpObj->WarehouseCount);
                GCServerMsgStringSend("Parabens seu Bau foi expandido.Você será relogado",aIndex,1);
                DeleteRecv(aIndex,lpMsg->inventoryPos,lpMsg->invenrotyTarget);
                gObjCloseSet(aIndex,1);
            }
            else
            {
                GCServerMsgStringSend("Você ja possui a Expansão maxima do Bau",aIndex,1);
                DeleteRecv(aIndex,lpMsg->inventoryPos,lpMsg->invenrotyTarget);
            


}
        }

}

Creditos: Haziel por me ensinar.
Eu por aperfeiçoar.e adaptar do meu jeito
 
Last edited:
Evolution Team
Joined
Apr 26, 2014
Messages
634
Reaction score
382
this is good sharing about offsets, but we need first to make the basic muserver files organized
muserver + database are incomplate and has problems to solve
 
Last edited:
Elite Diviner
Joined
Sep 9, 2014
Messages
469
Reaction score
498
Test..

Th3AnG3L - Season 9 Episode 1 Kor - RaGEZONE Forums

Th3AnG3L - Season 9 Episode 1 Kor - RaGEZONE Forums
 
Evolution Team
Joined
Apr 26, 2014
Messages
634
Reaction score
382
it needs more updates on server side configs, and database are still incomplate, im working slow on it to understand all stuff so if someone has suggestion fix or want to share are welcomed, then when we finish the base files configuration and database stuff we will go to customs fixes
 
Newbie Spellweaver
Joined
Apr 25, 2013
Messages
65
Reaction score
113
My formula for their Buff Bots Working at MU Blue Season 9 :)
OBJBOTBUFFER::TradeBuffer
Th3AnG3L - Season 9 Episode 1 Kor - RaGEZONE Forums




Code:
bool OBJBOTBUFFER::TradeBuffer(int aIndex, int lpTargetObj)
{


    LPOBJ lpObj     = (LPOBJ)OBJECT_POINTER(aIndex);  
    LPOBJ TargetObj = (LPOBJ)OBJECT_POINTER(lpTargetObj);


    if( lpObj->Level        < this->Level   ){GCActionSend(TargetObj,AT_GOODBYE1,lpTargetObj,a  Index);BotChatSend(aIndex,lpTargetObj,"Você nao tem o Level Suficiente! Requerido: %d",this->Level ); return FALSE;} 
    if( epObj[aIndex].m_Vip < this->OnlyVip ){GCActionSend(TargetObj,AT_GOODBYE1,lpTargetObj,a  Index);BotChatSend(aIndex,lpTargetObj,"Seu VIP não tem privilégios suficientes para usar o comando!");return FALSE;}
    if( lpObj->Money        < this->Price   ){GCActionSend(TargetObj,AT_GOODBYE1,lpTargetObj,a  Index);BotChatSend(aIndex,lpTargetObj,"Você nao tem Zen suficiente! Requerido: %d"    ,this->Price ); return FALSE;} 




    GCMoneySend(aIndex,lpObj->Money -= this->Price);


    switch(TargetObj->Class)
    {
        case CLASS_WIZARD:
         {
                  int WizardSkillDefense = 0;
                  int WizardSkillDefenseTime = 0;


                  WizardSkillDefense = 10 + (lpObj->Dexterity + lpObj->AddDexterity) / 50 + (lpObj->Energy + lpObj->AddEnergy) / 200;
                  WizardSkillDefenseTime = 60 + (lpObj->Energy + lpObj->AddEnergy) / 40;


                  gObjAddBuffEffect(lpObj,AT_WIZARD_DEFENSE, 21, WizardSkillDefense, 28, 20, WizardSkillDefenseTime); //season3 add-on
                  GCMagicAttackNumberSend(lpObj, 0x10u,aIndex, 1);
                  BotChatSend(aIndex,lpTargetObj,"%s Recebel a Buff do Bot Wizard ! ",lpObj->Name); 
                  return TRUE;
         }
         break; 
         case CLASS_KNIGHT:
         {
              
                int iaddLifepower = 12 + (lpObj->Vitality + lpObj->AddVitality) / 100 + (lpObj->Energy + lpObj->AddEnergy)/20 + 1;
                int iLifeTime = 60 + (lpObj->Energy + lpObj->AddEnergy) / 10;
                int iaddlife  = (lpObj->MaxLife) * iaddLifepower / 100;




                gObjAddBuffEffect(lpObj, AT_SWELL_LIFE, 4,iaddLifepower / 100, 0, 0, iLifeTime);
                GCMagicAttackNumberSend(lpObj, 0x30u,aIndex, 1);
                BotChatSend(aIndex,lpTargetObj,"%s Recebel a Buff do Bot Knigth ! ",lpObj->Name); 
                return TRUE;
         }
         break; 
         case CLASS_ELF:
         {
                  BYTE Boff = rand()%3;


                  switch(Boff)
                  {
                  case 1: //--> SkillDefense
                       {
                       int skill_level = lpObj->Level;
                       float skill_defense = float(skill_level + 1)*2 + (lpObj->Energy + lpObj->AddEnergy) / 8;
                       if(lpObj->Class == CLASS_KNIGHT)
                       {
                          skill_defense += skill_defense/10.0f;
                       }
                       gObjAddBuffEffect(lpObj,AT_INCREASE_DEFENSE,3, skill_defense, 0, 0, 60); 
                       GCMagicAttackNumberSend(lpObj,0x1b,aIndex,1);
                       BotChatSend(aIndex,lpTargetObj,"%s Recebel a Buff do Bot Elf ! ",lpObj->Name); 
                       return TRUE;
                       }
                       break; 
                  case 2: //--> SkillAttack
                       {
                       int skill_level = lpObj->Level;
                       float skill_attack = float((skill_level + 1) * 3) + (lpObj->Energy + lpObj->AddEnergy) / 7.0f;
                       if(lpObj->Class == CLASS_KNIGHT)
                       {
                       skill_attack += skill_attack/10.0f;
                       }
                       gObjAddBuffEffect(lpObj, AT_INCREASE_ATTACK, 2, skill_attack, 0, 0, 60); 
                       GCMagicAttackNumberSend(lpObj,0x1c,aIndex,1);
                       BotChatSend(aIndex,lpTargetObj,"%s Recebel a Buff do Bot Elf ! ",lpObj->Name);
                       return TRUE;
                       }
                       break; 
                  case 3: //--> SkillHealing
                       {
                       int skill_level = lpObj->Level;
                       lpObj->Life = ((skill_level + 1) * 5 + (lpObj->Energy + lpObj->AddEnergy) / 5) + lpObj->Life;
                       if((lpObj->MaxLife + lpObj->AddLife) < lpObj->Life)
                       {
                       lpObj->Life = lpObj->MaxLife + lpObj->AddLife;
                       }
                       GCReFillSend(aIndex,lpObj->Life,0xFF,0,lpObj->iShield);
                       GCMagicAttackNumberSend(lpObj,0x1a,aIndex,1);
                       BotChatSend(aIndex,lpTargetObj,"%s Recebel a Buff do Bot Elf ! ",lpObj->Name);    
                       return TRUE;
                       }
                       break; 
                  }
                
              
         }
         break; 
         case CLASS_MAGUMSA:
         {
             
         }
         break; 
         case CLASS_DARKLORD:
         {
             
                  int addcriticaldamagevalue = (lpObj->Leadership + lpObj->AddLeadership)/25 + (lpObj->Energy + lpObj->AddEnergy)/30;
                  int SkillTime = (lpObj->Energy + lpObj->AddEnergy)/10 + 60;
                  gObjAddBuffEffect(lpObj, AT_INCREASE_CRITICAL_DMG,17, addcriticaldamagevalue, 0, 0, SkillTime); //season3 add-on
                  GCMagicAttackNumberSend(lpObj,0x40,aIndex,1);
                  BotChatSend(aIndex,lpTargetObj,"%s Recebel a Buff do Bot DarkLord ! ",lpObj->Name);
                  return TRUE;
    
         }
         break; 
         case CLASS_SUMMONER:
         {
             
                  int iDuration = lpObj->Energy / 20 + 30;
                  int iIncMana = lpObj->Energy / 30;
                  int iDecLife = lpObj->Energy / 60;
                  GCMagicAttackNumberSend(lpObj,218,aIndex,1);
                  gObjAddBuffEffect(lpObj, AT_BERSERKER, 31, iIncMana, 32, iDecLife, iDuration); 
                  BotChatSend(aIndex,lpTargetObj,"%s Recebel a Buff do Bot Summoner ! ",lpObj->Name);
                  return TRUE;
              
         }
         break; 
         case CLASS_MONK:
         {
                  BYTE Boff = rand()%3;
                  switch(Boff)
                  {
                  case 1:   //--  AT_SKILL_RAGEFIGHTER_REDARMOR:
                       {
                           int nEffectValue = {0};
                               nEffectValue = (double)(lpObj->Energy + (signed int)lpObj->AddEnergy - 404) / 100.0 + 3.0;
                           gObjAddBuffEffect(lpObj,BUFF_IGNORE_DEFENSE, 72, nEffectValue, 0, 0, lpObj->Energy / 5 + 60);
                           GCMagicAttackNumberSend(lpObj, 0x10Au,aIndex, 1);
                           BotChatSend(aIndex,lpTargetObj,"%s Recebel a Buff do Bot Monk ! ",lpObj->Name);
                           return TRUE;
                       }
                        break; 
                  case 2:   //--  AT_SKILL_RAGEFIGHTER_FITNESS
                       {
                           int nEffectValue = {0};
                               nEffectValue = (double)(lpObj->Energy + (signed int)lpObj->AddEnergy - 132) / 10.0 + 30.0;
                           gObjAddBuffEffect(lpObj,BUFF_INCREASE_VIT,73,nEffe  ctValue,0,0,60);
                           GCMagicAttackNumberSend(lpObj,267,aIndex,1);
                           gObjCalCharacter(aIndex);
                           BotChatSend(aIndex,lpTargetObj,"%s Recebel a Buff do Bot Monk ! ",lpObj->Name);
                           return TRUE;
                       }
                       break; 
                  case 3:   //-- AT_SKILL_RAGEFIGHTER_DEFRATE
                       { 
                          int nEffectValue = {0};
                                 nEffectValue = (double)(lpObj->Energy + (signed int)lpObj->AddEnergy - 80) / 10.0 + 10.0;
                          gObjAddBuffEffect(lpObj,BUFF_INCREASE_DEFRATE,74,n  EffectValue,0,0,60);
                          GCMagicAttackNumberSend(lpObj,268,aIndex,1);
                          BotChatSend(aIndex,lpTargetObj,"%s Recebel a Buff do Bot Monk ! ",lpObj->Name);
                          return TRUE;
                       }
                       break; 
                  }
         }
         break; 


    }
    return FALSE;


}


If the community continue to share the cool, also continue sharing codes custons fixes and patches

 
Last edited:
Back
Top