Как получить игрока, добившего моба
Как сделать ластхит моба? То есть мне нужно вывести в чат имя игрока, который нанес последний урон мобу. У меня была мысль сделать цикл: засовывать всех аттакеров в массив пока у моба хп >=0, когда здох - получить последнего аттакера, ЕГО ИМЯ. Кто может помочь, какие функции мне нужно юзать чтобы реализовать это??? А еще я прописал этот скрипт в бд мобу, но он его не видит... Что не так? Код
class battleChip : public CreatureScript { public: battleChip() : CreatureScript("battleChip"){} CreatureAI* GetAI(Creature* pCreature) const { return new battleChipAI(pCreature); } struct battleChipAI : public ScriptedAI { battleChipAI(Creature *c) : ScriptedAI(c) {} void UpdateAI(const uint32 diff) { // Updates Out of Combat if(me -> GetHealth() <= 100) { //me -> SummonGameObject(185128, 7413.423340, -2815.985107, 464.573029, 0.16594, 0, 0, 0, 0, 10); me -> SetHealth(999); } }
в бд в соответствующей колонке скрипта я написал battleChip - все же правильно, почему он его не читает??? Короче, помогите, плюсом не обижу=)
Сообщение #
1 отредактировано
Llfe -
Понедельник, 13.01.2014, 19:54
Джаст дие пробывал ? Код
void JustDied(Unit* /*killer*/) { instance->SetBossState(BOSS_NAME, DONE); Talk(SAY_DEATH); _JustDied(); }
upon the look
Сообщение #
2 написано 13.01.2014 в 20:30
void OnCreatureKill (Player* killer, Creature* killed) { if(killed->GetGUID() == ид твоего моба) std::string message; message = killer->GetName(); message += " убил "; message += killed->GetName(); sWorld->SendServerMessage(SERVER_MSG_STRING, message.c_str(), 0); }
Сообщение #
3 написано 13.01.2014 в 21:07
Блин, вижу что скрипт правильный... Но почему-то ничего не происходит. Я ведь правильно скрипт привязал к мобу (просто записал имя класса в бд)??? Просто ничего не происходит.=(
Сообщение #
4 отредактировано
Llfe -
Понедельник, 13.01.2014, 21:23
if(killed->GetEntry() == ид твоего моба) вот так будет правильнее.
Сообщение #
5 написано 13.01.2014 в 21:21
(удалено) Стоп, а как откуда и как этот метод получает аргументы, я что-то не пойму?Добавлено (13.01.2014, 21:35) --------------------------------------------- Кстати это не совсем то, мне нид, чтобы моба била толпа, а вывести одного добившего среди них, это разве сработает?
Сообщение #
6 отредактировано
Llfe -
Понедельник, 13.01.2014, 21:28
Цитата Llfe (
)
Кстати это не совсем то, мне нид, чтобы моба била толпа, а вывести одного добившего среди них, это разве сработает?
Код
void OnCreatureKill (Player* killer, Creature* killed) { if(killed->GetEntry() == ид твоего моба) { std::string message; message = killer->GetName(); message += " убил "; message += killed->GetName(); sWorld->SendServerMessage(SERVER_MSG_STRING, message.c_str(), 0); } }
И кодировка UTF-8 (без BOM)
Сообщение #
7 отредактировано
SPRaiT -
Понедельник, 13.01.2014, 21:40
Код
void DamageTaken(Unit* killer, uint32 &damage) { if(killer->GetTypeId() == TYPEID_PLAYER) if (damage >= me->GetHealth()) killer->ToPlayer()->GetSession()->SendNotification("%s killed by %s.", me->GetName().c_str(), killer->GetName().c_str()); }
Сообщение #
8 отредактировано
std_Suicide -
Понедельник, 13.01.2014, 21:48
Блин, посмотрите на мой скрипт, что может быть неправильным, почему его не читает моб???
Код
#include <string> #include "ScriptPCH.h" #include "ScriptedCreature.h" std::string *chipAttacers = new std::string[]; // The actual Boss Class: class battleChip : public CreatureScript { public: battleChip() : CreatureScript("battleChip"){} CreatureAI* GetAI(Creature* pCreature) const { return new battleChipAI(pCreature); } struct battleChipAI : public ScriptedAI { battleChipAI(Creature *c) : ScriptedAI(c) {} // Class Inits (Occurs only once @ script init: EventMap events; uint32 addztimer; uint32 _last_lk_special; // Also chatter. // What to reset @ first init, after boss died, players died or fled: void Reset() { } void EnterCombat(Unit* who) { } void DamageTaken(Unit* killer, uint32 &damage) { if(killer->GetTypeId() == TYPEID_PLAYER) if (damage >= me->GetHealth() && killer != me) killer->ToPlayer()->GetSession()->SendNotification("%s killed by %s.", me->GetName().c_str(), killer->GetName().c_str()); } void JustDied(Unit* /*killer*/) { } void KilledUnit(Unit* victim) { } //-- void UpdateAI(const uint32 diff) { // Updates Out of Combat //if(me -> GetHealth() <= 100) //{ //me -> SummonGameObject(185128, 7413.423340, -2815.985107, 464.573029, 0.16594, 0, 0, 0, 0, 10); //me -> SetHealth(999); //} } }; // Last but not least: void AddSC_boss_darksaw() { new battleChip(); } };
Сообщение #
9 написано 13.01.2014 в 21:50
а мой скрипт работал бы
Сообщение #
10 написано 13.01.2014 в 22:22
Да я даже ничего проверить не могу=(
Сообщение #
11 написано 13.01.2014 в 22:35
Эм.. Ну как бы Цитата Llfe (
)
void AddSC_boss_darksaw() { new battleChip(); } };
Находится в классе. Не так должно быть. Напиши вне класса.
Сообщение #
12 написано 13.01.2014 в 22:57
Код
#include <string> #include "ScriptPCH.h" #include "ScriptedCreature.h" std::string *chipAttacers = new std::string[]; // The actual Boss Class: class battleChip : public CreatureScript { public: battleChip() : CreatureScript("battleChip"){} CreatureAI* GetAI(Creature* pCreature) const { return new battleChipAI(pCreature); } struct battleChipAI : public ScriptedAI { battleChipAI(Creature *c) : ScriptedAI(c) {} // Class Inits (Occurs only once @ script init: EventMap events; uint32 addztimer; uint32 _last_lk_special; // Also chatter. // What to reset @ first init, after boss died, players died or fled: void Reset() { } void EnterCombat(Unit* who) { } void DamageTaken(Unit* killer, uint32 &damage) { if(killer->GetTypeId() == TYPEID_PLAYER) if (damage >= me->GetHealth() && killer != me) killer->ToPlayer()->GetSession()->SendNotification("%s killed by %s.", me->GetName().c_str(), killer->GetName().c_str()); } void JustDied(Unit* /*killer*/) { } void KilledUnit(Unit* victim) { } //-- void OnCreatureKill (Player* killer, Creature* killed) { if(killed->GetEntry() == 99105) { std::string message; message = killer->GetName(); message += " убил "; message += killed->GetName(); sWorld->SendServerMessage(SERVER_MSG_STRING, message.c_str(), 0); } } void UpdateAI(const uint32 diff) { // Updates Out of Combat if(me -> GetHealth() <= 100) { me -> SummonGameObject(185128, 7413.423340, -2815.985107, 464.573029, 0.16594, 0, 0, 0, 0, 10); me -> SetHealth(999); } } }; // Last but not least: }; void AddSC_battleChip() { new battleChip(); }
Все ровно
Сообщение #
13 написано 13.01.2014 в 23:17
Цитата std_Suicide (
)
if (damage >= me->GetHealth())
++
Сообщение #
14 написано 14.01.2014 в 02:08
помогите разобраться почему моб не видит скрипт... Надо просто в бд в колонке СкриптНейм написать battleChip и все?
Сообщение #
15 написано 14.01.2014 в 12:14
Сообщение #
16 написано 14.01.2014 в 14:44
Хоть я и не сделал кастом скрипт, я написал метод в уже существующий. Спасибо тебе, std_Suicide , все работает верно И остальным тоже спс=)
Сообщение #
17 написано 14.01.2014 в 17:23