Помощ със reHLDS и AmxModX 1.8.3

Ако имате затруднения при изработката/преработката на даден плъгин - пишете тук, ще се опитаме да ви помогнем!
Аватар
x7s
Извън линия
Потребител
Потребител
Мнения: 47
Регистриран на: 20 Яну 2018, 11:00
Местоположение: България
Се отблагодари: 19 пъти
Обратна връзка:

Помощ със reHLDS и AmxModX 1.8.3

Мнение от x7s » 22 Фев 2018, 13:18

Здравейте.
От скоро започнах да се занимавам отново с сървъри и тяхното правилно компилиране в PAWN. :whistle:
И срещам доста трудности, защото съм забравил много неща, а и от тогава когато се занимавах, до сега, нещата са се променили и продължават да се променят ежедневно.
Започнах да преправям един WaR3FT-Respawn сървър свалих си всичко нужно от reHLDS платформата сглобена и ъпдейтната до най-новите билд на модулите и т.н. екстрите към нея.
Та започнах да компилирам един по един плъгините, стандартните в AmxModX си ги компилирах автоматично, все пак няма какво да стане и да се сбози, и за това първо тях ги компилирах, за да не срещам изненади със разни библиотеки, ако се наложи да сменя някъде някоя библиотека, за да компилирам следващите плъгинчета нормално, които искам да има платформата и да си бачка платформата, без да има конфликти с объркани библиотеки.
Започнах да слагам самият War3FT плъгин, който взех директно от ТУК, и тук започнаха проблемите ми.
Въпроса ми е простичък има ли възможност в АmxМodX (1.8.3-dev-git5151) да се компилират плъгини, които са работили нормално и без грешки в предходната версия 1.8.2? :think:
Питам защото преди години, когато беше тогавашна версия 1.8.2-dev-hg60 въпросния плъгин го бях намерил в сегашния му вид и реших да го компилирам, за да му се радваме в нашите сървъри, които поддържах тогава, и си работеше идеално.
Та още по-просто казано: Как да компилирам всички работещи плъгини от 1.8.2 на 1.8.3 :think:
Защото ако трябва да преправям всички плъгини с всички новости, то това си е бая писане, а с това темпо на разработчиците, аз немога да смогна да ъпдейтвам само платформата, пък камо ли да пренапиша всички плъгини, които сме ползвали за платформата преди години с 1.8.2
А самата идея е да се премине към 1.8.3 и вече в процес на обновяванията на платформата и т.н. да си пренаписвам тук там някой друг плъгин с КПК, или да го сваля, за по лесно от готов източник и просто да ъпдейтвам, ако има нужда да се ъпдейтне :blush:

ПС. Ако темата ми е пусната в грешен раздел, се извинявам много за което, и ще помоля модератор да я премести в правилния раздел :blush:

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Помощ със reHLDS и AmxModX 1.8.3

Мнение от OciXCrom » 22 Фев 2018, 14:43

AMXX има backwards-compatibility, което ще каже, че всички плъгини направени за по-стара версия, трябва да работят без проблеми на по-нови версии. Няма нужда от никакво преработване за да работи на 1.8.3, стига плъгинът да не е калпаво написан. Толкова много неща си написал, ама никъде не си обяснил какъв е самият проблем.

Аватар
x7s
Извън линия
Потребител
Потребител
Мнения: 47
Регистриран на: 20 Яну 2018, 11:00
Местоположение: България
Се отблагодари: 19 пъти
Обратна връзка:

Помощ със reHLDS и AmxModX 1.8.3

Мнение от x7s » 23 Фев 2018, 10:37

Код за потвърждение: Избери целия код

AMX Mod X Compiler 1.8.3-dev+5151
Copyright (c) 1997-2006 ITB CompuPhase
Copyright (c) 2004-2013 AMX Mod X Team

war3ft/cvar.inl(97) : warning 217: loose indentation
war3ft/cvar.inl(104) : warning 217: loose indentation
war3ft/race_blood.inl(49) : warning 217: loose indentation
war3ft/race_blood.inl(50) : warning 217: loose indentation
war3ft/race_blood.inl(62) : warning 217: loose indentation
war3ft/race_blood.inl(65) : warning 217: loose indentation
war3ft/race_blood.inl(75) : warning 217: loose indentation
war3ft/race_blood.inl(79) : warning 217: loose indentation
war3ft/race_blood.inl(81) : warning 217: loose indentation
war3ft/race_blood.inl(87) : warning 217: loose indentation
war3ft/race_blood.inl(98) : warning 217: loose indentation
war3ft/race_crypt.inl(248) : warning 225: unreachable code
war3ft/war3ft.inl(1585) : warning 217: loose indentation
war3ft/war3ft.inl(1588) : warning 217: loose indentation
war3ft/clientCommands.inl(72) : warning 225: unreachable code
war3ft/menus.inl(173) : warning 217: loose indentation
war3ft/admin.inl(54) : warning 217: loose indentation
war3ft/admin.inl(64) : warning 217: loose indentation
war3ft/cstrike.inl(384) : warning 217: loose indentation
war3ft/cstrike.inl(387) : warning 217: loose indentation
Warning: Symbol "is_amd64_server" is marked as deprecated: AMXX is not shipping 64bits builds anymore. This native is basically guaranteed to return 0. on line 356

Warning: Symbol "client_disconnect" is marked as deprecated: Use client_disconnected() instead. on line 454

Warning: Unreachable code on line 715
Header size:           9256 bytes
Code size:           344764 bytes
Data size:           229532 bytes
Stack/heap size:      16384 bytes
Total requirements:  599936 bytes

23 Warnings.
Done.
Всички тези грешки, които излизат знам как да ги поправя, но не е това проблемът ми, като цяло, мислех си дали няма някакъв начин без да оправям тия грешки да заобиколя системата и направо да премина на 1.8.3 вместо да си играя да преправям грешките.
Както се забелязва, той плъгина, като цяло се е компилирал, но е пълен с грешки, и ще бози супер много, съм убеден не на 100% а на 101%.
Все пак това са адски много грешки, и това е първия плъгин, който добавям в платформата, ами останалите, които смятам да добавям? :think:
И със тях ли трябва по същия начин да се мъча, да ги преправям, където излизат грешки, или ще е по-лесно направо да си кача всички плъгини, и да се надявам, че до края на годината, все някой от екипа тук във форума, ще намери свободно време да ги преправи.
Т.е. да ги пренапише, или да ми отдели от личното си време, да ми помогне да си ги пренапиша, защото повечето плъгини, които искам да ползвам сигурно нямат поддръжка от 2007-ма година :(
А някой от тях, който са нямали поддръжка, незнайно защо, съм решил да ги обединявам в един, т.е. от два плъгина съм направил един :blush:
Което сега осъзнавам, че е било изключително тъпа идея, но проблемът е, че вече не си спомням, кои плъгин, как точно съм го обединявал във друг, за да работят съвместно заедно в едно цяло. :shok:
Като цяло, аз съм решил, така или иначе, да ги пренапиша всичките, но идеята беше да ги заобиколя тия грешки временно, до като сървъра си работи ;))

ПС. Ако някой има желание ще пусна във форума в раздел AmxModX "Поддръжка" или "Преработка на плъгини" с пълно описание, на платформата която ползвам, както и добавките към нея, за да сме максимално полезни, на всички останали, които срещат същите проблеми :oo

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Помощ със reHLDS и AmxModX 1.8.3

Мнение от OciXCrom » 23 Фев 2018, 15:51

Не са грешки, а предупреждения. Няма да имат никакво влияние върху работата на плъгина.

Loose indentation означава, че кодът е неправилно подреден. Пример:

Код за потвърждение: Избери целия код

public funkciq()
	{
		kod()
	oshte_edin_kod()
}
Трябва да стане:

Код за потвърждение: Избери целия код

public funkciq()
{
	kod()
	oshte_edin_kod()
}
Unreachable code означава, че дадена част от кода не може да бъде "достигната", тъй като преди нея има return. Пример:

Код за потвърждение: Избери целия код

public funkciq()
{
	kod()
	return PLUGIN_HANDLED
	oshte_edin_kod() // това не може да бъде достигнато заради return-а по-горе
}
За да го оправиш, просто премахни функцията (в случая oshte_edin_kod()).

Symbol is marked as deprecated означава, че в 1.8.3 има по-добра функция на мястото на въпросната и е препоръчително да се ползва тази. Примерно ще ти изпише, че client_disconnect е deprecated, тъй като има нова функция - client_disconnected, съответно трябва да я замениш в кода.

Като цяло може да се изработи един include файл, който автоматично ще превръща deprecated функциите в новите им версии, с което ще се предотвратят предурпеждения от типа на "symbol is marked as deprecated". Обаче "loose indentation" няма как да се оправи с файл. Кодът трябва да е правилно подреден, можеш да позлваш вградените функции на някои текстови редактори за автоматично подреждане на целия файл.

Аватар
x7s
Извън линия
Потребител
Потребител
Мнения: 47
Регистриран на: 20 Яну 2018, 11:00
Местоположение: България
Се отблагодари: 19 пъти
Обратна връзка:

Помощ със reHLDS и AmxModX 1.8.3

Мнение от x7s » 23 Фев 2018, 19:08

Функцията "client_disconnect" вече разбрах, че просто трябва да я направя на "client_disconnected" и въпросната функция, да не излиза, като грешка.
Следващата грешка : "Loose indentation" тук малко се разрових в интернет, и всичко ми стана ясно, един по един фаиловете, където дава грешка ги поправих, за да не дават грешки като нагласих скобите подравних местата на които трябва да бъде даден код и т.н.
След това, изключих във целия плъгин да не дава една грешка, когато го стартирам, а именно тази: "Host_Error: UserMsg: Not Present on Client 58", като за целта се възползвах от мнението на колегата в тази тема, и за да изключа въпросната проверка в тази функция, просто навсякаде където е написал колегата да се изтрие ненужните за него неща, аз сложих затварящи тагове "/*" и "*/" за да я изключа, като цяло функцията, но да я запазя като такава, във файла.
Така, до тук всичко си е направено и подредено, както си трябва да бъде по учебник, Но когато вече е оправено всичко подредено изключено и т.н. стигаме до следните грешки:

Код за потвърждение: Избери целия код

AMX Mod X Compiler 1.8.3-dev+5151
Copyright (c) 1997-2006 ITB CompuPhase
Copyright (c) 2004-2013 AMX Mod X Team

E:\Ivo\Itanium-Servers\reHLDS Windows War3Respawn\Server\cstrike\addons\amxmodx\scripting\include\war3ft/race_crypt.inl(248) : warning 225: unreachable code
E:\Ivo\Itanium-Servers\reHLDS Windows War3Respawn\Server\cstrike\addons\amxmodx\scripting\include\war3ft/clientCommands.inl(72) : warning 225: unreachable code
Warning: Unreachable code on line 715
Header size:           9136 bytes
Code size:           343532 bytes
Data size:           227676 bytes
Stack/heap size:      16384 bytes
Total requirements:  596728 bytes

3 Warnings.
Done.
Тук ще те цитирам теб:
Unreachable code означава, че дадена част от кода не може да бъде "достигната", тъй като преди нея има return. Пример:

Код за потвърждение: Избери целия код

public funkciq(id)
{
	kod()
	return PLUGIN_HANDLED
	oshte_edin_kod() // това не може да бъде достигнато заради return-а по-горе
}
За да го оправиш, просто премахни функцията (в случая oshte_edin_kod()).
Така и решавам да го направя, аз както ми даваш съвет да изтрия функцията, но уви... реално, ако го направя ще затрия код, които е нужен за да работи коректно самия мод, а именно ето тук във race_crypt.inl на ред (248):

Код за потвърждение: Избери целия код

CL_HLP_Diff( iNum, iNum2 )
{
	if ( iNum > iNum2 )
	{
		return (iNum-iNum2);
	}
	else
	{
		return (iNum2-iNum);
	}

	return 0; // Тук е ред 248 можеш да го провериш
}
Тук малко се обърках кой код точно трябва да махна, при условие, че имам 3 return ? :huh:

Реших да го прескоча за сега този ерор и да отворя следващата библиотека clientCommands.inl, за да видя там какво се случва на въпросния ред, където ми излиза грешка, а именно (72):

Код за потвърждение: Избери целия код

public cmd_hegren( id )
{ 
	if ( !WC3_Check() )
	{
		return PLUGIN_CONTINUE;
	}

	// Make sure we even have grenade protection on
	if ( !get_pcvar_num( CVAR_wc3_grenade_protection ) )
	{
		return PLUGIN_CONTINUE;
	}

	// Then they shouldn't be buying a grenade anyway
	if ( !cs_get_user_buyzone( id ) )
	{
		return PLUGIN_HANDLED;
	}


	// User can only buy one grenade per round
	if ( p_data[id][P_HECOUNT] > 0 )
	{ 
		client_print( id, print_center, "%L", id, "ONLY_ONE_GRENADE_PER_ROUND" );

		return PLUGIN_HANDLED;
	}
	
	// Increment since they bought their grenade
	else
	{
		++p_data[id][P_HECOUNT];

		return PLUGIN_CONTINUE;
	}

	return PLUGIN_CONTINUE; // Тук е въпросния 72ри ред
}
И отново изумителната ми физиономия можеш да си я представиш :confused: както се вижда return PLUGIN_CONTINUE; :huh:
Тук обаче нямам код, а направо функции с код, а въпросната грешка е много след самата функция и кодът последващ в нея...
Благодаря много за помощта ти и за отделеното време :tnx:
Ще се радвам, ако ми помогнеш за тези грешки, как точно трябва да ги поправя, за да не излизат, ако се налага ще прикача и това което съм направил до момента :blush:

Edit: Пропуснах да добавя и последната грешка, която излиза в самия war3ft.sma на следния ред 715:

Код за потвърждение: Избери целия код

public module_filter( const module[] )
{
	WC3_DetermineGame();

	// We don't need the cstrike module when we're DOD
	if ( g_MOD == GAME_DOD && equal( module, "cstrike" ) )
	{
		return PLUGIN_HANDLED;
	}

	// And we don't need any dod modules when we're in CS/CZ!
	else if ( ( g_MOD == GAME_CSTRIKE || g_MOD == GAME_CZERO ) && equal( module, "dodfun" ) )
	{
		return PLUGIN_HANDLED;
	}

	// We don't need to display a message, we'll display it later if we need to (when the DB is set up if XP Saving is on)
	else if ( equal( module, "dbi" ) || equal( module, "sqlx" ) )
	{
		return PLUGIN_HANDLED;
	}

	// Dammit plugin can't load now :/ - technically we should never get here unless the module doesn't exist in the modules folder
	else
	{
		WC3_Log( true, "Please enable the '%s' module in your modules.ini file", module );

		return PLUGIN_CONTINUE;
	}

	return PLUGIN_HANDLED; // Тук е ред 715
}
на ред 715 отново return PLUGIN_HANDLED; тук отново не ми стана много ясно кой точно код да изтрия :huh: :blush: ;(

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Помощ със reHLDS и AmxModX 1.8.3

Мнение от OciXCrom » 23 Фев 2018, 19:25

Така и решавам да го направя, аз както ми даваш съвет да изтрия функцията, но уви... реално, ако го направя ще затрия код, които е нужен за да работи коректно самия мод, а именно ето тук във race_crypt.inl на ред (248):
Абсолютно не, няма да затриеш никакъв нужен код.

Код за потвърждение: Избери целия код

if ( iNum > iNum2 )
{
	return (iNum-iNum2);
}
else
{
	return (iNum2-iNum);
}

return 0; // Тук е ред 248 можеш да го провериш
Това ако се "преведе" на български, ще изглежда така:

Код за потвърждение: Избери целия код

ако iNum е по-голямо от iNum2
{
	върни iNum минус iNum2
}
в противен случай
{
	върни iNum2 минус iNum
}

върни 0
Както виждаш, частта "върни 0" няма никога да бъде достигната, тъй като if-проверката винаги ще е или точна или неточна. Ако iNum е по-голямо от iNum 2, ще изпълни първия код, в противен случай втория - съоветно трет код няма и последният return е напълно излишен. Ако още не си разбрал - след като кодът изпълни "return", това е буквално краят на въпросната функция - след него нищо няма да се изпълни.

С прости думи - можеш да премахнеш въпросните редове без да се притестняваш, че ще премахнеш нещо важно от кода.

Аватар
x7s
Извън линия
Потребител
Потребител
Мнения: 47
Регистриран на: 20 Яну 2018, 11:00
Местоположение: България
Се отблагодари: 19 пъти
Обратна връзка:

Помощ със reHLDS и AmxModX 1.8.3

Мнение от x7s » 23 Фев 2018, 20:39

:tnx: :tnx: :tnx:
Благодаря много за помоща ти, вече разбрах, къде точно, и какво трябва да се направи, за да се компилира правилно :yahoo:
Просто където ми дава грешка, на въпросния ред, а именно там имам "return", сложих таг за коментар "//" така въпросната грешка е пренебрегната и се смята за коментар въпросния "return", вместо да трия реших да си го оставя.
Извън темата
А за в бъдеще като си добавя в сорса горещия фикс, който съм направил в библиотеките и сорса като цяло, и ако реша да го предоставя отново някъде в интернет, това което съм направил поне ще съм обяснил какво точно съм направил.
Тъй като съм го сглобил вече и качил в един сайт, но работещ за amxmodx 1.8.2, ще си сваля една платформа с инсталиран amxmodx 1.8.2, за да видя дали ще работи и там с тези поправки, които съм направил с твоя помощ.
Благодаря отново за съдействието и отделеното време, ако имам някакви проблеми свързани относно този плъгин ще пиша отново :worthy: :beer:

ПС. Ако темата ми е в грешен раздел, понеже я направихме направо за "Помощ в скриптирането" ще помоля да бъде поправена в заглавието и да бъде преместена в правилния раздел :blush:
Извинявам се за разводняването на темата, просто не съм се занимавал с PAWN от поне 6-7години и много неща са ми непонятни в 1.8.3 :blush:

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Помощ със reHLDS и AmxModX 1.8.3

Мнение от OciXCrom » 24 Фев 2018, 01:26

Прав си, преместих я в раздела за скриптиране. На 1.8.2 няма да работи, тъй като ползваш функции които са нови в 1.8.3 (примерно cliet_disconnected). Можеш да добавиш проверка за версия за да работи и на 1.8.2.

Публикувай отговор
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Помощ в скриптирането”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 7 госта