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

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

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

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

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

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

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

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

В павне все так)
Функция:
Код
public bla()
{ - начало
//содержимое
} - конец


условие:
Код
if(bla == 0)
{ - начало действия, которое будет выполнятся, если bla равно нолю
//тело, оно и будет выполняться
} - конец


Например:
Код
public example(id)
{
client_print(id, print_chat, "hello")
}

Игроку в чате напишет "hello" тогда, когда вызовется функция example
Вызвать можно по разному - set_task, или в другой функции example(id)

Кстати, иногда пишут
Код
public bla(id) { - открыв. скобка здесь же
//тело
}


а если в теле 1 строка, то можно так:
Код
public bla(id) //тело

По сути ничем оно не отличается, насколько я знаю.

Вот вам и начальный мануал)

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


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

Стаж: 15 лет

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

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

Это что и зачем?
Цитата
{
continue
}

Строку считали fgets(i_file,s_buffer,127) дальше нужно же делать с ней что то? или просто почитали строчки и всё?


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

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

Nickk, спасибо) все что с public-ом это начало новой функции) Вот mazdan меня замучил этими скобками :D

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]
        
    // Закрываем файл по индексу
    
    fclose(i_file)
    
    return PLUGIN_CONTINUE


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

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

Опять лишние в последней функции

Цитата
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]


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

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

Nickk, отредактировал спойлер, подтвердите если все правильно)

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

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

Я же вам bold'ом выделил кавычки.
В самом начале последней функции.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 3.4.2013, 17:10
Сообщение #67


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

Стаж: 15 лет

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

Цитата
// Создаем необходимые строки

new s_buffer[128],s_ip[64],s_name[64]

// Закрываем файл по индексу

fclose(i_file)


Цитата(я писал ранее)
читаем и записываем в g_t_purchase_map (TrieSetCell(g_t_purchase_map,ip,1) вроде так)

Просто вы лепите наугад. Распишите что вы в каждой строке делаете. А то все впустую.
Код
new i_file=fopen("lastmap_purchases.txt","a+")

Мне же надоест и я просто тему перестану читать, если никто не возьмется помочь - так и останетесь без плагина.
// Если произошла ошибка открытии файла - прекращаем выполнение кода

if(!i_file)
{
return PLUGIN_CONTINUE
}
fclose(i_file)

Что у вас этот код делает полезного? файл открыли, файл закрыли. А зачем открывали? Просто так? Последние 2 страницы один оффтоп, КПД 0%. Пока не начнете делать нормально, а не на отвяжись не буду писать.


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

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

Nickk, Дело в том что в экземпляре на сайте амх-х который мне дал mazdan функция так не закрывается... Я под тем же и ориентировался)

Отредактировал, теперь правильно?

mazdan, из меня скриптера не сделать за один день, что же вы мне предлагаете теперь делать?

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

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

Код
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]
        
    // Закрываем файл по индексу
    
    fclose(i_file)
    
    return PLUGIN_CONTINUE
}

Так правильно.
Вы поймите, когда закрываете кавычку, дальше не может быть кода, т.к. он не будет обработан.
Весь код должен быть в функциях.

mazdan, человеку тяжело, он только учится, помогите вы)

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


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

Стаж: 15 лет

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

Nickk, У человека есть инструкции и примеры с комментариями.
нельзя же брать рецепт пирога и выкидывать из него часть действий? Типа "перемешать" или "поставить в духовку". Я ему сказал - начинка не нужна, можно убрать. А он решил не ставить в духовку заодно. Взял и выбросил функции, несмотря на то что они подписаны были "считываем строку", "записываем в массив" и т.п.

UPD:
Цитата
mazdan, из меня скриптера не сделать за один день, что же вы мне предлагаете теперь делать?
за день этот плагин сделать с помощью можно легко, это не сделает вас скриптером. Вы хотите сделать его не за день, а за 2 часа. Поэтому начали делать не вникая, в итоге это вылилось в waste of time


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

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

mazdan, Да, Вы мне дали рецепт, но дело в том что ингредиенты мне ведь не знакомы. Я впервой узнал сегодня о скобках и о функциях и какую роль они имеют в плагине.. А дальше что? Откуда мне родить то что вы прописали? До духовки мне еще далеко.....

Цитата
"считываем строку", "записываем в массив"

Честно я даже представления не имею как это сделать....
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nickk
сообщение 3.4.2013, 17:51
Сообщение #72
Стаж: 13 лет

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

Плохой дядя маздан уперся :D
Вряд ли вам кто-то поможет, тема уже 2 дня висит.
Разве что к скриптерам за деньги.

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


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

Стаж: 15 лет

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

Slackerok, вы взяли работающий плагин из примера и сделали из него неработающий.
там же каждая строчка написана. Старайтесь понять что и для чего, а не лепить наугад. Я не буду плагин за вас писать, это неинтересно. Если вам тоже не интересно сделать самостоятельно, то лучше действительно заказать. Если самому сделать интересно то разберитесь с двумя ссылками что я дал (работа с файлами и массивы Trie и Array) после этого добавьте в код, который вы написали те строки, которых не хватает.
Неужели не понятно что new объявляет переменную или массив? Особенно с комментарием. Если это понятно, то объясните зачем вы налепили переменных, которые не используете ни разу в коде?
Цитата
Цитата
"считываем строку", "записываем в массив"
Честно я даже представления не имею как это сделать....

просто не хотите
Цитата(amx-x.ru)
//Получаем следующую строку из файла в s_buffer

fgets(i_file,s_buffer,127)

Цитата(amx-x.ru)
// Заносим в массив ячейку с ключем ip и значением - имя

TrieSetString(g_t_bans,s_ip,s_name)

Цитата(amx-x.ru)
Код
fgets(file, buffer[], maxlength)

Данная функция предназначена для чтения строки из файла. Считывает также символы переноса каретки и новой строки.


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

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

mazdan, те ссылки которые вы мне дали они для тех у кого уже есть определенные знания о скриптинге, например Nickk, знают что означают и какие функции имеют такие термины как массивы, переменные и еще много чего которого я назвать не могу так как не знаю ничего о них, они могут делать до конца плагины, знают откуда начать и куда заканчивать, а не для новичков вроде меня который взялся впервой за плагин и думает за 2 часа слепит 100 % супер плагин. Вы думаете я знаю для чего делается например вот эта строчка?:

Цитата
// Заносим в массив ячейку с ключем ip и значением - имя

TrieSetString(g_t_bans,s_ip,s_name)


или например

Цитата
fgets(file, buffer[], maxlength)
Данная функция предназначена для чтения строки из файла. Считывает также символы переноса каретки и новой строки.

Каретка, это слово я впервой вообще слышу =) Я учил русский только 4 года, и что-то не припоминаю такого слова =)
Я понимаю что вы хотите научить меня полезному, но мне не сделать то чего я не знаю.
Но хорошо, я попробую самостоятельно написать плагин. Надеюсь через 2 месяца закончу, если не забью на этот запрет через карту.

Nickk, Помню 3-4 года назад серверов было немного, скриптеры сидели без дела, и как только одну такую тему кто-то открывал на одном из форумов по скриптингу, то сразу бросались 10-15 человек и тут же решаль парню его проблему с плагином или с сервером. А теперь серверов столько что не отсчитать, каждый второй ребенок имеет свой сервер, скриптеры заняты заказами, не помогают за бесплатно) Лишь малое количество отзываются в помощи, в моем случае только mazdan и вы. За что вам огромное спасибо! drinks.gif

Желаю хорошо провести вечер!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 3.4.2013, 19:08
Сообщение #75


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

Стаж: 15 лет

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

Slackerok, так вы задавайте вопросы если не понятно, в противном случае получится то что получилось на прошлых страницах.
ДеревоУстановитьСтроку так и значит что записать в ячейку с адресом "АйпиИгрока" строку "ИмяИгрока" в нашем случае будем писать не строку, а просто 1, т.к. нам надо просто было\не было, поэтому я приводил TrieSetCell
Вы успешно написали без понятия 40% плагина. Так что не нужно тут про 2 месяца. От вас всё зависит.
Возврат каретки это Enter (перенос строки) пошло от печатных машинок, где печатающую каретку возвращали рукой назад.


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Slackerok
сообщение 3.4.2013, 22:03
Сообщение #76
Стаж: 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
    }
    
    // Создаем необходимые строки ( s_name[64] убрал, вы говорили что нам нужен только IP, и про длину буфера сделать меньше это так? )
    
    new s_buffer[64],s_ip[64]

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

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

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

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


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

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

mazdan, Кстати хотел спросить еще, если помните мы добавили переменные

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

в основном плагине ZPA

Однако остаются еще 2 моды которых не прикрыли от покупки. Это мод Nightmare и мод Assassins vs Snipers . Можно сделать и для них переменые чтобы определить их для:

Код
new restricted
restricted = zp_is_restricted()
if(restricted == 2 )
{
       colored_print( id, "^x04[ZP]^x01 Прошлый раунд был не чистый!" )
            return ZP_PLUGIN_HANDLED
}


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


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

Стаж: 15 лет

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

Цитата
g_t_purchase_map (TrieSetCell(g_t_purchase_map,ip,1)

Это вы делаете совсем без понимания :D

Нужно
Код
fgets(i_file,s_buffer,127) //считали

// записали в массив  g_t_purchase_map ячейку с адресом равным ip из списка, поставили значение ячейки 1
TrieSetCell(g_t_purchase_map,s_buffer,1)

Собственно осталось при покупке сделать запись в этот файл, его автоматическое удаление или очистку в после считывания

Опять же смотрите как это в примерах выполняется


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

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

mazdan, а по поводу

Код
// Создаем необходимые строки ( s_name[64] убрал, вы говорили что нам нужен только IP, и про длину буфера сделать меньше это так? )
    
    new s_buffer[64],s_ip[64]


все сделано правильно?

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

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

mazdan, Как я понял мне нужно в этой части плагина записывать все покупки

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

    
}

Как определить их чтобы записать?

И еще я не очень понял точно какой пример всетаки отвечает за запись покупок...
Этот?

Цитата(amx-x.ru)
Получает в строку информацию из ячейки, где item - номер ячейки. Пример удаления ячейки, в которой содержится строка "array":

Код
Код
public my_function()
{
    // Получаем размер массива g_a_data в переменную i_size
    
    new i_size=ArraySize(g_a_data)
    
    // Если размер нулевой - прекращаем работу, т.к. массив пуст
    
    if(!i_size)
    {
        return PLUGIN_CONTINUE
    }
    
    // Создаем строку для временного хранения данных
    
    new s_buffer[6]
    
    // Создаем цикл, в котором указатель a прибавляется на одно значение, пока не достигнет конца массива
    
    for(new a;a<i_size;a++)
    {
        // Получаем строку из ячейки a в s_buffer
        
        ArrayGetString(g_a_data,a,s_buffer,5)
        
        // Если строка совпадает с "array" - удаляем эту ячейку из массива
        
        if(equal(s_buffer,"array"))
        {
            ArrayDeleteItem(g_a_data,a)
            
            return PLUGIN_CONTINUE
        }
    }
    
    return PLUGIN_CONTINUE
}


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