Skip to content

Commit

Permalink
UPDATED: Eluna
Browse files Browse the repository at this point in the history
Made gossip to stop the spell, added mute, added player combat hooks
  • Loading branch information
Rochet2 committed May 19, 2013
1 parent 2e13b55 commit d121c33
Show file tree
Hide file tree
Showing 7 changed files with 74 additions and 5 deletions.
2 changes: 2 additions & 0 deletions src/server/LuaEngine/LuaEngine.h
Expand Up @@ -143,6 +143,8 @@ enum ServerEvents
PLAYER_EVENT_ON_LOGIN_FIRST = 75, // (event, player)
PLAYER_EVENT_ON_CAN_USE_ITEM = 76, // (event, player, itemEntry)
PLAYER_EVENT_ON_LOOT_ITEM = 77, // (event, player, item, count)
PLAYER_EVENT_ON_ENTER_COMBAT = 78, // (event, player, enemy)
PLAYER_EVENT_ON_LEAVE_COMBAT = 79, // (event, player)

SERVER_EVENT_COUNT
};
Expand Down
5 changes: 3 additions & 2 deletions src/server/LuaEngine/LuaFunctions.h
Expand Up @@ -473,8 +473,9 @@ ElunaRegister<Unit> UnitMethods[] =
{"Emote", &LuaUnit::Emote}, // :Emote(emote) -- UNDOCUMENTED
{"CountPctFromCurHealth", &LuaUnit::CountPctFromCurHealth}, // :CountPctFromCurHealth(int32 pct) -- UNDOCUMENTED
{"CountPctFromMaxHealth", &LuaUnit::CountPctFromMaxHealth}, // :CountPctFromMaxHealth() -- UNDOCUMENTED
{"Dismount", &LuaUnit::Dismount}, // :Dismount() - Dismounts the unit. UNDOCUMENTED
{"Mount", &LuaUnit::Mount}, // :Mount(displayId) - Mounts the unit on the specified displayId. UNDOCUMENTED
{"Dismount", &LuaUnit::Dismount}, // :Dismount() - Dismounts the unit. UNDOCUMENTED
{"Mount", &LuaUnit::Mount}, // :Mount(displayId) - Mounts the unit on the specified displayId. UNDOCUMENTED
{"Mute", &LuaUnit::Mute}, // :Mute(time[, reason]) - Mutes the player for given time in seconds. UNDOCUMENTED

/* Vehicle */
{"AddVehiclePassenger", &LuaUnit::AddVehiclePassenger}, // :AddVehiclePassenger(unit, seatId) - Adds a passenger to the vehicle by specifying a unit and seatId
Expand Down
24 changes: 24 additions & 0 deletions src/server/LuaEngine/LuaHooks.cpp
Expand Up @@ -280,6 +280,7 @@ class Eluna_HookScript : public HookScript
lua_pushnil(sEluna->LuaState);
sEluna->ExecuteCall(4, 0);
}
player->SendEquipError((InventoryResult)83, item, NULL);
return true;
}
bool OnExpire(Player* player, ItemTemplate const* proto)
Expand Down Expand Up @@ -792,6 +793,29 @@ class Eluna_PlayerScript : public PlayerScript
{
public:
Eluna_PlayerScript() : PlayerScript("Eluna_PlayerScript") { }
void OnPlayerEnterCombat(Player* player, Unit* enemy)
{
for (std::vector<int>::iterator itr = sEluna->ServerEventBindings[PLAYER_EVENT_ON_ENTER_COMBAT].begin();
itr != sEluna->ServerEventBindings[PLAYER_EVENT_ON_ENTER_COMBAT].end(); ++itr)
{
sEluna->BeginCall((*itr));
sEluna->PushUnsigned(sEluna->LuaState, PLAYER_EVENT_ON_ENTER_COMBAT);
sEluna->PushUnit(sEluna->LuaState, player);
sEluna->PushUnit(sEluna->LuaState, enemy);
sEluna->ExecuteCall(3, 0);
}
}
void OnPlayerLeaveCombat(Player* player)
{
for (std::vector<int>::iterator itr = sEluna->ServerEventBindings[PLAYER_EVENT_ON_LEAVE_COMBAT].begin();
itr != sEluna->ServerEventBindings[PLAYER_EVENT_ON_LEAVE_COMBAT].end(); ++itr)
{
sEluna->BeginCall((*itr));
sEluna->PushUnsigned(sEluna->LuaState, PLAYER_EVENT_ON_LEAVE_COMBAT);
sEluna->PushUnit(sEluna->LuaState, player);
sEluna->ExecuteCall(2, 0);
}
}
void OnPVPKill(Player* killer, Player* killed)
{
for (std::vector<int>::iterator itr = sEluna->ServerEventBindings[PLAYER_EVENT_ON_KILL_PLAYER].begin();
Expand Down
21 changes: 20 additions & 1 deletion src/server/LuaEngine/UnitMethods.h
Expand Up @@ -12,6 +12,25 @@
class LuaUnit
{
public:
// Mute(time[, reason])
static int Mute(lua_State* L, Unit* unit)
{
TO_PLAYER();

uint32 muteseconds = luaL_checkunsigned(L, 1);
const char* reason = luaL_checkstring(L, 2);

PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_MUTE_TIME);
int64 muteTime = time(NULL) + muteseconds;
player->GetSession()->m_muteTime = muteTime;
stmt->setInt64(0, muteTime);
stmt->setString(1, reason ? reason : "");
stmt->setString(2, "Eluna");
stmt->setUInt32(3, player->GetSession()->GetAccountId());
LoginDatabase.Execute(stmt);
return 0;
}

// GetHeight(X, Y)
static int GetHeight(lua_State* L, Unit* unit)
{
Expand Down Expand Up @@ -3651,7 +3670,7 @@ class LuaUnit
str = "Priest";
break;
case 6:
str = "DeathKnight";
str = "Death Knight";
break;
case 7:
str = "Shaman";
Expand Down
9 changes: 7 additions & 2 deletions src/server/game/Entities/Unit/Unit.cpp
Expand Up @@ -11734,6 +11734,8 @@ void Unit::SetInCombatState(bool PvP, Unit* enemy)
if (!(creature->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_MOUNTED_COMBAT))
Dismount();
}
else if(Player* player = ToPlayer())
sScriptMgr->OnPlayerEnterCombat(player, enemy);

for (Unit::ControlList::iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr)
{
Expand Down Expand Up @@ -11767,8 +11769,11 @@ void Unit::ClearInCombat()
else if (!isCharmed())
return;
}
else
ToPlayer()->UpdatePotionCooldown();
else if(Player* player = ToPlayer())
{
player->UpdatePotionCooldown();
sScriptMgr->OnPlayerLeaveCombat(player);
}

RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PET_IN_COMBAT);
}
Expand Down
10 changes: 10 additions & 0 deletions src/server/game/Scripting/ScriptMgr.cpp
Expand Up @@ -1368,6 +1368,16 @@ void ScriptMgr::OnPlayerUpdateZone(Player* player, uint32 newZone, uint32 newAre
FOREACH_SCRIPT(PlayerScript)->OnUpdateZone(player, newZone, newArea);
}

void ScriptMgr::OnPlayerEnterCombat(Player* player, Unit* enemy)
{
FOREACH_SCRIPT(PlayerScript)->OnPlayerEnterCombat(player, enemy);
}

void ScriptMgr::OnPlayerLeaveCombat(Player* player)
{
FOREACH_SCRIPT(PlayerScript)->OnPlayerLeaveCombat(player);
}

// Guild
void ScriptMgr::OnGuildAddMember(Guild* guild, Player* player, uint8& plRank)
{
Expand Down
8 changes: 8 additions & 0 deletions src/server/game/Scripting/ScriptMgr.h
Expand Up @@ -757,6 +757,12 @@ class PlayerScript : public UnitScript

// Called when a player changes to a new map (after moving to new map)
virtual void OnMapChanged(Player* /*player*/) { }

// Called when a player enters combat
virtual void OnPlayerEnterCombat(Player* /*player*/, Unit* /*enemy*/) { }

// Called when a player leaves combat
virtual void OnPlayerLeaveCombat(Player* /*player*/) { }
};

class GuildScript : public ScriptObject
Expand Down Expand Up @@ -1031,6 +1037,8 @@ class ScriptMgr
void OnPlayerSave(Player* player);
void OnPlayerBindToInstance(Player* player, Difficulty difficulty, uint32 mapid, bool permanent);
void OnPlayerUpdateZone(Player* player, uint32 newZone, uint32 newArea);
void OnPlayerEnterCombat(Player* player, Unit* enemy);
void OnPlayerLeaveCombat(Player* player);

public: /* GuildScript */

Expand Down

0 comments on commit d121c33

Please sign in to comment.