-/* ModeNode.c - NeonServ v5.2
- * Copyright (C) 2011 Philipp Kreil (pk910)
+/* ModeNode.c - NeonServ v5.4
+ * Copyright (C) 2011-2012 Philipp Kreil (pk910)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
unsigned int valid_modes[] = { /* Thats our mode list :P */
1, 'b', CHANNEL_MODE_TYPE_A,
2, 'o', CHANNEL_MODE_TYPE_A,
- 3, 'v', CHANNEL_MODE_TYPE_A,
- 4, 'k', CHANNEL_MODE_TYPE_B | CHANNEL_MODE_VALUE_STRING | CHANNEL_MODE_KEY,
- 5, 'a', CHANNEL_MODE_TYPE_C | CHANNEL_MODE_VALUE_INTEGER,
- 6, 'l', CHANNEL_MODE_TYPE_C | CHANNEL_MODE_VALUE_INTEGER,
- 7, 'f', CHANNEL_MODE_TYPE_C | CHANNEL_MODE_VALUE_STRING,
- 8, 'F', CHANNEL_MODE_TYPE_C | CHANNEL_MODE_VALUE_STRING,
- 9, 'c', CHANNEL_MODE_TYPE_D,
- 10, 'C', CHANNEL_MODE_TYPE_D,
- 11, 'i', CHANNEL_MODE_TYPE_D,
- 12, 'm', CHANNEL_MODE_TYPE_D,
- 13, 'M', CHANNEL_MODE_TYPE_D,
- 14, 'n', CHANNEL_MODE_TYPE_D,
- 15, 'N', CHANNEL_MODE_TYPE_D,
- 16, 'p', CHANNEL_MODE_TYPE_D,
- 17, 'r', CHANNEL_MODE_TYPE_D,
- 18, 's', CHANNEL_MODE_TYPE_D,
- 19, 't', CHANNEL_MODE_TYPE_D,
- 20, 'u', CHANNEL_MODE_TYPE_D,
- 21, 'D', CHANNEL_MODE_TYPE_D,
- 22, 'd', CHANNEL_MODE_TYPE_D,
- 23, 'R', CHANNEL_MODE_TYPE_D,
- 24, 'z', CHANNEL_MODE_TYPE_D,
+ 3, 'h', CHANNEL_MODE_TYPE_A,
+ 4, 'v', CHANNEL_MODE_TYPE_A,
+ 5, 'k', CHANNEL_MODE_TYPE_B | CHANNEL_MODE_VALUE_STRING | CHANNEL_MODE_KEY,
+ 6, 'a', CHANNEL_MODE_TYPE_C | CHANNEL_MODE_VALUE_INTEGER,
+ 7, 'l', CHANNEL_MODE_TYPE_C | CHANNEL_MODE_VALUE_INTEGER,
+ 8, 'f', CHANNEL_MODE_TYPE_C | CHANNEL_MODE_VALUE_STRING,
+ 9, 'F', CHANNEL_MODE_TYPE_C | CHANNEL_MODE_VALUE_STRING,
+ 10, 'c', CHANNEL_MODE_TYPE_D,
+ 11, 'C', CHANNEL_MODE_TYPE_D,
+ 12, 'i', CHANNEL_MODE_TYPE_D,
+ 13, 'm', CHANNEL_MODE_TYPE_D,
+ 14, 'M', CHANNEL_MODE_TYPE_D,
+ 15, 'n', CHANNEL_MODE_TYPE_D,
+ 16, 'N', CHANNEL_MODE_TYPE_D,
+ 17, 'p', CHANNEL_MODE_TYPE_D,
+ 18, 'r', CHANNEL_MODE_TYPE_D,
+ 19, 's', CHANNEL_MODE_TYPE_D,
+ 20, 'S', CHANNEL_MODE_TYPE_D,
+ 21, 't', CHANNEL_MODE_TYPE_D,
+ 22, 'u', CHANNEL_MODE_TYPE_D,
+ 23, 'D', CHANNEL_MODE_TYPE_D,
+ 24, 'd', CHANNEL_MODE_TYPE_D,
+ 25, 'R', CHANNEL_MODE_TYPE_D,
+ 26, 'z', CHANNEL_MODE_TYPE_D,
// ^ maximum is 32!!!
0x00, 0x00, 0x00
};
case 'o':
parseModesUserPriv(modes, CHANUSERFLAG_OPPED, add, argv[argpos]);
break;
+ case 'h':
+ parseModesUserPriv(modes, CHANUSERFLAG_HALFOPPED, add, argv[argpos]);
+ break;
case 'v':
parseModesUserPriv(modes, CHANUSERFLAG_VOICED, add, argv[argpos]);
break;
modes->modes &= ~modeOpt[0];
modes->allmodes |= modeOpt[0];
if(MODE_TYPE == CHANNEL_MODE_TYPE_B) {
- if(!param) return 0;
+ if(!param && !(modeOpt[2] & CHANNEL_MODE_KEY)) return 0;
if(MODE_VALUE == CHANNEL_MODE_VALUE_STRING) {
free(modes->mode_str_args[MODE_VALUE_INDEX]);
modes->mode_str_args[MODE_VALUE_INDEX] = NULL;