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

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

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

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

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

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

, Во времени ( ночное ) / через 1 раунд / через 1 карту
Статус пользователя Slackerok
сообщение 3.4.2013, 11:07
Сообщение #41
Стаж: 16 лет

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

mazdan, Не выходит... Все эти термины, функции не знакомы мне вообще... Как слепить весь этот код в одно целое я представления не имею... Начинать надо с более легких экземпляров... Прочитал все примеры... В итоге скопипастил кашу у себя в purchase_map.sma как в последнем примере и попробовал редактировать под своих нужд. Как вы думаете что получилось? :D Там про бана игроков, а не о блокировке модов =) В общем даже стыдно показывать что вышло ( то есть еще не вышло, я не знаю что делать дальше ), одно лишь правда, каша не съедобна ninja.gif =)

Давайте попробуем сначала до конца, по немногу. Начиная с регистрацией плагина, потом до нативов, функции и так далее по лестнице.

Код
#include <amxmodx>
#include <amxmisc>
#include < zombie_plague_advance >

native zp_user_buy_item()
native zp_user_buy_on_lastmap(id) // Нативы правильно указал?

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

public read_purchase_file()
{
    // Получаем индекс файла lastmap_purchases.txt
    
    new i_file=fopen("lastmap_purchases.txt","a+")


Это первая маленькая часть.. Хочу убедиться если сделал хоть что-то правильно =)

Отредактировал: Slackerok, - 3.4.2013, 11:12
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nickk
сообщение 3.4.2013, 11:36
Сообщение #42
Стаж: 13 лет

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

Немного исправил.

Скрытый текст
Код
#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")
    
   // Нужно создать его в глобале
    
    g_t_purchase_map = TrieCreate()
    
    // Через 0.3 секунды получить IP из файла
    
    set_task(0.3,"read_purchase_file",128)
}

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

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

public native_lastmap(id)
{
    if(can_buy[id])
    {
        return 1;
    }
    else if(!can_buy[id])
    {
        return 0;
    }
}

public read_purchase_file()
{
    // Получаем индекс файла lastmap_purchases.txt
    new i_file=fopen("lastmap_purchases.txt","a+")
    
    //Читаем дальше, если игрок записан, то can_buy[id] = false, если нет, то can_buy[id] = true
    
}


Отредактировал: Nickk, - 3.4.2013, 11:39
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 3.4.2013, 11:48
Сообщение #43


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

Стаж: 15 лет

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

Nickk,
не попали, у вас нет ID в файле, там есть IP
читаем и записываем в g_t_purchase_map (TrieSetCell(g_t_purchase_map,ip,1) вроде так)
Код
public native_lastmap(id)
{
static ip[16]
get_user_ip(id,ip,15,0)
return TrieKeyExists(g_t_purchase_map,ip)
}


Роль can_buy[id] играет наш TrieArray с ключем == айпи игроков

В остальном всё верно
Цитата
native zp_user_buy_item()
native zp_user_buy_on_lastmap(id) // Нативы правильно указал?
это когда нативы другого плагина хотим использовать, в нашем случае как Nickk сделал - мы показываем какая функция будет вызываться когда этот натив дёрнут из другого плагина


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Nickk
сообщение 3.4.2013, 11:53
Сообщение #44
Стаж: 13 лет

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

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

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

Извиняюсь что вмешиваюсь :D Плагин выше рабочий на 100 %?

Отредактировал: Slackerok, - 3.4.2013, 12:25
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nickk
сообщение 3.4.2013, 12:30
Сообщение #46
Стаж: 13 лет

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

Да, только он ничего не делает :D
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Slackerok
сообщение 3.4.2013, 12:35
Сообщение #47
Стаж: 16 лет

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

Так значит идем дальше? :D

Дальше вот такой код :D
Код
    // Если произошла ошибка открытии файла - прекращаем выполнение кода
    
    if(!i_file)
    {
        return PLUGIN_CONTINUE
    }
    
    // Создаем необходимые строки
    
    new s_buffer[128],s_ip[64],s_name[64]
    
    // Пока не будет достигнут конец файла, продолжать выполнять цикл
    
    while(!feof(i_file))
    {
        //Получаем следующую строку из файла в s_buffer
        
        fgets(i_file,s_buffer,127)
        
        // Очищаем строку от каретки
        
        trim(s_buffer)
        
        // Если первый символ строки пуст - пропускаем
        
        if(!s_buffer[0]||s_buffer[0]==';'||(s_buffer[0]=='/'&&s_buffer[1]=='/'))
        {
            continue
        }
        
        // Парсим строку на ip
        
        parse(s_buffer,s_ip,63)
        
        // Заносим в массив ячейку с ключем ip
        
        TrieSetString(g_purchase_map,s_ip)
    }
    
    // Закрываем файл по индексу
    
    fclose(i_file)
    
    return PLUGIN_CONTINUE
}

    // Создаем переменную под ip игрока
    
    new s_ip[64]
    
    // Получаем ip игрока
    
    get_user_ip(i_player,s_ip,63)
    
    // Проверяем, есть ли такой ключ в массиве, иными словами есть ли игрок в purchase_map
    
    if(TrieKeyExists(g_purchase_map,s_ip))
    {
        // Если есть - значит, был ранее
        
        // Создаем необходимые переменные
        
        new s_dataname[64],s_name[64]
        
        // Получаем userid игрока
        
        new i_userid=get_user_userid(i_player)
        
        // Получаем имя игрока, под которым он был ранее в purchase_map
        
        TrieGetString(g_purchase_map,s_ip,s_dataname,63)
Здесь конечно нужны снова фиксы а может и есть ненужный код

Отредактировал: Slackerok, - 3.4.2013, 12:39
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nickk
сообщение 3.4.2013, 13:15
Сообщение #48
Стаж: 13 лет

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

Тут уже не помогу, т.к. сам не знаю)
К mazdan'у :D

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

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

Ну хорошо, спасибо что помогли с началом, дальше уже к специалистам обращаться надо :D
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Slackerok
сообщение 3.4.2013, 13:51
Сообщение #50
Стаж: 16 лет

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

Nickk, А вы скриптингу за долгое время научились?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 3.4.2013, 14:04
Сообщение #51


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

Стаж: 15 лет

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

ну у вас нет в файле ника, только айпи, соответственно нечего парсить и не нужны лишние переменные
Цитата
new s_buffer[128],s_ip[64],s_name[64]
нужно только буфер, его длину можно сделать меньше. Вы сами то начните делать иначе не интересно.
Скопировать с amx-x.ru кто угодно может.


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Nickk
сообщение 3.4.2013, 14:30
Сообщение #52
Стаж: 13 лет

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

Я и сейчас учусь)
Точнее как, я знаю то, что лично мне нужно для своих работ.
Но вы учитесь, интересней самому писать, чем просить на форумах)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя Slackerok
сообщение 3.4.2013, 14:35
Сообщение #53
Стаж: 16 лет

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

mazdan, Такое ощущение что вы тестируете мои возможности и навыки новичка :D

Так без парсинга?
Код
#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")
    
   // Нужно создать его в глобале
    
    g_t_purchase_map = TrieCreate()
    
    // Через 0.3 секунды получить IP из файла
    
    set_task(0.3,"read_purchase_file",128)
}

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

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

public native_lastmap(id)
{
static ip[16]
get_user_ip(id,ip,15,0)
return TrieKeyExists(g_t_purchase_map,ip)
}
{
    if(can_buy[ip])
    {
        return 1;
    }
    else if(!can_buy[ip])
    {
        return 0;
    }
}

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
    }
    
    // Создаем необходимые строки
    
    new s_buffer[128],s_ip[64],s_name[64]
    
    // Пока не будет достигнут конец файла, продолжать выполнять цикл
    
    while(!feof(i_file))
    {
        //Получаем следующую строку из файла в s_buffer
        
        fgets(i_file,s_buffer,127)
        
        {
            continue
        }
Цитата
Роль can_buy[id] играет наш TrieArray с ключем == айпи игроков


Здесь я тоже не очень понял. Надо изменить эту часть кода:

Код
if(can_buy[ip])
    {
        return 1;
    }
    else if(!can_buy[ip])
    {
        return 0;
    }


Nickk, спасибо) Но иногда совмещать работу и скриптинг новичка = получается дурдом, нервотрепка... Вот я допустим уже месяц как сижу с кучей недоделанных плагинов =) Скриптингу самому буду учится месяцами, а сервер то надо фиксить)

Отредактировал: Slackerok, - 3.4.2013, 14:41
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nickk
сообщение 3.4.2013, 14:36
Сообщение #54
Стаж: 13 лет

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

Код
public native_lastmap(id)
{
static ip[16]
get_user_ip(id,ip,15,0)
return TrieKeyExists(g_t_purchase_map,ip)
}
{
    if(can_buy[ip])
    {
        return 1;
    }
    else if(!can_buy[ip])
    {
        return 0;
    }
}

Что это?
Закрыли и снова открыли скобку :D
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Slackerok
сообщение 3.4.2013, 14:43
Сообщение #55
Стаж: 16 лет

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

Так это же mazdan открыл и закрыл :D

Отредактировал: Slackerok, - 3.4.2013, 14:43
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nickk
сообщение 3.4.2013, 14:46
Сообщение #56
Стаж: 13 лет

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

Там мой код вообще не нужен ( где с can_buy )
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 3.4.2013, 14:47
Сообщение #57


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

Стаж: 15 лет

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

Цитата
{
if(can_buy[ip])
{
return 1;
}
else if(!can_buy[ip])
{
return 0;
}
}
это не нужно, этот кусок кода у вас даже не в функции
Код
public read_purchase_file()
вы с функцией этой разберитесь. Она у вас от { до } идет
у вас там только 1 строка кода
Код
new i_file=fopen("lastmap_purchases.txt","a+")
Всё остальное непонятно где.
//Читаем дальше тут должен быть код который дальше, а потом закрыться скобка функции }
Код исполняемый должен находится в функциях.
Цикл while открыт и не закрыт
должна быть вложенность скобок нормальная. Разбирайтесь, а не кидайте куда попало иначе мне не интересно
Код
функция {код0 цикл{код1 условие{код2}код3}код4}


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Slackerok
сообщение 3.4.2013, 15:50
Сообщение #58
Стаж: 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")
    
   // Нужно создать его в глобале
    
    g_t_purchase_map = TrieCreate()
    
    // Через 0.3 секунды получить IP из файла
    
    set_task(0.3,"read_purchase_file",128)
}

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

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

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
    }
    
    // Создаем необходимые строки
    
    new s_buffer[128],s_ip[64],s_name[64]
    
    // Пока не будет достигнут конец файла, продолжать выполнять цикл
    
    while(!feof(i_file))
    {
        //Получаем следующую строку из файла в s_buffer
        
        fgets(i_file,s_buffer,127)
        
        {
            continue
        }
     }


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


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

Стаж: 15 лет

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

Проблемы потому что у вас код не в функции, а должен быть в функции.

Цитата
public read_purchase_file()
{ - функция началась
// Получаем индекс файла lastmap_purchases.txt
new i_file=fopen("lastmap_purchases.txt","a+")

//Читаем дальше, если игрок записан, то can_buy[id] = false, если нет, то can_buy[id] = true

// Я же не знаю что должно быть дальше

} - функция закончилась

А код дальше это к чему? когда он выполнится? он не в функции. Сделайте скобками чтобы в функции был


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

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

Так у меня же между скобками находится данная функция.

Или вы имеете в виду сделать весь код public read_purchase_file() в одну функцию?
Код
#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")
    
   // Нужно создать его в глобале
    
    g_t_purchase_map = TrieCreate()
    
    // Через 0.3 секунды получить IP из файла
    
    set_task(0.3,"read_purchase_file",128)
}

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

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

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
    }
    
    // Создаем необходимые строки
    
    new s_buffer[128],s_ip[64],s_name[64]
    
    // Пока не будет достигнут конец файла, продолжать выполнять цикл
    
    while(!feof(i_file))
    {
        //Получаем следующую строку из файла в s_buffer
        
        fgets(i_file,s_buffer,127)
        
        {
            continue
        }
    }
}


Отредактировал: Slackerok, - 3.4.2013, 16:09
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
7 страниц V  « 2 3 4 ... 5 6 »
 
Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: