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

amx_heconc гранатой отталкивает игрока

Все вопросы по работе и настройке AMXX и его плагинов.

Модератор: liFe iS GoOD

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

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

amx_heconc гранатой отталкивает игрока

Сообщение Don Corleone » 30 дек 2017, 20:05

Здравствуйте, не подскажите как исправить данную ошибку?

Код: Выделить всё
[ENGINEInvalid entity 144
L 12
/30/2017 15:24:38: [AMXXDisplaying debug trace (plugin "amx_heconc.amxx")
L 12/30/2017 15:24:38: [AMXXRun time error 10native error (native "entity_get_string")
L 12/30/2017 15:24:38: [AMXX]    [0amx_heconc.sma::hedamage_event (line 75)
 


Код: Выделить всё
/* AMX Mod script.
*
* HE-CONC 1.0
*  by ThantiK
*
*
* Description:
*  Remember CONC jumping in TFC? -- This adds the knockback to the HE 'nades
*  its great to set higher or lower depending on your wants.  But definately
*  adds some spunk to the game.
*  
* Commands:
*  CVAR - he_push, set higher or lower depending on the effect you want.
*
* Special Thanks:
*  JGHG for the help with setting velocity, and for the code on getting HE coords.
*  Ryan (War3 Expansion guy) for the mathematics and velocity stocks.
*/

#include <amxmodx> 
#include <amxmisc> 
#include <engine> 

#define SPEED 800.0

public plugin_init() { 
    
register_plugin("HE Knockback""1.0""ThantiK")
    
register_event("Damage""hedamage_event""b""2!0""4!0""5!0""6!0")
    
register_cvar("he_push","20.0")


stock get_velocity_from_originentFloat:fOrigin[3], Float:fSpeedFloat:fVelocity[3] )
{
    new 
Float:fEntOrigin[3];
    
entity_get_vectorentEV_VEC_originfEntOrigin );

    
// Velocity = Distance / Time

    
new Float:fDistance[3];
    
fDistance[0] = fEntOrigin[0] - fOrigin[0];
    
fDistance[1] = fEntOrigin[1] - fOrigin[1];
    
fDistance[2] = fEntOrigin[2] - fOrigin[2];

    new 
Float:fTime = ( vector_distancefEntOrigin,fOrigin ) / fSpeed );

    
fVelocity[0] = fDistance[0] / fTime;
    
fVelocity[1] = fDistance[1] / fTime;
    
fVelocity[2] = fDistance[2] / fTime;

    return ( 
fVelocity[0] && fVelocity[1] && fVelocity[2] );
}


// Sets velocity of an entity (ent) away from origin with speed (speed)

stock set_velocity_from_originentFloat:fOrigin[3], Float:fSpeed )
{
    new 
Float:fVelocity[3];
    
get_velocity_from_originentfOriginfSpeedfVelocity )

    
entity_set_vectorentEV_VEC_velocityfVelocity );

    return ( 
);


public 
hedamage_event(id) {
    new 
MAXPLAYERS
    MAXPLAYERS 
get_maxplayers()

    new 
inflictor entity_get_edict(idEV_ENT_dmg_inflictor)
    if (
inflictor <= MAXPLAYERS)
        return 
PLUGIN_CONTINUE

    
new classname2[8]
    
entity_get_string(inflictorEV_SZ_classnameclassname27)
    if (!
equal(classname2"grenade"))
        return 
PLUGIN_CONTINUE

    
new Float:upVector[3]
    
upVector[0] = float(read_data(4))
    
upVector[1] = float(read_data(5))
    
upVector[2] = float(read_data(6))

    new 
damagerept read_data(2)
    
set_velocity_from_origin(idupVectorget_cvar_float("he_push")*damagerept)

    return 
PLUGIN_CONTINUE
}

 
Аватара пользователя
Don Corleone
 
Сообщения: 79
Зарегистрирован: 23 окт 2016, 16:13
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: amx_heconc гранатой отталкивает игрока

Сообщение Subb98 » 30 дек 2017, 20:07

Don Corleone, добрый вечер. Нужно добавить проверку на валидность entity. Вы должны зарегистрироваться, чтобы видеть ссылки.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: amx_heconc гранатой отталкивает игрока

Сообщение БиЗоН » 02 янв 2018, 19:34

Код: Выделить всё
//engine
if(!is_valid_ent(iEnt))
return PLUGIN_CONTINUE

>>
Код: Выделить всё
public hedamage_event(id) {
    new MAXPLAYERS
    MAXPLAYERS 
= get_maxplayers()

    new inflictor = entity_get_edict(id, EV_ENT_dmg_inflictor)
    if (inflictor <= MAXPLAYERS)
        return PLUGIN_CONTINUE

    if
(!is_valid_ent(inflictor)) // Проверка на существование
    return PLUGIN_CONTINUE
    
    new classname2
[8]
    entity_get_string(inflictor, EV_SZ_classname, classname2, 7)
    if (!equal(classname2, "grenade"))
        return PLUGIN_CONTINUE

    new Float
:upVector[3]
    upVector[0] = float(read_data(4))
    upVector[1] = float(read_data(5))
    upVector[2] = float(read_data(6))

    new damagerept = read_data(2)
    set_velocity_from_origin(id, upVector, get_cvar_float("he_push")*damagerept)

    return PLUGIN_CONTINUE
}
Вечно занятой. Вечно в павне.
Аватара пользователя
БиЗоН
 
Сообщения: 165
Зарегистрирован: 24 мар 2014, 21:05
Благодарил (а): 10 раз.
Поблагодарили: 49 раз.
Опыт программирования: Больше трех лет


Вернуться в Вопросы по AMXX и его плагинам

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

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