SLZ leírása fixek. [Forrás módosítások]

Indította Samurai, 2016-09-12, 09:17:53

2016-09-12, 09:17:53 Utolsó szerkesztés: 2018-05-20, 21:07:07 Szerző: [MOD]Ken
Üdv mindenkinek!

Forrás fordításról írtam egy pöpet (how tú):

Mainline-al dolgozok (Kliensoldal Novaline), de a többi branchon is működnie kell ezeknek a dolgoknak.

1. 6-7 opt engedélyezés: (Europe, Singapore, Vietnam)
char_item.cpp:

keress erre:
if (LC_IsEurope() || LC_IsSingapore() || LC_IsVietnam())
    return false;

(2x van benne)
Töröld vagy kommentezd ki.

2. Kövek berakásának sikerességi esélye átírása:
char_item.cpp

Keress erre:
if (number(1, 100) <= 30)

És írd át a 30-at
Példa:

if (number(1, 100) <= 65)// 65% sikerességi esély

3. 3% adó eltávolítása:
Keresd a shop.cpp és shop_manager.cpp-ben

iVal = 3;
írd át a 3-at 0-ra:
iVal = 0;

4. 0 yangos itemek boltban megvásárlása:
shop.cpp
if (r_item.price <= 0)

módosítsd
if (r_item.price < 0)

5. Névváltás azaz pc_change_name (Europe) engedélyezése :
Keresd a questlua_pc.cpp-ben:

if ( LC_IsEurope() )
{
    lua_pushnumber(L, 5);
    return 1;
}

kommentezd ki vagy töröld.

6. 70024 (megáldó márvány) és 70035 engedélyezése boltban: (hivalue_item_sell check eltávolítása)
Keresd shop.cpp-ben:

    if (quest::CQuestManager::instance().GetEventFlag("hivalue_item_sell") == 0)
    {
        //ĂŕşąŔÇ ±¸˝˝ && ¸¸łâÇŃö ŔĚşĄĆ®
        if (item->GetVnum() == 70024 || item->GetVnum() == 70035)
        {
            return SHOP_SUBHEADER_GC_END;
        }
    }

Töröld/kommenteld.
Keresd ugyanabban:

//HIVALUE_ITEM_EVENT
if (quest::CQuestManager::instance().GetEventFlag("hivalue_item_sell") == 0)
{
    //ĂŕşąŔÇ ±¸˝˝ && ¸¸łâÇŃö ŔĚşĄĆ®
    if (item.vnum == 70024 || item.vnum == 70035)
    {               
        continue;
    }
}
//END_HIVALUE_ITEM_EVENT

törölöd/kommenteld.

7. 6-7 opt tiltás kosztümön:
Keresd a char_item.cpp-ben:

case 71051 :
És add ez fölé:

if (item2->GetAttributeSetIndex() == -1)
ezt:

if (item2->GetType() == ITEM_COSTUME) //6-7 javítás kosztümön
    {
        return false;
    }

Megtudod csinálni a 71052-nél is de ha nem tudnak 6-7et beletenni, akkor nyílván cserélni se :D

8. Shutdown idő átírása
cmd_general.cpp

Shutdown(10);
Írd át a 10-et (10=10mp 30=30mp stb)

9. Max szint átírása:
/usr/src/mainline/Srcs/Server/common/length.h

PLAYER_EXP_TABLE_MAX = 120,
PLAYER_MAX_LEVEL_CONST = 120,

Módosítsd a 120-at.
Következhet az exp tábla.
constant.cpp (game/src mappa)
Ez alatt:
const DWORD exp_table_common[PLAYER_EXP_TABLE_MAX + 1] =
És ez alatt:
const DWORD exp_table_euckr[PLAYER_EXP_TABLE_MAX + 1] =
És ez alatt:
const DWORD exp_table_newcibn[PLAYER_EXP_TABLE_MAX + 1 ] =
Add hozzá a szintekhez kellő expet.
Elég a common-nál mert azt veszi figyelembe, de inkább mind3-nál csináld meg.

10. Betekintés üveg kérés törlése:
input_main.cpp:

int ProcessTextTag(LPCHARACTER ch, const char * c_pszText, size_t len)
{
    //2012.05.17 ±čżëżí
    //0 : Á¤»óŔűŔ¸·Î »çżë
    //1 : ±Ý°­°ć şÎÁ·
    //2 : ±Ý°­°ćŔĚ ŔÖŔ¸łŞ, °łŔλóÁˇżˇĽ­ »çżëÁß
    //3 : ±łČŻÁß
    //4 : żˇ·Ż
    int hyperlinks;
    bool colored;

módosítsd:

int ProcessTextTag(LPCHARACTER ch, const char * c_pszText, size_t len)
{
    return 0;//BETEKINTÉS ÜVEG NE KELLJEN SOHA
    //2012.05.17 ±čżëżí
    //0 : Á¤»óŔűŔ¸·Î »çżë
    //1 : ±Ý°­°ć şÎÁ·
    //2 : ±Ý°­°ćŔĚ ŔÖŔ¸łŞ, °łŔλóÁˇżˇĽ­ »çżëÁß
    //3 : ±łČŻÁß
    //4 : żˇ·Ż
    int hyperlinks;
    bool colored;

(Az egész funkciót felülírhatod return 0;-val ha akarod )

11. Dice és ÁÖ»çŔ§ fix:
(Ymir már megcsinálta, de mégis mókásabb ha egy üzenetet kapnak vissza)

cmd_general.cpp-ben
ACMD(do_dice) funkciónál írd felül az egészet így:

ACMD(do_dice)
{
    ch->ChatPacket(CHAT_TYPE_INFO, "Nem tudod leállítani.. Nokedli.. ");
}

(ÁÖ»çŔ§ kód a dice funkciót hívja le)

12. Yang kidobás tiltása: (Feco érdeme)
char_item.cpp:

Keresd ezt:
bool CHARACTER::DropGold(int gold)
Írd felül az egész funkciót így:

bool CHARACTER::DropGold(int gold)
{
return false;
}


13. Playereknek bónuszolási idő eltávolítása
char_item.cpp

if (pPC)
{
    DWORD dwNowMin = get_global_time() / 60;

    DWORD dwLastChangeItemAttrMin = pPC->GetFlag(msc_szLastChangeItemAttrFlag);

    if (dwLastChangeItemAttrMin + dwChangeItemAttrCycle > dwNowMin)
    {
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ĽÓĽşŔ» ąŮ˛ŰÁö %dşĐ ŔĚł»żˇ´Â ´Ů˝Ă şŻ°ćÇŇ Ľö ľř˝Ŕ´Ď´Ů.(%d şĐ ł˛Ŕ˝)"),
                dwChangeItemAttrCycle, dwChangeItemAttrCycle - (dwNowMin - dwLastChangeItemAttrMin));
    return false;
    }

    pPC->SetFlag(msc_szLastChangeItemAttrFlag, dwNowMin);
}

módosítsd:

if (pPC)

{
    DWORD dwNowMin = get_global_time() / 60;

    //Comment for 0 switch players start
    //DWORD dwLastChangeItemAttrMin = pPC->GetFlag(msc_szLastChangeItemAttrFlag);

    //if (dwLastChangeItemAttrMin + dwChangeItemAttrCycle > dwNowMin)
    //{
        //ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ĽÓĽşŔ» ąŮ˛ŰÁö %dşĐ ŔĚł»żˇ´Â ´Ů˝Ă şŻ°ćÇŇ Ľö ľř˝Ŕ´Ď´Ů.(%d şĐ ł˛Ŕ˝)"),
            //dwChangeItemAttrCycle, dwChangeItemAttrCycle - (dwNowMin - dwLastChangeItemAttrMin));
        //return false;
        //}
    //Comment for 0 switch players end

    pPC->SetFlag(msc_szLastChangeItemAttrFlag, dwNowMin);
    }
}

(Kommentelt sorokat törölheted ha akarod)


14. Eldobott cuccok eltünési ideje:
Közös:
item.h:

StartDestroyEvent(int iSec=300);
Módosítsd a 300-at. 300=300mp, 100=100mp stb..

Ha a játékosok általit külön akarod szabályzni akkor char_item.cpp

ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¶łľîÁř ľĆŔĚĹŰŔş 3şĐ ČÄ »ç¶óÁý´Ď´Ů."));
pkItemToDrop->StartDestroyEvent();


Módosítsd így pl: (30mp)
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¶łľîÁř ľĆŔĚĹŰŔş 3şĐ ČÄ »ç¶óÁý´Ď´Ů."));
pkItemToDrop->StartDestroyEvent(30);



15. Új mount sebzése
pvp.cpp

Keress erre:
case 20118:
Csak add hozzá az új ID-ket, pl 20135 akkor case 20135: stb.

Kliens binben is hozzá kell adni, InstanceBase.cpp ugyanígy kell.
(Kliens=maga az ütés szerver=sebzés)

16. Max státusz pont átírása:
cmd_general.cpp

#define MAX_STAT 90
Itt át tudod írni a 90-et neked tetszőre.


17. Lejárat eltávolítása/szerkesztése (alias TimeBomb)
limit_time.h
#define ENABLE_LIMIT_TIME
Ezt a sort kommentezd ki:
//#define ENABLE_LIMIT_TIME

Ha nem akarod eltávolítani a lejáratot, hanem szerkeszteni akarod a dátumot akkor update_limit_time.py:

limitTime = time.mktime(time.localtime()) + 3600 * 24 * 180 * 2
Csak módosítsd a 3600 * 24 * 180 * 2
Pl 3600 * 24 * 180 * 20
Ezután bsd-n írd be ezt: gmake limit_time  Ez hozzáadja az új dátumot a limit_time.h-ba.
Utána fordítsd és az új lejárati dátuma lesz a game fájlnak.


18. Érzelmek maszk nélkül:
cmd_emoticon.cpp

bool CHARACTER_CanEmotion(CHARACTER& rch)
{
    // °áČĄ˝Ä ¸ĘżˇĽ­´Â »çżëÇŇ Ľö ŔÖ´Ů.
    if (marriage::WeddingManager::instance().IsWeddingMap(rch.GetMapIndex()))
        return true;

    // ż­Á¤ŔÇ °ˇ¸é Âřżë˝Ă »çżëÇŇ Ľö ŔÖ´Ů.
    if (rch.IsEquipUniqueItem(UNIQUE_ITEM_EMOTION_MASK))
        return true;

    if (rch.IsEquipUniqueItem(UNIQUE_ITEM_EMOTION_MASK2))
        return true;

    return false;
}


módosítsd így:

bool CHARACTER_CanEmotion(CHARACTER& rch)
{
    return true;//Ne kérjen maszkot soha
}



19. War crash bug javítása
cmd_general.cpp

if (*arg2)
{
    str_to_number(type, arg2);

    if (type >= GUILD_WAR_TYPE_MAX_NUM)
        type = GUILD_WAR_TYPE_FIELD;
}

Módosítsd így:
if (*arg2)
{
    str_to_number(type, arg2);

    if (type >= GUILD_WAR_TYPE_MAX_NUM)
        type = GUILD_WAR_TYPE_FIELD;
         
    if(type < 0) //war crash fix
        return;
}



20. parancsok átírása:
cmd.cpp
Vegyük pl a shutdownt.
{ "shutdown", do_shutdown, 0, POS_DEAD, GM_IMPLEMENTOR },
Itt módosítsd a "shutdown"-t, de idézőjelek maradjanak.


21. 91 után is kapjanak stat pontokat:

Nos alapon úgy van hogy 91-en már nem, 90-en még igen, kapnak.

char.cpp
if (GetLevel() < 91) PointChange(POINT_STAT, 1);
Itt írd át a 91-et pl 120-ra.
if(iLv <= 90)
PointChange(POINT_STAT, ((MINMAX(1, iLv, 90) - 1) * 3) + GetPoint(POINT_LEVEL_STEP) - GetPoint(POINT_STAT));
else
PointChange(POINT_STAT, 270 - GetPoint(POINT_STAT));

ComputePoints();

Itt pedig a 2db 90-est arra amire előbb írtad minusz 1. Szóval 120 esetében 119.

Szerk: a 270-et írd át a max pontodra, ha alulra a 90-es helyett 119-et írtál, akkor 3×119=357.

Így 119-en még igen, 120-on már nem kapnak stat pontokat.


22. Szintenkénti poti eltávolítása
char.cpp
if (GetLevel() <= 10)
AutoGiveItem(27001, 2);
else if (GetLevel() <= 30)
AutoGiveItem(27002, 2);
else
{
AutoGiveItem(27002, 2);
// AutoGiveItem(27003, 2);
}

           
Töröld vagy kommentezd.

23. 1000 szorzó
priv_manager.cpp-ben ezeket a sorokat:
value = MINMAX(0, value, 50);
value = MINMAX(0, value, 50);
value = MINMAX(0, value, 100);
value = MINMAX(0, value, 100);
value = MINMAX(0, value, 200);
value = MINMAX(0, value, 200);

Mindnél a számot írd át 1000-re.
Szóval mind így nézzen ki:
value = MINMAX(0, value, 1000);


24. "Ujjlenyomat" ellenőrzés javítása (Client version check) - Szerkesztve!
config.cpp, input_login.cpp, input_main.cpp

if (version > date)
módosítsd:
if (version != date)


25. Kliens indító kiterjesztés átírás
eterpack/eterpack.cpp
strncpy(m_indexFileName, dbname, MAX_PATH);
strcat(m_indexFileName, ".eix");

m_stDataFileName = dbname;
m_stDataFileName += ".epk";

Értelemszerűen a .eix-et, .epk-t átírod.


26. Kliens indító lzo átírás
Szintén eterpack/eterpack.cpp
static DWORD s_adwEterPackKey[] =
{
    45129401,
    92367215,
    681285731,
    1710201,
};

static DWORD s_adwEterPackSecurityKey[] =
{
    78952482,
    527348324,
    1632942,
    486274726,
};
Itt írd át a számokat.

Fordítás előtt megnézed az offseteket hogy hol van a jelenlegi lzo hexben, átírod itt a számokat majd fordítás után megnézed az új lzo-t a megjegyzett offseteken.
pack mappát ne felejtsd majd el átcsomagolni az új lzo-val!


27. Pack mappa és Index fájl átnevezése
Az userinterface mappában dolgozunk.

userinterface.cpp
if (!PackInitialize("pack"))
{
LogBox("Pack Initialization failed. Check log.txt file..");
return false;
}


Itt írd át a pack kifejezést, illetve a logboxosnál is átírhatod. Én files-ra írtam:
if (!PackInitialize("files"))
{
LogBox("Files Initialization failed. Check log.txt file..");
return false;
}


pythonbackgorund.cpp
m_PropertyManager.Initialize("pack/property");

itt a pack-ot írd át, én esetemben ugye files
m_PropertyManager.Initialize("files/property");

Aztán van egy ilyen az userinterface.cpp-ben
TraceError("Pack/Index has invalid syntax. First line must be 'PACK' or 'FILE'");
Itt is átírhatod a Pack kifejezést, bár ezt nem muszáj.

Az Index fájlt pedig userinterface.cpp-ben kell

stFileName += "Index";
Értelemszerűen írd át :)


28. Internal ip fix <-- Fontos
Ez azért kell hogy root szerverként is tudjon futni a gamefájl.
config.cpp
rákeresel erre:
if (!strncmp(netip, "192.168", 7))
és átírod mondjuk
if (!strncmp(netip, "000.000", 7))


29. Végtelen bátorság köpeny.
char_item.cpp

case UNIQUE_ITEM_CAPE_OF_COURAGE:
//¶ó¸¶´Ü ş¸»óżë żë±âŔÇ ¸ÁĹä
case 70057:
case REWARD_BOX_UNIQUE_ITEM_CAPE_OF_COURAGE:
AggregateMonster();
item->SetCount(item->GetCount()-1);
break;


de lehet úgy is hogy csak az egyik legyen végtelen:

case UNIQUE_ITEM_CAPE_OF_COURAGE:
AggregateMonster();
break;
//¶ó¸¶´Ü ş¸»óżë żë±âŔÇ ¸ÁĹä
case 70057:
AggregateMonster();
item->SetCount(item->GetCount()-1);
break;
case REWARD_BOX_UNIQUE_ITEM_CAPE_OF_COURAGE:
AggregateMonster();
item->SetCount(item->GetCount()-1);
break;

Így a UNIQUE_ITEM_CAPE_OF_COURAGE-esnél nem veszi el. (70038)


30. Újraéledési idő törlése.

cmd_general.cpp
itt: (újraindítás helyben)

if (iTimeToDead > 170)
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ľĆÁ÷ Ŕç˝ĂŔŰ ÇŇ Ľö ľř˝Ŕ´Ď´Ů. (%dĂĘ ł˛Ŕ˝)"), iTimeToDead - 170);
return;
}


és itt: (városbeli)

if (iTimeToDead > 173)
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ľĆÁ÷ ¸¶Ŕ»żˇĽ­ Ŕç˝ĂŔŰ ÇŇ Ľö ľř˝Ŕ´Ď´Ů. (%d ĂĘ ł˛Ŕ˝)"), iTimeToDead - 173);
return;
}


Csak simán kommentezd ki vagy töröld ezeket.


31. Ló skillek sebzésének engedélyezése

char_skill.cpp
Keress erre:

//¸¶żîĆ® Ĺ»°ÍÁß °í±Ţ¸»¸¸ ˝şĹł »çżë°ˇ´É
if(GetMountVnum())
{
if( !((GetMountVnum() >= 20209 && GetMountVnum() <= 20212) ||
GetMountVnum() == 20215 || GetMountVnum() == 20218 || GetMountVnum() == 20225 ) )
return false;
}


Add fölé ezt:

if(GetMountVnum())
{
if( !((GetMountVnum() >= 20101 && GetMountVnum() <= 20205)))
return true;
}


Amennyiben azokat a mount id-ken is akarod hogy használhassanak ló-skillt amit tilt, akkor amire rákerestél azt töröld, és amit hozzáadtunk ott a 20205-öt írd át pl 20250-re.


32. Bolt nyitásához ne kelljen levenni a vértet
char.cpp
Keress rá erre a funkcióra:
void CHARACTER::OpenMyShop(const char * c_pszSign, TShopItemTable * pTable, BYTE bItemCount
alatta van ilyen:

if (GetPart(PART_MAIN) > 2)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("°©żĘŔ» ąţľîľß °łŔÎ »óÁˇŔ» ż­ Ľö ŔÖ˝Ŕ´Ď´Ů."));
return;
}

Ezt töröld, vagy kommentezd ki.

Aztán mivel a csomót nem engedi alapból úgy megnyitni ha vértbe vagy, nyisd meg a char_item.cpp-t,
keress erre:

void CHARACTER::__OpenPrivateShop()
{
unsigned bodyPart = GetPart(PART_MAIN);
switch (bodyPart)
{
case 0:
case 1:
case 2:
ChatPacket(CHAT_TYPE_COMMAND, "OpenPrivateShop");
break;
default:
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("°©żĘŔ» ąţľîľß °łŔÎ »óÁˇŔ» ż­ Ľö ŔÖ˝Ŕ´Ď´Ů."));
break;
}
}

Írd át így:

void CHARACTER::__OpenPrivateShop()
{
unsigned bodyPart = GetPart(PART_MAIN);
switch (bodyPart)
{
default:
ChatPacket(CHAT_TYPE_COMMAND, "OpenPrivateShop");
break;
}
}

(Mondjuk szerintem úgy is jó ha a default: alatti egy sor csak a funkció tartalma, de így is jó ahogy írtam)


33. Gyémánt 100% eséllyel adja hozzá a foglalatot
char_item.cpp
keress erre: case USE_ADD_ACCESSORY_SOCKET:
írd át így ezt a részt:
case USE_ADD_ACCESSORY_SOCKET:
{
char buf[21];
snprintf(buf, sizeof(buf), "%u", item2->GetID());

if (item2->IsAccessoryForSocket())
{
if (item2->GetAccessorySocketMaxGrade() < ITEM_ACCESSORY_SOCKET_MAX_NUM)
{
item2->SetAccessorySocketMaxGrade(item2->GetAccessorySocketMaxGrade() + 1);
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ĽŇÄĎŔĚ Ľş°řŔűŔ¸·Î Ăß°ˇµÇľú˝Ŕ´Ď´Ů."));
LogManager::instance().ItemLog(this, item, "ADD_SOCKET_SUCCESS", buf);

item->SetCount(item->GetCount() - 1);
}
else
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ŔĚ ľ×ĽĽĽ­¸®żˇ´Â ´őŔĚ»ó ĽŇÄĎŔ» Ăß°ˇÇŇ °ř°ŁŔĚ ľř˝Ŕ´Ď´Ů."));
}
}
else
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ŔĚ ľĆŔĚĹŰŔ¸·Î ĽŇÄĎŔ» Ăß°ˇÇŇ Ľö ľř´Â ľĆŔĚĹŰŔÔ´Ď´Ů."));
}
}
break;


-----------------------------------------------------------

Úgy kell kikommentezni valamit hogy a sor elejére írsz 2db per jelet, azaz //
A kikommentezett sorokat fordításnál figyelmen kívül hagyja, olyan mintha ott se lennének.
Ez azért jobb megoldás a törlésnél, mert ha úgy alakul akkor könnyen vissza tudod tenni azt a sort.


A következőkben pedig összeszedek pár hasznos módosítást amit mások készítettek:
(Ezeket mind teszteltem)

DB start fix - Faby <-- FONTOS
Bonus changer bug javítása - cBaraN
Ymir licensz eltávolítása - CiocoBoco
Láthatatlanság fix - Eredetileg BlackYuko
Hp-Mp bug javítása - TÜRK
Birodalmi chat - Denis
Ájulás bug javítása - Lazy
Sura skill bug javítása - The Naid
PM kickhack kivédése - Sanchez
Drop hack kivédése - Sanchez
4 leltár - Aveline™
Kétszeres kill számolás javítása - Jancsi7
Több kk esetén csak 1-et vegyen el - Avenue™
Öv rendszer bug fix - Denis
Dungeon party fix - masodikbela
Cube crash fix - MartPwnS

- Hamarosan elérhető videó formájában is -
ElsÅ' az elsÅ'k között, Az emberek istent játszanak engedély nélkül.