[Forrás] Alapvető hibák javítása

Indította [VIP]Rin the Exorcist, 2016-09-30, 19:09:10

2016-09-30, 19:09:10 Utolsó szerkesztés: 2016-10-01, 00:17:07 Szerző: Rin the Exorcist
Sziasztok!
Úgy gondolom, hogy lenne egy fontos közös célja minden fejlesztőnek, ez pedig nem lenne más, mint egy hibátlan alap forrás, de nem akárhogy, hanem leírás formájában, amit bárki hasznosíthat a saját forrásában. Hisz mint tudjátok, mind game/db/binary oldalon rengeteg a warning, ami ugyan nem sok vizet zavar, de szerintem sokkal elegánsabb és átláthatóbb lenne, ha egyet sem írna. Tehát ebben a témában vesézhetnénk ki, hogy melyik alap hibának mi a megoldása, és ha sikerült dűlőre jutnunk, akkor, hogy könnyen meglehessen találni, beleírom majd ebbe az üzenetbe.

Az egyszerűség kedvéért az alap hibákat tartalmazó build logot megtaláljátok az alábbi linkeken, és amit sikerült valamit kijavítanunk, kiemelem az érintett sorokat, hogy jól látható legyen.
Game
DB
Binary

A javítások sorát kezdem én, de mindenek előtt, aki eddig még nem tette meg, az törölje az ld.core fájlt a game mappájából, ha csak nem érzi szükségesnek egy felesleges 200 megás fájl őrizgetését.


I. Általános hibák
Nos, akkor kezdjük is a legalapvetőbb hibával, ez pedig nem más, mint a:
warning: no newline at end of file

A javítása pedig annyiból áll, hogy az alábbi fájlok végén hagytok egy üres sort.
common
VnumHelper.h

db
Cache.cpp
ProtoReader.h
ItemAwardManager.cpp
AuctionManager.cpp

game
shop_manager.h
PetSystem.h
ClientPackageCryptInfo.h
dragon_soul_table.h
belt_inventory_helper.h
PetSystem.cpp
input_db.cpp
item.cpp
monarch.cpp
questlua_pet.cpp
FileMonitor_FreeBSD.cpp
char_dragonsoul.cpp




II. DB
Hibás fájlok:
Cache.cpp
ClientManagerPlayer.cpp
ClientManagerBoot.cpp
ItemAwardManager.cpp:
AuctionManager.cpp:
ProtoReader.cpp


1. ClientManagerBoot.cpp teljes javítása
A)
ClientManagerBoot.cpp: In member function 'bool CClientManager::InitializeMobTable()':
ClientManagerBoot.cpp:402: warning: statement has no effect
B)
ClientManagerBoot.cpp: In member function 'bool CClientManager::InitializeItemTable()':
ClientManagerBoot.cpp:703: warning: unused variable 'testValue'
C)
ClientManagerBoot.cpp:1491: warning: format '%d' expects type 'int', but argument 25 has type 'long int'



A) Ennek a javításához a bool CClientManager::InitializeMobTable() függvény vége felé (~400. sor) keressük meg az alábbi sort:
test_data.Destroy();

És kommenteljük (vagy töröljük ki) az alábbi sorokat:
/*test_data.Destroy();
isTestFile = true;
test_data;
if(!test_data.Load("mob_proto_test.txt",'\t'))
{
fprintf(stderr, "Ĺ×˝şĆ® ĆÄŔĎŔĚ ľř˝Ŕ´Ď´Ů. ±×´ë·Î ÁřÇŕÇŐ´Ď´Ů.\n");
isTestFile = false;
}
if(isTestFile) {
test_data.Next(); //Ľł¸í ·Îżě łŃľî°ˇ±â.

while (test_data.Next()) //Ĺ×˝şĆ® µĄŔĚĹÍ °˘°˘Ŕ» ČȾ°ˇ¸ç,»ő·Îżî °ÍŔ» Ăß°ˇÇŃ´Ů.
{
//ÁßşąµÇ´Â şÎşĐŔĚ¸é łŃľî°Ł´Ů.
set<int>::iterator itVnum;
itVnum=vnumSet.find(atoi(test_data.AsStringByIndex(0)));
if (itVnum != vnumSet.end()) {
continue;
}

if (!Set_Proto_Mob_Table(mob_table, test_data, localMap))
{
fprintf(stderr, "¸÷ ÇÁ·ÎĹä Ĺ×ŔĚşí ĽÂĆĂ ˝ÇĆĐ.\n");
}

sys_log(0, "MOB #%-5d %-24s %-24s level: %-3u rank: %u empire: %d", mob_table->dwVnum, mob_table->szName, mob_table->szLocaleName, mob_table->bLevel, mob_table->bRank, mob_table->bEmpire);
++mob_table;

}
}*/


B) Keressük meg az alábbi sort, és egyszerűen kommentezzük ki.
int testValue =  m_vec_itemTable.size();

C) Csak annyi a dolgunk, hogy a fájl legalján a megkeressük ezt a részt:
GetTablePostfix(), g_stLocaleNameColumn.c_str(),

És a felette lévő három sort lecseréljük erre:
"%d, %ld, %d, %ld, "
"%d, %ld, %d, %ld, %d, %ld, "
"%ld, %ld, %ld, %ld, %ld, %ld )",


Majd kicsit lejjebb rákeresünk az alábbi sorra, és megismételjük az előző folyamatot.
GetTablePostfix(),

2. ClientManagerPlayer.cpp
---

3. CsvReader.cpp
---

4. ProtoReader.cpp
---



III. Game
Hibás fájlok:
belt_inventory_helper.h
buff_on_attributes.cpp
char.cpp
char_dragonsoul.cpp
char_item.cpp
char_state.cpp
check_server.h
cipher.cpp
ClientPackageCryptInfo.cpp
ClientPackageCryptInfo.h
cmd_gm.cpp
config.cpp
constants.cpp
cube.cpp
desc_client.cpp
dragon_soul_table.cpp
dragon_soul_table.h
DragonSoul.cpp
FileMonitor_FreeBSD.cpp
group_text_parse_tree.cpp
group_text_parse_tree.h
input_auth.cpp
input_db.cpp
item.cpp
item.h
item_manager.cpp
item_manager_read_tables.cpp
monarch.cpp
PetSystem.cpp
PetSystem.h
questlua.cpp
questlua_npc.cpp
questlua_pet.cpp
questnpc.cpp
shop.cpp
shop_manager.cpp
shop_manager.h
shopEx.cpp
utils.cpp


---



IV. Egyéb fájlok
Hibás fájlok:
Extern/include/cryptopp/algparam.h
Extern/include/cryptopp/filters.h
Extern/include/cryptopp/misc.h


---



V. Binary
----


Így első körben ennyi, de természetesen a témát folyamatosan bővítem majd ahogy időm engedi. Közben akiknek kérdésük van, vagy szintén ismerik pár hibára az orvosságot azok nyugodtan leírhatják.

[spoiler]Meg persze felkerül majd a védjegyemnek számító fehér betűs megjelenés a téma egészére. >:D[/spoiler]
"Tisztelet a kivételnek! Mindig tisztelet a kivételnek!"
"KezdÅ' vagyok, ne nézz le... (:"

2016-09-30, 23:06:51 #1 Utolsó szerkesztés: 2016-10-06, 15:02:15 Szerző: T0gy3R
Nos néhány game warning "fix"-el én is kiegészítem. Nem garantálok senkinek semmit.!
FONTOS... MINDENKÉPP CSINÁLJ BIZTONSÁGI MENTÉST!
char.cpp ~3028
if ((GetLevel() + amount) > gPlayerMaxLevel)

if ((GetLevel() + amount) > (unsigned int)gPlayerMaxLevel)


check_server.h ~ 24
for (int i = 0; i < keys_.size(); i++)

for (unsigned int i = 0; i < keys_.size(); i++)



config.cpp ~ 505
const char * line = two_arguments(value_string, openid_host, sizeof(openid_host), openid_uri, sizeof(openid_uri));

         DELLETE


constants.cpp ~ 291. sortól 311. sorig írd át
2050000000,


desc_client.cpp ~300
if (fForce || m_tLastChannelStatusUpdateTime+CHANNELSTATUS_UPDATE_PERIOD < t) {

if (fForce || m_tLastChannelStatusUpdateTime+(unsigned int)CHANNELSTATUS_UPDATE_PERIOD < t) {


questlua.cpp
bool returnBool;

bool returnBool=true; //szerintem ez mind1, hogy true, vagy false, egy if aztán úgy is eldönti, magának, hogy mi legyen. Viszont így eltűnik a warning fordítás közben.


cmd_gm.cpp ~4357
int cell;

BYTE cell = 0; // ebbe spec totál nem vagyok biztos, de ezen a fájlon belül több helyen is megtalálható ez a változó,ugyan így. Warning szintén nincs így.

DragonSoul.cpp ~19
for (int i = 0; i < vec_probs.size(); i++)

for (unsigned int i = 0; i < vec_probs.size(); i++)

DragonSoul.cpp ~25
for (int idx = 0; idx < vec_probs.size(); idx++)

for (unsigned int idx = 0; idx < vec_probs.size(); idx++)


DragonSoul.cpp ~ 203
for (int j = 0; j < vec_addtional_applys.size(); j++)

for (unsigned int j = 0; j < vec_addtional_applys.size(); j++)


DragonSoul.cpp ~273
for (int i = 0; i < vec_addtional_applys.size(); i++)

for (unsigned int i = 0; i < vec_addtional_applys.size(); i++)


DragonSoul.cpp ~469
sprintf(buf, "dice(%d) prob(%d)", fDice, fProb);

sprintf(buf, "dice(%f) prob(%f)", fDice, fProb);


DragonSoul.cpp ~273, 350, 435, 550, 763
Töröld, vagy kommentezd ki. Ezek olyan változók, amik nincsnenek használatban.!

Szerk.:
habár elég negatív vízhang ebben a témában ezzel még kiegészítem, magamnak is jó mint Log.. :)
shop.cpp ~576
if (m_itemVector[i].itemid == itemID)

if ((unsigned int)m_itemVector[i].itemid == itemID)


questlua_npc.cpp ~ 293, 309, 324, 340
töröld, vagy kommentezd


item_manager.cpp ~604
for (int i = 0; i < m_vec_item_vnum_range_info.size(); i++)

for (unsigned int i = 0; i < m_vec_item_vnum_range_info.size(); i++)


input_auth.cpp ~472
töröld, vagy kommentezd

2016-12-09, 18:54:48 #2 Utolsó szerkesztés: 2016-12-09, 21:12:46 Szerző: bakura1998
Teljes DB javítás ~

Csináld meg először azokat a javításokat/módosításokat amiket Rin már leírt és utána csináld ezeket.

Megnyitod a ClientManagerPlayer.cpp fájlt, megkeresed ezt a funkciót.

char* CClientManager::GetCommand(char* str)

431. sorban kell hogy legyen, átírod erre:

char* CClientManager::GetCommand(char* str, char* command)

A funkción belül megkeresed ezt

char command[20] = "";

Kikommenteled, példa

//char command[20] = "";

Megkeresed ezt a funkciót (felette van)

void CClientManager::ItemAward(CPeer * peer,char* login)

Ezen belül ezt a sort

strcpy(command,GetCommand(cmdStr));

Átírod erre

GetCommand(cmdStr, command);

Megnyitod a ClientManager.h fájlt és megkeresed ezt

char* GetCommand(char* str);

Átírod erre

char* GetCommand(char* str, char* command);

Megnyitod az ItemAwardManager.cpp fájlt és megkeresed ezt

strcpy(command,CClientManager::instance().GetCommand(cmdStr));

Átírod erre

CClientManager::instance().GetCommand(cmdStr, command);

Ezzel készen is van a ClientManagerPlayer.cpp fájl warningjai.

Megnyitod a ProtoReader.cpp fájlt és megkeresed ezt

int     cutAt;

Átírod így

unsigned int     cutAt;

Megkeresed ezt

for (int j=0;j<sizeof(arType)/sizeof(arType[0]);j++)

Átírod így

for (unsigned int j=0;j<sizeof(arType)/sizeof(arType[0]);j++)

Megkeresed ezt

int get_Item_SubType_Value(int type_value, string inputString)

Átírod így

int get_Item_SubType_Value(unsigned int type_value, string inputString)

Megkeresed ezt

for(int i =0;i<sizeof(arAntiFlag)/sizeof(arAntiFlag[0]);i++)

Átírod így

for(unsigned int i =0;i<sizeof(arAntiFlag)/sizeof(arAntiFlag[0]);i++)

Alatta

for (int j=0; j<30 ; j++)

Átírod így

for (unsigned int j=0; j<30 ; j++)

Megkeresed ezt

for(int i =0;i<sizeof(arFlag)/sizeof(arFlag[0]);i++)

Átírod így

for(unsigned int i =0;i<sizeof(arFlag)/sizeof(arFlag[0]);i++)

Alatta

for (int j=0; j<30 ; j++)

Átírod így

for (unsigned int j=0; j<30 ; j++)

Megkeresed ezt

for(int i =0;i<sizeof(arWearrFlag)/sizeof(arWearrFlag[0]);i++)

Átírod így

for(unsigned int i =0;i<sizeof(arWearrFlag)/sizeof(arWearrFlag[0]);i++)

Alatta

for (int j=0; j<30 ; j++)

Átírod így

for (unsigned int j=0; j<30 ; j++)

Megkeresed ezt

for(int i =0;i<sizeof(arImmune)/sizeof(arImmune[0]);i++)

Átírod így

for(unsigned int i =0;i<sizeof(arImmune)/sizeof(arImmune[0]);i++)

Alatta

for (int j=0; j<30 ; j++)

Átírod így

for (unsigned int j=0; j<30 ; j++)

Megkeresed ezt

for (int j=0;j<sizeof(arLimitType)/sizeof(arLimitType[0]);j++)

Átírod így

for (unsigned int j=0;j<sizeof(arLimitType)/sizeof(arLimitType[0]);j++)

Megkeresed ezt

for (int j=0;j<sizeof(arApplyType)/sizeof(arApplyType[0]);j++)

Átírod így

for (unsigned int j=0;j<sizeof(arApplyType)/sizeof(arApplyType[0]);j++)

Megkeresed ezt

for (int j=0;j<sizeof(arRank)/sizeof(arRank[0]);j++)

Átírod így

for (unsigned int j=0;j<sizeof(arRank)/sizeof(arRank[0]);j++)

Megkeresed ezt

for (int j=0;j<sizeof(arType)/sizeof(arType[0]);j++)

Átírod így

for (unsigned int j=0;j<sizeof(arType)/sizeof(arType[0]);j++)

Megkeresed ezt

for (int j=0;j<sizeof(arBattleType)/sizeof(arBattleType[0]);j++)

Átírod így

for (unsigned int j=0;j<sizeof(arBattleType)/sizeof(arBattleType[0]);j++)

Megkeresed ezt

for (int j=0;j<sizeof(arSize)/sizeof(arSize[0]);j++)

Átírod így

for (unsigned int j=0;j<sizeof(arSize)/sizeof(arSize[0]);j++)

Megkeresed ezt

for(int i =0;i<sizeof(arAIFlag)/sizeof(arAIFlag[0]);i++)

Átírod így

for(unsigned int i =0;i<sizeof(arAIFlag)/sizeof(arAIFlag[0]);i++)

Alatta

for (int j=0; j<30 ; j++)

Átírod így

for (unsigned int j=0; j<30 ; j++)

Megkeresed ezt

for(int i =0;i<sizeof(arRaceFlag)/sizeof(arRaceFlag[0]);i++)

Átírod így

for(unsigned int i =0;i<sizeof(arRaceFlag)/sizeof(arRaceFlag[0]);i++)

Alatta

for (int j=0; j<30 ; j++)

Átírod így

for (unsigned int j=0; j<30 ; j++)

Megkeresed ezt

for(int i =0;i<sizeof(arImmuneFlag)/sizeof(arImmuneFlag[0]);i++)

Átírod így

for(unsigned int i =0;i<sizeof(arImmuneFlag)/sizeof(arImmuneFlag[0]);i++)

Alatta

for (int j=0; j<30 ; j++)

Átírod így

for (unsigned int j=0; j<30 ; j++)

Megkeresed ezt

for (int i = 0; i < MOB_ENCHANTS_MAX_NUM; ++i)

Átírod így

for (unsigned int i = 0; i < MOB_ENCHANTS_MAX_NUM; ++i)

Alatta

for (int i = 0; i < MOB_RESISTS_MAX_NUM; ++i)

Átírod így

for (unsigned int i = 0; i < MOB_RESISTS_MAX_NUM; ++i)

Megkeresed ezt

for (int i=0; i<sizeof(dataArray)/sizeof(dataArray[0]);i++)

Átírod így

for (unsigned int i=0; i<sizeof(dataArray)/sizeof(dataArray[0]);i++)

Megkeresed ezt

for (int j = 0; j < i; ++j)

Átírod így

for (unsigned int j = 0; j < i; ++j)

Megkeresed ezt

int pos = s.find("~");

Átírod így

unsigned int pos = s.find("~");

Megnyitod a ProtoReader.h fájlt és megkeresed ezt

int get_Item_SubType_Value(int type_value, std::string inputString);

Átírod így

int get_Item_SubType_Value(unsigned int type_value, std::string inputString);

Ezzel készen is van a ProtoReader.cpp fájl warningjai.

Megnyitod a CsvReader.cpp-t és megkeresed ezt a sort

LogToFile(NULL, "cannot find suitable conversion for %d", index);

Kikommenteled.

Megkeresed ezt a sort

LogToFile(NULL, "cannot find suitable conversion for %s", name);

És ezt is kikommenteled.

Ha mindent megcsináltál, akkor így fog kinézni a dolog fordításnál.



Aki vak az kattoljon ide
Nem az a fő, hogy örökké élsz-e. A trükk az, hogy önmagad maradj, örökké.