Создайте плагин

Тема в разделе "Программирование / Скриптинг", создана пользователем Николай Черепахин, 13 июн 2014.

  1. Николай Черепахин

    Николай Черепахин

    Сообщения:
    25
    Симпатии:
    2
    Всем привет кто сможет сделать плагин , попробую объяснить суть плагина при убийстве игрока (в убитого) бьёт молния
    вот сама молния

    public Action:Lightning(client, args) //Молния
    {
    new Float:pos[3];
    wS_GetLookPos(client, pos);


    new randomx = GetRandomInt(-500, 500); // Получаем случайные позиции Х и У, чтобы молния не была однобокой
    new randomy = GetRandomInt(-500, 500);

    //Получаем верхнюю точку молнии. Она будет рандомная по Х и У и выше нижней позиции на 800, чтобы молния била сверху вниз
    new Float:startpos[3];
    startpos[0] = pos[0] + randomx;
    startpos[1] = pos[1] + randomy;
    startpos[2] = pos[2] + 800;

    //Делаем цвет молнии (у нас синий)
    new color[4] = {0, 0, 255, 255};

    //Делаем направление искр (к началу координат карты)
    new Float:dir[3] = {0.0, 0.0, 0.0};

    TE_SetupBeamPoints(startpos, pos, g_LightningSprite, 0, 0, 0, 0.2, 20.0, 10.0, 0, 2.0, color, 3); //Делаем лазер с амплитудой в 2 единицы
    TE_SendToAll(); // Применяем

    TE_SetupBeamPoints(startpos, pos, g_LightningSprite, 0, 0, 0, 0.2, 10.0, 5.0, 0, 1.0, {255, 255, 255, 255}, 3); //Делаем второй лазер (белый) с амплитудой в 1 единицу
    TE_SendToAll(); // Применяем //И в 2 раза уже, чтобы молния смотрелась органично

    TE_SetupSparks(pos, dir, 5000, 1000); //Делаем искры
    TE_SendToAll(); // Применяем

    TE_SetupEnergySplash(pos, dir, false); //Делаем всплеск энергии
    TE_SendToAll(); // Применяем

    TE_SetupSmoke(pos, g_SteamSprite, 5.0, 10); //Делаем дым
    TE_SendToAll(); // Применяем

    //Можно добавить маяк, если хотите. TE_SetupBeamRingPoint(pos, 10.0, 70.0, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 255, 0, 255}, 10, 0);
    // TE_SendToAll();
    return Plugin_Handled;
    }
     
  2. Черная вдова

    Черная вдова

    Сообщения:
    1.621
    Симпатии:
    234
  3. NagarD

    NagarD

    Сообщения:
    412
    Симпатии:
    170
    PHP:
    #include <sdktools>

    new g_LightningSprite;
    new 
    g_SteamSprite;

    public 
    OnPluginStart()
    {
        
    HookEvent("player_death"Event_PlayerDeathEventHookMode_Post);
    }

    public 
    OnMapStart()
    {
        
    g_SteamSprite PrecacheModel("sprites/steam1.vmt"); 
        
    g_LightningSprite PrecacheModel("sprites/lgtning.vmt");
    }

    public 
    Event_PlayerDeath(Handle:event,const String:name[],bool:dontBroadcast)
    {
        new 
    client GetClientOfUserId(GetEventInt(event"userid"));
        new 
    Float:pos[3];
        
        
    GetClientAbsOrigin(clientpos);

        new 
    randomx GetRandomInt(-500500); // Получаем случайные позиции Х и У, чтобы молния не была однобокой
        
    new randomy GetRandomInt(-500500); 

        
    //Получаем верхнюю точку молнии. Она будет рандомная по Х и У и выше нижней позиции на 800, чтобы молния била сверху вниз
        
    new Float:startpos[3]; 
        
    startpos[0] = pos[0] + randomx
        
    startpos[1] = pos[1] + randomy
        
    startpos[2] = pos[2] + 800

        
    //Делаем цвет молнии (у нас синий)
        
    new color[4] = {00255255}; 

        
    //Делаем направление искр (к началу координат карты)
        
    new Float:dir[3] = {0.00.00.0}; 

        
    TE_SetupBeamPoints(startposposg_LightningSprite0000.220.010.002.0color3); //Делаем лазер с амплитудой в 2 единицы
        
    TE_SendToAll(); // Применяем

        
    TE_SetupBeamPoints(startposposg_LightningSprite0000.210.05.001.0, {255255255255}, 3); //Делаем второй лазер (белый) с амплитудой в 1 единицу
        
    TE_SendToAll(); // Применяем //И в 2 раза уже, чтобы молния смотрелась органично

        
    TE_SetupSparks(posdir50001000); //Делаем искры
        
    TE_SendToAll(); // Применяем

        
    TE_SetupEnergySplash(posdirfalse); //Делаем всплеск энергии
        
    TE_SendToAll(); // Применяем

        
    TE_SetupSmoke(posg_SteamSprite5.010); //Делаем дым
        
    TE_SendToAll(); // Применяем

        // TE_SetupBeamRingPoint(pos, 10.0, 70.0, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 255, 0, 255}, 10, 0); //Можно добавить маяк, если хотите. 
        // TE_SendToAll(); 
        
    return Plugin_Handled;
    }
     
    Николай Черепахин нравится это.
  4. Николай Черепахин

    Николай Черепахин

    Сообщения:
    25
    Симпатии:
    2
    NagarD, спасибо плагин скомпилировался но в 53 строке выдает ошибку 213, можешь исправить? заранее спасибо

    Добавлено через 5 минут
    Просто интересный эффект, разве нет? Можешь предложить что то подобное?
     
    Последнее редактирование: 13 июн 2014
  5. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.563
    Симпатии:
    1.988
    Зачем создавать переменную, если индекс применяется всего 1 раз?
    То же самое.
    В общем-то тоже, но для удобства, чтобы было легче найти, оставляю.
    PHP:
    #include <sdktools> 

    new g_LightningSprite
    new 
    g_SteamSprite

    public 
    OnPluginStart() 

        
    HookEvent("player_death"Event_PlayerDeathEventHookMode_Post); 


    public 
    OnMapStart() 

        
    g_SteamSprite PrecacheModel("sprites/steam1.vmt");  
        
    g_LightningSprite PrecacheModel("sprites/lgtning.vmt"); 


    public 
    Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast
    {
        
    //3) Делаем направление искр (к началу координат карты)
        //4) Делаем цвет молнии (у нас синий)
        
    new Float:pos[3], Float:startpos[3], Float:dir[3] = {0.00.00.0}, color[4] = {00255255}; 
        
        
    GetClientAbsOrigin(GetClientOfUserId(GetEventInt(event"userid")), pos); 

        
    // Получаем верхнюю точку молнии + случайные позиции Х и У и выше нижней позиции на 800, чтобы молния била сверху вниз 
        
    startpos[0] = pos[0] + GetRandomInt(-500500);  
        
    startpos[1] = pos[1] + GetRandomInt(-500500);  
        
    startpos[2] = pos[2] + 800;  

        
    TE_SetupBeamPoints(startposposg_LightningSprite0000.220.010.002.0color3); //Делаем лазер с амплитудой в 2 единицы 
        
    TE_SendToAll(); // Применяем 

        
    TE_SetupBeamPoints(startposposg_LightningSprite0000.210.05.001.0, {255255255255}, 3); //Делаем второй лазер (белый) с амплитудой в 1 единицу 
        
    TE_SendToAll(); // Применяем //И в 2 раза уже, чтобы молния смотрелась органично 

        
    TE_SetupSparks(posdir50001000); //Делаем искры 
        
    TE_SendToAll(); // Применяем 

        
    TE_SetupEnergySplash(posdirfalse); //Делаем всплеск энергии 
        
    TE_SendToAll(); // Применяем 

        
    TE_SetupSmoke(posg_SteamSprite5.010); //Делаем дым 
        
    TE_SendToAll(); // Применяем 

        // TE_SetupBeamRingPoint(pos, 10.0, 70.0, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 255, 0, 255}, 10, 0); //Можно добавить маяк, если хотите.  
        // TE_SendToAll(); 
        
    if (!dontBroadcast)
            
    SetEventBroadcast(eventtrue); 
    Если честно, не понимаю, что же мы блокируем? Какие-то сообщения, иные эффекты при смерти? Думаю, там вообще этот конец убрать стоит.
    Если игрок пытается сыграть в одном раунде дважды, то его тоже убивает молнией. На вид красивее.
     
    Последнее редактирование: 13 июн 2014
    Николай Черепахин нравится это.
  6. Черная вдова

    Черная вдова

    Сообщения:
    1.621
    Симпатии:
    234
    Старый багнутый плагин
     
  7. Николай Черепахин

    Николай Черепахин

    Сообщения:
    25
    Симпатии:
    2
    подскажи как сменить действие и событие на него?к примеру :"player_death" заменяю на "player_spawn" ? (для отлова события на воскрешение игрока) и убрать молнии из кода , оставить только искры.
    примерно так?
    #include <sdktools>


    public OnPluginStart()
    {
    HookEvent("player_spawn", Event_PlayerSpawn, EventHookMode_Post);
    }


    public Event_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
    {
    new Float:pos[3], Float:startpos[3], Float:dir[3] = {0.0, 0.0, 0.0};

    GetClientAbsOrigin(GetClientOfUserId(GetEventInt(event, "userid")), pos);


    TE_SetupSparks(pos, dir, 5000, 1000);
    TE_SendToAll();


    }
    поправь меня так как компилится с ошибками(
     
  8. WeSTMan

    WeSTMan *Просто я - есть я*

    Сообщения:
    214
    Симпатии:
    39
    PHP:
    public Event_PlayerDeath(Handle:event,const String:name[],bool:dontBroadcast)
    {
        new 
    client GetClientOfUserId(GetEventInt(event"userid"));
        new 
    Float:pos[3];
        
        
    GetClientAbsOrigin(clientpos);

        new 
    randomx GetRandomInt(-500500); // Получаем случайные позиции Х и У, чтобы молния не была однобокой
        
    new randomy GetRandomInt(-500500); 

        
    //Получаем верхнюю точку молнии. Она будет рандомная по Х и У и выше нижней позиции на 800, чтобы молния била сверху вниз
        
    new Float:startpos[3]; 
        
    startpos[0] = pos[0] + randomx
        
    startpos[1] = pos[1] + randomy
        
    startpos[2] = pos[2] + 800

        
    //Делаем цвет молнии (у нас синий)
        
    new color[4] = {00255255}; 

        
    //Делаем направление искр (к началу координат карты)
        
    new Float:dir[3] = {0.00.00.0}; 

        
    TE_SetupBeamPoints(startposposg_LightningSprite0000.220.010.002.0color3); //Делаем лазер с амплитудой в 2 единицы
        
    TE_SendToAll(); // Применяем

        
    TE_SetupBeamPoints(startposposg_LightningSprite0000.210.05.001.0, {255255255255}, 3); //Делаем второй лазер (белый) с амплитудой в 1 единицу
        
    TE_SendToAll(); // Применяем //И в 2 раза уже, чтобы молния смотрелась органично

        
    TE_SetupSparks(posdir50001000); //Делаем искры
        
    TE_SendToAll(); // Применяем

        
    TE_SetupEnergySplash(posdirfalse); //Делаем всплеск энергии
        
    TE_SendToAll(); // Применяем

        
    TE_SetupSmoke(posg_SteamSprite5.010); //Делаем дым
        
    TE_SendToAll(); // Применяем

        // TE_SetupBeamRingPoint(pos, 10.0, 70.0, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 255, 0, 255}, 10, 0); //Можно добавить маяк, если хотите. 
        // TE_SendToAll(); 
        
    return Plugin_Handled;
    }  
    Ахах, улыбнуло)
     
  9. Николай Черепахин

    Николай Черепахин

    Сообщения:
    25
    Симпатии:
    2
    что тебя улыбнуло?
     
  10. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.563
    Симпатии:
    1.988
    Да, верно. Иногда только требуется делать таймер на 0,1-0,3 секунды, когда что-то устанавливаешь с этого события.
    У тебя там всё подписано, убрать лишнее не должно составить проблем:
    PHP:
    #include <sdktools>

    public OnPluginStart() HookEvent("player_spawn"Event_PlayerDeath); 

    public 
    Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)  
    {
        
    //2) Делаем направление искр (к началу координат карты)
        
    new Float:pos[3], Float:dir[3] = {0.00.00.0};
        
    GetClientAbsOrigin(GetClientOfUserId(GetEventInt(event"userid")), pos);
        
    TE_SetupSparks(posdir50001000); //Делаем искры
        
    TE_SendToAll(); // Применяем
    Float:startpos[3] у тебя не нужен, лишний.
     
    Николай Черепахин нравится это.
  11. WeSTMan

    WeSTMan *Просто я - есть я*

    Сообщения:
    214
    Симпатии:
    39
    return Plugin_Handled; Ахах.
     
  12. Николай Черепахин

    Николай Черепахин

    Сообщения:
    25
    Симпатии:
    2
    Знал что поможешь))с меня лайк)