View difference between Paste ID: Jc7AN4jH and i88X3wkE
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
}