|
|
Модератор форума: Dimitro |
Форум TrinityCore Патчи / Моды / Фиксы для Trinity [C++ FUN mod] Морфы игроков |
[C++ FUN mod] Морфы игроков |
Решил написать мод для FUN и РП серверов...
Все простенько пока... Суть мода: Создается таблица, в которой хранится гуид, игрока ид морфа и размер (.mod scale) и, при входе игрока, данные берутся из этой таблицы. Данные пока заносятся вручную. Будьте осторожны со значениями. Мод не тестил, ибо видуха сгорела. Просьба протестить. Подсоединяется к скрипт системе как обычный скрипт. В планах: Добавить дополнительных проверок, имплементировать вкл/выкл мода через конфиг, реализовать занесение данных в таблицу при использовании, собственно команд .mod morph и .mod scale. При репосте куда либо, просьба указывать автора патча. А то я смотрю на AC-WEB мои скрипты репостят от своего имени... Собственно код с запросом в базу characters: Code #include "ScriptPCH.h" /* create table `character_morphs`( `guid` int(10) UNSIGNED NOT NULL COMMENT 'Character guid' DEFAULT '0', `morph` int(5) UNSIGNED NOT NULL COMMENT 'Character morph' DEFAULT '0', `scale` float(2) UNSIGNED NOT NULL COMMENT 'Character scale' DEFAULT '1', PRIMARY KEY (`guid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT 'Charaster morphs'; */ class morphing_on_login : public PlayerScript { public: morphing_on_login() : PlayerScript("morphing_on_login") {} void OnLogin(Player* player) { int64 pguid = player->GetGUID(); QueryResult morph = CharacterDatabase.PQuery("SELECT morph from character_morphs WHERE guid = '%u'", pguid); QueryResult scale = CharacterDatabase.PQuery("SELECT scale from character_morphs WHERE guid = '%u'", pguid); if (morph) player->SetDisplayId(morph->Fetch()->GetUInt32()); if (scale) player->SetFloatValue(OBJECT_FIELD_SCALE_X, scale->Fetch()->GetFloat()); } }; void AddSC_morphing_on_login() { new morphing_on_login(); }
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку. |
Сообщение # 2 написано 23.10.2011 в 03:57
|
Да, именно так.
Причем не только морф, но и размер игрока.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 4 написано 23.10.2011 в 13:20
|
В данном коде выше, они слетают после смерти, надл его просто немного доделать.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 6 написано 27.01.2012 в 14:30
|
А я и не писал, что это сложно.
кто хочет, тот доделает, я просто информирую о некоторых недостатках скрипта.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 8 написано 27.01.2012 в 22:20
|
Quote (Dimitro) кто хочет, тот доделает, я просто информирую о некоторых недостатках скрипта. Это значит что сам ты этого сделать не можешь? (если не знаешь, то я подскажу как нужно было сделать) Просто в текущей версии этот скрипт вообще бесполезен. Он при любом деморфе вызванном любым скриптом или даже сменой формы будет скидывать тот установленный тобой displayid. P.S: желательно использовать подготовку запросов когда запрос выполняется больше одного раза. |
Это значит что просто мне конкретно лень его переписывать и этот скрипт лично мне больше не нужен.
Через PlayerScript правильно это не реализовать. Придется точечно править некоторые функции. А конкретно, Create и, возможно, InitDisplayIds из класса Player, также SetDisplayId из класса Unit.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку. |
Code /* create table `character_morphs`( `guid` int(10) UNSIGNED NOT NULL COMMENT 'Character guid' DEFAULT '0', `morph` int(5) UNSIGNED NOT NULL COMMENT 'Character morph' DEFAULT '0', `scale` float(2) UNSIGNED NOT NULL COMMENT 'Character scale' DEFAULT '1', PRIMARY KEY (`guid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT 'Charaster morphs'; */ Может кто нить выложить данную таблицу? Добавлено (17.09.2012, 00:56)
Сообщение # 11 написано 17.09.2012 в 00:56
|
А выше что тогда?
Сохраняете в sql без знаков комментария, вот вам и дамп.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 12 написано 17.09.2012 в 01:29
|
Посмотреть на скрипт, подумать, сделать по примеру.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 14 написано 17.09.2012 в 19:20
|
Добавляю
QueryResult aura = CharacterDatabase.PQuery("SELECT aura from character_morphs WHERE guid = '%u'", pguid); player->CastSpell(aura->Fetch()->GetUInt32()) Ошибка на "->" отсутствуют экземпляры перегруженная функция player::CastSpell, соответствующие списку аргументов
Новый сервер - http://lk-wow.ru
Сообщение # 15 написано 17.09.2012 в 19:25
|
Учите С++.
У функции CastSpell не один аргумент.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 16 написано 17.09.2012 в 19:30
|
Сделал по другому примеру и работает
if (player->HasAura(aura->Fetch()->GetUInt32(), true)) { player->CLOSE_GOSSIP_MENU(); } else { player->CLOSE_GOSSIP_MENU(); player->CastSpell(player, aura->Fetch()->GetUInt32(), true);
Новый сервер - http://lk-wow.ru
Сообщение # 17 написано 17.09.2012 в 19:56
|
Quote (nrj45) player->CLOSE_GOSSIP_MENU(); Это тут зачем? Зачем бездумно пихать ненужный код?
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 18 написано 17.09.2012 в 21:02
|
| |||
| |||