Русское сообщество по скриптингу

Отображение картинки в конце раунда

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Отображение картинки в конце раунда

Сообщение radical » 11 фев 2018, 17:12

Привет. Недавно видел плагин, при победе определенной команды показывалась картинка чуть выше центра экрана. Собственно, вопрос, как это реализовать? Я знаю, что мне нужно отлавливать событие победы ТТ\СТ. Но как вставить картинку?
Аватара пользователя
radical
 
Сообщения: 84
Зарегистрирован: 01 фев 2018, 19:31
Благодарил (а): 22 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Pawn
SourcePawn
C#

Re: Отображение картинки в конце раунда

Сообщение KOTOKU » 11 фев 2018, 17:13

Там прицел заменяется на спрайт, где то плагин в инете был
Аватара пользователя
KOTOKU
 
Сообщения: 766
Зарегистрирован: 10 фев 2013, 00:53
Благодарил (а): 10 раз.
Поблагодарили: 117 раз.

Re: Отображение картинки в конце раунда

Сообщение radical » 11 фев 2018, 17:16

что - то ничего не смог в гугле найти)
Аватара пользователя
radical
 
Сообщения: 84
Зарегистрирован: 01 фев 2018, 19:31
Благодарил (а): 22 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Pawn
SourcePawn
C#

Re: Отображение картинки в конце раунда

Сообщение Hilarious » 11 фев 2018, 17:21

Насколько я понял, смысл в том, что игроку отсылается сразу несколько сообщений.
Отсылается FOV, зачем непонятно, но скорее всего это баг самой игры, я не особо знаток игровых событий, затем сообщение Cur Weapon и потом WeaponList. После чего FOV возвращается обратно.
Смущает во всем этом отсылка сразу 4 сообщений подряд, это вообще нормально?
В матрице :-[
Аватара пользователя
Hilarious
 
Сообщения: 69
Зарегистрирован: 07 фев 2018, 08:46
Благодарил (а): 6 раз.
Поблагодарили: 29 раз.

Re: Отображение картинки в конце раунда

Сообщение radical » 11 фев 2018, 17:38

нашел плагин под названием "WinTeam Sprite" - но в исходнике ничего не понятно..
Аватара пользователя
radical
 
Сообщения: 84
Зарегистрирован: 01 фев 2018, 19:31
Благодарил (а): 22 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Pawn
SourcePawn
C#

Re: Отображение картинки в конце раунда

Сообщение Hilarious » 11 фев 2018, 19:29

Сейчас вместе разберёмся. Накалякал то, что там и было... Соединил в одну функцию и выглядит это так

Код: Выделить всё


//В текстовике координаты спрайта
new const DRAW_SPRITE[] = "z_aufff_fmaledevcsrus";
new g_Sprites[][] = { "sprites/z_aufff_fmaledevcsrus.txt", "sprites/winteam_fmaledevcsrus.spr" }

enum _:MESSAGES 
{
    g_iMsg_WeaponList,
    g_iMsg_CurWeapon,
    g_iMsg_SetFOV
}

new g_Messages_Name[MESSAGES][] = 
{
    "WeaponList",
    "CurWeapon",
    "SetFOV"
}

//Вот это и показывает наш спрайт, "выдается якобы щит", а на самом деле подложка простая
public DrawSprites(id, const IMAGE[])
{
    message_begin(MSG_ONE,g_Messages[g_iMsg_SetFOV], .player = id);
    write_byte(89); // Вот это видимо баг движка раз без FOV не работает.
    message_end();    
    
    message_begin
(MSG_ONE,g_Messages[g_iMsg_CurWeapon], .player = id);
    write_byte(1);
    write_byte(2);
    write_byte(-1);
    message_end();
    
    message_begin
(MSG_ONE,g_Messages[g_iMsg_WeaponList], .player = id);
    write_string(IMAGE);
    write_byte(-1);
    write_byte(-1);
    write_byte(-1);
    write_byte(-1);
    write_byte(0);
    write_byte(11);
    write_byte(2);
    write_byte(0);
    message_end();

    message_begin(MSG_ONE,g_Messages[g_iMsg_SetFOV], .player = id);
    write_byte(90); //Возвращает FOV в дефолт
    message_end();    
}

//Этой функцией удаляем спрайт, "выдаётся оружием под индексом 29", остальное по нулям
public RemoveSprites(id)
{
    message_begin(MSG_ONE,g_Messages[g_iMsg_CurWeapon], .player = id);
    write_byte(0);
    write_byte(0);
    write_byte(0);
    message_end();
    
    message_begin
(MSG_ONE,g_Messages[g_iMsg_WeaponList], .player = id);
    write_string("weapon_knife");
    write_byte(-1);
    write_byte(-1);
    write_byte(-1);
    write_byte(-1);
    write_byte(2);
    write_byte(1);
    write_byte(29);
    write_byte(0);
    message_end();    
}



Итого получили функцию для показа картинок DrawSprites(PlayerIndex, DRAW_SPRITE)
И для удаления RemoveSprites(PlayerIndex)
Использовать можно в любом месте кода, показывается по индексу, если всем то MSG_ALL? Наверное.

Добавлено спустя 14 минут 12 секунд:
Ну или вот готовый вариант, я скажем покажу игроку, который убил кого-то, спрайт и удалю его через 2 секунды

Код: Выделить всё


#include <amxmodx>

#define TASK_DELAY_KILLER 1082
#define ID_TASK_DELAY_KILLER (iTask - TASK_DELAY_KILLER)

//В текстовике координаты спрайта
new const DRAW_SPRITE[] = "z_aufff_fmaledevcsrus";
new g_Sprites[][] = { "sprites/z_aufff_fmaledevcsrus.txt", "sprites/winteam_fmaledevcsrus.spr" }

enum _:MESSAGES 
{
    g_iMsg_WeaponList,
    g_iMsg_CurWeapon,
    g_iMsg_SetFOV
}

new g_Messages_Name[MESSAGES][] = 
{
    "WeaponList",
    "CurWeapon",
    "SetFOV"
}

new iIndexDelay[33]; //Чтобы спрайт не исчезал сразу же, надо как я понимаю заблокировать событие смены оружия, в общем то чего-то ещё, не силен в объяснении

new iKillsCount[33], g_Messages[MESSAGES];

public plugin_init()
{
    register_event("DeathMsg", "EventDeath", "a"); //Для примера, я тут использую нашу функцию
    
    for
(new i; i < sizeof(g_Messages); i++)
    {    
        g_Messages
[i] = get_user_msgid(g_Messages_Name[i]);
        
        register_message
(g_Messages[i], "Hook_MSG");
    }
    
    register_clcmd
(DRAW_SPRITE, "WeaponSwitch");        
}

public plugin_precache()
{
    for(new i; i < sizeof(g_Sprites); i++)
        precache_generic(g_Sprites[i]);
}

public Hook_MSG(iMsgid, iDest, id)
{
    if(iIndexDelay[id] == 1) //Чтобы наш спрайт не исчез, блокируется дальнейшее выполнение здесь
        return PLUGIN_HANDLED;
    
    return PLUGIN_CONTINUE
;
}

public WeaponSwitch(const iPlayer)
    engclient_cmd(iPlayer, "weapon_shield");

public EventDeath()
{
    new iKiller = read_data(1);
    
    new iVictim 
= read_data(2);
    
    if
(iVictim == iKiller || iKiller == iVictim)
        return;
        
    iKillsCount
[iKiller] ++; //не важно просто хранение убийств, допустим я хочу показать спрайт если я убил кого то
    
    iKillsCount
[iVictim] = 0; 

    if
(iKillsCount[iKiller] > 1)
    {

        DrawSprites(iKiller, DRAW_SPRITE) //Показываем наш спрайт
        iIndexDelay[iKiller] = 1; //Блокируем работу наших зарегистрированных событий в register_message
            
        if
(task_exists(iKiller + TASK_DELAY_KILLER))
            remove_task(iKiller + TASK_DELAY_KILLER)
                
        set_task
(2.0, "RemoveSprites", iKiller + TASK_DELAY_KILLER) //Задаем исчезновение спрайта через 2 секунды
    }    
}        


//Вот это и показывает наш спрайт, "выдается якобы щит", а на самом деле подложка простая
public DrawSprites(id, const IMAGE[])
{
    message_begin(MSG_ONE,g_Messages[g_iMsg_SetFOV], .player = id);
    write_byte(89); // Вот это видимо баг движка раз без FOV не работает.
    message_end();    
    
    message_begin
(MSG_ONE,g_Messages[g_iMsg_CurWeapon], .player = id);
    write_byte(1);
    write_byte(2);
    write_byte(-1);
    message_end();
    
    message_begin
(MSG_ONE,g_Messages[g_iMsg_WeaponList], .player = id);
    write_string(IMAGE);
    write_byte(-1);
    write_byte(-1);
    write_byte(-1);
    write_byte(-1);
    write_byte(0);
    write_byte(11);
    write_byte(2);
    write_byte(0);
    message_end();

    message_begin(MSG_ONE,g_Messages[g_iMsg_SetFOV], .player = id);
    write_byte(90); //Возвращает FOV в дефолт
    message_end();    
}

//Этой функцией удаляем спрайт, "выдаётся оружием под индексом 29", остальное по нулям
public RemoveSprites(iTask)
{

    new id= ID_TASK_DELAY_KILLER
    
    iIndexDelay
[id] = 0; //Сбросили, чтобы не блокировать больше события

    message_begin(MSG_ONE,g_Messages[g_iMsg_CurWeapon], .player = id);
    write_byte(0);
    write_byte(0);
    write_byte(0);
    message_end();
    
    message_begin
(MSG_ONE,g_Messages[g_iMsg_WeaponList], .player = id);
    write_string("weapon_knife");
    write_byte(-1);
    write_byte(-1);
    write_byte(-1);
    write_byte(-1);
    write_byte(2);
    write_byte(1);
    write_byte(29);
    write_byte(0);
    message_end();    
}

 


Добавлено спустя 10 минут 8 секунд:
Тут ещё и проверки на оружие нужны будут, если вдруг ты будешь спрайты киллов показывать, проверки на снайперки, чтобы у них прицел не появлялся, блокировать HideWeapon.
Исправил функцию удаления, забыл что задание поставил.
В матрице :-[
Аватара пользователя
Hilarious
 
Сообщения: 69
Зарегистрирован: 07 фев 2018, 08:46
Благодарил (а): 6 раз.
Поблагодарили: 29 раз.

Re: Отображение картинки в конце раунда

Сообщение radical » 11 фев 2018, 21:02

Добавлено спустя 10 минут 8 секунд:
Тут ещё и проверки на оружие нужны будут, если вдруг ты будешь спрайты киллов показывать, проверки на снайперки, чтобы у них прицел не появлялся, блокировать HideWeapon.
Исправил функцию удаления, забыл что задание поставил.


Да я собственно, хочу простой плагин написать) Победили ТТ - показ спрайта. С СТ аналогично)
Спасибо большое
Аватара пользователя
radical
 
Сообщения: 84
Зарегистрирован: 01 фев 2018, 19:31
Благодарил (а): 22 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Pawn
SourcePawn
C#

Re: Отображение картинки в конце раунда

Сообщение Nosock » 12 фев 2018, 05:59

Аватара пользователя
Nosock
 
Сообщения: 16
Зарегистрирован: 31 янв 2018, 17:24
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: Отображение картинки в конце раунда

Сообщение radical » 12 фев 2018, 18:23

Аватара пользователя
radical
 
Сообщения: 84
Зарегистрирован: 01 фев 2018, 19:31
Благодарил (а): 22 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Pawn
SourcePawn
C#


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 11

cron