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

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

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

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

Парашут + двойной прижок

, проблема с гравитацией
Статус пользователя sambo
сообщение 26.1.2014, 8:33
Сообщение #1


Стаж: 14 лет

Сообщений: 847
Благодарностей: 200
Полезность: 477

У кого на сервере корректно работают парашут (п) вместе с двойным прыжком (дп) ?
Предположительно после использования несколько рас дп значение гравитации не становится на стандартное . Разница не большая и еле заметна но нужно исправить .
После смены карты или через время баг у игрока проходит.

Отредактировал: sambo, - 22.2.2014, 18:16
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя forze96
сообщение 26.1.2014, 11:34
Сообщение #2
Стаж: 13 лет

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

Цитата(sambo @ 26.1.2014, 8:33) *
У кого на сервере корректно работают парашут (п) вместе с двойным прыжком (дп) ?
Предположительно после использования несколько рас дп значение гравитации не становится на стандартное . Разница не большая и еле заметна но нужно исправить .
После смены карты или через время баг у игрока проходит.

Нужен исходник.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя sambo
сообщение 26.1.2014, 11:58
Сообщение #3


Стаж: 14 лет

Сообщений: 847
Благодарностей: 200
Полезность: 477

кусок sma
parachute_reset(id)
{
if(para_ent[id] > 0)
if (is_valid_ent(para_ent[id]))
remove_entity(para_ent[id])

para_ent[id] = 0
}

public FW_PlayerPreThink(id)
{
if (!is_user_alive(id)) return

if (!g_steamplayer[id] && !(get_user_flags(id) & ADMIN_LEVEL_G)) return

new nbut = pev(id,pev_button);
new obut = pev(id,pev_oldbuttons);
if((nbut & IN_JUMP) && !(pev(id,pev_flags) & FL_ONGROUND) && !(obut & IN_JUMP))
{
if(jumpnum[id] < 1)
{
dojump[id] = true;
jumpnum[id]++;
return
}
}
if((nbut & IN_JUMP) && (pev(id,pev_flags) & FL_ONGROUND))
{
jumpnum[id] = 0;
return
}

static Float:fallspeed = -80.0

new Float:frame

new button = get_user_button(id)
new oldbutton = get_user_oldbutton(id)
new flags = get_entity_flags(id)

if (para_ent[id] > 0 && (flags & FL_ONGROUND)) {
if (get_user_gravity(id) == 0.1) set_user_gravity(id, gravity[id])

if (entity_get_int(para_ent[id],EV_INT_sequence) != 2) {
entity_set_int(para_ent[id], EV_INT_sequence, 2)
entity_set_int(para_ent[id], EV_INT_gaitsequence, 1)
entity_set_float(para_ent[id], EV_FL_frame, 0.0)
entity_set_float(para_ent[id], EV_FL_fuser1, 0.0)
entity_set_float(para_ent[id], EV_FL_animtime, 0.0)
entity_set_float(para_ent[id], EV_FL_framerate, 0.0)
return
}

frame = entity_get_float(para_ent[id],EV_FL_fuser1) + 2.0
entity_set_float(para_ent[id],EV_FL_fuser1,frame)
entity_set_float(para_ent[id],EV_FL_frame,frame)

if (frame > 254.0) {
remove_entity(para_ent[id])
para_ent[id] = 0
}
return
}

if (button & IN_USE) {

new Float:velocity[3]
entity_get_vector(id, EV_VEC_velocity, velocity)

if (velocity[2] < 0.0) {

if(para_ent[id] <= 0) {
para_ent[id] = create_entity("info_target")
if(para_ent[id] > 0) {
entity_set_string(para_ent[id],EV_SZ_classname,"parachute")
entity_set_edict(para_ent[id], EV_ENT_aiment, id)
entity_set_edict(para_ent[id], EV_ENT_owner, id)
entity_set_int(para_ent[id], EV_INT_movetype, MOVETYPE_FOLLOW)
entity_set_model(para_ent[id], "models/parachute.mdl")
entity_set_int(para_ent[id], EV_INT_sequence, 0)
entity_set_int(para_ent[id], EV_INT_gaitsequence, 1)
entity_set_float(para_ent[id], EV_FL_frame, 0.0)
entity_set_float(para_ent[id], EV_FL_fuser1, 0.0)
}
}

if (para_ent[id] > 0) {

entity_set_int(id, EV_INT_sequence, 3)
entity_set_int(id, EV_INT_gaitsequence, 1)
entity_set_float(id, EV_FL_frame, 1.0)
entity_set_float(id, EV_FL_framerate, 1.0)
set_user_gravity(id, 0.1)

velocity[2] = (velocity[2] + 40.0 < fallspeed) ? velocity[2] + 40.0 : fallspeed
entity_set_vector(id, EV_VEC_velocity, velocity)

if (entity_get_int(para_ent[id],EV_INT_sequence) == 0) {

frame = entity_get_float(para_ent[id],EV_FL_fuser1) + 1.0
entity_set_float(para_ent[id],EV_FL_fuser1,frame)
entity_set_float(para_ent[id],EV_FL_frame,frame)

if (frame > 100.0) {
entity_set_float(para_ent[id], EV_FL_animtime, 0.0)
entity_set_float(para_ent[id], EV_FL_framerate, 0.4)
entity_set_int(para_ent[id], EV_INT_sequence, 1)
entity_set_int(para_ent[id], EV_INT_gaitsequence, 1)
entity_set_float(para_ent[id], EV_FL_frame, 0.0)
entity_set_float(para_ent[id], EV_FL_fuser1, 0.0)
}
}
}
}
else if (para_ent[id] > 0) {
remove_entity(para_ent[id])
set_user_gravity(id, gravity[id])
para_ent[id] = 0
}
}
else if ((oldbutton & IN_USE) && para_ent[id] > 0 ) {
remove_entity(para_ent[id])
set_user_gravity(id, gravity[id])
para_ent[id] = 0
}
}

public FW_PlayerPostThink(id)
{
if(!is_user_alive(id)) return PLUGIN_CONTINUE

if (!g_steamplayer[id] && !(get_user_flags(id) & ADMIN_LEVEL_G)) return PLUGIN_CONTINUE

if(dojump[id] == true)
{
new Float:velocity[3];
pev(id,pev_velocity,velocity);
velocity[2] = random_float(265.0,285.0);
set_pev(id,pev_velocity,velocity)
dojump[id] = false
return PLUGIN_CONTINUE
}
return PLUGIN_CONTINUE
}


Отредактировал: sambo, - 27.1.2014, 8:11
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Ismagilov
сообщение 26.1.2014, 12:48
Сообщение #4
Стаж: 14 лет

Сообщений: 156
Благодарностей: 11
Полезность: < 0

все идеи воруют бле
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя sambo
сообщение 26.1.2014, 12:48
Сообщение #5


Стаж: 14 лет

Сообщений: 847
Благодарностей: 200
Полезность: 477

Ismagilov,
это ты к чему?
Ты бы по делу написал бы.

Отредактировал: sambo, - 26.1.2014, 12:50
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя sambo
сообщение 27.1.2014, 8:12
Сообщение #6


Стаж: 14 лет

Сообщений: 847
Благодарностей: 200
Полезность: 477

Баг походу возникает только у тех кто колесо крутит ( дд тоесть делают) . У меня еще и прыжок на колесе . Если крутнуть колесо два раза то нет двойного прыжка . Там в коде не может быть зацикливание какой то функции если крутить колесо?

Отредактировал: sambo, - 22.2.2014, 18:16
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 17.2.2014, 22:39
Сообщение #7
Стаж: 12 лет

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

http://www.oplata.info/asp/pay_wm.asp?id_d=1679527

3 режима - авто гравити, антиурон при падении и на кнопку E
в коде можешь покрутить значение скорости. по умолчанию +150 при падении.


Отредактировал: csnet, - 17.2.2014, 22:51


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя sambo
сообщение 18.2.2014, 2:38
Сообщение #8


Стаж: 14 лет

Сообщений: 847
Благодарностей: 200
Полезность: 477

Цитата(csnet @ 17.2.2014, 22:39) *
http://www.oplata.info/asp/pay_wm.asp?id_d=1679527

3 режима - авто гравити, антиурон при падении и на кнопку E
в коде можешь покрутить значение скорости. по умолчанию +150 при падении.


Во , то что нужно . Запарил уже этот баг и решить не кто не хотел или не мог , хз .
Получил еще и оптимизированный код , строк в разы меньше .
Кто не в курсе или лень читать все посты - баг во всех плагинах двойного прыжка.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 18.2.2014, 2:41
Сообщение #9
Стаж: 12 лет

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

исходник был изменен для клиента. по ссылке стандартный плагин.


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя sambo
сообщение 22.2.2014, 18:19
Сообщение #10


Стаж: 14 лет

Сообщений: 847
Благодарностей: 200
Полезность: 477

К сожалению обнаружен новый баг . Если игрок сделает прыжок , зажмет Е (парашют - гравитацию ) и сделает двойной прыжок то игрок улетит в небо ( квар амх_гравити )
Кусок сма
Код
       if(pev(id,pev_flags) & FL_ONGROUND )
                                      set_user_gravity(id, 1.0)
                                         num[id] = 0
        }
    
    else {
                switch(get_pcvar_num(sposob))
    {
      case 1:  if(myspeed(id) > 100.0) set_user_gravity(id, get_pcvar_float(gravity))    
      case 3:  if (wp(id) && myspeed(id) > 100.0)  set_user_gravity(id, get_pcvar_float(gravity))
    }

                if(dj(id) && (get_user_flags(id) & ADMIN_CVAR)) {
                 num[id]++                
                 if(num[id] == 1)  start = get_gametime()
                 if(num[id] == 2) {
                                 new Float:result = floatsub(get_gametime(),start)                                  
                                 if(result < 0.2) return HAM_IGNORED
                                 new Float:velocity[3]


Нужна проверка дополнительная на двойной прыжок . Например , если гравитация игрока не дефолтная или равна гравитации с парашютом то второй прыжок не сработает.
Менял result < 0.2 и myspeed(id) > 100.0 не помогло, сделать дд с большой гравитацией сложнее но возможно.
Суть result < 0.2 - дд прыжок не сработает если использовать раньше 0.2 сек от первого.
Подкиньте плс доп проверку .
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 22.2.2014, 18:24
Сообщение #11
Стаж: 12 лет

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

очень просто

set_pev(id, pev_button, ~IN_USE)

таким образом игрок не сможет зажать E. сразу отошлется отмена
ему придется нажимать е несколько раз подряд чтобы затормозить

попробуй вставить сюда

Код:

if(num[id] == 2) {
set_pev(id, pev_button, ~IN_USE)
new Float:result = floatsub(get_gametime(),start)


чтобы с момент 2го прыжка жалась отмена E

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


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя sambo
сообщение 22.2.2014, 18:53
Сообщение #12


Стаж: 14 лет

Сообщений: 847
Благодарностей: 200
Полезность: 477

csnet,
не помогло
Код
            if(num[id] == 2)
            {
                set_pev(id, pev_button, ~IN_USE)
                new Float:result = floatsub(get_gametime(),start)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 22.2.2014, 18:55
Сообщение #13
Стаж: 12 лет

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

напиши в аську я сделал.


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