· 8 years ago · Apr 15, 2018, 07:40 AM
1#include < a_samp >
2#include < a_mysql >
3#include < foreach >
4#include < sscanf2 >
5#include < zcmd >
6
7#define MAX_KAPIJE 500
8
9#define MYSQL_HOST "127.0.0.1"
10#define MYSQL_USER "root"
11#define MYSQL_PASSWORD ""
12#define MYSQL_DATABASE "testkont"
13
14enum { DIALOG_KAPIJAPASS }
15
16enum KAPIJA_INFO {
17
18 Float:kapPos[ 3 ],
19 Float:kapRot[ 3 ],
20 Float:zkapPos[ 3 ],
21 Float:zkapRot[ 3 ],
22 kapLozinka,
23 kapBrzinaZ,
24 kapVremeZ,
25 kapObjID,
26 kapID,
27 bool:kapOtvorena
28}
29
30new MySQL:g_SQL, Iterator:ServerKapije<MAX_KAPIJE>, KucaSifru[ MAX_PLAYERS ], KapijaInfo[ MAX_KAPIJE ][ KAPIJA_INFO ], KapijaTimer[ MAX_KAPIJE ], KreiraKapiju[ MAX_PLAYERS ], bool:KreiraOtvorenu[ MAX_PLAYERS ];
31
32public OnFilterScriptInit() {
33
34 new MySQLOpt: option_id = mysql_init_options();
35 g_SQL = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, option_id);
36 if (g_SQL == MYSQL_INVALID_HANDLE || mysql_errno(g_SQL) != 0)
37 {
38 print("MySQL konekcija neuspesna. Proverite podatke i databazu");
39 SendRconCommand("exit");
40 return 1;
41 }
42
43 print("MySQL konekcija, uspesna");
44 SetupGateTable();
45 mysql_tquery(g_SQL, "SELECT * FROM `kapije`", "LoadKapije", "");
46 return 1;
47}
48public OnPlayerConnect(playerid) {
49
50 KreiraKapiju[ playerid ] = -1;
51 KucaSifru[ playerid ] = -1;
52 return 1;
53}
54public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ) {
55
56 if(response == EDIT_RESPONSE_FINAL) {
57 if(KreiraKapiju[ playerid ] != -1) {
58 new i = KreiraKapiju[ playerid ];
59 if(!KreiraOtvorenu[ playerid ]) {
60 KapijaInfo[ i ][ kapPos ][ 0 ] = fX;
61 KapijaInfo[ i ][ kapPos ][ 1 ] = fY;
62 KapijaInfo[ i ][ kapPos ][ 2 ] = fZ;
63 KapijaInfo[ i ][ kapRot ][ 0 ] = fRotX;
64 KapijaInfo[ i ][ kapRot ][ 1 ] = fRotY;
65 KapijaInfo[ i ][ kapRot ][ 2 ] = fRotZ;
66 EditObject(playerid, KapijaInfo[ i ][ kapID ]);
67 KreiraOtvorenu[ playerid ] = true;
68 SendClientMessage(playerid, -1, "Sada sacuvajte pozicije otvorene kapije.");
69 }
70 else {
71 new query[ 700 ];
72 DestroyObject(KapijaInfo[ i ][ kapID ]);
73 KapijaInfo[ i ][ kapID ] = CreateObject(KapijaInfo[ i ][ kapObjID ], KapijaInfo[ i ][ kapPos ][ 0 ], KapijaInfo[ i ][ kapPos ][ 1 ], KapijaInfo[ i ][ kapPos ][ 2 ], KapijaInfo[ i ][ kapRot ][ 0 ], KapijaInfo[ i ][ kapRot ][ 1 ], KapijaInfo[ i ][ kapRot ][ 2 ]);
74 KapijaInfo[ i ][ zkapPos ][ 0 ] = fX;
75 KapijaInfo[ i ][ zkapPos ][ 1 ] = fY;
76 KapijaInfo[ i ][ zkapPos ][ 2 ] = fZ;
77 KapijaInfo[ i ][ zkapRot ][ 0 ] = fRotX;
78 KapijaInfo[ i ][ zkapRot ][ 1 ] = fRotY;
79 KapijaInfo[ i ][ zkapRot ][ 2 ] = fRotZ;
80 mysql_format(g_SQL, query, sizeof query, "INSERT INTO `kapije` (`Lokacija_X`, `Lokacija_Y`, `Lokacija_Z`, `Rotacija_X`, `Rotacija_Y`, `Rotacija_Z`, `Otvorena_X`, `Otvorena_Y`, `Otvorena_Z`, `Otvorena_RX`, `Otvorena_RY`, `Otvorena_RZ`, `Lozinka`, `Object_ID`, `Vreme_Zatvaranja`, `Brzina_Zatvaranja`) \
81 VALUES ('%f', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%d', '%d', '%d', '%d')", KapijaInfo[ i ][ kapPos ][ 0 ], KapijaInfo[ i ][ kapPos ][ 1 ], KapijaInfo[ i ][ kapPos ][ 2 ], KapijaInfo[ i ][ kapRot ][ 0 ], KapijaInfo[ i ][ kapRot ][ 1 ], KapijaInfo[ i ][ kapRot ][ 2 ], fX, fY, fZ, fRotX, fRotY, fRotZ, KapijaInfo[ i ][ kapLozinka ], KapijaInfo[ i ][ kapObjID ], KapijaInfo[ i ][ kapVremeZ ], KapijaInfo[ i ][ kapBrzinaZ ]);
82 mysql_tquery(g_SQL, query);
83 KreiraKapiju[ playerid ] = -1;
84 KreiraOtvorenu[ playerid ] = false;
85 SendClientMessage(playerid, -1, "Uspesno ste zavrsili kreiranje.");
86 }
87 }
88 }
89 return 1;
90}
91public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
92
93 if(newkeys == KEY_CROUCH) {
94 for(new i; i < MAX_KAPIJE; i++) {
95 if(IsPlayerInRangeOfPoint(playerid, 7.0, KapijaInfo[ i ][ kapPos ][ 0 ], KapijaInfo[ i ][ kapPos ][ 1 ], KapijaInfo[ i ][ kapPos ][ 2 ])) {
96 if(!KapijaInfo[ i ][ kapOtvorena ] && KucaSifru[ playerid ] == -1) { KucaSifru[ playerid ] = i; ShowPlayerDialog(playerid, DIALOG_KAPIJAPASS, DIALOG_STYLE_INPUT, "LOZINKA","Upisite lozinku kapije.","U redu","Izlaz"); }
97 else {
98 KillTimer(KapijaTimer[ i ]);
99 KapijaInfo[ i ][ kapOtvorena ] = false;
100 MoveObject(KapijaInfo[ i ][ kapID ], KapijaInfo[ i ][ kapPos ][ 0 ], KapijaInfo[ i ][ kapPos ][ 1 ], KapijaInfo[ i ][ kapPos ][ 2 ], KapijaInfo[ i ][ kapBrzinaZ ], KapijaInfo[ i ][ kapRot ][ 0 ], KapijaInfo[ i ][ kapRot ][ 1 ], KapijaInfo[ i ][ kapRot ][ 2 ]);
101 SendClientMessage(playerid, -1, "Zatvorili ste kapiju.");
102 }
103 }
104 }
105 }
106 return 1;
107}
108public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
109
110 switch(dialogid) {
111 case DIALOG_KAPIJAPASS: {
112 if(response) {
113 new i = KucaSifru[ playerid ];
114 if(strval(inputtext) != KapijaInfo[ i ][ kapLozinka ]) return KucaSifru[ playerid ] = -1;
115 KapijaTimer[ i ] = SetTimerEx("CloseGate", KapijaInfo[ i ][ kapVremeZ ]*1000, false, "i", i);
116 KapijaInfo[ i ][ kapOtvorena ] = true;
117 MoveObject(KapijaInfo[ i ][ kapID ], KapijaInfo[ i ][ zkapPos ][ 0 ], KapijaInfo[ i ][ zkapPos ][ 1 ], KapijaInfo[ i ][ zkapPos ][ 2 ], KapijaInfo[ i ][ kapBrzinaZ ], KapijaInfo[ i ][ zkapRot ][ 0 ], KapijaInfo[ i ][ zkapRot ][ 1 ], KapijaInfo[ i ][ zkapRot ][ 2 ]);
118 SendClientMessage(playerid, -1, "Otvorili ste kapiju, zatvorice se automatski.");
119 KucaSifru[ playerid ] = -1;
120 }
121 else return KucaSifru[ playerid ] = -1;
122 }
123 }
124 return 1;
125}
126forward CloseGate(i); public CloseGate(i) {
127
128 KapijaInfo[ i ][ kapOtvorena ] = false;
129 MoveObject(KapijaInfo[ i ][ kapID ], KapijaInfo[ i ][ kapPos ][ 0 ], KapijaInfo[ i ][ kapPos ][ 1 ], KapijaInfo[ i ][ kapPos ][ 2 ], KapijaInfo[ i ][ kapBrzinaZ ], KapijaInfo[ i ][ kapRot ][ 0 ], KapijaInfo[ i ][ kapRot ][ 1 ], KapijaInfo[ i ][ kapRot ][ 2 ]);
130 return 1;
131}
132forward LoadKapije(); public LoadKapije() {
133 new rows = cache_num_rows();
134 if(rows) {
135
136 for(new i; i < rows; i++) {
137
138 new id = Iter_Free(ServerKapije);
139
140 cache_get_value_name_float(i, "Lokacija_X", KapijaInfo[ id ][ kapPos ][ 0 ]);
141 cache_get_value_name_float(i, "Lokacija_Y", KapijaInfo[ id ][ kapPos ][ 1 ]);
142 cache_get_value_name_float(i, "Lokacija_Z", KapijaInfo[ id ][ kapPos ][ 2 ]);
143 cache_get_value_name_float(i, "Rotacija_X", KapijaInfo[ id ][ kapRot ][ 0 ]);
144 cache_get_value_name_float(i, "Rotacija_Y", KapijaInfo[ id ][ kapRot ][ 1 ]);
145 cache_get_value_name_float(i, "Rotacija_Z", KapijaInfo[ id ][ kapRot ][ 2 ]);
146 cache_get_value_name_float(i, "Otvorena_X", KapijaInfo[ id ][ zkapPos ][ 0 ]);
147 cache_get_value_name_float(i, "Otvorena_Y", KapijaInfo[ id ][ zkapPos ][ 1 ]);
148 cache_get_value_name_float(i, "Otvorena_Z", KapijaInfo[ id ][ zkapPos ][ 2 ]);
149 cache_get_value_name_float(i, "Otvorena_RX", KapijaInfo[ id ][ zkapRot ][ 0 ]);
150 cache_get_value_name_float(i, "Otvorena_RY", KapijaInfo[ id ][ zkapRot ][ 1 ]);
151 cache_get_value_name_float(i, "Otvorena_RZ", KapijaInfo[ id ][ zkapRot ][ 2 ]);
152 cache_get_value_name_int(i, "Lozinka", KapijaInfo[ id ][ kapLozinka ]);
153 cache_get_value_name_int(i, "Object_ID", KapijaInfo[ id ][ kapObjID ]);
154 cache_get_value_name_int(i, "Vreme_Zatvaranja", KapijaInfo[ id ][ kapVremeZ ]);
155 cache_get_value_name_int(i, "Brzina_Zatvaranja", KapijaInfo[ id ][ kapBrzinaZ ]);
156
157 KapijaInfo[ id ][ kapID ] = CreateObject(KapijaInfo[ id ][ kapObjID ], KapijaInfo[ id ][ kapPos ][ 0 ], KapijaInfo[ id ][ kapPos ][ 1 ], KapijaInfo[ id ][ kapPos ][ 2 ], KapijaInfo[ id ][ kapRot ][ 0 ], KapijaInfo[ id ][ kapRot ][ 1 ], KapijaInfo[ id ][ kapRot ][ 2 ]);
158
159 Iter_Add(ServerKapije, id);
160 }
161 }
162 return 1;
163}
164
165CMD:kreirajkapiju(playerid, params[]) {
166
167 new lozinka, vremez, brzinaz, objid, Float:Pos[ 3 ], i = Iter_Free(ServerKapije);
168 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Niste RCON Admin.");
169 if(sscanf(params, "dddd", objid, lozinka, vremez, brzinaz)) return SendClientMessage(playerid, -1, "/kreirajkapiju [Object ID] [Lozinka] [Vreme Zatvaranja] [Brzina Zatvaranja]");
170 if(vremez < 3) return SendClientMessage(playerid, -1, "Vreme zatvaranja kapije ne moze biti manje od 3.");
171 if(brzinaz < 1 || brzinaz > 10) return SendClientMessage(playerid, -1, "Brzina zatvaranja kapije ne moze biti manja od 1 ili veca od 10.");
172 GetPlayerPos(playerid, Pos[ 0 ], Pos[ 1 ], Pos[ 2 ]);
173 KapijaInfo[ i ][ kapID ] = CreateObject(objid, Pos[ 0 ]+2, Pos[ 1 ]+2, Pos[ 2 ], 0.0, 0.0, 0.0);
174 KapijaInfo[ i ][ kapObjID ] = objid;
175 KapijaInfo[ i ][ kapLozinka ] = lozinka;
176 KapijaInfo[ i ][ kapVremeZ ] = vremez;
177 KapijaInfo[ i ][ kapBrzinaZ ] = brzinaz;
178 KreiraKapiju[ playerid ] = i;
179 SendClientMessage(playerid, -1, "Zapoceli ste kreiranje kapije.");
180 EditObject(playerid, KapijaInfo[ i ][ kapID ]);
181 return 1;
182}
183
184SetupGateTable() {
185
186 mysql_tquery(g_SQL, "CREATE TABLE IF NOT EXISTS `kapije` (`id` int(11) NOT NULL AUTO_INCREMENT,`Lokacija_X` float NOT NULL,`Lokacija_Y` float NOT NULL,`Lokacija_Z` float NOT NULL,`Rotacija_X` float NOT NULL, `Rotacija_Y` float NOT NULL, `Rotacija_Z` float NOT NULL, `Otvorena_X` float NOT NULL,`Otvorena_Y` float NOT NULL,`Otvorena_Z` float NOT NULL,`Otvorena_RX` float NOT NULL, `Otvorena_RY` float NOT NULL, `Otvorena_RZ` float NOT NULL, `Object_ID` int(5) NOT NULL, `Lozinka` int(15) NOT NULL, `Vreme_Zatvaranja` int(5) NOT NULL, `Brzina_Zatvaranja` int(2) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`))");
187 return 1;
188}