Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Скрипты (http://mangos.ytdb.ru/forumdisplay.php?f=19)
-   -   Как проверить наличие предмета у игрока? (http://mangos.ytdb.ru/showthread.php?t=422)

tozter 23.03.2010 12:03

Как проверить наличие предмета у игрока?
 
Надо проверить, есть предмет в заданном количестве или нет.
Как это сделать?

PSZ 23.03.2010 12:16

Код:

Player->HasItemCount()

Hantet 23.03.2010 14:18

Тему создавать новую незачем.
Подскажите, как определить всех персонажей в определённой группе (через for(), естественно), если известен только id группы?

Код:

Group* pGroup = pPlayer->GetGroup();
for(GroupReference* pRef = pGroup->GetFirstMember(); pRef != NULL; pRef = pRef->next())
{
        if(Player* pMember = pRef->getSource())
        {
        if(pMember->IsInWorld() && pMember->isAlive())
        pMember->Relocate(x,y,z,o);
        }
}

Вот мне хочется что-то наподобие этого.

Anti 24.03.2010 16:07

Цитата:

Сообщение от Hantet (Сообщение 2960)
Тему создавать новую незачем.
Подскажите, как определить всех персонажей в определённой группе (через for(), естественно), если известен только id группы?

Код:

Group* pGroup = pPlayer->GetGroup();
for(GroupReference* pRef = pGroup->GetFirstMember(); pRef != NULL; pRef = pRef->next())
{
        if(Player* pMember = pRef->getSource())
        {
        if(pMember->IsInWorld() && pMember->isAlive())
        pMember->Relocate(x,y,z,o);
        }
}

Вот мне хочется что-то наподобие этого.

Старайтесь использовать 1 тему на 1 вопрос.
Но я отвечу на ваш вопрос, что вам мешает итерировать саму группу по членам группы?

Hantet 24.03.2010 17:02

Цитата:

Сообщение от Anti (Сообщение 3043)
Старайтесь использовать 1 тему на 1 вопрос.
Но я отвечу на ваш вопрос, что вам мешает итерировать саму группу по членам группы?

Благодарю за ответ.
Я смогу её итерировать по членам группы только тогда, когда смогу опознать саму группу. Сейчас я владею только числом, с которым никаких действий производить невозможно.

Было бы что-то наподобие:
Код:

Group* pGroup = GetGroupLink(777);
for(GroupReference* pRef = pGroup->GetFirstMember(); pRef != NULL; pRef = pRef->next())
{
... /*действия с участниками группы*/
}
}

Где 777 - номер группы. (функцию GetGroupLink придумал от балды, чтобы просто нагляднее было).

Помогите, пожалуйста.

Anti 24.03.2010 18:27

Цитата:

Сообщение от Hantet (Сообщение 3046)
Благодарю за ответ.
Я смогу её итерировать по членам группы только тогда, когда смогу опознать саму группу. Сейчас я владею только числом, с которым никаких действий производить невозможно.

Было бы что-то наподобие:
Код:

Group* pGroup = GetGroupLink(777);
for(GroupReference* pRef = pGroup->GetFirstMember(); pRef != NULL; pRef = pRef->next())
{
... /*действия с участниками группы*/
}
}

Где 777 - номер группы. (функцию GetGroupLink придумал от балды, чтобы просто нагляднее было).

Помогите, пожалуйста.

Ну вы были близки, а я немного переусердствовал. Хотя я думаю внесение метода переноса всей группы к опр координатам имеет место быть, но это реализовано несколько иначе.

Посмотрите ChatHandler::HandleGroupgoCommand

Hantet 25.03.2010 09:05

Да, спасибо, но я всё таки нашёл тот заветный метод в коде (и кстати, мои догадки были очень близки):
Код:

Group* pGroup = sObjectMgr.GetGroupById(777);
for(pRef=pGroup->GetFirstMember();pRef!=NULL;pRef=pRef->next())
{
  if(Player* pMember = pRef->getSource())
  {
    pMember->SetHealth(pMember->GetMaxHealth());
    if(pMember->getPowerType() == POWER_MANA)
    pMember->SetPower(POWER_MANA, pMember->GetMaxPower(POWER_MANA));
    pMember->RemoveAllSpellCooldown();
    if(pMember->IsInWorld())
    pMember->TeleportTo(m,x,y,z,o);
  }
}

Данный кусок кода извлекает из БД (памяти?) всех персонажей, находящихся в группе под номером 777, восстанавливает им хп, ману, кд, и телепортирует по координатам x,y,z,o на карте m.

Всем спасибо.


Текущее время: 09:22. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS