Русское сообщество по скриптингу

Переделать Money Transferer

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы только с поиском исполнителя или заказчика.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Переделать Money Transferer

Сообщение HoBu4oK » 31 май 2016, 22:05

Необходимо причесать код, если есть косяки - исправить. А так же надо...

    1. Исправить проблему с передачей денег. Бывает, что пишет "Некому передавать деньги" хотя на сервере игроки есть
    2. Сделать чтобы передавать можно было всем игрокам, а не только своей команде (настраивается кваром)
    3. Выбор суммы денег для перевода сделать не на отдельно странице, а как помните в AMXBans 5.0 выбиралось время бана? На 8 по-моему нажимаешь и время менялось, так же и тут, но с суммой (показ баланса перенести на первую страницу, где выбираем игроков)
    4. В спектрах чтобы меню недоступно было, в чат писалось некое уведомление

Код: Выделить всё
#include <amxmodx>
#include <cstrike>

#define    PLUGIN    "Money Transferer"
#define    VERSION    "1.3"
#define    AUTHOR    "sOynd"
#define PREFIX "^4[Money Transferer]"

#define    MAX_MONEY            99999
#define    BASE_MONEY_AMOUNT    1000.0 // Need to be a float for calculations
/*
If you have $800 menus will be:
1) $100 * floatround(your_current_money_amount / BASE_MONEY_AMOUNT)
2) $200 * floatround(your_current_money_amount / BASE_MONEY_AMOUNT)
3) $300 * floatround(your_current_money_amount / BASE_MONEY_AMOUNT)
4) $500 * floatround(your_current_money_amount / BASE_MONEY_AMOUNT)
5) your_current_money_amount ($800 in our case)
6) "Type your own number"
*/

new players_menu, money_menu, players[32], num, i
new accessmenu
, sName[64], callback
new msg
[128]

new money_coef, money_amount

public plugin_init
()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    register_clcmd
("say /tm", "transfer_menu", ADMIN_ALL, "")    // TM - Transfer Money
    register_clcmd("say tm", "transfer_menu", ADMIN_ALL, "")
    register_clcmd("say_team /tm", "transfer_menu", ADMIN_ALL, "")
    register_clcmd("say_team tm", "transfer_menu", ADMIN_ALL, "")
    register_clcmd("tm", "transfer_menu", ADMIN_ALL, "")
    
    register_clcmd
("transfer", "transfer_money", ADMIN_ALL, "")    // Just for using messagemode
}

public transfer_menu(id)
{
    get_players(players, num, "che", cs_get_user_team(id)==CS_TEAM_CT ? "CT" : "TERRORIST")
    
    if 
(num <= 1)
    {
        ChatColor(id, "%s ^3К сожалению, некому передавать деньги", PREFIX)
        return PLUGIN_HANDLED
    
}
    
    
/*
    if (!is_user_alive(id))  
    {
        ChatColor(id, "%s ^3Вы мертвы, передача денег невозможна", PREFIX)
        return PLUGIN_HANDLED; 
    }    
    */
 
    
    players_menu 
= menu_create("Выберите игрока", "players_menu_handler")
    
    new tempname
[32], info[10], main[172]
    
    for
(= 0; i < num; i++)
    {
        if(players[i] == id || is_user_bot(players[i]))
            continue
        
        get_user_name
(players[i], tempname, 31)
        num_to_str(players[i], info, 9)
        formatex(main, charsmax(main), "\w%s \r[\y%i\r]", tempname, cs_get_user_money(players[i]) );
        menu_additem(players_menu, main, info, 0)
    }

        menu_setprop(players_menu, MPROP_NEXTNAME, "Далее")
        menu_setprop(players_menu, MPROP_BACKNAME, "Назад")
        menu_setprop(players_menu, MPROP_EXITNAME, "Выход")
        menu_setprop(players_menu, MPROP_EXIT, MEXIT_ALL)
    
    menu_display
(id, players_menu, 0)
    return PLUGIN_CONTINUE
}

public players_menu_handler(id, players_menu, item)
{
    if(item == MENU_EXIT)
    {
        menu_destroy(players_menu)
        client_cmd(id, "optionsmenu")
        return PLUGIN_HANDLED
    
}
    
    new sData
[6], menuTitle[127]    // target id
    
    menu_item_getinfo
(players_menu, item, accessmenu, sData, 5, sName, 63, callback)
    
    new user_money 
= cs_get_user_money(id)
    money_coef = floatround(float(user_money) / BASE_MONEY_AMOUNT)
    formatex(menuTitle, charsmax(menuTitle), "\yУкажите сумму перевода^n\dВаш баланс: \r%d $", user_money );
    money_menu = menu_create(menuTitle, "money_menu_handler")
    
    new str
[6]
    
    for 
(new i = 1; i < 5; i++)
    {
        if(== 4)
            money_amount = 500 * money_coef
        else
            money_amount 
= 100 * i * money_coef
        
        num_to_str
(money_amount, str, 5)
        menu_additem(money_menu, str, sData, 0)
    }
    
    num_to_str
(user_money, str, 5)
    menu_additem(money_menu, str, sData, 0)
    
    
// menu_additem(money_menu, "Другое кол-во", sData, 0)
    
    menu_setprop
(money_menu, MPROP_EXIT, MEXIT_ALL)
    menu_setprop(money_menu, MPROP_EXITNAME, "Назад")
    
    menu_display
(id, money_menu, 0)
    return PLUGIN_CONTINUE
}

public money_menu_handler(id, money_menu, item)
{
    if(item == MENU_EXIT)
    {
        menu_destroy(money_menu)
        menu_display(id, players_menu, 0)
        return PLUGIN_CONTINUE
    
}
    
    new sData
[6] //target id
    
    menu_item_getinfo
(money_menu, item, accessmenu, sData, 5, sName, 63, callback)
    
    sData
[0] = str_to_num(sData)
    
    switch
(item)
    {
        case 0:
        {
            new iName = str_to_num(sName) // money amount
            formatex(msg, 127, "transfer %i %i", sData[0], iName)
        }
        case 1:
        {
            new iName = str_to_num(sName)
            formatex(msg, 127, "transfer %i %i", sData[0], iName)
        }
        case 2:
        {
            new iName = str_to_num(sName)
            formatex(msg, 127, "transfer %i %i", sData[0], iName)
        }
        case 3:
        {
            new iName = str_to_num(sName)
            formatex(msg, 127, "transfer %i %i", sData[0], iName)
        }
        case 4:
        {
            new iName = str_to_num(sName)
            formatex(msg, 127, "transfer %i %i", sData[0], iName)
        }
        case 5:
            formatex(msg, 127, "messagemode ^"transfer %i^"", sData[0])
    }
    
    client_cmd
(id, msg)
    
    return PLUGIN_CONTINUE
}

public transfer_money(id)
{
    new param[9]
    
    read_argv
(1, param, 5)
    
    new player 
= str_to_num(param)
    new names[2][32]
    
    get_user_name
(player, names[1], 31)
    
    if
(is_user_bot(player) || !is_user_connected(player))
    {
        ChatColor(id, "%s ^3Игрок ^4%s вышел с сервера", PREFIX, names[1])
        return PLUGIN_HANDLED
    
}
    
    if
(player == id)
    {
        ChatColor(id, "%s ^3Нельзя передать деньги себе", PREFIX)
        return PLUGIN_HANDLED
    
}
    
    read_argv
(2, param, 5)
    
    new p_len 
= strlen(param)
    
    for 
(new x; x < p_len; x++)
    {
        if(!isdigit(param[x]))
        {
            ChatColor(id, "%s ^3Параметр должен быть корректным числом", PREFIX)
            return PLUGIN_HANDLED
        
}
    }
    
    new amount 
= str_to_num(param)
    new money = cs_get_user_money(id)
    
    if 
(money < amount)
    {
        ChatColor(id, "%s ^3К сожалению, у Вас не хватает денег", PREFIX)
        return PLUGIN_HANDLED
    
}
    
    if
(amount < 100)
    {
        ChatColor(id, "%s ^3Нельзя передать меньше^4 100$", PREFIX)
        return PLUGIN_HANDLED
    
}
    
    new player_money 
= cs_get_user_money(player)
    
    if
(player_money == MAX_MONEY)
    {
        ChatColor(id, "%s ^3У игрока ^4%s ^3уже ^4%i$", PREFIX, names[1], MAX_MONEY)
        return PLUGIN_HANDLED
    
}
    
    get_user_name
(id, names[0], 31)
    
    new maxmoney 
= MAX_MONEY - player_money
    
    if
(maxmoney >= amount)
    {
        cs_set_user_money(id, money - amount, 1)
        cs_set_user_money(player, player_money + amount, 1)
        
        ChatColor
(id,  "%s ^3Выполнено, Вы передали ^4%i^3игроку ^4%s", PREFIX, amount, names[1])
        ChatColor(player,  "%s ^3Вам пришло ^4%d^3от игрока ^4%s", PREFIX, amount, names[0])
        
        return PLUGIN_HANDLED
    
}
    
    cs_set_user_money
(id, maxmoney, 1)
    cs_set_user_money(player, MAX_MONEY, 1)
    
    ChatColor
(id,  "%s ^3Выполнено, Вы передали ^4%i^3игроку ^4%s", PREFIX, maxmoney, names[1])
    ChatColor(player,  "%s ^3Вам пришло ^4%d^3от игрока ^4%s", PREFIX, maxmoney, names[0])
    
    return PLUGIN_HANDLED
}
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")
    replace_all(msg, 190, "!y", "^1")
    replace_all(msg, 190, "!team", "^3")
    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()
        }
    }
    return PLUGIN_CONTINUE
Аватара пользователя
HoBu4oK
 
Сообщения: 123
Зарегистрирован: 19 мар 2012, 12:45
Благодарил (а): 13 раз.
Поблагодарили: 4 раз.

Вернуться в Поиск исполнителей / заказчиков

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5