AMX MOD X
Пятница, 26.04.2024, 21:43:22



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

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

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Отключить гравитацию для игрока (отправить его в полёт)
Отключить гравитацию для игрока (отправить его в полёт)
sonicsoneditДата: Среда, 25.03.2009, 14:49:47 | Сообщение # 1
Сержант
Группа: Пользователи
Сообщений: 24
Репутация: 0
Статус: Не в сети
Может кто знает, как прописать нулевую гравитацию для игрока? set_pev(id, pev_gravity, 0.0) не прописывает нулевую гравитацию, а лишь сбрасывает на дефолтную (1.0)! Буду очень признателен помощи!
 
slogicДата: Среда, 25.03.2009, 15:22:01 | Сообщение # 2
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
Code
float  gravity;  // % of "normal" gravity

Если происходит сброс в твоем моде, попробуй в post версии DLLFunc_PlayerPreThink выставлять ее в нужное тебе значение.
 
sonicsoneditДата: Среда, 25.03.2009, 15:44:08 | Сообщение # 3
Сержант
Группа: Пользователи
Сообщений: 24
Репутация: 0
Статус: Не в сети
Дело не в моде совсем.
http://www.amxmodx.org/funcwiki.php?go=func&id=125
Quote
Gravity can be set to a negative value. Also, be aware 0.0 sets gravity to normal the same as 1.0.

т.е. сама функция set_pev(id, pev_gravity, 0.0) сбрасывает гравитацию на дефолтную. А мне надо чтобы гравитация вообще "отключалась" для игрока. Как это сделать? Возможно есть иные команды?
 
KokaДата: Среда, 25.03.2009, 16:23:24 | Сообщение # 4
Полковник
Группа: Пользователи
Сообщений: 169
Репутация: 1
Статус: Не в сети
вот дефолтная
set_pev(id, pev_gravity, 1.0)

отключение гравитации повлечет за собой то что ты как подпрыгнеш так и останешься на потолке висеть
юзай set_pev(id, pev_gravity, 0.15)

пс: 1.0 - это 100% от квары sv_gravity ( = 800 по умолчанию), поэкспеременрируй с этой кварой и посмори какая гравитация те годица - потом переведи ее в проценты и поставь в set_pev


стал ощущать рефлексы тоньше, оставаясь как всегда с идеей той же...

Сообщение отредактировал Koka - Среда, 25.03.2009, 16:24:49
 
sonicsoneditДата: Среда, 25.03.2009, 17:21:16 | Сообщение # 5
Сержант
Группа: Пользователи
Сообщений: 24
Репутация: 0
Статус: Не в сети
Quote
вот дефолтная
set_pev(id, pev_gravity, 1.0)

да, и set_pev(id, pev_gravity, 0.0) даёт точно такой-же эффект - ставит дефолтную.

Quote
отключение гравитации повлечет за собой то что ты как подпрыгнеш так и останешься на потолке висеть

Именно это мне и надо.
Что я пытаюсь сделать - летающего игрока.
Нажимает на ctrl - спускается, на пробел - поднимается.
Нажимает на стрелки - двигается в соответствующем направлении (готово), двигается рывками (использую set_pev(id, pev_velocity, velocity)) и именно для этого мне надо отключить гравитацию, потому что если есть даже слабая гравитация, то

1) игрок может управлять своим полётом, что не в коем случае не должно происходить
2) игрок постепенно опускается на землю, что крайне не желательно, т.к. он должен парить в воздухе, и контролировать свою высоту через ctrl и пробел.

Quote
пс: 1.0 - это 100% от квары sv_gravity ( = 800 по умолчанию), поэкспеременрируй с этой кварой и посмори какая гравитация те годица - потом переведи ее в проценты и поставь в set_pev

Это я знаю...вопрос в другом - что происходит на сервере при sv_gravity 0 ?
Как прописать sv_gravity 0 для конкретного игрока?


Сообщение отредактировал sonicsonedit - Среда, 25.03.2009, 17:22:44
 
slogicДата: Четверг, 26.03.2009, 14:42:24 | Сообщение # 6
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
Quote (sonicsonedit)
1) игрок может управлять своим полётом, что не в коем случае не должно происходить

Сделай ему pev_movetype = MOVETYPE_FLY.
 
sonicsoneditДата: Четверг, 26.03.2009, 15:03:05 | Сообщение # 7
Сержант
Группа: Пользователи
Сообщений: 24
Репутация: 0
Статус: Не в сети
Quote
pev_movetype = MOVETYPE_FLY

У тебя сработало?
Потому что у меня ничего не изменяется вообще.
 
slogicДата: Четверг, 26.03.2009, 16:58:33 | Сообщение # 8
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
Проверил, не сработало. Надо копать дальше.
 
KokaДата: Пятница, 27.03.2009, 06:51:45 | Сообщение # 9
Полковник
Группа: Пользователи
Сообщений: 169
Репутация: 1
Статус: Не в сети
видел этот плагин от ИксОленя на алиеве модерсе в теме помощъ, но там поиск ща непашед, поэтому помоч не могу, поищи там сам :/

Добавлено (2009-03-27, 6:51 Am)
---------------------------------------------
А во нащел:

нажымай коро4е сэй /флу - и будишъ литать ;)

Code
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>

#define NOCLIP_SPEED 250.0

new bool:g_flying[33];

public plugin_init()
{
         register_plugin("Noclip Simulator", "0.1", "Exolent");
              
         register_clcmd("say /fly", "CmdFly");
              
         register_forward(FM_PlayerPreThink, "FwdPlayerPreThink");
}

public client_disconnect(client)
{
         g_flying[client] = false;
}

public CmdFly(client)
{
         g_flying[client] = !g_flying[client];
              
         client_print(client, print_chat, "You are no%s flying.", g_flying[client] ? "w" : " longer");
              
         set_pev(client, pev_gravity, g_flying[client] ? 0.000001 : 1.0);
              
         return PLUGIN_HANDLED;
}

public FwdPlayerPreThink(client)
{
         if( !g_flying[client] || !is_user_alive(client) ) return;
              
         set_pev(client, pev_movetype, MOVETYPE_FLY);
              
         new Float:maxspeed = NOCLIP_SPEED;
         if( is_user_ducking(client) )
         {
             // I don't know the real calculation for ducking velocity
             // but this will have to do for now
             maxspeed /= 2.0;
         }
              
         static Float:aim_velocity[3];
         velocity_by_aim(client, floatround(maxspeed), aim_velocity);
              
         static Float:client_origin[3];
         pev(client, pev_origin, client_origin);
              
         new button = pev(client, pev_button);
              
         new Float:velocity[3];
         if( button & IN_FORWARD )
         {
             velocity[0] += aim_velocity[0];
             velocity[1] += aim_velocity[1];
             velocity[2] += aim_velocity[2];
         }
         if( button & IN_BACK )
         {
             velocity[0] -= aim_velocity[0];
             velocity[1] -= aim_velocity[1];
             velocity[2] -= aim_velocity[2];
         }
         if( button & IN_MOVERIGHT )
         {
             // angle velocity_aim -90 degrees
                  
             //velocity[0] += ((floatcos(-90.0, degrees) * velocity_aim[0]) - (floatsin(-90.0, degrees) * velocity_aim[1]));
             //                 cos 90 = 0                    sin -90 = -1
             //               (( 0 * velocity_aim[0] ) - ( -1 * velocity_aim[1] ))
             //               velocity_aim[1]
             velocity[0] += aim_velocity[1];
                  
             //velocity[1] += ((floatsin(-90.0, degrees) * velocity_aim[0]) - (floatcos(-90.0, degrees) * velocity_aim[1]));
             //                sin -90 = -1                    cos -90 = 0
             //               (( -1 * velocity_aim[0] ) - ( 0 * velocity_aim[1] ))
             //               -velocity_aim[0]
             velocity[1] -= aim_velocity[0];
         }
         if( button & IN_MOVELEFT )
         {
             // angle velocity_aim 90 degrees
                  
             //velocity[0] += ((floatcos(90.0, degrees) * velocity_aim[0]) - (floatsin(90.0, degrees) * velocity_aim[1]));
             //               cos 90 = 0                    sin 90 = 1
             //               (( 0 * velocity_aim[0] ) - ( 1 * velocity_aim[1] ))
             //               -velocity_aim[1]
             velocity[0] -= aim_velocity[1];
                  
             //velocity[1] += ((floatsin(90.0, degrees) * velocity_aim[0]) - (floatcos(90.0, degrees) * velocity_aim[1]));
             //               sin 90 = 1                    cos 90 = 0
             //               (( 1 * velocity_aim[0] ) - ( 0 * velocity_aim[1] ))
             //               velocity_aim[0]
             velocity[1] += aim_velocity[0];
         }
              
         set_pev(client, pev_velocity, velocity);
}

// modified from kz_ljs_xm
bool:is_user_ducking(client)
{
         static Float:absmin[3], Float:absmax[3];
         pev(client, pev_absmin, absmin);
         pev(client, pev_absmax, absmax);
              
         return ( (absmax[2] - absmin[2]) > 64.0 );
}  

http://forums.alliedmods.net/showthr....&page=3
http://forums.alliedmods.net/showpost.php?p=741450&postcount=26


стал ощущать рефлексы тоньше, оставаясь как всегда с идеей той же...

Сообщение отредактировал Koka - Пятница, 27.03.2009, 06:55:20
 
sonicsoneditДата: Пятница, 27.03.2009, 20:31:25 | Сообщение # 10
Сержант
Группа: Пользователи
Сообщений: 24
Репутация: 0
Статус: Не в сети
Koka
Спасибо большое, помогло)

Добавлено (2009-03-27, 7:57 Pm)
---------------------------------------------
Не, не фига, не действует set_pev(id, pev_movetype, MOVETYPE_FLY). Даже в префинке. Короче похоже придётся set_pev(id, pev_gravity, 0.0001) использовать.

Добавлено (2009-03-27, 8:31 Pm)
---------------------------------------------
Ахренеть, теперь энтитя не хочет стукаться с другой энтитей. С полом стукается, говорит что стукнула пол. С ящиками на А и Б (даст2) стукается, говорит что стукнула func_breakable, а вот сквозь игроков пролетает, ппц

Пойду ковырять плагин базуки, смотреть, как там.
Простите за оффтоп.

Сообщение отредактировал sonicsonedit - Пятница, 27.03.2009, 20:32:41
 
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Отключить гравитацию для игрока (отправить его в полёт)
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2024