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

Drop Model [ Random ]  [Решено]

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

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

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

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

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

Drop Model [ Random ]

Сообщение MayroN » 18 май 2018, 19:30

Делаю рандом на выпадение моделей Аптечек

Код: Выделить всё
#define Medkit_Mdl1                "models/medkit_wc/medkit_wc_1.mdl"
#define Medkit_Mdl2                "models/medkit_wc/medkit_wc_2.mdl"
#define Medkit_Mdl3                "models/medkit_wc/medkit_wc_3.mdl"        


Код: Выделить всё
public plugin_precache() 
{
    precache_model(Medkit_Mdl1)
    precache_model(Medkit_Mdl2)
    precache_model(Medkit_Mdl3)


Код: Выделить всё
public dropkit()
{
    if(!get_pcvar_num(gToggleKitEnable))
    {
        return PLUGIN_HANDLED
    
}
    new num = random_num(0,5)
    if(num > 2 || num < 0) return 0
    new gVic
=read_data(2)
    static Float:flOrigin[3]
    pev(gVic,pev_origin,flOrigin)
    new ent=engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
    flOrigin[2]-=36
    engfunc
(EngFunc_SetOrigin,ent,flOrigin)
    if(!pev_valid(ent))
    {
        return PLUGIN_HANDLED
    
}
    switch(random_num(0,2))
        {
        case 0: engfunc(EngFunc_SetModel, ent, Medkit_Mdl1)
        case 1: engfunc(EngFunc_SetModel, ent, Medkit_Mdl2)
        case 2: engfunc(EngFunc_SetModel, ent, Medkit_Mdl3)
    }
    set_pev(ent,pev_classname,gMedKitClassname)
        set_pev(ent, pev_sequence, 1)
        set_pev(ent, pev_framerate, 1.0)
    engfunc(EngFunc_SetModel,ent,szModelKit)
    dllfunc(DLLFunc_Spawn,ent)
    set_pev(ent,pev_solid,SOLID_TRIGGER)
    set_pev(ent,pev_movetype,MOVETYPE_NONE)
    engfunc(EngFunc_SetSize,ent,Float:{-23.160000,-13.660000,-0.050000},Float:{11.470000,12.780000,6.720000})
    engfunc(EngFunc_DropToFloor,ent)
    new KitPick=get_pcvar_num(gKitPickMode)
    new Vic=get_user_team(gVic)
    if(get_pcvar_num(gToggleGlowShow))
    {
        switch(KitPick)
        {
            case 0:
            {
                fm_set_rendering(ent,kRenderFxGlowShell,255,255,255,kRenderFxNone,27)
            }
            case 1:
            {
                switch(Vic)
                {
                    case 1:
                    {
                        fm_set_rendering(ent,kRenderFxGlowShell,0,0,255,kRenderFxNone,27)
                        entity_set_int(ent,EV_INT_team,1)
                    }
                    case 2:
                    {
                        fm_set_rendering(ent,kRenderFxGlowShell,255,0,0,kRenderFxNone,27)
                        entity_set_int(ent,EV_INT_team,2)
                    }
                }
            }
            case 2:
            {
                switch(Vic)
                {
                    case 1:
                    {
                        fm_set_rendering(ent,kRenderFxGlowShell,255,0,0,kRenderFxNone,27)
                        entity_set_int(ent,EV_INT_team,1)
                    }
                    case 2:
                    {
                        fm_set_rendering(ent,kRenderFxGlowShell,0,0,255,kRenderFxNone,27)
                        entity_set_int(ent,EV_INT_team,2)
                    }
                }
            }
        }
    }
    return PLUGIN_HANDLED


Весь готовый код
Код: Выделить всё
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>

#define Medkit_Mdl1                "models/medkit_wc/medkit_wc_1.mdl"
#define Medkit_Mdl2                "models/medkit_wc/medkit_wc_2.mdl"
#define Medkit_Mdl3                "models/medkit_wc/medkit_wc_3.mdl"

new const szModelKit[]="models/medkit_wc.mdl"
new const gMedKitClassname[]="kit_ent"
new gToggleKitEnable,gToggleGlowShow,gGMsgFade,gToggleFadeEnable
new gToggleDelRespawn
,gKitPickMode,gKitHPCvar,gLimitHPCvar,gGMsgItemPickup

public plugin_init
()
{
    register_plugin("Death Medkit Drop","4.2","tuty; 731; Midnight Kid")
    register_event("DeathMsg","dropkit","a")
    register_logevent("logevent",2,"1=Round_Start")
    register_touch("kit_ent","player","forward_FM_Touch")
    gToggleKitEnable=register_cvar("kit_enable","1")
    gToggleGlowShow=register_cvar("kit_glow","0")
    gToggleFadeEnable=register_cvar("kit_fade","1")
    gToggleDelRespawn=register_cvar("kit_del","1")
    gKitPickMode=register_cvar("kit_pick","0")
    gKitHPCvar=register_cvar("kit_hp","15")
    gLimitHPCvar=register_cvar("kit_limit_hp","200")
    gGMsgFade=get_user_msgid("ScreenFade")
}

public plugin_precache()
{
    precache_model(Medkit_Mdl1)
    precache_model(Medkit_Mdl2)
    precache_model(Medkit_Mdl3)
    precache_model(szModelKit)
}

public dropkit()
{
    if(!get_pcvar_num(gToggleKitEnable))
    {
        return PLUGIN_HANDLED
    
}
    new num = random_num(0,5)
    if(num > 2 || num < 0) return 0
    new gVic
=read_data(2)
    static Float:flOrigin[3]
    pev(gVic,pev_origin,flOrigin)
    new ent=engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
    flOrigin[2]-=36
    engfunc
(EngFunc_SetOrigin,ent,flOrigin)
    if(!pev_valid(ent))
    {
        return PLUGIN_HANDLED
    
}
    switch(random_num(0,2))
        {
        case 0: engfunc(EngFunc_SetModel, ent, Medkit_Mdl1)
        case 1: engfunc(EngFunc_SetModel, ent, Medkit_Mdl2)
        case 2: engfunc(EngFunc_SetModel, ent, Medkit_Mdl3)
    }
    set_pev(ent,pev_classname,gMedKitClassname)
        set_pev(ent, pev_sequence, 1)
        set_pev(ent, pev_framerate, 1.0)
    engfunc(EngFunc_SetModel,ent,szModelKit)
    dllfunc(DLLFunc_Spawn,ent)
    set_pev(ent,pev_solid,SOLID_TRIGGER)
    set_pev(ent,pev_movetype,MOVETYPE_NONE)
    engfunc(EngFunc_SetSize,ent,Float:{-23.160000,-13.660000,-0.050000},Float:{11.470000,12.780000,6.720000})
    engfunc(EngFunc_DropToFloor,ent)
    new KitPick=get_pcvar_num(gKitPickMode)
    new Vic=get_user_team(gVic)
    if(get_pcvar_num(gToggleGlowShow))
    {
        switch(KitPick)
        {
            case 0:
            {
                fm_set_rendering(ent,kRenderFxGlowShell,255,255,255,kRenderFxNone,27)
            }
            case 1:
            {
                switch(Vic)
                {
                    case 1:
                    {
                        fm_set_rendering(ent,kRenderFxGlowShell,0,0,255,kRenderFxNone,27)
                        entity_set_int(ent,EV_INT_team,1)
                    }
                    case 2:
                    {
                        fm_set_rendering(ent,kRenderFxGlowShell,255,0,0,kRenderFxNone,27)
                        entity_set_int(ent,EV_INT_team,2)
                    }
                }
            }
            case 2:
            {
                switch(Vic)
                {
                    case 1:
                    {
                        fm_set_rendering(ent,kRenderFxGlowShell,255,0,0,kRenderFxNone,27)
                        entity_set_int(ent,EV_INT_team,1)
                    }
                    case 2:
                    {
                        fm_set_rendering(ent,kRenderFxGlowShell,0,0,255,kRenderFxNone,27)
                        entity_set_int(ent,EV_INT_team,2)
                    }
                }
            }
        }
    }
    return PLUGIN_HANDLED
}

public forward_FM_Touch(ent,id)
{
    if(!pev_valid(ent)||!get_pcvar_num(gToggleKitEnable))
    {
        return FMRES_IGNORED
    
}
    new KitPick=get_pcvar_num(gKitPickMode)
    new own_team=get_user_team(id)
    new find_team=entity_get_int(ent,EV_INT_team)
    switch(KitPick)
    {
        case 1:
        {
            if(find_team==own_team)
            {
                return FMRES_IGNORED
            
}
        }
        case 2:
        {
            if(find_team!=own_team)
            {
                return FMRES_IGNORED
            
}
        }
    }
    new szClassname[32]
    pev(ent,pev_classname,szClassname,charsmax(szClassname))
    if(!equal(szClassname,gMedKitClassname))
    {
        return FMRES_IGNORED
    
}
    new userHP=get_user_health(id)
    new cvarHP=get_pcvar_num(gKitHPCvar)
    new maxHP=get_pcvar_num(gLimitHPCvar)
    if(userHP>=maxHP)
    {
        return FMRES_IGNORED
    
}
    if(maxHP-userHP<cvarHP&&maxHP-userHP>0)
    {
        fm_set_user_health(id,maxHP)
    }
    else
    
{
        fm_set_user_health(id,userHP+cvarHP)
    }
    client_cmd(id, "spk sound/items/smallmedkit1.wav")
    if(get_pcvar_num(gToggleFadeEnable))
    {
        if(KitPick==0)
        {
            message_begin(MSG_ONE_UNRELIABLE,gGMsgFade,_,id)
            write_short(1<<10)
            write_short(1<<10)
            write_short(0x0000)
            write_byte(200)
            write_byte(150)
            write_byte(0)
            write_byte(75)
            message_end()
        }
        if(KitPick==1||KitPick==2)
        {
            switch(own_team)
            {
                case 1:
                {
                    message_begin(MSG_ONE_UNRELIABLE,gGMsgFade,_,id)
                    write_short(1<<10)
                    write_short(1<<10)
                    write_short(0x0000)
                    write_byte(255)
                    write_byte(150)
                    write_byte(0)
                    write_byte(75)
                    message_end()
                }
                case 2:
                {
                    message_begin(MSG_ONE_UNRELIABLE,gGMsgFade,_,id)
                    write_short(1<<10)
                    write_short(1<<10)
                    write_short(0x0000)
                    write_byte(255)
                    write_byte(150)
                    write_byte(0)
                    write_byte(75)
                    message_end()
                }
            }
        }
    }
    engfunc(EngFunc_RemoveEntity,ent)
    if(KitPick==0)
    {
        return PLUGIN_CONTINUE
    
}
    return FMRES_IGNORED
}

public logevent()
{
    if(get_pcvar_num(gToggleDelRespawn))
    {
        new entity=FM_NULLENT
        while
((entity=fm_find_ent_by_class(entity,gMedKitClassname)))
        {
            engfunc(EngFunc_RemoveEntity,entity)
        }
    }
}

stock UTIL_Send_PickMess(const id,const szItemName[])
{
    message_begin(MSG_ONE_UNRELIABLE,gGMsgItemPickup,_,id)
    write_string(szItemName)
    message_end()


Итог: Гдето что-то упустил...
Спасибо за помощь
Последний раз редактировалось MayroN 18 май 2018, 21:41, всего редактировалось 1 раз.
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

Re: Drop Model [ Random ]

Сообщение Mistrick » 18 май 2018, 19:48

Закопипастил всё с одним названием модели.
Аватара пользователя
Mistrick
Скриптер
 
Сообщения: 2940
Зарегистрирован: 04 ноя 2012, 18:15
Благодарил (а): 43 раз.
Поблагодарили: 1247 раз.
Языки программирования: PAWN
С/С++(few above zero)

Re: Drop Model [ Random ]  [Решено]

Сообщение EpisCape » 18 май 2018, 22:12

Код: Выделить всё
public dropkit()
{
    if(!
get_pcvar_num(gToggleKitEnable))
        return 
PLUGIN_HANDLED

    
new num random_num(0,5)
    if(
num || num 0)
        return 
PLUGIN_HANDLED
        
    
new gVic read_data(2), Float:flOrigin[3]
    
pev(gVicpev_originflOrigin)
    
    new 
ent=engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
    
    
engfunc(EngFunc_SetOrigin,ent,flOrigin)
    
    switch(
random_num(0,2))
    {
        case 
0engfunc(EngFunc_SetModelentMedkit_Mdl1)
        case 
1engfunc(EngFunc_SetModelentMedkit_Mdl2)
        case 
2engfunc(EngFunc_SetModelentMedkit_Mdl3)
    }

    
set_pev(ent,pev_classname,gMedKitClassname)
    
set_pev(entpev_sequence1)
    
set_pev(entpev_framerate1.0)
    
engfunc(EngFunc_SetModel,ent,szModelKit)
    
dllfunc(DLLFunc_Spawn,ent)
    
set_pev(ent,pev_solid,SOLID_TRIGGER)
    
set_pev(ent,pev_movetype,MOVETYPE_NONE)
    
engfunc(EngFunc_SetSize,ent,Float:{-23.160000,-13.660000,-0.050000},Float:{11.470000,12.780000,6.720000})

    new 
KitPick=get_pcvar_num(gKitPickMode)
    new 
Vic=get_user_team(gVic)
    if(
get_pcvar_num(gToggleGlowShow))
    {
        switch(
KitPick)
        {
            case 
0fm_set_rendering(ent,kRenderFxGlowShell,255,255,255,kRenderFxNone,27)
            case 
1:
            {
                switch(
Vic)
                {
                    case 
1:
                    {
                        
fm_set_rendering(ent,kRenderFxGlowShell,0,0,255,kRenderFxNone,27)
                        
entity_set_int(ent,EV_INT_team,1)
                    }
                    case 
2:
                    {
                        
fm_set_rendering(ent,kRenderFxGlowShell,255,0,0,kRenderFxNone,27)
                        
entity_set_int(ent,EV_INT_team,2)
                    }
                }
            }
            case 
2:
            {
                switch(
Vic)
                {
                    case 
1:
                    {
                        
fm_set_rendering(ent,kRenderFxGlowShell,255,0,0,kRenderFxNone,27)
                        
entity_set_int(ent,EV_INT_team,1)
                    }
                    case 
2:
                    {
                        
fm_set_rendering(ent,kRenderFxGlowShell,0,0,255,kRenderFxNone,27)
                        
entity_set_int(ent,EV_INT_team,2)
                    }
                }
            }
        }
    }
    
    new 
Float:velocity[3]

    
velocity[0] = random_float(50.0100.0)
    
velocity[1] = random_float(50.0100.0)
    
velocity[2] = random_float(200.0250.0)    
    
    
set_pev(entpev_velocityvelocity
    
    return 
PLUGIN_HANDLED
}  
Аватара пользователя
EpisCape
 
Сообщения: 15
Зарегистрирован: 14 май 2018, 21:47
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Языки программирования: Pawn

Re: Drop Model [ Random ]

Сообщение MayroN » 18 май 2018, 22:37

Mistrick писал(а):Закопипастил всё с одним названием модели.

Было дело - исправил :-)

Добавлено спустя 15 минут 52 секунды:
EpisCape
Спасибо.С твоим вариантом работает.Нужно было ещё дополнительно удалить только ето
Код: Выделить всё
engfunc(EngFunc_SetModel,ent,szModelKit

Иначе некомпиль.

Поднял ты немного вверх модель и правильно,что-бы небыло слитно из оружием.

Кстате.А добавь будь добр ещё сам полёт выкинутый в сторону ( как выкидуеться оружие ) .буду очень признателен
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

Re: Drop Model [ Random ]

Сообщение EpisCape » 19 май 2018, 00:42

MayroN, а сейчас это разве не происходит? Как бы по коду должно:
Код: Выделить всё
    new Float:velocity[3]

    velocity[0] = random_float(50.0, 100.0)
    velocity[1] = random_float(50.0, 100.0)
    velocity[2] = random_float(200.0, 250.0)    
    
    set_pev
(ent, pev_velocity, velocity)
Аватара пользователя
EpisCape
 
Сообщения: 15
Зарегистрирован: 14 май 2018, 21:47
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Языки программирования: Pawn

Re: Drop Model [ Random ]

Сообщение MayroN » 19 май 2018, 01:42

EpisCape,
К сожалению ето непроисходит.Тоже раньше так делал.

Есть примеры функций.Здесь есть точно такое выпадание
Код: Выделить всё
public make_money(id,money,Float:velo[]) {
    new moneybags = money/1000
    new moneyleft 
= money
    new Float
:origin[3]
    new Float:angles[3]
    new Float:mins[3] = {-2.79, -0.0, -6.14}
    new Float:maxs[3] = {2.42, 1.99, 6.35}
    
    if
((moneybags * 1000) < money)    moneybags++
    
    for
(new i = 0; i < moneybags; ++i) {
        new newent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString,"info_target"))
    new num = random_num(0,5)
    if(num > 1 || num < 0)
    switch(random_num(0,1))
    {
        case 0: engfunc(EngFunc_SetModel, newent, money_wc1)
        case 1: engfunc(EngFunc_SetModel, newent, money_wc2)
    }
        if(!is_user_alive(id)) {
            velo[0] = random_float(1.0,150.0)
            velo[1] = random_float(1.0,150.0)
            velo[2] = random_float(1.0,150.0)
        }
        else 
            velo
[2] += 100
        
        pev
(newent,pev_angles,angles)
        angles[1] += random_num(1,360)
        pev(id,pev_origin,origin)
                set_pev(newent, pev_sequence, 1)
                set_pev(newent, pev_gaitsequence, 1)
                set_pev(newent, pev_framerate, 1.0)
                set_pev(newent, pev_frame, 0.0)
                set_pev(newent, pev_animtime, get_gametime())
                set_pev(newent, pev_nextthink, get_gametime() + 0.01)
        set_pev(newent, pev_origin, origin)
        set_pev(newent, pev_classname, "pdm_money")
        engfunc(EngFunc_SetSize,newent,mins,maxs)
        set_pev(newent,pev_angles,angles)
        set_pev(newent, pev_solid, SOLID_TRIGGER)
        set_pev(newent,pev_movetype,MOVETYPE_TOSS)
        set_pev(newent, pev_velocity,velo)
        engfunc(EngFunc_DropToFloor,newent)
        
        if
(moneyleft == 0)    return FMRES_IGNORED
        
        if
(moneyleft < 1000) {
            moneybox[newent]=moneyleft
            moneyleft 
= 0
            return FMRES_IGNORED
        
}
        moneyleft -= 1000
        moneybox
[newent]=1000
    
}
    return FMRES_IGNORED


Код: Выделить всё
public deatha() {
    if(!get_pcvar_num(ison))    return PLUGIN_CONTINUE
    
    new money
, Float:velo[3]
    new victim = read_data(2)
    new killer = read_data(1)
    
    if
(killer && killer != victim)
        fm_set_user_money(killer,fm_get_user_money(killer) - 300)
    
    switch
(get_pcvar_num(method)) {
        case 1:{
            money = get_pcvar_num(m_amount)
            if(fm_get_user_money(victim) < money) {
                money = fm_get_user_money(victim)
                fm_set_user_money(victim,0)
            }
            else    fm_set_user_money(victim,fm_get_user_money(victim) - get_pcvar_num(m_amount))
            }
        case 2:{
            new tempmoney = fm_get_user_money(victim)
            if(money != 1) {
                money = (tempmoney / get_pcvar_num(divide))
                fm_set_user_money(victim,fm_get_user_money(victim) - money)
            }
            else {
                fm_set_user_money(victim,0)
                money = 1
            
}
        }
        case 3:{
            new maxmoney = fm_get_user_money(victim)
            money = random_num(1,maxmoney)
            fm_set_user_money(victim,fm_get_user_money(victim) - money)
        }
        case 4:{
            new tempmoney2[32]
            get_pcvar_string(ran_money,tempmoney2,31)
            new tempmoney[3][6]
            parse(tempmoney2, tempmoney[0], sizeof tempmoney[] - 1,tempmoney[1], sizeof tempmoney[] - 1,tempmoney[2], sizeof tempmoney[] - 1)
            new num = random_num(1,3)
            switch(num) {
                case 1:{
                    money = str_to_num(tempmoney[0])
                }
                case 2:{
                    money = str_to_num(tempmoney[1])
                }
                case 3:{
                    money = str_to_num(tempmoney[2])
                }
            }
            if(fm_get_user_money(victim) < money) {
                fm_set_user_money(victim,0)
                money = fm_get_user_money(victim)
            }
            else    fm_set_user_money(victim,fm_get_user_money(victim) - money)
            }
        case 5:{
            new tempmoney22[32], num_from, num_to
            get_pcvar_string
(random_nums,tempmoney22,31)
            new tempmoney1[2][6]
            parse(tempmoney22, tempmoney1[0], sizeof tempmoney1[] - 1,tempmoney1[1], sizeof tempmoney1[] - 1)
            num_from = str_to_num(tempmoney1[0])
            num_to = str_to_num(tempmoney1[1])
            if(num_to > 16000)    num_to = 16000
            if
(num_from < 0)    num_to = 0
            money 
= random_num(num_from,num_to)
            
            if
(fm_get_user_money(victim) < money) {
                fm_set_user_money(victim,0)
                money = fm_get_user_money(victim)
            }
            else    fm_set_user_money(victim,fm_get_user_money(victim) - money)
            }
    }
    make_money(victim,money,velo)
    return PLUGIN_CONTINUE
}


Добавлено спустя 28 минут 28 секунд:

Розобрался.Нужно было добавить ето
Код: Выделить всё
    set_pev(ent, pev_solid, SOLID_TRIGGER)
    set_pev(ent,pev_movetype,MOVETYPE_TOSS)
    set_pev(ent, pev_velocity,velo)
    engfunc(EngFunc_DropToFloor,ent


И ещё так
Код: Выделить всё
public dropkit(Float:velo[]) 


Итог
Код: Выделить всё
public dropkit(Float:velo[])
{
    if(!get_pcvar_num(gToggleKitEnable))
        return PLUGIN_HANDLED

    new num 
= random_num(0,5)
    if(num > 2 || num < 0)
        return PLUGIN_HANDLED
        
    new gVic 
= read_data(2), Float:flOrigin[3]
    pev(gVic, pev_origin, flOrigin)
    
    new ent
=engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
    flOrigin[2]-=36
    engfunc
(EngFunc_SetOrigin,ent,flOrigin)
    
    switch
(random_num(0,2))
    {
        case 0: engfunc(EngFunc_SetModel, ent, Medkit_1)
        case 1: engfunc(EngFunc_SetModel, ent, Medkit_2)
        case 2: engfunc(EngFunc_SetModel, ent, Medkit_3)
    }

    set_pev(ent,pev_classname,gMedKitClassname)
    set_pev(ent, pev_sequence, 1)
    set_pev(ent, pev_framerate, 1.0)
    dllfunc(DLLFunc_Spawn,ent)
    set_pev(ent, pev_solid, SOLID_TRIGGER)
    set_pev(ent,pev_movetype,MOVETYPE_TOSS)
    set_pev(ent, pev_velocity,velo)
    engfunc(EngFunc_DropToFloor,ent)
    engfunc(EngFunc_SetSize,ent,Float:{-23.160000,-13.660000,-0.050000},Float:{11.470000,12.780000,6.720000})

    new KitPick=get_pcvar_num(gKitPickMode)
    new Vic=get_user_team(gVic)
    if(get_pcvar_num(gToggleGlowShow))
    {
        switch(KitPick)
        {
            case 0: fm_set_rendering(ent,kRenderFxGlowShell,255,255,255,kRenderFxNone,27)
            case 1:
            {
                switch(Vic)
                {
                    case 1:
                    {
                        fm_set_rendering(ent,kRenderFxGlowShell,0,0,255,kRenderFxNone,27)
                        entity_set_int(ent,EV_INT_team,1)
                    }
                    case 2:
                    {
                        fm_set_rendering(ent,kRenderFxGlowShell,255,0,0,kRenderFxNone,27)
                        entity_set_int(ent,EV_INT_team,2)
                    }
                }
            }
            case 2:
            {
                switch(Vic)
                {
                    case 1:
                    {
                        fm_set_rendering(ent,kRenderFxGlowShell,255,0,0,kRenderFxNone,27)
                        entity_set_int(ent,EV_INT_team,1)
                    }
                    case 2:
                    {
                        fm_set_rendering(ent,kRenderFxGlowShell,0,0,255,kRenderFxNone,27)
                        entity_set_int(ent,EV_INT_team,2)
                    }
                }
            }
        }
    }
    
    new Float
:velocity[3]

    velocity[0] = random_float(50.0, 100.0)
    velocity[1] = random_float(50.0, 100.0)
    velocity[2] = random_float(200.0, 250.0)    
    
    set_pev
(ent, pev_velocity, velocity) 
    
    return PLUGIN_HANDLED


Но у меня ФПС в игре равен 10.Видеокарта работает без драйвером.Сижу пока по принципу - "лишь бы работало".То сам полёт даже сложно в игре розобрать при таком количестве кадров :-)
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

Re: Drop Model [ Random ]

Сообщение EpisCape » 19 май 2018, 02:11

MayroN, щас попробую потестить, если что перепишу код чутка.

Добавлено спустя 5 минут 27 секунд:
Разобрался, не сразу заметил, что тип движения заблочен.
Код был рабочий, нужно только заменить одну строчку в нем:

EpisCape писал(а):
Код: Выделить всё
public dropkit()
{
    if(!get_pcvar_num(gToggleKitEnable))
        return PLUGIN_HANDLED

    new num 
= random_num(0,5)
    if(num > 2 || num < 0)
        return PLUGIN_HANDLED
        
    new gVic 
= read_data(2), Float:flOrigin[3]
    pev(gVic, pev_origin, flOrigin)
    
    new ent
=engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
    
    engfunc
(EngFunc_SetOrigin,ent,flOrigin)
    
    switch
(random_num(0,2))
    {
        case 0: engfunc(EngFunc_SetModel, ent, Medkit_Mdl1)
        case 1: engfunc(EngFunc_SetModel, ent, Medkit_Mdl2)
        case 2: engfunc(EngFunc_SetModel, ent, Medkit_Mdl3)
    }

    set_pev(ent,pev_classname,gMedKitClassname)
    set_pev(ent, pev_sequence, 1)
    set_pev(ent, pev_framerate, 1.0)
    engfunc(EngFunc_SetModel,ent,szModelKit)
    dllfunc(DLLFunc_Spawn,ent)
    set_pev(ent,pev_solid,SOLID_TRIGGER)
    set_pev(ent,pev_movetype,MOVETYPE_NONE)
    engfunc(EngFunc_SetSize,ent,Float:{-23.160000,-13.660000,-0.050000},Float:{11.470000,12.780000,6.720000})

    new KitPick=get_pcvar_num(gKitPickMode)
    new Vic=get_user_team(gVic)
    if(get_pcvar_num(gToggleGlowShow))
    {
        switch(KitPick)
        {
            case 0: fm_set_rendering(ent,kRenderFxGlowShell,255,255,255,kRenderFxNone,27)
            case 1:
            {
                switch(Vic)
                {
                    case 1:
                    {
                        fm_set_rendering(ent,kRenderFxGlowShell,0,0,255,kRenderFxNone,27)
                        entity_set_int(ent,EV_INT_team,1)
                    }
                    case 2:
                    {
                        fm_set_rendering(ent,kRenderFxGlowShell,255,0,0,kRenderFxNone,27)
                        entity_set_int(ent,EV_INT_team,2)
                    }
                }
            }
            case 2:
            {
                switch(Vic)
                {
                    case 1:
                    {
                        fm_set_rendering(ent,kRenderFxGlowShell,255,0,0,kRenderFxNone,27)
                        entity_set_int(ent,EV_INT_team,1)
                    }
                    case 2:
                    {
                        fm_set_rendering(ent,kRenderFxGlowShell,0,0,255,kRenderFxNone,27)
                        entity_set_int(ent,EV_INT_team,2)
                    }
                }
            }
        }
    }
    
    new Float
:velocity[3]

    velocity[0] = random_float(50.0, 100.0)
    velocity[1] = random_float(50.0, 100.0)
    velocity[2] = random_float(200.0, 250.0)    
    
    set_pev
(ent, pev_velocity, velocity) 
    
    return PLUGIN_HANDLED


Эту строку
Код: Выделить всё
set_pev(ent,pev_movetype,MOVETYPE_NONE)

на эту:
Код: Выделить всё
set_pev(ent,pev_movetype,MOVETYPE_PUSHSTEP)

Возможно, даже можно вместо типа движения MOVETYPE_PUSHSTEP выставить MOVETYPE_PUSH. Но лучше протестировать, потому что в работе первого я уверен, а в работе второго - нет.
Аватара пользователя
EpisCape
 
Сообщения: 15
Зарегистрирован: 14 май 2018, 21:47
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Языки программирования: Pawn

Re: Drop Model [ Random ]

Сообщение MayroN » 19 май 2018, 03:46

И последнее .Здесь уже по entity_set_ я поставил для рандома.Но вот по полёту - по velocity невыходит.Надеюсь на помощь
Код: Выделить всё
public createArmor(id) {
    new 
num random_num(0,5)
    if(
num || num 0)
        return 
PLUGIN_HANDLED

    
new victim read_data(2//grab user ID who died
   
    
get_armor_values(victim)
   
    if(
g_ArmorAmount[victim] <= float(get_cvar_num("armor_min")))
      return 
PLUGIN_CONTINUE
    
new origin[3]
    new 
Float:fOrigin[3]
    
get_user_origin(victim,origin)
    for(new 
a=0;a<3;a++)
    
fOrigin[a]=float(origin[a])

    
fArmor[victim] = create_entity("info_target")
    switch(
random_num(0,1))
    {
        case 
0entity_set_model(fArmor[victim],armor_wc1)
        case 
1entity_set_model(fArmor[victim],armor_wc2)
    }
    if(
fArmor[victim]) {
    
entity_set_string(fArmor[victim],EV_SZ_classname,"FakeArmor")

      
    new 
Float:MinBox[3]
    new 
Float:MaxBox[3]
    
MinBox[0] = -6.0
    MinBox
[1] = -8.0
    MinBox
[2] = -1.5
    MaxBox
[0] = 6.0
    MaxBox
[1] = 8.0
    MaxBox
[2] = 1.5
      
    entity_set_vector
(fArmor[victim], EV_VEC_minsMinBox)
    
entity_set_vector(fArmor[victim], EV_VEC_maxsMaxBox)
      
    
entity_set_int(fArmor[victim], EV_INT_solidSOLID_BBOX
    
entity_set_int(fArmor[victim], EV_INT_movetypeMOVETYPE_TOSS)
      
      
// Sets iuser1 to victim ID
    
entity_set_int(fArmor[victim], EV_INT_iuser1victim)
      
// Sets iuser3 to Armor Type (kevlar of vest+helm)
    
entity_set_int(fArmor[victim], EV_INT_iuser3g_ArmorType[victim])
      
// Sets iuser4 to Armor Value (amount victim had when he died)
    
entity_set_int(fArmor[victim], EV_INT_iuser4floatround(g_ArmorAmount[victim]))

    
entity_set_origin(fArmor[victim], fOrigin)
    
set_task(float(get_cvar_num("armor_removetime")),"removeThisArmor",fArmor[victim])
   }
    return 
PLUGIN_HANDLED


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

//---------------These values are default, they are added to the CVAR's---------------------
//---------------Change if you want these to be defaulted to the CVAR on SERVER RESTART-----

//----------------------------------------------------------------------
//This is percentage, if its 25, only 25% of dropped armor will be given.
#define ARMOR_TAX "25"
//----------------------------------------------------------------------
// MAX armor allowed, default = 100 (Set higher, if you want players to go over 100 armor.)
#define MAXARMOR "100"
//----------------------------------------------------------------------
// Minimum armor needed for armor to drop when player dies.
#define MINARMOR "15"
//----------------------------------------------------------------------
// Time before Armor is removed from the map in seconds (unless round ends) default=2mins
#define REMOVE_TIME "120"
//----------------------------------------------------------------------
// Start armor amount
#define START_ARMOR_AMOUNT "50"
//----------------------------------------------------------------------
// Start armor type
#define START_ARMOR_TYPE "2" // 1 - KEVLAR \ 2 - VESTHELM
//----------------------------------------------------------------------

//-------------------------------------------------------------------------------------------------------------
//-----------------------------------DO NOT EDIT BELOW THIS LINE-----------------------------------------------
//-------------------------------------------------------------------------------------------------------------
#define KEVLAR       1
#define VESTHELM    2
#define ARMORTYPE_OFFSET 112

#define TITLE "Armor Drop"
#define VERSION "1.0"
#define AUTHOR "OneEyed"

new g_ArmorType[33], Float:g_ArmorAmount[33], fArmor[33]

//Change this if you want a custom kevlar model
new armor_wc1[] = "models/armor_wc/armor_wc_1.mdl"
new armor_wc2[] = "models/armor_wc/armor_wc_2.mdl"
new Float:multiplier

public plugin_precache()
{
    
precache_model(armor_wc1)
    
precache_model(armor_wc2)
}

public 
plugin_init() {
   
register_plugin(TITLEVERSIONAUTHOR)
   
register_cvar(TITLE,VERSION,FCVAR_SERVER)
   
   if(!
cvar_exists("armor_pct"))
      
register_cvar("armor_pct",ARMOR_TAX)
   if(!
cvar_exists("armor_max"))
      
register_cvar("armor_max",MINARMOR)
   if(!
cvar_exists("armor_min"))
      
register_cvar("armor_min",MINARMOR)
   if(!
cvar_exists("armor_removetime"))
      
register_cvar("armor_removetime",REMOVE_TIME)
   if(!
cvar_exists("armor_start_amount"))
      
register_cvar("armor_start_amount",START_ARMOR_AMOUNT)
   if(!
cvar_exists("armor_start_type"))
      
register_cvar("armor_start_type",START_ARMOR_TYPE)
      
   
register_touch("FakeArmor","player","grabArmor")
   
   
register_event("DeathMsg","createArmor","a")
   
register_logevent("Round_Start"2"1=Round_Start")
}

public 
Round_Start() {
    
removeArmor(); 
}

public 
removeArmor() {
   new 
tempid = -1
   
while ( ( tempid find_ent_by_class(tempid"FakeArmor") ) > 0)
      if(
is_valid_ent(tempid)) {
         
remove_entity(tempid)
         
remove_task(tempid)
      }
   return 
PLUGIN_CONTINUE
}
//-------------------------------------------------------------------------------------------------------------
// Set task to this to remove the armor after specified amount of time. (armor_removetime)
public removeThisArmor(id)
   if(
is_valid_ent(id))
      
remove_entity(id)
//-------------------------------------------------------------------------------------------------------------
public grabArmor(pToucherpTouched) {
   if(
is_user_alive(pTouched) && is_user_connected(pTouched) && entity_get_float(pTouched,EV_FL_armorvalue) < float(get_cvar_num("armor_max"))) {
      new 
owner entity_get_int(pToucherEV_INT_iuser1)
      if(
is_valid_ent(fArmor[owner])) {
         
get_armor_values(pTouched)
         
multiplier float(get_cvar_num("armor_pct")) * 0.01
         
         
//Retrieve armor values left on the dropped kevlar
         
new armortype entity_get_int(fArmor[owner], EV_INT_iuser3)
         new 
armoramt entity_get_int(fArmor[owner], EV_INT_iuser4)
         
         
//Set armor accordingly to how player has theirs, and what type they grab.
         
if(g_ArmorType[pTouched] == 0
            
csset_user_armor(pTouchedarmoramt*multiplier, (armortype==1?KEVLAR:VESTHELM))
         else if(
g_ArmorType[pTouched] == && armortype == 1
            
csset_user_armor(pTouchedentity_get_float(pTouched,EV_FL_armorvalue)+(armoramt*multiplier), KEVLAR)
         else if((
g_ArmorType[pTouched] == && armortype == 2) || g_ArmorType[pTouched] == 2
            
csset_user_armor(pTouchedentity_get_float(pTouched,EV_FL_armorvalue)+(armoramt*multiplier), VESTHELM)
         
         
// If their armor goes over MAXARMOR set it to MAXARMOR
         
if(entity_get_float(pTouched,EV_FL_armorvalue) > float(get_cvar_num("armor_max")))
            
entity_set_float(pTouched,EV_FL_armorvaluefloat(get_cvar_num("armor_max")))

         
g_ArmorType[pTouched] = armortype
         remove_entity
(fArmor[owner])
         
remove_task(fArmor[owner])
      }
   }
   return 
PLUGIN_HANDLED
}
//-------------------------------------------------------------------------------------------------------------
public createArmor(id) {
    new 
num random_num(0,5)
    if(
num || num 0)
        return 
PLUGIN_HANDLED

    
new victim read_data(2//grab user ID who died
   
    
get_armor_values(victim)
   
    if(
g_ArmorAmount[victim] <= float(get_cvar_num("armor_min")))
      return 
PLUGIN_CONTINUE
    
new origin[3]
    new 
Float:fOrigin[3]
    
get_user_origin(victim,origin)
    for(new 
a=0;a<3;a++)
    
fOrigin[a]=float(origin[a])

    
fArmor[victim] = create_entity("info_target")
    switch(
random_num(0,1))
    {
        case 
0entity_set_model(fArmor[victim],armor_wc1)
        case 
1entity_set_model(fArmor[victim],armor_wc2)
    }
    if(
fArmor[victim]) {
    
entity_set_string(fArmor[victim],EV_SZ_classname,"FakeArmor")

      
    new 
Float:MinBox[3]
    new 
Float:MaxBox[3]
    
MinBox[0] = -6.0
    MinBox
[1] = -8.0
    MinBox
[2] = -1.5
    MaxBox
[0] = 6.0
    MaxBox
[1] = 8.0
    MaxBox
[2] = 1.5
      
    entity_set_vector
(fArmor[victim], EV_VEC_minsMinBox)
    
entity_set_vector(fArmor[victim], EV_VEC_maxsMaxBox)
      
    
entity_set_int(fArmor[victim], EV_INT_solidSOLID_BBOX
    
entity_set_int(fArmor[victim], EV_INT_movetypeMOVETYPE_TOSS)
      
      
// Sets iuser1 to victim ID
    
entity_set_int(fArmor[victim], EV_INT_iuser1victim)
      
// Sets iuser3 to Armor Type (kevlar of vest+helm)
    
entity_set_int(fArmor[victim], EV_INT_iuser3g_ArmorType[victim])
      
// Sets iuser4 to Armor Value (amount victim had when he died)
    
entity_set_int(fArmor[victim], EV_INT_iuser4floatround(g_ArmorAmount[victim]))

    
entity_set_origin(fArmor[victim], fOrigin)
    
set_task(float(get_cvar_num("armor_removetime")),"removeThisArmor",fArmor[victim])
   }
    return 
PLUGIN_HANDLED
}
//-------------------------------------------------------------------------------------------------------------
public get_armor_values(id) {
    if(
entity_get_float(id,EV_FL_armorvalue) <= 0.0) {
        
g_ArmorType[id] = get_cvar_num("armor_start_type")
        
g_ArmorAmount[id] = float(get_cvar_num("armor_start_amount"))
    }
    else {
        
g_ArmorAmount[id] = entity_get_float(id,EV_FL_armorvalue)
        
g_ArmorType[id] = get_pdata_int(id,ARMORTYPE_OFFSET)
    }   
}
//-------------------------------------------------------------------------------------------------------------
//Cstrike.inc has this function, but its broken, so i made my own that works =).
public csset_user_armor(idFloat:amounttype) {
   
entity_set_float(id,EV_FL_armorvalueamount)
   
set_pdata_int(id,ARMORTYPE_OFFSET,type)   
}
//-------------------------------------------------------------------------------------------------------------       
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

Re: Drop Model [ Random ]

Сообщение EpisCape » 19 май 2018, 04:07

MayroN, прошу.

Код: Выделить всё
public createArmor(id)
{
    new 
num random_num(05)
    
    if(
num || num 0)
        return 
PLUGIN_HANDLED

    
new victim read_data(2//grab user ID who died
   
    
get_armor_values(victim)
   
    if(
g_ArmorAmount[victim] <= float(get_cvar_num("armor_min")))
        return 
PLUGIN_CONTINUE
        
    
new Float:fOrigin[3]
    
pev(victimpev_originfOrigin);
    
    
fArmor[victim] = create_entity("info_target")
    
    
entity_set_string(fArmor[victim],EV_SZ_classname,"FakeArmor")
    
entity_set_origin(fArmor[victim], fOrigin)
      
    
entity_set_vector(fArmor[victim], EV_VEC_minsFloat: {-6.0, -8.0, -1.5})
    
entity_set_vector(fArmor[victim], EV_VEC_maxsFloat: {6.08.01.5})
      
    
entity_set_int(fArmor[victim], EV_INT_solidSOLID_TRIGGER
    
entity_set_int(fArmor[victim], EV_INT_movetypeMOVETYPE_PUSHSTEP)
      
          switch(
random_num(0,1))
    {
        case 
0entity_set_model(fArmor[victim],armor_wc1)
        case 
1entity_set_model(fArmor[victim],armor_wc2)
    }
      
    
// Sets iuser1 to victim ID
    
entity_set_int(fArmor[victim], EV_INT_iuser1victim)
    
// Sets iuser3 to Armor Type (kevlar of vest+helm)
    
entity_set_int(fArmor[victim], EV_INT_iuser3g_ArmorType[victim])
    
// Sets iuser4 to Armor Value (amount victim had when he died)
    
entity_set_int(fArmor[victim], EV_INT_iuser4floatround(g_ArmorAmount[victim]))

    new 
FloatfVelocity[3];
    
    
fVelocity[0] = random_float(50.0100.0)
    
fVelocity[1] = random_float(50.0100.0)
    
fVelocity[2] = random_float(200.0250.0)
    
    
entity_set_vector(fArmor[victim], EV_VEC_velocityfVelocity)
    
    
set_task(float(get_cvar_num("armor_removetime")),"removeThisArmor",fArmor[victim])
    
    return 
PLUGIN_HANDLED
Аватара пользователя
EpisCape
 
Сообщения: 15
Зарегистрирован: 14 май 2018, 21:47
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Языки программирования: Pawn

Re: Drop Model [ Random ]

Сообщение MayroN » 19 май 2018, 14:31

EpisCape,
Работает.Да Большое спасибо :thumbs_up
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...


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

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

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