Ru-MaNGOS

Вернуться   Ru-MaNGOS > Документация > Новичкам

Важная информация

Новичкам Информация для всех новичков, новичкам рекомендуется задавать свои вопросы здесь

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.06.2010, 14:43   #1
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию Создание итема игроку

Решил тут кое-что сделать, но что-то не получается...
Нужно при опред условии создать игроку итем. Вызывается из item.cpp
Использую конструкцию:
Код:
if (GetEntry() == id_1)
{
	owner->DestroyItem(GetBagSlot(), GetSlot(), true);
	Item *pItem = Item::CreateItem(id_2, 1, owner);
        owner->SendNewItem(pItem, 1, true, false);
	return;
}
В таком случае приходит сообщение, что игрок получил предмет, даже картинка в сумку падает, но самого предмета в сумке нет...
Если использовать конструкцию типа:
Код:
if (GetEntry() == id_1)
{
	owner->DestroyItem(GetBagSlot(), GetSlot(), true);
	ItemPosCountVec dest;
	Item *pItem = owner->StoreNewItem(dest, id_2, true, Item::GenerateItemRandomPropertyId(id_2));
        owner->SendNewItem(pItem, 1, true, false);
	return;
}
То вообще ничего не происходит Как быть?
KiriX вне форума   Ответить с цитированием
Старый 26.06.2010, 14:48   #2
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Для готового объекта Item:
Код:
        Item* item = ...;
        ItemPosCountVec dest;
        if(CanStoreItem(NULL_BAG, NULL_SLOT, dest, item) == EQUIP_ERR_OK)
        {
            StoreItem(dest, item, true);
            SendNewItem(item, item->GetCount(), true, false);
        }
Для itemId/count:
Код:
        uint32 itemId = ...;
        uint8 count = ...;
        ItemPosCountVec dest;
        if(CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemId, count) == EQUIP_ERR_OK)
        {
            Item* item = StoreNewItem(dest, itemId, true, Item::GenerateItemRandomPropertyId(itemId));
            SendNewItem(item, count, true, false);
        }
LordJZ вне форума   Ответить с цитированием
Старый 26.06.2010, 15:17   #3
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Неа... Это по сути тоже самое что пишу я только добавлена проверка... Так же не пашет - картинка буд-то итем кладётся в сумку есть, но сам итем в сумке не появляется.
Мне кажется проблема в том, что код вызывается в item.cpp и ItemPosCountVec dest; не определяется, поэтому итем создаётся вникуда...
KiriX вне форума   Ответить с цитированием
Старый 26.06.2010, 15:23   #4
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Эта "Проверка" (CanStore[New]Item) заполняет вектор положения предмета. Т.е. именно ItemPosCountVec
LordJZ вне форума   Ответить с цитированием
Старый 26.06.2010, 15:32   #5
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Цитата:
Сообщение от LordJZ Посмотреть сообщение
Эта "Проверка" (CanStore[New]Item) заполняет вектор положения предмета. Т.е. именно ItemPosCountVec
Точно! Большое спасибо!
Я просто забыл добавить return; в твой вариант и у меня следующим действием удалялся новосозданный итем
CanStore - мне казалось что это проверка можно ли создать итем, а у меня перед создание обязательно один слот освобождался, вот я её и пропустил Спасибо!
Патчик на реализацию итема: http://ru.wowhead.com/item=39878:
PHP код:
diff --git a/src/game/Item.cpp b/src/game/Item.cpp
index e94bdf3
..b5a7655 100644
--- a/src/game/Item.cpp
+++ b/src/game/Item.cpp
@@ -282,+282,19 @@ void Item::UpdateDuration(Playerowneruint32 diff)
 
     if (
GetUInt32Value(ITEM_FIELD_DURATION)<=diff)
     {
+        if (
GetEntry() == 39878)
+        {
+            
owner->DestroyItem(GetBagSlot(), GetSlot(), true);
+            
uint32 itemId 39883;
+            
uint8 count 1;
+            
ItemPosCountVec dest;
+            if(
owner->CanStoreNewItem(NULL_BAGNULL_SLOTdestitemIdcount) == EQUIP_ERR_OK)
+            {
+                
Itemitem owner->StoreNewItem(destitemIdtrueItem::GenerateItemRandomPropertyId(itemId));
+                
owner->SendNewItem(itemcounttruefalse);
+            }
+            return;
+        }
         
owner->DestroyItem(GetBagSlot(), GetSlot(), true);
         return;
     } 
KiriX вне форума   Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[10504][fix bug] урон петом по игроку на нейтральной територии Chipleo Принятые патчи 3 19.09.2010 01:26
Создание спелов antigm Корзина 8 15.08.2010 12:43
Создание внутриигровой команды Houk Новичкам 9 10.08.2010 19:23
Лицом к игроку, как??? Lordronn Скрипты 4 04.08.2010 12:43
Создание диалога для NPC tozter Корзина 1 31.03.2010 13:31


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


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot