test
PHP Code:
#include <amxmodx>
#pragma semicolon 1
#pragma dynamic 32768
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "alongub"
new Float:minimum = 0.1;
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR);
register_clcmd("say", "clcmdSay");
}
public clcmdSay(id) {
new buffer[192], tokens[96][96], words[96][96], rtledWords;
read_args(buffer, charsmax(buffer));
remove_quotes(buffer);
replace_all(buffer, charsmax(buffer), "%", "");
new n = explode_string(buffer, " ", tokens, sizeof tokens, sizeof tokens);
for(new i; i < n; i++) {
if(WordAnalysis(tokens[i]) >= minimum) {
ReverseString(tokens[i], sizeof(tokens[]), words[n-1-i]);
rtledWords++;
}
else {
new firstWord = i;
new lastWord = i;
while (lastWord < n && WordAnalysis(tokens[lastWord]) < minimum)
{
lastWord++;
}
for (new t = lastWord - 1; t >= firstWord; t--)
{
copy(words[n-1-i], sizeof(tokens[]), tokens[t]);
if (t > firstWord)
i++;
}
}
}
if(rtledWords) {
implode_strings(words, n, " ", buffer, sizeof(words[]));
new name[33], alive = is_user_alive(id);
get_user_name(id, name, charsmax(name));
for(new i = 1; i <= MaxClients; i++) {
if(id == i || alive == is_user_alive(i))
client_print_color(i, id, "^x03%s^x01 : %s", name, buffer);
}
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
stock ReverseString(str[], maxlength, buffer[]) {
for (new character = strlen(str); character >= 0; character--)
{
if (str[character] >= 0xD6 && str[character] <= 0xDE)
continue;
if (character > 0 && str[character - 1] >= 0xD7 && str[character - 1] <= 0xD9)
format(buffer, maxlength, "%s%c%c", buffer, str[character - 1], str[character]);
else
format(buffer, maxlength, "%s%c", buffer, str[character]);
}
}
stock Float:WordAnalysis(word[]) {
new count = 0, length = strlen(word);
for (new n = 0; n < length - 1; n++) {
if (IsRTLCharacter(word, n)) {
count++;
n++;
}
}
return float(count) * 2 / length;
}
stock IsRTLCharacter(str[], n) {
return (str[n] >= 0xD6 && str[n] <= 0xDE && str[n + 1] >= 0x80 && str[n + 1] <= 0xBF);
}
__________________