AMX MOD X
Суббота, 20.04.2024, 17:12:49



Приветствую Вас Гость | RSS
[ Главная ] [ Расстояние между 2 объектами - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Расстояние между 2 объектами
Расстояние между 2 объектами
defaultNick8433Дата: Суббота, 05.12.2009, 21:59:54 | Сообщение # 1
Генерал-полковник
Группа: Скриптеры
Сообщений: 806
Репутация: 19
Статус: Не в сети
К примеру мне нужно чтобы при приближении игрока к объекту измерялось расстояние между ними.Вот какой функцией выполняется данное действие?

Раскручиваю сайты,ставлю трекера на хостинг.Всё бесплатно.Если заинтересовало,то моя аська 400538001
 
PomanoBДата: Суббота, 05.12.2009, 22:35:30 | Сообщение # 2
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
http://www.amxmodx.org/funcwiki.php?search=get_distance&go=search

http://romanov4400.mybrute.com
 
defaultNick8433Дата: Воскресенье, 06.12.2009, 08:13:59 | Сообщение # 3
Генерал-полковник
Группа: Скриптеры
Сообщений: 806
Репутация: 19
Статус: Не в сети
спс,а вот нужно было измерить расстояние между игроком и дверью.Причём если игрок приближается к двери,и между ними остаётся определённое расстояние,то дверь сама открывается.Пока двери не задавал угол направление через angle_vector,а просто решил отловить этот момент,но никак не хочет реагировать:
Code
#include <amxmodx>
#include <fakemeta>

new bool:door[255]

public plugin_init()
{
    register_plugin("Auto Open The Door","Final","defa")
    register_forward(FM_PlayerPreThink,"fwPlayer")
}
public fwPlayer(id)
{
    new player_origin[3],door_origin[3]
    new func_class[]="func_door"
       
    new ent=engfunc(EngFunc_FindEntityByString,ent,"classname",func_class)
       
    pev(ent,pev_origin,door_origin)
    pev(id,pev_origin,player_o rigin ,3)
       
    i f(get_distance(door_origin,player_origin)<35)
    {
     door[ent]=true
        
     client_print(0,print_chat,"Door is Open!!!")
    }
}


Раскручиваю сайты,ставлю трекера на хостинг.Всё бесплатно.Если заинтересовало,то моя аська 400538001


Сообщение отредактировал defaultNick8433 - Воскресенье, 06.12.2009, 08:16:19
 
PomanoBДата: Воскресенье, 06.12.2009, 09:45:39 | Сообщение # 4
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Тебе надо цикл делать по всем ентити, и лучше делать FindEntityInSphere

http://romanov4400.mybrute.com
 
defaultNick8433Дата: Воскресенье, 06.12.2009, 09:52:06 | Сообщение # 5
Генерал-полковник
Группа: Скриптеры
Сообщений: 806
Репутация: 19
Статус: Не в сети
А почему именно по всем?

Раскручиваю сайты,ставлю трекера на хостинг.Всё бесплатно.Если заинтересовало,то моя аська 400538001
 
PomanoBДата: Воскресенье, 06.12.2009, 10:06:04 | Сообщение # 6
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Потому что ну нашёл ты 1 дверь а она может на другом конце карты, надо искать следующую

http://romanov4400.mybrute.com
 
defaultNick8433Дата: Воскресенье, 06.12.2009, 10:17:12 | Сообщение # 7
Генерал-полковник
Группа: Скриптеры
Сообщений: 806
Репутация: 19
Статус: Не в сети
А ты можешь код показать примерный с находкой дверей

Раскручиваю сайты,ставлю трекера на хостинг.Всё бесплатно.Если заинтересовало,то моя аська 400538001
 
PomanoBДата: Воскресенье, 06.12.2009, 10:40:18 | Сообщение # 8
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Как-то так
Code

new i = 0, Float:origin[3], Float:range = 350.0, classname[32]
pev(id, pev_origin, origin)  
while ((i = engfunc(EngFunc_FindEntityInSphere, i, origin, range)))
{
  pev(i, pev_classname, classname, 31)
  if (equal(classname, "func_door"))
   dllfunc(DLLFunc_Touch, id, i)
}


http://romanov4400.mybrute.com
 
defaultNick8433Дата: Воскресенье, 06.12.2009, 11:13:20 | Сообщение # 9
Генерал-полковник
Группа: Скриптеры
Сообщений: 806
Репутация: 19
Статус: Не в сети
Не срабатывает,пишет,когда я подключаюсь сообщение моё в чат,хотя я не около двери находился.Ещё dllfunc(DLLFunc_Touch,id,i) не срабытвает

Раскручиваю сайты,ставлю трекера на хостинг.Всё бесплатно.Если заинтересовало,то моя аська 400538001
 
PomanoBДата: Воскресенье, 06.12.2009, 11:24:46 | Сообщение # 10
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Покажи код полностью

http://romanov4400.mybrute.com
 
defaultNick8433Дата: Воскресенье, 06.12.2009, 11:50:02 | Сообщение # 11
Генерал-полковник
Группа: Скриптеры
Сообщений: 806
Репутация: 19
Статус: Не в сети
Code
#include <amxmodx>
#include <fakemeta>

new bool:door[255]

public plugin_init()
{
  register_plugin("Auto Open The Door","Final","defa")
  register_forward(FM_PlayerPreThink,"fwPlayer")
}
public fwPlayer(id)
{
new player_origin[3],door_origin[3]
   
new i=0,Float:origin[3],Float:range=350.0,classname[32]  
pev(id,pev_origin,origin)   
i=engfunc(EngFunc_FindEntityInSphere,i,origin,range)
pev(i,pev_classname,classname,31)

if(equal(classname,"func_door"))  
{
pev(i,pev_origin,door_origin)
}
pev(id,pev_origin,player_origin,3)

if(get_distance(door_origin,player_origin)<200)
{
  door[i]=true
   
  dllfunc(DLLFunc_Touch,id,i)
  client_print(0,print_chat,"Door is Open!!!")
}
}


Раскручиваю сайты,ставлю трекера на хостинг.Всё бесплатно.Если заинтересовало,то моя аська 400538001
 
PomanoBДата: Воскресенье, 06.12.2009, 11:59:18 | Сообщение # 12
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Ну во первых ты убрал while непонятно почему
Во вторых в
if(equal(classname,"func_door"))
{
pev(i,pev_origin,door_origin)
}
неправильно, надо все действия внутри условия помещать

door[255] явно мало для ентитей

pev(i,pev_origin,door_origin) и pev(id,pev_origin,player_origin,3) тоже неправильно, так нужно массив типа Float
pev(id,pev_origin,player_origin,3) - это не строка вообще-то)
И вообще говоря в FM_PlayerPreThink это явно слишком часто
И не помешало бы проверку на то, что дверь уже открыта


http://romanov4400.mybrute.com
 
defaultNick8433Дата: Воскресенье, 06.12.2009, 12:05:28 | Сообщение # 13
Генерал-полковник
Группа: Скриптеры
Сообщений: 806
Репутация: 19
Статус: Не в сети
Quote (PomanoB)
массив типа Float

а если у меня числа не Float?


Раскручиваю сайты,ставлю трекера на хостинг.Всё бесплатно.Если заинтересовало,то моя аська 400538001
 
PomanoBДата: Воскресенье, 06.12.2009, 12:46:51 | Сообщение # 14
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Координаты всегда Float

http://romanov4400.mybrute.com
 
defaultNick8433Дата: Воскресенье, 06.12.2009, 14:18:07 | Сообщение # 15
Генерал-полковник
Группа: Скриптеры
Сообщений: 806
Репутация: 19
Статус: Не в сети
Если я задаю координаты Float:,и убираю 3 у player_origin,то из-за строки if(get_distance(door_origin,player_origin)<200)
компилятор выдаёт tag mistmach


Раскручиваю сайты,ставлю трекера на хостинг.Всё бесплатно.Если заинтересовало,то моя аська 400538001
 
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Расстояние между 2 объектами
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

AMX Mod X Russian Community © 2006-2024