Hi,
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:
[Only registered and activated users can see links. Click Here To Register...]
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:
Code:
for( i = 0; i < m_colorText.GetSize(); i++ )
{
tagColorText* lpText = m_colorText.GetAt(i);
if( lpText && lpText->lpszData )
free( lpText->lpszData );
}
Das hier:
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:
Code:
#ifdef __WORLDSERVER
#ifdef __COLOSSEUM
CColosseumMng::GetInstance()->LoadScript();
#endif // __COLOSSEUM
#endif
Das hier:
Code:
#ifdef __WORLDSERVER
#ifdef __ITEMALLOWINDATA
LoadItemAllow("ItemAllow.inc");
#endif //__ITEMALLOWINDATA
#endif //__WORLDSERVER
Über:
Code:
void CProject::InterpretRandomItem(LPRANDOM_ITEM pRandomItem,CScript& script)
{
script.GetToken(); // {
script.GetToken();
while(*script.token != '}')
{
if(script.Token == ";")
{
script.GetToken();
continue;
}
script.GetToken();
}
}
Das hier:
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:
Code:
CFixedArray< tagColorText > m_colorText;
Das hier:
Code:
#ifdef __WORLDSERVER
#ifdef __ITEMALLOWINDATA
CFixedArray< ItemAllow_v > m_ItemAllow_v;
#endif //__ITEMALLOWINDATA
#endif //__WORLDSERVER
Unter:
Code:
BOOL LoadPiercingAvail( LPCTSTR lpszFileName );
Das hier:
Code:
#ifdef __WORLDSERVER
#ifdef __ITEMALLOWINDATA
BOOL LoadItemAllow( LPCTSTR lpszFileName );
#endif // __ITEMALLOWINDATA
#endif //__WORLDSERVER
_Common\MoverSkill.cpp
Unter:
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;
}
}
Das hier:
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:
Code:
struct tagColorText
{
DWORD dwColor;
TCHAR * lpszData;
};
Das hier:
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