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

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

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

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

> Правила форума

Этот раздел, как вы могли заметить по названию, предназначен для решения вопросов по поводу уже существующих модов и плагинов.
Пожалуйста, если у вас проблема с написанием плагина, не путайте этот раздел с разделом по скриптингу.
Для поиска плагинов и модов существует соответствующий раздел.

Название темы должно соответствовать содержанию. Темы с названием типа "Помогите", "Вопрос", "парни подскажите..." - будут удалены.
Все темы, не относящиеся к "Вопросам по модам и плагинам", будут удалены или перемещены в соответствующий раздел.

Правила оформления темы:
1. Помимо заголовка не забудьте верно сформулировать свой вопрос.
2. Выложите исходник (в тег кода + ) или ссылку на плагин который вызывает у вас вопросы.
3. Выложите лог с ошибками (если имеется) под спойлер

Количество нужных голосов, от всех игроков

underwoker
сообщение 6.11.2013, 10:38
Сообщение #1
Стаж: 56 лет


Благодарностей:

Вобщем мне нужно для плагина одного. :) Сейчас для того чтобы сменить карту на босса(Зомби мод) определенное(10) количество людей должны ввести в чат /boss и тогда карта сменится. А мне нужно, чтобы был процент от игроков, как /voteban или rtv. Например если игроков 32, то ввести /boss должны 16 игроков, а если 10, то 5.

Мне бы показать на примере, но если нужно дам исходник в личку, все таки приват O_O.
Перейти в начало страницы     
  
Статус пользователя winzh1
сообщение 6.11.2013, 11:02
Сообщение #2


Стаж: 14 лет

Сообщений: 1414
Благодарностей: 600
Полезность: 838

Вот пример из вотебана
Код:
new iPercent = get_percent(g_iVotes[id], g_iNum);

if(iPercent >= get_pcvar_num(g_iPcvar[CVAR_PERCENT]))

stock get_percent(value, tvalue)
{
return floatround(floatmul(float(value) / float(tvalue) , 100.0));
}


Установлю и настрою FreshBans, DopBan.
Писать в ЛС.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 6.11.2013, 11:18
Сообщение #3


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

Скрытый текст

Код
#include <amxmodx>

#define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1)))
#define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1)))
#define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1)))
#define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1)))

new g_iBitVote;
new vote_countBooss;

public plugin_init()
{
    register_clcmd("say /boss","bossfun");
}

public bossfun(id)
{
    if (BIT_NOT_VALID(g_iBitVote, id))
    {
        vote_countBooss++;
        BIT_ADD(g_iBitVote, id);
        checkVote();
        client_print(id, print_chat, "Ваш голос принят за боса");
    }
    else
        client_print(id, print_chat, "Вы уже голосовали");
}

stock get_percent(value, tvalue)
{
    return floatround(floatmul(float(value) / float(tvalue) , 100.0));
}

public checkVote()
{
    new players = get_playersnum();
    new iPercent = get_percent(vote_countBooss, players);
    if (iPercent >= 50)
        server_cmd("changelevel de_dust2");
}

public client_disconnect(id)
{
    if (BIT_VALID(g_iBitVote, id))
    {
        vote_countBooss--
        BIT_SUB(g_iBitVote, id);
    }
    checkVote();
}


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
underwoker
сообщение 6.11.2013, 11:26
Сообщение #4
Стаж: 56 лет


Благодарностей:

Всем, спасибо! Пошел тестировать!

Legenda, просьба обьяснить мне, что означает вот это:

Код:
#define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1)))
#define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1)))
#define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1)))
#define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1)))


!
Предупреждение:
Не нужно цитировать предыдущее сообщение


Отредактировал: Bloo, - 5.6.2014, 12:50
Перейти в начало страницы     
   +
Статус пользователя Legenda
сообщение 6.11.2013, 11:34
Сообщение #5


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

типа мини функции для работы с битами памяти и переменных
аналог +1 и -1 и проверки значений, только в битах


Цитата
Это сборка из макросов и bitwise-операторов. BIT_VALID проверяет наличие определённого бита в переменной, BIT_ADD устанавливает нужный бит, BIT_SUB - убирает, а BIT_NOT_VALID в данном примере эквивалентен !BIT_VALID. В BIT_ADD(g_iBitClientAccess, id) в макрос подставляются: вместо %1 - g_iBitClientAccess, вместо %2 - id.



ps
забыл, должно быть так


Код
public client_disconnect(id)
{
    if (BIT_VALID(g_iBitVote, id))
    {
        vote_countBooss--
        BIT_SUB(g_iBitVote, id);
    }
    checkVote();
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
underwoker
сообщение 6.11.2013, 11:48
Сообщение #6
Стаж: 56 лет


Благодарностей:

Спасибо. :)
Но тут проблемка при компиле:

Код
//AMXXPC compile.exe
// by the AMX Mod X Dev Team


//// zl_votesboss.sma
// C:\Users\PC.PC\Documents\scripting\zl_votesboss.sma(26) : error 017: undefine
d symbol "BIT_NOT_VALID"
// C:\Users\PC.PC\Documents\scripting\zl_votesboss.sma(30) : error 017: undefine
d symbol "BIT_ADD"
// C:\Users\PC.PC\Documents\scripting\zl_votesboss.sma(77) : error 017: undefine
d symbol "BIT_VALID"
// C:\Users\PC.PC\Documents\scripting\zl_votesboss.sma(80) : error 017: undefine
d symbol "BIT_SUB"
// C:\Users\PC.PC\Documents\scripting\zl_votesboss.sma(102) : warning 203: symbo
l is never used: "g_iBitVote"
//
// 4 Errors.
// Could not locate output file C:\Users\PC.PC\Documents\scripting\compiled\zl_v
otesboss.amx (compile failed).
//
// Compilation Time: 0,12 sec
// ----------------------------------------

Press enter to exit ...


Скрытый текст
Код
#include <amxmodx>

#define NAME        "[BOSS] Vote"
#define VERSION        "1.2"
#define AUTHOR        "adassfaf"

#define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1)))
#define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1)))
#define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1)))
#define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1)))

#define MAP_BOSS    "zl_boss_oberon"

new g_iBitVote;
new vote_countBooss;

public plugin_init()
{
    register_clcmd("say /boss","bossfun");
    register_event("HLTV", "NextMaps0", "a", "1=0", "2=0")
}

public bossfun(id)
{
    new Name[32]
    if (BIT_NOT_VALID(g_iBitVote))
    {
        get_user_name(id, Name, 31)
        vote_countBooss++;
        BIT_ADD(g_iBitVote);
        checkVote();
        ChatColor(0, "!g[Босс] !team%s !yПроголосовал за !gБосса! !y(Осталось !g%d !yголосов)", Name, vote_countBooss)
        ChatColor(0, "!g[Босс] !yВведите в чат !g/boss !yдля голосования за карту !gбосса!y!")
    }
    else
    ChatColor(id, "!g[Босс] !yВы уже голосовали за !gБосса!y!")
}

stock get_percent(value, tvalue)
{
    return floatround(floatmul(float(value) / float(tvalue) , 100.0));
}

public checkVote()
{
    new players = get_playersnum();
    new iPercent = get_percent(vote_countBooss, players);
    if (iPercent >= 50)
    {
        set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 12.0)
        show_hudmessage(0, "[Босс]^nГолосование завершено!^nВ следующем раунде будет Босс!")
    }
}

public NextMaps0()
{
    set_task(2.0, "NextMaps1")
}

public NextMaps1()
{
    if(Vote_Complete)
    {
        set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 12.0)
        show_hudmessage(0, "[Босс]^nПриготовьтесь к бою!^nМеняется карта на Босса!")
        set_task(6.0, "NextMaps")
    }
}

public NextMaps()
{
    server_cmd("changelevel ^"%s^"", MAP_BOSS)
}

public client_disconnect(id)
{
    if (BIT_VALID(g_iBitVote))
    {
        vote_countBooss--
        BIT_SUB(g_iBitVote);
    }
    checkVote();
}

stock ChatColor(const id, const input[], any:...) {
    new count = 1, players[32]
    static msg[191]
    vformat(msg, 190, input, 3)
    replace_all(msg, 190, "!g", "^4") // Green Color
    replace_all(msg, 190, "!y", "^1") // Default Color
    replace_all(msg, 190, "!team", "^3") // Team Color
    if (id) players[0] = id; else get_players(players, count, "ch"); {
        for (new i = 0; i < count; i++) {
            if (is_user_connected(players[i])) {
                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
                write_byte(players[i]);
                write_string(msg);
                message_end();
            }
        }
    }
}


Я немного подредактировал твой код, вот хотел узнать, как в строке:

Код
ChatColor(0, "!g[Босс] !team%s !yПроголосовал за !gБосса! !y(Осталось !g%d !yголосов)", Name, vote_countBooss)


Сделать чтобы показывало сколько осталось голосов? На данный момент как я понял будет показывать набранное.

Отредактировал: underwoker, - 6.11.2013, 11:54
Перейти в начало страницы     
   +
Статус пользователя Legenda
сообщение 6.11.2013, 12:09
Сообщение #7


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

упс, затупил))
вот это компилируется, проверил

Скрытый текст

Код
#include <amxmodx>

#define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1)))
#define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1)))
#define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1)))
#define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1)))

new g_iBitVote;
new vote_countBooss;

public plugin_init()
{
    register_clcmd("say /boss","bossfun");
}

public bossfun(id)
{
    if (BIT_NOT_VALID(g_iBitVote, id))
    {
        vote_countBooss++;
        BIT_ADD(g_iBitVote, id);
        checkVote();
        client_print(id, print_chat, "Ваш голос принят за боса");
    }
    else
        client_print(id, print_chat, "Вы уже голосовали");
}

stock get_percent(value, tvalue)
{
    return floatround(floatmul(float(value) / float(tvalue) , 100.0));
}

public checkVote()
{
    new players = get_playersnum();
    new iPercent = get_percent(vote_countBooss, players);
    if (iPercent >= 50)
        server_cmd("changelevel de_dust2");
}

public client_disconnect(id)
{
    if (BIT_VALID(g_iBitVote, id))
    {
        vote_countBooss--;
        BIT_SUB(g_iBitVote, id);
    }
    checkVote();
}



Цитата
Сделать чтобы показывало сколько осталось голосов? На данный момент как я понял будет показывать набранное.

Взять кол-во игроков на сервере, получить от них нужный процент и вычесть кол-во проголосовавших.


upd обновил пост
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Safety1st
сообщение 6.11.2013, 12:11
Сообщение #8
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Ребята, научитесь спойлеры юзать.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
underwoker
сообщение 6.11.2013, 13:09
Сообщение #9
Стаж: 56 лет


Благодарностей:

Скрытый текст
Код
#include <amxmodx>

#define NAME        "[BOSS] Vote"
#define VERSION        "1.2"
#define AUTHOR        "Alexander.3"

#define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1)))
#define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1)))
#define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1)))
#define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1)))

#define MAP_BOSS    "zl_boss_oberon"

new g_iBitVote;
new vote_countBooss;

public plugin_init()
{
    register_plugin(NAME, VERSION, AUTHOR)
    register_clcmd("say /boss","bossfun");
    register_event("HLTV", "NextMaps0", "a", "1=0", "2=0")
}

public bossfun(id)
{
    new Name[32]
    if (BIT_NOT_VALID(g_iBitVote, id))
    {
        get_user_name(id, Name, 31)
        vote_countBooss++;
        BIT_ADD(g_iBitVote, id);
        checkVote();
        ChatColor(0, "!g[Босс] !team%s !yПроголосовал за !gБосса! !y(Набрано !g%d !yголосов)", Name, vote_countBooss)
        ChatColor(0, "!g[Босс] !yВведите в чат !g/boss !yдля голосования за карту !gбосса!y!")
    }
    else
    ChatColor(id, "!g[Босс] !yВы уже голосовали за !gБосса!y!")
}

stock get_percent(value, tvalue)
{
    return floatround(floatmul(float(value) / float(tvalue) , 100.0));
}

public checkVote()
{
    new players = get_playersnum();
    new iPercent = get_percent(vote_countBooss, players);
    if (iPercent >= 50)
    {
        set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 12.0)
        show_hudmessage(0, "[Босс]^nГолосование завершено!^nВ следующем раунде будет Босс!")
    }
}

public NextMaps0()
{
    set_task(2.0, "NextMaps1")
}

public NextMaps1()
{
    set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 12.0)
    show_hudmessage(0, "[Босс]^nПриготовьтесь к бою!^nМеняется карта на Босса!")
    set_task(6.0, "NextMaps")
}

public NextMaps()
{
    server_cmd("changelevel ^"%s^"", MAP_BOSS)
}

public client_disconnect(id)
{
    if (BIT_VALID(g_iBitVote, id))
    {
        vote_countBooss--;
        BIT_SUB(g_iBitVote, id);
    }
    checkVote();
}

stock ChatColor(const id, const input[], any:...) {
    new count = 1, players[32]
    static msg[191]
    vformat(msg, 190, input, 3)
    replace_all(msg, 190, "!g", "^4") // Green Color
    replace_all(msg, 190, "!y", "^1") // Default Color
    replace_all(msg, 190, "!team", "^3") // Team Color
    if (id) players[0] = id; else get_players(players, count, "ch"); {
        for (new i = 0; i < count; i++) {
            if (is_user_connected(players[i])) {
                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
                write_byte(players[i]);
                write_string(msg);
                message_end();
            }
        }
    }
}

Вот с этим кодом сервер падает, логично что и с вашим тоже самое. :C Т.к. тут мало что изменено.

Отредактировал: underwoker, - 6.11.2013, 13:09
Перейти в начало страницы     
   +
Safety1st
сообщение 6.11.2013, 13:23
Сообщение #10
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

NextMaps0() каждый раунд выполняется. И дело не в коде Legenda.
В checkVote() нужно, когда голоса набраны, ставить значение у какой-нибудь переменной, а в NextMaps0() её проверять.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
underwoker
сообщение 6.11.2013, 13:40
Сообщение #11
Стаж: 56 лет


Благодарностей:

Цитата(Safety1st @ 6.11.2013, 14:23) *
NextMaps0() каждый раунд выполняется. И дело не в коде Legenda.

Исправил, сейчас затестю
Перейти в начало страницы     
   +
underwoker
сообщение 6.11.2013, 14:27
Сообщение #12
Стаж: 56 лет


Благодарностей:

Скрытый текст
Код
#include <amxmodx>

#define NAME        "[BOSS] Vote"
#define VERSION        "1.2"
#define AUTHOR        "Alexander.3"

#define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1)))
#define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1)))
#define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1)))
#define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1)))

#define MAP_BOSS    "zl_boss_oberon"

new g_iBitVote;
new bool:Vote_Complete
new vote_countBooss;

public plugin_init()
{
    register_plugin(NAME, VERSION, AUTHOR)
    register_clcmd("say /boss","bossfun");
    register_event("HLTV", "NextMaps0", "a", "1=0", "2=0")
}

public bossfun(id)
{
    new Name[32]
    new players
    players = get_playersnum()
    if (BIT_NOT_VALID(g_iBitVote, id))
    {
        get_user_name(id, Name, 31)
        vote_countBooss++;
        BIT_ADD(g_iBitVote, id);
        checkVote();
        ChatColor(0, "!g[Босс] !team%s !yПроголосовал за !gБосса! !y(Набрано !g%d !yголосов)", Name, (get_pcvar_num(players)-vote_countBooss) * 100.00)
        ChatColor(0, "!g[Босс] !yВведите в чат !g/boss !yдля голосования за карту !gбосса!y!")
    }
    else
    ChatColor(id, "!g[Босс] !yВы уже голосовали за !gБосса!y!")
}

stock get_percent(value, tvalue)
{
    return floatround(floatmul(float(value) / float(tvalue) , 100.0));
}

public checkVote()
{
    new players = get_playersnum();
    new iPercent = get_percent(vote_countBooss, players);
    if (iPercent >= 50)
    {
        set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 12.0)
        show_hudmessage(0, "[Босс]^nГолосование завершено!^nВ следующем раунде будет Босс!")
        Vote_Complete = true
    }
}

public NextMaps0()
{
    if(Vote_Complete)
    {
        set_task(2.0, "NextMaps1")
    }
}
    
public NextMaps1()
{
    set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 12.0)
    show_hudmessage(0, "[Босс]^nПриготовьтесь к бою!^nМеняется карта на Босса!")
    set_task(6.0, "NextMaps")
}

public NextMaps()
{
    server_cmd("changelevel ^"%s^"", MAP_BOSS)
}

public client_disconnect(id)
{
    if (BIT_VALID(g_iBitVote, id))
    {
        vote_countBooss--;
        BIT_SUB(g_iBitVote, id);
    }
    checkVote();
}

stock ChatColor(const id, const input[], any:...) {
    new count = 1, players[32]
    static msg[191]
    vformat(msg, 190, input, 3)
    replace_all(msg, 190, "!g", "^4") // Green Color
    replace_all(msg, 190, "!y", "^1") // Default Color
    replace_all(msg, 190, "!team", "^3") // Team Color
    if (id) players[0] = id; else get_players(players, count, "ch"); {
        for (new i = 0; i < count; i++) {
            if (is_user_connected(players[i])) {
                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
                write_byte(players[i]);
                write_string(msg);
                message_end();
            }
        }
    }
}


Сделал так, теперь при вводе ?boss сервер офф. Не знаю что делать.
Перейти в начало страницы     
   +
Статус пользователя Legenda
сообщение 6.11.2013, 14:37
Сообщение #13


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

Цитата(underwoker @ 6.11.2013, 16:27) *
Скрытый текст
Код
#include <amxmodx>

#define NAME        "[BOSS] Vote"
#define VERSION        "1.2"
#define AUTHOR        "Alexander.3"

#define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1)))
#define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1)))
#define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1)))
#define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1)))

#define MAP_BOSS    "zl_boss_oberon"

new g_iBitVote;
new bool:Vote_Complete
new vote_countBooss;

public plugin_init()
{
    register_plugin(NAME, VERSION, AUTHOR)
    register_clcmd("say /boss","bossfun");
    register_event("HLTV", "NextMaps0", "a", "1=0", "2=0")
}

public bossfun(id)
{
    new Name[32]
    new players
    players = get_playersnum()
    if (BIT_NOT_VALID(g_iBitVote, id))
    {
        get_user_name(id, Name, 31)
        vote_countBooss++;
        BIT_ADD(g_iBitVote, id);
        checkVote();
        ChatColor(0, "!g[Босс] !team%s !yПроголосовал за !gБосса! !y(Набрано !g%d !yголосов)", Name, (get_pcvar_num(players)-vote_countBooss) * 100.00)
        ChatColor(0, "!g[Босс] !yВведите в чат !g/boss !yдля голосования за карту !gбосса!y!")
    }
    else
    ChatColor(id, "!g[Босс] !yВы уже голосовали за !gБосса!y!")
}

stock get_percent(value, tvalue)
{
    return floatround(floatmul(float(value) / float(tvalue) , 100.0));
}

public checkVote()
{
    new players = get_playersnum();
    new iPercent = get_percent(vote_countBooss, players);
    if (iPercent >= 50)
    {
        set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 12.0)
        show_hudmessage(0, "[Босс]^nГолосование завершено!^nВ следующем раунде будет Босс!")
        Vote_Complete = true
    }
}

public NextMaps0()
{
    if(Vote_Complete)
    {
        set_task(2.0, "NextMaps1")
    }
}
    
public NextMaps1()
{
    set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 12.0)
    show_hudmessage(0, "[Босс]^nПриготовьтесь к бою!^nМеняется карта на Босса!")
    set_task(6.0, "NextMaps")
}

public NextMaps()
{
    server_cmd("changelevel ^"%s^"", MAP_BOSS)
}

public client_disconnect(id)
{
    if (BIT_VALID(g_iBitVote, id))
    {
        vote_countBooss--;
        BIT_SUB(g_iBitVote, id);
    }
    checkVote();
}

stock ChatColor(const id, const input[], any:...) {
    new count = 1, players[32]
    static msg[191]
    vformat(msg, 190, input, 3)
    replace_all(msg, 190, "!g", "^4") // Green Color
    replace_all(msg, 190, "!y", "^1") // Default Color
    replace_all(msg, 190, "!team", "^3") // Team Color
    if (id) players[0] = id; else get_players(players, count, "ch"); {
        for (new i = 0; i < count; i++) {
            if (is_user_connected(players[i])) {
                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
                write_byte(players[i]);
                write_string(msg);
                message_end();
            }
        }
    }
}


Сделал так, теперь при вводе ?boss сервер офф. Не знаю что делать.


попробуй из 7 сообщения плагин для начала

get_pcvar_num(players) - это вообще ерунда какая-то
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Safety1st
сообщение 6.11.2013, 14:50
Сообщение #14
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

@underwoker
Можно узнать, почему вы мой совет вы ценным не посчитали? Плагин не работает корректно, как и в прошлый раз, потому что вы не совсем то накодили. Но ведь и по логике очевидно, что совет дельный. Или же вы цените только готовый код? ;)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
underwoker
сообщение 6.11.2013, 17:21
Сообщение #15
Стаж: 56 лет


Благодарностей:

Цитата(Safety1st @ 6.11.2013, 15:50) *
@underwoker
Можно узнать, почему вы мой совет вы ценным не посчитали? Плагин не работает корректно, как и в прошлый раз, потому что вы не совсем то накодили. Но ведь и по логике очевидно, что совет дельный. Или же вы цените только готовый код? ;)

Ээ. Не совсем понял, почему вы считаете, что я не посчитал ваш совет ценным? В чем это проявилось?

Цитата(Legenda @ 6.11.2013, 15:37) *
попробуй из 7 сообщения плагин для начала

get_pcvar_num(players) - это вообще ерунда какая-то

Проверить этот плагин получится только ночью. То-есть отписать вам работоспособность могу только ночью.

По поводу ерунды, я не бог скриптинга, потому основываясь на вашем посте:
Цитата
Взять кол-во игроков на сервере, получить от них нужный процент и вычесть кол-во проголосовавших.

Сделал как мог.
Перейти в начало страницы     
   +
Safety1st
сообщение 6.11.2013, 18:29
Сообщение #16
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(underwoker @ 6.11.2013, 19:21) *
Ээ. Не совсем понял, почему вы считаете, что я не посчитал ваш совет ценным? В чем это проявилось?

Вы уже пофиксили это. Внимание к деталям ;)

Цитата(underwoker @ 6.11.2013, 19:21) *
По поводу ерунды, я не бог скриптинга ... Сделал как мог.

Никто не бог) Грамотный код обычно работает корректно. Переписал ваше творение. Не проверял. Ради Бога, до проверки сами ничего не меняйте.

Волшебный код
Код:
#include <amxmodx>

#define NAME "[BOSS] Vote"
#define VERSION "1.2"
#define AUTHOR "Alexander.3/c-s.net.ua"

#define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1)))
#define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1)))
#define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1)))
#define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1)))

#define MAP_BOSS "zl_boss_oberon"

new g_iBitVote
new bool:Vote_Complete
new vote_countBooss
new giNeedCount // total number of required count of votes

public plugin_init()
{
register_plugin(NAME, VERSION, AUTHOR)
register_clcmd("say /boss","bossfun");
register_event("HLTV", "NextMaps0", "a", "1=0", "2=0")
}

public bossfun(id)
{
if ( Vote_Complete ) {
ChatColor(id, "!g[Босс] !yГолосование за карту !gбосса!y! завершено!")
return PLUGIN_HANDLED
}

if ( BIT_VALID(g_iBitVote, id) ) {
ChatColor(id, "!g[Босс] !yВы уже голосовали за !gБосса!y!")
return PLUGIN_HANDLED
}

new Name[32]
get_user_name(id, Name, 31)

vote_countBooss++
BIT_ADD(g_iBitVote, id);

checkVote()
ChatColor(0, "!g[Босс] !team%s !yпроголосовал за !gБосса! !y(набрано !g%d!y из !g%d!y голосов)", Name, vote_countBooss, giNeedCount)
ChatColor(0, "!g[Босс] !yВведите в чат !g/boss !yдля голосования за карту !gбосса!y!")

return PLUGIN_HANDLED
}

public checkVote()
{
giNeedCount = floatround( float(get_playersnum()) * 0.5 ) // set your value here

if ( vote_countBooss >= giNeedCount ) {
set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 12.0)
show_hudmessage(0, "[Босс]^nГолосование завершено!^nВ следующем раунде будет Босс!")
Vote_Complete = true
}
}

public NextMaps0()
{
if(Vote_Complete)
set_task(2.0, "NextMaps1")
}

public NextMaps1()
{
set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 12.0)
show_hudmessage(0, "[Босс]^nПриготовьтесь к бою!^nМеняется карта на Босса!")
set_task(6.0, "NextMaps")
}

public NextMaps()
{
server_cmd("changelevel ^"%s^"", MAP_BOSS)
}

public client_disconnect(id)
{
if (BIT_VALID(g_iBitVote, id))
{
vote_countBooss--
BIT_SUB(g_iBitVote, id)
}
else
// the only case when votes count should be rechecked
checkVote()
}

stock ChatColor(const id, const input[], any:...) {
new count = 1, players[32], msg[192], iPlayer
new iMsgSayText = get_user_msgid("SayText")

vformat(msg, 191, input, 3)
replace_all(msg, 191, "!g", "^4") // Green Color
replace_all(msg, 191, "!y", "^1") // Default Color
replace_all(msg, 191, "!team", "^3") // Team Color
if (id)
players[0] = id
else
get_players(players, count, "ch")

for (new i = 0; i < count; i++) {
iPlayer = players[i]
message_begin(MSG_ONE_UNRELIABLE, iMsgSayText, _, iPlayer)
write_byte(iPlayer)
write_string(msg)
message_end()
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
underwoker
сообщение 6.11.2013, 18:35
Сообщение #17
Стаж: 56 лет


Благодарностей:

Цитата(Safety1st @ 6.11.2013, 19:29) *
Вы уже пофиксили это. Внимание к деталям ;)


Никто не бог) Грамотный код обычно работает корректно. Переписал ваше творение. Не проверял. Ради Бога, до проверки сами ничего не меняйте.

Волшебный код
Код:
#include <amxmodx>

#define NAME "[BOSS] Vote"
#define VERSION "1.2"
#define AUTHOR "Alexander.3/c-s.net.ua"

#define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1)))
#define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1)))
#define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1)))
#define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1)))

#define MAP_BOSS "zl_boss_oberon"

new g_iBitVote
new bool:Vote_Complete
new vote_countBooss
new giNeedCount // total number of required count of votes

public plugin_init()
{
register_plugin(NAME, VERSION, AUTHOR)
register_clcmd("say /boss","bossfun");
register_event("HLTV", "NextMaps0", "a", "1=0", "2=0")
}

public bossfun(id)
{
if ( Vote_Complete ) {
ChatColor(id, "!g[Босс] !yГолосование за карту !gбосса!y! завершено!")
return PLUGIN_HANDLED
}

if ( BIT_VALID(g_iBitVote, id) ) {
ChatColor(id, "!g[Босс] !yВы уже голосовали за !gБосса!y!")
return PLUGIN_HANDLED
}

new Name[32]
get_user_name(id, Name, 31)

vote_countBooss++
BIT_ADD(g_iBitVote, id);

checkVote()
ChatColor(0, "!g[Босс] !team%s !yпроголосовал за !gБосса! !y(набрано !g%d!y из !g%d!y голосов)", Name, vote_countBooss, giNeedCount)
ChatColor(0, "!g[Босс] !yВведите в чат !g/boss !yдля голосования за карту !gбосса!y!")

return PLUGIN_HANDLED
}

public checkVote()
{
giNeedCount = floatround( float(get_playersnum()) * 0.5 ) // set your value here

if ( vote_countBooss >= giNeedCount ) {
set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 12.0)
show_hudmessage(0, "[Босс]^nГолосование завершено!^nВ следующем раунде будет Босс!")
Vote_Complete = true
}
}

public NextMaps0()
{
if(Vote_Complete)
set_task(2.0, "NextMaps1")
}

public NextMaps1()
{
set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 12.0)
show_hudmessage(0, "[Босс]^nПриготовьтесь к бою!^nМеняется карта на Босса!")
set_task(6.0, "NextMaps")
}

public NextMaps()
{
server_cmd("changelevel ^"%s^"", MAP_BOSS)
}

public client_disconnect(id)
{
if (BIT_VALID(g_iBitVote, id))
{
vote_countBooss--
BIT_SUB(g_iBitVote, id)
}
else
// the only case when votes count should be rechecked
checkVote()
}

stock ChatColor(const id, const input[], any:...) {
new count = 1, players[32], msg[192], iPlayer
new iMsgSayText = get_user_msgid("SayText")

vformat(msg, 191, input, 3)
replace_all(msg, 191, "!g", "^4") // Green Color
replace_all(msg, 191, "!y", "^1") // Default Color
replace_all(msg, 191, "!team", "^3") // Team Color
if (id)
players[0] = id
else
get_players(players, count, "ch")

for (new i = 0; i < count; i++) {
iPlayer = players[i]
message_begin(MSG_ONE_UNRELIABLE, iMsgSayText, _, iPlayer)
write_byte(iPlayer)
write_string(msg)
message_end()
}
}

Так все что нужно было я уже вписал в то что вам скинул) Спасибо заранее. :) Сейчас пойду тестировать.
Перейти в начало страницы     
   +
Safety1st
сообщение 6.11.2013, 20:53
Сообщение #18
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Не волнуйтесь: переписано с учётом 1-го поста. Так проще, чем искать причину 'а почему этот код не работает?' Да и просто ряд улучшений плагину не помешал бы ;)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
underwoker
сообщение 6.11.2013, 22:04
Сообщение #19
Стаж: 56 лет


Благодарностей:

Да, мы не доходили до стадии смены карты) Но подсчет кол-ва нужных голосов и набранных работает отлично! Отпишу как проверим смену мапы. :)
Перейти в начало страницы     
   + Цитировать сообщение
underwoker
сообщение 7.11.2013, 9:25
Сообщение #20
Стаж: 56 лет


Благодарностей:

Все работает просто отлично! Спасибо вам Safety1st, :)
Перейти в начало страницы     
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: