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

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

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

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

История благодарностей участнику trofian ::: Спасибо сказали: 41
Дата поста: В теме: За сообщение: Спасибо сказали:
26.7.2016, 21:07 [Модуль Amxx] Curl (Windows & Linux)
wopox3, а я что, не поддержка?
ALIK, не знаю, не затрагивая https://github.com/alldroll/curl_module,
обе другие версии имеют идентичный интерфейс и поведение; тесты производительности я не делал) но ни там ни там не используются threadpool или еще какие-то существенные опитимизации
ALIK
26.7.2016, 16:50 [Модуль Amxx] Curl (Windows & Linux)
Автор: Polarhigh (aka trofian)
Версия: 1.0.0
Описание:
Модуль является обёрткой над библиотекой libcurl.

Установка Linux версии:
Модуль слинкован динамически с openssl, поэтому, если в системе он отсутствует, то curl модуль не загрузится.

Поэтому нужно:
1) установить metamod плагин SoLoader и прописать его в самый верх addons/metamod/plugins.ini.
2) в addons/soloader/libraries.cfg добавить строчки:
Цитата
libcrypto.so.1.0.0
libssl.so.1.0.0


Эти библиотеки есть в архиве для linux версии, взяты из моего debian.

Функции:
Смотри здесь)
Однако отсутствуют следующие: curl_easy_recv, curl_easy_send

Общие примечания:
1) Вы НЕ должны вызывать curl_easy_cleanup и другие функции очистки пока передача не завершилась!
2) Пока нет возможности реально установить/получить значение переменной типа curl_off_t, сейчас происходит преобразование типа к cell (обычная ячейка amxx), но это не очень правильно. Значения зачастую будут некорректными.
3) Всегда определяйте опцию CURLOPT_BUFFERSIZE, если используете колбэк WRITEFUNCTION укажите в качестве параметра размер буфера не более 1024, иначе рискуете получить ошибки stack error, возможно даже повесить сервер. Если вы получаете ошибки stack error при использовании других колбэков, то можно определить в плагине #pragma dynamic 30000.
4) Не забывайте, что вам необходимо очищать память по указателям для curl_slist и curl_httppost с помощью функций curl_slist_free_all и curl_formfree соответственно.
5) Если к моменту смены карты остались незавершенные передачи, то будет прерван вызов всех установленных колбэков и модуль встанет в ожидание завершения всех передач.

Рекомендации:
1) Если планируется "долгосрочная" передача, то можно временно убрать лимит игры на карте, когда передача завершится восстановить;
2) Вы можете использовать 1 дескриптор curl несколько раз для одного url.
3) Используйте curl_easy_setopt(curl, CURLOPT_VERBOSE, 1) для отладки плагина, если затрудняетесь определить причину неполадки в плагине. (По-умолчания вывод дебаг информации будет осуществляться в консоль сервера, вы можете определить колбэк CURLOPT_DEBUGFUNCTION для изменения вывода)

Примеры:

http_get.sma
Cкрытый текст
Код:
#include <amxmodx>
#include <amxmisc>
#include <curl>

#define CURL_BUFFER_SIZE 512

public plugin_init()
{
register_plugin("curl http get", "1.0", "Polarhigh")

new data[1]
data[0] = fopen("addons/amxmodx/alliedmods_main_page.html", "wb")
server_print("curl start")

new CURL:curl = curl_easy_init()
curl_easy_setopt(curl, CURLOPT_BUFFERSIZE, CURL_BUFFER_SIZE)
curl_easy_setopt(curl, CURLOPT_URL, "https://forums.alliedmods.net")
curl_easy_setopt(curl, CURLOPT_WRITEDATA, data[0])
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, "write")
curl_easy_perform(curl, "complite", data, sizeof(data))
}

public write(data[], size, nmemb, file)
{
new actual_size = size * nmemb;

fwrite_blocks(file, data, actual_size, BLOCK_CHAR)

return actual_size
}

public complite(CURL:curl, CURLcode:code, data[])
{
if(code == CURLE_WRITE_ERROR)
server_print("transfer aborted")
else
server_print("curl complete")

fclose(data[0])
curl_easy_cleanup(curl)
}


ftp_upload.sma
Cкрытый текст
Код:
#pragma dynamic 16536

#include <amxmodx>
#include <amxmisc>
#include <curl>

#define CURL_BUFFER_SIZE 512

public plugin_init()
{
register_plugin("FTP Upload", "1.0", "Polarhigh")

// for an example we will send today's amxx log to the our ftp server
new log_str[14], log_full_path[128], conn_string[256]
get_time("L%Y%m%d.log", log_str, charsmax(log_str))
formatex(log_full_path, charsmax(log_full_path), "addons/amxmodx/logs/%s", log_str)
formatex(conn_string, charsmax(conn_string), "ftp://user:password@127.0.0.1:21/amx_logs/%s", log_str)

transfer_file(log_full_path, conn_string)
}

public transfer_file(file_path[], ftp_uri[])
{
if(file_exists(file_path))
{
new CURL:curl = curl_easy_init()
if(curl)
{
new data[1], fsize
fsize = file_size(file_path)
data[0] = fopen(file_path, "rb")


curl_easy_setopt(curl, CURLOPT_BUFFERSIZE, CURL_BUFFER_SIZE)
curl_easy_setopt(curl, CURLOPT_URL, ftp_uri)
curl_easy_setopt(curl, CURLOPT_READFUNCTION, "read_callback")
curl_easy_setopt(curl, CURLOPT_READDATA, data[0])
curl_easy_setopt(curl, CURLOPT_INFILESIZE, fsize)
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1)
curl_easy_perform(curl, "curl_complete", data, sizeof(data))

server_print("transfer begin %s", file_path)
}
else
server_print("curl init error")
}
else
server_print("transfer err, file not found: %s", file_path)
}

public read_callback(buffer[], size, nmemb, file)
{
return fread_blocks(file, buffer, nmemb, BLOCK_BYTE) // we consider size == 1
}

public curl_complete(CURL:curl, CURLcode:code, data[])
{
if(code == CURLE_READ_ERROR)
server_print("transfer aborted")
else if(code == CURLE_OK)
server_print("transfer complete")
else
{
new err[64]
curl_easy_strerror(code, err, charsmax(err))
server_print("transfer error: %s", err)
}

fclose(data[0])
curl_easy_cleanup(curl)
}


Скачать: GitHub releases
Исходники: https://github.com/Polarhigh/AmxxCurl
Официальная ветка: http://amx-x.ru/viewtopic.php?f=21&t=36068&p=286085
ALIK, Nixon, oxoTHuk.
6.9.2015, 8:01 Как получить инфу типа float
это делается так
Код
public CheckUserHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
    new Float:money, field
    field = SQL_FieldNameToNum(Query, "eco_points")
    SQL_ReadResult(Query, field, money)
    
    account_money[Data[0]] = floatround(money)
}


но по идее можно сразу получить целое, у тебя не получилось это сделать т.к. ты брал данные как строку (т.е. срабатывал вот этот кейс с 4 параметрами https://github.com/alliedmodders/amxmodx/bl...ic_sql.cpp#L260 и в итоге функция должна была возвращать 1, а в money записывать текстовое представление)
Код
public CheckUserHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
    new field = SQL_FieldNameToNum(Query, "eco_points")
    account_money[Data[0]] = SQL_ReadResult(Query, field)
}
filip
7.1.2015, 14:51 Проблема с модулем Okapi
нужно просто скачать исходники отсюда https://forums.alliedmods.net/showthread.php?t=234986
добавить в настройках проекта либу psapi.lib
и скомпилить
riva2014
6.1.2014, 9:33 Флудильня
exec1337,
а я думаю, что ему нужно вот это
http://zombie-mod.ru/services/cso-knife-mod/
http://zombie-mod.ru/services/cso-knife/
Revelation
19.11.2013, 22:58 Что с amx-x.ru
Цитата(exec1337 @ 20.11.2013, 0:55) *
В году, эдак, 2150

надеюсь Microsoft поможет сделать это раньше)
http://4pda.ru/2013/11/19/125117/
OriGinaL, primm, XyLiGaN
15.7.2013, 21:06 Логика в коде
0 элемент это номер из этого списка
Код
new g_szAmmoList[MAX_AMMO][] = {
   "ammo_45acp", "ammo_9mm", "ammo_50ae", "ammo_357sig",
   "ammo_57mm", "ammo_buckshot", "ammo_556nato", "ammo_762nato",
   "ammo_338magnum", "ammo_556natobox"
}


1 элемент - кол-во выдаваемых обойм, так сказать

т.е. { 0, 8 } значит что 8 раз выдаём ammo_45acp

и каждый элемент из g_nWeaponData соответствует своему оружию (в функции GivePlayerExtra есть комменты с id)
pukipuki
12.6.2013, 15:53 В чего бы поиграть?
https://warframe.com/ru
например
Andrei
11.2.2013, 20:51 Продажа Next21 Knife Mod
Описание
Описание ножей:

1) Blink Knife
Способность – позволяет телепортироваться за спину к противнику, в случае если телепортация успешна игроку придаётся ускорение на 1 секунду.
Свойства:
- Двойной прыжок (второй прыжок немного хуже первого)


Критический удар - телепортируется внутрь противника разрывая его изнутри. Шанс критического удара зависит от кол-ва фрагов, полученных с помощью этого ножа.

2) Flash Knife
Способность – позволяет ослепить противника и позволяет нанести супер удар (90 hp) по ослеплённому противнику.
Свойства:
- Урон от падения уменьшен в 8 раз
- Более высокая скорость бега
- Возможность видеть невидимых игроков.

3) Slap Knife
Способность – позволяет раскидывать противников в разные стороны находящиеся недалеко от атакующего, наносит небольшой урон в 6 – 12 hp.
Свойства:
- Более мощный удар, +10 – 25 к общему урону.

Минусы:
- Более низкая скорость бега
- HP меньше на 10.

Критический удар - Разрывает всех вокруг. (100% смерть противников).

4) Ninja Knife
Способность – позволяет временно войти в невидимость и заглушить шаги.
Свойства:

- Уменьшена гравитация
- HP больше на 15.

Минусы:
- Бесполезен против Flash Knife
- Неполная невидимость в воде
- Множество факторов, способные вывести игрока из невидимости.

5) Leap Knife
Способность – позволяет притянуть к себе противника, а затем его замедлить.
Свойства:
- Урон +10

- Сокращено время на перезарядку способности на 2 секунды
- Long Jump (ctrl+space).

Минусы:
- HP меньше на 10.

6) Fire Knife
Способность – резкое ускорение вперёд и поджигание врагов. Горящие противники могут поджигать соседних своим касанием. Сгоревший противник превращается в опаленный труп. Также Fire Knife способен размораживать игроков.
Свойства:
- HP больше на 20
- Немного выше скорость

- Размораживает владельца и товарищей по команде.
Минусы:
- Бесполезен в воде

- Размораживает противников
- Огонь можно потушить замораживающим оружием.

7) Nuclear Knife
Способность – временно отражает определенную часть урона, нанесенным противником. Больше 60 хп парировать нельзя.
Свойства:
- Каждый удар относит противника назад
- Более мощный удар, +10 – 25 к общему урону
- HP больше на 40

- Процент отражаемого урона меняется в зависимости от кол-ва убитых противников.
Минусы:
- Очень низкая скорость бега.

8) Frost Knife
Способность – замораживает противников вокруг игрока, а так же тушит союзников.
Свойства:
- Тушит владельца и товарищей по команде.
Минусы:
- Лед можно растопить огненным оружием

- HP меньше на 10.


9) Thunder Knife
Способность – ударяет молнией в указанную область. Нельзя указывать на стены и на область, расположенную близко к игроку.

Свойства:
- С каждым убитым противником, игрок накапливает очки "Ярости Зевса", которые постепенно исчезает. Если владелец ножа накопит до 90% очков этого навыка, то перейдет в режим "Ярость Зевса", где время перезарядка способности будет ограничена в 1 секунду, а накопленные очки будут быстро израсходоваться, пока не дойдут до нуля и не вернут обычную перезарядку.
Минусы:
- HP меньше на 35
- Практически бесполезен на маленьких картах
- Требует держаться большой дистанции от противника.

Способность любого ножа активируется правой кнопкой мыши.

Магазин:
[$23000] Автораспрыг (на 5 раундов)
[$21000] Регенерация (200 секунд). Восстанавливает здоровье со скоростью 2хп/сек. если у игрока hp меньше максимального, если hp меньше 25, включается turbo режим (4 хп/сек.). Срабатывает после использования стимулятора (процесс начинается автоматически и длиться 2,5 сек).

[$15000] 50 HP. Срабатывает после использования стимулятора (процесс начинается автоматически и длиться 2,5 сек)
[$15000] Возрождение

[$13000] Карамельная трость (на 2 раунда). 100% шанс выпадания подарка за убийство этой тростью. Можно спокойно переключаться на нож и обратно.
[$6000] Граната (I-pad)
[$4500] Замораживающая граната
[$4500] Газовая граната
[$2000] Слеповая граната.

Содержание подарков:
1) 50 хп
2) 7000$
3) 4 гранаты (I-pad)
4) 1 слеповая граната
5) 3 замораживающих или газовых гранаты (зависит от карты)
6) Возрождение случайного игрока из команды
7) Ответ на нынешний или на следующий арифметический пример
8) Регенерация (200 секунд).


Награда за математические примеры:
1) От 2500 до 8000$ (В сумме с наличными не должно превышать 55000$)
2) 3 I-pad'а (Выдаются в следующем раунде (или после воскрешения), если пример был решен будучи мертвым игроком)
3) Регенерация (Если у игрока есть 55000$)
4) Возрождение (Если у игрока есть 55000$ и если пример был решен убитым игроком).

Сами плагины

Код
max_start_money.amxx; увеличиваем максимальное количество денег до 55к
buyzonerange.amxx; офаем нафиг места закупки и саму закупку вообще
he_kill_him.amxx debug; необходим для зачисления фрагов от некоторых абилити
fix_ladder_render.amxx; фикс чёрных лесниц на 35hp_3
next21_vip.amxx    ; vip
fix_game_commencing.amxx; фикс 16к при game commencing

advanced_render.amxx; смешение цветов
custom_hud.amxx    ; установка кастомного худа (используется ядром)
next21_knife_core.amxx debug; ядро
next21_knife_blink.amxx debug
next21_knife_slap.amxx debug
next21_knife_flash.amxx debug
next21_knife_ninja.amxx debug
next21_knife_leap.amxx debug
next21_knife_fire.amxx debug
next21_knife_nuclear.amxx debug
next21_knife_frost.amxx debug
next21_knife_thunder.amxx debug

next21_item_bunny.amxx debug; предмет - распрыг
next21_item_stimpak.amxx debug; предмет - регенерация
next21_item_candy.amxx debug; предмет - карамельная трость
next21_item_respawn.amxx debug; предмет - воскрешение
next21_item_hp.amxx debug; предмет - 50hp
next21_item_he.amxx debug; предмет - I-pad
next21_item_frost_gaz.amxx debug; предмет - Замораживающая и газовая граната (по отдельности невозможно подключить)
next21_item_flash.amxx debug; предмет - Слеповая граната

next21_presents.amxx debug; подарки
MindGames.amxx        ; конкурсы с арифметическими примерами
hat.amxx debug        ; шапки
next21_duels.amxx debug; дуэли

Немножко скринов






Цена: 2000р., все исходники вам

Не актуально
_Skyline, Affl, EATEN, playboy15, stefkone