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 | } |