[Pawn] Вопросы от Javekson

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
1,016
Реакции
818
Помог
10 раз(а)
d3m37r4, спасибо за идею, но попробую все таки с gRIP'ом поработать, не зря наверное gm-x на нем работал
 
Сообщения
1,016
Реакции
818
Помог
10 раз(а)
Я снова где-то туплю, похоже.
Почему grip_json_serial_to_string выдал мне пустые данные?

C++:
public client_authorized( id, const sAuthID[ ] )
{
    if( !is_user_bot( id ) && !is_user_hltv( id ) )
    {
        new sIP[ MAX_LENGTH__IP ];
        get_user_ip( id, sIP, charsmax( sIP ), .without_port = true );
        
        new sName[ MAX_LENGTH__NAME * 3 ];
        get_user_name( id, sName, charsmax( sName ) );
        
        new GripJSONValue: gripData = grip_json_init_object( );
        
        grip_json_object_set_string( gripData, "AuthID", sAuthID );
        grip_json_object_set_string( gripData, "IP", sIP );
        grip_json_object_set_string( gripData, "Name", sName );
        
        func_MakeRequest( gripData );
        
        grip_destroy_json_value( gripData );
    }
}

func_MakeRequest( GripJSONValue: gripData )
{
    new GripRequestOptions: gripOptions = grip_create_default_options( );
    
    grip_options_add_header( gripOptions, "Content-Type", "application/json" );
    grip_options_add_header( gripOptions, "User-Agent", "Grip" );
    
    new GripBody: gripBody = grip_body_from_json( gripData );
    
    new sBuffer[ 512 ];
    grip_json_serial_to_string( gripData, sBuffer, charsmax( sBuffer ) );
    log_to_file( "grip_string.log", "sBuffer: %s", sBuffer );
    
    grip_request( "http://grip.gmforce.ru/", gripBody, GripRequestTypePost, "handler_Request", gripOptions );
    
    grip_destroy_body( gripBody );
    
    grip_destroy_options( gripOptions );
}
 
Сообщения
1,016
Реакции
818
Помог
10 раз(а)
Изредка прилетают такие ошибки
Код:
L 02/16/2021 - 18:11:17: [JSON] Invalid JSON value! 0
L 02/16/2021 - 18:11:17: [AMXX] Run time error 10: native error (native "json_serial_to_string")
Меня это немного удивило, ибо в этом же кадре, выше json_serial_to_string я работаю с json_object_set_bool, json_object_set_string и так далее, но ошибок в них нету, именно в json_serial_to_string вылезла.

Посмотрел натив: alliedmodders/amxmodx
Увидел там проверку на валидность дескриптора if (!JsonMngr->IsValidHandle(value))

Затем глянул IsValidHandle alliedmodders/amxmodx
Но не совсем понял, что он проверяет, объясните? if (handle >= m_Handles.length() || !m_Handles[handle])
 
Сообщения
1,016
Реакции
818
Помог
10 раз(а)
Для чего делают
Код:
public plugin_end( )
{
    if( g_hSqlTuple )
    {
        SQL_FreeHandle( g_hSqlTuple )
    }
}
Разве он сам не очищается? Или это для чего то еще сделано?
 
Сообщения
1,016
Реакции
818
Помог
10 раз(а)
Разжуйте мне по rh_emit_sound2 пожалуйста

@param channel Channel to emit from - что за каналы, то есть если звук в разных каналах то он будет накладываться, если в одном и том же, то заменятся?
Код:
#define CHAN_AUTO       0
#define CHAN_WEAPON     1
#define CHAN_VOICE      2
#define CHAN_ITEM       3
#define CHAN_BODY       4
#define CHAN_STREAM     5   /* allocate stream channel from the static or dynamic area */
#define CHAN_STATIC     6   /* allocate channel from the static area  */
#define CHAN_NETWORKVOICE_BASE  7   /* voice data coming across the network */
#define CHAN_NETWORKVOICE_END   500 /* network voice data reserves slots (CHAN_NETWORKVOICE_BASE through CHAN_NETWORKVOICE_END). */

@param attn Sound attenuation
Код:
#define ATTN_NONE       0.00
#define ATTN_NORM       0.80
#define ATTN_IDLE       2.00
#define ATTN_STATIC     1.25

@param flags Emit flags
Код:
#define SND_SPAWNING        (1<<8)      // we're spawing, used in some cases for ambients
#define SND_STOP            (1<<5)      // stop sound
#define SND_CHANGE_VOL      (1<<6)      // change sound vol
#define SND_CHANGE_PITCH    (1<<7)      // change sound pitch

@param pitch Sound pitch
Код:
#define PITCH_NORM      100 /* non-pitch shifted */
#define PITCH_LOW       95  /* other values are possible - 0-255, where 255 is very high */
#define PITCH_HIGH      120

@param emitFlags Additional Emit2 flags, look at the defines like SND_EMIT2_*
Код:
#define SND_EMIT2_NOPAS   BIT(0) // Never to check PAS
#define SND_EMIT2_INVOKER BIT(1) // Do not send to the client invoker
 
Сообщения
225
Реакции
90
Помог
1 раз(а)
что за каналы, то есть если звук в разных каналах то он будет накладываться, если в одном и том же, то заменятся?
@param channel - Канал для воспроизводства разных типов звуков. Выстрелы в одном, войсчат в другом, шаги в третьем и т.д. В CHAN_AUTO звуки не сбивают друг друга, если не ошибаюсь.
@param attn - скорее всего значение затухания звука при отдалении. Всегда ATTN_NORM применял.
@param pitch - скорость воспроизведения. На 30 обычно вообще всё плохо, на 200 бурундуки поют.
@param flags - флаги указывающие что делать эмитсунду. По дефолту 0 - просто воспроизводит.
 
Последнее редактирование:
Сообщения
2,720
Реакции
2,997
Помог
60 раз(а)
Javekson, Ты тему то в нормальный вид приводить собираешься?

Сделай пост-оглавление в ссылками на всё с описанием кратким.
 
Сообщения
1,016
Реакции
818
Помог
10 раз(а)
Задача: воспроизвести звук если жертва убита с гранаты

Код:
public plugin_init( )
{
    RegisterHookChain( RG_CSGameRules_PlayerKilled, "hook_PlayerKilled_Post", .post = true );
}

public hook_PlayerKilled_Post( const iVictim, const iKiller, const iInflictor )
{
    if( iVictim != iKiller && iInflictor != iKiller && get_member( iVictim, m_bKilledByGrenade ) )
    {
        rg_send_audio( 0, SOUND__GRENADE_KILL );
    }
}
Вопрос: стоит ли убрать проверку iInflictor != iKiller ?
Не уверен, что в такой задачи она нужна, в целом
 
Сообщения
2,720
Реакции
2,997
Помог
60 раз(а)
Сообщения
1,016
Реакции
818
Помог
10 раз(а)
Limbooc, я понял, но у меня нету полезного кода здесь, половина вопросов без ответа, другая часть ответов растянута на несколько постов, не думаю, что из этого что-то хорошие получится
 
Сообщения
17
Реакции
18
Помог
2 раз(а)
@param attn Sound attenuation
это еще вроде влияет на радиус слышимости звука. Помню что ambient_generic выставляет эти значения в зависимости от SF_AMBIENT_SOUND_ *

SND_STOP - чтобы остановить проигрывание немедленно.
 
Сообщения
1,016
Реакции
818
Помог
10 раз(а)
Какие требования необходимы для воспроизведения кастомных звуков в кс?
Формат: wav / mp3
 
Сообщения
775
Реакции
291
Помог
11 раз(а)
Javekson,
Код:
- Формат: Wav
- Битрейт: 176-353 Kbps (8-16 Bit)
- Частота: 11-22 KHz
- Канал: моно
Код:
- Формат: Mp3
- Битрейт: 128 кбит\сек
- Частота: 44 KHz
- Канал: 2(стерео)
 
Сообщения
1,016
Реакции
818
Помог
10 раз(а)
Немного рассуждения на тему синхронность и асинхронность.

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

Можно проверить элементарным способом, отправил запрос при смене карты: SELECT SLEEP(10)

Часто слышу плохие отзывы о работе разных плагинов, в частности aes'a, что иногда падает сервер, на самом деле проблема в ваших долгих базах данных и сервер не падает, а просто стоит думает.

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

Думаю, что мне поможет в этом gRip, плюс его в том, что он полностью асинхроннен, никогда не ждет ответа, даже при смене карты, но и минус в этом тоже существенный.

Например отправляем запрос при дисконнекте игроков, что у нас происходит? При смене карты первом делом выполнится дисконнект для всех игроков, затем plugin_end и смена карты. В теории думая, что все запросы уйдут на сервер. На деле у меня оказалось совсем другое...

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

Отсюда следует главный вопрос, что лять делать? :D

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

Да, я знаю, что можно воспользоваться методом персистентности и хранить данные локально и после смены карты отправлять их вновь, но тем не менее.
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу