View difference between Paste ID: ugaX3W65 and 8WTVLrhs
SHOW: | | - or go back to the newest paste.
1
#define FILTERSCRIPT
2
3
#include	<a_samp>
4
#include	<foreach>
5
#include    <YSI\y_ini>
6
#include	<zcmd>
7
#include    <streamer>
8
#include    <a_mysql>
9
#include    <zones>
10
#include 	<FileManager>
11
#include    <sscanf2>
12
13
// Defines
14
15
#define MAX_OBJCTS 1337
16
#define Object_PATH "/Mappings/%s.ini"
17
18
// Global variables.
19
20
new bool:Labels;
21
new bool:gLabels;
22
23
// Enumerators
24
25
enum _ObjectData
26
{
27
	Float:object_Pos[6],
28
	object_Object,
29
	object_ID,
30
	object_VW,
31
	object_Project[48],
32
	object_INT,
33
	Text3D:object_Label,
34
	bool:object_Taken
35
}
36
new ObjData[MAX_OBJCTS][_ObjectData];
37
38
enum _PlayerData
39
{
40
	player_Project[128]
41
}
42
new PlayerData[MAX_PLAYERS][_PlayerData];
43
44
// Dialogs
45
46
#define DIALOG_SETTINGS            (30000)
47
#define DIALOG_EDITOBJECT 		   (30001)
48
#define DIALOG_EDITOBJECT_OBJECT   (30002)
49
#define DIALOG_EDITOBJECT_POSITION (30003)
50
#define DIALOG_EDITOBJECT_LOCATION (30004)
51
#define DIALOG_EDITOBJECT_MATERIAL (30005)
52
53
public OnFilterScriptInit()
54
{
55
	print("\n--------------------------------------");
56
	print(" Mapping FS by Harry Slice");
57
	print("--------------------------------------\n");
58
	for(new i=0; i<MAX_PLAYERS; i++)
59
	{
60
	    format(PlayerData[i][player_Project], 5, "None");
61
	}
62
	Labels = false;
63
	gLabels = false;
64
	
65
	return 1;
66
}
67
68
public OnFilterScriptExit()
69
{
70
	return 1;
71
}
72
73
// ----- [ COLOR DEFINES ] -----
74
#define     GREY               0xAFAFAFAA
75
#define     GREEN              0x33AA33AA
76
#define     RED                0xAA3333AA
77
#define 	NEWBIE_COLOR 	   0x7DAEFFFF
78
#define 	DOC     		   0xFF8282AA
79
#define 	DBLUE       	   0x007BD0FF
80
#define     YELLOW     		   0xFFFF00AA
81
#define 	GRAD1 	   		   0xB4B5B7FF
82
#define 	GRAD2 	           0xBFC0C2FF
83
#define 	GRAD3 	   		   0xCBCCCEFF
84
#define 	GRAD4 	   		   0xD8D8D8FF
85
#define 	GRAD5 	   		   0xE3E3E3FF
86
#define 	GRAD6 	           0xF0F0F0FF
87
#define     WHITE 	   		   0xFFFFFFAA
88
#define     BLUE       		   0x0000BBAA
89
#define 	FADE1 			   0xE6E6E6E6
90
#define 	FADE2 			   0xC8C8C8C8
91
#define 	FADE3 			   0xAAAAAAAA
92
#define 	FADE4 		       0x8C8C8C8C
93
#define 	FADE5 		       0x6E6E6E6E
94
#define     LIGHTBLUE          0x33CCFFAA
95
#define     ORANGE             0xFF9900AA
96
#define     RED                0xAA3333AA
97
#define     LIME               0x10F441AA
98
#define     MAGENTA            0xFF00FFFF
99
#define     NAVY               0x000080AA
100
#define     AQUA       		   0xF0F8FFAA
101
#define     CRIMSON            0xDC143CAA
102
#define     FLBLUE             0x6495EDAA
103
#define     BISQUE             0xFFE4C4AA
104
#define     BLACK              0x000000AA
105
#define     CHARTREUSE         0x7FFF00AA
106
#define 	YELLOW2     	   0xF5DEB3FF
107
#define     BROWN              0XA52A2AAA
108
#define 	RADIO       	   0x8D8DFF00
109
#define     CORAL              0xFF7F50AA
110
#define     GOLD               0xB8860BAA
111
#define 	PURPLE		       0xC2A2DAFF
112
#define 	DEF_COL_RED 	   0xAE0000FF
113
#define     GREENYELLOW        0xADFF2FAA
114
#define     INDIGO             0x4B00B0AA
115
#define     IVORY              0xFFFF82AA
116
#define     LAWNGREEN          0x7CFC00AA
117
#define     SEAGREEN           0x20B2AAAA
118
#define     LIMEGREEN          0x32CD32AA
119
#define     MIDNIGHTBLUE       0X191970AA
120
#define     MAROON             0x800000AA
121
#define     OLIVE              0x808000AA
122
#define     ORANGERED          0xFF4500AA
123
#define     PINK               0xFFC0CBAA
124
#define     SPRINGGREEN        0x00FF7FAA
125
#define     TOMATO             0xFF6347AA
126
#define     YELLOWGREEN        0x9ACD32AA
127
#define     MEDIUMAQUA         0x83BFBFAA
128
#define     MEDIUMMAGENTA      0x8B008BAA
129
// ----- [ COLOR DEFINES ] -----
130
131
// functions
132
133
Text3D:CreateStreamed3DTextLabel(const string[], color, Float:posx, Float:posy, Float:posz, Float:draw_distance, virtualworld, testlos = 0)
134
{
135
	return CreateDynamic3DTextLabel(string, color, posx, posy, posz, draw_distance, INVALID_PLAYER_ID, INVALID_PLAYER_ID, testlos, virtualworld, -1, -1, 100.0);
136
}
137
138
stock ErrorMessage(playerid, text[])
139
{
140
	new string[144];
141
142
	format(string, sizeof(string), "{AA3333}Error:{F5F5F5} %s", text);
143
	return SendClientMessage(playerid, WHITE, string);
144
}
145
146
stock SyntaxMessage(playerid, msg[])
147
{
148
	new string[144];
149
150
	format(string, sizeof(string), "{FFFFFF}Usage:{FFFFFF} %s", msg);
151
	return SendClientMessage(playerid, WHITE, string);
152
}
153
154
stock PlayerRPName(playerid)
155
{
156
    new name[MAX_PLAYER_NAME];
157
    strmid(name, str_replace('_', ' ', ReturnPlayerName(playerid)), 0, MAX_PLAYER_NAME);
158
    return name;
159
}
160
161
stock AuthorizeMessage(playerid)
162
{
163
    new string[144];
164
165
	format(string, sizeof(string), "{AA3333}Error:{F5F5F5} You are not authorized to use this command!");
166
	return SendClientMessage(playerid, WHITE, string);
167
}
168
169
stock str_replace(sSearch, sReplace, const sSubject[], &iCount = 0)
170
{
171
	new sReturn[128];
172
	format(sReturn, sizeof(sReturn), sSubject);
173
	for(new i = 0; i < sizeof(sReturn); i++)
174
	{
175
	    if(sReturn[i] == sSearch)
176
	    {
177
			sReturn[i] = sReplace;
178
		}
179
	}
180
	return sReturn;
181
}
182
183
stock ProjectPath(project[])
184
{
185
    new string[128];
186
    format(string, sizeof(string), "/Mappings/%s", project);
187
    printf("%s", string);
188
    return string;
189
}
190
191
stock ObjectPath(mapname[], objectID)
192
{
193
    new string[128];
194
    format(string, sizeof(string), "/Mappings/%s/%d.ini", mapname, objectID);
195
    return string;
196
}
197
198
stock CreateObjectz(playerid, objectID, object)
199
{
200
    new vw, Float:ObjectPos[4], int, string[144];
201
202
	GetPlayerPos(playerid, ObjectPos[0], ObjectPos[1], ObjectPos[2]);
203
	GetPlayerFacingAngle(playerid, ObjectPos[3]);
204
205
	vw  = GetPlayerVirtualWorld(playerid);
206
	int = GetPlayerInterior(playerid);
207
208
    ObjData[objectID][object_Pos][0]   = ObjectPos[0] + (1.4 * floatsin(-ObjectPos[3], degrees));
209
    ObjData[objectID][object_Pos][1]   = ObjectPos[1] + (1.4 * floatsin(-ObjectPos[3], degrees));
210
    ObjData[objectID][object_Pos][2]   = ObjectPos[2];
211
    ObjData[objectID][object_Pos][3]   = 0;
212
    ObjData[objectID][object_Pos][4]   = 0;
213
    ObjData[objectID][object_Pos][5]   = ObjectPos[3];
214
215
    ObjData[objectID][object_VW]  	   = vw;
216
    ObjData[objectID][object_INT]  	   = int;
217
    ObjData[objectID][object_Taken]    = true;
218
    ObjData[objectID][object_Object]   = object;
219
    
220
    format(ObjData[objectID][object_Project], 62, "%s", PlayerData[playerid][player_Project]);
221
222
    ObjData[objectID][object_ID] = CreateDynamicObject(ObjData[objectID][object_Object], ObjData[objectID][object_Pos][0], ObjData[objectID][object_Pos][1], ObjData[objectID][object_Pos][2], ObjData[objectID][object_Pos][3], ObjData[objectID][object_Pos][4], ObjData[objectID][object_Pos][5], ObjData[objectID][object_VW], ObjData[objectID][object_INT]);
223
    format(string, sizeof(string), "Object ID: %i", ObjData[objectID][object_ID]);
224
    if(Labels) ObjData[objectID][object_Label] = CreateStreamed3DTextLabel(string, FLBLUE, ObjData[objectID][object_Pos][0], ObjData[objectID][object_Pos][1], ObjData[objectID][object_Pos][2]+0.75, 10.0, ObjData[objectID][object_VW]);
225
    SaveMapping(PlayerData[playerid][player_Project], objectID);
226
    format(string, sizeof(string), "The object %d was correctly created!", objectID);
227
    SendClientMessage(playerid, TOMATO, string);
228
	return 1;
229
}
230
231
forward LoadMapping_data(o, name[], value[]);
232
public LoadMapping_data(o, name[], value[])
233
{
234
	new string[128];
235
    INI_Int("Object", ObjData[o][object_Object]);
236
    if(ObjData[o][object_Object])
237
    {
238
	    INI_Float("PosX",  ObjData[o][object_Pos][0]);
239
	    INI_Float("PosY",  ObjData[o][object_Pos][1]);
240
	    INI_Float("PosZ",  ObjData[o][object_Pos][2]);
241
	    INI_Float("PosRX", ObjData[o][object_Pos][3]);
242
	    INI_Float("PosRY", ObjData[o][object_Pos][4]);
243
	    INI_Float("PosRZ", ObjData[o][object_Pos][5]);
244
	    INI_Int("Virtual",   ObjData[o][object_VW]);
245
	    INI_Int("Interior",  ObjData[o][object_INT]);
246
	    INI_String("Project", ObjData[o][object_Project], strlen(ObjData[o][object_Project]));
247
    	ObjData[o][object_Taken] = true;
248
    	ObjData[o][object_ID] = CreateDynamicObject(ObjData[o][object_Object], ObjData[o][object_Pos][0], ObjData[o][object_Pos][1], ObjData[o][object_Pos][2], ObjData[o][object_Pos][3], ObjData[o][object_Pos][4], ObjData[o][object_Pos][5], ObjData[o][object_VW], ObjData[o][object_INT]);
249
        format(string, sizeof(string), "Object ID: %i", ObjData[o][object_ID]);
250
		if(Labels) ObjData[o][object_Label] = CreateStreamed3DTextLabel(string, FLBLUE, ObjData[o][object_Pos][0], ObjData[o][object_Pos][1], ObjData[o][object_Pos][2]+0.75, 10.0, ObjData[o][object_VW]);
251
		printf("Debug 4");
252
	}
253
    return 1;
254
}
255
256
stock SaveMapping(Map[], objectID)
257
{
258
    new INI:File = INI_Open(ObjectPath(Map, objectID)), string[128];
259
    format(string, sizeof(string), "-= Object %d =-", objectID);
260
    INI_SetTag(File, string);
261
    INI_WriteFloat(File, "PosX",   ObjData[objectID][object_Pos][0]);
262
    INI_WriteFloat(File, "PosY",  ObjData[objectID][object_Pos][1]);
263
    INI_WriteFloat(File, "PosZ",  ObjData[objectID][object_Pos][2]);
264
    INI_WriteFloat(File, "PosRX", ObjData[objectID][object_Pos][3]);
265
    INI_WriteFloat(File, "PosRY",  ObjData[objectID][object_Pos][4]);
266
    INI_WriteFloat(File, "PosRZ", ObjData[objectID][object_Pos][5]);
267
    
268
    INI_WriteString(File,"Project", ObjData[objectID][object_Project]);
269
    
270
    INI_WriteInt(File, "Object",  ObjData[objectID][object_Object]);
271
    INI_WriteInt(File, "Virtual", ObjData[objectID][object_VW]);
272
    INI_WriteInt(File, "Interior",  ObjData[objectID][object_INT]);
273
    INI_Close(File);
274
}
275
276
stock IsNumeric(const string3[])
277
{
278
	for (new i = 0, j = strlen(string3); i < j; i++)
279
	{
280
		if (string3[i] > '9' || string3[i] < '0' ) return 0;
281
	}
282
	return 1;
283
}
284
285
286
// Commands
287
288
CMD:settings(playerid, params[])
289
{
290
    if(GetPVarInt(playerid, "IsMapper"))
291
	{
292
	    new string[128];
293
		format(string, sizeof(string), "Project Labels\t\t%s\nAll Objects Labels\t%s",
294
			(Labels) ? ("Enabled") : ("Disabled"),
295
			(gLabels) ? ("Enabled") : ("Disabled")
296
		);
297
	    ShowPlayerDialog(playerid, DIALOG_SETTINGS, DIALOG_STYLE_LIST, "Mapping settings", string, "Select", "Cancel");
298
	}
299
	return 1;
300
}
301
302-
CMD:savemapping(playerid, params[])
302+
CMD:saveproject(playerid, params[])
303
{
304
	if(GetPVarInt(playerid, "IsMapper"))
305
	{
306
		new mapname[48], string[127];
307
308
		if (sscanf(params, "s[48]", mapname))
309-
	        return SyntaxMessage(playerid, "/loadmapping [mapname]");
309+
	        return SyntaxMessage(playerid, "/saveproject [mapname]");
310
311
     	for(new o = 1; o < MAX_OBJECTS; o++)
312
		{
313
		    if(ObjData[o][object_Taken] && !strcmp(ObjData[o][object_Project], mapname, true, 64))
314
     		{
315
		    	SaveMapping(PlayerData[playerid][player_Project], o);
316
		    }
317
     	}
318
     	format(string, sizeof(string), "You have successfully saves mapping: '{FFFFFF}%s{FF6347}'", mapname);
319
        SendClientMessage(playerid, TOMATO, string);
320
	}
321
	else return AuthorizeMessage(playerid);
322
	return 1;
323
}
324
325-
CMD:loadmapping(playerid, params[])
325+
CMD:loadproject(playerid, params[])
326
{
327
    if(GetPVarInt(playerid, "IsMapper"))
328
	{
329
		new str[128], mapname[48], string[128];
330
		
331
		if (sscanf(params, "s[48]", mapname))
332-
	        return SyntaxMessage(playerid, "/loadmapping [mapname]");
332+
	        return SyntaxMessage(playerid, "/loadproject [mapname]");
333
334
     	for(new o = 1; o < MAX_OBJECTS; o++)
335
		{
336
            if(!ObjData[o][object_Taken])
337
            {
338
		    	format(str, sizeof(str), ObjectPath("%s", o), mapname);
339
	    		INI_ParseFile(str, "LoadMapping_%s", .bExtra = true, .extra = o);
340
	    	}
341
     	}
342
     	format(string, sizeof(string), "You have successfully loaded mapping: '{FFFFFF}%s{FF6347}'", mapname);
343
        SendClientMessage(playerid, TOMATO, string);
344
	}
345
	else return AuthorizeMessage(playerid);
346
	return 1;
347
}
348
349
CMD:changeproject(playerid, params[])
350
{
351
    if(GetPVarInt(playerid, "IsMapper"))
352
	{
353
		new projectz[52], string[128];
354
	    if (sscanf(params, "s[52]", projectz))
355
	        return SyntaxMessage(playerid, "/changeproject [project]");
356
	        
357
        format(PlayerData[playerid][player_Project], 52, "%s", projectz);
358
        format(string, sizeof(string), "You have changed your project to '{FFFFFF}%s{FF6347}'", PlayerData[playerid][player_Project]);
359
        SendClientMessage(playerid, TOMATO, string);
360
	}
361
 	else return AuthorizeMessage(playerid);
362
	return 1;
363
}
364
365
CMD:allowmap(playerid, params[])
366
{
367
	new targetID, string[129];
368
    if(IsPlayerAdmin(playerid))
369
    {
370
        if (sscanf(params, "u", targetID))
371
	        return SyntaxMessage(playerid, "/allowmap [playerid]");
372
	        
373
        SetPVarInt(targetID, "IsMapper", 1);
374
        
375
        format(string, sizeof(string), "You have been granted the ability to map IG by %s.", PlayerRPName(playerid));
376
        SendClientMessage(targetID, FLBLUE, string);
377
        
378
        format(string, sizeof(string), "You have granted %s the ability to map IG.", PlayerRPName(targetID));
379
		SendClientMessage(playerid, FLBLUE, string);
380
    }
381
	else return AuthorizeMessage(playerid);
382
	return 1;
383
}
384
385
CMD:edittexture(playerid, params[])
386
{
387
	new index, objectID = -1, model, txdname[25], texture[48], ID, string[128];
388
    if(GetPVarInt(playerid, "IsMapper"))
389
	{
390
	    if(!sscanf(params, "iiis[25]s[49]", objectID, index, model, txdname, texture))
391
	    {
392
	        ID = ObjData[objectID][object_ID];
393
			SetDynamicObjectMaterial(ID, index, model, txdname, texture, 0xFFFFFFFF);
394
			format(string, sizeof(string), "You have successfully changed the texture of object: '{FFFFFF}%s{FF6347}'", objectID);
395
        	SendClientMessage(playerid, TOMATO, string);
396
	    }
397
	    else return SyntaxMessage(playerid, "/edittexture [object ID] [index] [model] [txdname] [texture]");
398
	}
399
	else return AuthorizeMessage(playerid);
400
	return 1;
401
}
402
403-
CMD:exportmapping(playerid, params[])
403+
CMD:exportproject(playerid, params[])
404
{
405
    new string2[124], string[124];
406
    format(string2, sizeof(string2), "%s.pwn", PlayerData[playerid][player_Project]);
407
    new File:output = fopen(string, io_write);
408
    if(GetPVarInt(playerid, "IsMapper"))
409
	{
410
	    for(new o = 1; o < MAX_OBJCTS; o++)
411
		{
412
			if(ObjData[o][object_Taken] && !strcmp(ObjData[o][object_Project], PlayerData[playerid][player_Project], true, 128))
413
     		{
414
     		    if(output)
415
				{
416
				    format(string, sizeof(string), "CreateDynamicObject(%d, %f, %f, %f, %f, %f, %f, %d, %d);\r\n", ObjData[o][object_Object], ObjData[o][object_Pos][0], ObjData[o][object_Pos][1], ObjData[o][object_Pos][2], ObjData[o][object_Pos][3], ObjData[o][object_Pos][4], ObjData[o][object_Pos][5], ObjData[o][object_VW], ObjData[o][object_INT]);
417
                    fwrite(output, string);
418
				}
419
     		}
420
     	}
421
     	format(string, sizeof(string), "The mapping was successfully printed into: '{FF6347}%s{FFFFFF}'", string2);
422
        SendClientMessage(playerid, WHITE, string);
423
     	fclose(output);
424
	}
425
	return 1;
426
}
427
428
CMD:editobject(playerid, params[])
429
{
430
	new objectID = -1, string[128];
431
    if(GetPVarInt(playerid, "IsMapper"))
432
	{
433
	    if(!sscanf(params, "i", objectID))
434
	    {
435
			if (!ObjData[objectID][object_Taken]) return ErrorMessage(playerid, "The object ID you are trying to edit is not active!");
436
			format(string, sizeof(string), "Editting Object (ID: %i)", objectID);
437
			SetPVarInt(playerid, "EdittingObject", objectID);
438
	        ShowPlayerDialog(playerid, DIALOG_EDITOBJECT, DIALOG_STYLE_LIST, "Editting Object", "Edit Object\nEdit Position\nEdit Location\nEdit Material", "Select", "Cancel");
439
	    }
440
	    else return SyntaxMessage(playerid, "/editobject [object ID]");
441
	}
442
	else return AuthorizeMessage(playerid);
443
	return 1;
444
}
445
446
CMD:createobject(playerid, params[])
447
{
448
	new object = -1;
449
    if(GetPVarInt(playerid, "IsMapper"))
450
	{
451
	    if(!strcmp(PlayerData[playerid][player_Project], "None", true, 128))
452
	    {
453
	   	    return ErrorMessage(playerid, "You haven't chose a project!");
454
	   	}
455
	   	printf("%s | None", PlayerData[playerid][player_Project]);
456
	    if(!sscanf(params, "i", object))
457
	    {
458
	        if (object == -1) return ErrorMessage(playerid, "Invalid object ID!");
459
	        new objectID = -1;
460
			for(new o = 1; o < MAX_OBJCTS; o++)
461
			{
462
				if(!ObjData[o][object_Taken])
463
	   			{
464
					objectID = o;
465
					break;
466
				}
467
			}
468
			if(objectID == -1) return ErrorMessage(playerid, "The maximum amount of object's have been made!");
469
	        CreateObjectz(playerid, objectID, object);
470
	    }
471
	    else return SyntaxMessage(playerid, "/createobject [object ID]");
472
	}
473
	else return AuthorizeMessage(playerid);
474
	return 1;
475
}
476
477
// calbacks!
478
479
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
480
{
481
	new string[129], objectID = GetPVarInt(playerid, "EdittingObject");
482
	format(string, sizeof(string), "Editting Object (ID: %i)", objectID);
483
	
484
	if (dialogid == DIALOG_EDITOBJECT_OBJECT)
485
	{
486
	    if (!response)
487
	    {
488
	        ShowPlayerDialog(playerid, DIALOG_EDITOBJECT, DIALOG_STYLE_LIST, "Editting Object", "Edit Object\nEdit Position\nEdit Location\nEdit Material", "Select", "Cancel");
489
	    }
490
	    if (response)
491
	    {
492
			if(!strval(inputtext)) return ShowPlayerDialog(playerid, DIALOG_EDITOBJECT_OBJECT , DIALOG_STYLE_INPUT, string, "Write the Object ID below:", "Continue", "Cancel");
493
	        if(!IsNumeric(inputtext)) return ShowPlayerDialog(playerid, DIALOG_EDITOBJECT_OBJECT , DIALOG_STYLE_INPUT, string, "Write the Object ID below:", "Continue", "Cancel");
494
	        
495
	        ObjData[objectID][object_Object] = strval(inputtext);
496
            DestroyDynamicObject(ObjData[objectID][object_ID]);
497
    		ObjData[objectID][object_ID] = CreateDynamicObject(ObjData[objectID][object_Object], ObjData[objectID][object_Pos][0], ObjData[objectID][object_Pos][1], ObjData[objectID][object_Pos][2], ObjData[objectID][object_Pos][3], ObjData[objectID][object_Pos][4], ObjData[objectID][object_Pos][5], ObjData[objectID][object_VW], ObjData[objectID][object_INT]);
498
            SaveMapping(PlayerData[playerid][player_Project], objectID);
499
		}
500
	}
501
	if (dialogid == DIALOG_EDITOBJECT_LOCATION)
502
	{
503
	    if (!response)
504
	    {
505
	        ShowPlayerDialog(playerid, DIALOG_EDITOBJECT, DIALOG_STYLE_LIST, "Editting Object", "Edit Object\nEdit Position\nEdit Location\nEdit Material", "Select", "Cancel");
506
	    }
507
	    if (response)
508
	    {
509
	        new vw, Float:ObjectPos[4], int;
510
511
			GetPlayerPos(playerid, ObjectPos[0], ObjectPos[1], ObjectPos[2]);
512
			GetPlayerFacingAngle(playerid, ObjectPos[3]);
513
514
			vw  = GetPlayerVirtualWorld(playerid);
515
			int = GetPlayerInterior(playerid);
516
517
		    ObjData[objectID][object_Pos][0]   = ObjectPos[0] + (1.4 * floatsin(-ObjectPos[3], degrees));
518
		    ObjData[objectID][object_Pos][1]   = ObjectPos[1] + (1.4 * floatsin(-ObjectPos[3], degrees));
519
		    ObjData[objectID][object_Pos][2]   = ObjectPos[2];
520
521
		    ObjData[objectID][object_VW]  	   = vw;
522
		    ObjData[objectID][object_INT]  	   = int;
523
		    
524
		    if (ObjData[objectID][object_ID]) DestroyDynamicObject(ObjData[objectID][object_ID]);
525
	   		ObjData[objectID][object_ID] = CreateDynamicObject(ObjData[objectID][object_Object], ObjData[objectID][object_Pos][0], ObjData[objectID][object_Pos][1], ObjData[objectID][object_Pos][2], ObjData[objectID][object_Pos][3], ObjData[objectID][object_Pos][4], ObjData[objectID][object_Pos][5], ObjData[objectID][object_VW], ObjData[objectID][object_INT]);
526
		    SaveMapping(PlayerData[playerid][player_Project], objectID);
527
		}
528
	}
529
	if (dialogid == DIALOG_EDITOBJECT_POSITION)
530
	{
531
	    if (!response)
532
	    {
533
	        ShowPlayerDialog(playerid, DIALOG_EDITOBJECT, DIALOG_STYLE_LIST, "Editting Object", "Edit Object\nEdit Position\nEdit Location\nEdit Material", "Select", "Cancel");
534
	    }
535
	    if (response)
536
	    {
537
			EditDynamicObject(playerid, ObjData[objectID][object_ID]);
538
539
			format(string, sizeof(string), "You are now editing Object (ID: %d) position.", objectID);
540
			SendClientMessage(playerid, WHITE, string);
541
		}
542
	}
543
	if (dialogid == DIALOG_EDITOBJECT)
544
	{
545
		if (response)
546
		{
547
		    switch (listitem)
548
		    {
549
		        case 0: ShowPlayerDialog(playerid, DIALOG_EDITOBJECT_OBJECT , DIALOG_STYLE_INPUT, string, "Write the Object ID below:", "Continue", "Cancel");
550
		        case 1: ShowPlayerDialog(playerid, DIALOG_EDITOBJECT_POSITION, DIALOG_STYLE_MSGBOX, string, "Click continue to open the editor", "Continue", "Cancel");
551
		        case 2: ShowPlayerDialog(playerid, DIALOG_EDITOBJECT_LOCATION, DIALOG_STYLE_MSGBOX, string, "Click continue to move the object to your location", "Continue", "Cancel");
552
		        case 3: ShowPlayerDialog(playerid, DIALOG_EDITOBJECT_MATERIAL, DIALOG_STYLE_INPUT, string, "Write down the new Material ID", "Continue", "Cancel");
553
		    }
554
		}
555
	}
556
    if(dialogid == DIALOG_SETTINGS)
557
    {
558
        if (response)
559
        {
560
	        switch (listitem)
561
	        {
562
				case 0:
563
				{
564
					Labels = !Labels;
565
					switch (Labels)
566
					{
567
						case 0:
568
						{
569
						    for(new o = 1; o < MAX_OBJCTS; o++)
570
							{
571
								if(ObjData[o][object_Taken])
572
				     			{
573
				     			    DestroyDynamic3DTextLabel(ObjData[o][object_Label]);
574
				     			}
575
				     		}
576
							SendClientMessage(playerid, WHITE, "You have {FF0000}disabled{FFFFFF} Object Labels. You will no longer see the labels on the objects.");
577
						}
578
					    case 1:
579
						{
580
						    if (gLabels) { ErrorMessage(playerid, "You can't have both tags turned on at the same time!"), gLabels = false, cmd_settings(playerid, "\1"); return 1; }
581
						    for(new o = 1; o < MAX_OBJCTS; o++)
582
							{
583
								if(ObjData[o][object_Taken])
584
				     			{
585
									format(string, sizeof(string), "Object ID: %i", o);
586
				     			    ObjData[o][object_Label] = CreateStreamed3DTextLabel(string, FLBLUE, ObjData[o][object_Pos][0], ObjData[o][object_Pos][1], ObjData[o][object_Pos][2]+0.75, 10.0, ObjData[o][object_VW]);
587
				     			}
588
				     		}
589
							SendClientMessage(playerid, WHITE, "You have {00FF00}enabled{FFFFFF} Object Labels. You will now see labels on the objects.");
590
						}
591
					}
592
				}
593
				case 1:
594
				{
595
					gLabels = !gLabels;
596
					switch (gLabels)
597
					{
598
						case 0:
599
						{
600
						    for(new o = 1; o < MAX_OBJCTS; o++)
601
							{
602
								if(ObjData[o][object_Taken])
603
				     			{
604
				     			    DestroyDynamic3DTextLabel(ObjData[o][object_Label]);
605
				     			}
606
				     		}
607
							SendClientMessage(playerid, WHITE, "You have {FF0000}disabled{FFFFFF} Object Labels. You will no longer see the labels on the objects.");
608
						}
609
					    case 1:
610
						{
611
						    if (Labels) { ErrorMessage(playerid, "You can't have both tags turned on at the same time!"), Labels = false, cmd_settings(playerid, "\1"); return 1; }
612
						    for(new o = 1; o < MAX_OBJCTS; o++)
613
							{
614
								if(ObjData[o][object_Taken])
615
				     			{
616
									format(string, sizeof(string), "Object ID: %i", ObjData[o][object_ID]);
617
				     			    ObjData[o][object_Label] = CreateStreamed3DTextLabel(string, FLBLUE, ObjData[o][object_Pos][0], ObjData[o][object_Pos][1], ObjData[o][object_Pos][2]+0.75, 10.0, ObjData[o][object_VW]);
618
				     			}
619
				     		}
620
							SendClientMessage(playerid, WHITE, "You have {00FF00}enabled{FFFFFF} Object Labels. You will now see labels on the objects.");
621
						}
622
					}
623
				}
624
	        }
625
	        cmd_settings(playerid, "\1");
626
	    }
627
    }
628
    return 0;
629
}
630
631
public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
632
{
633
	new string[48], Float:a, objectIDz = GetPVarInt(playerid, "EdittingObject");
634
	GetPlayerFacingAngle(playerid, a);
635
 	if (!IsValidDynamicObject(objectid)) return 0;
636
  	MoveDynamicObject(objectid, x, y, z, 10.0, rx, ry, rz);
637
638
	if (response == EDIT_RESPONSE_FINAL)
639
	{
640
	    SetDynamicObjectPos(objectid, x, y, z);
641
		SetDynamicObjectRot(objectid, rx, ry, rz);
642
		if (objectIDz != 0)
643
		{
644
 			ObjData[objectIDz][object_Pos][0]   = x;
645
			ObjData[objectIDz][object_Pos][1]   = y;
646
			ObjData[objectIDz][object_Pos][2]   = z;
647
			ObjData[objectIDz][object_Pos][3]   = rx;
648
			ObjData[objectIDz][object_Pos][4]   = ry;
649
			ObjData[objectIDz][object_Pos][5]   = rz;
650
651
	        SaveMapping(PlayerData[playerid][player_Project], objectIDz);
652
		    format(string, sizeof(string), "You have edited Object %d's closed position.", objectIDz);
653
  			SendClientMessage(playerid, WHITE, string);
654
  			
655
			if (ObjData[objectIDz][object_ID]) DestroyDynamicObject(ObjData[objectIDz][object_ID]);
656
	   		ObjData[objectIDz][object_ID] = CreateDynamicObject(ObjData[objectIDz][object_Object], ObjData[objectIDz][object_Pos][0], ObjData[objectIDz][object_Pos][1], ObjData[objectIDz][object_Pos][2], ObjData[objectIDz][object_Pos][3], ObjData[objectIDz][object_Pos][4], ObjData[objectIDz][object_Pos][5], ObjData[objectIDz][object_VW], ObjData[objectIDz][object_INT]);
657
		}
658
	}
659
	if (response == EDIT_RESPONSE_CANCEL)
660
	{
661
		if (objectIDz != 0)
662
		{
663
	    	SetTimerEx("SetObjectOldPos", 300, false, "dffffff", ObjData[objectIDz][object_ID], ObjData[objectIDz][object_Pos][0], ObjData[objectIDz][object_Pos][1], ObjData[objectIDz][object_Pos][2], ObjData[objectIDz][object_Pos][3], ObjData[objectIDz][object_Pos][4], ObjData[objectIDz][object_Pos][5]);
664
		}
665
	}
666
	return 1;
667
}
668
669
forward SetObjectOldPos(objectid, Float:oldX, Float:oldY, Float:oldZ, Float:oldRotX, Float:oldRotY, Float:oldRotZ);
670
public SetObjectOldPos(objectid, Float:oldX, Float:oldY, Float:oldZ, Float:oldRotX, Float:oldRotY, Float:oldRotZ)
671
{
672
   	SetDynamicObjectPos(objectid, oldX, oldY, oldZ);
673
	SetDynamicObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
674
	return 1;
675
}