Добрый день
С вами Weezy
Этот урок по активации функции в C++.
Я буду это показывать на примере: SkillMaster
Вот код нашего SkillMaster
Код
void cheat_handle_skillmaster() { static int time=0;
if(cheat_state->_generic.skill == 1 && GetTickCount()-1000 > time) {
actor_info *info = actor_info_get(-1,0);
if(info->weapon_slot != 0) {
if(info->weapon[info->weapon_slot].ammo_clip == 0) {
if(info->weapon[info->weapon_slot].ammo > 7) info->weapon[info->weapon_slot].ammo_clip += 7;
else info->weapon[info->weapon_slot].ammo_clip = info->weapon[info->weapon_slot].ammo;
}
if(info->weapon[info->weapon_slot].ammo_clip > 0) {
info->weapon[info->weapon_slot].ammo_clip -= 1;
info->weapon[info->weapon_slot].ammo -= 1;
}
}
time = GetTickCount();
}
}
Куда-же нам его вписать?
Для этого нам помогает 1 строка.
Код
void cheat_handle_skillmaster
Ага, тут все ясно заходим в samp.cpp
Ищем там void cheat_handle
И после любого такого void"a пишем, наш код.
Отлично, но мы только на часть активировали его.
Дальше идём в cheat.h и находим
Код
struct cheat_state_generic
Вставляем там под любым int
Почему-же именно skill?
Потому на 2 строке мы видим
Код
if(cheat_state->_generic.skill == 1 && GetTickCount()-1000 > time) {
А именно
generic отсекаем остается skill.
Вот и все. Теперь давайте рассмотрим как активировать ее в меню:
Перед прочтением создайте свое меню.
Заходим в "dumb_menu.cpp"
Там в самом начале видим всякие
#define
К ним всем вписываем
Код
#define ID_HARD_MEGO_CHEAT 228
#define- не трогаем
ID_HARD_MEGO_CHEAT- любая переменная дайте любое имя
228- это целое число. Там пишете любое которого нету там.
Далее ищем например такую строку
Код
menu_item_add( menu_specialaction, NULL, "Urinate", ID_MENU_SPECIAL_ACTION_URINATE, MENU_COLOR_DEFAULT, NULL );
Далее вставляем например такой код.
Код
menu_item_add( menu_testing, NULL, "MEGA_CHEAT_HAHAHA", ID_HARD_MEGO_CHEAT, MENU_COLOR_DEFAULT, NULL );
menu_testing- структура вашего меню ( если вы создали свое вам будет понятно) эта то где будет сама функция
NULL- не трогаем
MEGA_CHEAT_HAHAHA- название
ID_HARD_MEGO_CHEAT- там самая #define ID_HARD_MEGO_CHEAT 228 в место ID_HARD_MEGO_CHEAT пишете то что вы писали тогда вместо 228 пишете тоже что и писали тогда.
Дальше ищем:
static int menu_callback_testing ( int op, struct menu_item *item )
Вы можете искать другое
testing-название вашего меню из урока по созданию меню.
И там впихиваем:
Код
if ( op == MENU_OP_ENABLED ) // типо функция вкл. или выкл.
{
switch (item->id)
{
case ID_HARD_MEGO_CHEAT: // создаем кейс для нашей функции.
return cheat_state->_generic.mega_cheat // возвращаем статус чита, для покраски пункта.
break;
}
}
if ( op == MENU_OP_SELECT ) // тут уже если мы на нее кликнули.
{
switch (item->id)
{
case ID_HARD_MEGO_CHEAT: // опять же кейс.
cheat_state->_generic.mega_cheat ^=1; // устанавливаем статус читу, т.е включаем/выключаем.
break;
}
}
Сейчас я опишу что куда и как:
case ID_HARD_MEGO_CHEAT это опять наш тот самый #define в место ID_HARD_MEGO_CHEAT пишем то что писали там.
Там есть опять такой код:
case ID_HARD_MEGO_CHEAT делаем тоже самое.
Дальше:
return cheat_state->_generic.mega_cheat вот и наш generic если вы читали то что выше вы наверное поняли что в место mega_cheat надо вставить skill, почему-же? В коде с нашем скилл мастером мы видим такой код:
Код
if(cheat_state->_generic.skill == 1 && GetTickCount()-1000 > time) {
а именно generic.skill вот вам и ответ PRUF
Дальше мы видим это:
cheat_state->_generic.mega_cheat ^=1;
опять -же делаем то что я говорил выше.
Вот и все теперь компилируем и PRUFIT!!!