Üdv mindenkinek!
Forrás fordításról írtam egy pöpet (how tú): (http://metin2hungary.net/index.php?topic=59373.msg1051637#msg1051637)
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 (http://metin2hungary.net/index.php/topic,184420.msg975869.html#msg975869)
Bonus changer bug javítása - cBaraN (http://metin2dev.org/board/index.php?/topic/2081-bug-revision-40k-bonus-channger-bug-fix-cbaran/)
Ymir licensz eltávolítása - CiocoBoco (http://metin2dev.org/board/index.php?/topic/2826-cremove-ymir-license/)
Láthatatlanság fix - Eredetileg BlackYuko (http://www.turkmmo.com/c-c-python/3184661-c-gorunmezlik-sorunu-hata-cozumu.html)
Hp-Mp bug javítása - TÜRK (https://metin2dev.org/board/index.php?/topic/216-c-fix-32k-hp-after-warp/)
Birodalmi chat - Denis (http://metin2dev.org/board/index.php?/topic/884-cglobal-chat/)
Ájulás bug javítása - Lazy (http://metin2dev.org/board/index.php?/topic/780-c-fix-stunbug/)
Sura skill bug javítása - The Naid (http://metin2dev.org/board/index.php?/topic/440-source-sura-magic-sword-skill-fix/)
PM kickhack kivédése - Sanchez (http://metin2hungary.net/index.php/topic,194688.msg1026695.html#msg1026695)
Drop hack kivédése - Sanchez (http://metin2dev.org/board/index.php?/topic/272-collection-short-guides-and-tips/)
4 leltár - Aveline™ (http://metin2dev.org/board/index.php?/topic/791-metin2-4-inventory-page/)
Kétszeres kill számolás javítása - Jancsi7 (https://metin2dev.org/board/index.php?/topic/344-kills-are-counted-twice/&do=findComment&comment=2665)
Több kk esetén csak 1-et vegyen el - Avenue™ (http://metin2dev.org/board/index.php?/topic/636-how-to-remove-just-one-skillbook-source-40k-c/)
Öv rendszer bug fix - Denis (http://metin2dev.org/board/index.php?/topic/2785-belt-inventory-fix/)
Dungeon party fix - masodikbela (http://metin2hungary.net/index.php/topic,59373.msg1002457.html#msg1002457)
Cube crash fix - MartPwnS (http://www.elitepvpers.com/forum/metin2-pserver-guides-strategies/3662827-cpp-crashfix-release-cube-r_info-source.html)
- Hamarosan elérhető videó formájában is -