War3FT - Как да добавите повече нива в вашия сървър

В този раздел можете да намерите полезни кодове и уроци свързани с PAWN скриптинга.
Потребителски аватар

Автор на темата
3agopka
Потребител
Потребител
Мнения: 65
Регистриран: 20 окт 2016, 21:36

War3FT - Как да добавите повече нива в вашия сървър

Мнение от 3agopka » 23 окт 2016, 17:53

Здравейте , ще ви покажа как да си добавите повече нива в мода War3FT
Урока съм го тествал и нещата се получават , за тези които немогат нека знаят ,че грешката не е в урока.

Препоръчвам ви да работите с текстов едитор notepad ++ понеже има повече опции и е по добър.
в ...\cstrike\addons\amxmodx\scripting\ отваряте constants.inl и намирате

Код: Избери всички

#define MAX_LEVELS
като добавяте нивото което искате

Отваряте war3ft.inl , намирате

Код: Избери всички

                 // User is under level 10
                 else if ( p_data[id][P_LEVEL] < 10 )
                 {
                    pos += formatex( szRaceInfo[pos], 255, "%s %L: %d   XP: %d/%d ", szShortRaceName, id, "WORD_LEVEL", p_data[id][P_LEVEL], p_data[id][P_XP], XP_GetByLevel( p_data[id][P_LEVEL]+1) );
                    formatex( szXPInfo, 31, "%L: %d   XP: %d/%d", id, "WORD_LEVEL", p_data[id][P_LEVEL], p_data[id][P_XP], XP_GetByLevel( p_data[id][P_LEVEL]+1 ) );
                 }
Замествате с

Код: Избери всички

                 // User is under level 10
                 else if ( p_data[id][P_LEVEL] < MAX_LEVELS )
                 {
                    pos += formatex( szRaceInfo[pos], 255, "%s %L: %d   XP: %d/%d ", szShortRaceName, id, "WORD_LEVEL", p_data[id][P_LEVEL], p_data[id][P_XP], XP_GetByLevel( p_data[id][P_LEVEL]+1) );
                    formatex( szXPInfo, 31, "%L: %d   XP: %d/%d", id, "WORD_LEVEL", p_data[id][P_LEVEL], p_data[id][P_XP], XP_GetByLevel( p_data[id][P_LEVEL]+1 ) );
                 }
в същия файл намирате

Код: Избери всички

                 // User is under level 10
                 else if ( p_data[id][P_LEVEL] < 10 )
                 {
                    pos += formatex( szRaceInfo[pos], 255, "%s %L: %d^nXP: %d/%d^n", szShortRaceName, id, "WORD_LEVEL", p_data[id][P_LEVEL], p_data[id][P_XP], XP_GetByLevel( p_data[id][P_LEVEL]+1) );
                 
                 }
замествате с

Код: Избери всички

                 // User is under level 10
                 else if ( p_data[id][P_LEVEL] < MAX_LEVELS )
                 {
                    pos += formatex( szRaceInfo[pos], 255, "%s %L: %d^nXP: %d/%d^n", szShortRaceName, id, "WORD_LEVEL", p_data[id][P_LEVEL], p_data[id][P_XP], XP_GetByLevel( p_data[id][P_LEVEL]+1) );
                 
                 }
по на долу намирате

Код: Избери всички

           // User is under level 10
           else if ( p_data[iTargetID][P_LEVEL] < 10 )
           {
              iMsgPos += formatex( szMsg, 511, "%s %L: %d   XP: %d/%d", szRaceName, id, "WORD_LEVEL", p_data[iTargetID][P_LEVEL], p_data[iTargetID][P_XP], XP_GetByLevel( p_data[iTargetID][P_LEVEL]+1 ) );
           }
и замествате с

Код: Избери всички

           // User is under level 10
           else if ( p_data[iTargetID][P_LEVEL] < MAX_LEVELS-1 )
           {
              iMsgPos += formatex( szMsg, 511, "%s %L: %d   XP: %d/%d", szRaceName, id, "WORD_LEVEL", p_data[iTargetID][P_LEVEL], p_data[iTargetID][P_XP], XP_GetByLevel( p_data[iTargetID][P_LEVEL]+1 ) );
           }
отново в същия файл на долу намирате

Код: Избери всички

           // Do we need to give this user XP?
           new iStartLevel = get_pcvar_num( CVAR_wc3_start_level );
           if ( p_data[id][P_XP] < XP_GetByLevel( iStartLevel ) && iStartLevel > 0 && iStartLevel <= 10 )
           {
и замествате с

Код: Избери всички

           // Do we need to give this user XP?
           new iStartLevel = get_pcvar_num( CVAR_wc3_start_level );
           if ( p_data[id][P_XP] < XP_GetByLevel( iStartLevel ) && iStartLevel > 0 && iStartLevel <= MAX_LEVELS )
           {

Код: Избери всички

намирате

Код: Избери всички

           // Store level sprite names
           for ( i = 0; i < 11; i++ )
           {
              formatex( g_szLevelSprites[i], 63, "sprites/warcraft3/level/a_level_%d.spr", i );
           }
Замествате с

Код: Избери всички

           // Store level sprite names
           for ( i = 0; i < MAX_LEVELS+1; i++ )
           {
              formatex( g_szLevelSprites[i], 63, "sprites/warcraft3/level/a_level_%d.spr", i );
           }
В xp.inl намирате

Код: Избери всички

        new Float:iLevelMultiplier = ( fCurrentLevel / 10.0 ) + 1.0;
----->

Код: Избери всички

        new Float:iLevelMultiplier = ( fCurrentLevel / float(MAX_LEVELS) ) + 1.0;
намирате

Код: Избери всички

        XP_GetByLevel( iLevel )
        {
           if ( iLevel < 0 || iLevel > 10 )
           {
              return 0;
           }
----->

Код: Избери всички

        XP_GetByLevel( iLevel )
        {
           if ( iLevel < 0 || iLevel > MAX_LEVELS )
           {
              return 0;
           }
Намирате

Код: Избери всички

        XP_GivenByLevel( iLevel )
        {
           if ( iLevel < 0 || iLevel > 10 )
           {
              return 0;
           }
------>

Код: Избери всички

        XP_GivenByLevel( iLevel )
        {
           if ( iLevel < 0 || iLevel > MAX_LEVELS )
           {
              return 0;
           }
Това е за XP.Нужния XP за следващото ниво, не си спомням много добре но ако нивата ти са 16 тези стойности трябва да са 17.Като винаги първата стойност трябва да е 0.В самия код си е така и така трябва да остане.

Ето какво пише в XP.h : // Amount of XP needed to gain a level - Стойност на XP за следващо ниво.Ако искаш след 10 или 13 lvl както прецениш не го удвоявай или добавай + 10000 тоест ако 10 ниво е 51200 за 11 лвл добави + 10000 и така на татък.

А този ред : // Amount of XP awarded when killing a user of this level означава
Стойност на XP за убийство на всеки следващ лвл.Тоест ако на 10 лвл ти дава по 32 XP ,то можеш на всеки следващ лвл да си го направиш по 50 XP зависи как ще си калкулираш горните стойности.Защото ако си остане по 32 XP за всеки следващ лвл ,то ще вдигаш 16 лвл до другата година по това време.Ако ме разбираш ;)

В constants.inl са самите ултимейти и способности на героите, там също трябва да се правят промени:
Ще намериш код:

Код: Избери всички

// Constants for Abilities
new const Float:p_vampiric[3] =			{0.10,0.20,0.30}		// Vampiric Aura			(skill 1)
new Float:p_unholy[3] =					{265.0,285.0,300.0}		// Unholy Aura				(skill 2)
new Float:p_unholy_dod[3] =				{33.3,66.6,100.0}		// Unholy Aura				(skill 2)
new const Float:p_levitation[3] =		{0.8,0.6,0.4}			// Levitation				(skill 3)

new const p_invisibility[3] =			{200,175,135}			// Invisibility				(skill 1)
new const p_devotion =					15						// Devotion Aura			(skill 2)
new const Float:p_bash[3] =				{0.10,0.20,0.30}		// Bash						(skill 3)

new const Float:p_critical[3] =			{0.25,0.50,0.75}		// Critical Strike			(skill 1)
new const Float:p_grenade[3] =			{2.0,3.0,4.0}			// Critical Grenade			(skill 2)
new const Float:p_ankh[3] =				{0.333,0.666,1.0}		// Equipment reincarnation	(skill 3)

new const Float:p_evasion[3] =			{0.1,0.175,0.25}		// Evasion					(skill 1)
new const Float:p_thorns[3] =			{0.05,0.1,0.15}			// Thorns Aura				(skill 2)
new const Float:p_trueshot[3] =			{0.1,0.2,0.35}			// Trueshot Aura			(skill 3)


new const Float:p_phoenix[3] =			{0.333,0.666,1.0}		// Phoenix					(skill 1)
new const p_phoenix_dod[3] =			{300,600,900}			// Phoenix - DOD			(skill 1)
new const Float:p_banish[3] =			{0.05,0.10,0.15}		// Banish					(skill 2)
new const Float:p_mana[3] =				{0.02,0.04,0.08}		// Siphon Mana				(skill 3)
new const Float:p_resistant[11] =		{0.02, 0.04, 0.08, 0.12, 0.16, 0.20, 0.24, 0.28, 0.32, 0.36, 0.40}	// Resistant Skin		(Skill 4)

new const Float:p_heal[3] =				{6.0,4.0,2.0}			// Healing Wave				(skill 1)
new const Float:p_hex[3] =				{0.05,0.10,0.15}		// Hex						(skill 2)
new const p_serpent[3] =				{1,2,3}					// Serpent Ward				(skill 3)
new const Float:p_concoction[11] =		{0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.15}	// Unstable Concoction	(Skill 4)

new const Float:p_fan[3] =				{0.05,0.10,0.15}		// Fan of Knives			(skill 1)
new const Float:p_blink[3] =			{0.333,0.666,1.0}		// Blink					(skill 2)
new const Float:p_shadow[3] =			{0.05,0.10,0.15}		// Shadow Strike			(skill 3)
new const Float:p_harden[11] =			{0.03, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.35, 0.40, 0.45, 0.50}	// Hardened Skin		(Skill 4)

new const Float:p_impale[3] =			{0.05,0.1,0.15}		    // Impale					(skill 1)
new const Float:p_spiked[3] =			{0.05,0.1,0.15}			// Spiked Carapace			(skill 2)
new const Float:p_carrion[3] =			{0.05,0.10,0.15}		// Carrion Beetle			(skill 3)
new const Float:p_orb[11] =				{0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.15}
Давам кода за 16 лвл:

Код: Избери всички

// Constants for Abilities
new const Float:p_vampiric[5] = {0.10,0.20,0.30,0.40,0.50} // Vampiric Aura (skill 1)
new Float:p_unholy[5] = {265.0,285.0,300.0,320.0,340.0} // Unholy Aura (skill 2)
new Float:p_unholy_dod[5] = {33.3,66.6,100.0,133.3,166.6} // Unholy Aura (skill 2)
new const Float:p_levitation[5] = {0.8,0.6,0.4,0.3,0.2} // Levitation (skill 3)

new const p_invisibility[5] = {200,175,135,120,105} // Invisibility (skill 1)
new const p_devotion = 15 // Devotion Aura (skill 2)
new const Float:p_bash[5] = {0.10,0.20,0.30,0.40,0.50} // Bash (skill 3)

new const Float:p_critical[5] = {0.25,0.50,0.75,0.85,1.00} // Critical Strike (skill 1)
new const Float:p_grenade[5] = {2.0,3.0,4.0,5.0,6.0} // Critical Grenade (skill 2)
new const Float:p_ankh[5] = {0.333,0.666,0.788,1.0,1.333} // Equipment reincarnation (skill 3)

new const Float:p_evasion[5] = {0.1,0.175,0.25,0.275,0.5} // Evasion (skill 1)
new const Float:p_thorns[5] = {0.05,0.1,0.15,0.2,0.3} // Thorns Aura (skill 2)
new const Float:p_trueshot[5] = {0.1,0.2,0.35,0.45,0.55} // Trueshot Aura (skill 3)


new const Float:p_phoenix[5] = {0.333,0.666,0.788,1.0,1.333} // Phoenix (skill 1)
new const p_phoenix_dod[5] = {300,600,900,1200,1500} // Phoenix - DOD (skill 1)
new const Float:p_banish[5] = {0.05,0.10,0.15,0.20,0.30} // Banish (skill 2)
new const Float:p_mana[5] = {0.02,0.04,0.08,0.12,0.16} // Siphon Mana (skill 3)
new const Float:p_resistant[17] = {0.02, 0.04, 0.08, 0.12, 0.16, 0.20, 0.24, 0.28, 0.32, 0.34, 0.36, 0.38, 0.40, 0.42, 0.44, 0.46, 0.48} // Resistant Skin
new const Float:p_heal[5] = {6.0,4.0,2.0,1.5,1.0} // Healing Wave (skill 1)
new const Float:p_hex[5] = {0.05,0.10,0.15,0.20,0.30} // Hex (skill 2)
new const p_serpent[5] = {1,2,3,4,5} // Serpent Ward (skill 3)
new const Float:p_concoction[17] = {0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17} // Unstable Concoction (Skill 4)

new const Float:p_fan[5] = {0.05,0.10,0.15,0.20,0.30} // Fan of Knives (skill 1)
new const Float:p_blink[5] = {0.333,0.666,0.8,1.0,1.333} // Blink (skill 2)
new const Float:p_shadow[5] = {0.05,0.10,0.15,0.20,0.30} // Shadow Strike (skill 3)
new const Float:p_harden[17] = {0.03, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.35, 0.37, 0.40, 0.43,0.46,0.50,0.55,0.60,0.65,0.70} // Hardened Skin (Skill 4)

new const Float:p_impale[5] = {0.05,0.1,0.15,0.2,0.30} // Impale (skill 1)
new const Float:p_spiked[5] = {0.05,0.1,0.15,0.2,0.30} // Spiked Carapace (skill 2)
new const Float:p_carrion[5] = {0.05,0.10,0.15,0.2,0.30} // Carrion Beetle (skill 3)
new const Float:p_orb[17] = {0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17} // Orb of Annihilation (Skill 4)
Или си ги калкулирате по свой начин.
Ето източника за този код:

В admin.inl намирате

Код: Избери всички

              new iLevel = str_to_num( szArg2 );

              if ( iLevel < 0 || iLevel >= 11 )
              {
                 ADMIN_Print( id, "%s Error, level must be in between (or equal to) 0 and 17", g_MODclient );

                 return PLUGIN_HANDLED;
              }
Замествате с :

Код: Избери всички

              new iLevel = str_to_num( szArg2 );

              if ( iLevel < 0 || iLevel >= MAX_LEVELS+1 )
              {
                 ADMIN_Print( id, "%s Error, level must be in between (or equal to) 0 and 17", g_MODclient );

                 return PLUGIN_HANDLED;
              }
В xp.h намирате

Код: Избери всички

        // Amount of XP needed to gain a level
        new iXPLevelShortTerm[11]            = {0,150,300,600,1000,1500,2100,2800,3400,4500,5500};
        new iXPLevelSaved[11]               = {0,100,200,400,800,1600,3200,6400,12800,25600,51200};

        // Amount of XP awarded when killing a user of this level
        new iXPGivenShortTerm[11]            = {10,15,25,35,40,50,60,70,80,90,95};
        new iXPGivenSaved[11]               = {6,8,10,12,14,16,18,20,24,28,32};
замествате с

Код: Избери всички

        // Amount of XP needed to gain a level
        new iXPLevelShortTerm[MAX_LEVELS+1]            = {0,150,300,600,1000,1500,2100,2800,3400,4500,5500};
        new iXPLevelSaved[MAX_LEVELS+1]               = {0,100,200,400,800,1600,3200,6400,12800,25600,51200};

        // Amount of XP awarded when killing a user of this level
        new iXPGivenShortTerm[MAX_LEVELS+1]            = {10,15,25,35,40,50,60,70,80,90,95};
        new iXPGivenSaved[MAX_LEVELS+1]               = {6,8,10,12,14,16,18,20,24,28,32};
За да промените нивата за уменията трябва да направите следните неща
в constants.inl намирате

Код: Избери всички

 #define MAX_SKILL_LEVEL
и добавяте броя на уменията (колкото са и нивата)
Отивате в skill_manager.inl , намирате

Код: Избери всички

           // Technically we shouldn't have a skill level EVER greater than 3 right?
           if ( iLevel > 3 )
           {
              WC3_Log( false, "Setting skill %d to %d wtf?? (%d)", skill_id, iLevel, iDebugID );

              log_error( AMX_ERR_NATIVE, "Setting skill %d to %d wtf?? (%d)", skill_id, iLevel, iDebugID );

              return;
           }
и презамествате с

Код: Избери всички

           // Technically we shouldn't have a skill level EVER greater than 3 right?
           if ( iLevel > MAX_SKILL_LEVEL )
           {
              WC3_Log( false, "Setting skill %d to %d wtf?? (%d)", skill_id, iLevel, iDebugID );

              log_error( AMX_ERR_NATIVE, "Setting skill %d to %d wtf?? (%d)", skill_id, iLevel, iDebugID );

              return;
           }
!!!ВАЖНО!!!
на този ред
new iXPLevelSaved[MAX_LEVELS+1] = {0,100,200,400,800,1600,3200,6400,12800,25600,51200};
трябва да калкулирате ило да въведете други стойности след 51200 за да се получи
тоест след тази стойност добавяте нейната x 2.
,51200,102400,204800,...

Добавям и 16 спрайта (sprites) за 16 нива(препоръчително е да са максимално толкова).
Ако случайно искате повече нива трябва да качите и още спрайта.Това може да го направите като влезнете в такъв сървър като ви се свялят файловете ще ви се намират на вашия клиент.От там може да копирате и да си ги добавите.
level.rar
Изтегли 16 sprites
Източник
Последна промяна от 3agopka на 29 окт 2016, 17:25, променено общо 2 пъти.

Потребителски аватар

JustInCase AMXX
Потребител
Потребител
Мнения: 566
Регистриран: 14 окт 2016, 23:31
Се отблагодари: 3 пъти
Получена благодарност: 4 пъти

Re: War3FT - Как да добавите повече нива в вашия сървър

Мнение от JustInCase AMXX » 25 окт 2016, 22:54

Не мога да отворя .rar файла..
MANSION - HNS : 93.123.18.46:27016
ONLINE

Потребителски аватар

Petrowch0 ❤️CSKA❤️
Потребител
Потребител
Мнения: 220
Регистриран: 14 окт 2016, 19:23
Местоположение: de_dust2
Години: 24
Контакти:

Re: War3FT - Как да добавите повече нива в вашия сървър

Мнение от Petrowch0 ❤️CSKA❤️ » 25 окт 2016, 22:58

Оправи архива с файловете, защото дава грешка при отваряне или опит за разархивиране.
Изображение
Изображение


BABAZORO Боряке
VIP
VIP
Мнения: 50
Регистриран: 06 окт 2016, 11:23
Получена благодарност: 1 път
Години: 29
Контакти:

Re: War3FT - Как да добавите повече нива в вашия сървър

Мнение от BABAZORO Боряке » 26 окт 2016, 07:49

не е само неговият архив на много от темите с прикачени файлове е така... вие го оправете
извинявам се че пиша в тази тема но тук видях че стана въпрос :)
Ако на теб ти е ГОТ,и на мен ми е ГОТ

Потребителски аватар

Автор на темата
3agopka
Потребител
Потребител
Мнения: 65
Регистриран: 20 окт 2016, 21:36

Re: War3FT - Как да добавите повече нива в вашия сървър

Мнение от 3agopka » 26 окт 2016, 11:02

Това беше станало и с други форуми.Съвета ми е просто да не се прикачат файлове в самия форум а да се оставят линкове към тях.
Вариант 1 - Нова система в сайта за файлове достъпни за качване - на .rar и други видове архиви.
Вариант 2 - Всеки потребител ще си прави регистрация в google или abv.bg за да качва файловете по собствен път.

Потребителски аватар

JustInCase AMXX
Потребител
Потребител
Мнения: 566
Регистриран: 14 окт 2016, 23:31
Се отблагодари: 3 пъти
Получена благодарност: 4 пъти

Re: War3FT - Как да добавите повече нива в вашия сървър

Мнение от JustInCase AMXX » 26 окт 2016, 17:50

Сървъра крашва

Код: Избери всички

crash_20161026174658_1.dmp[4020]: Uploading dump (out-of-process)
/tmp/dumps/crash_20161026174658_1.dmp
crash_20161026174658_1.dmp[4020]: Finished uploading minidump (out-of-process):
success = no
crash_20161026174658_1.dmp[4020]: error: libcurl.so: cannot open shared object f
ile: No such file or directory
crash_20161026174658_1.dmp[4020]: file ''/tmp/dumps/crash_20161026174658_1.dmp''
, upload no: ''libcurl.so: cannot open shared object file: No such file or direc
tory''
Segmentation fault
MANSION - HNS : 93.123.18.46:27016
ONLINE

Потребителски аватар

Автор на темата
3agopka
Потребител
Потребител
Мнения: 65
Регистриран: 20 окт 2016, 21:36

Re: War3FT - Как да добавите повече нива в вашия сървър

Мнение от 3agopka » 26 окт 2016, 18:59

Урока не е виновен за това виж си кода трябва да си инсталираш пакет "libcurl.so"
Не съм много на ясно с Linux , малко съм работил с него ако искаш кажи коя версия си и ще погледна в google вместо теб ;)

Потребителски аватар

Petrowch0 ❤️CSKA❤️
Потребител
Потребител
Мнения: 220
Регистриран: 14 окт 2016, 19:23
Местоположение: de_dust2
Години: 24
Контакти:

Re: War3FT - Как да добавите повече нива в вашия сървър

Мнение от Petrowch0 ❤️CSKA❤️ » 26 окт 2016, 21:06

JustInCase написа:Сървъра крашва

Код: Избери всички

crash_20161026174658_1.dmp[4020]: Uploading dump (out-of-process)
/tmp/dumps/crash_20161026174658_1.dmp
crash_20161026174658_1.dmp[4020]: Finished uploading minidump (out-of-process):
success = no
crash_20161026174658_1.dmp[4020]: error: libcurl.so: cannot open shared object f
ile: No such file or directory
crash_20161026174658_1.dmp[4020]: file ''/tmp/dumps/crash_20161026174658_1.dmp''
, upload no: ''libcurl.so: cannot open shared object file: No such file or direc
tory''
Segmentation fault
Коя версия на dproto ползваш ?
Изображение

Потребителски аватар

JustInCase AMXX
Потребител
Потребител
Мнения: 566
Регистриран: 14 окт 2016, 23:31
Се отблагодари: 3 пъти
Получена благодарност: 4 пъти

Re: War3FT - Как да добавите повече нива в вашия сървър

Мнение от JustInCase AMXX » 26 окт 2016, 23:31

Petrowch0 написа: Коя версия на dproto ползваш ?

Има ли значение при положение, че ми тръгва когато не е 10 лвл-а ? :blush:
MANSION - HNS : 93.123.18.46:27016
ONLINE

Потребителски аватар

Автор на темата
3agopka
Потребител
Потребител
Мнения: 65
Регистриран: 20 окт 2016, 21:36

Re: War3FT - Как да добавите повече нива в вашия сървър

Мнение от 3agopka » 27 окт 2016, 11:09

значи си объркал нещо опитай на ново

Отговори

Върни се в “Полезни кодове/уроци”

Кой е на линия

Потребители, разглеждащи този форум: Няма регистрирани потребители и 2 госта