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

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

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

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

2 страниц V   1 2

Маленький плагин - корона на админа

, Глюк с выводом модели на другого игрока
csgamer
сообщение 9.3.2014, 12:33
Сообщение #1
Стаж: 12 лет

Сообщений: 398
Благодарностей: 16
Полезность: 0

Здравствуйте!
Скачал плагин, который выводит корону на админа. У игрока, которому присвоен флаг d (ADMIN_BAN), выводится корона - файл korona1.mdl.
В принципе всё работает, но в плагине есть глюк - когда с сервер покидает админ, то корона одевается следующему входящему игроку, несмотря не то, что он админом не является.

Реальный пример - на сервере 2 админа, корона одета на нас двоих - всё правильно. Но потом, второй админ выходит с сервера и заходит любой другой игрок, совсем не админ - а на нём корона!! В этот момент я проверяю командой amx_who, что админских флагов у того игрока нету - действительно нет, но корона на него выводится. И так будет пока не сменится карта.
Также если админа кикнет сервера, из-за того что он стоит AFK - тоже на следующего, случайно зашедшего игрока, оденется корона хотя он не админ!

Подскажите почему так происходит и поправьте плагин.

Код:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN "SpineKoronaShield"
#define VERSION "1.0"
#define AUTHOR "CrAsH"

new iPlayerShield[33]
new const gModel[] = "models/korona1.mdl"

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

RegisterHam(Ham_Spawn, "player", "SpawnPlayer", 1)
}

public plugin_precache()
{
precache_model( gModel )
}

public client_connect(id)
{
iPlayerShield[id] = 0
}

public SpawnPlayer(id)
{
if(!is_user_connected(id))
return HAM_HANDLED

if(!(get_user_flags(id) & ADMIN_BAN))
return HAM_HANDLED

if(!iPlayerShield[id])
{
iPlayerShield[id] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))

if(!pev_valid( iPlayerShield[id] ))
return HAM_HANDLED

set_pev(iPlayerShield[id], pev_movetype, MOVETYPE_FOLLOW)
set_pev(iPlayerShield[id], pev_aiment, id)
set_pev(iPlayerShield[id], pev_rendermode, kRenderNormal)
set_pev(iPlayerShield[id], pev_renderamt, 0.0)

engfunc(EngFunc_SetModel, iPlayerShield[id], gModel)
}
return HAM_HANDLED
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
serfreeman1337
сообщение 9.3.2014, 12:36
Сообщение #2
Стаж: 13 лет

Сообщений: 912
Благодарности: выкл.

Попробуй такой код:
Код:
public client_connect(id)
{
if(iPlayerShield[id] && pev_valid(iPlayerShield[id]))
engfunc(EngFunc_RemoveEntity,iPlayerShield[id])

iPlayerShield[id] = 0
}


Отредактировал: serfreeman1337, - 9.3.2014, 12:44
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
csgamer
сообщение 9.3.2014, 12:40
Сообщение #3
Стаж: 12 лет

Сообщений: 398
Благодарностей: 16
Полезность: 0

Это вместо

Код:
public client_connect(id)
{
iPlayerShield[id] = 0
}


А строчку
iPlayerShield[id] = 0
внизу оставить или целиком функцию public client_connect(id) заменить на вашу??
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
serfreeman1337
сообщение 9.3.2014, 12:41
Сообщение #4
Стаж: 13 лет

Сообщений: 912
Благодарности: выкл.

Полностью замени функцию client_connect.
Вот на эту:
Код:
public client_connect(id)
{
if(iPlayerShield[id] && pev_valid(iPlayerShield[id]))
engfunc(EngFunc_RemoveEntity,iPlayerShield[id])

iPlayerShield[id] = 0
}


Отредактировал: serfreeman1337, - 9.3.2014, 12:44
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
csgamer
сообщение 9.3.2014, 12:46
Сообщение #5
Стаж: 12 лет

Сообщений: 398
Благодарностей: 16
Полезность: 0

Круто! Быстро вы соображаете.
Я доделал, только проверить не могу, нужно дождаться появления других админов.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
serfreeman1337
сообщение 9.3.2014, 12:48
Сообщение #6
Стаж: 13 лет

Сообщений: 912
Благодарности: выкл.

Можешь скинуть саму модельку короны? Мне для теста другого плагина нужно.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fintok
сообщение 9.3.2014, 12:55
Сообщение #7


Стаж: 16 лет

Сообщений: 756
Благодарностей: 294
Полезность: 638

Для чего каждый раз при спавне игрока выдавать ему модельку?
Я думаю лучше один раз ему выдать при входе на сервер.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 9.3.2014, 12:56
Сообщение #8
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

на



yandex 'cs-portal' - найдется все.

Отредактировал: csnet, - 9.3.2014, 12:56
Прикрепленные файлы:
Прикрепленный файл  korona1.rar ( 65,81 килобайт ) Кол-во скачиваний: 26


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 3 раз
   + Цитировать сообщение
Статус пользователя primm
сообщение 9.3.2014, 14:20
Сообщение #9


Стаж: 16 лет
Город: Москва

Сообщений: 517
Благодарностей: 140
Полезность: 520


С исправлением нормально работает, но луДше этот "тортик" одевать на игрока раунда.)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
csgamer
сообщение 9.3.2014, 15:08
Сообщение #10
Стаж: 12 лет

Сообщений: 398
Благодарностей: 16
Полезность: 0

Цитата(serfreeman1337 @ 9.3.2014, 15:48) *
Можешь скинуть саму модельку короны? Мне для теста другого плагина нужно.


Вот корона http://rghost.ru/52934637

А не создаёт ли доработанный плагин дополнительную нагрузку, раз теперь в начале каждого
раунда выдаётся модель как заметил Fintok?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Esecman
сообщение 9.3.2014, 15:10
Сообщение #11
Стаж: 12 лет

Сообщений: 945
Благодарностей: 208
Полезность: 0

Цитата(csgamer @ 9.3.2014, 16:08) *
Вот корона http://rghost.ru/52934637

А не создаёт ли доработанный плагин дополнительную нагрузку, раз теперь в начале каждого
раунда выдаётся модель как заметил Fintok?

создает.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 9.3.2014, 15:16
Сообщение #12
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

создание энтити не создает нагрузки, это все равно что достать оружие, которое энтити по сути, тем более для 1 админа.

Отредактировал: csnet, - 9.3.2014, 15:16


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
serfreeman1337
сообщение 9.3.2014, 15:27
Сообщение #13
Стаж: 13 лет

Сообщений: 912
Благодарности: выкл.

Цитата(csgamer @ 9.3.2014, 18:08) *
Вот корона http://rghost.ru/52934637

А не создаёт ли доработанный плагин дополнительную нагрузку, раз теперь в начале каждого
раунда выдаётся модель как заметил Fintok?


Ну во первых он неправильно заметил. Там энтити создается только на первом спавне игрока.
А во вторых:

Цитата(csnet @ 9.3.2014, 18:16) *
создание энтити не создает нагрузки, это все равно что достать оружие, которое энтити по сути, тем более для 1 админа.

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 9.3.2014, 15:49
Сообщение #14


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

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

Код:

if(!is_user_connected(id))
return HAM_HANDLED

if(!(get_user_flags(id) & ADMIN_BAN))
return HAM_HANDLED

извращение
что мешает сделать одно условие?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 9.3.2014, 15:59
Сообщение #15
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

я еще сомневаюсь что нужны эти строки

set_pev(iPlayerShield[id], pev_rendermode, kRenderNormal)
set_pev(iPlayerShield[id], pev_renderamt, 0.0)

рендеринг по сути для спрайтов нужен, или подсветки модели, но если ее нет ...

Отредактировал: csnet, - 9.3.2014, 16:00


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fintok
сообщение 9.3.2014, 16:23
Сообщение #16


Стаж: 16 лет

Сообщений: 756
Благодарностей: 294
Полезность: 638

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

Вот так я думаю лучше будет
Код:

#include <amxmodx>
#include <fakemeta>

#define PLUGIN "SpineKoronaShield"
#define VERSION "1.0"
#define AUTHOR "CrAsH & Fintok!"

new const gModel[] = "models/korona1.mdl"

new iEntity[33]

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
}

public plugin_precache()
{
precache_model(gModel)
}

public client_putinserver(id)
{
if(is_user_connected(id) && !is_user_hltv(id) && !is_user_bot(id))
{
if(get_user_flags(id) & ADMIN_BAN)
{
static iInfoTarget
iInfoTarget = engfunc(EngFunc_AllocString, "info_target")

iEntity[id] = engfunc(EngFunc_CreateNamedEntity, iInfoTarget)

if(pev_valid(iEntity[id]))
{
set_pev(iEntity[id], pev_movetype, MOVETYPE_FOLLOW)
set_pev(iEntity[id], pev_aiment, id)
set_pev(iEntity[id], pev_owner, id)
engfunc(EngFunc_SetModel, iEntity[id], gModel)
}
}
}
}

public client_disconnect(id)
{
if(!is_user_hltv(id) && !is_user_bot(id))
{
if(pev_valid(iEntity[id]))
engfunc(EngFunc_RemoveEntity, iEntity[id])
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
serfreeman1337
сообщение 9.3.2014, 16:31
Сообщение #17
Стаж: 13 лет

Сообщений: 912
Благодарности: выкл.

Ну если на то пошло:
Код:
#include <amxmodx>
#include <fakemeta>

#define PLUGIN "SpineKoronaShield"
#define VERSION "1.0"
#define AUTHOR "CrAsH & Fintok!"

new const gModel[] = "models/korona1.mdl"

new iEntity[33]

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
}

public plugin_precache()
{
precache_model(gModel)
}

public client_putinserver(id)
{
if(is_user_connected(id) && !is_user_hltv(id) && !is_user_bot(id))
{
if(get_user_flags(id) & ADMIN_BAN)
{
static iInfoTarget

if(!iInfoTarget)
iInfoTarget = engfunc(EngFunc_AllocString, "info_target")

if(pev_valid(iEntity[id]))
set_pev(iEntity[id],pev_rendermode,kRenderNormal)
else{
iEntity[id] = engfunc(EngFunc_CreateNamedEntity,iInfoTarget)

set_pev(iEntity[id], pev_movetype, MOVETYPE_FOLLOW)
set_pev(iEntity[id], pev_aiment, id)
set_pev(iEntity[id], pev_owner, id)
engfunc(EngFunc_SetModel, iEntity[id], gModel)
}
}
}
}

public client_disconnect(id)
{
if(!is_user_hltv(id) && !is_user_bot(id))
{
if(pev_valid(iEntity[id]))
set_pev(iEntity[id],pev_rendermode,kRenderTransAlpha)
}
}


Зачем каждый раз создавать энтить при подключении когда его можно просто спрятать?

Отредактировал: serfreeman1337, - 9.3.2014, 16:31
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
csgamer
сообщение 9.3.2014, 21:07
Сообщение #18
Стаж: 12 лет

Сообщений: 398
Благодарностей: 16
Полезность: 0

Fintok, serfreeman1337

Вы придавили авторитетом.
Какой из последних двух исходников выбрать, я не настолько разбираюсь в скриптинге, чтобы понять различия.
Скажите какой из двух исходников оптимальнее.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 9.3.2014, 21:42
Сообщение #19
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

да ну просто set_entity_visibility 0 или pev + Nodraw


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Fred Perry
сообщение 9.3.2014, 23:09
Сообщение #20


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

Стаж: 16 лет

Сообщений: 6594
Благодарностей: 2370
Полезность: 813

Цитата(csnet @ 9.3.2014, 21:42) *
да ну просто set_entity_visibility 0 или pev + Nodraw

ТС не может выбрать из 2х исходников что лучше, а ты ему советы даешь...


Гнилой фашистской нечисти
Загоним пулю в лоб,
Отродью человечества
Сколотим крепкий гроб!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
2 страниц V   1 2
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: