Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

История благодарностей участнику TRASH)) ::: Спасибо сказали: 2
Дата поста: В теме: За сообщение: Спасибо сказали:
7.8.2010, 1:52 Psychosound
Цитата(STR@TEG @ 7.8.2010, 2:15) *
TRASH)),
Жесть что ты с исходником натворил.

Сорри чет я внатуре попутал вот переделал...
Раскрывающийся текст
Код
#include <amxmod>
#include <amxmisc>

#define MODE_ALIVE_HEAR_DEAD 1
#define MODE_ALIVE_CAN_TRIGGER 2
#define MODE_ONLY_ADMINS 4
#define MODE_NO_DISPLAY 8
#define MODE_PARTIAL 16


#define MAX_WORDS 40
#define MAX_SOUNDS 60
#define MAX_STR_LENGTH 32

new words[MAX_WORDS][MAX_STR_LENGTH];
new sounds[MAX_SOUNDS][MAX_STR_LENGTH];
new num_sounds[MAX_WORDS] = {0,...};
new word2sound[MAX_WORDS][MAX_SOUNDS];

new word_count;
new sound_count;

new sound_use[33] = {0,...};
new muted[33] = {0,...};

new gmsgSayText;

public list_sounds() {
new line[256];
for (new i = 0; i < word_count; i++) {
format(line, 255, "%-20s ", words[i]);

for (new j = 0; j < MAX_SOUNDS; j++) {
if (word2sound[i][j]) {
add(line, 255, sounds[j]);
add(line, 255, " ");
}
}
server_print(line);
}
}

public new_sound() {
if (read_argc() == 1) {
list_sounds();
return PLUGIN_HANDLED;
}

if (read_argc() != 3) {
server_print("Usage: pd_sound <keyword> <soundfile>");
return PLUGIN_HANDLED;
}

new keyword[MAX_STR_LENGTH];
new snd[MAX_STR_LENGTH];

read_argv(1, keyword, MAX_STR_LENGTH);
read_argv(2, snd, MAX_STR_LENGTH);

if (! add_sound(keyword, snd)) {
log_message("[PD] Too many sounds or words.");
}

return PLUGIN_HANDLED;
}

add_sound(keyword[], sound[]) {
new word_index = find_word_or_append(keyword);
new sound_index = find_sound_or_append(sound);

if (word_index >= 0 && sound_index >= 0) {
word2sound[word_index][sound_index] = 1;
num_sounds[word_index]++;
return 1;
}

return 0;
}


find_word_or_append(word[]) {
new index = find_word(word);

if (index != -1) {
return index;
} else {
if (word_count < MAX_WORDS) {
copy(words[word_count], MAX_STR_LENGTH, word);
word_count++;
return word_count - 1;
}
}

return -1; // Max words used.
}

find_word(word[], partial = 0) {
for (new i = 0; i < word_count; i++) {
if (partial) {
if (containi(word, words[i]) >= 0) {
return i;
}
} else {
if (equali(word, words[i])) {
return i;
}
}
}

return -1;
}

find_sound_or_append(sound[]) {
new index = find_sound(sound);

if (index != -1) {
return index;
} else {
if (sound_count < MAX_SOUNDS) {
copy(sounds[sound_count], MAX_STR_LENGTH, sound);
sound_count++;
return sound_count - 1;
}
}

return -1; // Max sounds used.
}


find_sound(sound[]) {
for (new i = 0; i < sound_count; i++) {
if (equal(sound, sounds[i]))
return i;
}
return -1;
}


get_mode() {
new mode[6];
get_cvar_string("pd_sound_mode", mode, 5);
return read_flags(mode);
}


public handle_say(id) {
new mode = get_mode();
new user_flags = get_user_flags(id);

if ((mode & MODE_ONLY_ADMINS) && !(user_flags & ADMIN_LEVEL_A))
return PLUGIN_CONTINUE;

if (! (user_flags & ADMIN_IMMUNITY) &&
(muted[id] || sound_use[id] > get_cvar_num("pd_sound_max")))
return PLUGIN_CONTINUE;

new word[MAX_STR_LENGTH];
new part[MAX_STR_LENGTH];

for (new i = 1; i < read_argc(); i++) {
read_argv(i, part, MAX_STR_LENGTH-1);
add(word, MAX_STR_LENGTH-1, part);
if (i < read_argc()-1)
add(word, MAX_STR_LENGTH-1, " ");
}

new index = find_word(word, mode & MODE_PARTIAL);
if (index == -1) return PLUGIN_CONTINUE;

if (! (user_flags & ADMIN_IMMUNITY) &&
sound_use[id] > get_cvar_num("pd_sound_warn")) {
new says_left = get_cvar_num("pd_sound_max") - sound_use[id];

set_hudmessage(255, 50, 30, -1.0, 0.80, 0, 0.05, 3.0, 0.25, 0.25, 2);

if (says_left > 0) {
show_hudmessage(id, "STOP TALKING! %d more and you will be muted.",
says_left);
} else {
show_hudmessage(id, "You have been muted. Silence - after all.");
client_cmd(id, "spk barney/youtalkmuch");
}
}

new random_sound = random_num(1, num_sounds[index]);
new current_sound = 0;

for (new i = 0; i < sound_count; i++) {
if (word2sound[index][i]) {
current_sound++;
if (current_sound == random_sound) {
if ((mode & MODE_ALIVE_HEAR_DEAD) || (is_user_alive(id) && (mode & MODE_ALIVE_CAN_TRIGGER))) {
// These are the only broadcast situations: Either the
// player is alive and alive players may trigger sound or
// the player is dead and sounds from dead player are
// broadcasted to all players (dead or alive).
sound_use[id]++;

client_cmd(0, "spk %s", sounds[i]);

if (! (mode & MODE_NO_DISPLAY)) {
new origin[3];
new message[129];
new name[33];

get_user_name(id, name, 32);
format(message, 128, "%c%s : %s^n", 2, name, word);

message_begin(MSG_ALL, gmsgSayText, origin, id);
write_byte(id);
write_string(message);
message_end();
}

return PLUGIN_HANDLED;
} else if (!is_user_alive(id)) {
sound_use[id]++;
new players[32];
new player_count;

get_players(players, player_count, "b");

for (new p = 0; p < player_count; p++) {
client_cmd(players[p], "spk %s", sounds[i]);
}

return PLUGIN_CONTINUE;
}
}
}
}
return PLUGIN_CONTINUE;
}

public mute(id, level, cid) {
if (! cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED;

new target[32];
read_argv(1, target, 31);
new player = cmd_target(id, target, 0);

if (! player) {
console_print(id, "[PD] No player matching '%s'.");
return PLUGIN_HANDLED;
}

get_user_name(player, target, 31);
if (get_user_flags(player) & ADMIN_IMMUNITY) {
console_print(id, "[PD] Player '%s' has immunity.");
return PLUGIN_HANDLED;
}

new command[32];
read_argv(0, command, 31);
muted[player] = (command[9] == 'u') ? 0 : 1;
console_print(id, "[PD] Player '%s' has been %s.", target, muted[player] ? "muted" : "unmuted");
return PLUGIN_HANDLED;
}


public client_connect(id) {
new snd[MAX_STR_LENGTH];
get_cvar_string("pd_sound_join", snd, MAX_STR_LENGTH-1);
if (! equal(snd, "")) client_cmd(0, "spk %s", snd);
sound_use[id] = 0;
muted[id] = 0;
}

public client_disconnect(id) {
new snd[MAX_STR_LENGTH];
get_cvar_string("pd_sound_leave", snd, MAX_STR_LENGTH-1);
if (! equal(snd, "")) client_cmd(0, "spk %s", snd);
}

public plugin_init() {
register_plugin("PsychoSounds", "0.9.3.1", "PsychoGuard");
register_srvcmd("pd_sound", "new_sound", 0, "<keyword> <sound> [flags]");
register_concmd("pd_sound_mute", "mute", ADMIN_LEVEL_A, "<authid, nick or #userid>");
register_concmd("pd_sound_unmute", "mute", ADMIN_LEVEL_A, "<authid, nick or #userid>");
register_clcmd("say", "handle_say");
register_cvar("pd_sound_file", "addons/amx/sounds.txt");
register_cvar("pd_sound_join", "");
register_cvar("pd_sound_leave", "misc/comeagain.wav");
register_cvar("pd_sound_warn", "20");
register_cvar("pd_sound_max", "25");
register_cvar("pd_sound_mode", "ac");
gmsgSayText = get_user_msgid("SayText");
server_cmd("exec addons/amxmodx/sounds.cfg");
return PLUGIN_CONTINUE
}

Теперь одно только не пойму где там меняется максимальное количество звуков ... когда меняю расположение звуков в файле sounds.cfg они воспроизводятся но не все... Думал что в строке #define MAX_SOUNDS 60 менял на 999 один фиг не помогает... Звуки воспроизводятся опять же не все... помогите плиз
.....
О вот переделал многое в плагине, теперь компилируется и можно закинуть много звуков... вот исходник:
[attachment=12229:trash_psyhosounds.rar]
Eforall