Вторник, 22.05.2012, 22:36
Установка и настройка серверов
Главная Регистрация Вход
Приветствую Вас, Посетитель · RSS

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
 
Страница 30 из 30«12282930
Модератор форума: romario515 
Все для эмуляторов игрового мира World of Warcraft » Всё для MaNGOS » Вопросы » Все вопросы по ГМ командам задавать тут. (ГМ команды)
Все вопросы по ГМ командам задавать тут.
theolaw Дата: Понедельник, 07.07.2008, 16:38 | Сообщение # 1 | Страна: Российская Федерация
Основатель проекта
Сообщений: 266
Зарегистрирован: 15.06.2008
Страна: Российская Федерация
Город: Мегион
Награды: 3
Rep: 776
:-(
Все вопросы по Гм командам задавать тут, будем отвечать smile

Внимание!
Перед тем как задавать вопрос посмотрите в MySQL в базе mangos таблицу command (там есть все команды).
Если это вопрос не решит, то задавайте вопрос указывая версию сервера, а желательно еще и ревизии.

Сообщение отредактировал perfecto - Пятница, 03.07.2009, 13:11
 
Maick Дата: Вторник, 06.07.2010, 10:12 | Сообщение # 436 | Страна: Казахстан
Подполковник
Сообщений: 137
Зарегистрирован: 05.07.2009
Страна: Казахстан
Город: Алматы
Награды: 2
Rep: 9
:-(
Quote (CHOPK)
а если придется затронуть ядро, что вообще надо сделать?

Quote (Maick)
P.S.S Порылся в сорсах Маногса, нашел файлы Level0.cpp, Level1.cpp, Level2.cpp, Level3.cpp (Отвечают за команды игроков с уровнем доступа 0-3) , там вроде как команды описаны , как добавлять новые хз, но думаю это все чем я могу помочь.

Я как бы начал расписывать. Я полагаю, что новую команду нужно расписывать в этих файлах. Например, возьмем файл Level3.cpp. Нашел в нем такой код:

Code
      
bool ChatHandler::HandleAddItemCommand(const char* args)
{
         if (!*args)
             return false;

         uint32 itemId = 0;

         if(args[0]=='[')                    // [name] manual form
         {
             char* citemName = strtok((char*)args, "]");

             if(citemName && citemName[0])
             {
                 std::string itemName = citemName+1;
                 WorldDatabase.escape_string(itemName);
                 QueryResult *result = WorldDatabase.PQuery("SELECT entry FROM item_template WHERE name = '%s'", itemName.c_str());
                 if (!result)
                 {
                     PSendSysMessage(LANG_COMMAND_COULDNOTFIND, citemName+1);
                     SetSentErrorMessage(true);
                     return false;
                 }
                 itemId = result->Fetch()->GetUInt16();
                 delete result;
             }
             else
                 return false;
         }
         else                    // item_id or [name] Shift-click form |color|Hitem:item_id:0:0:0|h[name]|h|r

(Это часть функции bool ChatHandler::HandleAddItemCommand(const char* args))

Данная часть, реализует команду Additem (Ну вы знаете, добавление итема в инвентарь), как видим из кода она обращается к БД:

Quote

SELECT entry FROM item_template WHERE name

В этой таблицы (item_template) он находит нужный вам итем по ID'у (который вы прописали в команде .additem id). После того, он проверяет Select игрока (если выбран добавляет ему, если нет, то вам):

Code

Player* pl = m_session->GetPlayer();
         Player* plTarget = getSelectedPlayer();
         if(!plTarget)
             plTarget = pl;

Если проверка завершена, то добавляется итем (по координатам в инвентаре и ID'у, поиск пустого слота):

Code
      
//Adding items
         uint32 noSpaceForCount = 0;

         // check space and find places
         ItemPosCountVec dest;
         uint8 msg = plTarget->CanStoreNewItem( [b]NULL_BAG, NULL_SLOT, dest, itemId, count, &noSpaceForCount [/b]);
         if( msg != EQUIP_ERR_OK )                    // convert to possible store amount
             count -= noSpaceForCount;

         if( count == 0 || dest.empty())                         // can't add any
         {
             PSendSysMessage(LANG_ITEM_CANNOT_CREATE, itemId, noSpaceForCount );
             SetSentErrorMessage(true);
             return false;
         }

Ах да, забыл, кол-во итемов тоже в фактический параметрах присутствует.

Почему я это все расписал?!, а потому что, если мы знаем точные координаты и id, той самой злополучной шмотки, то можем зависти процедуру Destroy.

Как ты правильно указал команду:

Quote (CHOPK)
Kvestor, попробуй .additem ID -1

Я покажу точный код этой команды:

Code

//Subtract
         if ([b]count[/b] < 0)
         {
             plTarget->DestroyItemCount(itemId, -count, true, false);
             PSendSysMessage(LANG_REMOVEITEM, itemId, -count, GetNameLink(plTarget).c_str());
             return true;
         }

Я думаю все понятно, если GM указал отрицательное кол-во итемов (...if (count < 0)...), то объект уничтожается из инвентаря (DestroyItemCount). Выше описанная моя мысль лишь поможет понять, как и где что нужно расписать, что бы новую команду создать.

Вот и все, если что забыл написать, дополните, если ошибся где укажите (исправлю, писал на память, то что думал, ошибки возможны). Я думаю хоть как-то поможет и ответит на твой вопрос. cool

P.S. Для примера я взял код из файла Level3.cpp, этот файл отвечает за команды 3го уровня аккаунта. Другие файлы ты найдешь:

Code
%Sources_dir%\src\game\

Level0.cpp - Обычный аккаунт
...
Level3.cpp - Администратор

P.S.S. Все. wacko


С Уважением,
Михаил


Сообщение отредактировал Maick - Вторник, 06.07.2010, 10:18
 
CHOPK Дата: Среда, 07.07.2010, 00:53 | Сообщение # 437 | Страна: Российская Федерация
Рядовой
Сообщений: 7
Зарегистрирован: 14.09.2008
Страна: Российская Федерация
Город: Калуга
Награды: 0
Rep: 0
:-(
Maick, а где эти файлы находятся? порылся по папкам в базе, не нашел.
 
saintdiablo Дата: Среда, 07.07.2010, 07:33 | Сообщение # 438 | Страна: Российская Федерация
Подполковник
Сообщений: 106
Зарегистрирован: 15.01.2010
Страна: Российская Федерация
Город: НСК
Награды: 1
Rep: 8
:-(
CHOPK, а это не база, это файлы из исходников ядра

в личке прошу не беспокоить, у меня диплом
 
Maick Дата: Среда, 07.07.2010, 11:04 | Сообщение # 439 | Страна: Казахстан
Подполковник
Сообщений: 137
Зарегистрирован: 05.07.2009
Страна: Казахстан
Город: Алматы
Награды: 2
Rep: 9
:-(
Quote (CHOPK)
а где эти файлы находятся?

saintdiablo, правильно подметил, я еще адресок подкину:
Quote (Maick)
%Sources_dir%\src\game\

%Sources_dir% - папка с исходниками Magnos

P.S. На всякий случай кинул скрин, той самой папке.

Прикрепления: 1297226.jpg(140Kb)


С Уважением,
Михаил
 
CHOPK Дата: Четверг, 08.07.2010, 12:37 | Сообщение # 440 | Страна: Российская Федерация
Рядовой
Сообщений: 7
Зарегистрирован: 14.09.2008
Страна: Российская Федерация
Город: Калуга
Награды: 0
Rep: 0
:-(
Maick, немного отклонюсь от тему, но где выковырять эти исходники, какой прогой, из каково файла? biggrin :D
я в этом не шарю, если не трудно, то опиши по точнее.

Сообщение отредактировал CHOPK - Четверг, 08.07.2010, 12:40
 
Maick Дата: Четверг, 08.07.2010, 12:50 | Сообщение # 441 | Страна: Казахстан
Подполковник
Сообщений: 137
Зарегистрирован: 05.07.2009
Страна: Казахстан
Город: Алматы
Награды: 2
Rep: 9
:-(
CHOPK, все очень просто, скачиваешь с репозитория исходники (интересующие тебя ядра).

Например:
Хорошие сорсы от insider42:
insider42 / scriptdev2 - http://github.com/insider42/scriptdev2
insider42 / mangos - http://github.com/insider42/mangos

VladimirMangos:
mangos - http://github.com/mangos/mangos

Создаешь папку у себя на компе (Например, server). Качаешь туда Git'ом исходники (как это сделать читать тут: http://mangos.org.ru/forum/3-591-1). Хмм...там вроде поподробнее расписано, зайдешь туда, там господин perfecto все уже расписал. (тема про компиляцию конечно, но начало как раз про то, что ты попросил) cool

Quote (CHOPK)
какой прогой, из каково файла

Да там, в принципе, ни каких ПО и не надо, чтобы достать эти файлы (кроме как клонить с репозитория Git'ом). А вот открывать их советую программой Notepad++
(качать тут: http://www.softportal.com/get-5406-notepad.html), хотя и обычный блокнот для этого подойдет. cool

Сами файлы, я уже вроде бы описывал выше (...else UP) biggrin . Пост 439, еще и скрин выложил.

Quote

я в этом не шарю, если не трудно, то опиши по точнее.

Все мы с этого начинали, все эти трудности понимали, другим помогали ... и продолжаем помогать. Расписал пока то, что понял из вопроса. dry


С Уважением,
Михаил


Сообщение отредактировал Maick - Четверг, 08.07.2010, 13:20
 
CHOPK Дата: Пятница, 09.07.2010, 13:15 | Сообщение # 442 | Страна: Российская Федерация
Рядовой
Сообщений: 7
Зарегистрирован: 14.09.2008
Страна: Российская Федерация
Город: Калуга
Награды: 0
Rep: 0
:-(
Maick, Спасибо!!!
 
edo055 Дата: Вторник, Сегодня, 21:06 | Сообщение # 443 | Страна: Армения
Рядовой
Сообщений: 1
Зарегистрирован: 20.05.2012
Страна: Армения
Город: Yerevan
Награды: 0
Rep: 0
:-(
как добавить команду в базу? 3.3.5а
 
rufus515 Дата: Вторник, Сегодня, 21:08 | Сообщение # 444 | Страна: Российская Федерация
Предводитель маньяков-извращенцев
Сообщений: 202
Зарегистрирован: 01.03.2011
Страна: Российская Федерация
Город: Самара
Награды: 8
Rep: 14
:-)
В готовый сервер уже никак не добавить. Всё это делается при компиляции.

Пойду на проект серверником(займусь серверной частью). Любой тип (РП,ПвП,ПвЕ). ОПЛАТА РАБОТЫ ОБЯЗАТЕЛЬНА
 
Все для эмуляторов игрового мира World of Warcraft » Всё для MaNGOS » Вопросы » Все вопросы по ГМ командам задавать тут. (ГМ команды)
Страница 30 из 30«12282930
Поиск:



MaNGOS - это объект-ориентированный Massively Multiplayer Online Role-Playing Game Server (MMORPGS).
MaNGOS проект с открытым исходным кодом, оригиналом которого является код проекта WoWD.
ManNGoS распространяется по GNU GENERAL PUBLIC LICENSE, по которой, распространение сервера и его исходников не нарушает авторские права Blizzard Entertainment.
World of Warcraft - торговая марка зарегистрированная Blizzard Entertainment. Copyright © Blizzard Entertainment.
Хостинг от uCoz