Mich hat jemand gefragt ob ich eine Änderung in der Source machen kann, damit man Items durch eine Datei auf bestimmte Maps verbieten kann.
Skill Version:
Ich finde es besser direkt in der Source zu verbieten, weil es Sourcen schonender ist aber wer es gerne so möchte bitte sehr:
_Common\Project.cpp
Unter:
Das hier:
Code:
for( i = 0; i < m_colorText.GetSize(); i++ ) { tagColorText* lpText = m_colorText.GetAt(i); if( lpText && lpText->lpszData ) free( lpText->lpszData ); }
Code:
#ifdef __WORLDSERVER #ifdef __ITEMALLOWINDATA for( i = 0; i < m_ItemAllow_v.GetSize(); i++ ) { ItemAllow_v* _ItemAllow_v = m_ItemAllow_v.GetAt(i); if( _ItemAllow_v ) SAFE_DELETE(_ItemAllow_v); } #endif //__ITEMALLOWINDATA #endif //__WORLDSERVER
Unter:
Das hier:
Code:
#ifdef __WORLDSERVER #ifdef __COLOSSEUM CColosseumMng::GetInstance()->LoadScript(); #endif // __COLOSSEUM #endif
Code:
#ifdef __WORLDSERVER #ifdef __ITEMALLOWINDATA LoadItemAllow("ItemAllow.inc"); #endif //__ITEMALLOWINDATA #endif //__WORLDSERVER
Über:
Das hier:
Code:
void CProject::InterpretRandomItem(LPRANDOM_ITEM pRandomItem,CScript& script) { script.GetToken(); // { script.GetToken(); while(*script.token != '}') { if(script.Token == ";") { script.GetToken(); continue; } script.GetToken(); } }
Code:
#ifdef __WORLDSERVER #ifdef __ITEMALLOWINDATA BOOL CProject::LoadItemAllow( LPCTSTR szFileName ) { CScript script; if(script.Load(szFileName)==FALSE) return FALSE; DWORD dwItemID = script.GetNumber(); while( script.tok != FINISHED) { if(script.GetNumber() == 1) { ItemAllow_v *_ItemAllow_v = new ItemAllow_v; _ItemAllow_v->dwItemID = dwItemID; script.GetToken(); // "{" script.GetToken(); while( script.Token != "}") { if(script.Token == "Maps") { script.GetToken(); //( DWORD dwWorldID = script.GetNumber(); while( *script.Token != ')') { _ItemAllow_v->vWorldID.push_back(dwWorldID); dwWorldID = script.GetNumber(); } }else if(script.Token == "Continent") { script.GetToken(); //( DWORD dwContinent = script.GetNumber(); while( *script.Token != ')') { _ItemAllow_v->vContinent.push_back(dwContinent); dwContinent = script.GetNumber(); } }else if(script.Token == "XYZ-Area") { script.GetToken(); //( script.GetToken(); while( script.Token != "coordinates") { script.GetToken(); //( ItemAllow_v_coordinates _ItemAllow_v_coordinates; _ItemAllow_v_coordinates.fLocationX1 = script.GetFloat(); script.GetToken(); //, _ItemAllow_v_coordinates.fLocationY1 = script.GetFloat(); script.GetToken(); //, _ItemAllow_v_coordinates.fLocationX2 = script.GetFloat(); script.GetToken(); //, _ItemAllow_v_coordinates.fLocationY2 = script.GetFloat(); script.GetToken(); //) _ItemAllow_v->vCoordinates.push_back(_ItemAllow_v_coordinates); script.GetToken(); } } script.GetToken(); } m_ItemAllow_v.Add(_ItemAllow_v); } dwItemID = script.GetNumber(); } m_ItemAllow_v.Optimize(); return TRUE; } #endif //__ITEMALLOWINDATA #endif //__WORLDSERVER
_Common\Project.h
Unter:
Das hier:
Code:
CFixedArray< tagColorText > m_colorText;
Code:
#ifdef __WORLDSERVER #ifdef __ITEMALLOWINDATA CFixedArray< ItemAllow_v > m_ItemAllow_v; #endif //__ITEMALLOWINDATA #endif //__WORLDSERVER
Unter:
Das hier:
Code:
BOOL LoadPiercingAvail( LPCTSTR lpszFileName );
Code:
#ifdef __WORLDSERVER #ifdef __ITEMALLOWINDATA BOOL LoadItemAllow( LPCTSTR lpszFileName ); #endif // __ITEMALLOWINDATA #endif //__WORLDSERVER
_Common\MoverSkill.cpp
Unter:
Das hier:
Code:
if( pWorld && pWorld->GetID() == WI_WORLD_GUILDWAR ) { if( m_nGuildCombatState == 0 ) { if( IsPlayer() ) ((CUser*) this)->AddText( prj.GetText( TID_GAME_GUILDCOMBAT_STANDS_NOTUSEITEM ) ); //"¼öÁ¤ÇؾßÇÔ : °üÁß¼®¿¡¼*´Â ¾ÆÀÌÅÛÀ» »ç¿ëÇÒ¼ö ¾ø½À´Ï´Ù" ); return FALSE; } }
Code:
#ifdef __ITEMALLOWINDATA for(int i = 0; i < prj.m_ItemAllow_v.GetSize(); i++) { if((CUser*)this && prj.m_ItemAllow_v.GetAt(i)->dwItemID == pItemProp->dwID) { for(int u = 0; u < prj.m_ItemAllow_v.GetAt(i)->vWorldID.size(); u++) { if(pWorld && pWorld->m_dwWorldID == prj.m_ItemAllow_v.GetAt(i)->vWorldID[u]){ ((CUser*)this)->AddText(prj.GetText( TID_ITEM_DISABLE )); return FALSE; } } for(int u = 0; u < prj.m_ItemAllow_v.GetAt(i)->vContinent.size(); u++) { if(CContinent::GetInstance()->GetContinent( (CUser*)this ) == prj.m_ItemAllow_v.GetAt(i)->vContinent[u]){ ((CUser*)this)->AddText(prj.GetText( TID_ITEM_DISABLE )); return FALSE; } } float coordinatesX = ((CUser*)this)->GetPos().x; float coordinatesY = ((CUser*)this)->GetPos().y; for(int u = 0; u < prj.m_ItemAllow_v.GetAt(i)->vCoordinates.size(); u++) { if(prj.m_ItemAllow_v.GetAt(i)->vCoordinates[u].fLocationX1 >= coordinatesX <= prj.m_ItemAllow_v.GetAt(i)->vCoordinates[u].fLocationX2 || prj.m_ItemAllow_v.GetAt(i)->vCoordinates[u].fLocationY1 >= coordinatesY <= prj.m_ItemAllow_v.GetAt(i)->vCoordinates[u].fLocationY2){ ((CUser*)this)->AddText(prj.GetText( TID_ITEM_DISABLE )); return FALSE; } } } } #endif // __ITEMALLOWINDATA
_Common\MoverSkill.ProjectCmn.h
Unter:
Das hier:
Code:
struct tagColorText { DWORD dwColor; TCHAR * lpszData; };
Code:
#ifdef __WORLDSERVER #ifdef __ITEMALLOWINDATA struct ItemAllow_v_coordinates { float fLocationX1; float fLocationY1; float fLocationX2; float fLocationY2; }; struct ItemAllow_v { DWORD dwItemID; vector< DWORD > vWorldID; vector< DWORD > vContinent; vector< ItemAllow_v_coordinates > vCoordinates; }; #endif // __ITEMALLOWINDATA #endif // __WORLDSERVER
WorldServer/VersionCommon.h
Code:
#define __ITEMALLOWINDATA
defineText.h
Code:
#define TID_ITEM_DISABLE 4702
textClient.inc
Code:
TID_ITEM_DISABLE 0xffffffff { IDS_TEXTCLIENT_INC_003350 // Zahl Anpassen }
textClient.txt.txt
Code:
IDS_TEXTCLIENT_INC_003350 Item wurde für diese Map bzw. für diese Kordinaten gesperrt
ItemAllow.inc //Selber erstellen im Resourcen Ordner
II_GEN_FOO_INS_LOLLIPOP 1
{
Maps
(
WI_WORLD_ARENA
WI_DUNGEON_VOLCANE
WI_WORLD_MADRIGAL
)
Continent
(
242
241
)
XYZ-Area(
coordinates( 1 , 1 , 1 , 1)
coordinates( 2 , 2 , 2 , 2)
coordinates( 4 , 5 , 4 , 5)
)
}
Dieser Aufbau kann so oft wiederholt werden wie ihr wollt. So gesehen könnt ihr es für jedes Item machen.
Wichtig: Je mehr Items ihr macht, desto mehr Ressourcen(RAM) wird gebraucht.
Legende:
Item
Aktiv: 1=Aktiv, 0=Deaktiviert
X1
Y1
X2
Y2
Ich habe es bereits für Skill gemacht. Es werde es später Releasen.
mfg. Vincitore