Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.
Модераторы: Subb98, liFe iS GoOD
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.
В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.
Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.
NightFury » 23 ноя 2016, 22:35
Очень простенький include для создания цветных сообщений в чат.
- Код: Выделить всё
stock color_print_one(index, const message[], any:...)
{
new szMessage[190]
vformat(szMessage, charsmax(szMessage), message, 3)
message_begin(MSG_ONE, msgid_SayText, _, index)
write_byte(index)
write_string(szMessage)
message_end()
}
stock color_print_all(const message[], any:...)
{
new szMessage[190]
vformat(szMessage, charsmax(szMessage), message, 2)
message_begin(MSG_ALL, msgid_SayText)
write_byte(-1)
write_string(szMessage)
message_end()
}
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Подпись: NightFury/406
Поддержка: vk.com/mashakrylova406
-
NightFury
-
- Сообщения: 85
- Зарегистрирован: 10 авг 2016, 12:22
- Благодарил (а): 8 раз.
- Поблагодарили: 24 раз.
- Опыт программирования: Больше трех лет
- Языки программирования: Pawn, C, C++
Subb98 » 23 ноя 2016, 23:11
- Код: Выделить всё
message_begin(MSG_ALL, msgid_SayText)
MSG_ALL не работает с цветными сообщениями.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
-
Subb98
-
- Сообщения: 5485
- Зарегистрирован: 24 мар 2011, 19:42
- Откуда: г. Пермь
- Благодарил (а): 1329 раз.
- Поблагодарили: 2343 раз.
- Опыт программирования: Больше трех лет
- Языки программирования: PHP
sa1me » 02 фев 2017, 12:02
- Код: Выделить всё
stock UTIL_GetElapsedDays(const date[])
{
return (get_systime() - parse_time(date, "%d.%m.%Y", -1)) / 86400;
}
- Код: Выделить всё
stock UTIL_GetElapsedDays(const date_ceil[], const date_floor[])
{
return (parse_time(date_ceil, "%d.%m.%Y", -1) - parse_time(date_floor, "%d.%m.%Y", -1)) / 86400;
}
Первый вариант: получение кол-ва прошедших дней с указанной даты по сегодняшний день.
Второй вариант: получение кол-ва прошедших дней с даты по дату.
P.S.: Формат даты:
%d.%m.%Y.
-
sa1me
-
- Сообщения: 361
- Зарегистрирован: 07 апр 2014, 20:51
- Откуда: pfnAddToFullPack
- Благодарил (а): 174 раз.
- Поблагодарили: 177 раз.
- Опыт программирования: Меньше недели
Subb98 » 26 фев 2017, 19:06
Сток для работы с преобразованием секунд в часы, минуты и секунды:
- Код: Выделить всё
stock time_convert(input, &hours, &min, &sec) {
input -= ((hours = input / 3600) * 3600); min = input / 60, sec = input % 60; }
и только в минуты и секунды:
- Код: Выделить всё
stock time_convert2(const input, &min, &sec) {
min = input / 60, sec = input % 60; }
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
-
Subb98
-
- Сообщения: 5485
- Зарегистрирован: 24 мар 2011, 19:42
- Откуда: г. Пермь
- Благодарил (а): 1329 раз.
- Поблагодарили: 2343 раз.
- Опыт программирования: Больше трех лет
- Языки программирования: PHP
Pafos » 26 фев 2017, 21:43
-
Pafos
-
- Сообщения: 574
- Зарегистрирован: 07 апр 2014, 18:03
- Откуда: pfnClientConnect
- Забанен
- Благодарил (а): 129 раз.
- Поблагодарили: 97 раз.
- Опыт программирования: Больше трех лет
- Языки программирования: Pawn
Subb98 » 26 фев 2017, 21:47
было, я же и выкладывал, в какой-то из тем (только второй вариант). Но пусть лучше здесь будет, чтобы не потерялось.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
-
Subb98
-
- Сообщения: 5485
- Зарегистрирован: 24 мар 2011, 19:42
- Откуда: г. Пермь
- Благодарил (а): 1329 раз.
- Поблагодарили: 2343 раз.
- Опыт программирования: Больше трех лет
- Языки программирования: PHP
Subb98 » 01 мар 2017, 19:21
Пример работы с некоторыми callfunc_* нативами
Спасибо
ConnorMcLeod Вы должны зарегистрироваться, чтобы видеть ссылки.- Код: Выделить всё
new g_plugin = -1, g_func = -1;
public plugin_cfg() {
new const PLUG_NAME[] = "Plugin Name";
new const FUNC_NAME[] = "MyPublicFunc";
if((g_plugin = is_plugin_loaded(PLUG_NAME)) > 0) {
if((g_func = get_func_id(FUNC_NAME, g_plugin)) == -1) {
log_amx("Function ^"%s^" not found", FUNC_NAME);
}
} else {
log_amx("Plugin ^"%s^" not found", PLUG_NAME);
}
}
stock CallMyFunc(const id) {
if(g_func > 0 && (callfunc_begin_i(g_func, g_plugin)) == 1) {
callfunc_push_int(id);
callfunc_end();
}
}
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
-
Subb98
-
- Сообщения: 5485
- Зарегистрирован: 24 мар 2011, 19:42
- Откуда: г. Пермь
- Благодарил (а): 1329 раз.
- Поблагодарили: 2343 раз.
- Опыт программирования: Больше трех лет
- Языки программирования: PHP
NEoMASTERR » 01 мар 2017, 22:14
Инклуд для создания энтити-тасков.
Плюсы:
- Каждый таск имеет свой идентификатор
- Можно не городить конструкции вида set_task(....id + TASK_FOR_SOMETHING)
- Можно не бояться что кто то убьёт ваш таск по id игрока
- Не ограничен по мин. времени Вы должны зарегистрироваться, чтобы видеть ссылки.
- Имеет ту же конструкцию что и set_task (set_etask) + бонусный параметр для немедленного запуска функции
- Инклуд можно редактировать
Минусы:
- Для уверенного использования лучше увеличить num_edicts
- Плагин всё же хуже чем если бы это был модуль
- При большом количестве тасков могут визуально пропасть другие энти (в теории)
- В своих энтях занимает pev_[i/f/e]user[1-4] поля
- Нельзя использовать несколько флагов (можно, немного переделав инклуд)
- Пофиксил. Флаг d сработает некорректно если изменится mp_timelimit или не сработает вообще
- Код: Выделить всё
new g_BonusTask[MAX_PLAYERS+1]
public client_putinserver(id)
{
g_BonusTask[id] = change_etask(set_etask(1.0, "bonus", id, .flags = "b"), 60.0)
set_etask(30.0, "give_bonus_weapon", id, "weapon_ak47", 12)
}
public bonus(id, ent)
{
if (!is_user_connected(id))
{
g_BonusTask[id] = 0
remove_etask(ent)
}
else
client_print(id, print_chat, "Вы получили бонус 100$, следующий через 60 секунд")
}
public give_bonus_weapon(param[], id)
{
give_item(id, param)
}
public client_disconnected(id)
{
remove_etask(g_BonusTask[id])
}
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось
NEoMASTERR 02 мар 2017, 13:34, всего редактировалось 5 раз(а).
-
NEoMASTERR
-
- Сообщения: 832
- Зарегистрирован: 05 янв 2015, 16:38
- Благодарил (а): 43 раз.
- Поблагодарили: 188 раз.
- Опыт программирования: Около года
- Языки программирования: Counter-Strike 1.6
-
Subb98 » 02 мар 2017, 10:43
Макрос для проверки на наличие Steam клиента (необходимы Reunion и Reapi):
- Код: Выделить всё
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
-
Subb98
-
- Сообщения: 5485
- Зарегистрирован: 24 мар 2011, 19:42
- Откуда: г. Пермь
- Благодарил (а): 1329 раз.
- Поблагодарили: 2343 раз.
- Опыт программирования: Больше трех лет
- Языки программирования: PHP
zhorzh78 » 12 мар 2017, 11:23
Возвращает строку
source, перевернутую задом наперед
- Код: Выделить всё
stock strrev(output[], source[])
{
new len = strlen(source), i;
while(len--)
output[i++] = source[len]
return output;
}
Вы должны зарегистрироваться, чтобы видеть ссылки.
-
zhorzh78
-
- Сообщения: 91
- Зарегистрирован: 26 фев 2014, 10:07
- Благодарил (а): 1 раз.
- Поблагодарили: 23 раз.
- Опыт программирования: Больше трех лет
- Языки программирования: Pawn (AMXX)
Вернуться в Скриптинг
Кто сейчас на конференции
Сейчас этот форум просматривают: Yandex [Bot] и гости: 19