Добро пожаловать на форум, Гость, это ваша панель
  • Страница 1 из 1
  • 1
Форум Perfect Soft » Моды и AMX Скриптинг CS 1.6 » CSSB War3FT MOD » Как создать новую расу? (ответ тут)
Как создать новую расу?
KinD
Дата: Пятница, 26.12.2014, 12:08 | Сообщение # 1
офлайн

  • Сообщения: 1148
  • Награды: 22
  • Замечания:
 
Думаю многих интересует,как создать расу(надоели...)?Для этого нужно а)сделать все по пунктам б)уметь "копировать и вставить"(нужные функции из других плагинов) в)думать(если будите брать код из других плагинов,то будут ошибки(к примеру id вместо idUser и тд.))
НАЧНЕМ!
1)Нам нужно зайти в constants.inl
- Ищем MAX_RACES > увеличиваем на 1
- Выше будет #define RACE_CHAMELEON 9
- Ниже добавляем #define RACE_TEST 10
- Ищем
Код
#define PASS_ORB            35

- Ниже добавляем 

Код
#define SKILL_TEST1            36
#define SKILL_TEST2            37
#define SKILL_TEST3            38
#define ULTIMATE_TEST         39


2)Заходим в skills_manager.inl
- Опускаемся ниже и видим

Код
g_SkillOwner[SKILL_IMPALE            ]   = RACE_CRYPT;
    g_SkillOwner[SKILL_SPIKEDCARAPACE      ]   = RACE_CRYPT;
    g_SkillOwner[SKILL_CARRIONBEETLES      ]   = RACE_CRYPT;
    g_SkillOwner[ULTIMATE_LOCUSTSWARM      ]   = RACE_CRYPT;
    g_SkillOwner[PASS_ORB               ]   = RACE_CRYPT;


-Ниже добавляем

Код
//new race
    g_SkillOwner[SKILL_TEST1            ]   = RACE_TEST;
    g_SkillOwner[SKILL_TEST2            ]   = RACE_TEST;
    g_SkillOwner[SKILL_TEST3            ]   = RACE_TEST;
    g_SkillOwner[ULTIMATE_TEST            ]   = RACE_TEST;
     
    g_SkillType[SKILL_TEST1               ]   = SKILL_TYPE_TRAINABLE;
    g_SkillType[SKILL_TEST2               ]   = SKILL_TYPE_TRAINABLE;
    g_SkillType[SKILL_TEST3               ]   = SKILL_TYPE_TRAINABLE;
    g_SkillType[ULTIMATE_TEST            ]   = SKILL_TYPE_ULTIMATE;
     
    g_SkillOrder[SKILL_TEST1            ]   = SKILL_POS_1;
    g_SkillOrder[SKILL_TEST2            ]   = SKILL_POS_2;
    g_SkillOrder[SKILL_TEST3            ]   = SKILL_POS_3;
    g_SkillOrder[ULTIMATE_TEST            ]   = SKILL_POS_4;




3)Заходим в skills.inl
- Видим MAX_SKILLS ЧИСЛО.
- Увеличиваем его на 4(т.е было 36 стало 40)
- Можно добавить значения для скилов

Код
new const Float:p_test_1[MAX_SKILL_LEVEL] = {0.1,
0.2,
0.3
}; // (skill 1)
new const Float:p_test2[MAX_SKILL_LEVEL] = {0.1,
0.2,
0.3
}; //(skill 2)
new const Float:p_test3[MAX_SKILL_LEVEL] = {0.1,
0.2,
0.3
}; //(skill 3)


4)Заходим в ultimate.h
- Ищем 

Код
new g_UltimateIcons[8][32] =  
                {
                   "dmg_rad",            // Undead
                   "item_longjump",      // Human Alliance
                   "dmg_shock",         // Orcish Horde
                   "item_healthkit",      // Night Elf
                   "dmg_heat",            // Blood Mage
                   "suit_full",         // Shadow Hunter
                   "cross",            // Warden
                   "dmg_gas"            // Crypt Lord
                };


- Заменяем на

Код
new g_UltimateIcons[MAX_RACES][32] =  
                {
                   "dmg_rad",            // Undead
                   "item_longjump",      // Human Alliance
                   "dmg_shock",         // Orcish Horde
                   "item_healthkit",      // Night Elf
                   "dmg_heat",            // Blood Mage
                   "suit_full",         // Shadow Hunter
                   "cross",            // Warden
                   "dmg_gas",            // Crypt Lord
                   "",
                   "dmg_heat"            //Test race icon ultimate
                };


5)Заходим в Ultimate.inl
- Ищем ULT_Icon( idUser, flag )

- Видим case
Код
8: r=0,   g=255,   b=0;      // Crypt Lord


- Ниже добавляем
Код
case 10: r=0,   g=255,   b=0;      // Test race(color)


6)Заходим в .sma(выйти из папки war3ft)
- Ищем
Код
#include "war3ft/race_chameleon.inl"      // Chameleon      - 9

- Ниже добавляем
Код
#include "war3ft/race_test.inl"      // TEST      - 10


7)Создаем в папке war3ft  файл race_test.inl

8)Добавляем умения.(2 атакующих и 1 защитный навык)
-Идем в events.inl
-Ищем client_damage
-Ниже видим
Код
CL_SkillsOffensive( iAttacker, iVictim, iHitPlace );

-Ниже добавляем 

Код
TEST_SkillsOffensive1( iAttacker, iVictim, iHitPlace );
TEST_SkillsOffensive2( iAttacker, iVictim, iHitPlace );


-Идем дальше и видим 
Код
CL_SkillsDefensive( iAttacker, iVictim, iDamage, iHitPlace );

-Ниже добавляем
Код
TEST_SkillsDefensive( iAttacker, iVictim, iDamage, iHitPlace );


9)Идем в race_test.inl и добавляем

Код
TEST_SkillsOffensive1( iAttacker, iVictim, iHitPlace )
{
    static iSkillLevel;

    iSkillLevel = SM_GetSkillLevel( iAttacker, SKILL_TEST1 );
    if ( iSkillLevel > 0 )
    {
       if ( random_float(MIN_PERCENT_SHADOW, MAX_PERCENT_SHADOW ) <= p_test_1[iSkillLevel-1] )       
       {
          emit_sound( iVictim, CHAN_STATIC, g_szSounds[SOUND_SHADOWSTRIKE], 1.0, ATTN_NORM, 0, PITCH_NORM );
          client_print(iVictim,print_chat,"Skill 1 attack")
       }
       else if ( get_pcvar_num( CVAR_wc3_psychostats ) )
       {
          new WEAPON = CSW_SHADOW - CSW_WAR3_MIN;

          iStatsShots[iAttacker][WEAPON]++;
       }
    }

}
TEST_SkillsOffensive2( iAttacker, iVictim, iHitPlace )
{
    static iSkillLevel;

    iSkillLevel = SM_GetSkillLevel( iAttacker, SKILL_TEST2 );
    if ( iSkillLevel > 0 )
    {
       if ( random_float(MIN_PERCENT_SHADOW, MAX_PERCENT_SHADOW ) <= p_test_2[iSkillLevel-1] )       
       {
          emit_sound( iVictim, CHAN_STATIC, g_szSounds[SOUND_SHADOWSTRIKE], 1.0, ATTN_NORM, 0, PITCH_NORM );
          client_print(iVictim,print_chat,"Skill 2 attack")
       }
       else if ( get_pcvar_num( CVAR_wc3_psychostats ) )
       {
          new WEAPON = CSW_SHADOW - CSW_WAR3_MIN;

          iStatsShots[iAttacker][WEAPON]++;
       }
    }

}

TEST_SkillsDefensive( iAttacker, iVictim, iDamage, iHitPlace )
{
    static iSkillLevel;

    iSkillLevel = SM_GetSkillLevel( iVictim, SKILL_TEST3 );
    if ( iSkillLevel > 0 )
    {
       if ( random_float(MIN_PERCENT_SHADOW, MAX_PERCENT_SHADOW ) <= p_test_1[iSkillLevel-1] )       
       {
          emit_sound( iAttacker, CHAN_STATIC, g_szSounds[SOUND_SHADOWSTRIKE], 1.0, ATTN_NORM, 0, PITCH_NORM );
          client_print(Attacker,print_chat,"Skill 3 reflect")
       }
       else if ( get_pcvar_num( CVAR_wc3_psychostats ) )
       {
          new WEAPON = CSW_SHADOW - CSW_WAR3_MIN;

          iStatsShots[iVictim][WEAPON]++;
       }
    }

}


Готово!
Сделаем вызов командой.
Идем в client_commands.inl
Ищем CMD_Handle и добавляем ниже changerace.

Код
else if ( CMD_Equal( idUser, szCmd, "newrace" ) )
{

          WC3_SetRace(idUser, 10);
}
 



Вопрос/ответ
1)Я хочу сделать "ability" умение,как это сделать?
- Вам необходимо зайти в clientcommands.inl > найти else if ( CMD_Equal( idUser,  szCmd, "ability" ) )
- Добавить условие if(p_data[idUser][P_RACE]==RACE_TEST) function_ability(idUser)//вызов функции(заменить на свое)

2)Я хочу сделать умение наподобие "Аура преданности"(Доп.хп).
- Вам необходимо зайти skill_manager.inl > найти SM_SkillSet( idUser, iSkillID )
- Добавить

Код
case SKILL_TEST:               // TEST
       {
          Test_Function( idUser );//заменить на вашу
       }




3)Как сделать "супер навык",который срабатывает при наведении на цель?
- Вам необходимо зайти в client_commands.inl > найти cmd_Ultimate(idUser) > опускаемся ниже и видим  case ULTIMATE_LOCUSTSWARM:
- Ниже добавляем свой 

Код
case ULTIMATE_TEST:
{
    if ( !p_data_b[idUser][PB_ISSEARCHING] )
    {
       p_data_b[idUser][PB_ISSEARCHING] = true;

       // Don't continue if task already exists...
       if ( !task_exists( TASK_ULTPING + idUser ) )
       {
          new parm[2];
          parm[0] = idUser;
          parm[1] = 5;
          _ULT_Ping( parm );
       }
    }
}


- Идем в events.inl > ищем TRIGGER_TraceLine > ищем 

Код
else if ( SM_GetSkillLevel( iAttacker, ULTIMATE_IMMOLATE ) > 0 )
{
    BM_ULT_Immolate( iAttacker, iVictim );
}


Ниже добавляем свой

Код
else if ( SM_GetSkillLevel( iAttacker, ULTIMATE_TEST ) > 0 )
{
    TEST_ULT( iAttacker, iVictim );
}


P.S Для новых рас нужно сделать меню,либо вызов командой(для новичков самый лучший вариант).Если у вас упал сервер(когда вы взяли расу),то удалите бд.


Skype:daywerok
 
dancerek
Дата: Вторник, 06.01.2015, 23:12 | Сообщение # 2
офлайн

  • Сообщения: 65
  • Награды: 0
  • Замечания:
 
Ummm, and how about adding new race to MySQL? I have alredy done all above steps, and I managed to compile war3ft.amxx without any errors, what means plugin is written correctly. But when i upload it on serwer, there is no race to choose - it looks like database doesn't work correctly. Then I have came up with idea to add my new race to MySQL, but I don't know how... I want to do it carefully in order to not destroy all files with players XP...
If you eventually could help me, I would be very grateful.
Peace!


Сообщение отредактировал dancerek - Вторник, 06.01.2015, 23:14
 
KinD
Дата: Вторник, 06.01.2015, 23:22 | Сообщение # 3
офлайн

  • Сообщения: 1148
  • Награды: 22
  • Замечания:
 
No,everything should is automatically created.

Skype:daywerok
 
dancerek
Дата: Среда, 07.01.2015, 00:00 | Сообщение # 4
офлайн

  • Сообщения: 65
  • Награды: 0
  • Замечания:
 
So I only have to compile the plugin, upload it on server, and database should change automatically? I don't have to do anything with it?
 
BABAZORO4450
Дата: Суббота, 31.01.2015, 18:28 | Сообщение # 5
офлайн

  • Сообщения: 42
  • Награды: 0
  • Замечания:
 
Делайте все, как описано выше.
Но когда я получаю ошибки компиляции


Код
//AMXXPC compile.exe
// by the AMX Mod X Dev Team

//// war3ft.sma
// C:\Program Files\Valve\Counter-Strike 1.6 Sector Edition\cstrike\addons\amxmo
dx\scripting\war3ft/race_test.inl(11) : warning 213: tag mismatch
// C:\Program Files\Valve\Counter-Strike 1.6 Sector Edition\cstrike\addons\amxmo
dx\scripting\war3ft/race_test.inl(11) : warning 213: tag mismatch
// C:\Program Files\Valve\Counter-Strike 1.6 Sector Edition\cstrike\addons\amxmo
dx\scripting\war3ft/race_test.inl(11) : error 017: undefined symbol "p_test_1"
// C:\Program Files\Valve\Counter-Strike 1.6 Sector Edition\cstrike\addons\amxmo
dx\scripting\war3ft/race_test.inl(11) : warning 215: expression has no effect
// C:\Program Files\Valve\Counter-Strike 1.6 Sector Edition\cstrike\addons\amxmo
dx\scripting\war3ft/race_test.inl(11) : error 001: expected token: ";", but foun
d "]"
// C:\Program Files\Valve\Counter-Strike 1.6 Sector Edition\cstrike\addons\amxmo
dx\scripting\war3ft/race_test.inl(11) : error 029: invalid expression, assumed z
ero
// C:\Program Files\Valve\Counter-Strike 1.6 Sector Edition\cstrike\addons\amxmo
dx\scripting\war3ft/race_test.inl(11) : fatal error 107: too many error messages
on one line
//
// Compilation aborted.
// 4 Errors.
// Could not locate output file C:\Program Files\Valve\Counter-Strike 1.6 Sector
Edition\cstrike\addons\amxmodx\scripting\compiled\war3ft.amx (compile failed).
//
// Compilation Time: 2,52 sec
// ----------------------------------------

Press enter to exit ...


Сообщение отредактировал BABAZORO4450 - Суббота, 31.01.2015, 18:30
 
SMaster
Дата: Суббота, 31.01.2015, 18:33 | Сообщение # 6
офлайн

  • Сообщения: 2189
  • Награды: 46
  • Замечания:
 
Цитата BABAZORO4450 ()
undefined symbol "p_test_1"
Этим все сказано!
Уже видно,что делаешь по другому исходя из ошибок,хотя данная переменная в теме есть.
У тебя почему-то нет ее...


Наша группа вконтакте http://vk.com/nano_world_cs

Контакты:
ICQ 607786179
Skype xonahead

 
BABAZORO4450
Дата: Суббота, 31.01.2015, 19:54 | Сообщение # 7
офлайн

  • Сообщения: 42
  • Награды: 0
  • Замечания:
 
Как это исправить?
Вот файл, если он может мне помочь.
Я больше "зеленого" в этой области.
Спасибо заранее smile
Прикрепления: race_test.inl (2.0 Kb)
 
SMaster
Дата: Суббота, 31.01.2015, 19:59 | Сообщение # 8
офлайн

  • Сообщения: 2189
  • Награды: 46
  • Замечания:
 
BABAZORO4450,
Код
3)Заходим в skills.inl
- Видим MAX_SKILLS ЧИСЛО.
- Увеличиваем его на 4(т.е было 36 стало 40)
- Можно добавить значения для скилов

new const Float:p_test_1[MAX_SKILL_LEVEL] = {0.1,  
  0.2,  
  0.3  
  }; // (skill 1)  
  new const Float:p_test2[MAX_SKILL_LEVEL] = {0.1,  
  0.2,  
  0.3  
  }; //(skill 2)  
  new const Float:p_test3[MAX_SKILL_LEVEL] = {0.1,  
  0.2,  
  0.3  
  }; //(skill 3)



Наша группа вконтакте http://vk.com/nano_world_cs

Контакты:
ICQ 607786179
Skype xonahead

 
BABAZORO4450
Дата: Пятница, 06.02.2015, 19:16 | Сообщение # 9
офлайн

  • Сообщения: 42
  • Награды: 0
  • Замечания:
 
SMaster ,  Я сделал все, как описано выше.
Несколько раз и здесь ошибка


Код
//AMXXPC compile.exe
// by the AMX Mod X Dev Team

//// war3ft.sma
// C:\Documents and Settings\5463\Desktop\New Folder (2)\cstrike\addons\amxmodx\
scripting\war3ft/race_ruler.inl(51) : error 017: undefined symbol "SKILL_FIRE"
// C:\Documents and Settings\5463\Desktop\New Folder (2)\cstrike\addons\amxmodx\
scripting\war3ft/race_ruler.inl(54) : error 017: undefined symbol "p_wind"
// C:\Documents and Settings\5463\Desktop\New Folder (2)\cstrike\addons\amxmodx\
scripting\war3ft/race_ruler.inl(54) : warning 215: expression has no effect
// C:\Documents and Settings\5463\Desktop\New Folder (2)\cstrike\addons\amxmodx\
scripting\war3ft/race_ruler.inl(54) : error 001: expected token: ";", but found
"]"
// C:\Documents and Settings\5463\Desktop\New Folder (2)\cstrike\addons\amxmodx\
scripting\war3ft/race_ruler.inl(54) : error 029: invalid expression, assumed zer
o
// C:\Documents and Settings\5463\Desktop\New Folder (2)\cstrike\addons\amxmodx\
scripting\war3ft/race_ruler.inl(54) : fatal error 107: too many error messages o
n one line
//
// Compilation aborted.
// 5 Errors.
// Could not locate output file C:\Documents and Settings\5463\Desktop\New Folde
r (2)\cstrike\addons\amxmodx\scripting\compiled\war3ft.amx (compile failed).
//
// Compilation Time: 2,52 sec
// ----------------------------------------

Press enter to exit ...
 
ApXaHreJI_70
Дата: Четверг, 04.08.2016, 19:09 | Сообщение # 10
офлайн

  • Сообщения: 7
  • Награды: 0
  • Замечания:
 
Делал ве как тут написано 4 раза и толку нет 
вот что получаю 
 
Ихtианdр
Дата: Четверг, 04.08.2016, 22:49 | Сообщение # 11
офлайн

  • Сообщения: 142
  • Награды: 0
  • Замечания:
 
ApXaHreJI_70, Ну так переводи ошибки, в чём проблема?
У тебя не объявлена переменная и синтаксические ошибки. Там написаны строчки, в которых нужно смотреть.
 
ApXaHreJI_70
Дата: Пятница, 05.08.2016, 20:43 | Сообщение # 12
офлайн

  • Сообщения: 7
  • Награды: 0
  • Замечания:
 
теперь такая стала ошибка


может кто поможет



Сообщение отредактировал ApXaHreJI_70 - Пятница, 05.08.2016, 20:44
 
Ихtианdр
Дата: Воскресенье, 14.08.2016, 22:58 | Сообщение # 13
офлайн

  • Сообщения: 142
  • Награды: 0
  • Замечания:
 
ApXaHreJI_70, Я тебе уже писал: переводи ошибки! В чём проблема? Не знаешь английский - вбей в переводчик!
 
jokesnewtv
Дата: Суббота, 20.08.2016, 23:17 | Сообщение # 14
офлайн

  • Сообщения: 4
  • Награды: 0
  • Замечания:
 
Полезная статья ! smile

Добавлено (20.08.2016, 23:17)
---------------------------------------------
ApXaHreJI_70, Лучше не заморачивайся и не ломай себе голову. Заплати какому-ту скрипету, и пусть тебе в бьет в мод, ибо не так все просто это делать. Если бы так легко было создавать расы, то сейчас столько бы было уже "Продавцов" и серверов с +50-ми расами

 
Форум Perfect Soft » Моды и AMX Скриптинг CS 1.6 » CSSB War3FT MOD » Как создать новую расу? (ответ тут)
  • Страница 1 из 1
  • 1
Поиск: