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

pev [Зомби Класс]  [Решено]

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

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

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

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

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

pev [Зомби Класс]  [Решено]

Сообщение MayroN » 28 фев 2019, 18:11

Плагин выдает pev ошибку в функции public fwd_touch(id, world)
Что же там случилось?Есть решение?

Можна сделать так - но потом класс неробочий становиться
Код: Выделить всё
if(!pev_valid(world))
      return 
FMRES_IGNORED;  


Код: Выделить всё
public fwd_touch(id, world)
{
    if(!is_user_alive(id) || !g_WallClimb[id])
        return FMRES_IGNORED
    new player 
= STR_T
    if 
(!player)
        return FMRES_IGNORED
        
    new classname
[STR_T]
    pev(world, pev_classname, classname, (STR_T))
    
    if
(equal(classname, "worldspawn") || equal(classname, "func_wall") || equal(classname, "func_breakable"))
        pev(id, pev_origin, g_wallorigin[id])

    return FMRES_IGNORED
}


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

#include <cstrike>
#include <zombieplague.inc>

//#include <fakemeta_util>
#define STR_T           32

// Stuff taken from fakemeta_util
#define fm_get_user_button(%1) pev(%1, pev_button)    
/* stock fm_get_user_button(index)
    return pev(index, pev_button) */

#define fm_get_entity_flags(%1) pev(%1, pev_flags)
/* stock fm_get_entity_flags(index)
    return pev(index, pev_flags) */

stock fm_set_user_velocity(entity, const Float:vector[3]) {
    set_pev(entity, pev_velocity, vector);

    return 1;
}
//End of stuff from fakemeta_util
//new STR_T[32]
new bool:g_WallClimb[33]
new Float:g_wallorigin[32][3]
new cvar_zp_wallclimb, cvar_zp_wallclimb_nemesis, cvar_zp_wallclimb_survivor
new g_zclass_climb

// Climb Zombie Atributes
new const zclass_name[] = { "Краб" } // name
new const zclass_info[] = { "Ползун по стенам" } // description
new const zclass_model[] = { "headcrab" } // model
new const zclass_clawmodel[] = { "alienclaws.mdl" } // claw model
const zclass_health = 2000 // health
const zclass_speed = 330 // speed
const Float:zclass_gravity = 0.5 // gravity
const Float:zclass_knockback = 0.8 // knockback

public plugin_init() 
{
    register_plugin("[ZP] Wallclimb ", "1.0", "WallClimb by Python1320/Cheap_Suit, Plagued by Dabbi")
    register_forward(FM_Touch,         "fwd_touch")
    register_forward(FM_PlayerPreThink,     "fwd_playerprethink")
    //register_forward(FM_PlayerPostThink,     "fwd_playerpostthink")
    register_event("DeathMsg","EventDeathMsg","a")
    //register_cvar("zp_wallclimb_version", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY)
    cvar_zp_wallclimb = register_cvar("zp_wallclimb", "1")
    cvar_zp_wallclimb_survivor = register_cvar("zp_wallclimb_survivor", "0")
    cvar_zp_wallclimb_nemesis = register_cvar("zp_wallclimb_nemesis", "0")
    
}

public plugin_precache()
{
    g_zclass_climb = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)
}

public EventDeathMsg()    
{
    new id = read_data(2)
    g_WallClimb[id] = true
    return PLUGIN_HANDLED
}

public client_connect(id) {
    g_WallClimb[id] = true    
}

public fwd_touch(id, world)
{
    if(!is_user_alive(id) || !g_WallClimb[id])
        return FMRES_IGNORED
    new player 
= STR_T
    if 
(!player)
        return FMRES_IGNORED
        
    new classname
[STR_T]
    pev(world, pev_classname, classname, (STR_T))
    
    if
(equal(classname, "worldspawn") || equal(classname, "func_wall") || equal(classname, "func_breakable"))
        pev(id, pev_origin, g_wallorigin[id])

    return FMRES_IGNORED
}

public wallclimb(id, button)
{
    static Float:origin[3]
    pev(id, pev_origin, origin)

    if(get_distance_f(origin, g_wallorigin[id]) > 25.0)
        return FMRES_IGNORED  // if not near wall
    
    if
(fm_get_entity_flags(id) & FL_ONGROUND)
        return FMRES_IGNORED
        
    if
(button & IN_FORWARD)
    {
        static Float:velocity[3]
        velocity_by_aim(id, 120, velocity)
        fm_set_user_velocity(id, velocity)
    }
    else if(button & IN_BACK)
    {
        static Float:velocity[3]
        velocity_by_aim(id, -120, velocity)
        fm_set_user_velocity(id, velocity)
    }
    return FMRES_IGNORED
}    

public fwd_playerprethink
(id) 
{
    if(!g_WallClimb[id] || !zp_get_user_zombie(id)) 
        return FMRES_IGNORED
        
    if
(zp_is_survivor_round() && get_pcvar_num(cvar_zp_wallclimb_survivor) == 0)
        return FMRES_IGNORED
        
    if
(zp_is_nemesis_round() && get_pcvar_num(cvar_zp_wallclimb_nemesis) == 0)
        return FMRES_IGNORED
    
    new button 
= fm_get_user_button(id)
    
    if
((get_pcvar_num(cvar_zp_wallclimb) == 1) && (button & IN_USE) && (zp_get_user_zombie_class(id) == g_zclass_climb)) //Use button = climb
    wallclimb(id, button)
    else if((get_pcvar_num(cvar_zp_wallclimb) == 2) && (button & IN_JUMP) && button & IN_DUCK && (zp_get_user_zombie_class(id) == g_zclass_climb)) //Jump + Duck = climb
    wallclimb(id, button)

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

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

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

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