Files
GTAConnectedDocs/Trident/MD_Base_Setup/MDB_Menu_Functions.c
2026-01-28 21:32:26 +04:00

347 lines
9.8 KiB
C

/**
* @ MD EXTEND+
* @ Version MDv13 TRIDENT(Essentials Based)
* @ MADE BY - DEVILSDESIGN & IIV_NATHAN_VII & SHOCKixiXixiWAVE
*/
#pragma once
//! Menu Functions
void menu_hold_pressed(uint p_id){
uint button1;
uint button2;
switch(p_id)
{
case 1:
{
button1 = BUTTON_DPAD_UP;
button2 = KEY_UP_ARROW;
}
break;
case 2:
{
button1 = BUTTON_DPAD_DOWN;
button2 = KEY_DOWN_ARROW;
}
break;
case 3:
{
button1 = BUTTON_DPAD_LEFT;
button2 = KEY_LEFT_ARROW;
}
break;
case 4:
{
button1 = BUTTON_DPAD_RIGHT;
button2 = KEY_RIGHT_ARROW;
}
break;
}
if (IS_BUTTON_PRESSED(0, button1) || IS_GAME_KEYBOARD_KEY_PRESSED(button2)){
press_id = p_id;
if (hold_counter > 40){
press_counter_timesby++;
hold_counter = 0;
}
hold_counter++;
press_counter++;
press_counter *= press_counter_timesby;
}
else if (press_id == p_id){
press_counter_timesby = 1;
hold_counter = 0;
}
}
bool menu_up_pressed(bool counter){
if ((IS_BUTTON_JUST_PRESSED(0, BUTTON_DPAD_UP) || IS_GAME_KEYBOARD_KEY_JUST_PRESSED(KEY_UP_ARROW))
|| (press_counter > 6 && (IS_BUTTON_PRESSED(0, BUTTON_DPAD_UP) || IS_GAME_KEYBOARD_KEY_PRESSED(KEY_UP_ARROW)))){
SetBit(MD_Misc_OptionsBitSet, MD_MISC_RESET_COUNTER, true);
return true;
}
if (counter)
menu_hold_pressed(1);
return false;
}
bool menu_down_pressed(bool counter){
if ((IS_BUTTON_JUST_PRESSED(0, BUTTON_DPAD_DOWN) || IS_GAME_KEYBOARD_KEY_JUST_PRESSED(KEY_DOWN_ARROW))
|| (press_counter > 6 && (IS_BUTTON_PRESSED(0, BUTTON_DPAD_DOWN) || IS_GAME_KEYBOARD_KEY_PRESSED(KEY_DOWN_ARROW)))){
SetBit(MD_Misc_OptionsBitSet, MD_MISC_RESET_COUNTER, true);
return true;
}
if (counter)
menu_hold_pressed(2);
return false;
}
bool menu_left_pressed(bool counter){
if ((IS_BUTTON_JUST_PRESSED(0, DPAD_LEFT) || IS_GAME_KEYBOARD_KEY_JUST_PRESSED(KEY_LEFT_ARROW))
|| (press_counter > 6 && (IS_BUTTON_PRESSED(0, DPAD_LEFT) || IS_GAME_KEYBOARD_KEY_PRESSED(KEY_LEFT_ARROW)))){
SetBit(MD_Misc_OptionsBitSet, MD_MISC_RESET_COUNTER, true);
return true;
}
if (counter)menu_hold_pressed(3);
return false;
}
bool menu_right_pressed(bool counter){
if ((IS_BUTTON_JUST_PRESSED(0, DPAD_RIGHT) || IS_GAME_KEYBOARD_KEY_JUST_PRESSED(KEY_RIGHT_ARROW))
|| (press_counter > 6 && (IS_BUTTON_PRESSED(0, DPAD_RIGHT) || IS_GAME_KEYBOARD_KEY_PRESSED(KEY_RIGHT_ARROW)))){
SetBit(MD_Misc_OptionsBitSet, MD_MISC_RESET_COUNTER, true);
return true;
}
if (counter)menu_hold_pressed(4);
return false;
}
bool menu_LB_pressed(bool counter){
if ((IS_BUTTON_JUST_PRESSED(0, BUTTON_LB) || IS_GAME_KEYBOARD_KEY_JUST_PRESSED(KEY_L))
|| (press_counter > 6 && (IS_BUTTON_PRESSED(0, BUTTON_LB) || IS_GAME_KEYBOARD_KEY_PRESSED(KEY_L)))){
SetBit(MD_Misc_OptionsBitSet, MD_MISC_RESET_COUNTER, true);
return true;
}
if (counter)menu_hold_pressed(3);
return false;
}
bool menu_RB_pressed(bool counter){
if ((IS_BUTTON_JUST_PRESSED(0, BUTTON_RB) || IS_GAME_KEYBOARD_KEY_JUST_PRESSED(KEY_R))
|| (press_counter > 6 && (IS_BUTTON_PRESSED(0, BUTTON_RB) || IS_GAME_KEYBOARD_KEY_PRESSED(KEY_R)))){
SetBit(MD_Misc_OptionsBitSet, MD_MISC_RESET_COUNTER, true);
return true;
}
if(counter)menu_hold_pressed(4);
return false;
}
bool menu_forward_pressed(void){
if (IS_BUTTON_JUST_PRESSED(0, BUTTON_A) || IS_GAME_KEYBOARD_KEY_JUST_PRESSED(KEY_ENTER))
return true;
return false;
}
bool menu_back_pressed(void){
if (IS_BUTTON_JUST_PRESSED(0, BUTTON_B) || IS_GAME_KEYBOARD_KEY_JUST_PRESSED(KEY_BACKSPACE))
return true;
return false;
}
/**Crossbrowsing MenuItems**/
//Keeping the type between 20 and 30 so if type is between this range it will crossbrowse.
void AddFunction_CB(char* item_text){
itemCount++;
menu_item[itemCount].name = item_text;
SetBit(MenuActionBitSet, (itemCount - 1), true);
menu_item[itemCount].type = 21;//Former 12
}
void AddFunction_Num_CB(char* item_text,int maxval){
itemCount++;
menu_item[itemCount].name = item_text;
SetBit(MenuActionBitSet, (itemCount - 1), true);
menu_item[itemCount].num_val = 1;
menu_item[itemCount].extra_val = maxval;
menu_item[itemCount].type = 22; //Former 8
}
void AddFunction_Value_CB(char* item_text,int maxval){
itemCount++;
menu_item[itemCount].name = item_text;
SetBit(MenuActionBitSet, (itemCount - 1), true);
menu_item[itemCount].num_val = 1;
menu_item[itemCount].extra_val = maxval;
menu_item[itemCount].type = 23; //Former 9
//Add_StringValue(itemCount);
}
void AddFunction_ValueLine_CB(int maxval){
itemCount++;
SetBit(MenuActionBitSet, (itemCount - 1), true);
menu_item[itemCount].num_val = 1;
menu_item[itemCount].extra_val = maxval;
menu_item[itemCount].type = 24; //Former 15
//Add_StringValue(itemCount);
}
void AddBool_CB(char* item_text, bool item_bool){
itemCount++;
menu_item[itemCount].name = item_text;
SetBit(MenuActionBitSet, (itemCount - 1), true);
menu_item[itemCount].extra_val = item_bool;
menu_item[itemCount].type = 25; //Former 3
}
void AddBool_NoHighlight_CB(char* item_text){
itemCount++;
menu_item[itemCount].name = item_text;
SetBit(MenuActionBitSet, (itemCount - 1), true);
menu_item[itemCount].type = 26; //Former 12
}
void AddGxt_Model_CB(uint item_gxt_hash){
itemCount++;
SetBit(MenuActionBitSet, (itemCount - 1), true);
menu_item[itemCount].num_val = item_gxt_hash;
menu_item[itemCount].type = 27; //Former 5
}
/**END**/
void AddSubMenu(char* item_text){
itemCount++;
menu_item[itemCount].name = item_text;
menu_item[itemCount].type = 13;
}
void AddPlayername(char* item_text){
itemCount++;
menu_item[itemCount].name = item_text;
menu_item[itemCount].type = 7;
}
void Add_NotPresent(char* item_text){
itemCount++;
menu_item[itemCount].name = item_text;
menu_item[itemCount].type = 6;
}
void Add_JumpOver(char* item_text){
itemCount++;
menu_item[itemCount].name = item_text;
menu_item[itemCount].type = 10;
}
void Add_Error(char* item_text){
itemCount++;
menu_item[itemCount].name = item_text;
menu_item[itemCount].type = 11;
}
void AddFunction(char* item_text){
itemCount++;
menu_item[itemCount].name = item_text;
SetBit(MenuActionBitSet, (itemCount - 1), true);
menu_item[itemCount].type = 12;
}
void AddFunction_Num(char* item_text,int maxval){
itemCount++;
menu_item[itemCount].name = item_text;
SetBit(MenuActionBitSet, (itemCount - 1), true);
menu_item[itemCount].num_val = 1;
menu_item[itemCount].extra_val = maxval;
menu_item[itemCount].type = 8;
}
void AddFunction_NumSphere(char* item_text,int maxval){
itemCount++;
menu_item[itemCount].name = item_text;
SetBit(MenuActionBitSet, (itemCount - 1), true);
menu_item[itemCount].num_val = Delete_Distance_Radius;
menu_item[itemCount].extra_val = maxval;
menu_item[itemCount].type = 14;
}
void AddFunction_Value(char* item_text,int maxval){
itemCount++;
menu_item[itemCount].name = item_text;
SetBit(MenuActionBitSet, (itemCount - 1), true);
menu_item[itemCount].num_val = 1;
menu_item[itemCount].extra_val = maxval;
menu_item[itemCount].type = 9;
//Add_StringValue(itemCount);
}
void AddFunction_ValueLine(int maxval){
itemCount++;
SetBit(MenuActionBitSet, (itemCount - 1), true);
menu_item[itemCount].num_val = 1;
menu_item[itemCount].extra_val = maxval;
menu_item[itemCount].type = 15;
//Add_StringValue(itemCount);
}
void AddBool(char* item_text, bool item_bool){
itemCount++;
menu_item[itemCount].name = item_text;
SetBit(MenuActionBitSet, (itemCount - 1), true);
menu_item[itemCount].extra_val = item_bool;
menu_item[itemCount].type = 3;
}
void AddBool_NoHighlight(char* item_text){
itemCount++;
menu_item[itemCount].name = item_text;
SetBit(MenuActionBitSet, (itemCount - 1), true);
menu_item[itemCount].type = 12;
}
void AddGxt_Model(uint item_gxt_hash){
itemCount++;
SetBit(MenuActionBitSet, (itemCount - 1), true);
menu_item[itemCount].num_val = item_gxt_hash;
menu_item[itemCount].type = 5;
}
void Menu_Add_Item_Sco(bool item_bool){
menu_item[itemCount].extra_val = item_bool;
menu_item[itemCount].type = 4;
}
void Menu_Add_Action(void){
SetBit(MenuActionBitSet, (itemCount - 1), true);
}
void Load_Sco(char* item_text, char* item_script){
//Make an item type for this
if (DOES_SCRIPT_EXIST(item_script)){
AddSubMenu(item_text);
Essentials_script[itemCount] = item_script;
bool enabled;
if (GET_NUMBER_OF_INSTANCES_OF_STREAMED_SCRIPT(item_script) == 1)
enabled = true;
Menu_Add_Item_Sco(enabled);
Menu_Add_Action();
}
else{
if(GetBit(MD_Misc_OptionsBitSet, MD_MISC_SHOW_MISSING_SCO)){
Add_NotPresent(item_text);
}
}
}
void Essentials_apply(void){
if (menu_item[SelectedItem].extra_val){
TERMINATE_ALL_SCRIPTS_WITH_THIS_NAME(Essentials_script[SelectedItem]);
menu_item[SelectedItem].extra_val = false;
}
else{
TERMINATE_ALL_SCRIPTS_WITH_THIS_NAME(Essentials_script[SelectedItem]);
START_NEW_SCRIPT(Essentials_script[SelectedItem], 1024);
MARK_SCRIPT_AS_NO_LONGER_NEEDED(Essentials_script[SelectedItem]);
Menu_Has_Sco_Loaded = false;
menu_item[SelectedItem].extra_val = true;
}
}
void Modmanager(void){
if(!Menu_Has_Sco_Loaded && !menu_item[SelectedItem].extra_val)load_script = Essentials_script[SelectedItem];
else Essentials_apply();
}
void Reset_Menu(void){
int I;
for (I = 1; I < (itemCount + 1); I++){
menu_item[I].name = null_string;
menu_item[I].type = 0;
menu_item[I].num_val = 1;
menu_item[I].extra_val = 0;
SetBit(MenuActionBitSet, (I - 1), false);
}
Menu_Start_Pos_y = menu_consts_start_y;
menu_max = menu_consts_max;
itemCount = 0;
}
void Base_Error(uint Error_id){
//if (menu_item[SelectedItem].action) Menu_Action_Error = true;
if(GetBit(MenuActionBitSet,SelectedItem - 1))SetBit(MD_Misc_OptionsBitSet, MD_MISC_MENU_ACTION_ERROR, true);
Reset_Menu();
MENU_HEADER = Essentials_Error;
if (Error_id == MODMANAGER_ERROR_ID_INVALID)AddSubMenu(Essentials_Error_invalid);
else if (Error_id == MODMANAGER_ERROR_ID_SCRIPT)AddSubMenu(Essentials_Error_script);
AddSubMenu(Essentials_Error_goback);
SetBit(MD_Misc_OptionsBitSet, MD_MISC_MENU_IN_ERROR, true);
PLAY_AUDIO_EVENT("FRONTEND_MENU_ERROR");
}