Excelente MuServer ? ASHDUAHSDUHDAUSDHU... Ok.Citação:
Postado originalmente por [ADM]Kyo [Only registered and activated users can see links. Click Here To Register...]
Eu só vejo um mix de sources liberadas na net, nada além.
Versão Imprimível
Excelente MuServer ? ASHDUAHSDUHDAUSDHU... Ok.Citação:
Postado originalmente por [ADM]Kyo [Only registered and activated users can see links. Click Here To Register...]
Eu só vejo um mix de sources liberadas na net, nada além.
Tem uma source ai season 6 do NaM4 que o cara fez umas merdas nela e colocou seu nome e vende por 700 reais em 1 forum ae rs.
Bom 99% de certeza que o Spartacus tem sim conta no fórum, e sim esse MuServer tem files alheio, e se não me engano o mesmo estava vendendo a source dele em outro fórum.
E sim é um "bom" muserver .
O Bobo nao e quem vende e sim quem compra.Citação:
Postado originalmente por lorranmota [Only registered and activated users can see links. Click Here To Register...]
Porem, o cara que vende provavelmente tem 0% de chance de evoluir neste ramo de programação =)
server contem um bug.. quando voce repara os itens pelo npc o gamserver crash.
resolvido hehe era Protocolo esta KoR so colocar 2 para ler JpN
@TonyAMT estranho que testei aqui e não deu crash, pelo menos em uma shield que reparei aqui no ferreiro, mais vou tentar reparar mais itens aqui pra ver se dar crash pois como to usando set full so me deu para testar na shield.
o crash so ocorre quando muserver esta em KoR e se voce aperta o botao de reparar tudo no ferreiro..
@TonyAMT ... 1 bug?
da uma olhada num "calcharacter" que é feito por esse mestre da programação
Código:#include "stdafx.h"
CallCharacter_Extern_Class CallClassExtern;
CallCharacter_Extern_Class::~CallCharacter_Extern_Class(){}
CallCharacter_Extern_Class::CallCharacter_Extern_Class(){}
void gObjCalCharacterEx(int aIndex)
{
CallClassExtern.gObjCalCharacterEx(aIndex);
}
void CallCharacter_Extern_Class::gObjCalCharacterEx(DWORD aIndex)
{
OBJECTSTRUCT * gObj = (OBJECTSTRUCT*)OBJECT_POINTER(aIndex);
gObjCalCharacter(gObj->m_Index);
switch(gObj->Class)
{
case 0:
gObj->m_AttackDamageMinRight = (gObj->Strength / CalCharacterStruct.DW_AtackMinRight);
gObj->m_AttackDamageMaxRight = (gObj->Strength / CalCharacterStruct.DW_AtackMaxRight);
gObj->m_AttackDamageMinLeft = (gObj->Strength / CalCharacterStruct.DW_AtackMinLeft);
gObj->m_AttackDamageMaxLeft = (gObj->Strength / CalCharacterStruct.DW_AtackMaxLeft);
gObj->m_AttackSpeed = gObj->Dexterity / CalCharacterStruct.DW_AtackSpeed;
gObj->m_MagicSpeed = gObj->Dexterity / CalCharacterStruct.DW_AtackSpeed;
gObj->m_SuccessfulBlocking = gObj->Dexterity / CalCharacterStruct.DW_SuccessfulBlocking;
gObj->m_Defense = gObj->Dexterity / CalCharacterStruct.DW_Defense;
gObj->m_MagicDamageMin = (gObj->Energy / CalCharacterStruct.DW_MagicDMGMin);
gObj->m_MagicDamageMax = (gObj->Energy / CalCharacterStruct.DW_MagicDMGMax);
break;
case 1:
gObj->m_AttackDamageMinRight = (gObj->Strength / CalCharacterStruct.DK_AtackMinRight);
gObj->m_AttackDamageMaxRight = (gObj->Strength / CalCharacterStruct.DK_AtackMaxRight);
gObj->m_AttackDamageMinLeft = (gObj->Strength / CalCharacterStruct.DK_AtackMinLeft);
gObj->m_AttackDamageMaxLeft = (gObj->Strength / CalCharacterStruct.DK_AtackMaxLeft);
gObj->m_AttackSpeed = gObj->Dexterity / CalCharacterStruct.DK_AtackSpeed;
gObj->m_MagicSpeed = gObj->Dexterity / CalCharacterStruct.DK_MagicSpeed;
gObj->m_SuccessfulBlocking = gObj->Dexterity / CalCharacterStruct.DK_SuccessfulBlocking;
gObj->m_Defense = gObj->Dexterity / CalCharacterStruct.DK_Defense;
gObj->m_MagicDamageMin = (gObj->Energy / CalCharacterStruct.DK_MagicDMGMin);
gObj->m_MagicDamageMax = (gObj->Energy / CalCharacterStruct.DK_MagicDMGMax);
break;
case 2:
gObj->m_AttackDamageMinRight = (gObj->Strength / CalCharacterStruct.ELF_AtackMinRight);
gObj->m_AttackDamageMaxRight = (gObj->Strength / CalCharacterStruct.ELF_AtackMaxRight);
gObj->m_AttackDamageMinLeft = (gObj->Strength / CalCharacterStruct.ELF_AtackMinLeft);
gObj->m_AttackDamageMaxLeft = (gObj->Strength / CalCharacterStruct.ELF_AtackMaxLeft);
gObj->m_AttackSpeed = gObj->Dexterity / CalCharacterStruct.ELF_AtackSpeed;
gObj->m_MagicSpeed = gObj->Dexterity / CalCharacterStruct.ELF_MagicSpeed;
gObj->m_SuccessfulBlocking = gObj->Dexterity / CalCharacterStruct.ELF_SuccessfulBlocking;
gObj->m_Defense = gObj->Dexterity/ CalCharacterStruct.ELF_Defense;
gObj->m_MagicDamageMin = (gObj->Energy / CalCharacterStruct.ELF_MagicDMGMin);
gObj->m_MagicDamageMax = (gObj->Energy / CalCharacterStruct.ELF_MagicDMGMax);
break;
case 3:
gObj->m_AttackDamageMinRight = (gObj->Strength / CalCharacterStruct.MG_AtackMinRight)+(gObj->Energy/CalCharacterStruct.MG_AtackMinRight);
gObj->m_AttackDamageMaxRight = (gObj->Strength / CalCharacterStruct.MG_AtackMaxRight)+(gObj->Energy/CalCharacterStruct.MG_AtackMaxRight);
gObj->m_AttackDamageMinLeft = (gObj->Strength / CalCharacterStruct.MG_AtackMinLeft)+(gObj->Energy/CalCharacterStruct.MG_AtackMinLeft);
gObj->m_AttackDamageMaxLeft = (gObj->Strength / CalCharacterStruct.MG_AtackMaxLeft)+(gObj->Energy/CalCharacterStruct.MG_AtackMaxLeft);
gObj->m_AttackSpeed = gObj->Dexterity / CalCharacterStruct.MG_AtackSpeed;
gObj->m_MagicSpeed = gObj->Dexterity / CalCharacterStruct.MG_MagicSpeed;
gObj->m_SuccessfulBlocking = gObj->Dexterity / CalCharacterStruct.MG_SuccessfulBlocking;
gObj->m_Defense = gObj->Dexterity/ CalCharacterStruct.MG_Defense;
gObj->m_MagicDamageMin = (gObj->Energy / CalCharacterStruct.MG_MagicDMGMin);
gObj->m_MagicDamageMax = (gObj->Energy / CalCharacterStruct.MG_MagicDMGMax);
break;
case 4:
gObj->m_AttackDamageMinRight = ((gObj->Strength / CalCharacterStruct.DL_AtackMinRight) + (gObj->Energy / (CalCharacterStruct.DL_AtackMinRight*2)));
gObj->m_AttackDamageMaxRight = ((gObj->Strength / CalCharacterStruct.DL_AtackMaxRight) + (gObj->Energy / (CalCharacterStruct.DL_AtackMaxRight*2)));
gObj->m_AttackDamageMinLeft = ((gObj->Strength / CalCharacterStruct.DL_AtackMinLeft) + (gObj->Energy / (CalCharacterStruct.DL_AtackMinLeft*2)));
gObj->m_AttackDamageMaxLeft = ((gObj->Strength / CalCharacterStruct.DL_AtackMaxLeft) + (gObj->Energy / (CalCharacterStruct.DL_AtackMaxLeft*2)));
gObj->m_AttackSpeed = gObj->Dexterity / CalCharacterStruct.DL_AtackSpeed;
gObj->m_MagicSpeed = gObj->Dexterity / CalCharacterStruct.DL_MagicSpeed;
gObj->m_SuccessfulBlocking = gObj->Dexterity / CalCharacterStruct.DL_SuccessfulBlocking;
gObj->m_Defense = gObj->Dexterity / CalCharacterStruct.DL_Defense;
gObj->m_MagicDamageMin = (gObj->Energy / CalCharacterStruct.DL_MagicDMGMin);
gObj->m_MagicDamageMax = (gObj->Energy / CalCharacterStruct.DL_MagicDMGMax);
break;
case 5:
gObj->m_AttackDamageMinRight = ((gObj->Strength+gObj->Dexterity) / CalCharacterStruct.SUM_AtackMinRight);
gObj->m_AttackDamageMaxRight = ((gObj->Strength+gObj->Dexterity) / CalCharacterStruct.SUM_AtackMaxRight);
gObj->m_AttackDamageMinLeft = ((gObj->Strength+gObj->Dexterity) / CalCharacterStruct.SUM_AtackMinLeft);
gObj->m_AttackDamageMaxLeft = ((gObj->Strength+gObj->Dexterity) / CalCharacterStruct.SUM_AtackMaxLeft);
gObj->m_AttackSpeed = (gObj->Dexterity / CalCharacterStruct.SUM_AtackSpeed);
gObj->m_MagicSpeed = (gObj->Dexterity / CalCharacterStruct.SUM_MagicSpeed);
gObj->m_SuccessfulBlocking = (gObj->Dexterity / CalCharacterStruct.SUM_SuccessfulBlocking);
gObj->m_Defense = (gObj->Dexterity / CalCharacterStruct.SUM_Defense);
gObj->m_MagicDamageMin = (gObj->Energy / CalCharacterStruct.SUM_MagicDMGMin);
gObj->m_MagicDamageMax = (gObj->Energy / CalCharacterStruct.SUM_MagicDMGMax);
break;
}
}
void CallCharacter_Extern_Class::Init()
{
/*LOAD*/
this->CalCharacterStruct.Enabeld = GetPrivateProfileInt("ObjCallCharacter","NewCalCharaterLoad",1,CallCharacterINI);
/*CALSSES DE DW SM GRM*/
this->CalCharacterStruct.DW_AtackMinRight = GetPrivateProfileInt("ObjCallCharacter","DW_MinAtackRight",100,CallCharacterINI);
this->CalCharacterStruct.DW_AtackMaxRight = GetPrivateProfileInt("ObjCallCharacter","DW_MaxAtackRight",50,CallCharacterINI);
this->CalCharacterStruct.DW_AtackMinLeft = GetPrivateProfileInt("ObjCallCharacter","DW_MinAtackLeft",100,CallCharacterINI);
this->CalCharacterStruct.DW_AtackMaxLeft = GetPrivateProfileInt("ObjCallCharacter","DW_MaxAtackLeft",50,CallCharacterINI);
this->CalCharacterStruct.DW_AtackSpeed = GetPrivateProfileInt("ObjCallCharacter","DW_AtackSpeed",35,CallCharacterINI);
this->CalCharacterStruct.DW_MagicSpeed = GetPrivateProfileInt("ObjCallCharacter","DW_MagicSpeed",30,CallCharacterINI);
this->CalCharacterStruct.DW_SuccessfulBlocking = GetPrivateProfileInt("ObjCallCharacter","DW_SucessFullBlock",40,CallCharacterINI);
this->CalCharacterStruct.DW_Defense = GetPrivateProfileInt("ObjCallCharacter","DW_Defense",12,CallCharacterINI);
this->CalCharacterStruct.DW_MagicDMGMin = GetPrivateProfileInt("ObjCallCharacter","DW_MagicDmgMin",100,CallCharacterINI);
this->CalCharacterStruct.DW_MagicDMGMax = GetPrivateProfileInt("ObjCallCharacter","DW_MagicDmgMax",80,CallCharacterINI);
/*FIM DA CLASSE DE DW SM GRM*/
/*CLASSES DK BK BM*/
this->CalCharacterStruct.DK_AtackMinRight = GetPrivateProfileInt("ObjCallCharacter","DK_MinAtackRight",100,CallCharacterINI);
this->CalCharacterStruct.DK_AtackMaxRight = GetPrivateProfileInt("ObjCallCharacter","DK_MaxAtackRight",50,CallCharacterINI);
this->CalCharacterStruct.DK_AtackMinLeft = GetPrivateProfileInt("ObjCallCharacter","DK_MinAtackLeft",100,CallCharacterINI);
this->CalCharacterStruct.DK_AtackMaxLeft = GetPrivateProfileInt("ObjCallCharacter","DK_MaxAtackLeft",50,CallCharacterINI);
this->CalCharacterStruct.DK_AtackSpeed = GetPrivateProfileInt("ObjCallCharacter","DK_AtackSpeed",35,CallCharacterINI);
this->CalCharacterStruct.DK_MagicSpeed = GetPrivateProfileInt("ObjCallCharacter","DK_MagicSpeed",30,CallCharacterINI);
this->CalCharacterStruct.DK_SuccessfulBlocking = GetPrivateProfileInt("ObjCallCharacter","DK_SucessFullBlock",40,CallCharacterINI);
this->CalCharacterStruct.DK_Defense = GetPrivateProfileInt("ObjCallCharacter","DK_Defense",12,CallCharacterINI);
this->CalCharacterStruct.DK_MagicDMGMin = GetPrivateProfileInt("ObjCallCharacter","DK_MagicDmgMin",100,CallCharacterINI);
this->CalCharacterStruct.DK_MagicDMGMax = GetPrivateProfileInt("ObjCallCharacter","DK_MagicDmgMax",80,CallCharacterINI);
/*FIM DAS CLASSES DE DK BK BM*/
/*CLASSES DE ELF ME HE*/
this->CalCharacterStruct.ELF_AtackMinRight = GetPrivateProfileInt("ObjCallCharacter","ELF_MinAtackRight",100,CallCharacterINI);
this->CalCharacterStruct.ELF_AtackMaxRight = GetPrivateProfileInt("ObjCallCharacter","ELF_MaxAtackRight",50,CallCharacterINI);
this->CalCharacterStruct.ELF_AtackMinLeft = GetPrivateProfileInt("ObjCallCharacter","ELF_MinAtackLeft",100,CallCharacterINI);
this->CalCharacterStruct.ELF_AtackMaxLeft = GetPrivateProfileInt("ObjCallCharacter","ELF_MaxAtackLeft",50,CallCharacterINI);
this->CalCharacterStruct.ELF_AtackSpeed = GetPrivateProfileInt("ObjCallCharacter","ELF_AtackSpeed",35,CallCharacterINI);
this->CalCharacterStruct.ELF_MagicSpeed = GetPrivateProfileInt("ObjCallCharacter","ELF_MagicSpeed",30,CallCharacterINI);
this->CalCharacterStruct.ELF_SuccessfulBlocking = GetPrivateProfileInt("ObjCallCharacter","ELF_SucessFullBlock",40,CallCharacterINI);
this->CalCharacterStruct.ELF_Defense = GetPrivateProfileInt("ObjCallCharacter","ELF_Defense",12,CallCharacterINI);
this->CalCharacterStruct.ELF_MagicDMGMin = GetPrivateProfileInt("ObjCallCharacter","ELF_MagicDmgMin",100,CallCharacterINI);
this->CalCharacterStruct.ELF_MagicDMGMax = GetPrivateProfileInt("ObjCallCharacter","ELF_MagicDmgMax",80,CallCharacterINI);
/*FIM DAS CLASSES DE ELF ME HE*/
/*CLASSES DE MG E DM*/
this->CalCharacterStruct.MG_AtackMinRight = GetPrivateProfileInt("ObjCallCharacter","MG_MinAtackRight",100,CallCharacterINI);
this->CalCharacterStruct.MG_AtackMaxRight = GetPrivateProfileInt("ObjCallCharacter","MG_MaxAtackRight",50,CallCharacterINI);
this->CalCharacterStruct.MG_AtackMinLeft = GetPrivateProfileInt("ObjCallCharacter","MG_MinAtackLeft",100,CallCharacterINI);
this->CalCharacterStruct.MG_AtackMaxLeft = GetPrivateProfileInt("ObjCallCharacter","MG_MaxAtackLeft",50,CallCharacterINI);
this->CalCharacterStruct.MG_AtackSpeed = GetPrivateProfileInt("ObjCallCharacter","MG_AtackSpeed",35,CallCharacterINI);
this->CalCharacterStruct.MG_MagicSpeed = GetPrivateProfileInt("ObjCallCharacter","MG_MagicSpeed",30,CallCharacterINI);
this->CalCharacterStruct.MG_SuccessfulBlocking = GetPrivateProfileInt("ObjCallCharacter","MG_SucessFullBlock",40,CallCharacterINI);
this->CalCharacterStruct.MG_Defense = GetPrivateProfileInt("ObjCallCharacter","MG_Defense",12,CallCharacterINI);
this->CalCharacterStruct.MG_MagicDMGMin = GetPrivateProfileInt("ObjCallCharacter","MG_MagicDmgMin",100,CallCharacterINI);
this->CalCharacterStruct.MG_MagicDMGMax = GetPrivateProfileInt("ObjCallCharacter","MG_MagicDmgMax",80,CallCharacterINI);
/*FIM DAS CLASSES DE MG E DM*/
/*CLASSES DE DL E LE*/
this->CalCharacterStruct.DL_AtackMinRight = GetPrivateProfileInt("ObjCallCharacter","DL_MinAtackRight",100,CallCharacterINI);
this->CalCharacterStruct.DL_AtackMaxRight = GetPrivateProfileInt("ObjCallCharacter","DL_MaxAtackRight",50,CallCharacterINI);
this->CalCharacterStruct.DL_AtackMinLeft = GetPrivateProfileInt("ObjCallCharacter","DL_MinAtackLeft",100,CallCharacterINI);
this->CalCharacterStruct.DL_AtackMaxLeft = GetPrivateProfileInt("ObjCallCharacter","DL_MaxAtackLeft",50,CallCharacterINI);
this->CalCharacterStruct.DL_AtackSpeed = GetPrivateProfileInt("ObjCallCharacter","DL_AtackSpeed",35,CallCharacterINI);
this->CalCharacterStruct.DL_MagicSpeed = GetPrivateProfileInt("ObjCallCharacter","DL_MagicSpeed",30,CallCharacterINI);
this->CalCharacterStruct.DL_SuccessfulBlocking = GetPrivateProfileInt("ObjCallCharacter","DL_SucessFullBlock",40,CallCharacterINI);
this->CalCharacterStruct.DL_Defense = GetPrivateProfileInt("ObjCallCharacter","DL_Defense",12,CallCharacterINI);
this->CalCharacterStruct.DL_MagicDMGMin = GetPrivateProfileInt("ObjCallCharacter","DL_MagicDmgMin",100,CallCharacterINI);
this->CalCharacterStruct.DL_MagicDMGMax = GetPrivateProfileInt("ObjCallCharacter","DL_MagicDmgMax",80,CallCharacterINI);
/*FIM DAS CLASSES DE DL E LE*/
/*CLASSES DE SUM BS E DMS*/
this->CalCharacterStruct.SUM_AtackMinRight = GetPrivateProfileInt("ObjCallCharacter","SUM_MinAtackRight",100,CallCharacterINI);
this->CalCharacterStruct.SUM_AtackMaxRight = GetPrivateProfileInt("ObjCallCharacter","SUM_MaxAtackRight",50,CallCharacterINI);
this->CalCharacterStruct.SUM_AtackMinLeft = GetPrivateProfileInt("ObjCallCharacter","SUM_MinAtackLeft",100,CallCharacterINI);
this->CalCharacterStruct.SUM_AtackMaxLeft = GetPrivateProfileInt("ObjCallCharacter","SUM_MaxAtackLeft",50,CallCharacterINI);
this->CalCharacterStruct.SUM_AtackSpeed = GetPrivateProfileInt("ObjCallCharacter","SUM_AtackSpeed",35,CallCharacterINI);
this->CalCharacterStruct.SUM_MagicSpeed = GetPrivateProfileInt("ObjCallCharacter","SUM_MagicSpeed",30,CallCharacterINI);
this->CalCharacterStruct.SUM_SuccessfulBlocking = GetPrivateProfileInt("ObjCallCharacter","SUM_SucessFullBlock",40,CallCharacterINI);
this->CalCharacterStruct.SUM_Defense = GetPrivateProfileInt("ObjCallCharacter","SUM_Defense",12,CallCharacterINI);
this->CalCharacterStruct.SUM_MagicDMGMin = GetPrivateProfileInt("ObjCallCharacter","SUM_MagicDmgMin",100,CallCharacterINI);
this->CalCharacterStruct.SUM_MagicDMGMax = GetPrivateProfileInt("ObjCallCharacter","SUM_MagicDmgMax",80,CallCharacterINI);
/*FIM DAS CLASSES DE SUM BS E DMS*/
}
sei que pra leigos isso não vai fazer sentido... mas pra quem conhece o minimo de programação pra muonline, vai saber que fazr calcharacter sem levar em consideração os equips do personagem, é o fail mais "historico da historia" (hauhauua) talvez com uma reza BRABA das boas o sistema funcione!!!
como havia dito anteriormente, sorte a quem for usar isso...esse ÓOOOOtimo muserver que era vendido.
abracinhos do seu amiguinho dollynho =**
Citação:
Tem uma source ai season 6 do NaM4 que o cara fez umas merdas nela e colocou seu nome e vende por 700 reais em 1 forum ae rs.
kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk kkkk
foi so @NaM4 libera a soucer que no caso e da z-team ele foi o 1 a pega e fazer modificação boba e vende troxa quem compra
Não sei se o Nam4 tem a source dele..mas pelo menos aqui está assim:
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
Código://GameServer 1.00.56 JPN - Completed -> Siege
//GameServer 1.00.67 JPN - Completed -> Common & Siege
//GameServer 1.00.77 JPN - Completed -> Common & Siege
//GameServer 1.00.90 JPN - Completed -> Common & Siege
#include "stdafx.h"
#include "ObjCalCharacter.h"
#include "Gamemain.h"
#include "DarkSpirit.h"
#include "ItemAddOption.h"
#include "..\common\SetItemOption.h"
#include "LogProc.h"
#include "ViewportSkillState.h" //Season 3.0 add-on
#include "SocketOption.h" //Season 4.0 add-on
#include "Configs.h"
void gObjCalCharacter(int aIndex)
{
LPOBJ lpObj = &gObj[aIndex];
WORD Strength = 0;
WORD Dexterity = 0;
WORD Vitality = 0;
WORD Energy = 0;
CItem * Right = &lpObj->pInventory[0];
CItem * Left = &lpObj->pInventory[1];
CItem * Gloves = &lpObj->pInventory[5];
CItem * Amulet = &lpObj->pInventory[9];
CItem * Helper = &lpObj->pInventory[8];
lpObj->HaveWeaponInHand = true;
if ( Right->IsItem() == FALSE && Left->IsItem() == FALSE )
{
lpObj->HaveWeaponInHand = false;
}
else if ( Left->IsItem() == FALSE && Right->m_Type == ITEMGET(4,15) )
{
lpObj->HaveWeaponInHand = false;
}
else if ( Right->IsItem() == FALSE )
{
int iType = Left->m_Type / MAX_SUBTYPE_ITEMS;
if ( Left->m_Type == ITEMGET(4,7) )
{
lpObj->HaveWeaponInHand = false;
}
else if ( iType == 6 )
{
lpObj->HaveWeaponInHand = false;
}
}
lpObj->AddLife = 0;
lpObj->AddMana = 0;
lpObj->MonsterDieGetMoney = 0;
lpObj->MonsterDieGetLife = 0;
lpObj->MonsterDieGetMana = 0;
lpObj->DamageReflect = 0;
lpObj->DamageMinus = 0;
lpObj->SkillLongSpearChange = false;
if ( lpObj->m_iItemEffectValidTime > 0 )
{
g_ItemAddOption.PrevSetItemLastEffectForHallowin(lpObj); //clear previous halloween effect (apply again later)
}
int iItemIndex;
BOOL bIsChangeItem;
for ( iItemIndex=0; iItemIndex<MAX_PLAYER_EQUIPMENT;iItemIndex++)
{
if ( lpObj->pInventory[iItemIndex].IsItem() != FALSE )
{
lpObj->pInventory[iItemIndex].m_IsValidItem = true;
}
}
do
{
lpObj->SetOpAddMaxAttackDamage = 0;
lpObj->SetOpAddMinAttackDamage = 0;
lpObj->SetOpAddDamage = 0;
lpObj->SetOpIncAGValue = 0;
lpObj->SetOpAddCriticalDamageSuccessRate = 0;
lpObj->SetOpAddCriticalDamage = 0;
lpObj->SetOpAddExDamageSuccessRate = 0;
lpObj->SetOpAddExDamage = 0;
lpObj->SetOpAddSkillAttack = 0;
lpObj->AddStrength = 0;
lpObj->AddDexterity = 0;
lpObj->AddVitality = 0;
lpObj->AddEnergy = 0;
lpObj->AddLeadership = 0; //season4 add-on (wz fix o/)
lpObj->AddBP = 0;
lpObj->iAddShield = 0;
lpObj->SetOpAddAttackDamage = 0;
lpObj->SetOpAddDefence = 0;
lpObj->SetOpAddMagicPower = 0;
lpObj->SetOpAddDefenceRate = 0;
lpObj->SetOpIgnoreDefense = 0;
lpObj->SetOpDoubleDamage = 0;
lpObj->SetOpTwoHandSwordImproveDamage = 0;
lpObj->SetOpImproveSuccessAttackRate = 0;
lpObj->SetOpReflectionDamage = 0;
lpObj->SetOpImproveSheldDefence = 0;
lpObj->SetOpDecreaseAG = 0;
lpObj->SetOpImproveItemDropRate = 0;
lpObj->IsFullSetItem = false;
memset(lpObj->m_AddResistance, 0, sizeof(lpObj->m_AddResistance));
bIsChangeItem = FALSE;
g_ItemAddOption.PrevSetItemLastEffectForCashShop(lpObj); //Clear Active CashShop Attributes (Leap Effect most in any case)
g_ViewportSkillState.PrevBuffLastEffect(lpObj); //Clear BuffEffect Attributes
gObjCalcSetItemStat(lpObj);
gObjCalcSetItemOption(lpObj);
for (iItemIndex=0;iItemIndex<MAX_PLAYER_EQUIPMENT;iItemIndex++)
{
if ( lpObj->pInventory[iItemIndex].IsItem() != FALSE && lpObj->pInventory[iItemIndex].m_IsValidItem != false )
{
if ( gObjValidItem( lpObj, &lpObj->pInventory[iItemIndex], iItemIndex) != FALSE )
{
lpObj->pInventory[iItemIndex].m_IsValidItem = true;
}
else
{
lpObj->pInventory[iItemIndex].m_IsValidItem = false;
g_ViewportSkillState.CalCharacterRemoveBuffEffect(lpObj); //season4 add-on
bIsChangeItem = TRUE;
}
}
}
}
while ( bIsChangeItem != FALSE );
Strength = lpObj->Strength;
Dexterity = lpObj->Dexterity;
Vitality = lpObj->Vitality ;
Energy = lpObj->Energy ;
if(g_bAbilityDebug == 1) //season3 add-on for GM
{
char szTemp[256];
sprintf(szTemp, "Strength: %d,%d Dexterity: %d,%d", lpObj->Strength, lpObj->AddStrength, lpObj->Dexterity, lpObj->AddDexterity);
GCServerMsgStringSend(szTemp, lpObj->m_Index, 1);
memset(szTemp, 0, 256);
sprintf(szTemp, "Vitality: %d,%d Energy: %d,%d", lpObj->Vitality, lpObj->AddVitality, lpObj->Energy, lpObj->AddEnergy);
GCServerMsgStringSend(szTemp, lpObj->m_Index, 1);
//season4 add-on
memset(szTemp, 0, 256);
sprintf(szTemp, "Leadership: %d,%d", lpObj->Leadership, lpObj->AddLeadership);
GCServerMsgStringSend(szTemp, lpObj->m_Index, 1);
}
if ( lpObj->Class == CLASS_ELF )
{
if ( (Right->m_Type >= ITEMGET(4,8) && Right->m_Type < ITEMGET(4,15) ) ||
(Left->m_Type >= ITEMGET(4,0) && Left->m_Type < ITEMGET(4,7)) ||
Right->m_Type == ITEMGET(4,16) ||
Left->m_Type == ITEMGET(4,20) ||
Left->m_Type == ITEMGET(4,21) || Left->m_Type == ITEMGET(4,22) || //loc7 Item 4,22 Add-on Season 2.5 GS-CS 56 (Albatross Fix)
Left->m_Type == ITEMGET(4,23) || //season4 add-on
Right->m_Type == ITEMGET(4,18) ||
Right->m_Type == ITEMGET(4,19) ||
Left->m_Type == ITEMGET(4,17) )
{
if ( (Right->IsItem() != FALSE && Right->m_IsValidItem == false) || (Left->IsItem() != FALSE && Left->m_IsValidItem == false) )
{
lpObj->m_AttackDamageMinRight = (Dexterity + Strength ) / SpartaSeries.configs.ELF_BOW_AttackDamageMinRight_str1; //7
lpObj->m_AttackDamageMaxRight = (Dexterity + Strength ) / SpartaSeries.configs.ELF_BOW_AttackDamageMaxRight_str1; //4
lpObj->m_AttackDamageMinLeft = (Dexterity + Strength ) / SpartaSeries.configs.ELF_BOW_AttackDamageMinLeft_str1; //7
lpObj->m_AttackDamageMaxLeft = (Dexterity + Strength ) / SpartaSeries.configs.ELF_BOW_AttackDamageMaxLeft_str1; //4
}
else
{
lpObj->m_AttackDamageMinRight = (Dexterity / SpartaSeries.configs.ELF_AGILITI_DIVISOR_R_MIN_1) + (Strength / SpartaSeries.configs.ELF_STR_DIVISOR_R_MIN_1);
lpObj->m_AttackDamageMaxRight = (Dexterity / SpartaSeries.configs.ELF_AGILITI_DIVISOR_R_MAX_1) + (Strength / SpartaSeries.configs.ELF_STR_DIVISOR_R_MAX_1 );
lpObj->m_AttackDamageMinLeft = (Dexterity / SpartaSeries.configs.ELF_AGILITI_DIVISOR_L_MIN_1) + (Strength / SpartaSeries.configs.ELF_STR_DIVISOR_L_MIN_1);
lpObj->m_AttackDamageMaxLeft = (Dexterity / SpartaSeries.configs.ELF_AGILITI_DIVISOR_L_MAX_1) + (Strength / SpartaSeries.configs.ELF_STR_DIVISOR_L_MAX_1 );
}
}
else
{
lpObj->m_AttackDamageMinRight = (Dexterity + Strength ) / SpartaSeries.configs.ELF_NOBOW_AttackDamageMinRight_str2; //7
lpObj->m_AttackDamageMaxRight = (Dexterity + Strength ) / SpartaSeries.configs.ELF_NOBOW_AttackDamageMaxRight_str2; //4
lpObj->m_AttackDamageMinLeft = (Dexterity + Strength ) / SpartaSeries.configs.ELF_NOBOW_AttackDamageMinLeft_str2; //7
lpObj->m_AttackDamageMaxLeft = (Dexterity + Strength ) / SpartaSeries.configs.ELF_NOBOW_AttackDamageMaxLeft_str2; //4
}
}
else if ( lpObj->Class == CLASS_KNIGHT )
{
lpObj->m_AttackDamageMinRight = Strength / SpartaSeries.configs.DK_STR_DIVISOR_R_MIN_1;
lpObj->