AMX MOD X
Пятница, 19.04.2024, 04:56:35



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

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

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Плагин Semi-clip (Выдернул из climb - требуются пояснения)
Плагин Semi-clip
tavotДата: Четверг, 25.02.2010, 12:48:34 | Сообщение # 1
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
Код самого плагина:
Code
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "New Plug-In"
#define VERSION "0.0.1"
#define AUTHOR "Svoloch"

#include <fun>

#include <engine>
#include <fakemeta>
#include <sqlx>
#include <cstrike>
new p_render
new bool:sclip[32]

public server_frame(){//Semi-clip
     //*if(get_pcvar_num(p_climb)){
     new players[32],num,i,j,Float:c1[3],Float:c2[3]
     new Float:c1z[3],Float:c2z[3]
     new id_i,id_j,cflags_i,cflags_j
     get_players(players,num,"ac")
     //new Float:c1d[3],Float:c2d[3],xyadd,zadd
     for(i=0;i<num;i++){
      id_i=players[i]
      //***cflags_i=timer[id_i-1][TMR_CFLAGS]
      //**if(!(cflags_i&CF_PAUSE)){
       //solid(players[i])
      entity_get_vector(id_i,EV_VEC_origin,c1)
       //entity_get_vector(players[i],EV_VEC_velocity,c1d)
      c1z[2]=c1[2]
      c1[2]=0.0
      for(j=0;j<num;j++){
       id_j=players[j]
       //cflags_j=timer[id_j-1][TMR_CFLAGS]
       if(!(cflags_j)&&i!=j){
        entity_get_vector(id_j,EV_VEC_origin,c2)
        //entity_get_vector(players[j],EV_VEC_velocity,c2d)
        c2z[2]=c2[2]
        c2[2]=0.0
        if(vector_distance(c1,c2)<90&&vector_distance(c1z,c2z)<110){
         if(!(cflags_i&&cflags_j)){//&&vector_distance(c1,c2)>25&&vector_distance(c1z,c2z)>30)){
          unsolid(id_i)
          unsolid(id_j)
          j=num
         }
        }
       }
       if(j+1== num)sol id(id_i )
      }
      / /**}
     }
     //*}
     return PLUGIN_CONTINUE
}
//Make client solid
public solid(id){
     set_user_rendering(id,kRenderFxNone,0,0,0,kRenderNormal,255)
     entity_set_int(id,EV_INT_solid,SOLID_BBOX)
     sclip[id-1]=false
     return PLUGIN_CONTINUE
}
//Make client unsolid
public unsolid(id){
     new test=1
     if(test==1)set_user_rendering(id,kRenderFxHologram,0,0,0,kRenderTransAdd,0)
     else set_user_rendering(id,kRenderFxPulseSlow,0,0,0,kRenderTransTexture,50)
     entity_set_int(id,EV_INT_solid,SOLID_NOT)
     sclip[id-1]=true
     return PLUGIN_CONTINUE
}
public plugin_init() {
     register_plugin(PLUGIN, VERSION, AUTHOR)
         
     // Add your code here...
}

Код рабочий, проверял только что.
Собрать то я его собрал, но вот не доконца понимаю как это дело работает, хочется разобраться, от сюда следующие вопросы:
public server_frame() - Как я понимаю выполняется в каждом кадре? - не будет ли это нагрузкой на сервер?
В другом варианте этого плагина видел:
register_forward(FM_AddToFullPack, "addToFullPack", 1) - догадки есть кое какие что это, но полного понимания нет.
SOLID_BBOX и SOLID_NOT - так же, догадки, но без понимания.
entity_get_vector(id_i,EV_VEC_origin,c1) - видно что получается вектор - а nxj за вектор. по смыслу понятно что расстояние между двумя игроками.

И собственно правильность алгоритма:
1 если игрок подходит к другому ближе чем на
if(vector_distance(c1,c2)<90&&vector_distance(c1z,c2z)<110) - это оба вектора для обоих игроков, так?
То ему public unsolid(id)
2 Как только расстояние больше чем ... то ему дается
public solid(id)

Буду рад любым пояснениям, правкам, замечаниям!

Сообщение отредактировал tavot - Четверг, 25.02.2010, 13:09:27
 
PomanoBДата: Четверг, 25.02.2010, 13:02:28 | Сообщение # 2
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Quote (tavot)
Как я понимаю выполняется в каждом кадре? - не будет ли это нагрузкой на сервер?

Да, в каждом кадре, и нагрузка конечно значительная)

Quote (tavot)
FM_AddToFullPack

http://amxmodx.ucoz.ru/forum/9-1615-1

Quote (tavot)
SOLID_BBOX и SOLID_NO

см hlsdk_const.inc

Quote (tavot)
entity_get_vector(id_i,EV_VEC_origin,c1)

EV_VEC_origin - это значит что хотим получить вектор координат

Quote (tavot)
И собственно правильность алгоритма:

Да, алгоритм именно такой


http://romanov4400.mybrute.com
 
tavotДата: Четверг, 25.02.2010, 13:10:50 | Сообщение # 3
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
PomanoB,
Спасибо, побрел читать )

Вот другой вариант:

Но тут постоянно игрок полупрозрачный.
Это как раз к вопросу про:
register_forward(FM_AddToFullPack, "addToFullPack", 1)

Я так понимаю нагрузка меньше, но и нет этого эффекта прозрачный/не прозрачный.
Этого можно достичь не используя server_frame?

Сообщение отредактировал tavot - Четверг, 25.02.2010, 13:11:18
 
PomanoBДата: Четверг, 25.02.2010, 13:15:46 | Сообщение # 4
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
http://forums.alliedmods.net/showthread.php?t=69728 Отсюда плагин скачай
Но надо подредактировать поставить проверку на дистанцию в самом AddToFullPack


http://romanov4400.mybrute.com
 
MaINДата: Пятница, 26.02.2010, 10:03:42 | Сообщение # 5
Подполковник
Группа: Пользователи
Сообщений: 109
Репутация: -3
Статус: Не в сети
Какой семи-клип грузит сервер меньше остальных? и от чего это зависит?
Объясните пожалуйста, а то я не очень въехал в ваш разговор.




Сообщение отредактировал MaIN - Пятница, 26.02.2010, 10:05:10
 
tavotДата: Пятница, 26.02.2010, 11:14:48 | Сообщение # 6
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
MaIN,
на сколько я понял грузит очень тот который использует:
public server_frame() - так как это дело происходит каждый кадр.
 
MaINДата: Пятница, 26.02.2010, 12:57:39 | Сообщение # 7
Подполковник
Группа: Пользователи
Сообщений: 109
Репутация: -3
Статус: Не в сети
tavot, спасибо теперь дошло) crazy

 
PomanoBДата: Пятница, 26.02.2010, 19:18:57 | Сообщение # 8
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
AddToFullPack Тоже очень часто вызывается
Всё можно проверить с помощью amxmodx_profiler


http://romanov4400.mybrute.com
 
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Плагин Semi-clip (Выдернул из climb - требуются пояснения)
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2024