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

[ZP] Замедление времени.  [Решено]

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

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

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

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

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

[ZP] Замедление времени.

Сообщение Misha90 » 27 июн 2017, 15:02

Добрый день. Решил поставить плагин slowmo motions как из килинг флор :))) и сделать его чтобы он работал только в раунде выживший и немезида и + замедление времени срабатывало только когда убивает либо выживший, либо немезида, но не ЗОМБИ.

Вписавал в public event_DeathMsg() if(round == MODE_NEMESIS || round == MODE_SURVIVOR)
Потом if(zp_get_user_zombie(victim) && !zp_get_user_nemesis(killer) && !zp_get_user_survivor(killer) && !slow_motion_event)

В итоге ничего не сработало. Помогите. Пожалуйста.

Код: Выделить всё
#include <amxmodx>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
#include <zombieplague>

new const slowmo_start[] = "zombie_plague/slowmo_start.wav"
new const slowmo_end[] = "zombie_plague/slowmo_end.wav"

new bool:slow_motion_event

new cvar_slowmo_speedcvar_slowmo_durationcvar_slowmo_rof
new Float:slowmo_speedFloat:slowmo_durationFloat:slowmo_rof

new g_iCurWeapon[33]

new 
g_iMaxPlayers

new g_bitConnectedPlayersg_bitAlivePlayers

#define MarkUserConnected(%0) g_bitConnectedPlayers |= (1 << (%0 & 31))
#define ClearUserConnected(%0) g_bitConnectedPlayers &= ~(1 << (%0 & 31))
#define IsUserConnected(%0) g_bitConnectedPlayers & (1 << (%0 & 31))

#define MarkUserAlive(%0) g_bitAlivePlayers |= (1 << (%0 & 31))
#define ClearUserAlive(%0) g_bitAlivePlayers &= ~(1 << (%0 & 31))
#define IsUserAlive(%0)    g_bitAlivePlayers & (1 << (%0 & 31))

public plugin_precache()
{
    
precache_sound(slowmo_start)
    
precache_sound(slowmo_end)
}

public 
plugin_init()
{
    
register_event("HLTV""event_new_round""a""1=0""2=0")
    
register_event("DeathMsg""event_DeathMsg""a""1>0")
    
register_event("CurWeapon""event_CurWeapon""be""1=1")
    
    
register_forward(FM_PlayerPreThink"fw_PlayerPreThink")
    
    
RegisterHam(Ham_Spawn"player""fw_PlayerSpawn_Post"1)
    
    
cvar_slowmo_speed register_cvar("zp_slowmo_speed""80.0")
    
cvar_slowmo_duration register_cvar("zp_slowmo_duration""2.5")
    
cvar_slowmo_rof register_cvar("zp_slowmo_rateoffire""3.0")
    
    
g_iMaxPlayers get_maxplayers()
}

public 
client_putinserver(id)
{
    
MarkUserConnected(id)
}

public 
client_disconnect(id)
{
    
ClearUserConnected(id)
    
ClearUserAlive(id)
}

public 
event_new_round()
{
    
slowmo_speed get_pcvar_float(cvar_slowmo_speed)
    
slowmo_duration get_pcvar_float(cvar_slowmo_duration)
    
slowmo_rof get_pcvar_float(cvar_slowmo_rof)
}

public 
event_DeathMsg()
{
    static 
killerkiller read_data(1)
    static 
victimvictim read_data(2)
    
    
ClearUserAlive(victim)
    
    if(
zp_get_user_zombie(victim) && !zp_get_user_zombie(killer) && !slow_motion_event)
    {
        
slow_motion_event true
        client_cmd
(0"spk %s"slowmo_start)
        
        
set_task(slowmo_duration"end_slowmo"0)
    }
}

public 
event_CurWeapon(id)
{
    if(
slow_motion_event)
    {
        
g_iCurWeapon[id] = read_data(2)
        
        if(
slowmo_rof 1.0)
        {
            static 
weapon[32], ent
            get_weaponname
(g_iCurWeapon[id], weapon31)
            
ent fm_find_ent_by_owner(-1weaponid)
            
            if(
ent)
            {
                static 
Float:DelayFloat:M_Delay
                Delay 
get_pdata_float(ent464) * slowmo_rof
                M_Delay 
get_pdata_float(ent474) * slowmo_rof
                
                
if(Delay 0.0)
                {
                    
set_pdata_float(ent46Delay4)
                    
set_pdata_float(ent47M_Delay4)
                }
            }
        }
    }
}

public 
fw_PlayerPreThink(id)
{
    if(
slow_motion_event)
    {
        for (
id 1id <= g_iMaxPlayersid++)
        {
            if(
IsUserConnected(id) && IsUserAlive(id))
            {
                
set_user_maxspeed(idslowmo_speed)
            }
        }
    }
}

public 
fw_PlayerSpawn_Post(id)
{
    if(
is_user_alive(id))
    {
        
MarkUserAlive(id)
    }
}

public 
end_slowmo()
{
    if(
slow_motion_event)
    {
        
slow_motion_event false
        client_cmd
(0"spk %s"slowmo_end)
    }
}

stock fm_find_ent_by_owner(index, const classname[], ownerjghgtype 0)
{
    new 
strtype[11] = "classname"ent index
    
    
switch (jghgtype)
    {
        case 
1strtype "target"
        
case 2strtype "targetname"
    
}

    while ((
ent engfunc(EngFunc_FindEntityByStringentstrtypeclassname)) && pev(entpev_owner) != owner)
    {
        return 
ent
    
}
    return 
ent
Аватара пользователя
Misha90
 
Сообщения: 94
Зарегистрирован: 05 апр 2017, 20:06
Благодарил (а): 49 раз.
Поблагодарили: 2 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: [ZP] Замедление времени.

Сообщение RevCrew » 27 июн 2017, 15:17

Misha90, кажется ты перепутал, ибо victim это жертва а killer убийца.
Поэтому твое условие: ( if( жертва_зомби и убийца не немезида и убийца не выживший))
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: [ZP] Замедление времени.

Сообщение Jeiker » 27 июн 2017, 15:54

Попробуй так, если я правильно понял, что ты хочешь:
Код: Выделить всё
public event_DeathMsg()
{
    static killer; killer = read_data(1)
    static victim; victim = read_data(2)

    if(!zp_is_nemesis_round() || !zp_is_survivor_round())
        return;

    ClearUserAlive(victim)
    
    if
(zp_get_user_survivor(killer) && zp_get_user_zombie(victim) && !zp_get_user_zombie(killer) && !slow_motion_event && victim != killer)
    {
        slow_motion_event = true
        client_cmd
(0, "spk %s", slowmo_start)
        
        set_task
(slowmo_duration, "end_slowmo", 0)
    }
    else if(zp_get_user_nemesis(killer) && !zp_get_user_nemesis(victim) && !zp_get_user_zombie(victim) && !slow_motion_event && victim != killer)
    {
        slow_motion_event = true
        client_cmd
(0, "spk %s", slowmo_start)
        
        set_task
(slowmo_duration, "end_slowmo", 0)
    }
Аватара пользователя
Jeiker
 
Сообщения: 21
Зарегистрирован: 17 июн 2011, 04:28
Благодарил (а): 2 раз.
Поблагодарили: 10 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6
Php

Re: [ZP] Замедление времени.

Сообщение Misha90 » 28 июн 2017, 00:20

Не работает

Добавлено спустя 40 секунд:
Jeiker писал(а):Попробуй так, если я правильно понял, что ты хочешь:
Код: Выделить всё
public event_DeathMsg()
{
    static killer; killer = read_data(1)
    static victim; victim = read_data(2)

    if(!zp_is_nemesis_round() || !zp_is_survivor_round())
        return;

    ClearUserAlive(victim)
    
    if
(zp_get_user_survivor(killer) && zp_get_user_zombie(victim) && !zp_get_user_zombie(killer) && !slow_motion_event && victim != killer)
    {
        slow_motion_event = true
        client_cmd
(0, "spk %s", slowmo_start)
        
        set_task
(slowmo_duration, "end_slowmo", 0)
    }
    else if(zp_get_user_nemesis(killer) && !zp_get_user_nemesis(victim) && !zp_get_user_zombie(victim) && !slow_motion_event && victim != killer)
    {
        slow_motion_event = true
        client_cmd
(0, "spk %s", slowmo_start)
        
        set_task
(slowmo_duration, "end_slowmo", 0)
    }
}



Jeiker не работает
Аватара пользователя
Misha90
 
Сообщения: 94
Зарегистрирован: 05 апр 2017, 20:06
Благодарил (а): 49 раз.
Поблагодарили: 2 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: [ZP] Замедление времени.  [Решено]

Сообщение Jeiker » 29 июн 2017, 03:08

Misha90, странно, вроде все правильно

Добавлено спустя 16 минут:
А...Так надо чтобы замедляло у немезиды и выжившего ? Если так, тогда:
Код: Выделить всё
public event_DeathMsg()
{
    static 
killerkiller read_data(1)
    static 
victimvictim read_data(2)
    
    
ClearUserAlive(victim)
    
    if(
zp_is_nemesis_round() && zp_get_user_nemesis(killer) && !zp_get_user_nemesis(victim) && !slow_motion_event)
    {
        
slow_motion_event true
        client_cmd
(0"spk %s"slowmo_start)
        
        
set_task(slowmo_duration"end_slowmo"0)
    }
    else if(
zp_is_survivor_round() && zp_get_user_survivor(killer) && !zp_get_user_survivor(victim) && !slow_motion_event)
    {
        
slow_motion_event true
        client_cmd
(0"spk %s"slowmo_start)
        
        
set_task(slowmo_duration"end_slowmo"0)
    }


Должно работать.
Аватара пользователя
Jeiker
 
Сообщения: 21
Зарегистрирован: 17 июн 2011, 04:28
Благодарил (а): 2 раз.
Поблагодарили: 10 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6
Php


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10