View difference between Paste ID: 0pFLLHDh and pyZ6cDNP
SHOW: | | - or go back to the newest paste.
1
#include < a_samp >
2
#include < YSI\y_ini >
3-
#include < YSI\y_commands >
3+
#include < Pawn.cmd >
4
#include < sscanf2 > 
5
 
6
enum {
7
 
8
	DIALOG_AKTORPANEL,
9
	DIALOG_KREIRAJAKTORA1,
10
	DIALOG_KREIRAJAKTORA2,
11
	DIALOG_AKTORANIMACIJA,
12
	DIALOG_IZMENIAKTORA,
13
	DIALOG_IZMENIPOZICIJU,
14
	DIALOG_IZMENIANIMACIJU,
15
	DIALOG_IZMENISKIN,
16
	DIALOG_IZMENIIME,
17
	DIALOG_IZBRISIAKTORA,
18
	DIALOG_BRISANJEAKTORA
19
} 
20
 
21
#define AKTOR_FILE			"/Aktori/%d.ini"
22
#define MAX_AKTORI			300
23
 
24
enum AKTOR_INFO {
25
 
26
	Float:aktorX,
27
	Float:aktorY,
28
	Float:aktorZ,
29
	Float:aktorA,
30
	aktorskin,
31
	aktorime[ 40 ],
32
	aktoranimacija,
33
	aktorid
34
}
35
 
36
new AktorInfo[ MAX_AKTORI ][ AKTOR_INFO ], KreiraAktora[ MAX_PLAYERS ], Text3D:AktorLabel[ sizeof(AktorInfo) ];
37
 
38
public OnFilterScriptInit() {
39
 
40
	print("===========================\n\n- Aktor system by Shomy -\n- Ucitan -\n\n===========================");
41
	return 1;
42
}
43
 
44
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
45
 
46
	if(dialogid == DIALOG_AKTORPANEL) {
47
		if(!response) return 1;
48
		if(response) {
49
			switch(listitem) {
50
				case 0: return ShowPlayerDialog(playerid, DIALOG_KREIRAJAKTORA1, DIALOG_STYLE_INPUT, "{0077C7}KREIRANJE {FFFFFF}AKTORA", "Unesite ID skina aktora.\nPrimer: 294", "U redu", "Izlaz");
51
				case 1: return ShowPlayerDialog(playerid, DIALOG_AKTORANIMACIJA, DIALOG_STYLE_LIST, "{0077C7}ANIMACIJA {FFFFFF}AKTORA", "Animacija 1\n Animacija 2\nAnimacija 3", "Izaberi", "Izlaz");
52
				case 2: return ShowPlayerDialog(playerid, DIALOG_IZMENIAKTORA, DIALOG_STYLE_LIST, "{0077C7}IZMENI {FFFFFF}AKTORA", "Promeni poziciju\nPromeni skin\nPromeni ime\nPromeni animaciju", "Izaberi", "Izlaz");
53
				case 3: return ShowPlayerDialog(playerid, DIALOG_IZBRISIAKTORA, DIALOG_STYLE_LIST, "{0077C7}IZBRISI {FFFFFF}AKTORA", "Najblizeg aktora\nID aktora", "Izaberi", "Izlaz");
54
			}
55
		}
56
	}
57
	else if(dialogid == DIALOG_KREIRAJAKTORA1) {
58
		if(!response) return 1;
59
		if(response) {
60
			new skinid, i = NextAktorID(MAX_AKTORI), Float:X, Float:Y, Float:Z, Float:A;
61
			if(sscanf(inputtext, "d", skinid)) return ShowPlayerDialog(playerid, DIALOG_KREIRAJAKTORA1, DIALOG_STYLE_INPUT, "{0077C7}KREIRANJE {FFFFFF}AKTORA", "Unesite ID skina aktora.\nPrimer: 294", "U redu", "Izlaz");
62
			if(skinid > 311) return ShowPlayerDialog(playerid, DIALOG_KREIRAJAKTORA1, DIALOG_STYLE_INPUT, "{FF1414}NEPOSTOJECI ID SKINA {FFFFFF}(0-311)", "Unesite ID skina aktora.\nPrimer: 294", "U redu", "Izlaz");
63
			GetPlayerPos(playerid, X,Y,Z); GetPlayerFacingAngle(playerid, A);
64
			AktorInfo[ i ][ aktorX ] = X; AktorInfo[ i ][ aktorY ] = Y; AktorInfo[ i ][ aktorZ ] = Z; AktorInfo[ i ][ aktorA ] = A;
65
			AktorInfo[ i ][ aktorskin ] = skinid;
66
			AktorInfo[ i ][ aktoranimacija ] = 0;
67
			KreiraAktora[ playerid ] = i;
68
			ShowPlayerDialog(playerid, DIALOG_KREIRAJAKTORA2, DIALOG_STYLE_INPUT, "{0077C7}KREIRANJE {FFFFFF}AKTORA", "Unesite ime aktora.\nPrimer: Shomy", "U redu", "Izlaz");
69
		}
70
	}
71
	else if(dialogid == DIALOG_KREIRAJAKTORA2) {
72
		if(!response) return 1;
73
		if(response) {
74
			new aktornick[ 40 ], str[ 56 ], i = KreiraAktora[ playerid ];
75
			if(sscanf(inputtext, "s[40]", aktornick)) return ShowPlayerDialog(playerid, DIALOG_KREIRAJAKTORA2, DIALOG_STYLE_INPUT, "{0077C7}KREIRANJE {FFFFFF}AKTORA", "Unesite ime aktora.\nPrimer: Shomy", "U redu", "Izlaz");
76
			AktorInfo[ i ][ aktorime ] = aktornick;
77
			AktorInfo[ i ][ aktorid ] = CreateActor(AktorInfo[ i ][ aktorskin ], AktorInfo[ i ][ aktorX ], AktorInfo[ i ][ aktorY ], AktorInfo[ i ][ aktorZ ], AktorInfo[ i ][ aktorA ]);
78
			SetPlayerPos(playerid, AktorInfo[ i ][ aktorX ]+2, AktorInfo[ i ][ aktorY ]+2, AktorInfo[ i ][ aktorZ ]);
79
			format(str, sizeof(str), "%s {0077C7}[ID %d]", aktornick, i);
80
			AktorLabel[ i ] = Create3DTextLabel(str, 0xFFFFFFFF, AktorInfo[ i ][ aktorX ], AktorInfo[ i ][ aktorY ], AktorInfo[ i ][ aktorZ ]+1.0, 10.0, 0);
81
			SaveAktor(i);
82
			SendClientMessage(playerid, 0x0077C7FF, "[AKTOR SYSTEM] {FFFFFF}Ukoliko zelite da dodate aktoru animaciju - {0077C7}/aktorpanel");
83
		}
84
	}
85
	else if(dialogid == DIALOG_IZMENIAKTORA) {
86
		if(!response) return 1;
87
		if(response) {
88
			switch(listitem) {
89
				case 0: return ShowPlayerDialog(playerid, DIALOG_IZMENIPOZICIJU, DIALOG_STYLE_INPUT, "{0077C7}MENJANJE {FFFFFF}POZICIJE", "Unesite ID aktora.", "U redu", "Izlaz");
90
				case 1: return ShowPlayerDialog(playerid, DIALOG_IZMENISKIN, DIALOG_STYLE_INPUT, "{0077C7}MENJANJE {FFFFFF}SKINA", "Unesite ID skina.\n{FF1414}NAPOMENA: {FFFFFF}Menja skin aktoru najblizem Vama.", "U redu", "Izlaz");
91
				case 2: return ShowPlayerDialog(playerid, DIALOG_IZMENIIME, DIALOG_STYLE_INPUT, "{0077C7}MENJANJE {FFFFFF}IMENA", "Unesite novo ime.\n{FF1414}NAPOMENA: {FFFFFF}Menja ime aktoru najblizem Vama.", "U redu", "Izlaz");
92
				case 3: return ShowPlayerDialog(playerid, DIALOG_IZMENIANIMACIJU, DIALOG_STYLE_LIST, "{0077C7}Menja animaciju aktoru najblizem Vama", "Stance\nSit\nLay\nGround Sit", "Izaberi","Izlaz"); //za jos animacija dodaj naziv animacije, ostalo dole u dialog..
93
			}
94
		}
95
	}
96
	else if(dialogid == DIALOG_IZMENIPOZICIJU) {
97
		if(!response) return 1;
98
		if(response) {
99
			new i, Float:X, Float:Y, Float:Z, Float:A, str[ 60 ];
100
			if(sscanf(inputtext, "d", i)) return ShowPlayerDialog(playerid, DIALOG_IZMENIPOZICIJU, DIALOG_STYLE_INPUT, "{0077C7}MENJANJE {FFFFFF}POZICIJE", "Unesite ID aktora.", "U redu", "Izlaz");
101
			GetPlayerPos(playerid, X,Y,Z); GetPlayerFacingAngle(playerid, A);
102
			SetPlayerPos(playerid, X+2, Y+2, Z);
103
			SetActorPos(AktorInfo[ i ][ aktorid ], X, Y, Z);
104
			SetActorFacingAngle(AktorInfo[ i ][ aktorid ], A);
105
			Delete3DTextLabel(AktorLabel[ i ]);
106
			format(str, sizeof(str), "%s {0077C7}[ID %d]", AktorInfo[ i ][ aktorime ], i);
107
			AktorLabel[ i ] = Create3DTextLabel(str, 0xFFFFFFFF, X,Y,Z+1.0, 10.0, 0);
108
			AktorInfo[ i ][ aktorX ] = X; AktorInfo[ i ][ aktorY ] = Y; AktorInfo[ i ][ aktorZ ] = Z; AktorInfo[ i ][ aktorA ] = A;
109
			SaveAktor(i);
110
			SendClientMessage(playerid, 0x0077C7FF, "[AKTOR SYSTEM] {FFFFFF}Uspesno ste promenili poziciju aktoru.");
111
		}
112
	}
113
	else if(dialogid == DIALOG_IZMENISKIN) {
114
		if(!response) return 1;
115
		if(response) {
116
			new skinid, i = GetNearestAktor(playerid);
117
			if(i == -1) return SendClientMessage(playerid, 0x0077C7FF, "[AKTOR SYSTEM] {FFFFFF}Niste blizu aktora.");
118
			if(sscanf(inputtext, "d", skinid)) return ShowPlayerDialog(playerid, DIALOG_IZMENISKIN, DIALOG_STYLE_INPUT, "{0077C7}MENJANJE {FFFFFF}SKINA", "Unesite ID skina.\n{FF1414}NAPOMENA: {FFFFFF}Menja skin aktoru najblizem Vama.", "U redu", "Izlaz");
119
			if(skinid > 311) return ShowPlayerDialog(playerid, DIALOG_KREIRAJAKTORA1, DIALOG_STYLE_INPUT, "{FF1414}NEPOSTOJECI ID SKINA {FFFFFF}(0-311)", "Unesite ID skina aktora.\nPrimer: 294", "U redu", "Izlaz");
120
			DestroyActor(AktorInfo[ i ][ aktorid ]);
121
			AktorInfo[ i ][ aktorid ] = CreateActor(skinid, AktorInfo[ i ][ aktorX ], AktorInfo[ i ][ aktorY ] , AktorInfo[ i ][ aktorZ ], AktorInfo[ i ][ aktorA ]);
122
			AktorInfo[ i ][ aktorskin ] = skinid;
123
			SaveAktor(i);
124
			SendClientMessage(playerid, 0x0077C7FF, "[AKTOR SYSTEM] {FFFFFF}Uspesno ste promenili skin aktoru.");
125
		}
126
	}
127
	else if(dialogid == DIALOG_IZMENIIME) {
128
		if(!response) return 1;
129
		if(response) {
130
			new actime[ 40 ], str[ 60 ], i = GetNearestAktor(playerid);
131
			if(i == -1) return SendClientMessage(playerid, 0x0077C7FF, "[AKTOR SYSTEM] {FFFFFF}Niste blizu aktora.");
132
			if(sscanf(inputtext, "s[40]", actime)) return ShowPlayerDialog(playerid, DIALOG_IZMENIIME, DIALOG_STYLE_INPUT, "{0077C7}MENJANJE {FFFFFF}IMENA", "Unesite novo ime.\n{FF1414}NAPOMENA: {FFFFFF}Menja ime aktoru najblizem Vama.", "U redu", "Izlaz");
133
			format(str, sizeof(str), "%s {0077C7}[ID %d]", actime, i);
134
			Update3DTextLabelText(AktorLabel[ i ], 0xFFFFFFFF, str);
135
			AktorInfo[ i ][ aktorime ] = actime;
136
			SaveAktor(i);
137
			SendClientMessage(playerid, 0x0077C7FF, "[AKTOR SYSTEM] {FFFFFF}Uspesno ste promenili ime aktoru.");
138
		}
139
	}
140
	else if(dialogid == DIALOG_IZBRISIAKTORA) {
141
		if(!response) return 1;
142
		if(response) {
143
			switch(listitem) {
144
				case 0: {
145
					if(GetNearestAktor(playerid) == -1) return SendClientMessage(playerid, 0x0077C7FF, "[AKTOR SYSTEM] {FFFFFF}Niste blizu aktora.");
146
					new i = GetNearestAktor(playerid), aktorFile[ 60 ], str[ 60 ];
147
					DestroyActor(AktorInfo[ i ][ aktorid ]);
148
					Delete3DTextLabel(AktorLabel[ i ]);
149
					AktorInfo[ i ][ aktorX ] = 0.0; AktorInfo[ i ][ aktorY ] = 0.0; AktorInfo[ i ][ aktorZ ] = 0.0; AktorInfo[ i ][ aktorA ] = 0.0;
150
					format(str, sizeof(str), "[AKTOR SYSTEM] {FFFFFF}Uspesno ste obrisali aktora ID %d.", i);
151
					SendClientMessage(playerid, 0x0077C7FF, str);
152
					format(aktorFile, sizeof(aktorFile), AKTOR_FILE, i);
153
					if(fexist(aktorFile)) { fremove(aktorFile); }
154
				}
155
				case 1: return ShowPlayerDialog(playerid, DIALOG_BRISANJEAKTORA, DIALOG_STYLE_INPUT, "{0077C7}BRISANJE {FFFFFF}AKTORA", "Unesite ID aktora.","U redu","Izlaz");
156
			}
157
		}
158
	}
159
	else if(dialogid == DIALOG_BRISANJEAKTORA) {
160
		if(!response) return 1;
161
		if(response) {
162
			new i, str[ 60 ], aktorFile[ 60 ];
163
			if(sscanf(inputtext, "%d", i)) return ShowPlayerDialog(playerid, DIALOG_BRISANJEAKTORA, DIALOG_STYLE_INPUT, "{0077C7}BRISANJE {FFFFFF}AKTORA", "Unesite ID aktora.","U redu","Izlaz");
164
			DestroyActor(AktorInfo[ i ][ aktorid ]);
165
			Delete3DTextLabel(AktorLabel[ i ]);
166
			AktorInfo[ i ][ aktorX ] = 0.0; AktorInfo[ i ][ aktorY ] = 0.0; AktorInfo[ i ][ aktorZ ] = 0.0; AktorInfo[ i ][ aktorA ] = 0.0;
167
			format(str, sizeof(str), "[AKTOR SYSTEM] {FFFFFF}Uspesno ste obrisali aktora ID %d.", i);
168
			SendClientMessage(playerid, 0x0077C7FF, str);
169
			format(aktorFile, sizeof(aktorFile), AKTOR_FILE, i);
170
			if(fexist(aktorFile)) { fremove(aktorFile); }
171
		}
172
	}
173
    else if(dialogid == DIALOG_AKTORANIMACIJA && response)
174
	{
175
		new i = GetNearestAktor(playerid);
176
		if(i == -1) return SendErrorMessage(playerid, "Niste blizu aktora.");
177
		switch(listitem)
178
		{
179
			case 0: ApplyActorAnimation(AktorInfo[ i ][ aktorid ], "DEALER", "DEALER_IDLE", 4.0, 1, 0, 0, 0, 0);
180
			case 1: ApplyActorAnimation(AktorInfo[ i ][ aktorid ], "MISC", "SEAT_LR", 4.0, 1, 0, 0, 0, 0);
181
			case 2: ApplyActorAnimation(AktorInfo[ i ][ aktorid ], "BEACH", "bather", 4.0, 0, 1, 1, 1, -1);
182
			case 3: ApplyActorAnimation(AktorInfo[ i ][ aktorid ], "BEACH", "ParkSit_M_loop", 4.0, 0, 1, 1, 1, -1);
183
		}
184
		AktorInfo[ i ][ aktoranimacija ] = listitem+1;
185
		SaveAktor(i);
186
	}
187
	return 1;
188
}
189
 
190
CMD:aktorpanel(playerid, params[]) {
191
 
192
	if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Niste ulogovani kao RCON admin.");
193
	ShowPlayerDialog(playerid, DIALOG_AKTORPANEL, DIALOG_STYLE_LIST, "{0077C7}AKTOR {FFFFFF}PANEL", "Kreiraj aktora\nDodaj aktoru animaciju\nIzmeni aktora\nIzbrisi aktora","Izaberi","Izlaz");
194
	return 1;
195
}
196
GetNearestAktor( playerid ) {
197
    for( new b = 1; b < sizeof(AktorInfo); b++) {
198
        if( IsPlayerInRangeOfPoint( playerid, 4.0, AktorInfo[ b ][ aktorX ], AktorInfo[ b ][ aktorY ], AktorInfo[ b ][ aktorZ ] ) ) return b; }
199
    return -1;
200
}
201
stock NextAktorID(const len) {
202
    new id = (-1);
203
    for( new loop = ( 0 ), provjera = ( -1 ), Data_[ 64 ] = "\0"; loop != len; ++ loop ) {
204
       provjera = ( loop+1 );
205
       format( Data_, ( sizeof Data_ ), AKTOR_FILE, provjera );
206
       if(!fexist(Data_)) {
207
          id = ( provjera );
208
          break; } }
209
  	return ( id );
210
}
211
stock SaveAktor(id) {
212
	new aktorFile[ 60 ];
213
	format(aktorFile, sizeof(aktorFile), AKTOR_FILE, id);
214
	new INI:File = INI_Open(aktorFile);
215
	INI_WriteString(File, "Ime", AktorInfo[ id ][ aktorime ]);
216
	INI_WriteFloat(File, "Lokacija_X", AktorInfo[ id ][ aktorX ]);
217
	INI_WriteFloat(File, "Lokacija_Y", AktorInfo[ id ][ aktorY ]);
218
	INI_WriteFloat(File, "Lokacija_Z", AktorInfo[ id ][ aktorZ ]);
219
	INI_WriteFloat(File, "Rotacija_A", AktorInfo[ id ][ aktorA ]);
220
	INI_WriteInt(File, "Skin", AktorInfo[ id ][ aktorskin ]);
221
	INI_Close(File);
222
}