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

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

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

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

> Информационная доска

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

1. Во время создания новой темы аккуратно оформляйте её, не допускайте грамматических ошибок.
2. Описывая проблему старайтесь, как можно больше рассказать о ней, а так же о действиях с сервером после которых она возникла, по возможности подкрепите информацию логами.
3. Если вопрос касается проблемы в работе сервера, то обязательно прикрепляйте список плагинов (введите в консоли сервера: meta list и amxx plugins), настройки server.cfg, логи. Так же указывайте операционную систему, версию HLDS (введите к консоли сервера: version) и где хостится сервер.

Длинную информацию скрывайте под спойлер.

Sentrygun из Team Fortress кс 1.6

Статус пользователя User91893452
сообщение 16.11.2021, 23:20
Сообщение #1
Стаж: 4 года 5 месяцев
Город: Украина

Сообщений: 23
Благодарностей: 3
Полезность: 99

Здравствуйте, кто может помочь сделать чтобы вип игрок и админ могли прокачивать свои пушки сразу до 3лвл
И еще есть баг, когда ставить пушку рядом с игроком, основание пушки зависает в модельке игрока и голова пушки криво ставиться
(смотрите скрины)


Помогите исправить, пожалуйста:)





Прикрепленные файлы:
Прикрепленное изображение Прикрепленное изображение Прикрепленное изображение

Прикрепленные файлы:
Прикрепленный файл  1sentrygguns.sma ( 99,8 килобайт ) Кол-во скачиваний: 25
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя ThePhoenix
сообщение 17.11.2021, 1:37
Сообщение #2


Стаж: 11 лет

Сообщений: 2723
Благодарностей: 533
Полезность: 40

User91893452, может ты для сначала скажешь, кто такие вип и админы? Флаги доступа, например.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ThePhoenix
сообщение 17.11.2021, 1:50
Сообщение #3


Стаж: 11 лет

Сообщений: 2723
Благодарностей: 533
Полезность: 40

Для начала можно сделать, чтобы под флаг деф. админов можно было бы улучшать пушки свои:

Код
if (entity_get_int(sentry, SENTRY_INT_LEVEL) == SENTRY_LEVEL_1 && id == GetSentryPeople(sentry, OWNER)) {
            ColorChat(id, RED, "[ИНФО] ^1Ты не можешь прокачать пушку до 2 уровня, ^3попроси товарища!")
            return PLUGIN_HANDLED
            
        }

->
Код
if (entity_get_int(sentry, SENTRY_INT_LEVEL) == SENTRY_LEVEL_1 && id == GetSentryPeople(sentry, OWNER)) {
            if(~get_user_flags(id) & ADMIN_BAN)
            {
                ColorChat(id, RED, "[ИНФО] ^1Ты не можешь прокачать пушку до 2 уровня, ^3попроси товарища!")
                return PLUGIN_HANDLED
            }
        }


на счёт этого надо подумать, ибо админы тогда будут апать сразу до 3 уровня любые пушки
Код
sentryLevel++

->
Код
if(get_user_flags(id) & ADMIN_BAN)
        sentryLevel = SENTRY_LEVEL_3;
    else
        sentryLevel++


Код
#if defined DISALLOW_OWN_UPGRADES
    else if (sentryLevel == SENTRY_LEVEL_1 && GetSentryPeople(sentry, OWNER) == id) {
        // Don't print anything here, it could get spammy
        //client_print(id, print_center, "")
        return
    }
#endif

->
Код
#if defined DISALLOW_OWN_UPGRADES
    else if (sentryLevel == SENTRY_LEVEL_1 && GetSentryPeople(sentry, OWNER) == id) {
        if(~get_user_flags(id) & ADMIN_BAN)
        {
            // Don't print anything here, it could get spammy
            //client_print(id, print_center, "")
            return
        }
    }
#endif


Отредактировал: ThePhoenix, - 17.11.2021, 1:50
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя User91893452
сообщение 17.11.2021, 13:00
Сообщение #4
Стаж: 4 года 5 месяцев
Город: Украина

Сообщений: 23
Благодарностей: 3
Полезность: 99

ThePhoenix, Спасибо)) работает.

А чтобы админ мог только свою прокачивать не сразу до 3, а по очереди, с первого на второй с второго на третий при касании к пушке

Код
public playertouchedsentry(sentry, player) {
    if (PlayerCanUpgradeSentry(player, sentry))
        sentry_upgrade(player, sentry)

    //client_print(bot, print_chat, "You touched a sentry %d!", sentry)

    return PLUGIN_CONTINUE
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ThePhoenix
сообщение 18.11.2021, 1:07
Сообщение #5


Стаж: 11 лет

Сообщений: 2723
Благодарностей: 533
Полезность: 40

User91893452, Разве так это не работает? Касаешься и апаешь до некст уровня, нет?)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ThePhoenix
сообщение 18.11.2021, 1:14
Сообщение #6


Стаж: 11 лет

Сообщений: 2723
Благодарностей: 533
Полезность: 40

Так будет улучшаться с одного тача до 3 уровня на админ флаг:
Код
#if defined DISALLOW_OWN_UPGRADES
    else if (sentryLevel == SENTRY_LEVEL_1 && GetSentryPeople(sentry, OWNER) == id) {
        if(~get_user_flags(id) & ADMIN_BAN)
        {
            // Don't print anything here, it could get spammy
            //client_print(id, print_center, "")
            return
        }
    }
#endif

->
Код
#if defined DISALLOW_OWN_UPGRADES
    else if (sentryLevel == SENTRY_LEVEL_1 && GetSentryPeople(sentry, OWNER) == id) {
        if(~get_user_flags(id) & ADMIN_BAN)
        {
            // Don't print anything here, it could get spammy
            //client_print(id, print_center, "")
            return
        }
        sentryLevel = SENTRY_LEVEL_3;
    }
#endif


Код
sentryLevel++

->
Код
if(!sentryLevel)
        sentryLevel++


Чтобы было для вип и для админа, то заменяешь так:
Код
get_user_flags(id) & ADMIN_BAN

->
Код
get_user_flags(id) & ADMIN_BAN || get_user_flags(id) & ADMIN_LEVEL_H


Флаги сам поменяешь на какие нужно.

ps.gif Только так, в одном месте, где был знак "~" перед get_user_flags, если будешь заменять строки выше, чтобы на два флага работало, то и на втором добавь тот самый знак!

Отредактировал: ThePhoenix, - 18.11.2021, 1:16
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя User91893452
сообщение 18.11.2021, 14:42
Сообщение #7
Стаж: 4 года 5 месяцев
Город: Украина

Сообщений: 23
Благодарностей: 3
Полезность: 99

Цитата(ThePhoenix @ 18.11.2021, 1:07) *
User91893452, Разве так это не работает? Касаешься и апаешь до некст уровня, нет?)


Теперь если тиммейт прокачивает мою пушку до 2-го уровня и после него иду прокачивать до 3-го уровня, звук есть прокачки, деньги снимает 300$ за прокачку уровня, но голова пушки остается на 2 уровне не прокачивается на 3-й((((
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ThePhoenix
сообщение 18.11.2021, 20:19
Сообщение #8


Стаж: 11 лет

Сообщений: 2723
Благодарностей: 533
Полезность: 40

User91893452, теперь это как теперь? После каких изменений? Я же не знаю, что именно ты заюзал, что нет.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя User91893452
сообщение 19.11.2021, 1:12
Сообщение #9
Стаж: 4 года 5 месяцев
Город: Украина

Сообщений: 23
Благодарностей: 3
Полезность: 99

Цитата(ThePhoenix @ 18.11.2021, 20:19) *
User91893452, теперь это как теперь? После каких изменений? Я же не знаю, что именно ты заюзал, что нет.


После этого изменения

Код
#if defined DISALLOW_OWN_UPGRADES
    else if (sentryLevel == SENTRY_LEVEL_1 && GetSentryPeople(sentry, OWNER) == id) {
        if(~get_user_flags(id) & ADMIN_BAN)
        {
            // Don't print anything here, it could get spammy
            //client_print(id, print_center, "")
            return
        }
        sentryLevel = SENTRY_LEVEL_3;
    }
#endif





Оставил так, прокачивает после тиммейта на 3-й уровень. Но так же и тиммейта прокачивает сразу до 3 уровня

Код:

sentry_upgrade(id, sentry) {
new sentryLevel = entity_get_int(sentry, SENTRY_INT_LEVEL)
if (entity_get_int(sentry, SENTRY_INT_FIRE) == SENTRY_FIREMODE_NUTS) {
client_print(id, print_center, "This sentry cannot be upgraded.")
return
}
else if (get_user_team(id) != entity_get_int(sentry, SENTRY_INT_TEAM)) {
client_print(id, print_center, "You can only upgrade your own team's sentries.")
return
}
#if defined DISALLOW_OWN_UPGRADES
else if (sentryLevel == SENTRY_LEVEL_1 && GetSentryPeople(sentry, OWNER) == id) {
if(~get_user_flags(id) & ADMIN_BAN)
{
// Don't print anything here, it could get spammy
//client_print(id, print_center, "")
return
}
//sentryLevel = SENTRY_LEVEL_3;
}
#endif
#if defined DISALLOW_TWO_UPGRADES
else if (sentryLevel == SENTRY_LEVEL_2 && GetSentryPeople(sentry, UPGRADER_1) == id) {
if(~get_user_flags(id) & ADMIN_BAN)
{
// Don't print anything here, it could get spammy
//client_print(id, print_center, "")
return
}

}
#endif
if(get_user_flags(id) & ADMIN_BAN)
sentryLevel = SENTRY_LEVEL_3;
if (!sentryLevel)
sentryLevel++
new bool:newLevelIsOK = true, upgraderField
switch (sentryLevel) {
case SENTRY_LEVEL_2: {
entity_set_model(sentry, "models/sentries/sentry2.mdl")
upgraderField = UPGRADER_1
}
case SENTRY_LEVEL_3: {
entity_set_model(sentry, "models/sentries/sentry3.mdl")
upgraderField = UPGRADER_2
}
default: {
// Error... can only upgrade to level 2 and 3... so far! ;-)
newLevelIsOK = false
}
}

if (newLevelIsOK) {
if (cs_get_user_money(id) - g_COST[sentryLevel] < 0) {
client_print(id, print_center, "You don't have enough money to upgrade this sentry gun! (needed $%d)", g_COST[sentryLevel])
return
}

cs_set_user_money(id, cs_get_user_money(id) - g_COST[sentryLevel])

new Float:mins[3], Float:maxs[3]
mins[0] = -16.0
mins[1] = -16.0
mins[2] = 0.0
maxs[0] = 16.0
maxs[1] = 16.0
maxs[2] = 43.0 // 4.0
entity_set_size(sentry, mins, maxs)
emit_sound(sentry, CHAN_AUTO, "sentries/turrset.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
entity_set_int(sentry, SENTRY_INT_LEVEL, sentryLevel)
entity_set_float(sentry, EV_FL_health, g_HEALTHS[sentryLevel])
entity_set_float(entity_get_edict(sentry, SENTRY_ENT_BASE), EV_FL_health, g_HEALTHS[0])
SetSentryPeople(sentry, upgraderField, id)

if (id != GetSentryPeople(sentry, OWNER)) {
new upgraderName[32]
get_user_name(id, upgraderName, 31)
client_print(GetSentryPeople(sentry, OWNER), print_center, "%s upgraded your sentry to level %d", upgraderName, sentryLevel + 1)
}
}
}



Как сделать чтобы админ тиммейту только на один уровень прокачивал пушку, а не на 3 сразу)

Можно как то реализовать?

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ThePhoenix
сообщение 20.11.2021, 0:06
Сообщение #10


Стаж: 11 лет

Сообщений: 2723
Благодарностей: 533
Полезность: 40

User91893452, удалить
Код
if(get_user_flags(id) & ADMIN_BAN)
        sentryLevel = SENTRY_LEVEL_3;

И расскоментировать
Код
//sentryLevel = SENTRY_LEVEL_3;


Почему у тебя деньги снимает, звук есть, а пушка остаётся на втором левеле, я хз, ибо мой код ничего не ломает, просто указывает, что уровень будет 3, а не "текующий + 1".
Я не сильно углублялся в твой код и тем более не тестировал.

Отредактировал: ThePhoenix, - 20.11.2021, 0:08
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: