Source:
In this function:
BOOL CWndNavigator::OnEraseBkgnd(C2DRender* p2DRender)
replace:
to:
moverskill.cpp
this function:
int CMover:
oUseItemKeep( ItemProp* pItemProp, CItemElem* pItemElem, int nPart)
from:
to:
BOOL CWndNavigator::OnEraseBkgnd(C2DRender* p2DRender)
replace:
Code:
if( pLand )
{
pLand->m_texMiniMap.m_size = m_size;
if( clipRect.RectLapRect( rectCur ) )
{
if( pLand->m_texMiniMap.m_pTexture )
{
pLand->m_texMiniMap.m_size = m_size;
p2DRender->RenderTexture(point,&pLand->m_texMiniMap);
if( bDrawGuildWarNum )
{
m_GuildCombatTextureMask.m_size = pLand->m_texMiniMap.m_size;
p2DRender->RenderTexture(point, &m_GuildCombatTextureMask);
}
}
}
}
}
}
//p2DRender->RenderMiniMap( &m_ALPHACIRCLE );
AccuFrame(); // °£´ÜÇÑ ÇÁ·¹ÀÓ °è»êÀ» ÇØÁØ´Ù.
if( pWorld->m_bIsIndoor == FALSE
#if __VER >= 15 // __15TH_INSTANCE_DUNGEON
&& !pWorld->IsWorldInstanceDungeon()
#endif // __15TH_INSTANCE_DUNGEON
)
{
// °´Ã¼ Ãâ·ÂÀ» À§ÇÑ ¼³Á¤
TEXTUREVERTEX vertex[ 1000 * 6 ];
TEXTUREVERTEX* pVertices = vertex;
int nCount = 0;
int xu = 0, yv = 0;
CRect aRcArray[ 100 ];
int nRcCount = 0;
////////////////////////////////////////////////////
// ¿ÀºêÁ§Æ® Ãâ·Â
////////////////////////////////////////////////////
CObj* pObj;
int nIndex = 0;
int nPartyMap[ MAX_PTMEMBER_SIZE ];
CMover* apQuest[ 100 ];
int nQuestNum = 0;
ZeroMemory( nPartyMap, sizeof(nPartyMap) );
int nPartyMapCount = 0;
float fDistMap = rect.Width() / 2 / fx;
FOR_LAND( pWorld, pLand, pWorld->m_nVisibilityLand, FALSE )
{
FOR_OBJ( pLand, pObj, OT_MOVER )
{
// BOOL bPartyMap = FALSE;
if( pObj != g_pPlayer )
{
CMover* pMover = (CMover*)pObj;
if( g_pPlayer->m_idMurderer != pMover->m_idPlayer ) // ÂïÀ» Ÿ°ÙÀÌ ³¯ Á×ÀγÑÀ̸é Á¶°Ç¾øÀÌ ¹«Á¶°Ç Âï´Â´Ù.
{
// Ç÷¹À̾îÇÊÅͰ¡ ¾Æ´Ñµ¥, Ç÷¹À̾î¶ó¸é
if( m_bObjFilterPlayer == FALSE && pMover->IsPlayer() == TRUE )
{
// °Ô´Ù°¡ ÆÄƼÇÊÅ͵µ ¾Æ´Ï¶ó¸é ½ºÅµ
if( m_bObjFilterParty == FALSE )
continue;
if( g_Party.IsMember( pMover->m_idPlayer ) == FALSE )
continue;
}
if( m_bObjFilterMonster == FALSE && ( pMover->IsPlayer() == FALSE && pMover->IsPeaceful() == FALSE /*&& pMover->IsSummon()*/ == FALSE ) )
continue;
if( m_bObjFilterNPC == FALSE && ( pMover->IsPlayer() == FALSE && pMover->IsPeaceful() == TRUE ) )
{
// »óÁ¡ÀÌ ¾Æ´Ï¶ó¸é ÄÁƼ´º.
LPCHARACTER lpCharacter = pMover->GetCharacter();
if( lpCharacter == NULL || lpCharacter->m_nStructure == -1 )
continue;
}
if( pMover->IsMode( TRANSPARENT_MODE ) || pMover->IsAuthHigher( AUTH_GAMEMASTER ) ) // ´ë»óÀÌ Åõ¸í¸ðµåÀ̰ųª GMÀϰæ¿ì Ÿ°Ù ¾ÈµÊ.
continue;
}
vPos = pObj->GetPos();
vPos.x *= fx;
vPos.z *= fy;
point.x = (LONG)( ( rect.Width() / 2 ) + vPos.x );
point.y = (LONG)( ( rect.Height() / 2 ) - vPos.z );
point.x -= xCenter;
point.y -= yCenter;
CRect rectHittest( point.x, point.y, point.x + 5, point.y + 5);
//rectHittest.InflateRect( 4, 4 );
CPoint ptMouse = GetMousePoint();
if( rectHittest.PtInRect( ptMouse ) )
{
ClientToScreen( &ptMouse );
ClientToScreen( &rectHittest );
g_toolTip.PutToolTip( 10000 + ((CMover*)pObj)->GetId(), ((CMover*)pObj)->GetName( TRUE ), rectHittest, ptMouse, 0 );
}
// Äù½ºÆ® À̸ðƼÄÜ
if( pMover->IsNPC() && pMover->m_nQuestEmoticonIndex != -1 )
{
apQuest[ nQuestNum++ ] = pMover;
}
else
if( g_pPlayer->m_idMurderer && g_pPlayer->m_idMurderer == pMover->m_idPlayer ) // ÂïÀ» Ÿ°ÙÀÌ ³¯ Á×ÀγÑÀÌ¸é »¡°²°Ô Ç¥½Ã
nIndex = 5;
else
if( pMover->IsNPC() && pMover->IsPeaceful() )
{
nIndex = 1;
}
else
if( g_pPlayer->m_idGuild && g_pPlayer->m_idGuild == pMover->m_idGuild )
nIndex = 3;
else
if( pMover->IsNPC() && pMover->IsPeaceful() == FALSE )
nIndex = 2;
//xu = 10, yv = 0;
else
if( pMover->IsPlayer() )
{
nPartyMap[nPartyMapCount] = g_Party.FindMember( pMover->m_idPlayer );
if( nPartyMap[nPartyMapCount] != -1 )
{
g_Party.m_aMember[ nPartyMap[nPartyMapCount] ].m_vPos = pMover->GetPos();
++nPartyMapCount;
nIndex = 4;
}
else
nIndex = 0;
}
if( nCount < 1000 )
{
nCount++;
LPCHARACTER lpCharacter = pMover->GetCharacter();
if( lpCharacter && lpCharacter->m_nStructure != -1 )
m_texNavObjs.MakeVertex( p2DRender, CPoint( point.x - 8, point.y - 8 ), 6 + lpCharacter->m_nStructure, &pVertices );
else
{
// Äù½ºÆ®°¡ ¾ø´Â °Í¸¸ Ãâ·Â
if( pMover->m_nQuestEmoticonIndex == -1 )
m_texNavObjs.MakeVertex( p2DRender, CPoint( point.x - 2, point.y - 2 ), nIndex, &pVertices );
}
}
}
}
END_OBJ
}
END_LAND
to:
Code:
if( pLand )
{
if( g_pPlayer->HasBuffByIk3( IK3_MAPOPEN_DUNGEON ) ||
( pWorld->m_bIsIndoor == FALSE && !pWorld->IsWorldInstanceDungeon() ) )
{
pLand->m_texMiniMap.m_size = m_size;
if( clipRect.RectLapRect( rectCur ) )
{
if( pLand->m_texMiniMap.m_pTexture )
{
pLand->m_texMiniMap.Render( p2DRender, point, 200 );
if( bDrawGuildWarNum )
{
m_GuildCombatTextureMask.m_size = pLand->m_texMiniMap.m_size;
m_GuildCombatTextureMask.Render( p2DRender, point, 200 );
}
}
}
}
else
{
m_texDunFog.m_size = CSize( rect.Width(), rect.Height() );
p2DRender->RenderTexture( CPoint( 0, 0 ), &m_texDunFog, 255 );
}
}
}
}
AccuFrame();
if( g_pPlayer->HasBuffByIk3( IK3_MAPOPEN_DUNGEON ) ||
( pWorld->m_bIsIndoor == FALSE && !pWorld->IsWorldInstanceDungeon() ) )
{
TEXTUREVERTEX vertex[ 1000 * 6 ];
TEXTUREVERTEX* pVertices = vertex;
int nCount = 0;
int xu = 0, yv = 0;
CRect aRcArray[ 100 ];
int nRcCount = 0;
CObj* pObj;
int nIndex = 0;
int nPartyMap[ MAX_PTMEMBER_SIZE ];
CMover* apQuest[ 100 ];
int nQuestNum = 0;
ZeroMemory( nPartyMap, sizeof(nPartyMap) );
int nPartyMapCount = 0;
float fDistMap = rect.Width() / 2 / fx;
FOR_LAND( pWorld, pLand, pWorld->m_nVisibilityLand, FALSE )
{
FOR_OBJ( pLand, pObj, OT_MOVER )
{
if( pObj != g_pPlayer )
{
CMover* pMover = (CMover*)pObj;
if( g_pPlayer->m_idMurderer != pMover->m_idPlayer )
{
if( m_bObjFilterPlayer == FALSE && pMover->IsPlayer() == TRUE )
{
if( m_bObjFilterParty == FALSE )
continue;
if( g_Party.IsMember( pMover->m_idPlayer ) == FALSE )
continue;
}
if( m_bObjFilterMonster == FALSE && ( pMover->IsPlayer() == FALSE && pMover->IsPeaceful() == FALSE ) )
continue;
if( m_bObjFilterNPC == FALSE && ( pMover->IsPlayer() == FALSE && pMover->IsPeaceful() == TRUE ) )
{
LPCHARACTER lpCharacter = pMover->GetCharacter();
if( lpCharacter == NULL || lpCharacter->m_nStructure == -1 )
continue;
}
if( pMover->IsMode( TRANSPARENT_MODE ) || pMover->IsAuthHigher( AUTH_GAMEMASTER ) )
continue;
}
vPos = pObj->GetPos();
vPos.x *= fx;
vPos.z *= fy;
point.x = (LONG)( ( rect.Width() / 2 ) + vPos.x );
point.y = (LONG)( ( rect.Height() / 2 ) - vPos.z );
point.x -= xCenter;
point.y -= yCenter;
CRect rectHittest( point.x, point.y, point.x + 5, point.y + 5);
//rectHittest.InflateRect( 4, 4 );
CPoint ptMouse = GetMousePoint();
if( rectHittest.PtInRect( ptMouse ) )
{
ClientToScreen( &ptMouse );
ClientToScreen( &rectHittest );
g_toolTip.PutToolTip( 10000 + ((CMover*)pObj)->GetId(), ((CMover*)pObj)->GetName( TRUE ), rectHittest, ptMouse, 0 );
}
if( pMover->IsNPC() && pMover->m_nQuestEmoticonIndex != -1 )
{
apQuest[ nQuestNum++ ] = pMover;
}
else
if( g_pPlayer->m_idMurderer && g_pPlayer->m_idMurderer == pMover->m_idPlayer )
nIndex = 5;
else
if( pMover->IsNPC() && pMover->IsPeaceful() )
{
nIndex = 1;
}
else
if( g_pPlayer->m_idGuild && g_pPlayer->m_idGuild == pMover->m_idGuild )
nIndex = 3;
else
if( pMover->IsNPC() && pMover->IsPeaceful() == FALSE )
nIndex = 2;
else
if( pMover->IsPlayer() )
{
nPartyMap[nPartyMapCount] = g_Party.FindMember( pMover->m_idPlayer );
if( nPartyMap[nPartyMapCount] != -1 )
{
g_Party.m_aMember[ nPartyMap[nPartyMapCount] ].m_vPos = pMover->GetPos();
++nPartyMapCount;
nIndex = 4;
}
else
nIndex = 0;
}
if( nCount < 1000 )
{
nCount++;
LPCHARACTER lpCharacter = pMover->GetCharacter();
if( lpCharacter && lpCharacter->m_nStructure != -1 )
m_texNavObjs.MakeVertex( p2DRender, CPoint( point.x - 8, point.y - 8 ), 6 + lpCharacter->m_nStructure, &pVertices );
else
{
if( pMover->m_nQuestEmoticonIndex == -1 )
m_texNavObjs.MakeVertex( p2DRender, CPoint( point.x - 2, point.y - 2 ), nIndex, &pVertices );
}
}
}
}
END_OBJ
}
END_LAND
moverskill.cpp
this function:
int CMover:
from:
Code:
{
#ifdef __WORLDSERVER
#ifdef __NEW_STACKABLE_AMPS
// First Check how many Amps are currently active.
int nAmount = 0;
for( MAPBUFF::iterator i = m_buffs.m_mapBuffs.begin(); i != m_buffs.m_mapBuffs.end(); ++i )
{
ItemProp* pItemProp = prj.GetItemProp( i->second->GetId());
if( pItemProp )
{
if( pItemProp->dwItemKind3 == IK3_EXP_RATE )
{
nAmount++;
}
}
}
// Cant hold more Amps
if( nAmount >= MAX_AMP_STACK_COUNT )
{
return 2;
}
// Check Level
if( GetLevel() < pItemProp->nMinLimitLevel || GetLevel() > pItemProp->nMaxLimitLevel )
{
return 1;
}
// Can hold more Amps. Try activating scroll
if( HasBuff( BUFF_ITEM, (WORD) ( pItemProp->dwID )))
{
MAPAMPSTORE::iterator i = prj.m_mapAmpStore.find( pItemProp->dwID );
if( i != prj.m_mapAmpStore.end() )
{
AMP_STORE_INFO* info = i->second;
if( HasBuff( BUFF_ITEM, (WORD)(info->dwIDSecond)))
{
if( HasBuff( BUFF_ITEM, (WORD)(info->dwIDThird)))
{
if( HasBuff( BUFF_ITEM, (WORD) (info->dwIDFourth)))
{
if( HasBuff( BUFF_ITEM, (WORD) (info->dwIDFifth)))
{
return 2;
}
else
{
if( pItemProp->nMaxDuplication >= 5 )
{
ItemProp* pAmpProp = prj.GetItemProp( info->dwIDFifth );
DoApplySkill( (CCtrl*)this, pAmpProp, NULL );
return 4;
}
}
}
else
{
if( pItemProp->nMaxDuplication >= 4 )
{
ItemProp* pAmpProp = prj.GetItemProp( info->dwIDFourth );
DoApplySkill( (CCtrl*)this, pAmpProp, NULL );
return 4;
}
}
}
else
{
if( pItemProp->nMaxDuplication >= 3 )
{
ItemProp* pAmpProp = prj.GetItemProp( info->dwIDThird );
DoApplySkill( (CCtrl*)this, pAmpProp, NULL );
return 4;
}
}
}
else
{
if( pItemProp->nMaxDuplication >= 2 )
{
ItemProp* pAmpProp = prj.GetItemProp( info->dwIDSecond );
DoApplySkill( (CCtrl*)this, pAmpProp, NULL );
return 4;
}
}
}
}
else
{
// DoApplySkill( (CCtrl*)this, pItemProp, NULL );
Error( "%d", (DWORD)pItemProp->dwSkillTime );
AddBuff( BUFF_ITEM, (WORD)(pItemProp->dwID), 0, pItemProp->dwSkillTime, GetId() );
return 4;
}
case IK3_MAPOPEN_DUNGEON:
{
if( HasBuffByIk3( pItemProp->dwItemKind3 ))
return 2;
DoApplySkill( (CCtrl*)this, pItemProp, NULL );
return 0;
}
default:
{
if( HasBuff( BUFF_ITEM, (WORD) ( pItemProp->dwID )))
return 2;
AddBuff( BUFF_ITEM, (WORD)(pItemProp->dwID), 0, pItemProp->dwSkillTime, GetId() );
Error( "DoUseItemKeep IK3_ELSE pItemProp->dwId = %d, pItemProp->dwSkillTime = %d", pItemProp->dwID, pItemProp->dwSkillTime );
return 0;
}
#endif // __NEW_STACKABLE_AMPS
#endif // __WORLDSERVER
return 3;
}
to:
Code:
{
#ifdef __WORLDSERVER
// Check Level
if( GetLevel() < pItemProp->nMinLimitLevel || GetLevel() > pItemProp->nMaxLimitLevel )
{
return 1;
}
switch( pItemProp->dwItemKind3 )
{
#ifdef __NEW_STACKABLE_AMPS
case IK3_EXP_RATE:
{
// First Check how many Amps are currently active.
int nAmount = 0;
for( MAPBUFF::iterator i = m_buffs.m_mapBuffs.begin(); i != m_buffs.m_mapBuffs.end(); ++i )
{
ItemProp* pItemProp = prj.GetItemProp( i->second->GetId());
if( pItemProp )
{
if( pItemProp->dwItemKind3 == IK3_EXP_RATE )
{
nAmount++;
}
}
}
// Cant hold more Amps
if( nAmount >= MAX_AMP_STACK_COUNT )
{
return 2;
}
// Can hold more Amps. Try activating scroll
if( HasBuff( BUFF_ITEM, (WORD) ( pItemProp->dwID )))
{
MAPAMPSTORE::iterator i = prj.m_mapAmpStore.find( pItemProp->dwID );
if( i != prj.m_mapAmpStore.end() )
{
AMP_STORE_INFO* info = i->second;
if( HasBuff( BUFF_ITEM, (WORD)(info->dwIDSecond)))
{
if( HasBuff( BUFF_ITEM, (WORD)(info->dwIDThird)))
{
if( HasBuff( BUFF_ITEM, (WORD) (info->dwIDFourth)))
{
if( HasBuff( BUFF_ITEM, (WORD) (info->dwIDFifth)))
{
return 2;
}
else
{
if( pItemProp->nMaxDuplication >= 5 )
{
ItemProp* pAmpProp = prj.GetItemProp( info->dwIDFifth );
DoApplySkill( (CCtrl*)this, pAmpProp, NULL );
return 4;
}
}
}
else
{
if( pItemProp->nMaxDuplication >= 4 )
{
ItemProp* pAmpProp = prj.GetItemProp( info->dwIDFourth );
DoApplySkill( (CCtrl*)this, pAmpProp, NULL );
return 4;
}
}
}
else
{
if( pItemProp->nMaxDuplication >= 3 )
{
ItemProp* pAmpProp = prj.GetItemProp( info->dwIDThird );
DoApplySkill( (CCtrl*)this, pAmpProp, NULL );
return 4;
}
}
}
else
{
if( pItemProp->nMaxDuplication >= 2 )
{
ItemProp* pAmpProp = prj.GetItemProp( info->dwIDSecond );
DoApplySkill( (CCtrl*)this, pAmpProp, NULL );
return 4;
}
}
}
}
else
{
DoApplySkill( (CCtrl*)this, pItemProp, NULL );
return 4;
}
}
break;
case IK3_SCROLL:
case IK3_LOOKRESTOREITEM:
case IK3_MADRIGALBLESS:
{
if( HasBuff( BUFF_ITEM, (WORD) ( pItemProp->dwID )))
return 2;
DoApplySkill( (CCtrl*)this, pItemProp, NULL );
return 0;
}
break;
case IK3_MOREGETITEMSCROLL:
case IK3_PARTYPOINTFREE:
case IK3_PKPENALTYSCROLL_C:
case IK3_TRADEREGISTERITEM:
case IK3_MAPOPEN_DUNGEON:
{
if( HasBuffByIk3( pItemProp->dwItemKind3 ))
return 2;
DoApplySkill( (CCtrl*)this, pItemProp, NULL );
return 0;
}
default:
{
if( HasBuff( BUFF_ITEM, (WORD) ( pItemProp->dwID )))
return 2;
AddBuff( BUFF_ITEM, (WORD)(pItemProp->dwID), 0, pItemProp->dwSkillTime, GetId() );
Error( "DoUseItemKeep IK3_ELSE pItemProp->dwId = %d, pItemProp->dwSkillTime = %d", pItemProp->dwID, pItemProp->dwSkillTime );
return 0;
}
#endif // __NEW_STACKABLE_AMPS
}
#endif // __WORLDSERVER
return 3;
}
Resource:
v19 Reading Parameter(ONLY):
defineitem.h
spec_item.txt
mdldyna.inc
Propitem.txt.txt
defineitem.h
Code:
#define II_SYS_SYS_SCR_MAPOPENAREA 23268 #define II_SYS_SYS_SCR_MAPOPENDUNGEON 23269
spec_item.txt
Code:
//RHYDER TORCH 17 II_SYS_SYS_SCR_MAPOPENAREA IDS_PROPITEM_TXT_014200 1 99 IK1_EFFECT IK2_KEEP IK3_MAPOPEN_DUNGEON = 0 1 = 0 = = = = = = = 0 = = 1 = = 1 1 = = 1440 = _NONE 0 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = XI_SYS_RELEASE01 = = = = 86400000 = WUI_NOW = = = = = = = = = 0 0 0 0 0 1 = = = = = = = = = = = = 1 = = = """Itm_WorldTorchArea-32.dds""" 0 """""" IDS_PROPITEM_TXT_014201 1 300 0 0 1 0 0 0 0 0 2 = = = = = = = = = = 1 1 1 1 1 1 ITEM_GRADE_NORMAL 1 TYPE1_CONSUME TYPE2_CONSUME_SCROLL 1 0 0 0 17 II_SYS_SYS_SCR_MAPOPENDUNGEON IDS_PROPITEM_TXT_014202 1 99 IK1_EFFECT IK2_KEEP IK3_MAPOPEN_DUNGEON = 0 1 = 0 = = = = = = = 0 = = 1 = = 1 1 = = 10080 = _NONE 0 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = XI_SYS_RELEASE01 = = = = 604800000 = WUI_NOW = = = = = = = = = 0 0 0 0 0 1 = = = = = = = = = = = = 1 = = = """Itm_WorldTorchArea-32.dds""" 0 """""" IDS_PROPITEM_TXT_014203 1 300 0 0 1 0 0 0 0 0 2 = = = = = = = = = = 1 1 1 1 1 1 ITEM_GRADE_NORMAL 1 TYPE1_CONSUME TYPE2_CONSUME_SCROLL 1 0 0 0
mdldyna.inc
Code:
"SysSysScrBxCom" II_SYS_SYS_SCR_MAPOPENAREA MODELTYPE_MESH "" 0 MD_NEAR 0 1.0f 0 1 ATEX_NONE 1 "SysSysScrBxCom" II_SYS_SYS_SCR_MAPOPENDUNGEON MODELTYPE_MESH "" 0 MD_NEAR 0 1.0f 0 1 ATEX_NONE 1
Propitem.txt.txt
Code:
IDS_PROPITEM_TXT_014200 Torch of Raon IDS_PROPITEM_TXT_014201 When activated, allows you to view the map of all Premium EXP Areas and dungeons (Including instanced dungeons) for 1 day. IDS_PROPITEM_TXT_014202 Torch of Isilrute IDS_PROPITEM_TXT_014203 When activated, allows you to view the map of all Premium EXP Areas and dungeons (Including instanced dungeons) for 7 days.
Screens:
From:
when i use the scroll should be look like this:
when i use the scroll should be look like this:
Additional for Timer:
NOTE: USE THE Spec_Item.txt for us to get the right timer.Quote:
at WndManager.cpp
Below:
Add:Code:if( dwSkillTimeTmp == 0 || g_pPlayer->HasBuff( BUFF_ITEM2, II_SYS_SYS_SCR_PARTYSKILLUP01 ) || g_pPlayer->HasBuff( BUFF_ITEM2, II_SYS_SYS_SCR_PARTYSKILLUP02 ) || g_pPlayer->HasBuff( BUFF_ITEM2, II_SYS_SYS_SCR_PARTYSKILLUP01_01 )
=======================Code:/*************************TORCH RHYDER******************/ || g_pPlayer->HasBuff( BUFF_ITEM2, II_SYS_SYS_SCR_MAPOPENAREA ) || g_pPlayer->HasBuff( BUFF_ITEM2, II_SYS_SYS_SCR_MAPOPENDUNGEON )
Below:
Add:Code:if( dwSkillTimeTmp == 0 || g_pPlayer->m_SkillState.HasSkill( BUFF_ITEM2, II_SYS_SYS_SCR_PARTYSKILLUP01 ) || g_pPlayer->m_SkillState.HasSkill( BUFF_ITEM2, II_SYS_SYS_SCR_PARTYSKILLUP02 ) || g_pPlayer->m_SkillState.HasSkill( BUFF_ITEM2, II_SYS_SYS_SCR_PARTYSKILLUP01_01 )
at MoverSkill.cppCode:/***************************TORCH RHYDER****************/ || g_pPlayer->m_SkillState.HasSkill( BUFF_ITEM2, II_SYS_SYS_SCR_MAPOPENAREA ) || g_pPlayer->m_SkillState.HasSkill( BUFF_ITEM2, II_SYS_SYS_SCR_MAPOPENDUNGEON )
Below:
Add:Code:else if( pItemProp->dwID == II_SYS_SYS_SCR_PARTYSKILLUP01 || pItemProp->dwID == II_SYS_SYS_SCR_PARTYSKILLUP02 || pItemProp->dwID == II_SYS_SYS_SCR_PARTYSKILLUP01_01
Below:Code:/*************************TORCH RHYDER******************/ || pItemProp->dwID == II_SYS_SYS_SCR_MAPOPENAREA || pItemProp->dwID == II_SYS_SYS_SCR_MAPOPENDUNGEON /*************************TORCH RHYDER******************/
Add:Code:if( HasBuff( BUFF_ITEM2, II_SYS_SYS_SCR_PARTYSKILLUP01 ) || HasBuff( BUFF_ITEM2, II_SYS_SYS_SCR_PARTYSKILLUP02 ) || HasBuff( BUFF_ITEM2, II_SYS_SYS_SCR_PARTYSKILLUP01_01 )
at CmnHdr.h:Code:/*********************TORCH**********************/ || HasBuff( BUFF_ITEM2, II_SYS_SYS_SCR_MAPOPENAREA ) || HasBuff( BUFF_ITEM2, II_SYS_SYS_SCR_MAPOPENDUNGEON ) /*********************TORCH**********************/
Below:
Add:Code:SM_SHOUT001, SM_BANK001,
Below:Code:/**********TORCH*************/ SM_TORCH,
Add:Code:dwSMItemID[SM_ESCAPE] = II_CHR_SYS_SCR_ESCAPEBLINKWING;
Code:dwSMItemID [SM_TORCH] = II_SYS_SYS_SCR_MAPOPENAREA; dwSMItemID [SM_TORCH] = II_SYS_SYS_SCR_MAPOPENDUNGEON;
Quote:
at WndField.cpp
Replace:
to this:Code:m_wndPlace.EnableWindow( !pWorld->m_bIsIndoor );
for the navigator menu.Code:m_wndPlace.EnableWindow( pWorld->m_bIsIndoor );
Credits goes to:
Rhyder'






