Игрок на пропе, фиксация пропа
| |
BarD
|
Дата: Воскресенье, 03.08.2014, 07:22:20 | Сообщение # 1 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
1) У меня есть prop_physics с индексом index. Как можно проверить, стоит ли кто-нибудь на этом пропе? Если можно, то подкиньте, пожалйста функцию определения индекса игрока, стоящего на пропе. Или, может, есть событие "когда игрок встал на проп"?
2) Как можно при создании prop_physics зафиксировать его на месте создания, чтобы нельзя было сдвинуть его с места?
Подскажите, кто знает :) Буду благодарен!
Добавлено (01.08.2014, 11:42:29) --------------------------------------------- Нашел оффсет m_hGroundEntity, но он не подходит для prop_physics. Помогите!
Функция определения игрока:
Код iClient = GetEntPropEnt(index, Prop_Send, "m_hGroundEntity"); if (0 < iClient <= MaxClients) { }
Выдает ошибку: Native "GetEntPropEnt" reported: Property "m_hOwnerEntity" not found (entity 151/prop_physics).
Изменил с Prop_Send на Prop_Data. Ошибок, вроде, нет. Но и не происходит ничего. Функция не работает :(
P.S. С фиксацией вопрос решен. Помог R1KO, спасибо большое!
Код AcceptEntityInput(index, "DisableMotion"); или Код SetEntityMoveType(index, MOVETYPE_NONE); Фиксируют пропДобавлено (03.08.2014, 07:22:20) --------------------------------------------- Поможет кто-нибудь? wS, может ты знаешь?
Сообщение отредактировал BarD - Пятница, 01.08.2014, 12:08:22 |
|
| |
horr0r
|
Дата: Воскресенье, 03.08.2014, 07:32:15 | Сообщение # 2 |
|
Сообщений: 149
Репутация: 40 [ +/- ]
|
|
Я вот не знаю, но могу подсказать. Проверяешь на сколько игрок выше пропа. Если он выше пропа допустим на 50 едениц, значит он на пропе. Типа: Код stock bool:IsClientOnEntity(client, entity) { new Float:proppos[3]; // координаты пропа new Float:plpos[3]; //координаты игрока ПолучаемКоординатыИгрока(client, plpos); ПолучаемКоординатыПропа(entity, proppos); if(GetVectorDistance(proppos, plpos) < 50 && proppos[2] < plpos[2]) return true; return false; } Но точно ей не определишь. Нужно учитывать размеры пропа.
Сообщение отредактировал horr0r - Воскресенье, 03.08.2014, 07:34:47 |
|
| |
BarD
|
Дата: Воскресенье, 03.08.2014, 07:45:15 | Сообщение # 3 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
horr0r, печально( придётся обходным путём делать( все равно, спасибо большое!
Сообщение отредактировал BarD - Воскресенье, 03.08.2014, 07:45:38 |
|
| |
хвостег
|
Дата: Воскресенье, 03.08.2014, 12:14:37 | Сообщение # 4 |
|
Сообщений: 161
Репутация: 53 [ +/- ]
|
|
Цитата BarD ( ) 1) У меня есть prop_physics с индексом index. Как можно проверить, стоит ли кто-нибудь на этом пропе? Если можно, то подкиньте, пожалйста функцию определения индекса игрока, стоящего на пропе. Или, может, есть событие "когда игрок встал на проп"? Вот так Код new entid;
public OnPluginStart() { entid = -1; }
public OnClientPutInServer(client) { SDKHook(client, SDKHook_Touch, Touch); }
public Touch(client) { if(IsPropTouch(client, entid)) { PrintToChatAll("AHTUNG!"); } }
stock bool:IsPropTouch(client, entid) { new f_entity = GetEntPropEnt(client, Prop_Send, "m_hGroundEntity"); if(entid == f_entity) { return true; } return false; }
entid замени на свой index
Сообщение отредактировал хвостег - Воскресенье, 03.08.2014, 12:21:21 |
|
| |
BarD
|
Дата: Воскресенье, 03.08.2014, 18:41:55 | Сообщение # 5 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
хвостег, спасибо большое! Я костылями уже сделал) но твой метод обязательно использую)
|
|
| |
хвостег
|
Дата: Воскресенье, 03.08.2014, 19:34:35 | Сообщение # 6 |
|
Сообщений: 161
Репутация: 53 [ +/- ]
|
|
я костыли не юзаю! =)
|
|
| |
BarD
|
Дата: Понедельник, 04.08.2014, 05:24:01 | Сообщение # 7 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
хвостег, :) мне ли не знать)
|
|
| |
ThRunningMan
|
Дата: Вторник, 05.08.2014, 06:08:26 | Сообщение # 8 |
|
Сообщений: 140
Репутация: 12 [ +/- ]
|
|
Можно определить только касается игрок пропа или нет
Добавлено (05.08.2014, 06:08:26) --------------------------------------------- Код new TimerColor[MAXENTITIES+1]; //функция создания пропа SDKHook(propindex, SDKHook_Touch,OnStartTouch); //делать при создании пропа //конец функции создания энтити public OnStartTouch(entity, other) { if (!other || other > MaxClients) { return; } PrintToChat(other, "проп");
AcceptEntityInput(entity, "Break"); //этой командой можно сломать проп ну или убить игрока в общем все что с индексами можно делать
SetEntityRenderColor(entity, 200, 0, 0, 170); //ниже и эта меняют цвет при касании, в этой же ветке можно создать таймер допустим через 0.5 сек чтобы возвращал цвет обратно, но чтобы привязать таймер к пропу нужно делать ссылку SetEntityRenderMode(entity, RENDER_TRANSCOLOR); //
new prop_ref = EntIndexToEntRef(entity);//создаем ссылку TimerColor[entity] = prop_ref; // CreateTimer(0.5,ReturnColorNormal, TimerColor[entity]); таймер черещ 0.5 выполнит функцию для пропа } public Action:ReturnColorNormal(Handle:timer, any:ref) { new ent = EntRefToEntIndex(ref); if (ent > 0) { SetEntityRenderColor(ent, 255, 255, 255, 200); SetEntityRenderMode(ent, RENDER_TRANSCOLOR); } return Plugin_Stop; }
Сообщение отредактировал ThRunningMan - Вторник, 05.08.2014, 06:11:29 |
|
| |
BarD
|
Дата: Вторник, 05.08.2014, 13:22:41 | Сообщение # 9 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
ThRunningMan, мне уже хвостег помог. Мне нужна была функция, проверяющая, кто сидит на пропе, а не касается ли он.
|
|
| |
|