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

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

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

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

7 страниц V  « 4 5 6 »

Ограничить покупку модов ( Zombie Plague Advanced )

, Во времени ( ночное ) / через 1 раунд / через 1 карту
Статус пользователя mazdan
сообщение 7.4.2013, 15:16
Сообщение #81


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

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

вам нужно вызывать будет из других плагинов native_buy(id), когда игрок айди покупает что-то.
Запись не там смотрите.

amx-x.ru работа с файлами
Код
public Write_Stats()
{
    new i_File, i_Frags, i_Deaths
    
    // Открыть файл
    i_File = fopen(g_FileName, "a+")
    
    // Если файл существует
    if (i_File)
    {
        for (new i = 1; i <= MAX_PLAYERS; i++)
        {
            if (g_PlayerConnected[i])
            {
                i_Frags = get_user_frags(i)
                i_Deaths = get_user_deaths(i)
                get_user_authid(i, g_PlayerData[i][STEAMID], charsmax(g_PlayerData))
                get_user_name(i, g_PlayerData[i][NAME], 31)
                num_to_str(i_Frags, g_PlayerData[i][FRAGS], charsmax(g_PlayerData))
                num_to_str(i_Deaths, g_PlayerData[i][DEATHS], charsmax(g_PlayerData))
                
                // Записываем
                fwrite_raw(i_File, g_PlayerData[i][PLAYER_DATABASE:0], sizeof(g_PlayerData[]), BLOCK_INT)
            }
        }
         /*
          g_PlayerData[id] - данных игрока c id = i
          [PLAYER_DATABASE:0] - начала данных
          Для записи только Steam ID необходимо использовать: g_PlayerData[id][PLAYER_DATABASE:STEAMID]
          sizeof(g_PlayerData[]) - длина данных, которые необходимо записать
        */
    
    }
    
    // Закрыть файл
    fclose(i_File)  
}
Тут немного лишнего. Но в целом смысл такой. Открыли ("wt" режим по идее должен быть)
Либо более простой старый способ
Цитата
write_file(const file[], const text[], line = -1)
Данная функция предназначена для запись строки в файл по указанному месту. Возвращает 0 при неуспешном выполнении. Если line указать -1, то запись строки произойдет в конец файла. Функция автоматически создает файл, если он не существует.

http://amxxmodx.ru/core/fileinc/259-write_...oku-v-fayl.html

Соответственно нам нужно
new ip[16]
get_user_ip(id,ip,15,1)
потом этот ip записать в файл (пример выше по ссылке)
Вот и всё.
Код
register_native("native_zp_user_buy_item", "native_buy", 1)
можно заменить на
Код
register_native("zp_user_buy_item", "native_buy", 1)
zp_user_buy_item(id) будем вызывать когда игрок что то купил. В текущем плагине будет вызываться native_buy(id)
Мы там будем брать айпи и писать его в файл.
После смены карты автоматически вызывается read_purchase_file(), в которой после fclose(i_file) вы должны файл этот удалить или почистить (я за удалить) иначе он будет расти и расти.
По идее после этого нужно просто добавить проверку zp_user_buy_on_lastmap(id) перед покупкой и добавить вызов zp_user_buy_item(id) после покупки в остальные плагины.


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Slackerok
сообщение 7.4.2013, 15:55
Сообщение #82
Стаж: 16 лет

Сообщений: 187
Благодарностей: 20
Полезность: 12

mazdan, Много информации сразу дали но я возьму по порядку и попробую в одно целое сделать) И так:
Наш плагин
Код
#include <amxmodx>
#include <amxmisc>
#include <zombie_plague_advance>

//Нативы регаем в public plugin_natives()

//Новый булевый массив
new bool:can_buy[33]

new g_t_purchase_map;

public plugin_init()
{
    // Регистрируем плагин
    register_plugin("Lastmap Purchase","1","mazdan & Nickk & Slackerok")
    
   // Нужно создать его в глобале
    
    g_t_purchase_map = TrieCreate()
    
    // Через 0.3 секунды получить IP из файла
    
    set_task(0.3,"read_purchase_file",128)
}

//Нативы тут
public plugin_natives()
{
    register_native("zp_user_buy_item", "native_buy", 1)
    register_native("zp_user_buy_on_lastmap", "native_lastmap", 1)
}

public native_buy()
{
    //сюда идет запись игрока в файл после покупки айтема

    new ip[16]
    get_user_ip(id,ip,15,1)
    write_file("lastmap_purchases.txt",s_buffer,-1)
}

public native_lastmap(id)
{
static ip[16]
get_user_ip(id,ip,15,0)
return TrieKeyExists(g_t_purchase_map,ip)
}

public read_purchase_file()
{
    // Получаем индекс файла lastmap_purchases.txt
    new i_file=fopen("lastmap_purchases.txt","a+")
    
    //Читаем дальше, если игрок записан, то can_buy[id] = false, если нет, то can_buy[id] = true
    
    // Если произошла ошибка открытии файла - прекращаем выполнение кода
    
    if(!i_file)
    {
        return PLUGIN_CONTINUE
    }
    
    // Создаем необходимые строки ( s_name[64] убрал, вы говорили что нам нужен только IP, и про длину буфера сделать меньше это так? )
    
    new s_buffer[64],s_ip[64]

    // Пока не будет достигнут конец файла, продолжать выполнять цикл
    
    while(!feof(i_file))
    {
        //Получаем следующую строку из файла в s_buffer
        
        fgets(i_file,s_buffer,127)

        // читаем и записываем

        TrieSetCell(g_t_purchase_map,s_buffer,1)
        
        // Очищаем строку от каретки
        
        trim(s_buffer)

    // Закрываем файл по индексу
    
    fclose(i_file)
    
    return PLUGIN_CONTINUE
}


Цитата
После смены карты автоматически вызывается read_purchase_file(), в которой после fclose(i_file) вы должны файл этот удалить или почистить (я за удалить) иначе он будет расти и расти.


Я тоже за) это сделать надо так?

Добавить в конец плагина:
Код
    // Закрываем файл по индексу
    
    fclose(i_file)
    delete_file("lastmap_purchases.txt")
    return PLUGIN_CONTINUE
}


Если так то идем дальше)
После всего этого нам нужно отредактировать все плагины покупки модов. К примеру:
zp_buy_sniper
Код
#include <amxmodx>
#include <zombieplaguenew1.3>

#define PLUGIN "[ZP] Extra Item: Become Sniper"
#define VERSION "0.0.1"
#define AUTHOR "none"

new g_sniper
new g_msgSayText
new g_maxplayers

new pcvar_enabled, pcvar_cost, pcvar_hudtime
new restricted
native zp_is_restricted()

public plugin_init()
{
    register_plugin( PLUGIN, VERSION, AUTHOR )
    
    pcvar_enabled = register_cvar( "zp_sniper_buy", "1" )
    pcvar_cost = register_cvar( "zp_sniper_cost", "170" )
    pcvar_hudtime = register_cvar( "zp_sniper_hudtime", "2.0" )
    
    g_sniper = zp_register_extra_item( "Sniper", get_pcvar_num( pcvar_cost ) , ZP_TEAM_HUMAN )

    g_maxplayers = get_maxplayers()
    g_msgSayText = get_user_msgid( "SayText" )

    register_cvar( "zp_extra_sniper", VERSION, FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_UNLOGGED|FCVAR_SPONLY )
}

public zp_extra_item_selected( id, item )
{
    if( !get_pcvar_num( pcvar_enabled ) )
        return PLUGIN_HANDLED
    
    if( item == g_sniper )
    {
        if( zp_has_round_started() )
        {
            colored_print( id, "^x04[ZP]^x01 You must buy a Sniper before the round start!" )
            return ZP_PLUGIN_HANDLED
        }

        restricted = zp_is_restricted()

                if(restricted == 1 )    
                {
                           colored_print( id, "^x04[ZP]^x01 This mod allowed to buy only from ^x04[10.00]^x01 to ^x04[22.00]^x01 PM!" )
                    return ZP_PLUGIN_HANDLED
                }
        if(restricted == 2 )
        {
                   colored_print( id, "^x04[ZP]^x01 You can buy this mod after clean ( ^x04Infection^x01 ) Round!" )
                    return ZP_PLUGIN_HANDLED
        }
                
                restricted_modmap = zp_user_buy_on_lastmap(id)

                if(restricted_modmap == 1 )    
                {
                           colored_print( id, "^x04[ZP]^x01 You allowed to buy only ^x04one^x01 mod per ^x04two^x01 maps!" )
                    return ZP_PLUGIN_HANDLED  
                 }              

        zp_make_user_sniper( id )

        colored_print( id, "^x04[ZP]^x01 became a Sniper!" )

        set_task( get_pcvar_float( pcvar_hudtime ), "sniper_message", id )
    }
    return PLUGIN_HANDLED
}

public sniper_message( id )
{
    new szName[ 32 ]
    get_user_name( id, szName, 31 )
    set_hudmessage( 255, 0, 0, 0.05, 0.45, 1, 0.0, 5.0, 1.0, 1.0, -1 )
    show_hudmessage( 0, "%s buy Sniper!", szName )
}

stock colored_print( target, const message[],  any:... )
{
    static buffer[ 512 ]

    if( !target )
    {
        static player
        for( player = 1; player <= g_maxplayers; player++ )
        {
            if ( !is_user_connected( player ) )
                continue;
            
            vformat( buffer, charsmax( buffer ), message, 3 )
            
            message_begin( MSG_ONE_UNRELIABLE, g_msgSayText, _, player )
            write_byte( player )
            write_string( buffer )
            message_end()
        }
    }

    else
    {
        vformat( buffer, charsmax( buffer ), message, 3 )
        
        message_begin( MSG_ONE, g_msgSayText, _, target )
        write_byte( target )
        write_string( buffer )
        message_end()
    }
}


Цитата
и добавить вызов zp_user_buy_item(id) после покупки в остальные плагины.

Здесь тоже помогите пожалуйста так как не знаю как добавить этот вызов)

Отредактировал: Slackerok, - 7.4.2013, 16:50
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nickk
сообщение 7.4.2013, 17:05
Сообщение #83
Стаж: 13 лет

Сообщений: 438
Благодарностей: 120
Полезность: 523

Код
//Новый булевый массив
new bool:can_buy[33]


Удалите.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Slackerok
сообщение 7.4.2013, 17:17
Сообщение #84
Стаж: 16 лет

Сообщений: 187
Благодарностей: 20
Полезность: 12

Nickk, Здравствуйте) Спасибо, а для чего этот булевый масив?

Отредактировал: Slackerok, - 7.4.2013, 17:20
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 7.4.2013, 17:46
Сообщение #85


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

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

Slackerok, он не используется, потому и удалить надо.

вот так вот new Trie:g_t_purchase_map;
айпи записываем в массив ip, а в файл пишем какой-то буфер, который даже не объявлен в этой функции
Цитата
get_user_ip(id,ip,15,1)
write_file("lastmap_purchases.txt",s_buffer,-1)

Код
new s_buffer[64],s_ip[64]
s_ip[64] не нужно, мы не используем тут.
trim(s_buffer) нужно сделать до того как запишем айпи в Trie массив


В плагинах покупки добавляете нативы zp_user_buy_item(id) и zp_user_buy_on_lastmap(id) так же как
Цитата
native zp_is_restricted()

zp_user_buy_item(id) перед zp_make_user_sniper( id )

И еще чуть выше этого
Код
                if(zp_user_buy_on_lastmap(id))    
                {
                           colored_print( id, "^x04[ZP]^x01 You can buy any stuff on this map" )
                    return ZP_PLUGIN_HANDLED
                }


Про удаление - да, так.


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Slackerok
сообщение 7.4.2013, 18:24
Сообщение #86
Стаж: 16 лет

Сообщений: 187
Благодарностей: 20
Полезность: 12

mazdan, Вот и Финальная версия) Проверьте еще раз пожалуйста чтобы все было ок перед тестированием на сервере)
lastmap_purchases
Код
#include <amxmodx>
#include <amxmisc>
#include <zombie_plague_advance>

//Нативы регаем в public plugin_natives()

//Новый булевый массив

new g_t_purchase_map;
new Trie:g_t_purchase_map;

public plugin_init()
{
    // Регистрируем плагин
    register_plugin("Lastmap Purchase","1","mazdan & Nickk & Slackerok")
    
   // Нужно создать его в глобале
    
    g_t_purchase_map = TrieCreate()
    
    // Через 0.3 секунды получить IP из файла
    
    set_task(0.3,"read_purchase_file",128)
}

//Нативы тут
public plugin_natives()
{
    register_native("zp_user_buy_item", "native_buy", 1)
    register_native("zp_user_buy_on_lastmap", "native_lastmap", 1)
}

public native_buy()
{
    //сюда идет запись игрока в файл после покупки айтема

    new ip[16]
    get_user_ip(id,ip,15,1)
    write_file("lastmap_purchases.txt",ip,-1)
}

public native_lastmap(id)
{
static ip[16]
get_user_ip(id,ip,15,0)
return TrieKeyExists(g_t_purchase_map,ip)
}

public read_purchase_file()
{
    // Получаем индекс файла lastmap_purchases.txt
    new i_file=fopen("lastmap_purchases.txt","a+")
    
    // Если произошла ошибка открытии файла - прекращаем выполнение кода
    
    if(!i_file)
    {
        return PLUGIN_CONTINUE
    }
    
    // Создаем необходимые строки
    
    new s_buffer[64]

    // Пока не будет достигнут конец файла, продолжать выполнять цикл
    
    while(!feof(i_file))
    {
        //Получаем следующую строку из файла в s_buffer
        
        fgets(i_file,s_buffer,127)

        // Очищаем строку от каретки
        
        trim(s_buffer)

        // читаем и записываем

        TrieSetCell(g_t_purchase_map,s_buffer,1)
        
    // Закрываем файл по индексу
    
    fclose(i_file)
    delete_file("lastmap_purchases.txt")
    return PLUGIN_CONTINUE
}


А теперь один из плагинов покупки:
zp_buy_sniper
Код
#include <amxmodx>
#include <zombieplaguenew1.3>

#define PLUGIN "[ZP] Extra Item: Become Sniper"
#define VERSION "0.0.1"
#define AUTHOR "none"

new g_sniper
new g_msgSayText
new g_maxplayers

new pcvar_enabled, pcvar_cost, pcvar_hudtime
new restricted
native zp_is_restricted()
native zp_user_buy_item(id)
native zp_user_buy_on_lastmap(id)

public plugin_init()
{
    register_plugin( PLUGIN, VERSION, AUTHOR )
    
    pcvar_enabled = register_cvar( "zp_sniper_buy", "1" )
    pcvar_cost = register_cvar( "zp_sniper_cost", "170" )
    pcvar_hudtime = register_cvar( "zp_sniper_hudtime", "2.0" )
    
    g_sniper = zp_register_extra_item( "Sniper", get_pcvar_num( pcvar_cost ) , ZP_TEAM_HUMAN )

    g_maxplayers = get_maxplayers()
    g_msgSayText = get_user_msgid( "SayText" )

    register_cvar( "zp_extra_sniper", VERSION, FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_UNLOGGED|FCVAR_SPONLY )
}

public zp_extra_item_selected( id, item )
{
    if( !get_pcvar_num( pcvar_enabled ) )
        return PLUGIN_HANDLED
    
    if( item == g_sniper )
    {
        if( zp_has_round_started() )
        {
            colored_print( id, "^x04[ZP]^x01 You must buy a Sniper before the round start!" )
            return ZP_PLUGIN_HANDLED
        }

        restricted = zp_is_restricted()

                if(restricted == 1 )    
                {
                           colored_print( id, "^x04[ZP]^x01 This mod allowed to buy only from ^x04[10.00]^x01 to ^x04[22.00]^x01 PM!" )
                    return ZP_PLUGIN_HANDLED
                }
        if(restricted == 2 )
        {
                   colored_print( id, "^x04[ZP]^x01 You can buy this mod after clean ( ^x04Infection^x01 ) Round!" )
                    return ZP_PLUGIN_HANDLED
        }
                
                restricted_modmap = zp_user_buy_on_lastmap(id)

                if(zp_user_buy_on_lastmap(id))    
                {
                           colored_print( id, "^x04[ZP]^x01 You allowed to buy 1 mod per 2 maps." )
                    return ZP_PLUGIN_HANDLED
                }

        zp_user_buy_item(id)

        zp_make_user_sniper( id )

        colored_print( id, "^x04[ZP]^x01 became a Sniper!" )

        set_task( get_pcvar_float( pcvar_hudtime ), "sniper_message", id )
    }
    return PLUGIN_HANDLED
}

public sniper_message( id )
{
    new szName[ 32 ]
    get_user_name( id, szName, 31 )
    set_hudmessage( 255, 0, 0, 0.05, 0.45, 1, 0.0, 5.0, 1.0, 1.0, -1 )
    show_hudmessage( 0, "%s buy Sniper!", szName )
}

stock colored_print( target, const message[],  any:... )
{
    static buffer[ 512 ]

    if( !target )
    {
        static player
        for( player = 1; player <= g_maxplayers; player++ )
        {
            if ( !is_user_connected( player ) )
                continue;
            
            vformat( buffer, charsmax( buffer ), message, 3 )
            
            message_begin( MSG_ONE_UNRELIABLE, g_msgSayText, _, player )
            write_byte( player )
            write_string( buffer )
            message_end()
        }
    }

    else
    {
        vformat( buffer, charsmax( buffer ), message, 3 )
        
        message_begin( MSG_ONE, g_msgSayText, _, target )
        write_byte( target )
        write_string( buffer )
        message_end()
    }
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 7.4.2013, 18:48
Сообщение #87


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

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

new g_t_purchase_map; надо убрать
restricted_modmap = zp_user_buy_on_lastmap(id) тоже убрать
И пробуйте скомпилировать


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Slackerok
сообщение 7.4.2013, 19:07
Сообщение #88
Стаж: 16 лет

Сообщений: 187
Благодарностей: 20
Полезность: 12

mazdan, Первый плагин еррор выдает:



Второй плагин 7 warning-ов ( наверно строчки не сидят в правельном порядке ), но компилируется)

Да и еще осталась нерешенной одна задача с модами через раунд. Не прикрываются 3 мода от покупки: Nightmare, Assassins vs Snipers и Multiple Infection.

Сервер понимает эти раунды:

g_notcleanround = (g_nemround || g_survround || g_swarmround || g_plagueround || g_sniperround ||g_assassinround || g_lnjround)

Остаются 3 раунда которых он не понимает. Можно добавить переменные в исходниках модов, например g_nightmareround, g_snipervsassassinround и g_multiround ?
Исходники плагинов Nightmare Mod и Assasins vs Snipers в первом посте, а Multiple Infection мод из самого zombie_plague_advanced.sma

Отредактировал: Slackerok, - 7.4.2013, 19:21
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 7.4.2013, 19:59
Сообщение #89


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

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

Slackerok, задачи постепенно нужно решать. Сначала с файлом.

Не пойму, что в строке 25 там? Просто нет у меня же исходника.
Вероятно, public native_buy() надо заменить на public native_buy(id)


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Slackerok
сообщение 7.4.2013, 22:12
Сообщение #90
Стаж: 16 лет

Сообщений: 187
Благодарностей: 20
Полезность: 12

mazdan, Конечно, извините я забыл выставить исходник...

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

new Trie:g_t_purchase_map;

public plugin_init()
{
    register_plugin("Lastmap Purchase","1","mazdan & Nickk & Slackerok")
    
    g_t_purchase_map = TrieCreate()
    
    set_task(0.3,"read_purchase_file",128)
}

public plugin_natives()
{
    register_native("zp_user_buy_item", "native_buy", 1)
    register_native("zp_user_buy_on_lastmap", "native_lastmap", 1)
}

public native_buy()
{
    new ip[16]
    get_user_ip(id,ip,15,1)
    write_file("lastmap_purchases.txt",ip,-1)
}

public native_lastmap(id)
{
    static ip[16]
    get_user_ip(id,ip,15,0)
    return TrieKeyExists(g_t_purchase_map,ip)
}

public read_purchase_file()
{
    new i_file=fopen("lastmap_purchases.txt","a+")
    
    if(!i_file)
    {
        return PLUGIN_CONTINUE
    }
    
    new s_buffer[64]

    while(!feof(i_file))
    {
        fgets(i_file,s_buffer,127)

        trim(s_buffer)

        TrieSetCell(g_t_purchase_map,s_buffer,1)
        
    fclose(i_file)
    delete_file("lastmap_purchases.txt")
    return PLUGIN_CONTINUE
}


строка 25

Цитата
get_user_ip(id,ip,15,1)


public native_buy() сменил на public native_buy(id)

В общем решилась проблема, пойду тестировать)

mazdan, Спасибо вам огромное) drinks.gif

Отредактировал: Slackerok, - 7.4.2013, 23:00
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Slackerok
сообщение 7.4.2013, 23:08
Сообщение #91
Стаж: 16 лет

Сообщений: 187
Благодарностей: 20
Полезность: 12

mazdan, Включил плагин и сервер при смене карты завис намертво...... Вот плагины:
lastmap_purchases
Код
#include <amxmodx>
#include <amxmisc>
#include <zombie_plague_advance>

new Trie:g_t_purchase_map;

public plugin_init()
{
    register_plugin("Lastmap Purchase","1","mazdan & Nickk & Slackerok")
    
    g_t_purchase_map = TrieCreate()
    
    set_task(0.3,"read_purchase_file",128)
}

public plugin_natives()
{
    register_native("zp_user_buy_item", "native_buy", 1)
    register_native("zp_user_buy_on_lastmap", "native_lastmap", 1)
}

public native_buy(id)
{
    new ip[16]
    get_user_ip(id,ip,15,1)
    write_file("lastmap_purchases.txt",ip,-1)
}

public native_lastmap(id)
{
    static ip[16]
    get_user_ip(id,ip,15,0)
    return TrieKeyExists(g_t_purchase_map,ip)
}

public read_purchase_file()
{
    new i_file=fopen("lastmap_purchases.txt","a+")
    
    if(!i_file)
    {
        return PLUGIN_CONTINUE
    }
    
    new s_buffer[64]

    while(!feof(i_file))
    {
        fgets(i_file,s_buffer,127)

        trim(s_buffer)

        TrieSetCell(g_t_purchase_map,s_buffer,1)

    fclose(i_file)
    delete_file("lastmap_purchases.txt")
    }

    return PLUGIN_CONTINUE
}
zp_buy_sniper
Код
#include <amxmodx>
#include <zombieplaguenew1.3>

#define PLUGIN "[ZP] Extra Item: Become Sniper"
#define VERSION "0.0.1"
#define AUTHOR "none"

new g_sniper
new g_msgSayText
new g_maxplayers

new pcvar_enabled, pcvar_cost, pcvar_hudtime
new restricted
native zp_is_restricted()
native zp_user_buy_item(id)
native zp_user_buy_on_lastmap(id)

public plugin_init()
{
    register_plugin( PLUGIN, VERSION, AUTHOR )
    
    pcvar_enabled = register_cvar( "zp_sniper_buy", "1" )
    pcvar_cost = register_cvar( "zp_sniper_cost", "170" )
    pcvar_hudtime = register_cvar( "zp_sniper_hudtime", "2.0" )
    
    g_sniper = zp_register_extra_item( "Sniper", get_pcvar_num( pcvar_cost ) , ZP_TEAM_HUMAN )

    g_maxplayers = get_maxplayers()
    g_msgSayText = get_user_msgid( "SayText" )

    register_cvar( "zp_extra_sniper", VERSION, FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_UNLOGGED|FCVAR_SPONLY )
}

public zp_extra_item_selected( id, item )
{
    if( !get_pcvar_num( pcvar_enabled ) )
        return PLUGIN_HANDLED
    
    if( item == g_sniper )
    {
        if( zp_has_round_started() )
        {
            colored_print( id, "^x04[ZP]^x01 You must buy a Sniper before the round start!" )
            return ZP_PLUGIN_HANDLED
        }

        restricted = zp_is_restricted()

                if(restricted == 1 )    
                {
                           colored_print( id, "^x04[ZP]^x01 This mod allowed to buy only from ^x04[10.00]^x01 to ^x04[22.00]^x01 PM!" )
                    return ZP_PLUGIN_HANDLED
                }
        if(restricted == 2 )
        {
                   colored_print( id, "^x04[ZP]^x01 You can buy this mod after clean ( ^x04Infection^x01 ) Round!" )
                    return ZP_PLUGIN_HANDLED
        }
                
                if(zp_user_buy_on_lastmap(id))    
                {
                           colored_print( id, "^x04[ZP]^x01 You allowed to buy 1 mod per 2 maps." )
                    return ZP_PLUGIN_HANDLED
                }

        zp_user_buy_item(id)

        zp_make_user_sniper( id )

        colored_print( id, "^x04[ZP]^x01 became a Sniper!" )

        set_task( get_pcvar_float( pcvar_hudtime ), "sniper_message", id )
    }
    return PLUGIN_HANDLED
}

public sniper_message( id )
{
    new szName[ 32 ]
    get_user_name( id, szName, 31 )
    set_hudmessage( 255, 0, 0, 0.05, 0.45, 1, 0.0, 5.0, 1.0, 1.0, -1 )
    show_hudmessage( 0, "%s buy Sniper!", szName )
}

stock colored_print( target, const message[],  any:... )
{
    static buffer[ 512 ]

    if( !target )
    {
        static player
        for( player = 1; player <= g_maxplayers; player++ )
        {
            if ( !is_user_connected( player ) )
                continue;
            
            vformat( buffer, charsmax( buffer ), message, 3 )
            
            message_begin( MSG_ONE_UNRELIABLE, g_msgSayText, _, player )
            write_byte( player )
            write_string( buffer )
            message_end()
        }
    }

    else
    {
        vformat( buffer, charsmax( buffer ), message, 3 )
        
        message_begin( MSG_ONE, g_msgSayText, _, target )
        write_byte( target )
        write_string( buffer )
        message_end()
    }
}


Отредактировал: Slackerok, - 7.4.2013, 23:11
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 8.4.2013, 7:44
Сообщение #92


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

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

ну завис возможно из-за нашего нового плагина =)
Вы предварительно тестируйте на каком-то тестовом сервере.
new i_file=fopen("lastmap_purchases.txt","a+") надо не "a+", а "rt" открывать (r - читать t - текст)
Если снова ляжет то будем добавлять логи - смотреть в чем проблема


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя iLLuSioN
сообщение 8.4.2013, 14:08
Сообщение #93
Иконка группы

Стаж: 19 лет

Сообщений: 6911
Благодарностей: 7990
Полезность: 1639

Вы еще здесь :)


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Slackerok
сообщение 8.4.2013, 15:13
Сообщение #94
Стаж: 16 лет

Сообщений: 187
Благодарностей: 20
Полезность: 12

mazdan, Протестил на домашнем, сервер запускается нормально, но зависает только когда сменивается карта, наверно крэш происходит от во время проверки файла lastmap_purchases.txt.
Дальше заметил что наш плагин не работает как было задумано, купил два мода, плагин не зарегистрировал их в файлике и позволял дальше покупать, сменил карту и завис)

iLLuSioN, Я или mazdan? :D

Отредактировал: Slackerok, - 8.4.2013, 15:21
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 8.4.2013, 15:33
Сообщение #95


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

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

а, я же не посмотрел
Код
    while(!feof(i_file)) // делать пока файл не закончится отсюда
    {
        fgets(i_file,s_buffer,127)

        trim(s_buffer)

        TrieSetCell(g_t_purchase_map,s_buffer,1)
    } // и до сюда
    fclose(i_file) // сначала всё прочитали, потом файл закрываем
    delete_file("lastmap_purchases.txt")


после write_file("lastmap_purchases.txt",ip,-1) добавить можно
log_amx("%s added to file",ip)


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Slackerok
сообщение 8.4.2013, 16:24
Сообщение #96
Стаж: 16 лет

Сообщений: 187
Благодарностей: 20
Полезность: 12

mazdan,, Теперь не падает =), однако также можно покупать больше чем один мод и если сменить карту покупки не блокируются. Также файл lastmap_purchases.txt не создается. В логах записывается мой IP:

L 04/08/2013 - 17:15:11: [lastmap_purchases.amxx] 123.123.123.123 added to file
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 8.4.2013, 17:01
Сообщение #97


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

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

а файл вы где ищите? по идее должен быть в папке cstrike
filewatcher не установлен случайно?


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Slackerok
сообщение 8.4.2013, 21:57
Сообщение #98
Стаж: 16 лет

Сообщений: 187
Благодарностей: 20
Полезность: 12

mazdan, Я искал в data и в configs :D

Поискал в cstrike. При покупке плагин создает наш файлик и записывает мой IP в нем, при повторной покупке снова записывает ниже мой IP, а после смены карты удаляет файл) Но он после первой записи должен вроде запрещать моему IP покупать еще моды. В остальном плагин по ходу функционирует как надо. Может дело в проверке?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 9.4.2013, 6:05
Сообщение #99


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

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

вы же не говорили, что после первой покупки должен запрещать, вы сказали что если покупал на прошлой карте то не должен купить на следующей
Тогда там где пишем в файл этот же айпи нужно положить в Trie массив - TrieSetCell

get_user_ip(id,ip,15,0) заменить на get_user_ip(id,ip,15,1)


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Slackerok
сообщение 9.4.2013, 17:48
Сообщение #100
Стаж: 16 лет

Сообщений: 187
Благодарностей: 20
Полезность: 12

mazdan, Сегодня протестирую после работы и отпишусь о результатах) Спасибо!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
7 страниц V  « 4 5 6 »
 
Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: