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

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

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

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

2 страниц V   1 2

Change Models (Модели по Name+Pass/Steam/IP)

, Change Models: Free
Статус пользователя Pain96
сообщение 16.5.2014, 4:05
Сообщение #1
Стаж: 11 лет

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

Авторы: Pain96
Версия: 1.0

Описание:
Привязка моделей для пользователей, указанных в конфигурационном файле (models.ini).
Для привязки по нику, так-же необходимо ввести пароль.
Авторизация выполняется по ключу в setinfo (_mdl).
Плагин обошелся примерно в ~140 строк.

Используемые модули:
Cstrike

Настройки:
Цитата
Код:
//путь/имя конфигурационного файла; префикс в качестве ключа для setinfo, содержащий пароль; причина кика, если пароль не совпадает
new const g_Library[][] = {"", "/addons/amxmodx/configs/models.ini", "_mdl", "Неверный пароль"};

Содержимое models.ini:
Скрытый текст
Цитата
;"Ник/IP/Steam" "Пароль (для IP/Steam оставьте любое значение)" "Модель Контер-Террориста" "Модель Террориста"
;Чтобы зайти на сервер под запороленным ником, необходимо набрать в консоле setinfo _mdl ПАРОЛЬ
;Расширение моделей (.mdl) и путь к модели писать не нужно, все что требуется это название моделе.
;Для кого-то открою новость: модели игроков должны лежать в папке models/player/ИМЯ МОДЕЛИ/ИМЯ МОДЕЛИ.mdl,
;то есть папка соответствует названию модели
;Пример:
"Pain96" "zbs_parol" "vip" "terror"


P.S.: Взможность отсутствия конфигурационного файла я не предусматривал, так что убедитесь, что .ini файл был положен в директорию /amxmodx/configs, чтобы не было вопросов типа "почему не работает".
Прикрепленные файлы:
Прикрепленный файл  ChangeModels_16.05.2014.zip ( 2,11 килобайт ) Кол-во скачиваний: 217
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   Цитировать сообщение
Статус пользователя csnet
сообщение 16.5.2014, 5:09
Сообщение #2
Стаж: 10 лет

Сообщений: 4755
Благодарностей: 3837
Полезность: 693

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


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 16.5.2014, 10:51
Сообщение #3
Стаж: 12 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(csnet @ 16.5.2014, 7:09) *
смысл? получить содержимое поля легко, и вставить себе, получив модель бесплатно.

Не, там же cs_set_user_model, не даст)

--

Pain96, алгоритм и способ установки моделей ужасен. Первый плагин, наверное?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Pain96
сообщение 16.5.2014, 11:13
Сообщение #4
Стаж: 11 лет

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

Цитата(Developer @ 16.5.2014, 13:51) *
Не, там же cs_set_user_model, не даст)

--

Pain96, алгоритм и способ установки моделей ужасен. Первый плагин, наверное?

Это чем же он ужасен?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 16.5.2014, 12:24
Сообщение #5
Стаж: 10 лет

Сообщений: 4755
Благодарностей: 3837
Полезность: 693

вот этим
Цитата
cs_set_user_model
clapping.gif

и вот этим

Цитата
register_event("ResetHUD", "ChangeModel", "b");


cbf1b2bfde1a.gif

Отредактировал: csnet, - 16.5.2014, 12:28


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Pain96
сообщение 16.5.2014, 12:36
Сообщение #6
Стаж: 11 лет

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

Цитата(csnet @ 16.5.2014, 15:24) *
вот этим
clapping.gif

и вот этим



cbf1b2bfde1a.gif

Цитата
cs_set_user_model

Любитель классики pardon.gif
И меня полностью устраивает этот метод, чтобы вы тут не писали.

Отредактировал: Pain96, - 16.5.2014, 12:39
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 16.5.2014, 12:57
Сообщение #7


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

Стаж: 14 лет

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

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

и как часто вызывается ResetHUD ?
сервер кстати любой игрок скорее всего сможет залагать
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 16.5.2014, 12:59
Сообщение #8
Стаж: 10 лет

Сообщений: 4755
Благодарностей: 3837
Полезность: 693

дело не в частоте, эвент кривой сам по себе


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 16.5.2014, 12:59
Сообщение #9


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

Стаж: 14 лет

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

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

Цитата(csnet @ 16.5.2014, 14:59) *
дело не в частоте, эвент кривой сам по себе

с этим ни кто не спорит)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Pain96
сообщение 16.5.2014, 13:38
Сообщение #10
Стаж: 11 лет

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

Была мыслЯ использовать фейкмета форвард (или хам спавн, как вариант) вместо ивента, а именно FM_SetClientKeyValue, точно так же как и смену моделей.
Но т.к. привык к AMXMODX, CSTRIKE модулям (всегда использую их в таких целях, не логично конечно, учитывая, что есть более функциональный и практичный в этом плане модуль фейкмета, но все же).

Отредактировал: Pain96, - 16.5.2014, 13:39
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 16.5.2014, 13:49
Сообщение #11
Стаж: 10 лет

Сообщений: 4755
Благодарностей: 3837
Полезность: 693

вот те мысли были более здравые
cs_set_user_model можно юзнуть для випок например.
если 1-2 модельки
неболее

а если больше то лучше чтото другое

Отредактировал: csnet, - 16.5.2014, 13:50


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 16.5.2014, 19:09
Сообщение #12
Стаж: 12 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(Pain96 @ 16.5.2014, 14:36) *
И меня полностью устраивает этот метод, чтобы вы тут не писали.

Так и подумал. Поэтому в первую очередь писал не для тебя, а для остальных, кому в голову придёт заюзать эту дрянь.

Цитата(Pain96 @ 16.5.2014, 13:13) *
Это чем же он ужасен?

Почти всем. Тебе бы ещё мб расписал, чем конкретно, большинству это мало, что скажет.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Pain96
сообщение 17.5.2014, 4:05
Сообщение #13
Стаж: 11 лет

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

Цитата(Developer @ 16.5.2014, 22:09) *
Так и подумал. Поэтому в первую очередь писал не для тебя, а для остальных, кому в голову придёт заюзать эту дрянь.


Почти всем. Тебе бы ещё мб расписал, чем конкретно, большинству это мало, что скажет.

Типа поумничали и все, аргументируете только "Почти всем" ? Я уже и без вашего "умного" поста все понял.

Отредактировал: Pain96, - 17.5.2014, 4:06
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 17.5.2014, 4:47
Сообщение #14
Стаж: 12 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Ну и молодец xD
Удивительно, что на AMX-X ты популярен, а плагин похож на первую серьезную работу юниора.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fred Perry
сообщение 17.5.2014, 9:17
Сообщение #15


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

Стаж: 14 лет

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

Вместо тонны критики, лучше бы помогли/посоветовали


Гнилой фашистской нечисти
Загоним пулю в лоб,
Отродью человечества
Сколотим крепкий гроб!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 4 раз
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 17.5.2014, 9:30
Сообщение #16


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

Стаж: 14 лет

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

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

Цитата(Fred Perry @ 17.5.2014, 11:17) *
Вместо тонны критики, лучше бы помогли/посоветовали

ТС не хочет воспринимать критику, смысла советовать что-то нет
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Pain96
сообщение 17.5.2014, 10:13
Сообщение #17
Стаж: 11 лет

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

Цитата(Legenda @ 17.5.2014, 12:30) *
ТС не хочет воспринимать критику, смысла советовать что-то нет

Критику я могу воспринимать, но не от человека, который все свое прибывание как на этом, так и на AMX-X форуме только и делает, что умничает. Пальцем тыкать не буду, этот умник поймет, что я говорю о нем и соизволит мне больше не писать.

А совет мне давать не надо, я прекрасно знаю в чем я ошибся написав этот плагин и я осознанно использовал те функции, которые следовало бы заменить функциями из другого модуля, но не захотел. Мне так удобно.

P.S.: Developer, "молодец" будешь детишкам своим говорить.

Отредактировал: Pain96, - 17.5.2014, 10:16
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 19.5.2014, 2:07
Сообщение #18
Стаж: 12 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(Pain96 @ 17.5.2014, 12:13) *
P.S.: Developer, "молодец" будешь детишкам своим говорить.

Не-а, буду говорить не только детишкам) Это не оскорбление; если тебя задевает - это твои личные проблемы.


"Поумничаю" немного о недостатках плагина:
• что всё делается task'ами после client_connect и client_infochanged говорит о том, что автор понятия не имеет, в какие точно моменты следует менять модель, когда игра стремится вернуть оригинальную; и пошёл по самому примитивному пути
• бедный конфиг! нет бы прочитать его в память однократно за карту - он перечитывается не только после коннекта каждого игрока, но и после каждого! ResetHUD'а, минимум - 'число игроков' раз за раунд
• нет никакой необходимости как-то обрабатывать ResetHUD 'в сторону' мёртвых игроков: у них либо нет видимой модели (спектаторы), либо у трупа должна остаться прижизненная модель (ситуацию со сменой команды не учитываем; да и правильнее, чтобы модель предыдущей команды у трупа сохранялась, хотя VALVe считает иначе)
• нет никакой необходимости сбрасывать персональные настройки игрока после каждого! ResetHUD'а и читать конфигурацию заново
• совсем смешно, что благодаря тому, что 'дубовая' натива cs_set_user_model делает всю работу по сохранению модели за скриптера (правда, очень нагрузочным способом), повторно использовать cs_set_user_model и cs_reset_user_model требуется только после смены команды. Это значит, что 99.9% времени плагин бесполезно гоняет конфиг и тратит ресурсы процессора
• нет никакой необходимости проверять игрока на наличие персональных моделей после client_connect : модель можно увидеть аж только после спавна
ChangeModel(id, level, cid) - это или глупость, или невнимательность. Параметров level и cid у события ResetHUD нет
• не учтено назначение модели трупу (месседж ClCorpse)
get_user_team не работает корректно для мёртвых игроков ДО релизной AMXX 1.8.2
• не проверяется существование указанных в конфиге моделей
• стоит кэшировать состояние 'игрок на сервере' вместо постоянного использования нативы is_user_connected
• мелочи: захардкожен путь к конфигу, магические числа и loop с плохо прослеживаемой логикой for( new i = 0; j; i++ )

Но главное: давным-давно есть Players Models от ConnorMcLeod, который делает всё абсолютно правильно и в миллион раз лучше. А если кому взбрело в голову добавить поддержку авторизации ник+пароль (без которой на приличных серверах вполне можно обойтись), так этот функционал следует добавить туда, а не выдумывать велосипед с квадратными колёсами.

Вывод на основе анализа конкретной свежей работы не-новичка: плагин – ненужный хлам, ТС – донный скриптер.

--

Цитата(Fred Perry @ 17.5.2014, 11:17) *
Вместо тонны критики, лучше бы помогли/посоветовали

Значит, когда разбирающиеся в скриптинге люди критикуют конкретную работу - это неправильно, а когда ноунейм с 3-мя постами несёт куйню про завсегдатая Форума - это никаких протестов не вызывает? Удивительно)


Как бы то ни было, после потраченного времени и аргументов получился пруф. И я позабочусь, чтобы о нём узнали не только в топике плагина на AMX-X, но и все те, кто обращается ко мне за рекомендациями по скриптерам.

Оригинальная версия 'плагина' останется в посте.
Код:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>

#pragma semicolon 1

#define PLUGIN "ChangeModel (free) for amx-x.ru"
#define VERSION "1.0"
#define AUTHOR "Pain96"

#define CS_TEAM_T 1
#define CS_TEAM_CT 2

// путь/имя конфигурационного файла; префикс в качестве ключа для setinfo, содержащий пароль; причина кика, если пароль не совпадает
new const g_Library[][] = {"", "/addons/amxmodx/configs/models.ini", "_mdl", "Неверный пароль"};

new szInfoPlayerModelCt[33], szInfoPlayerModelTt[33],
szAccessUser[33];

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_event("ResetHUD", "ChangeModel", "b");
}

public plugin_precache()
{
new szInfo[256], szInfoPrecache[128],
szInfoUser[32], szInfoUserPassword[32],
szInfoModelCt[64], szInfoModelTt[64],
iNum;

for(new iLine = 0; read_file(g_Library[1], iLine, szInfo, charsmax(szInfo), iNum); iLine++)
{
if(iNum && szInfo[0] != ';')
{
parse(szInfo, szInfoUser, charsmax( szInfoUser ),
szInfoUserPassword, charsmax(szInfoUserPassword),
szInfoModelCt, charsmax(szInfoModelCt),
szInfoModelTt, charsmax(szInfoModelTt)
);

formatex(szInfoPrecache, charsmax(szInfoPrecache), "models/player/%s/%s.mdl", szInfoModelCt, szInfoModelCt);
precache_model(szInfoPrecache);
formatex(szInfoPrecache, charsmax(szInfoPrecache), "models/player/%s/%s.mdl", szInfoModelTt, szInfoModelTt);
precache_model(szInfoPrecache);
}
}
}

public client_connect(id)
{
set_task(0.5, "CheckPlayerInfo", id);
szAccessUser[id] = false;
szInfoPlayerModelCt[id] = false;
szInfoPlayerModelTt[id] = false;
}

public client_infochanged(id)
{
set_task(0.5, "CheckPlayerInfo", id);
szAccessUser[id] = false;
szInfoPlayerModelCt[id] = false;
szInfoPlayerModelTt[id] = false;
}

public CheckPlayerInfo(id)
{
new szInfo[256], szName[32],
szSteam[32], szIP[32],
szPassword[32], szInfoUser[32],
szInfoUserPassword[32], szInfoModelCt[64],
szInfoModelTt[64], iNum;

if (!is_user_connected(id))
return 0;

get_user_name(id, szName, charsmax(szName));
get_user_authid(id, szSteam, charsmax(szSteam));
get_user_ip(id, szIP, charsmax(szIP), 1);

for(new iLine = 0; read_file(g_Library[1], iLine, szInfo, charsmax(szInfo), iNum); iLine++)
{
if(iNum && szInfo[0] != ';')
{
parse(szInfo, szInfoUser, charsmax( szInfoUser ),
szInfoUserPassword, charsmax(szInfoUserPassword),
szInfoModelCt, charsmax(szInfoModelCt),
szInfoModelTt, charsmax(szInfoModelTt)
);

if (equal(szName, szInfoUser))
{
get_user_info(id, g_Library[2], szPassword, charsmax(szPassword));

if(!equal(szInfoUserPassword, szPassword))
return server_cmd("kick %s ^"%s^"", szName, g_Library[3]);

copy(szInfoPlayerModelCt[id], charsmax(szInfoPlayerModelCt), szInfoModelCt);
copy(szInfoPlayerModelTt[id], charsmax(szInfoPlayerModelTt), szInfoModelTt);
szAccessUser[id] = true;
break;
}
else if (equal(szSteam, szInfoUser))
{
copy(szInfoPlayerModelCt[id], charsmax(szInfoPlayerModelCt), szInfoModelCt);
copy(szInfoPlayerModelTt[id], charsmax(szInfoPlayerModelTt), szInfoModelTt);
szAccessUser[id] = true;
break;
}
else if (equal(szIP, szInfoUser))
{
copy(szInfoPlayerModelCt[id], charsmax(szInfoPlayerModelCt), szInfoModelCt);
copy(szInfoPlayerModelTt[id], charsmax(szInfoPlayerModelTt), szInfoModelTt);
szAccessUser[id] = true;
break;
}
}
}
return 1;
}

public ChangeModel(id, level, cid)
{
if (szAccessUser[id])
{
new iTeam = get_user_team(id);
switch(iTeam)
{
case CS_TEAM_T: cs_set_user_model(id, szInfoPlayerModelTt[id]);
case CS_TEAM_CT: cs_set_user_model(id, szInfoPlayerModelCt[id]);

default: cs_reset_user_model(id);
}
}
return 0;
}

--

Аналогичный анализ следующей версии плагина.
Дальше - ещё веселее good.gif

Отредактировал: Developer, - 19.5.2014, 6:24
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 19.5.2014, 10:19
Сообщение #19


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

Стаж: 14 лет

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

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

Цитата(Pain96 @ 17.5.2014, 12:13) *
Критику я могу воспринимать, но не от человека, который все свое прибывание как на этом, так и на AMX-X форуме только и делает, что умничает. Пальцем тыкать не буду, этот умник поймет, что я говорю о нем и соизволит мне больше не писать.

А совет мне давать не надо, я прекрасно знаю в чем я ошибся написав этот плагин и я осознанно использовал те функции, которые следовало бы заменить функциями из другого модуля, но не захотел. Мне так удобно.

P.S.: Developer, "молодец" будешь детишкам своим говорить.

Pain96 ты явно не адекват судя по твоим высказываниям

Цитата
я осознанно использовал те функции, которые следовало бы заменить функциями из другого модуля, но не захотел. Мне так удобно.

это конечно epic fail отмаза

к тому же что-то ты на Developer наговариваешь...
не знаю как на AMX-X, но на этом форуме у меня стаж более 5 лет, ни чего плохого сказать нельзя про Developer

ИМХО
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя taz123
сообщение 28.1.2015, 19:19
Сообщение #20
Стаж: 9 лет 2 месяца

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

Ребята плагин коректно не работает,прописал все гуд ,норм,с паролем,и прописал setinfo _pw пароль свой ввел и ВСЕРОВНО ПИШЕТ ,ПАРОЛЬ НЕ ВЕРНЫЙ!!!!!!!!!,ИСПРАВЬТЕ!!!! МАТЬ ВАШУ!!!! 28.01.2015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
2 страниц V   1 2
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: