· 6 years ago · Jun 27, 2019, 06:52 PM
1#include <a_samp>
2#include <a_mysql>
3#include <Pawn.CMD>
4
5main() {}
6
7#define MYSQL_HOST "127.0.0.1"
8#define MYSQL_USER "root"
9#define MYSQL_PASSWORD ""
10#define MYSQL_DATABASE "mojabaza"
11
12new MySQL:g_SQL;
13new MySQLRaceCheck[MAX_PLAYERS];
14
15#define DIALOG_PREMIUM 100
16#define DIALOG_BUYCOINSY 101
17#define DIALOG_BUYPREMIUM 102
18
19enum pInfo
20{
21 ID,
22 Nick[MAX_PLAYER_NAME],
23 Cache:Cache_ID,
24 Coinsy,
25 Vip,
26 VipTime
27};
28new PlayerInfo[MAX_PLAYERS][pInfo];
29
30new pLogged[MAX_PLAYERS];
31
32public OnGameModeInit()
33{
34 new MySQLOpt:option_id = mysql_init_options();
35
36 mysql_set_option(option_id, AUTO_RECONNECT, true);
37
38 g_SQL = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, option_id);
39
40 if(g_SQL == MYSQL_INVALID_HANDLE || mysql_errno(g_SQL) != 0)
41 {
42 print("[MYSQL - BŁĄD] ERROR CONNECT MYSQL");
43 SendRconCommand("exit");
44 return 1;
45 }
46 else
47 {
48 print("[MYSQL] CONNECT MYSQL!");
49 }
50
51 SetupPlayerTable();
52
53 DisableInteriorEnterExits();
54 EnableStuntBonusForAll(0);
55
56 return 1;
57}
58
59public OnGameModeExit()
60{
61 mysql_close(g_SQL);
62 return 1;
63}
64
65public OnPlayerConnect(playerid)
66{
67 MySQLRaceCheck[playerid]++;
68
69 static const empty_player[pInfo];
70 PlayerInfo[playerid] = empty_player;
71
72 pLogged[playerid] = 0;
73
74 GetPlayerName(playerid, PlayerInfo[playerid][Nick], MAX_PLAYER_NAME);
75
76 new query[103];
77 mysql_format(g_SQL, query, sizeof(query), "SELECT * FROM `sysvip` WHERE `Nick` = '%s' LIMIT 1", PlayerInfo[playerid][Nick]);
78 mysql_tquery(g_SQL, query, "OnPlayerDataLoaded", "dd", playerid, MySQLRaceCheck[playerid]);
79
80 SetPlayerColor(playerid, -1);
81 return 1;
82}
83
84public OnPlayerDisconnect(playerid, reason)
85{
86 OnPlayerUpdateEx(playerid);
87 return 1;
88}
89
90forward OnPlayerUpdateEx(playerid);
91public OnPlayerUpdateEx(playerid)
92{
93 if(IsPlayerConnected(playerid))
94 {
95 if(pLogged[playerid])
96 {
97 new query[650];
98
99 mysql_format(g_SQL, query, sizeof(query), "UPDATE `sysvip` SET `Coinsy` = %d, `VIP` = %d, `VIPTIME` = '%s' WHERE `ID` = %d LIMIT 1", PlayerInfo[playerid][Coinsy], PlayerInfo[playerid][Vip],
100 PlayerInfo[playerid][VipTime], PlayerInfo[playerid][ID]);
101 mysql_tquery(g_SQL, query);
102 }
103 }
104 return 1;
105}
106
107stock GivePlayerVIP(playerid, days)
108{
109 if(pLogged{playerid} == 1)
110 {
111
112 PlayerInfo[playerid][VipTime] =
113 (PlayerInfo[playerid][VipTime] > gettime()) ?
114 (PlayerInfo[playerid][VipTime] + UnixTime('d', days)) :
115 (gettime() + UnixTime('d', days));
116
117 SendClientMessage(playerid, -1, "Buy ViP!");
118
119 }
120 return 1;
121}
122
123stock UnixTime(type, time)
124{
125 switch(tolower(type))
126 {
127 case 'd': time = time * 86400;
128 case 'h': time = time * 3600;
129 case 'm': time = time * 60;
130 }
131 return time;
132}
133
134forward OnPlayerDataLoaded(playerid, race_check);
135public OnPlayerDataLoaded(playerid, race_check)
136{
137 if(race_check != MySQLRaceCheck[playerid]) return Kick(playerid);
138
139 if(cache_num_rows() > 0)
140 {
141 PlayerInfo[playerid][Cache_ID] = cache_save();
142
143 AssignPlayerData(playerid);
144
145 cache_delete(PlayerInfo[playerid][Cache_ID]);
146 PlayerInfo[playerid][Cache_ID] = MYSQL_INVALID_CACHE;
147
148 pLogged[playerid] = 1;
149
150 SendClientMessage(playerid, -1, "Logged!");
151 }
152 else
153 {
154 new query[300];
155 mysql_format(g_SQL, query, sizeof(query), "INSERT INTO `sysvip` (`Nick`) VALUES ('%s')", PlayerInfo[playerid][Nick]);
156 mysql_tquery(g_SQL, query, "OnPlayerRegister", "d", playerid);
157 }
158 return 1;
159}
160
161forward OnPlayerRegister(playerid);
162public OnPlayerRegister(playerid)
163{
164 PlayerInfo[playerid][ID] = cache_insert_id();
165
166 pLogged[playerid] = 1;
167
168 SendClientMessage(playerid, -1, "Registered!");
169 return 1;
170}
171
172AssignPlayerData(playerid)
173{
174 cache_get_value_int(0, "ID", PlayerInfo[playerid][ID]);
175 cache_get_value_int(0, "Coinsy", PlayerInfo[playerid][Coinsy]);
176 cache_get_value_int(0, "VIP", PlayerInfo[playerid][Vip]);
177 cache_get_value_name(0, "VIPTIME", PlayerInfo[playerid][VipTime]);
178 return 1;
179}
180
181public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
182{
183 switch(dialogid)
184 {
185 case DIALOG_PREMIUM:
186 {
187 if(response)
188 {
189 if(listitem == 0)
190 {
191 ShowPlayerDialog(playerid, DIALOG_BUYCOINSY, DIALOG_STYLE_LIST, "Buy Coinsy", "100 coins\n200 coins\n300 coins", "Select", "Exit");
192 }
193 if(listitem == 1)
194 {
195 ShowPlayerDialog(playerid, DIALOG_BUYPREMIUM, DIALOG_STYLE_LIST, "Buy premium", "10 day - 100 coins\n20 day - 200 coins\n30 day - 300 coins", "Select", "Exit");
196 }
197 }
198 }
199
200 case DIALOG_BUYCOINSY:
201 {
202 if(response)
203 {
204 if(listitem == 0)
205 {
206 PlayerInfo[playerid][Coinsy] = 100;
207 }
208 if(listitem == 1)
209 {
210 PlayerInfo[playerid][Coinsy] = 200;
211 }
212 if(listitem == 2)
213 {
214 PlayerInfo[playerid][Coinsy] = 300;
215 }
216 }
217 }
218
219 case DIALOG_BUYPREMIUM:
220 {
221 if(response)
222 {
223 if(listitem == 0)
224 {
225 GivePlayerVIP(playerid, 10);
226 PlayerInfo[playerid][Vip] = 1;
227 }
228 if(listitem == 1)
229 {
230 GivePlayerVIP(playerid, 20);
231 PlayerInfo[playerid][Vip] = 1;
232 }
233 if(listitem == 2)
234 {
235 GivePlayerVIP(playerid, 30);
236 PlayerInfo[playerid][Vip] = 1;
237 }
238 }
239 }
240
241 default: return 0;
242 }
243 return 1;
244}
245
246public OnPlayerText(playerid, text[])
247{
248 new string[250];
249 if(PlayerInfo[playerid][Vip] == 1)
250 {
251 format(string, sizeof(string), "{FFFFFF}[{808080}VIP 1{FFFFFF}]{%06x}%s: {FFFFFF}%s", GetPlayerColor(playerid) >>> 8, GetNick(playerid), text);
252 SendClientMessageToAll(-1, string);
253 }
254 else
255 {
256 format(string, sizeof(string), "{FFFFFF}[{808080}Player{FFFFFF}]{%06x}%s: {FFFFFF}%s", GetPlayerColor(playerid) >>> 8, GetNick(playerid), text);
257 SendClientMessageToAll(-1, string);
258 }
259 return 0;
260}
261
262stock GetNick(playerid)
263{
264 new PlayerNick[MAX_PLAYER_NAME];
265 GetPlayerName(playerid, PlayerNick, sizeof(PlayerNick));
266 return PlayerNick;
267}
268
269CMD:premium(playerid, params[])
270{
271 ShowPlayerDialog(playerid, DIALOG_PREMIUM, DIALOG_STYLE_LIST, "Premium", "Buy Coinsy\nBuy account premium", "Select", "Exit");
272
273 return 1;
274}
275
276SetupPlayerTable()
277{
278 new query[500];
279 strcat(query, "CREATE TABLE IF NOT EXISTS `sysvip` (");
280 strcat(query, "`ID` INT(11) NOT NULL AUTO_INCREMENT,");
281 strcat(query, "`Nick` VARCHAR(24) NOT NULL,");
282 strcat(query, "`Coinsy` INT NOT NULL DEFAULT '0',");
283 strcat(query, "`VIP` INT(11) NOT NULL DEFAULT '0',");
284 strcat(query, "`VIPTIME` VARCHAR(32) NOT NULL,");
285 strcat(query, "PRIMARY KEY (`ID`), UNIQUE KEY `Nick` (`Nick`))");
286 mysql_tquery(g_SQL, query);
287 return 1;
288}