|
|
|
 |
 |
 |
 |
|
 |
 |
|
 |
 |
|
 |
|

01-28-2010, 07:38 PM
|
|
Administrator
|
|
Join Date: Sep 2006
Posts: 1,348
|
|
Suspend would probably be a better name than timeban for this operation; you return -1 without freeing the result also.
I had thought we needed such a thing though so cheers.
|

01-28-2010, 10:37 PM
|
|
Sarnak
|
|
Join Date: Feb 2008
Posts: 87
|
|
ugh...yea forgot about where I done the return without freeing the result.
in the database.cpp move
mysql_free_result(result);
above the
// Check Time Banned
if(timebanned > current) {
return -1;
}
and that will fix that small memory leak.
|
 |
|
 |

01-29-2010, 12:38 AM
|
|
Sarnak
|
|
Join Date: Feb 2008
Posts: 87
|
|
Please use this patch instead....I never got a chance to test the prior patch as I did it in 5 minutes.
Here is a working patch and tested.
Code:
Index: common/database.cpp
===================================================================
--- common/database.cpp (revision 1192)
+++ common/database.cpp (working copy)
@@ -307,14 +307,21 @@
MYSQL_RES *result;
MYSQL_ROW row;
- if (RunQuery(query, MakeAnyLenString(&query, "SELECT status FROM account WHERE id='%i'", account_id), errbuf, &result)) {
+ if (RunQuery(query, MakeAnyLenString(&query, "SELECT `status`, UNIX_TIMESTAMP(`timebanned`) as `timebanned`, UNIX_TIMESTAMP() as `current` FROM `account` WHERE `id` = %i", account_id), errbuf, &result)) {
safe_delete_array(query);
if (mysql_num_rows(result) == 1)
{
row = mysql_fetch_row(result);
sint16 status = atoi(row[0]);
-
+ sint32 timebanned = atoi(row[1]);
+ sint32 current = atoi(row[2]);
mysql_free_result(result);
+
+ // Check Time Banned
+ if(timebanned > current) {
+ return -1;
+ }
+
return status;
}
else
Index: zone/command.cpp
===================================================================
--- zone/command.cpp (revision 1192)
+++ zone/command.cpp (working copy)
@@ -384,6 +384,7 @@
command_add("nologs","[status|normal|error|debug|quest|all] - Unsubscribe to a log type",250,command_nologs) ||
command_add("datarate","[rate] - Query/set datarate",100,command_datarate) ||
command_add("ban","[name] - Ban by character name",150,command_ban) ||
+ command_add("timeban","[name][days] - Ban by character name and for specificed number of days",150,command_timeban) ||
command_add("ipban","[IP address] - Ban IP by character name",200,command_ipban) ||
command_add("oocmute","[1/0] - Mutes OOC chat",200,command_oocmute) ||
command_add("revoke","[charname] [1/0] - Makes charname unable to talk on OOC",200,command_revoke) ||
@@ -6287,6 +6288,55 @@
}
}
+void command_timeban(Client *c, const Seperator *sep)
+{
+ char errbuf[MYSQL_ERRMSG_SIZE];
+ char *query = 0;
+ MYSQL_RES *result;
+ MYSQL_ROW row;
+
+ if(sep->arg[1][0] == 0) {
+ c->Message(0, "Usage: #ban [charname][days]");
+ } else {
+ database.RunQuery(query, MakeAnyLenString(&query, "SELECT `account_id` FROM `character_` WHERE `name` = '%s'", sep->arg[1]), errbuf, &result);
+ if(query) {
+ safe_delete_array(query);
+ }
+ if(mysql_num_rows(result)) {
+ row = mysql_fetch_row(result);
+ database.RunQuery(query, MakeAnyLenString(&query, "UPDATE `account` SET `timebanned` = DATE_ADD(NOW(), INTERVAL %i DAY) WHERE `id` = %i", atoi(sep->arg[2]), atoi(row[0])), errbuf, 0);
+ c->Message(13,"Account number %i with the character %s has been temporary banned for %i days.", atoi(row[0]), sep->arg[1], sep->arg[2]);
+
+ ServerPacket* pack = new ServerPacket(ServerOP_FlagUpdate, 6);
+ *((int32*) pack->pBuffer) = atoi(row[0]);
+ *((sint16*) &pack->pBuffer[4]) = -2;
+ worldserver.SendPacket(pack);
+ safe_delete(pack);
+
+ Client *client = NULL;
+ client = entity_list.GetClientByName(sep->arg[1]);
+ if(client) {
+ client->Kick();
+ } else {
+ ServerPacket* pack = new ServerPacket(ServerOP_KickPlayer, sizeof(ServerKickPlayer_Struct));
+ ServerKickPlayer_Struct* skp = (ServerKickPlayer_Struct*) pack->pBuffer;
+ strcpy(skp->adminname, c->GetName());
+ strcpy(skp->name, sep->arg[1]);
+ skp->adminrank = c->Admin();
+ worldserver.SendPacket(pack);
+ safe_delete(pack);
+ }
+
+ mysql_free_result(result);
+ } else {
+ c->Message(13,"Character does not exist.");
+ }
+ if(query) {
+ safe_delete_array(query);
+ }
+ }
+}
+
void command_ipban(Client *c, const Seperator *sep)
{
if(sep->arg[1] == 0)
Index: zone/command.h
===================================================================
--- zone/command.h (revision 1192)
+++ zone/command.h (working copy)
@@ -245,6 +245,7 @@
void command_setaapts(Client *c, const Seperator *sep);
void command_stun(Client *c, const Seperator *sep);
void command_ban(Client *c, const Seperator *sep);
+void command_timeban(Client *c, const Seperator *sep);
void command_ipban(Client *c, const Seperator *sep);
void command_oocmute(Client *c, const Seperator *sep);
void command_revoke(Client *c, const Seperator *sep);
Last edited by Derision; 01-29-2010 at 01:18 PM..
Reason: Pinned for submission
|
 |
|
 |

01-29-2010, 03:51 PM
|
|
Developer
|
|
Join Date: Feb 2004
Location: UK
Posts: 1,540
|
|
I've just been testing this, and it works
Is there any reason for sending the ServerOP_FlagUpdate, since we are kicking the character anyway ? I commented that bit out and it seems to work just the same.
|

01-29-2010, 05:34 PM
|
|
Sarnak
|
|
Join Date: Feb 2008
Posts: 87
|
|
Most likely not but I basically used the same code as #ban so I didn't even bother looking at the rest of the code.
I know this code will help the GM over the problem childs on the servers who cause drama. I know that the VZTZ server is the only PVP server and this feature will help free up time for my GM's.
|
| Thread Tools |
|
|
| Display Modes |
Hybrid Mode
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT -4. The time now is 04:36 PM.
|
|
 |
|
 |
|
|
|
 |
|
 |
|
 |