Как создать новую расу?
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 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
Замечания:
Как это исправить? Вот файл, если он может мне помочь. Я больше "зеленого" в этой области. Спасибо заранее
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
Замечания:
теперь такая стала ошибка может кто поможет
new szMessage[256]; stock cssbColoredPrint(const id, const input[], any:...) { new count = 1, players[32] static msg[512] vformat(msg, 512, input, 3) replace_all(msg, 512, "!g", "^x04") replace_all(msg, 512, "!y", "^x01") replace_all(msg, 512, "!t", "^x03") if (id) players[0] = id; else get_players(players, count, "ch") { for (new i = 0; i < count; i++) { if (is_user_connected(players)) { message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players); write_byte(players); write_string(msg); message_end(); } } } } stock cssbChatColor(const id, const input[], any:...) { new count = 1, players[32] static msg[191] vformat(msg, 190, input, 3) replace_all(msg, 190, "!g", "^4") replace_all(msg, 190, "!y", "^1") replace_all(msg, 190, "!t", "^3") if (id) players[0] = id; else get_players(players, count, "ch") { for (new i = 0; i < count; i++) { if (is_user_connected(players)) { message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players); write_byte(players); write_string(msg); message_end(); } } } } stock ham_strip_weapon(id,weapon[]) { if(!equal(weapon,"weapon_",7)) return 0 new wId = get_weaponid(weapon) if(!wId) return 0 new wEnt while((wEnt = engfunc(EngFunc_FindEntityByString,wEnt,"classname",weapon)) && pev(wEnt,pev_owner) != id) {} if(!wEnt) return 0 if(get_user_weapon(id) == wId) ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt) if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt)) return 0 ExecuteHamB(Ham_Item_Kill,wEnt); set_pev(id,pev_weapons,pev(id,pev_weapons) & ~(1<<wId)) return 1 }
Сообщение отредактировал 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
Замечания:
Полезная статья ! Добавлено (20.08.2016, 23:17) ---------------------------------------------ApXaHreJI_70 , Лучше не заморачивайся и не ломай себе голову. Заплати какому-ту скрипету, и пусть тебе в бьет в мод, ибо не так все просто это делать. Если бы так легко было создавать расы, то сейчас столько бы было уже "Продавцов" и серверов с +50-ми расами