· 4 years ago · Sep 12, 2021, 07:02 AM
1/*
2 FB:จ่า สิท
3 YouTube: Ja Sit
4 อัพเดพ 12 กันยาบน 14:00
5*/
6
7#include <a_samp>
8#include <a_mysql>
9#include <streamer>
10#include <easyDialog>
11#include <sscanf2>
12#include <crashdetect>
13#include <Pawn.CMD>
14
15#undef MAX_PLAYERS
16#define MAX_PLAYERS 100
17
18#define YSI_NO_OPTIMISATION_MESSAGE
19#define YSI_NO_CACHE_MESSAGE
20#define YSI_NO_MODE_CACHE
21#define YSI_NO_HEAP_MALLOC
22#define YSI_NO_VERSION_CHECK
23
24
25//--> เชื่อม XAMMPP ใน phpmyAdmin
26#define MYSQL_HOSTNAME "localhost"
27#define MYSQL_USERNAME "root"
28#define MYSQL_PASSWORD ""
29#define MYSQL_DATABASE "sv"
30
31//จุดเกิดเด็กใหม่
32#define SPAWN_POSX 2003.3595
33#define SPAWN_POSY 1543.9191
34#define SPAWN_POSZ 13.5859
35#define SPAWN_POSA 274.7725
36////////////////////////////
37
38new PlayerSaveTime[MAX_PLAYERS];
39new MySQL: Database,PlayerName[MAX_PLAYERS][30],PlayerIP[MAX_PLAYERS][17];
40new CheckLogin[MAX_PLAYERS];
41
42enum PlayerData
43{
44 ID,
45 Password[129],
46 pAdmin,
47 Money,
48 pModel,
49 Float:PosX,
50 Float:PosY,
51 Float:PosZ,
52 Float:PosA
53};
54
55new playerData[MAX_PLAYERS][PlayerData];
56
57main(){
58}
59
60//----------------------------------
61public OnGameModeInit(){
62
63 new MySQLOpt: option_id = mysql_init_options();
64 mysql_set_option(option_id, AUTO_RECONNECT, true);
65 Database = mysql_connect(MYSQL_HOSTNAME, MYSQL_USERNAME, MYSQL_PASSWORD, MYSQL_DATABASE, option_id);
66 if (Database == MYSQL_INVALID_HANDLE || mysql_errno(Database) != 0){
67 print("MYSQL ERROR : SERVER OFF");
68 SendRconCommand("exit");
69 return 1;
70 }
71 print("MySQL connection is successful.");
72 DisableInteriorEnterExits();
73 SetupPlayerTable();
74 return 1;
75}
76SetupPlayerTable()
77{
78 mysql_tquery(Database, "CREATE TABLE IF NOT EXISTS `players` (`ID` int(11) NOT NULL AUTO_INCREMENT,`Username` varchar(64) NOT NULL,`Password` char(128) NOT NULL,`Money` int(11) NOT NULL DEFAULT '0',`Admins` int(11) NOT NULL DEFAULT '0',`Model` int(11) NOT NULL DEFAULT '0',`PosX` float NOT NULL DEFAULT '0',`PosY` float NOT NULL DEFAULT '0',`PosZ` float NOT NULL DEFAULT '0',`PosA` float NOT NULL DEFAULT '0', PRIMARY KEY (`ID`), UNIQUE KEY `Username` (`Username`))");
79 return 1;
80}
81public OnGameModeExit(){
82
83 return 1;
84}
85
86public OnPlayerConnect(playerid){
87 new query[140];
88 GetPlayerName(playerid, PlayerName[playerid], 30);
89 GetPlayerIp(playerid, PlayerIP[playerid], 16);
90 mysql_format(Database, query, sizeof(query), "SELECT `Password`, `ID` FROM `players` WHERE `Username` = '%e' LIMIT 0, 1", PlayerName[playerid]); // We are selecting the password and the ID from the player's name
91 mysql_tquery(Database, query, "CheckPlayer", "i", playerid);
92
93 playerData[playerid][Money] = 0;
94 PlayerSaveTime[playerid] = 0;
95 playerData[playerid][pAdmin] = 0;
96 playerData[playerid][pModel] = 0;
97 CheckLogin[playerid] = 0;
98 return 1;
99}
100public OnPlayerDisconnect(playerid, reason){
101
102 new query[2566];
103 if(CheckLogin[playerid] == 1){
104 GetPlayerPos(playerid, playerData[playerid][PosX],playerData[playerid][PosY],playerData[playerid][PosZ]);
105 GetPlayerFacingAngle(playerid, playerData[playerid][PosA]);
106
107 mysql_format(Database, query, sizeof(query), "UPDATE `players` SET `PosX` = '%f',`PosY` = '%f',`PosZ` = '%f',`PosA` = '%f' WHERE `ID` = '%d'",
108 playerData[playerid][PosX],playerData[playerid][PosY],playerData[playerid][PosZ],playerData[playerid][PosA],playerData[playerid][ID]);
109 mysql_tquery(Database, query);
110 SavePlayer(playerid);
111 }
112 return 1;
113}
114public OnPlayerSpawn(playerid)
115{
116 SetPlayerSkin(playerid, playerData[playerid][pModel]);
117 SetPlayerPos(playerid,playerData[playerid][PosX],playerData[playerid][PosY],playerData[playerid][PosZ]);
118 SetPlayerFacingAngle(playerid, playerData[playerid][PosA]);
119 SetPlayerInterior(playerid, 0);
120 SetPlayerVirtualWorld(playerid, 0);
121
122 return 1;
123}
124forward CheckPlayer(playerid);
125public CheckPlayer(playerid){
126 new rows, string[150];
127 cache_get_row_count(rows);
128 if(rows) {
129 cache_get_value_name(0, "Password", playerData[playerid][Password], 129);
130 cache_get_value_name_int(0, "ID", playerData[playerid][ID]);
131 format(string, sizeof(string), "{FFFFFF}คุณมีบัญชีในเซิร์ฟเวอร์แล้ว\n\nกรุณาใส่รหัสผ่านด้านล่าง\nเพื่อทำการล้อกอินเข้าสู่เซิร์ฟเวอร์");
132 Dialog_Show(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "({FFFFFF}{00FF13}ล็อกอิน{00FF13}{FFFFFF})", string, "ล็อกอิน", "");
133 }
134 else {
135 format(string, sizeof(string), "{FFFFFF}คุณยังไม่มีบัญชีในเซิร์ฟเวอร์\n\nกรุณาใส่รหัสผ่านด้านล่าง\nเพื่อทำการสมัครสมาชิก ในเซิร์ฟเวอร์");
136 Dialog_Show(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "({FFFFFF}{FF0000}สมัคร{FF0000}{FFFFFF})", string, "สมัคร", "");
137 }
138 return 1;
139}
140
141//--> ล็อกอิน
142Dialog:DIALOG_LOGIN(playerid, response, listitem, inputtext[]){
143 if(!response)
144 return Kick(playerid);
145 new query[100];
146 if(!strcmp(inputtext, playerData[playerid][Password])) {
147 mysql_format(Database, query, sizeof(query), "SELECT * FROM `players` WHERE `Username` = '%e' LIMIT 0, 1", PlayerName[playerid]);
148 mysql_tquery(Database, query, "LoadPlayer", "i", playerid);
149 CheckLogin[playerid] = true;
150 }
151 else {
152 Dialog_Show(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "{FF0000}Wrong Password!\n{FFFFFF}Type your correct password below to continue and sign in to your account", "Login", "Exit");
153
154 }
155 return 1;
156}
157
158//--> สมัคร
159Dialog:DIALOG_REGISTER(playerid, response, listitem, inputtext[]){
160 if(!response)
161 return Kick(playerid);
162 if(strlen(inputtext) < 3){
163 SendClientMessage(playerid, 0xFF0000, "คุณใส่รหัสผ่านผิด ห้ามใส่ผิดเกิน 3 รอบ");
164 return CheckPlayer(playerid);
165 }
166 new query[300];
167 format(playerData[playerid][Password], 64, inputtext);
168 mysql_format(Database, query, sizeof(query), "INSERT INTO `players` (`Username`, `Password`, `Money`, `Admins`, `model`,`PosX`,`PosY`,`PosZ`,`PosA`) VALUES ('%e','%e', 1000, 0, 22, 2003.3595,1543.9191,13.5859,274.7725)", PlayerName[playerid], playerData[playerid][Password]);
169 mysql_pquery(Database, query, "RegisterPlayer", "i", playerid);
170 return 1;
171}
172
173forward LoadPlayer(playerid);
174public LoadPlayer(playerid){
175
176 cache_get_value_name_int(0, "Money", playerData[playerid][Money]);
177 GivePlayerMoney(playerid, playerData[playerid][Money]);
178 cache_get_value_name_int(0, "Admins", playerData[playerid][pAdmin]);
179 cache_get_value_name_int(0, "Model",playerData[playerid][pModel]);
180
181 cache_get_value_name_float(0, "PosX",playerData[playerid][PosX]);
182 cache_get_value_name_float(0, "PosY",playerData[playerid][PosY]);
183 cache_get_value_name_float(0, "PosZ",playerData[playerid][PosZ]);
184 cache_get_value_name_float(0, "PosA",playerData[playerid][PosA]);
185 PlayerSaveTime[playerid] = 1;
186 SpawnPlayer(playerid);
187 return 1;
188}
189
190
191forward SavePlayer(playerid);
192public SavePlayer(playerid){
193 new query[2048];
194
195 mysql_format(Database, query, sizeof(query), "UPDATE `players` SET `Money` = '%d',`Admins` = '%d',`Model` = '%d' WHERE `ID` = '%d'",
196 playerData[playerid][Money],
197 playerData[playerid][pAdmin],
198 playerData[playerid][pModel],
199 playerData[playerid][ID]);
200 mysql_tquery(Database, query);
201
202 return 1;
203}
204
205//--> เวลาผู้เล่นสมัครสมาชิกมาเสร็จ
206forward RegisterPlayer(playerid);
207public RegisterPlayer(playerid){
208 new string[150];
209 playerData[playerid][ID] = cache_insert_id();
210 printf("ID ใหม่ได้สมัครเข้ามาแล้ว SQL ID : %d", playerData[playerid][ID]);
211 cache_get_value_name(0, "Password", playerData[playerid][Password], 129);
212 cache_get_value_name_int(0, "ID", playerData[playerid][ID]);
213 format(string, sizeof(string), "{FFFFFF}คุณมีบัญชีในเซิร์ฟเวอร์แล้ว\n\nกรุณาใส่รหัสผ่านด้านล่าง\nเพื่อทำการล้อกอินเข้าสู่เซิร์ฟเวอร์");
214 Dialog_Show(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "({FFFFFF}{00FF13}ล็อกอิน{00FF13}{FFFFFF})", string, "ล็อกอิน", "");
215 return 1;
216}
217