diff options
| -rw-r--r-- | nameblocker.sp | 52 |
1 files changed, 39 insertions, 13 deletions
diff --git a/nameblocker.sp b/nameblocker.sp index 9611efa..af544a1 100644 --- a/nameblocker.sp +++ b/nameblocker.sp | |||
| @@ -366,7 +366,7 @@ int __modPattern__replace(int index, char[] pattern, int patternlen, int client) | |||
| 366 | char oldpattern[PATTERN_MAX_LEN]; | 366 | char oldpattern[PATTERN_MAX_LEN]; |
| 367 | patternlist.GetString(index, oldpattern, sizeof(oldpattern), ByteCountToCells(PATTERN_MAX_LEN)); | 367 | patternlist.GetString(index, oldpattern, sizeof(oldpattern), ByteCountToCells(PATTERN_MAX_LEN)); |
| 368 | 368 | ||
| 369 | char steamid64[STEAMID64LENGTH]; | 369 | char steamid64[STEAMID64LENGTH + 1]; |
| 370 | if(GetClientAuthId(client, AuthId_SteamID64, steamid64, sizeof(steamid64))) {} // TODO: Error handling | 370 | if(GetClientAuthId(client, AuthId_SteamID64, steamid64, sizeof(steamid64))) {} // TODO: Error handling |
| 371 | 371 | ||
| 372 | SQL_LockDatabase(db); | 372 | SQL_LockDatabase(db); |
| @@ -397,23 +397,58 @@ int modPattern(MOD_MODE mode, int index, char[] pattern="", int patternlen=-1, i | |||
| 397 | } | 397 | } |
| 398 | 398 | ||
| 399 | int aModPattern(MOD_MODE mode, int index, char[] pattern="", int patternlen=0) { | 399 | int aModPattern(MOD_MODE mode, int index, char[] pattern="", int patternlen=0) { |
| 400 | LogError("aModPattern not implemented"); return -1; | ||
| 401 | |||
| 402 | if(mode <= MM_UNDEF || mode >= MM_TOOBIG || index < 0 || index > patternlist.Length) return -1; | 400 | if(mode <= MM_UNDEF || mode >= MM_TOOBIG || index < 0 || index > patternlist.Length) return -1; |
| 403 | 401 | ||
| 402 | Regex res; | ||
| 404 | if(mode > MM_DELETE) { | 403 | if(mode > MM_DELETE) { |
| 405 | if(IsNullString(pattern) || patternlen < 0 || patternlen > PATTERN_MAX_LEN) return -1; | 404 | if(IsNullString(pattern) || patternlen < 0 || patternlen > PATTERN_MAX_LEN) return -1; |
| 406 | 405 | ||
| 407 | char errstr[512]; RegexError reerr; | 406 | char errstr[512]; RegexError reerr; |
| 408 | Regex res = CompileRegex(pattern, gcvarRegexCompFlags.IntValue, errstr, sizeof(errstr), reerr); | 407 | res = CompileRegex(pattern, gcvarRegexCompFlags.IntValue, errstr, sizeof(errstr), reerr); |
| 409 | if(res == null) { | 408 | if(res == null) { |
| 410 | LogError("Error: Could not compile regex pattern \"%s\": %s (%d)", pattern, errstr, reerr); | 409 | LogError("Error: Could not compile regex pattern \"%s\": %s (%d)", pattern, errstr, reerr); |
| 411 | return -1; | 410 | return -1; |
| 412 | } | 411 | } |
| 413 | } | 412 | } |
| 414 | 413 | ||
| 414 | switch(mode) { | ||
| 415 | case MM_DELETE: { | ||
| 416 | regexlist.Erase(index); | ||
| 417 | patternlist.Erase(index); | ||
| 418 | |||
| 419 | } | ||
| 420 | |||
| 421 | case MM_INSERT: { | ||
| 422 | if(index == regexlist.Length) { | ||
| 423 | regexlist.Push(res); | ||
| 424 | patternlist.Push(pattern); | ||
| 425 | return 0; | ||
| 426 | } | ||
| 427 | |||
| 428 | regexlist.ShiftUp(index); | ||
| 429 | patternlist.ShiftUp(index); | ||
| 430 | regexlist.Set(index, res); | ||
| 431 | patternlist.Set(index, pattern); | ||
| 432 | } | ||
| 433 | |||
| 434 | case MM_REPLACE: { | ||
| 435 | if(index == regexlist.Length) { | ||
| 436 | regexlist.Push(res); | ||
| 437 | patternlist.Push(pattern); | ||
| 438 | return 0; | ||
| 439 | } | ||
| 440 | |||
| 441 | CloseHandle(view_as<Handle>(regexlist.Get(index, ByteCountToCells(HANDLE_SIZE)))); | ||
| 442 | patternlist.Set(index, pattern, ByteCountToCells(PATTERN_MAX_LEN)); | ||
| 443 | regexlist.Set(index, res, ByteCountToCells(HANDLE_SIZE)); | ||
| 444 | } | ||
| 415 | 445 | ||
| 416 | 446 | ||
| 447 | default: { | ||
| 448 | logAndFail("Got impossible state"); | ||
| 449 | } | ||
| 450 | } | ||
| 451 | |||
| 417 | return 0; | 452 | return 0; |
| 418 | } | 453 | } |
| 419 | 454 | ||
| @@ -435,15 +470,6 @@ int aModPattern(MOD_MODE mode, int index, char[] pattern="", int patternlen=0) { | |||
| 435 | // return 0; | 470 | // return 0; |
| 436 | // } | 471 | // } |
| 437 | 472 | ||
| 438 | // int aRemovePattern(int index) { | ||
| 439 | // if(index < 0 || index >= regexlist.Length) return -1; | ||
| 440 | |||
| 441 | // regexlist.Erase(index); | ||
| 442 | // patternlist.Erase(index); | ||
| 443 | |||
| 444 | // return 0; | ||
| 445 | // } | ||
| 446 | |||
| 447 | 473 | ||
| 448 | 474 | ||
| 449 | // Check's a user's name against the regex list. Returns -1 on error, 0 if skipped, 1 on hit | 475 | // Check's a user's name against the regex list. Returns -1 on error, 0 if skipped, 1 on hit |
