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

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

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

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

Заспавнить entity в координатах

Статус пользователя GOOD FELLOW
сообщение 17.4.2015, 10:24
Сообщение #1


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

Стаж: 13 лет

Сообщений: 2294
Благодарностей: 1187
Полезность: 890

Всем хай:)
Пишу плагин, дабы поработать хоть раз с ентити. Пока все норме, так как стоит спавн энтити при вводе команды.
Но у меня другая задумка: хочу спавнить их в начале карты в определенных координатах.
Создал вспомогательную функцию, чтобы узнать координаты места, где стоит игрок, конвертировал их во Float.
Попробовал заспавнить, задав координаты через entity_set_origin, но что-то не дало результата.
Используя float координаты были очень длинными. Короче говоря, не могу разобраться.
Поделитесь мини-кодом, как будет правильно задать координаты?
И вот еще:
Создание проходит так:
Например, событие нового раунда, Там создаю свою энтити с координатами и тд.
По кнопке если, то все норм. Нужно только так.
Надеюсь, что вы поняли:)
И если выставить координаты три раза, т.е. Вызвать 3 раза entity_set_origin, то мое энтити появится в трех местах, верно?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Nixon
сообщение 17.4.2015, 10:42
Сообщение #2


Стаж: 12 лет

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

А зачем их переводить во флоат? Если получать координаты объекта, то они уже во флоат(но смотря как получать).
Можно так
Код:

new Float: fOrigin[3];
entity_get_vector(id, EV_VEC_origin, fOrigin); - взять
entity_set_origin(id, fOrigin); - установить

Если через fakemet'y
new Float: fOrigin[3];
pev(id, pev_origin, fOrigin); - взять
set_pev(id, pev_origin, fOrigin); - установить


Отредактировал: Nixon, - 17.4.2015, 10:45
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя GOOD FELLOW
сообщение 17.4.2015, 10:47
Сообщение #3


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

Стаж: 13 лет

Сообщений: 2294
Благодарностей: 1187
Полезность: 890

Мне нужно поставить объект в определенном месте. Координаты я узнавал через игру, с помощью игрока.
Насколько я знаю, то координаты игрока получаем мы в целых числах, а не float.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nixon
сообщение 17.4.2015, 10:49
Сообщение #4


Стаж: 12 лет

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

Цитата(GOOD FELLOW @ 17.4.2015, 11:47) *
Мне нужно поставить объект в определенном месте. Координаты я узнавал через игру, с помощью игрока.
Насколько я знаю, то координаты игрока получаем мы в целых числах, а не float.


Опять же, смотря как получать. Если через get_user_origin, то да целые. Но если через pev или entity то дробные.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя GOOD FELLOW
сообщение 17.4.2015, 10:53
Сообщение #5


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

Стаж: 13 лет

Сообщений: 2294
Благодарностей: 1187
Полезность: 890

Nixon, через get_origin получал
То есть, если я получу через энтити сразу дробные, а потом в entity_set_origin их пропишу, то по идее там и появится объект мой.
Ах да, его же еще спавнить ведь надо? Я забыл про это:D
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя [WPMG]PRoSToTeM@
сообщение 17.4.2015, 12:03
Сообщение #6
Стаж: 13 лет

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

Цитата
И если выставить координаты три раза, т.е. Вызвать 3 раза entity_set_origin, то мое энтити появится в трех местах, верно?

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя GOOD FELLOW
сообщение 17.4.2015, 12:05
Сообщение #7


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

Стаж: 13 лет

Сообщений: 2294
Благодарностей: 1187
Полезность: 890

[WPMG]PRoSToTeM@, я задаю вопрос, не надо так реагировать)) с энтити я нуб
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 17.4.2015, 13:45
Сообщение #8
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Лучше покажи код)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя proff_q
сообщение 17.4.2015, 13:55
Сообщение #9
Стаж: 14 лет

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

GOOD FELLOW, Если через get_user_origin, то координаты в целых числах. Их нужно перегнать в дробные с помощью float(num), можно циклом for пробежаться.
Но по идеи, если мы работаем с энтити, то мы в любом случае юзаем engine или fakemeta. В таком случае вам уже привели пример.

Если заспавнить предмет и сменить ему координаты три раза, то предмет будет "перемещаться", телепортироваться по вашим координатам и остановится на
последних введенных.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя GOOD FELLOW
сообщение 17.4.2015, 13:57
Сообщение #10


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

Стаж: 13 лет

Сообщений: 2294
Благодарностей: 1187
Полезность: 890

proff_q, то есть нужно создать 3 разных объекта на 3 места.
А вопрос, он сам появится или нужно его какими то махинациями сделать?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя proff_q
сообщение 17.4.2015, 14:07
Сообщение #11
Стаж: 14 лет

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

Да, нужно три разных создать.

Создавать примерно так, возможно код не идеален, но все же.
Код:
new bot = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target")) // Создаем объект
dllfunc(DLLFunc_Spawn, bot) // Спавним
entity_set_string(bot, EV_SZ_classname, keeper_class) // Класс
entity_set_model(bot, "models/player/bot.mdl") // Модель
entity_set_size(bot, Float:{ -20.0, -20.0, -20.0 }, Float:{ 20.0, 20.0, 20.0 }) // Размеры объекта
entity_set_int(bot, EV_INT_movetype, MOVETYPE_FLY) // Вид движения, в данном случае объект летает.
entity_set_float(bot, EV_FL_health, 99999.0) // Хп
entity_set_float(bot, EV_FL_takedamage, DAMAGE_NO) // Объект не получает урон
entity_set_int(bot, EV_INT_solid, SOLID_BBOX) // Твердость объекта
entity_set_origin(bot, Float:{ -20.0, -20.0, -20.0 }) // Координаты


Отредактировал: proff_q, - 17.4.2015, 14:08
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя GOOD FELLOW
сообщение 18.4.2015, 0:04
Сообщение #12


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

Стаж: 13 лет

Сообщений: 2294
Благодарностей: 1187
Полезность: 890

никак не хочет создаваться в этих координатах, которые я узнаю через entity_get_vector
X: -1004535808, Y: -1000341504, Z: 112643481
как задать правильно?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Radius
сообщение 18.4.2015, 0:08
Сообщение #13
Стаж: 12 лет

Сообщений: 454
Благодарностей: 418
Полезность: 330

GOOD FELLOW, массив под origin должен быть Float. А это 100% процентов целочисленное представление Float. Максимальный диапазон координат от {-8192.0, -8192.0, -8192.0} до {8192.0, 8192.0, 8192.0}.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя GOOD FELLOW
сообщение 18.4.2015, 0:14
Сообщение #14


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

Стаж: 13 лет

Сообщений: 2294
Благодарностей: 1187
Полезность: 890

Radius, и как тогда мне узнать нужные координаты, чтобы создать там объект, именно в этой точке?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Radius
сообщение 18.4.2015, 0:25
Сообщение #15
Стаж: 12 лет

Сообщений: 454
Благодарностей: 418
Полезность: 330

GOOD FELLOW, сначала нужно определить точку. Если по своей позиции то:

Код:
new Float: vec[3];
entity_get_vector (id, EV_VEC_origin, vec); //точка будет не на земле, а на 36 юнитов выше.
entity_set_vector (entity, EV_VEC_origin, vec);
engfunc(EngFunc_DropToFloor, entity);// пускаем на пол, иногда работает некорректно
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя GOOD FELLOW
сообщение 18.4.2015, 0:32
Сообщение #16


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

Стаж: 13 лет

Сообщений: 2294
Благодарностей: 1187
Полезность: 890

Radius, визуально точка у меня определена
мне теперь на нее нужно физически поставить предмет
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя [WPMG]PRoSToTeM@
сообщение 18.4.2015, 0:43
Сообщение #17
Стаж: 13 лет

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

Через spec_pos смотри.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Radius
сообщение 18.4.2015, 0:43
Сообщение #18
Стаж: 12 лет

Сообщений: 454
Благодарностей: 418
Полезность: 330

GOOD FELLOW, еще бы знать что пытаемся поставить :) может это невидимое бестелесное и безразмерное нечто.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 18.4.2015, 1:01
Сообщение #19
Стаж: 12 лет

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

блин ну подойди к точке, получи свои координаты, запиши на листике cbf1b2bfde1a.gif и добавь в плагин

Код:

register_clcmd("say /pos", "bla")

public bla(id)
{
new Float:or[3]
pev(id, pev_origin, or)
client_print( id, 3, "x %.2f y %.2f z %.2f", or[0], or[1], or[2])
}


чтобы заспаунить ентити 3 раза, надо вызвать функцию спауна энтити, указав в switch ( 1,3 )
в каждом case разные координаты.

Отредактировал: csnet, - 18.4.2015, 1:06


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: