Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

pev [Зомби Класс]

[РЕШЕНО]
Статус пользователя $@NyA
сообщение 28.2.2019, 16:42
Сообщение #1


Иконка группы

Стаж: 18 лет

Сообщений: 987
Благодарностей: 529
Полезность: 1050

Плагин выдает 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
}


Отредактировал: $@NyA, - 28.2.2019, 16:44


МультиМод CS
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя SISA
сообщение 28.2.2019, 22:45
Сообщение #2
Стаж: 15 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

Код
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define MAX_MAP_ENTITYS                400

new g_iNumsEntity[MAX_MAP_ENTITYS], g_fwSpawn;

public plugin_init()
{
    RegisterHam(Ham_Touch, "player", "fw_Player_Touch_Pre", 0);

    // Unreg Forward
    unregister_forward(FM_Spawn, g_fwSpawn);
}

public plugin_precache()
{
    g_fwSpawn = register_forward(FM_Spawn, "fw_Spawn");
}

public fw_Spawn(entity)
{
    new szClassName[32];
    pev(entity, pev_classname, szClassName, charsmax(szClassName));

    if(equal(szClassName, "worldspawn") || equal(szClassName, "func_wall") || equal(szClassName, "func_breakable"))
        g_iNumsEntity[entity] = true;
}

public fw_Player_Touch_Pre(id, world)
{
    if(!g_iNumsEntity[world])
        return HAM_IGNORED;

    if(!g_WallClimb[id] || !is_user_alive(id))
        return FMRES_IGNORED;

    pev(id, pev_origin, g_wallorigin[id]);

    return HAM_IGNORED;
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя $@NyA
сообщение 1.3.2019, 11:52
Сообщение #3


Иконка группы

Стаж: 18 лет

Сообщений: 987
Благодарностей: 529
Полезность: 1050

SISA,
Спасибо.
Я ещё так сделал или это не то?)
Цитата
pev(world, pev_classname, classname, (STR_T-1))

С -1 ошибки нет и робочий класс

Отредактировал: $@NyA, - 1.3.2019, 11:54


МультиМод CS
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 1.3.2019, 17:19
Сообщение #4
Стаж: 15 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

2$@NyA

У вас в плагине код лишенный смысла. Зачем размер массива класснейма выводить в макрос ? Почему нельзя указать его локально и использовать charsmax ? Используете глобальный тач на все энтити (чем это обусловлено, не понятно...), внутри тача делаете какие-то несуразные проверки:

Код
    new player = STR_T
    if (!player)
        return FMRES_IGNORED


дергаете класснейм энтити в каждом кадре + ещё массив создаете, что само по себе является ресурсоемкой задачей.

Отредактировал: SISA, - 1.3.2019, 18:01
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: