· 6 years ago · Apr 15, 2019, 09:42 PM
1#include <a_samp>
2#include <a_mysql>
3
4main(){}
5
6native WP_Hash(buffer[], len, const str[]);
7//Forwardy
8forward bool:IsStrValid(const string[]);
9
10//Ustawienia
11#define MONEY_MONEY_START 2500
12
13//Dialogi
14#define REGISTER1_DIALOG 0
15#define LOGIN_DIALOG 1
16#define REGISTER2_DIALOG 2
17#define REGISTER3_DIALOG 3
18//Definicje
19#define SKRYPT_NAME "Najlepszy Polski Serwer"
20#define SKRYPT_VER "V1.0.0"
21#define INFO_STRING "{008080}[INFO]{C0C0C0}: "
22#define ERROR_STRING "{FF0000}[BÅÄ„D]{800000}: "
23
24#define GENDER_MALE 0
25#define GENDER_FEMALE 1
26
27//eNUMY
28enum DataPlayer
29{
30 bool:LoggedIn,
31 bool:ShowMouse,
32 Cache:Cache_ID,
33 UID,
34 Password[129],
35 Age,
36 Lvl,
37 Gender,
38 IDSkin,
39 Money,
40 AdminLV
41};
42new Player[MAX_PLAYERS][DataPlayer];
43new MySQL:SQL_ID;
44
45public OnGameModeInit()
46{
47 UsePlayerPedAnims();
48
49 for(new idskinow=0; idskinow < 311; idskinow++)
50 {
51 AddPlayerClass(idskinow, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0, 0);
52 }
53 printf("Gamemode %s %s ® by Kreto Wystartował", SKRYPT_NAME, SKRYPT_VER);
54 if(MySQL_Init())
55 {
56 //Wczytywanie
57 MySQL_SetUpTables();
58
59 //Timer
60 SetTimer("SecondUpdate", 1000, true);
61
62
63 printf("Gamemode %s %s ® by Kreto działa\n", SKRYPT_NAME, SKRYPT_VER);
64 }
65 return 1;
66}
67
68public OnGameModeExit()
69{
70 mysql_close(SQL_ID);
71 return 1;
72}
73
74public OnPlayerRequestSpawn(playerid)
75{
76
77 return 1;
78}
79
80public OnPlayerRequestClass(playerid, classid)
81{
82 SpawnPlayer(playerid);
83 return 1;
84}
85
86public OnPlayerConnect(playerid)
87{
88 ClearPlayerChat(playerid);
89 SetSpawnInfo(playerid, NO_TEAM, 181, 1248.2993,-1563.6338,12.6017, 186.4331, 0, 0, 0, 0, 0, 0);
90 return 1;
91}
92
93
94public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
95{
96 switch(dialogid)
97 {
98 case REGISTER3_DIALOG: // Rejestracja wiek
99 {
100 if(IsNumeric(inputtext) && strlen(inputtext) == 2 && strval(inputtext) >= 13 && strval(inputtext) <= 30 )
101 {
102 Player[playerid][Age] = strval(inputtext);
103 SetPlayerPos(playerid, 2324.3662, -1148.7382, 1050.7101);
104 SetPlayerInterior(playerid, 12);
105 SetPlayerFacingAngle(playerid, 359.6589);
106 SetPlayerCameraPos(playerid, 2324.5247, -1138.4045, 1050.4990);
107 SetPlayerCameraLookAt(playerid, 1248.2993,-1563.6338,12.6017, CAMERA_MOVE);
108 InterpolateCameraPos(playerid, 2324.5247, -1138.4045, 1051.4990, 2324.3113, -1145.3605, 1050.7101, 5000, CAMERA_MOVE);
109 InterpolateCameraLookAt(playerid, 1248.2993, -1563.6338, 12.6017, 2324.3662, -1148.7382, 1050.7101, 5000, CAMERA_MOVE);
110 }
111 else
112 {
113 ShowPlayerDialog(playerid, REGISTER3_DIALOG, DIALOG_STYLE_INPUT, "Rejestracja", "Podaj swój wiek", "Akceptuj", "Opuść Serwer");
114 SendClientMessage(playerid, -1, ERROR_STRING"Żeby zagrać musisz mieć 13-30 lat!");
115 }
116 }
117 case REGISTER2_DIALOG: // Rejestracja wybór Gender
118 {
119 Player[playerid][Gender] = response;
120 ShowPlayerDialog(playerid, REGISTER3_DIALOG, DIALOG_STYLE_INPUT, "Rejestracja", "Podaj swój wiek", "Akceptuj", "Opuść Serwer");
121 }
122 case REGISTER1_DIALOG: //zAKÅADNIE KONTA
123 {
124 if(strlen(inputtext) >= 6 && IsStrValid(inputtext))
125 {
126 WP_Hash(Player[playerid][Password], 129, inputtext);
127 ShowPlayerDialog(playerid, REGISTER2_DIALOG, DIALOG_STYLE_MSGBOX, "Rejestracja", "Wybierz swoją przynależność sexualną.", "Mężczyzna", "Kobieta");
128 }
129 else
130 {
131 ShowPlayerDialog(playerid, REGISTER1_DIALOG, DIALOG_STYLE_PASSWORD, "REJESTRACJA", "Aby zagrać na serwerze, prosimy stwórz konto. \nHasło proszę wpisać poniżej", "Akceptuj", "Anuluj");
132 SendClientMessage(playerid, -1, ERROR_STRING"Hasło powinno zawierać min. 8 zanków, nie może zawierać przerw ani znaków specjalnych!!");
133 }
134 }
135 }
136 return 0;
137}
138
139public OnPlayerSpawn(playerid)
140{
141 new query[258];
142 if(Player[playerid][LoggedIn] == false)
143 {
144 // nie zalogowany
145 SetPlayerInterior(playerid, 12);
146 SetPlayerPos(playerid, 2324.3040, -1135.8479, 1051.3047);
147 SetPlayerFacingAngle(playerid, 180.2658);
148 SetPlayerVirtualWorld(playerid, 50 + playerid);
149 SetPlayerCameraPos(playerid, 2324.5247, -1138.4045, 1050.4990);
150 SetPlayerCameraLookAt(playerid, 2324.3040, -1135.8479, 1051.3047);
151 TogglePlayerControllable(playerid, false);
152 ShowPlayerMouse(playerid, true);
153 mysql_format(SQL_ID, query, sizeof query, "SELECT * FROM players_accounts WHERE Login = '%s' LIMIT 1", PlayerName(playerid));
154 mysql_tquery(SQL_ID, query, "OnAccountCheck", "i", playerid);
155 }
156 else
157 {
158 //zalogowany
159
160 }
161 return 1;
162}
163
164//CALLBACK MYSQL
165forward OnAccountCheck(playerid);
166public OnAccountCheck (playerid)
167{
168 if(cache_num_rows() > 0)
169 {
170 //konto odnalezione
171 cache_get_value(0, "password", Player[playerid][Password], 129);
172 Player[playerid][Cache_ID] = cache_save();
173 ShowPlayerDialog(playerid, LOGIN_DIALOG, DIALOG_STYLE_PASSWORD, "Logowanie", "Znaleźliśmy rejestrację Twojego konta. /nPodaj hasło aby zagrać.", "Logowanie", "Opuść Serwer");
174 }
175 else
176 {
177 //Konton nie odnalezione
178 ShowPlayerDialog(playerid, REGISTER1_DIALOG, DIALOG_STYLE_PASSWORD, "REJESTRACJA", "Aby zagrać na serwerze, prosimy stwórz konto. \nHasło proszę wpisać poniżej", "Akceptuj", "Anuluj");
179 }
180 return 1;
181}
182
183 stock IsNumeric(const string[])
184{
185 for (new i = 0, j = strlen(string); i < j; i++)
186 {
187 if (string[i] > '9' || string[i] < '0') return 0;
188 }
189 return 1;
190}
191
192
193
194stock bool:IsStrValid(const string[])
195{
196 new num;
197 new len = strlen(string);
198 for(new i; i < len; i++)
199 switch(string[i])
200 {
201 case 'A'..'Z':num++;
202 case 'a'..'z':num++;
203 case '0'..'9':num++;
204 }
205 if(num == len) return true;
206 else return false;
207}
208
209//Timery
210forward SecondUpdate();
211public SecondUpdate()
212{
213 for(new playerid, j = GetPlayerPoolSize(); playerid <= j; playerid++)
214 {
215 if(IsPlayerConnected(playerid))
216 {
217 if(Player[playerid][ShowMouse])
218 {
219 ShowPlayerMouse(playerid, true);
220 }
221 }
222 }
223 return 1;
224}
225
226//STOCKI
227stock PlayerName(playerid)
228{
229 new name[MAX_PLAYER_NAME];
230 GetPlayerName(playerid, name, sizeof name);
231 return name;
232}
233
234forward ShowPlayerMouse(playerid, bool:show);
235public ShowPlayerMouse(playerid, bool:show)
236{
237 if(show)
238 {
239 SelectTextDraw(playerid, -1);
240 Player[playerid][ShowMouse] = true;
241 }
242 else
243 {
244 CancelSelectTextDraw(playerid);
245 Player[playerid][ShowMouse] = false;
246 }
247 return 1;
248}
249
250stock ClearPlayerChat(playerid)
251{
252 for(new i; i < 15; i++)
253 SendClientMessage(playerid, -1, " ");
254 return 1;
255}
256
257stock MySQL_SetUpTables ()
258{
259 mysql_tquery(SQL_ID, " CREATE TABLE IF NOT EXISTS `Players Accounts` ( \
260 `uid` INT(11) NOT NULL AUTO_INCREMENT, \
261 `Login` TEXT NOT NULL COLLATE 'utf8_polish_ci', \
262 `password` TEXT NOT NULL COLLATE 'utf8_polish_ci', \
263 `ID Skina` INT(11) NOT NULL, \
264 `money` INT(11) NOT NULL DEFAULT '0', \
265 `gender` INT(11) NOT NULL, \
266 `age` INT(11) NOT NULL, \
267 `lvl` INT(11) NOT NULL DEFAULT '1', \
268 `admin lv` INT(11) NOT NULL DEFAULT '0', \
269 `lastip` TEXT NOT NULL COLLATE 'utf8_polish_ci', \
270 `lastonline` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, \
271 `createdate` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, \
272 PRIMARY KEY (`uid`))");
273 return 1;
274}
275
276stock MySQL_Init()
277{
278 mysql_log();
279 SQL_ID = mysql_connect_file("mysql.ini");
280 if(SQL_ID == MYSQL_INVALID_HANDLE ||mysql_errno(SQL_ID) != 0)
281 {
282 print("[MYSQL - BLAD] Nie można było połączyć się z bazą danych! Serwer wyłączony ..!");
283 SendRconCommand("exit");
284 return 0;
285 }
286 print("[MYSQL] Połączenie z bazą danych zostało nawiązane!");
287 return 1;
288}