Quote:
Originally Posted by Avalion
The else I showed is another else before the other end brace and the other else. You were checking the item kind type of the target but if you're using a scroll not for the item type and it is a valid item type, it would completely skip the last else -- in other words, waste a scroll when using it on the wrong item.
example: Lets say id = II_NIGGA and item kind of target = weapon
Code:
if (Itemkind1 == weapon)
{
if (id == II_BS_SCROLL) somebs();
else if(id == IIBSSCROLL2) somebs2();
else{ return false; } //scroll not in check
}
else{ return false; }
Anyway, here.
Code:
//rather than sending CItemElem, we can send a const reference of the item id
bool CDPSrvr::DoUseItemTarget_WezzyFixAwakeningScroll(CUser* pUser, const unsigned long& matId, CItemElem* pTarget)
{
if (g_xRandomOptionProperty->GetRandomOptionKind(pTarget) >= 0)
{
//declare itemprop variable so we dont have to continue calling it
ItemProp *iProp = pTarget->GetProp();
if (iProp == NULL){ return false; }
//lets store some variables here that we can use.
unsigned char dst = 0; short adj = 0;
//check type to narrow switch of scrolls. also lets lower these numbers cause high numbers is shit balance faggot.
if (iProp->dwItemKind1 == IK1_WEAPON || iProp->dwItemKind2 == IK2_ARMORETC || iProp->dwItemKind2 == IK2_ARMOR || iProp->dwItemKind3 == IK3_SHIELD)
{
switch (matId)
{
//set variables to non 0 values if scroll is right.
case II_SYS_N_AWAKEFIX_STR: dst = DST_STR; adj = 18; break;
case II_SYS_N_AWAKEFIX_STA: dst = DST_STA; adj = 18; break;
case II_SYS_N_AWAKEFIX_DEX: dst = DST_DEX; adj = 18; break;
case II_SYS_N_AWAKEFIX_INT: dst = DST_INT; adj = 18; break;
case II_SYS_N_AWAKEFIX_ADOCH: dst = DST_CRITICAL_BONUS; adj = 12; break;
case II_SYS_N_AWAKEFIX_SPEED: dst = DST_SPEED; adj = 9; break;
case II_SYS_N_AWAKEFIX_INCATK: dst = DST_ATKPOWER_RATE; adj = 5; break;
case II_SYS_N_AWAKEFIX_INCMP: dst = DST_MP_MAX_RATE; adj = 5; break;
case II_SYS_N_AWAKEFIX_INCHP: dst = DST_HP_MAX_RATE; adj = 6; break;
case II_SYS_N_AWAKEFIX_INCDEF: dst = DST_ADJDEF_RATE; adj = 5; break;
default: break;
}
}
else if (iProp->dwItemKind2 == IK2_JEWELRY)
{
switch (matId)
{
case II_SYS_J_AWAKEFIX_STR: dst = DST_STR; adj = 10; break;
case II_SYS_J_AWAKEFIX_STA: dst = DST_STA; adj = 10; break;
case II_SYS_J_AWAKEFIX_DEX: dst = DST_DEX; adj = 10; break;
case II_SYS_J_AWAKEFIX_INT: dst = DST_INT; adj = 10; break;
case II_SYS_J_AWAKEFIX_ADOCH: dst = DST_CRITICAL_BONUS; adj = 5; break;
case II_SYS_J_AWAKEFIX_SPEED: dst = DST_SPEED; adj = 9; break;
case II_SYS_J_AWAKEFIX_INCATK: dst = DST_ATKPOWER_RATE; adj = 5; break;
case II_SYS_J_AWAKEFIX_INCMP: dst = DST_MP_MAX_RATE; adj = 5; break;
case II_SYS_J_AWAKEFIX_INCHP: dst = DST_HP_MAX_RATE; adj = 6; break;
case II_SYS_J_AWAKEFIX_INCDEF: dst = DST_ADJDEF_RATE; adj = 5; break;
default: break;
}
}
else if (iProp->dwItemKind2 == IK2_CLOTH || iProp->dwItemKind2 == IK2_CLOTHETC)
{
switch (matId)
{
case II_SYS_F_AWAKEFIX_STR: dst = DST_STR; adj = 10; break;
case II_SYS_F_AWAKEFIX_STA: dst = DST_STA; adj = 10; break;
case II_SYS_F_AWAKEFIX_DEX: dst = DST_DEX; adj = 10; break;
case II_SYS_F_AWAKEFIX_INT: dst = DST_INT; adj = 10; break;
case II_SYS_F_AWAKEFIX_ADOCH: dst = DST_CRITICAL_BONUS; adj = 5; break;
case II_SYS_F_AWAKEFIX_SPEED: dst = DST_SPEED; adj = 9; break;
case II_SYS_F_AWAKEFIX_INCATK: dst = DST_ATKPOWER_RATE; adj = 5; break;
case II_SYS_F_AWAKEFIX_INCMP: dst = DST_MP_MAX_RATE; adj = 5; break;
case II_SYS_F_AWAKEFIX_INCHP: dst = DST_HP_MAX_RATE; adj = 6; break;
case II_SYS_F_AWAKEFIX_INCDEF: dst = DST_ADJDEF_RATE; adj = 5; break;
default: break;
}
}
else if (iProp->dwItemKind3 == IK3_EGG)
{
switch (matId)
{
case II_SYS_P_AWAKEFIX_STR: dst = DST_STR; adj = 10; break;
case II_SYS_P_AWAKEFIX_STA: dst = DST_STA; adj = 10; break;
case II_SYS_P_AWAKEFIX_DEX: dst = DST_DEX; adj = 10; break;
case II_SYS_P_AWAKEFIX_INT: dst = DST_INT; adj = 10; break;
case II_SYS_P_AWAKEFIX_ADOCH: dst = DST_CRITICAL_BONUS; adj = 5; break;
case II_SYS_P_AWAKEFIX_SPEED: dst = DST_SPEED; adj = 9; break;
case II_SYS_P_AWAKEFIX_INCATK: dst = DST_ATKPOWER_RATE; adj = 5; break;
case II_SYS_P_AWAKEFIX_INCMP: dst = DST_MP_MAX_RATE; adj = 5; break;
case II_SYS_P_AWAKEFIX_INCHP: dst = DST_HP_MAX_RATE; adj = 6; break;
case II_SYS_P_AWAKEFIX_INCDEF: dst = DST_ADJDEF_RATE; adj = 5; break;
default: break;
}
}
else if (iProp->dwItemKind3 == IK3_PET)
{
switch (matId)
{
case II_SYS_V_AWAKEFIX_STR: dst = DST_STR; adj = 10; break;
case II_SYS_V_AWAKEFIX_STA: dst = DST_STA; adj = 10; break;
case II_SYS_V_AWAKEFIX_DEX: dst = DST_DEX; adj = 10; break;
case II_SYS_V_AWAKEFIX_INT: dst = DST_INT; adj = 10; break;
case II_SYS_V_AWAKEFIX_ADOCH: dst = DST_CRITICAL_BONUS; adj = 5; break;
case II_SYS_V_AWAKEFIX_SPEED: dst = DST_SPEED; adj = 9; break;
case II_SYS_V_AWAKEFIX_INCATK: dst = DST_ATKPOWER_RATE; adj = 5; break;
case II_SYS_V_AWAKEFIX_INCMP: dst = DST_MP_MAX_RATE; adj = 5; break;
case II_SYS_V_AWAKEFIX_INCHP: dst = DST_HP_MAX_RATE; adj = 6; break;
case II_SYS_V_AWAKEFIX_INCDEF: dst = DST_ADJDEF_RATE; adj = 5; break;
default: break;
}
}
//now we check if the item is wrong by checking if dst is false
if (!dst)
{
pUser->AddText("Incorrect item material or scroll.");
return false;
}
//If it hasn't returned false, we can update the awakes and then return true to remove scroll
g_xRandomOptionProperty->InitializeRandomOption(pTarget->GetRandomOptItemIdPtr());
for (int i = 0; i < 3; ++i){ g_xRandomOptionProperty->SetParam(pTarget->GetRandomOptItemIdPtr(), dst, adj); }
pUser->UpdateItemEx((BYTE)(pTarget->m_dwObjId), UI_RANDOMOPTITEMID, pTarget->GetRandomOptItemId());
return true;
}
return false;
}
Code:
case II_SYS_N_AWAKEFIX_STR:
case II_SYS_N_AWAKEFIX_STA:
case II_SYS_N_AWAKEFIX_DEX:
case II_SYS_N_AWAKEFIX_INT:
case II_SYS_N_AWAKEFIX_ADOCH:
case II_SYS_N_AWAKEFIX_SPEED:
case II_SYS_N_AWAKEFIX_INCATK:
case II_SYS_N_AWAKEFIX_INCMP:
case II_SYS_N_AWAKEFIX_INCHP:
case II_SYS_N_AWAKEFIX_INCDEF:
case II_SYS_J_AWAKEFIX_STR:
case II_SYS_J_AWAKEFIX_STA:
case II_SYS_J_AWAKEFIX_DEX:
case II_SYS_J_AWAKEFIX_INT:
case II_SYS_J_AWAKEFIX_ADOCH:
case II_SYS_J_AWAKEFIX_INCATK:
case II_SYS_J_AWAKEFIX_INCMP:
case II_SYS_J_AWAKEFIX_INCHP:
case II_SYS_J_AWAKEFIX_INCDEF:
case II_SYS_F_AWAKEFIX_STR:
case II_SYS_F_AWAKEFIX_STA:
case II_SYS_F_AWAKEFIX_DEX:
case II_SYS_F_AWAKEFIX_INT:
case II_SYS_F_AWAKEFIX_ADOCH:
case II_SYS_F_AWAKEFIX_SPEED:
case II_SYS_F_AWAKEFIX_INCATK:
case II_SYS_F_AWAKEFIX_INCMP:
case II_SYS_F_AWAKEFIX_INCHP:
case II_SYS_F_AWAKEFIX_INCDEF:
case II_SYS_P_AWAKEFIX_STR:
case II_SYS_P_AWAKEFIX_STA:
case II_SYS_P_AWAKEFIX_DEX:
case II_SYS_P_AWAKEFIX_INT:
case II_SYS_P_AWAKEFIX_ADOCH:
case II_SYS_P_AWAKEFIX_SPEED:
case II_SYS_P_AWAKEFIX_INCATK:
case II_SYS_P_AWAKEFIX_INCMP:
case II_SYS_P_AWAKEFIX_INCHP:
case II_SYS_P_AWAKEFIX_INCDEF:
case II_SYS_V_AWAKEFIX_STR:
case II_SYS_V_AWAKEFIX_STA:
case II_SYS_V_AWAKEFIX_DEX:
case II_SYS_V_AWAKEFIX_INT:
case II_SYS_V_AWAKEFIX_ADOCH:
case II_SYS_V_AWAKEFIX_SPEED:
case II_SYS_V_AWAKEFIX_INCATK:
case II_SYS_V_AWAKEFIX_INCMP:
case II_SYS_V_AWAKEFIX_INCHP:
case II_SYS_V_AWAKEFIX_INCDEF:
b = DoUseItemTarget_WezzyFixAwakeningScroll(pUser, pMaterial->m_dwItemId, pTarget); //send material id instead
break;
edit:
Also, you do not need that amount of scrolls. If you want them to have different effects based on item type, you could do something like so:
Code:
int type = 0;
if (iProp->dwItemKind1 == IK1_WEAPON || iProp->dwItemKind2 == IK2_ARMORETC || iProp->dwItemKind2 == IK2_ARMOR || iProp->dwItemKind3 == IK3_SHIELD)
type = 1;
else if (iProp->dwItemKind2 == IK2_JEWELRY)
type = 2;
if (type)
{
switch (matId)
{
case II_SYS_N_AWAKEFIX_STR:
dst = DST_STR;
if (type == 1) adj = 20;
else if (type == 2) adj = 5;
break;
|
Why the message not work ? u can edit my code and fix the message please
#ifdef __WEZZY_FIX_AWAKE_SCROLL
case II_SYS_N_AWAKEFIX_STR:
case II_SYS_N_AWAKEFIX_STA:
case II_SYS_N_AWAKEFIX_DEX:
case II_SYS_N_AWAKEFIX_INT:
case II_SYS_N_AWAKEFIX_ADOCH:
case II_SYS_N_AWAKEFIX_SPEED:
case II_SYS_F_AWAKEFIX_STR:
case II_SYS_F_AWAKEFIX_STA:
case II_SYS_F_AWAKEFIX_DEX:
case II_SYS_F_AWAKEFIX_INT:
case II_SYS_F_AWAKEFIX_ADOCH:
case II_SYS_F_AWAKEFIX_SPEED:
b = DoUseItemTarget_WezzyFixAwakeningScroll( pUser, pMaterial, pTarget );
break;
#endif // __WEZZY_FIX_AWAKE_SCROLL
#ifdef __WEZZY_FIX_AWAKE_SCROLL
BOOL CDPSrvr:

oUseItemTarget_WezzyFixAwakeningScroll( CUser* pUser, CItemElem* pMaterial, CItemElem* pTarget )
{
int nRandomOptionKind = g_xRandomOptionProperty->GetRandomOptionKind( pTarget );
if( nRandomOptionKind >= 0 )
{
g_xRandomOptionProperty->InitializeRandomOption( pTarget->GetRandomOptItemIdPtr() ); //Reset awake
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////// |Weapons|Armor|Shield| /////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if( pTarget->GetProp()->dwItemKind1 == IK1_WEAPON || pTarget->GetProp()->dwItemKind2 == IK2_ARMORETC || pTarget->GetProp()->dwItemKind2 == IK2_ARMOR || pTarget->GetProp()->dwItemKind3 == IK3_SHIELD || pTarget->GetProp()->dwItemKind3 == IK3_EGG )
{
if( pMaterial->m_dwItemId == II_SYS_N_AWAKEFIX_STR )
{
g_xRandomOptionProperty->SetParam( pTarget->GetRandomOptItemIdPtr(), DST_STR, 300 );
g_xRandomOptionProperty->SetParam( pTarget->GetRandomOptItemIdPtr(), DST_STR, 300 );
g_xRandomOptionProperty->SetParam( pTarget->GetRandomOptItemIdPtr(), DST_STR, 300 );
}
else if( pMaterial->m_dwItemId == II_SYS_N_AWAKEFIX_STA )
{
g_xRandomOptionProperty->SetParam( pTarget->GetRandomOptItemIdPtr(), DST_STA, 300 );
g_xRandomOptionProperty->SetParam( pTarget->GetRandomOptItemIdPtr(), DST_STA, 300 );
g_xRandomOptionProperty->SetParam( pTarget->GetRandomOptItemIdPtr(), DST_STA, 300 );
}
else if( pMaterial->m_dwItemId == II_SYS_N_AWAKEFIX_DEX )
{
g_xRandomOptionProperty->SetParam( pTarget->GetRandomOptItemIdPtr(), DST_DEX, 300 );
g_xRandomOptionProperty->SetParam( pTarget->GetRandomOptItemIdPtr(), DST_DEX, 300 );
g_xRandomOptionProperty->SetParam( pTarget->GetRandomOptItemIdPtr(), DST_DEX, 300 );
}
else if( pMaterial->m_dwItemId == II_SYS_N_AWAKEFIX_INT )
{
g_xRandomOptionProperty->SetParam( pTarget->GetRandomOptItemIdPtr(), DST_INT, 300 );
g_xRandomOptionProperty->SetParam( pTarget->GetRandomOptItemIdPtr(), DST_INT, 300 );
g_xRandomOptionProperty->SetParam( pTarget->GetRandomOptItemIdPtr(), DST_INT, 300 );
}
else if( pMaterial->m_dwItemId == II_SYS_N_AWAKEFIX_ADOCH )
{
g_xRandomOptionProperty->SetParam( pTarget->GetRandomOptItemIdPtr(), DST_CRITICAL_BONUS, 300 );
g_xRandomOptionProperty->SetParam( pTarget->GetRandomOptItemIdPtr(), DST_CRITICAL_BONUS, 300 );
g_xRandomOptionProperty->SetParam( pTarget->GetRandomOptItemIdPtr(), DST_CRITICAL_BONUS, 300 );
}
else if( pMaterial->m_dwItemId == II_SYS_N_AWAKEFIX_SPEED )
{
g_xRandomOptionProperty->SetParam( pTarget->GetRandomOptItemIdPtr(), DST_SPEED, 50 );
g_xRandomOptionProperty->SetParam( pTarget->GetRandomOptItemIdPtr(), DST_SPEED, 50 );
g_xRandomOptionProperty->SetParam( pTarget->GetRandomOptItemIdPtr(), DST_SPEED, 50 );
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////// |-------|Fashions|------| //////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
else if( pTarget->GetProp()->dwItemKind2 == IK2_CLOTH || pTarget->GetProp()->dwItemKind2 == IK2_CLOTHETC )
{
if( pMaterial->m_dwItemId == II_SYS_F_AWAKEFIX_STR )
{
g_xRandomOptionProperty->SetParam( pTarget->GetRandomOptItemIdPtr(), DST_STR, 300 );
}
else if( pMaterial->m_dwItemId == II_SYS_F_AWAKEFIX_STA )
{
g_xRandomOptionProperty->SetParam( pTarget->GetRandomOptItemIdPtr(), DST_STA, 300 );
}
else if( pMaterial->m_dwItemId == II_SYS_F_AWAKEFIX_DEX )
{
g_xRandomOptionProperty->SetParam( pTarget->GetRandomOptItemIdPtr(), DST_DEX, 300 );
}
else if( pMaterial->m_dwItemId == II_SYS_F_AWAKEFIX_INT )
{
g_xRandomOptionProperty->SetParam( pTarget->GetRandomOptItemIdPtr(), DST_INT, 300 );
}
else if( pMaterial->m_dwItemId == II_SYS_F_AWAKEFIX_ADOCH )
{
g_xRandomOptionProperty->SetParam( pTarget->GetRandomOptItemIdPtr(), DST_CRITICAL_BONUS, 300 );
}
else if( pMaterial->m_dwItemId == II_SYS_F_AWAKEFIX_SPEED )
{
g_xRandomOptionProperty->SetParam( pTarget->GetRandomOptItemIdPtr(), DST_SPEED, 100 );
}
}
else
{
pUser->AddText( "Oops! Wrong item!" );
return FALSE;
}
pUser->UpdateItemEx( (BYTE)( pTarget->m_dwObjId ), UI_RANDOMOPTITEMID, pTarget->GetRandomOptItemId() );
return TRUE;
}
return FALSE;
}
#endif // __WEZZY_FIX_AWAKE_SCROLL