X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules.cpp;h=8061248d24b89d60b961e97fb25051b588fe4761;hb=f2408e7cc91708c33ceaec1e187e94b86580fd49;hp=a45ec21eca64ff7007b79827f9a1725ea07cb6db;hpb=a914ae91957f617af0a21bcdb024a16361ae3398;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules.cpp b/src/modules.cpp index a45ec21ec..8061248d2 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -11,7 +11,7 @@ * --------------------------------------------------- */ -/* $Core: libIRCDmodules */ +/* $Core */ #include "inspircd.h" #include "wildcard.h" @@ -111,7 +111,7 @@ void Module::OnUserQuit(User*, const std::string&, const std::string&) { } void Module::OnUserDisconnect(User*) { } void Module::OnUserJoin(User*, Channel*, bool, bool&) { } void Module::OnPostJoin(User*, Channel*) { } -void Module::OnUserPart(User*, Channel*, const std::string&, bool&) { } +void Module::OnUserPart(User*, Channel*, std::string&, bool&) { } void Module::OnRehash(User*, const std::string&) { } void Module::OnServerRaw(std::string&, bool, User*) { } int Module::OnUserPreJoin(User*, Channel*, const char*, std::string&, const std::string&) { return 0; } @@ -143,6 +143,8 @@ int Module::OnCheckInvite(User*, Channel*) { return 0; } int Module::OnCheckKey(User*, Channel*, const std::string&) { return 0; } int Module::OnCheckLimit(User*, Channel*) { return 0; } int Module::OnCheckBan(User*, Channel*) { return 0; } +int Module::OnCheckExtBan(User *, Channel *, char) { return 0; } +int Module::OnCheckStringExtBan(const std::string &s, Channel *c, char type) { return 0; } int Module::OnStats(char, User*, string_list&) { return 0; } int Module::OnChangeLocalUserHost(User*, const std::string&) { return 0; } int Module::OnChangeLocalUserGECOS(User*, const std::string&) { return 0; } @@ -332,7 +334,21 @@ bool ModuleManager::SetPriority(Module* mod, Implementation i, PriorityState s, /* Do we need to swap? */ if (swap && (swap_pos != source)) - std::swap(EventHandlers[i][swap_pos], EventHandlers[i][source]); + { + /* Suggestion from Phoenix, "shuffle" the modules to better retain call order */ + int incrmnt = 1; + + if (source > swap_pos) + incrmnt = -1; + + for (unsigned int j = source; j != swap_pos; j += incrmnt) + { + if (( j + incrmnt > EventHandlers[i].size() - 1) || (j + incrmnt < 0)) + continue; + + std::swap(EventHandlers[i][j], EventHandlers[i][j+incrmnt]); + } + } return true; }