Этот урок я решил начать с создания торговцев. Сегодня я вам объясню как сделать NPC через которого вы сможете получить тот или иной предмет. Если вы зашли суда в первый раз то ознакомьтесь с этим уроком . Что бы вам было все более понятнее. Я сделал этот скрипт как пример.
Code
local NPC_ID = Суда впишите ид вашего нпс. function ArenaSeason_OnMenu(unit, event, player) unit:VendorRemoveAllItems() unit:GossipCreateMenu(101, player, 0) unit:GossipMenuAddItem(1, "Рыцарь Смерти", 1, 0) unit:GossipMenuAddItem(1, "Друид", 2, 0) unit:GossipMenuAddItem(1, "Охотник", 3, 0) unit:GossipMenuAddItem(1, "Маг", 4, 0) unit:GossipMenuAddItem(1, "Паладин", 5, 0) unit:GossipMenuAddItem(1, "Жрец", 6, 0) unit:GossipMenuAddItem(1, "Разбойник", 7, 0) unit:GossipMenuAddItem(1, "Шаман", 8, 0) unit:GossipMenuAddItem(1, "Чернокнижник", 9, 0) unit:GossipMenuAddItem(1, "Воин", 10, 0) unit:GossipMenuAddItem(2, "Выход", 11, 0) unit:GossipSendMenu(player) end function ArenaSeason_OnGossipSelect(unit, event, player, id, intid, code) if (intid == 1) then unit:VendorAddItem(51413, 1, 0) unit:VendorAddItem(51414, 1, 0) unit:VendorAddItem(51415, 1, 0) unit:VendorAddItem(51416, 1, 0) unit:VendorAddItem(51418, 1, 0) player:SendVendorWindow(unit) end if (intid == 2) then unit:VendorAddItem(51419, 1, 0) unit:VendorAddItem(51420, 1, 0) unit:VendorAddItem(51421, 1, 0) unit:VendorAddItem(51422, 1, 0) unit:VendorAddItem(51424, 1, 0) unit:VendorAddItem(51425, 1, 0) unit:VendorAddItem(51426, 1, 0) unit:VendorAddItem(51427, 1, 0) unit:VendorAddItem(51428, 1, 0) unit:VendorAddItem(51430, 1, 0) unit:VendorAddItem(51433, 1, 0) unit:VendorAddItem(51434, 1, 0) unit:VendorAddItem(51435, 1, 0) unit:VendorAddItem(51436, 1, 0) unit:VendorAddItem(51438, 1, 0) player:SendVendorWindow(unit) end if (intid == 3) then unit:VendorAddItem(51458, 1, 0) unit:VendorAddItem(51459, 1, 0) unit:VendorAddItem(51460, 1, 0) unit:VendorAddItem(51461, 1, 0) unit:VendorAddItem(51462, 1, 0) player:SendVendorWindow(unit) end if (intid == 4) then unit:VendorAddItem(51463, 1, 0) unit:VendorAddItem(51464, 1, 0) unit:VendorAddItem(51465, 1, 0) unit:VendorAddItem(51466, 1, 0) unit:VendorAddItem(51467, 1, 0) player:SendVendorWindow(unit) end if (intid == 5) then unit:VendorAddItem(51468, 1, 0) unit:VendorAddItem(51469, 1, 0) unit:VendorAddItem(51470, 1, 0) unit:VendorAddItem(51471, 1, 0) unit:VendorAddItem(51473, 1, 0) unit:VendorAddItem(51474, 1, 0) unit:VendorAddItem(51475, 1, 0) unit:VendorAddItem(51476, 1, 0) unit:VendorAddItem(51477, 1, 0) unit:VendorAddItem(51479, 1, 0) player:SendVendorWindow(unit) end if (intid == 6) then unit:VendorAddItem(51482, 1, 0) unit:VendorAddItem(51483, 1, 0) unit:VendorAddItem(51484, 1, 0) unit:VendorAddItem(51485, 1, 0) unit:VendorAddItem(51486, 1, 0) unit:VendorAddItem(51487, 1, 0) unit:VendorAddItem(51488, 1, 0) unit:VendorAddItem(51489, 1, 0) unit:VendorAddItem(51490, 1, 0) unit:VendorAddItem(51491, 1, 0) player:SendVendorWindow(unit) end if (intid == 7) then unit:VendorAddItem(51492, 1, 0) unit:VendorAddItem(51493, 1, 0) unit:VendorAddItem(51494, 1, 0) unit:VendorAddItem(51495, 1, 0) unit:VendorAddItem(51496, 1, 0) player:SendVendorWindow(unit) end if (intid == 8) then unit:VendorAddItem(51497, 1, 0) unit:VendorAddItem(51498, 1, 0) unit:VendorAddItem(51499, 1, 0) unit:VendorAddItem(51500, 1, 0) unit:VendorAddItem(51502, 1, 0) unit:VendorAddItem(51503, 1, 0) unit:VendorAddItem(51504, 1, 0) unit:VendorAddItem(51505, 1, 0) unit:VendorAddItem(51506, 1, 0) unit:VendorAddItem(51508, 1, 0) unit:VendorAddItem(51509, 1, 0) unit:VendorAddItem(51510, 1, 0) unit:VendorAddItem(51511, 1, 0) unit:VendorAddItem(51512, 1, 0) unit:VendorAddItem(51514, 1, 0) player:SendVendorWindow(unit) end if (intid == 9) then unit:VendorAddItem(51536, 1, 0) unit:VendorAddItem(51537, 1, 0) unit:VendorAddItem(51538, 1, 0) unit:VendorAddItem(51539, 1, 0) unit:VendorAddItem(51540, 1, 0) player:SendVendorWindow(unit) end if (intid == 10) then unit:VendorAddItem(51541, 1, 0) unit:VendorAddItem(51542, 1, 0) unit:VendorAddItem(51543, 1, 0) unit:VendorAddItem(51544, 1, 0) unit:VendorAddItem(51545, 1, 0) player:SendVendorWindow(unit) end if (intid == 11) then player:GossipComplete() end end RegisterUnitGossipEvent(NPC_ID, 1, ArenaSeason_OnMenu) RegisterUnitGossipEvent(NPC_ID, 2, ArenaSeason_OnGossipSelect)
Это будет выглядеть таким образом. Приношу свои извинения что у меня все на английском языке. Так как мне просто лень переводить сборку на Русский язык. Тем более ArcEmu не очень хорошо поддерживает его. Ну это не суть. Теперь давайте разберем сам скрипт. Для начала поставьте вашему NPC флаг 128 либо 129. ( Команда в игре .npc flag 129 ) Code
function ArenaSeason_OnMenu(unit, event, player) unit:VendorRemoveAllItems() unit:GossipCreateMenu(101, player, 0) unit:GossipMenuAddItem(1, "Рыцарь Смерти", 1, 0) unit:GossipMenuAddItem(1, "Друид", 2, 0) unit:GossipMenuAddItem(1, "Охотник", 3, 0) unit:GossipMenuAddItem(1, "Маг", 4, 0) unit:GossipMenuAddItem(1, "Паладин", 5, 0) unit:GossipMenuAddItem(1, "Жрец", 6, 0) unit:GossipMenuAddItem(1, "Разбойник", 7, 0) unit:GossipMenuAddItem(1, "Шаман", 8, 0) unit:GossipMenuAddItem(1, "Чернокнижник", 9, 0) unit:GossipMenuAddItem(1, "Воин", 10, 0) unit:GossipMenuAddItem(2, "Выход", 11, 0) unit:GossipSendMenu(player) end
Тут все предельно ясно и понятно. Объясню тока Code
unit:VendorRemoveAllItems()
Если этого не будет в этом коде то при выборе графы, например ''Рыцарь Смерти'' то будет такая котовасия. Как вы видите в разделе для ''Рыцаря Смерти'' есть не только вещи которые для него а так же и для Мага Охотника и т.д. Это и помогает решить эту проблему путем обновления и распределения вещей для каждой графы. Далее мы рассмотрим это. Code
if (intid == 1) then unit:VendorAddItem(51413, 1, 0) unit:VendorAddItem(51414, 1, 0) unit:VendorAddItem(51415, 1, 0) unit:VendorAddItem(51416, 1, 0) unit:VendorAddItem(51418, 1, 0) player:SendVendorWindow(unit) end
Code
VendorAddItem(51413, 1, 0)
Это добавляет в нпс определенный предмет. В этой скрипте он добавляет вещь 51413, 51414, 51415.... в количестве 1 штуки. 51413, 51414, 51415.... - ид предмета. 1 - Это количество. 0 - Это цена предмета по умолчанию. То есть предмет бесплатен. Цену можно поменять на другую. Code
player:SendVendorWindow(unit)
Если не будет этого значения он просто не откроет графу. Ну что же для начала я думаю достаточно. Далее я покажу как его можно усовершенствовать. Всем пока. Желаю вам удачи в создании ваших собственных скриптов.
There is nothing better than .LUA
Сообщение #
1 написано 04.10.2012 в 22:45