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

Админ прокачивает свои пушки  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

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

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

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

Админ прокачивает свои пушки

Сообщение Mandar1n » 21 фев 2018, 00:03

Почему-то не могу сделать так, чтобы админ мог прокачивать любые пушки(то есть свои тоже).

Скину 2 кода:
1. Моя попытка(232 строка из оригинала)
2. Оригинал

МАЙО
Код: Выделить всё
public createsentryhere(id) {
    new sentry = AimingAtSentry(id, true)
    if (sentry && entity_range(sentry, id) <= MAXUPGRADERANGE)
    {
    if(get_user_flags(id) & ADMIN_BAN)
    {
    g_aimSentry[id - 1] = sentry
    sentry_upgrade
(id, sentry)
    }
    else
    
{
        if (entity_get_int(sentry, SENTRY_INT_LEVEL) == SENTRY_LEVEL_1 && id == GetSentryPeople(sentry, OWNER)) {
            client_print(id, print_center, "Не получается прокачать до 2 уровня, попроси товарища!")
            return PLUGIN_HANDLED
        
}
        if (entity_get_int(sentry, SENTRY_INT_LEVEL) == SENTRY_LEVEL_2 && id == GetSentryPeople(sentry, UPGRADER_1)) {
            client_print(id, print_center, "Не получается прокачать до 3 уровня, попроси товарища!")
            return PLUGIN_HANDLED
        
}
        g_aimSentry[id - 1] = sentry
        sentry_upgrade
(id, sentry)
    }
    }
    else 
    
{
        sentry_build(id)
    }
    return PLUGIN_HANDLED
}


Оригинальный код прикреплен
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Mandar1n 21 фев 2018, 13:21, всего редактировалось 3 раз(а).
Аватара пользователя
Mandar1n
 
Сообщения: 133
Зарегистрирован: 08 дек 2013, 14:08
Благодарил (а): 38 раз.
Поблагодарили: 4 раз.
Языки программирования: Counter-Strike 1.6

Re: Админ прокачивает свои пушки

Сообщение Subb98 » 21 фев 2018, 09:45

Где оригинал?
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: Админ прокачивает свои пушки

Сообщение Mandar1n » 21 фев 2018, 13:21

Subb98 писал(а):Где оригинал?

Хм... После предупреждения в 100000(мб больше) кол-во символов код удалился.

Добавлено спустя 27 секунд:
[code=php][/code]

Добавлено спустя 1 минуту 44 секунды:
Крч, прикрепил оригинал к 1 посту
Аватара пользователя
Mandar1n
 
Сообщения: 133
Зарегистрирован: 08 дек 2013, 14:08
Благодарил (а): 38 раз.
Поблагодарили: 4 раз.
Языки программирования: Counter-Strike 1.6

Re: Админ прокачивает свои пушки

Сообщение Subb98 » 21 фев 2018, 13:47

Так попробуйте:

Код: Выделить всё
public createsentryhere(id) {
    new 
sentry AimingAtSentry(idtrue)
    if (
sentry && entity_range(sentryid) <= MAXUPGRADERANGE)
    {
        if (!(
get_user_flags(id) & ADMIN_BAN)) {
            if (
entity_get_int(sentrySENTRY_INT_LEVEL) == SENTRY_LEVEL_1 && id == GetSentryPeople(sentryOWNER)) {
                
client_print(idprint_center"Не получается прокачать до 2 уровня, попроси товарища!")
                return 
PLUGIN_HANDLED
            
}
            if (
entity_get_int(sentrySENTRY_INT_LEVEL) == SENTRY_LEVEL_2 && id == GetSentryPeople(sentryUPGRADER_1)) {
                
client_print(idprint_center"Не получается прокачать до 3 уровня, попроси товарища!")
                return 
PLUGIN_HANDLED
            
}
        }
        
g_aimSentry[id 1] = sentry
        sentry_upgrade
(idsentry)
    }
    else {
        
sentry_build(id)
    }

    return 
PLUGIN_HANDLED
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: Админ прокачивает свои пушки

Сообщение Mandar1n » 21 фев 2018, 14:07

Subb98 писал(а):Так попробуйте:

Код: Выделить всё
public createsentryhere(id) {
    new sentry = AimingAtSentry(id, true)
    if (sentry && entity_range(sentry, id) <= MAXUPGRADERANGE)
    {
        if (!(get_user_flags(id) & ADMIN_BAN)) {
            if (entity_get_int(sentry, SENTRY_INT_LEVEL) == SENTRY_LEVEL_1 && id == GetSentryPeople(sentry, OWNER)) {
                client_print(id, print_center, "Не получается прокачать до 2 уровня, попроси товарища!")
                return PLUGIN_HANDLED
            
}
            if (entity_get_int(sentry, SENTRY_INT_LEVEL) == SENTRY_LEVEL_2 && id == GetSentryPeople(sentry, UPGRADER_1)) {
                client_print(id, print_center, "Не получается прокачать до 3 уровня, попроси товарища!")
                return PLUGIN_HANDLED
            
}
        }
        g_aimSentry[id - 1] = sentry
        sentry_upgrade
(id, sentry)
    }
    else {
        sentry_build(id)
    }

    return PLUGIN_HANDLED
}

Не помогло. Я тут подумал в поиск вбить sentry_upgrade и возможно что-то из следущего блочит апгрейд?
sentry_upgrade(id, sentry) // 1294 строка
public playertouchedsentry(sentry, player) //1852 строка
Аватара пользователя
Mandar1n
 
Сообщения: 133
Зарегистрирован: 08 дек 2013, 14:08
Благодарил (а): 38 раз.
Поблагодарили: 4 раз.
Языки программирования: Counter-Strike 1.6

Re: Админ прокачивает свои пушки

Сообщение Subb98 » 21 фев 2018, 14:09

Mandar1n, если не помогло, значит, да, нужно смотреть, что происходит в sentry_upgrade. Но этот код тоже нужно оставить, иначе админ до sentry_upgrade не дойдёт, если не будут соблюдены условия в if'ах.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: Админ прокачивает свои пушки

Сообщение Mandar1n » 21 фев 2018, 15:10

Subb98 писал(а):Mandar1n, если не помогло, значит, да, нужно смотреть, что происходит в sentry_upgrade. Но этот код тоже нужно оставить, иначе админ до sentry_upgrade не дойдёт, если не будут соблюдены условия в if'ах.


Просто я лишь смог в своем примере сделать изменения, дальше по коду(который я указал) я не смог разобраться
if (get_user_team(id) != entity_get_int(sentry, SENTRY_INT_TEAM)) {
client_print(id, print_center, "Можно качать только пушки своей команды.")

Я понял что, если игрок в команде. А дальше не понял) Сам код не понял, а смысл ясен.

Добавлено спустя 57 минут 43 секунды:
Почему не компилится?

Код: Выделить всё
bool:PlayerCanUpgradeSentry(player, sentry) 
{
    new level = entity_get_int(sentry, SENTRY_INT_LEVEL)
    if(get_user_flags(id) & ADMIN_BAN)    
    
{
    sentry_upgrade(player, sentry)
    }
    else
    
{        
        switch
(level) 
        
{
        case SENTRY_LEVEL_1: {
            #if defined DISALLOW_OWN_UPGRADES
            if (player == GetSentryPeople(sentry, OWNER))
                return false
            
#endif
            return get_user_team(player) == entity_get_int(sentry, SENTRY_INT_TEAM) && cs_get_user_money(player) >= g_COST[level + 1]
        }
        case SENTRY_LEVEL_2: {
            #if defined DISALLOW_TWO_UPGRADES
            if (player == GetSentryPeople(sentry, UPGRADER_1))
                return false
            
#endif
            return get_user_team(player) == entity_get_int(sentry, SENTRY_INT_TEAM) && cs_get_user_money(player) >= g_COST[level + 1]
        }
        
        
}
    }
    return false
}


А не, какой-то бред сотворил, даже чинить не надо
Аватара пользователя
Mandar1n
 
Сообщения: 133
Зарегистрирован: 08 дек 2013, 14:08
Благодарил (а): 38 раз.
Поблагодарили: 4 раз.
Языки программирования: Counter-Strike 1.6

Re: Админ прокачивает свои пушки

Сообщение Mandar1n » 22 фев 2018, 16:08

Subb98 писал(а):Mandar1n, если не помогло, значит, да, нужно смотреть, что происходит в sentry_upgrade. Но этот код тоже нужно оставить, иначе админ до sentry_upgrade не дойдёт, если не будут соблюдены условия в if'ах.


Можешь объяснить как работает define DISALLOW_OWN_UPGRADES? Когда он отключен, то все могут улучшать свои пушки

Добавлено спустя 17 минут 15 секунд:
И я так понял, что если игрок прокачивает пушку через sentry_build и подходит впритык - это разное?
Аватара пользователя
Mandar1n
 
Сообщения: 133
Зарегистрирован: 08 дек 2013, 14:08
Благодарил (а): 38 раз.
Поблагодарили: 4 раз.
Языки программирования: Counter-Strike 1.6

Re: Админ прокачивает свои пушки

Сообщение Hilarious » 23 фев 2018, 03:19

Код: Выделить всё
public createsentryhere(id) {
    new sentry = AimingAtSentry(id, true)
    if (sentry && entity_range(sentry, id) <= MAXUPGRADERANGE)
    {
        if (entity_get_int(sentry, SENTRY_INT_LEVEL) == SENTRY_LEVEL_1 && id == GetSentryPeople(sentry, OWNER)) {
            client_print(id, print_center, "Не получается прокачать до 2 уровня, попроси товарища!")
            return PLUGIN_HANDLED
        
}
        if (entity_get_int(sentry, SENTRY_INT_LEVEL) == SENTRY_LEVEL_2 && id == GetSentryPeople(sentry, UPGRADER_1)) {
            client_print(id, print_center, "Не получается прокачать до 3 уровня, попроси товарища!")
            return PLUGIN_HANDLED
        
}
        g_aimSentry[id - 1] = sentry
        sentry_upgrade
(id, sentry)
    }
    else {
        sentry_build(id)
    }

    return PLUGIN_HANDLED


Так тут же всё понятно. Эта функция отвечает за постройку пушки.
А ты проверяешь здесь совершенно не то, что нужно:

Код: Выделить всё
    if(get_user_flags(id) & ADMIN_BAN)
    {
    g_aimSentry[id - 1] = sentry
    sentry_upgrade
(id, sentry)
    

В этой функции должно быть вот так:

Код: Выделить всё
public createsentryhere(id) {
    new sentry = AimingAtSentry(id, true)
    if (sentry && entity_range(sentry, id) <= MAXUPGRADERANGE)
    {
        if(get_user_flags(id) & ADMIN_BAN)
            sentry_build(id);
        
        if 
(entity_get_int(sentry, SENTRY_INT_LEVEL) == SENTRY_LEVEL_1 && id == GetSentryPeople(sentry, OWNER)) {
            client_print(id, print_center, "Не получается прокачать до 2 уровня, попроси товарища!")
            return PLUGIN_HANDLED
        
}
        if (entity_get_int(sentry, SENTRY_INT_LEVEL) == SENTRY_LEVEL_2 && id == GetSentryPeople(sentry, UPGRADER_1)) {
            client_print(id, print_center, "Не получается прокачать до 3 уровня, попроси товарища!")
            return PLUGIN_HANDLED
        
}
        g_aimSentry[id - 1] = sentry
        sentry_upgrade
(id, sentry)
    }
    else {
        sentry_build(id)
    }

    return PLUGIN_HANDLED


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

Добавлено спустя 6 минут 2 секунды:
Переменных очень много, тяжело воспринимается код, проверка на проверке и некоторые из них здесь вообще излишни, такое ощущение, что писал эту работу не один человек, а по очереди - сперва один, потом второй добавил своё и так далее.
В матрице :-[
Аватара пользователя
Hilarious
 
Сообщения: 69
Зарегистрирован: 07 фев 2018, 08:46
Благодарил (а): 6 раз.
Поблагодарили: 29 раз.

Re: Админ прокачивает свои пушки

Сообщение Mandar1n » 23 фев 2018, 03:25

Попробуйте походить по дефайну DISALLOW_OWN_UPGRADES и посмотреть, я как-то смог корявым способом сделать, чтобы админы могли улучшать свои пушки(менял ник где нет флага, то писало что только админ может прокачивать свои пушки), но потом перестал плагин компелироваться и я вернул оригинал и не смог восстановить сделанное.
Аватара пользователя
Mandar1n
 
Сообщения: 133
Зарегистрирован: 08 дек 2013, 14:08
Благодарил (а): 38 раз.
Поблагодарили: 4 раз.
Языки программирования: Counter-Strike 1.6

След.

Вернуться в Скриптинг

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

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