SHOW:
|
|
- or go back to the newest paste.
| 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 | } |