stock BanAccount(playerid, giveplayerid[24], time, reason[], ip[]) { new name[24], namegive[24]; if(playerid == 501) format(name, sizeof(name), "Squidward (Anti-Cheat)"); else GetPlayerName(playerid, name, sizeof(name)); new curtime = gettime(); new expire; if(!time) { expire = 1577836800; } else { new Float:banminutes = time * 24 * 60 * 60; new bantime = floatround(banminutes); expire = curtime + bantime; } new q[400]; format(q, sizeof(q), "INSERT INTO bans (id, name, reason, ban_time, issue_time, expiry_time, admin, ip) VALUES ('', '%s', '%s', %d, %d, %d, '%s', '%s')", namegive, reason, time, curtime, expire, name, ip); mysql_query(q, THREAD_INSERT_BAN); /*new banid = mysql_insert_id(); format(q, sizeof(q), "INSERT INTO bans (id, name, reason, ban_time, issue_time, expiry_time, admin, ip) VALUES ('$s', '%s', '%s', %d, %d, %d, '%s', '%s')", banid, giveplayerid, reason, time, curtime, expire, name, ip); mysql_query(q, THREAD_INSERT_BAN);*/ new string[128]; if(time) format(string,sizeof(string), "AdmCmd: %s was offline banned for %d days by %s: %s", giveplayerid, time, GetPlayerNameEx(playerid), reason); else format(string,sizeof(string), "AdmCmd: %s was offline banned permanently by %s: %s", giveplayerid, name, reason); ABroadCast(COLOR_LIGHTRED, string, 2); return 1; }
format(q, sizeof(q), "INSERT INTO bans (name, reason, ban_time, issue_time, expiry_time, admin, ip) VALUES ('%s', '%s', %d, %d, %d, '%s', '%s')"
it's obvious when you actually look at the code and try to understand what youre doing here.
soooo, im guessing the "name" variable is used to store the name of the admin who banned the player. and "namegive" variable is supposed to hold the name of the player that is being banned right? but the only problem here is, you never ever set that variable to something. it's emty thus the name field and what's "giveplayerid"? why is it a array, isn't it supposed to hold the id of the player that's being banned? (im guessing) if so, you can use that id and get the name -> save it to the "namegive" char string side note: use UPDATE instead of INSERT if you're not creating any new rows |
CMD:banaccount(playerid, params[]) { if(!PlayerInfo[playerid][pAdmin]) return Error(playerid, "You are not authorized to use this command!"); new playername[24], length, reason[64]; if(sscanf(params, "s[24]is[64]", playername, length, reason)) return Syntax(playerid, "banaccount", "[playername] [length (days) 0 = perm] [reason]"); new giveplayerid = ReturnUser(playername); new string[128]; format(STRING, "That player is currently on the server. Use /ban. (ID: %d)", giveplayerid); if(IsPlayerConnected(giveplayerid)) return Error(playerid, string); if(!doesAccountExist(playername)) return Error(playerid, "Could not find account specified. Check the name and try again."); OnPlayerOfflineLogin(playername); if(PlayerInfo[MAX_PLAYERS][pAdmin] > PlayerInfo[playerid][pAdmin]) return Error(playerid, "You cannot ban a higher level admin."); new ip[16]; format(ip, sizeof(ip), "%s", PlayerInfo[MAX_PLAYERS][pIP]); BanAccount(playerid, playername, length, reason, ip); //PlayerInfo[MAX_PLAYERS][pBanned] = 1; OnPlayerOfflineSave(playername); new year, month,day; getdate(year, month, day); format(string, sizeof(string), "AdmCmd: %s (IP:%s) was offline banned for %d days by %s, reason: %s (%d-%d-%d)", playername, PlayerInfo[MAX_PLAYERS][pIP], length, GetPlayerNameEx(playerid), reason, month, day, year); Log("logs/ban.log", string); return 1; }
PHP код:
|
new ip[16];
format(ip, sizeof(ip), "%s", PlayerInfo[MAX_PLAYERS][pIP]);
Looking at the function the name of the player to ban is passed in "giveplayerid" parameter so you need to use this as an argument in your INSERT query.
About the IP, unless you read it from the database/player's file you can't be aware of it. Is what OnPlayerOfflineLogin does this? I hope you don't load unnecessary data as well but only the IP in there. What do you use to save player's data? pawn Код:
It'd have to be MAX_PLAYERS + 1. |