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

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

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

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

[Entity] Соприкосновение и исчезание

OverGame
сообщение 30.3.2015, 17:32
Сообщение #1
Стаж: 11 лет

Сообщений: 384
Благодарностей: 217
Полезность: 348

Давно возился с Entity и многое позабыл, в то время было не до него.
Проблема в том что, когда подходишь в объекту он не удаляется.
И еще, есть ли функция которая удаляет все entity сразу? Или нужно будет юзать запись в буффер?

Код:
#include < amxmodx >
#include < engine >

new const models [ ][ ] =
{
"models/kp/kp_1.mdl",
"models/kp/kp_2.mdl"
}

public plugin_init ( )
{
register_plugin ( "Killing Presents", "1.0", "OverGame" )

register_touch ( "player", "killing_present", "fwd_touch" )
register_event ( "DeathMsg", "event_killing", "a" )
}

public event_killing ( )
{
new iKiller = read_data ( 1 )
new iVictim = read_data ( 2 )

if ( iKiller == iVictim )
return PLUGIN_HANDLED

add_kp ( iVictim )

return PLUGIN_HANDLED
}

public plugin_precache ( )
{
for ( new i; i < sizeof ( models ); i++ )
precache_model ( models [ i ] )
}

public fwd_touch ( id, other )
{
remove_entity ( other )
}

stock add_kp ( id )
{
new key_r = random_num ( 0, sizeof ( models ) )
new ent = create_entity ( "info_target" )

if ( is_valid_ent ( ent ) )
{
new Float:f_Origin [ 3 ]
entity_get_vector ( id, EV_VEC_origin, f_Origin )
entity_set_string ( ent, EV_SZ_classname, "killing_present" )
entity_set_origin ( ent, f_Origin )
entity_set_model ( ent, models [ key_r] )

entity_set_int ( ent, EV_INT_solid, SOLID_BBOX )
drop_to_floor ( ent )
}
}


Отредактировал: OverGame, - 30.3.2015, 17:32
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя proff_q
сообщение 30.3.2015, 17:38
Сообщение #2
Стаж: 14 лет

Сообщений: 357
Благодарностей: 263
Полезность: 804

Попробуй не сразу удалять объект, а вызвать функцию, а в ней удалить.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 30.3.2015, 17:40
Сообщение #3
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

удалить все энтити, да ты шутник однако, игроки ведь тоже ентити :)

native register_touch(const Touched[], const Toucher[], const function[]);


public fwd_touch ( id, other ) remove_entity ( other )

ты удаляешь игрока а не ентити

>> public fwd_touch ( id ) remove_entity ( id )

Если не ошибаюсь 2й аргумент можно опустить

Отредактировал: csnet, - 30.3.2015, 17:43


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя miRror
сообщение 30.3.2015, 17:41
Сообщение #4


Стаж: 15 лет

Сообщений: 1151
Благодарностей: 1002
Полезность: 967

Меценат Меценат

remove_entity_name есть
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 30.3.2015, 17:45
Сообщение #5
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

Цитата(miRror @ 30.3.2015, 18:41) *
remove_entity_name есть


не суть как, он удаляет ентити игрока а не саму ентити, с аргументом ошибся, не 2й а 1й нужен


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
OverGame
сообщение 30.3.2015, 17:45
Сообщение #6
Стаж: 11 лет

Сообщений: 384
Благодарностей: 217
Полезность: 348

Цитата(miRror @ 30.3.2015, 17:41) *
remove_entity_name есть


Нашел еще, но потом с ней поработаю. Сейчас буду тестировать то, что вышло...
find_ent_by_class Функция ищет объекты по имени класса
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 30.3.2015, 17:48
Сообщение #7
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

ну там элементарно через while


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
OverGame
сообщение 30.3.2015, 17:50
Сообщение #8
Стаж: 11 лет

Сообщений: 384
Благодарностей: 217
Полезность: 348

Гхм, проблема именно в соприкосновение

Код:
#include < amxmodx >
#include < engine >

new const models [ ][ ] =
{
"models/kp/kp_1.mdl",
"models/kp/kp_2.mdl"
}

public plugin_init ( )
{
register_plugin ( "Killing Presents", "1.0", "OverGame" )

register_touch ( "player", "killing_present", "fwd_touch" )
register_event ( "DeathMsg", "event_killing", "a" )
}

public plugin_precache ( )
{
for ( new i; i < sizeof ( models ); i++ )
precache_model ( models [ i ] )
}

public event_killing ( )
{
new iKiller = read_data ( 1 )
new iVictim = read_data ( 2 )

if ( iKiller == iVictim )
return PLUGIN_HANDLED

add_kp ( iVictim )

return PLUGIN_HANDLED
}

public fwd_touch ( id, other )
{
ShowMsg ( id, "[Игрок] : Соприкосновение" )
ShowMsg ( other, "[Entity] : Соприкосновение" )
}

stock add_kp ( id )
{
new key_r = random_num ( 0, sizeof ( models ) )
new ent = create_entity ( "info_target" )
new entity_class [ 128 ]

if ( is_valid_ent ( ent ) )
{
new Float:f_Origin [ 3 ]
entity_get_vector ( id, EV_VEC_origin, f_Origin )
entity_set_origin ( ent, f_Origin )
entity_set_model ( ent, models [ key_r] )

entity_set_string ( ent, EV_SZ_classname, "killing_present" )
entity_set_int ( ent, EV_INT_solid, SOLID_BBOX )
drop_to_floor ( ent )
}

entity_get_string ( ent, EV_SZ_classname, entity_class, charsmax ( entity_class ) )
ShowMsg ( 0, "Создан объект! ID %d, CLASS %s", ent, entity_class )
}

stock ShowMsg ( const id, const input [ ], any:... )
{
new count = 1, players [ 32 ]
static msg [ 188 ]
vformat ( msg, 187, input, 3 )

replace_all ( msg, 187, "!g", "^4" )
replace_all ( msg, 187, "!y", "^1" )
replace_all ( msg, 187, "!t", "^3" )

if ( id ) players [ 0 ] = id; else get_players ( players, count, "ch" )
{
for ( new i = 0; i < count; i++ )
{
if ( is_user_connected ( players [ i ] ) )
{
message_begin ( MSG_ONE_UNRELIABLE, get_user_msgid ( "SayText" ), _, players [ i ] )
write_byte ( players [ i ] )
write_string ( msg )
message_end ( )
}
}
}
}

Прикрепленные файлы:
Прикрепленное изображение
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 30.3.2015, 18:00
Сообщение #9
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

декларировать класс правильнее вначале плагина

new classname[] = "my_class_name"


{
...
entity_set_string ( ent, EV_SZ_classname, classname )
}

далее, тач не срабатывает потому что ты не указал виртуальные размеры обьекта ака minbox / maxbox

я как то не мало помучался когда писал soccerjam никак не хотел работать тач на ворота.

Отредактировал: csnet, - 30.3.2015, 18:02


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя [WPMG]PRoSToTeM@
сообщение 30.3.2015, 18:26
Сообщение #10
Стаж: 13 лет

Сообщений: 1514
Благодарностей: 1025
Полезность: 725

Цитата(miRror @ 30.3.2015, 18:41) *
remove_entity_name есть

Он жеж просил все энтити сразу, а не по определённому класснейму.

А так солид нужен.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nixon
сообщение 30.3.2015, 18:30
Сообщение #11


Стаж: 12 лет

Сообщений: 399
Благодарностей: 192
Полезность: 589

Разве первый аргумент не ентити? А второй игрок?

А удалить можно через вайл

Код:
while((iEnt = find_ent_by_class(iEnt, "name")))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя [WPMG]PRoSToTeM@
сообщение 30.3.2015, 18:45
Сообщение #12
Стаж: 13 лет

Сообщений: 1514
Благодарностей: 1025
Полезность: 725

Код:
register_touch("TouchedClassname", "ToucherClassname", "Touch");

public Touch(nTouchedIndex, nToucherIndex) {
}

И в той, и в другой функции первый аргумент это Touched (тот кого коснулись), а второй аргумент это Toucher (тот кто коснулся).
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
OverGame
сообщение 31.3.2015, 12:13
Сообщение #13
Стаж: 11 лет

Сообщений: 384
Благодарностей: 217
Полезность: 348

Действий при столкновении никаких, самое странное это то, что entity не осязаемая...

Код:
#include < amxmodx >
#include < engine >

new classname[] = "killing_present"
new const models [ ][ ] =
{
"models/kp/kp_1.mdl",
"models/kp/kp_2.mdl"
}

public plugin_init ( )
{
register_plugin ( "Killing Presents", "1.0", "OverGame" )

register_touch ( classname, "player", "fwd_touch" )
register_event ( "DeathMsg", "event_killing", "a" )
register_logevent ( "logevent_round_end", 2, "1=Round_End" )
}

public plugin_precache ( )
{
for ( new i; i < sizeof ( models ); i++ )
precache_model ( models [ i ] )
}

public event_killing ( )
{
new iKiller = read_data ( 1 )
new iVictim = read_data ( 2 )

if ( iKiller == iVictim )
return PLUGIN_HANDLED

add_kp ( iVictim )

return PLUGIN_HANDLED
}

public fwd_touch ( kp_id, id )
{
remove_entity ( kp_id )
}

stock add_kp ( id )
{
new key_r = random_num ( 0, sizeof ( models ) )
new ent = create_entity ( "info_target" )

if ( is_valid_ent ( ent ) )
{
new Float:f_Origin [ 3 ]
entity_get_vector ( id, EV_VEC_origin, f_Origin )
entity_set_origin ( ent, f_Origin )
entity_set_model ( ent, models [ key_r] )

entity_set_string ( ent, EV_SZ_classname, classname )
entity_set_int ( ent, EV_INT_solid, SOLID_BBOX )
drop_to_floor ( ent )
}
}

public logevent_round_end ( )
{
new iEnt
while ( ( iEnt = find_ent_by_class ( iEnt, classname ) ) )
{
remove_entity ( iEnt )
}
}

stock ShowMsg ( const id, const input [ ], any:... )
{
new count = 1, players [ 32 ]
static msg [ 188 ]
vformat ( msg, 187, input, 3 )

replace_all ( msg, 187, "!g", "^4" )
replace_all ( msg, 187, "!y", "^1" )
replace_all ( msg, 187, "!t", "^3" )

if ( id ) players [ 0 ] = id; else get_players ( players, count, "ch" )
{
for ( new i = 0; i < count; i++ )
{
if ( is_user_connected ( players [ i ] ) )
{
message_begin ( MSG_ONE_UNRELIABLE, get_user_msgid ( "SayText" ), _, players [ i ] )
write_byte ( players [ i ] )
write_string ( msg )
message_end ( )
}
}
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя iLLuSioN
сообщение 31.3.2015, 12:48
Сообщение #14
Иконка группы

Стаж: 19 лет

Сообщений: 6911
Благодарностей: 7990
Полезность: 1639

OverGame, а размер ентити кто будет выставлять? EngFunc_SetSize


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
OverGame
сообщение 31.3.2015, 12:56
Сообщение #15
Стаж: 11 лет

Сообщений: 384
Благодарностей: 217
Полезность: 348

Цитата(iLLuSioN @ 31.3.2015, 13:48) *
OverGame, а размер ентити кто будет выставлять? EngFunc_SetSize


Осталась проблема с соприкосновением

Код:
stock add_kp ( id )
{
new key_r = random_num ( 0, sizeof ( models ) )
new ent = create_entity ( "info_target" )

if ( is_valid_ent ( ent ) )
{
entity_set_model ( ent, models [ key_r] )
entity_set_size ( ent, Float:{-6.0, -10.0, 0.0}, Float:{6.0, 10.0, 36.0} )

new Float:f_Origin [ 3 ]
entity_get_vector ( id, EV_VEC_origin, f_Origin )
entity_set_origin ( ent, f_Origin )

entity_set_string ( ent, EV_SZ_classname, classname )
entity_set_int ( ent, EV_INT_solid, SOLID_BBOX )
drop_to_floor ( ent )
}
}


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