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

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

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

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

[ВОПРОС] правильно ли я сделал?

Статус пользователя svh0st
сообщение 22.11.2012, 18:30
Сообщение #1


Стаж: 16 лет

Сообщений: 275
Благодарностей: 21
Полезность: 81

Добрый вечер кодеры thank_you2.gif хотел спросить правильно ли я написал ?
Код
Код
public give_item_vip(id)
{
    if(get_user_flags(id) & ADMIN_RESERVATION)
    {
        g_multijumps[id]++;
    }
    else
    {    
        return ZP_PLUGIN_HANDLED
    }
    return PLUGIN_CONTINUE
}

public EVENT_round_start()
{
    if(get_user_flags(1) & ADMIN_RESERVATION)
    {
        for (new id; id <= 32; id++) g_multijumps[id] = true;
    }
    else
    {    
        for (new id; id <= 32; id++) g_multijumps[id] = false;
    }
}


Суть плагина в том, что когда играет админ, то ему бесплатный МУЛЬТИ ДЖАМП, а когда человек без плав, то ему за деньги, а и плюс ещё у админа он не пропадает когда умер/новый раунд, а у человека без прав при смерти и при новом раунде МУЛЬИ ДЖАМП пропадает.

Отредактировал: svh0st, - 22.11.2012, 18:31
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 22.11.2012, 19:03
Сообщение #2
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

svh0st,
Код
public EVENT_round_start()


По идее при новом раунде, убирает у простых игроков "МУЛЬТИ ДЖАМП"
а тебе нужно при смерте...

используй

Код
public client_death(killer, victim)


и зачем спрашивать? создай тестовый сервер, скомпилируй плагин, поставь его туда, возьми 1-2 человека (друга) и проверяй...

и много ошибок в написание...
Код
public give_item_vip(id)
{
    if(get_user_flags(id) & ADMIN_RESERVATION)
    {
        g_multijumps[id]++;
    }
    else
    {    
        return ZP_PLUGIN_HANDLED
    }
    return PLUGIN_CONTINUE
}


можно просто

Код
public give_item_vip(id)
{
    if(get_user_flags(id) & ADMIN_RESERVATION) g_multijumps[id] = true;
    return PLUGIN_CONTINUE
}


и ошибка в:
Код
public EVENT_round_start()
{
    if(get_user_flags(1) & ADMIN_RESERVATION)
    {
        for (new id; id <= 32; id++) g_multijumps[id] = true;
    }
    else
    {    
        for (new id; id <= 32; id++) g_multijumps[id] = false;
    }
}


get_user_flags(1) = проверяет игрока, под id 1. а если админ будет под id 3? то всем игрокам включая и админа, уберёт функцию при начале раунда потому-что сработает else + будут ошибки... игрока под id 30 или 31 может не быть... нужно проверять if(is_user_connected(id))...

пиши так:

Код
public EVENT_round_start()
{
    new iPlayers[32], iNum
    get_players(iPlayers, iNum)
    
    for(new i; i < iNum; i++)
    {
        g_multijumps[iPlayers[i]] = false;
        if(get_user_flags(iPlayers[i]) & ADMIN_RESERVATION)
            g_multijumps[iPlayers[i]] = true;
    }
}


Отредактировал: Orty_Hart, - 22.11.2012, 19:10
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 22.11.2012, 19:44
Сообщение #3


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

Стаж: 18 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

Цитата
создай тестовый сервер, скомпилируй плагин, поставь его туда, возьми 1-2 человека (друга) и проверяй...

На этом этапе тут скорее всего возникнет проблема.. Код не верный почти полностью в public EVENT_round_start()


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 22.11.2012, 21:13
Сообщение #4
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

AndrewZ,
ну я написал где и как лучше исправлять... дело автора)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя svh0st
сообщение 22.11.2012, 21:22
Сообщение #5


Стаж: 16 лет

Сообщений: 275
Благодарностей: 21
Полезность: 81

Ну я взял из стандартного и сделал как я знаю, решил спросить как я сделал не правильно.
Всё оно то робит но правильно ли код построен.

Цитата(Orty_Hart @ 22.11.2012, 19:03) *
svh0st,
Код
public EVENT_round_start()


По идее при новом раунде, убирает у простых игроков "МУЛЬТИ ДЖАМП"
а тебе нужно при смерте...

используй

Код
public client_death(killer, victim)


ОК а если человек не умер, то у него останется "МУЛЬТИ ДЖАМП"
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 22.11.2012, 21:42
Сообщение #6
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

svh0st,
отслеживаем воскрешение (спавн).
делай так...

Код
public plugin_init()
{
    ...
    register_logevent("cmdStartRound", 2, "0=World triggered", "1=Round_Start")
    ...
}

public client_death(id, victim)
{
    if(is_user_connected(victim))
        g_multijumps[victim] = false;
}

public cmdStartRound()
{
    new iPlayers[32], iNum
    get_players(iPlayers, iNum)
    
    for(new i; i < iNum; i++)
    {
        g_multijumps[iPlayers[i]] = false;
        if(get_user_flags(iPlayers[i]) & ADMIN_RESERVATION)
            g_multijumps[iPlayers[i]] = true;
    }
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя svh0st
сообщение 22.11.2012, 21:48
Сообщение #7


Стаж: 16 лет

Сообщений: 275
Благодарностей: 21
Полезность: 81

А да ещё я согласен с тобой по поводу этого кода, но скажи все по детальности что и как тут делается, я что то понял но у меня голова уже не соображает.
Код
    new iPlayers[32], iNum
    get_players(iPlayers, iNum)
    
    for(new i; i < iNum; i++)


P.S просто я начинающий скриптёр

Отредактировал: svh0st, - 22.11.2012, 21:49
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 22.11.2012, 22:01
Сообщение #8
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

svh0st,
Код
public plugin_init()
{
    ...
    register_logevent("cmdStartRound", 2, "0=World triggered", "1=Round_Start") //Отслеживаем начало раунда. в cmdStartRound
    ...
}

public client_death(id, victim) //отслеживаем убийство (подробней читай ниже ссылки).
{
    if(is_user_connected(victim)) //проверяем, игрок соединён?
        g_multijumps[victim] = false; //устанавливаем умершому игроку false
}

public cmdStartRound() //получаем начало раунда
{
    new iPlayers[32], iNum //создаем переменные
    get_players(iPlayers, iNum) //получаем индекст (ид) всех игроков в iPlayers. iNum - общий номер всех игроков.
    
    for(new i; i < iNum; i //сумерируем всех игроков с помощью for. iNum количество раз.
    {
        g_multijumps[iPlayers[i]] = false; //получаем индекс (ид) игрока в iPlayers[i] и устанавливаем g_multijumps = false
        if(get_user_flags(iPlayers[i]) & ADMIN_RESERVATION) //проверяем игрок с уровнем ADMIN_RESERVATION?
            g_multijumps[iPlayers[i]] = true; //если у игрока ADMIN_RESERVATION, устанавливаем игроку iPlayers[i] g_multijumps = true
    }
}


Полезные ссылки:
register_logevent
client_death
get_players
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: