gopro2027

Clone of GTA V Phone Scaleform Renderer

Jan 24th, 2019
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //By gopro_2027
  2. //paradisesprx.com
  3.  
  4. void func_38(int scaleform, char *thang, float uParam2, float fParam3, float fParam4, float fParam5, float fParam6)
  5. {
  6.  
  7.     GRAPHICS::_PUSH_SCALEFORM_MOVIE_FUNCTION(scaleform, thang);
  8.     GRAPHICS::_PUSH_SCALEFORM_MOVIE_FUNCTION_PARAMETER_INT(uParam2);
  9.     if (fParam3 != -1.0f)
  10.     {
  11.         GRAPHICS::_PUSH_SCALEFORM_MOVIE_FUNCTION_PARAMETER_INT(fParam3);
  12.     }
  13.     if (fParam4 != -1.0f)
  14.     {
  15.         GRAPHICS::_PUSH_SCALEFORM_MOVIE_FUNCTION_PARAMETER_INT(fParam4);
  16.     }
  17.     if (fParam5 != -1.0f)
  18.     {
  19.         GRAPHICS::_PUSH_SCALEFORM_MOVIE_FUNCTION_PARAMETER_INT(fParam5);
  20.     }
  21.     if (fParam6 != -1.0f)
  22.     {
  23.         GRAPHICS::_PUSH_SCALEFORM_MOVIE_FUNCTION_PARAMETER_INT(fParam6);
  24.     }
  25.     GRAPHICS::_POP_SCALEFORM_MOVIE_FUNCTION_VOID();
  26. }
  27. void func_14(char *uParam0, bool stringsAreGXT = false)
  28. {
  29.     if (stringsAreGXT == false) {
  30.         GRAPHICS::_BEGIN_TEXT_COMPONENT("STRING");
  31.         UI::_ADD_TEXT_COMPONENT_STRING(uParam0);
  32.     } else {
  33.         GRAPHICS::_BEGIN_TEXT_COMPONENT(uParam0);
  34.     }
  35.     GRAPHICS::_END_TEXT_COMPONENT();
  36. }
  37. void func_20(int uParam0, char *uParam1, float uParam2, float fParam3, float fParam4, float fParam5, float fParam6, char *uParam7, char *uParam8, char *uParam9, char *uParam10, char *uParam11, bool stringsAreGXT = false)
  38. {
  39.     GRAPHICS::_PUSH_SCALEFORM_MOVIE_FUNCTION(uParam0, uParam1);
  40.     GRAPHICS::_PUSH_SCALEFORM_MOVIE_FUNCTION_PARAMETER_INT(uParam2);
  41.     if (fParam3 != -1.0f)
  42.     {
  43.         GRAPHICS::_PUSH_SCALEFORM_MOVIE_FUNCTION_PARAMETER_INT(fParam3);
  44.     }
  45.     if (fParam4 != -1.0f)
  46.     {
  47.         GRAPHICS::_PUSH_SCALEFORM_MOVIE_FUNCTION_PARAMETER_INT(fParam4);
  48.     }
  49.     if (fParam5 != -1.0f)
  50.     {
  51.         GRAPHICS::_PUSH_SCALEFORM_MOVIE_FUNCTION_PARAMETER_INT(fParam5);
  52.     }
  53.     if (fParam6 != -1.0f)
  54.     {
  55.         GRAPHICS::_PUSH_SCALEFORM_MOVIE_FUNCTION_PARAMETER_INT(fParam6);
  56.     }
  57.     if (!GAMEPLAY::IS_STRING_NULL_OR_EMPTY(uParam7))
  58.     {
  59.         func_14(uParam7,stringsAreGXT);
  60.     }
  61.     if (!GAMEPLAY::IS_STRING_NULL_OR_EMPTY(uParam8))
  62.     {
  63.         func_14(uParam8,stringsAreGXT);
  64.     }
  65.     if (!GAMEPLAY::IS_STRING_NULL_OR_EMPTY(uParam9))
  66.     {
  67.         func_14(uParam9,stringsAreGXT);
  68.     }
  69.     if (!GAMEPLAY::IS_STRING_NULL_OR_EMPTY(uParam10))
  70.     {
  71.         func_14(uParam10,stringsAreGXT);
  72.     }
  73.     if (!GAMEPLAY::IS_STRING_NULL_OR_EMPTY(uParam11))
  74.     {
  75.         func_14(uParam11,stringsAreGXT);
  76.     }
  77.     GRAPHICS::_POP_SCALEFORM_MOVIE_FUNCTION_VOID();
  78. }
  79.  
  80.  
  81. int currentOption = 0;
  82. bool createPhone = false;
  83. int phonescaleForm = -1;
  84. float sizeOfEachRow = 1.0f/maxOptions;
  85. int phoneCurrentRender = 0;
  86. int lastAmountOptionsPhone = 0;
  87. int phonerenderid = 0;
  88. #define PHONE_TYPE 22.0f
  89. //int phoneBackgroundImage = 0;
  90. int phoneTheme = 1;
  91. int phoneType = 2;
  92. float phoneSize = 500.0f;
  93. void updatePhoneTitle();
  94. void setPhoneKey(int buttonSpot, float unk1, float icon, char *unk3) {
  95.     func_20(phonescaleForm, "SET_SOFT_KEYS", buttonSpot, unk1, icon, -1.0f, -1.0f, unk3, 0, 0, 0, 0);
  96. }
  97. void setupPhone() {
  98.     phoneCurrentRender = 0;
  99.     MOBILE::GET_MOBILE_PHONE_RENDER_ID(&phonerenderid);
  100.  
  101.     //check to make sure phone wasn't closed by game
  102.     /*
  103.     bugfix for when the game disposes of the phone when you get a call or something
  104.     if (submenu != Closed)
  105.         if (*(char*)0x1D6D888 == 0)//check if phone is closed or not
  106.             createPhone = true;
  107.     */
  108.    
  109.     //create phone if requested
  110.     if (createPhone) {
  111.         MOBILE::CREATE_MOBILE_PHONE(phoneType);//0 is multiplayer phone
  112.         //get render id
  113.         MOBILE::GET_MOBILE_PHONE_RENDER_ID(&phonerenderid);
  114.         createPhone = false;
  115.     }
  116.  
  117.     //setting phone properties
  118.     MOBILE::SET_MOBILE_PHONE_SCALE(phoneSize);
  119.     Vector3 phonePos = {99.62,-45.305,-113};
  120.     Vector3 phoneRot = {-90,0,0};
  121.     MOBILE::SET_MOBILE_PHONE_POSITION(phonePos.x,phonePos.y,phonePos.z);
  122.     MOBILE::SET_MOBILE_PHONE_ROTATION(phoneRot.x,phoneRot.y,phoneRot.z,0);
  123.  
  124.     //starting rendering based stuff
  125.     UI::SET_TEXT_RENDER_ID(phonerenderid);
  126.     phonescaleForm = GRAPHICS::REQUEST_SCALEFORM_MOVIE("cellphone_ifruit");
  127.    
  128.     //clear options
  129.     for (int i = 0; i < lastAmountOptionsPhone; i++)
  130.         func_38(phonescaleForm, "SET_DATA_SLOT_EMPTY", PHONE_TYPE, i, -1, -1, -1);
  131.     //func_38(phonescaleForm, "SET_BACKGROUND_IMAGE", phoneBackgroundImage, -1.0f, -1.0f, -1.0f, -1.0f);//not useful for this phone, but should work
  132.     func_38(phonescaleForm, "SET_THEME", phoneTheme, -1.0f, -1.0f, -1.0f, -1.0f);
  133.     //func_20(phonescaleForm, "SET_SOFT_KEYS", 3.0f, 1.0f, 6.0f, -1.0f, -1.0f, "CELL_202", 0, 0, 0, 0);//white phone in slot 3
  134.     setPhoneKey(3,1,6,"CELL_202");
  135.     setPhoneKey(2,1,3,"CELL_225");
  136.     setPhoneKey(1,1,4,"CELL_206");
  137.     updatePhoneTitle();
  138.     lastAmountOptionsPhone = 0;
  139. }
  140.  
  141. //updatePhoneTitle() calls this function
  142. void updatePhoneProvider()
  143. {
  144.     int uLocal_54,iLocal_34,iLocal_55 = 0;
  145.     Vector3 c = ENTITY::GET_ENTITY_COORDS(PLAYER::PLAYER_PED_ID(), 1);
  146.     uLocal_54 = ZONE::GET_ZONE_SCUMMINESS(ZONE::GET_ZONE_AT_COORDS(c.x,c.y,c.z));
  147.     switch (uLocal_54)
  148.     {
  149.         case 0:
  150.             iLocal_34 = 5;
  151.             break;
  152.        
  153.         case 1:
  154.             iLocal_34 = 5;
  155.             break;
  156.        
  157.         case 2:
  158.             iLocal_34 = 4;
  159.             break;
  160.        
  161.         case 3:
  162.             iLocal_34 = 4;
  163.             break;
  164.        
  165.         case 4:
  166.             iLocal_34 = 3;
  167.             break;
  168.        
  169.         case 5:
  170.             iLocal_34 = 2;
  171.             break;
  172.        
  173.         default:
  174.             iLocal_34 = 3;
  175.             break;
  176.     }
  177.     iLocal_55 = GAMEPLAY::GET_RANDOM_INT_IN_RANGE(0, 8);
  178.     if (iLocal_55 < 2)
  179.     {
  180.         if (iLocal_34 > 2)
  181.         {
  182.             iLocal_34--;
  183.         }
  184.     }
  185.     int uLocal_33 = Global(87755).imm(11664).arr(Global(10434).get<int>(),20).imm(8).get<int>();//this needs to be updates to pc if u want it
  186.     func_38(phonescaleForm, "SET_PROVIDER_ICON", uLocal_33, iLocal_34, -1.0f, -1.0f, -1.0f);
  187. }
  188.  
  189. int currentMinutes = 0;
  190. void updatePhoneTitle() {
  191.     int iLocal_36 = TIME::GET_CLOCK_MINUTES();
  192.     if (iLocal_36 != currentMinutes)
  193.     {
  194.         currentMinutes = iLocal_36;
  195.         int uLocal_35 = TIME::GET_CLOCK_HOURS();
  196.         int uLocal_37 = TIME::GET_CLOCK_DAY_OF_WEEK();
  197.         char cLocal_38[16];
  198.         switch (uLocal_37)
  199.         {
  200.             case 0:
  201.                 strncpy(cLocal_38, "CELL_920", 16);
  202.                 break;
  203.            
  204.             case 1:
  205.                 strncpy(cLocal_38, "CELL_921", 16);
  206.                 break;
  207.            
  208.             case 2:
  209.                 strncpy(cLocal_38, "CELL_922", 16);
  210.                 break;
  211.            
  212.             case 3:
  213.                 strncpy(cLocal_38, "CELL_923", 16);
  214.                 break;
  215.            
  216.             case 4:
  217.                 strncpy(cLocal_38, "CELL_924", 16);
  218.                 break;
  219.            
  220.             case 5:
  221.                 strncpy(cLocal_38, "CELL_925", 16);
  222.                 break;
  223.            
  224.             case 6:
  225.                 strncpy(cLocal_38, "CELL_926", 16);
  226.                 break;
  227.            
  228.             default:
  229.                 strncpy(cLocal_38, "CELL_206", 16);
  230.                 break;
  231.         }
  232.         func_20(phonescaleForm, "SET_TITLEBAR_TIME", uLocal_35, iLocal_36, -1.0f, -1.0f, -1.0f, cLocal_38, 0, 0, 0, 0,true);
  233.         updatePhoneProvider();
  234.     }
  235. }
  236.  
  237.  
  238. void AddPhoneTitle(char *text) {
  239.     UI::SET_TEXT_RENDER_ID(phonerenderid);
  240.     //set header
  241.     phonescaleForm = GRAPHICS::REQUEST_SCALEFORM_MOVIE("cellphone_ifruit");
  242.     GRAPHICS::_PUSH_SCALEFORM_MOVIE_FUNCTION(phonescaleForm, "SET_HEADER");
  243.     GRAPHICS::_BEGIN_TEXT_COMPONENT("STRING");
  244.     UI::_ADD_TEXT_COMPONENT_STRING(text);
  245.     GRAPHICS::_END_TEXT_COMPONENT();
  246.     GRAPHICS::_POP_SCALEFORM_MOVIE_FUNCTION_VOID();
  247. }
  248.  
  249. void AddPhoneOption(char* text,int icon = 0)
  250. {
  251.     UI::SET_TEXT_RENDER_ID(phonerenderid);
  252.    
  253.     phonescaleForm = GRAPHICS::REQUEST_SCALEFORM_MOVIE("cellphone_ifruit");
  254.     func_20(phonescaleForm, "SET_DATA_SLOT", PHONE_TYPE, phoneCurrentRender, icon/*this is the icon next to it*/, -1.0f, -1.0f, text, 0, 0, 0, 0);
  255.    
  256.     phoneCurrentRender += 1;
  257.     lastAmountOptionsPhone = phoneCurrentRender;
  258. }
  259.  
  260.  
  261.  
  262. int getSelectedPhoneOption() {
  263.     return currentOption;
  264. }
  265. void drawThePhone() {
  266.     UI::SET_TEXT_RENDER_ID(phonerenderid);
  267.     func_38(phonescaleForm,"DISPLAY_VIEW",PHONE_TYPE,currentOption-1,-1,-1,-1);//this is for like the current selected option
  268.     GRAPHICS::DRAW_SCALEFORM_MOVIE(phonescaleForm,0.1f,0.179f,0.2,0.356,255,255,255,255);
  269. }
  270.  
  271. //this function allow you to get out of the phone rendering spot and render on the screen
  272. void resetRendering() {
  273.     UI::SET_TEXT_RENDER_ID(UI::GET_DEFAULT_SCRIPT_RENDERTARGET_RENDER_ID());
  274. }
  275.  
  276.  
  277. example:
  278. void hook() {
  279.     setupPhone();
  280.     AddPhoneTitle("Mod Menu");
  281.     AddPhoneOption("Option 1");
  282.     AddPhoneOption("Option 2");
  283.     AddPhoneOption("Option 3");
  284.     drawThePhone();
  285. }
Add Comment
Please, Sign In to add comment