PartyMembers - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II > Работа со скриптами

Работа со скриптами Помощь в редактировании и написании квестов к Java серверам, а так же эвентов.

Ответ
Опции темы
Непрочитано 03.05.2017, 02:24   #1
Пользователь

Автор темы (Топик Стартер) PartyMembers

Сделал систему, проверки все работают, но если все проходит, то телепортирует только лидера группы, без членов группы.
if(command.equalsIgnoreCase("teleport"))
            {
                if (player.getParty() == null) {
                    player.sendMessage("Вам нужна группа для охоты на титанов.");
                    player.sendActionFailed();
                    return;
                }
                if (player.getParty().getPartyLeader() == player) {
                    for (Player partyMember : player.getParty().getPartyMembers()) {
                        if(player.isHero() || partyMember.isHero())
                        {
                            player.sendMessage("Лидерам фракции нельзя находится на землях титанов.");
                            player.sendActionFailed();
                            return;
                        }
                        if (partyMember.isInRangeZ(player, 2000) && !partyMember.isDead())
                        {
                            if (player.getFactionId() == 1) {
                                partyMember.teleToLocation(Location.findPointToStay(-24776, 253208, -3024, 100, 150, 1));
                                partyMember.stopMove();
                            } else if (player.getFactionId() == 2) {
                                partyMember.teleToLocation(Location.findPointToStay(-4344, 256504, -3128, 100, 150, 1));
                            }
                        }
                        else if(!partyMember.isInRange(player, 2000) || partyMember.isDead())
                        {
                            partyMember.sendMessage("Необходимо всем членам группы стоять у путеводителя и быть живыми.");
                            player.sendActionFailed();
                            partyMember.sendActionFailed();
                            return;
                        }
                    }
                }
                else if (player.getParty().getPartyLeader() != player)
                {
                    player.sendMessage("Только лидер группы может призвать на земли титанов.");
                    player.sendActionFailed();
                    return;
                }
            }
Code: Java
Где ошибка?
Enjoooy вне форума Ответить с цитированием
Непрочитано 03.05.2017, 04:02   #2

По умолчанию Re: PartyMembers

В данном коде, лидера нужно телепортировать в последнюю очередь, т.к. вы телертируете его, а следующий индекс листа это мембер пати... Пати лидер улетел далеко, верно ? Верно же! ^_^ Ну, и тут мы обрабатываем

PHP код:
                       else if(!partyMember.isInRange(player2000) || partyMember.isDead())
                        {
                            
partyMember.sendMessage("Необходимо всем членам группы стоять у путеводителя и быть живыми.");
                            
player.sendActionFailed();
                            
partyMember.sendActionFailed();
                            [
COLOR="Red"]return;[/COLOR]
                        } 
Ну, и это важно... В данном коде есть море ошибок, если есть 5 мемберов, первые 2 мембера из листа подходят по условиям радиуса от пати лидера, мы их тпшним, НО! Ну конечно есть НО, если какой то мудак, ушел далеко, и условия не прошли, делаете выход их функции.. Соответственно из-за какого то мудака в середине листа, остальные игроков не сможет тпшнуть, потому-что мы вышли из функции.

PHP код:
if(command.equalsIgnoreCase("teleport"))
            {
                if (
player.getParty() == null) {
                    
player.sendMessage("Вам нужна группа для охоты на титанов.");
                    
player.sendActionFailed();
                    return;
                }
                if (
player.getParty().getPartyLeader() == player) {
                    for (
Player partyMember player.getParty().getPartyMembers()) {
                        if(
partyMember == player)
                            continue;
                            
                        if(
player.isHero() || partyMember.isHero())
                        {
                            
player.sendMessage("Лидерам фракции нельзя находится на землях титанов.");
                            
player.sendActionFailed();
                            continue;
                        }
                        if (
partyMember.isInRangeZ(player2000) && !partyMember.isDead())
                        {
                            if (
player.getFactionId() == 1) {
                                
partyMember.teleToLocation(Location.findPointToStay(-24776253208, -30241001501));
                                
partyMember.stopMove();
                            } else if (
player.getFactionId() == 2) {
                                
partyMember.teleToLocation(Location.findPointToStay(-4344256504, -31281001501));
                            }
                        }
                        else if(!
partyMember.isInRange(player2000) || partyMember.isDead())
                        {
                            
partyMember.sendMessage("Необходимо всем членам группы стоять у путеводителя и быть живыми.");
                            
player.sendActionFailed();
                            
partyMember.sendActionFailed();
                            continue;
                        }
                    }
                    if (
player.getFactionId() == 1) {
                        
player.teleToLocation(Location.findPointToStay(-24776253208, -30241001501));
                    }
                    else if (
player.getFactionId() == 2) {
                        
player.teleToLocation(Location.findPointToStay(-4344256504, -31281001501));
                    }                
                }
                else if (
player.getParty().getPartyLeader() != player)
                {
                    
player.sendMessage("Только лидер группы может призвать на земли титанов.");
                    
player.sendActionFailed();
                    continue;
                }
            } 
Можно вот так заговнокодитьнаскоруюрукувнотпаде.
__________________
Mangol вне форума Отправить сообщение для Mangol с помощью ICQ Ответить с цитированием
Сказали спасибо:
Непрочитано 04.05.2017, 00:21   #3
Пользователь

Автор темы (Топик Стартер) Re: PartyMembers

  if(command.equalsIgnoreCase("teleport"))
            {
                if (player.getParty() == null) {
                    player.sendMessage("Вам нужна группа для охоты на титанов.");
                    player.sendActionFailed();
                    return;
                }
                if (player.getParty().getPartyLeader() == player) {
                    for (Player partyMember : player.getParty().getPartyMembers()) {
                        if(partyMember == player)
                            continue;
 
                        if(player.isHero() || partyMember.isHero())
                        {
                            player.sendMessage("Лидерам фракции нельзя находится на землях титанов.");
                            player.sendActionFailed();
                            continue;
                        }
                        if (partyMember.isInRangeZ(player, 2000) && !partyMember.isDead())
                        {
                            if (player.getFactionId() == 1) {
                                partyMember.teleToLocation(Location.findPointToStay(-24776, 253208, -3024, 100, 150, 1));
                                partyMember.stopMove();
                            } else if (player.getFactionId() == 2) {
                                partyMember.teleToLocation(Location.findPointToStay(-4344, 256504, -3128, 100, 150, 1));
                            }
                        }
                        else if(!partyMember.isInRange(player, 2000) || partyMember.isDead())
                        {
                            partyMember.sendMessage("Необходимо всем членам группы стоять у путеводителя и быть живыми.");
                            player.sendActionFailed();
                            partyMember.sendActionFailed();
                            continue;
                        }
                    }
                    if (player.getFactionId() == 1) {
                        player.teleToLocation(Location.findPointToStay(-24776, 253208, -3024, 100, 150, 1));
                    }
                    else if (player.getFactionId() == 2) {
                        player.teleToLocation(Location.findPointToStay(-4344, 256504, -3128, 100, 150, 1));
                    }
                }
                else if (player.getParty().getPartyLeader() != player)
                {
                    player.sendMessage("Только лидер группы может призвать на земли титанов.");
                    player.sendActionFailed();
                    return;
                }
            }
Code: Java
Сделал так, работает почти верно, только если есть в группе герой или человек находится далеко, его просто не телепортирует, остальные улетают, по задумке должно быть так, что если в пати есть герой или член группы какой-либо далеко, то никого не телепортирует, если менять на return, то происходит вообще какая то неведомая фигня. Выбирает рандомного чел-ка или хз как, и телепортирует одно, я вообще не до конца понял принцип работы. Но что то явно не то
Enjoooy вне форума Ответить с цитированием
Непрочитано 04.05.2017, 00:24   #4

По умолчанию Re: PartyMembers

Перед этим циклом, сделать цикл проверки всех игроков, не телепортируя их.
Если все успешно, применяем второй цикл для телепорта этих игроков.
__________________
Mangol вне форума Отправить сообщение для Mangol с помощью ICQ Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 03:53. Часовой пояс GMT +3.

Вверх