Русское сообщество по скриптингу

как телепортировать в респавн ct игроков из разных команд?

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

как телепортировать в респавн ct игроков из разных команд?

Сообщение cyberbro » 09 авг 2018, 20:38

Суть проблемы заключается в следующем:
-при дуэле 2х игроков из кт и т нужно переместить обоих на респавн кт.

код был такой:
Код: Выделить всё
new FloatfOrigin];
    
pevengfuncEngFunc_FindEntityByString0"classname""info_player_start" ), pev_originfOrigin );
    
set_pevpPlayerpev_originfOrigin );
    
fOrigin] += 45.0;
    
fOrigin] += 25.0;
    
set_pevpTargetpev_originfOrigin );
 

pPlayer и pTarget это 2 игрока, кто начал дуэль и с кем он захотел дуэль..

т.е при начале дуэли двух игроков перемещает в info_player_start, изначально было смещение:
fOrigin[ 0 ] += 45.0;
fOrigin[ 1 ] += 25.0;
но как показала практика на некоторых картах спавны около стен и игроки при смещении появляются в стене и соответственно не могут двигаться.
если отказаться от смещения, то оба игрока появляются в одной точке друг в друге и тоже часто застревают.

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

подскажите куда копать, как указать 2 соседних спавна при дуэли?
Аватара пользователя
cyberbro
 
Сообщения: 3
Зарегистрирован: 24 мар 2018, 16:16
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Языки программирования: Php

Re: как телепортировать в респавн ct игроков из разных коман

Сообщение Papito » 10 авг 2018, 12:46

Попробуй такой вариант кода:
Код: Выделить всё
public ClCmdTeleport(pPlayer)
{
        new pEntity = 0;
        new Float:vecOrigin[3];
       
        while 
((pEntity = find_ent_by_class(pEntity, "info_player_deathmatch")))
        {
                entity_get_vector(pEntity, EV_VEC_origin, vecOrigin);
                engfunc(EngFunc_TraceHull, vecOrigin, vecOrigin, DONT_IGNORE_MONSTERS, HULL_HUMAN, pEntity, 0);

                if (get_tr2(0, TR_StartSolid) || get_tr2(0, TR_AllSolid) || !get_tr2(0, TR_InOpen))
                        continue;
               
                entity_set_origin
(pPlayer, vecOrigin);
                break;
        }
}

Используй его и для ct и для t.
Аватара пользователя
Papito
 
Сообщения: 545
Зарегистрирован: 09 ноя 2012, 16:28
Откуда: Montana
Благодарил (а): 44 раз.
Поблагодарили: 121 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter Strike 1.6
SAMP

Re: как телепортировать в респавн ct игроков из разных коман

Сообщение Mistrick » 10 авг 2018, 13:03

Аватара пользователя
Mistrick
Скриптер
 
Сообщения: 2940
Зарегистрирован: 04 ноя 2012, 18:15
Благодарил (а): 43 раз.
Поблагодарили: 1247 раз.
Языки программирования: PAWN
С/С++(few above zero)

Re: как телепортировать в респавн ct игроков из разных коман

Сообщение Dorus » 10 авг 2018, 18:01

Использование:
Код: Выделить всё
teleport_to_spawn(id, 1) //Телепортировать на базу Террористов
teleport_to_spawn(id, 2) //Телепортировать на базу Контр-террористов  


Сток:
Код: Выделить всё
stock teleport_to_spawn(id, iTeam)
{
    if(!is_user_alive(id))
        return
    
    new iEntList
[1], iOrigin[3];
    new iEnt = -1
    new Float
:fSpawnOrigin[3]
    new Float:fVicinity = 96.0
    new bool
:bFound = false

    do
    
{
        switch(iTeam)
        {
            case 1: iEnt = find_ent_by_class(iEnt, "info_player_deathmatch")
            case 2: iEnt = find_ent_by_class(iEnt, "info_player_start")
        }
        
        if
(pev_valid(iEnt))
        {
            entity_get_vector(iEnt, EV_VEC_origin, fSpawnOrigin)
            
            FVecIVec
(fSpawnOrigin, iOrigin)
            
            if
(find_sphere_class(0, "player", fVicinity, iEntList, 1, fSpawnOrigin) == 0)
                bFound = true
        
}
    }
    while(iEnt && !bFound)
    
    if
(!bFound)
        return
    
    if
(pev_valid(iEnt))
    {
        new iSpawnOrigin[3], Float:fSpawnOrigin[3]

        entity_get_vector(iEnt, EV_VEC_origin, fSpawnOrigin)
        FVecIVec(fSpawnOrigin, iSpawnOrigin)
        set_user_origin(id, iSpawnOrigin)
    }
    else
    ChatColor
(id, "Вас не удалось телепортировать :(")
}
:thumbs_up :yahoo: :bravo:
Группа плагинов:
vk.com/remake_dorus
Аватара пользователя
Dorus
 
Сообщения: 172
Зарегистрирован: 28 авг 2014, 17:58
Благодарил (а): 27 раз.
Поблагодарили: 15 раз.
Опыт программирования: Больше трех лет
Языки программирования: PAWN
C++


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19