Hi,
hier ist die Anleitung um Skills durch eine Datei zu verbieten.
Item:
_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 __SKILLALLOWINDATA
for( i = 0; i < m_SkillAllow_v.GetSize(); i++ )
{
SkillAllow_v* _SkillAllow_v = m_SkillAllow_v.GetAt(i);
if( _SkillAllow_v )
SAFE_DELETE(_SkillAllow_v);
}
#endif //__SKILLALLOWINDATA
#endif //__WORLDSERVER
Unter:
Code:
#ifdef __WORLDSERVER
#ifdef __COLOSSEUM
CColosseumMng::GetInstance()->LoadScript();
#endif // __COLOSSEUM
#endif
Das hier:
Code:
#ifdef __WORLDSERVER
#ifdef __SKILLALLOWINDATA
LoadSkillAllow("SkillAllow.inc");
#endif // __SKILLALLOWINDATA
#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 __SKILLALLOWINDATA
BOOL CProject::LoadSkillAllow( LPCTSTR szFileName )
{
CScript script;
if(script.Load(szFileName)==FALSE)
return FALSE;
DWORD dwSkillID = script.GetNumber();
while( script.tok != FINISHED)
{
if(script.GetNumber() == 1) {
SkillAllow_v *_SkillAllow_v = new SkillAllow_v;
_SkillAllow_v->dwSkillID = dwSkillID;
script.GetToken(); // "{"
script.GetToken();
while( script.Token != "}") {
if(script.Token == "Maps") {
script.GetToken(); //(
DWORD dwWorldID = script.GetNumber();
while( *script.Token != ')') {
_SkillAllow_v->vWorldID.push_back(dwWorldID);
dwWorldID = script.GetNumber();
}
}else if(script.Token == "Continent") {
script.GetToken(); //(
DWORD dwContinent = script.GetNumber();
while( *script.Token != ')') {
_SkillAllow_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(); //)
_SkillAllow_v->vCoordinates.push_back(_ItemAllow_v_coordinates);
script.GetToken();
}
}
script.GetToken();
}
m_SkillAllow_v.Add(_SkillAllow_v);
}
dwSkillID = script.GetNumber();
}
m_SkillAllow_v.Optimize();
return TRUE;
}
#endif //__SKILLALLOWINDATA
#endif //__WORLDSERVER
_Common\Project.h
Unter:
Code:
CFixedArray< tagColorText > m_colorText;
Das hier:
Code:
#ifdef __WORLDSERVER
#ifdef __SKILLALLOWINDATA
CFixedArray< SkillAllow_v > m_SkillAllow_v;
#endif //__SKILLALLOWINDATA
#endif //__WORLDSERVER
Unter:
Code:
BOOL LoadPiercingAvail( LPCTSTR lpszFileName );
Das hier:
Code:
#ifdef __WORLDSERVER
#ifdef __ITEMALLOWINDATA
BOOL LoadSkillAllow( 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_NOTUSESKILL ) ); //"¼öÁ¤ÇؾßÇÔ : °üÁß¼®¿¡¼*´Â ½ºÅ³À» »ç¿ëÇÒ¼ö ¾ø½À´Ï´Ù" );
return FALSE;
}
}
Das hier:
Code:
#ifdef __SKILLALLOWINDATA
for(int i = 0; i < prj.m_SkillAllow_v.GetSize(); i++) {
if((CUser*)this && prj.m_SkillAllow_v.GetAt(i)->dwSkillID == dwSkill) {
for(int u = 0; u < prj.m_SkillAllow_v.GetAt(i)->vWorldID.size(); u++) {
if(pWorld && pWorld->m_dwWorldID == prj.m_SkillAllow_v.GetAt(i)->vWorldID[u]){
((CUser*)this)->AddText(prj.GetText( TID_SKILL_DISABLE ));
return FALSE;
}
}
for(int u = 0; u < prj.m_SkillAllow_v.GetAt(i)->vContinent.size(); u++) {
if(CContinent::GetInstance()->GetContinent( (CUser*)this ) == prj.m_SkillAllow_v.GetAt(i)->vContinent[u]){
((CUser*)this)->AddText(prj.GetText( TID_SKILL_DISABLE ));
return FALSE;
}
}
float coordinatesX = ((CUser*)this)->GetPos().x;
float coordinatesY = ((CUser*)this)->GetPos().y;
for(int u = 0; u < prj.m_SkillAllow_v.GetAt(i)->vCoordinates.size(); u++) {
if(prj.m_SkillAllow_v.GetAt(i)->vCoordinates[u].fLocationX1 >= coordinatesX <= prj.m_SkillAllow_v.GetAt(i)->vCoordinates[u].fLocationX2 ||
prj.m_SkillAllow_v.GetAt(i)->vCoordinates[u].fLocationY1 >= coordinatesY <= prj.m_SkillAllow_v.GetAt(i)->vCoordinates[u].fLocationY2){
((CUser*)this)->AddText(prj.GetText( TID_SKILL_DISABLE ));
return FALSE;
}
}
}
}
#endif // __SKILLALLOWINDATA
_Common\MoverSkill.ProjectCmn.h
Unter:
Code:
struct tagColorText
{
DWORD dwColor;
TCHAR * lpszData;
};
Das hier:
Code:
#ifdef __WORLDSERVER
#ifdef __ITEMALLOWINDATA
struct SkillAllow_v_coordinates
{
float fLocationX1;
float fLocationY1;
float fLocationX2;
float fLocationY2;
};
struct SkillAllow_v
{
DWORD dwSkillID;
vector< DWORD > vWorldID;
vector< DWORD > vContinent;
vector< ItemAllow_v_coordinates > vCoordinates;
};
#endif // __ITEMALLOWINDATA
#endif // __WORLDSERVER
WorldServer/VersionCommon.h
Code:
#define __SKILLALLOWINDATA
defineText.h
Code:
#define TID_SKILL_DISABLE 4703
textClient.inc
Code:
TID_SKILL_DISABLE 0xffffffff
{
IDS_TEXTCLIENT_INC_003351 // Zahl Anpassen
}
textClient.txt.txt
Code:
IDS_TEXTCLIENT_INC_003351 Skill wurde für diese Map bzw. für diese Kordinaten gesperrt
SkillAllow.inc //Selber erstellen im Resourcen Ordner
SI_ASS_HEAL_HEALING 1
{
Maps
(
WI_WORLD_ARENA
WI_DUNGEON_VOLCANE
WI_WORLD_MADRIGAL
)
Continent
(
242
)
XYZ-Area(
coordinates( 1 , 1 , 1 , 1)
)
}
Dieser Aufbau kann so oft wiederholt werden wie ihr wollt. So gesehen könnt ihr es für jedes Skill machen.
Wichtig: Je mehr Skills ihr macht, desto mehr Ressourcen(RAM) wird gebraucht.
Legende:
Skill
Aktiv: 1=Aktiv, 0=Deaktiviert
X1
Y1
X2
Y2
mfg. Vincitore