Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.
Модераторы: Subb98, liFe iS GoOD
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.
В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.
Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.
ArKaNeMaN » 14 май 2017, 13:18
Люди, привет...
Мне нужно как то телепортировать игрока к другому игроку та что бы он не застрял... я пытался что то сделать, но у меня как всегда всё идёт через жопу и крашит сервер
- Код: Выделить всё
static random; random = random_num(1,2)
switch(random){
case 1:{
static origin[3];
get_user_origin(i_T, origin, 0);
static bool:vacant; vacant = false;
while(!vacant){
static random1; random_num(1, 2);
static o_plus;
switch(random1){
case 1:{
o_plus = 30;
}
case 2:{
o_plus = -30;
}
}
static Float:origin_test[3]
for(new i = 1; i<=2; i++){
origin_test[i] = float(origin[i]);
}
static random2; random_num(0, 2);
switch(random2){
case 0:{
origin_test[random2] += o_plus;
}
case 2:{
origin_test[random2] += o_plus;
}
}
if(is_hull_vacant(origin_test, HULL_HUMAN)){
vacant = true;
for(new i = 1; i<=2; i++){
origin[i] = floatround(origin_test[i], floatround_round);
}
}
}
set_user_origin(i_Ct, origin);
}
case 2:{
static origin[3];
get_user_origin(i_Ct, origin, 0);
static bool:vacant; vacant = false;
while(!vacant){
static random1; random_num(1, 2);
static o_plus;
switch(random1){
case 1:{
o_plus = 30;
}
case 2:{
o_plus = -30;
}
}
static Float:origin_test[3]
for(new i = 1; i<=2; i++){
origin_test[i] = float(origin[i]);
}
static random2; random_num(0, 2);
switch(random2){
case 0:{
origin_test[random2] += o_plus;
}
case 2:{
origin_test[random2] += o_plus;
}
}
if(is_hull_vacant(origin_test, HULL_HUMAN)){
vacant = true;
for(new i = 1; i<=2; i++){
origin[i] = floatround(origin_test[i], floatround_round);
}
}
}
set_user_origin(i_T, origin);
}
}
Тут телепортирует(нет) i_T к i_Ct или наоборот
-
ArKaNeMaN
-
- Сообщения: 105
- Зарегистрирован: 03 авг 2016, 20:28
- Благодарил (а): 26 раз.
- Поблагодарили: 11 раз.
- Опыт программирования: Около года
- Языки программирования: AMXX
PHP
JS
-
Mistrick » 14 май 2017, 13:29
Пробуй вытащить. Тут есть код телепорта за спину другого игрока.
- Код: Выделить всё
new g_iCurMode, g_iModeSpy, g_iMaxPlayers;
new Float:g_fLastUse[33];
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
RegisterHam(Ham_Player_PreThink, "player", "Ham_PlayerPreThink_Pre", false);
g_iModeSpy = dr_register_mode
(
.Name = "DRM_MODE_SPY",
.Mark = "spy",
.RoundDelay = 0,
.CT_BlockWeapons = 1,
.TT_BlockWeapons = 1,
.CT_BlockButtons = 0,
.TT_BlockButtons = 1,
.Bhop = 1,
.Usp = 0,
.Hide = 0
);
g_iMaxPlayers = get_maxplayers();
}
public Ham_PlayerPreThink_Pre(id)
{
if(!is_user_alive(id)) return HAM_IGNORED;
new Float:gametime = get_gametime();
if(gametime > g_fLastUse[id] + BLINK_DELAY) return HAM_IGNORED;
new buttons = pev(id, pev_button);
new oldbuttons = pev(id, pev_oldbuttons);
if(buttons & IN_USE && ~oldbuttons & IN_USE)
{
new target, body; get_user_aiming(id, target, body);
if(!IsPlayer(target)) return HAM_IGNORED;
new Float:origin[3]; get_front_origin(target, -48.0, origin);
set_pev(id, pev_origin, origin);
new Float:vangles[3]; pev(target, pev_v_angle, vangles);
set_pev(id, pev_v_angle, vangles);
set_pev(id, pev_angles, vangles);
set_pev(id, pev_fixangle, 1);
CheckStuck(id);
g_fLastUse[id] = gametime;
}
return HAM_IGNORED;
}
public dr_selected_mode(id, mode)
{
g_iCurMode = mode;
if(mode == g_iModeSpy)
{
}
}
CheckStuck(id)
{
static const Float:g_flMoves[][3] =
{
{0.0,0.0,1.0},{0.0,0.0,-1.0},{0.0,1.0,0.0},{0.0,-1.0,0.0},{1.0,0.0,0.0},{-1.0,0.0,0.0},{-1.0,1.0,1.0},{1.0,1.0,1.0},{1.0,-1.0,1.0},{1.0,1.0,-1.0},{-1.0,-1.0,1.0},{1.0,-1.0,-1.0},{-1.0,1.0,-1.0},{-1.0,-1.0,-1.0},
{0.0,0.0,2.0},{0.0,0.0,-2.0},{0.0,2.0,0.0},{0.0,-2.0,0.0},{2.0,0.0,0.0},{-2.0,0.0,0.0},{-2.0,2.0,2.0},{2.0,2.0,2.0},{2.0,-2.0,2.0},{2.0,2.0,-2.0},{-2.0,-2.0,2.0},{2.0,-2.0,-2.0},{-2.0,2.0,-2.0},{-2.0,-2.0,-2.0},
{0.0,0.0,3.0},{0.0,0.0,-3.0},{0.0,3.0,0.0},{0.0,-3.0,0.0},{3.0,0.0,0.0},{-3.0,0.0,0.0},{-3.0,3.0,3.0},{3.0,3.0,3.0},{3.0,-3.0,3.0},{3.0,3.0,-3.0},{-3.0,-3.0,3.0},{3.0,-3.0,-3.0},{-3.0,3.0,-3.0},{-3.0,-3.0,-3.0},
{0.0,0.0,4.0},{0.0,0.0,-4.0},{0.0,4.0,0.0},{0.0,-4.0,0.0},{4.0,0.0,0.0},{-4.0,0.0,0.0},{-4.0,4.0,4.0},{4.0,4.0,4.0},{4.0,-4.0,4.0},{4.0,4.0,-4.0},{-4.0,-4.0,4.0},{4.0,-4.0,-4.0},{-4.0,4.0,-4.0},{-4.0,-4.0,-4.0},
{0.0,0.0,5.0},{0.0,0.0,-5.0},{0.0,5.0,0.0},{0.0,-5.0,0.0},{5.0,0.0,0.0},{-5.0,0.0,0.0},{-5.0,5.0,5.0},{5.0,5.0,5.0},{5.0,-5.0,5.0},{5.0,5.0,-5.0},{-5.0,-5.0,5.0},{5.0,-5.0,-5.0},{-5.0,5.0,-5.0},{-5.0,-5.0,-5.0}
};
new i, flags, Float:vOrigin[3], Float:vNewOrigin[3], Float:vMins[3];
flags = pev(id, pev_flags);
pev(id, pev_origin, vOrigin);
if(is_user_stuck(id, vOrigin, flags))
{
pev(id, pev_mins, vMins);
for(i = 0; i < sizeof(g_flMoves); i++)
{
vNewOrigin[0] = vOrigin[0] - vMins[0] * g_flMoves[i][0];
vNewOrigin[1] = vOrigin[1] - vMins[1] * g_flMoves[i][1];
vNewOrigin[2] = vOrigin[2] - vMins[2] * g_flMoves[i][2];
if(!is_user_stuck(id, vNewOrigin, flags))
{
set_pev(id, pev_velocity, Float:{0.0, 0.0 , 0.0});
set_pev(id, pev_flags, flags | FL_DUCKING);
set_pev(id, pev_size, Float:{-16.0, -16.0, -18.0}, Float:{16.0, 16.0, 18.0});
set_pev(id, pev_origin, vNewOrigin);
break;
}
}
}
}
stock bool:is_user_stuck(const id, const Float:vOrigin[3], const flags)
{
return bool:(trace_hull(vOrigin, flags & FL_DUCKING ? HULL_HEAD : HULL_HUMAN, id, IGNORE_MONSTERS) & 2);
}
stock get_front_origin(id, Float:dist, Float:origin[3])
{
new iVectorStart[3]; get_user_origin(id, iVectorStart, 1);
new iVectorEnd[3]; get_user_origin(id, iVectorEnd, 3);
new Float:fVectorStart[3]; IVecFVec(iVectorStart, fVectorStart);
new Float:fVectorEnd[3]; IVecFVec(iVectorEnd, fVectorEnd);
new Float:fAddVec[3]; xs_vec_sub(fVectorEnd, fVectorStart, fAddVec);
fAddVec[2] = 0.0;
xs_vec_normalize(fAddVec, fAddVec);
xs_vec_mul_scalar(fAddVec, dist, fAddVec);
pev(id, pev_origin, origin);
xs_vec_add(origin, fAddVec, origin);
}
-
Mistrick
-
- Сообщения: 2940
- Зарегистрирован: 04 ноя 2012, 18:15
- Благодарил (а): 43 раз.
- Поблагодарили: 1247 раз.
- Языки программирования: PAWN
С/С++(few above zero)
ArKaNeMaN » 14 май 2017, 15:14
Вот что получилось....
- Код: Выделить всё
static random, i_tele, i_target; random = random_num(1,2)
switch(random){
case 1:{
i_tele = i_Ct
i_target = i_T
}
case 2:{
i_tele = i_T
i_target = i_Ct
}
}
new Float:origin[3]; get_front_origin(i_target, -48.0, origin);
set_pev(i_tele, pev_origin, origin);
new Float:vangles[3]; pev(i_target, pev_v_angle, vangles);
set_pev(i_tele, pev_v_angle, vangles);
set_pev(i_tele, pev_angles, vangles);
set_pev(i_tele, pev_fixangle, 1);
CheckStuck(id);
- Код: Выделить всё
CheckStuck(id){
static const Float:g_flMoves[][3] =
{
{0.0,0.0,1.0},{0.0,0.0,-1.0},{0.0,1.0,0.0},{0.0,-1.0,0.0},{1.0,0.0,0.0},{-1.0,0.0,0.0},{-1.0,1.0,1.0},{1.0,1.0,1.0},{1.0,-1.0,1.0},{1.0,1.0,-1.0},{-1.0,-1.0,1.0},{1.0,-1.0,-1.0},{-1.0,1.0,-1.0},{-1.0,-1.0,-1.0},
{0.0,0.0,2.0},{0.0,0.0,-2.0},{0.0,2.0,0.0},{0.0,-2.0,0.0},{2.0,0.0,0.0},{-2.0,0.0,0.0},{-2.0,2.0,2.0},{2.0,2.0,2.0},{2.0,-2.0,2.0},{2.0,2.0,-2.0},{-2.0,-2.0,2.0},{2.0,-2.0,-2.0},{-2.0,2.0,-2.0},{-2.0,-2.0,-2.0},
{0.0,0.0,3.0},{0.0,0.0,-3.0},{0.0,3.0,0.0},{0.0,-3.0,0.0},{3.0,0.0,0.0},{-3.0,0.0,0.0},{-3.0,3.0,3.0},{3.0,3.0,3.0},{3.0,-3.0,3.0},{3.0,3.0,-3.0},{-3.0,-3.0,3.0},{3.0,-3.0,-3.0},{-3.0,3.0,-3.0},{-3.0,-3.0,-3.0},
{0.0,0.0,4.0},{0.0,0.0,-4.0},{0.0,4.0,0.0},{0.0,-4.0,0.0},{4.0,0.0,0.0},{-4.0,0.0,0.0},{-4.0,4.0,4.0},{4.0,4.0,4.0},{4.0,-4.0,4.0},{4.0,4.0,-4.0},{-4.0,-4.0,4.0},{4.0,-4.0,-4.0},{-4.0,4.0,-4.0},{-4.0,-4.0,-4.0},
{0.0,0.0,5.0},{0.0,0.0,-5.0},{0.0,5.0,0.0},{0.0,-5.0,0.0},{5.0,0.0,0.0},{-5.0,0.0,0.0},{-5.0,5.0,5.0},{5.0,5.0,5.0},{5.0,-5.0,5.0},{5.0,5.0,-5.0},{-5.0,-5.0,5.0},{5.0,-5.0,-5.0},{-5.0,5.0,-5.0},{-5.0,-5.0,-5.0}
};
new i, flags, Float:vOrigin[3], Float:vNewOrigin[3], Float:vMins[3];
flags = pev(id, pev_flags);
pev(id, pev_origin, vOrigin);
if(is_user_stuck(id, vOrigin, flags))
{
pev(id, pev_mins, vMins);
for(i = 0; i < sizeof(g_flMoves); i++)
{
vNewOrigin[0] = vOrigin[0] - vMins[0] * g_flMoves[i][0];
vNewOrigin[1] = vOrigin[1] - vMins[1] * g_flMoves[i][1];
vNewOrigin[2] = vOrigin[2] - vMins[2] * g_flMoves[i][2];
if(!is_user_stuck(id, vNewOrigin, flags))
{
set_pev(id, pev_velocity, Float:{0.0, 0.0 , 0.0});
set_pev(id, pev_flags, flags | FL_DUCKING);
set_pev(id, pev_size, Float:{-16.0, -16.0, -18.0}, Float:{16.0, 16.0, 18.0});
set_pev(id, pev_origin, vNewOrigin);
break;
}
}
}
}
-
ArKaNeMaN
-
- Сообщения: 105
- Зарегистрирован: 03 авг 2016, 20:28
- Благодарил (а): 26 раз.
- Поблагодарили: 11 раз.
- Опыт программирования: Около года
- Языки программирования: AMXX
PHP
JS
-
D34by » 14 май 2017, 15:34
Перемещать нужно через
- Код: Выделить всё
EngFunc_SetOrigin
Допустим при циклировании и перемещении игрока через pev_origin хул будет считать, что там никого нет, а это чревато последствиями
Work with Zombie Plague ver. 4|5, Biohazard, Zombie Engine, Public, Weapon System
-
D34by
-
- Сообщения: 537
- Зарегистрирован: 13 фев 2014, 12:45
- Благодарил (а): 15 раз.
- Поблагодарили: 192 раз.
- Опыт программирования: Больше трех лет
- Языки программирования: пешка
сишка
ArKaNeMaN » 14 май 2017, 17:38
Ну... я такое где то видел... но вот проблема... я не знаю куда это тут впихнуть XDD
Добавлено спустя 1 час 33 минуты 51 секунду:
Оно как бы работает... но всё равно есть моменты когда игрок застревает в стене..
-
ArKaNeMaN
-
- Сообщения: 105
- Зарегистрирован: 03 авг 2016, 20:28
- Благодарил (а): 26 раз.
- Поблагодарили: 11 раз.
- Опыт программирования: Около года
- Языки программирования: AMXX
PHP
JS
-
Вернуться в Скриптинг
Кто сейчас на конференции
Сейчас этот форум просматривают: Google [Bot] и гости: 13