· 6 years ago · Jul 12, 2019, 03:24 PM
1#define FILTERSCRIPT
2
3#include <a_samp>
4#include <a_mysql>
5#include <foreach>
6#include <streamer>
7#include <sscanf2>
8#include <zcmd>
9
10//===== MySql =====//
11#define SQL_HOST "localhost"
12#define SQL_USER "root"
13#define SQL_PASSWORD ""
14#define SQL_DBNAME "lsrrp"
15//===== END =====//
16
17#define COLOR_GREEN 0x008000FF
18#define COLOR_YELLOW 0xFFFF00FF
19#define COLOR_RED 0xFF0000FF
20
21#define MAX_ICONS 1000
22
23#define DIALOG_CREATE_ICON 3365
24#define DIALOG_EDIT_ICON 3375
25
26enum IconData
27{
28 ID,
29 Icon,
30 IconID,
31 Float:PosX,
32 Float:PosY,
33 Float:PosZ
34};
35new IconInfo[MAX_ICONS][IconData],
36 SelectedIcon[MAX_PLAYERS],
37 Iterator:Icons<MAX_ICONS>,
38 MySQL:mysql
39;
40
41public OnFilterScriptInit()
42{
43 mysql = mysql_connect(SQL_HOST, SQL_USER, SQL_PASSWORD, SQL_DBNAME);
44
45 mysql_tquery(mysql, "CREATE TABLE IF NOT EXISTS `DynamicIcons` (\
46 `ID` int(5) NOT NULL AUTO_INCREMENT UNIQUE KEY,\
47 `MapIcon` int(8) NOT NULL,\
48 `PosX` float NOT NULL,\
49 `PosY` float NOT NULL,\
50 `PosZ` float NOT NULL)");
51
52 mysql_tquery(mysql, "SELECT * FROM `DynamicIcons`", "LoadDynamicIcons");
53 return 1;
54}
55
56public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
57 switch(dialogid) {
58 case DIALOG_CREATE_ICON: {
59 if(response) {
60 switch(listitem) {
61 case 0: {
62 ShowPlayerDialog(playerid, DIALOG_CREATE_ICON + 1, DIALOG_STYLE_INPUT, "Map Icon ID", "Enter the Map Icon id below", "Next", "Close");
63 }
64 case 1: {
65 new id = Iter_Free(Icons);
66 if(id == -1) return SendClientMessage(playerid, COLOR_RED, "[WARN] {FFFFFF}You can't create more Map Icon");
67 if(strlen(IconInfo[id][ID]) < 0) return SendClientMessage(playerid, COLOR_RED, "[WARN] {FFFFFF}Please enter a valid ID");
68 if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED, "[WARN] {FFFFFF}You must be on foot to create the Map Icon");
69
70 GetPlayerPos(playerid, IconInfo[id][PosX], IconInfo[id][PosY], IconInfo[id][PosZ]);
71 IconInfo[id][Icon] = CreateDynamicMapIcon(IconInfo[id][PosX], IconInfo[id][PosY], IconInfo[id][PosZ], IconInfo[id][IconID], 0, -1, -1, -1, -1, 0);
72
73 new query[200];
74 format(query, sizeof(query), "[SUCCESS] {FFFFFF}You have created a new icons with ID: %i", id);
75 SendClientMessage(playerid, COLOR_GREEN, query);
76 GetPlayerPos(playerid, IconInfo[id][PosX], IconInfo[id][PosY], IconInfo[id][PosZ]);
77 SetPlayerPos(playerid, IconInfo[id][PosX] + 0.1, IconInfo[id][PosY], IconInfo[id][PosZ]); //Make the icon visible xD
78
79 mysql_format(mysql, query, sizeof(query), "INSERT INTO `DynamicIcons` (MapIcon, PosX, PosY, PosZ)\
80 VALUES ('%d', %f, %f, %f)", IconInfo[id][IconID], IconInfo[id][PosX], IconInfo[id][PosY], IconInfo[id][PosZ]);
81 mysql_tquery(mysql, query, "OnIconCreated", "i", id);
82 }
83 }
84 }
85 }
86 case DIALOG_CREATE_ICON + 1: {
87 if(response) {
88 new id = Iter_Free(Icons);
89 if(!IsNumeric(inputtext)) return SendClientMessage(playerid, COLOR_RED, "[WARN] {FFFFFF}Map Icon ID is not a string. (0-63)");
90 if(strval(inputtext) < 0 || strval(inputtext) > 63) return SendClientMessage(playerid, COLOR_RED, "[WARN] {FFFFFF}Please enter a valid Map Icon ID. (0-63)");
91
92 IconInfo[id][IconID] = strval(inputtext);
93
94 new strcmd[5];
95 format(strcmd, sizeof(strcmd), "%i", id);
96 cmd_createicon(playerid, strcmd);
97 }
98 }
99 case DIALOG_EDIT_ICON: {
100 if(response) {
101 switch(listitem) {
102 case 1: {
103 ShowPlayerDialog(playerid, DIALOG_EDIT_ICON + 1, DIALOG_STYLE_INPUT, "Map Icon ID", "Enter the Map Icon ID below", "Next", "Close");
104 }
105 case 2: {
106 new id = SelectedIcon[playerid];
107 DestroyDynamicMapIcon(IconInfo[id][Icon]);
108
109 GetPlayerPos(playerid, IconInfo[id][PosX], IconInfo[id][PosY], IconInfo[id][PosZ]);
110 IconInfo[id][Icon] = CreateDynamicMapIcon(IconInfo[id][PosX], IconInfo[id][PosY], IconInfo[id][PosZ], IconInfo[id][IconID], 0, -1, -1, -1, -1, 0);
111
112 SendClientMessage(playerid, COLOR_GREEN, "[SUCCESS] {FFFFFF}You have moved a new icons to here.");
113
114 MemekGedeWkwkw(id); //Save Rencent Edit
115
116 new strcmd[5];
117 format(strcmd, sizeof(strcmd), "%i", id);
118 cmd_editicon(playerid, strcmd);
119 }
120 case 3: {
121 new id = SelectedIcon[playerid];
122 SetPlayerPos(playerid, IconInfo[id][PosX], IconInfo[id][PosY], IconInfo[id][PosZ]);
123 SendClientMessage(playerid, COLOR_GREEN, "[SUCCESS] {FFFFFF}You have teleport to map icon.");
124 cmd_editicon(playerid, "");
125 return 1;
126 }
127 case 4: {
128 new id = SelectedIcon[playerid];
129 DestroyDynamicMapIcon(IconInfo[id][Icon]);
130 Iter_Remove(Icons, id);
131
132 SendClientMessage(playerid, COLOR_GREEN, "[SUCCESS] {FFFFFF}You has been removed map icons.");
133
134 new query[60];
135 mysql_format(mysql, query, sizeof(query), "DELETE FROM `DynamicIcons` WHERE `ID` = %i", IconInfo[id][ID]);
136 mysql_tquery(mysql, query);
137 return 1;
138 }
139 }
140 }
141 }
142 case DIALOG_EDIT_ICON + 1: {
143 if(response) {
144 if(!IsNumeric(inputtext)) return SendClientMessage(playerid, COLOR_RED, "[WARN] {FFFFFF}Map Icon ID is not a string. (0-63)");
145 if(strval(inputtext) < 0 || strval(inputtext) > 63) return SendClientMessage(playerid, COLOR_RED, "[WARN] {FFFFFF}Please enter a valid Map Icon ID. (0-63)");
146
147 new id = SelectedIcon[playerid];
148 DestroyDynamicMapIcon(IconInfo[id][Icon]);
149 IconInfo[id][IconID] = strval(inputtext);
150
151 IconInfo[id][Icon] = CreateDynamicMapIcon(IconInfo[id][PosX], IconInfo[id][PosY], IconInfo[id][PosZ], IconInfo[id][IconID], 0, -1, -1, -1, -1, 0);
152 GetPlayerPos(playerid, IconInfo[id][PosX], IconInfo[id][PosY], IconInfo[id][PosZ]);
153 SetPlayerPos(playerid, IconInfo[id][PosX] + 0.1, IconInfo[id][PosY], IconInfo[id][PosZ]); //Make the icon visible xD
154
155 SendClientMessage(playerid, COLOR_GREEN, "[SUCCESS] {FFFFFF}You changed map icon id.");
156
157 MemekGedeWkwkw(id); //Save Rencent Edit
158
159 new strcmd[5];
160 format(strcmd, sizeof(strcmd), "%i", id);
161 cmd_editicon(playerid, strcmd);
162 }
163 }
164 }
165 return 0;
166}
167
168forward OnIconCreated(iconid);
169public OnIconCreated(iconid) {
170
171 IconInfo[iconid][ID] = cache_insert_id();
172 Iter_Add(Icons, iconid);
173 return 1;
174}
175
176forward LoadDynamicIcons();
177public LoadDynamicIcons() {
178 new rows = cache_num_rows();
179 if(rows) {
180 for(new i; i < rows; i++) {
181 new id = Iter_Free(Icons);
182 cache_get_value_name_int(i, "ID", IconInfo[id][ID]);
183 cache_get_value_name_int(i, "MapIcon", IconInfo[id][IconID]);
184 cache_get_value_name_float(i, "PosX", IconInfo[id][PosX]);
185 cache_get_value_name_float(i, "PosY", IconInfo[id][PosY]);
186 cache_get_value_name_float(i, "PosZ", IconInfo[id][PosZ]);
187
188 IconInfo[id][Icon] = CreateDynamicMapIcon(IconInfo[id][PosX], IconInfo[id][PosY], IconInfo[id][PosZ], IconInfo[id][IconID], 0, -1, -1, -1, -1, 0);
189
190 Iter_Add(Icons, id);
191 }
192 printf("Loaded %i dynamic icons", rows);
193 }
194}
195
196CMD:createicon(playerid, params[])
197{
198 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You must be an administrator to use this command");
199 new id = Iter_Free(Icons);
200
201 new string[254];
202 format(string, sizeof(string), "{FFFFFF}Map Icon ID: {00FF00}%d\n{00FF00}Create Map Icon", IconInfo[id][IconID]);
203 ShowPlayerDialog(playerid, DIALOG_CREATE_ICON, DIALOG_STYLE_LIST, "Create Map Icon", string, "Select", "Cancel");
204 return 1;
205}
206
207CMD:editicon(playerid, params[])
208{
209 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You must be an administrator to use this command");
210 new id;
211 if(sscanf(params, "i", id)) return SendClientMessage(playerid, COLOR_RED, "[WARN] {FFFFFF}Edit Map Icon: /editicon <ID>");
212 if(!Iter_Contains(Icons, id)) return SendClientMessage(playerid, COLOR_RED, "[WARN] {FFFFFF}Invalid map icon id. (Not In Your Database?)");
213 SelectedIcon[playerid] = id;
214
215 new string[254], ids;
216 ids = Iter_Free(Icons) -1;
217 format(string, sizeof(string), "{FFFFFF}ID: {00FF00}%d\n{FFFFFF}Map Icon ID: {00FF00}%d\n\
218 Move Map Icon To Here\n{00FF00}Teleport to Map Icon\n{FF0000}Destroy Map Icon", ids, IconInfo[id][IconID]);
219 ShowPlayerDialog(playerid, DIALOG_EDIT_ICON, DIALOG_STYLE_LIST, "Edit Map Icon", string, "Select", "Cancel");
220 return 1;
221}
222
223CMD:icons(playerid, params[]) {
224
225 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You must be an administrator to use this command");
226 if(Iter_Count(Icons) == 0) return SendClientMessage(playerid, COLOR_YELLOW, "[INFO] {FFFFFF}There are no labels currently");
227
228 new string[128], s[300];
229 foreach(new i : Icons) {
230 format(string, sizeof(string), "{FFFFFF}ID: {00FF00}%i {FFFFFF}Map Icon ID: {00FF00}%i\n", i, IconInfo[i][IconID]);
231 strcat(s, string);
232 }
233 ShowPlayerDialog(playerid, 3454, DIALOG_STYLE_LIST, "3D Map Icond", s, "Close", "");
234 return 1;
235}
236
237IsNumeric(string[])
238{
239 for (new i = 0, j = strlen(string); i < j; i++)
240 {
241 if (string[i] > '9' || string[i] < '0') return 0;
242 }
243 return 1;
244}
245
246stock MemekGedeWkwkw(IDJembut)
247{
248 new query[1024];
249 mysql_format(mysql, query, sizeof(query), "UPDATE `DynamicIcons` SET MapIcon='%d', PosX='%f', PosY='%f', PosZ='%f' WHERE id='%d'",
250 IconInfo[IDJembut][IconID], IconInfo[IDJembut][PosX], IconInfo[IDJembut][PosY], IconInfo[IDJembut][PosZ], IconInfo[IDJembut][Icon]);
251 mysql_tquery(mysql, query, "OnIconCreated", "i", IDJembut);
252}