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

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

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

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

2 страниц V   1 2

Исправить Плагин

cah9
сообщение 7.1.2013, 6:52
Сообщение #1
Стаж: 13 лет

Сообщений: 1159
Благодарностей: 360
Полезность: 0

Всем привет. Помогите поправить плагин.

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

public client_authorized(id)
{
set_task(60.0, "give_bonus", _, _, _, "b")
}

public give_bonus(id)
{
    if(get_user_flags(id) & ADMIN_IMMUNITY)
    {    
    cs_set_user_money(id,cs_get_user_money(id)+1000)
    ColorChat(id,NORMAL,"^3Вы получили свой бонус:^4 +1000$")
    }
    return PLUGIN_HANDLED
}


Вообщем такой касяк.
Деньги выдаются то по 2000 в минуту, то вообще без конца.

Прошу здешних скриптеров поправить плагин.
Хотя бы исправить выдачу. Чтоб работало точно. в 1 минуту выдается 1000$.

Ну а если не жалко, то добавить предел. Чтоб порог в 16000 не переступало.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
mde...
сообщение 7.1.2013, 7:47
Сообщение #2
Стаж: 13 лет

Сообщений: 333
Благодарностей: 61
Полезность: 0

Цитата(c A h @ 7.1.2013, 7:52) *
Всем привет. Помогите поправить плагин.

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

public client_authorized(id)
{
set_task(60.0, "give_bonus", _, _, _, "b")
}

public give_bonus(id)
{
    if(get_user_flags(id) & ADMIN_IMMUNITY)
    {    
    cs_set_user_money(id,cs_get_user_money(id)+1000)
    ColorChat(id,NORMAL,"^3Вы получили свой бонус:^4 +1000$")
    }
    return PLUGIN_HANDLED
}


Вообщем такой касяк.
Деньги выдаются то по 2000 в минуту, то вообще без конца.

Прошу здешних скриптеров поправить плагин.
Хотя бы исправить выдачу. Чтоб работало точно. в 1 минуту выдается 1000$.

Ну а если не жалко, то добавить предел. Чтоб порог в 16000 не переступало.

У тебя стоит проверка, на авторизацию пользователя, через нее нет смысла делать, но как по другому сделать, пока сам незнаю
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
cah9
сообщение 7.1.2013, 8:00
Сообщение #3
Стаж: 13 лет

Сообщений: 1159
Благодарностей: 360
Полезность: 0

Такое еще есть
Код
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <colorchat>

public client_authorized(id)
{
set_task(10.0,"give_bonus",id)
}

public give_bonus(id)
{
if(get_user_flags(id) & ADMIN_IMMUNITY)
{
ColorChat(id,NORMAL,"^3Вы получили свой бонус:^4 +1000$")
cs_set_user_money(id,cs_get_user_money(id)+1000)
}
set_task(60.0,"give_bonus",id)
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
mde...
сообщение 7.1.2013, 8:11
Сообщение #4
Стаж: 13 лет

Сообщений: 333
Благодарностей: 61
Полезность: 0

Пробуй, переделал плагин сектора, под твои нужды
Скрытый текст
Код
#include <amxmodx>
#include <cstrike>
#include <colorchat>
#include <amxmisc>

new nTimer[33]
new nBanks[33]
new nTimes[33]

new nTime = 1
new nBank = 1000
new nLimit = 15000

new nSweet[7][] =
{
    "умничка",
    "молодчинка",
    "красавчик",
    "так держать",
    "лучший",
    "самый, самый",
    "крутой"
}

public plugin_init()
{
    register_plugin("Nice Presents", "1.0", "sector")
}

public client_putinserver(i)
{
    set_task(60.0, "nice_presents_timer", i, _, _, "b")
    
    nTimer[i] = 0
    nBanks[i] = 0
    nTimes[i] = 0
}

public client_disconnect(i)
{
    if(task_exists(i))
    {
        remove_task(i)
    }
}

public nice_presents_timer(i)
{
    nTimer[i]++
    
    if(nTimer[i] == nTime)
    {
        if(is_user_connected(i))
         {
         if(get_user_flags(i) & ADMIN_IMMUNITY)
          {
            nBanks[i] += nBank
            nTimes[i] += nTime
            
            new nName[33], nMoney = cs_get_user_money(i)
            
            get_user_name(i, nName, 32)
            
            if(nMoney <= nLimit)
            {
                cs_set_user_money(i, (nMoney + nBanks[i]))
                
                ColorChat(i,NORMAL,"^1[^4Nice Presents^1] ^3%s^1, ты на сервере уже ^4%d^1 мин.", nName, nTimes[i])
                ColorChat(i,NORMAL,"^1[^4Nice Presents^1] И за это получаешь подарок в виде ^4%d^1$, %s!", nBanks[i], nSweet[random_num(0, 7)])
            }
            else
            if(nMoney > nLimit)
            {
                ColorChat(i,NORMAL,"^1[^4Nice Presents^1] ^3%s^1, подарка не будет! Денег: ^4%d^1$ :(", nName, nMoney);
            }
                
            nTimer[i] = 0
        }
    }
    
}
}


Отредактировал: mde..., - 7.1.2013, 8:12
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
cah9
сообщение 7.1.2013, 8:28
Сообщение #5
Стаж: 13 лет

Сообщений: 1159
Благодарностей: 360
Полезность: 0

Цитата(mde... @ 7.1.2013, 15:11) *
Пробуй, переделал плагин сектора, под твои нужды
Скрытый текст
Код
#include <amxmodx>
#include <cstrike>
#include <colorchat>
#include <amxmisc>

new nTimer[33]
new nBanks[33]
new nTimes[33]

new nTime = 1
new nBank = 1000
new nLimit = 15000

new nSweet[7][] =
{
    "умничка",
    "молодчинка",
    "красавчик",
    "так держать",
    "лучший",
    "самый, самый",
    "крутой"
}

public plugin_init()
{
    register_plugin("Nice Presents", "1.0", "sector")
}

public client_putinserver(i)
{
    set_task(60.0, "nice_presents_timer", i, _, _, "b")
    
    nTimer[i] = 0
    nBanks[i] = 0
    nTimes[i] = 0
}

public client_disconnect(i)
{
    if(task_exists(i))
    {
        remove_task(i)
    }
}

public nice_presents_timer(i)
{
    nTimer[i]++
    
    if(nTimer[i] == nTime)
    {
        if(is_user_connected(i))
         {
         if(get_user_flags(i) & ADMIN_IMMUNITY)
          {
            nBanks[i] += nBank
            nTimes[i] += nTime
            
            new nName[33], nMoney = cs_get_user_money(i)
            
            get_user_name(i, nName, 32)
            
            if(nMoney <= nLimit)
            {
                cs_set_user_money(i, (nMoney + nBanks[i]))
                
                ColorChat(i,NORMAL,"^1[^4Nice Presents^1] ^3%s^1, ты на сервере уже ^4%d^1 мин.", nName, nTimes[i])
                ColorChat(i,NORMAL,"^1[^4Nice Presents^1] И за это получаешь подарок в виде ^4%d^1$, %s!", nBanks[i], nSweet[random_num(0, 7)])
            }
            else
            if(nMoney > nLimit)
            {
                ColorChat(i,NORMAL,"^1[^4Nice Presents^1] ^3%s^1, подарка не будет! Денег: ^4%d^1$ :(", nName, nMoney);
            }
                
            nTimer[i] = 0
        }
    }
    
}
}



L 01/07/2013 - 10:21:54: [AMXX] Displaying debug trace (plugin "bonus_steam.amxx")
L 01/07/2013 - 10:21:54: [AMXX] Run time error 4: index out of bounds
L 01/07/2013 - 10:21:54: [AMXX] [0] 44534343.sma::nice_presents_timer (line 69)

По началу чтото выдало. Потом перестало
У меня CSDM сервер, стоит бесконечный раунд. Мб из-за этого? Стоит юзать сет_таск?

И еще. Мне нужно чтоб каждую минуту выдавалось по 1000, иначе зажрутся =)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
mde...
сообщение 7.1.2013, 8:28
Сообщение #6
Стаж: 13 лет

Сообщений: 333
Благодарностей: 61
Полезность: 0

Цитата(c A h @ 7.1.2013, 8:26) *
L 01/07/2013 - 10:21:54: [AMXX] Displaying debug trace (plugin "bonus_steam.amxx")
L 01/07/2013 - 10:21:54: [AMXX] Run time error 4: index out of bounds
L 01/07/2013 - 10:21:54: [AMXX] [0] 44534343.sma::nice_presents_timer (line 69)

По началу чтото выдало. Потом перестало
У меня CSDM сервер, стоит бесконечный раунд. Мб из-за этого? Стоит юзать сет_таск?


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

public client_authorized(id)
{
set_task(10.0,"give_bonus",id)
}

public give_bonus(id)
{
if(get_user_flags(id) & ADMIN_IMMUNITY)
{
ColorChat(id,NORMAL,"^3Вы получили свой бонус:^4 +1000$")
cs_set_user_money(id,cs_get_user_money(id)+1000)
}
set_task(60.0,"give_bonus",id)
}

2ой вариант пробывал?

Отредактировал: mde..., - 7.1.2013, 8:29
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
cah9
сообщение 7.1.2013, 13:19
Сообщение #7
Стаж: 13 лет

Сообщений: 1159
Благодарностей: 360
Полезность: 0

Цитата(mde... @ 7.1.2013, 15:28) *
Скрытый текст
Код
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <colorchat>

public client_authorized(id)
{
set_task(10.0,"give_bonus",id)
}

public give_bonus(id)
{
if(get_user_flags(id) & ADMIN_IMMUNITY)
{
ColorChat(id,NORMAL,"^3Вы получили свой бонус:^4 +1000$")
cs_set_user_money(id,cs_get_user_money(id)+1000)
}
set_task(60.0,"give_bonus",id)
}

2ой вариант пробывал?


Как раз таки, он делает то что в первом посте.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Andrei
сообщение 7.1.2013, 13:36
Сообщение #8


Стаж: 15 лет

Сообщений: 1335
Благодарностей: 693
Полезность: 740

Код
#include < amxmodx >
#include < cstrike >

const MAX_BONUS = 1000;

public client_putinserver( pPlayer )
{
    set_task( 60.0, "Ctask__MoneyBonus", _, _, _, "b" );
}

public Ctask__MoneyBonus( pPlayer )
{
    if( ~get_user_flags( pPlayer ) & ADMIN_IMMUNITY )
    {  
        return;
    }

    cs_set_user_money( pPlayer, cs_get_user_money( pPlayer ) + MAX_BONUS );
    client_print( pPlayer, print_chat, "Вы получили свой бонус: +%d$ " , MAX_BONUS );
}


Отредактировал: Bos93, - 7.1.2013, 13:36
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
cah9
сообщение 7.1.2013, 14:34
Сообщение #9
Стаж: 13 лет

Сообщений: 1159
Благодарностей: 360
Полезность: 0

Цитата(Bos93 @ 7.1.2013, 20:36) *
Код
#include < amxmodx >
#include < cstrike >

const MAX_BONUS = 1000;

public client_putinserver( pPlayer )
{
    set_task( 60.0, "Ctask__MoneyBonus", _, _, _, "b" );
}

public Ctask__MoneyBonus( pPlayer )
{
    if( ~get_user_flags( pPlayer ) & ADMIN_IMMUNITY )
    {  
        return;
    }

    cs_set_user_money( pPlayer, cs_get_user_money( pPlayer ) + MAX_BONUS );
    client_print( pPlayer, print_chat, "Вы получили свой бонус: +%d$ " , MAX_BONUS );
}


L 01/07/2013 - 16:33:15: [CSTRIKE] Player out of range (0)
L 01/07/2013 - 16:33:15: [AMXX] Displaying debug trace (plugin "bonus_steam.amxx")
L 01/07/2013 - 16:33:15: [AMXX] Run time error 10: native error (native "cs_get_user_money")
L 01/07/2013 - 16:33:15: [AMXX] [0] adminbonus.sma::Ctask__MoneyBonus (line 18)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Andrei
сообщение 7.1.2013, 16:03
Сообщение #10


Стаж: 15 лет

Сообщений: 1335
Благодарностей: 693
Полезность: 740

if( !is_user_connected( pPlayer ) || ~get_user_flags( pPlayer ) & ADMIN_IMMUNITY )
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
cah9
сообщение 9.1.2013, 17:03
Сообщение #11
Стаж: 13 лет

Сообщений: 1159
Благодарностей: 360
Полезность: 0

Мб. есть человек который мне поможет. За деньги если можно.

Одному заплатил, а толку 0 =(
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 9.1.2013, 19:02
Сообщение #12
Стаж: 14 лет

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

c A h,
1.
Код
const MAX_BONUS = 1000;

-->
Код
new max_bonus = 1000;


2. Подумай, кому ты выдаешь деньги?Оо

Код
set_task( 60.0, "Ctask__MoneyBonus", _, _, _, "b" );


ты выдаешь деньги для id _
норм. игрок вообще есть :D

Код
public Ctask__MoneyBonus()
{
    new iPlayers[32], iNum
    get_players(iPlayers, iNum)
    
    for(new i; i < iNum; i++)
    {
        if(!(get_user_flags(iPlayers[i]) & ADMIN_IMMUNITY)) return;
        cs_set_user_money(iPlayers[i], cs_get_user_money(iPlayers[i]) + MAX_BONUS);
        client_print(iPlayers[i], print_chat, "Вы получили свой бонус: +%d$", MAX_BONUS);
    }
    return PLUGIN_CONTINUE
}


таким образом, получаем всех игроков, и у кого из них есть ADMIN_IMMUNITY даем + MAX_BONUS и пишем личное сообщение игроку которому выдали деньги.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
cah9
сообщение 10.1.2013, 6:12
Сообщение #13
Стаж: 13 лет

Сообщений: 1159
Благодарностей: 360
Полезность: 0

Цитата(Orty_Hart @ 10.1.2013, 2:02) *
c A h,
1.
Код
const MAX_BONUS = 1000;

-->
Код
new max_bonus = 1000;


2. Подумай, кому ты выдаешь деньги?Оо

Код
set_task( 60.0, "Ctask__MoneyBonus", _, _, _, "b" );


ты выдаешь деньги для id _
норм. игрок вообще есть :D

Код
public Ctask__MoneyBonus()
{
    new iPlayers[32], iNum
    get_players(iPlayers, iNum)
    
    for(new i; i < iNum; i++)
    {
        if(!(get_user_flags(iPlayers[i]) & ADMIN_IMMUNITY)) return;
        cs_set_user_money(iPlayers[i], cs_get_user_money(iPlayers[i]) + MAX_BONUS);
        client_print(iPlayers[i], print_chat, "Вы получили свой бонус: +%d$", MAX_BONUS);
    }
    return PLUGIN_CONTINUE
}


таким образом, получаем всех игроков, и у кого из них есть ADMIN_IMMUNITY даем + MAX_BONUS и пишем личное сообщение игроку которому выдали деньги.


Не компилит.

Welcome to the AMX Mod X 1.8.1-300 Compiler.
Copyright © 1997-2006 ITB CompuPhase, AMX Mod X Team

textDZq1fT.sma(18) : warning 209: function "Ctask__MoneyBonus" should return a value
textDZq1fT.sma(22) : error 078: function uses both "return" and "return <value>"

1 Error.
Could not locate output file textDZq1fT.amx (compile failed).


ОШИБКА: плагин не был скомпилирован, см. выше
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 10.1.2013, 6:45
Сообщение #14


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

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


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

во-первых таск не передает id, во вторых таск не удаляется после дисконнекта, и добавляется еще один, два, три и т.д (первый пост)

Отредактировал: AndrewZ, - 10.1.2013, 6:47


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fred Perry
сообщение 10.1.2013, 7:50
Сообщение #15


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

Стаж: 16 лет

Сообщений: 6594
Благодарностей: 2370
Полезность: 813

Цитата(AndrewZ @ 10.1.2013, 6:45) *
во-первых таск не передает id, во вторых таск не удаляется после дисконнекта, и добавляется еще один, два, три и т.д (первый пост)

Возвращать их надо.


Гнилой фашистской нечисти
Загоним пулю в лоб,
Отродью человечества
Сколотим крепкий гроб!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 10.1.2013, 11:01
Сообщение #16


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

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


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

Цитата(Fred Perry @ 10.1.2013, 8:50) *
Возвращать их надо.

Куда?


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 10.1.2013, 11:07
Сообщение #17


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

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


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

Код
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <colorchat>

#define PLUGIN        "name"
#define VERSION        "0.1"
#define AUTHOR        "author"

#define MAX_MONEY     16000

public plugin_init()
{
    register_plugin( PLUGIN, VERSION, AUTHOR )
}

public client_authorized( id )
{
    set_task( 60.0, "give_bonus", id, _, _, "b" )
}

public client_disconnect( id )
{
    remove_task( id )
}

public give_bonus( id )
{
    if( get_user_flags( id ) & ADMIN_IMMUNITY )
    {
        new money = cs_get_user_money( id )
        if( money < MAX_MONEY )
        {
            cs_set_user_money( id, money + 1000 )
            ColorChat( id, NORMAL, "^3Вы получили свой бонус:^4 +1000$" )
        }
        
        if( money > MAX_MONEY )
        {
            cs_set_user_money( id, MAX_MONEY )
        }
    }
}


Если скомпилит, должно работать :D


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 10.1.2013, 11:13
Сообщение #18


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

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


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

Либо вот так. Возможно, этот способ лучше.
Код
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <colorchat>

#define PLUGIN        "name"
#define VERSION        "0.2"
#define AUTHOR        "author"

#define BONUS_MONEY        1000
#define MAX_MONEY         16000

new g_MaxPlayers

public plugin_init()
{
    register_plugin( PLUGIN, VERSION, AUTHOR )

    g_MaxPlayers = get_maxplayers()
    set_task( 60.0, "give_bonus", _, _, _, "b" )
}

public give_bonus()
{
    for( new j = 1; j <= g_MaxPlayers; j ++ )
    {
        if( is_user_connected( j ) )
        {
            if( get_user_flags( j ) & ADMIN_IMMUNITY )
            {
                new money = cs_get_user_money( j )
                if( money < MAX_MONEY )
                {
                    cs_set_user_money( j, money + BONUS_MONEY )
                    ColorChat( j, NORMAL, "^3Вы получили свой бонус:^4 +%d$", BONUS_MONEY )
                }
                
                if( money > MAX_MONEY )
                {
                    cs_set_user_money( j, MAX_MONEY )
                }
            }
        }
    }
}


Отредактировал: AndrewZ, - 10.1.2013, 11:16


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


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

Цитата(AndrewZ @ 10.1.2013, 12:13) *
Либо вот так. Возможно, этот способ лучше.
Код
if( is_user_connected( j ) )

А что будет если человек в наблюдателях? is_user_alive не лучше ли будет?
Перейти в начало страницы     
   +
Статус пользователя AndrewZ
сообщение 10.1.2013, 14:06
Сообщение #20


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

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


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

Цитата(underwoker @ 10.1.2013, 13:45) *
А что будет если человек в наблюдателях? is_user_alive не лучше ли будет?

Хз, ошибок не будет, я думаю. Но можно и так.


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